@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,21 +1,16 @@
1
1
  {
2
2
  "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
3
  "name": "EmptyState",
4
- "description": "Placeholder for empty content areas. Provides context, guidance, and actions when no data is available.",
4
+ "description": "Explains why an area is blank and offers the next step.",
5
5
  "category": "feedback",
6
- "tags": [
7
- "empty",
8
- "placeholder",
9
- "no-data",
10
- "zero-state",
11
- "blank-slate"
12
- ],
6
+ "tags": ["empty", "placeholder", "no-data", "zero-state", "blank-slate"],
13
7
  "status": "stable",
14
8
  "sourcePath": "src/components/EmptyState/index.tsx",
15
9
  "exportName": "EmptyState",
16
10
  "propsSummary": [
17
11
  "children: node (required)",
18
- "size: sm|md|lg (default: md)"
12
+ "size: sm|md|lg (default: md)",
13
+ "variant: plain|outlined (default: plain)"
19
14
  ],
20
15
  "props": {
21
16
  "children": {
@@ -28,31 +23,33 @@
28
23
  "description": "Size variant",
29
24
  "default": "md",
30
25
  "required": false,
31
- "values": [
32
- "sm",
33
- "md",
34
- "lg"
35
- ]
26
+ "values": ["sm", "md", "lg"]
27
+ },
28
+ "variant": {
29
+ "type": "enum",
30
+ "description": "Frame style. `outlined` draws a dashed hairline around the reserved region; `plain` leaves framing to the surrounding surface.",
31
+ "default": "plain",
32
+ "required": false,
33
+ "values": ["plain", "outlined"]
36
34
  }
37
35
  },
38
36
  "usage": {
39
37
  "when": [
40
- "Empty lists, tables, or search results",
41
- "New user onboarding (no content yet)",
42
- "Filtered views with no matches",
43
- "Error states where content failed to load"
38
+ "Lists, tables, or search results with nothing to show",
39
+ "First-run screens before any content exists",
40
+ "Filtered views that matched nothing"
44
41
  ],
45
42
  "whenNot": [
46
- "Loading states (use skeleton or spinner)",
47
- "Error messages with retry (use Alert)",
48
- "Temporary messages (use Toast)"
43
+ "Content still loading (use Skeleton)",
44
+ "Failures that need a retry (use Alert)",
45
+ "Transient confirmations (use Toast)"
49
46
  ],
50
47
  "guidelines": [
51
- "Always explain why the area is empty",
52
- "Provide a clear action to resolve the empty state",
53
- "Use appropriate icons to reinforce the message",
54
- "Keep messaging positive and actionable",
55
- "EmptyState compound sub-components forward DOM props for ids, aria attributes, and handlers"
48
+ "Say why the area is empty, not just that it is",
49
+ "Give one clear action out of the state",
50
+ "Keep to two actions at most, primary first",
51
+ "Match the icon to the cause \u2014 search, inbox, folder",
52
+ "Use size=\"sm\" inline and size=\"lg\" for full-page states"
56
53
  ],
57
54
  "accessibility": [
58
55
  "Empty state content is accessible to screen readers",
@@ -62,27 +59,27 @@
62
59
  "examples": [
63
60
  {
64
61
  "name": "Default",
65
- "description": "Basic empty state with action",
62
+ "description": "First-run state: nothing exists yet, so offer the create action.",
66
63
  "code": "<EmptyState>\n <EmptyState.Icon><FolderIcon /></EmptyState.Icon>\n <EmptyState.Title>No projects yet</EmptyState.Title>\n <EmptyState.Description>Get started by creating your first project.</EmptyState.Description>\n <EmptyState.Actions>\n <Button>Create Project</Button>\n </EmptyState.Actions>\n</EmptyState>"
67
64
  },
68
65
  {
69
66
  "name": "No Results",
70
- "description": "Empty search results",
67
+ "description": "A filter or query matched nothing \u2014 offer a way back.",
71
68
  "code": "<EmptyState>\n <EmptyState.Icon><SearchIcon /></EmptyState.Icon>\n <EmptyState.Title>No results found</EmptyState.Title>\n <EmptyState.Description>Try adjusting your search terms or filters.</EmptyState.Description>\n <EmptyState.Actions>\n <Button variant=\"secondary\">Clear Filters</Button>\n </EmptyState.Actions>\n</EmptyState>"
72
69
  },
73
70
  {
74
71
  "name": "With Secondary Action",
75
- "description": "Empty state with two actions",
72
+ "description": "One primary action plus a quieter alternative.",
76
73
  "code": "<EmptyState>\n <EmptyState.Icon><InboxIcon /></EmptyState.Icon>\n <EmptyState.Title>Inbox is empty</EmptyState.Title>\n <EmptyState.Description>You have no new messages.</EmptyState.Description>\n <EmptyState.Actions>\n <Button>Compose Message</Button>\n <Button variant=\"secondary\">View Archive</Button>\n </EmptyState.Actions>\n</EmptyState>"
77
74
  },
78
75
  {
79
76
  "name": "Small",
80
- "description": "Compact empty state for inline use",
77
+ "description": "Compact size for inline panels; no icon, no action.",
81
78
  "code": "<EmptyState size=\"sm\">\n <EmptyState.Title>No items</EmptyState.Title>\n <EmptyState.Description>Add items to see them here.</EmptyState.Description>\n</EmptyState>"
82
79
  },
83
80
  {
84
81
  "name": "Large",
85
- "description": "Prominent empty state for full-page use",
82
+ "description": "Full-page size for a workspace or onboarding screen.",
86
83
  "code": "<EmptyState size=\"lg\">\n <EmptyState.Icon><FolderIcon /></EmptyState.Icon>\n <EmptyState.Title>Welcome to your workspace</EmptyState.Title>\n <EmptyState.Description>\n This is where your projects will appear. Create your first project to get started.\n </EmptyState.Description>\n <EmptyState.Actions>\n <Button>Create Your First Project</Button>\n </EmptyState.Actions>\n</EmptyState>"
87
84
  }
88
85
  ],
@@ -104,21 +101,12 @@
104
101
  "Sub-components: EmptyState.Icon, EmptyState.Title, EmptyState.Description, EmptyState.Actions",
105
102
  "Compound sub-components forward DOM props to their rendered elements"
106
103
  ],
107
- "a11yRules": [
108
- "A11Y_EMPTY_STATE_CONTENT"
109
- ]
104
+ "a11yRules": ["A11Y_EMPTY_STATE_CONTENT"]
110
105
  },
111
106
  "ai": {
112
107
  "compositionPattern": "compound",
113
- "subComponents": [
114
- "Icon",
115
- "Title",
116
- "Description",
117
- "Actions"
118
- ],
119
- "requiredChildren": [
120
- "Title"
121
- ],
108
+ "subComponents": ["Icon", "Title", "Description", "Actions"],
109
+ "requiredChildren": ["Title"],
122
110
  "commonPatterns": [
123
111
  "<EmptyState><EmptyState.Title>{title}</EmptyState.Title><EmptyState.Description>{description}</EmptyState.Description></EmptyState>",
124
112
  "<EmptyState><EmptyState.Icon>{icon}</EmptyState.Icon><EmptyState.Title>{title}</EmptyState.Title><EmptyState.Description>{description}</EmptyState.Description><EmptyState.Actions><Button>{action}</Button></EmptyState.Actions></EmptyState>"
@@ -1,88 +1,53 @@
1
- @use '../../tokens/variables' as *;
2
- @use '../../tokens/mixins' as *;
3
-
4
- // Local component tokens
5
- $fui-emptystate-width-sm: 240px !default;
6
- $fui-emptystate-width-md: 320px !default;
7
- $fui-emptystate-width-lg: 400px !default;
8
- $fui-emptystate-icon-sm: $fui-icon-xl !default; // 24px (--fui-icon-xl)
9
- $fui-emptystate-icon-md: $fui-icon-2xl !default; // 32px (--fui-icon-2xl)
10
- // 40px has no icon-ladder step; kept as a documented local between
11
- // icon-2xl (32) and space-6 (42) so the lg display glyph stays distinct.
12
- $fui-emptystate-icon-lg: 2.857rem !default; // 40px
1
+ @use "../../tokens/variables" as *;
2
+ @use "../../recipes/feedback" as feedback;
13
3
 
14
4
  .emptyState {
15
5
  display: flex;
16
6
  flex-direction: column;
17
7
  align-items: center;
8
+ gap: var(--fui-feedback-text-gap, var(--fui-raw-space-4, 4px));
18
9
  text-align: center;
19
10
  font-family: var(--fui-font-sans, $fui-font-sans);
20
11
  -webkit-font-smoothing: antialiased;
21
12
  -moz-osx-font-smoothing: grayscale;
22
- }
23
13
 
24
- // Size variants
25
- .sm {
26
- padding: var(--fui-space-6) var(--fui-space-4);
27
-
28
- .title {
29
- font-size: var(--fui-font-size-sm, $fui-font-size-sm);
14
+ > .icon {
15
+ margin-block-end: calc(
16
+ var(--fui-feedback-section-gap, var(--fui-raw-space-16, 16px)) - var(
17
+ --fui-feedback-text-gap,
18
+ var(--fui-raw-space-4, 4px)
19
+ )
20
+ );
30
21
  }
31
22
 
32
- .description {
33
- font-size: var(--fui-font-size-xs, $fui-font-size-xs);
34
- max-width: $fui-emptystate-width-sm;
35
- }
36
-
37
- .icon {
38
- margin-bottom: var(--fui-space-2, $fui-space-2);
23
+ > .actions {
24
+ margin-block-start: calc(
25
+ var(--fui-feedback-section-gap, var(--fui-raw-space-16, 16px)) - var(
26
+ --fui-feedback-text-gap,
27
+ var(--fui-raw-space-4, 4px)
28
+ )
29
+ );
39
30
  }
31
+ }
40
32
 
41
- .actions {
42
- margin-top: var(--fui-space-3, $fui-space-3);
43
- }
33
+ .sm {
34
+ @include feedback.empty-state("sm");
44
35
  }
45
36
 
46
37
  .md {
47
- padding: var(--fui-space-10, $fui-space-10) var(--fui-space-6);
48
-
49
- .title {
50
- font-size: var(--fui-font-size-base, $fui-font-size-base);
51
- }
52
-
53
- .description {
54
- font-size: var(--fui-font-size-sm, $fui-font-size-sm);
55
- max-width: $fui-emptystate-width-md;
56
- }
57
-
58
- .icon {
59
- margin-bottom: var(--fui-space-3, $fui-space-3);
60
- }
61
-
62
- .actions {
63
- margin-top: var(--fui-space-4, $fui-space-4);
64
- }
38
+ @include feedback.empty-state("md");
65
39
  }
66
40
 
67
41
  .lg {
68
- padding: var(--fui-space-12, $fui-space-12) var(--fui-space-8);
69
-
70
- .title {
71
- font-size: var(--fui-font-size-lg, $fui-font-size-lg);
72
- }
73
-
74
- .description {
75
- font-size: var(--fui-font-size-sm, $fui-font-size-sm);
76
- max-width: $fui-emptystate-width-lg;
77
- }
78
-
79
- .icon {
80
- margin-bottom: var(--fui-space-4, $fui-space-4);
81
- }
42
+ @include feedback.empty-state("lg");
43
+ }
82
44
 
83
- .actions {
84
- margin-top: var(--fui-space-6, $fui-space-6);
85
- }
45
+ // Reserved-but-empty region: a dashed hairline says the space belongs to
46
+ // content that has not arrived, without claiming the weight of a real card.
47
+ .outlined {
48
+ justify-content: center;
49
+ border: var(--fui-stroke-hairline, 1px) dashed var(--fui-border-default, $fui-border-default);
50
+ border-radius: var(--fui-card-radius, var(--fui-radius-lg, $fui-radius-lg));
86
51
  }
87
52
 
88
53
  .icon {
@@ -91,41 +56,37 @@ $fui-emptystate-icon-lg: 2.857rem !default; // 40px
91
56
  justify-content: center;
92
57
  color: var(--fui-text-tertiary, $fui-text-tertiary);
93
58
 
94
- // Icon sizing based on parent size variant
95
59
  svg {
96
- width: var(--fui-icon-2xl, #{$fui-emptystate-icon-md}); // 32px
97
- height: var(--fui-icon-2xl, #{$fui-emptystate-icon-md});
98
- }
99
-
100
- .lg & svg {
101
- // 40px has no icon-ladder step — see local token note above.
102
- width: $fui-emptystate-icon-lg;
103
- height: $fui-emptystate-icon-lg;
104
- }
105
-
106
- .sm & svg {
107
- width: var(--fui-icon-xl, #{$fui-emptystate-icon-sm}); // 24px
108
- height: var(--fui-icon-xl, #{$fui-emptystate-icon-sm});
60
+ inline-size: var(--_fui-feedback-empty-icon-size);
61
+ block-size: var(--_fui-feedback-empty-icon-size);
109
62
  }
110
63
  }
111
64
 
112
65
  .title {
113
66
  margin: 0;
114
- font-weight: var(--fui-font-weight-semibold, $fui-font-weight-semibold);
115
67
  color: var(--fui-text-primary, $fui-text-primary);
116
- line-height: var(--fui-line-height-tight, $fui-line-height-tight);
68
+ font-family: var(--fui-font-sans, $fui-font-sans);
69
+ font-size: var(--_fui-feedback-empty-title-size);
70
+ font-weight: var(--_fui-feedback-empty-title-weight);
71
+ line-height: var(--_fui-feedback-empty-title-line);
72
+ letter-spacing: var(--_fui-feedback-empty-title-tracking);
117
73
  }
118
74
 
119
75
  .description {
120
- margin: var(--fui-space-2, $fui-space-2) 0 0;
76
+ max-inline-size: var(--_fui-feedback-empty-max-inline);
77
+ margin: 0;
121
78
  color: var(--fui-text-secondary, $fui-text-secondary);
122
- line-height: var(--fui-line-height-normal, $fui-line-height-normal);
79
+ font-family: var(--fui-font-sans, $fui-font-sans);
80
+ font-size: var(--_fui-feedback-empty-copy-size);
81
+ font-weight: var(--_fui-feedback-empty-copy-weight);
82
+ line-height: var(--_fui-feedback-empty-copy-line);
83
+ letter-spacing: var(--_fui-feedback-empty-copy-tracking);
123
84
  }
124
85
 
125
86
  .actions {
126
87
  display: flex;
127
- align-items: center;
128
- gap: var(--fui-space-2, $fui-space-2);
129
88
  flex-wrap: wrap;
89
+ align-items: center;
130
90
  justify-content: center;
91
+ gap: var(--fui-feedback-transient-gap, var(--fui-raw-space-8, 8px));
131
92
  }
@@ -1,7 +1,7 @@
1
- 'use client';
1
+ "use client";
2
2
 
3
- import * as React from 'react';
4
- import styles from './EmptyState.module.scss';
3
+ import * as React from "react";
4
+ import styles from "./EmptyState.module.scss";
5
5
 
6
6
  // ============================================
7
7
  // Types
@@ -9,7 +9,12 @@ import styles from './EmptyState.module.scss';
9
9
 
10
10
  export interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {
11
11
  children: React.ReactNode;
12
- size?: 'sm' | 'md' | 'lg';
12
+ size?: "sm" | "md" | "lg";
13
+ /** `outlined` draws the dashed hairline that marks a reserved-but-empty
14
+ * region. Default `plain` keeps the state inside whatever already frames it
15
+ * (a Card, a table body) so the frame is never doubled.
16
+ * @default "plain" */
17
+ variant?: "plain" | "outlined";
13
18
  }
14
19
 
15
20
  export interface EmptyStateIconProps extends React.HTMLAttributes<HTMLDivElement> {
@@ -33,7 +38,7 @@ export interface EmptyStateActionsProps extends React.HTMLAttributes<HTMLDivElem
33
38
  // ============================================
34
39
 
35
40
  interface EmptyStateContextValue {
36
- size: 'sm' | 'md' | 'lg';
41
+ size: "sm" | "md" | "lg";
37
42
  }
38
43
 
39
44
  const EmptyStateContext = React.createContext<EmptyStateContextValue | null>(null);
@@ -41,7 +46,7 @@ const EmptyStateContext = React.createContext<EmptyStateContextValue | null>(nul
41
46
  function useEmptyStateContext() {
42
47
  const context = React.useContext(EmptyStateContext);
43
48
  if (!context) {
44
- throw new Error('EmptyState compound components must be used within an EmptyState');
49
+ throw new Error("EmptyState compound components must be used within an EmptyState");
45
50
  }
46
51
  return context;
47
52
  }
@@ -52,45 +57,65 @@ function useEmptyStateContext() {
52
57
 
53
58
  function EmptyStateRoot({
54
59
  children,
55
- size = 'md',
60
+ size = "md",
61
+ variant = "plain",
56
62
  className,
57
63
  ...htmlProps
58
64
  }: EmptyStateProps) {
59
- const classes = [styles.emptyState, styles[size], className]
65
+ const classes = [
66
+ styles.emptyState,
67
+ styles[size],
68
+ variant === "outlined" ? styles.outlined : null,
69
+ className,
70
+ ]
60
71
  .filter(Boolean)
61
- .join(' ');
72
+ .join(" ");
62
73
 
63
74
  const contextValue: EmptyStateContextValue = { size };
64
75
 
65
76
  return (
66
77
  <EmptyStateContext.Provider value={contextValue}>
67
- <div {...htmlProps} className={classes}>{children}</div>
78
+ <div {...htmlProps} className={classes}>
79
+ {children}
80
+ </div>
68
81
  </EmptyStateContext.Provider>
69
82
  );
70
83
  }
71
84
 
72
85
  function EmptyStateIcon({ children, className, ...htmlProps }: EmptyStateIconProps) {
73
- const classes = [styles.icon, className].filter(Boolean).join(' ');
74
- return <div {...htmlProps} className={classes}>{children}</div>;
86
+ const classes = [styles.icon, className].filter(Boolean).join(" ");
87
+ return (
88
+ <div {...htmlProps} className={classes}>
89
+ {children}
90
+ </div>
91
+ );
75
92
  }
76
93
 
77
94
  function EmptyStateTitle({ children, className, ...htmlProps }: EmptyStateTitleProps) {
78
- const classes = [styles.title, className].filter(Boolean).join(' ');
79
- return <h3 {...htmlProps} className={classes}>{children}</h3>;
95
+ const classes = [styles.title, className].filter(Boolean).join(" ");
96
+ return (
97
+ <h3 {...htmlProps} className={classes}>
98
+ {children}
99
+ </h3>
100
+ );
80
101
  }
81
102
 
82
- function EmptyStateDescription({
83
- children,
84
- className,
85
- ...htmlProps
86
- }: EmptyStateDescriptionProps) {
87
- const classes = [styles.description, className].filter(Boolean).join(' ');
88
- return <p {...htmlProps} className={classes}>{children}</p>;
103
+ function EmptyStateDescription({ children, className, ...htmlProps }: EmptyStateDescriptionProps) {
104
+ const classes = [styles.description, className].filter(Boolean).join(" ");
105
+ return (
106
+ <p {...htmlProps} className={classes}>
107
+ {children}
108
+ </p>
109
+ );
89
110
  }
90
111
 
91
112
  function EmptyStateActions({ children, className, ...htmlProps }: EmptyStateActionsProps) {
92
- const classes = [styles.actions, className].filter(Boolean).join(' ');
93
- return <div {...htmlProps} className={classes}>{children}</div>;
113
+ const classes = [styles.actions, className].filter(Boolean).join(" ");
114
+ return (
115
+ <div {...htmlProps} className={classes}>
116
+ {children}
117
+ </div>
118
+ );
94
119
  }
95
120
 
96
121
  // ============================================
@@ -1,17 +1,9 @@
1
1
  {
2
2
  "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
3
  "name": "Field",
4
- "description": "Compositional form field wrapper providing validation, labels, descriptions, and error messages. Use for advanced form needs beyond baked-in Input/Textarea props.",
5
- "category": "forms",
6
- "tags": [
7
- "form",
8
- "field",
9
- "validation",
10
- "label",
11
- "error",
12
- "input",
13
- "accessible"
14
- ],
4
+ "description": "Composes labels, descriptions, validation, and errors around a form control.",
5
+ "category": "inputs",
6
+ "tags": ["form", "field", "validation", "label", "error", "input", "accessible"],
15
7
  "status": "stable",
16
8
  "sourcePath": "src/components/Field/index.tsx",
17
9
  "exportName": "Field",
@@ -54,11 +46,7 @@
54
46
  "type": "enum",
55
47
  "description": "When to trigger validation",
56
48
  "required": false,
57
- "values": [
58
- "onSubmit",
59
- "onBlur",
60
- "onChange"
61
- ]
49
+ "values": ["onSubmit", "onBlur", "onChange"]
62
50
  },
63
51
  "validationDebounceTime": {
64
52
  "type": "number",
@@ -68,42 +56,47 @@
68
56
  },
69
57
  "usage": {
70
58
  "when": [
71
- "You need granular validation with match-based error messages",
72
- "Custom form controls need accessible labels and descriptions",
73
- "Server-side errors need to be distributed to specific fields",
74
- "You need dirty/touched tracking or custom validation logic"
59
+ "One error message per failure reason, not one catch-all",
60
+ "A custom control needs a real label and description",
61
+ "Server errors must land on the field that caused them",
62
+ "You need dirty and touched tracking"
75
63
  ],
76
64
  "whenNot": [
77
- "Simple inputs with basic label and helper text (use Input with label prop)",
78
- "Standalone selects or textareas with built-in error display"
65
+ "A plain input with a label and helper text (use Input's own props)",
66
+ "A Select or Textarea whose built-in error display is enough"
79
67
  ],
80
68
  "guidelines": [
81
- "Always provide a Field.Label for accessibility",
82
- "Wrap any form control in Field.Control to connect it to the field context",
83
- "Use match prop on Field.Error for granular native validation messages",
84
- "Wrap in Form to enable server-side error distribution by field name"
69
+ "Every Field gets a Field.Label",
70
+ "Wrap the control in Field.Control so it joins the field context",
71
+ "Give each Field.Error a match so the message fits the failure",
72
+ "Nest inside Form to route server errors by field name"
85
73
  ],
86
74
  "accessibility": [
87
- "Label automatically linked to control via aria-labelledby",
88
- "Description linked via aria-describedby",
89
- "Error messages announced to screen readers",
90
- "Supports data-disabled and data-invalid attributes for styling"
75
+ "Label links to the control via aria-labelledby",
76
+ "Description links via aria-describedby",
77
+ "Errors are announced when they appear",
78
+ "data-disabled and data-invalid are available for styling"
91
79
  ]
92
80
  },
93
81
  "examples": [
94
82
  {
95
83
  "name": "Single field",
96
- "description": "A single field with label, control, and description",
84
+ "description": "Label, control and description wired together automatically.",
97
85
  "code": "<Field name=\"email\">\n <Field.Label>Email address</Field.Label>\n <Field.Control>\n <Input type=\"email\" placeholder=\"jane@example.com\" />\n </Field.Control>\n <Field.Description>We will never share your email.</Field.Description>\n</Field>"
98
86
  },
99
87
  {
100
88
  "name": "Two-column layout",
101
- "description": "Fields arranged in a two-column grid",
89
+ "description": "Grid places two short fields side by side and one full-width.",
102
90
  "code": "<Grid columns={2} gap=\"md\">\n <Field name=\"firstName\">\n <Field.Label>First Name</Field.Label>\n <Field.Control>\n <Input placeholder=\"Jane\" />\n </Field.Control>\n </Field>\n <Field name=\"lastName\">\n <Field.Label>Last Name</Field.Label>\n <Field.Control>\n <Input placeholder=\"Doe\" />\n </Field.Control>\n </Field>\n <Grid.Item colSpan=\"full\">\n <Field name=\"email\">\n <Field.Label>Email</Field.Label>\n <Field.Control>\n <Input type=\"email\" placeholder=\"jane@example.com\" />\n </Field.Control>\n <Field.Error match=\"typeMismatch\">Enter a valid email address</Field.Error>\n </Field>\n </Grid.Item>\n</Grid>"
103
91
  },
92
+ {
93
+ "name": "Invalid",
94
+ "description": "invalid marks the field failed and reveals Field.Error.",
95
+ "code": "<Field name=\"username\" invalid>\n <Field.Label>Username</Field.Label>\n <Field.Control>\n <Input value=\"ada lovelace\" error />\n </Field.Control>\n <Field.Error match>Usernames cannot contain spaces</Field.Error>\n</Field>"
96
+ },
104
97
  {
105
98
  "name": "Custom validation",
106
- "description": "Field with custom validate function",
99
+ "description": "validate runs on change and feeds Field.Error.",
107
100
  "code": "<Field\n name=\"age\"\n validate={(value) => {\n const num = Number(value);\n if (isNaN(num) || num < 18) return 'Must be 18 or older';\n return null;\n }}\n validationMode=\"onChange\"\n validationDebounceTime={500}\n>\n <Field.Label>Age</Field.Label>\n <Field.Control>\n <Input type=\"number\" placeholder=\"18\" />\n </Field.Control>\n <Field.Description>You must be at least 18 years old.</Field.Description>\n <Field.Error match=\"customError\" />\n</Field>"
108
101
  }
109
102
  ],
@@ -132,21 +125,11 @@
132
125
  "Field.Control: wraps any form component (Input, Textarea, etc.)",
133
126
  "Field.Error match: valueMissing|typeMismatch|customError|... - granular errors"
134
127
  ],
135
- "a11yRules": [
136
- "A11Y_FIELD_LABEL",
137
- "A11Y_FIELD_ERROR",
138
- "A11Y_FIELD_DESCRIPTION"
139
- ]
128
+ "a11yRules": ["A11Y_FIELD_LABEL", "A11Y_FIELD_ERROR", "A11Y_FIELD_DESCRIPTION"]
140
129
  },
141
130
  "ai": {
142
131
  "compositionPattern": "compound",
143
- "subComponents": [
144
- "Label",
145
- "Control",
146
- "Description",
147
- "Error",
148
- "Validity"
149
- ]
132
+ "subComponents": ["Label", "Control", "Description", "Error", "Validity", "Required"]
150
133
  },
151
134
  "provenance": {
152
135
  "source": "migrated",
@@ -1,14 +1,11 @@
1
- @use "../../tokens/variables" as *;
2
- @use "../../tokens/mixins" as *;
1
+ @use "../../recipes/field";
3
2
 
4
3
  .root {
5
- display: flex;
6
- flex-direction: column;
4
+ @include field.wrapper;
7
5
  }
8
6
 
9
7
  .label {
10
- @include label-text;
11
- margin-bottom: var(--fui-space-1, $fui-space-1);
8
+ @include field.label;
12
9
 
13
10
  &[data-disabled] {
14
11
  opacity: 0.5;
@@ -20,12 +17,13 @@
20
17
  }
21
18
 
22
19
  .description {
23
- @include helper-text;
24
- margin-top: var(--fui-space-1, $fui-space-1);
20
+ @include field.helper;
25
21
  }
26
22
 
27
23
  .error {
28
- @include helper-text;
29
- margin-top: var(--fui-space-1, $fui-space-1);
30
- color: var(--fui-color-danger-text, $fui-color-danger-text);
24
+ @include field.error;
25
+ }
26
+
27
+ .required {
28
+ margin-inline-start: var(--fui-raw-space-2, 2px);
31
29
  }