@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
@@ -1,119 +1,83 @@
1
1
  @use "../../tokens/variables" as *;
2
2
  @use "../../tokens/mixins" as *;
3
+ @use "../../recipes/action" as action;
4
+ @use "../../recipes/table-chrome" as table-chrome;
5
+ @use "../../recipes/target" as target;
6
+ @use "../../recipes/typography" as typography;
3
7
 
4
8
  .wrapper {
5
- // Tables may have a larger intrinsic width than a narrow flex or grid
6
- // column. Keep that width inside this scroll container instead of allowing
7
- // the container itself to widen the page.
8
- min-width: 0;
9
- max-width: 100%;
10
9
  --fui-data-table-bg: var(--fui-table-bg, var(--fui-bg-elevated, #{$fui-bg-elevated}));
11
10
  --fui-data-table-header-bg: var(
12
11
  --fui-table-header-bg,
13
12
  color-mix(in srgb, var(--fui-text-primary, #{$fui-text-primary}) 5%, transparent)
14
13
  );
15
14
 
15
+ min-inline-size: 0;
16
+ max-inline-size: 100%;
16
17
  overflow-x: auto;
17
18
  -webkit-overflow-scrolling: touch;
18
19
  }
19
20
 
20
21
  .table {
21
- width: 100%;
22
- border-collapse: collapse;
23
- font-family: var(--fui-font-sans, $fui-font-sans);
24
- -webkit-font-smoothing: antialiased;
25
- -moz-osx-font-smoothing: grayscale;
22
+ @include table-chrome.root;
23
+
24
+ @each $density in ("compact", "regular", "relaxed") {
25
+ &[data-density="#{$density}"] {
26
+ @include table-chrome.density($density);
27
+ }
28
+ }
26
29
  }
27
30
 
28
- // Caption for accessibility
29
31
  .caption {
30
- padding: var(--fui-space-3, $fui-space-3) 0;
31
- font-size: var(--fui-font-size-sm, $fui-font-size-sm);
32
- font-weight: var(--fui-font-weight-medium, $fui-font-weight-medium);
33
- color: var(--fui-text-secondary, $fui-text-secondary);
34
- text-align: left;
35
- caption-side: top;
32
+ @include table-chrome.caption;
36
33
  }
37
34
 
38
- // Visually hidden caption (screen readers only)
39
35
  .captionHidden {
40
36
  @include visually-hidden;
41
37
  }
42
38
 
43
- // Size variants
44
- .sm {
45
- .th,
46
- .td {
47
- padding: var(--fui-space-1, $fui-space-1) var(--fui-space-3, $fui-space-3);
48
- font-size: var(--fui-font-size-xs, $fui-font-size-xs);
49
- }
50
- }
51
-
52
- .md {
53
- .th,
54
- .td {
55
- padding: var(--fui-space-1, $fui-space-1) var(--fui-space-3, $fui-space-3);
56
- font-size: var(--fui-font-size-sm, $fui-font-size-sm);
57
- }
58
- }
59
-
60
- // Header
61
39
  .thead {
62
40
  position: sticky;
63
- top: 0;
41
+ inset-block-start: 0;
64
42
  z-index: 1;
65
43
  }
66
44
 
45
+ .headerRow,
46
+ .row {
47
+ @include table-chrome.row;
48
+ }
49
+
67
50
  .headerRow {
68
- border-bottom: 1px solid var(--fui-table-header-border, var(--fui-border, #{$fui-border}));
51
+ border-block-end-color: var(--fui-table-header-border, var(--fui-border, #{$fui-border}));
69
52
  }
70
53
 
71
54
  .th {
72
- text-align: left;
73
- font-weight: var(--fui-font-weight-medium, $fui-font-weight-medium);
74
- color: var(--fui-text-secondary, $fui-text-secondary);
75
- white-space: nowrap;
76
- vertical-align: middle;
77
- user-select: none;
78
- // Opaque so the sticky header doesn't let rows bleed through on scroll,
79
- // while inheriting the table surface instead of forcing the page background.
55
+ @include table-chrome.header-cell;
56
+
80
57
  background: var(
81
58
  --fui-data-table-header-bg,
82
59
  var(--fui-data-table-bg, var(--fui-bg-primary, #{$fui-bg-primary}))
83
60
  );
84
-
85
- &:first-child {
86
- border-top-left-radius: var(--fui-radius-md, $fui-radius-md);
87
- }
88
-
89
- &:last-child {
90
- border-top-right-radius: var(--fui-radius-md, $fui-radius-md);
91
- }
61
+ white-space: nowrap;
62
+ user-select: none;
92
63
  }
93
64
 
94
- .headerContent {
65
+ .headerContent,
66
+ .sortButton {
95
67
  display: flex;
96
68
  align-items: center;
97
- gap: var(--fui-space-1, $fui-space-1);
98
- }
99
-
100
- // Sortable header cell (for focus styles)
101
- .thSortable {
102
- padding: 0;
69
+ gap: var(--fui-raw-space-4);
103
70
  }
104
71
 
105
72
  .sortButton {
106
73
  @include button-reset;
107
74
  @include interactive-base;
108
75
 
109
- display: flex;
110
- align-items: center;
111
76
  justify-content: space-between;
112
- gap: var(--fui-space-1, $fui-space-1);
113
- width: 100%;
114
- padding: var(--fui-space-1, $fui-space-1) var(--fui-space-3, $fui-space-3);
77
+ inline-size: 100%;
78
+ padding: 0;
115
79
  color: inherit;
116
- text-align: left;
80
+ text-align: start;
117
81
  transition: color var(--fui-transition-fast, $fui-transition-fast);
118
82
 
119
83
  &:hover {
@@ -126,21 +90,15 @@
126
90
  align-items: center;
127
91
  color: var(--fui-text-tertiary, $fui-text-tertiary);
128
92
  flex-shrink: 0;
129
-
130
- svg {
131
- width: var(--fui-icon-xs, $fui-icon-xs);
132
- height: var(--fui-icon-xs, $fui-icon-xs);
133
- }
134
- // Quiet by default; the neutral glyph appears on hover/focus, and the
135
- // active direction arrow stays visible (revealed via aria-sort below).
136
93
  opacity: 0;
137
94
  transition: opacity var(--fui-transition-fast, $fui-transition-fast);
138
95
 
139
- .sortButton:hover & {
140
- color: var(--fui-text-secondary, $fui-text-secondary);
141
- opacity: 1;
96
+ svg {
97
+ inline-size: var(--fui-icon-xs, $fui-icon-xs);
98
+ block-size: var(--fui-icon-xs, $fui-icon-xs);
142
99
  }
143
100
 
101
+ .sortButton:hover &,
144
102
  .sortButton:focus-visible & {
145
103
  opacity: 1;
146
104
  }
@@ -151,20 +109,11 @@
151
109
  opacity: 1;
152
110
  }
153
111
 
154
- // Body
155
- .tbody {
156
- .td {
157
- padding-top: var(--fui-space-2, $fui-space-2);
158
- padding-bottom: var(--fui-space-2, $fui-space-2);
159
- }
160
- }
161
-
162
112
  .row {
163
- border-bottom: 1px solid var(--fui-table-border, var(--fui-border, #{$fui-border}));
164
113
  transition: background-color var(--fui-transition-fast, $fui-transition-fast);
165
114
 
166
115
  &:last-child {
167
- border-bottom: none;
116
+ border-block-end: 0;
168
117
  }
169
118
 
170
119
  &:hover {
@@ -172,13 +121,17 @@
172
121
  }
173
122
  }
174
123
 
124
+ .td {
125
+ @include table-chrome.body-cell;
126
+ }
127
+
128
+ .treeCell {
129
+ @include table-chrome.tree-cell;
130
+ }
131
+
175
132
  .clickable {
176
133
  cursor: pointer;
177
134
 
178
- &:hover {
179
- background-color: var(--fui-table-row-hover-bg, var(--fui-bg-hover, #{$fui-bg-hover}));
180
- }
181
-
182
135
  &:focus-visible {
183
136
  @include focus-ring;
184
137
  }
@@ -193,92 +146,50 @@
193
146
  --fui-table-row-selected-bg,
194
147
  color-mix(in srgb, var(--fui-text-primary, #{$fui-text-primary}) 8%, transparent)
195
148
  );
196
- box-shadow: inset 1px 0 0
197
- var(--fui-table-row-selected-border, var(--fui-border-strong, #{$fui-border-strong}));
198
149
 
199
- &:hover {
200
- background-color: var(
201
- --fui-table-row-selected-bg,
202
- color-mix(in srgb, var(--fui-text-primary, #{$fui-text-primary}) 10%, transparent)
203
- );
150
+ .td:first-child {
151
+ box-shadow: inset var(--fui-table-divider-size) 0 0
152
+ var(--fui-table-row-selected-border, var(--fui-border-strong, #{$fui-border-strong}));
204
153
  }
205
- }
206
154
 
207
- .td {
208
- color: var(--fui-text-primary, $fui-text-primary);
209
- vertical-align: middle;
210
- line-height: var(--fui-line-height-normal, $fui-line-height-normal);
155
+ &:dir(rtl) .td:first-child {
156
+ box-shadow: inset calc(-1 * var(--fui-table-divider-size)) 0 0
157
+ var(--fui-table-row-selected-border, var(--fui-border-strong, #{$fui-border-strong}));
158
+ }
211
159
  }
212
160
 
213
- // Striped rows
214
161
  .striped {
215
162
  .row:nth-child(even) {
216
163
  background-color: var(--fui-table-subrow-bg, var(--fui-bg-subtle, #{$fui-bg-subtle}));
217
164
  }
218
165
 
219
- // Hover and selected override stripe
220
166
  .clickable:hover {
221
167
  background-color: var(--fui-table-row-hover-bg, var(--fui-bg-hover, #{$fui-bg-hover}));
222
168
  }
223
169
 
224
- .clickable:active {
225
- background-color: var(--fui-table-row-active-bg, var(--fui-bg-active, #{$fui-bg-active}));
226
- }
227
-
228
170
  .selected {
229
171
  background-color: var(
230
172
  --fui-table-row-selected-bg,
231
173
  color-mix(in srgb, var(--fui-text-primary, #{$fui-text-primary}) 8%, transparent)
232
174
  );
233
-
234
- &:hover {
235
- background-color: var(
236
- --fui-table-row-selected-bg,
237
- color-mix(in srgb, var(--fui-text-primary, #{$fui-text-primary}) 10%, transparent)
238
- );
239
- }
240
175
  }
241
176
  }
242
177
 
243
- // Bordered
244
178
  .bordered {
245
- border: 1px solid var(--fui-table-border, var(--fui-border, #{$fui-border}));
179
+ overflow: hidden;
180
+ border: var(--fui-table-divider-size, var(--fui-stroke-hairline)) solid
181
+ var(--fui-table-border, var(--fui-border, #{$fui-border}));
246
182
  border-radius: var(--fui-radius-md, $fui-radius-md);
247
183
  background: var(--fui-data-table-bg, var(--fui-bg-primary, #{$fui-bg-primary}));
248
- overflow: hidden;
249
184
  }
250
185
 
251
- // Fixed layout for explicit column sizes
252
186
  .fixedLayout {
253
187
  table-layout: fixed;
254
188
  }
255
189
 
256
- // ============================================
257
- // Density presets — condensed / regular / relaxed
258
- // ============================================
259
-
260
- // Fixed density rails. Off the 7px spacing grid by design (no row-height
261
- // token set exists yet); kept as literals so the three steps stay an even
262
- // 40/48/56 ladder. Snap to row-height tokens once they land.
263
- .densityCondensed .row {
264
- height: 40px;
265
- }
266
-
267
- .densityRegular .row {
268
- height: 48px;
269
- }
270
-
271
- .densityRelaxed .row {
272
- height: 56px;
273
- }
274
-
275
- // ============================================
276
- // Per-column alignment (numbers align right)
277
- // ============================================
278
-
279
190
  .th[data-align="right"],
280
191
  .td[data-align="right"] {
281
- text-align: right;
192
+ text-align: end;
282
193
  }
283
194
 
284
195
  .th[data-align="right"] .headerContent,
@@ -296,23 +207,15 @@
296
207
  justify-content: center;
297
208
  }
298
209
 
299
- // ============================================
300
- // Truncation (single line + ellipsis; pairs with a column width)
301
- // ============================================
302
-
303
210
  .truncate {
304
211
  overflow: hidden;
305
212
  white-space: nowrap;
306
213
  text-overflow: ellipsis;
307
214
  }
308
215
 
309
- // ============================================
310
- // Loading skeleton
311
- // ============================================
312
-
313
216
  .skeletonBar {
314
217
  display: block;
315
- height: 10px;
218
+ block-size: var(--fui-raw-space-10);
316
219
  border-radius: var(--fui-radius-sm, $fui-radius-sm);
317
220
  background: linear-gradient(
318
221
  90deg,
@@ -328,53 +231,36 @@
328
231
  from {
329
232
  background-position: 200% 0;
330
233
  }
234
+
331
235
  to {
332
236
  background-position: -200% 0;
333
237
  }
334
238
  }
335
239
 
336
- @media (prefers-reduced-motion: reduce) {
337
- .skeletonBar {
338
- animation: none;
339
- }
340
-
341
- .sortIndicator {
342
- transition: none;
343
- }
344
- }
345
-
346
- // Checkbox column
347
240
  .checkboxCell {
348
241
  display: flex;
349
242
  align-items: center;
350
243
  justify-content: center;
351
244
  }
352
245
 
353
- // Expandable rows
354
246
  .expandCell {
355
247
  display: inline-flex;
356
248
  align-items: center;
357
- gap: var(--fui-space-1, $fui-space-1);
249
+ gap: var(--fui-raw-space-4);
358
250
  }
359
251
 
360
252
  .expandButton {
361
253
  @include button-reset;
254
+ @include action.base;
255
+ @include action.icon-only("sm");
256
+ @include target.hit-area("compact");
362
257
 
363
- display: inline-flex;
364
- align-items: center;
365
- justify-content: center;
366
- width: var(--fui-icon-lg, $fui-icon-lg);
367
- height: var(--fui-icon-lg, $fui-icon-lg);
368
- flex-shrink: 0;
369
258
  border-radius: var(--fui-radius-sm, $fui-radius-sm);
370
259
  color: var(--fui-text-tertiary, $fui-text-tertiary);
371
- transition:
372
- color var(--fui-transition-fast, $fui-transition-fast),
373
- background-color var(--fui-transition-fast, $fui-transition-fast);
374
260
 
375
261
  &:hover {
376
- color: var(--fui-text-primary, $fui-text-primary);
377
262
  background-color: var(--fui-bg-hover, $fui-bg-hover);
263
+ color: var(--fui-text-primary, $fui-text-primary);
378
264
  }
379
265
 
380
266
  &:focus-visible {
@@ -383,8 +269,8 @@
383
269
  }
384
270
 
385
271
  .expandIcon {
386
- width: var(--fui-icon-xs, $fui-icon-xs);
387
- height: var(--fui-icon-xs, $fui-icon-xs);
272
+ @include action.glyph("sm");
273
+
388
274
  transition: transform var(--fui-transition-fast, $fui-transition-fast);
389
275
  }
390
276
 
@@ -394,64 +280,38 @@
394
280
 
395
281
  .subRow {
396
282
  background-color: var(--fui-table-subrow-bg, var(--fui-bg-subtle, #{$fui-bg-subtle}));
397
-
398
- &:hover {
399
- background-color: var(--fui-table-row-hover-bg, var(--fui-bg-hover, #{$fui-bg-hover}));
400
- }
401
283
  }
402
284
 
403
- // Empty state
404
285
  .emptyState {
405
286
  display: flex;
406
287
  align-items: center;
407
288
  justify-content: center;
408
- padding: var(--fui-space-12, $fui-space-12) var(--fui-space-6, $fui-space-6);
289
+ padding-block: var(--fui-raw-space-48);
290
+ padding-inline: var(--fui-raw-space-24);
409
291
  }
410
292
 
411
293
  .emptyMessage {
412
- font-family: var(--fui-font-sans, $fui-font-sans);
413
- font-size: var(--fui-font-size-sm, $fui-font-size-sm);
414
- color: var(--fui-text-tertiary, $fui-text-tertiary);
415
- }
294
+ @include typography.role("body-compact");
416
295
 
417
- // Responsive: allow horizontal scroll on small screens
418
- @include below-sm {
419
- .wrapper {
420
- margin-left: calc(-1 * var(--fui-space-4, $fui-space-4));
421
- margin-right: calc(-1 * var(--fui-space-4, $fui-space-4));
422
- padding-left: var(--fui-space-4, $fui-space-4);
423
- padding-right: var(--fui-space-4, $fui-space-4);
424
- }
296
+ color: var(--fui-text-tertiary, $fui-text-tertiary);
425
297
  }
426
298
 
427
- // ============================================
428
- // Accessibility: High Contrast Mode
429
- // ============================================
430
-
431
299
  @media (prefers-contrast: more) {
432
- .headerRow {
433
- border-bottom-width: 2px;
434
- }
435
-
300
+ .headerRow,
436
301
  .row {
437
- border-bottom-width: 2px;
438
- }
439
-
440
- .sortButton:focus-visible {
441
- outline-width: 3px;
302
+ border-block-end-color: CanvasText;
442
303
  }
443
304
  }
444
305
 
445
- // ============================================
446
- // Accessibility: Reduced Motion
447
- // ============================================
448
-
449
306
  @media (prefers-reduced-motion: reduce) {
450
- .row {
307
+ .row,
308
+ .sortButton,
309
+ .sortIndicator,
310
+ .expandIcon {
451
311
  transition: none;
452
312
  }
453
313
 
454
- .sortButton {
455
- transition: none;
314
+ .skeletonBar {
315
+ animation: none;
456
316
  }
457
317
  }
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  import * as React from "react";
4
+ import { resolveTableDensity, type TableDensityInput } from "../../recipes/table-chrome";
4
5
  import styles from "./DataTable.module.scss";
5
6
  import { Checkbox } from "../Checkbox";
6
7
  import { ExpandIcon, SortAscIcon, SortDescIcon, SortIcon } from "./DataTable.icons";
@@ -66,8 +67,8 @@ function useReactTableDeps(): "ready" | "pending" | "failed" {
66
67
 
67
68
  /** Horizontal alignment for a column's header + cells. */
68
69
  export type ColumnAlign = "left" | "right" | "center";
69
- /** Row density preset condensed 40px / regular 48px / relaxed 56px. */
70
- export type DataTableDensity = "condensed" | "regular" | "relaxed";
70
+ /** Row density preset. `condensed` is retained as an alias for `compact`. */
71
+ export type DataTableDensity = TableDensityInput;
71
72
 
72
73
  // ============================================
73
74
  // Types (self-owned — no external dependency for types)
@@ -140,11 +141,11 @@ export interface DataTableProps<T> extends Omit<React.HTMLAttributes<HTMLTableEl
140
141
  loading?: boolean;
141
142
  /** Number of skeleton rows to show while loading (default 6). */
142
143
  skeletonRows?: number;
143
- /** Row density preset — condensed 40 / regular 48 / relaxed 56. */
144
+ /** Canonical row density. `condensed` is a deprecated alias for `compact`. */
144
145
  density?: DataTableDensity;
145
146
  /** Hide the column header row (e.g. stacked per-group tables share one). */
146
147
  hideHeader?: boolean;
147
- /** Size variant (cell padding). */
148
+ /** @deprecated Use density. Retained until the next major-version review. */
148
149
  size?: "sm" | "md";
149
150
  /** Visible caption for the table (recommended for accessibility) */
150
151
  caption?: string;
@@ -181,8 +182,6 @@ function getColumnSizeStyle(column: {
181
182
  }
182
183
 
183
184
  function computeTableClasses(opts: {
184
- size: "sm" | "md";
185
- density?: DataTableDensity;
186
185
  striped: boolean;
187
186
  bordered: boolean;
188
187
  hasExplicitColumnSizing: boolean;
@@ -190,20 +189,9 @@ function computeTableClasses(opts: {
190
189
  wrapperClassName?: string;
191
190
  wrapperPropsClassName?: string;
192
191
  }): { rootClasses: string; wrapperClasses: string } {
193
- const densityClass =
194
- opts.density === "condensed"
195
- ? styles.densityCondensed
196
- : opts.density === "regular"
197
- ? styles.densityRegular
198
- : opts.density === "relaxed"
199
- ? styles.densityRelaxed
200
- : undefined;
201
-
202
192
  const rootClasses = [
203
193
  styles.table,
204
194
  opts.hasExplicitColumnSizing && styles.fixedLayout,
205
- styles[opts.size],
206
- densityClass,
207
195
  opts.striped && styles.striped,
208
196
  opts.className,
209
197
  ]
@@ -360,9 +348,8 @@ function DataTableLive<T>({
360
348
 
361
349
  const isEmpty = !loading && data.length === 0;
362
350
  const { className: wrapperPropsClassName, ...restWrapperProps } = wrapperProps ?? {};
351
+ const resolvedDensity = resolveTableDensity({ density, size });
363
352
  const { rootClasses, wrapperClasses } = computeTableClasses({
364
- size,
365
- density,
366
353
  striped,
367
354
  bordered,
368
355
  hasExplicitColumnSizing,
@@ -377,6 +364,7 @@ function DataTableLive<T>({
377
364
  <table
378
365
  {...htmlProps}
379
366
  className={rootClasses}
367
+ data-density={resolvedDensity}
380
368
  aria-label={ariaLabel}
381
369
  aria-describedby={ariaDescribedBy}
382
370
  >
@@ -405,6 +393,7 @@ function DataTableLive<T>({
405
393
  {...htmlProps}
406
394
  ref={tableRef}
407
395
  className={rootClasses}
396
+ data-density={resolvedDensity}
408
397
  aria-label={ariaLabel}
409
398
  aria-describedby={ariaDescribedBy}
410
399
  aria-busy={loading || undefined}
@@ -545,15 +534,19 @@ function DataTableLive<T>({
545
534
  return (
546
535
  <td
547
536
  key={cell.id}
548
- className={[styles.td, truncate && styles.truncate]
537
+ className={[
538
+ styles.td,
539
+ isFirstDataCell && styles.treeCell,
540
+ truncate && styles.truncate,
541
+ ]
549
542
  .filter(Boolean)
550
543
  .join(" ")}
551
544
  data-align={colDef.align}
552
545
  title={typeof rawValue === "string" ? rawValue : undefined}
553
546
  style={{
554
547
  ...getColumnSizeStyle(cell.column),
555
- ...(isFirstDataCell && depth > 0
556
- ? { paddingLeft: `${depth * 24 + 12}px` }
548
+ ...(isFirstDataCell
549
+ ? ({ "--_fui-table-tree-depth": depth } as React.CSSProperties)
557
550
  : undefined),
558
551
  }}
559
552
  >
@@ -663,9 +656,8 @@ function DataTableStatic<T>({
663
656
  column.size !== undefined || column.minSize !== undefined || column.maxSize !== undefined
664
657
  );
665
658
  const { className: wrapperPropsClassName, ...restWrapperProps } = wrapperProps ?? {};
659
+ const resolvedDensity = resolveTableDensity({ density, size });
666
660
  const { rootClasses, wrapperClasses } = computeTableClasses({
667
- size,
668
- density,
669
661
  striped,
670
662
  bordered,
671
663
  hasExplicitColumnSizing,
@@ -683,6 +675,7 @@ function DataTableStatic<T>({
683
675
  <table
684
676
  {...htmlProps}
685
677
  className={rootClasses}
678
+ data-density={resolvedDensity}
686
679
  aria-label={ariaLabel}
687
680
  aria-describedby={ariaDescribedBy}
688
681
  aria-busy={showSkeleton || undefined}
@@ -704,7 +697,9 @@ function DataTableStatic<T>({
704
697
  data-align={col.align}
705
698
  >
706
699
  <div className={styles.headerContent}>
707
- {typeof col.header === "string" ? col.header : (col.id ?? col.accessorKey ?? "")}
700
+ {typeof col.header === "string"
701
+ ? col.header
702
+ : (col.id ?? col.accessorKey ?? "")}
708
703
  </div>
709
704
  </th>
710
705
  ))}