@usefragments/ui 1.5.4 → 1.6.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 (497) hide show
  1. package/README.md +1 -1
  2. package/dist/assets/ui.css +8808 -5810
  3. package/dist/chart.cjs +7 -20
  4. package/dist/chart.js +7 -20
  5. package/dist/colorpicker.cjs +2 -1
  6. package/dist/colorpicker.js +2 -1
  7. package/dist/components/Accordion/Accordion.module.scss.cjs +8 -8
  8. package/dist/components/Accordion/Accordion.module.scss.js +8 -8
  9. package/dist/components/Alert/Alert.module.scss.cjs +12 -12
  10. package/dist/components/Alert/Alert.module.scss.js +12 -12
  11. package/dist/components/AppShell/AppShell.module.scss.cjs +14 -14
  12. package/dist/components/AppShell/AppShell.module.scss.js +14 -14
  13. package/dist/components/AppShell/index.cjs +5 -3
  14. package/dist/components/AppShell/index.d.ts +4 -2
  15. package/dist/components/AppShell/index.d.ts.map +1 -1
  16. package/dist/components/AppShell/index.js +5 -3
  17. package/dist/components/Avatar/Avatar.module.scss.cjs +17 -14
  18. package/dist/components/Avatar/Avatar.module.scss.js +17 -14
  19. package/dist/components/Avatar/index.cjs +100 -118
  20. package/dist/components/Avatar/index.d.ts +7 -5
  21. package/dist/components/Avatar/index.d.ts.map +1 -1
  22. package/dist/components/Avatar/index.js +100 -118
  23. package/dist/components/Badge/Badge.module.scss.cjs +19 -19
  24. package/dist/components/Badge/Badge.module.scss.js +19 -19
  25. package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +14 -14
  26. package/dist/components/BentoGrid/BentoGrid.module.scss.js +14 -14
  27. package/dist/components/Box/Box.module.scss.cjs +152 -152
  28. package/dist/components/Box/Box.module.scss.js +152 -152
  29. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.cjs +8 -8
  30. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +8 -8
  31. package/dist/components/Button/Button.module.scss.cjs +14 -14
  32. package/dist/components/Button/Button.module.scss.js +14 -14
  33. package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs +15 -15
  34. package/dist/components/ButtonGroup/ButtonGroup.module.scss.js +15 -15
  35. package/dist/components/Card/Card.module.scss.cjs +18 -18
  36. package/dist/components/Card/Card.module.scss.js +18 -18
  37. package/dist/components/Chart/Chart.module.scss.cjs +15 -15
  38. package/dist/components/Chart/Chart.module.scss.js +15 -15
  39. package/dist/components/Chart/index.d.ts +7 -7
  40. package/dist/components/Chart/index.d.ts.map +1 -1
  41. package/dist/components/Checkbox/Checkbox.module.scss.cjs +9 -15
  42. package/dist/components/Checkbox/Checkbox.module.scss.js +9 -15
  43. package/dist/components/Checkbox/index.cjs +4 -6
  44. package/dist/components/Checkbox/index.d.ts.map +1 -1
  45. package/dist/components/Checkbox/index.js +4 -6
  46. package/dist/components/Chip/Chip.module.scss.cjs +15 -15
  47. package/dist/components/Chip/Chip.module.scss.js +15 -15
  48. package/dist/components/Chip/index.cjs +4 -5
  49. package/dist/components/Chip/index.d.ts +1 -1
  50. package/dist/components/Chip/index.d.ts.map +1 -1
  51. package/dist/components/Chip/index.js +2 -3
  52. package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +22 -22
  53. package/dist/components/CodeBlock/CodeBlock.module.scss.js +22 -22
  54. package/dist/components/Collapsible/Collapsible.module.scss.cjs +9 -12
  55. package/dist/components/Collapsible/Collapsible.module.scss.js +9 -12
  56. package/dist/components/Collapsible/index.cjs +3 -2
  57. package/dist/components/Collapsible/index.d.ts +3 -3
  58. package/dist/components/Collapsible/index.d.ts.map +1 -1
  59. package/dist/components/Collapsible/index.js +3 -2
  60. package/dist/components/ColorPicker/ColorPicker.module.scss.cjs +16 -16
  61. package/dist/components/ColorPicker/ColorPicker.module.scss.js +16 -16
  62. package/dist/components/ColorPicker/index.d.ts.map +1 -1
  63. package/dist/components/Combobox/Combobox.module.scss.cjs +21 -27
  64. package/dist/components/Combobox/Combobox.module.scss.js +21 -27
  65. package/dist/components/Combobox/index.cjs +4 -4
  66. package/dist/components/Combobox/index.d.ts.map +1 -1
  67. package/dist/components/Combobox/index.js +4 -4
  68. package/dist/components/Command/Command.module.scss.cjs +11 -11
  69. package/dist/components/Command/Command.module.scss.js +11 -11
  70. package/dist/components/ConversationList/ConversationList.module.scss.cjs +11 -14
  71. package/dist/components/ConversationList/ConversationList.module.scss.js +11 -14
  72. package/dist/components/ConversationList/index.cjs +40 -44
  73. package/dist/components/ConversationList/index.d.ts +3 -3
  74. package/dist/components/ConversationList/index.d.ts.map +1 -1
  75. package/dist/components/ConversationList/index.js +40 -44
  76. package/dist/components/DataTable/DataTable.module.scss.cjs +32 -56
  77. package/dist/components/DataTable/DataTable.module.scss.js +32 -56
  78. package/dist/components/DataTable/index.d.ts +5 -4
  79. package/dist/components/DataTable/index.d.ts.map +1 -1
  80. package/dist/components/DatePicker/DatePicker.module.scss.cjs +33 -33
  81. package/dist/components/DatePicker/DatePicker.module.scss.js +33 -33
  82. package/dist/components/DatePicker/index.d.ts.map +1 -1
  83. package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
  84. package/dist/components/Dialog/Dialog.module.scss.js +14 -14
  85. package/dist/components/Drawer/Drawer.module.scss.cjs +31 -28
  86. package/dist/components/Drawer/Drawer.module.scss.js +31 -28
  87. package/dist/components/Drawer/index.cjs +1 -1
  88. package/dist/components/Drawer/index.js +1 -1
  89. package/dist/components/Editor/Editor.module.scss.cjs +23 -23
  90. package/dist/components/Editor/Editor.module.scss.js +23 -23
  91. package/dist/components/EmptyState/EmptyState.module.scss.cjs +12 -12
  92. package/dist/components/EmptyState/EmptyState.module.scss.js +12 -12
  93. package/dist/components/Field/Field.module.scss.cjs +8 -5
  94. package/dist/components/Field/Field.module.scss.js +8 -5
  95. package/dist/components/Field/index.cjs +10 -1
  96. package/dist/components/Field/index.d.ts +9 -2
  97. package/dist/components/Field/index.d.ts.map +1 -1
  98. package/dist/components/Field/index.js +10 -1
  99. package/dist/components/Fieldset/Fieldset.module.scss.cjs +3 -3
  100. package/dist/components/Fieldset/Fieldset.module.scss.js +3 -3
  101. package/dist/components/Form/Form.module.scss.cjs +5 -2
  102. package/dist/components/Form/Form.module.scss.js +5 -2
  103. package/dist/components/Form/index.cjs +6 -1
  104. package/dist/components/Form/index.d.ts +8 -3
  105. package/dist/components/Form/index.d.ts.map +1 -1
  106. package/dist/components/Form/index.js +6 -1
  107. package/dist/components/Grid/Grid.module.scss.cjs +54 -72
  108. package/dist/components/Grid/Grid.module.scss.js +54 -72
  109. package/dist/components/Grid/index.cjs +57 -77
  110. package/dist/components/Grid/index.d.ts +11 -11
  111. package/dist/components/Grid/index.d.ts.map +1 -1
  112. package/dist/components/Grid/index.js +57 -77
  113. package/dist/components/Header/Header.module.scss.cjs +33 -33
  114. package/dist/components/Header/Header.module.scss.js +33 -33
  115. package/dist/components/Header/index.cjs +2 -1
  116. package/dist/components/Header/index.d.ts.map +1 -1
  117. package/dist/components/Header/index.js +2 -1
  118. package/dist/components/Icon/Icon.module.scss.cjs +29 -8
  119. package/dist/components/Icon/Icon.module.scss.js +30 -9
  120. package/dist/components/Icon/index.cjs +30 -48
  121. package/dist/components/Icon/index.d.ts +6 -6
  122. package/dist/components/Icon/index.d.ts.map +1 -1
  123. package/dist/components/Icon/index.js +30 -48
  124. package/dist/components/IconButton/IconButton.module.scss.cjs +8 -8
  125. package/dist/components/IconButton/IconButton.module.scss.js +8 -8
  126. package/dist/components/Input/Input.module.scss.cjs +19 -25
  127. package/dist/components/Input/Input.module.scss.js +19 -25
  128. package/dist/components/Input/index.cjs +1 -2
  129. package/dist/components/Input/index.d.ts.map +1 -1
  130. package/dist/components/Input/index.js +1 -2
  131. package/dist/components/Link/Link.module.scss.cjs +10 -10
  132. package/dist/components/Link/Link.module.scss.js +10 -10
  133. package/dist/components/List/List.module.scss.cjs +19 -19
  134. package/dist/components/List/List.module.scss.js +19 -19
  135. package/dist/components/List/index.cjs +4 -7
  136. package/dist/components/List/index.d.ts.map +1 -1
  137. package/dist/components/List/index.js +4 -7
  138. package/dist/components/Listbox/Listbox.module.scss.cjs +9 -9
  139. package/dist/components/Listbox/Listbox.module.scss.js +9 -9
  140. package/dist/components/Loading/Loading.module.scss.cjs +30 -30
  141. package/dist/components/Loading/Loading.module.scss.js +30 -30
  142. package/dist/components/Loading/index.cjs +39 -67
  143. package/dist/components/Loading/index.d.ts +6 -6
  144. package/dist/components/Loading/index.d.ts.map +1 -1
  145. package/dist/components/Loading/index.js +39 -67
  146. package/dist/components/Main/Main.module.scss.cjs +7 -7
  147. package/dist/components/Main/Main.module.scss.js +7 -7
  148. package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
  149. package/dist/components/Markdown/Markdown.module.scss.js +1 -1
  150. package/dist/components/Menu/Menu.module.scss.cjs +16 -16
  151. package/dist/components/Menu/Menu.module.scss.js +16 -16
  152. package/dist/components/Menu/index.cjs +19 -61
  153. package/dist/components/Menu/index.d.ts +10 -10
  154. package/dist/components/Menu/index.d.ts.map +1 -1
  155. package/dist/components/Menu/index.js +19 -61
  156. package/dist/components/Message/Message.module.scss.cjs +18 -21
  157. package/dist/components/Message/Message.module.scss.js +18 -21
  158. package/dist/components/Message/index.cjs +15 -2
  159. package/dist/components/Message/index.d.ts.map +1 -1
  160. package/dist/components/Message/index.js +15 -2
  161. package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +28 -28
  162. package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +28 -28
  163. package/dist/components/Pagination/Pagination.module.scss.cjs +18 -9
  164. package/dist/components/Pagination/Pagination.module.scss.js +19 -10
  165. package/dist/components/Pagination/index.cjs +5 -2
  166. package/dist/components/Pagination/index.d.ts +3 -1
  167. package/dist/components/Pagination/index.d.ts.map +1 -1
  168. package/dist/components/Pagination/index.js +5 -2
  169. package/dist/components/Popover/Popover.module.scss.cjs +10 -10
  170. package/dist/components/Popover/Popover.module.scss.js +10 -10
  171. package/dist/components/Progress/Progress.module.scss.cjs +29 -32
  172. package/dist/components/Progress/Progress.module.scss.js +29 -32
  173. package/dist/components/Progress/geometry.cjs +30 -0
  174. package/dist/components/Progress/geometry.d.ts +8 -0
  175. package/dist/components/Progress/geometry.d.ts.map +1 -0
  176. package/dist/components/Progress/geometry.js +30 -0
  177. package/dist/components/Progress/index.cjs +40 -29
  178. package/dist/components/Progress/index.d.ts +4 -3
  179. package/dist/components/Progress/index.d.ts.map +1 -1
  180. package/dist/components/Progress/index.js +40 -29
  181. package/dist/components/Prompt/Prompt.module.scss.cjs +29 -29
  182. package/dist/components/Prompt/Prompt.module.scss.js +29 -29
  183. package/dist/components/Prompt/index.cjs +5 -4
  184. package/dist/components/Prompt/index.d.ts.map +1 -1
  185. package/dist/components/Prompt/index.js +5 -4
  186. package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +15 -21
  187. package/dist/components/RadioGroup/RadioGroup.module.scss.js +15 -21
  188. package/dist/components/RadioGroup/index.cjs +7 -6
  189. package/dist/components/RadioGroup/index.d.ts.map +1 -1
  190. package/dist/components/RadioGroup/index.js +7 -6
  191. package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +7 -22
  192. package/dist/components/ScrollArea/ScrollArea.module.scss.js +7 -22
  193. package/dist/components/ScrollArea/index.cjs +66 -42
  194. package/dist/components/ScrollArea/index.d.ts +3 -2
  195. package/dist/components/ScrollArea/index.d.ts.map +1 -1
  196. package/dist/components/ScrollArea/index.js +66 -42
  197. package/dist/components/ScrollArea/scroll-state.cjs +58 -0
  198. package/dist/components/ScrollArea/scroll-state.d.ts +16 -0
  199. package/dist/components/ScrollArea/scroll-state.d.ts.map +1 -0
  200. package/dist/components/ScrollArea/scroll-state.js +58 -0
  201. package/dist/components/Select/Select.module.scss.cjs +21 -21
  202. package/dist/components/Select/Select.module.scss.js +21 -21
  203. package/dist/components/Select/index.cjs +3 -2
  204. package/dist/components/Select/index.d.ts.map +1 -1
  205. package/dist/components/Select/index.js +3 -2
  206. package/dist/components/Separator/Separator.module.scss.cjs +13 -10
  207. package/dist/components/Separator/Separator.module.scss.js +13 -10
  208. package/dist/components/Separator/index.cjs +37 -38
  209. package/dist/components/Separator/index.d.ts +4 -4
  210. package/dist/components/Separator/index.d.ts.map +1 -1
  211. package/dist/components/Separator/index.js +37 -38
  212. package/dist/components/Sidebar/Sidebar.module.scss.cjs +43 -43
  213. package/dist/components/Sidebar/Sidebar.module.scss.js +43 -43
  214. package/dist/components/Sidebar/index.cjs +5 -3
  215. package/dist/components/Sidebar/index.d.ts +6 -1
  216. package/dist/components/Sidebar/index.d.ts.map +1 -1
  217. package/dist/components/Sidebar/index.js +5 -3
  218. package/dist/components/Skeleton/Skeleton.module.scss.cjs +50 -38
  219. package/dist/components/Skeleton/Skeleton.module.scss.js +50 -38
  220. package/dist/components/Skeleton/index.cjs +41 -55
  221. package/dist/components/Skeleton/index.d.ts +7 -7
  222. package/dist/components/Skeleton/index.d.ts.map +1 -1
  223. package/dist/components/Skeleton/index.js +41 -55
  224. package/dist/components/Slider/Slider.module.scss.cjs +12 -12
  225. package/dist/components/Slider/Slider.module.scss.js +12 -12
  226. package/dist/components/Stack/Stack.module.scss.cjs +25 -45
  227. package/dist/components/Stack/Stack.module.scss.js +25 -45
  228. package/dist/components/Stack/index.cjs +106 -101
  229. package/dist/components/Stack/index.d.ts +7 -7
  230. package/dist/components/Stack/index.d.ts.map +1 -1
  231. package/dist/components/Stack/index.js +106 -101
  232. package/dist/components/Switch/Switch.module.scss.cjs +32 -0
  233. package/dist/components/Switch/Switch.module.scss.js +32 -0
  234. package/dist/components/{Toggle → Switch}/index.cjs +9 -14
  235. package/dist/components/Switch/index.d.ts +37 -1
  236. package/dist/components/Switch/index.d.ts.map +1 -1
  237. package/dist/components/{Toggle → Switch}/index.js +5 -10
  238. package/dist/components/Table/Table.module.scss.cjs +18 -27
  239. package/dist/components/Table/Table.module.scss.js +18 -27
  240. package/dist/components/Table/index.d.ts +6 -5
  241. package/dist/components/Table/index.d.ts.map +1 -1
  242. package/dist/components/TableOfContents/TableOfContents.module.scss.cjs +15 -15
  243. package/dist/components/TableOfContents/TableOfContents.module.scss.js +15 -15
  244. package/dist/components/Tabs/Tabs.module.scss.cjs +12 -12
  245. package/dist/components/Tabs/Tabs.module.scss.js +12 -12
  246. package/dist/components/Tabs/index.cjs +2 -2
  247. package/dist/components/Tabs/index.js +2 -2
  248. package/dist/components/Text/Text.module.scss.cjs +93 -57
  249. package/dist/components/Text/Text.module.scss.js +93 -57
  250. package/dist/components/Text/index.cjs +14 -6
  251. package/dist/components/Text/index.d.ts +25 -15
  252. package/dist/components/Text/index.d.ts.map +1 -1
  253. package/dist/components/Text/index.js +14 -6
  254. package/dist/components/Textarea/Textarea.module.scss.cjs +26 -23
  255. package/dist/components/Textarea/Textarea.module.scss.js +26 -23
  256. package/dist/components/Textarea/index.cjs +5 -10
  257. package/dist/components/Textarea/index.d.ts.map +1 -1
  258. package/dist/components/Textarea/index.js +5 -10
  259. package/dist/components/Theme/context.cjs +39 -0
  260. package/dist/components/Theme/context.d.ts +21 -0
  261. package/dist/components/Theme/context.d.ts.map +1 -0
  262. package/dist/components/Theme/context.js +22 -0
  263. package/dist/components/Theme/index.cjs +14 -209
  264. package/dist/components/Theme/index.d.ts +4 -37
  265. package/dist/components/Theme/index.d.ts.map +1 -1
  266. package/dist/components/Theme/index.js +9 -204
  267. package/dist/components/{Theme → ThemeToggle}/ThemeToggle.module.scss.cjs +6 -6
  268. package/dist/components/ThemeToggle/ThemeToggle.module.scss.js +23 -0
  269. package/dist/components/ThemeToggle/index.cjs +115 -0
  270. package/dist/components/ThemeToggle/index.d.ts +21 -0
  271. package/dist/components/ThemeToggle/index.d.ts.map +1 -0
  272. package/dist/components/ThemeToggle/index.js +115 -0
  273. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +13 -13
  274. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +13 -13
  275. package/dist/components/ThinkingIndicator/index.cjs +34 -41
  276. package/dist/components/ThinkingIndicator/index.d.ts +4 -4
  277. package/dist/components/ThinkingIndicator/index.d.ts.map +1 -1
  278. package/dist/components/ThinkingIndicator/index.js +34 -41
  279. package/dist/components/Toast/Toast.module.scss.cjs +20 -20
  280. package/dist/components/Toast/Toast.module.scss.js +20 -20
  281. package/dist/components/Toggle/index.d.ts +2 -42
  282. package/dist/components/Toggle/index.d.ts.map +1 -1
  283. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +20 -20
  284. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +20 -20
  285. package/dist/components/ToggleGroup/index.cjs +3 -2
  286. package/dist/components/ToggleGroup/index.d.ts +2 -1
  287. package/dist/components/ToggleGroup/index.d.ts.map +1 -1
  288. package/dist/components/ToggleGroup/index.js +3 -2
  289. package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
  290. package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
  291. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.cjs +1 -1
  292. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.js +1 -1
  293. package/dist/data-table.cjs +12 -9
  294. package/dist/data-table.js +12 -9
  295. package/dist/datepicker.cjs +2 -1
  296. package/dist/datepicker.js +2 -1
  297. package/dist/index.cjs +100 -98
  298. package/dist/index.d.ts +2 -2
  299. package/dist/index.d.ts.map +1 -1
  300. package/dist/index.js +4 -2
  301. package/dist/markdown.cjs +1 -1
  302. package/dist/markdown.js +2 -2
  303. package/dist/measurements/generated.cjs +296 -0
  304. package/dist/measurements/generated.d.ts +261 -0
  305. package/dist/measurements/generated.d.ts.map +1 -0
  306. package/dist/measurements/generated.js +296 -0
  307. package/dist/measurements/index.d.ts +2 -0
  308. package/dist/measurements/index.d.ts.map +1 -0
  309. package/dist/measurements.cjs +6 -0
  310. package/dist/measurements.js +6 -0
  311. package/dist/recipes/popup.cjs +14 -0
  312. package/dist/recipes/popup.d.ts +4 -0
  313. package/dist/recipes/popup.d.ts.map +1 -0
  314. package/dist/recipes/popup.js +14 -0
  315. package/dist/recipes/table-chrome.cjs +18 -0
  316. package/dist/recipes/table-chrome.d.ts +10 -0
  317. package/dist/recipes/table-chrome.d.ts.map +1 -0
  318. package/dist/recipes/table-chrome.js +18 -0
  319. package/dist/table.cjs +5 -2
  320. package/dist/table.js +5 -2
  321. package/dist/utils/layout-spacing.cjs +27 -0
  322. package/dist/utils/layout-spacing.d.ts +5 -0
  323. package/dist/utils/layout-spacing.d.ts.map +1 -0
  324. package/dist/utils/layout-spacing.js +27 -0
  325. package/dist/utils/seed-derivation.cjs +4 -42
  326. package/dist/utils/seed-derivation.d.ts +4 -3
  327. package/dist/utils/seed-derivation.d.ts.map +1 -1
  328. package/dist/utils/seed-derivation.js +4 -42
  329. package/dist/utils/theme-presets.cjs +1 -0
  330. package/dist/utils/theme-presets.d.ts +3 -2
  331. package/dist/utils/theme-presets.d.ts.map +1 -1
  332. package/dist/utils/theme-presets.js +1 -0
  333. package/fragments.json +1 -1
  334. package/package.json +23 -4
  335. package/src/components/Accordion/Accordion.module.scss +31 -52
  336. package/src/components/Alert/Alert.module.scss +28 -44
  337. package/src/components/AppShell/AppShell.module.scss +6 -3
  338. package/src/components/AppShell/index.tsx +8 -4
  339. package/src/components/Avatar/Avatar.module.scss +22 -60
  340. package/src/components/Avatar/index.tsx +152 -146
  341. package/src/components/Badge/Badge.module.scss +51 -46
  342. package/src/components/BentoGrid/BentoGrid.module.scss +11 -32
  343. package/src/components/Box/Box.module.scss +253 -81
  344. package/src/components/Breadcrumbs/Breadcrumbs.module.scss +10 -11
  345. package/src/components/Button/Button.module.scss +52 -57
  346. package/src/components/ButtonGroup/ButtonGroup.module.scss +5 -5
  347. package/src/components/Card/Card.consumer-fixture.module.scss +8 -0
  348. package/src/components/Card/Card.module.scss +211 -175
  349. package/src/components/Chart/Chart.module.scss +28 -29
  350. package/src/components/Chart/index.tsx +40 -53
  351. package/src/components/Checkbox/Checkbox.module.scss +43 -64
  352. package/src/components/Checkbox/index.tsx +4 -9
  353. package/src/components/Chip/Chip.contract.json +4 -3
  354. package/src/components/Chip/Chip.module.scss +23 -34
  355. package/src/components/Chip/index.tsx +3 -4
  356. package/src/components/CodeBlock/CodeBlock.module.scss +102 -215
  357. package/src/components/Collapsible/Collapsible.module.scss +29 -63
  358. package/src/components/Collapsible/index.tsx +22 -26
  359. package/src/components/ColorPicker/ColorPicker.module.scss +42 -24
  360. package/src/components/ColorPicker/index.tsx +2 -1
  361. package/src/components/Combobox/Combobox.module.scss +60 -73
  362. package/src/components/Combobox/index.tsx +7 -5
  363. package/src/components/Command/Command.module.scss +47 -77
  364. package/src/components/ConversationList/ConversationList.module.scss +20 -78
  365. package/src/components/ConversationList/index.tsx +55 -59
  366. package/src/components/DataTable/DataTable.module.scss +76 -216
  367. package/src/components/DataTable/index.tsx +20 -25
  368. package/src/components/DatePicker/DatePicker.module.scss +54 -33
  369. package/src/components/DatePicker/index.tsx +2 -1
  370. package/src/components/Dialog/Dialog.module.scss +42 -66
  371. package/src/components/Drawer/Drawer.module.scss +93 -99
  372. package/src/components/Drawer/index.tsx +1 -1
  373. package/src/components/Editor/Editor.module.scss +115 -220
  374. package/src/components/EmptyState/EmptyState.module.scss +38 -85
  375. package/src/components/Field/Field.contract.json +2 -1
  376. package/src/components/Field/Field.module.scss +9 -11
  377. package/src/components/Field/index.tsx +27 -1
  378. package/src/components/Fieldset/Fieldset.module.scss +14 -6
  379. package/src/components/Form/Form.contract.json +10 -23
  380. package/src/components/Form/Form.module.scss +9 -4
  381. package/src/components/Form/index.tsx +22 -7
  382. package/src/components/Grid/Grid.module.scss +159 -63
  383. package/src/components/Grid/index.tsx +107 -126
  384. package/src/components/Header/Header.module.scss +25 -32
  385. package/src/components/Header/index.tsx +2 -1
  386. package/src/components/Icon/Icon.module.scss +16 -0
  387. package/src/components/Icon/index.tsx +74 -86
  388. package/src/components/IconButton/IconButton.module.scss +11 -21
  389. package/src/components/Input/Input.module.scss +67 -55
  390. package/src/components/Input/index.tsx +1 -2
  391. package/src/components/Link/Link.module.scss +8 -9
  392. package/src/components/List/List.module.scss +16 -21
  393. package/src/components/List/index.tsx +4 -10
  394. package/src/components/Listbox/Listbox.module.scss +26 -54
  395. package/src/components/Loading/Loading.module.scss +23 -33
  396. package/src/components/Loading/index.tsx +68 -97
  397. package/src/components/Main/Main.module.scss +3 -5
  398. package/src/components/Markdown/Markdown.module.scss +36 -184
  399. package/src/components/Markdown/index.tsx +2 -2
  400. package/src/components/Menu/Menu.module.scss +48 -133
  401. package/src/components/Menu/index.tsx +57 -89
  402. package/src/components/Message/Message.module.scss +52 -142
  403. package/src/components/Message/index.tsx +16 -6
  404. package/src/components/NavigationMenu/NavigationMenu.module.scss +59 -52
  405. package/src/components/Pagination/Pagination.module.scss +32 -25
  406. package/src/components/Pagination/index.tsx +7 -2
  407. package/src/components/Popover/Popover.module.scss +37 -73
  408. package/src/components/Progress/Progress.module.scss +61 -41
  409. package/src/components/Progress/geometry.ts +41 -0
  410. package/src/components/Progress/index.tsx +44 -30
  411. package/src/components/Prompt/Prompt.module.scss +45 -82
  412. package/src/components/Prompt/index.tsx +6 -5
  413. package/src/components/RadioGroup/RadioGroup.module.scss +50 -69
  414. package/src/components/RadioGroup/index.tsx +7 -9
  415. package/src/components/ScrollArea/ScrollArea.contract.json +8 -24
  416. package/src/components/ScrollArea/ScrollArea.module.scss +122 -96
  417. package/src/components/ScrollArea/index.tsx +78 -60
  418. package/src/components/ScrollArea/scroll-state.ts +87 -0
  419. package/src/components/Select/Select.module.scss +53 -41
  420. package/src/components/Select/index.tsx +6 -2
  421. package/src/components/Separator/Separator.module.scss +29 -19
  422. package/src/components/Separator/index.tsx +55 -51
  423. package/src/components/Sidebar/Sidebar.contract.json +12 -0
  424. package/src/components/Sidebar/Sidebar.module.scss +101 -99
  425. package/src/components/Sidebar/index.tsx +10 -3
  426. package/src/components/Skeleton/Skeleton.module.scss +26 -26
  427. package/src/components/Skeleton/index.tsx +65 -72
  428. package/src/components/Slider/Slider.module.scss +31 -25
  429. package/src/components/Stack/Stack.module.scss +101 -30
  430. package/src/components/Stack/index.tsx +157 -127
  431. package/src/components/{Toggle/Toggle.contract.json → Switch/Switch.contract.json} +1 -1
  432. package/src/components/{Toggle/Toggle.module.scss → Switch/Switch.module.scss} +55 -82
  433. package/src/components/{Toggle → Switch}/index.tsx +5 -21
  434. package/src/components/Table/Table.module.scss +38 -129
  435. package/src/components/Table/index.tsx +13 -6
  436. package/src/components/TableOfContents/TableOfContents.module.scss +20 -177
  437. package/src/components/Tabs/Tabs.module.scss +27 -22
  438. package/src/components/Tabs/index.tsx +2 -2
  439. package/src/components/Text/Text.module.scss +22 -3
  440. package/src/components/Text/index.tsx +56 -21
  441. package/src/components/Textarea/Textarea.module.scss +59 -39
  442. package/src/components/Textarea/index.tsx +5 -12
  443. package/src/components/Theme/context.ts +42 -0
  444. package/src/components/Theme/index.tsx +14 -309
  445. package/src/components/ThemeToggle/ThemeToggle.module.scss +73 -0
  446. package/src/components/ThemeToggle/index.tsx +144 -0
  447. package/src/components/ThinkingIndicator/ThinkingIndicator.module.scss +24 -19
  448. package/src/components/ThinkingIndicator/index.tsx +44 -54
  449. package/src/components/Toast/Toast.contract.json +5 -21
  450. package/src/components/Toast/Toast.module.scss +61 -138
  451. package/src/components/Toggle/index.ts +7 -0
  452. package/src/components/ToggleGroup/ToggleGroup.contract.json +12 -39
  453. package/src/components/ToggleGroup/ToggleGroup.module.scss +132 -88
  454. package/src/components/ToggleGroup/index.tsx +5 -3
  455. package/src/components/Tooltip/Tooltip.module.scss +23 -39
  456. package/src/components/VisuallyHidden/VisuallyHidden.module.scss +3 -0
  457. package/src/index.ts +2 -1
  458. package/src/measurements/MeasurementTargets.module.scss +229 -0
  459. package/src/measurements/generated.ts +317 -0
  460. package/src/measurements/index.ts +8 -0
  461. package/src/measurements/measurements.json +361 -0
  462. package/src/recipes/_action.scss +138 -0
  463. package/src/recipes/_boolean-range.scss +124 -0
  464. package/src/recipes/_feedback.scss +171 -0
  465. package/src/recipes/_field.scss +98 -0
  466. package/src/recipes/_layout.scss +67 -0
  467. package/src/recipes/_navigation.scss +110 -0
  468. package/src/recipes/_overlay.scss +191 -0
  469. package/src/recipes/_popup.scss +92 -0
  470. package/src/recipes/_prose.scss +174 -0
  471. package/src/recipes/_representation.scss +193 -0
  472. package/src/recipes/_segmented.scss +26 -0
  473. package/src/recipes/_surface.scss +13 -0
  474. package/src/recipes/_table-chrome.scss +105 -0
  475. package/src/recipes/_target.scss +31 -0
  476. package/src/recipes/_typography.scss +38 -0
  477. package/src/recipes/popup.ts +12 -0
  478. package/src/recipes/table-chrome.ts +30 -0
  479. package/src/styles/globals.scss +2 -2
  480. package/src/tokens/_component-properties.scss +2 -2
  481. package/src/tokens/_computed.scss +9 -9
  482. package/src/tokens/_density.scss +41 -132
  483. package/src/tokens/_measurements.catalog.generated.css +91 -0
  484. package/src/tokens/_measurements.generated.scss +604 -0
  485. package/src/tokens/_mixins.scss +0 -276
  486. package/src/tokens/_property-registrations.scss +96 -92
  487. package/src/tokens/_radius.scss +16 -70
  488. package/src/tokens/_seeds.scss +8 -7
  489. package/src/tokens/_variables.scss +163 -148
  490. package/src/utils/layout-spacing.ts +31 -0
  491. package/src/utils/seed-derivation.ts +134 -172
  492. package/src/utils/theme-presets.ts +58 -30
  493. package/dist/components/Theme/ThemeToggle.module.scss.js +0 -23
  494. package/dist/components/Toggle/Toggle.module.scss.cjs +0 -44
  495. package/dist/components/Toggle/Toggle.module.scss.js +0 -44
  496. package/src/components/Switch/index.ts +0 -3
  497. package/src/components/Theme/ThemeToggle.module.scss +0 -91
@@ -9,13 +9,19 @@
9
9
  * the @usefragments/ui barrel export.
10
10
  */
11
11
 
12
+ import {
13
+ MEASUREMENT_PROFILES,
14
+ type MeasurementDensity,
15
+ type MeasurementRadiusStyle,
16
+ } from "../measurements";
17
+
12
18
  // ============================================
13
19
  // Types
14
20
  // ============================================
15
21
 
16
- export type NeutralPalette = 'stone' | 'ice' | 'sand' | 'earth' | 'fire' | 'fragments';
17
- export type DensityPreset = 'compact' | 'default' | 'relaxed';
18
- export type RadiusStyle = 'sharp' | 'subtle' | 'default' | 'rounded' | 'pill';
22
+ export type NeutralPalette = "stone" | "ice" | "sand" | "earth" | "fire" | "fragments";
23
+ export type DensityPreset = MeasurementDensity;
24
+ export type RadiusStyle = MeasurementRadiusStyle;
19
25
 
20
26
  export interface SeedConfig {
21
27
  brand: string;
@@ -56,92 +62,92 @@ interface RadiusConfig {
56
62
  export const PALETTES: Record<NeutralPalette, PaletteShades> = {
57
63
  // Stone - Muted cool neutrals (default, balanced)
58
64
  stone: {
59
- 50: '#fafafa',
60
- 100: '#f4f4f5',
61
- 200: '#e4e4e7',
62
- 300: '#d4d4d8',
63
- 400: '#a1a1aa',
64
- 500: '#71717a',
65
- 600: '#52525b',
66
- 700: '#3f3f46',
67
- 800: '#27272a',
68
- 900: '#18181b',
69
- 950: '#09090b',
65
+ 50: "#fafafa",
66
+ 100: "#f4f4f5",
67
+ 200: "#e4e4e7",
68
+ 300: "#d4d4d8",
69
+ 400: "#a1a1aa",
70
+ 500: "#71717a",
71
+ 600: "#52525b",
72
+ 700: "#3f3f46",
73
+ 800: "#27272a",
74
+ 900: "#18181b",
75
+ 950: "#09090b",
70
76
  },
71
77
  // Ice - Cool blue tones (professional, tech)
72
78
  // Dark shades are muted for comfortable dark mode backgrounds
73
79
  ice: {
74
- 50: '#f0f9ff',
75
- 100: '#e0f2fe',
76
- 200: '#bae6fd',
77
- 300: '#7dd3fc',
78
- 400: '#38bdf8',
79
- 500: '#0ea5e9',
80
- 600: '#0284c7',
81
- 700: '#0369a1',
82
- 800: '#0f2d3d', // Darkened and desaturated for dark mode
83
- 900: '#0a1f2c', // Darkened and desaturated for dark mode
84
- 950: '#06141c', // Very dark blue-gray for dark mode bg
80
+ 50: "#f0f9ff",
81
+ 100: "#e0f2fe",
82
+ 200: "#bae6fd",
83
+ 300: "#7dd3fc",
84
+ 400: "#38bdf8",
85
+ 500: "#0ea5e9",
86
+ 600: "#0284c7",
87
+ 700: "#0369a1",
88
+ 800: "#0f2d3d", // Darkened and desaturated for dark mode
89
+ 900: "#0a1f2c", // Darkened and desaturated for dark mode
90
+ 950: "#06141c", // Very dark blue-gray for dark mode bg
85
91
  },
86
92
  // Sand - Warm brown/terracotta tones (organic, earthy)
87
93
  // Dark shades are muted for comfortable dark mode backgrounds
88
94
  sand: {
89
- 50: '#fdf8f3',
90
- 100: '#f5ebe0',
91
- 200: '#e8d5c4',
92
- 300: '#d4b89c',
93
- 400: '#c19a6b',
94
- 500: '#a67c52',
95
- 600: '#8b5e34',
96
- 700: '#6f4518',
97
- 800: '#231a12', // Darkened and desaturated for dark mode
98
- 900: '#181210', // Darkened and desaturated for dark mode
99
- 950: '#0f0c09', // Very dark warm gray for dark mode bg
95
+ 50: "#fdf8f3",
96
+ 100: "#f5ebe0",
97
+ 200: "#e8d5c4",
98
+ 300: "#d4b89c",
99
+ 400: "#c19a6b",
100
+ 500: "#a67c52",
101
+ 600: "#8b5e34",
102
+ 700: "#6f4518",
103
+ 800: "#231a12", // Darkened and desaturated for dark mode
104
+ 900: "#181210", // Darkened and desaturated for dark mode
105
+ 950: "#0f0c09", // Very dark warm gray for dark mode bg
100
106
  },
101
107
  // Earth - Green/olive tones (natural, growth)
102
108
  // Dark shades are muted for comfortable dark mode backgrounds
103
109
  earth: {
104
- 50: '#f5f7f2',
105
- 100: '#e8ede3',
106
- 200: '#d1dbc6',
107
- 300: '#b3c4a0',
108
- 400: '#8fa872',
109
- 500: '#6b8c4e',
110
- 600: '#517035',
111
- 700: '#3d5527',
112
- 800: '#1a2316', // Darkened and desaturated for dark mode
113
- 900: '#121810', // Darkened and desaturated for dark mode
114
- 950: '#0a0f08', // Very dark green-gray for dark mode bg
110
+ 50: "#f5f7f2",
111
+ 100: "#e8ede3",
112
+ 200: "#d1dbc6",
113
+ 300: "#b3c4a0",
114
+ 400: "#8fa872",
115
+ 500: "#6b8c4e",
116
+ 600: "#517035",
117
+ 700: "#3d5527",
118
+ 800: "#1a2316", // Darkened and desaturated for dark mode
119
+ 900: "#121810", // Darkened and desaturated for dark mode
120
+ 950: "#0a0f08", // Very dark green-gray for dark mode bg
115
121
  },
116
122
  // Fire - Warm red/orange tones (energy, passion)
117
123
  // Dark shades are muted for comfortable dark mode backgrounds
118
124
  fire: {
119
- 50: '#fff7ed',
120
- 100: '#ffedd5',
121
- 200: '#fed7aa',
122
- 300: '#fdba74',
123
- 400: '#fb923c',
124
- 500: '#f97316',
125
- 600: '#ea580c',
126
- 700: '#c2410c',
127
- 800: '#2d1810', // Darkened and desaturated for dark mode
128
- 900: '#1c100a', // Darkened and desaturated for dark mode
129
- 950: '#120a06', // Very dark warm gray for dark mode bg
125
+ 50: "#fff7ed",
126
+ 100: "#ffedd5",
127
+ 200: "#fed7aa",
128
+ 300: "#fdba74",
129
+ 400: "#fb923c",
130
+ 500: "#f97316",
131
+ 600: "#ea580c",
132
+ 700: "#c2410c",
133
+ 800: "#2d1810", // Darkened and desaturated for dark mode
134
+ 900: "#1c100a", // Darkened and desaturated for dark mode
135
+ 950: "#120a06", // Very dark warm gray for dark mode bg
130
136
  },
131
137
  // Fragments - Rich saturated green tones (the Fragments brand palette)
132
138
  // Dark shades anchor to the Fragments marketing aesthetic
133
139
  fragments: {
134
- 50: '#f0f7f3',
135
- 100: '#dceee3',
136
- 200: '#b8ddc6',
137
- 300: '#88c5a0',
138
- 400: '#5aaa7a',
139
- 500: '#3d8f60',
140
- 600: '#2d7049',
141
- 700: '#235536',
142
- 800: '#1a3025', // Dark card surface
143
- 900: '#142318', // Dark surface
144
- 950: '#0d1f17', // Darkest bg
140
+ 50: "#f0f7f3",
141
+ 100: "#dceee3",
142
+ 200: "#b8ddc6",
143
+ 300: "#88c5a0",
144
+ 400: "#5aaa7a",
145
+ 500: "#3d8f60",
146
+ 600: "#2d7049",
147
+ 700: "#235536",
148
+ 800: "#1a3025", // Dark card surface
149
+ 900: "#142318", // Dark surface
150
+ 950: "#0d1f17", // Darkest bg
145
151
  },
146
152
  };
147
153
 
@@ -163,45 +169,45 @@ interface SemanticColors {
163
169
  export const PALETTE_SEMANTIC_COLORS: Record<NeutralPalette, SemanticColors> = {
164
170
  // Stone - Standard semantic colors (vibrant, universal)
165
171
  stone: {
166
- success: '#22c55e', // Green 500
167
- warning: '#f59e0b', // Amber 500
168
- danger: '#ef4444', // Red 500
169
- info: '#3b82f6', // Blue 500
172
+ success: "#22c55e", // Green 500
173
+ warning: "#f59e0b", // Amber 500
174
+ danger: "#ef4444", // Red 500
175
+ info: "#3b82f6", // Blue 500
170
176
  },
171
177
  // Ice - Cool blue-shifted semantic colors
172
178
  ice: {
173
- success: '#10b981', // Emerald 500 (cooler green)
174
- warning: '#f59e0b', // Amber 500
175
- danger: '#f43f5e', // Rose 500 (cooler red)
176
- info: '#0ea5e9', // Sky 500 (matches palette)
179
+ success: "#10b981", // Emerald 500 (cooler green)
180
+ warning: "#f59e0b", // Amber 500
181
+ danger: "#f43f5e", // Rose 500 (cooler red)
182
+ info: "#0ea5e9", // Sky 500 (matches palette)
177
183
  },
178
184
  // Earth - Natural, muted semantic colors
179
185
  earth: {
180
- success: '#22c55e', // Green 500 (natural)
181
- warning: '#d97706', // Amber 600 (earthier)
182
- danger: '#dc2626', // Red 600 (deeper)
183
- info: '#0284c7', // Sky 600 (muted)
186
+ success: "#22c55e", // Green 500 (natural)
187
+ warning: "#d97706", // Amber 600 (earthier)
188
+ danger: "#dc2626", // Red 600 (deeper)
189
+ info: "#0284c7", // Sky 600 (muted)
184
190
  },
185
191
  // Sand - Warm, terracotta-shifted semantic colors
186
192
  sand: {
187
- success: '#16a34a', // Green 600 (warmer)
188
- warning: '#ea580c', // Orange 600 (warm)
189
- danger: '#dc2626', // Red 600
190
- info: '#2563eb', // Blue 600
193
+ success: "#16a34a", // Green 600 (warmer)
194
+ warning: "#ea580c", // Orange 600 (warm)
195
+ danger: "#dc2626", // Red 600
196
+ info: "#2563eb", // Blue 600
191
197
  },
192
198
  // Fire - Warm, vibrant semantic colors
193
199
  fire: {
194
- success: '#16a34a', // Green 600
195
- warning: '#f59e0b', // Amber 500
196
- danger: '#dc2626', // Red 600 (complements orange)
197
- info: '#2563eb', // Blue 600
200
+ success: "#16a34a", // Green 600
201
+ warning: "#f59e0b", // Amber 500
202
+ danger: "#dc2626", // Red 600 (complements orange)
203
+ info: "#2563eb", // Blue 600
198
204
  },
199
205
  // Fragments - Brand-complementary semantic colors
200
206
  fragments: {
201
- success: '#39d98a', // Vibrant green (brand signature)
202
- warning: '#f59e0b', // Amber 500
203
- danger: '#ef4444', // Red 500
204
- info: '#3b82f6', // Blue 500
207
+ success: "#39d98a", // Vibrant green (brand signature)
208
+ warning: "#f59e0b", // Amber 500
209
+ danger: "#ef4444", // Red 500
210
+ info: "#3b82f6", // Blue 500
205
211
  },
206
212
  };
207
213
 
@@ -225,38 +231,7 @@ export function getSemanticColors(
225
231
  // Radius Styles
226
232
  // ============================================
227
233
 
228
- export const RADIUS_STYLES: Record<RadiusStyle, RadiusConfig> = {
229
- sharp: {
230
- sm: '0',
231
- md: '0',
232
- lg: '0',
233
- xl: '0',
234
- },
235
- subtle: {
236
- sm: '0.125rem',
237
- md: '0.25rem',
238
- lg: '0.375rem',
239
- xl: '0.5rem',
240
- },
241
- default: {
242
- sm: '0.25rem',
243
- md: '0.429rem',
244
- lg: '0.571rem',
245
- xl: '0.857rem',
246
- },
247
- rounded: {
248
- sm: '0.375rem',
249
- md: '0.5rem',
250
- lg: '0.75rem',
251
- xl: '1rem',
252
- },
253
- pill: {
254
- sm: '0.5rem',
255
- md: '0.75rem',
256
- lg: '1rem',
257
- xl: '1.5rem',
258
- },
259
- };
234
+ export const RADIUS_STYLES: Record<RadiusStyle, RadiusConfig> = MEASUREMENT_PROFILES.radius;
260
235
 
261
236
  // ============================================
262
237
  // Color Utility Functions
@@ -283,7 +258,7 @@ function hexToRgb(hex: string): { r: number; g: number; b: number } {
283
258
  function rgbToHex(r: number, g: number, b: number): string {
284
259
  const toHex = (n: number) => {
285
260
  const clamped = Math.max(0, Math.min(255, Math.round(n)));
286
- return clamped.toString(16).padStart(2, '0');
261
+ return clamped.toString(16).padStart(2, "0");
287
262
  };
288
263
  return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
289
264
  }
@@ -294,11 +269,7 @@ function rgbToHex(r: number, g: number, b: number): string {
294
269
  function lighten(hex: string, percent: number): string {
295
270
  const { r, g, b } = hexToRgb(hex);
296
271
  const factor = percent / 100;
297
- return rgbToHex(
298
- r + (255 - r) * factor,
299
- g + (255 - g) * factor,
300
- b + (255 - b) * factor
301
- );
272
+ return rgbToHex(r + (255 - r) * factor, g + (255 - g) * factor, b + (255 - b) * factor);
302
273
  }
303
274
 
304
275
  /**
@@ -318,11 +289,7 @@ function mixColors(color1: string, color2: string, weight: number): string {
318
289
  const c2 = hexToRgb(color2);
319
290
  const w = weight / 100;
320
291
 
321
- return rgbToHex(
322
- c1.r * w + c2.r * (1 - w),
323
- c1.g * w + c2.g * (1 - w),
324
- c1.b * w + c2.b * (1 - w)
325
- );
292
+ return rgbToHex(c1.r * w + c2.r * (1 - w), c1.g * w + c2.g * (1 - w), c1.b * w + c2.b * (1 - w));
326
293
  }
327
294
 
328
295
  // ============================================
@@ -407,7 +374,7 @@ export function deriveDarkAccent(brand: string): string {
407
374
 
408
375
  // For grayscale/neutral brands (like #18181b), use light gray
409
376
  if (saturation < 0.15) {
410
- return '#f2f2f2';
377
+ return "#f2f2f2";
411
378
  }
412
379
 
413
380
  // For bright, saturated colors (like pure red #ff0000), they're already
@@ -433,10 +400,7 @@ export function deriveDarkAccent(brand: string): string {
433
400
  /**
434
401
  * Interpolate between two shades for half-steps
435
402
  */
436
- function interpolateShade(
437
- palette: PaletteShades,
438
- level: number
439
- ): string {
403
+ function interpolateShade(palette: PaletteShades, level: number): string {
440
404
  const levels = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];
441
405
 
442
406
  // If it's a standard level, return directly
@@ -468,7 +432,7 @@ function interpolateShade(
468
432
  export function deriveSurfaces(
469
433
  palette: PaletteShades,
470
434
  isDark: boolean,
471
- paletteName: NeutralPalette = 'stone'
435
+ paletteName: NeutralPalette = "stone"
472
436
  ): {
473
437
  primary: string;
474
438
  secondary: string;
@@ -479,7 +443,7 @@ export function deriveSurfaces(
479
443
  active: string;
480
444
  } {
481
445
  // Stone palette uses neutral backgrounds (white in light, dark grays in dark)
482
- const isColorful = paletteName !== 'stone';
446
+ const isColorful = paletteName !== "stone";
483
447
 
484
448
  if (isDark) {
485
449
  return {
@@ -488,8 +452,8 @@ export function deriveSurfaces(
488
452
  tertiary: palette[800],
489
453
  elevated: interpolateShade(palette, 875),
490
454
  subtle: interpolateShade(palette, 925),
491
- hover: 'rgba(255, 255, 255, 0.05)',
492
- active: 'rgba(255, 255, 255, 0.08)',
455
+ hover: "rgba(255, 255, 255, 0.05)",
456
+ active: "rgba(255, 255, 255, 0.08)",
493
457
  };
494
458
  }
495
459
 
@@ -499,22 +463,22 @@ export function deriveSurfaces(
499
463
  primary: palette[50],
500
464
  secondary: palette[100],
501
465
  tertiary: palette[200],
502
- elevated: '#ffffff',
466
+ elevated: "#ffffff",
503
467
  subtle: palette[50],
504
- hover: 'rgba(0, 0, 0, 0.04)',
505
- active: 'rgba(0, 0, 0, 0.06)',
468
+ hover: "rgba(0, 0, 0, 0.04)",
469
+ active: "rgba(0, 0, 0, 0.06)",
506
470
  };
507
471
  }
508
472
 
509
473
  // Stone palette: neutral white backgrounds
510
474
  return {
511
- primary: '#ffffff',
475
+ primary: "#ffffff",
512
476
  secondary: palette[100],
513
477
  tertiary: palette[100],
514
- elevated: '#ffffff',
478
+ elevated: "#ffffff",
515
479
  subtle: palette[50],
516
- hover: 'rgba(0, 0, 0, 0.04)',
517
- active: 'rgba(0, 0, 0, 0.06)',
480
+ hover: "rgba(0, 0, 0, 0.04)",
481
+ active: "rgba(0, 0, 0, 0.06)",
518
482
  };
519
483
  }
520
484
 
@@ -529,7 +493,7 @@ export function deriveSurfaces(
529
493
  export function deriveText(
530
494
  palette: PaletteShades,
531
495
  isDark: boolean,
532
- paletteName: NeutralPalette = 'stone'
496
+ paletteName: NeutralPalette = "stone"
533
497
  ): {
534
498
  primary: string;
535
499
  secondary: string;
@@ -548,7 +512,7 @@ export function deriveText(
548
512
  }
549
513
 
550
514
  // Light mode background — stone uses white, colorful palettes use palette[50]
551
- const bgPrimary = paletteName === 'stone' ? '#ffffff' : palette[50];
515
+ const bgPrimary = paletteName === "stone" ? "#ffffff" : palette[50];
552
516
  const aaaTarget = 7.0;
553
517
 
554
518
  return {
@@ -571,14 +535,14 @@ export function deriveBorders(
571
535
  } {
572
536
  if (isDark) {
573
537
  return {
574
- default: 'rgba(255, 255, 255, 0.08)',
575
- strong: 'rgba(255, 255, 255, 0.14)',
538
+ default: "rgba(255, 255, 255, 0.08)",
539
+ strong: "rgba(255, 255, 255, 0.14)",
576
540
  };
577
541
  }
578
542
 
579
543
  return {
580
- default: 'rgba(0, 0, 0, 0.08)',
581
- strong: 'rgba(0, 0, 0, 0.14)',
544
+ default: "rgba(0, 0, 0, 0.08)",
545
+ strong: "rgba(0, 0, 0, 0.14)",
582
546
  };
583
547
  }
584
548
 
@@ -592,16 +556,16 @@ export function deriveShadows(isDark: boolean): {
592
556
  } {
593
557
  if (isDark) {
594
558
  return {
595
- sm: '0 1px 2px 0 rgba(0, 0, 0, 0.2)',
596
- md: '0 2px 4px -1px rgba(0, 0, 0, 0.25), 0 1px 3px -2px rgba(0, 0, 0, 0.2)',
597
- lg: '0 8px 12px -3px rgba(0, 0, 0, 0.35), 0 3px 5px -4px rgba(0, 0, 0, 0.25)',
559
+ sm: "0 1px 2px 0 rgba(0, 0, 0, 0.2)",
560
+ md: "0 2px 4px -1px rgba(0, 0, 0, 0.25), 0 1px 3px -2px rgba(0, 0, 0, 0.2)",
561
+ lg: "0 8px 12px -3px rgba(0, 0, 0, 0.35), 0 3px 5px -4px rgba(0, 0, 0, 0.25)",
598
562
  };
599
563
  }
600
564
 
601
565
  return {
602
- sm: '0 1px 2px 0 rgba(0, 0, 0, 0.03)',
603
- md: '0 2px 4px -1px rgba(0, 0, 0, 0.06), 0 1px 3px -2px rgba(0, 0, 0, 0.04)',
604
- lg: '0 8px 12px -3px rgba(0, 0, 0, 0.08), 0 3px 5px -4px rgba(0, 0, 0, 0.05)',
566
+ sm: "0 1px 2px 0 rgba(0, 0, 0, 0.03)",
567
+ md: "0 2px 4px -1px rgba(0, 0, 0, 0.06), 0 1px 3px -2px rgba(0, 0, 0, 0.04)",
568
+ lg: "0 8px 12px -3px rgba(0, 0, 0, 0.08), 0 3px 5px -4px rgba(0, 0, 0, 0.05)",
605
569
  };
606
570
  }
607
571
 
@@ -614,9 +578,7 @@ export function deriveShadows(isDark: boolean): {
614
578
  */
615
579
  function srgbLinearize(channel: number): number {
616
580
  const srgb = channel / 255;
617
- return srgb <= 0.04045
618
- ? srgb / 12.92
619
- : Math.pow((srgb + 0.055) / 1.055, 2.4);
581
+ return srgb <= 0.04045 ? srgb / 12.92 : Math.pow((srgb + 0.055) / 1.055, 2.4);
620
582
  }
621
583
 
622
584
  /**
@@ -662,7 +624,7 @@ function ensureContrast(fg: string, bg: string, targetRatio: number): string {
662
624
  */
663
625
  export function deriveSemanticText(color: string, isDark: boolean): string {
664
626
  const target = isDark ? 7.5 : 7.0;
665
- const bg = isDark ? '#0a0a0a' : '#ffffff';
627
+ const bg = isDark ? "#0a0a0a" : "#ffffff";
666
628
  let adjusted = color;
667
629
 
668
630
  for (let i = 0; i < 40; i++) {
@@ -698,9 +660,9 @@ export function deriveSemanticHover(color: string): string {
698
660
  // ============================================
699
661
 
700
662
  export const DEFAULT_SEEDS: SeedConfig = {
701
- brand: '#18181b',
702
- neutral: 'stone',
703
- density: 'default',
704
- radiusStyle: 'default',
663
+ brand: "#18181b",
664
+ neutral: "stone",
665
+ density: "default",
666
+ radiusStyle: "default",
705
667
  // Semantic colors omitted - will use palette defaults from PALETTE_SEMANTIC_COLORS
706
668
  };
@@ -8,6 +8,8 @@
8
8
 
9
9
  import {
10
10
  type SeedConfig,
11
+ type DensityPreset,
12
+ type RadiusStyle,
11
13
  PALETTES,
12
14
  RADIUS_STYLES,
13
15
  getSemanticColors,
@@ -21,7 +23,7 @@ import {
21
23
  deriveSemanticText,
22
24
  deriveSemanticBg,
23
25
  deriveSemanticHover,
24
- } from './seed-derivation';
26
+ } from "./seed-derivation";
25
27
 
26
28
  // ============================================
27
29
  // Theme Output Types
@@ -108,7 +110,8 @@ export interface ThemeConfig {
108
110
  radius?: ThemeRadius;
109
111
  shadows?: ThemeShadows;
110
112
  dark?: ThemeDarkMode;
111
- density?: string;
113
+ density?: DensityPreset;
114
+ radiusStyle?: RadiusStyle;
112
115
  }
113
116
 
114
117
  // ============================================
@@ -157,8 +160,9 @@ export function seedsToTheme(seeds: SeedConfig): ThemeConfig {
157
160
  const infoTextDark = deriveSemanticText(info, true);
158
161
 
159
162
  return {
160
- name: 'Custom',
163
+ name: "Custom",
161
164
  density: seeds.density,
165
+ radiusStyle: seeds.radiusStyle,
162
166
  colors: {
163
167
  accent: seeds.brand,
164
168
  accentHover: deriveAccentHover(seeds.brand, false),
@@ -199,7 +203,7 @@ export function seedsToTheme(seeds: SeedConfig): ThemeConfig {
199
203
  sm: radius.sm,
200
204
  md: radius.md,
201
205
  lg: radius.lg,
202
- full: '9999px',
206
+ full: "9999px",
203
207
  },
204
208
  shadows: {
205
209
  sm: lightShadows.sm,
@@ -239,7 +243,7 @@ export function seedsToTheme(seeds: SeedConfig): ThemeConfig {
239
243
  successBg: deriveSemanticBg(success, true),
240
244
  warningBg: deriveSemanticBg(warning, true),
241
245
  infoBg: deriveSemanticBg(info, true),
242
- backdrop: 'rgba(0, 0, 0, 0.8)',
246
+ backdrop: "rgba(0, 0, 0, 0.8)",
243
247
  },
244
248
  };
245
249
  }
@@ -257,55 +261,79 @@ export interface PresetDefinition {
257
261
 
258
262
  const PRESET_DEFINITIONS: Record<string, PresetDefinition> = {
259
263
  default: {
260
- name: 'Default',
261
- seeds: { brand: '#18181b', neutral: 'stone', density: 'default', radiusStyle: 'default' },
264
+ name: "Default",
265
+ seeds: { brand: "#18181b", neutral: "stone", density: "default", radiusStyle: "default" },
262
266
  },
263
267
  neutral: {
264
- name: 'Neutral',
265
- seeds: { brand: '#71717a', neutral: 'stone', density: 'default', radiusStyle: 'default' },
268
+ name: "Neutral",
269
+ seeds: { brand: "#71717a", neutral: "stone", density: "default", radiusStyle: "default" },
266
270
  },
267
271
  slate: {
268
- name: 'Slate',
269
- seeds: { brand: '#64748b', neutral: 'stone', density: 'default', radiusStyle: 'default' },
272
+ name: "Slate",
273
+ seeds: { brand: "#64748b", neutral: "stone", density: "default", radiusStyle: "default" },
270
274
  overrides: {
271
- surfaces: { bgSecondary: '#f1f5f9', bgTertiary: '#e2e8f0' },
272
- dark: { surfaces: { bgSecondary: '#1e293b', bgTertiary: '#334155' } },
275
+ surfaces: { bgSecondary: "#f1f5f9", bgTertiary: "#e2e8f0" },
276
+ dark: { surfaces: { bgSecondary: "#1e293b", bgTertiary: "#334155" } },
273
277
  },
274
278
  },
275
279
  emerald: {
276
- name: 'Emerald',
277
- seeds: { brand: '#10b981', neutral: 'stone', density: 'default', radiusStyle: 'default' },
280
+ name: "Emerald",
281
+ seeds: { brand: "#10b981", neutral: "stone", density: "default", radiusStyle: "default" },
278
282
  },
279
283
  rose: {
280
- name: 'Rose',
281
- seeds: { brand: '#f43f5e', neutral: 'stone', density: 'default', radiusStyle: 'default' },
284
+ name: "Rose",
285
+ seeds: { brand: "#f43f5e", neutral: "stone", density: "default", radiusStyle: "default" },
282
286
  },
283
287
  classic: {
284
- name: 'Classic',
288
+ name: "Classic",
285
289
  seeds: {
286
- brand: '#1e40af', neutral: 'stone', density: 'default', radiusStyle: 'default',
287
- danger: '#b91c1c', success: '#15803d', warning: '#a16207', info: '#0369a1',
290
+ brand: "#1e40af",
291
+ neutral: "stone",
292
+ density: "default",
293
+ radiusStyle: "default",
294
+ danger: "#b91c1c",
295
+ success: "#15803d",
296
+ warning: "#a16207",
297
+ info: "#0369a1",
288
298
  },
289
299
  },
290
300
  bold: {
291
- name: 'Bold',
301
+ name: "Bold",
292
302
  seeds: {
293
- brand: '#7c3aed', neutral: 'stone', density: 'default', radiusStyle: 'default',
294
- danger: '#dc2626', success: '#16a34a', warning: '#ea580c', info: '#2563eb',
303
+ brand: "#7c3aed",
304
+ neutral: "stone",
305
+ density: "default",
306
+ radiusStyle: "default",
307
+ danger: "#dc2626",
308
+ success: "#16a34a",
309
+ warning: "#ea580c",
310
+ info: "#2563eb",
295
311
  },
296
312
  },
297
313
  neon: {
298
- name: 'Neon',
314
+ name: "Neon",
299
315
  seeds: {
300
- brand: '#06b6d4', neutral: 'stone', density: 'default', radiusStyle: 'default',
301
- danger: '#f43f5e', success: '#4ade80', warning: '#fbbf24', info: '#a78bfa',
316
+ brand: "#06b6d4",
317
+ neutral: "stone",
318
+ density: "default",
319
+ radiusStyle: "default",
320
+ danger: "#f43f5e",
321
+ success: "#4ade80",
322
+ warning: "#fbbf24",
323
+ info: "#a78bfa",
302
324
  },
303
325
  },
304
326
  minimal: {
305
- name: 'Minimal',
327
+ name: "Minimal",
306
328
  seeds: {
307
- brand: '#525252', neutral: 'stone', density: 'default', radiusStyle: 'default',
308
- danger: '#78716c', success: '#65a30d', warning: '#ca8a04', info: '#64748b',
329
+ brand: "#525252",
330
+ neutral: "stone",
331
+ density: "default",
332
+ radiusStyle: "default",
333
+ danger: "#78716c",
334
+ success: "#65a30d",
335
+ warning: "#ca8a04",
336
+ info: "#64748b",
309
337
  },
310
338
  },
311
339
  };
@@ -315,7 +343,7 @@ const PRESET_DEFINITIONS: Record<string, PresetDefinition> = {
315
343
  // ============================================
316
344
 
317
345
  function isPlainObject(val: unknown): val is Record<string, unknown> {
318
- return typeof val === 'object' && val !== null && !Array.isArray(val);
346
+ return typeof val === "object" && val !== null && !Array.isArray(val);
319
347
  }
320
348
 
321
349
  function deepMergeObjects(