@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,5 +1,6 @@
1
- import * as React from 'react';
2
- import styles from './Grid.module.scss';
1
+ import * as React from "react";
2
+ import { resolveLayoutGap } from "../../utils/layout-spacing";
3
+ import styles from "./Grid.module.scss";
3
4
 
4
5
  // ============================================
5
6
  // Types
@@ -26,7 +27,10 @@ export interface ResponsiveColumns {
26
27
  * CSS Grid layout component with responsive columns.
27
28
  * @see https://usefragments.com/components/grid
28
29
  */
29
- export interface GridProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'style' | 'className'> {
30
+ export interface GridProps extends Omit<
31
+ React.HTMLAttributes<HTMLDivElement>,
32
+ "children" | "style" | "className"
33
+ > {
30
34
  children?: React.ReactNode;
31
35
  /**
32
36
  * Number of columns.
@@ -34,31 +38,34 @@ export interface GridProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'c
34
38
  * - An object for responsive columns: `{ base: 1, md: 2, lg: 3 }`
35
39
  * - `"auto"` for responsive auto-fill based on minChildWidth
36
40
  */
37
- columns?: ColumnCount | ResponsiveColumns | 'auto';
41
+ columns?: ColumnCount | ResponsiveColumns | "auto";
38
42
  /** Minimum width for auto-fill columns (only used with columns="auto") */
39
43
  minChildWidth?: string;
40
44
  /** Gap between grid items. Accepts string tokens or numbers (1-8) mapping to the spacing scale */
41
- gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | GapScale;
45
+ gap?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | GapScale;
42
46
  /** Vertical alignment of items within their cells */
43
- alignItems?: 'start' | 'center' | 'end' | 'stretch';
47
+ alignItems?: "start" | "center" | "end" | "stretch";
44
48
  /** Horizontal alignment of items within their cells */
45
- justifyItems?: 'start' | 'center' | 'end' | 'stretch';
49
+ justifyItems?: "start" | "center" | "end" | "stretch";
46
50
  /** Padding inside the grid container */
47
- padding?: 'none' | 'sm' | 'md' | 'lg';
51
+ padding?: "none" | "sm" | "md" | "lg";
48
52
  /** Additional class name */
49
53
  className?: string;
50
54
  /** Inline styles */
51
55
  style?: React.CSSProperties;
52
56
  }
53
57
 
54
- export interface GridItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'className'> {
58
+ export interface GridItemProps extends Omit<
59
+ React.HTMLAttributes<HTMLDivElement>,
60
+ "children" | "className"
61
+ > {
55
62
  children?: React.ReactNode;
56
63
  /** Number of columns this item spans */
57
- colSpan?: ColumnCount | 'full';
64
+ colSpan?: ColumnCount | "full";
58
65
  /** Number of rows this item spans */
59
66
  rowSpan?: 1 | 2 | 3 | 4 | 5 | 6;
60
67
  /** Override alignment for this item */
61
- alignSelf?: 'start' | 'center' | 'end' | 'stretch';
68
+ alignSelf?: "start" | "center" | "end" | "stretch";
62
69
  /**
63
70
  * Enable CSS subgrid so children align to parent grid tracks.
64
71
  * - `true` or `"rows"` — children align to parent row tracks
@@ -66,7 +73,7 @@ export interface GridItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>
66
73
  * - `"both"` — children align to both row and column tracks
67
74
  * Requires the item to span multiple rows/columns for visible effect.
68
75
  */
69
- subgrid?: boolean | 'rows' | 'columns' | 'both';
76
+ subgrid?: boolean | "rows" | "columns" | "both";
70
77
  /** Additional class name */
71
78
  className?: string;
72
79
  style?: React.CSSProperties;
@@ -76,143 +83,116 @@ export interface GridItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>
76
83
  // Helpers
77
84
  // ============================================
78
85
 
79
- function isResponsiveColumns(
80
- columns: GridProps['columns']
81
- ): columns is ResponsiveColumns {
82
- return typeof columns === 'object' && columns !== null;
86
+ function isResponsiveColumns(columns: GridProps["columns"]): columns is ResponsiveColumns {
87
+ return typeof columns === "object" && columns !== null;
83
88
  }
84
89
 
85
- const gapClasses: Record<Exclude<NonNullable<GridProps['gap']>, GapScale>, string> = {
86
- none: styles.gapNone,
87
- xs: styles.gapXs,
88
- sm: styles.gapSm,
89
- md: styles.gapMd,
90
- lg: styles.gapLg,
91
- xl: styles.gapXl,
92
- };
93
-
94
- const paddingClasses: Record<NonNullable<GridProps['padding']>, string> = {
95
- none: styles.paddingNone,
96
- sm: styles.paddingSm,
97
- md: styles.paddingMd,
98
- lg: styles.paddingLg,
90
+ const paddingClasses: Record<NonNullable<GridProps["padding"]>, string> = {
91
+ none: styles.paddingNone ?? "",
92
+ sm: styles.paddingSm ?? "",
93
+ md: styles.paddingMd ?? "",
94
+ lg: styles.paddingLg ?? "",
99
95
  };
100
96
 
101
97
  // ============================================
102
98
  // Grid Component
103
99
  // ============================================
104
100
 
105
- export const Grid = React.forwardRef<HTMLDivElement, GridProps>(
106
- function Grid(
107
- {
108
- children,
109
- columns = 1,
110
- minChildWidth,
111
- gap = 'md',
112
- alignItems,
113
- justifyItems,
114
- padding = 'none',
115
- className,
116
- style,
117
- ...htmlProps
118
- },
119
- ref
120
- ) {
121
- // Determine classes and style based on columns type
122
- let columnsClass: string;
123
- let inlineStyle: React.CSSProperties | undefined;
124
-
125
- if (columns === 'auto') {
126
- columnsClass = styles.columnsAuto;
127
- if (minChildWidth) {
128
- inlineStyle = { '--fui-grid-min-child-width': minChildWidth } as React.CSSProperties;
129
- }
130
- } else if (isResponsiveColumns(columns)) {
131
- columnsClass = styles.columnsResponsive;
132
- const vars: Record<string, string> = {};
133
- if (columns.base) vars['--fui-grid-cols'] = String(columns.base);
134
- if (columns.sm) vars['--fui-grid-cols-sm'] = String(columns.sm);
135
- if (columns.md) vars['--fui-grid-cols-md'] = String(columns.md);
136
- if (columns.lg) vars['--fui-grid-cols-lg'] = String(columns.lg);
137
- if (columns.xl) vars['--fui-grid-cols-xl'] = String(columns.xl);
138
- inlineStyle = vars as unknown as React.CSSProperties;
139
- } else {
140
- columnsClass = styles[`columns${columns}`];
141
- }
142
-
143
- // Handle numeric gap via inline style
144
- if (typeof gap === 'number') {
145
- inlineStyle = { ...inlineStyle, gap: `var(--fui-space-${gap})` } as React.CSSProperties;
101
+ export const Grid = React.forwardRef<HTMLDivElement, GridProps>(function Grid(
102
+ {
103
+ children,
104
+ columns = 1,
105
+ minChildWidth,
106
+ gap = "md",
107
+ alignItems,
108
+ justifyItems,
109
+ padding = "none",
110
+ className,
111
+ style,
112
+ ...htmlProps
113
+ },
114
+ ref
115
+ ) {
116
+ // Determine classes and style based on columns type
117
+ let columnsClass: string;
118
+ let inlineStyle: React.CSSProperties | undefined;
119
+
120
+ if (columns === "auto") {
121
+ columnsClass = styles.columnsAuto ?? "";
122
+ if (minChildWidth) {
123
+ inlineStyle = { "--fui-grid-min-child-width": minChildWidth } as React.CSSProperties;
146
124
  }
147
-
148
- const classes = [
149
- styles.grid,
150
- columnsClass,
151
- typeof gap === 'number' ? undefined : gapClasses[gap],
152
- paddingClasses[padding],
153
- alignItems && styles[`align${cap(alignItems)}`],
154
- justifyItems && styles[`justify${cap(justifyItems)}`],
155
- className,
156
- ]
157
- .filter(Boolean)
158
- .join(' ');
159
-
160
- const mergedStyle = inlineStyle ? { ...inlineStyle, ...style } : style;
161
-
162
- return (
163
- <div {...htmlProps} ref={ref} className={classes} style={mergedStyle}>
164
- {children}
165
- </div>
166
- );
125
+ } else if (isResponsiveColumns(columns)) {
126
+ columnsClass = styles.columnsResponsive ?? "";
127
+ const vars: Record<string, string> = {};
128
+ if (columns.base) vars["--fui-grid-cols"] = String(columns.base);
129
+ if (columns.sm) vars["--fui-grid-cols-sm"] = String(columns.sm);
130
+ if (columns.md) vars["--fui-grid-cols-md"] = String(columns.md);
131
+ if (columns.lg) vars["--fui-grid-cols-lg"] = String(columns.lg);
132
+ if (columns.xl) vars["--fui-grid-cols-xl"] = String(columns.xl);
133
+ inlineStyle = vars as unknown as React.CSSProperties;
134
+ } else {
135
+ columnsClass = styles[`columns${columns}`] ?? "";
167
136
  }
168
- ) as GridComponent;
137
+
138
+ inlineStyle = {
139
+ ...inlineStyle,
140
+ "--_fui-grid-gap": resolveLayoutGap(gap),
141
+ } as React.CSSProperties;
142
+
143
+ const classes = [
144
+ styles.grid,
145
+ columnsClass,
146
+ paddingClasses[padding],
147
+ alignItems && styles[`align${cap(alignItems)}`],
148
+ justifyItems && styles[`justify${cap(justifyItems)}`],
149
+ className,
150
+ ]
151
+ .filter(Boolean)
152
+ .join(" ");
153
+
154
+ const mergedStyle = inlineStyle ? { ...inlineStyle, ...style } : style;
155
+
156
+ return (
157
+ <div {...htmlProps} ref={ref} className={classes} style={mergedStyle}>
158
+ {children}
159
+ </div>
160
+ );
161
+ }) as GridComponent;
169
162
 
170
163
  // ============================================
171
164
  // Grid.Item Sub-component
172
165
  // ============================================
173
166
 
174
167
  const subgridClasses: Record<string, string> = {
175
- rows: styles.subgridRows,
176
- columns: styles.subgridColumns,
177
- both: styles.subgridBoth,
168
+ rows: styles.subgridRows ?? "",
169
+ columns: styles.subgridColumns ?? "",
170
+ both: styles.subgridBoth ?? "",
178
171
  };
179
172
 
180
- const GridItem = React.forwardRef<HTMLDivElement, GridItemProps>(
181
- function GridItem(
182
- {
183
- children,
184
- colSpan,
185
- rowSpan,
186
- alignSelf,
187
- subgrid,
188
- className,
189
- style,
190
- ...htmlProps
191
- },
192
- ref
193
- ) {
194
- const subgridClass = subgrid
195
- ? subgridClasses[subgrid === true ? 'rows' : subgrid]
196
- : undefined;
197
-
198
- const classes = [
199
- styles.item,
200
- colSpan && (colSpan === 'full' ? styles.colSpanFull : styles[`colSpan${colSpan}`]),
201
- rowSpan && styles[`rowSpan${rowSpan}`],
202
- alignSelf && styles[`selfAlign${cap(alignSelf)}`],
203
- subgridClass,
204
- className,
205
- ]
206
- .filter(Boolean)
207
- .join(' ');
208
-
209
- return (
210
- <div {...htmlProps} ref={ref} className={classes} style={style}>
211
- {children}
212
- </div>
213
- );
214
- }
215
- );
173
+ const GridItem = React.forwardRef<HTMLDivElement, GridItemProps>(function GridItem(
174
+ { children, colSpan, rowSpan, alignSelf, subgrid, className, style, ...htmlProps },
175
+ ref
176
+ ) {
177
+ const subgridClass = subgrid ? subgridClasses[subgrid === true ? "rows" : subgrid] : undefined;
178
+
179
+ const classes = [
180
+ styles.item,
181
+ colSpan && (colSpan === "full" ? styles.colSpanFull : styles[`colSpan${colSpan}`]),
182
+ rowSpan && styles[`rowSpan${rowSpan}`],
183
+ alignSelf && styles[`selfAlign${cap(alignSelf)}`],
184
+ subgridClass,
185
+ className,
186
+ ]
187
+ .filter(Boolean)
188
+ .join(" ");
189
+
190
+ return (
191
+ <div {...htmlProps} ref={ref} className={classes} style={style}>
192
+ {children}
193
+ </div>
194
+ );
195
+ });
216
196
 
217
197
  // ============================================
218
198
  // Utilities
@@ -226,8 +206,9 @@ function cap(s: string): string {
226
206
  // Compound component type
227
207
  // ============================================
228
208
 
229
- interface GridComponent
230
- extends React.ForwardRefExoticComponent<GridProps & React.RefAttributes<HTMLDivElement>> {
209
+ interface GridComponent extends React.ForwardRefExoticComponent<
210
+ GridProps & React.RefAttributes<HTMLDivElement>
211
+ > {
231
212
  Item: typeof GridItem;
232
213
  }
233
214
 
@@ -1,16 +1,9 @@
1
1
  {
2
2
  "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
3
  "name": "Header",
4
- "description": "Composable header with slots for brand, navigation, search, and actions. Supports dropdown nav groups via Header.NavMenu. Designed for use within AppShell with responsive mobile support.",
5
- "category": "navigation",
6
- "tags": [
7
- "header",
8
- "navigation",
9
- "navbar",
10
- "brand",
11
- "layout",
12
- "dropdown"
13
- ],
4
+ "description": "Composes brand, navigation, search, and actions into one responsive app bar.",
5
+ "category": "layout",
6
+ "tags": ["header", "navigation", "navbar", "brand", "layout", "dropdown"],
14
7
  "status": "stable",
15
8
  "sourcePath": "src/components/Header/index.tsx",
16
9
  "exportName": "Header",
@@ -41,11 +34,7 @@
41
34
  "description": "Position behavior (usually controlled by AppShell)",
42
35
  "default": "static",
43
36
  "required": false,
44
- "values": [
45
- "static",
46
- "fixed",
47
- "sticky"
48
- ]
37
+ "values": ["static", "fixed", "sticky"]
49
38
  },
50
39
  "elevatedOnScroll": {
51
40
  "type": "boolean|object",
@@ -80,37 +69,22 @@
80
69
  },
81
70
  "usage": {
82
71
  "when": [
83
- "Primary site or app header inside AppShell",
84
- "Navigation bar with branding (default layout)",
85
- "Search and actions bar (sidebar layout)",
86
- "Header with responsive mobile menu trigger",
87
- "Grouping related nav items under a dropdown menu"
72
+ "Top-level navigation for an app or site",
73
+ "Inside AppShell.Header",
74
+ "Anywhere brand, nav, and actions share one row"
88
75
  ],
89
76
  "whenNot": [
90
- "Simple page titles (use heading elements)",
91
- "Footer navigation (use Footer component)",
92
- "Standalone sidebar navigation (use Sidebar directly)"
77
+ "Section headings inside a page (use a heading)",
78
+ "Toolbars scoped to one panel (use Toolbar)",
79
+ "Sidebar-only navigation (use Sidebar)"
93
80
  ],
94
81
  "guidelines": [
95
- "Use Header.SkipLink for accessibility (skip to main content)",
96
- "In default layout: include Header.Brand for logo",
97
- "In sidebar layout: omit Header.Brand (logo in sidebar)",
98
- "Header.Trigger integrates with SidebarProvider for mobile menus",
99
- "Header.Trigger composes your onClick handler with sidebar toggle behavior",
100
- "Header.Nav is hidden on mobile; use sidebar for mobile navigation",
101
- "Use Header.Spacer to push items apart",
102
- "Use Header.NavMenu to group related nav items under a dropdown",
103
- "Use Header.NavMenuItem inside Header.NavMenu for dropdown items",
104
- "Header sub-components forward DOM props (id, aria-*, data-*, handlers) to their rendered elements",
105
- "Header.Brand asChild composes custom link components while preserving canonical brand styling",
106
- "Header.NavItem asChild composes click handlers instead of overwriting the child handler",
107
- "Use elevatedOnScroll on sticky marketing headers that need a boundary after scrolling",
108
- "Use navAlign=\"center\" when navigation must stay centered independently of brand and actions",
109
- "Use container=\"page\" when the header should share a bounded page gutter",
110
- "Use Header.MobileNavActions for the primary action row inside Header.MobileNav",
111
- "Use the Header icons prop to replace internal mobile trigger and dropdown chevron icons with any icon package",
112
- "For rich dropdown content (titles, descriptions, icons), use NavigationMenu instead of Header.Nav",
113
- "NavigationMenu also provides an automatic mobile drawer, replacing Header.Trigger + Sidebar for mobile nav"
82
+ "Header.Spacer pushes the actions cluster to the right",
83
+ "Omit Header.Brand when the sidebar already shows the logo",
84
+ "container=\"page\" caps the content at page width for marketing bars",
85
+ "elevatedOnScroll adds a bottom border once the page scrolls",
86
+ "Pair Header.Trigger with Header.MobileNav for small screens",
87
+ "Header.SkipLink should be the first child"
114
88
  ],
115
89
  "accessibility": [
116
90
  "Include Header.SkipLink for keyboard users",
@@ -123,43 +97,38 @@
123
97
  "examples": [
124
98
  {
125
99
  "name": "For Default Layout",
126
- "description": "Header with brand, nav, and actions. Use with AppShell layout=\"default\".",
127
- "code": "<ThemeProvider defaultMode=\"light\">\n <Header>\n <Header.SkipLink />\n <Header.Trigger />\n <Header.Brand href=\"/\">MyApp</Header.Brand>\n <Header.Nav>\n <Header.NavItem href=\"/dashboard\" active>Dashboard</Header.NavItem>\n <Header.NavItem href=\"/projects\">Projects</Header.NavItem>\n <Header.NavItem href=\"/settings\">Settings</Header.NavItem>\n </Header.Nav>\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"md\" />\n <Button variant=\"secondary\" size=\"sm\">Sign In</Button>\n </Header.Actions>\n </Header>\n</ThemeProvider>"
100
+ "description": "Brand, nav, and actions for AppShell layout=\"default\".",
101
+ "code": "import { Box } from '@/components/Box';\nimport { Button } from '@/components/Button';\nimport { Header } from '@/components/Header';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box width=\"100%\" border rounded=\"md\" overflow=\"hidden\">\n <Header>\n <Header.SkipLink />\n <Header.Trigger />\n <Header.Brand href=\"/\">MyApp</Header.Brand>\n <Header.Nav>\n <Header.NavItem href=\"/dashboard\" active>Dashboard</Header.NavItem>\n <Header.NavItem href=\"/projects\">Projects</Header.NavItem>\n <Header.NavItem href=\"/settings\">Settings</Header.NavItem>\n </Header.Nav>\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"md\" />\n <Button variant=\"secondary\" size=\"sm\">Sign In</Button>\n </Header.Actions>\n </Header>\n</Box>"
128
102
  },
129
103
  {
130
104
  "name": "Marketing Header",
131
- "description": "Sticky, page-width marketing header with centered navigation, scroll elevation, custom link composition, and mobile actions.",
132
- "code": "<Header position=\"sticky\" elevatedOnScroll navAlign=\"center\" container=\"page\">\n <Header.SkipLink href=\"#main-content\" />\n <Header.Brand asChild>\n <a href=\"/\" aria-label=\"Home\">Logo</a>\n </Header.Brand>\n <Header.Nav aria-label=\"Main navigation\">\n <Header.NavItem href=\"/docs\">Docs</Header.NavItem>\n </Header.Nav>\n <Header.Actions>\n <Button size=\"sm\">Start free</Button>\n </Header.Actions>\n <Header.Trigger />\n <Header.MobileNav>\n <Header.MobileNavLink href=\"/docs\">Docs</Header.MobileNavLink>\n <Header.MobileNavActions>\n <Button size=\"sm\">Start free</Button>\n </Header.MobileNavActions>\n </Header.MobileNav>\n</Header>"
105
+ "description": "Sticky page-width bar that gains a border on scroll, with a mobile drawer.",
106
+ "code": "import { Box } from '@/components/Box';\nimport { Button } from '@/components/Button';\nimport { Header } from '@/components/Header';\n\n<Box width=\"100%\" border rounded=\"md\" overflow=\"hidden\">\n <Header position=\"sticky\" elevatedOnScroll navAlign=\"center\" container=\"page\">\n <Header.SkipLink href=\"#main-content\" />\n <Header.Brand asChild>\n <a href=\"/\" aria-label=\"Home\">Logo</a>\n </Header.Brand>\n <Header.Nav aria-label=\"Main navigation\">\n <Header.NavItem href=\"/docs\">Docs</Header.NavItem>\n <Header.NavItem href=\"/pricing\">Pricing</Header.NavItem>\n </Header.Nav>\n <Header.Actions>\n <Button size=\"sm\">Start free</Button>\n </Header.Actions>\n <Header.Trigger />\n <Header.MobileNav>\n <Header.MobileNavLink href=\"/docs\">Docs</Header.MobileNavLink>\n <Header.MobileNavLink href=\"/pricing\">Pricing</Header.MobileNavLink>\n <Header.MobileNavActions>\n <Button size=\"sm\">Start free</Button>\n </Header.MobileNavActions>\n </Header.MobileNav>\n </Header>\n</Box>"
133
107
  },
134
108
  {
135
109
  "name": "With Dropdown Nav",
136
- "description": "Header with a dropdown menu grouping related navigation links.",
137
- "code": "<ThemeProvider defaultMode=\"light\">\n <Header>\n <Header.Brand href=\"/\">MyApp</Header.Brand>\n <Header.Nav>\n <Header.NavItem href=\"/components\" active>Components</Header.NavItem>\n <Header.NavItem href=\"/blocks\">Blocks</Header.NavItem>\n <Header.NavMenu label=\"Docs\">\n <Header.NavMenuItem href=\"/getting-started\">Getting Started</Header.NavMenuItem>\n <Header.NavMenuItem href=\"/cli\">CLI Reference</Header.NavMenuItem>\n <Header.NavMenuItem href=\"/mcp\">MCP Tools</Header.NavMenuItem>\n </Header.NavMenu>\n <Header.NavItem href=\"/blog\">Blog</Header.NavItem>\n </Header.Nav>\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"md\" />\n </Header.Actions>\n </Header>\n</ThemeProvider>"
110
+ "description": "Header.NavMenu groups related links behind one trigger.",
111
+ "code": "import { Box } from '@/components/Box';\nimport { Header } from '@/components/Header';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box width=\"100%\" border rounded=\"md\" overflow=\"hidden\">\n <Header>\n <Header.Brand href=\"/\">MyApp</Header.Brand>\n <Header.Nav>\n <Header.NavItem href=\"/components\" active>Components</Header.NavItem>\n <Header.NavItem href=\"/blocks\">Blocks</Header.NavItem>\n <Header.NavMenu label=\"Docs\">\n <Header.NavMenuItem href=\"/getting-started\">Getting Started</Header.NavMenuItem>\n <Header.NavMenuItem href=\"/cli\">CLI Reference</Header.NavMenuItem>\n <Header.NavMenuItem href=\"/mcp\">MCP Tools</Header.NavMenuItem>\n </Header.NavMenu>\n <Header.NavItem href=\"/blog\">Blog</Header.NavItem>\n </Header.Nav>\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"md\" />\n </Header.Actions>\n </Header>\n</Box>"
138
112
  },
139
113
  {
140
114
  "name": "For Sidebar Layout",
141
- "description": "Header without brand (logo is in sidebar). Use with AppShell layout=\"sidebar\" or \"sidebar-floating\".",
142
- "code": "<ThemeProvider defaultMode=\"light\">\n <Header>\n <Header.SkipLink />\n <Header.Trigger />\n <Header.Search>\n <Input placeholder=\"Search...\" style={{ width: '240px' }} />\n </Header.Search>\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"md\" />\n </Header.Actions>\n </Header>\n</ThemeProvider>"
115
+ "description": "No brand — the logo lives in the sidebar instead.",
116
+ "code": "import { Box } from '@/components/Box';\nimport { Header } from '@/components/Header';\nimport { Input } from '@/components/Input';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box width=\"100%\" border rounded=\"md\" overflow=\"hidden\">\n <Header>\n <Header.SkipLink />\n <Header.Trigger />\n <Header.Search>\n <Input placeholder=\"Search...\" style={{ width: '240px' }} />\n </Header.Search>\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"md\" />\n </Header.Actions>\n </Header>\n</Box>"
143
117
  },
144
118
  {
145
119
  "name": "Minimal",
146
- "description": "Clean header with just trigger and actions",
147
- "code": "<ThemeProvider defaultMode=\"light\">\n <Header>\n <Header.Trigger />\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"md\" />\n </Header.Actions>\n </Header>\n</ThemeProvider>"
148
- },
149
- {
150
- "name": "With Search",
151
- "description": "Header featuring a prominent search input",
152
- "code": "<ThemeProvider defaultMode=\"light\">\n <Header>\n <Header.Brand>Docs</Header.Brand>\n <Header.Search>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n background: 'var(--fui-bg-secondary)',\n borderRadius: '6px',\n color: 'var(--fui-text-tertiary)',\n fontSize: '14px',\n width: '280px'\n }}>\n <MagnifyingGlass size={16} /> Search documentation...\n </div>\n </Header.Search>\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"md\" />\n </Header.Actions>\n </Header>\n</ThemeProvider>"
120
+ "description": "Just the drawer trigger and actions.",
121
+ "code": "import { Box } from '@/components/Box';\nimport { Header } from '@/components/Header';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box width=\"100%\" border rounded=\"md\" overflow=\"hidden\">\n <Header>\n <Header.Trigger />\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"md\" />\n </Header.Actions>\n </Header>\n</Box>"
153
122
  },
154
123
  {
155
124
  "name": "With Skip Link",
156
- "description": "Accessible header with skip link for keyboard navigation",
157
- "code": "<Header>\n <Header.SkipLink href=\"#main-content\">Skip to content</Header.SkipLink>\n <Header.Brand>Accessible App</Header.Brand>\n <Header.Nav>\n <Header.NavItem href=\"/\" active>Home</Header.NavItem>\n <Header.NavItem href=\"/about\">About</Header.NavItem>\n </Header.Nav>\n</Header>"
125
+ "description": "Header.SkipLink gives keyboard users a jump to main content.",
126
+ "code": "import { Box } from '@/components/Box';\nimport { Header } from '@/components/Header';\n\n<Box width=\"100%\" border rounded=\"md\" overflow=\"hidden\">\n <Header>\n <Header.SkipLink href=\"#main-content\">Skip to content</Header.SkipLink>\n <Header.Brand>Accessible App</Header.Brand>\n <Header.Nav>\n <Header.NavItem href=\"/\" active>Home</Header.NavItem>\n <Header.NavItem href=\"/about\">About</Header.NavItem>\n </Header.Nav>\n </Header>\n</Box>"
158
127
  },
159
128
  {
160
129
  "name": "With NavigationMenu",
161
- "description": "Header using NavigationMenu for rich dropdown content panels with titles, descriptions, and automatic mobile drawer.",
162
- "code": "<ThemeProvider defaultMode=\"light\">\n <Header>\n <Header.Brand href=\"/\">MyApp</Header.Brand>\n <NavigationMenu aria-label=\"Site navigation\">\n <NavigationMenu.List>\n <NavigationMenu.Item value=\"products\">\n <NavigationMenu.Trigger>Products</NavigationMenu.Trigger>\n <NavigationMenu.Content>\n <div style={{ display: 'flex', flexDirection: 'column', padding: '4px', minWidth: '200px' }}>\n <NavigationMenu.Link href=\"/analytics\" title=\"Analytics\" description=\"Track your metrics.\" />\n <NavigationMenu.Link href=\"/automation\" title=\"Automation\" description=\"Automate workflows.\" />\n </div>\n </NavigationMenu.Content>\n </NavigationMenu.Item>\n <NavigationMenu.Item>\n <NavigationMenu.Link href=\"/pricing\">Pricing</NavigationMenu.Link>\n </NavigationMenu.Item>\n </NavigationMenu.List>\n <NavigationMenu.Viewport />\n </NavigationMenu>\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"md\" />\n <Button variant=\"primary\" size=\"sm\">Sign Up</Button>\n </Header.Actions>\n </Header>\n</ThemeProvider>"
130
+ "description": "Rich dropdown panels with titles and descriptions.",
131
+ "code": "import { Box } from '@/components/Box';\nimport { Button } from '@/components/Button';\nimport { Header } from '@/components/Header';\nimport { NavigationMenu } from '@/components/NavigationMenu';\nimport { Stack } from '@/components/Stack';\nimport { ThemeToggle } from '@/components/Theme';\n\n<Box width=\"100%\" border rounded=\"md\" overflow=\"hidden\">\n <Header>\n <Header.Brand href=\"/\">MyApp</Header.Brand>\n <Header.Nav>\n <NavigationMenu aria-label=\"Site navigation\">\n <NavigationMenu.List>\n <NavigationMenu.Item value=\"products\">\n <NavigationMenu.Trigger>Products</NavigationMenu.Trigger>\n <NavigationMenu.Content>\n <Box padding=\"xs\" style={{ minWidth: '200px' }}>\n <Stack gap=\"none\">\n <NavigationMenu.Link href=\"/analytics\" title=\"Analytics\" description=\"Track your metrics.\" />\n <NavigationMenu.Link href=\"/automation\" title=\"Automation\" description=\"Automate workflows.\" />\n </Stack>\n </Box>\n </NavigationMenu.Content>\n </NavigationMenu.Item>\n <NavigationMenu.Item>\n <NavigationMenu.Link href=\"/pricing\">Pricing</NavigationMenu.Link>\n </NavigationMenu.Item>\n </NavigationMenu.List>\n <NavigationMenu.Viewport />\n </NavigationMenu>\n </Header.Nav>\n <Header.Spacer />\n <Header.Actions>\n <ThemeToggle size=\"md\" />\n <Button variant=\"primary\" size=\"sm\">Sign Up</Button>\n </Header.Actions>\n </Header>\n</Box>"
163
132
  }
164
133
  ],
165
134
  "relations": [
@@ -197,12 +166,7 @@
197
166
  "Header.NavMenu provides dropdown groups via Base UI Menu",
198
167
  "Header.MobileNavActions provides an action row inside the mobile drawer"
199
168
  ],
200
- "a11yRules": [
201
- "A11Y_HEADER_LANDMARK",
202
- "A11Y_NAV_LABEL",
203
- "A11Y_SKIP_LINK",
204
- "A11Y_BUTTON_LABEL"
205
- ]
169
+ "a11yRules": ["A11Y_HEADER_LANDMARK", "A11Y_NAV_LABEL", "A11Y_SKIP_LINK", "A11Y_BUTTON_LABEL"]
206
170
  },
207
171
  "ai": {
208
172
  "compositionPattern": "compound",