@usefragments/ui 1.6.0 → 2.0.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 (685) hide show
  1. package/README.md +54 -66
  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/nav-glyph.cjs +139 -0
  6. package/dist/assets/nav-glyph.d.ts +28 -0
  7. package/dist/assets/nav-glyph.d.ts.map +1 -0
  8. package/dist/assets/nav-glyph.js +139 -0
  9. package/dist/assets/nav-glyph.module.scss.cjs +71 -0
  10. package/dist/assets/nav-glyph.module.scss.js +71 -0
  11. package/dist/assets/ui.css +6885 -6308
  12. package/dist/blocks/components/StatsCard.d.ts +1 -1
  13. package/dist/blocks/components/StatsCard.d.ts.map +1 -1
  14. package/dist/chart.cjs +24 -6
  15. package/dist/chart.js +24 -6
  16. package/dist/codeblock.cjs +76 -43
  17. package/dist/codeblock.js +71 -38
  18. package/dist/colorpicker.cjs +4 -1
  19. package/dist/colorpicker.js +4 -1
  20. package/dist/components/Accordion/Accordion.module.scss.cjs +8 -8
  21. package/dist/components/Accordion/Accordion.module.scss.js +8 -8
  22. package/dist/components/Alert/Alert.module.scss.cjs +23 -20
  23. package/dist/components/Alert/Alert.module.scss.js +23 -20
  24. package/dist/components/Alert/index.cjs +20 -8
  25. package/dist/components/Alert/index.d.ts +17 -11
  26. package/dist/components/Alert/index.d.ts.map +1 -1
  27. package/dist/components/Alert/index.js +20 -8
  28. package/dist/components/AppShell/AppShell.module.scss.cjs +14 -14
  29. package/dist/components/AppShell/AppShell.module.scss.js +14 -14
  30. package/dist/components/AppShell/index.cjs +2 -2
  31. package/dist/components/AppShell/index.js +2 -2
  32. package/dist/components/Avatar/Avatar.module.scss.cjs +14 -14
  33. package/dist/components/Avatar/Avatar.module.scss.js +14 -14
  34. package/dist/components/Badge/Badge.module.scss.cjs +33 -31
  35. package/dist/components/Badge/Badge.module.scss.js +33 -31
  36. package/dist/components/Badge/index.cjs +13 -3
  37. package/dist/components/Badge/index.d.ts +18 -13
  38. package/dist/components/Badge/index.d.ts.map +1 -1
  39. package/dist/components/Badge/index.js +13 -3
  40. package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +14 -14
  41. package/dist/components/BentoGrid/BentoGrid.module.scss.js +14 -14
  42. package/dist/components/Box/Box.module.scss.cjs +152 -152
  43. package/dist/components/Box/Box.module.scss.js +152 -152
  44. package/dist/components/Box/index.cjs +64 -75
  45. package/dist/components/Box/index.d.ts +16 -16
  46. package/dist/components/Box/index.d.ts.map +1 -1
  47. package/dist/components/Box/index.js +64 -75
  48. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.cjs +11 -8
  49. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +11 -8
  50. package/dist/components/Breadcrumbs/index.cjs +1 -1
  51. package/dist/components/Breadcrumbs/index.d.ts.map +1 -1
  52. package/dist/components/Breadcrumbs/index.js +1 -1
  53. package/dist/components/Button/Button.module.scss.cjs +36 -27
  54. package/dist/components/Button/Button.module.scss.js +36 -27
  55. package/dist/components/Button/index.cjs +20 -4
  56. package/dist/components/Button/index.d.ts +18 -10
  57. package/dist/components/Button/index.d.ts.map +1 -1
  58. package/dist/components/Button/index.js +20 -4
  59. package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs +15 -15
  60. package/dist/components/ButtonGroup/ButtonGroup.module.scss.js +15 -15
  61. package/dist/components/Card/Card.module.scss.cjs +31 -26
  62. package/dist/components/Card/Card.module.scss.js +32 -27
  63. package/dist/components/Card/index.cjs +16 -3
  64. package/dist/components/Card/index.d.ts +23 -15
  65. package/dist/components/Card/index.d.ts.map +1 -1
  66. package/dist/components/Card/index.js +16 -3
  67. package/dist/components/Chart/Chart.module.scss.cjs +15 -15
  68. package/dist/components/Chart/Chart.module.scss.js +15 -15
  69. package/dist/components/Chart/index.d.ts.map +1 -1
  70. package/dist/components/Checkbox/Checkbox.module.scss.cjs +11 -11
  71. package/dist/components/Checkbox/Checkbox.module.scss.js +11 -11
  72. package/dist/components/Checkbox/index.cjs +4 -4
  73. package/dist/components/Checkbox/index.d.ts +4 -6
  74. package/dist/components/Checkbox/index.d.ts.map +1 -1
  75. package/dist/components/Checkbox/index.js +4 -4
  76. package/dist/components/Chip/Chip.module.scss.cjs +19 -19
  77. package/dist/components/Chip/Chip.module.scss.js +19 -19
  78. package/dist/components/Chip/index.cjs +3 -3
  79. package/dist/components/Chip/index.d.ts +8 -3
  80. package/dist/components/Chip/index.d.ts.map +1 -1
  81. package/dist/components/Chip/index.js +3 -3
  82. package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +26 -23
  83. package/dist/components/CodeBlock/CodeBlock.module.scss.js +26 -23
  84. package/dist/components/CodeBlock/css-variables-theme.cjs +98 -0
  85. package/dist/components/CodeBlock/css-variables-theme.d.ts +27 -0
  86. package/dist/components/CodeBlock/css-variables-theme.d.ts.map +1 -0
  87. package/dist/components/CodeBlock/css-variables-theme.js +98 -0
  88. package/dist/components/CodeBlock/index.d.ts +20 -5
  89. package/dist/components/CodeBlock/index.d.ts.map +1 -1
  90. package/dist/components/Collapsible/Collapsible.module.scss.cjs +9 -9
  91. package/dist/components/Collapsible/Collapsible.module.scss.js +9 -9
  92. package/dist/components/ColorPicker/ColorPicker.module.scss.cjs +14 -14
  93. package/dist/components/ColorPicker/ColorPicker.module.scss.js +14 -14
  94. package/dist/components/ColorPicker/index.d.ts.map +1 -1
  95. package/dist/components/Combobox/Combobox.module.scss.cjs +21 -21
  96. package/dist/components/Combobox/Combobox.module.scss.js +21 -21
  97. package/dist/components/Combobox/index.cjs +26 -6
  98. package/dist/components/Combobox/index.d.ts.map +1 -1
  99. package/dist/components/Combobox/index.js +26 -6
  100. package/dist/components/Command/Command.module.scss.cjs +14 -11
  101. package/dist/components/Command/Command.module.scss.js +14 -11
  102. package/dist/components/Command/index.cjs +28 -16
  103. package/dist/components/Command/index.d.ts +8 -3
  104. package/dist/components/Command/index.d.ts.map +1 -1
  105. package/dist/components/Command/index.js +28 -16
  106. package/dist/components/ConversationList/ConversationList.module.scss.cjs +10 -10
  107. package/dist/components/ConversationList/ConversationList.module.scss.js +10 -10
  108. package/dist/components/ConversationList/index.cjs +2 -2
  109. package/dist/components/ConversationList/index.js +2 -2
  110. package/dist/components/DataTable/DataTable.icons.cjs +6 -33
  111. package/dist/components/DataTable/DataTable.icons.d.ts.map +1 -1
  112. package/dist/components/DataTable/DataTable.icons.js +6 -33
  113. package/dist/components/DataTable/DataTable.module.scss.cjs +31 -28
  114. package/dist/components/DataTable/DataTable.module.scss.js +31 -28
  115. package/dist/components/DataTable/DataTable.virtual.d.ts.map +1 -1
  116. package/dist/components/DataTable/index.d.ts.map +1 -1
  117. package/dist/components/DatePicker/DatePicker.module.scss.cjs +33 -33
  118. package/dist/components/DatePicker/DatePicker.module.scss.js +33 -33
  119. package/dist/components/DatePicker/index.d.ts.map +1 -1
  120. package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
  121. package/dist/components/Dialog/Dialog.module.scss.js +14 -14
  122. package/dist/components/Dialog/index.cjs +13 -16
  123. package/dist/components/Dialog/index.d.ts +11 -10
  124. package/dist/components/Dialog/index.d.ts.map +1 -1
  125. package/dist/components/Dialog/index.js +13 -16
  126. package/dist/components/Drawer/Drawer.module.scss.cjs +39 -39
  127. package/dist/components/Drawer/Drawer.module.scss.js +40 -40
  128. package/dist/components/Drawer/index.cjs +2 -2
  129. package/dist/components/Drawer/index.d.ts +5 -4
  130. package/dist/components/Drawer/index.d.ts.map +1 -1
  131. package/dist/components/Drawer/index.js +2 -2
  132. package/dist/components/Editor/Editor.module.scss.cjs +17 -17
  133. package/dist/components/Editor/Editor.module.scss.js +17 -17
  134. package/dist/components/Editor/index.d.ts +10 -10
  135. package/dist/components/Editor/index.d.ts.map +1 -1
  136. package/dist/components/EmptyState/EmptyState.module.scss.cjs +11 -8
  137. package/dist/components/EmptyState/EmptyState.module.scss.js +11 -8
  138. package/dist/components/EmptyState/index.cjs +13 -6
  139. package/dist/components/EmptyState/index.d.ts +13 -5
  140. package/dist/components/EmptyState/index.d.ts.map +1 -1
  141. package/dist/components/EmptyState/index.js +13 -6
  142. package/dist/components/Field/Field.module.scss.cjs +5 -5
  143. package/dist/components/Field/Field.module.scss.js +5 -5
  144. package/dist/components/Field/index.cjs +9 -1
  145. package/dist/components/Field/index.d.ts.map +1 -1
  146. package/dist/components/Field/index.js +9 -1
  147. package/dist/components/Fieldset/Fieldset.module.scss.cjs +3 -3
  148. package/dist/components/Fieldset/Fieldset.module.scss.js +3 -3
  149. package/dist/components/Grid/Grid.module.scss.cjs +54 -54
  150. package/dist/components/Grid/Grid.module.scss.js +54 -54
  151. package/dist/components/Grid/index.cjs +1 -1
  152. package/dist/components/Grid/index.js +1 -1
  153. package/dist/components/Header/Header.module.scss.cjs +33 -33
  154. package/dist/components/Header/Header.module.scss.js +33 -33
  155. package/dist/components/Header/index.cjs +17 -38
  156. package/dist/components/Header/index.d.ts +15 -11
  157. package/dist/components/Header/index.d.ts.map +1 -1
  158. package/dist/components/Header/index.js +17 -38
  159. package/dist/components/Icon/Icon.module.scss.cjs +30 -33
  160. package/dist/components/Icon/Icon.module.scss.js +30 -33
  161. package/dist/components/Icon/index.cjs +15 -14
  162. package/dist/components/Icon/index.d.ts +23 -12
  163. package/dist/components/Icon/index.d.ts.map +1 -1
  164. package/dist/components/Icon/index.js +15 -14
  165. package/dist/components/IconButton/IconButton.module.scss.cjs +12 -12
  166. package/dist/components/IconButton/IconButton.module.scss.js +12 -12
  167. package/dist/components/IconButton/index.cjs +2 -1
  168. package/dist/components/IconButton/index.d.ts +4 -4
  169. package/dist/components/IconButton/index.d.ts.map +1 -1
  170. package/dist/components/IconButton/index.js +2 -1
  171. package/dist/components/Image/Image.module.scss.cjs +27 -27
  172. package/dist/components/Image/Image.module.scss.js +27 -27
  173. package/dist/components/Input/Input.module.scss.cjs +15 -21
  174. package/dist/components/Input/Input.module.scss.js +15 -21
  175. package/dist/components/Input/index.cjs +2 -14
  176. package/dist/components/Input/index.d.ts +0 -2
  177. package/dist/components/Input/index.d.ts.map +1 -1
  178. package/dist/components/Input/index.js +2 -14
  179. package/dist/components/Link/Link.module.scss.cjs +26 -14
  180. package/dist/components/Link/Link.module.scss.js +26 -14
  181. package/dist/components/Link/index.cjs +13 -2
  182. package/dist/components/Link/index.d.ts +11 -4
  183. package/dist/components/Link/index.d.ts.map +1 -1
  184. package/dist/components/Link/index.js +13 -2
  185. package/dist/components/List/List.module.scss.cjs +23 -19
  186. package/dist/components/List/List.module.scss.js +23 -19
  187. package/dist/components/List/index.cjs +7 -7
  188. package/dist/components/List/index.d.ts +10 -7
  189. package/dist/components/List/index.d.ts.map +1 -1
  190. package/dist/components/List/index.js +7 -7
  191. package/dist/components/Listbox/Listbox.module.scss.cjs +8 -8
  192. package/dist/components/Listbox/Listbox.module.scss.js +8 -8
  193. package/dist/components/Loading/Loading.module.scss.cjs +34 -34
  194. package/dist/components/Loading/Loading.module.scss.js +34 -34
  195. package/dist/components/Loading/index.cjs +5 -5
  196. package/dist/components/Loading/index.d.ts +8 -7
  197. package/dist/components/Loading/index.d.ts.map +1 -1
  198. package/dist/components/Loading/index.js +5 -5
  199. package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
  200. package/dist/components/Markdown/Markdown.module.scss.js +1 -1
  201. package/dist/components/Markdown/index.d.ts +2 -2
  202. package/dist/components/Markdown/index.d.ts.map +1 -1
  203. package/dist/components/Menu/Menu.module.scss.cjs +14 -14
  204. package/dist/components/Menu/Menu.module.scss.js +14 -14
  205. package/dist/components/Message/Message.module.scss.cjs +20 -20
  206. package/dist/components/Message/Message.module.scss.js +20 -20
  207. package/dist/components/Message/index.cjs +1 -1
  208. package/dist/components/Message/index.d.ts +1 -1
  209. package/dist/components/Message/index.js +1 -1
  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 +10 -10
  217. package/dist/components/Pagination/Pagination.module.scss.js +10 -10
  218. package/dist/components/Popover/Popover.module.scss.cjs +10 -10
  219. package/dist/components/Popover/Popover.module.scss.js +10 -10
  220. package/dist/components/Progress/Progress.module.scss.cjs +28 -25
  221. package/dist/components/Progress/Progress.module.scss.js +28 -25
  222. package/dist/components/Progress/index.cjs +21 -12
  223. package/dist/components/Progress/index.d.ts +10 -6
  224. package/dist/components/Progress/index.d.ts.map +1 -1
  225. package/dist/components/Progress/index.js +21 -12
  226. package/dist/components/Prompt/Prompt.module.scss.cjs +30 -30
  227. package/dist/components/Prompt/Prompt.module.scss.js +30 -30
  228. package/dist/components/Prompt/index.cjs +7 -7
  229. package/dist/components/Prompt/index.d.ts +11 -9
  230. package/dist/components/Prompt/index.d.ts.map +1 -1
  231. package/dist/components/Prompt/index.js +7 -7
  232. package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +20 -17
  233. package/dist/components/RadioGroup/RadioGroup.module.scss.js +20 -17
  234. package/dist/components/RadioGroup/index.cjs +10 -5
  235. package/dist/components/RadioGroup/index.d.ts +11 -7
  236. package/dist/components/RadioGroup/index.d.ts.map +1 -1
  237. package/dist/components/RadioGroup/index.js +10 -5
  238. package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +5 -5
  239. package/dist/components/ScrollArea/ScrollArea.module.scss.js +5 -5
  240. package/dist/components/ScrollArea/index.d.ts +4 -4
  241. package/dist/components/ScrollArea/index.d.ts.map +1 -1
  242. package/dist/components/ScrollArea/scroll-state.d.ts +5 -5
  243. package/dist/components/Select/Select.module.scss.cjs +21 -21
  244. package/dist/components/Select/Select.module.scss.js +21 -21
  245. package/dist/components/Select/index.cjs +26 -20
  246. package/dist/components/Select/index.d.ts +5 -5
  247. package/dist/components/Select/index.d.ts.map +1 -1
  248. package/dist/components/Select/index.js +26 -20
  249. package/dist/components/Separator/Separator.module.scss.cjs +25 -19
  250. package/dist/components/Separator/Separator.module.scss.js +25 -19
  251. package/dist/components/Separator/index.cjs +10 -8
  252. package/dist/components/Separator/index.d.ts +4 -2
  253. package/dist/components/Separator/index.d.ts.map +1 -1
  254. package/dist/components/Separator/index.js +10 -8
  255. package/dist/components/Sidebar/Sidebar.module.scss.cjs +43 -43
  256. package/dist/components/Sidebar/Sidebar.module.scss.js +43 -43
  257. package/dist/components/Sidebar/index.cjs +15 -38
  258. package/dist/components/Sidebar/index.d.ts +19 -19
  259. package/dist/components/Sidebar/index.d.ts.map +1 -1
  260. package/dist/components/Sidebar/index.js +15 -38
  261. package/dist/components/Skeleton/Skeleton.module.scss.cjs +50 -46
  262. package/dist/components/Skeleton/Skeleton.module.scss.js +50 -46
  263. package/dist/components/Skeleton/index.cjs +7 -7
  264. package/dist/components/Skeleton/index.d.ts +8 -7
  265. package/dist/components/Skeleton/index.d.ts.map +1 -1
  266. package/dist/components/Skeleton/index.js +7 -7
  267. package/dist/components/Slider/Slider.module.scss.cjs +12 -12
  268. package/dist/components/Slider/Slider.module.scss.js +12 -12
  269. package/dist/components/Stack/Stack.module.scss.cjs +25 -25
  270. package/dist/components/Stack/Stack.module.scss.js +25 -25
  271. package/dist/components/Stack/index.cjs +1 -1
  272. package/dist/components/Stack/index.js +1 -1
  273. package/dist/components/Switch/Switch.module.scss.cjs +9 -9
  274. package/dist/components/Switch/Switch.module.scss.js +9 -9
  275. package/dist/components/Table/Table.module.scss.cjs +19 -19
  276. package/dist/components/Table/Table.module.scss.js +19 -19
  277. package/dist/components/TableOfContents/TableOfContents.module.scss.cjs +15 -15
  278. package/dist/components/TableOfContents/TableOfContents.module.scss.js +15 -15
  279. package/dist/components/TableOfContents/index.cjs +14 -10
  280. package/dist/components/TableOfContents/index.d.ts +5 -3
  281. package/dist/components/TableOfContents/index.d.ts.map +1 -1
  282. package/dist/components/TableOfContents/index.js +14 -10
  283. package/dist/components/Tabs/Tabs.module.scss.cjs +18 -18
  284. package/dist/components/Tabs/Tabs.module.scss.js +18 -18
  285. package/dist/components/Tabs/index.cjs +30 -11
  286. package/dist/components/Tabs/index.d.ts +8 -6
  287. package/dist/components/Tabs/index.d.ts.map +1 -1
  288. package/dist/components/Tabs/index.js +30 -11
  289. package/dist/components/Text/Text.module.scss.cjs +109 -97
  290. package/dist/components/Text/Text.module.scss.js +109 -97
  291. package/dist/components/Text/index.cjs +45 -41
  292. package/dist/components/Text/index.d.ts +24 -19
  293. package/dist/components/Text/index.d.ts.map +1 -1
  294. package/dist/components/Text/index.js +45 -41
  295. package/dist/components/Textarea/Textarea.module.scss.cjs +22 -28
  296. package/dist/components/Textarea/Textarea.module.scss.js +22 -28
  297. package/dist/components/Textarea/index.cjs +3 -10
  298. package/dist/components/Textarea/index.d.ts +0 -2
  299. package/dist/components/Textarea/index.d.ts.map +1 -1
  300. package/dist/components/Textarea/index.js +3 -10
  301. package/dist/components/Theme/index.cjs +22 -5
  302. package/dist/components/Theme/index.d.ts +6 -12
  303. package/dist/components/Theme/index.d.ts.map +1 -1
  304. package/dist/components/Theme/index.js +22 -5
  305. package/dist/components/ThemeToggle/ThemeButton.cjs +51 -0
  306. package/dist/components/ThemeToggle/ThemeButton.d.ts +16 -0
  307. package/dist/components/ThemeToggle/ThemeButton.d.ts.map +1 -0
  308. package/dist/components/ThemeToggle/ThemeButton.js +34 -0
  309. package/dist/components/ThemeToggle/ThemeToggle.module.scss.cjs +6 -6
  310. package/dist/components/ThemeToggle/ThemeToggle.module.scss.js +6 -6
  311. package/dist/components/ThemeToggle/icons.cjs +48 -0
  312. package/dist/components/ThemeToggle/icons.d.ts +10 -0
  313. package/dist/components/ThemeToggle/icons.d.ts.map +1 -0
  314. package/dist/components/ThemeToggle/icons.js +48 -0
  315. package/dist/components/ThemeToggle/index.cjs +6 -50
  316. package/dist/components/ThemeToggle/index.d.ts +5 -3
  317. package/dist/components/ThemeToggle/index.d.ts.map +1 -1
  318. package/dist/components/ThemeToggle/index.js +3 -47
  319. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +18 -15
  320. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +18 -15
  321. package/dist/components/ThinkingIndicator/index.cjs +7 -8
  322. package/dist/components/ThinkingIndicator/index.d.ts +6 -5
  323. package/dist/components/ThinkingIndicator/index.d.ts.map +1 -1
  324. package/dist/components/ThinkingIndicator/index.js +7 -8
  325. package/dist/components/Toast/Toast.module.scss.cjs +28 -29
  326. package/dist/components/Toast/Toast.module.scss.js +29 -30
  327. package/dist/components/Toast/index.cjs +28 -30
  328. package/dist/components/Toast/index.d.ts +9 -8
  329. package/dist/components/Toast/index.d.ts.map +1 -1
  330. package/dist/components/Toast/index.js +28 -30
  331. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +21 -19
  332. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +22 -20
  333. package/dist/components/ToggleGroup/index.cjs +4 -5
  334. package/dist/components/ToggleGroup/index.d.ts +7 -6
  335. package/dist/components/ToggleGroup/index.d.ts.map +1 -1
  336. package/dist/components/ToggleGroup/index.js +4 -5
  337. package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
  338. package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
  339. package/dist/components/Tooltip/index.cjs +24 -40
  340. package/dist/components/Tooltip/index.d.ts +4 -4
  341. package/dist/components/Tooltip/index.d.ts.map +1 -1
  342. package/dist/components/Tooltip/index.js +24 -40
  343. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.cjs +1 -1
  344. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.js +1 -1
  345. package/dist/components/VisuallyHidden/index.d.ts +2 -2
  346. package/dist/data-table-virtual.cjs +3 -2
  347. package/dist/data-table-virtual.js +3 -2
  348. package/dist/data-table.cjs +3 -2
  349. package/dist/data-table.js +3 -2
  350. package/dist/datepicker.cjs +26 -13
  351. package/dist/datepicker.js +26 -13
  352. package/dist/editor.cjs +68 -28
  353. package/dist/editor.js +68 -28
  354. package/dist/index.cjs +6 -2
  355. package/dist/index.d.ts +9 -9
  356. package/dist/index.d.ts.map +1 -1
  357. package/dist/index.js +8 -4
  358. package/dist/markdown.cjs +21 -29
  359. package/dist/markdown.js +21 -29
  360. package/dist/measurements/generated.cjs +46 -94
  361. package/dist/measurements/generated.d.ts +44 -92
  362. package/dist/measurements/generated.d.ts.map +1 -1
  363. package/dist/measurements/generated.js +46 -94
  364. package/dist/measurements/index.d.ts +1 -1
  365. package/dist/measurements/index.d.ts.map +1 -1
  366. package/dist/utils/a11y.cjs +5 -2
  367. package/dist/utils/a11y.d.ts +5 -5
  368. package/dist/utils/a11y.d.ts.map +1 -1
  369. package/dist/utils/a11y.js +5 -2
  370. package/dist/utils/canonical-stamp.cjs +2 -8
  371. package/dist/utils/canonical-stamp.d.ts.map +1 -1
  372. package/dist/utils/canonical-stamp.js +1 -7
  373. package/dist/utils/css-warning.cjs +1 -1
  374. package/dist/utils/css-warning.js +1 -1
  375. package/dist/utils/env.cjs +17 -0
  376. package/dist/utils/env.d.ts +3 -0
  377. package/dist/utils/env.d.ts.map +1 -0
  378. package/dist/utils/env.js +17 -0
  379. package/dist/utils/keyboard-shortcuts.cjs +3 -10
  380. package/dist/utils/keyboard-shortcuts.d.ts +4 -4
  381. package/dist/utils/keyboard-shortcuts.d.ts.map +1 -1
  382. package/dist/utils/keyboard-shortcuts.js +3 -10
  383. package/dist/utils/seed-derivation.cjs +10 -7
  384. package/dist/utils/seed-derivation.d.ts +1 -3
  385. package/dist/utils/seed-derivation.d.ts.map +1 -1
  386. package/dist/utils/seed-derivation.js +10 -7
  387. package/dist/utils/theme-presets.cjs +5 -10
  388. package/dist/utils/theme-presets.d.ts +1 -2
  389. package/dist/utils/theme-presets.d.ts.map +1 -1
  390. package/dist/utils/theme-presets.js +5 -10
  391. package/fragments.json +1 -1
  392. package/package.json +9 -10
  393. package/src/assets/fragments-logo.tsx +2 -2
  394. package/src/assets/fragments-wordmark.tsx +4 -2
  395. package/src/assets/nav-glyph.module.scss +166 -0
  396. package/src/assets/nav-glyph.tsx +188 -0
  397. package/src/components/Accordion/Accordion.contract.json +24 -48
  398. package/src/components/Accordion/Accordion.module.scss +5 -3
  399. package/src/components/Alert/Alert.contract.json +49 -65
  400. package/src/components/Alert/Alert.module.scss +57 -47
  401. package/src/components/Alert/index.tsx +72 -39
  402. package/src/components/AppShell/AppShell.contract.json +34 -51
  403. package/src/components/AppShell/AppShell.module.scss +99 -54
  404. package/src/components/AppShell/index.tsx +2 -2
  405. package/src/components/Avatar/Avatar.contract.json +31 -48
  406. package/src/components/Avatar/Avatar.module.scss +4 -2
  407. package/src/components/Badge/Badge.contract.json +86 -55
  408. package/src/components/Badge/Badge.module.scss +80 -48
  409. package/src/components/Badge/index.tsx +34 -17
  410. package/src/components/BentoGrid/BentoGrid.contract.json +21 -45
  411. package/src/components/BentoGrid/BentoGrid.module.scss +4 -8
  412. package/src/components/Box/Box.contract.json +40 -148
  413. package/src/components/Box/Box.module.scss +7 -6
  414. package/src/components/Box/index.tsx +92 -99
  415. package/src/components/Breadcrumbs/Breadcrumbs.contract.json +21 -34
  416. package/src/components/Breadcrumbs/Breadcrumbs.module.scss +27 -12
  417. package/src/components/Breadcrumbs/index.tsx +5 -1
  418. package/src/components/Button/Button.module.scss +261 -185
  419. package/src/components/Button/index.tsx +41 -28
  420. package/src/components/ButtonGroup/ButtonGroup.contract.json +34 -49
  421. package/src/components/ButtonGroup/ButtonGroup.module.scss +8 -6
  422. package/src/components/Card/Card.consumer-fixture.module.scss +5 -2
  423. package/src/components/Card/Card.module.scss +97 -76
  424. package/src/components/Card/index.tsx +44 -20
  425. package/src/components/Chart/Chart.contract.json +21 -29
  426. package/src/components/Chart/Chart.module.scss +6 -5
  427. package/src/components/Chart/index.tsx +36 -6
  428. package/src/components/Checkbox/Checkbox.contract.json +28 -27
  429. package/src/components/Checkbox/Checkbox.module.scss +47 -54
  430. package/src/components/Checkbox/index.tsx +10 -10
  431. package/src/components/Chip/Chip.contract.json +38 -45
  432. package/src/components/Chip/Chip.module.scss +24 -23
  433. package/src/components/Chip/index.tsx +12 -7
  434. package/src/components/CodeBlock/CodeBlock.contract.json +46 -76
  435. package/src/components/CodeBlock/CodeBlock.module.scss +75 -73
  436. package/src/components/CodeBlock/css-variables-theme.ts +102 -0
  437. package/src/components/CodeBlock/index.tsx +114 -51
  438. package/src/components/Collapsible/Collapsible.contract.json +21 -36
  439. package/src/components/Collapsible/Collapsible.module.scss +1 -7
  440. package/src/components/ColorPicker/ColorPicker.contract.json +29 -48
  441. package/src/components/ColorPicker/ColorPicker.module.scss +34 -24
  442. package/src/components/ColorPicker/index.tsx +6 -1
  443. package/src/components/Combobox/Combobox.contract.json +36 -37
  444. package/src/components/Combobox/Combobox.module.scss +16 -19
  445. package/src/components/Combobox/index.tsx +41 -6
  446. package/src/components/Command/Command.contract.json +28 -44
  447. package/src/components/Command/Command.module.scss +19 -21
  448. package/src/components/Command/index.tsx +64 -47
  449. package/src/components/ComponentDefaults/ComponentDefaults.contract.json +91 -0
  450. package/src/components/ConversationList/ConversationList.contract.json +27 -32
  451. package/src/components/ConversationList/ConversationList.module.scss +2 -3
  452. package/src/components/ConversationList/index.tsx +2 -2
  453. package/src/components/DataTable/DataTable.icons.tsx +4 -21
  454. package/src/components/DataTable/DataTable.module.scss +24 -17
  455. package/src/components/DataTable/DataTable.virtual.tsx +3 -2
  456. package/src/components/DataTable/index.tsx +9 -8
  457. package/src/components/DatePicker/DatePicker.contract.json +27 -28
  458. package/src/components/DatePicker/DatePicker.module.scss +41 -44
  459. package/src/components/DatePicker/index.tsx +23 -9
  460. package/src/components/Dialog/Dialog.module.scss +26 -32
  461. package/src/components/Dialog/index.tsx +51 -39
  462. package/src/components/Drawer/Drawer.contract.json +28 -42
  463. package/src/components/Drawer/Drawer.module.scss +123 -64
  464. package/src/components/Drawer/index.tsx +7 -5
  465. package/src/components/Editor/Editor.contract.json +32 -49
  466. package/src/components/Editor/Editor.module.scss +60 -25
  467. package/src/components/Editor/index.tsx +240 -179
  468. package/src/components/EmptyState/EmptyState.contract.json +33 -45
  469. package/src/components/EmptyState/EmptyState.module.scss +37 -21
  470. package/src/components/EmptyState/index.tsx +56 -23
  471. package/src/components/Field/Field.contract.json +28 -46
  472. package/src/components/Field/Field.module.scss +2 -1
  473. package/src/components/Field/index.tsx +5 -1
  474. package/src/components/Fieldset/Fieldset.contract.json +21 -38
  475. package/src/components/Fieldset/Fieldset.module.scss +15 -7
  476. package/src/components/Form/Form.contract.json +23 -23
  477. package/src/components/Grid/Grid.contract.json +28 -64
  478. package/src/components/Grid/Grid.module.scss +2 -2
  479. package/src/components/Grid/index.tsx +10 -10
  480. package/src/components/Header/Header.contract.json +31 -67
  481. package/src/components/Header/Header.module.scss +57 -54
  482. package/src/components/Header/index.tsx +134 -122
  483. package/src/components/Icon/Icon.contract.json +37 -81
  484. package/src/components/Icon/Icon.module.scss +13 -12
  485. package/src/components/Icon/index.tsx +31 -31
  486. package/src/components/IconButton/IconButton.contract.json +37 -21
  487. package/src/components/IconButton/IconButton.module.scss +19 -11
  488. package/src/components/IconButton/index.tsx +6 -5
  489. package/src/components/Image/Image.contract.json +23 -56
  490. package/src/components/Input/Input.contract.json +25 -44
  491. package/src/components/Input/Input.module.scss +6 -55
  492. package/src/components/Input/index.tsx +2 -18
  493. package/src/components/Link/Link.contract.json +46 -58
  494. package/src/components/Link/Link.module.scss +41 -10
  495. package/src/components/Link/index.tsx +27 -6
  496. package/src/components/List/List.contract.json +33 -62
  497. package/src/components/List/List.module.scss +10 -5
  498. package/src/components/List/index.tsx +17 -13
  499. package/src/components/Listbox/Listbox.contract.json +21 -37
  500. package/src/components/Listbox/Listbox.module.scss +14 -20
  501. package/src/components/Loading/Loading.contract.json +41 -65
  502. package/src/components/Loading/Loading.module.scss +37 -31
  503. package/src/components/Loading/index.tsx +15 -14
  504. package/src/components/Main/Main.contract.json +17 -9
  505. package/src/components/Markdown/Markdown.contract.json +22 -43
  506. package/src/components/Markdown/Markdown.module.scss +45 -6
  507. package/src/components/Markdown/index.tsx +48 -49
  508. package/src/components/Menu/Menu.contract.json +30 -46
  509. package/src/components/Menu/Menu.module.scss +32 -16
  510. package/src/components/Message/Message.contract.json +31 -54
  511. package/src/components/Message/Message.module.scss +18 -9
  512. package/src/components/Message/index.tsx +2 -2
  513. package/src/components/NavigationMenu/NavigationMenu.contract.json +36 -45
  514. package/src/components/NavigationMenu/NavigationMenu.module.scss +66 -66
  515. package/src/components/NavigationMenu/index.tsx +105 -81
  516. package/src/components/Pagination/Pagination.contract.json +22 -40
  517. package/src/components/Pagination/Pagination.module.scss +9 -16
  518. package/src/components/Popover/Popover.contract.json +28 -50
  519. package/src/components/Popover/Popover.module.scss +30 -28
  520. package/src/components/Progress/Progress.contract.json +39 -35
  521. package/src/components/Progress/Progress.module.scss +16 -10
  522. package/src/components/Progress/index.tsx +34 -16
  523. package/src/components/Prompt/Prompt.contract.json +40 -56
  524. package/src/components/Prompt/Prompt.module.scss +49 -48
  525. package/src/components/Prompt/index.tsx +17 -15
  526. package/src/components/RadioGroup/RadioGroup.contract.json +29 -28
  527. package/src/components/RadioGroup/RadioGroup.module.scss +50 -45
  528. package/src/components/RadioGroup/index.tsx +23 -10
  529. package/src/components/ScrollArea/ScrollArea.contract.json +18 -19
  530. package/src/components/ScrollArea/ScrollArea.module.scss +45 -48
  531. package/src/components/ScrollArea/index.tsx +16 -16
  532. package/src/components/ScrollArea/scroll-state.ts +24 -24
  533. package/src/components/Select/Select.module.scss +20 -19
  534. package/src/components/Select/index.tsx +26 -24
  535. package/src/components/Separator/Separator.contract.json +29 -53
  536. package/src/components/Separator/Separator.module.scss +24 -40
  537. package/src/components/Separator/index.tsx +16 -11
  538. package/src/components/Sidebar/Sidebar.contract.json +35 -67
  539. package/src/components/Sidebar/Sidebar.module.scss +94 -88
  540. package/src/components/Sidebar/index.tsx +167 -167
  541. package/src/components/Skeleton/Skeleton.contract.json +34 -60
  542. package/src/components/Skeleton/Skeleton.module.scss +50 -26
  543. package/src/components/Skeleton/index.tsx +16 -15
  544. package/src/components/Slider/Slider.contract.json +27 -39
  545. package/src/components/Slider/Slider.module.scss +9 -22
  546. package/src/components/Stack/Stack.contract.json +30 -57
  547. package/src/components/Stack/Stack.module.scss +26 -24
  548. package/src/components/Stack/index.tsx +3 -3
  549. package/src/components/Switch/Switch.contract.json +33 -46
  550. package/src/components/Switch/Switch.module.scss +106 -59
  551. package/src/components/Table/Table.contract.json +28 -46
  552. package/src/components/Table/Table.module.scss +24 -16
  553. package/src/components/TableOfContents/TableOfContents.contract.json +34 -21
  554. package/src/components/TableOfContents/TableOfContents.module.scss +17 -13
  555. package/src/components/TableOfContents/index.tsx +27 -10
  556. package/src/components/Tabs/Tabs.contract.json +35 -56
  557. package/src/components/Tabs/Tabs.module.scss +27 -31
  558. package/src/components/Tabs/index.tsx +30 -15
  559. package/src/components/Text/Text.contract.json +52 -72
  560. package/src/components/Text/Text.module.scss +34 -18
  561. package/src/components/Text/index.tsx +123 -83
  562. package/src/components/Textarea/Textarea.contract.json +24 -55
  563. package/src/components/Textarea/Textarea.module.scss +22 -52
  564. package/src/components/Textarea/index.tsx +3 -14
  565. package/src/components/Theme/Theme.contract.json +35 -53
  566. package/src/components/Theme/index.tsx +41 -13
  567. package/src/components/ThemeToggle/ThemeButton.tsx +49 -0
  568. package/src/components/ThemeToggle/ThemeToggle.module.scss +20 -27
  569. package/src/components/ThemeToggle/icons.tsx +46 -0
  570. package/src/components/ThemeToggle/index.tsx +9 -55
  571. package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +34 -50
  572. package/src/components/ThinkingIndicator/ThinkingIndicator.module.scss +9 -7
  573. package/src/components/ThinkingIndicator/index.tsx +12 -14
  574. package/src/components/Toast/Toast.contract.json +55 -49
  575. package/src/components/Toast/Toast.module.scss +50 -105
  576. package/src/components/Toast/index.tsx +39 -34
  577. package/src/components/ToggleGroup/ToggleGroup.contract.json +39 -40
  578. package/src/components/ToggleGroup/ToggleGroup.module.scss +30 -27
  579. package/src/components/ToggleGroup/index.tsx +11 -11
  580. package/src/components/Tooltip/Tooltip.contract.json +31 -52
  581. package/src/components/Tooltip/Tooltip.module.scss +16 -10
  582. package/src/components/Tooltip/index.tsx +19 -24
  583. package/src/components/VisuallyHidden/VisuallyHidden.contract.json +22 -44
  584. package/src/components/VisuallyHidden/VisuallyHidden.module.scss +4 -14
  585. package/src/components/VisuallyHidden/index.tsx +5 -5
  586. package/src/index.ts +16 -12
  587. package/src/measurements/MeasurementTargets.module.scss +6 -7
  588. package/src/measurements/generated.ts +46 -97
  589. package/src/measurements/index.ts +0 -1
  590. package/src/measurements/measurements.json +44 -116
  591. package/src/recipes/_action.scss +4 -4
  592. package/src/recipes/_boolean-range.scss +12 -16
  593. package/src/recipes/_feedback.scss +17 -16
  594. package/src/recipes/_field.scss +28 -16
  595. package/src/recipes/_layout.scss +14 -7
  596. package/src/recipes/_navigation.scss +84 -29
  597. package/src/recipes/_overlay.scss +143 -43
  598. package/src/recipes/_popup.scss +54 -34
  599. package/src/recipes/_prose.scss +48 -28
  600. package/src/recipes/_representation.scss +10 -9
  601. package/src/recipes/_segmented.scss +1 -1
  602. package/src/recipes/_table-chrome.scss +42 -17
  603. package/src/recipes/_target.scss +2 -4
  604. package/src/recipes/_typography.scss +10 -0
  605. package/src/scss.d.ts +1 -1
  606. package/src/styles/globals.scss +31 -25
  607. package/src/tokens/_component-properties.scss +19 -1
  608. package/src/tokens/_computed.scss +32 -49
  609. package/src/tokens/_derive.scss +112 -210
  610. package/src/tokens/_measurements.catalog.generated.css +62 -44
  611. package/src/tokens/_measurements.generated.scss +119 -249
  612. package/src/tokens/_mixins.scss +49 -48
  613. package/src/tokens/_palettes.scss +39 -167
  614. package/src/tokens/_property-registrations.scss +9 -0
  615. package/src/tokens/_seeds.scss +20 -31
  616. package/src/tokens/_variables.scss +251 -94
  617. package/src/utils/a11y.tsx +69 -69
  618. package/src/utils/aria.ts +3 -3
  619. package/src/utils/canonical-stamp.ts +2 -12
  620. package/src/utils/css-warning.ts +7 -7
  621. package/src/utils/env.ts +25 -0
  622. package/src/utils/keyboard-shortcuts.ts +131 -126
  623. package/src/utils/seed-derivation.ts +11 -14
  624. package/src/utils/theme-presets.ts +5 -12
  625. package/dist/blocks/AccountSettings.block.d.ts +0 -3
  626. package/dist/blocks/AccountSettings.block.d.ts.map +0 -1
  627. package/dist/blocks/ActivityFeedSkeleton.block.d.ts +0 -3
  628. package/dist/blocks/ActivityFeedSkeleton.block.d.ts.map +0 -1
  629. package/dist/blocks/BlogEditor.block.d.ts +0 -3
  630. package/dist/blocks/BlogEditor.block.d.ts.map +0 -1
  631. package/dist/blocks/ChatInterface.block.d.ts +0 -3
  632. package/dist/blocks/ChatInterface.block.d.ts.map +0 -1
  633. package/dist/blocks/ChatMessages.block.d.ts +0 -3
  634. package/dist/blocks/ChatMessages.block.d.ts.map +0 -1
  635. package/dist/blocks/CheckoutForm.block.d.ts +0 -3
  636. package/dist/blocks/CheckoutForm.block.d.ts.map +0 -1
  637. package/dist/blocks/CommandPalette.block.d.ts +0 -3
  638. package/dist/blocks/CommandPalette.block.d.ts.map +0 -1
  639. package/dist/blocks/ContactForm.block.d.ts +0 -3
  640. package/dist/blocks/ContactForm.block.d.ts.map +0 -1
  641. package/dist/blocks/DashboardPage.block.d.ts +0 -3
  642. package/dist/blocks/DashboardPage.block.d.ts.map +0 -1
  643. package/dist/blocks/DashboardSkeleton.block.d.ts +0 -3
  644. package/dist/blocks/DashboardSkeleton.block.d.ts.map +0 -1
  645. package/dist/blocks/DataTable.block.d.ts +0 -3
  646. package/dist/blocks/DataTable.block.d.ts.map +0 -1
  647. package/dist/blocks/EmptyState.block.d.ts +0 -3
  648. package/dist/blocks/EmptyState.block.d.ts.map +0 -1
  649. package/dist/blocks/FAQSection.block.d.ts +0 -3
  650. package/dist/blocks/FAQSection.block.d.ts.map +0 -1
  651. package/dist/blocks/FeatureGrid.block.d.ts +0 -3
  652. package/dist/blocks/FeatureGrid.block.d.ts.map +0 -1
  653. package/dist/blocks/HeroSection.block.d.ts +0 -3
  654. package/dist/blocks/HeroSection.block.d.ts.map +0 -1
  655. package/dist/blocks/NavigationHeader.block.d.ts +0 -3
  656. package/dist/blocks/NavigationHeader.block.d.ts.map +0 -1
  657. package/dist/blocks/PaginatedTable.block.d.ts +0 -3
  658. package/dist/blocks/PaginatedTable.block.d.ts.map +0 -1
  659. package/dist/blocks/PricingComparison.block.d.ts +0 -3
  660. package/dist/blocks/PricingComparison.block.d.ts.map +0 -1
  661. package/dist/blocks/ProductCard.block.d.ts +0 -3
  662. package/dist/blocks/ProductCard.block.d.ts.map +0 -1
  663. package/dist/blocks/RegistrationForm.block.d.ts +0 -3
  664. package/dist/blocks/RegistrationForm.block.d.ts.map +0 -1
  665. package/dist/blocks/SettingsDrawer.block.d.ts +0 -3
  666. package/dist/blocks/SettingsDrawer.block.d.ts.map +0 -1
  667. package/dist/blocks/SettingsPanel.block.d.ts +0 -3
  668. package/dist/blocks/SettingsPanel.block.d.ts.map +0 -1
  669. package/dist/blocks/ShoppingCart.block.d.ts +0 -3
  670. package/dist/blocks/ShoppingCart.block.d.ts.map +0 -1
  671. package/dist/blocks/StatsCardSkeleton.block.d.ts +0 -3
  672. package/dist/blocks/StatsCardSkeleton.block.d.ts.map +0 -1
  673. package/dist/blocks/TableSkeleton.block.d.ts +0 -3
  674. package/dist/blocks/TableSkeleton.block.d.ts.map +0 -1
  675. package/dist/blocks/ThinkingStates.block.d.ts +0 -3
  676. package/dist/blocks/ThinkingStates.block.d.ts.map +0 -1
  677. package/dist/components/Toggle/index.d.ts +0 -3
  678. package/dist/components/Toggle/index.d.ts.map +0 -1
  679. package/src/components/Button/Button.contract.json +0 -218
  680. package/src/components/Card/Card.contract.json +0 -175
  681. package/src/components/DataTable/DataTable.contract.json +0 -302
  682. package/src/components/Dialog/Dialog.contract.json +0 -159
  683. package/src/components/Select/Select.contract.json +0 -259
  684. package/src/components/Toggle/index.ts +0 -7
  685. package/src/tokens/_density.scss +0 -85
@@ -1,5 +1,6 @@
1
1
  @use "../../tokens/variables" as *;
2
2
  @use "../../tokens/mixins" as *;
3
+ @use "../../tokens/measurements.generated" as measurements;
3
4
  @use "../../recipes/action" as action;
4
5
  @use "../../recipes/table-chrome" as table-chrome;
5
6
  @use "../../recipes/target" as target;
@@ -45,6 +46,7 @@
45
46
  .headerRow,
46
47
  .row {
47
48
  @include table-chrome.row;
49
+ @include high-contrast-outline;
48
50
  }
49
51
 
50
52
  .headerRow {
@@ -66,7 +68,7 @@
66
68
  .sortButton {
67
69
  display: flex;
68
70
  align-items: center;
69
- gap: var(--fui-raw-space-4);
71
+ gap: var(--fui-raw-space-4, 4px);
70
72
  }
71
73
 
72
74
  .sortButton {
@@ -75,7 +77,7 @@
75
77
 
76
78
  justify-content: space-between;
77
79
  inline-size: 100%;
78
- padding: 0;
80
+ padding: var(--fui-raw-space-0, #{measurements.raw-space(0)});
79
81
  color: inherit;
80
82
  text-align: start;
81
83
  transition: color var(--fui-transition-fast, $fui-transition-fast);
@@ -148,12 +150,13 @@
148
150
  );
149
151
 
150
152
  .td:first-child {
151
- box-shadow: inset var(--fui-table-divider-size) 0 0
152
- var(--fui-table-row-selected-border, var(--fui-border-strong, #{$fui-border-strong}));
153
+ box-shadow: inset var(--fui-table-divider-size, var(--fui-stroke-hairline, #{$fui-stroke-hairline}))
154
+ 0 0 var(--fui-table-row-selected-border, var(--fui-border-strong, #{$fui-border-strong}));
153
155
  }
154
156
 
155
157
  &:dir(rtl) .td:first-child {
156
- box-shadow: inset calc(-1 * var(--fui-table-divider-size)) 0 0
158
+ box-shadow: inset
159
+ calc(-1 * var(--fui-table-divider-size, var(--fui-stroke-hairline, #{$fui-stroke-hairline}))) 0 0
157
160
  var(--fui-table-row-selected-border, var(--fui-border-strong, #{$fui-border-strong}));
158
161
  }
159
162
  }
@@ -176,8 +179,11 @@
176
179
  }
177
180
 
178
181
  .bordered {
179
- overflow: hidden;
180
- border: var(--fui-table-divider-size, var(--fui-stroke-hairline)) solid
182
+ /* Keep the rounded corners clipping the table, but never trap the
183
+ horizontal scroll the wrapper needs for wide tables. */
184
+ overflow-x: auto;
185
+ overflow-y: hidden;
186
+ border: var(--fui-table-divider-size, var(--fui-stroke-hairline, $fui-stroke-hairline)) solid
181
187
  var(--fui-table-border, var(--fui-border, #{$fui-border}));
182
188
  border-radius: var(--fui-radius-md, $fui-radius-md);
183
189
  background: var(--fui-data-table-bg, var(--fui-bg-primary, #{$fui-bg-primary}));
@@ -215,7 +221,7 @@
215
221
 
216
222
  .skeletonBar {
217
223
  display: block;
218
- block-size: var(--fui-raw-space-10);
224
+ block-size: var(--fui-raw-space-10, 10px);
219
225
  border-radius: var(--fui-radius-sm, $fui-radius-sm);
220
226
  background: linear-gradient(
221
227
  90deg,
@@ -224,7 +230,8 @@
224
230
  color-mix(in srgb, currentColor 8%, transparent) 75%
225
231
  );
226
232
  background-size: 200% 100%;
227
- animation: dataTableShimmer 1.4s ease-in-out infinite;
233
+ animation: dataTableShimmer var(--fui-duration-shimmer, $fui-duration-shimmer) ease-in-out
234
+ infinite;
228
235
  }
229
236
 
230
237
  @keyframes dataTableShimmer {
@@ -246,7 +253,7 @@
246
253
  .expandCell {
247
254
  display: inline-flex;
248
255
  align-items: center;
249
- gap: var(--fui-raw-space-4);
256
+ gap: var(--fui-raw-space-4, 4px);
250
257
  }
251
258
 
252
259
  .expandButton {
@@ -286,8 +293,8 @@
286
293
  display: flex;
287
294
  align-items: center;
288
295
  justify-content: center;
289
- padding-block: var(--fui-raw-space-48);
290
- padding-inline: var(--fui-raw-space-24);
296
+ padding-block: var(--fui-raw-space-48, 48px);
297
+ padding-inline: var(--fui-raw-space-24, 24px);
291
298
  }
292
299
 
293
300
  .emptyMessage {
@@ -296,11 +303,11 @@
296
303
  color: var(--fui-text-tertiary, $fui-text-tertiary);
297
304
  }
298
305
 
299
- @media (prefers-contrast: more) {
300
- .headerRow,
301
- .row {
302
- border-block-end-color: CanvasText;
303
- }
306
+ // Virtualizer spacer rows: height is measured state set inline; the chrome
307
+ // reset lives here so the spacer never paints a cell.
308
+ .virtualSpacer {
309
+ padding: var(--fui-raw-space-0, #{measurements.raw-space(0)});
310
+ border: 0;
304
311
  }
305
312
 
306
313
  @media (prefers-reduced-motion: reduce) {
@@ -3,6 +3,7 @@
3
3
  import * as React from "react";
4
4
  import { useVirtualizer, type Virtualizer } from "@tanstack/react-virtual";
5
5
  import { Table, type TableProps } from "../Table";
6
+ import styles from "./DataTable.module.scss";
6
7
 
7
8
  // ============================================
8
9
  // Dependency (@tanstack/react-virtual)
@@ -86,13 +87,13 @@ function DataTableVirtualRoot<TItem>({
86
87
  <Table.Body>
87
88
  {paddingTop > 0 ? (
88
89
  <tr aria-hidden="true">
89
- <td colSpan={colSpan} style={{ height: paddingTop, padding: 0 }} />
90
+ <td colSpan={colSpan} className={styles.virtualSpacer} style={{ height: paddingTop }} />
90
91
  </tr>
91
92
  ) : null}
92
93
  {virtualRows.map((row) => renderRow(row))}
93
94
  {paddingBottom > 0 ? (
94
95
  <tr aria-hidden="true">
95
- <td colSpan={colSpan} style={{ height: paddingBottom, padding: 0, border: 0 }} />
96
+ <td colSpan={colSpan} className={styles.virtualSpacer} style={{ height: paddingBottom }} />
96
97
  </tr>
97
98
  ) : null}
98
99
  </Table.Body>
@@ -6,6 +6,7 @@ import styles from "./DataTable.module.scss";
6
6
  import { Checkbox } from "../Checkbox";
7
7
  import { ExpandIcon, SortAscIcon, SortDescIcon, SortIcon } from "./DataTable.icons";
8
8
  import { DataTableSkeletonRows, useArrowKeyRowNav } from "./DataTable.support";
9
+ import { isDevelopmentBuild } from "../../utils/env";
9
10
 
10
11
  // ============================================
11
12
  // Dependency (@tanstack/react-table) — lazy import()
@@ -36,7 +37,7 @@ function loadReactTable(): Promise<void> {
36
37
  _reactTable = (await import("@tanstack/react-table")) as unknown as ReactTableModule;
37
38
  } catch {
38
39
  _reactTableFailed = true;
39
- if (process.env.NODE_ENV === "development") {
40
+ if (isDevelopmentBuild()) {
40
41
  console.warn(
41
42
  "[@usefragments/ui] DataTable: @tanstack/react-table is not installed. " +
42
43
  "Rendering a static table without sorting, selection, or expansion. " +
@@ -469,9 +470,9 @@ function DataTableLive<T>({
469
470
  <DataTableSkeletonRows
470
471
  rowCount={skeletonRows}
471
472
  columnCount={columns.length}
472
- rowClassName={styles.row}
473
- cellClassName={styles.td}
474
- barClassName={styles.skeletonBar}
473
+ rowClassName={styles.row ?? ""}
474
+ cellClassName={styles.td ?? ""}
475
+ barClassName={styles.skeletonBar ?? ""}
475
476
  />
476
477
  ) : (
477
478
  table.getRowModel().rows.map((row: any) => {
@@ -546,7 +547,7 @@ function DataTableLive<T>({
546
547
  style={{
547
548
  ...getColumnSizeStyle(cell.column),
548
549
  ...(isFirstDataCell
549
- ? ({ "--_fui-table-tree-depth": depth } as React.CSSProperties)
550
+ ? ({ "--fui-table-tree-depth": depth } as React.CSSProperties)
550
551
  : undefined),
551
552
  }}
552
553
  >
@@ -711,9 +712,9 @@ function DataTableStatic<T>({
711
712
  <DataTableSkeletonRows
712
713
  rowCount={skeletonRows}
713
714
  columnCount={columnCount}
714
- rowClassName={styles.row}
715
- cellClassName={styles.td}
716
- barClassName={styles.skeletonBar}
715
+ rowClassName={styles.row ?? ""}
716
+ cellClassName={styles.td ?? ""}
717
+ barClassName={styles.skeletonBar ?? ""}
717
718
  />
718
719
  ) : isEmpty ? (
719
720
  <tr className={styles.row}>
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
3
  "name": "DatePicker",
4
- "description": "Date picker with calendar dropdown for selecting single dates or date ranges. Built on react-day-picker with seed-based theming.",
5
- "category": "forms",
4
+ "description": "Selects a date or date range from a calendar.",
5
+ "category": "inputs",
6
6
  "tags": ["date", "picker", "calendar", "range", "form", "input"],
7
7
  "status": "stable",
8
8
  "dependencies": [
@@ -165,75 +165,74 @@
165
165
  },
166
166
  "usage": {
167
167
  "when": [
168
- "Selecting a single date from a calendar",
169
- "Selecting a date range (start/end)",
170
- "Date inputs in forms",
171
- "Filtering by date or date range"
168
+ "A date the user picks off a calendar",
169
+ "A start and end date together",
170
+ "Filtering by date"
172
171
  ],
173
172
  "whenNot": [
174
- "Time-only input - use a dedicated TimePicker",
175
- "Selecting from a small set of known dates - use Select",
176
- "Free-form date entry - use Input with date masking"
173
+ "Time on its own (use a dedicated TimePicker)",
174
+ "A handful of known dates (use Select)",
175
+ "Typed date entry (use Input with a date mask)"
177
176
  ],
178
177
  "guidelines": [
179
- "Use range mode with numberOfMonths={2} for date range selection",
180
- "Use size=\"sm\" in dense toolbars so DatePicker aligns with Input, Select, Combobox, Button, and IconButton",
181
- "Add presets for common ranges (Today, Last 7 days, Last 30 days)",
182
- "Use disabledDates to prevent selecting past dates or unavailable dates",
183
- "Provide a meaningful placeholder",
184
- "DatePicker.Trigger forwards button props and defaults to type=\"button\" (safe inside forms)"
178
+ "Pair range mode with numberOfMonths={2} so both ends are visible",
179
+ "size=\"sm\" lines the trigger up with other dense toolbar controls",
180
+ "Offer presets for the common ranges: Today, Last 7 days, Last 30 days",
181
+ "disabledDates blocks past or unavailable days before the user tries",
182
+ "Placeholder names the date, not the action",
183
+ "DatePicker.Trigger defaults to type=\"button\", so it is safe inside a form"
185
184
  ],
186
185
  "accessibility": [
187
- "Full keyboard navigation within the calendar grid",
188
- "Arrow keys navigate between days",
186
+ "The calendar grid is fully keyboard navigable",
187
+ "Arrow keys move between days",
189
188
  "Escape closes the calendar",
190
- "Focus returns to trigger on close"
189
+ "Focus returns to the trigger on close"
191
190
  ]
192
191
  },
193
192
  "examples": [
194
193
  {
195
194
  "name": "Default",
196
- "description": "Single date picker with default settings",
195
+ "description": "Trigger opens one month; today is outlined.",
197
196
  "code": "<StatefulDatePicker placeholder=\"Pick a date\">\n <DatePicker.Trigger />\n <DatePicker.Content>\n <DatePicker.Calendar />\n </DatePicker.Content>\n</StatefulDatePicker>"
198
197
  },
199
198
  {
200
199
  "name": "Small Trigger",
201
- "description": "Dense toolbar date picker aligned to other small controls",
200
+ "description": "Matches the height of other sm toolbar controls.",
202
201
  "code": "<StatefulDatePicker size=\"sm\" placeholder=\"Last scanned\">\n <DatePicker.Trigger />\n <DatePicker.Content>\n <DatePicker.Calendar />\n </DatePicker.Content>\n</StatefulDatePicker>"
203
202
  },
204
203
  {
205
204
  "name": "Date Range",
206
- "description": "Range mode with dual months",
205
+ "description": "Two months side by side so both ends of the range are visible.",
207
206
  "code": "<StatefulRangePicker placeholder=\"Select date range\" numberOfMonths={2}>\n <DatePicker.Trigger />\n <DatePicker.Content>\n <DatePicker.Calendar />\n </DatePicker.Content>\n</StatefulRangePicker>"
208
207
  },
209
208
  {
210
209
  "name": "Multi-Month",
211
- "description": "Single date with 3 months visible",
210
+ "description": "Three months at once, for dates far from today.",
212
211
  "code": "<StatefulDatePicker placeholder=\"Pick a date\" numberOfMonths={3}>\n <DatePicker.Trigger />\n <DatePicker.Content>\n <DatePicker.Calendar />\n </DatePicker.Content>\n</StatefulDatePicker>"
213
212
  },
214
213
  {
215
214
  "name": "Disabled Dates",
216
- "description": "Past dates disabled",
215
+ "description": "Everything before today is greyed out and unclickable.",
217
216
  "code": "<StatefulDatePicker\n placeholder=\"Select a future date\"\n disabledDates={{ before: new Date() }}\n>\n <DatePicker.Trigger />\n <DatePicker.Content>\n <DatePicker.Calendar />\n </DatePicker.Content>\n</StatefulDatePicker>"
218
217
  },
219
218
  {
220
219
  "name": "With Presets",
221
- "description": "Range picker with sidebar preset buttons",
220
+ "description": "Shortcut buttons beside the calendar skip the common ranges.",
222
221
  "code": "<StatefulRangePicker placeholder=\"Select date range\" numberOfMonths={2}>\n <DatePicker.Trigger />\n <DatePicker.Content>\n <div style={{ display: 'flex', gap: '1rem' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.25rem', minWidth: '8rem' }}>\n <DatePicker.Preset range={{ from: today, to: today }}>Today</DatePicker.Preset>\n <DatePicker.Preset range={{ from: subDays(today, 7), to: today }}>Last 7 days</DatePicker.Preset>\n <DatePicker.Preset range={{ from: subDays(today, 30), to: today }}>Last 30 days</DatePicker.Preset>\n <DatePicker.Preset range={{ from: subDays(today, 90), to: today }}>Last 90 days</DatePicker.Preset>\n </div>\n <DatePicker.Calendar />\n </div>\n </DatePicker.Content>\n</StatefulRangePicker>"
223
222
  },
224
223
  {
225
224
  "name": "With Label and Helper Text",
226
- "description": "Date picker with built-in label and helper text",
227
- "code": "<StatefulDatePicker placeholder=\"Pick a date\">\n <DatePicker.Trigger />\n <DatePicker.Content>\n <DatePicker.Calendar />\n </DatePicker.Content>\n</StatefulDatePicker>"
225
+ "description": "Label above the trigger, supporting text below it.",
226
+ "code": "<StatefulDatePicker\n label=\"Renewal date\"\n placeholder=\"Pick a date\"\n helperText=\"Billing restarts on this day each month.\"\n>\n <DatePicker.Trigger />\n <DatePicker.Content>\n <DatePicker.Calendar />\n </DatePicker.Content>\n</StatefulDatePicker>"
228
227
  },
229
228
  {
230
229
  "name": "Error State",
231
- "description": "Validation error with message",
230
+ "description": "Red border on the trigger, and the reason below it.",
232
231
  "code": "<DatePicker\n label=\"Start Date\"\n placeholder=\"Pick a date\"\n error=\"Please select a start date\"\n>\n <DatePicker.Trigger />\n <DatePicker.Content>\n <DatePicker.Calendar />\n </DatePicker.Content>\n</DatePicker>"
233
232
  },
234
233
  {
235
234
  "name": "Disabled",
236
- "description": "Disabled date picker",
235
+ "description": "Dimmed; the calendar will not open.",
237
236
  "code": "<StatefulDatePicker placeholder=\"Pick a date\" disabled>\n <DatePicker.Trigger />\n <DatePicker.Content>\n <DatePicker.Calendar />\n </DatePicker.Content>\n</StatefulDatePicker>"
238
237
  }
239
238
  ],
@@ -1,9 +1,11 @@
1
1
  @use "../../tokens/variables" as *;
2
2
  @use "../../tokens/mixins" as *;
3
+ @use "../../tokens/measurements.generated" as measurements;
3
4
  @use "../../recipes/action";
4
5
  @use "../../recipes/field";
5
6
  @use "../../recipes/layout";
6
7
  @use "../../recipes/popup";
8
+ @use "../../recipes/surface";
7
9
  @use "../../recipes/typography";
8
10
 
9
11
  .wrapper {
@@ -40,9 +42,25 @@
40
42
  min-width: layout.measure("field-minimum");
41
43
  text-align: left;
42
44
 
45
+ &:focus-visible,
43
46
  &[data-popup-open] {
44
- border-color: var(--fui-field-border-focus, $fui-color-accent);
47
+ @include field.focus-state;
45
48
  }
49
+
50
+ // Error border, matching Input. Set from the wrapper's data-invalid so the
51
+ // control reads as failed, not just the message beneath it.
52
+ .wrapper[data-invalid] & {
53
+ @include field.invalid-state;
54
+
55
+ // Focused while invalid keeps the danger edge and takes the danger ring,
56
+ // the same pairing Input and Textarea render.
57
+ &:focus-visible,
58
+ &[data-popup-open] {
59
+ @include field.invalid-focus-state;
60
+ }
61
+ }
62
+
63
+ @include high-contrast-outline;
46
64
  }
47
65
 
48
66
  .triggerSm {
@@ -98,16 +116,14 @@
98
116
  // ============================================
99
117
 
100
118
  .positioner {
101
- z-index: 52;
119
+ z-index: var(--fui-overlay-layer-anchored, #{$fui-overlay-layer-anchored});
102
120
  outline: none;
103
121
  }
104
122
 
105
123
  .popup {
106
- @include surface-elevated;
124
+ @include popup.container;
107
125
 
108
- border-color: var(--fui-form-group-border, $fui-border);
109
- padding: var(--fui-surface-inset-compact, 12px);
110
- box-shadow: var(--fui-shadow-md, $fui-shadow-md);
126
+ padding: surface.inset("compact");
111
127
 
112
128
  // Animation
113
129
  opacity: 0;
@@ -176,7 +192,7 @@
176
192
  top: 0;
177
193
  left: 0;
178
194
  right: 0;
179
- padding: 0;
195
+ padding: var(--fui-raw-space-0, #{measurements.raw-space(0)});
180
196
  }
181
197
 
182
198
  .navButton {
@@ -218,9 +234,9 @@
218
234
  .weekday {
219
235
  @include typography.role("ui-compact");
220
236
 
221
- width: var(--_day-size);
222
- height: var(--_day-size);
223
- padding: 0;
237
+ width: var(--_day-size, #{action.track("md")});
238
+ height: var(--_day-size, #{action.track("md")});
239
+ padding: var(--fui-raw-space-0, #{measurements.raw-space(0)});
224
240
  color: var(--fui-text-tertiary, $fui-text-tertiary);
225
241
  text-align: center;
226
242
  vertical-align: middle;
@@ -239,9 +255,9 @@
239
255
  // ============================================
240
256
 
241
257
  .day {
242
- width: var(--_day-size);
243
- height: var(--_day-size);
244
- padding: 0;
258
+ width: var(--_day-size, #{action.track("md")});
259
+ height: var(--_day-size, #{action.track("md")});
260
+ padding: var(--fui-raw-space-0, #{measurements.raw-space(0)});
245
261
  text-align: center;
246
262
  vertical-align: middle;
247
263
  position: relative;
@@ -253,8 +269,8 @@
253
269
  display: inline-flex;
254
270
  align-items: center;
255
271
  justify-content: center;
256
- width: var(--_day-size);
257
- height: var(--_day-size);
272
+ width: var(--_day-size, #{action.track("md")});
273
+ height: var(--_day-size, #{action.track("md")});
258
274
  border-radius: var(--fui-radius-md, $fui-radius-md);
259
275
  font-size: var(--fui-font-size-sm, $fui-font-size-sm);
260
276
  color: var(--fui-text-primary, $fui-text-primary);
@@ -276,7 +292,8 @@
276
292
  // ============================================
277
293
 
278
294
  .today > .dayButton {
279
- box-shadow: inset 0 0 0 1px var(--fui-field-border, $fui-border-strong);
295
+ box-shadow: inset 0 0 0 var(--fui-stroke-hairline, 1px)
296
+ var(--fui-border-strong, $fui-border-strong);
280
297
  background-color: color-mix(in srgb, var(--fui-bg-hover, $fui-bg-hover) 55%, transparent);
281
298
  }
282
299
 
@@ -289,14 +306,17 @@
289
306
  }
290
307
  }
291
308
 
309
+ // Days outside the visible month recede but stay clickable; they borrow the
310
+ // disabled opacity because the kit has no separate muted-opacity token yet.
292
311
  .outside > .dayButton {
293
312
  color: var(--fui-text-tertiary, $fui-text-tertiary);
294
- opacity: 0.5;
313
+ opacity: var(--fui-opacity-disabled, #{$fui-opacity-disabled});
295
314
  }
296
315
 
297
316
  .disabled > .dayButton {
317
+ @include disabled-state;
318
+
298
319
  color: var(--fui-text-tertiary, $fui-text-tertiary);
299
- opacity: 0.5;
300
320
  pointer-events: none;
301
321
  }
302
322
 
@@ -318,7 +338,7 @@
318
338
  &::before {
319
339
  content: "";
320
340
  position: absolute;
321
- inset: 2px 0;
341
+ inset: var(--fui-raw-space-2, 2px) 0;
322
342
  background-color: color-mix(
323
343
  in srgb,
324
344
  var(--fui-color-accent, $fui-color-accent) 10%,
@@ -339,7 +359,7 @@
339
359
  &::before {
340
360
  content: "";
341
361
  position: absolute;
342
- inset: 2px 0 2px 50%;
362
+ inset: var(--fui-raw-space-2, 2px) 0 var(--fui-raw-space-2, 2px) 50%;
343
363
  background-color: color-mix(
344
364
  in srgb,
345
365
  var(--fui-color-accent, $fui-color-accent) 10%,
@@ -369,7 +389,7 @@
369
389
  &::before {
370
390
  content: "";
371
391
  position: absolute;
372
- inset: 2px 50% 2px 0;
392
+ inset: var(--fui-raw-space-2, 2px) 50% var(--fui-raw-space-2, 2px) 0;
373
393
  background-color: color-mix(
374
394
  in srgb,
375
395
  var(--fui-color-accent, $fui-color-accent) 10%,
@@ -413,29 +433,6 @@
413
433
  }
414
434
  }
415
435
 
416
- // ============================================
417
- // Accessibility: High Contrast Mode
418
- // ============================================
419
-
420
- @media (prefers-contrast: more) {
421
- .trigger {
422
- border-width: 2px;
423
- border-color: var(--fui-text-primary, $fui-text-primary);
424
-
425
- &[data-popup-open] {
426
- border-color: var(--fui-color-accent, $fui-color-accent);
427
- }
428
- }
429
-
430
- .dayButton {
431
- border: var(--fui-stroke-hairline, 1px) solid transparent;
432
-
433
- &:focus-visible {
434
- border-color: var(--fui-text-primary, $fui-text-primary);
435
- }
436
- }
437
- }
438
-
439
436
  // ============================================
440
437
  // Reduced motion
441
438
  // ============================================
@@ -6,6 +6,7 @@ import { useFormFieldIds, type FormFieldProps } from "../../utils/aria";
6
6
  import { POPUP_OFFSET_PX } from "../../recipes/popup";
7
7
  import { useResolvedControlSize } from "../ComponentDefaults";
8
8
  import styles from "./DatePicker.module.scss";
9
+ import { isDevelopmentBuild } from "../../utils/env";
9
10
 
10
11
  // ============================================
11
12
  // Types (self-owned — no external dependency for types)
@@ -170,6 +171,9 @@ interface DatePickerContextValue {
170
171
  isControlledOpen: boolean;
171
172
  size: "sm" | "md" | "lg";
172
173
  name?: string;
174
+ /** Mirrors the wrapper's `data-invalid` onto the trigger as `aria-invalid`,
175
+ * so assistive tech hears the state the danger edge is painting. */
176
+ invalid?: boolean;
173
177
  }
174
178
 
175
179
  const DatePickerContext = React.createContext<DatePickerContextValue | null>(null);
@@ -249,7 +253,7 @@ function loadDayPickerDeps(): Promise<void> {
249
253
  _DayFlag = rdp.DayFlag as unknown as RdpEnum;
250
254
  } catch {
251
255
  _rdpFailed = true;
252
- if (process.env.NODE_ENV === "development") {
256
+ if (isDevelopmentBuild()) {
253
257
  console.warn(
254
258
  "[@usefragments/ui] DatePicker: react-day-picker is not installed. " +
255
259
  "Install it with: npm install react-day-picker"
@@ -419,6 +423,12 @@ const DatePickerRoot = React.forwardRef<HTMLDivElement, DatePickerProps>(functio
419
423
 
420
424
  const defaultPlaceholder = mode === "range" ? "Select date range" : "Pick a date";
421
425
 
426
+ const { labelId, helperId, errorId, hasError, errorMessage } = useFormFieldIds("datepicker", {
427
+ label,
428
+ helperText,
429
+ error,
430
+ });
431
+
422
432
  const contextValue = React.useMemo<DatePickerContextValue>(
423
433
  () => ({
424
434
  mode,
@@ -439,6 +449,7 @@ const DatePickerRoot = React.forwardRef<HTMLDivElement, DatePickerProps>(functio
439
449
  isControlledOpen,
440
450
  size,
441
451
  name,
452
+ invalid: hasError,
442
453
  }),
443
454
  [
444
455
  mode,
@@ -462,21 +473,18 @@ const DatePickerRoot = React.forwardRef<HTMLDivElement, DatePickerProps>(functio
462
473
  isControlledOpen,
463
474
  size,
464
475
  name,
476
+ hasError,
465
477
  ]
466
478
  );
467
479
 
468
- const { labelId, helperId, errorId, hasError, errorMessage } = useFormFieldIds("datepicker", {
469
- label,
470
- helperText,
471
- error,
472
- });
473
-
474
480
  const wrapperClasses = [styles.wrapper, className].filter(Boolean).join(" ");
475
481
  const helperClasses = [styles.helper, hasError && styles.helperError].filter(Boolean).join(" ");
476
482
 
477
483
  return (
478
484
  <DatePickerContext.Provider value={contextValue}>
479
- <div ref={ref} className={wrapperClasses}>
485
+ {/* data-invalid lets the trigger pick up the error border; without it only
486
+ the message turns red and the control still looks valid. */}
487
+ <div ref={ref} className={wrapperClasses} data-invalid={hasError || undefined}>
480
488
  {label && (
481
489
  <span id={labelId} className={styles.label}>
482
490
  {label}
@@ -540,7 +548,13 @@ function DatePickerTrigger({
540
548
  }
541
549
 
542
550
  return (
543
- <BasePopover.Trigger {...htmlProps} type={type} className={classes} disabled={ctx.disabled}>
551
+ <BasePopover.Trigger
552
+ {...htmlProps}
553
+ type={type}
554
+ className={classes}
555
+ disabled={ctx.disabled}
556
+ aria-invalid={ctx.invalid || undefined}
557
+ >
544
558
  {children ?? (
545
559
  <>
546
560
  <span className={styles.triggerIcon}>