@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,22 +1,16 @@
1
1
  {
2
2
  "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
3
  "name": "Link",
4
- "description": "Styled anchor element for navigation. Supports internal and external links with consistent visual treatment.",
4
+ "description": "Navigates somewhere else, inline or in chrome, with real link semantics.",
5
5
  "category": "navigation",
6
- "tags": [
7
- "link",
8
- "anchor",
9
- "navigation",
10
- "href",
11
- "url"
12
- ],
6
+ "tags": ["link", "anchor", "navigation", "href", "url"],
13
7
  "status": "stable",
14
8
  "sourcePath": "src/components/Link/index.tsx",
15
9
  "exportName": "Link",
16
10
  "propsSummary": [
17
11
  "children: node (required)",
18
12
  "variant: default|subtle|muted (default: default)",
19
- "underline: always|hover|none (default: hover)",
13
+ "underline: always|hover|none|dotted (default: hover)",
20
14
  "external: boolean (default: false)",
21
15
  "asChild: boolean (default: false)",
22
16
  "className: string",
@@ -35,22 +29,14 @@
35
29
  "description": "Visual style variant",
36
30
  "default": "default",
37
31
  "required": false,
38
- "values": [
39
- "default",
40
- "subtle",
41
- "muted"
42
- ]
32
+ "values": ["default", "subtle", "muted"]
43
33
  },
44
34
  "underline": {
45
35
  "type": "enum",
46
36
  "description": "Underline behavior",
47
37
  "default": "hover",
48
38
  "required": false,
49
- "values": [
50
- "always",
51
- "hover",
52
- "none"
53
- ]
39
+ "values": ["always", "hover", "none", "dotted"]
54
40
  },
55
41
  "external": {
56
42
  "type": "boolean",
@@ -87,56 +73,55 @@
87
73
  },
88
74
  "usage": {
89
75
  "when": [
90
- "Inline text links within paragraphs",
91
- "Navigation links in footers or sidebars",
92
- "\"Forgot password?\" or \"Sign up\" links in forms",
93
- "External links to documentation or resources"
76
+ "Inline links inside body text",
77
+ "Footer and sidebar navigation",
78
+ "\"Forgot password?\" and \"Sign up\" in forms",
79
+ "Pointing out to docs or external resources"
94
80
  ],
95
81
  "whenNot": [
96
- "Primary call-to-action (use Button instead)",
97
- "Navigation tabs (use Tabs component)",
98
- "Menu items in dropdowns (use Menu component)",
99
- "Cards that link to detail pages should still use real link semantics (Link or anchor inside Card)"
82
+ "A main call to action use Button",
83
+ "Switching views in place — use Tabs",
84
+ "Dropdown items use Menu"
100
85
  ],
101
86
  "guidelines": [
102
- "Link text should describe the destination, not \"click here\"",
103
- "Use external prop for links that open in new tabs",
104
- "Use subtle variant for secondary/contextual links",
105
- "Ensure links are distinguishable from regular text",
106
- "When using asChild, Link composes event handlers with the child instead of overwriting them"
87
+ "Name the destination; never \"click here\"",
88
+ "external sets target and rel add your own \"opens in a new tab\" cue",
89
+ "subtle and muted for secondary and contextual links",
90
+ "Links must stay distinguishable from surrounding text",
91
+ "asChild composes handlers with the child rather than replacing them"
107
92
  ],
108
93
  "accessibility": [
109
- "Link text must be descriptive of the destination",
110
- "External links should indicate they open in new window",
111
- "Links must have visible focus indicators",
112
- "Avoid using links that look like buttons without button semantics"
94
+ "The link text alone should make sense out of context",
95
+ "Say when a link opens a new window",
96
+ "Focus ring must stay visible",
97
+ "A link that looks like a button still needs link semantics"
113
98
  ]
114
99
  },
115
100
  "examples": [
116
101
  {
117
102
  "name": "Default",
118
- "description": "Standard link with hover underline",
103
+ "description": "Accent text that underlines on hover.",
119
104
  "code": "<Link href=\"#\">Learn more about our services</Link>"
120
105
  },
121
106
  {
122
107
  "name": "Variants",
123
- "description": "Visual style options",
124
- "code": "<div style={{ display: 'flex', gap: '16px', alignItems: 'center' }}>\n <Link href=\"#\" variant=\"default\">Default</Link>\n <Link href=\"#\" variant=\"subtle\">Subtle</Link>\n <Link href=\"#\" variant=\"muted\">Muted</Link>\n</div>"
108
+ "description": "Accent, then quieter, then quietest.",
109
+ "code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"md\" align=\"center\" wrap>\n <Link href=\"#\" variant=\"default\">Default</Link>\n <Link href=\"#\" variant=\"subtle\">Subtle</Link>\n <Link href=\"#\" variant=\"muted\">Muted</Link>\n</Stack>"
125
110
  },
126
111
  {
127
112
  "name": "Underline Styles",
128
- "description": "Different underline behaviors",
129
- "code": "<div style={{ display: 'flex', gap: '16px', alignItems: 'center' }}>\n <Link href=\"#\" underline=\"always\">Always underlined</Link>\n <Link href=\"#\" underline=\"hover\">Underline on hover</Link>\n <Link href=\"#\" underline=\"none\">No underline</Link>\n</div>"
113
+ "description": "Four rules for when the line shows.",
114
+ "code": "import { Stack } from '@/components/Stack';\n\n<Stack direction=\"row\" gap=\"md\" align=\"center\" wrap>\n <Link href=\"#\" underline=\"always\">Always underlined</Link>\n <Link href=\"#\" underline=\"hover\">Underline on hover</Link>\n <Link href=\"#\" underline=\"dotted\">Dotted underline</Link>\n <Link href=\"#\" underline=\"none\">No underline</Link>\n</Stack>"
130
115
  },
131
116
  {
132
117
  "name": "External Link",
133
- "description": "Link that opens in new tab",
118
+ "description": "Sets target and rel; you still supply the visible cue.",
134
119
  "code": "<Link href=\"https://example.com\" external>\n View documentation ↗\n</Link>"
135
120
  },
136
121
  {
137
122
  "name": "As Child (Polymorphic)",
138
- "description": "Renders as a custom element while applying Link styles and composing handlers. Useful with Next.js Link for client-side navigation.",
139
- "code": "<Link asChild variant=\"subtle\" onClick={() => {}}>\n <button type=\"button\" onClick={() => alert('Navigated!')}>\n Polymorphic link as button\n </button>\n</Link>"
123
+ "description": "Paints Link styling onto a router link and keeps both click handlers.",
124
+ "code": "<Link asChild variant=\"subtle\" onClick={() => {}}>\n <a href=\"#pricing\" onClick={() => {}}>\n Client-side navigation\n </a>\n</Link>"
140
125
  }
141
126
  ],
142
127
  "relations": [
@@ -156,20 +141,15 @@
156
141
  "children: ReactNode - link text (required)",
157
142
  "href: string - destination URL",
158
143
  "variant: default|subtle|muted - visual style",
159
- "underline: always|hover|none - underline behavior",
144
+ "underline: always|hover|none|dotted - underline behavior",
160
145
  "external: boolean - opens in new tab",
161
146
  "asChild: boolean - polymorphic child rendering with merged styles and composed event handlers"
162
147
  ],
163
- "a11yRules": [
164
- "A11Y_LINK_TEXT",
165
- "A11Y_LINK_FOCUS"
166
- ]
148
+ "a11yRules": ["A11Y_LINK_TEXT", "A11Y_LINK_FOCUS"]
167
149
  },
168
150
  "ai": {
169
151
  "compositionPattern": "compound",
170
- "subComponents": [
171
- "Root"
172
- ]
152
+ "subComponents": ["Root"]
173
153
  },
174
154
  "provenance": {
175
155
  "source": "migrated",
@@ -1,15 +1,14 @@
1
- @use '../../tokens/variables' as *;
2
- @use '../../tokens/mixins' as *;
1
+ @use "../../tokens/variables" as *;
2
+ @use "../../tokens/mixins" as *;
3
+ @use "../../recipes/action";
4
+ @use "../../recipes/prose";
3
5
 
4
6
  .link {
5
7
  @include interactive-base;
8
+ @include action.inline;
9
+ @include prose.link;
6
10
 
7
11
  display: inline;
8
- font-family: inherit;
9
- font-size: inherit;
10
- font-weight: inherit;
11
- line-height: inherit;
12
- text-decoration: none;
13
12
  cursor: pointer;
14
13
  border-radius: var(--fui-radius-sm, $fui-radius-sm);
15
14
 
@@ -20,10 +19,10 @@
20
19
 
21
20
  // Variants
22
21
  .default {
23
- color: var(--fui-color-accent, $fui-color-accent);
22
+ color: var(--fui-link-color, var(--fui-link-ink, #{$fui-link-ink}));
24
23
 
25
24
  &:hover {
26
- color: var(--fui-color-accent-hover, $fui-color-accent-hover);
25
+ color: var(--fui-link-color-hover, var(--fui-link-ink, #{$fui-link-ink}));
27
26
  }
28
27
  }
29
28
 
@@ -46,15 +45,32 @@
46
45
  // Underline styles
47
46
  .underline-always {
48
47
  text-decoration: underline;
49
- text-underline-offset: 2px;
48
+ text-decoration-style: var(--fui-link-underline-style, solid);
49
+ text-underline-offset: 0.2em;
50
50
  }
51
51
 
52
52
  .underline-hover {
53
- text-decoration: none;
53
+ text-decoration-line: var(--fui-link-underline-line, none);
54
+ text-decoration-style: var(--fui-link-underline-style, solid);
55
+ text-underline-offset: 0.2em;
56
+ text-decoration-color: color-mix(in srgb, currentColor 55%, transparent);
57
+
58
+ &:hover {
59
+ text-decoration-line: underline;
60
+ text-decoration-style: var(--fui-link-underline-style, solid);
61
+ text-decoration-color: currentColor;
62
+ text-underline-offset: 0.2em;
63
+ }
64
+ }
65
+
66
+ .underline-dotted {
67
+ text-decoration: underline dotted;
68
+ text-underline-offset: 0.2em;
69
+ text-decoration-thickness: from-font;
70
+ text-decoration-color: color-mix(in srgb, currentColor 55%, transparent);
54
71
 
55
72
  &:hover {
56
- text-decoration: underline;
57
- text-underline-offset: 2px;
73
+ text-decoration-color: currentColor;
58
74
  }
59
75
  }
60
76
 
@@ -18,7 +18,7 @@ export interface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement>
18
18
  /** Visual variant */
19
19
  variant?: 'default' | 'subtle' | 'muted';
20
20
  /** Underline style */
21
- underline?: 'always' | 'hover' | 'none';
21
+ underline?: 'always' | 'hover' | 'none' | 'dotted';
22
22
  /** Open in new tab (adds rel="noopener noreferrer") */
23
23
  external?: boolean;
24
24
  /**
@@ -1,15 +1,9 @@
1
1
  {
2
2
  "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
3
  "name": "List",
4
- "description": "Compound component for rendering ordered or unordered lists with consistent styling. Supports bullet, numbered, and icon-prefixed items.",
4
+ "description": "Stacks items down the page with evenly spaced bullets, numbers, or icons.",
5
5
  "category": "display",
6
- "tags": [
7
- "list",
8
- "items",
9
- "bullet",
10
- "ordered",
11
- "unordered"
12
- ],
6
+ "tags": ["list", "items", "bullet", "ordered", "unordered"],
13
7
  "status": "stable",
14
8
  "sourcePath": "src/components/List/index.tsx",
15
9
  "exportName": "List",
@@ -31,35 +25,21 @@
31
25
  "description": "List type",
32
26
  "default": "ul",
33
27
  "required": false,
34
- "values": [
35
- "ul",
36
- "ol"
37
- ]
28
+ "values": ["ul", "ol"]
38
29
  },
39
30
  "variant": {
40
31
  "type": "enum",
41
32
  "description": "List style variant",
42
33
  "default": "disc",
43
34
  "required": false,
44
- "values": [
45
- "none",
46
- "disc",
47
- "decimal",
48
- "icon"
49
- ]
35
+ "values": ["none", "disc", "decimal", "icon"]
50
36
  },
51
37
  "gap": {
52
38
  "type": "enum",
53
39
  "description": "Spacing between items",
54
40
  "default": "sm",
55
41
  "required": false,
56
- "values": [
57
- "none",
58
- "xs",
59
- "sm",
60
- "md",
61
- "lg"
62
- ]
42
+ "values": ["none", "xs", "sm", "md", "lg"]
63
43
  },
64
44
  "style": {
65
45
  "type": "object",
@@ -69,49 +49,45 @@
69
49
  },
70
50
  "usage": {
71
51
  "when": [
72
- "Feature lists with checkmarks or icons",
73
- "Ordered steps or instructions",
74
- "Navigation lists in sidebars",
75
- "Pricing plan feature comparisons"
52
+ "Steps, instructions, or anything with an order",
53
+ "Feature and benefit lists",
54
+ "Plain stacks of links in a sidebar"
76
55
  ],
77
56
  "whenNot": [
78
- "Interactive selection lists (use Menu or Select)",
79
- "Data tables with columns (use Table)",
80
- "Cards in a grid (use Grid with Card)",
81
- "Navigation tabs (use Tabs)"
57
+ "Items are pickable (use Menu or Select)",
58
+ "Items have columns (use Table)",
59
+ "Items need their own surface (use Card in a Grid)"
82
60
  ],
83
61
  "guidelines": [
84
- "Use as=\"ol\" for sequential or numbered content",
85
- "Use variant=\"icon\" with meaningful icons for feature lists",
86
- "Keep list items concise and parallel in structure",
87
- "Use consistent icons within a single list"
62
+ "Order matters? Use as=\"ol\" so the numbers are real",
63
+ "Keep one icon meaning per list — mixing icons reads as noise",
64
+ "Write items in parallel grammar; scanning depends on it",
65
+ "Stop nesting at two levels"
88
66
  ],
89
67
  "accessibility": [
90
- "Use semantic list elements (ul, ol) for screen reader support",
91
- "List items are automatically announced with count",
92
- "Icons are decorative; ensure text conveys meaning",
93
- "Avoid deeply nested lists (3+ levels)"
68
+ "Real ul/ol markup means screen readers announce the item count",
69
+ "Icons are decorative the text has to carry the meaning"
94
70
  ]
95
71
  },
96
72
  "examples": [
97
73
  {
98
74
  "name": "Bullet List",
99
- "description": "Default unordered list with bullets",
75
+ "description": "The default marker reach for it when order does not matter.",
100
76
  "code": "<List variant=\"disc\">\n <List.Item>First item</List.Item>\n <List.Item>Second item</List.Item>\n <List.Item>Third item</List.Item>\n</List>"
101
77
  },
102
78
  {
103
79
  "name": "Numbered List",
104
- "description": "Ordered list with numbers",
80
+ "description": "as=\"ol\" makes the sequence real, not just visual.",
105
81
  "code": "<List as=\"ol\" variant=\"decimal\">\n <List.Item>Create your account</List.Item>\n <List.Item>Configure your settings</List.Item>\n <List.Item>Start building</List.Item>\n</List>"
106
82
  },
107
83
  {
108
84
  "name": "Icon List",
109
- "description": "List with custom icons per item",
85
+ "description": "Each item takes its own icon — checkmarks sell a feature list.",
110
86
  "code": "<List variant=\"icon\">\n <List.Item icon={<Check weight=\"bold\" color=\"var(--fui-color-success)\" />}>\n Unlimited projects\n </List.Item>\n <List.Item icon={<Check weight=\"bold\" color=\"var(--fui-color-success)\" />}>\n Priority support\n </List.Item>\n <List.Item icon={<Check weight=\"bold\" color=\"var(--fui-color-success)\" />}>\n Advanced analytics\n </List.Item>\n</List>"
111
87
  },
112
88
  {
113
89
  "name": "No Style",
114
- "description": "Plain list without markers",
90
+ "description": "No markers, wider gap — the shape for stacked nav links.",
115
91
  "code": "<List variant=\"none\" gap=\"md\">\n <List.Item>Dashboard</List.Item>\n <List.Item>Settings</List.Item>\n <List.Item>Profile</List.Item>\n</List>"
116
92
  }
117
93
  ],
@@ -134,16 +110,11 @@
134
110
  "variant: none|disc|decimal|icon - list style",
135
111
  "gap: none|xs|sm|md|lg - item spacing"
136
112
  ],
137
- "a11yRules": [
138
- "A11Y_LIST_SEMANTIC",
139
- "A11Y_LIST_NESTING"
140
- ]
113
+ "a11yRules": ["A11Y_LIST_SEMANTIC", "A11Y_LIST_NESTING"]
141
114
  },
142
115
  "ai": {
143
116
  "compositionPattern": "compound",
144
- "subComponents": [
145
- "Item"
146
- ]
117
+ "subComponents": ["Item"]
147
118
  },
148
119
  "provenance": {
149
120
  "source": "migrated",
@@ -1,50 +1,48 @@
1
- @use '../../tokens/variables' as *;
1
+ @use "../../tokens/variables" as *;
2
+ @use "../../recipes/layout" as layout;
3
+ @use "../../recipes/prose" as prose;
2
4
 
3
5
  .list {
4
6
  margin: 0;
5
7
  padding: 0;
6
- display: flex;
7
- flex-direction: column;
8
8
  }
9
9
 
10
10
  // Variants
11
11
  .none {
12
- list-style: none;
12
+ @include prose.list("none");
13
13
  }
14
14
 
15
15
  .disc {
16
- list-style: disc;
17
- padding-left: var(--fui-space-2, $fui-space-2);
16
+ @include prose.list("disc");
18
17
  }
19
18
 
20
19
  .decimal {
21
- list-style: decimal;
22
- padding-left: var(--fui-space-2, $fui-space-2);
20
+ @include prose.list("decimal");
23
21
  }
24
22
 
25
23
  .icon {
26
- list-style: none;
24
+ @include prose.list("icon");
27
25
  }
28
26
 
29
27
  // Gap variants
30
28
  .gap-none {
31
- gap: 0;
29
+ row-gap: layout.gap("none");
32
30
  }
33
31
 
34
32
  .gap-xs {
35
- gap: var(--fui-space-1, $fui-space-1);
33
+ row-gap: layout.gap("xs");
36
34
  }
37
35
 
38
36
  .gap-sm {
39
- gap: var(--fui-space-2, $fui-space-2);
37
+ row-gap: layout.gap("sm");
40
38
  }
41
39
 
42
40
  .gap-md {
43
- gap: var(--fui-space-3, $fui-space-3);
41
+ row-gap: layout.gap("md");
44
42
  }
45
43
 
46
44
  .gap-lg {
47
- gap: var(--fui-space-4, $fui-space-4);
45
+ row-gap: layout.gap("lg");
48
46
  }
49
47
 
50
48
  // List item
@@ -53,19 +51,16 @@
53
51
  }
54
52
 
55
53
  .iconItem {
56
- display: flex;
57
- align-items: flex-start;
58
- gap: var(--fui-space-2, $fui-space-2);
54
+ align-items: start;
59
55
  }
60
56
 
61
57
  .iconWrapper {
62
- display: flex;
58
+ display: inline-flex;
63
59
  align-items: center;
64
60
  justify-content: center;
65
- flex-shrink: 0;
66
- line-height: var(--fui-line-height-normal, $fui-line-height-normal);
61
+ min-inline-size: var(--fui-raw-space-12, 12px);
67
62
  }
68
63
 
69
64
  .itemContent {
70
- flex: 1;
65
+ min-inline-size: 0;
71
66
  }
@@ -79,18 +79,12 @@ function ListItem({ children, icon, className, style, ...htmlProps }: ListItemPr
79
79
  .filter(Boolean)
80
80
  .join(' ');
81
81
 
82
- if (variant === 'icon' && icon) {
83
- return (
84
- <li {...htmlProps} className={classes} style={style}>
85
- <span className={styles.iconWrapper}>{icon}</span>
86
- <span className={styles.itemContent}>{children}</span>
87
- </li>
88
- );
89
- }
90
-
91
82
  return (
92
83
  <li {...htmlProps} className={classes} style={style}>
93
- {children}
84
+ {variant === 'icon' && icon ? (
85
+ <span className={styles.iconWrapper}>{icon}</span>
86
+ ) : null}
87
+ <span className={styles.itemContent}>{children}</span>
94
88
  </li>
95
89
  );
96
90
  }
@@ -1,16 +1,9 @@
1
1
  {
2
2
  "$schema": "https://usefragments.com/schemas/contract.v1.json",
3
3
  "name": "Listbox",
4
- "description": "Controlled listbox for search results, autocomplete dropdowns, and command menus. Provides Menu-like styling without requiring a trigger.",
5
- "category": "forms",
6
- "tags": [
7
- "listbox",
8
- "search",
9
- "autocomplete",
10
- "combobox",
11
- "command",
12
- "dropdown"
13
- ],
4
+ "description": "Shows a keyboard-navigable list of options with no trigger of its own.",
5
+ "category": "inputs",
6
+ "tags": ["listbox", "search", "autocomplete", "combobox", "command", "dropdown"],
14
7
  "status": "stable",
15
8
  "sourcePath": "src/components/Listbox/index.tsx",
16
9
  "exportName": "Listbox",
@@ -50,22 +43,22 @@
50
43
  },
51
44
  "usage": {
52
45
  "when": [
53
- "Search result dropdowns",
46
+ "Results under a search field",
54
47
  "Autocomplete suggestions",
55
48
  "Command palette results",
56
- "Keyboard-navigable option lists"
49
+ "Any list the user drives with arrow keys"
57
50
  ],
58
51
  "whenNot": [
59
- "Static lists without selection (use List)",
60
- "Action menus with trigger button (use Menu)",
61
- "Form field selection (use Select)",
62
- "Navigation menus (use Sidebar or Tabs)"
52
+ "A list nobody selects from (use List)",
53
+ "Actions behind a button (use Menu)",
54
+ "A form field (use Select)",
55
+ "Navigation (use Sidebar or Tabs)"
63
56
  ],
64
57
  "guidelines": [
65
- "Control open/close state externally based on input focus or query",
66
- "Listbox provides arrow/home/end + Enter/Space keyboard navigation when focused",
67
- "Use Listbox.Empty for no results state",
68
- "Group related items with Listbox.Group when appropriate"
58
+ "You own open state drive it from the input's focus and query",
59
+ "Arrows, Home, End, Enter, and Space are handled for you",
60
+ "Always supply Listbox.Empty",
61
+ "Group once the list draws from more than one source"
69
62
  ],
70
63
  "accessibility": [
71
64
  "Uses listbox and option ARIA roles",
@@ -77,27 +70,27 @@
77
70
  "examples": [
78
71
  {
79
72
  "name": "Default",
80
- "description": "Basic listbox with selectable items",
73
+ "description": "Plain options, one selectable at a time.",
81
74
  "code": "<Listbox aria-label=\"Options\">\n <Listbox.Item selected>First option</Listbox.Item>\n <Listbox.Item>Second option</Listbox.Item>\n <Listbox.Item>Third option</Listbox.Item>\n</Listbox>"
82
75
  },
83
76
  {
84
77
  "name": "Search Results",
85
- "description": "Typical search results pattern with label and metadata",
78
+ "description": "Trailing metadata explains each match.",
86
79
  "code": "<Listbox aria-label=\"Search results\">\n <Listbox.Item selected>\n <span style={{ fontWeight: 500 }}>Button</span>\n <span style={{ marginLeft: 'auto', fontSize: '0.75rem', color: 'var(--fui-text-tertiary)' }}>Components</span>\n </Listbox.Item>\n <Listbox.Item>\n <span style={{ fontWeight: 500 }}>Badge</span>\n <span style={{ marginLeft: 'auto', fontSize: '0.75rem', color: 'var(--fui-text-tertiary)' }}>Components</span>\n </Listbox.Item>\n <Listbox.Item>\n <span style={{ fontWeight: 500 }}>Box</span>\n <span style={{ marginLeft: 'auto', fontSize: '0.75rem', color: 'var(--fui-text-tertiary)' }}>Layout</span>\n </Listbox.Item>\n</Listbox>"
87
80
  },
88
81
  {
89
82
  "name": "With Groups",
90
- "description": "Grouped items with labels",
83
+ "description": "Labels split the list by source.",
91
84
  "code": "<Listbox aria-label=\"Commands\">\n <Listbox.Group label=\"Recent\">\n <Listbox.Item selected>Open file...</Listbox.Item>\n <Listbox.Item>Save as...</Listbox.Item>\n </Listbox.Group>\n <Listbox.Group label=\"Actions\">\n <Listbox.Item>Copy</Listbox.Item>\n <Listbox.Item>Paste</Listbox.Item>\n <Listbox.Item disabled>Cut</Listbox.Item>\n </Listbox.Group>\n</Listbox>"
92
85
  },
93
86
  {
94
87
  "name": "Empty State",
95
- "description": "No results found message",
88
+ "description": "Says so when nothing matches.",
96
89
  "code": "<Listbox aria-label=\"Search results\">\n <Listbox.Empty>No results found</Listbox.Empty>\n</Listbox>"
97
90
  },
98
91
  {
99
92
  "name": "With Disabled Items",
100
- "description": "Mix of enabled and disabled items",
93
+ "description": "Unavailable rows stay visible but inert.",
101
94
  "code": "<Listbox aria-label=\"Options\">\n <Listbox.Item>Available option</Listbox.Item>\n <Listbox.Item disabled>Disabled option</Listbox.Item>\n <Listbox.Item>Another option</Listbox.Item>\n</Listbox>"
102
95
  }
103
96
  ],
@@ -130,21 +123,12 @@
130
123
  "Listbox.Item selected: boolean - highlight state",
131
124
  "Listbox.Item disabled: boolean - non-interactive"
132
125
  ],
133
- "a11yRules": [
134
- "A11Y_LISTBOX_ROLE",
135
- "A11Y_OPTION_ROLE"
136
- ]
126
+ "a11yRules": ["A11Y_LISTBOX_ROLE", "A11Y_OPTION_ROLE"]
137
127
  },
138
128
  "ai": {
139
129
  "compositionPattern": "compound",
140
- "subComponents": [
141
- "Item",
142
- "Group",
143
- "Empty"
144
- ],
145
- "requiredChildren": [
146
- "Item"
147
- ],
130
+ "subComponents": ["Item", "Group", "Empty"],
131
+ "requiredChildren": ["Item"],
148
132
  "commonPatterns": [
149
133
  "<Listbox aria-label=\"Search results\">{results.map(item => <Listbox.Item key={item.id} selected={item.id === selectedId} onClick={() => onSelect(item)}>{item.label}</Listbox.Item>)}</Listbox>"
150
134
  ]