@usefragments/ui 1.5.4 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (667) hide show
  1. package/README.md +4 -4
  2. package/dist/assets/fragments-wordmark.cjs +2 -2
  3. package/dist/assets/fragments-wordmark.d.ts.map +1 -1
  4. package/dist/assets/fragments-wordmark.js +2 -2
  5. package/dist/assets/ui.css +10468 -6909
  6. package/dist/chart.cjs +31 -26
  7. package/dist/chart.js +31 -26
  8. package/dist/codeblock.cjs +55 -29
  9. package/dist/codeblock.js +55 -29
  10. package/dist/colorpicker.cjs +5 -2
  11. package/dist/colorpicker.js +5 -2
  12. package/dist/components/Accordion/Accordion.module.scss.cjs +8 -8
  13. package/dist/components/Accordion/Accordion.module.scss.js +8 -8
  14. package/dist/components/Alert/Alert.module.scss.cjs +15 -12
  15. package/dist/components/Alert/Alert.module.scss.js +15 -12
  16. package/dist/components/Alert/index.cjs +7 -1
  17. package/dist/components/Alert/index.d.ts +12 -6
  18. package/dist/components/Alert/index.d.ts.map +1 -1
  19. package/dist/components/Alert/index.js +7 -1
  20. package/dist/components/AppShell/AppShell.module.scss.cjs +14 -14
  21. package/dist/components/AppShell/AppShell.module.scss.js +14 -14
  22. package/dist/components/AppShell/index.cjs +5 -3
  23. package/dist/components/AppShell/index.d.ts +4 -2
  24. package/dist/components/AppShell/index.d.ts.map +1 -1
  25. package/dist/components/AppShell/index.js +5 -3
  26. package/dist/components/Avatar/Avatar.module.scss.cjs +17 -14
  27. package/dist/components/Avatar/Avatar.module.scss.js +17 -14
  28. package/dist/components/Avatar/index.cjs +100 -118
  29. package/dist/components/Avatar/index.d.ts +7 -5
  30. package/dist/components/Avatar/index.d.ts.map +1 -1
  31. package/dist/components/Avatar/index.js +100 -118
  32. package/dist/components/Badge/Badge.module.scss.cjs +19 -19
  33. package/dist/components/Badge/Badge.module.scss.js +19 -19
  34. package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +14 -14
  35. package/dist/components/BentoGrid/BentoGrid.module.scss.js +14 -14
  36. package/dist/components/Box/Box.module.scss.cjs +152 -152
  37. package/dist/components/Box/Box.module.scss.js +152 -152
  38. package/dist/components/Box/index.cjs +64 -75
  39. package/dist/components/Box/index.d.ts +16 -16
  40. package/dist/components/Box/index.d.ts.map +1 -1
  41. package/dist/components/Box/index.js +64 -75
  42. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.cjs +8 -8
  43. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +8 -8
  44. package/dist/components/Button/Button.module.scss.cjs +14 -14
  45. package/dist/components/Button/Button.module.scss.js +14 -14
  46. package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs +15 -15
  47. package/dist/components/ButtonGroup/ButtonGroup.module.scss.js +15 -15
  48. package/dist/components/Card/Card.module.scss.cjs +30 -18
  49. package/dist/components/Card/Card.module.scss.js +31 -19
  50. package/dist/components/Card/index.cjs +8 -0
  51. package/dist/components/Card/index.d.ts +12 -2
  52. package/dist/components/Card/index.d.ts.map +1 -1
  53. package/dist/components/Card/index.js +8 -0
  54. package/dist/components/Chart/Chart.module.scss.cjs +15 -15
  55. package/dist/components/Chart/Chart.module.scss.js +15 -15
  56. package/dist/components/Chart/index.d.ts +7 -7
  57. package/dist/components/Chart/index.d.ts.map +1 -1
  58. package/dist/components/Checkbox/Checkbox.module.scss.cjs +9 -15
  59. package/dist/components/Checkbox/Checkbox.module.scss.js +9 -15
  60. package/dist/components/Checkbox/index.cjs +6 -8
  61. package/dist/components/Checkbox/index.d.ts.map +1 -1
  62. package/dist/components/Checkbox/index.js +6 -8
  63. package/dist/components/Chip/Chip.module.scss.cjs +15 -15
  64. package/dist/components/Chip/Chip.module.scss.js +15 -15
  65. package/dist/components/Chip/index.cjs +6 -6
  66. package/dist/components/Chip/index.d.ts +1 -1
  67. package/dist/components/Chip/index.js +4 -4
  68. package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +27 -24
  69. package/dist/components/CodeBlock/CodeBlock.module.scss.js +27 -24
  70. package/dist/components/CodeBlock/css-variables-theme.cjs +98 -0
  71. package/dist/components/CodeBlock/css-variables-theme.d.ts +27 -0
  72. package/dist/components/CodeBlock/css-variables-theme.d.ts.map +1 -0
  73. package/dist/components/CodeBlock/css-variables-theme.js +98 -0
  74. package/dist/components/CodeBlock/index.d.ts +17 -3
  75. package/dist/components/CodeBlock/index.d.ts.map +1 -1
  76. package/dist/components/Collapsible/Collapsible.module.scss.cjs +9 -12
  77. package/dist/components/Collapsible/Collapsible.module.scss.js +9 -12
  78. package/dist/components/Collapsible/index.cjs +3 -2
  79. package/dist/components/Collapsible/index.d.ts +3 -3
  80. package/dist/components/Collapsible/index.d.ts.map +1 -1
  81. package/dist/components/Collapsible/index.js +3 -2
  82. package/dist/components/ColorPicker/ColorPicker.module.scss.cjs +16 -16
  83. package/dist/components/ColorPicker/ColorPicker.module.scss.js +16 -16
  84. package/dist/components/ColorPicker/index.d.ts.map +1 -1
  85. package/dist/components/Combobox/Combobox.module.scss.cjs +21 -27
  86. package/dist/components/Combobox/Combobox.module.scss.js +21 -27
  87. package/dist/components/Combobox/index.cjs +21 -5
  88. package/dist/components/Combobox/index.d.ts.map +1 -1
  89. package/dist/components/Combobox/index.js +21 -5
  90. package/dist/components/Command/Command.module.scss.cjs +11 -11
  91. package/dist/components/Command/Command.module.scss.js +11 -11
  92. package/dist/components/Command/index.cjs +26 -15
  93. package/dist/components/Command/index.d.ts +2 -2
  94. package/dist/components/Command/index.d.ts.map +1 -1
  95. package/dist/components/Command/index.js +26 -15
  96. package/dist/components/ConversationList/ConversationList.module.scss.cjs +11 -14
  97. package/dist/components/ConversationList/ConversationList.module.scss.js +11 -14
  98. package/dist/components/ConversationList/index.cjs +40 -44
  99. package/dist/components/ConversationList/index.d.ts +3 -3
  100. package/dist/components/ConversationList/index.d.ts.map +1 -1
  101. package/dist/components/ConversationList/index.js +40 -44
  102. package/dist/components/DataTable/DataTable.icons.cjs +6 -33
  103. package/dist/components/DataTable/DataTable.icons.d.ts.map +1 -1
  104. package/dist/components/DataTable/DataTable.icons.js +6 -33
  105. package/dist/components/DataTable/DataTable.module.scss.cjs +32 -56
  106. package/dist/components/DataTable/DataTable.module.scss.js +32 -56
  107. package/dist/components/DataTable/index.d.ts +5 -4
  108. package/dist/components/DataTable/index.d.ts.map +1 -1
  109. package/dist/components/DatePicker/DatePicker.module.scss.cjs +33 -33
  110. package/dist/components/DatePicker/DatePicker.module.scss.js +33 -33
  111. package/dist/components/DatePicker/index.d.ts.map +1 -1
  112. package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
  113. package/dist/components/Dialog/Dialog.module.scss.js +14 -14
  114. package/dist/components/Dialog/index.cjs +11 -14
  115. package/dist/components/Dialog/index.d.ts +7 -7
  116. package/dist/components/Dialog/index.d.ts.map +1 -1
  117. package/dist/components/Dialog/index.js +11 -14
  118. package/dist/components/Drawer/Drawer.module.scss.cjs +31 -28
  119. package/dist/components/Drawer/Drawer.module.scss.js +31 -28
  120. package/dist/components/Drawer/index.cjs +1 -1
  121. package/dist/components/Drawer/index.js +1 -1
  122. package/dist/components/Editor/Editor.module.scss.cjs +23 -23
  123. package/dist/components/Editor/Editor.module.scss.js +23 -23
  124. package/dist/components/Editor/index.d.ts +10 -10
  125. package/dist/components/Editor/index.d.ts.map +1 -1
  126. package/dist/components/EmptyState/EmptyState.module.scss.cjs +15 -12
  127. package/dist/components/EmptyState/EmptyState.module.scss.js +15 -12
  128. package/dist/components/EmptyState/index.cjs +8 -6
  129. package/dist/components/EmptyState/index.d.ts +9 -4
  130. package/dist/components/EmptyState/index.d.ts.map +1 -1
  131. package/dist/components/EmptyState/index.js +8 -6
  132. package/dist/components/Field/Field.module.scss.cjs +8 -5
  133. package/dist/components/Field/Field.module.scss.js +8 -5
  134. package/dist/components/Field/index.cjs +18 -1
  135. package/dist/components/Field/index.d.ts +9 -2
  136. package/dist/components/Field/index.d.ts.map +1 -1
  137. package/dist/components/Field/index.js +18 -1
  138. package/dist/components/Fieldset/Fieldset.module.scss.cjs +3 -3
  139. package/dist/components/Fieldset/Fieldset.module.scss.js +3 -3
  140. package/dist/components/Form/Form.module.scss.cjs +5 -2
  141. package/dist/components/Form/Form.module.scss.js +5 -2
  142. package/dist/components/Form/index.cjs +6 -1
  143. package/dist/components/Form/index.d.ts +8 -3
  144. package/dist/components/Form/index.d.ts.map +1 -1
  145. package/dist/components/Form/index.js +6 -1
  146. package/dist/components/Grid/Grid.module.scss.cjs +54 -72
  147. package/dist/components/Grid/Grid.module.scss.js +54 -72
  148. package/dist/components/Grid/index.cjs +57 -77
  149. package/dist/components/Grid/index.d.ts +11 -11
  150. package/dist/components/Grid/index.d.ts.map +1 -1
  151. package/dist/components/Grid/index.js +57 -77
  152. package/dist/components/Header/Header.module.scss.cjs +33 -33
  153. package/dist/components/Header/Header.module.scss.js +33 -33
  154. package/dist/components/Header/index.cjs +18 -38
  155. package/dist/components/Header/index.d.ts +15 -11
  156. package/dist/components/Header/index.d.ts.map +1 -1
  157. package/dist/components/Header/index.js +18 -38
  158. package/dist/components/Icon/Icon.module.scss.cjs +29 -8
  159. package/dist/components/Icon/Icon.module.scss.js +30 -9
  160. package/dist/components/Icon/index.cjs +30 -48
  161. package/dist/components/Icon/index.d.ts +6 -6
  162. package/dist/components/Icon/index.d.ts.map +1 -1
  163. package/dist/components/Icon/index.js +30 -48
  164. package/dist/components/IconButton/IconButton.module.scss.cjs +8 -8
  165. package/dist/components/IconButton/IconButton.module.scss.js +8 -8
  166. package/dist/components/IconButton/index.cjs +2 -1
  167. package/dist/components/IconButton/index.d.ts.map +1 -1
  168. package/dist/components/IconButton/index.js +2 -1
  169. package/dist/components/Image/Image.module.scss.cjs +27 -27
  170. package/dist/components/Image/Image.module.scss.js +27 -27
  171. package/dist/components/Input/Input.module.scss.cjs +19 -25
  172. package/dist/components/Input/Input.module.scss.js +19 -25
  173. package/dist/components/Input/index.cjs +1 -2
  174. package/dist/components/Input/index.d.ts.map +1 -1
  175. package/dist/components/Input/index.js +1 -2
  176. package/dist/components/Link/Link.module.scss.cjs +14 -10
  177. package/dist/components/Link/Link.module.scss.js +14 -10
  178. package/dist/components/Link/index.d.ts +1 -1
  179. package/dist/components/Link/index.d.ts.map +1 -1
  180. package/dist/components/List/List.module.scss.cjs +19 -19
  181. package/dist/components/List/List.module.scss.js +19 -19
  182. package/dist/components/List/index.cjs +4 -7
  183. package/dist/components/List/index.d.ts.map +1 -1
  184. package/dist/components/List/index.js +4 -7
  185. package/dist/components/Listbox/Listbox.module.scss.cjs +9 -9
  186. package/dist/components/Listbox/Listbox.module.scss.js +9 -9
  187. package/dist/components/Loading/Loading.module.scss.cjs +34 -34
  188. package/dist/components/Loading/Loading.module.scss.js +34 -34
  189. package/dist/components/Loading/index.cjs +39 -67
  190. package/dist/components/Loading/index.d.ts +6 -6
  191. package/dist/components/Loading/index.d.ts.map +1 -1
  192. package/dist/components/Loading/index.js +39 -67
  193. package/dist/components/Main/Main.module.scss.cjs +7 -7
  194. package/dist/components/Main/Main.module.scss.js +7 -7
  195. package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
  196. package/dist/components/Markdown/Markdown.module.scss.js +1 -1
  197. package/dist/components/Markdown/index.d.ts +2 -2
  198. package/dist/components/Markdown/index.d.ts.map +1 -1
  199. package/dist/components/Menu/Menu.module.scss.cjs +16 -16
  200. package/dist/components/Menu/Menu.module.scss.js +16 -16
  201. package/dist/components/Menu/index.cjs +19 -61
  202. package/dist/components/Menu/index.d.ts +10 -10
  203. package/dist/components/Menu/index.d.ts.map +1 -1
  204. package/dist/components/Menu/index.js +19 -61
  205. package/dist/components/Message/Message.module.scss.cjs +18 -21
  206. package/dist/components/Message/Message.module.scss.js +18 -21
  207. package/dist/components/Message/index.cjs +15 -2
  208. package/dist/components/Message/index.d.ts.map +1 -1
  209. package/dist/components/Message/index.js +15 -2
  210. package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +34 -31
  211. package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +34 -31
  212. package/dist/components/NavigationMenu/index.cjs +32 -15
  213. package/dist/components/NavigationMenu/index.d.ts +12 -6
  214. package/dist/components/NavigationMenu/index.d.ts.map +1 -1
  215. package/dist/components/NavigationMenu/index.js +32 -15
  216. package/dist/components/Pagination/Pagination.module.scss.cjs +18 -9
  217. package/dist/components/Pagination/Pagination.module.scss.js +19 -10
  218. package/dist/components/Pagination/index.cjs +5 -2
  219. package/dist/components/Pagination/index.d.ts +3 -1
  220. package/dist/components/Pagination/index.d.ts.map +1 -1
  221. package/dist/components/Pagination/index.js +5 -2
  222. package/dist/components/Popover/Popover.module.scss.cjs +10 -10
  223. package/dist/components/Popover/Popover.module.scss.js +10 -10
  224. package/dist/components/Progress/Progress.module.scss.cjs +29 -32
  225. package/dist/components/Progress/Progress.module.scss.js +29 -32
  226. package/dist/components/Progress/geometry.cjs +30 -0
  227. package/dist/components/Progress/geometry.d.ts +8 -0
  228. package/dist/components/Progress/geometry.d.ts.map +1 -0
  229. package/dist/components/Progress/geometry.js +30 -0
  230. package/dist/components/Progress/index.cjs +40 -29
  231. package/dist/components/Progress/index.d.ts +4 -3
  232. package/dist/components/Progress/index.d.ts.map +1 -1
  233. package/dist/components/Progress/index.js +40 -29
  234. package/dist/components/Prompt/Prompt.module.scss.cjs +29 -29
  235. package/dist/components/Prompt/Prompt.module.scss.js +29 -29
  236. package/dist/components/Prompt/index.cjs +5 -4
  237. package/dist/components/Prompt/index.d.ts.map +1 -1
  238. package/dist/components/Prompt/index.js +5 -4
  239. package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +15 -21
  240. package/dist/components/RadioGroup/RadioGroup.module.scss.js +15 -21
  241. package/dist/components/RadioGroup/index.cjs +7 -6
  242. package/dist/components/RadioGroup/index.d.ts.map +1 -1
  243. package/dist/components/RadioGroup/index.js +7 -6
  244. package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +7 -22
  245. package/dist/components/ScrollArea/ScrollArea.module.scss.js +7 -22
  246. package/dist/components/ScrollArea/index.cjs +66 -42
  247. package/dist/components/ScrollArea/index.d.ts +6 -5
  248. package/dist/components/ScrollArea/index.d.ts.map +1 -1
  249. package/dist/components/ScrollArea/index.js +66 -42
  250. package/dist/components/ScrollArea/scroll-state.cjs +58 -0
  251. package/dist/components/ScrollArea/scroll-state.d.ts +16 -0
  252. package/dist/components/ScrollArea/scroll-state.d.ts.map +1 -0
  253. package/dist/components/ScrollArea/scroll-state.js +58 -0
  254. package/dist/components/Select/Select.module.scss.cjs +21 -21
  255. package/dist/components/Select/Select.module.scss.js +21 -21
  256. package/dist/components/Select/index.cjs +3 -2
  257. package/dist/components/Select/index.d.ts.map +1 -1
  258. package/dist/components/Select/index.js +3 -2
  259. package/dist/components/Separator/Separator.module.scss.cjs +13 -10
  260. package/dist/components/Separator/Separator.module.scss.js +13 -10
  261. package/dist/components/Separator/index.cjs +37 -38
  262. package/dist/components/Separator/index.d.ts +4 -4
  263. package/dist/components/Separator/index.d.ts.map +1 -1
  264. package/dist/components/Separator/index.js +37 -38
  265. package/dist/components/Sidebar/Sidebar.module.scss.cjs +43 -43
  266. package/dist/components/Sidebar/Sidebar.module.scss.js +43 -43
  267. package/dist/components/Sidebar/index.cjs +17 -38
  268. package/dist/components/Sidebar/index.d.ts +23 -18
  269. package/dist/components/Sidebar/index.d.ts.map +1 -1
  270. package/dist/components/Sidebar/index.js +17 -38
  271. package/dist/components/Skeleton/Skeleton.module.scss.cjs +56 -40
  272. package/dist/components/Skeleton/Skeleton.module.scss.js +56 -40
  273. package/dist/components/Skeleton/index.cjs +41 -55
  274. package/dist/components/Skeleton/index.d.ts +7 -7
  275. package/dist/components/Skeleton/index.d.ts.map +1 -1
  276. package/dist/components/Skeleton/index.js +41 -55
  277. package/dist/components/Slider/Slider.module.scss.cjs +12 -12
  278. package/dist/components/Slider/Slider.module.scss.js +12 -12
  279. package/dist/components/Stack/Stack.module.scss.cjs +25 -45
  280. package/dist/components/Stack/Stack.module.scss.js +25 -45
  281. package/dist/components/Stack/index.cjs +106 -101
  282. package/dist/components/Stack/index.d.ts +7 -7
  283. package/dist/components/Stack/index.d.ts.map +1 -1
  284. package/dist/components/Stack/index.js +106 -101
  285. package/dist/components/Switch/Switch.module.scss.cjs +32 -0
  286. package/dist/components/Switch/Switch.module.scss.js +32 -0
  287. package/dist/components/{Toggle → Switch}/index.cjs +9 -14
  288. package/dist/components/Switch/index.d.ts +37 -1
  289. package/dist/components/Switch/index.d.ts.map +1 -1
  290. package/dist/components/{Toggle → Switch}/index.js +5 -10
  291. package/dist/components/Table/Table.module.scss.cjs +21 -30
  292. package/dist/components/Table/Table.module.scss.js +21 -30
  293. package/dist/components/Table/index.d.ts +6 -5
  294. package/dist/components/Table/index.d.ts.map +1 -1
  295. package/dist/components/TableOfContents/TableOfContents.module.scss.cjs +15 -15
  296. package/dist/components/TableOfContents/TableOfContents.module.scss.js +15 -15
  297. package/dist/components/TableOfContents/index.cjs +13 -9
  298. package/dist/components/TableOfContents/index.d.ts +5 -3
  299. package/dist/components/TableOfContents/index.d.ts.map +1 -1
  300. package/dist/components/TableOfContents/index.js +13 -9
  301. package/dist/components/Tabs/Tabs.module.scss.cjs +12 -12
  302. package/dist/components/Tabs/Tabs.module.scss.js +12 -12
  303. package/dist/components/Tabs/index.cjs +28 -8
  304. package/dist/components/Tabs/index.d.ts.map +1 -1
  305. package/dist/components/Tabs/index.js +28 -8
  306. package/dist/components/Text/Text.module.scss.cjs +105 -57
  307. package/dist/components/Text/Text.module.scss.js +105 -57
  308. package/dist/components/Text/index.cjs +49 -33
  309. package/dist/components/Text/index.d.ts +30 -19
  310. package/dist/components/Text/index.d.ts.map +1 -1
  311. package/dist/components/Text/index.js +49 -33
  312. package/dist/components/Textarea/Textarea.module.scss.cjs +26 -23
  313. package/dist/components/Textarea/Textarea.module.scss.js +26 -23
  314. package/dist/components/Textarea/index.cjs +5 -10
  315. package/dist/components/Textarea/index.d.ts.map +1 -1
  316. package/dist/components/Textarea/index.js +5 -10
  317. package/dist/components/Theme/context.cjs +39 -0
  318. package/dist/components/Theme/context.d.ts +21 -0
  319. package/dist/components/Theme/context.d.ts.map +1 -0
  320. package/dist/components/Theme/context.js +22 -0
  321. package/dist/components/Theme/index.cjs +16 -210
  322. package/dist/components/Theme/index.d.ts +4 -37
  323. package/dist/components/Theme/index.d.ts.map +1 -1
  324. package/dist/components/Theme/index.js +11 -205
  325. package/dist/components/{Theme → ThemeToggle}/ThemeToggle.module.scss.cjs +9 -6
  326. package/dist/components/ThemeToggle/ThemeToggle.module.scss.js +26 -0
  327. package/dist/components/ThemeToggle/index.cjs +140 -0
  328. package/dist/components/ThemeToggle/index.d.ts +26 -0
  329. package/dist/components/ThemeToggle/index.d.ts.map +1 -0
  330. package/dist/components/ThemeToggle/index.js +140 -0
  331. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +13 -13
  332. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +13 -13
  333. package/dist/components/ThinkingIndicator/index.cjs +34 -41
  334. package/dist/components/ThinkingIndicator/index.d.ts +4 -4
  335. package/dist/components/ThinkingIndicator/index.d.ts.map +1 -1
  336. package/dist/components/ThinkingIndicator/index.js +34 -41
  337. package/dist/components/Toast/Toast.module.scss.cjs +20 -20
  338. package/dist/components/Toast/Toast.module.scss.js +20 -20
  339. package/dist/components/Toggle/index.d.ts +2 -42
  340. package/dist/components/Toggle/index.d.ts.map +1 -1
  341. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +20 -20
  342. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +20 -20
  343. package/dist/components/ToggleGroup/index.cjs +3 -2
  344. package/dist/components/ToggleGroup/index.d.ts +2 -1
  345. package/dist/components/ToggleGroup/index.d.ts.map +1 -1
  346. package/dist/components/ToggleGroup/index.js +3 -2
  347. package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
  348. package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
  349. package/dist/components/Tooltip/index.cjs +24 -40
  350. package/dist/components/Tooltip/index.d.ts +4 -4
  351. package/dist/components/Tooltip/index.d.ts.map +1 -1
  352. package/dist/components/Tooltip/index.js +24 -40
  353. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.cjs +1 -1
  354. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.js +1 -1
  355. package/dist/components/VisuallyHidden/index.d.ts +2 -2
  356. package/dist/data-table.cjs +14 -10
  357. package/dist/data-table.js +14 -10
  358. package/dist/datepicker.cjs +5 -3
  359. package/dist/datepicker.js +5 -3
  360. package/dist/editor.cjs +68 -28
  361. package/dist/editor.js +68 -28
  362. package/dist/index.cjs +101 -99
  363. package/dist/index.d.ts +3 -3
  364. package/dist/index.d.ts.map +1 -1
  365. package/dist/index.js +6 -4
  366. package/dist/markdown.cjs +21 -29
  367. package/dist/markdown.js +22 -30
  368. package/dist/measurements/generated.cjs +304 -0
  369. package/dist/measurements/generated.d.ts +268 -0
  370. package/dist/measurements/generated.d.ts.map +1 -0
  371. package/dist/measurements/generated.js +304 -0
  372. package/dist/measurements/index.d.ts +2 -0
  373. package/dist/measurements/index.d.ts.map +1 -0
  374. package/dist/measurements.cjs +6 -0
  375. package/dist/measurements.js +6 -0
  376. package/dist/recipes/popup.cjs +14 -0
  377. package/dist/recipes/popup.d.ts +4 -0
  378. package/dist/recipes/popup.d.ts.map +1 -0
  379. package/dist/recipes/popup.js +14 -0
  380. package/dist/recipes/table-chrome.cjs +18 -0
  381. package/dist/recipes/table-chrome.d.ts +10 -0
  382. package/dist/recipes/table-chrome.d.ts.map +1 -0
  383. package/dist/recipes/table-chrome.js +18 -0
  384. package/dist/table.cjs +5 -2
  385. package/dist/table.js +5 -2
  386. package/dist/utils/a11y.cjs +5 -2
  387. package/dist/utils/a11y.d.ts +5 -5
  388. package/dist/utils/a11y.d.ts.map +1 -1
  389. package/dist/utils/a11y.js +5 -2
  390. package/dist/utils/canonical-stamp.cjs +2 -8
  391. package/dist/utils/canonical-stamp.d.ts.map +1 -1
  392. package/dist/utils/canonical-stamp.js +1 -7
  393. package/dist/utils/css-warning.cjs +1 -1
  394. package/dist/utils/css-warning.js +1 -1
  395. package/dist/utils/env.cjs +17 -0
  396. package/dist/utils/env.d.ts +3 -0
  397. package/dist/utils/env.d.ts.map +1 -0
  398. package/dist/utils/env.js +17 -0
  399. package/dist/utils/keyboard-shortcuts.cjs +3 -10
  400. package/dist/utils/keyboard-shortcuts.d.ts +4 -4
  401. package/dist/utils/keyboard-shortcuts.d.ts.map +1 -1
  402. package/dist/utils/keyboard-shortcuts.js +3 -10
  403. package/dist/utils/layout-spacing.cjs +27 -0
  404. package/dist/utils/layout-spacing.d.ts +5 -0
  405. package/dist/utils/layout-spacing.d.ts.map +1 -0
  406. package/dist/utils/layout-spacing.js +27 -0
  407. package/dist/utils/seed-derivation.cjs +14 -48
  408. package/dist/utils/seed-derivation.d.ts +4 -3
  409. package/dist/utils/seed-derivation.d.ts.map +1 -1
  410. package/dist/utils/seed-derivation.js +14 -48
  411. package/dist/utils/theme-presets.cjs +1 -0
  412. package/dist/utils/theme-presets.d.ts +3 -2
  413. package/dist/utils/theme-presets.d.ts.map +1 -1
  414. package/dist/utils/theme-presets.js +1 -0
  415. package/fragments.json +1 -1
  416. package/package.json +25 -4
  417. package/src/assets/fragments-logo.tsx +2 -2
  418. package/src/assets/fragments-wordmark.tsx +4 -2
  419. package/src/components/Accordion/Accordion.contract.json +24 -48
  420. package/src/components/Accordion/Accordion.module.scss +31 -52
  421. package/src/components/Alert/Alert.contract.json +37 -53
  422. package/src/components/Alert/Alert.module.scss +52 -44
  423. package/src/components/Alert/index.tsx +55 -29
  424. package/src/components/AppShell/AppShell.contract.json +34 -51
  425. package/src/components/AppShell/AppShell.module.scss +59 -43
  426. package/src/components/AppShell/index.tsx +8 -4
  427. package/src/components/Avatar/Avatar.contract.json +31 -48
  428. package/src/components/Avatar/Avatar.module.scss +25 -60
  429. package/src/components/Avatar/index.tsx +152 -146
  430. package/src/components/Badge/Badge.contract.json +37 -42
  431. package/src/components/Badge/Badge.module.scss +59 -47
  432. package/src/components/BentoGrid/BentoGrid.contract.json +21 -45
  433. package/src/components/BentoGrid/BentoGrid.module.scss +11 -32
  434. package/src/components/Box/Box.contract.json +40 -148
  435. package/src/components/Box/Box.module.scss +253 -81
  436. package/src/components/Box/index.tsx +92 -99
  437. package/src/components/Breadcrumbs/Breadcrumbs.contract.json +21 -34
  438. package/src/components/Breadcrumbs/Breadcrumbs.module.scss +19 -15
  439. package/src/components/Button/Button.module.scss +60 -64
  440. package/src/components/ButtonGroup/ButtonGroup.contract.json +32 -47
  441. package/src/components/ButtonGroup/ButtonGroup.module.scss +5 -5
  442. package/src/components/Card/Card.consumer-fixture.module.scss +8 -0
  443. package/src/components/Card/Card.module.scss +284 -167
  444. package/src/components/Card/index.tsx +21 -2
  445. package/src/components/Chart/Chart.contract.json +21 -29
  446. package/src/components/Chart/Chart.module.scss +28 -29
  447. package/src/components/Chart/index.tsx +72 -55
  448. package/src/components/Checkbox/Checkbox.contract.json +24 -24
  449. package/src/components/Checkbox/Checkbox.module.scss +75 -87
  450. package/src/components/Checkbox/index.tsx +8 -11
  451. package/src/components/Chip/Chip.contract.json +36 -42
  452. package/src/components/Chip/Chip.module.scss +25 -36
  453. package/src/components/Chip/index.tsx +5 -5
  454. package/src/components/CodeBlock/CodeBlock.contract.json +46 -76
  455. package/src/components/CodeBlock/CodeBlock.module.scss +129 -217
  456. package/src/components/CodeBlock/css-variables-theme.ts +102 -0
  457. package/src/components/CodeBlock/index.tsx +91 -35
  458. package/src/components/Collapsible/Collapsible.contract.json +21 -36
  459. package/src/components/Collapsible/Collapsible.module.scss +29 -63
  460. package/src/components/Collapsible/index.tsx +22 -26
  461. package/src/components/ColorPicker/ColorPicker.contract.json +29 -48
  462. package/src/components/ColorPicker/ColorPicker.module.scss +54 -33
  463. package/src/components/ColorPicker/index.tsx +7 -2
  464. package/src/components/Combobox/Combobox.contract.json +36 -37
  465. package/src/components/Combobox/Combobox.module.scss +61 -74
  466. package/src/components/Combobox/index.tsx +34 -6
  467. package/src/components/Command/Command.contract.json +21 -43
  468. package/src/components/Command/Command.module.scss +47 -77
  469. package/src/components/Command/index.tsx +58 -47
  470. package/src/components/ConversationList/ConversationList.contract.json +27 -32
  471. package/src/components/ConversationList/ConversationList.module.scss +20 -78
  472. package/src/components/ConversationList/index.tsx +55 -59
  473. package/src/components/DataTable/DataTable.icons.tsx +4 -21
  474. package/src/components/DataTable/DataTable.module.scss +81 -217
  475. package/src/components/DataTable/index.tsx +28 -32
  476. package/src/components/DatePicker/DatePicker.contract.json +27 -28
  477. package/src/components/DatePicker/DatePicker.module.scss +66 -38
  478. package/src/components/DatePicker/index.tsx +7 -3
  479. package/src/components/Dialog/Dialog.module.scss +45 -69
  480. package/src/components/Dialog/index.tsx +47 -37
  481. package/src/components/Drawer/Drawer.contract.json +22 -36
  482. package/src/components/Drawer/Drawer.module.scss +93 -99
  483. package/src/components/Drawer/index.tsx +1 -1
  484. package/src/components/Editor/Editor.contract.json +31 -48
  485. package/src/components/Editor/Editor.module.scss +137 -220
  486. package/src/components/Editor/index.tsx +240 -179
  487. package/src/components/EmptyState/EmptyState.contract.json +31 -43
  488. package/src/components/EmptyState/EmptyState.module.scss +45 -84
  489. package/src/components/EmptyState/index.tsx +48 -23
  490. package/src/components/Field/Field.contract.json +28 -45
  491. package/src/components/Field/Field.module.scss +9 -11
  492. package/src/components/Field/index.tsx +31 -1
  493. package/src/components/Fieldset/Fieldset.contract.json +21 -38
  494. package/src/components/Fieldset/Fieldset.module.scss +23 -8
  495. package/src/components/Form/Form.contract.json +27 -40
  496. package/src/components/Form/Form.module.scss +9 -4
  497. package/src/components/Form/index.tsx +22 -7
  498. package/src/components/Grid/Grid.contract.json +28 -64
  499. package/src/components/Grid/Grid.module.scss +159 -63
  500. package/src/components/Grid/index.tsx +114 -133
  501. package/src/components/Header/Header.contract.json +31 -67
  502. package/src/components/Header/Header.module.scss +56 -48
  503. package/src/components/Header/index.tsx +134 -121
  504. package/src/components/Icon/Icon.contract.json +22 -62
  505. package/src/components/Icon/Icon.module.scss +16 -0
  506. package/src/components/Icon/index.tsx +74 -86
  507. package/src/components/IconButton/IconButton.contract.json +34 -18
  508. package/src/components/IconButton/IconButton.module.scss +15 -26
  509. package/src/components/IconButton/index.tsx +2 -1
  510. package/src/components/Image/Image.contract.json +23 -56
  511. package/src/components/Input/Input.contract.json +26 -32
  512. package/src/components/Input/Input.module.scss +69 -56
  513. package/src/components/Input/index.tsx +1 -2
  514. package/src/components/Link/Link.contract.json +32 -52
  515. package/src/components/Link/Link.module.scss +29 -13
  516. package/src/components/Link/index.tsx +1 -1
  517. package/src/components/List/List.contract.json +23 -52
  518. package/src/components/List/List.module.scss +16 -21
  519. package/src/components/List/index.tsx +4 -10
  520. package/src/components/Listbox/Listbox.contract.json +21 -37
  521. package/src/components/Listbox/Listbox.module.scss +26 -54
  522. package/src/components/Loading/Loading.contract.json +37 -61
  523. package/src/components/Loading/Loading.module.scss +33 -40
  524. package/src/components/Loading/index.tsx +68 -97
  525. package/src/components/Main/Main.contract.json +17 -9
  526. package/src/components/Main/Main.module.scss +3 -5
  527. package/src/components/Markdown/Markdown.contract.json +22 -43
  528. package/src/components/Markdown/Markdown.module.scss +72 -182
  529. package/src/components/Markdown/index.tsx +50 -51
  530. package/src/components/Menu/Menu.contract.json +25 -41
  531. package/src/components/Menu/Menu.module.scss +63 -133
  532. package/src/components/Menu/index.tsx +57 -89
  533. package/src/components/Message/Message.contract.json +29 -52
  534. package/src/components/Message/Message.module.scss +60 -143
  535. package/src/components/Message/index.tsx +16 -6
  536. package/src/components/NavigationMenu/NavigationMenu.contract.json +36 -45
  537. package/src/components/NavigationMenu/NavigationMenu.module.scss +123 -71
  538. package/src/components/NavigationMenu/index.tsx +105 -81
  539. package/src/components/Pagination/Pagination.contract.json +22 -40
  540. package/src/components/Pagination/Pagination.module.scss +34 -27
  541. package/src/components/Pagination/index.tsx +7 -2
  542. package/src/components/Popover/Popover.contract.json +24 -46
  543. package/src/components/Popover/Popover.module.scss +43 -78
  544. package/src/components/Progress/Progress.contract.json +32 -28
  545. package/src/components/Progress/Progress.module.scss +64 -43
  546. package/src/components/Progress/geometry.ts +41 -0
  547. package/src/components/Progress/index.tsx +44 -30
  548. package/src/components/Prompt/Prompt.contract.json +31 -47
  549. package/src/components/Prompt/Prompt.module.scss +58 -87
  550. package/src/components/Prompt/index.tsx +6 -5
  551. package/src/components/RadioGroup/RadioGroup.contract.json +23 -24
  552. package/src/components/RadioGroup/RadioGroup.module.scss +63 -83
  553. package/src/components/RadioGroup/index.tsx +7 -9
  554. package/src/components/ScrollArea/ScrollArea.contract.json +23 -40
  555. package/src/components/ScrollArea/ScrollArea.module.scss +123 -97
  556. package/src/components/ScrollArea/index.tsx +85 -67
  557. package/src/components/ScrollArea/scroll-state.ts +87 -0
  558. package/src/components/Select/Select.module.scss +55 -43
  559. package/src/components/Select/index.tsx +6 -2
  560. package/src/components/Separator/Separator.contract.json +24 -48
  561. package/src/components/Separator/Separator.module.scss +29 -19
  562. package/src/components/Separator/index.tsx +55 -51
  563. package/src/components/Sidebar/Sidebar.contract.json +42 -62
  564. package/src/components/Sidebar/Sidebar.module.scss +117 -106
  565. package/src/components/Sidebar/index.tsx +169 -162
  566. package/src/components/Skeleton/Skeleton.contract.json +28 -54
  567. package/src/components/Skeleton/Skeleton.module.scss +51 -34
  568. package/src/components/Skeleton/index.tsx +65 -72
  569. package/src/components/Slider/Slider.contract.json +27 -39
  570. package/src/components/Slider/Slider.module.scss +33 -27
  571. package/src/components/Stack/Stack.contract.json +29 -56
  572. package/src/components/Stack/Stack.module.scss +110 -38
  573. package/src/components/Stack/index.tsx +157 -127
  574. package/src/components/{Toggle/Toggle.contract.json → Switch/Switch.contract.json} +34 -47
  575. package/src/components/Switch/Switch.module.scss +255 -0
  576. package/src/components/{Toggle → Switch}/index.tsx +5 -21
  577. package/src/components/Table/Table.contract.json +28 -46
  578. package/src/components/Table/Table.module.scss +50 -129
  579. package/src/components/Table/index.tsx +13 -6
  580. package/src/components/TableOfContents/TableOfContents.contract.json +34 -21
  581. package/src/components/TableOfContents/TableOfContents.module.scss +35 -182
  582. package/src/components/TableOfContents/index.tsx +26 -9
  583. package/src/components/Tabs/Tabs.contract.json +24 -45
  584. package/src/components/Tabs/Tabs.module.scss +28 -23
  585. package/src/components/Tabs/index.tsx +17 -5
  586. package/src/components/Text/Text.contract.json +30 -72
  587. package/src/components/Text/Text.module.scss +43 -7
  588. package/src/components/Text/index.tsx +136 -63
  589. package/src/components/Textarea/Textarea.contract.json +25 -43
  590. package/src/components/Textarea/Textarea.module.scss +58 -40
  591. package/src/components/Textarea/index.tsx +5 -12
  592. package/src/components/Theme/Theme.contract.json +32 -51
  593. package/src/components/Theme/context.ts +42 -0
  594. package/src/components/Theme/index.tsx +16 -310
  595. package/src/components/ThemeToggle/ThemeToggle.module.scss +89 -0
  596. package/src/components/ThemeToggle/index.tsx +180 -0
  597. package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +23 -40
  598. package/src/components/ThinkingIndicator/ThinkingIndicator.module.scss +24 -19
  599. package/src/components/ThinkingIndicator/index.tsx +44 -54
  600. package/src/components/Toast/Toast.contract.json +35 -61
  601. package/src/components/Toast/Toast.module.scss +62 -139
  602. package/src/components/Toggle/index.ts +7 -0
  603. package/src/components/ToggleGroup/ToggleGroup.contract.json +40 -68
  604. package/src/components/ToggleGroup/ToggleGroup.module.scss +166 -89
  605. package/src/components/ToggleGroup/index.tsx +5 -3
  606. package/src/components/Tooltip/Tooltip.contract.json +31 -52
  607. package/src/components/Tooltip/Tooltip.module.scss +23 -39
  608. package/src/components/Tooltip/index.tsx +19 -24
  609. package/src/components/VisuallyHidden/VisuallyHidden.contract.json +22 -44
  610. package/src/components/VisuallyHidden/VisuallyHidden.module.scss +3 -0
  611. package/src/components/VisuallyHidden/index.tsx +5 -5
  612. package/src/index.ts +4 -3
  613. package/src/measurements/MeasurementTargets.module.scss +229 -0
  614. package/src/measurements/generated.ts +324 -0
  615. package/src/measurements/index.ts +8 -0
  616. package/src/measurements/measurements.json +368 -0
  617. package/src/recipes/_action.scss +138 -0
  618. package/src/recipes/_boolean-range.scss +116 -0
  619. package/src/recipes/_feedback.scss +171 -0
  620. package/src/recipes/_field.scss +102 -0
  621. package/src/recipes/_layout.scss +74 -0
  622. package/src/recipes/_navigation.scss +110 -0
  623. package/src/recipes/_overlay.scss +191 -0
  624. package/src/recipes/_popup.scss +102 -0
  625. package/src/recipes/_prose.scss +182 -0
  626. package/src/recipes/_representation.scss +193 -0
  627. package/src/recipes/_segmented.scss +26 -0
  628. package/src/recipes/_surface.scss +13 -0
  629. package/src/recipes/_table-chrome.scss +119 -0
  630. package/src/recipes/_target.scss +31 -0
  631. package/src/recipes/_typography.scss +38 -0
  632. package/src/recipes/popup.ts +12 -0
  633. package/src/recipes/table-chrome.ts +30 -0
  634. package/src/scss.d.ts +1 -1
  635. package/src/styles/globals.scss +21 -20
  636. package/src/tokens/_component-properties.scss +2 -2
  637. package/src/tokens/_computed.scss +14 -25
  638. package/src/tokens/_density.scss +41 -132
  639. package/src/tokens/_derive.scss +112 -210
  640. package/src/tokens/_measurements.catalog.generated.css +96 -0
  641. package/src/tokens/_measurements.generated.scss +617 -0
  642. package/src/tokens/_mixins.scss +7 -284
  643. package/src/tokens/_palettes.scss +39 -167
  644. package/src/tokens/_property-registrations.scss +96 -92
  645. package/src/tokens/_radius.scss +16 -70
  646. package/src/tokens/_seeds.scss +24 -23
  647. package/src/tokens/_variables.scss +338 -178
  648. package/src/utils/a11y.tsx +69 -69
  649. package/src/utils/aria.ts +3 -3
  650. package/src/utils/canonical-stamp.ts +2 -12
  651. package/src/utils/css-warning.ts +7 -7
  652. package/src/utils/env.ts +25 -0
  653. package/src/utils/keyboard-shortcuts.ts +131 -126
  654. package/src/utils/layout-spacing.ts +31 -0
  655. package/src/utils/seed-derivation.ts +144 -178
  656. package/src/utils/theme-presets.ts +58 -30
  657. package/dist/components/Theme/ThemeToggle.module.scss.js +0 -23
  658. package/dist/components/Toggle/Toggle.module.scss.cjs +0 -44
  659. package/dist/components/Toggle/Toggle.module.scss.js +0 -44
  660. package/src/components/Button/Button.contract.json +0 -218
  661. package/src/components/Card/Card.contract.json +0 -175
  662. package/src/components/DataTable/DataTable.contract.json +0 -302
  663. package/src/components/Dialog/Dialog.contract.json +0 -159
  664. package/src/components/Select/Select.contract.json +0 -259
  665. package/src/components/Switch/index.ts +0 -3
  666. package/src/components/Theme/ThemeToggle.module.scss +0 -91
  667. package/src/components/Toggle/Toggle.module.scss +0 -244
@@ -1,14 +1,9 @@
1
1
  {
2
2
  "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
3
  "name": "Textarea",
4
- "description": "Multi-line text input for longer form content",
5
- "category": "forms",
6
- "tags": [
7
- "input",
8
- "text",
9
- "form",
10
- "multiline"
11
- ],
4
+ "description": "Collects multi-line text for longer form content.",
5
+ "category": "inputs",
6
+ "tags": ["input", "text", "form", "multiline"],
12
7
  "status": "stable",
13
8
  "sourcePath": "src/components/Textarea/index.tsx",
14
9
  "exportName": "Textarea",
@@ -78,23 +73,14 @@
78
73
  "description": "Resize behavior",
79
74
  "default": "vertical",
80
75
  "required": false,
81
- "values": [
82
- "none",
83
- "vertical",
84
- "horizontal",
85
- "both"
86
- ]
76
+ "values": ["none", "vertical", "horizontal", "both"]
87
77
  },
88
78
  "size": {
89
79
  "type": "enum",
90
80
  "description": "Size variant",
91
81
  "default": "md",
92
82
  "required": false,
93
- "values": [
94
- "sm",
95
- "md",
96
- "lg"
97
- ]
83
+ "values": ["sm", "md", "lg"]
98
84
  },
99
85
  "disabled": {
100
86
  "type": "boolean",
@@ -209,61 +195,61 @@
209
195
  "Selecting from predefined options (use Select)"
210
196
  ],
211
197
  "guidelines": [
212
- "Set appropriate rows for expected content length",
213
- "Use placeholder to show example format",
214
- "Show character count when maxLength is set",
215
- "Consider auto-resize for better UX"
198
+ "Set rows to match the expected answer length",
199
+ "Placeholder shows an example, not the label",
200
+ "Pair maxLength with showCharCount so the limit is visible",
201
+ "Use resize=\"none\" only when the layout truly cannot flex"
216
202
  ],
217
203
  "accessibility": [
218
- "Always provide a visible label",
219
- "Use helperText for format hints",
220
- "Error messages should be descriptive"
204
+ "Give every textarea a visible label",
205
+ "Put format hints in helperText, not the placeholder",
206
+ "Error text says what to fix, not just that it failed"
221
207
  ]
222
208
  },
223
209
  "examples": [
224
210
  {
225
211
  "name": "Default",
226
- "description": "Basic textarea with label",
212
+ "description": "Three rows, draggable from the bottom-right corner.",
227
213
  "code": "<Textarea\n label=\"Description\"\n placeholder=\"Enter a description...\"\n/>"
228
214
  },
229
215
  {
230
216
  "name": "With Helper Text",
231
- "description": "Textarea with additional guidance",
217
+ "description": "Supporting text sits under the box.",
232
218
  "code": "<Textarea\n label=\"Bio\"\n placeholder=\"Tell us about yourself...\"\n helperText=\"Max 500 characters\"\n maxLength={500}\n/>"
233
219
  },
234
220
  {
235
221
  "name": "Error State",
236
- "description": "Textarea showing validation error",
222
+ "description": "Red border, and helperText becomes the reason.",
237
223
  "code": "<Textarea\n label=\"Comments\"\n placeholder=\"Add your comments...\"\n error\n helperText=\"This field is required\"\n/>"
238
224
  },
239
225
  {
240
226
  "name": "Disabled",
241
- "description": "Non-interactive textarea",
227
+ "description": "Dimmed and unfocusable.",
242
228
  "code": "<Textarea\n label=\"Notes\"\n placeholder=\"Cannot edit...\"\n disabled\n/>"
243
229
  },
244
230
  {
245
231
  "name": "Custom Rows",
246
- "description": "Textarea with more visible rows",
232
+ "description": "rows={6} doubles the visible height before scrolling.",
247
233
  "code": "<Textarea\n label=\"Long Description\"\n placeholder=\"Enter detailed information...\"\n rows={6}\n/>"
248
234
  },
249
235
  {
250
236
  "name": "Sizes",
251
- "description": "Available size variants",
237
+ "description": "Three heights: sm, md, lg.",
252
238
  "code": "<div style={{ display: 'flex', flexDirection: 'column', gap: '12px', maxWidth: '400px' }}>\n <Textarea label=\"Small\" size=\"sm\" placeholder=\"Small textarea\" />\n <Textarea label=\"Medium\" size=\"md\" placeholder=\"Medium textarea\" />\n <Textarea label=\"Large\" size=\"lg\" placeholder=\"Large textarea\" />\n</div>"
253
239
  },
254
240
  {
255
- "name": "With Root Props",
256
- "description": "Pass wrapper attributes/styling via rootProps",
257
- "code": "<Textarea\n label=\"Notes\"\n placeholder=\"Add notes...\"\n rootProps={{ 'data-demo': 'textarea-wrapper' }}\n/>"
241
+ "name": "Fixed Height",
242
+ "description": "resize=\"none\" removes the drag handle so the box stays put.",
243
+ "code": "<Textarea\n label=\"Notes\"\n placeholder=\"Add notes...\"\n resize=\"none\"\n/>"
258
244
  },
259
245
  {
260
246
  "name": "Success State",
261
- "description": "Textarea showing validated/success styling",
247
+ "description": "Green border confirms the value passed validation.",
262
248
  "code": "<Textarea\n label=\"Bio\"\n value=\"A short bio about myself.\"\n success\n helperText=\"Looks great!\"\n/>"
263
249
  },
264
250
  {
265
251
  "name": "With Character Counter",
266
- "description": "Textarea with character count and maxLength",
252
+ "description": "Live count against maxLength sits below the box.",
267
253
  "code": "<Textarea\n label=\"Bio\"\n placeholder=\"Tell us about yourself...\"\n maxLength={200}\n showCharCount\n/>"
268
254
  }
269
255
  ],
@@ -289,15 +275,11 @@
289
275
  "rootProps: HTMLAttributes<HTMLDivElement> - wrapper element props",
290
276
  "...native textarea attributes are supported (readOnly, autoComplete, maxLength, onKeyDown, etc.)"
291
277
  ],
292
- "a11yRules": [
293
- "A11Y_LABEL_REQUIRED"
294
- ]
278
+ "a11yRules": ["A11Y_LABEL_REQUIRED"]
295
279
  },
296
280
  "ai": {
297
281
  "compositionPattern": "compound",
298
- "subComponents": [
299
- "Root"
300
- ]
282
+ "subComponents": ["Root"]
301
283
  },
302
284
  "provenance": {
303
285
  "source": "migrated",
@@ -1,64 +1,85 @@
1
1
  @use "../../tokens/variables" as *;
2
2
  @use "../../tokens/mixins" as *;
3
+ @use "../../tokens/measurements.generated" as measurements;
4
+ @use "../../recipes/field";
5
+ @use "../../recipes/layout";
6
+ @use "../../recipes/typography";
3
7
 
4
- // Form field wrapper (label + helper + error)
5
- @include form-field-wrapper;
8
+ .wrapper {
9
+ @include field.wrapper;
10
+ }
11
+
12
+ .label {
13
+ @include field.label;
14
+ }
15
+
16
+ .required {
17
+ margin-inline-start: var(--fui-raw-space-2, #{measurements.raw-space(2)});
18
+ color: var(--fui-color-danger-text, $fui-color-danger-text);
19
+ }
20
+
21
+ .helper {
22
+ @include field.helper;
23
+ }
24
+
25
+ .helperError,
26
+ .errorMessage {
27
+ @include field.error;
28
+ }
6
29
 
7
30
  .textarea {
8
- @include text-base;
9
31
  @include interactive-base;
10
- @include field-shell;
32
+ @include field.shell;
11
33
 
12
34
  display: block;
13
35
  width: 100%;
14
- min-height: var(--fui-input-height, $fui-input-height);
15
- padding: var(--fui-space-2, $fui-space-2) var(--fui-space-3, $fui-space-3);
16
- line-height: var(--fui-line-height-normal, $fui-line-height-normal);
17
- font-family: inherit;
36
+ min-block-size: max(
37
+ var(--_fui-field-track),
38
+ calc(
39
+ var(--_fui-textarea-min-rows) * 1lh + 2 * var(--_fui-textarea-block-inset) + 2 *
40
+ var(--_fui-field-stroke)
41
+ )
42
+ );
43
+ max-block-size: calc(
44
+ var(--_fui-textarea-max-rows) * 1lh + 2 * var(--_fui-textarea-block-inset) + 2 *
45
+ var(--_fui-field-stroke)
46
+ );
47
+ padding-block: var(--_fui-textarea-block-inset);
18
48
 
19
49
  &::placeholder {
20
50
  color: var(--fui-text-tertiary, $fui-text-tertiary);
21
51
  }
22
52
 
23
53
  &:focus-visible {
24
- @include field-shell-focus;
54
+ @include field.focus-state;
25
55
  }
26
56
 
57
+ // Single-line: same track as Input — height lock, horizontal pad only.
27
58
  &[rows="1"] {
28
- height: var(--fui-input-height, $fui-input-height);
29
- min-height: var(--fui-input-height, $fui-input-height);
30
- padding-block: var(--fui-space-2, $fui-space-2);
59
+ block-size: var(--_fui-field-track);
60
+ min-block-size: var(--_fui-field-track);
61
+ padding-block: calc((var(--_fui-field-track) - 1lh - 2 * var(--_fui-field-stroke)) / 2);
31
62
  overflow-y: hidden;
32
63
  }
33
64
  }
34
65
 
35
66
  // Size variants
36
67
  .sm {
37
- min-height: var(--fui-input-height-sm, $fui-input-height-sm);
38
- padding: var(--fui-space-1, $fui-space-1) var(--fui-space-2, $fui-space-2);
39
- font-size: var(--fui-font-size-xs, $fui-font-size-xs);
68
+ @include field.size("sm");
40
69
 
41
- &[rows="1"] {
42
- height: var(--fui-input-height-sm, $fui-input-height-sm);
43
- min-height: var(--fui-input-height-sm, $fui-input-height-sm);
44
- padding-block: var(--fui-space-1, $fui-space-1);
45
- }
70
+ --_fui-textarea-block-inset: var(--fui-raw-space-6, #{measurements.raw-space(6)});
46
71
  }
47
72
 
48
73
  .md {
49
- // Default size
74
+ @include field.size("md");
75
+
76
+ --_fui-textarea-block-inset: var(--fui-raw-space-8, #{measurements.raw-space(8)});
50
77
  }
51
78
 
52
79
  .lg {
53
- min-height: var(--fui-input-height-lg, $fui-input-height-lg);
54
- padding: var(--fui-space-3, $fui-space-3) var(--fui-space-4, $fui-space-4);
55
- font-size: var(--fui-font-size-base, $fui-font-size-base);
80
+ @include field.size("lg");
56
81
 
57
- &[rows="1"] {
58
- height: var(--fui-input-height-lg, $fui-input-height-lg);
59
- min-height: var(--fui-input-height-lg, $fui-input-height-lg);
60
- padding-block: var(--fui-space-2, $fui-space-2);
61
- }
82
+ --_fui-textarea-block-inset: var(--fui-raw-space-10, #{measurements.raw-space(10)});
62
83
  }
63
84
 
64
85
  // Resize variants
@@ -81,7 +102,7 @@
81
102
  // Error state via aria-invalid attribute (replaces JS class toggle: `error && styles.error`)
82
103
  .error,
83
104
  .textarea[aria-invalid] {
84
- border-color: var(--fui-color-danger-text, $fui-color-danger-text);
105
+ @include field.invalid-state;
85
106
 
86
107
  &:focus-visible {
87
108
  border-color: var(--fui-color-danger-text, $fui-color-danger-text);
@@ -115,12 +136,8 @@
115
136
  display: flex;
116
137
  justify-content: space-between;
117
138
  align-items: baseline;
118
- gap: var(--fui-space-2, $fui-space-2);
119
- min-height: calc(
120
- var(--fui-font-size-xs, #{$fui-font-size-xs}) *
121
- var(--fui-line-height-normal, #{$fui-line-height-normal}) +
122
- var(--fui-space-1, #{$fui-space-1})
123
- );
139
+ gap: layout.gap("sm");
140
+ min-block-size: typography.line-height("caption");
124
141
 
125
142
  &:empty {
126
143
  display: none;
@@ -129,9 +146,10 @@
129
146
 
130
147
  // Character counter
131
148
  .charCount {
132
- @include helper-text;
133
- margin-top: var(--fui-space-1, $fui-space-1);
134
- margin-left: auto;
149
+ @include typography.role("caption");
150
+
151
+ margin-block-start: var(--fui-field-message-gap);
152
+ margin-inline-start: auto;
135
153
  font-family: var(--fui-font-mono, $fui-font-mono);
136
154
  white-space: nowrap;
137
155
  }
@@ -146,7 +164,7 @@
146
164
 
147
165
  @media (prefers-contrast: more) {
148
166
  .textarea {
149
- border-width: 2px;
167
+ border-width: var(--fui-stroke-default, 2px);
150
168
  border-color: var(--fui-text-primary, $fui-text-primary);
151
169
 
152
170
  &:focus-visible {
@@ -127,17 +127,10 @@ const TextareaRoot = React.forwardRef<HTMLTextAreaElement, TextareaProps>(functi
127
127
  .filter(Boolean)
128
128
  .join(" ");
129
129
 
130
- // Calculate min/max height based on rows: N text lines (line-height-normal)
131
- // plus the field's vertical padding (space-3 total 1.5rem at the 14px root).
132
- const rowLine = "var(--fui-line-height-normal, 1.5) * 1em";
133
- const rowPad = "var(--fui-space-3, 1.5rem)";
134
- const textareaInlineStyle: React.CSSProperties = {};
135
- if (minRows) {
136
- textareaInlineStyle.minHeight = `calc(${minRows} * ${rowLine} + ${rowPad})`;
137
- }
138
- if (maxRows) {
139
- textareaInlineStyle.maxHeight = `calc(${maxRows} * ${rowLine} + ${rowPad})`;
140
- }
130
+ const textareaInlineStyle = {
131
+ "--_fui-textarea-min-rows": minRows ?? 1,
132
+ "--_fui-textarea-max-rows": maxRows ?? 9999,
133
+ } as React.CSSProperties;
141
134
 
142
135
  return (
143
136
  <div
@@ -177,7 +170,7 @@ const TextareaRoot = React.forwardRef<HTMLTextAreaElement, TextareaProps>(functi
177
170
  onBlur={(e) => onBlur?.(e)}
178
171
  onFocus={(e) => onFocus?.(e)}
179
172
  className={textareaClasses}
180
- style={Object.keys(textareaInlineStyle).length > 0 ? textareaInlineStyle : undefined}
173
+ style={textareaInlineStyle}
181
174
  />
182
175
  <div className={styles.footer}>
183
176
  {helperText && (
@@ -1,15 +1,9 @@
1
1
  {
2
2
  "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
3
  "name": "Theme",
4
- "description": "Theme management system with provider, toggle, and hook pattern. Supports light, dark, and system modes with localStorage persistence.",
5
- "category": "navigation",
6
- "tags": [
7
- "theme",
8
- "dark-mode",
9
- "light-mode",
10
- "provider",
11
- "toggle"
12
- ],
4
+ "description": "Gives every component below it a light, dark, or system color mode, and remembers the choice.",
5
+ "category": "utilities",
6
+ "tags": ["theme", "dark-mode", "light-mode", "provider", "toggle"],
13
7
  "status": "stable",
14
8
  "sourcePath": "src/components/Theme/index.tsx",
15
9
  "exportName": "ThemeProvider",
@@ -20,7 +14,8 @@
20
14
  "mode: light|dark|system",
21
15
  "onModeChange: function",
22
16
  "storageKey: string (default: fui-theme)",
23
- "attribute: data-theme|class (default: data-theme)"
17
+ "attribute: data-theme|class (default: data-theme)",
18
+ "ThemeToggle appearance: group|icon (default: group)"
24
19
  ],
25
20
  "props": {
26
21
  "children": {
@@ -33,31 +28,19 @@
33
28
  "description": "Default theme mode for uncontrolled usage",
34
29
  "default": "system",
35
30
  "required": false,
36
- "values": [
37
- "light",
38
- "dark",
39
- "system"
40
- ]
31
+ "values": ["light", "dark", "system"]
41
32
  },
42
33
  "defaultTheme": {
43
34
  "type": "enum",
44
35
  "description": "",
45
36
  "required": false,
46
- "values": [
47
- "light",
48
- "dark",
49
- "system"
50
- ]
37
+ "values": ["light", "dark", "system"]
51
38
  },
52
39
  "mode": {
53
40
  "type": "enum",
54
41
  "description": "Controlled theme mode",
55
42
  "required": false,
56
- "values": [
57
- "light",
58
- "dark",
59
- "system"
60
- ]
43
+ "values": ["light", "dark", "system"]
61
44
  },
62
45
  "onModeChange": {
63
46
  "type": "function",
@@ -75,52 +58,51 @@
75
58
  "description": "How to apply theme to DOM",
76
59
  "default": "data-theme",
77
60
  "required": false,
78
- "values": [
79
- "data-theme",
80
- "class"
81
- ]
61
+ "values": ["data-theme", "class"]
82
62
  }
83
63
  },
84
64
  "usage": {
85
65
  "when": [
86
- "Providing theme context to an application",
87
- "Toggling between light and dark modes",
88
- "Respecting system color scheme preference",
89
- "Persisting theme preference across sessions"
66
+ "An app needs light and dark modes",
67
+ "The user's choice should survive a reload",
68
+ "You want to honour the OS setting by default"
90
69
  ],
91
70
  "whenNot": [
92
- "Simple one-off color changes (use CSS variables)",
93
- "Component-level theming (use component props)"
71
+ "Recoloring one component (use its props)",
72
+ "A single one-off color swap (use a CSS variable)"
94
73
  ],
95
74
  "guidelines": [
96
- "Wrap your app with ThemeProvider at the root level",
97
- "Use useTheme hook to access theme state in components",
98
- "ThemeToggle cycles through light → dark → system",
99
- "Use storageKey to customize localStorage key",
100
- "Set attribute=\"class\" if your CSS uses .dark class instead of data-theme",
101
- "ThemeToggle forwards DOM props (id, data-*, className, handlers) to the toggle group"
75
+ "ThemeProvider goes at the root, once",
76
+ "useTheme reads and sets the mode anywhere below it",
77
+ "storageKey renames the localStorage entry",
78
+ "attribute=\"class\" if your CSS keys off .dark instead of data-theme",
79
+ "appearance=\"icon\" for tight toolbars; the default group shows both modes"
102
80
  ],
103
81
  "accessibility": [
104
- "ThemeToggle button has accessible label indicating current mode",
105
- "Theme changes are applied via CSS custom properties for smooth transitions",
106
- "System preference is detected via prefers-color-scheme media query"
82
+ "The toggle's label names the mode it is in",
83
+ "System mode follows prefers-color-scheme"
107
84
  ]
108
85
  },
109
86
  "examples": [
110
87
  {
111
88
  "name": "Default",
112
- "description": "ThemeProvider with system default",
113
- "code": "<ThemeProvider defaultMode=\"system\">\n <ThemeDemo />\n</ThemeProvider>"
89
+ "description": "Wrap the app once; every token below resolves to the active mode.",
90
+ "code": "<ThemeProvider defaultMode=\"system\">\n <div\n style={{\n padding: '16px',\n borderRadius: '8px',\n background: 'var(--fui-bg-elevated)',\n color: 'var(--fui-text-primary)',\n }}\n >\n Everything inside follows the system color scheme.\n </div>\n</ThemeProvider>"
114
91
  },
115
92
  {
116
93
  "name": "With Toggle",
117
- "description": "ThemeProvider with toggle button",
94
+ "description": "The toggle cycles light, dark, then back to system.",
118
95
  "code": "<ThemeProvider defaultMode=\"light\">\n <div style={{ display: 'flex', alignItems: 'center', gap: '16px' }}>\n <ThemeToggle />\n <span>Click to cycle themes</span>\n </div>\n</ThemeProvider>"
119
96
  },
120
97
  {
121
98
  "name": "Toggle Sizes",
122
- "description": "ThemeToggle in different sizes",
99
+ "description": "Three sizes so the control fits whatever bar holds it.",
123
100
  "code": "<ThemeProvider defaultMode=\"light\">\n <div style={{ display: 'flex', alignItems: 'center', gap: '16px' }}>\n <ThemeToggle size=\"sm\" />\n <ThemeToggle size=\"md\" />\n <ThemeToggle size=\"lg\" />\n </div>\n</ThemeProvider>"
101
+ },
102
+ {
103
+ "name": "Icon Toggle",
104
+ "description": "A single icon button for toolbars with no room to spare.",
105
+ "code": "<ThemeProvider defaultMode=\"system\">\n <ThemeToggle appearance=\"icon\" aria-label=\"Switch color mode\" />\n</ThemeProvider>"
124
106
  }
125
107
  ],
126
108
  "relations": [
@@ -137,11 +119,10 @@
137
119
  "onModeChange: (mode) => void - change handler",
138
120
  "attribute: data-theme|class - DOM theme attribute",
139
121
  "ThemeToggle size: sm|md|lg - toggle button size",
122
+ "ThemeToggle appearance: group|icon - segmented or compact icon control (default: group)",
140
123
  "ThemeToggle forwards div DOM props to the button group root"
141
124
  ],
142
- "a11yRules": [
143
- "A11Y_TARGET_SIZE_MIN"
144
- ]
125
+ "a11yRules": ["A11Y_TARGET_SIZE_MIN"]
145
126
  },
146
127
  "provenance": {
147
128
  "source": "migrated",
@@ -0,0 +1,42 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+
5
+ export type ThemeMode = "light" | "dark" | "system";
6
+
7
+ export interface UseThemeReturn {
8
+ /** Current theme mode setting */
9
+ mode: ThemeMode;
10
+ /** Set the theme mode */
11
+ setMode: (mode: ThemeMode) => void;
12
+ /** Resolved mode (never 'system', always 'light' or 'dark') */
13
+ resolvedMode: "light" | "dark";
14
+ /** System preference detected from prefers-color-scheme */
15
+ systemPreference: "light" | "dark";
16
+ /** Toggle between light and dark (skips system) */
17
+ toggleMode: () => void;
18
+ }
19
+
20
+ export type ThemeContextValue = UseThemeReturn;
21
+
22
+ export const ThemeContext = React.createContext<ThemeContextValue | null>(null);
23
+
24
+ /**
25
+ * Hook to access theme context.
26
+ */
27
+ export function useTheme(): UseThemeReturn {
28
+ const context = React.useContext(ThemeContext);
29
+
30
+ if (!context) {
31
+ // Return safe defaults when used outside provider.
32
+ return {
33
+ mode: "system",
34
+ setMode: () => {},
35
+ resolvedMode: "light",
36
+ systemPreference: "light",
37
+ toggleMode: () => {},
38
+ };
39
+ }
40
+
41
+ return context;
42
+ }