@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,14 +1,9 @@
1
1
  {
2
2
  "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
3
  "name": "Chart",
4
- "description": "Composable chart wrapper for recharts with theme-aware tooltips, legends, and color integration.",
4
+ "description": "Plots your data with tooltips, legends, and colors that track the theme.",
5
5
  "category": "display",
6
- "tags": [
7
- "chart",
8
- "graph",
9
- "data-visualization",
10
- "recharts"
11
- ],
6
+ "tags": ["chart", "graph", "data-visualization", "recharts"],
12
7
  "status": "stable",
13
8
  "dependencies": [
14
9
  {
@@ -55,48 +50,47 @@
55
50
  },
56
51
  "usage": {
57
52
  "when": [
58
- "Displaying data trends over time",
59
- "Comparing categorical data",
60
- "Showing distribution or composition",
61
- "Dashboard data visualizations"
53
+ "A trend over time is the point",
54
+ "Categories need comparing side by side",
55
+ "A whole splits into parts worth seeing"
62
56
  ],
63
57
  "whenNot": [
64
- "Simple numeric values (use Text or Badge)",
65
- "Progress toward a goal (use Progress)",
66
- "Tabular data without visualization (use Table)"
58
+ "One number tells the story (use Text or Badge)",
59
+ "Distance to a goal (use Progress)",
60
+ "Readers need exact values (use Table)"
67
61
  ],
68
62
  "guidelines": [
69
- "Use ChartContainer to wrap recharts chart components",
70
- "Define a ChartConfig to map data keys to labels and colors (and optionally icons for custom legend/tooltip UIs)",
71
- "Use FUI CSS variables for colors so charts adapt to theme changes",
72
- "Use ChartTooltip and ChartLegend for consistent themed overlays",
73
- "ChartTooltip and ChartLegend accept custom content renderers for advanced formatting"
63
+ "Wrap every recharts chart in ChartContainer",
64
+ "Map each data key to a label and color in ChartConfig",
65
+ "Colors come from --fui-* variables so both themes stay readable",
66
+ "Pair with ChartTooltip and ChartLegend rather than recharts' own",
67
+ "Give the container a real height recharts cannot measure zero"
74
68
  ],
75
69
  "accessibility": [
76
- "Charts include recharts accessibilityLayer by default",
77
- "Provide meaningful labels in ChartConfig for screen readers",
78
- "Consider providing a data table alternative for complex charts"
70
+ "accessibilityLayer is on by default",
71
+ "ChartConfig labels are what screen readers read",
72
+ "Pass dataTable to offer the same numbers as text"
79
73
  ]
80
74
  },
81
75
  "examples": [
82
76
  {
83
77
  "name": "Line Chart",
84
- "description": "Multi-series line chart showing trends over time",
78
+ "description": "Two series share one scale, so the gap between them reads instantly.",
85
79
  "code": "<div style={{ width: '100%', height: 300 }}>\n <ChartContainer\n config={{\n revenue: { label: 'Revenue', color: 'var(--fui-color-accent)' },\n users: { label: 'Users', color: 'var(--fui-color-info)' },\n }}\n >\n <LineChart data={monthlyData} margin={{ top: 5, right: 20, bottom: 5, left: 0 }}>\n <CartesianGrid strokeDasharray=\"3 3\" />\n <XAxis dataKey=\"month\" />\n <YAxis />\n <ChartTooltip />\n <ChartLegend />\n <Line type=\"monotone\" dataKey=\"revenue\" stroke=\"var(--fui-color-accent)\" strokeWidth={2} dot={false} />\n <Line type=\"monotone\" dataKey=\"users\" stroke=\"var(--fui-color-info)\" strokeWidth={2} dot={false} />\n </LineChart>\n </ChartContainer>\n</div>"
86
80
  },
87
81
  {
88
82
  "name": "Bar Chart",
89
- "description": "Categorical bar chart comparing device sessions",
83
+ "description": "Fixed categories, compared by height — the safest default.",
90
84
  "code": "<div style={{ width: '100%', height: 300 }}>\n <ChartContainer\n config={{\n sessions: { label: 'Sessions', color: 'var(--fui-color-accent)' },\n }}\n >\n <BarChart data={deviceData} margin={{ top: 5, right: 20, bottom: 5, left: 0 }}>\n <CartesianGrid strokeDasharray=\"3 3\" />\n <XAxis dataKey=\"device\" />\n <YAxis />\n <ChartTooltip />\n <Bar dataKey=\"sessions\" fill=\"var(--fui-color-accent)\" radius={[4, 4, 0, 0]} />\n </BarChart>\n </ChartContainer>\n</div>"
91
85
  },
92
86
  {
93
87
  "name": "Area Chart",
94
- "description": "Filled area chart showing revenue trend",
88
+ "description": "The fill under the line stresses volume, not just direction.",
95
89
  "code": "<div style={{ width: '100%', height: 300 }}>\n <ChartContainer\n config={{\n revenue: { label: 'Revenue', color: 'var(--fui-color-accent)' },\n }}\n >\n <AreaChart data={monthlyData} margin={{ top: 5, right: 20, bottom: 5, left: 0 }}>\n <CartesianGrid strokeDasharray=\"3 3\" />\n <XAxis dataKey=\"month\" />\n <YAxis />\n <ChartTooltip />\n <Area type=\"monotone\" dataKey=\"revenue\" stroke=\"var(--fui-color-accent)\" fill=\"var(--fui-color-accent)\" fillOpacity={0.15} strokeWidth={2} />\n </AreaChart>\n </ChartContainer>\n</div>"
96
90
  },
97
91
  {
98
92
  "name": "Pie Chart",
99
- "description": "Donut chart showing browser share distribution",
93
+ "description": "Parts of one whole keep it under six slices or it stops reading.",
100
94
  "code": "<div style={{ width: '100%', height: 300 }}>\n <ChartContainer\n config={{\n Chrome: { label: 'Chrome', color: 'var(--fui-color-accent)' },\n Firefox: { label: 'Firefox', color: 'var(--fui-color-info)' },\n Safari: { label: 'Safari', color: 'var(--fui-color-success)' },\n Edge: { label: 'Edge', color: 'var(--fui-color-warning)' },\n }}\n >\n <PieChart>\n <ChartTooltip />\n <ChartLegend />\n <Pie\n data={browserData}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={60}\n outerRadius={90}\n strokeWidth={2}\n >\n {browserData.map((entry) => (\n <Cell key={entry.name} fill={entry.color} />\n ))}\n </Pie>\n </PieChart>\n </ChartContainer>\n</div>"
101
95
  }
102
96
  ],
@@ -123,9 +117,7 @@
123
117
  "children: ReactElement - recharts chart component",
124
118
  "Chart.Tooltip / Chart.Legend support custom content renderers for advanced overlays"
125
119
  ],
126
- "a11yRules": [
127
- "A11Y_CHART_LABEL"
128
- ]
120
+ "a11yRules": ["A11Y_CHART_LABEL"]
129
121
  },
130
122
  "provenance": {
131
123
  "source": "migrated",
@@ -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/representation" as representation;
4
5
  @use "../../recipes/typography" as typography;
5
6
 
@@ -57,13 +58,13 @@
57
58
  .tooltipItems {
58
59
  display: flex;
59
60
  flex-direction: column;
60
- gap: var(--_fui-chart-tooltip-item-gap);
61
+ gap: var(--_fui-chart-tooltip-item-gap, var(--fui-raw-space-8, #{measurements.raw-space(8)}));
61
62
  }
62
63
 
63
64
  .tooltipItem {
64
65
  display: flex;
65
66
  align-items: center;
66
- gap: var(--_fui-chart-tooltip-item-gap);
67
+ gap: var(--_fui-chart-tooltip-item-gap, var(--fui-raw-space-8, #{measurements.raw-space(8)}));
67
68
  justify-content: space-between;
68
69
  }
69
70
 
@@ -82,8 +83,8 @@
82
83
  @include representation.chart-marker("dashed");
83
84
 
84
85
  box-sizing: border-box;
85
- border-top: var(--fui-chart-marker-stroke, var(--fui-raw-space-2, 2px)) dashed;
86
- border-radius: 0;
86
+ border-block-start: var(--fui-chart-marker-stroke, var(--fui-raw-space-2, #{measurements.raw-space(2)})) dashed;
87
+ border-radius: var(--fui-radius-none, #{$fui-radius-none});
87
88
  }
88
89
  }
89
90
 
@@ -104,7 +105,7 @@
104
105
  flex-wrap: wrap;
105
106
  align-items: center;
106
107
  justify-content: center;
107
- gap: var(--fui-raw-space-12, 12px);
108
+ gap: var(--fui-raw-space-12, #{measurements.raw-space(12)});
108
109
  padding-block-start: var(--fui-raw-space-8, 8px);
109
110
  }
110
111
 
@@ -3,6 +3,7 @@
3
3
  import * as React from "react";
4
4
  import { mergeAriaIds } from "../../utils/aria";
5
5
  import styles from "./Chart.module.scss";
6
+ import { isDevelopmentBuild } from "../../utils/env";
6
7
 
7
8
  // ============================================
8
9
  // Types (self-owned — no external dependency for types)
@@ -74,7 +75,7 @@ function loadChartDeps(): Promise<void> {
74
75
  _RechartsLegend = rc.Legend as unknown as React.ComponentType<Record<string, unknown>>;
75
76
  } catch {
76
77
  _chartFailed = true;
77
- if (process.env.NODE_ENV === "development") {
78
+ if (isDevelopmentBuild()) {
78
79
  console.warn(
79
80
  "[@usefragments/ui] Chart: recharts is not installed. " +
80
81
  "Install it with: npm install recharts"
@@ -132,6 +133,34 @@ export function ChartContainer({
132
133
  ...htmlProps
133
134
  }: ChartContainerProps) {
134
135
  const chartId = React.useId();
136
+ const frameRef = React.useRef<HTMLDivElement | null>(null);
137
+ // Recharts only lays a chart out once it knows a pixel box. Percentage
138
+ // sizing leaves the first paint blank until something else happens to
139
+ // resize the window, so the container measures its own frame and hands the
140
+ // chart real numbers — re-measured whenever the frame changes.
141
+ const [frame, setFrame] = React.useState<{ width: number; height: number } | null>(null);
142
+
143
+ React.useEffect(() => {
144
+ const element = frameRef.current;
145
+ if (!element || typeof ResizeObserver === "undefined") return;
146
+
147
+ const measure = () => {
148
+ const rect = element.getBoundingClientRect();
149
+ const width = Math.round(rect.width);
150
+ const height = Math.round(rect.height);
151
+ setFrame((current) =>
152
+ current && current.width === width && current.height === height
153
+ ? current
154
+ : { width, height }
155
+ );
156
+ };
157
+
158
+ measure();
159
+ const observer = new ResizeObserver(measure);
160
+ observer.observe(element);
161
+ return () => observer.disconnect();
162
+ }, []);
163
+
135
164
  const summaryId = summary ? `chart-summary-${chartId}` : undefined;
136
165
  const dataTableId = dataTable ? `chart-data-${chartId}` : undefined;
137
166
 
@@ -149,12 +178,12 @@ export function ChartContainer({
149
178
  // Inject sizing props into the chart child (recharts API).
150
179
  // Only pass `responsive` for custom component types to avoid leaking the
151
180
  // prop to intrinsic DOM nodes in test/demo usage.
152
- const chartChildProps: Record<string, unknown> = {
153
- width: "100%",
154
- height: "100%",
155
- };
181
+ const measured = frame !== null && frame.width > 0 && frame.height > 0;
182
+ const chartChildProps: Record<string, unknown> = measured
183
+ ? { width: frame.width, height: frame.height }
184
+ : { width: "100%", height: "100%" };
156
185
 
157
- if (typeof children.type !== "string") {
186
+ if (!measured && typeof children.type !== "string") {
158
187
  chartChildProps.responsive = true;
159
188
  }
160
189
 
@@ -167,6 +196,7 @@ export function ChartContainer({
167
196
  <ChartConfigContext.Provider value={config}>
168
197
  <div
169
198
  {...htmlProps}
199
+ ref={frameRef}
170
200
  className={rootClasses}
171
201
  style={{ ...cssVars, ...style }}
172
202
  role="img"
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
3
  "name": "Checkbox",
4
- "description": "Binary toggle for form fields. Use for options that require explicit submission, unlike Switch which takes effect immediately.",
5
- "category": "forms",
4
+ "description": "Selects options that take effect when a form is submitted.",
5
+ "category": "inputs",
6
6
  "tags": ["checkbox", "form", "boolean", "selection", "input"],
7
7
  "status": "stable",
8
8
  "sourcePath": "src/components/Checkbox/index.tsx",
@@ -16,6 +16,7 @@
16
16
  "disabled: boolean (default: false)",
17
17
  "required: boolean (default: false)",
18
18
  "size: sm|md|lg (default: md)",
19
+ "variant: outline",
19
20
  "label: string",
20
21
  "helperText: string",
21
22
  "description: string",
@@ -76,10 +77,9 @@
76
77
  },
77
78
  "variant": {
78
79
  "type": "enum",
79
- "description": "Visual variant. 'default' is the inline checkbox, 'card' renders as a full-width clickable card with the checkbox tucked inside.",
80
- "default": "default",
80
+ "description": "Chrome. Omit for the inline checkbox beside its label; 'outline' renders a full-width bordered surface with the checkbox tucked inside.",
81
81
  "required": false,
82
- "values": ["default", "card"]
82
+ "values": ["outline"]
83
83
  },
84
84
  "label": {
85
85
  "type": "string",
@@ -139,63 +139,63 @@
139
139
  },
140
140
  "usage": {
141
141
  "when": [
142
- "Form fields requiring explicit submission",
143
- "Multi-select from a list of options",
144
- "Terms and conditions acceptance",
145
- "Filter or preference checklists"
142
+ "Choices that apply only once the form is submitted",
143
+ "Picking several items from a list",
144
+ "Accepting terms",
145
+ "Filter and preference lists"
146
146
  ],
147
147
  "whenNot": [
148
- "Immediate effect settings (use Switch)",
149
- "Single selection from options (use RadioGroup)",
150
- "Selecting from many options (use Select)"
148
+ "Settings that apply instantly (use Switch)",
149
+ "One choice from a few (use RadioGroup)",
150
+ "Many options (use Select)"
151
151
  ],
152
152
  "guidelines": [
153
- "Always include a visible label",
154
- "Use helperText for additional context when needed",
155
- "Group related checkboxes visually",
156
- "Use indeterminate state for parent/child relationships"
153
+ "Always show a label",
154
+ "Add helperText when the consequence is not obvious",
155
+ "Keep related boxes together",
156
+ "Use indeterminate for a parent whose children are partly checked"
157
157
  ],
158
158
  "accessibility": [
159
- "Proper label association",
160
- "Keyboard accessible (Space to toggle)",
161
- "Visible focus indicator",
162
- "Indeterminate state properly announced"
159
+ "Label is tied to the box",
160
+ "Space toggles it",
161
+ "Focus ring stays visible",
162
+ "Indeterminate is announced as mixed"
163
163
  ]
164
164
  },
165
165
  "examples": [
166
166
  {
167
167
  "name": "Default",
168
- "description": "Basic checkbox with label",
168
+ "description": "One box, one label, off to start.",
169
169
  "code": "<StatefulCheckbox label=\"Accept terms and conditions\" />"
170
170
  },
171
171
  {
172
172
  "name": "With Helper Text",
173
- "description": "Checkbox with helper text",
173
+ "description": "Second line spells out what opting in does.",
174
174
  "code": "<StatefulCheckbox\n label=\"Email notifications\"\n helperText=\"Receive email updates about your account activity\"\n/>"
175
175
  },
176
176
  {
177
177
  "name": "Checked",
178
- "description": "Pre-checked checkbox",
178
+ "description": "Starts on.",
179
179
  "code": "<StatefulCheckbox defaultChecked label=\"Subscribe to newsletter\" />"
180
180
  },
181
181
  {
182
182
  "name": "Indeterminate",
183
- "description": "Partial selection state",
183
+ "description": "A dash on the parent means only some children are on.",
184
184
  "code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <Checkbox indeterminate label=\"Select all\" />\n <div style={{ marginLeft: '24px', display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <StatefulCheckbox defaultChecked label=\"Option 1\" />\n <StatefulCheckbox label=\"Option 2\" />\n <StatefulCheckbox defaultChecked label=\"Option 3\" />\n </div>\n</div>"
185
185
  },
186
186
  {
187
187
  "name": "Sizes",
188
- "description": "Available size options",
188
+ "description": "Three box sizes: sm, md, lg.",
189
189
  "code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <StatefulCheckbox size=\"sm\" label=\"Small checkbox\" />\n <StatefulCheckbox size=\"md\" label=\"Medium checkbox\" />\n <StatefulCheckbox size=\"lg\" label=\"Large checkbox\" />\n</div>"
190
190
  },
191
191
  {
192
192
  "name": "Disabled",
193
- "description": "Non-interactive states",
193
+ "description": "Locked in both positions, on and off.",
194
194
  "code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <Checkbox disabled label=\"Disabled unchecked\" />\n <Checkbox disabled checked label=\"Disabled checked\" />\n</div>"
195
195
  },
196
196
  {
197
197
  "name": "Custom Styling Targets",
198
- "description": "Use explicit class targets for control vs content styling",
198
+ "description": "controlClassName styles the box, contentClassName the text.",
199
199
  "code": "<Checkbox\n label=\"Styled checkbox\"\n helperText=\"Control and content wrappers can be targeted independently\"\n controlClassName=\"demo-checkbox-control\"\n contentClassName=\"demo-checkbox-content\"\n/>"
200
200
  }
201
201
  ],
@@ -217,6 +217,7 @@
217
217
  "onCheckedChange: (checked) => void - change handler",
218
218
  "onChange: (checked) => void - alias for onCheckedChange",
219
219
  "indeterminate: boolean - partial selection state",
220
+ "variant: outline - full-width bordered surface; omit for the inline control",
220
221
  "label: string - checkbox label",
221
222
  "helperText: string - helper text (preferred)",
222
223
  "description: string - deprecated alias for helperText",
@@ -21,8 +21,7 @@
21
21
  }
22
22
 
23
23
  &[data-disabled] {
24
- cursor: not-allowed;
25
- opacity: 0.5;
24
+ @include disabled-state;
26
25
  }
27
26
  }
28
27
 
@@ -38,46 +37,45 @@
38
37
  flex-shrink: 0;
39
38
  box-sizing: border-box;
40
39
  margin-block-start: var(--_fui-boolean-mark-offset, 0);
41
- background-color: var(--fui-field-bg, $fui-bg-elevated);
42
- border: var(--fui-stroke-hairline, 1px) solid var(--fui-field-border, $fui-border-strong);
40
+ background-color: var(--fui-bg-primary, $fui-bg-primary);
41
+ border: var(--fui-stroke-hairline, 1px) solid var(--fui-border-strong, $fui-border-strong);
43
42
  border-radius: var(--fui-checkbox-radius, var(--fui-radius-sm, #{$fui-radius-sm}));
44
43
  cursor: inherit;
44
+ @include high-contrast-outline;
45
45
 
46
46
  &:hover:not([data-disabled]) {
47
- border-color: var(--fui-field-border-hover, $fui-text-tertiary);
47
+ border-color: var(--fui-text-tertiary, $fui-text-tertiary);
48
+ }
49
+
50
+ &:focus-visible {
51
+ @include field.focus-state;
48
52
  }
49
53
 
50
54
  &[data-checked],
51
55
  &[data-indeterminate] {
52
- background-color: var(--fui-button-primary-base, $fui-color-accent);
53
- border-color: var(
54
- --fui-button-primary-border,
55
- var(--fui-button-primary-base, #{$fui-color-accent})
56
- );
57
- box-shadow: inset 0 1px 0 color-mix(in srgb, white 24%, transparent);
56
+ background-color: var(--fui-control-checked-bg, $fui-color-accent);
57
+ border-color: var(--fui-control-checked-border, $fui-color-accent);
58
+ box-shadow: inset 0 var(--fui-stroke-hairline, #{$fui-stroke-hairline}) 0
59
+ color-mix(in srgb, var(--fui-control-checked-color, #{$fui-color-on-accent}) 24%, transparent);
58
60
  }
59
61
 
60
62
  &[data-checked]:hover:not([data-disabled]),
61
63
  &[data-indeterminate]:hover:not([data-disabled]) {
62
- background-color: var(--fui-button-primary-hover, $fui-color-accent);
63
- border-color: var(
64
- --fui-button-primary-border-hover,
65
- var(--fui-button-primary-hover, #{$fui-color-accent})
66
- );
64
+ background-color: var(--fui-control-checked-bg-hover, $fui-color-accent-hover);
65
+ border-color: var(--fui-control-checked-border-hover, $fui-color-accent-hover);
67
66
  }
68
67
 
69
68
  &[data-invalid] {
70
- border-color: var(--fui-color-danger-text, $fui-color-danger-text);
69
+ border-color: var(--fui-color-danger, $fui-color-danger);
71
70
  }
72
71
 
73
72
  &[data-invalid][data-checked],
74
73
  &[data-invalid][data-indeterminate] {
75
74
  background-color: var(--fui-color-danger-bg, $fui-color-danger-bg);
76
- border-color: var(--fui-color-danger-text, $fui-color-danger-text);
75
+ border-color: var(--fui-color-danger, $fui-color-danger);
77
76
  box-shadow: inset 0 0 0 1px
78
77
  color-mix(in srgb, var(--fui-color-danger-text, #{$fui-color-danger-text}) 35%, transparent);
79
78
  }
80
-
81
79
  }
82
80
 
83
81
  // Size variants
@@ -99,24 +97,40 @@
99
97
  display: flex;
100
98
  align-items: center;
101
99
  justify-content: center;
102
- color: var(--fui-button-primary-color, #fff);
100
+ color: var(--fui-control-checked-color, $fui-color-on-accent);
103
101
 
104
102
  svg {
105
103
  width: var(--fui-icon-xs, $fui-icon-xs);
106
104
  height: var(--fui-icon-xs, $fui-icon-xs);
107
105
  }
108
106
 
109
- // Animation
107
+ // Animation: the mark draws itself in (stroke-dashoffset over the
108
+ // pathLength-normalized glyphs) instead of popping. Opacity keeps the
109
+ // un-draw exit from lingering.
110
110
  opacity: 0;
111
- transform: scale(0.8);
112
- transition:
113
- opacity var(--fui-transition-fast, $fui-transition-fast),
114
- transform var(--fui-transition-fast, $fui-transition-fast);
111
+ transition: opacity var(--fui-transition-fast, $fui-transition-fast);
112
+
113
+ svg :is(polyline, line) {
114
+ stroke-dasharray: 24;
115
+ stroke-dashoffset: 24;
116
+ transition: stroke-dashoffset var(--fui-transition-normal, $fui-transition-normal);
117
+ }
115
118
 
116
119
  [data-checked] > &,
117
120
  [data-indeterminate] > & {
118
121
  opacity: 1;
119
- transform: scale(1);
122
+
123
+ svg :is(polyline, line) {
124
+ stroke-dashoffset: 0;
125
+ }
126
+ }
127
+
128
+ @media (prefers-reduced-motion: reduce) {
129
+ transition: none;
130
+
131
+ svg :is(polyline, line) {
132
+ transition: none;
133
+ }
120
134
  }
121
135
 
122
136
  [data-invalid][data-checked] > &,
@@ -152,11 +166,11 @@
152
166
  }
153
167
 
154
168
  // ============================================
155
- // Card variant: full-width clickable surface that mirrors the RadioGroup
156
- // card variant. Selection state is driven by `:has([data-checked])` so the
169
+ // Outline variant: full-width bordered surface that mirrors the RadioGroup
170
+ // outline variant. Selection state is driven by `:has([data-checked])` so the
157
171
  // styling reacts to the same control state the rest of the component uses.
158
172
  // ============================================
159
- .wrapperCard {
173
+ .wrapperOutline {
160
174
  width: 100%;
161
175
  border-radius: var(--fui-radius-md, $fui-radius-md);
162
176
  border: var(--fui-stroke-hairline, 1px) solid var(--fui-border-default, $fui-border-default);
@@ -173,23 +187,23 @@
173
187
 
174
188
  &:focus-within:not([data-disabled]) {
175
189
  @include focus-ring;
176
- border-color: var(--fui-button-primary-base, $fui-color-accent);
190
+ border-color: var(--fui-control-checked-border, $fui-color-accent);
177
191
  }
178
192
 
179
193
  &:has([data-checked]),
180
194
  &:has([data-indeterminate]) {
181
195
  background: color-mix(
182
196
  in srgb,
183
- var(--fui-button-primary-base, #{$fui-color-accent}) 13%,
197
+ var(--fui-control-checked-bg, #{$fui-color-accent}) 13%,
184
198
  transparent
185
199
  );
186
200
  border-color: color-mix(
187
201
  in srgb,
188
- var(--fui-button-primary-base, #{$fui-color-accent}) 62%,
202
+ var(--fui-control-checked-border, #{$fui-color-accent}) 62%,
189
203
  transparent
190
204
  );
191
205
  box-shadow: 0 0 0 1px
192
- color-mix(in srgb, var(--fui-button-primary-base, #{$fui-color-accent}) 28%, transparent);
206
+ color-mix(in srgb, var(--fui-control-checked-border, #{$fui-color-accent}) 28%, transparent);
193
207
  }
194
208
 
195
209
  &[data-size="sm"] {
@@ -205,27 +219,6 @@
205
219
  }
206
220
  }
207
221
 
208
- // ============================================
209
- // Accessibility: High Contrast Mode
210
- // ============================================
211
-
212
- @media (prefers-contrast: more) {
213
- .checkbox {
214
- border-color: var(--fui-text-primary, $fui-text-primary);
215
- outline: var(--fui-stroke-hairline, 1px) solid var(--fui-text-primary, $fui-text-primary);
216
- outline-offset: calc(-1 * var(--fui-stroke-default, 2px));
217
-
218
- &[data-checked],
219
- &[data-indeterminate] {
220
- border-color: var(--fui-button-primary-base, $fui-color-accent);
221
- }
222
-
223
- &[data-invalid] {
224
- border-color: var(--fui-color-danger-text, $fui-color-danger-text);
225
- }
226
- }
227
- }
228
-
229
222
  // ============================================
230
223
  // Accessibility: Reduced Motion
231
224
  // ============================================
@@ -38,13 +38,11 @@ export interface CheckboxProps extends Omit<
38
38
  * @default "md" */
39
39
  size?: "sm" | "md" | "lg";
40
40
  /**
41
- * Visual variant.
42
- * - `default`: inline checkbox next to a label (form-control style).
43
- * - `card`: full-width clickable card with the checkbox tucked inside.
44
- * Useful for multi-select question lists, settings toggles, etc.
45
- * @default "default"
41
+ * Chrome. Omit it for the inline checkbox next to a label (form-control
42
+ * style); `outline` renders a full-width bordered surface with the checkbox
43
+ * tucked inside — multi-select question lists, settings toggles, plan pickers.
46
44
  */
47
- variant?: "default" | "card";
45
+ variant?: "outline";
48
46
  /** Label text */
49
47
  label?: string;
50
48
  /** Helper text shown below the label */
@@ -93,7 +91,9 @@ function CheckIcon() {
93
91
  strokeLinejoin="round"
94
92
  aria-hidden="true"
95
93
  >
96
- <polyline points="20 6 9 17 4 12" />
94
+ {/* Point order = draw order: the mark draws short arm first, then the
95
+ long stroke. pathLength normalizes the dash budget for the CSS draw. */}
96
+ <polyline points="4 12 9 17 20 6" pathLength={24} />
97
97
  </svg>
98
98
  );
99
99
  }
@@ -110,7 +110,7 @@ function MinusIcon() {
110
110
  strokeLinejoin="round"
111
111
  aria-hidden="true"
112
112
  >
113
- <line x1="5" y1="12" x2="19" y2="12" />
113
+ <line x1="5" y1="12" x2="19" y2="12" pathLength={24} />
114
114
  </svg>
115
115
  );
116
116
  }
@@ -130,7 +130,7 @@ const CheckboxRoot = React.forwardRef<HTMLButtonElement, CheckboxProps>(function
130
130
  readOnly = false,
131
131
  required = false,
132
132
  size: sizeProp,
133
- variant = "default",
133
+ variant,
134
134
  label,
135
135
  helperText,
136
136
  description,
@@ -167,7 +167,7 @@ const CheckboxRoot = React.forwardRef<HTMLButtonElement, CheckboxProps>(function
167
167
  .filter(Boolean)
168
168
  .join(" ");
169
169
 
170
- const wrapperClasses = [styles.wrapper, variant === "card" && styles.wrapperCard, className]
170
+ const wrapperClasses = [styles.wrapper, variant === "outline" && styles.wrapperOutline, className]
171
171
  .filter(Boolean)
172
172
  .join(" ");
173
173
  const handleCheckedChange = onChange ?? onCheckedChange;