@usefragments/ui 1.5.4 → 1.6.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 (497) hide show
  1. package/README.md +1 -1
  2. package/dist/assets/ui.css +8808 -5810
  3. package/dist/chart.cjs +7 -20
  4. package/dist/chart.js +7 -20
  5. package/dist/colorpicker.cjs +2 -1
  6. package/dist/colorpicker.js +2 -1
  7. package/dist/components/Accordion/Accordion.module.scss.cjs +8 -8
  8. package/dist/components/Accordion/Accordion.module.scss.js +8 -8
  9. package/dist/components/Alert/Alert.module.scss.cjs +12 -12
  10. package/dist/components/Alert/Alert.module.scss.js +12 -12
  11. package/dist/components/AppShell/AppShell.module.scss.cjs +14 -14
  12. package/dist/components/AppShell/AppShell.module.scss.js +14 -14
  13. package/dist/components/AppShell/index.cjs +5 -3
  14. package/dist/components/AppShell/index.d.ts +4 -2
  15. package/dist/components/AppShell/index.d.ts.map +1 -1
  16. package/dist/components/AppShell/index.js +5 -3
  17. package/dist/components/Avatar/Avatar.module.scss.cjs +17 -14
  18. package/dist/components/Avatar/Avatar.module.scss.js +17 -14
  19. package/dist/components/Avatar/index.cjs +100 -118
  20. package/dist/components/Avatar/index.d.ts +7 -5
  21. package/dist/components/Avatar/index.d.ts.map +1 -1
  22. package/dist/components/Avatar/index.js +100 -118
  23. package/dist/components/Badge/Badge.module.scss.cjs +19 -19
  24. package/dist/components/Badge/Badge.module.scss.js +19 -19
  25. package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +14 -14
  26. package/dist/components/BentoGrid/BentoGrid.module.scss.js +14 -14
  27. package/dist/components/Box/Box.module.scss.cjs +152 -152
  28. package/dist/components/Box/Box.module.scss.js +152 -152
  29. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.cjs +8 -8
  30. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +8 -8
  31. package/dist/components/Button/Button.module.scss.cjs +14 -14
  32. package/dist/components/Button/Button.module.scss.js +14 -14
  33. package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs +15 -15
  34. package/dist/components/ButtonGroup/ButtonGroup.module.scss.js +15 -15
  35. package/dist/components/Card/Card.module.scss.cjs +18 -18
  36. package/dist/components/Card/Card.module.scss.js +18 -18
  37. package/dist/components/Chart/Chart.module.scss.cjs +15 -15
  38. package/dist/components/Chart/Chart.module.scss.js +15 -15
  39. package/dist/components/Chart/index.d.ts +7 -7
  40. package/dist/components/Chart/index.d.ts.map +1 -1
  41. package/dist/components/Checkbox/Checkbox.module.scss.cjs +9 -15
  42. package/dist/components/Checkbox/Checkbox.module.scss.js +9 -15
  43. package/dist/components/Checkbox/index.cjs +4 -6
  44. package/dist/components/Checkbox/index.d.ts.map +1 -1
  45. package/dist/components/Checkbox/index.js +4 -6
  46. package/dist/components/Chip/Chip.module.scss.cjs +15 -15
  47. package/dist/components/Chip/Chip.module.scss.js +15 -15
  48. package/dist/components/Chip/index.cjs +4 -5
  49. package/dist/components/Chip/index.d.ts +1 -1
  50. package/dist/components/Chip/index.d.ts.map +1 -1
  51. package/dist/components/Chip/index.js +2 -3
  52. package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +22 -22
  53. package/dist/components/CodeBlock/CodeBlock.module.scss.js +22 -22
  54. package/dist/components/Collapsible/Collapsible.module.scss.cjs +9 -12
  55. package/dist/components/Collapsible/Collapsible.module.scss.js +9 -12
  56. package/dist/components/Collapsible/index.cjs +3 -2
  57. package/dist/components/Collapsible/index.d.ts +3 -3
  58. package/dist/components/Collapsible/index.d.ts.map +1 -1
  59. package/dist/components/Collapsible/index.js +3 -2
  60. package/dist/components/ColorPicker/ColorPicker.module.scss.cjs +16 -16
  61. package/dist/components/ColorPicker/ColorPicker.module.scss.js +16 -16
  62. package/dist/components/ColorPicker/index.d.ts.map +1 -1
  63. package/dist/components/Combobox/Combobox.module.scss.cjs +21 -27
  64. package/dist/components/Combobox/Combobox.module.scss.js +21 -27
  65. package/dist/components/Combobox/index.cjs +4 -4
  66. package/dist/components/Combobox/index.d.ts.map +1 -1
  67. package/dist/components/Combobox/index.js +4 -4
  68. package/dist/components/Command/Command.module.scss.cjs +11 -11
  69. package/dist/components/Command/Command.module.scss.js +11 -11
  70. package/dist/components/ConversationList/ConversationList.module.scss.cjs +11 -14
  71. package/dist/components/ConversationList/ConversationList.module.scss.js +11 -14
  72. package/dist/components/ConversationList/index.cjs +40 -44
  73. package/dist/components/ConversationList/index.d.ts +3 -3
  74. package/dist/components/ConversationList/index.d.ts.map +1 -1
  75. package/dist/components/ConversationList/index.js +40 -44
  76. package/dist/components/DataTable/DataTable.module.scss.cjs +32 -56
  77. package/dist/components/DataTable/DataTable.module.scss.js +32 -56
  78. package/dist/components/DataTable/index.d.ts +5 -4
  79. package/dist/components/DataTable/index.d.ts.map +1 -1
  80. package/dist/components/DatePicker/DatePicker.module.scss.cjs +33 -33
  81. package/dist/components/DatePicker/DatePicker.module.scss.js +33 -33
  82. package/dist/components/DatePicker/index.d.ts.map +1 -1
  83. package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
  84. package/dist/components/Dialog/Dialog.module.scss.js +14 -14
  85. package/dist/components/Drawer/Drawer.module.scss.cjs +31 -28
  86. package/dist/components/Drawer/Drawer.module.scss.js +31 -28
  87. package/dist/components/Drawer/index.cjs +1 -1
  88. package/dist/components/Drawer/index.js +1 -1
  89. package/dist/components/Editor/Editor.module.scss.cjs +23 -23
  90. package/dist/components/Editor/Editor.module.scss.js +23 -23
  91. package/dist/components/EmptyState/EmptyState.module.scss.cjs +12 -12
  92. package/dist/components/EmptyState/EmptyState.module.scss.js +12 -12
  93. package/dist/components/Field/Field.module.scss.cjs +8 -5
  94. package/dist/components/Field/Field.module.scss.js +8 -5
  95. package/dist/components/Field/index.cjs +10 -1
  96. package/dist/components/Field/index.d.ts +9 -2
  97. package/dist/components/Field/index.d.ts.map +1 -1
  98. package/dist/components/Field/index.js +10 -1
  99. package/dist/components/Fieldset/Fieldset.module.scss.cjs +3 -3
  100. package/dist/components/Fieldset/Fieldset.module.scss.js +3 -3
  101. package/dist/components/Form/Form.module.scss.cjs +5 -2
  102. package/dist/components/Form/Form.module.scss.js +5 -2
  103. package/dist/components/Form/index.cjs +6 -1
  104. package/dist/components/Form/index.d.ts +8 -3
  105. package/dist/components/Form/index.d.ts.map +1 -1
  106. package/dist/components/Form/index.js +6 -1
  107. package/dist/components/Grid/Grid.module.scss.cjs +54 -72
  108. package/dist/components/Grid/Grid.module.scss.js +54 -72
  109. package/dist/components/Grid/index.cjs +57 -77
  110. package/dist/components/Grid/index.d.ts +11 -11
  111. package/dist/components/Grid/index.d.ts.map +1 -1
  112. package/dist/components/Grid/index.js +57 -77
  113. package/dist/components/Header/Header.module.scss.cjs +33 -33
  114. package/dist/components/Header/Header.module.scss.js +33 -33
  115. package/dist/components/Header/index.cjs +2 -1
  116. package/dist/components/Header/index.d.ts.map +1 -1
  117. package/dist/components/Header/index.js +2 -1
  118. package/dist/components/Icon/Icon.module.scss.cjs +29 -8
  119. package/dist/components/Icon/Icon.module.scss.js +30 -9
  120. package/dist/components/Icon/index.cjs +30 -48
  121. package/dist/components/Icon/index.d.ts +6 -6
  122. package/dist/components/Icon/index.d.ts.map +1 -1
  123. package/dist/components/Icon/index.js +30 -48
  124. package/dist/components/IconButton/IconButton.module.scss.cjs +8 -8
  125. package/dist/components/IconButton/IconButton.module.scss.js +8 -8
  126. package/dist/components/Input/Input.module.scss.cjs +19 -25
  127. package/dist/components/Input/Input.module.scss.js +19 -25
  128. package/dist/components/Input/index.cjs +1 -2
  129. package/dist/components/Input/index.d.ts.map +1 -1
  130. package/dist/components/Input/index.js +1 -2
  131. package/dist/components/Link/Link.module.scss.cjs +10 -10
  132. package/dist/components/Link/Link.module.scss.js +10 -10
  133. package/dist/components/List/List.module.scss.cjs +19 -19
  134. package/dist/components/List/List.module.scss.js +19 -19
  135. package/dist/components/List/index.cjs +4 -7
  136. package/dist/components/List/index.d.ts.map +1 -1
  137. package/dist/components/List/index.js +4 -7
  138. package/dist/components/Listbox/Listbox.module.scss.cjs +9 -9
  139. package/dist/components/Listbox/Listbox.module.scss.js +9 -9
  140. package/dist/components/Loading/Loading.module.scss.cjs +30 -30
  141. package/dist/components/Loading/Loading.module.scss.js +30 -30
  142. package/dist/components/Loading/index.cjs +39 -67
  143. package/dist/components/Loading/index.d.ts +6 -6
  144. package/dist/components/Loading/index.d.ts.map +1 -1
  145. package/dist/components/Loading/index.js +39 -67
  146. package/dist/components/Main/Main.module.scss.cjs +7 -7
  147. package/dist/components/Main/Main.module.scss.js +7 -7
  148. package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
  149. package/dist/components/Markdown/Markdown.module.scss.js +1 -1
  150. package/dist/components/Menu/Menu.module.scss.cjs +16 -16
  151. package/dist/components/Menu/Menu.module.scss.js +16 -16
  152. package/dist/components/Menu/index.cjs +19 -61
  153. package/dist/components/Menu/index.d.ts +10 -10
  154. package/dist/components/Menu/index.d.ts.map +1 -1
  155. package/dist/components/Menu/index.js +19 -61
  156. package/dist/components/Message/Message.module.scss.cjs +18 -21
  157. package/dist/components/Message/Message.module.scss.js +18 -21
  158. package/dist/components/Message/index.cjs +15 -2
  159. package/dist/components/Message/index.d.ts.map +1 -1
  160. package/dist/components/Message/index.js +15 -2
  161. package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +28 -28
  162. package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +28 -28
  163. package/dist/components/Pagination/Pagination.module.scss.cjs +18 -9
  164. package/dist/components/Pagination/Pagination.module.scss.js +19 -10
  165. package/dist/components/Pagination/index.cjs +5 -2
  166. package/dist/components/Pagination/index.d.ts +3 -1
  167. package/dist/components/Pagination/index.d.ts.map +1 -1
  168. package/dist/components/Pagination/index.js +5 -2
  169. package/dist/components/Popover/Popover.module.scss.cjs +10 -10
  170. package/dist/components/Popover/Popover.module.scss.js +10 -10
  171. package/dist/components/Progress/Progress.module.scss.cjs +29 -32
  172. package/dist/components/Progress/Progress.module.scss.js +29 -32
  173. package/dist/components/Progress/geometry.cjs +30 -0
  174. package/dist/components/Progress/geometry.d.ts +8 -0
  175. package/dist/components/Progress/geometry.d.ts.map +1 -0
  176. package/dist/components/Progress/geometry.js +30 -0
  177. package/dist/components/Progress/index.cjs +40 -29
  178. package/dist/components/Progress/index.d.ts +4 -3
  179. package/dist/components/Progress/index.d.ts.map +1 -1
  180. package/dist/components/Progress/index.js +40 -29
  181. package/dist/components/Prompt/Prompt.module.scss.cjs +29 -29
  182. package/dist/components/Prompt/Prompt.module.scss.js +29 -29
  183. package/dist/components/Prompt/index.cjs +5 -4
  184. package/dist/components/Prompt/index.d.ts.map +1 -1
  185. package/dist/components/Prompt/index.js +5 -4
  186. package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +15 -21
  187. package/dist/components/RadioGroup/RadioGroup.module.scss.js +15 -21
  188. package/dist/components/RadioGroup/index.cjs +7 -6
  189. package/dist/components/RadioGroup/index.d.ts.map +1 -1
  190. package/dist/components/RadioGroup/index.js +7 -6
  191. package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +7 -22
  192. package/dist/components/ScrollArea/ScrollArea.module.scss.js +7 -22
  193. package/dist/components/ScrollArea/index.cjs +66 -42
  194. package/dist/components/ScrollArea/index.d.ts +3 -2
  195. package/dist/components/ScrollArea/index.d.ts.map +1 -1
  196. package/dist/components/ScrollArea/index.js +66 -42
  197. package/dist/components/ScrollArea/scroll-state.cjs +58 -0
  198. package/dist/components/ScrollArea/scroll-state.d.ts +16 -0
  199. package/dist/components/ScrollArea/scroll-state.d.ts.map +1 -0
  200. package/dist/components/ScrollArea/scroll-state.js +58 -0
  201. package/dist/components/Select/Select.module.scss.cjs +21 -21
  202. package/dist/components/Select/Select.module.scss.js +21 -21
  203. package/dist/components/Select/index.cjs +3 -2
  204. package/dist/components/Select/index.d.ts.map +1 -1
  205. package/dist/components/Select/index.js +3 -2
  206. package/dist/components/Separator/Separator.module.scss.cjs +13 -10
  207. package/dist/components/Separator/Separator.module.scss.js +13 -10
  208. package/dist/components/Separator/index.cjs +37 -38
  209. package/dist/components/Separator/index.d.ts +4 -4
  210. package/dist/components/Separator/index.d.ts.map +1 -1
  211. package/dist/components/Separator/index.js +37 -38
  212. package/dist/components/Sidebar/Sidebar.module.scss.cjs +43 -43
  213. package/dist/components/Sidebar/Sidebar.module.scss.js +43 -43
  214. package/dist/components/Sidebar/index.cjs +5 -3
  215. package/dist/components/Sidebar/index.d.ts +6 -1
  216. package/dist/components/Sidebar/index.d.ts.map +1 -1
  217. package/dist/components/Sidebar/index.js +5 -3
  218. package/dist/components/Skeleton/Skeleton.module.scss.cjs +50 -38
  219. package/dist/components/Skeleton/Skeleton.module.scss.js +50 -38
  220. package/dist/components/Skeleton/index.cjs +41 -55
  221. package/dist/components/Skeleton/index.d.ts +7 -7
  222. package/dist/components/Skeleton/index.d.ts.map +1 -1
  223. package/dist/components/Skeleton/index.js +41 -55
  224. package/dist/components/Slider/Slider.module.scss.cjs +12 -12
  225. package/dist/components/Slider/Slider.module.scss.js +12 -12
  226. package/dist/components/Stack/Stack.module.scss.cjs +25 -45
  227. package/dist/components/Stack/Stack.module.scss.js +25 -45
  228. package/dist/components/Stack/index.cjs +106 -101
  229. package/dist/components/Stack/index.d.ts +7 -7
  230. package/dist/components/Stack/index.d.ts.map +1 -1
  231. package/dist/components/Stack/index.js +106 -101
  232. package/dist/components/Switch/Switch.module.scss.cjs +32 -0
  233. package/dist/components/Switch/Switch.module.scss.js +32 -0
  234. package/dist/components/{Toggle → Switch}/index.cjs +9 -14
  235. package/dist/components/Switch/index.d.ts +37 -1
  236. package/dist/components/Switch/index.d.ts.map +1 -1
  237. package/dist/components/{Toggle → Switch}/index.js +5 -10
  238. package/dist/components/Table/Table.module.scss.cjs +18 -27
  239. package/dist/components/Table/Table.module.scss.js +18 -27
  240. package/dist/components/Table/index.d.ts +6 -5
  241. package/dist/components/Table/index.d.ts.map +1 -1
  242. package/dist/components/TableOfContents/TableOfContents.module.scss.cjs +15 -15
  243. package/dist/components/TableOfContents/TableOfContents.module.scss.js +15 -15
  244. package/dist/components/Tabs/Tabs.module.scss.cjs +12 -12
  245. package/dist/components/Tabs/Tabs.module.scss.js +12 -12
  246. package/dist/components/Tabs/index.cjs +2 -2
  247. package/dist/components/Tabs/index.js +2 -2
  248. package/dist/components/Text/Text.module.scss.cjs +93 -57
  249. package/dist/components/Text/Text.module.scss.js +93 -57
  250. package/dist/components/Text/index.cjs +14 -6
  251. package/dist/components/Text/index.d.ts +25 -15
  252. package/dist/components/Text/index.d.ts.map +1 -1
  253. package/dist/components/Text/index.js +14 -6
  254. package/dist/components/Textarea/Textarea.module.scss.cjs +26 -23
  255. package/dist/components/Textarea/Textarea.module.scss.js +26 -23
  256. package/dist/components/Textarea/index.cjs +5 -10
  257. package/dist/components/Textarea/index.d.ts.map +1 -1
  258. package/dist/components/Textarea/index.js +5 -10
  259. package/dist/components/Theme/context.cjs +39 -0
  260. package/dist/components/Theme/context.d.ts +21 -0
  261. package/dist/components/Theme/context.d.ts.map +1 -0
  262. package/dist/components/Theme/context.js +22 -0
  263. package/dist/components/Theme/index.cjs +14 -209
  264. package/dist/components/Theme/index.d.ts +4 -37
  265. package/dist/components/Theme/index.d.ts.map +1 -1
  266. package/dist/components/Theme/index.js +9 -204
  267. package/dist/components/{Theme → ThemeToggle}/ThemeToggle.module.scss.cjs +6 -6
  268. package/dist/components/ThemeToggle/ThemeToggle.module.scss.js +23 -0
  269. package/dist/components/ThemeToggle/index.cjs +115 -0
  270. package/dist/components/ThemeToggle/index.d.ts +21 -0
  271. package/dist/components/ThemeToggle/index.d.ts.map +1 -0
  272. package/dist/components/ThemeToggle/index.js +115 -0
  273. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +13 -13
  274. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +13 -13
  275. package/dist/components/ThinkingIndicator/index.cjs +34 -41
  276. package/dist/components/ThinkingIndicator/index.d.ts +4 -4
  277. package/dist/components/ThinkingIndicator/index.d.ts.map +1 -1
  278. package/dist/components/ThinkingIndicator/index.js +34 -41
  279. package/dist/components/Toast/Toast.module.scss.cjs +20 -20
  280. package/dist/components/Toast/Toast.module.scss.js +20 -20
  281. package/dist/components/Toggle/index.d.ts +2 -42
  282. package/dist/components/Toggle/index.d.ts.map +1 -1
  283. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +20 -20
  284. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +20 -20
  285. package/dist/components/ToggleGroup/index.cjs +3 -2
  286. package/dist/components/ToggleGroup/index.d.ts +2 -1
  287. package/dist/components/ToggleGroup/index.d.ts.map +1 -1
  288. package/dist/components/ToggleGroup/index.js +3 -2
  289. package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
  290. package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
  291. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.cjs +1 -1
  292. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.js +1 -1
  293. package/dist/data-table.cjs +12 -9
  294. package/dist/data-table.js +12 -9
  295. package/dist/datepicker.cjs +2 -1
  296. package/dist/datepicker.js +2 -1
  297. package/dist/index.cjs +100 -98
  298. package/dist/index.d.ts +2 -2
  299. package/dist/index.d.ts.map +1 -1
  300. package/dist/index.js +4 -2
  301. package/dist/markdown.cjs +1 -1
  302. package/dist/markdown.js +2 -2
  303. package/dist/measurements/generated.cjs +296 -0
  304. package/dist/measurements/generated.d.ts +261 -0
  305. package/dist/measurements/generated.d.ts.map +1 -0
  306. package/dist/measurements/generated.js +296 -0
  307. package/dist/measurements/index.d.ts +2 -0
  308. package/dist/measurements/index.d.ts.map +1 -0
  309. package/dist/measurements.cjs +6 -0
  310. package/dist/measurements.js +6 -0
  311. package/dist/recipes/popup.cjs +14 -0
  312. package/dist/recipes/popup.d.ts +4 -0
  313. package/dist/recipes/popup.d.ts.map +1 -0
  314. package/dist/recipes/popup.js +14 -0
  315. package/dist/recipes/table-chrome.cjs +18 -0
  316. package/dist/recipes/table-chrome.d.ts +10 -0
  317. package/dist/recipes/table-chrome.d.ts.map +1 -0
  318. package/dist/recipes/table-chrome.js +18 -0
  319. package/dist/table.cjs +5 -2
  320. package/dist/table.js +5 -2
  321. package/dist/utils/layout-spacing.cjs +27 -0
  322. package/dist/utils/layout-spacing.d.ts +5 -0
  323. package/dist/utils/layout-spacing.d.ts.map +1 -0
  324. package/dist/utils/layout-spacing.js +27 -0
  325. package/dist/utils/seed-derivation.cjs +4 -42
  326. package/dist/utils/seed-derivation.d.ts +4 -3
  327. package/dist/utils/seed-derivation.d.ts.map +1 -1
  328. package/dist/utils/seed-derivation.js +4 -42
  329. package/dist/utils/theme-presets.cjs +1 -0
  330. package/dist/utils/theme-presets.d.ts +3 -2
  331. package/dist/utils/theme-presets.d.ts.map +1 -1
  332. package/dist/utils/theme-presets.js +1 -0
  333. package/fragments.json +1 -1
  334. package/package.json +23 -4
  335. package/src/components/Accordion/Accordion.module.scss +31 -52
  336. package/src/components/Alert/Alert.module.scss +28 -44
  337. package/src/components/AppShell/AppShell.module.scss +6 -3
  338. package/src/components/AppShell/index.tsx +8 -4
  339. package/src/components/Avatar/Avatar.module.scss +22 -60
  340. package/src/components/Avatar/index.tsx +152 -146
  341. package/src/components/Badge/Badge.module.scss +51 -46
  342. package/src/components/BentoGrid/BentoGrid.module.scss +11 -32
  343. package/src/components/Box/Box.module.scss +253 -81
  344. package/src/components/Breadcrumbs/Breadcrumbs.module.scss +10 -11
  345. package/src/components/Button/Button.module.scss +52 -57
  346. package/src/components/ButtonGroup/ButtonGroup.module.scss +5 -5
  347. package/src/components/Card/Card.consumer-fixture.module.scss +8 -0
  348. package/src/components/Card/Card.module.scss +211 -175
  349. package/src/components/Chart/Chart.module.scss +28 -29
  350. package/src/components/Chart/index.tsx +40 -53
  351. package/src/components/Checkbox/Checkbox.module.scss +43 -64
  352. package/src/components/Checkbox/index.tsx +4 -9
  353. package/src/components/Chip/Chip.contract.json +4 -3
  354. package/src/components/Chip/Chip.module.scss +23 -34
  355. package/src/components/Chip/index.tsx +3 -4
  356. package/src/components/CodeBlock/CodeBlock.module.scss +102 -215
  357. package/src/components/Collapsible/Collapsible.module.scss +29 -63
  358. package/src/components/Collapsible/index.tsx +22 -26
  359. package/src/components/ColorPicker/ColorPicker.module.scss +42 -24
  360. package/src/components/ColorPicker/index.tsx +2 -1
  361. package/src/components/Combobox/Combobox.module.scss +60 -73
  362. package/src/components/Combobox/index.tsx +7 -5
  363. package/src/components/Command/Command.module.scss +47 -77
  364. package/src/components/ConversationList/ConversationList.module.scss +20 -78
  365. package/src/components/ConversationList/index.tsx +55 -59
  366. package/src/components/DataTable/DataTable.module.scss +76 -216
  367. package/src/components/DataTable/index.tsx +20 -25
  368. package/src/components/DatePicker/DatePicker.module.scss +54 -33
  369. package/src/components/DatePicker/index.tsx +2 -1
  370. package/src/components/Dialog/Dialog.module.scss +42 -66
  371. package/src/components/Drawer/Drawer.module.scss +93 -99
  372. package/src/components/Drawer/index.tsx +1 -1
  373. package/src/components/Editor/Editor.module.scss +115 -220
  374. package/src/components/EmptyState/EmptyState.module.scss +38 -85
  375. package/src/components/Field/Field.contract.json +2 -1
  376. package/src/components/Field/Field.module.scss +9 -11
  377. package/src/components/Field/index.tsx +27 -1
  378. package/src/components/Fieldset/Fieldset.module.scss +14 -6
  379. package/src/components/Form/Form.contract.json +10 -23
  380. package/src/components/Form/Form.module.scss +9 -4
  381. package/src/components/Form/index.tsx +22 -7
  382. package/src/components/Grid/Grid.module.scss +159 -63
  383. package/src/components/Grid/index.tsx +107 -126
  384. package/src/components/Header/Header.module.scss +25 -32
  385. package/src/components/Header/index.tsx +2 -1
  386. package/src/components/Icon/Icon.module.scss +16 -0
  387. package/src/components/Icon/index.tsx +74 -86
  388. package/src/components/IconButton/IconButton.module.scss +11 -21
  389. package/src/components/Input/Input.module.scss +67 -55
  390. package/src/components/Input/index.tsx +1 -2
  391. package/src/components/Link/Link.module.scss +8 -9
  392. package/src/components/List/List.module.scss +16 -21
  393. package/src/components/List/index.tsx +4 -10
  394. package/src/components/Listbox/Listbox.module.scss +26 -54
  395. package/src/components/Loading/Loading.module.scss +23 -33
  396. package/src/components/Loading/index.tsx +68 -97
  397. package/src/components/Main/Main.module.scss +3 -5
  398. package/src/components/Markdown/Markdown.module.scss +36 -184
  399. package/src/components/Markdown/index.tsx +2 -2
  400. package/src/components/Menu/Menu.module.scss +48 -133
  401. package/src/components/Menu/index.tsx +57 -89
  402. package/src/components/Message/Message.module.scss +52 -142
  403. package/src/components/Message/index.tsx +16 -6
  404. package/src/components/NavigationMenu/NavigationMenu.module.scss +59 -52
  405. package/src/components/Pagination/Pagination.module.scss +32 -25
  406. package/src/components/Pagination/index.tsx +7 -2
  407. package/src/components/Popover/Popover.module.scss +37 -73
  408. package/src/components/Progress/Progress.module.scss +61 -41
  409. package/src/components/Progress/geometry.ts +41 -0
  410. package/src/components/Progress/index.tsx +44 -30
  411. package/src/components/Prompt/Prompt.module.scss +45 -82
  412. package/src/components/Prompt/index.tsx +6 -5
  413. package/src/components/RadioGroup/RadioGroup.module.scss +50 -69
  414. package/src/components/RadioGroup/index.tsx +7 -9
  415. package/src/components/ScrollArea/ScrollArea.contract.json +8 -24
  416. package/src/components/ScrollArea/ScrollArea.module.scss +122 -96
  417. package/src/components/ScrollArea/index.tsx +78 -60
  418. package/src/components/ScrollArea/scroll-state.ts +87 -0
  419. package/src/components/Select/Select.module.scss +53 -41
  420. package/src/components/Select/index.tsx +6 -2
  421. package/src/components/Separator/Separator.module.scss +29 -19
  422. package/src/components/Separator/index.tsx +55 -51
  423. package/src/components/Sidebar/Sidebar.contract.json +12 -0
  424. package/src/components/Sidebar/Sidebar.module.scss +101 -99
  425. package/src/components/Sidebar/index.tsx +10 -3
  426. package/src/components/Skeleton/Skeleton.module.scss +26 -26
  427. package/src/components/Skeleton/index.tsx +65 -72
  428. package/src/components/Slider/Slider.module.scss +31 -25
  429. package/src/components/Stack/Stack.module.scss +101 -30
  430. package/src/components/Stack/index.tsx +157 -127
  431. package/src/components/{Toggle/Toggle.contract.json → Switch/Switch.contract.json} +1 -1
  432. package/src/components/{Toggle/Toggle.module.scss → Switch/Switch.module.scss} +55 -82
  433. package/src/components/{Toggle → Switch}/index.tsx +5 -21
  434. package/src/components/Table/Table.module.scss +38 -129
  435. package/src/components/Table/index.tsx +13 -6
  436. package/src/components/TableOfContents/TableOfContents.module.scss +20 -177
  437. package/src/components/Tabs/Tabs.module.scss +27 -22
  438. package/src/components/Tabs/index.tsx +2 -2
  439. package/src/components/Text/Text.module.scss +22 -3
  440. package/src/components/Text/index.tsx +56 -21
  441. package/src/components/Textarea/Textarea.module.scss +59 -39
  442. package/src/components/Textarea/index.tsx +5 -12
  443. package/src/components/Theme/context.ts +42 -0
  444. package/src/components/Theme/index.tsx +14 -309
  445. package/src/components/ThemeToggle/ThemeToggle.module.scss +73 -0
  446. package/src/components/ThemeToggle/index.tsx +144 -0
  447. package/src/components/ThinkingIndicator/ThinkingIndicator.module.scss +24 -19
  448. package/src/components/ThinkingIndicator/index.tsx +44 -54
  449. package/src/components/Toast/Toast.contract.json +5 -21
  450. package/src/components/Toast/Toast.module.scss +61 -138
  451. package/src/components/Toggle/index.ts +7 -0
  452. package/src/components/ToggleGroup/ToggleGroup.contract.json +12 -39
  453. package/src/components/ToggleGroup/ToggleGroup.module.scss +132 -88
  454. package/src/components/ToggleGroup/index.tsx +5 -3
  455. package/src/components/Tooltip/Tooltip.module.scss +23 -39
  456. package/src/components/VisuallyHidden/VisuallyHidden.module.scss +3 -0
  457. package/src/index.ts +2 -1
  458. package/src/measurements/MeasurementTargets.module.scss +229 -0
  459. package/src/measurements/generated.ts +317 -0
  460. package/src/measurements/index.ts +8 -0
  461. package/src/measurements/measurements.json +361 -0
  462. package/src/recipes/_action.scss +138 -0
  463. package/src/recipes/_boolean-range.scss +124 -0
  464. package/src/recipes/_feedback.scss +171 -0
  465. package/src/recipes/_field.scss +98 -0
  466. package/src/recipes/_layout.scss +67 -0
  467. package/src/recipes/_navigation.scss +110 -0
  468. package/src/recipes/_overlay.scss +191 -0
  469. package/src/recipes/_popup.scss +92 -0
  470. package/src/recipes/_prose.scss +174 -0
  471. package/src/recipes/_representation.scss +193 -0
  472. package/src/recipes/_segmented.scss +26 -0
  473. package/src/recipes/_surface.scss +13 -0
  474. package/src/recipes/_table-chrome.scss +105 -0
  475. package/src/recipes/_target.scss +31 -0
  476. package/src/recipes/_typography.scss +38 -0
  477. package/src/recipes/popup.ts +12 -0
  478. package/src/recipes/table-chrome.ts +30 -0
  479. package/src/styles/globals.scss +2 -2
  480. package/src/tokens/_component-properties.scss +2 -2
  481. package/src/tokens/_computed.scss +9 -9
  482. package/src/tokens/_density.scss +41 -132
  483. package/src/tokens/_measurements.catalog.generated.css +91 -0
  484. package/src/tokens/_measurements.generated.scss +604 -0
  485. package/src/tokens/_mixins.scss +0 -276
  486. package/src/tokens/_property-registrations.scss +96 -92
  487. package/src/tokens/_radius.scss +16 -70
  488. package/src/tokens/_seeds.scss +8 -7
  489. package/src/tokens/_variables.scss +163 -148
  490. package/src/utils/layout-spacing.ts +31 -0
  491. package/src/utils/seed-derivation.ts +134 -172
  492. package/src/utils/theme-presets.ts +58 -30
  493. package/dist/components/Theme/ThemeToggle.module.scss.js +0 -23
  494. package/dist/components/Toggle/Toggle.module.scss.cjs +0 -44
  495. package/dist/components/Toggle/Toggle.module.scss.js +0 -44
  496. package/src/components/Switch/index.ts +0 -3
  497. package/src/components/Theme/ThemeToggle.module.scss +0 -91
@@ -2,75 +2,29 @@
2
2
  // @usefragments/ui Radius Styles
3
3
  // ============================================
4
4
  //
5
- // Defines 5 radius style presets that control corner rounding.
6
- // Each style maps to sm, md, lg, xl values.
5
+ // Compatibility adapter over the generated Measurement Module. Existing Sass
6
+ // callers retain their public maps and helpers without owning numeric copies.
7
7
  //
8
8
  // ============================================
9
9
 
10
- @use 'sass:map';
10
+ @use "sass:map";
11
+ @use "measurements.generated" as measurements;
11
12
 
12
- // --------------------------------------------
13
- // Radius Style Definitions
14
- // --------------------------------------------
13
+ $radius-sharp: measurements.radius-profile("sharp");
14
+ $radius-subtle: measurements.radius-profile("subtle");
15
+ $radius-default: measurements.radius-profile("default");
16
+ $radius-rounded: measurements.radius-profile("rounded");
17
+ $radius-pill: measurements.radius-profile("pill");
15
18
 
16
- // Sharp - No visible rounding (technical, precise)
17
- $radius-sharp: (
18
- sm: 0,
19
- md: 0,
20
- lg: 0,
21
- xl: 0
22
- );
23
-
24
- // Subtle - Minimal rounding (modern minimal)
25
- $radius-subtle: (
26
- sm: 0.125rem, // 2px
27
- md: 0.25rem, // 4px
28
- lg: 0.375rem, // 6px
29
- xl: 0.5rem // 8px
30
- );
31
-
32
- // Default - Balanced rounding (current values)
33
- $radius-default: (
34
- sm: 0.25rem, // 3.5px -> 4px
35
- md: 0.429rem, // 6px
36
- lg: 0.571rem, // 8px
37
- xl: 0.857rem // 12px
38
- );
39
-
40
- // Rounded - More prominent rounding (friendly)
41
- $radius-rounded: (
42
- sm: 0.375rem, // 6px
43
- md: 0.5rem, // 8px
44
- lg: 0.75rem, // 12px
45
- xl: 1rem // 16px
46
- );
47
-
48
- // Pill - Maximum rounding (playful, soft)
49
- $radius-pill: (
50
- sm: 0.5rem, // 8px
51
- md: 0.75rem, // 12px
52
- lg: 1rem, // 16px
53
- xl: 1.5rem // 24px
54
- );
55
-
56
- // --------------------------------------------
57
- // Radius Map for Dynamic Access
58
- // --------------------------------------------
59
19
  $radius-styles: (
60
20
  "sharp": $radius-sharp,
61
21
  "subtle": $radius-subtle,
62
22
  "default": $radius-default,
63
23
  "rounded": $radius-rounded,
64
- "pill": $radius-pill
24
+ "pill": $radius-pill,
65
25
  );
66
26
 
67
- // --------------------------------------------
68
- // Helper Functions
69
- // --------------------------------------------
70
-
71
- /// Get a radius style configuration by name
72
- /// @param {String} $name - Radius style name (sharp, subtle, default, rounded, pill)
73
- /// @return {Map} The radius configuration map
27
+ /// Get a radius style configuration by name.
74
28
  @function get-radius-style($name) {
75
29
  @if not map.has-key($radius-styles, $name) {
76
30
  @warn "Unknown radius style '#{$name}'. Using 'default' as fallback.";
@@ -79,29 +33,21 @@ $radius-styles: (
79
33
  @return map.get($radius-styles, $name);
80
34
  }
81
35
 
82
- /// Get a specific radius value from a style
83
- /// @param {Map} $style - A radius style map
84
- /// @param {String} $size - Size key (sm, md, lg, xl)
85
- /// @return {Number} The radius value
36
+ /// Get a specific radius value from a style map.
86
37
  @function radius-value($style, $size) {
87
38
  @if not map.has-key($style, $size) {
88
39
  @warn "Unknown radius size '#{$size}'.";
89
- @return map.get($style, md);
40
+ @return map.get($style, "md");
90
41
  }
91
42
  @return map.get($style, $size);
92
43
  }
93
44
 
94
- /// Get radius by style name and size
95
- /// @param {String} $style-name - Radius style name
96
- /// @param {String} $size - Size key (sm, md, lg, xl)
97
- /// @return {Number} The radius value
45
+ /// Get a radius by style name and size.
98
46
  @function radius($style-name, $size) {
99
- $style: get-radius-style($style-name);
100
- @return radius-value($style, $size);
47
+ @return radius-value(get-radius-style($style-name), $size);
101
48
  }
102
49
 
103
- /// Full/circular radius (always the same)
104
- /// @return {Number} The full radius value
50
+ /// Full/circular radius remains an intentional non-profile sentinel.
105
51
  @function radius-full() {
106
52
  @return 9999px;
107
53
  }
@@ -1,4 +1,5 @@
1
- @use 'sass:list';
1
+ @use "sass:list";
2
+ @use "measurements.generated" as measurements;
2
3
 
3
4
  // ============================================
4
5
  // @usefragments/ui Design Token Seeds
@@ -53,12 +54,12 @@ $_valid-neutrals: "carbon", "stone", "mono", "ice", "earth", "sand", "fire", "fr
53
54
  @error "Invalid $fui-neutral: '#{$fui-neutral}'. Must be one of: #{$_valid-neutrals}";
54
55
  }
55
56
 
56
- $_valid-densities: "compact", "default", "relaxed";
57
+ $_valid-densities: measurements.$density-profile-names;
57
58
  @if not list.index($_valid-densities, $fui-density) {
58
59
  @error "Invalid $fui-density: '#{$fui-density}'. Must be one of: #{$_valid-densities}";
59
60
  }
60
61
 
61
- $_valid-radii: "sharp", "subtle", "default", "rounded", "pill";
62
+ $_valid-radii: measurements.$radius-profile-names;
62
63
  @if not list.index($_valid-radii, $fui-radius-style) {
63
64
  @error "Invalid $fui-radius-style: '#{$fui-radius-style}'. Must be one of: #{$_valid-radii}";
64
65
  }
@@ -70,13 +71,13 @@ $_valid-radii: "sharp", "subtle", "default", "rounded", "pill";
70
71
  // If not overridden, they use sensible defaults.
71
72
 
72
73
  // The status seeds below are tuned to sit in one family with the sage brand
73
- // (`$fui-brand` / success `#7fc9b3`): soft, muted, ~60% lightness rather than
74
- // neon. Danger is the warm complement of sage, warning its split-complement,
74
+ // (`$fui-brand` / success `#7fc9b3`): muted and mineral rather than neon.
75
+ // Danger is the deep clay complement of sage, warning its split-complement,
75
76
  // info a cool teal-adjacent slate — so they read as one palette, not bolted-on.
76
77
 
77
- /// Danger/error color — muted coral-terracotta, sage's warm complement.
78
+ /// Danger/error color — deep muted clay, sage's warm complement.
78
79
  /// @type Color
79
- $fui-danger: #d97066 !default;
80
+ $fui-danger: #a54f46 !default;
80
81
 
81
82
  /// Success color (Fragments brand default — sage; green means "contract passing")
82
83
  /// @type Color
@@ -23,7 +23,9 @@
23
23
 
24
24
  // Import computed values from seed system
25
25
  @use "sass:string";
26
+ @use "sass:map";
26
27
  @use "computed" as computed;
28
+ @use "measurements.generated" as measurements;
27
29
 
28
30
  // --------------------------------------------
29
31
  // Base Configuration
@@ -55,23 +57,18 @@ $fui-font-sans:
55
57
  $fui-font-mono:
56
58
  "JetBrains Mono Variable", "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace !default;
57
59
 
58
- // Font sizes (rem based on 14px root).
59
- // Scale ladder tuned for industry-leading docs hierarchy:
60
- // - UI chrome stays dense at 14px (sm/base).
61
- // - `md` (15px) is the prose body size — comfortable reading.
62
- // - `lg`/`xl`/`2xl` step 20 / 24 / 30 for h3 / h2 / large display.
63
- // - `3xl`/`4xl` (36 / 48) land page-title and hero sizes without
64
- // per-page clamps.
65
- $fui-font-size-2xs: 0.714rem !default; // 10px
66
- $fui-font-size-xs: 0.857rem !default; // 12px
67
- $fui-font-size-sm: 1rem !default; // 14px (base)
68
- $fui-font-size-base: 1rem !default; // 14px (= sm, body base)
69
- $fui-font-size-md: 1.071rem !default; // 15px (prose body longer reading)
70
- $fui-font-size-lg: 1.429rem !default; // 20px (h3, dialog/drawer/alert title)
71
- $fui-font-size-xl: 1.714rem !default; // 24px (h2, section heading)
72
- $fui-font-size-2xl: 2.143rem !default; // 30px (large display)
73
- $fui-font-size-3xl: 2.571rem !default; // 36px (h1, page title)
74
- $fui-font-size-4xl: 3.429rem !default; // 48px (hero display)
60
+ // Legacy public typography variables are generated compatibility views. New
61
+ // component work uses the semantic typography recipe.
62
+ $fui-font-size-2xs: map.get(measurements.$legacy, "typography", "fontSize", "2xs") !default;
63
+ $fui-font-size-xs: map.get(measurements.$legacy, "typography", "fontSize", "xs") !default;
64
+ $fui-font-size-sm: map.get(measurements.$legacy, "typography", "fontSize", "sm") !default;
65
+ $fui-font-size-base: map.get(measurements.$legacy, "typography", "fontSize", "base") !default;
66
+ $fui-font-size-md: map.get(measurements.$legacy, "typography", "fontSize", "md") !default;
67
+ $fui-font-size-lg: map.get(measurements.$legacy, "typography", "fontSize", "lg") !default;
68
+ $fui-font-size-xl: map.get(measurements.$legacy, "typography", "fontSize", "xl") !default;
69
+ $fui-font-size-2xl: map.get(measurements.$legacy, "typography", "fontSize", "2xl") !default;
70
+ $fui-font-size-3xl: map.get(measurements.$legacy, "typography", "fontSize", "3xl") !default;
71
+ $fui-font-size-4xl: map.get(measurements.$legacy, "typography", "fontSize", "4xl") !default;
75
72
 
76
73
  // Dropdown/popup list items — menus, selects, comboboxes, listboxes, command
77
74
  // palettes. One step below chrome text: a popup is a dense list scanned against
@@ -81,23 +78,73 @@ $fui-font-size-4xl: 3.429rem !default; // 48px (hero display)
81
78
  // literal in the mixin would let the height calcs drift out of step with it.
82
79
  $fui-popup-item-font-size: $fui-font-size-xs !default; // 12px
83
80
 
84
- $fui-font-weight-normal: 400 !default;
85
- $fui-font-weight-medium: 500 !default;
86
- $fui-font-weight-semibold: 600 !default;
87
- $fui-font-weight-bold: 700 !default;
88
-
89
- $fui-line-height-tight: 1.25 !default;
90
- $fui-line-height-normal: 1.5 !default;
91
- $fui-line-height-relaxed: 1.625 !default;
92
- $fui-line-height-display: 1.1 !default; // h1/hero — tight for large type
93
- $fui-line-height-prose: 1.7 !default; // p/li inside long-form reading columns
81
+ $fui-font-weight-normal: map.get(
82
+ measurements.$legacy,
83
+ "typography",
84
+ "fontWeight",
85
+ "normal"
86
+ ) !default;
87
+ $fui-font-weight-medium: map.get(
88
+ measurements.$legacy,
89
+ "typography",
90
+ "fontWeight",
91
+ "medium"
92
+ ) !default;
93
+ $fui-font-weight-semibold: map.get(
94
+ measurements.$legacy,
95
+ "typography",
96
+ "fontWeight",
97
+ "semibold"
98
+ ) !default;
99
+ $fui-font-weight-bold: map.get(measurements.$legacy, "typography", "fontWeight", "bold") !default;
100
+
101
+ $fui-line-height-tight: map.get(measurements.$legacy, "typography", "lineHeight", "tight") !default;
102
+ $fui-line-height-normal: map.get(
103
+ measurements.$legacy,
104
+ "typography",
105
+ "lineHeight",
106
+ "normal"
107
+ ) !default;
108
+ $fui-line-height-relaxed: map.get(
109
+ measurements.$legacy,
110
+ "typography",
111
+ "lineHeight",
112
+ "relaxed"
113
+ ) !default;
114
+ $fui-line-height-display: map.get(
115
+ measurements.$legacy,
116
+ "typography",
117
+ "lineHeight",
118
+ "display"
119
+ ) !default;
120
+ $fui-line-height-prose: map.get(measurements.$legacy, "typography", "lineHeight", "prose") !default;
94
121
 
95
122
  // Letter spacing — keep neutral by default so dense product chrome, headings,
96
123
  // and generated app surfaces do not drift into separate typographic systems.
97
- $fui-letter-spacing-tight: 0 !default; // for xl+ headings
98
- $fui-letter-spacing-normal: normal !default;
99
- $fui-letter-spacing-display: 0 !default; // for h1/display
100
- $fui-letter-spacing-wide: 0.05em !default; // uppercase micro-labels (section headings, table/column headers)
124
+ $fui-letter-spacing-tight: map.get(
125
+ measurements.$legacy,
126
+ "typography",
127
+ "letterSpacing",
128
+ "tight"
129
+ ) !default;
130
+ $fui-letter-spacing-normal: map.get(
131
+ measurements.$legacy,
132
+ "typography",
133
+ "letterSpacing",
134
+ "normal"
135
+ ) !default;
136
+ $fui-letter-spacing-display: map.get(
137
+ measurements.$legacy,
138
+ "typography",
139
+ "letterSpacing",
140
+ "display"
141
+ ) !default;
142
+ $fui-letter-spacing-wide: map.get(
143
+ measurements.$legacy,
144
+ "typography",
145
+ "letterSpacing",
146
+ "wide"
147
+ ) !default;
101
148
 
102
149
  // --------------------------------------------
103
150
  // Spacing (derived from density seed)
@@ -323,19 +370,23 @@ $fui-breakpoint-xl: 1280px !default;
323
370
  // Component-specific tokens
324
371
  // --------------------------------------------
325
372
 
326
- // Button heights (derived from density seed)
327
- $fui-button-height-xs: computed.$computed-button-height-xs !default;
328
- $fui-button-height-sm: computed.$computed-button-height-sm !default;
329
- $fui-button-height-md: computed.$computed-button-height-md !default;
330
- $fui-button-height-lg: computed.$computed-button-height-lg !default;
331
- $fui-button-outlined-shadow: inset 0 1px 0
332
- light-dark(color-mix(in srgb, white 72%, transparent), color-mix(in srgb, white 5%, transparent)) !default;
373
+ // Interactive control heights are fixed geometry. Density still governs
374
+ // composition spacing, but it cannot resize a named control.
375
+ $fui-control-height-xs: measurements.target-value("controlTrack", "micro") !default;
376
+ $fui-control-height-sm: measurements.target-value("controlTrack", "sm") !default;
377
+ $fui-control-height-md: measurements.target-value("controlTrack", "md") !default;
378
+ $fui-control-height-lg: measurements.target-value("controlTrack", "lg") !default;
333
379
 
334
- // Input heights (derived from density seed)
335
- // Note: These are dedicated input tokens, not reusing button heights
336
- $fui-input-height: computed.$computed-input-height !default;
337
- $fui-input-height-sm: computed.$computed-input-height-sm !default;
338
- $fui-input-height-lg: computed.$computed-input-height-lg !default;
380
+ // Legacy aliases prefer --fui-control-height-* in new code
381
+ $fui-button-height-xs: $fui-control-height-xs !default;
382
+ $fui-button-height-sm: $fui-control-height-sm !default;
383
+ $fui-button-height-md: $fui-control-height-md !default;
384
+ $fui-button-height-lg: $fui-control-height-lg !default;
385
+ $fui-button-outlined-shadow: none !default;
386
+
387
+ $fui-input-height-sm: measurements.target-value("fieldTrack", "sm") !default;
388
+ $fui-input-height: measurements.target-value("fieldTrack", "md") !default;
389
+ $fui-input-height-lg: measurements.target-value("fieldTrack", "lg") !default;
339
390
 
340
391
  // Touch targets (derived from density seed)
341
392
  $fui-touch-sm: computed.$computed-touch-sm !default;
@@ -346,16 +397,17 @@ $fui-touch-lg: computed.$computed-touch-lg !default;
346
397
  // Keep this token globally available to preserve a product-control floor for
347
398
  // touch/pointer targets. WCAG 2.2 allows 24px, but Fragments uses 32px so
348
399
  // field controls, toolbar buttons, tabs, and picker triggers align.
349
- $fui-target-size-min: 2.286rem !default; // 32px
400
+ $fui-target-size-min: map.get(measurements.$legacy, "touch", "minimum") !default;
350
401
  $fui-target-size-comfortable: $fui-touch-md !default;
351
402
 
352
- // Icon sizes (standard conventions)
353
- $fui-icon-xs: 0.857rem !default; // 12px (inline/caption glyphs)
354
- $fui-icon-sm: 1rem !default; // 14px (2 units)
355
- $fui-icon-md: 1.143rem !default; // 16px (standard small icon)
356
- $fui-icon-lg: 1.429rem !default; // 20px (standard medium icon)
357
- $fui-icon-xl: 1.714rem !default; // 24px (standard large icon)
358
- $fui-icon-2xl: 2.286rem !default; // 32px (display/empty-state/loading)
403
+ // Fixed icon geometry. The legacy rem records remain frozen for compatibility
404
+ // auditing, while active Sass and runtime values project the accepted px targets.
405
+ $fui-icon-xs: measurements.target-value("icon", "xs") !default;
406
+ $fui-icon-sm: measurements.target-value("icon", "sm") !default;
407
+ $fui-icon-md: measurements.target-value("icon", "md") !default;
408
+ $fui-icon-lg: measurements.target-value("icon", "lg") !default;
409
+ $fui-icon-xl: measurements.target-value("icon", "xl") !default;
410
+ $fui-icon-2xl: measurements.target-value("icon", "2xl") !default;
359
411
 
360
412
  // Animation offsets
361
413
  $fui-anim-offset-sm: 4px !default; // Small slide animation
@@ -365,7 +417,11 @@ $fui-anim-offset-md: 8px !default; // Medium slide animation
365
417
  $fui-sidebar-item-height: computed.$computed-sidebar-item-height !default; // density-responsive (compact/default: 32px, relaxed: 36px)
366
418
 
367
419
  // AppShell Layout
368
- $fui-appshell-header-height: 56px !default;
420
+ $fui-appshell-header-height: map.get(
421
+ measurements.$legacy,
422
+ "navigation",
423
+ "appShellHeaderHeight"
424
+ ) !default;
369
425
  $fui-header-z-index: 40 !default;
370
426
 
371
427
  // CodeBlock background — shared with Markdown's <pre> prose styling — and
@@ -394,6 +450,7 @@ $fui-code-selection-bg: color-mix(
394
450
  // Base configuration
395
451
  font-size: #{$fui-base-font-size};
396
452
  --fui-base-unit: #{$fui-base-unit};
453
+ @include measurements.emit-fixed-custom-properties;
397
454
 
398
455
  // Seed colors — the 5 configurable seeds exposed as custom properties.
399
456
  // Tracks SCSS seed variables, so compile-time customization is reflected.
@@ -614,10 +671,9 @@ $fui-code-selection-bg: color-mix(
614
671
  --fui-kbd-radius: var(--fui-radius-sm);
615
672
  --fui-kbd-reserved-width: 2.714rem; // 38px, enough for "⌘K"
616
673
 
617
- // Button chrome. Primary fill = pine. Border/color are shared; the fill
618
- // treatment and radius branch on the brand: the Fragments default renders a
619
- // FLAT solid pill (hybrid-skin), while consumer-branded builds keep the
620
- // raised-gradient recipe with crisp border, top highlight, and pressed inset.
674
+ // Button chrome. Every theme uses flat fills: hierarchy comes from colour,
675
+ // border, and state contrast rather than a second raised/gradient material.
676
+ // Radius remains brand-aware for compatibility with consumer themes.
621
677
  --fui-button-primary-base: light-dark(#006b57, #006b57);
622
678
  --fui-button-primary-hover: light-dark(#187762, #187762);
623
679
  --fui-button-primary-active: light-dark(#005f4c, #005f4c);
@@ -634,76 +690,28 @@ $fui-code-selection-bg: color-mix(
634
690
  --fui-button-primary-color: #fff;
635
691
 
636
692
  @if $fui-brand-is-default {
637
- // Flat solid pill — hybrid-skin treatment.
638
693
  --fui-button-radius: var(--fui-radius-full);
639
- --fui-button-primary-bg: var(--fui-button-primary-base);
640
- --fui-button-primary-bg-hover: var(--fui-button-primary-hover);
641
- --fui-button-primary-bg-active: var(--fui-button-primary-active);
642
- --fui-button-primary-shadow: none;
643
- --fui-button-primary-shadow-active: inset
644
- 0
645
- 1px
646
- 2px
647
- color-mix(in srgb, black 22%, transparent);
648
694
  } @else {
649
- // Raised-gradient recipe for consumer-branded builds.
650
695
  --fui-button-radius: var(--fui-radius-lg);
651
- --fui-button-primary-bg: linear-gradient(
652
- to bottom,
653
- color-mix(in srgb, var(--fui-button-primary-base) 78%, white 22%) 0%,
654
- var(--fui-button-primary-base) 52%,
655
- color-mix(in srgb, var(--fui-button-primary-active) 88%, black 12%) 100%
656
- );
657
- --fui-button-primary-bg-hover: linear-gradient(
658
- to bottom,
659
- color-mix(in srgb, var(--fui-button-primary-hover) 76%, white 24%) 0%,
660
- var(--fui-button-primary-hover) 52%,
661
- color-mix(in srgb, var(--fui-button-primary-active) 84%, black 16%) 100%
662
- );
663
- --fui-button-primary-bg-active: linear-gradient(
664
- to bottom,
665
- color-mix(in srgb, var(--fui-button-primary-active) 88%, black 12%) 0%,
666
- var(--fui-button-primary-active) 100%
667
- );
668
- --fui-button-primary-shadow:
669
- inset 0 1px 0 color-mix(in srgb, white 30%, transparent),
670
- inset 0 -1px 0 color-mix(in srgb, black 18%, transparent),
671
- 0 1px 1px color-mix(in srgb, black 16%, transparent);
672
- --fui-button-primary-shadow-active:
673
- inset 0 1px 2px color-mix(in srgb, black 30%, transparent),
674
- 0 1px 0 color-mix(in srgb, white 8%, transparent);
675
696
  }
676
697
 
677
- --fui-button-neutral-bg: linear-gradient(
678
- to bottom,
679
- light-dark(
680
- color-mix(in srgb, var(--fui-bg-elevated) 97%, var(--fui-text-primary) 3%),
681
- color-mix(in srgb, var(--fui-bg-elevated) 88%, var(--fui-text-primary) 12%)
682
- )
683
- 0%,
684
- light-dark(
685
- color-mix(in srgb, var(--fui-bg-elevated) 92%, var(--fui-text-primary) 8%),
686
- color-mix(in srgb, var(--fui-bg-elevated) 96%, var(--fui-text-primary) 4%)
687
- )
688
- 100%
698
+ --fui-button-primary-bg: var(--fui-button-primary-base);
699
+ --fui-button-primary-bg-hover: var(--fui-button-primary-hover);
700
+ --fui-button-primary-bg-active: var(--fui-button-primary-active);
701
+ --fui-button-primary-shadow: none;
702
+ --fui-button-primary-shadow-active: none;
703
+
704
+ --fui-button-neutral-bg: light-dark(
705
+ color-mix(in srgb, var(--fui-bg-elevated) 94%, var(--fui-text-primary) 6%),
706
+ color-mix(in srgb, var(--fui-bg-elevated) 92%, var(--fui-text-primary) 8%)
689
707
  );
690
- --fui-button-neutral-bg-hover: linear-gradient(
691
- to bottom,
692
- light-dark(
693
- color-mix(in srgb, var(--fui-bg-elevated) 99%, var(--fui-text-primary) 1%),
694
- color-mix(in srgb, var(--fui-bg-elevated) 82%, var(--fui-text-primary) 18%)
695
- )
696
- 0%,
697
- light-dark(
698
- color-mix(in srgb, var(--fui-bg-elevated) 88%, var(--fui-text-primary) 12%),
699
- color-mix(in srgb, var(--fui-bg-elevated) 92%, var(--fui-text-primary) 8%)
700
- )
701
- 100%
708
+ --fui-button-neutral-bg-hover: light-dark(
709
+ color-mix(in srgb, var(--fui-bg-elevated) 90%, var(--fui-text-primary) 10%),
710
+ color-mix(in srgb, var(--fui-bg-elevated) 86%, var(--fui-text-primary) 14%)
702
711
  );
703
- --fui-button-neutral-bg-active: linear-gradient(
704
- to bottom,
705
- color-mix(in srgb, var(--fui-bg-elevated) 82%, var(--fui-text-primary) 18%) 0%,
706
- color-mix(in srgb, var(--fui-bg-elevated) 90%, var(--fui-text-primary) 10%) 100%
712
+ --fui-button-neutral-bg-active: light-dark(
713
+ color-mix(in srgb, var(--fui-bg-elevated) 84%, var(--fui-text-primary) 16%),
714
+ color-mix(in srgb, var(--fui-bg-elevated) 80%, var(--fui-text-primary) 20%)
707
715
  );
708
716
  --fui-button-neutral-border: color-mix(
709
717
  in srgb,
@@ -716,18 +724,9 @@ $fui-code-selection-bg: color-mix(
716
724
  var(--fui-text-primary) 42%
717
725
  );
718
726
  --fui-button-neutral-color: var(--fui-text-primary);
719
- --fui-button-outlined-shadow: #{$fui-button-outlined-shadow};
720
- --fui-button-neutral-shadow:
721
- inset 0 1px 0
722
- light-dark(
723
- color-mix(in srgb, white 88%, transparent),
724
- color-mix(in srgb, white 7%, transparent)
725
- ),
726
- inset 0 -1px 0 color-mix(in srgb, var(--fui-text-primary) 7%, transparent),
727
- 0 1px 1px color-mix(in srgb, black 12%, transparent);
728
- --fui-button-neutral-shadow-active:
729
- inset 0 1px 2px color-mix(in srgb, black 16%, transparent),
730
- inset 0 0 0 1px color-mix(in srgb, var(--fui-text-primary) 6%, transparent);
727
+ --fui-button-outlined-shadow: none;
728
+ --fui-button-neutral-shadow: none;
729
+ --fui-button-neutral-shadow-active: none;
731
730
 
732
731
  --fui-code-bg: #{$fui-code-bg};
733
732
  --fui-code-selection-bg: #{$fui-code-selection-bg};
@@ -803,8 +802,12 @@ $fui-code-selection-bg: color-mix(
803
802
  --fui-tabs-pill-active-bg: color-mix(in srgb, var(--fui-text-primary) 9%, transparent);
804
803
  --fui-tabs-pill-active-border: transparent;
805
804
  --fui-tabs-pill-active-shadow: none;
806
- --fui-toggle-group-selected-bg: color-mix(in srgb, var(--fui-text-primary) 9%, transparent);
807
- --fui-toggle-group-selected-border: transparent;
805
+ --fui-toggle-group-selected-bg: var(--fui-selection-bg);
806
+ --fui-toggle-group-selected-border: color-mix(
807
+ in srgb,
808
+ var(--fui-color-accent) 42%,
809
+ transparent
810
+ );
808
811
  --fui-toggle-group-selected-shadow: none;
809
812
 
810
813
  // Shadows (not <color> type — light-dark() can't be used, handled in dark overrides)
@@ -826,14 +829,18 @@ $fui-code-selection-bg: color-mix(
826
829
  #{$fui-dark-scrollbar-thumb-hover}
827
830
  );
828
831
 
829
- // Component heights (density-responsive)
830
- --fui-button-height-xs: #{$fui-button-height-xs};
831
- --fui-button-height-sm: #{$fui-button-height-sm};
832
- --fui-button-height-md: #{$fui-button-height-md};
833
- --fui-button-height-lg: #{$fui-button-height-lg};
834
- --fui-input-height-sm: #{$fui-input-height-sm};
835
- --fui-input-height: #{$fui-input-height};
836
- --fui-input-height-lg: #{$fui-input-height-lg};
832
+ // Fixed component tracks plus compatibility aliases.
833
+ --fui-control-height-xs: #{$fui-control-height-xs};
834
+ --fui-control-height-sm: #{$fui-control-height-sm};
835
+ --fui-control-height-md: #{$fui-control-height-md};
836
+ --fui-control-height-lg: #{$fui-control-height-lg};
837
+ --fui-button-height-xs: var(--fui-control-height-xs);
838
+ --fui-button-height-sm: var(--fui-control-height-sm);
839
+ --fui-button-height-md: var(--fui-control-height-md);
840
+ --fui-button-height-lg: var(--fui-control-height-lg);
841
+ --fui-input-height-sm: var(--fui-field-track-sm);
842
+ --fui-input-height: var(--fui-field-track-md);
843
+ --fui-input-height-lg: var(--fui-field-track-lg);
837
844
 
838
845
  // Touch targets (density-responsive, Fragments control floor: ≥32px)
839
846
  --fui-touch-sm: #{$fui-touch-sm};
@@ -847,14 +854,22 @@ $fui-code-selection-bg: color-mix(
847
854
  // AppShell Layout
848
855
  --fui-appshell-header-height: #{$fui-appshell-header-height};
849
856
  --fui-header-z-index: #{$fui-header-z-index};
857
+ }
850
858
 
851
- // Icon sizes (single source of truth components must not hardcode SVG box sizes)
852
- --fui-icon-xs: #{$fui-icon-xs};
853
- --fui-icon-sm: #{$fui-icon-sm};
854
- --fui-icon-md: #{$fui-icon-md};
855
- --fui-icon-lg: #{$fui-icon-lg};
856
- --fui-icon-xl: #{$fui-icon-xl};
857
- --fui-icon-2xl: #{$fui-icon-2xl};
859
+ // Named runtime selectors use the same generated profiles as compile-time
860
+ // Sass seeds. Attribute specificity intentionally matches :root so these
861
+ // later rules can override the compiled default on either the document root
862
+ // or a scoped provider without inline numeric maps.
863
+ @each $density in measurements.$density-profile-names {
864
+ [data-fui-density="#{$density}"] {
865
+ @include measurements.emit-density-profile($density);
866
+ }
867
+ }
868
+
869
+ @each $radius-style in measurements.$radius-profile-names {
870
+ [data-fui-radius-style="#{$radius-style}"] {
871
+ @include measurements.emit-radius-profile($radius-style);
872
+ }
858
873
  }
859
874
 
860
875
  // Dark mode via data-theme attribute (manual toggle).
@@ -0,0 +1,31 @@
1
+ import { MEASUREMENT_PROFILES } from "../measurements";
2
+
3
+ export type LayoutGapName = "none" | "xs" | "sm" | "md" | "lg" | "xl";
4
+ export type LayoutGapStep = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
5
+ export type LayoutGapValue = LayoutGapName | LayoutGapStep;
6
+
7
+ const namedSteps: Record<LayoutGapName, keyof typeof MEASUREMENT_PROFILES.rawSpace> = {
8
+ none: "0",
9
+ xs: "4",
10
+ sm: "8",
11
+ md: "12",
12
+ lg: "16",
13
+ xl: "24",
14
+ };
15
+
16
+ const numericSteps: Record<LayoutGapStep, keyof typeof MEASUREMENT_PROFILES.rawSpace> = {
17
+ 1: "4",
18
+ 2: "8",
19
+ 3: "12",
20
+ 4: "16",
21
+ 5: "20",
22
+ 6: "24",
23
+ 7: "32",
24
+ 8: "40",
25
+ };
26
+
27
+ export function resolveLayoutGap(value: LayoutGapValue): string {
28
+ const step = typeof value === "number" ? numericSteps[value] : namedSteps[value];
29
+ const fallback = MEASUREMENT_PROFILES.rawSpace[step];
30
+ return `var(--fui-raw-space-${step}, ${fallback})`;
31
+ }