@usefragments/ui 1.5.4 → 1.7.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 (667) hide show
  1. package/README.md +4 -4
  2. package/dist/assets/fragments-wordmark.cjs +2 -2
  3. package/dist/assets/fragments-wordmark.d.ts.map +1 -1
  4. package/dist/assets/fragments-wordmark.js +2 -2
  5. package/dist/assets/ui.css +10468 -6909
  6. package/dist/chart.cjs +31 -26
  7. package/dist/chart.js +31 -26
  8. package/dist/codeblock.cjs +55 -29
  9. package/dist/codeblock.js +55 -29
  10. package/dist/colorpicker.cjs +5 -2
  11. package/dist/colorpicker.js +5 -2
  12. package/dist/components/Accordion/Accordion.module.scss.cjs +8 -8
  13. package/dist/components/Accordion/Accordion.module.scss.js +8 -8
  14. package/dist/components/Alert/Alert.module.scss.cjs +15 -12
  15. package/dist/components/Alert/Alert.module.scss.js +15 -12
  16. package/dist/components/Alert/index.cjs +7 -1
  17. package/dist/components/Alert/index.d.ts +12 -6
  18. package/dist/components/Alert/index.d.ts.map +1 -1
  19. package/dist/components/Alert/index.js +7 -1
  20. package/dist/components/AppShell/AppShell.module.scss.cjs +14 -14
  21. package/dist/components/AppShell/AppShell.module.scss.js +14 -14
  22. package/dist/components/AppShell/index.cjs +5 -3
  23. package/dist/components/AppShell/index.d.ts +4 -2
  24. package/dist/components/AppShell/index.d.ts.map +1 -1
  25. package/dist/components/AppShell/index.js +5 -3
  26. package/dist/components/Avatar/Avatar.module.scss.cjs +17 -14
  27. package/dist/components/Avatar/Avatar.module.scss.js +17 -14
  28. package/dist/components/Avatar/index.cjs +100 -118
  29. package/dist/components/Avatar/index.d.ts +7 -5
  30. package/dist/components/Avatar/index.d.ts.map +1 -1
  31. package/dist/components/Avatar/index.js +100 -118
  32. package/dist/components/Badge/Badge.module.scss.cjs +19 -19
  33. package/dist/components/Badge/Badge.module.scss.js +19 -19
  34. package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +14 -14
  35. package/dist/components/BentoGrid/BentoGrid.module.scss.js +14 -14
  36. package/dist/components/Box/Box.module.scss.cjs +152 -152
  37. package/dist/components/Box/Box.module.scss.js +152 -152
  38. package/dist/components/Box/index.cjs +64 -75
  39. package/dist/components/Box/index.d.ts +16 -16
  40. package/dist/components/Box/index.d.ts.map +1 -1
  41. package/dist/components/Box/index.js +64 -75
  42. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.cjs +8 -8
  43. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +8 -8
  44. package/dist/components/Button/Button.module.scss.cjs +14 -14
  45. package/dist/components/Button/Button.module.scss.js +14 -14
  46. package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs +15 -15
  47. package/dist/components/ButtonGroup/ButtonGroup.module.scss.js +15 -15
  48. package/dist/components/Card/Card.module.scss.cjs +30 -18
  49. package/dist/components/Card/Card.module.scss.js +31 -19
  50. package/dist/components/Card/index.cjs +8 -0
  51. package/dist/components/Card/index.d.ts +12 -2
  52. package/dist/components/Card/index.d.ts.map +1 -1
  53. package/dist/components/Card/index.js +8 -0
  54. package/dist/components/Chart/Chart.module.scss.cjs +15 -15
  55. package/dist/components/Chart/Chart.module.scss.js +15 -15
  56. package/dist/components/Chart/index.d.ts +7 -7
  57. package/dist/components/Chart/index.d.ts.map +1 -1
  58. package/dist/components/Checkbox/Checkbox.module.scss.cjs +9 -15
  59. package/dist/components/Checkbox/Checkbox.module.scss.js +9 -15
  60. package/dist/components/Checkbox/index.cjs +6 -8
  61. package/dist/components/Checkbox/index.d.ts.map +1 -1
  62. package/dist/components/Checkbox/index.js +6 -8
  63. package/dist/components/Chip/Chip.module.scss.cjs +15 -15
  64. package/dist/components/Chip/Chip.module.scss.js +15 -15
  65. package/dist/components/Chip/index.cjs +6 -6
  66. package/dist/components/Chip/index.d.ts +1 -1
  67. package/dist/components/Chip/index.js +4 -4
  68. package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +27 -24
  69. package/dist/components/CodeBlock/CodeBlock.module.scss.js +27 -24
  70. package/dist/components/CodeBlock/css-variables-theme.cjs +98 -0
  71. package/dist/components/CodeBlock/css-variables-theme.d.ts +27 -0
  72. package/dist/components/CodeBlock/css-variables-theme.d.ts.map +1 -0
  73. package/dist/components/CodeBlock/css-variables-theme.js +98 -0
  74. package/dist/components/CodeBlock/index.d.ts +17 -3
  75. package/dist/components/CodeBlock/index.d.ts.map +1 -1
  76. package/dist/components/Collapsible/Collapsible.module.scss.cjs +9 -12
  77. package/dist/components/Collapsible/Collapsible.module.scss.js +9 -12
  78. package/dist/components/Collapsible/index.cjs +3 -2
  79. package/dist/components/Collapsible/index.d.ts +3 -3
  80. package/dist/components/Collapsible/index.d.ts.map +1 -1
  81. package/dist/components/Collapsible/index.js +3 -2
  82. package/dist/components/ColorPicker/ColorPicker.module.scss.cjs +16 -16
  83. package/dist/components/ColorPicker/ColorPicker.module.scss.js +16 -16
  84. package/dist/components/ColorPicker/index.d.ts.map +1 -1
  85. package/dist/components/Combobox/Combobox.module.scss.cjs +21 -27
  86. package/dist/components/Combobox/Combobox.module.scss.js +21 -27
  87. package/dist/components/Combobox/index.cjs +21 -5
  88. package/dist/components/Combobox/index.d.ts.map +1 -1
  89. package/dist/components/Combobox/index.js +21 -5
  90. package/dist/components/Command/Command.module.scss.cjs +11 -11
  91. package/dist/components/Command/Command.module.scss.js +11 -11
  92. package/dist/components/Command/index.cjs +26 -15
  93. package/dist/components/Command/index.d.ts +2 -2
  94. package/dist/components/Command/index.d.ts.map +1 -1
  95. package/dist/components/Command/index.js +26 -15
  96. package/dist/components/ConversationList/ConversationList.module.scss.cjs +11 -14
  97. package/dist/components/ConversationList/ConversationList.module.scss.js +11 -14
  98. package/dist/components/ConversationList/index.cjs +40 -44
  99. package/dist/components/ConversationList/index.d.ts +3 -3
  100. package/dist/components/ConversationList/index.d.ts.map +1 -1
  101. package/dist/components/ConversationList/index.js +40 -44
  102. package/dist/components/DataTable/DataTable.icons.cjs +6 -33
  103. package/dist/components/DataTable/DataTable.icons.d.ts.map +1 -1
  104. package/dist/components/DataTable/DataTable.icons.js +6 -33
  105. package/dist/components/DataTable/DataTable.module.scss.cjs +32 -56
  106. package/dist/components/DataTable/DataTable.module.scss.js +32 -56
  107. package/dist/components/DataTable/index.d.ts +5 -4
  108. package/dist/components/DataTable/index.d.ts.map +1 -1
  109. package/dist/components/DatePicker/DatePicker.module.scss.cjs +33 -33
  110. package/dist/components/DatePicker/DatePicker.module.scss.js +33 -33
  111. package/dist/components/DatePicker/index.d.ts.map +1 -1
  112. package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
  113. package/dist/components/Dialog/Dialog.module.scss.js +14 -14
  114. package/dist/components/Dialog/index.cjs +11 -14
  115. package/dist/components/Dialog/index.d.ts +7 -7
  116. package/dist/components/Dialog/index.d.ts.map +1 -1
  117. package/dist/components/Dialog/index.js +11 -14
  118. package/dist/components/Drawer/Drawer.module.scss.cjs +31 -28
  119. package/dist/components/Drawer/Drawer.module.scss.js +31 -28
  120. package/dist/components/Drawer/index.cjs +1 -1
  121. package/dist/components/Drawer/index.js +1 -1
  122. package/dist/components/Editor/Editor.module.scss.cjs +23 -23
  123. package/dist/components/Editor/Editor.module.scss.js +23 -23
  124. package/dist/components/Editor/index.d.ts +10 -10
  125. package/dist/components/Editor/index.d.ts.map +1 -1
  126. package/dist/components/EmptyState/EmptyState.module.scss.cjs +15 -12
  127. package/dist/components/EmptyState/EmptyState.module.scss.js +15 -12
  128. package/dist/components/EmptyState/index.cjs +8 -6
  129. package/dist/components/EmptyState/index.d.ts +9 -4
  130. package/dist/components/EmptyState/index.d.ts.map +1 -1
  131. package/dist/components/EmptyState/index.js +8 -6
  132. package/dist/components/Field/Field.module.scss.cjs +8 -5
  133. package/dist/components/Field/Field.module.scss.js +8 -5
  134. package/dist/components/Field/index.cjs +18 -1
  135. package/dist/components/Field/index.d.ts +9 -2
  136. package/dist/components/Field/index.d.ts.map +1 -1
  137. package/dist/components/Field/index.js +18 -1
  138. package/dist/components/Fieldset/Fieldset.module.scss.cjs +3 -3
  139. package/dist/components/Fieldset/Fieldset.module.scss.js +3 -3
  140. package/dist/components/Form/Form.module.scss.cjs +5 -2
  141. package/dist/components/Form/Form.module.scss.js +5 -2
  142. package/dist/components/Form/index.cjs +6 -1
  143. package/dist/components/Form/index.d.ts +8 -3
  144. package/dist/components/Form/index.d.ts.map +1 -1
  145. package/dist/components/Form/index.js +6 -1
  146. package/dist/components/Grid/Grid.module.scss.cjs +54 -72
  147. package/dist/components/Grid/Grid.module.scss.js +54 -72
  148. package/dist/components/Grid/index.cjs +57 -77
  149. package/dist/components/Grid/index.d.ts +11 -11
  150. package/dist/components/Grid/index.d.ts.map +1 -1
  151. package/dist/components/Grid/index.js +57 -77
  152. package/dist/components/Header/Header.module.scss.cjs +33 -33
  153. package/dist/components/Header/Header.module.scss.js +33 -33
  154. package/dist/components/Header/index.cjs +18 -38
  155. package/dist/components/Header/index.d.ts +15 -11
  156. package/dist/components/Header/index.d.ts.map +1 -1
  157. package/dist/components/Header/index.js +18 -38
  158. package/dist/components/Icon/Icon.module.scss.cjs +29 -8
  159. package/dist/components/Icon/Icon.module.scss.js +30 -9
  160. package/dist/components/Icon/index.cjs +30 -48
  161. package/dist/components/Icon/index.d.ts +6 -6
  162. package/dist/components/Icon/index.d.ts.map +1 -1
  163. package/dist/components/Icon/index.js +30 -48
  164. package/dist/components/IconButton/IconButton.module.scss.cjs +8 -8
  165. package/dist/components/IconButton/IconButton.module.scss.js +8 -8
  166. package/dist/components/IconButton/index.cjs +2 -1
  167. package/dist/components/IconButton/index.d.ts.map +1 -1
  168. package/dist/components/IconButton/index.js +2 -1
  169. package/dist/components/Image/Image.module.scss.cjs +27 -27
  170. package/dist/components/Image/Image.module.scss.js +27 -27
  171. package/dist/components/Input/Input.module.scss.cjs +19 -25
  172. package/dist/components/Input/Input.module.scss.js +19 -25
  173. package/dist/components/Input/index.cjs +1 -2
  174. package/dist/components/Input/index.d.ts.map +1 -1
  175. package/dist/components/Input/index.js +1 -2
  176. package/dist/components/Link/Link.module.scss.cjs +14 -10
  177. package/dist/components/Link/Link.module.scss.js +14 -10
  178. package/dist/components/Link/index.d.ts +1 -1
  179. package/dist/components/Link/index.d.ts.map +1 -1
  180. package/dist/components/List/List.module.scss.cjs +19 -19
  181. package/dist/components/List/List.module.scss.js +19 -19
  182. package/dist/components/List/index.cjs +4 -7
  183. package/dist/components/List/index.d.ts.map +1 -1
  184. package/dist/components/List/index.js +4 -7
  185. package/dist/components/Listbox/Listbox.module.scss.cjs +9 -9
  186. package/dist/components/Listbox/Listbox.module.scss.js +9 -9
  187. package/dist/components/Loading/Loading.module.scss.cjs +34 -34
  188. package/dist/components/Loading/Loading.module.scss.js +34 -34
  189. package/dist/components/Loading/index.cjs +39 -67
  190. package/dist/components/Loading/index.d.ts +6 -6
  191. package/dist/components/Loading/index.d.ts.map +1 -1
  192. package/dist/components/Loading/index.js +39 -67
  193. package/dist/components/Main/Main.module.scss.cjs +7 -7
  194. package/dist/components/Main/Main.module.scss.js +7 -7
  195. package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
  196. package/dist/components/Markdown/Markdown.module.scss.js +1 -1
  197. package/dist/components/Markdown/index.d.ts +2 -2
  198. package/dist/components/Markdown/index.d.ts.map +1 -1
  199. package/dist/components/Menu/Menu.module.scss.cjs +16 -16
  200. package/dist/components/Menu/Menu.module.scss.js +16 -16
  201. package/dist/components/Menu/index.cjs +19 -61
  202. package/dist/components/Menu/index.d.ts +10 -10
  203. package/dist/components/Menu/index.d.ts.map +1 -1
  204. package/dist/components/Menu/index.js +19 -61
  205. package/dist/components/Message/Message.module.scss.cjs +18 -21
  206. package/dist/components/Message/Message.module.scss.js +18 -21
  207. package/dist/components/Message/index.cjs +15 -2
  208. package/dist/components/Message/index.d.ts.map +1 -1
  209. package/dist/components/Message/index.js +15 -2
  210. package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +34 -31
  211. package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +34 -31
  212. package/dist/components/NavigationMenu/index.cjs +32 -15
  213. package/dist/components/NavigationMenu/index.d.ts +12 -6
  214. package/dist/components/NavigationMenu/index.d.ts.map +1 -1
  215. package/dist/components/NavigationMenu/index.js +32 -15
  216. package/dist/components/Pagination/Pagination.module.scss.cjs +18 -9
  217. package/dist/components/Pagination/Pagination.module.scss.js +19 -10
  218. package/dist/components/Pagination/index.cjs +5 -2
  219. package/dist/components/Pagination/index.d.ts +3 -1
  220. package/dist/components/Pagination/index.d.ts.map +1 -1
  221. package/dist/components/Pagination/index.js +5 -2
  222. package/dist/components/Popover/Popover.module.scss.cjs +10 -10
  223. package/dist/components/Popover/Popover.module.scss.js +10 -10
  224. package/dist/components/Progress/Progress.module.scss.cjs +29 -32
  225. package/dist/components/Progress/Progress.module.scss.js +29 -32
  226. package/dist/components/Progress/geometry.cjs +30 -0
  227. package/dist/components/Progress/geometry.d.ts +8 -0
  228. package/dist/components/Progress/geometry.d.ts.map +1 -0
  229. package/dist/components/Progress/geometry.js +30 -0
  230. package/dist/components/Progress/index.cjs +40 -29
  231. package/dist/components/Progress/index.d.ts +4 -3
  232. package/dist/components/Progress/index.d.ts.map +1 -1
  233. package/dist/components/Progress/index.js +40 -29
  234. package/dist/components/Prompt/Prompt.module.scss.cjs +29 -29
  235. package/dist/components/Prompt/Prompt.module.scss.js +29 -29
  236. package/dist/components/Prompt/index.cjs +5 -4
  237. package/dist/components/Prompt/index.d.ts.map +1 -1
  238. package/dist/components/Prompt/index.js +5 -4
  239. package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +15 -21
  240. package/dist/components/RadioGroup/RadioGroup.module.scss.js +15 -21
  241. package/dist/components/RadioGroup/index.cjs +7 -6
  242. package/dist/components/RadioGroup/index.d.ts.map +1 -1
  243. package/dist/components/RadioGroup/index.js +7 -6
  244. package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +7 -22
  245. package/dist/components/ScrollArea/ScrollArea.module.scss.js +7 -22
  246. package/dist/components/ScrollArea/index.cjs +66 -42
  247. package/dist/components/ScrollArea/index.d.ts +6 -5
  248. package/dist/components/ScrollArea/index.d.ts.map +1 -1
  249. package/dist/components/ScrollArea/index.js +66 -42
  250. package/dist/components/ScrollArea/scroll-state.cjs +58 -0
  251. package/dist/components/ScrollArea/scroll-state.d.ts +16 -0
  252. package/dist/components/ScrollArea/scroll-state.d.ts.map +1 -0
  253. package/dist/components/ScrollArea/scroll-state.js +58 -0
  254. package/dist/components/Select/Select.module.scss.cjs +21 -21
  255. package/dist/components/Select/Select.module.scss.js +21 -21
  256. package/dist/components/Select/index.cjs +3 -2
  257. package/dist/components/Select/index.d.ts.map +1 -1
  258. package/dist/components/Select/index.js +3 -2
  259. package/dist/components/Separator/Separator.module.scss.cjs +13 -10
  260. package/dist/components/Separator/Separator.module.scss.js +13 -10
  261. package/dist/components/Separator/index.cjs +37 -38
  262. package/dist/components/Separator/index.d.ts +4 -4
  263. package/dist/components/Separator/index.d.ts.map +1 -1
  264. package/dist/components/Separator/index.js +37 -38
  265. package/dist/components/Sidebar/Sidebar.module.scss.cjs +43 -43
  266. package/dist/components/Sidebar/Sidebar.module.scss.js +43 -43
  267. package/dist/components/Sidebar/index.cjs +17 -38
  268. package/dist/components/Sidebar/index.d.ts +23 -18
  269. package/dist/components/Sidebar/index.d.ts.map +1 -1
  270. package/dist/components/Sidebar/index.js +17 -38
  271. package/dist/components/Skeleton/Skeleton.module.scss.cjs +56 -40
  272. package/dist/components/Skeleton/Skeleton.module.scss.js +56 -40
  273. package/dist/components/Skeleton/index.cjs +41 -55
  274. package/dist/components/Skeleton/index.d.ts +7 -7
  275. package/dist/components/Skeleton/index.d.ts.map +1 -1
  276. package/dist/components/Skeleton/index.js +41 -55
  277. package/dist/components/Slider/Slider.module.scss.cjs +12 -12
  278. package/dist/components/Slider/Slider.module.scss.js +12 -12
  279. package/dist/components/Stack/Stack.module.scss.cjs +25 -45
  280. package/dist/components/Stack/Stack.module.scss.js +25 -45
  281. package/dist/components/Stack/index.cjs +106 -101
  282. package/dist/components/Stack/index.d.ts +7 -7
  283. package/dist/components/Stack/index.d.ts.map +1 -1
  284. package/dist/components/Stack/index.js +106 -101
  285. package/dist/components/Switch/Switch.module.scss.cjs +32 -0
  286. package/dist/components/Switch/Switch.module.scss.js +32 -0
  287. package/dist/components/{Toggle → Switch}/index.cjs +9 -14
  288. package/dist/components/Switch/index.d.ts +37 -1
  289. package/dist/components/Switch/index.d.ts.map +1 -1
  290. package/dist/components/{Toggle → Switch}/index.js +5 -10
  291. package/dist/components/Table/Table.module.scss.cjs +21 -30
  292. package/dist/components/Table/Table.module.scss.js +21 -30
  293. package/dist/components/Table/index.d.ts +6 -5
  294. package/dist/components/Table/index.d.ts.map +1 -1
  295. package/dist/components/TableOfContents/TableOfContents.module.scss.cjs +15 -15
  296. package/dist/components/TableOfContents/TableOfContents.module.scss.js +15 -15
  297. package/dist/components/TableOfContents/index.cjs +13 -9
  298. package/dist/components/TableOfContents/index.d.ts +5 -3
  299. package/dist/components/TableOfContents/index.d.ts.map +1 -1
  300. package/dist/components/TableOfContents/index.js +13 -9
  301. package/dist/components/Tabs/Tabs.module.scss.cjs +12 -12
  302. package/dist/components/Tabs/Tabs.module.scss.js +12 -12
  303. package/dist/components/Tabs/index.cjs +28 -8
  304. package/dist/components/Tabs/index.d.ts.map +1 -1
  305. package/dist/components/Tabs/index.js +28 -8
  306. package/dist/components/Text/Text.module.scss.cjs +105 -57
  307. package/dist/components/Text/Text.module.scss.js +105 -57
  308. package/dist/components/Text/index.cjs +49 -33
  309. package/dist/components/Text/index.d.ts +30 -19
  310. package/dist/components/Text/index.d.ts.map +1 -1
  311. package/dist/components/Text/index.js +49 -33
  312. package/dist/components/Textarea/Textarea.module.scss.cjs +26 -23
  313. package/dist/components/Textarea/Textarea.module.scss.js +26 -23
  314. package/dist/components/Textarea/index.cjs +5 -10
  315. package/dist/components/Textarea/index.d.ts.map +1 -1
  316. package/dist/components/Textarea/index.js +5 -10
  317. package/dist/components/Theme/context.cjs +39 -0
  318. package/dist/components/Theme/context.d.ts +21 -0
  319. package/dist/components/Theme/context.d.ts.map +1 -0
  320. package/dist/components/Theme/context.js +22 -0
  321. package/dist/components/Theme/index.cjs +16 -210
  322. package/dist/components/Theme/index.d.ts +4 -37
  323. package/dist/components/Theme/index.d.ts.map +1 -1
  324. package/dist/components/Theme/index.js +11 -205
  325. package/dist/components/{Theme → ThemeToggle}/ThemeToggle.module.scss.cjs +9 -6
  326. package/dist/components/ThemeToggle/ThemeToggle.module.scss.js +26 -0
  327. package/dist/components/ThemeToggle/index.cjs +140 -0
  328. package/dist/components/ThemeToggle/index.d.ts +26 -0
  329. package/dist/components/ThemeToggle/index.d.ts.map +1 -0
  330. package/dist/components/ThemeToggle/index.js +140 -0
  331. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +13 -13
  332. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +13 -13
  333. package/dist/components/ThinkingIndicator/index.cjs +34 -41
  334. package/dist/components/ThinkingIndicator/index.d.ts +4 -4
  335. package/dist/components/ThinkingIndicator/index.d.ts.map +1 -1
  336. package/dist/components/ThinkingIndicator/index.js +34 -41
  337. package/dist/components/Toast/Toast.module.scss.cjs +20 -20
  338. package/dist/components/Toast/Toast.module.scss.js +20 -20
  339. package/dist/components/Toggle/index.d.ts +2 -42
  340. package/dist/components/Toggle/index.d.ts.map +1 -1
  341. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +20 -20
  342. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +20 -20
  343. package/dist/components/ToggleGroup/index.cjs +3 -2
  344. package/dist/components/ToggleGroup/index.d.ts +2 -1
  345. package/dist/components/ToggleGroup/index.d.ts.map +1 -1
  346. package/dist/components/ToggleGroup/index.js +3 -2
  347. package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
  348. package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
  349. package/dist/components/Tooltip/index.cjs +24 -40
  350. package/dist/components/Tooltip/index.d.ts +4 -4
  351. package/dist/components/Tooltip/index.d.ts.map +1 -1
  352. package/dist/components/Tooltip/index.js +24 -40
  353. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.cjs +1 -1
  354. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.js +1 -1
  355. package/dist/components/VisuallyHidden/index.d.ts +2 -2
  356. package/dist/data-table.cjs +14 -10
  357. package/dist/data-table.js +14 -10
  358. package/dist/datepicker.cjs +5 -3
  359. package/dist/datepicker.js +5 -3
  360. package/dist/editor.cjs +68 -28
  361. package/dist/editor.js +68 -28
  362. package/dist/index.cjs +101 -99
  363. package/dist/index.d.ts +3 -3
  364. package/dist/index.d.ts.map +1 -1
  365. package/dist/index.js +6 -4
  366. package/dist/markdown.cjs +21 -29
  367. package/dist/markdown.js +22 -30
  368. package/dist/measurements/generated.cjs +304 -0
  369. package/dist/measurements/generated.d.ts +268 -0
  370. package/dist/measurements/generated.d.ts.map +1 -0
  371. package/dist/measurements/generated.js +304 -0
  372. package/dist/measurements/index.d.ts +2 -0
  373. package/dist/measurements/index.d.ts.map +1 -0
  374. package/dist/measurements.cjs +6 -0
  375. package/dist/measurements.js +6 -0
  376. package/dist/recipes/popup.cjs +14 -0
  377. package/dist/recipes/popup.d.ts +4 -0
  378. package/dist/recipes/popup.d.ts.map +1 -0
  379. package/dist/recipes/popup.js +14 -0
  380. package/dist/recipes/table-chrome.cjs +18 -0
  381. package/dist/recipes/table-chrome.d.ts +10 -0
  382. package/dist/recipes/table-chrome.d.ts.map +1 -0
  383. package/dist/recipes/table-chrome.js +18 -0
  384. package/dist/table.cjs +5 -2
  385. package/dist/table.js +5 -2
  386. package/dist/utils/a11y.cjs +5 -2
  387. package/dist/utils/a11y.d.ts +5 -5
  388. package/dist/utils/a11y.d.ts.map +1 -1
  389. package/dist/utils/a11y.js +5 -2
  390. package/dist/utils/canonical-stamp.cjs +2 -8
  391. package/dist/utils/canonical-stamp.d.ts.map +1 -1
  392. package/dist/utils/canonical-stamp.js +1 -7
  393. package/dist/utils/css-warning.cjs +1 -1
  394. package/dist/utils/css-warning.js +1 -1
  395. package/dist/utils/env.cjs +17 -0
  396. package/dist/utils/env.d.ts +3 -0
  397. package/dist/utils/env.d.ts.map +1 -0
  398. package/dist/utils/env.js +17 -0
  399. package/dist/utils/keyboard-shortcuts.cjs +3 -10
  400. package/dist/utils/keyboard-shortcuts.d.ts +4 -4
  401. package/dist/utils/keyboard-shortcuts.d.ts.map +1 -1
  402. package/dist/utils/keyboard-shortcuts.js +3 -10
  403. package/dist/utils/layout-spacing.cjs +27 -0
  404. package/dist/utils/layout-spacing.d.ts +5 -0
  405. package/dist/utils/layout-spacing.d.ts.map +1 -0
  406. package/dist/utils/layout-spacing.js +27 -0
  407. package/dist/utils/seed-derivation.cjs +14 -48
  408. package/dist/utils/seed-derivation.d.ts +4 -3
  409. package/dist/utils/seed-derivation.d.ts.map +1 -1
  410. package/dist/utils/seed-derivation.js +14 -48
  411. package/dist/utils/theme-presets.cjs +1 -0
  412. package/dist/utils/theme-presets.d.ts +3 -2
  413. package/dist/utils/theme-presets.d.ts.map +1 -1
  414. package/dist/utils/theme-presets.js +1 -0
  415. package/fragments.json +1 -1
  416. package/package.json +25 -4
  417. package/src/assets/fragments-logo.tsx +2 -2
  418. package/src/assets/fragments-wordmark.tsx +4 -2
  419. package/src/components/Accordion/Accordion.contract.json +24 -48
  420. package/src/components/Accordion/Accordion.module.scss +31 -52
  421. package/src/components/Alert/Alert.contract.json +37 -53
  422. package/src/components/Alert/Alert.module.scss +52 -44
  423. package/src/components/Alert/index.tsx +55 -29
  424. package/src/components/AppShell/AppShell.contract.json +34 -51
  425. package/src/components/AppShell/AppShell.module.scss +59 -43
  426. package/src/components/AppShell/index.tsx +8 -4
  427. package/src/components/Avatar/Avatar.contract.json +31 -48
  428. package/src/components/Avatar/Avatar.module.scss +25 -60
  429. package/src/components/Avatar/index.tsx +152 -146
  430. package/src/components/Badge/Badge.contract.json +37 -42
  431. package/src/components/Badge/Badge.module.scss +59 -47
  432. package/src/components/BentoGrid/BentoGrid.contract.json +21 -45
  433. package/src/components/BentoGrid/BentoGrid.module.scss +11 -32
  434. package/src/components/Box/Box.contract.json +40 -148
  435. package/src/components/Box/Box.module.scss +253 -81
  436. package/src/components/Box/index.tsx +92 -99
  437. package/src/components/Breadcrumbs/Breadcrumbs.contract.json +21 -34
  438. package/src/components/Breadcrumbs/Breadcrumbs.module.scss +19 -15
  439. package/src/components/Button/Button.module.scss +60 -64
  440. package/src/components/ButtonGroup/ButtonGroup.contract.json +32 -47
  441. package/src/components/ButtonGroup/ButtonGroup.module.scss +5 -5
  442. package/src/components/Card/Card.consumer-fixture.module.scss +8 -0
  443. package/src/components/Card/Card.module.scss +284 -167
  444. package/src/components/Card/index.tsx +21 -2
  445. package/src/components/Chart/Chart.contract.json +21 -29
  446. package/src/components/Chart/Chart.module.scss +28 -29
  447. package/src/components/Chart/index.tsx +72 -55
  448. package/src/components/Checkbox/Checkbox.contract.json +24 -24
  449. package/src/components/Checkbox/Checkbox.module.scss +75 -87
  450. package/src/components/Checkbox/index.tsx +8 -11
  451. package/src/components/Chip/Chip.contract.json +36 -42
  452. package/src/components/Chip/Chip.module.scss +25 -36
  453. package/src/components/Chip/index.tsx +5 -5
  454. package/src/components/CodeBlock/CodeBlock.contract.json +46 -76
  455. package/src/components/CodeBlock/CodeBlock.module.scss +129 -217
  456. package/src/components/CodeBlock/css-variables-theme.ts +102 -0
  457. package/src/components/CodeBlock/index.tsx +91 -35
  458. package/src/components/Collapsible/Collapsible.contract.json +21 -36
  459. package/src/components/Collapsible/Collapsible.module.scss +29 -63
  460. package/src/components/Collapsible/index.tsx +22 -26
  461. package/src/components/ColorPicker/ColorPicker.contract.json +29 -48
  462. package/src/components/ColorPicker/ColorPicker.module.scss +54 -33
  463. package/src/components/ColorPicker/index.tsx +7 -2
  464. package/src/components/Combobox/Combobox.contract.json +36 -37
  465. package/src/components/Combobox/Combobox.module.scss +61 -74
  466. package/src/components/Combobox/index.tsx +34 -6
  467. package/src/components/Command/Command.contract.json +21 -43
  468. package/src/components/Command/Command.module.scss +47 -77
  469. package/src/components/Command/index.tsx +58 -47
  470. package/src/components/ConversationList/ConversationList.contract.json +27 -32
  471. package/src/components/ConversationList/ConversationList.module.scss +20 -78
  472. package/src/components/ConversationList/index.tsx +55 -59
  473. package/src/components/DataTable/DataTable.icons.tsx +4 -21
  474. package/src/components/DataTable/DataTable.module.scss +81 -217
  475. package/src/components/DataTable/index.tsx +28 -32
  476. package/src/components/DatePicker/DatePicker.contract.json +27 -28
  477. package/src/components/DatePicker/DatePicker.module.scss +66 -38
  478. package/src/components/DatePicker/index.tsx +7 -3
  479. package/src/components/Dialog/Dialog.module.scss +45 -69
  480. package/src/components/Dialog/index.tsx +47 -37
  481. package/src/components/Drawer/Drawer.contract.json +22 -36
  482. package/src/components/Drawer/Drawer.module.scss +93 -99
  483. package/src/components/Drawer/index.tsx +1 -1
  484. package/src/components/Editor/Editor.contract.json +31 -48
  485. package/src/components/Editor/Editor.module.scss +137 -220
  486. package/src/components/Editor/index.tsx +240 -179
  487. package/src/components/EmptyState/EmptyState.contract.json +31 -43
  488. package/src/components/EmptyState/EmptyState.module.scss +45 -84
  489. package/src/components/EmptyState/index.tsx +48 -23
  490. package/src/components/Field/Field.contract.json +28 -45
  491. package/src/components/Field/Field.module.scss +9 -11
  492. package/src/components/Field/index.tsx +31 -1
  493. package/src/components/Fieldset/Fieldset.contract.json +21 -38
  494. package/src/components/Fieldset/Fieldset.module.scss +23 -8
  495. package/src/components/Form/Form.contract.json +27 -40
  496. package/src/components/Form/Form.module.scss +9 -4
  497. package/src/components/Form/index.tsx +22 -7
  498. package/src/components/Grid/Grid.contract.json +28 -64
  499. package/src/components/Grid/Grid.module.scss +159 -63
  500. package/src/components/Grid/index.tsx +114 -133
  501. package/src/components/Header/Header.contract.json +31 -67
  502. package/src/components/Header/Header.module.scss +56 -48
  503. package/src/components/Header/index.tsx +134 -121
  504. package/src/components/Icon/Icon.contract.json +22 -62
  505. package/src/components/Icon/Icon.module.scss +16 -0
  506. package/src/components/Icon/index.tsx +74 -86
  507. package/src/components/IconButton/IconButton.contract.json +34 -18
  508. package/src/components/IconButton/IconButton.module.scss +15 -26
  509. package/src/components/IconButton/index.tsx +2 -1
  510. package/src/components/Image/Image.contract.json +23 -56
  511. package/src/components/Input/Input.contract.json +26 -32
  512. package/src/components/Input/Input.module.scss +69 -56
  513. package/src/components/Input/index.tsx +1 -2
  514. package/src/components/Link/Link.contract.json +32 -52
  515. package/src/components/Link/Link.module.scss +29 -13
  516. package/src/components/Link/index.tsx +1 -1
  517. package/src/components/List/List.contract.json +23 -52
  518. package/src/components/List/List.module.scss +16 -21
  519. package/src/components/List/index.tsx +4 -10
  520. package/src/components/Listbox/Listbox.contract.json +21 -37
  521. package/src/components/Listbox/Listbox.module.scss +26 -54
  522. package/src/components/Loading/Loading.contract.json +37 -61
  523. package/src/components/Loading/Loading.module.scss +33 -40
  524. package/src/components/Loading/index.tsx +68 -97
  525. package/src/components/Main/Main.contract.json +17 -9
  526. package/src/components/Main/Main.module.scss +3 -5
  527. package/src/components/Markdown/Markdown.contract.json +22 -43
  528. package/src/components/Markdown/Markdown.module.scss +72 -182
  529. package/src/components/Markdown/index.tsx +50 -51
  530. package/src/components/Menu/Menu.contract.json +25 -41
  531. package/src/components/Menu/Menu.module.scss +63 -133
  532. package/src/components/Menu/index.tsx +57 -89
  533. package/src/components/Message/Message.contract.json +29 -52
  534. package/src/components/Message/Message.module.scss +60 -143
  535. package/src/components/Message/index.tsx +16 -6
  536. package/src/components/NavigationMenu/NavigationMenu.contract.json +36 -45
  537. package/src/components/NavigationMenu/NavigationMenu.module.scss +123 -71
  538. package/src/components/NavigationMenu/index.tsx +105 -81
  539. package/src/components/Pagination/Pagination.contract.json +22 -40
  540. package/src/components/Pagination/Pagination.module.scss +34 -27
  541. package/src/components/Pagination/index.tsx +7 -2
  542. package/src/components/Popover/Popover.contract.json +24 -46
  543. package/src/components/Popover/Popover.module.scss +43 -78
  544. package/src/components/Progress/Progress.contract.json +32 -28
  545. package/src/components/Progress/Progress.module.scss +64 -43
  546. package/src/components/Progress/geometry.ts +41 -0
  547. package/src/components/Progress/index.tsx +44 -30
  548. package/src/components/Prompt/Prompt.contract.json +31 -47
  549. package/src/components/Prompt/Prompt.module.scss +58 -87
  550. package/src/components/Prompt/index.tsx +6 -5
  551. package/src/components/RadioGroup/RadioGroup.contract.json +23 -24
  552. package/src/components/RadioGroup/RadioGroup.module.scss +63 -83
  553. package/src/components/RadioGroup/index.tsx +7 -9
  554. package/src/components/ScrollArea/ScrollArea.contract.json +23 -40
  555. package/src/components/ScrollArea/ScrollArea.module.scss +123 -97
  556. package/src/components/ScrollArea/index.tsx +85 -67
  557. package/src/components/ScrollArea/scroll-state.ts +87 -0
  558. package/src/components/Select/Select.module.scss +55 -43
  559. package/src/components/Select/index.tsx +6 -2
  560. package/src/components/Separator/Separator.contract.json +24 -48
  561. package/src/components/Separator/Separator.module.scss +29 -19
  562. package/src/components/Separator/index.tsx +55 -51
  563. package/src/components/Sidebar/Sidebar.contract.json +42 -62
  564. package/src/components/Sidebar/Sidebar.module.scss +117 -106
  565. package/src/components/Sidebar/index.tsx +169 -162
  566. package/src/components/Skeleton/Skeleton.contract.json +28 -54
  567. package/src/components/Skeleton/Skeleton.module.scss +51 -34
  568. package/src/components/Skeleton/index.tsx +65 -72
  569. package/src/components/Slider/Slider.contract.json +27 -39
  570. package/src/components/Slider/Slider.module.scss +33 -27
  571. package/src/components/Stack/Stack.contract.json +29 -56
  572. package/src/components/Stack/Stack.module.scss +110 -38
  573. package/src/components/Stack/index.tsx +157 -127
  574. package/src/components/{Toggle/Toggle.contract.json → Switch/Switch.contract.json} +34 -47
  575. package/src/components/Switch/Switch.module.scss +255 -0
  576. package/src/components/{Toggle → Switch}/index.tsx +5 -21
  577. package/src/components/Table/Table.contract.json +28 -46
  578. package/src/components/Table/Table.module.scss +50 -129
  579. package/src/components/Table/index.tsx +13 -6
  580. package/src/components/TableOfContents/TableOfContents.contract.json +34 -21
  581. package/src/components/TableOfContents/TableOfContents.module.scss +35 -182
  582. package/src/components/TableOfContents/index.tsx +26 -9
  583. package/src/components/Tabs/Tabs.contract.json +24 -45
  584. package/src/components/Tabs/Tabs.module.scss +28 -23
  585. package/src/components/Tabs/index.tsx +17 -5
  586. package/src/components/Text/Text.contract.json +30 -72
  587. package/src/components/Text/Text.module.scss +43 -7
  588. package/src/components/Text/index.tsx +136 -63
  589. package/src/components/Textarea/Textarea.contract.json +25 -43
  590. package/src/components/Textarea/Textarea.module.scss +58 -40
  591. package/src/components/Textarea/index.tsx +5 -12
  592. package/src/components/Theme/Theme.contract.json +32 -51
  593. package/src/components/Theme/context.ts +42 -0
  594. package/src/components/Theme/index.tsx +16 -310
  595. package/src/components/ThemeToggle/ThemeToggle.module.scss +89 -0
  596. package/src/components/ThemeToggle/index.tsx +180 -0
  597. package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +23 -40
  598. package/src/components/ThinkingIndicator/ThinkingIndicator.module.scss +24 -19
  599. package/src/components/ThinkingIndicator/index.tsx +44 -54
  600. package/src/components/Toast/Toast.contract.json +35 -61
  601. package/src/components/Toast/Toast.module.scss +62 -139
  602. package/src/components/Toggle/index.ts +7 -0
  603. package/src/components/ToggleGroup/ToggleGroup.contract.json +40 -68
  604. package/src/components/ToggleGroup/ToggleGroup.module.scss +166 -89
  605. package/src/components/ToggleGroup/index.tsx +5 -3
  606. package/src/components/Tooltip/Tooltip.contract.json +31 -52
  607. package/src/components/Tooltip/Tooltip.module.scss +23 -39
  608. package/src/components/Tooltip/index.tsx +19 -24
  609. package/src/components/VisuallyHidden/VisuallyHidden.contract.json +22 -44
  610. package/src/components/VisuallyHidden/VisuallyHidden.module.scss +3 -0
  611. package/src/components/VisuallyHidden/index.tsx +5 -5
  612. package/src/index.ts +4 -3
  613. package/src/measurements/MeasurementTargets.module.scss +229 -0
  614. package/src/measurements/generated.ts +324 -0
  615. package/src/measurements/index.ts +8 -0
  616. package/src/measurements/measurements.json +368 -0
  617. package/src/recipes/_action.scss +138 -0
  618. package/src/recipes/_boolean-range.scss +116 -0
  619. package/src/recipes/_feedback.scss +171 -0
  620. package/src/recipes/_field.scss +102 -0
  621. package/src/recipes/_layout.scss +74 -0
  622. package/src/recipes/_navigation.scss +110 -0
  623. package/src/recipes/_overlay.scss +191 -0
  624. package/src/recipes/_popup.scss +102 -0
  625. package/src/recipes/_prose.scss +182 -0
  626. package/src/recipes/_representation.scss +193 -0
  627. package/src/recipes/_segmented.scss +26 -0
  628. package/src/recipes/_surface.scss +13 -0
  629. package/src/recipes/_table-chrome.scss +119 -0
  630. package/src/recipes/_target.scss +31 -0
  631. package/src/recipes/_typography.scss +38 -0
  632. package/src/recipes/popup.ts +12 -0
  633. package/src/recipes/table-chrome.ts +30 -0
  634. package/src/scss.d.ts +1 -1
  635. package/src/styles/globals.scss +21 -20
  636. package/src/tokens/_component-properties.scss +2 -2
  637. package/src/tokens/_computed.scss +14 -25
  638. package/src/tokens/_density.scss +41 -132
  639. package/src/tokens/_derive.scss +112 -210
  640. package/src/tokens/_measurements.catalog.generated.css +96 -0
  641. package/src/tokens/_measurements.generated.scss +617 -0
  642. package/src/tokens/_mixins.scss +7 -284
  643. package/src/tokens/_palettes.scss +39 -167
  644. package/src/tokens/_property-registrations.scss +96 -92
  645. package/src/tokens/_radius.scss +16 -70
  646. package/src/tokens/_seeds.scss +24 -23
  647. package/src/tokens/_variables.scss +338 -178
  648. package/src/utils/a11y.tsx +69 -69
  649. package/src/utils/aria.ts +3 -3
  650. package/src/utils/canonical-stamp.ts +2 -12
  651. package/src/utils/css-warning.ts +7 -7
  652. package/src/utils/env.ts +25 -0
  653. package/src/utils/keyboard-shortcuts.ts +131 -126
  654. package/src/utils/layout-spacing.ts +31 -0
  655. package/src/utils/seed-derivation.ts +144 -178
  656. package/src/utils/theme-presets.ts +58 -30
  657. package/dist/components/Theme/ThemeToggle.module.scss.js +0 -23
  658. package/dist/components/Toggle/Toggle.module.scss.cjs +0 -44
  659. package/dist/components/Toggle/Toggle.module.scss.js +0 -44
  660. package/src/components/Button/Button.contract.json +0 -218
  661. package/src/components/Card/Card.contract.json +0 -175
  662. package/src/components/DataTable/DataTable.contract.json +0 -302
  663. package/src/components/Dialog/Dialog.contract.json +0 -159
  664. package/src/components/Select/Select.contract.json +0 -259
  665. package/src/components/Switch/index.ts +0 -3
  666. package/src/components/Theme/ThemeToggle.module.scss +0 -91
  667. package/src/components/Toggle/Toggle.module.scss +0 -244
@@ -1,31 +1,46 @@
1
1
  @use "../../tokens/variables" as *;
2
2
  @use "../../tokens/mixins" as *;
3
+ @use "../../recipes/action";
4
+ @use "../../recipes/field";
5
+ @use "../../recipes/layout";
6
+ @use "../../recipes/popup";
7
+ @use "../../recipes/target";
8
+
9
+ .wrapper {
10
+ @include field.wrapper;
11
+ }
12
+
13
+ .label {
14
+ @include field.label;
15
+ }
16
+
17
+ .helper {
18
+ @include field.helper;
19
+ }
3
20
 
4
- // Form field wrapper (label + helper + error)
5
- @include form-field-wrapper;
21
+ .helperError,
22
+ .errorMessage {
23
+ @include field.error;
24
+ }
6
25
 
7
26
  // Input + trigger wrapper.
8
- // --_field-h is the single field-height source (same input-height tokens that
9
- // control-size() uses for Select/DatePicker); the inner text input + chevron
10
- // trigger derive from it. Declared before the size variants so those win the
11
- // --_field-h override. min-height (not height) preserves chip wrapping.
27
+ // --_field-h is the shared control-height track (same ladder as Input/Select).
28
+ // Inner text + chips fill the content box after wrapper pad only.
29
+ // min-height (not height) preserves chip wrapping.
12
30
  .inputWrapper {
13
- @include field-shell;
14
-
15
- --_field-h: var(--fui-input-height, #{$fui-input-height});
31
+ @include field.size("md");
32
+ @include field.shell;
16
33
 
17
34
  display: inline-flex;
18
35
  align-items: center;
19
36
  flex-wrap: wrap;
20
- gap: var(--fui-space-1, $fui-space-1);
37
+ gap: action.gap("sm");
21
38
  width: 100%;
22
- min-width: 10rem;
23
- min-height: var(--_field-h);
24
- padding: calc(var(--fui-space-px, $fui-space-px) * 2);
25
- padding-right: var(--fui-space-1, $fui-space-1);
39
+ min-width: layout.measure("field-minimum");
40
+ padding-inline-end: var(--fui-raw-space-4, 4px);
26
41
 
27
42
  &:focus-within {
28
- @include field-shell-focus;
43
+ @include field.focus-state;
29
44
  }
30
45
 
31
46
  &:has([data-disabled]) {
@@ -36,35 +51,23 @@
36
51
 
37
52
  // Size variants for input wrapper — override --_field-h.
38
53
  .inputWrapperSm {
39
- --_field-h: var(--fui-input-height-sm, #{$fui-input-height-sm});
54
+ @include field.size("sm");
40
55
  }
41
56
 
42
57
  .inputWrapperMd {
43
- // Default — inherits from .inputWrapper
58
+ @include field.size("md");
44
59
  }
45
60
 
46
61
  .inputWrapperLg {
47
- --_field-h: var(--fui-input-height-lg, #{$fui-input-height-lg});
48
- }
49
-
50
- // Size variants for text input
51
- .inputSm {
52
- font-size: var(--fui-font-size-xs, $fui-font-size-xs);
53
- }
54
-
55
- .inputLg {
56
- font-size: var(--fui-font-size-base, $fui-font-size-base);
62
+ @include field.size("lg");
57
63
  }
58
64
 
59
65
  // Text input
60
66
  .input {
61
- @include text-base;
62
-
63
67
  flex: 1;
64
- min-width: 4rem;
65
- // Inner text row sits inside the field with vertical breathing room.
66
- height: calc(var(--_field-h) - var(--fui-space-2, #{$fui-space-2}));
67
- padding: 0 var(--fui-space-2, $fui-space-2);
68
+ min-width: layout.measure("inline-floor");
69
+ min-block-size: 0;
70
+ padding: 0;
68
71
  background: transparent;
69
72
  border: none;
70
73
  border-radius: var(--fui-radius-sm, $fui-radius-sm);
@@ -96,19 +99,15 @@
96
99
 
97
100
  // Individual chip (multi-select) — matches Chip component outlined xs
98
101
  .chip {
99
- display: inline-flex;
100
- align-items: center;
101
- gap: var(--fui-space-0-5, $fui-space-0-5);
102
- height: var(--fui-target-size-min, $fui-target-size-min);
103
- padding: 0 var(--fui-space-2, $fui-space-2);
102
+ @include action.base;
103
+ @include action.size("micro");
104
+
104
105
  background-color: var(--fui-bg-secondary, $fui-bg-secondary);
105
- border: 1px solid var(--fui-form-group-border, $fui-border);
106
+ border: var(--fui-stroke-hairline, 1px) solid var(--fui-form-group-border, $fui-border);
106
107
  border-radius: var(--fui-radius-full, $fui-radius-full);
107
- font-size: var(--fui-font-size-2xs, $fui-font-size-2xs);
108
- line-height: 1;
109
108
  color: var(--fui-text-secondary, $fui-text-secondary);
110
109
  white-space: nowrap;
111
- max-width: 12rem;
110
+ max-width: layout.measure("compact-content");
112
111
  }
113
112
 
114
113
  .chipLabel {
@@ -120,14 +119,14 @@
120
119
  // Chip remove button — round icon button inside the pill
121
120
  .chipRemove {
122
121
  @include button-reset;
123
- @include touch-target;
122
+ @include target.hit-area("micro");
124
123
 
125
124
  display: flex;
126
125
  align-items: center;
127
126
  justify-content: center;
128
127
  flex-shrink: 0;
129
- width: var(--fui-icon-sm, $fui-icon-sm);
130
- height: var(--fui-icon-sm, $fui-icon-sm);
128
+ width: action.icon-size("sm");
129
+ height: action.icon-size("sm");
131
130
  border-radius: var(--fui-radius-full, $fui-radius-full);
132
131
  color: var(--fui-text-tertiary, $fui-text-tertiary);
133
132
  cursor: pointer;
@@ -151,8 +150,8 @@
151
150
  flex-shrink: 0;
152
151
  min-width: 0;
153
152
  min-height: 0;
154
- width: calc(var(--_field-h) - var(--fui-space-2, #{$fui-space-2}));
155
- height: calc(var(--_field-h) - var(--fui-space-2, #{$fui-space-2}));
153
+ width: action.track("micro");
154
+ height: action.track("micro");
156
155
  margin-left: auto;
157
156
  color: var(--fui-text-secondary, $fui-text-secondary);
158
157
  cursor: pointer;
@@ -160,7 +159,7 @@
160
159
  transition:
161
160
  color var(--fui-transition-fast, $fui-transition-fast),
162
161
  background-color var(--fui-transition-fast, $fui-transition-fast);
163
- margin-inline-end: calc(var(--fui-space-px, $fui-space-px) * 2);
162
+ margin-inline-end: var(--fui-raw-space-2, 2px);
164
163
 
165
164
  &:hover {
166
165
  color: var(--fui-text-primary, $fui-text-primary);
@@ -173,8 +172,7 @@
173
172
  }
174
173
 
175
174
  svg {
176
- width: var(--fui-icon-sm, $fui-icon-sm);
177
- height: var(--fui-icon-sm, $fui-icon-sm);
175
+ @include action.glyph("sm");
178
176
  transition: transform var(--fui-transition-fast, $fui-transition-fast);
179
177
  }
180
178
 
@@ -191,17 +189,10 @@
191
189
 
192
190
  // Popup container
193
191
  .popup {
194
- @include surface-elevated;
195
- @include popup-container;
196
-
197
- @include popup-scroll-viewport;
192
+ @include popup.container;
193
+ @include popup.viewport;
198
194
 
199
- border-color: var(--fui-form-group-border, $fui-border);
200
195
  min-width: var(--anchor-width);
201
- // Show N items + half-peek scroll hint (default 4.5 items).
202
- // !important needed to override Base UI's inline max-height: 100%
203
- max-height: var(--_popup-scroll-max-h) !important;
204
- overflow-y: auto !important;
205
196
 
206
197
  // Animation
207
198
  opacity: 0;
@@ -225,18 +216,18 @@
225
216
 
226
217
  // Individual option
227
218
  .item {
228
- @include popup-item;
219
+ @include popup.row;
229
220
 
230
221
  // Base UI Combobox sets [data-highlighted] on KEYBOARD nav only — it does NOT add it
231
222
  // on pointer hover (verified in-browser) — so :hover is required for mouse users.
232
223
  // Both map to the one shared neutral highlight.
233
224
  &:hover,
234
225
  &[data-highlighted] {
235
- @include popup-item-highlight;
226
+ @include popup.highlight-state;
236
227
  }
237
228
 
238
229
  &[data-selected] {
239
- @include popup-item-selected;
230
+ @include popup.selected-state;
240
231
 
241
232
  // Selected + active: stronger accent-tinted wash so it still reads as selected.
242
233
  &:hover,
@@ -246,7 +237,7 @@
246
237
  }
247
238
 
248
239
  &[data-disabled] {
249
- @include popup-item-disabled;
240
+ @include popup.disabled-state;
250
241
  }
251
242
  }
252
243
 
@@ -268,28 +259,24 @@
268
259
 
269
260
  // Empty state
270
261
  .empty {
271
- @include text-base;
262
+ @include popup.row;
272
263
 
273
- display: flex;
274
- align-items: center;
275
264
  justify-content: center;
276
- padding: var(--fui-space-2, $fui-space-2) var(--fui-space-3, $fui-space-3);
277
265
  color: var(--fui-text-tertiary, $fui-text-tertiary);
278
- font-size: var(--fui-font-size-sm, $fui-font-size-sm);
279
266
  }
280
267
 
281
268
  // Group container
282
269
  .group {
283
- &:not(:first-child) {
284
- margin-top: var(--fui-space-1, $fui-space-1);
285
- padding-top: var(--fui-space-1, $fui-space-1);
286
- border-top: 1px solid var(--fui-border, $fui-border);
270
+ &:not(:first-child)::before {
271
+ content: "";
272
+ display: block;
273
+ @include popup.group-separator;
287
274
  }
288
275
  }
289
276
 
290
277
  // Group label
291
278
  .groupLabel {
292
- @include popup-group-label;
279
+ @include popup.group-label;
293
280
  }
294
281
 
295
282
  // ============================================
@@ -298,7 +285,7 @@
298
285
 
299
286
  @media (prefers-contrast: more) {
300
287
  .inputWrapper {
301
- border-width: 2px;
288
+ border-width: var(--fui-stroke-default, 2px);
302
289
  border-color: var(--fui-text-primary, $fui-text-primary);
303
290
 
304
291
  &:focus-within {
@@ -4,6 +4,7 @@ import * as React from "react";
4
4
  import { Combobox as BaseCombobox } from "@base-ui/react/combobox";
5
5
  import { useResolvedControlSize } from "../ComponentDefaults";
6
6
  import { mergeAriaIds, useFormFieldIds, type FormFieldProps } from "../../utils/aria";
7
+ import { POPUP_OFFSET_PX, resolvePopupViewportRows } from "../../recipes/popup";
7
8
  import styles from "./Combobox.module.scss";
8
9
 
9
10
  // ============================================
@@ -289,6 +290,27 @@ function filterStaticChildren(
289
290
  };
290
291
  }
291
292
 
293
+ /**
294
+ * True when the consumer already supplied a `Combobox.Empty` slot anywhere in
295
+ * the content. Used to decide whether the built-in "no results" fallback is
296
+ * needed — without it an unmatched query renders an empty, collapsed popup.
297
+ */
298
+ function containsEmptySlot(node: React.ReactNode): boolean {
299
+ let found = false;
300
+ React.Children.forEach(node, (child) => {
301
+ if (found || !React.isValidElement(child)) return;
302
+ if (child.type === ComboboxEmpty) {
303
+ found = true;
304
+ return;
305
+ }
306
+ const props = child.props as { children?: React.ReactNode };
307
+ if (props.children !== undefined && containsEmptySlot(props.children)) {
308
+ found = true;
309
+ }
310
+ });
311
+ return found;
312
+ }
313
+
292
314
  // ============================================
293
315
  // Components
294
316
  // ============================================
@@ -532,15 +554,13 @@ function ComboboxInput({
532
554
  ...htmlProps
533
555
  }: ComboboxInputProps) {
534
556
  const context = React.useContext(ComboboxContext);
535
- const inputSizeClass =
536
- context.size === "sm" ? styles.inputSm : context.size === "lg" ? styles.inputLg : undefined;
537
557
  const wrapperSizeClass =
538
558
  context.size === "sm"
539
559
  ? styles.inputWrapperSm
540
560
  : context.size === "lg"
541
561
  ? styles.inputWrapperLg
542
562
  : undefined;
543
- const classes = [styles.input, inputSizeClass, className].filter(Boolean).join(" ");
563
+ const classes = [styles.input, className].filter(Boolean).join(" ");
544
564
  const wrapperClasses = [styles.inputWrapper, wrapperSizeClass].filter(Boolean).join(" ");
545
565
  const renderTrigger = showTrigger && context.explicitTriggerCount === 0;
546
566
  const inputId = context.inputId ?? htmlProps.id;
@@ -612,7 +632,7 @@ function ComboboxTrigger({ children, className, ...htmlProps }: ComboboxTriggerP
612
632
  function ComboboxContent({
613
633
  children,
614
634
  className,
615
- sideOffset = 4,
635
+ sideOffset = POPUP_OFFSET_PX,
616
636
  align = "start",
617
637
  maxVisibleItems,
618
638
  ...htmlProps
@@ -629,11 +649,19 @@ function ComboboxContent({
629
649
  () => filterStaticChildren(children, visibleValues),
630
650
  [children, visibleValues]
631
651
  );
652
+ // No matches and no author-supplied empty slot would leave a bare, collapsed
653
+ // popup, so fall back to a readable "no results" row.
654
+ const popupChildren =
655
+ filteredContent.visibleItemCount === 0 && !containsEmptySlot(children) ? (
656
+ <ComboboxEmpty>No results found</ComboboxEmpty>
657
+ ) : (
658
+ filteredContent.children
659
+ );
632
660
 
633
661
  const popupStyle =
634
662
  maxVisibleItems != null
635
663
  ? ({
636
- "--fui-select-max-items": maxVisibleItems + 0.5,
664
+ "--fui-popup-viewport-rows": resolvePopupViewportRows(maxVisibleItems),
637
665
  ...htmlProps.style,
638
666
  } as React.CSSProperties)
639
667
  : htmlProps.style;
@@ -648,7 +676,7 @@ function ComboboxContent({
648
676
  >
649
677
  <BaseCombobox.Popup {...htmlProps} className={popupClasses} style={popupStyle}>
650
678
  <ComboboxFilteredItemIndexContext.Provider value={filteredItemIndices}>
651
- {filteredContent.children}
679
+ {popupChildren}
652
680
  </ComboboxFilteredItemIndexContext.Provider>
653
681
  </BaseCombobox.Popup>
654
682
  </BaseCombobox.Positioner>
@@ -1,16 +1,9 @@
1
1
  {
2
2
  "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
3
  "name": "Command",
4
- "description": "A searchable command palette for quick actions. Combines an input with a filterable, keyboard-navigable list of actions.",
4
+ "description": "Filters a list of actions as the user types.",
5
5
  "category": "navigation",
6
- "tags": [
7
- "command",
8
- "palette",
9
- "search",
10
- "spotlight",
11
- "quick-actions",
12
- "cmdk"
13
- ],
6
+ "tags": ["command", "palette", "search", "spotlight", "quick-actions", "cmdk"],
14
7
  "status": "stable",
15
8
  "sourcePath": "src/components/Command/index.tsx",
16
9
  "exportName": "Command",
@@ -58,23 +51,22 @@
58
51
  },
59
52
  "usage": {
60
53
  "when": [
61
- "Quick-access command palettes (Ctrl+K)",
62
- "Searchable action menus",
63
- "Inline command lists with filtering",
64
- "Application-wide search interfaces"
54
+ "A keyboard shortcut that jumps anywhere",
55
+ "Action lists too long to scan",
56
+ "Inline lists that need filtering",
57
+ "Search across everything the app can do"
65
58
  ],
66
59
  "whenNot": [
67
- "Simple dropdown menus (use Menu)",
68
- "Form field selection (use Select or Combobox)",
69
- "Static navigation (use Sidebar or Tabs)",
70
- "Search with complex result types (build custom)"
60
+ "A handful of actions (use Menu)",
61
+ "Picking a value for a form (use Select or Combobox)",
62
+ "Fixed navigation (use Sidebar or Tabs)"
71
63
  ],
72
64
  "guidelines": [
73
- "Compose inside Dialog for modal command palette usage",
74
- "Use Command.Group to organize items by category",
75
- "Provide Command.Empty for no-results feedback",
76
- "Use keywords prop for items that should match on aliases",
77
- "Keep item labels short and action-oriented"
65
+ "Wrap in Dialog for the summon-anywhere palette",
66
+ "Group by category once the list gets long",
67
+ "Always supply Command.Empty",
68
+ "Add keywords so aliases and synonyms match",
69
+ "Label rows with a verb"
78
70
  ],
79
71
  "accessibility": [
80
72
  "Uses combobox + listbox ARIA pattern",
@@ -86,22 +78,22 @@
86
78
  "examples": [
87
79
  {
88
80
  "name": "Default",
89
- "description": "Inline command list with search",
81
+ "description": "Search field over a flat list.",
90
82
  "code": "<div style={{ maxWidth: '400px', width: '100%' }}>\n <Command>\n <Command.Input placeholder=\"Type a command...\" />\n <Command.List>\n <Command.Item onItemSelect={() => {}}>Open File</Command.Item>\n <Command.Item onItemSelect={() => {}}>Save Document</Command.Item>\n <Command.Item onItemSelect={() => {}}>Print</Command.Item>\n <Command.Empty>No results found.</Command.Empty>\n </Command.List>\n </Command>\n</div>"
91
83
  },
92
84
  {
93
85
  "name": "Dialog Command Palette",
94
- "description": "Command palette inside a Dialog",
86
+ "description": "The same list summoned over the page.",
95
87
  "code": "<Dialog>\n <Dialog.Trigger asChild>\n <Button variant=\"secondary\">Open Command Palette</Button>\n </Dialog.Trigger>\n <Dialog.Content size=\"sm\">\n <Command>\n <Command.Input placeholder=\"Search commands...\" />\n <Command.List>\n <Command.Group heading=\"Actions\">\n <Command.Item onItemSelect={() => {}}>New File</Command.Item>\n <Command.Item onItemSelect={() => {}}>Open Recent</Command.Item>\n </Command.Group>\n <Command.Separator />\n <Command.Group heading=\"Settings\">\n <Command.Item onItemSelect={() => {}}>Preferences</Command.Item>\n <Command.Item onItemSelect={() => {}}>Keyboard Shortcuts</Command.Item>\n </Command.Group>\n <Command.Empty>No results found.</Command.Empty>\n </Command.List>\n </Command>\n </Dialog.Content>\n</Dialog>"
96
88
  },
97
89
  {
98
90
  "name": "With Groups",
99
- "description": "Organized by category groups",
91
+ "description": "Category labels survive filtering.",
100
92
  "code": "<div style={{ maxWidth: '400px', width: '100%' }}>\n <Command>\n <Command.Input placeholder=\"Search...\" />\n <Command.List>\n <Command.Group heading=\"Suggestions\">\n <Command.Item onItemSelect={() => {}}>Calendar</Command.Item>\n <Command.Item onItemSelect={() => {}}>Calculator</Command.Item>\n </Command.Group>\n <Command.Separator />\n <Command.Group heading=\"Settings\">\n <Command.Item onItemSelect={() => {}}>Profile</Command.Item>\n <Command.Item onItemSelect={() => {}}>Billing</Command.Item>\n <Command.Item disabled onItemSelect={() => {}}>\n Team (coming soon)\n </Command.Item>\n </Command.Group>\n <Command.Empty>No results found.</Command.Empty>\n </Command.List>\n </Command>\n</div>"
101
93
  },
102
94
  {
103
95
  "name": "With Icons",
104
- "description": "Items with leading icons",
96
+ "description": "Leading glyphs speed up scanning.",
105
97
  "code": "<div style={{ maxWidth: '400px', width: '100%' }}>\n <Command>\n <Command.Input placeholder=\"What do you need?\" />\n <Command.List>\n <Command.Item onItemSelect={() => {}}>\n <span style={{ marginRight: '0.5rem', fontSize: '1rem' }}>+</span> New Document\n </Command.Item>\n <Command.Item onItemSelect={() => {}}>\n <span style={{ marginRight: '0.5rem', fontSize: '1rem' }}>{'>'}</span> Open Folder\n </Command.Item>\n <Command.Item onItemSelect={() => {}}>\n <span style={{ marginRight: '0.5rem', fontSize: '1rem' }}>?</span> Search\n </Command.Item>\n <Command.Empty>No results found.</Command.Empty>\n </Command.List>\n </Command>\n</div>"
106
98
  }
107
99
  ],
@@ -132,26 +124,12 @@
132
124
  "Command.Item keywords: string[] - extra filter terms",
133
125
  "Command.Item onItemSelect: (value, event) => void - selection handler"
134
126
  ],
135
- "a11yRules": [
136
- "A11Y_COMBOBOX_ROLE",
137
- "A11Y_LISTBOX_ROLE",
138
- "A11Y_ACTIVE_DESCENDANT"
139
- ]
127
+ "a11yRules": ["A11Y_COMBOBOX_ROLE", "A11Y_LISTBOX_ROLE", "A11Y_ACTIVE_DESCENDANT"]
140
128
  },
141
129
  "ai": {
142
130
  "compositionPattern": "compound",
143
- "subComponents": [
144
- "Input",
145
- "List",
146
- "Item",
147
- "Group",
148
- "Empty",
149
- "Separator"
150
- ],
151
- "requiredChildren": [
152
- "Input",
153
- "List"
154
- ],
131
+ "subComponents": ["Input", "List", "Item", "Group", "Empty", "Separator"],
132
+ "requiredChildren": ["Input", "List"],
155
133
  "commonPatterns": [
156
134
  "<Dialog><Dialog.Trigger><Button>Open Palette</Button></Dialog.Trigger><Dialog.Content size=\"sm\"><Command><Command.Input placeholder=\"Search...\" /><Command.List><Command.Group heading=\"Actions\"><Command.Item onItemSelect={() => {}}>Action 1</Command.Item></Command.Group><Command.Empty>No results.</Command.Empty></Command.List></Command></Dialog.Content></Dialog>"
157
135
  ]
@@ -1,55 +1,48 @@
1
- @use '../../tokens/variables' as *;
2
- @use '../../tokens/mixins' as *;
3
-
4
- // ============================================
5
- // Command container
6
- // ============================================
1
+ @use "../../tokens/variables" as *;
2
+ @use "../../recipes/action" as action;
3
+ @use "../../recipes/field" as field;
4
+ @use "../../recipes/popup" as popup;
5
+ @use "../../recipes/typography" as typography;
7
6
 
8
7
  .command {
9
- @include surface-elevated;
8
+ @include popup.container;
10
9
 
11
10
  display: flex;
12
11
  flex-direction: column;
13
12
  overflow: hidden;
14
- box-shadow: var(--fui-shadow-md, $fui-shadow-md);
15
13
  }
16
14
 
17
- // ============================================
18
- // Input area
19
- // ============================================
20
-
21
15
  .inputWrapper {
22
- @include field-shell;
16
+ @include field.size("md");
17
+ @include field.shell;
23
18
 
24
19
  display: flex;
25
20
  align-items: center;
26
- gap: var(--fui-space-2, $fui-space-2);
27
- padding: 0 var(--fui-space-2, $fui-space-2);
28
- margin: var(--fui-space-2, $fui-space-2);
29
- height: var(--fui-input-height, $fui-input-height);
21
+ gap: var(--fui-popup-row-content-gap);
22
+ margin-block-end: var(--fui-popup-container-inset);
30
23
 
31
24
  &:focus-within {
32
- @include field-shell-focus;
25
+ @include field.focus-state;
33
26
  }
34
27
 
35
28
  svg {
36
- flex-shrink: 0;
37
- width: 1rem;
38
- height: 1rem;
29
+ inline-size: action.icon-size("md");
30
+ block-size: action.icon-size("md");
31
+ flex: 0 0 auto;
39
32
  color: var(--fui-text-secondary, $fui-text-secondary);
40
33
  }
41
34
  }
42
35
 
43
36
  .input {
44
- @include text-base;
45
-
46
37
  flex: 1;
38
+ min-inline-size: 0;
39
+ padding: 0;
47
40
  border: none;
48
- background: transparent;
49
41
  outline: none;
50
- font-size: var(--fui-font-size-sm, $fui-font-size-sm);
51
42
  color: var(--fui-text-primary, $fui-text-primary);
52
- padding: 0;
43
+ background: transparent;
44
+ font: inherit;
45
+ letter-spacing: inherit;
53
46
 
54
47
  &::placeholder {
55
48
  color: var(--fui-text-tertiary, $fui-text-tertiary);
@@ -62,91 +55,68 @@
62
55
  }
63
56
  }
64
57
 
65
- // ============================================
66
- // List area
67
- // ============================================
68
-
69
58
  .list {
70
- overflow-y: auto;
71
- max-height: 300px; // scroll viewport cap (no spacing token at this size)
72
- padding: var(--fui-space-1, $fui-space-1);
59
+ @include popup.viewport;
73
60
  }
74
61
 
75
- // ============================================
76
- // Item
77
- // ============================================
78
-
79
62
  .item {
80
- @include popup-item;
63
+ @include popup.row;
81
64
 
82
- // Command items pair an icon with a label; a slightly wider gap than the default
83
- // popup-item reads better here.
84
- gap: var(--fui-space-2, $fui-space-2);
85
- text-align: left;
65
+ text-align: start;
86
66
 
87
67
  &:hover {
88
- @include popup-item-highlight;
68
+ @include popup.highlight-state;
69
+ }
70
+
71
+ > svg {
72
+ inline-size: var(--fui-popup-indicator-box);
73
+ block-size: var(--fui-popup-indicator-box);
74
+ flex: 0 0 auto;
89
75
  }
90
76
  }
91
77
 
92
- // Keyboard-active row (cmdk-style roving selection) uses the same neutral highlight.
93
78
  .itemActive {
94
- @include popup-item-highlight;
79
+ @include popup.highlight-state;
95
80
  }
96
81
 
97
82
  .itemDisabled {
98
- @include popup-item-disabled;
83
+ @include popup.disabled-state;
99
84
  }
100
85
 
101
- // ============================================
102
- // Group
103
- // ============================================
86
+ .group:not(:first-child)::before {
87
+ @include popup.group-separator;
104
88
 
105
- .group {
106
- &:not(:first-child) {
107
- margin-top: var(--fui-space-1, $fui-space-1);
108
- }
89
+ content: "";
90
+ display: block;
109
91
  }
110
92
 
111
93
  .groupHeading {
112
- padding: var(--fui-space-1, $fui-space-1) var(--fui-space-2, $fui-space-2);
113
- font-size: var(--fui-font-size-xs, $fui-font-size-xs);
114
- font-weight: var(--fui-font-weight-medium, $fui-font-weight-medium);
115
- color: var(--fui-text-tertiary, $fui-text-tertiary);
94
+ @include popup.group-label;
116
95
  }
117
96
 
118
- // ============================================
119
- // Empty state
120
- // ============================================
121
-
122
97
  .empty {
123
- padding: var(--fui-space-3, $fui-space-3);
124
- font-size: var(--fui-font-size-sm, $fui-font-size-sm);
98
+ @include typography.role("body-compact");
99
+
100
+ padding-block: var(--fui-popup-row-block-inset);
101
+ padding-inline: var(--fui-popup-row-inline-inset);
125
102
  color: var(--fui-text-secondary, $fui-text-secondary);
126
103
  text-align: center;
127
104
  }
128
105
 
129
- // ============================================
130
- // Separator
131
- // ============================================
132
-
133
106
  .separator {
134
- height: 1px;
135
- margin: var(--fui-space-1, $fui-space-1) 0;
136
- background-color: var(--fui-border, $fui-border);
107
+ @include popup.group-separator;
137
108
  }
138
109
 
139
- // ============================================
140
- // Accessibility: High Contrast Mode
141
- // ============================================
142
-
143
110
  @media (prefers-contrast: more) {
144
111
  .command {
145
- border-width: 2px;
112
+ border-color: var(--fui-text-primary, $fui-text-primary);
113
+ outline: var(--fui-stroke-hairline, 1px) solid var(--fui-text-primary, $fui-text-primary);
114
+ outline-offset: calc(-1 * var(--fui-stroke-default, 2px));
146
115
  }
147
116
 
148
117
  .itemActive {
149
- outline: 2px solid var(--fui-color-accent, $fui-color-accent);
150
- outline-offset: -2px;
118
+ outline: var(--fui-focus-ring-width, $fui-focus-ring-width) solid
119
+ var(--fui-color-accent, $fui-color-accent);
120
+ outline-offset: calc(-1 * var(--fui-focus-ring-width, $fui-focus-ring-width));
151
121
  }
152
122
  }