@usefragments/ui 1.5.3 → 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,8 +1,9 @@
1
- 'use client';
1
+ "use client";
2
2
 
3
- import * as React from 'react';
4
- import { Menu as BaseMenu } from '@base-ui/react/menu';
5
- import styles from './Menu.module.scss';
3
+ import * as React from "react";
4
+ import { Menu as BaseMenu } from "@base-ui/react/menu";
5
+ import { POPUP_OFFSET_PX } from "../../recipes/popup";
6
+ import styles from "./Menu.module.scss";
6
7
 
7
8
  // ============================================
8
9
  // Types
@@ -20,7 +21,7 @@ type MenuTriggerAsButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> &
20
21
  children: React.ReactNode;
21
22
  asChild?: false;
22
23
  };
23
- type MenuTriggerAsChildProps = Omit<React.HTMLAttributes<HTMLElement>, 'children'> & {
24
+ type MenuTriggerAsChildProps = Omit<React.HTMLAttributes<HTMLElement>, "children"> & {
24
25
  children: React.ReactElement;
25
26
  asChild: true;
26
27
  };
@@ -28,12 +29,15 @@ export type MenuTriggerProps = MenuTriggerAsButtonProps | MenuTriggerAsChildProp
28
29
 
29
30
  export interface MenuContentProps extends React.HTMLAttributes<HTMLDivElement> {
30
31
  children: React.ReactNode;
31
- side?: 'top' | 'bottom' | 'left' | 'right';
32
- align?: 'start' | 'center' | 'end';
32
+ side?: "top" | "bottom" | "left" | "right";
33
+ align?: "start" | "center" | "end";
33
34
  sideOffset?: number;
34
35
  }
35
36
 
36
- export interface MenuItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children' | 'onSelect'> {
37
+ export interface MenuItemProps extends Omit<
38
+ React.HTMLAttributes<HTMLElement>,
39
+ "children" | "onSelect"
40
+ > {
37
41
  children: React.ReactNode;
38
42
  disabled?: boolean;
39
43
  danger?: boolean;
@@ -44,7 +48,10 @@ export interface MenuItemProps extends Omit<React.HTMLAttributes<HTMLElement>, '
44
48
  checked?: boolean;
45
49
  }
46
50
 
47
- export interface MenuCheckboxItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children' | 'onChange'> {
51
+ export interface MenuCheckboxItemProps extends Omit<
52
+ React.HTMLAttributes<HTMLElement>,
53
+ "children" | "onChange"
54
+ > {
48
55
  children: React.ReactNode;
49
56
  checked?: boolean;
50
57
  defaultChecked?: boolean;
@@ -59,7 +66,7 @@ export interface MenuRadioGroupProps {
59
66
  onValueChange?: (value: string) => void;
60
67
  }
61
68
 
62
- export interface MenuRadioItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {
69
+ export interface MenuRadioItemProps extends Omit<React.HTMLAttributes<HTMLElement>, "children"> {
63
70
  children: React.ReactNode;
64
71
  value: string;
65
72
  disabled?: boolean;
@@ -130,20 +137,9 @@ function DotIcon() {
130
137
  // Components
131
138
  // ============================================
132
139
 
133
- function MenuRoot({
134
- children,
135
- open,
136
- defaultOpen,
137
- onOpenChange,
138
- modal = true,
139
- }: MenuProps) {
140
+ function MenuRoot({ children, open, defaultOpen, onOpenChange, modal = true }: MenuProps) {
140
141
  return (
141
- <BaseMenu.Root
142
- open={open}
143
- defaultOpen={defaultOpen}
144
- onOpenChange={onOpenChange}
145
- modal={modal}
146
- >
142
+ <BaseMenu.Root open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange} modal={modal}>
147
143
  {children}
148
144
  </BaseMenu.Root>
149
145
  );
@@ -152,10 +148,14 @@ function MenuRoot({
152
148
  function MenuTrigger({ children, asChild, className, ...htmlProps }: MenuTriggerProps) {
153
149
  if (asChild) {
154
150
  if (!React.isValidElement(children)) {
155
- throw new Error('Menu.Trigger with asChild requires a single valid React element child.');
151
+ throw new Error("Menu.Trigger with asChild requires a single valid React element child.");
156
152
  }
157
153
  return (
158
- <BaseMenu.Trigger {...htmlProps} className={className} render={children as React.ReactElement}>
154
+ <BaseMenu.Trigger
155
+ {...htmlProps}
156
+ className={className}
157
+ render={children as React.ReactElement}
158
+ >
159
159
  {null}
160
160
  </BaseMenu.Trigger>
161
161
  );
@@ -164,7 +164,7 @@ function MenuTrigger({ children, asChild, className, ...htmlProps }: MenuTrigger
164
164
  return (
165
165
  <BaseMenu.Trigger
166
166
  {...htmlProps}
167
- type={(htmlProps as React.ButtonHTMLAttributes<HTMLButtonElement>).type ?? 'button'}
167
+ type={(htmlProps as React.ButtonHTMLAttributes<HTMLButtonElement>).type ?? "button"}
168
168
  className={className}
169
169
  >
170
170
  {children}
@@ -175,12 +175,12 @@ function MenuTrigger({ children, asChild, className, ...htmlProps }: MenuTrigger
175
175
  function MenuContent({
176
176
  children,
177
177
  className,
178
- side = 'bottom',
179
- align = 'start',
180
- sideOffset = 4,
178
+ side = "bottom",
179
+ align = "start",
180
+ sideOffset = POPUP_OFFSET_PX,
181
181
  ...htmlProps
182
182
  }: MenuContentProps) {
183
- const popupClasses = [styles.popup, className].filter(Boolean).join(' ');
183
+ const popupClasses = [styles.popup, className].filter(Boolean).join(" ");
184
184
 
185
185
  return (
186
186
  <BaseMenu.Portal>
@@ -191,9 +191,7 @@ function MenuContent({
191
191
  className={styles.positioner}
192
192
  >
193
193
  <BaseMenu.Popup {...htmlProps} className={popupClasses}>
194
- <BaseMenu.Viewport className={styles.viewport}>
195
- {children}
196
- </BaseMenu.Viewport>
194
+ <BaseMenu.Viewport className={styles.viewport}>{children}</BaseMenu.Viewport>
197
195
  </BaseMenu.Popup>
198
196
  </BaseMenu.Positioner>
199
197
  </BaseMenu.Portal>
@@ -216,15 +214,11 @@ function MenuItem({
216
214
  (htmlProps.onClick as React.MouseEventHandler<HTMLElement> | undefined)?.(event);
217
215
  onSelect?.(event);
218
216
  },
219
- [htmlProps, onSelect],
217
+ [htmlProps, onSelect]
220
218
  );
221
219
 
222
220
  const hasChecked = checked !== undefined;
223
- const classes = [
224
- styles.item,
225
- danger && styles.itemDanger,
226
- className,
227
- ].filter(Boolean).join(' ');
221
+ const classes = [styles.item, danger && styles.itemDanger, className].filter(Boolean).join(" ");
228
222
 
229
223
  return (
230
224
  <BaseMenu.Item
@@ -234,9 +228,7 @@ function MenuItem({
234
228
  className={classes}
235
229
  >
236
230
  {hasChecked && (
237
- <span className={styles.checkIndicator}>
238
- {checked ? <CheckmarkIcon /> : null}
239
- </span>
231
+ <span className={styles.checkIndicator}>{checked ? <CheckmarkIcon /> : null}</span>
240
232
  )}
241
233
  {icon && <span className={styles.itemIcon}>{icon}</span>}
242
234
  <span className={styles.itemLabel}>{children}</span>
@@ -263,12 +255,10 @@ function MenuCheckboxItem({
263
255
  if (!isControlled) setInternalChecked(value);
264
256
  onCheckedChange?.(value);
265
257
  },
266
- [isControlled, onCheckedChange],
258
+ [isControlled, onCheckedChange]
267
259
  );
268
260
 
269
- const classes = [styles.item, styles.checkboxItem, className]
270
- .filter(Boolean)
271
- .join(' ');
261
+ const classes = [styles.item, styles.checkboxItem, className].filter(Boolean).join(" ");
272
262
 
273
263
  return (
274
264
  <BaseMenu.CheckboxItem
@@ -279,41 +269,22 @@ function MenuCheckboxItem({
279
269
  disabled={disabled}
280
270
  className={classes}
281
271
  >
282
- <span className={styles.checkIndicator}>
283
- {visualChecked ? <CheckmarkIcon /> : null}
284
- </span>
272
+ <span className={styles.checkIndicator}>{visualChecked ? <CheckmarkIcon /> : null}</span>
285
273
  <span className={styles.itemLabel}>{children}</span>
286
274
  </BaseMenu.CheckboxItem>
287
275
  );
288
276
  }
289
277
 
290
- function MenuRadioGroup({
291
- children,
292
- value,
293
- defaultValue,
294
- onValueChange,
295
- }: MenuRadioGroupProps) {
278
+ function MenuRadioGroup({ children, value, defaultValue, onValueChange }: MenuRadioGroupProps) {
296
279
  return (
297
- <BaseMenu.RadioGroup
298
- value={value}
299
- defaultValue={defaultValue}
300
- onValueChange={onValueChange}
301
- >
280
+ <BaseMenu.RadioGroup value={value} defaultValue={defaultValue} onValueChange={onValueChange}>
302
281
  {children}
303
282
  </BaseMenu.RadioGroup>
304
283
  );
305
284
  }
306
285
 
307
- function MenuRadioItem({
308
- children,
309
- value,
310
- disabled,
311
- className,
312
- ...htmlProps
313
- }: MenuRadioItemProps) {
314
- const classes = [styles.item, styles.radioItem, className]
315
- .filter(Boolean)
316
- .join(' ');
286
+ function MenuRadioItem({ children, value, disabled, className, ...htmlProps }: MenuRadioItemProps) {
287
+ const classes = [styles.item, styles.radioItem, className].filter(Boolean).join(" ");
317
288
 
318
289
  return (
319
290
  <BaseMenu.RadioItem {...htmlProps} value={value} disabled={disabled} className={classes}>
@@ -326,32 +297,31 @@ function MenuRadioItem({
326
297
  }
327
298
 
328
299
  function MenuGroup({ children, className, ...htmlProps }: MenuGroupProps) {
329
- const classes = [styles.group, className].filter(Boolean).join(' ');
330
- return <BaseMenu.Group {...htmlProps} className={classes}>{children}</BaseMenu.Group>;
300
+ const classes = [styles.group, className].filter(Boolean).join(" ");
301
+ return (
302
+ <BaseMenu.Group {...htmlProps} className={classes}>
303
+ {children}
304
+ </BaseMenu.Group>
305
+ );
331
306
  }
332
307
 
333
308
  function MenuGroupLabel({ children, className, ...htmlProps }: MenuGroupLabelProps) {
334
- const classes = [styles.groupLabel, className].filter(Boolean).join(' ');
335
- return <BaseMenu.GroupLabel {...htmlProps} className={classes}>{children}</BaseMenu.GroupLabel>;
309
+ const classes = [styles.groupLabel, className].filter(Boolean).join(" ");
310
+ return (
311
+ <BaseMenu.GroupLabel {...htmlProps} className={classes}>
312
+ {children}
313
+ </BaseMenu.GroupLabel>
314
+ );
336
315
  }
337
316
 
338
317
  function MenuSeparator({ className, ...htmlProps }: MenuSeparatorProps) {
339
- const classes = [styles.separator, className].filter(Boolean).join(' ');
318
+ const classes = [styles.separator, className].filter(Boolean).join(" ");
340
319
  return <BaseMenu.Separator {...htmlProps} className={classes} />;
341
320
  }
342
321
 
343
- function MenuSubmenu({
344
- children,
345
- open,
346
- defaultOpen,
347
- onOpenChange,
348
- }: MenuSubmenuProps) {
322
+ function MenuSubmenu({ children, open, defaultOpen, onOpenChange }: MenuSubmenuProps) {
349
323
  return (
350
- <BaseMenu.SubmenuRoot
351
- open={open}
352
- defaultOpen={defaultOpen}
353
- onOpenChange={onOpenChange}
354
- >
324
+ <BaseMenu.SubmenuRoot open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>
355
325
  {children}
356
326
  </BaseMenu.SubmenuRoot>
357
327
  );
@@ -364,9 +334,7 @@ function MenuSubmenuTrigger({
364
334
  icon,
365
335
  ...htmlProps
366
336
  }: MenuSubmenuTriggerProps) {
367
- const classes = [styles.item, styles.submenuTrigger, className]
368
- .filter(Boolean)
369
- .join(' ');
337
+ const classes = [styles.item, styles.submenuTrigger, className].filter(Boolean).join(" ");
370
338
 
371
339
  return (
372
340
  <BaseMenu.SubmenuTrigger {...htmlProps} disabled={disabled} className={classes}>
@@ -1,61 +1,35 @@
1
1
  @use "../../tokens/variables" as *;
2
- @use "../../tokens/mixins" as *;
3
-
4
- // ============================================
5
- // Message Root
6
- // ============================================
2
+ @use "../../recipes/layout" as layout;
3
+ @use "../../recipes/prose" as prose;
4
+ @use "../../recipes/typography" as typography;
7
5
 
8
6
  .message {
9
7
  display: flex;
10
- gap: var(--fui-space-2, $fui-space-2);
11
- padding: var(--fui-space-2, $fui-space-2);
8
+ gap: layout.gap("md");
9
+ padding: layout.gap("md");
12
10
  border-radius: var(--fui-radius-lg, $fui-radius-lg);
13
11
  transition: background-color var(--fui-transition-fast, $fui-transition-fast);
14
12
 
15
- &:hover {
16
- .actions {
17
- opacity: 1;
18
- }
19
- }
20
-
21
- &:focus-within {
22
- .actions {
23
- opacity: 1;
24
- }
13
+ &:hover .actions,
14
+ &:focus-within .actions {
15
+ opacity: 1;
25
16
  }
26
17
  }
27
18
 
28
19
  .withoutAvatar {
29
- padding-inline: 0;
30
-
31
- // Avatarless assistant prose is part of the transcript rather than a bubble,
32
- // so it should sit flush with the shared measure. The user's own turn remains
33
- // a compact bubble to preserve authorship and alignment at a glance.
34
- &.assistant {
35
- .content {
36
- padding: 0;
37
- }
38
- }
39
-
40
- &.user {
41
- .content {
42
- padding: var(--fui-space-1, $fui-space-1) var(--fui-space-2, $fui-space-2);
43
- }
20
+ &.assistant .content {
21
+ background: transparent;
44
22
  }
45
23
  }
46
24
 
47
- // Role-based styles
48
25
  .user {
49
26
  flex-direction: row-reverse;
50
- margin-left: auto;
27
+ margin-inline-start: auto;
51
28
 
52
29
  .body {
53
30
  align-items: flex-end;
54
31
  }
55
32
 
56
- // Alignment, measure and the neutral surface distinguish the user's turn.
57
- // Brand accent is reserved for actions and semantic state, not transcript
58
- // chrome.
59
33
  .content {
60
34
  max-inline-size: 80%;
61
35
  background-color: var(--fui-bg-tertiary, $fui-bg-tertiary);
@@ -63,21 +37,18 @@
63
37
  }
64
38
  }
65
39
 
66
- .assistant {
67
- .content {
68
- background-color: var(--fui-bg-secondary, $fui-bg-secondary);
69
- color: var(--fui-text-primary, $fui-text-primary);
70
- }
40
+ .assistant .content {
41
+ background-color: var(--fui-bg-secondary, $fui-bg-secondary);
42
+ color: var(--fui-text-primary, $fui-text-primary);
71
43
  }
72
44
 
73
45
  .system {
74
- max-width: 100%;
46
+ max-inline-size: 100%;
75
47
  justify-content: center;
76
48
 
77
49
  .content {
78
50
  background-color: var(--fui-color-info-bg, $fui-color-info-bg);
79
51
  color: var(--fui-text-secondary, $fui-text-secondary);
80
- font-size: var(--fui-font-size-xs, $fui-font-size-xs);
81
52
  text-align: center;
82
53
  }
83
54
 
@@ -86,45 +57,21 @@
86
57
  }
87
58
  }
88
59
 
89
- // Status styles
90
- .error {
91
- .content {
92
- background: var(--fui-color-danger-bg, $fui-color-danger-bg);
93
- border: 1px solid var(--fui-color-danger-border, $fui-color-danger-border);
94
- color: var(--fui-color-danger-text, $fui-color-danger-text);
95
- }
60
+ .error .content {
61
+ border: var(--fui-stroke-hairline) solid var(--fui-color-danger-border, $fui-color-danger-border);
62
+ background: var(--fui-color-danger-bg, $fui-color-danger-bg);
63
+ color: var(--fui-color-danger-text, $fui-color-danger-text);
96
64
  }
97
65
 
98
66
  .sending {
99
67
  opacity: 0.7;
100
68
  }
101
69
 
102
- // ============================================
103
- // Avatar
104
- // ============================================
105
-
106
70
  .avatar {
107
71
  flex-shrink: 0;
108
- display: flex;
109
- align-items: center;
110
- justify-content: center;
111
- width: 2rem;
112
- height: 2rem;
113
- border-radius: var(--fui-radius-full, $fui-radius-full);
114
- background-color: var(--fui-bg-tertiary, $fui-bg-tertiary);
115
- color: var(--fui-text-secondary, $fui-text-secondary);
116
-
117
- svg {
118
- width: 1rem;
119
- height: 1rem;
120
- }
121
- }
122
-
123
- .avatarUser {
124
- background-color: var(--fui-bg-tertiary, $fui-bg-tertiary);
125
- color: var(--fui-text-primary, $fui-text-primary);
126
72
  }
127
73
 
74
+ .avatarUser,
128
75
  .avatarAssistant {
129
76
  background-color: var(--fui-bg-tertiary, $fui-bg-tertiary);
130
77
  color: var(--fui-text-primary, $fui-text-primary);
@@ -137,91 +84,65 @@
137
84
 
138
85
  .avatarImage {
139
86
  padding: 0;
140
- overflow: hidden;
141
87
  }
142
88
 
143
- .avatarImg {
144
- width: 100%;
145
- height: 100%;
146
- object-fit: cover;
147
- }
148
-
149
- // ============================================
150
- // Body (content container)
151
- // ============================================
152
-
153
89
  .body {
154
90
  display: flex;
155
- flex-direction: column;
156
- gap: var(--fui-space-1, $fui-space-1);
157
- min-width: 0;
158
91
  flex: 1;
92
+ flex-direction: column;
93
+ gap: layout.gap("xs");
94
+ min-inline-size: 0;
159
95
  }
160
96
 
161
- // ============================================
162
- // Content
163
- // ============================================
164
-
165
97
  .content {
166
- @include text-base;
167
- padding: var(--fui-space-2, $fui-space-2) var(--fui-space-3, $fui-space-3);
168
- border-radius: var(--fui-radius-lg, $fui-radius-lg);
169
- line-height: var(--fui-line-height-normal, $fui-line-height-normal);
170
- word-wrap: break-word;
98
+ @include prose.root;
171
99
 
172
- // A bubble sets its own foreground per role — primary text for the user, the
173
- // danger ramp for an error. Anything rendered inside it has to take that
174
- // colour rather than the page's, so a Markdown body dropped in here inherits
175
- // instead of holding on to the prose grey.
176
100
  --fui-markdown-text: currentColor;
177
101
 
178
- // Prose styling for markdown content
179
- p {
180
- margin: 0;
102
+ padding-block: layout.gap("sm");
103
+ padding-inline: layout.gap("md");
104
+ border-radius: var(--fui-radius-lg, $fui-radius-lg);
105
+ overflow-wrap: anywhere;
181
106
 
182
- & + p {
183
- margin-top: var(--fui-space-2, $fui-space-2);
184
- }
107
+ p {
108
+ @include prose.paragraph;
185
109
  }
186
110
 
187
111
  code {
188
- font-family: var(--fui-font-mono, $fui-font-mono);
189
- font-size: 0.9em;
190
- padding: 0.125em 0.375em;
191
- border-radius: var(--fui-radius-sm, $fui-radius-sm);
192
- background-color: var(--fui-bg-subtle, $fui-bg-subtle);
112
+ @include prose.inline-code;
193
113
  }
194
114
 
195
115
  pre {
196
- margin: var(--fui-space-2, $fui-space-2) 0;
197
- padding: var(--fui-space-2, $fui-space-2);
116
+ @include prose.code-block("compact");
117
+
198
118
  border-radius: var(--fui-radius-md, $fui-radius-md);
199
119
  background-color: var(--fui-bg-subtle, $fui-bg-subtle);
200
- overflow-x: auto;
201
120
 
202
121
  code {
203
122
  padding: 0;
204
123
  background: none;
124
+ font: inherit;
125
+ letter-spacing: inherit;
205
126
  }
206
127
  }
207
128
 
208
- ul,
129
+ ul {
130
+ @include prose.list("disc");
131
+ }
132
+
209
133
  ol {
210
- margin: var(--fui-space-2, $fui-space-2) 0;
211
- padding-left: var(--fui-space-4, $fui-space-4);
134
+ @include prose.list("decimal");
212
135
  }
213
136
  }
214
137
 
215
- .streaming {
216
- &::after {
217
- content: "";
218
- display: inline-block;
219
- width: 0.5em;
220
- height: 1em;
221
- margin-left: 2px;
222
- background-color: currentColor;
223
- animation: blink 1s step-end infinite;
224
- }
138
+ .streaming::after {
139
+ content: "";
140
+ display: inline-block;
141
+ inline-size: 0.5em;
142
+ block-size: 1em;
143
+ margin-inline-start: var(--fui-raw-space-2);
144
+ background-color: currentColor;
145
+ animation: blink 1s step-end infinite;
225
146
  }
226
147
 
227
148
  @keyframes blink {
@@ -229,37 +150,26 @@
229
150
  100% {
230
151
  opacity: 1;
231
152
  }
153
+
232
154
  50% {
233
155
  opacity: 0;
234
156
  }
235
157
  }
236
158
 
237
- // ============================================
238
- // Actions
239
- // ============================================
240
-
241
159
  .actions {
242
160
  display: flex;
243
161
  align-items: center;
244
- gap: var(--fui-space-1, $fui-space-1);
162
+ gap: layout.gap("xs");
245
163
  opacity: 0;
246
164
  transition: opacity var(--fui-transition-fast, $fui-transition-fast);
247
165
  }
248
166
 
249
- // ============================================
250
- // Timestamp
251
- // ============================================
252
-
253
167
  .timestamp {
254
- @include helper-text;
255
- font-size: var(--fui-font-size-2xs, $fui-font-size-2xs);
168
+ @include typography.role("caption");
169
+
256
170
  color: var(--fui-text-secondary, $fui-text-secondary);
257
171
  }
258
172
 
259
- // ============================================
260
- // Reduced Motion
261
- // ============================================
262
-
263
173
  @media (prefers-reduced-motion: reduce) {
264
174
  .streaming::after {
265
175
  animation: none;
@@ -2,6 +2,7 @@
2
2
 
3
3
  import * as React from 'react';
4
4
  import styles from './Message.module.scss';
5
+ import { Avatar } from '../Avatar';
5
6
  import { useOptionalConversationList } from '../ConversationList';
6
7
  import { Markdown } from '../Markdown';
7
8
 
@@ -215,14 +216,23 @@ function MessageAvatar({ children, src, alt, className, ...htmlProps }: MessageA
215
216
  ? <AssistantIcon />
216
217
  : <SystemIcon />;
217
218
 
218
- const content = children ?? (src
219
- ? <img src={src} alt={alt ?? role} className={styles.avatarImg} />
220
- : defaultIcon);
219
+ if (children !== undefined) {
220
+ return (
221
+ <div {...htmlProps} className={classes}>
222
+ {children}
223
+ </div>
224
+ );
225
+ }
221
226
 
222
227
  return (
223
- <div {...htmlProps} className={classes}>
224
- {content}
225
- </div>
228
+ <Avatar
229
+ {...htmlProps}
230
+ src={src}
231
+ alt={alt ?? role}
232
+ size="sm"
233
+ fallback={defaultIcon}
234
+ className={classes}
235
+ />
226
236
  );
227
237
  }
228
238