@usefragments/ui 1.7.0 → 2.0.1

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 (551) hide show
  1. package/README.md +54 -66
  2. package/dist/assets/nav-glyph.cjs +139 -0
  3. package/dist/assets/nav-glyph.d.ts +28 -0
  4. package/dist/assets/nav-glyph.d.ts.map +1 -0
  5. package/dist/assets/nav-glyph.js +139 -0
  6. package/dist/assets/nav-glyph.module.scss.cjs +71 -0
  7. package/dist/assets/nav-glyph.module.scss.js +71 -0
  8. package/dist/assets/ui.css +4975 -4959
  9. package/dist/blocks/components/StatsCard.d.ts +1 -1
  10. package/dist/blocks/components/StatsCard.d.ts.map +1 -1
  11. package/dist/codeblock.cjs +23 -16
  12. package/dist/codeblock.js +16 -9
  13. package/dist/colorpicker.cjs +1 -0
  14. package/dist/colorpicker.js +1 -0
  15. package/dist/components/Accordion/Accordion.module.scss.cjs +8 -8
  16. package/dist/components/Accordion/Accordion.module.scss.js +8 -8
  17. package/dist/components/Alert/Alert.module.scss.cjs +21 -21
  18. package/dist/components/Alert/Alert.module.scss.js +21 -21
  19. package/dist/components/Alert/index.cjs +14 -8
  20. package/dist/components/Alert/index.d.ts +9 -9
  21. package/dist/components/Alert/index.d.ts.map +1 -1
  22. package/dist/components/Alert/index.js +14 -8
  23. package/dist/components/AppShell/AppShell.module.scss.cjs +14 -14
  24. package/dist/components/AppShell/AppShell.module.scss.js +14 -14
  25. package/dist/components/AppShell/index.cjs +2 -2
  26. package/dist/components/AppShell/index.js +2 -2
  27. package/dist/components/Avatar/Avatar.module.scss.cjs +14 -14
  28. package/dist/components/Avatar/Avatar.module.scss.js +14 -14
  29. package/dist/components/Badge/Badge.module.scss.cjs +33 -31
  30. package/dist/components/Badge/Badge.module.scss.js +33 -31
  31. package/dist/components/Badge/index.cjs +13 -3
  32. package/dist/components/Badge/index.d.ts +18 -13
  33. package/dist/components/Badge/index.d.ts.map +1 -1
  34. package/dist/components/Badge/index.js +13 -3
  35. package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +14 -14
  36. package/dist/components/BentoGrid/BentoGrid.module.scss.js +14 -14
  37. package/dist/components/Box/Box.module.scss.cjs +152 -152
  38. package/dist/components/Box/Box.module.scss.js +152 -152
  39. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.cjs +11 -8
  40. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +11 -8
  41. package/dist/components/Breadcrumbs/index.cjs +1 -1
  42. package/dist/components/Breadcrumbs/index.d.ts.map +1 -1
  43. package/dist/components/Breadcrumbs/index.js +1 -1
  44. package/dist/components/Button/Button.module.scss.cjs +36 -27
  45. package/dist/components/Button/Button.module.scss.js +36 -27
  46. package/dist/components/Button/index.cjs +20 -4
  47. package/dist/components/Button/index.d.ts +18 -10
  48. package/dist/components/Button/index.d.ts.map +1 -1
  49. package/dist/components/Button/index.js +20 -4
  50. package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs +15 -15
  51. package/dist/components/ButtonGroup/ButtonGroup.module.scss.js +15 -15
  52. package/dist/components/Card/Card.module.scss.cjs +27 -34
  53. package/dist/components/Card/Card.module.scss.js +27 -34
  54. package/dist/components/Card/index.cjs +13 -8
  55. package/dist/components/Card/index.d.ts +23 -25
  56. package/dist/components/Card/index.d.ts.map +1 -1
  57. package/dist/components/Card/index.js +13 -8
  58. package/dist/components/Chart/Chart.module.scss.cjs +15 -15
  59. package/dist/components/Chart/Chart.module.scss.js +15 -15
  60. package/dist/components/Checkbox/Checkbox.module.scss.cjs +11 -11
  61. package/dist/components/Checkbox/Checkbox.module.scss.js +11 -11
  62. package/dist/components/Checkbox/index.cjs +2 -2
  63. package/dist/components/Checkbox/index.d.ts +4 -6
  64. package/dist/components/Checkbox/index.d.ts.map +1 -1
  65. package/dist/components/Checkbox/index.js +2 -2
  66. package/dist/components/Chip/Chip.module.scss.cjs +19 -19
  67. package/dist/components/Chip/Chip.module.scss.js +19 -19
  68. package/dist/components/Chip/index.cjs +1 -2
  69. package/dist/components/Chip/index.d.ts +8 -3
  70. package/dist/components/Chip/index.d.ts.map +1 -1
  71. package/dist/components/Chip/index.js +1 -2
  72. package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +22 -22
  73. package/dist/components/CodeBlock/CodeBlock.module.scss.js +22 -22
  74. package/dist/components/CodeBlock/index.d.ts +3 -2
  75. package/dist/components/CodeBlock/index.d.ts.map +1 -1
  76. package/dist/components/Collapsible/Collapsible.module.scss.cjs +9 -9
  77. package/dist/components/Collapsible/Collapsible.module.scss.js +9 -9
  78. package/dist/components/ColorPicker/ColorPicker.module.scss.cjs +14 -14
  79. package/dist/components/ColorPicker/ColorPicker.module.scss.js +14 -14
  80. package/dist/components/ColorPicker/index.d.ts.map +1 -1
  81. package/dist/components/Combobox/Combobox.module.scss.cjs +21 -21
  82. package/dist/components/Combobox/Combobox.module.scss.js +21 -21
  83. package/dist/components/Combobox/index.cjs +9 -5
  84. package/dist/components/Combobox/index.d.ts.map +1 -1
  85. package/dist/components/Combobox/index.js +9 -5
  86. package/dist/components/Command/Command.module.scss.cjs +14 -11
  87. package/dist/components/Command/Command.module.scss.js +14 -11
  88. package/dist/components/Command/index.cjs +2 -1
  89. package/dist/components/Command/index.d.ts +6 -1
  90. package/dist/components/Command/index.d.ts.map +1 -1
  91. package/dist/components/Command/index.js +2 -1
  92. package/dist/components/ConversationList/ConversationList.module.scss.cjs +10 -10
  93. package/dist/components/ConversationList/ConversationList.module.scss.js +10 -10
  94. package/dist/components/ConversationList/index.cjs +2 -2
  95. package/dist/components/ConversationList/index.js +2 -2
  96. package/dist/components/DataTable/DataTable.module.scss.cjs +31 -28
  97. package/dist/components/DataTable/DataTable.module.scss.js +31 -28
  98. package/dist/components/DataTable/DataTable.virtual.d.ts.map +1 -1
  99. package/dist/components/DatePicker/DatePicker.module.scss.cjs +33 -33
  100. package/dist/components/DatePicker/DatePicker.module.scss.js +33 -33
  101. package/dist/components/DatePicker/index.d.ts.map +1 -1
  102. package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
  103. package/dist/components/Dialog/Dialog.module.scss.js +14 -14
  104. package/dist/components/Dialog/index.cjs +2 -2
  105. package/dist/components/Dialog/index.d.ts +5 -4
  106. package/dist/components/Dialog/index.d.ts.map +1 -1
  107. package/dist/components/Dialog/index.js +2 -2
  108. package/dist/components/Drawer/Drawer.module.scss.cjs +39 -39
  109. package/dist/components/Drawer/Drawer.module.scss.js +40 -40
  110. package/dist/components/Drawer/index.cjs +2 -2
  111. package/dist/components/Drawer/index.d.ts +5 -4
  112. package/dist/components/Drawer/index.d.ts.map +1 -1
  113. package/dist/components/Drawer/index.js +2 -2
  114. package/dist/components/Editor/Editor.module.scss.cjs +17 -17
  115. package/dist/components/Editor/Editor.module.scss.js +17 -17
  116. package/dist/components/EmptyState/EmptyState.module.scss.cjs +11 -11
  117. package/dist/components/EmptyState/EmptyState.module.scss.js +11 -11
  118. package/dist/components/EmptyState/index.cjs +9 -4
  119. package/dist/components/EmptyState/index.d.ts +8 -5
  120. package/dist/components/EmptyState/index.d.ts.map +1 -1
  121. package/dist/components/EmptyState/index.js +9 -4
  122. package/dist/components/Field/Field.module.scss.cjs +5 -5
  123. package/dist/components/Field/Field.module.scss.js +5 -5
  124. package/dist/components/Fieldset/Fieldset.module.scss.cjs +3 -3
  125. package/dist/components/Fieldset/Fieldset.module.scss.js +3 -3
  126. package/dist/components/Grid/Grid.module.scss.cjs +54 -54
  127. package/dist/components/Grid/Grid.module.scss.js +54 -54
  128. package/dist/components/Header/Header.module.scss.cjs +33 -33
  129. package/dist/components/Header/Header.module.scss.js +33 -33
  130. package/dist/components/Icon/Icon.module.scss.cjs +30 -33
  131. package/dist/components/Icon/Icon.module.scss.js +30 -33
  132. package/dist/components/Icon/index.cjs +15 -14
  133. package/dist/components/Icon/index.d.ts +23 -12
  134. package/dist/components/Icon/index.d.ts.map +1 -1
  135. package/dist/components/Icon/index.js +15 -14
  136. package/dist/components/IconButton/IconButton.module.scss.cjs +12 -12
  137. package/dist/components/IconButton/IconButton.module.scss.js +12 -12
  138. package/dist/components/IconButton/index.d.ts +4 -4
  139. package/dist/components/IconButton/index.d.ts.map +1 -1
  140. package/dist/components/Input/Input.module.scss.cjs +15 -21
  141. package/dist/components/Input/Input.module.scss.js +15 -21
  142. package/dist/components/Input/index.cjs +2 -14
  143. package/dist/components/Input/index.d.ts +0 -2
  144. package/dist/components/Input/index.d.ts.map +1 -1
  145. package/dist/components/Input/index.js +2 -14
  146. package/dist/components/Link/Link.module.scss.cjs +24 -16
  147. package/dist/components/Link/Link.module.scss.js +24 -16
  148. package/dist/components/Link/index.cjs +13 -2
  149. package/dist/components/Link/index.d.ts +10 -3
  150. package/dist/components/Link/index.d.ts.map +1 -1
  151. package/dist/components/Link/index.js +13 -2
  152. package/dist/components/List/List.module.scss.cjs +23 -19
  153. package/dist/components/List/List.module.scss.js +23 -19
  154. package/dist/components/List/index.cjs +7 -7
  155. package/dist/components/List/index.d.ts +10 -7
  156. package/dist/components/List/index.d.ts.map +1 -1
  157. package/dist/components/List/index.js +7 -7
  158. package/dist/components/Listbox/Listbox.module.scss.cjs +8 -8
  159. package/dist/components/Listbox/Listbox.module.scss.js +8 -8
  160. package/dist/components/Loading/Loading.module.scss.cjs +30 -30
  161. package/dist/components/Loading/Loading.module.scss.js +30 -30
  162. package/dist/components/Loading/index.cjs +5 -5
  163. package/dist/components/Loading/index.d.ts +8 -7
  164. package/dist/components/Loading/index.d.ts.map +1 -1
  165. package/dist/components/Loading/index.js +5 -5
  166. package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
  167. package/dist/components/Markdown/Markdown.module.scss.js +1 -1
  168. package/dist/components/Menu/Menu.module.scss.cjs +14 -14
  169. package/dist/components/Menu/Menu.module.scss.js +14 -14
  170. package/dist/components/Message/Message.module.scss.cjs +20 -20
  171. package/dist/components/Message/Message.module.scss.js +20 -20
  172. package/dist/components/Message/index.cjs +1 -1
  173. package/dist/components/Message/index.d.ts +1 -1
  174. package/dist/components/Message/index.js +1 -1
  175. package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +29 -29
  176. package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +29 -29
  177. package/dist/components/Pagination/Pagination.module.scss.cjs +10 -10
  178. package/dist/components/Pagination/Pagination.module.scss.js +10 -10
  179. package/dist/components/Popover/Popover.module.scss.cjs +10 -10
  180. package/dist/components/Popover/Popover.module.scss.js +10 -10
  181. package/dist/components/Progress/Progress.module.scss.cjs +28 -25
  182. package/dist/components/Progress/Progress.module.scss.js +28 -25
  183. package/dist/components/Progress/index.cjs +21 -12
  184. package/dist/components/Progress/index.d.ts +10 -6
  185. package/dist/components/Progress/index.d.ts.map +1 -1
  186. package/dist/components/Progress/index.js +21 -12
  187. package/dist/components/Prompt/Prompt.module.scss.cjs +30 -30
  188. package/dist/components/Prompt/Prompt.module.scss.js +30 -30
  189. package/dist/components/Prompt/index.cjs +7 -7
  190. package/dist/components/Prompt/index.d.ts +11 -9
  191. package/dist/components/Prompt/index.d.ts.map +1 -1
  192. package/dist/components/Prompt/index.js +7 -7
  193. package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +20 -17
  194. package/dist/components/RadioGroup/RadioGroup.module.scss.js +20 -17
  195. package/dist/components/RadioGroup/index.cjs +10 -5
  196. package/dist/components/RadioGroup/index.d.ts +11 -7
  197. package/dist/components/RadioGroup/index.d.ts.map +1 -1
  198. package/dist/components/RadioGroup/index.js +10 -5
  199. package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +5 -5
  200. package/dist/components/ScrollArea/ScrollArea.module.scss.js +5 -5
  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 +26 -20
  204. package/dist/components/Select/index.d.ts +5 -5
  205. package/dist/components/Select/index.d.ts.map +1 -1
  206. package/dist/components/Select/index.js +26 -20
  207. package/dist/components/Separator/Separator.module.scss.cjs +25 -19
  208. package/dist/components/Separator/Separator.module.scss.js +25 -19
  209. package/dist/components/Separator/index.cjs +10 -8
  210. package/dist/components/Separator/index.d.ts +4 -2
  211. package/dist/components/Separator/index.d.ts.map +1 -1
  212. package/dist/components/Separator/index.js +10 -8
  213. package/dist/components/Sidebar/Sidebar.module.scss.cjs +43 -43
  214. package/dist/components/Sidebar/Sidebar.module.scss.js +43 -43
  215. package/dist/components/Sidebar/index.cjs +3 -3
  216. package/dist/components/Sidebar/index.js +3 -3
  217. package/dist/components/Skeleton/Skeleton.module.scss.cjs +46 -46
  218. package/dist/components/Skeleton/Skeleton.module.scss.js +46 -46
  219. package/dist/components/Skeleton/index.cjs +7 -7
  220. package/dist/components/Skeleton/index.d.ts +8 -7
  221. package/dist/components/Skeleton/index.d.ts.map +1 -1
  222. package/dist/components/Skeleton/index.js +7 -7
  223. package/dist/components/Slider/Slider.module.scss.cjs +12 -12
  224. package/dist/components/Slider/Slider.module.scss.js +12 -12
  225. package/dist/components/Switch/Switch.module.scss.cjs +9 -9
  226. package/dist/components/Switch/Switch.module.scss.js +9 -9
  227. package/dist/components/Table/Table.module.scss.cjs +15 -15
  228. package/dist/components/Table/Table.module.scss.js +15 -15
  229. package/dist/components/TableOfContents/TableOfContents.module.scss.cjs +15 -15
  230. package/dist/components/TableOfContents/TableOfContents.module.scss.js +15 -15
  231. package/dist/components/TableOfContents/index.cjs +1 -1
  232. package/dist/components/TableOfContents/index.js +1 -1
  233. package/dist/components/Tabs/Tabs.module.scss.cjs +18 -18
  234. package/dist/components/Tabs/Tabs.module.scss.js +18 -18
  235. package/dist/components/Tabs/index.cjs +5 -6
  236. package/dist/components/Tabs/index.d.ts +8 -6
  237. package/dist/components/Tabs/index.d.ts.map +1 -1
  238. package/dist/components/Tabs/index.js +5 -6
  239. package/dist/components/Text/Text.module.scss.cjs +105 -105
  240. package/dist/components/Text/Text.module.scss.js +105 -105
  241. package/dist/components/Text/index.cjs +5 -9
  242. package/dist/components/Text/index.d.ts +15 -11
  243. package/dist/components/Text/index.d.ts.map +1 -1
  244. package/dist/components/Text/index.js +5 -9
  245. package/dist/components/Textarea/Textarea.module.scss.cjs +22 -28
  246. package/dist/components/Textarea/Textarea.module.scss.js +22 -28
  247. package/dist/components/Textarea/index.cjs +3 -10
  248. package/dist/components/Textarea/index.d.ts +0 -2
  249. package/dist/components/Textarea/index.d.ts.map +1 -1
  250. package/dist/components/Textarea/index.js +3 -10
  251. package/dist/components/Theme/index.cjs +20 -4
  252. package/dist/components/Theme/index.d.ts +6 -12
  253. package/dist/components/Theme/index.d.ts.map +1 -1
  254. package/dist/components/Theme/index.js +20 -4
  255. package/dist/components/ThemeToggle/ThemeButton.cjs +51 -0
  256. package/dist/components/ThemeToggle/ThemeButton.d.ts +16 -0
  257. package/dist/components/ThemeToggle/ThemeButton.d.ts.map +1 -0
  258. package/dist/components/ThemeToggle/ThemeButton.js +34 -0
  259. package/dist/components/ThemeToggle/ThemeToggle.module.scss.cjs +6 -9
  260. package/dist/components/ThemeToggle/ThemeToggle.module.scss.js +6 -9
  261. package/dist/components/ThemeToggle/icons.cjs +48 -0
  262. package/dist/components/ThemeToggle/icons.d.ts +10 -0
  263. package/dist/components/ThemeToggle/icons.d.ts.map +1 -0
  264. package/dist/components/ThemeToggle/icons.js +48 -0
  265. package/dist/components/ThemeToggle/index.cjs +5 -74
  266. package/dist/components/ThemeToggle/index.d.ts +5 -8
  267. package/dist/components/ThemeToggle/index.d.ts.map +1 -1
  268. package/dist/components/ThemeToggle/index.js +3 -72
  269. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +18 -15
  270. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +18 -15
  271. package/dist/components/ThinkingIndicator/index.cjs +7 -8
  272. package/dist/components/ThinkingIndicator/index.d.ts +6 -5
  273. package/dist/components/ThinkingIndicator/index.d.ts.map +1 -1
  274. package/dist/components/ThinkingIndicator/index.js +7 -8
  275. package/dist/components/Toast/Toast.module.scss.cjs +28 -29
  276. package/dist/components/Toast/Toast.module.scss.js +29 -30
  277. package/dist/components/Toast/index.cjs +28 -30
  278. package/dist/components/Toast/index.d.ts +9 -8
  279. package/dist/components/Toast/index.d.ts.map +1 -1
  280. package/dist/components/Toast/index.js +28 -30
  281. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +21 -19
  282. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +22 -20
  283. package/dist/components/ToggleGroup/index.cjs +4 -5
  284. package/dist/components/ToggleGroup/index.d.ts +7 -6
  285. package/dist/components/ToggleGroup/index.d.ts.map +1 -1
  286. package/dist/components/ToggleGroup/index.js +4 -5
  287. package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
  288. package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
  289. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.cjs +1 -1
  290. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.js +1 -1
  291. package/dist/data-table-virtual.cjs +3 -2
  292. package/dist/data-table-virtual.js +3 -2
  293. package/dist/data-table.cjs +1 -1
  294. package/dist/data-table.js +1 -1
  295. package/dist/datepicker.cjs +23 -11
  296. package/dist/datepicker.js +23 -11
  297. package/dist/index.cjs +5 -1
  298. package/dist/index.d.ts +8 -8
  299. package/dist/index.d.ts.map +1 -1
  300. package/dist/index.js +6 -2
  301. package/dist/measurements/generated.cjs +37 -93
  302. package/dist/measurements/generated.d.ts +37 -92
  303. package/dist/measurements/generated.d.ts.map +1 -1
  304. package/dist/measurements/generated.js +37 -93
  305. package/dist/measurements/index.d.ts +1 -1
  306. package/dist/measurements/index.d.ts.map +1 -1
  307. package/dist/utils/seed-derivation.cjs +0 -1
  308. package/dist/utils/seed-derivation.d.ts +1 -3
  309. package/dist/utils/seed-derivation.d.ts.map +1 -1
  310. package/dist/utils/seed-derivation.js +0 -1
  311. package/dist/utils/theme-presets.cjs +5 -10
  312. package/dist/utils/theme-presets.d.ts +1 -2
  313. package/dist/utils/theme-presets.d.ts.map +1 -1
  314. package/dist/utils/theme-presets.js +5 -10
  315. package/fragments.json +1 -1
  316. package/package.json +5 -8
  317. package/src/assets/nav-glyph.module.scss +166 -0
  318. package/src/assets/nav-glyph.tsx +188 -0
  319. package/src/components/Accordion/Accordion.module.scss +5 -3
  320. package/src/components/Alert/Alert.contract.json +18 -18
  321. package/src/components/Alert/Alert.module.scss +50 -64
  322. package/src/components/Alert/index.tsx +24 -17
  323. package/src/components/AppShell/AppShell.contract.json +7 -7
  324. package/src/components/AppShell/AppShell.module.scss +49 -17
  325. package/src/components/AppShell/index.tsx +2 -2
  326. package/src/components/Avatar/Avatar.module.scss +0 -1
  327. package/src/components/Badge/Badge.contract.json +58 -22
  328. package/src/components/Badge/Badge.module.scss +72 -47
  329. package/src/components/Badge/index.tsx +34 -17
  330. package/src/components/BentoGrid/BentoGrid.module.scss +4 -8
  331. package/src/components/Box/Box.module.scss +7 -6
  332. package/src/components/Breadcrumbs/Breadcrumbs.module.scss +15 -5
  333. package/src/components/Breadcrumbs/index.tsx +5 -1
  334. package/src/components/Button/Button.module.scss +261 -186
  335. package/src/components/Button/index.tsx +41 -28
  336. package/src/components/ButtonGroup/ButtonGroup.contract.json +5 -5
  337. package/src/components/ButtonGroup/ButtonGroup.module.scss +8 -6
  338. package/src/components/Card/Card.consumer-fixture.module.scss +5 -2
  339. package/src/components/Card/Card.module.scss +73 -133
  340. package/src/components/Card/index.tsx +41 -36
  341. package/src/components/Chart/Chart.module.scss +6 -5
  342. package/src/components/Checkbox/Checkbox.contract.json +4 -3
  343. package/src/components/Checkbox/Checkbox.module.scss +16 -32
  344. package/src/components/Checkbox/index.tsx +6 -8
  345. package/src/components/Chip/Chip.contract.json +10 -10
  346. package/src/components/Chip/Chip.module.scss +23 -22
  347. package/src/components/Chip/index.tsx +10 -6
  348. package/src/components/CodeBlock/CodeBlock.module.scss +47 -70
  349. package/src/components/CodeBlock/index.tsx +23 -16
  350. package/src/components/Collapsible/Collapsible.module.scss +1 -7
  351. package/src/components/ColorPicker/ColorPicker.module.scss +20 -13
  352. package/src/components/ColorPicker/index.tsx +1 -0
  353. package/src/components/Combobox/Combobox.module.scss +16 -19
  354. package/src/components/Combobox/index.tsx +10 -1
  355. package/src/components/Command/Command.contract.json +7 -1
  356. package/src/components/Command/Command.module.scss +19 -21
  357. package/src/components/Command/index.tsx +7 -1
  358. package/src/components/ComponentDefaults/ComponentDefaults.contract.json +91 -0
  359. package/src/components/ConversationList/ConversationList.module.scss +2 -3
  360. package/src/components/ConversationList/index.tsx +2 -2
  361. package/src/components/DataTable/DataTable.module.scss +12 -9
  362. package/src/components/DataTable/DataTable.virtual.tsx +3 -2
  363. package/src/components/DataTable/index.tsx +1 -1
  364. package/src/components/DatePicker/DatePicker.module.scss +32 -42
  365. package/src/components/DatePicker/index.tsx +18 -7
  366. package/src/components/Dialog/Dialog.module.scss +23 -29
  367. package/src/components/Dialog/index.tsx +7 -5
  368. package/src/components/Drawer/Drawer.contract.json +6 -6
  369. package/src/components/Drawer/Drawer.module.scss +123 -64
  370. package/src/components/Drawer/index.tsx +7 -5
  371. package/src/components/Editor/Editor.contract.json +1 -1
  372. package/src/components/Editor/Editor.module.scss +26 -13
  373. package/src/components/EmptyState/EmptyState.contract.json +6 -6
  374. package/src/components/EmptyState/EmptyState.module.scss +31 -23
  375. package/src/components/EmptyState/index.tsx +17 -9
  376. package/src/components/Field/Field.module.scss +2 -1
  377. package/src/components/Fieldset/Fieldset.module.scss +5 -4
  378. package/src/components/Form/Form.contract.json +4 -4
  379. package/src/components/Grid/Grid.module.scss +2 -2
  380. package/src/components/Header/Header.contract.json +2 -2
  381. package/src/components/Header/Header.module.scss +24 -36
  382. package/src/components/Icon/Icon.contract.json +19 -23
  383. package/src/components/Icon/Icon.module.scss +13 -12
  384. package/src/components/Icon/index.tsx +31 -31
  385. package/src/components/IconButton/IconButton.contract.json +8 -8
  386. package/src/components/IconButton/IconButton.module.scss +13 -4
  387. package/src/components/IconButton/index.tsx +4 -4
  388. package/src/components/Input/Input.contract.json +0 -13
  389. package/src/components/Input/Input.module.scss +4 -54
  390. package/src/components/Input/index.tsx +2 -18
  391. package/src/components/Link/Link.contract.json +19 -11
  392. package/src/components/Link/Link.module.scss +24 -10
  393. package/src/components/Link/index.tsx +26 -5
  394. package/src/components/List/List.contract.json +11 -11
  395. package/src/components/List/List.module.scss +10 -5
  396. package/src/components/List/index.tsx +17 -13
  397. package/src/components/Listbox/Listbox.module.scss +14 -20
  398. package/src/components/Loading/Loading.contract.json +6 -6
  399. package/src/components/Loading/Loading.module.scss +29 -26
  400. package/src/components/Loading/index.tsx +13 -12
  401. package/src/components/Markdown/Markdown.module.scss +2 -1
  402. package/src/components/Menu/Menu.contract.json +5 -5
  403. package/src/components/Menu/Menu.module.scss +11 -10
  404. package/src/components/Message/Message.contract.json +5 -5
  405. package/src/components/Message/Message.module.scss +8 -6
  406. package/src/components/Message/index.tsx +2 -2
  407. package/src/components/NavigationMenu/NavigationMenu.module.scss +22 -67
  408. package/src/components/Pagination/Pagination.module.scss +7 -14
  409. package/src/components/Popover/Popover.contract.json +4 -4
  410. package/src/components/Popover/Popover.module.scss +24 -23
  411. package/src/components/Progress/Progress.contract.json +11 -11
  412. package/src/components/Progress/Progress.module.scss +13 -8
  413. package/src/components/Progress/index.tsx +34 -16
  414. package/src/components/Prompt/Prompt.contract.json +12 -12
  415. package/src/components/Prompt/Prompt.module.scss +40 -47
  416. package/src/components/Prompt/index.tsx +17 -15
  417. package/src/components/RadioGroup/RadioGroup.contract.json +6 -4
  418. package/src/components/RadioGroup/RadioGroup.module.scss +38 -32
  419. package/src/components/RadioGroup/index.tsx +23 -10
  420. package/src/components/ScrollArea/ScrollArea.module.scss +30 -33
  421. package/src/components/Select/Select.module.scss +19 -18
  422. package/src/components/Select/index.tsx +26 -24
  423. package/src/components/Separator/Separator.contract.json +10 -10
  424. package/src/components/Separator/Separator.module.scss +24 -40
  425. package/src/components/Separator/index.tsx +16 -11
  426. package/src/components/Sidebar/Sidebar.contract.json +1 -1
  427. package/src/components/Sidebar/Sidebar.module.scss +92 -95
  428. package/src/components/Sidebar/index.tsx +3 -3
  429. package/src/components/Skeleton/Skeleton.contract.json +9 -9
  430. package/src/components/Skeleton/Skeleton.module.scss +23 -16
  431. package/src/components/Skeleton/index.tsx +16 -15
  432. package/src/components/Slider/Slider.module.scss +6 -19
  433. package/src/components/Stack/Stack.contract.json +1 -1
  434. package/src/components/Stack/Stack.module.scss +13 -12
  435. package/src/components/Switch/Switch.module.scss +44 -35
  436. package/src/components/Table/Table.module.scss +9 -13
  437. package/src/components/TableOfContents/TableOfContents.module.scss +12 -18
  438. package/src/components/TableOfContents/index.tsx +1 -1
  439. package/src/components/Tabs/Tabs.contract.json +14 -14
  440. package/src/components/Tabs/Tabs.module.scss +27 -31
  441. package/src/components/Tabs/index.tsx +15 -12
  442. package/src/components/Text/Text.contract.json +36 -14
  443. package/src/components/Text/Text.module.scss +19 -20
  444. package/src/components/Text/index.tsx +23 -21
  445. package/src/components/Textarea/Textarea.contract.json +0 -13
  446. package/src/components/Textarea/Textarea.module.scss +24 -52
  447. package/src/components/Textarea/index.tsx +3 -14
  448. package/src/components/Theme/Theme.contract.json +9 -8
  449. package/src/components/Theme/index.tsx +39 -12
  450. package/src/components/ThemeToggle/ThemeButton.tsx +49 -0
  451. package/src/components/ThemeToggle/ThemeToggle.module.scss +21 -44
  452. package/src/components/ThemeToggle/icons.tsx +46 -0
  453. package/src/components/ThemeToggle/index.tsx +8 -90
  454. package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +11 -10
  455. package/src/components/ThinkingIndicator/ThinkingIndicator.module.scss +9 -7
  456. package/src/components/ThinkingIndicator/index.tsx +12 -14
  457. package/src/components/Toast/Toast.contract.json +29 -13
  458. package/src/components/Toast/Toast.module.scss +49 -104
  459. package/src/components/Toast/index.tsx +39 -34
  460. package/src/components/ToggleGroup/ToggleGroup.contract.json +13 -13
  461. package/src/components/ToggleGroup/ToggleGroup.module.scss +16 -46
  462. package/src/components/ToggleGroup/index.tsx +11 -11
  463. package/src/components/Tooltip/Tooltip.contract.json +3 -3
  464. package/src/components/Tooltip/Tooltip.module.scss +16 -10
  465. package/src/components/VisuallyHidden/VisuallyHidden.module.scss +4 -14
  466. package/src/index.ts +14 -10
  467. package/src/measurements/MeasurementTargets.module.scss +6 -7
  468. package/src/measurements/generated.ts +38 -96
  469. package/src/measurements/index.ts +0 -1
  470. package/src/measurements/measurements.json +37 -116
  471. package/src/recipes/_action.scss +4 -4
  472. package/src/recipes/_boolean-range.scss +9 -5
  473. package/src/recipes/_feedback.scss +17 -16
  474. package/src/recipes/_field.scss +28 -20
  475. package/src/recipes/_navigation.scss +84 -29
  476. package/src/recipes/_overlay.scss +143 -43
  477. package/src/recipes/_popup.scss +46 -36
  478. package/src/recipes/_prose.scss +35 -23
  479. package/src/recipes/_representation.scss +10 -9
  480. package/src/recipes/_segmented.scss +1 -1
  481. package/src/recipes/_table-chrome.scss +27 -16
  482. package/src/recipes/_target.scss +2 -4
  483. package/src/recipes/_typography.scss +10 -0
  484. package/src/styles/globals.scss +14 -9
  485. package/src/tokens/_component-properties.scss +19 -1
  486. package/src/tokens/_computed.scss +27 -33
  487. package/src/tokens/_measurements.catalog.generated.css +58 -45
  488. package/src/tokens/_measurements.generated.scss +107 -250
  489. package/src/tokens/_mixins.scss +42 -40
  490. package/src/tokens/_palettes.scss +1 -1
  491. package/src/tokens/_property-registrations.scss +9 -0
  492. package/src/tokens/_seeds.scss +1 -12
  493. package/src/tokens/_variables.scss +71 -59
  494. package/src/utils/seed-derivation.ts +1 -8
  495. package/src/utils/theme-presets.ts +5 -12
  496. package/dist/blocks/AccountSettings.block.d.ts +0 -3
  497. package/dist/blocks/AccountSettings.block.d.ts.map +0 -1
  498. package/dist/blocks/ActivityFeedSkeleton.block.d.ts +0 -3
  499. package/dist/blocks/ActivityFeedSkeleton.block.d.ts.map +0 -1
  500. package/dist/blocks/BlogEditor.block.d.ts +0 -3
  501. package/dist/blocks/BlogEditor.block.d.ts.map +0 -1
  502. package/dist/blocks/ChatInterface.block.d.ts +0 -3
  503. package/dist/blocks/ChatInterface.block.d.ts.map +0 -1
  504. package/dist/blocks/ChatMessages.block.d.ts +0 -3
  505. package/dist/blocks/ChatMessages.block.d.ts.map +0 -1
  506. package/dist/blocks/CheckoutForm.block.d.ts +0 -3
  507. package/dist/blocks/CheckoutForm.block.d.ts.map +0 -1
  508. package/dist/blocks/CommandPalette.block.d.ts +0 -3
  509. package/dist/blocks/CommandPalette.block.d.ts.map +0 -1
  510. package/dist/blocks/ContactForm.block.d.ts +0 -3
  511. package/dist/blocks/ContactForm.block.d.ts.map +0 -1
  512. package/dist/blocks/DashboardPage.block.d.ts +0 -3
  513. package/dist/blocks/DashboardPage.block.d.ts.map +0 -1
  514. package/dist/blocks/DashboardSkeleton.block.d.ts +0 -3
  515. package/dist/blocks/DashboardSkeleton.block.d.ts.map +0 -1
  516. package/dist/blocks/DataTable.block.d.ts +0 -3
  517. package/dist/blocks/DataTable.block.d.ts.map +0 -1
  518. package/dist/blocks/EmptyState.block.d.ts +0 -3
  519. package/dist/blocks/EmptyState.block.d.ts.map +0 -1
  520. package/dist/blocks/FAQSection.block.d.ts +0 -3
  521. package/dist/blocks/FAQSection.block.d.ts.map +0 -1
  522. package/dist/blocks/FeatureGrid.block.d.ts +0 -3
  523. package/dist/blocks/FeatureGrid.block.d.ts.map +0 -1
  524. package/dist/blocks/HeroSection.block.d.ts +0 -3
  525. package/dist/blocks/HeroSection.block.d.ts.map +0 -1
  526. package/dist/blocks/NavigationHeader.block.d.ts +0 -3
  527. package/dist/blocks/NavigationHeader.block.d.ts.map +0 -1
  528. package/dist/blocks/PaginatedTable.block.d.ts +0 -3
  529. package/dist/blocks/PaginatedTable.block.d.ts.map +0 -1
  530. package/dist/blocks/PricingComparison.block.d.ts +0 -3
  531. package/dist/blocks/PricingComparison.block.d.ts.map +0 -1
  532. package/dist/blocks/ProductCard.block.d.ts +0 -3
  533. package/dist/blocks/ProductCard.block.d.ts.map +0 -1
  534. package/dist/blocks/RegistrationForm.block.d.ts +0 -3
  535. package/dist/blocks/RegistrationForm.block.d.ts.map +0 -1
  536. package/dist/blocks/SettingsDrawer.block.d.ts +0 -3
  537. package/dist/blocks/SettingsDrawer.block.d.ts.map +0 -1
  538. package/dist/blocks/SettingsPanel.block.d.ts +0 -3
  539. package/dist/blocks/SettingsPanel.block.d.ts.map +0 -1
  540. package/dist/blocks/ShoppingCart.block.d.ts +0 -3
  541. package/dist/blocks/ShoppingCart.block.d.ts.map +0 -1
  542. package/dist/blocks/StatsCardSkeleton.block.d.ts +0 -3
  543. package/dist/blocks/StatsCardSkeleton.block.d.ts.map +0 -1
  544. package/dist/blocks/TableSkeleton.block.d.ts +0 -3
  545. package/dist/blocks/TableSkeleton.block.d.ts.map +0 -1
  546. package/dist/blocks/ThinkingStates.block.d.ts +0 -3
  547. package/dist/blocks/ThinkingStates.block.d.ts.map +0 -1
  548. package/dist/components/Toggle/index.d.ts +0 -3
  549. package/dist/components/Toggle/index.d.ts.map +0 -1
  550. package/src/components/Toggle/index.ts +0 -7
  551. package/src/tokens/_density.scss +0 -85
@@ -20,8 +20,8 @@
20
20
  "maxRows: number (default: 8)",
21
21
  "autoResize: boolean (default: true)",
22
22
  "submitOnEnter: boolean (default: true)",
23
- "variant: default|fixed|sticky (default: default)",
24
- "appearance: panel|seamless (default: panel)",
23
+ "placement: inline|fixed|sticky (default: inline)",
24
+ "variant: outline|ghost (default: outline)",
25
25
  "onFiles: function",
26
26
  "accept: string"
27
27
  ],
@@ -94,12 +94,12 @@
94
94
  "default": "true",
95
95
  "required": false
96
96
  },
97
- "variant": {
97
+ "placement": {
98
98
  "type": "enum",
99
- "description": "Visual/positioning variant",
100
- "default": "default",
99
+ "description": "Where the card sits: inline in the flow, fixed to the viewport bottom, or sticky to the content area (offset by --fui-prompt-inset-left)",
100
+ "default": "inline",
101
101
  "required": false,
102
- "values": ["default", "fixed", "sticky"]
102
+ "values": ["inline", "fixed", "sticky"]
103
103
  },
104
104
  "onFiles": {
105
105
  "type": "function",
@@ -111,12 +111,12 @@
111
111
  "description": "accept filter for the attach button's picker, e.g. \"image/*\"",
112
112
  "required": false
113
113
  },
114
- "appearance": {
114
+ "variant": {
115
115
  "type": "enum",
116
- "description": "How the card is divided up. \"panel\" keeps the toolbar as a filled footer under a rule; \"seamless\" makes the whole card one writing surface with the controls floating on it.",
117
- "default": "panel",
116
+ "description": "Card chrome. \"outline\" keeps the toolbar as a filled footer under a rule; \"ghost\" makes the whole card one writing surface with the controls floating on it.",
117
+ "default": "outline",
118
118
  "required": false,
119
- "values": ["panel", "seamless"]
119
+ "values": ["outline", "ghost"]
120
120
  }
121
121
  },
122
122
  "usage": {
@@ -134,7 +134,7 @@
134
134
  "Always pass an onSubmit handler",
135
135
  "Set loading while the request is in flight to block duplicate sends",
136
136
  "Prompt.Textarea forwards native textarea props and composes your own handlers",
137
- "appearance=\"seamless\" floats the controls on the writing surface instead of a footer",
137
+ "variant=\"ghost\" floats the controls on the writing surface instead of a footer",
138
138
  "Seamless secondary controls stay transparent; only Prompt.Submit keeps a filled shape",
139
139
  "Prompt.Submit uses a neutral inverse surface, never semantic brand color",
140
140
  "Prompt.ModeButton toggles a setting; Prompt.Select picks one from a list",
@@ -166,7 +166,7 @@
166
166
  {
167
167
  "name": "Agent Composer",
168
168
  "description": "Controls float on the writing surface instead of a footer.",
169
- "code": "<Prompt\n appearance=\"seamless\"\n submitOnEnter={false}\n minRows={3}\n onSubmit={(value) => console.log(value)}\n>\n <Prompt.Textarea placeholder=\"What should be true when this is done?\" />\n <Prompt.Toolbar>\n <Prompt.Actions>\n <Prompt.Select\n aria-label=\"Model\"\n defaultValue=\"claude-opus-4-8\"\n options={[{ value: 'claude-opus-4-8', label: 'Opus 4.8' }, { value: 'claude-sonnet-5', label: 'Sonnet 5' }]}\n />\n <Prompt.ModeButton>Plan</Prompt.ModeButton>\n </Prompt.Actions>\n <Prompt.Info>\n <Prompt.Submit />\n </Prompt.Info>\n </Prompt.Toolbar>\n</Prompt>"
169
+ "code": "<Prompt\n variant=\"ghost\"\n submitOnEnter={false}\n minRows={3}\n onSubmit={(value) => console.log(value)}\n>\n <Prompt.Textarea placeholder=\"What should be true when this is done?\" />\n <Prompt.Toolbar>\n <Prompt.Actions>\n <Prompt.Select\n aria-label=\"Model\"\n defaultValue=\"claude-opus-4-8\"\n options={[{ value: 'claude-opus-4-8', label: 'Opus 4.8' }, { value: 'claude-sonnet-5', label: 'Sonnet 5' }]}\n />\n <Prompt.ModeButton>Plan</Prompt.ModeButton>\n </Prompt.Actions>\n <Prompt.Info>\n <Prompt.Submit />\n </Prompt.Info>\n </Prompt.Toolbar>\n</Prompt>"
170
170
  },
171
171
  {
172
172
  "name": "With Attachments",
@@ -1,5 +1,6 @@
1
1
  @use "../../tokens/variables" as *;
2
2
  @use "../../tokens/mixins" as *;
3
+ @use "../../tokens/measurements.generated" as measurements;
3
4
  @use "../../recipes/action" as action;
4
5
  @use "../../recipes/layout" as layout;
5
6
  @use "../../recipes/target" as target;
@@ -29,7 +30,7 @@
29
30
 
30
31
  // Gradient layer (behind everything)
31
32
  &::before {
32
- inset: calc(-1 * var(--fui-stroke-hairline, 1px));
33
+ inset: calc(-1 * var(--fui-stroke-hairline, #{$fui-stroke-hairline}));
33
34
  z-index: 0;
34
35
  background: conic-gradient(
35
36
  from var(--beam-angle, 0deg) at 50% 50%,
@@ -45,13 +46,13 @@
45
46
  // Ambient loop: twice the shimmer beat, kept on the token scale.
46
47
  animation: beam-rotate calc(var(--fui-duration-shimmer, #{$fui-duration-shimmer}) * 2) linear
47
48
  infinite;
48
- opacity: 0.6;
49
+ opacity: var(--fui-opacity-disabled, #{$fui-opacity-disabled});
49
50
  transition: opacity var(--fui-transition-normal, $fui-transition-normal);
50
51
  }
51
52
 
52
53
  // Mask layer — covers the interior, leaving only the 1px border visible
53
54
  &::after {
54
- inset: var(--fui-stroke-hairline, 1px);
55
+ inset: var(--fui-stroke-hairline, #{$fui-stroke-hairline});
55
56
  z-index: 1;
56
57
  background: var(--fui-bg-elevated, $fui-bg-elevated);
57
58
  }
@@ -67,12 +68,13 @@
67
68
  }
68
69
 
69
70
  &[data-disabled] {
70
- opacity: 0.5;
71
+ @include disabled-state;
72
+
71
73
  pointer-events: none;
72
74
 
73
75
  &::before {
74
76
  animation-play-state: paused;
75
- opacity: 0.2;
77
+ opacity: calc(var(--fui-opacity-disabled, #{$fui-opacity-disabled}) * var(--fui-opacity-disabled, #{$fui-opacity-disabled}));
76
78
  }
77
79
  }
78
80
  }
@@ -92,7 +94,7 @@
92
94
  inherits: false;
93
95
  }
94
96
 
95
- // Fixed variant - for viewport-fixed prompts (centered to page)
97
+ // Fixed placement - for viewport-fixed prompts (centered to page)
96
98
  .fixed {
97
99
  position: fixed;
98
100
  bottom: var(--fui-space-4, $fui-space-4);
@@ -104,7 +106,7 @@
104
106
  box-shadow: var(--fui-shadow-lg, $fui-shadow-lg);
105
107
  }
106
108
 
107
- // Sticky variant - for content-area fixed prompts (accounts for sidebar)
109
+ // Sticky placement - for content-area fixed prompts (accounts for sidebar)
108
110
  // Use --fui-prompt-inset-left CSS variable to offset from sidebar
109
111
  .sticky {
110
112
  position: fixed;
@@ -124,7 +126,7 @@
124
126
  }
125
127
 
126
128
  // ============================================
127
- // Seamless appearance
129
+ // Ghost variant
128
130
  // ============================================
129
131
 
130
132
  // One continuous writing surface instead of a field with a footer.
@@ -135,12 +137,13 @@
135
137
  // resting on it — which is what makes the text you are writing the only thing
136
138
  // with any weight. Each selector below is one class deeper than the rule it
137
139
  // replaces, so this wins wherever the stylesheet happens to land.
140
+ // (`variant="ghost"`; the default `outline` card is the rules above.)
138
141
  //
139
142
  // One gutter runs down the card. `--_gutter` is the distance from the card's
140
143
  // edge to the ink of everything in it, and every child is padded from it
141
144
  // rather than given a number of its own, so the placeholder, the first glyph
142
145
  // in the toolbar and any attachment chip all sit on the same line.
143
- .seamless {
146
+ .ghost {
144
147
  --_gutter: var(--fui-space-3, #{$fui-space-3});
145
148
  // Every band is inset by its own children's padding, so what lands on the
146
149
  // gutter is the ink — the first character of the placeholder, the first glyph
@@ -154,7 +157,7 @@
154
157
  border-radius: var(--fui-radius-xl, $fui-radius-xl);
155
158
 
156
159
  // The beam draws a 1px animated border by painting a gradient and masking
157
- // out everything but the edge. Seamless has no edge to draw, so both layers
160
+ // out everything but the edge. Ghost has no edge to draw, so both layers
158
161
  // go and the card paints its own surface instead of borrowing the mask's.
159
162
  &::before,
160
163
  &::after {
@@ -170,7 +173,7 @@
170
173
  .toolbar {
171
174
  background-color: transparent;
172
175
  border-top: none;
173
- padding: 0 calc(var(--_gutter) - var(--_control-padding)) var(--_gutter);
176
+ padding: var(--fui-raw-space-0, #{measurements.raw-space(0)}) calc(var(--_gutter, var(--fui-space-3, #{$fui-space-3})) - var(--_control-padding, var(--fui-space-2, #{$fui-space-2}))) var(--_gutter, var(--fui-space-3, #{$fui-space-3}));
174
177
  }
175
178
 
176
179
  // The message is the content of the card, not a field in it. The bottom is
@@ -178,11 +181,11 @@
178
181
  // footer under it, and the top is tight for the same reason when a scope
179
182
  // band sits above.
180
183
  .textarea {
181
- padding: var(--_gutter) var(--_gutter) var(--fui-space-1, $fui-space-1);
184
+ padding: var(--_gutter, var(--fui-space-3, #{$fui-space-3})) var(--_gutter, var(--fui-space-3, #{$fui-space-3})) var(--fui-space-1, $fui-space-1);
182
185
  }
183
186
 
184
187
  .attachments {
185
- padding: var(--_gutter) calc(var(--_gutter) - var(--_chip-padding)) 0;
188
+ padding: var(--_gutter, var(--fui-space-3, #{$fui-space-3})) calc(var(--_gutter, var(--fui-space-3, #{$fui-space-3})) - var(--_chip-padding, var(--fui-space-1, #{$fui-space-1}))) var(--fui-raw-space-0, #{measurements.raw-space(0)});
186
189
  gap: var(--fui-space-1, $fui-space-1);
187
190
  }
188
191
 
@@ -193,22 +196,22 @@
193
196
  padding-top: var(--fui-space-1, $fui-space-1);
194
197
  }
195
198
 
196
- // In a panel the tabs are a strip the card is docked to, so they are centred
197
- // and bordered like a folder tab. Seamless has no card edge for them to dock
199
+ // In an outline card the tabs are a strip the card is docked to, so they are centred
200
+ // and bordered like a folder tab. Ghost has no card edge for them to dock
198
201
  // against, so they become the top band of the one surface: left-aligned on
199
202
  // the gutter with the rest of it, and stripped of the chrome that only made
200
203
  // sense as an edge.
201
204
  .tabs {
202
- margin-bottom: 0;
205
+ margin-bottom: var(--fui-raw-space-0, #{measurements.raw-space(0)});
203
206
  justify-content: flex-start;
204
- padding: var(--_gutter) calc(var(--_gutter) - var(--_control-padding)) 0;
207
+ padding: var(--_gutter, var(--fui-space-3, #{$fui-space-3})) calc(var(--_gutter, var(--fui-space-3, #{$fui-space-3})) - var(--_control-padding, var(--fui-space-2, #{$fui-space-2}))) var(--fui-raw-space-0, #{measurements.raw-space(0)});
205
208
  }
206
209
 
207
210
  .tabsInner {
208
211
  background-color: transparent;
209
212
  border: none;
210
- border-radius: 0;
211
- padding: 0;
213
+ border-radius: var(--fui-radius-none, #{$fui-radius-none});
214
+ padding: var(--fui-raw-space-0, #{measurements.raw-space(0)});
212
215
  gap: var(--fui-space-1, $fui-space-1);
213
216
  }
214
217
 
@@ -224,7 +227,7 @@
224
227
  // the placeholder above it starts, and costs only a wider hover.
225
228
  .attach {
226
229
  width: auto;
227
- padding-inline: var(--_control-padding);
230
+ padding-inline: var(--_control-padding, var(--fui-space-2, #{$fui-space-2}));
228
231
 
229
232
  svg {
230
233
  width: var(--fui-icon-md, $fui-icon-md);
@@ -232,7 +235,7 @@
232
235
  }
233
236
  }
234
237
 
235
- // Labels and glyphs share the body scale inside a seamless composer. The
238
+ // Labels and glyphs share the body scale inside a ghost composer. The
236
239
  // trigger still truncates at its cap, but no longer looks like caption text
237
240
  // floating between larger attach and submit affordances.
238
241
  .select,
@@ -289,7 +292,7 @@
289
292
  // padding. Give the filled Submit shape the same inset at the trailing edge
290
293
  // so the two visible affordances balance across the toolbar.
291
294
  .submit {
292
- margin-inline-end: var(--_control-padding);
295
+ margin-inline-end: var(--_control-padding, var(--fui-space-2, #{$fui-space-2}));
293
296
  }
294
297
  }
295
298
 
@@ -344,9 +347,10 @@
344
347
  display: inline-flex;
345
348
  gap: var(--fui-space-px, $fui-space-px);
346
349
  background-color: var(--fui-bg-elevated, $fui-bg-elevated);
347
- border-radius: var(--fui-radius-lg, $fui-radius-lg) var(--fui-radius-lg, $fui-radius-lg) 0 0;
348
- padding: var(--fui-space-0-75, $fui-space-0-75) var(--fui-space-0-75, $fui-space-0-75) 0;
349
- border: var(--fui-stroke-hairline, 1px) solid var(--fui-border, $fui-border);
350
+ border-radius: var(--fui-radius-lg, $fui-radius-lg) var(--fui-radius-lg, $fui-radius-lg) var(--fui-raw-space-0, #{measurements.raw-space(0)})
351
+ var(--fui-raw-space-0, #{measurements.raw-space(0)});
352
+ padding: var(--fui-space-0-75, $fui-space-0-75) var(--fui-space-0-75, $fui-space-0-75) var(--fui-raw-space-0, #{measurements.raw-space(0)});
353
+ border: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid var(--fui-border, $fui-border);
350
354
  border-bottom: none;
351
355
  }
352
356
 
@@ -355,7 +359,8 @@
355
359
  @include action.base;
356
360
  @include action.size("sm");
357
361
 
358
- border-radius: var(--fui-radius-md, $fui-radius-md) var(--fui-radius-md, $fui-radius-md) 0 0;
362
+ border-radius: var(--fui-radius-md, $fui-radius-md) var(--fui-radius-md, $fui-radius-md) var(--fui-raw-space-0, #{measurements.raw-space(0)})
363
+ var(--fui-raw-space-0, #{measurements.raw-space(0)});
359
364
  color: var(--fui-text-tertiary, $fui-text-tertiary);
360
365
  transition:
361
366
  color var(--fui-transition-fast, $fui-transition-fast),
@@ -372,8 +377,7 @@
372
377
  }
373
378
 
374
379
  .tabButtonActive {
375
- background-color: var(--fui-control-selected-bg, $fui-bg-active);
376
- color: var(--fui-text-primary, $fui-text-primary);
380
+ @include segmented-selection;
377
381
  }
378
382
 
379
383
  // ============================================
@@ -387,7 +391,7 @@
387
391
  gap: var(--fui-space-2, $fui-space-2);
388
392
  padding: var(--fui-space-1, $fui-space-1) var(--fui-space-2, $fui-space-2);
389
393
  background-color: var(--fui-bg-secondary, $fui-bg-secondary);
390
- border-top: var(--fui-stroke-hairline, 1px) solid var(--fui-border, $fui-border);
394
+ border-top: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid var(--fui-border, $fui-border);
391
395
  }
392
396
 
393
397
  // ============================================
@@ -461,8 +465,7 @@
461
465
  }
462
466
 
463
467
  .modeButtonActive {
464
- color: var(--fui-text-primary, $fui-text-primary);
465
- background-color: var(--fui-control-selected-bg, $fui-bg-active);
468
+ @include segmented-selection;
466
469
  }
467
470
 
468
471
  // ============================================
@@ -494,11 +497,6 @@
494
497
  background-color: var(--fui-bg-active, $fui-bg-active);
495
498
  }
496
499
 
497
- &:disabled {
498
- opacity: 0.5;
499
- cursor: not-allowed;
500
- }
501
-
502
500
  svg {
503
501
  @include action.glyph("sm");
504
502
  }
@@ -512,8 +510,8 @@
512
510
  display: flex;
513
511
  flex-wrap: wrap;
514
512
  gap: var(--fui-space-1, $fui-space-1);
515
- margin: 0;
516
- padding: var(--fui-space-2, $fui-space-2) var(--fui-space-3, $fui-space-3) 0;
513
+ margin: var(--fui-raw-space-0, #{measurements.raw-space(0)});
514
+ padding: var(--fui-space-2, $fui-space-2) var(--fui-space-3, $fui-space-3) var(--fui-raw-space-0, #{measurements.raw-space(0)});
517
515
  list-style: none;
518
516
  }
519
517
 
@@ -528,14 +526,14 @@
528
526
  display: inline-flex;
529
527
  align-items: center;
530
528
  gap: var(--fui-space-1, $fui-space-1);
531
- height: var(--_chip-height);
529
+ height: var(--_chip-height, #{action.track("sm")});
532
530
  max-width: layout.measure("composer-item");
533
531
  padding-inline: var(--fui-space-1, $fui-space-1);
534
532
  // Outlined rather than filled. A chip sits on whatever surface the prompt is
535
533
  // using, and on an elevated card the raised fill is the same value as the
536
534
  // card itself — so the object would disappear exactly where it is most
537
535
  // likely to be used. An edge reads on any of them.
538
- border: var(--fui-stroke-hairline, 1px) solid var(--fui-border, $fui-border);
536
+ border: var(--fui-stroke-hairline, #{$fui-stroke-hairline}) solid var(--fui-border, $fui-border);
539
537
  border-radius: var(--fui-radius-md, $fui-radius-md);
540
538
  background-color: var(--fui-bg-tertiary, $fui-bg-tertiary);
541
539
  font-size: var(--fui-font-size-xs, $fui-font-size-xs);
@@ -547,8 +545,8 @@
547
545
  // chip's height less the padding, which keeps it square without a second
548
546
  // number to keep in step.
549
547
  .attachmentThumb {
550
- width: calc(var(--_chip-height) - var(--fui-space-1, #{$fui-space-1}));
551
- height: calc(var(--_chip-height) - var(--fui-space-1, #{$fui-space-1}));
548
+ width: calc(var(--_chip-height, #{action.track("sm")}) - var(--fui-space-1, #{$fui-space-1}));
549
+ height: calc(var(--_chip-height, #{action.track("sm")}) - var(--fui-space-1, #{$fui-space-1}));
552
550
  flex-shrink: 0;
553
551
  border-radius: var(--fui-radius-sm, $fui-radius-sm);
554
552
  object-fit: cover;
@@ -645,11 +643,6 @@
645
643
  background-color: var(--fui-text-tertiary, #{$fui-text-tertiary});
646
644
  }
647
645
 
648
- &:disabled {
649
- opacity: 0.5;
650
- cursor: not-allowed;
651
- }
652
-
653
646
  svg {
654
647
  @include action.glyph("md");
655
648
  }
@@ -9,9 +9,9 @@ import { Select, type SelectOption, type SelectValue } from '../Select';
9
9
  // Types
10
10
  // ============================================
11
11
 
12
- export type PromptVariant = 'default' | 'fixed' | 'sticky';
12
+ export type PromptPlacement = 'inline' | 'fixed' | 'sticky';
13
13
 
14
- export type PromptAppearance = 'panel' | 'seamless';
14
+ export type PromptVariant = 'outline' | 'ghost';
15
15
 
16
16
  export interface PromptProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'onSubmit' | 'defaultValue'> {
17
17
  children: React.ReactNode;
@@ -43,13 +43,15 @@ export interface PromptProps extends Omit<React.HTMLAttributes<HTMLDivElement>,
43
43
  onFiles?: (files: File[]) => void;
44
44
  /** `accept` for the attach button's picker, e.g. `"image/*"`. */
45
45
  accept?: string;
46
- /** Visual variant - "fixed" for bottom-fixed elevated prompt */
46
+ /** Where the card sits: `inline` in the flow, `fixed` to the viewport bottom,
47
+ * `sticky` to the content area (offset by `--fui-prompt-inset-left`).
48
+ * @default "inline" */
49
+ placement?: PromptPlacement;
50
+ /** Card chrome. `outline` keeps the toolbar as a filled footer under a rule;
51
+ * `ghost` makes the whole card one writing surface with the controls floating
52
+ * on it — the shape most agent composers use.
53
+ * @default "outline" */
47
54
  variant?: PromptVariant;
48
- /** How the card is divided up. `panel` keeps the toolbar as a filled footer
49
- * under a rule; `seamless` makes the whole card one writing surface with the
50
- * controls floating on it — the shape most agent composers use.
51
- * @default "panel" */
52
- appearance?: PromptAppearance;
53
55
  }
54
56
 
55
57
  export interface PromptTextareaProps extends Omit<
@@ -307,8 +309,8 @@ function PromptRoot({
307
309
  maxRows = 8,
308
310
  autoResize = true,
309
311
  submitOnEnter = true,
310
- variant = 'default',
311
- appearance = 'panel',
312
+ placement = 'inline',
313
+ variant = 'outline',
312
314
  onFiles,
313
315
  accept,
314
316
  className,
@@ -386,9 +388,9 @@ function PromptRoot({
386
388
 
387
389
  const classes = [
388
390
  styles.prompt,
389
- variant === 'fixed' && styles.fixed,
390
- variant === 'sticky' && styles.sticky,
391
- appearance === 'seamless' && styles.seamless,
391
+ placement === 'fixed' && styles.fixed,
392
+ placement === 'sticky' && styles.sticky,
393
+ variant === 'ghost' && styles.ghost,
392
394
  dragging && styles.dragging,
393
395
  disabled && styles.disabled,
394
396
  loading && styles.loading,
@@ -403,8 +405,8 @@ function PromptRoot({
403
405
  className={classes}
404
406
  data-disabled={disabled || undefined}
405
407
  data-loading={loading || undefined}
408
+ data-placement={placement}
406
409
  data-variant={variant}
407
- data-appearance={appearance}
408
410
  data-dragging={dragging || undefined}
409
411
  >
410
412
  {children}
@@ -780,7 +782,7 @@ function PromptSubmit({
780
782
  {loading ? (
781
783
  <Loading
782
784
  size="sm"
783
- variant="spinner"
785
+ kind="spinner"
784
786
  color="current"
785
787
  label="Submitting"
786
788
  className={styles.submitSpinner}
@@ -19,6 +19,7 @@
19
19
  "helperText: string",
20
20
  "error: union",
21
21
  "size: sm|md|lg (default: md)",
22
+ "variant: outline",
22
23
  "wrapperClassName: string",
23
24
  "groupClassName: string",
24
25
  "groupId: string",
@@ -87,10 +88,9 @@
87
88
  },
88
89
  "variant": {
89
90
  "type": "enum",
90
- "description": "Visual variant. 'default' is the inline radio, 'card' renders each item as a full-width clickable card with the radio tucked inside.",
91
- "default": "default",
91
+ "description": "Chrome. Omit for the inline radio beside its label; 'outline' renders each item as a full-width bordered surface with the radio tucked inside.",
92
92
  "required": false,
93
- "values": ["default", "card"]
93
+ "values": ["outline"]
94
94
  },
95
95
  "wrapperClassName": {
96
96
  "type": "string",
@@ -198,13 +198,15 @@
198
198
  "onChange: (value: string) => void - alias for onValueChange",
199
199
  "orientation: horizontal|vertical (default: vertical)",
200
200
  "size: sm|md|lg (default: md)",
201
+ "variant: outline - each item a full-width bordered surface; omit for the inline control",
201
202
  "label: string - group label",
202
203
  "helperText: string - helper text below the group",
203
204
  "error: boolean | string - error styling and message",
204
205
  "disabled: boolean - disable all options",
205
206
  "wrapperClassName/groupClassName - explicit styling targets for wrapper and group",
206
207
  "groupId: string - ID forwarded to the inner radiogroup while id remains on the wrapper",
207
- "RadioGroup.Item supports helperText (preferred) and description (legacy alias) plus controlClassName/contentClassName for item-level styling"
208
+ "RadioGroup.Item supports helperText (preferred) and description (legacy alias) plus controlClassName/contentClassName for item-level styling",
209
+ "RadioGroup.Item trailing: ReactNode - a short value (price, count) at the end of the row on the label's line; pairs with variant=outline for plan pickers"
208
210
  ],
209
211
  "a11yRules": ["A11Y_RADIO_GROUP", "A11Y_LABEL_REQUIRED", "A11Y_TARGET_SIZE_MIN"]
210
212
  },
@@ -45,9 +45,22 @@
45
45
  }
46
46
 
47
47
  &[data-disabled] {
48
- cursor: not-allowed;
49
- opacity: 0.5;
48
+ @include disabled-state;
50
49
  }
50
+
51
+ // A trailing value takes a third column so the label and helper keep
52
+ // theirs; it sits on the label's line at the end of the row.
53
+ &[data-has-trailing] {
54
+ grid-template-columns:
55
+ var(--_fui-boolean-mark-size, #{boolean.mark-size("md")}) minmax(0, 1fr)
56
+ auto;
57
+ }
58
+ }
59
+
60
+ .trailing {
61
+ justify-self: end;
62
+ text-align: end;
63
+ white-space: nowrap;
51
64
  }
52
65
 
53
66
  // The radio circle
@@ -62,20 +75,25 @@
62
75
  flex-shrink: 0;
63
76
  box-sizing: border-box;
64
77
  margin-block-start: var(--_fui-boolean-mark-offset, 0);
65
- background-color: var(--fui-field-bg, $fui-bg-elevated);
66
- border: var(--fui-stroke-hairline, 1px) solid var(--fui-field-border, $fui-border-strong);
78
+ background-color: var(--fui-bg-primary, $fui-bg-primary);
79
+ border: var(--fui-stroke-hairline, 1px) solid var(--fui-border-strong, $fui-border-strong);
67
80
  border-radius: var(--fui-radius-full, $fui-radius-full);
68
81
  cursor: inherit;
82
+ @include high-contrast-outline;
69
83
 
70
84
  &:hover:not([data-disabled]) {
71
- border-color: var(--fui-field-border-hover, $fui-text-tertiary);
85
+ border-color: var(--fui-text-tertiary, $fui-text-tertiary);
86
+ }
87
+
88
+ &:focus-visible {
89
+ @include field.focus-state;
72
90
  }
73
91
 
74
92
  &[data-checked] {
75
93
  background-color: color-mix(
76
94
  in srgb,
77
95
  var(--fui-control-checked-bg, #{$fui-color-accent}) 8%,
78
- var(--fui-field-bg, #{$fui-bg-elevated})
96
+ var(--fui-bg-primary, #{$fui-bg-primary})
79
97
  );
80
98
  border-color: var(--fui-control-checked-border, $fui-color-accent);
81
99
  box-shadow: inset 0 0 0 var(--fui-stroke-hairline, 1px)
@@ -86,13 +104,17 @@
86
104
  background-color: color-mix(
87
105
  in srgb,
88
106
  var(--fui-control-checked-bg-hover, #{$fui-color-accent-hover}) 12%,
89
- var(--fui-field-bg, #{$fui-bg-elevated})
107
+ var(--fui-bg-primary, #{$fui-bg-primary})
90
108
  );
91
109
  border-color: var(--fui-control-checked-border-hover, $fui-color-accent-hover);
92
110
  }
93
111
 
94
112
  &[data-invalid] {
95
- border-color: var(--fui-color-danger-text, $fui-color-danger-text);
113
+ @include field.invalid-state;
114
+
115
+ &:focus-visible {
116
+ @include field.invalid-focus-state;
117
+ }
96
118
  }
97
119
  }
98
120
 
@@ -160,16 +182,16 @@
160
182
  }
161
183
 
162
184
  // ============================================
163
- // Card variant: each item is a full-width clickable surface that signals
185
+ // Outline variant: each item is a full-width bordered surface that signals
164
186
  // selection via background + border tint while keeping the inline radio
165
187
  // circle as the canonical control. The `:has([data-checked])` selector is
166
188
  // the source of truth for selected styling — no extra attribute plumbing
167
189
  // required from JS.
168
190
  // ============================================
169
- // Card variant uses a transparent base so the selected accent tint reads
170
- // as a deliberate state change rather than a small shift between two grey
171
- // surfaces. Mirrors the pattern used by the Checkbox card variant.
172
- .itemWrapperCard {
191
+ // The outline variant uses a transparent base so the selected accent tint
192
+ // reads as a deliberate state change rather than a small shift between two
193
+ // grey surfaces. Mirrors the pattern used by the Checkbox outline variant.
194
+ .itemWrapperOutline {
173
195
  width: 100%;
174
196
  border-radius: var(--fui-radius-md, $fui-radius-md);
175
197
  border: var(--fui-stroke-hairline, 1px) solid var(--fui-border-default, $fui-border-default);
@@ -218,26 +240,10 @@
218
240
  }
219
241
 
220
242
  .group[data-invalid] .radio {
221
- border-color: var(--fui-color-danger-text, $fui-color-danger-text);
222
- }
223
-
224
- // ============================================
225
- // Accessibility: High Contrast Mode
226
- // ============================================
243
+ @include field.invalid-state;
227
244
 
228
- @media (prefers-contrast: more) {
229
- .radio {
230
- border-color: var(--fui-text-primary, $fui-text-primary);
231
- outline: var(--fui-stroke-hairline, 1px) solid var(--fui-text-primary, $fui-text-primary);
232
- outline-offset: calc(-1 * var(--fui-stroke-default, 2px));
233
-
234
- &[data-checked] {
235
- border-color: var(--fui-control-checked-border, $fui-color-accent);
236
- }
237
-
238
- &[data-invalid] {
239
- border-color: var(--fui-color-danger-text, $fui-color-danger-text);
240
- }
245
+ &:focus-visible {
246
+ @include field.invalid-focus-state;
241
247
  }
242
248
  }
243
249