@usefragments/ui 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (867) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +318 -0
  3. package/dist/assets/fragments-logo.cjs +32 -0
  4. package/dist/assets/fragments-logo.d.ts +13 -0
  5. package/dist/assets/fragments-logo.d.ts.map +1 -0
  6. package/dist/assets/fragments-logo.js +32 -0
  7. package/dist/assets/ui.css +12290 -0
  8. package/dist/blocks/AccountSettings.block.d.ts +3 -0
  9. package/dist/blocks/AccountSettings.block.d.ts.map +1 -0
  10. package/dist/blocks/ActivityFeed.block.d.ts +3 -0
  11. package/dist/blocks/ActivityFeed.block.d.ts.map +1 -0
  12. package/dist/blocks/ActivityFeedSkeleton.block.d.ts +3 -0
  13. package/dist/blocks/ActivityFeedSkeleton.block.d.ts.map +1 -0
  14. package/dist/blocks/BlogEditor.block.d.ts +3 -0
  15. package/dist/blocks/BlogEditor.block.d.ts.map +1 -0
  16. package/dist/blocks/ChatInterface.block.d.ts +3 -0
  17. package/dist/blocks/ChatInterface.block.d.ts.map +1 -0
  18. package/dist/blocks/ChatMessages.block.d.ts +3 -0
  19. package/dist/blocks/ChatMessages.block.d.ts.map +1 -0
  20. package/dist/blocks/CheckoutForm.block.d.ts +3 -0
  21. package/dist/blocks/CheckoutForm.block.d.ts.map +1 -0
  22. package/dist/blocks/CommandPalette.block.d.ts +3 -0
  23. package/dist/blocks/CommandPalette.block.d.ts.map +1 -0
  24. package/dist/blocks/ContactForm.block.d.ts +3 -0
  25. package/dist/blocks/ContactForm.block.d.ts.map +1 -0
  26. package/dist/blocks/DashboardLayout.block.d.ts +3 -0
  27. package/dist/blocks/DashboardLayout.block.d.ts.map +1 -0
  28. package/dist/blocks/DashboardPage.block.d.ts +3 -0
  29. package/dist/blocks/DashboardPage.block.d.ts.map +1 -0
  30. package/dist/blocks/DashboardSkeleton.block.d.ts +3 -0
  31. package/dist/blocks/DashboardSkeleton.block.d.ts.map +1 -0
  32. package/dist/blocks/DataTable.block.d.ts +3 -0
  33. package/dist/blocks/DataTable.block.d.ts.map +1 -0
  34. package/dist/blocks/EmptyState.block.d.ts +3 -0
  35. package/dist/blocks/EmptyState.block.d.ts.map +1 -0
  36. package/dist/blocks/FAQSection.block.d.ts +3 -0
  37. package/dist/blocks/FAQSection.block.d.ts.map +1 -0
  38. package/dist/blocks/FeatureGrid.block.d.ts +3 -0
  39. package/dist/blocks/FeatureGrid.block.d.ts.map +1 -0
  40. package/dist/blocks/HeroSection.block.d.ts +3 -0
  41. package/dist/blocks/HeroSection.block.d.ts.map +1 -0
  42. package/dist/blocks/LoginForm.block.d.ts +3 -0
  43. package/dist/blocks/LoginForm.block.d.ts.map +1 -0
  44. package/dist/blocks/NavigationHeader.block.d.ts +3 -0
  45. package/dist/blocks/NavigationHeader.block.d.ts.map +1 -0
  46. package/dist/blocks/PaginatedTable.block.d.ts +3 -0
  47. package/dist/blocks/PaginatedTable.block.d.ts.map +1 -0
  48. package/dist/blocks/PricingComparison.block.d.ts +3 -0
  49. package/dist/blocks/PricingComparison.block.d.ts.map +1 -0
  50. package/dist/blocks/ProductCard.block.d.ts +3 -0
  51. package/dist/blocks/ProductCard.block.d.ts.map +1 -0
  52. package/dist/blocks/RegistrationForm.block.d.ts +3 -0
  53. package/dist/blocks/RegistrationForm.block.d.ts.map +1 -0
  54. package/dist/blocks/SettingsDrawer.block.d.ts +3 -0
  55. package/dist/blocks/SettingsDrawer.block.d.ts.map +1 -0
  56. package/dist/blocks/SettingsPanel.block.d.ts +3 -0
  57. package/dist/blocks/SettingsPanel.block.d.ts.map +1 -0
  58. package/dist/blocks/ShoppingCart.block.d.ts +3 -0
  59. package/dist/blocks/ShoppingCart.block.d.ts.map +1 -0
  60. package/dist/blocks/StatsCard.block.d.ts +3 -0
  61. package/dist/blocks/StatsCard.block.d.ts.map +1 -0
  62. package/dist/blocks/StatsCardSkeleton.block.d.ts +3 -0
  63. package/dist/blocks/StatsCardSkeleton.block.d.ts.map +1 -0
  64. package/dist/blocks/TableSkeleton.block.d.ts +3 -0
  65. package/dist/blocks/TableSkeleton.block.d.ts.map +1 -0
  66. package/dist/blocks/ThinkingStates.block.d.ts +3 -0
  67. package/dist/blocks/ThinkingStates.block.d.ts.map +1 -0
  68. package/dist/blocks/components/ActivityFeed.d.ts +25 -0
  69. package/dist/blocks/components/ActivityFeed.d.ts.map +1 -0
  70. package/dist/blocks/components/DashboardLayout.d.ts +13 -0
  71. package/dist/blocks/components/DashboardLayout.d.ts.map +1 -0
  72. package/dist/blocks/components/LoginForm.d.ts +16 -0
  73. package/dist/blocks/components/LoginForm.d.ts.map +1 -0
  74. package/dist/blocks/components/StatsCard.d.ts +17 -0
  75. package/dist/blocks/components/StatsCard.d.ts.map +1 -0
  76. package/dist/blocks/components/index.d.ts +9 -0
  77. package/dist/blocks/components/index.d.ts.map +1 -0
  78. package/dist/chart.cjs +236 -0
  79. package/dist/chart.js +219 -0
  80. package/dist/codeblock.cjs +599 -0
  81. package/dist/codeblock.js +561 -0
  82. package/dist/colorpicker.cjs +149 -0
  83. package/dist/colorpicker.js +132 -0
  84. package/dist/components/Accordion/Accordion.module.scss.cjs +29 -0
  85. package/dist/components/Accordion/Accordion.module.scss.js +29 -0
  86. package/dist/components/Accordion/index.cjs +201 -0
  87. package/dist/components/Accordion/index.d.ts +62 -0
  88. package/dist/components/Accordion/index.d.ts.map +1 -0
  89. package/dist/components/Accordion/index.js +184 -0
  90. package/dist/components/Alert/Alert.module.scss.cjs +41 -0
  91. package/dist/components/Alert/Alert.module.scss.js +41 -0
  92. package/dist/components/Alert/index.cjs +151 -0
  93. package/dist/components/Alert/index.d.ts +61 -0
  94. package/dist/components/Alert/index.d.ts.map +1 -0
  95. package/dist/components/Alert/index.js +134 -0
  96. package/dist/components/AppShell/AppShell.module.scss.cjs +35 -0
  97. package/dist/components/AppShell/AppShell.module.scss.js +35 -0
  98. package/dist/components/AppShell/index.cjs +285 -0
  99. package/dist/components/AppShell/index.d.ts +133 -0
  100. package/dist/components/AppShell/index.d.ts.map +1 -0
  101. package/dist/components/AppShell/index.js +268 -0
  102. package/dist/components/Avatar/Avatar.module.scss.cjs +44 -0
  103. package/dist/components/Avatar/Avatar.module.scss.js +44 -0
  104. package/dist/components/Avatar/index.cjs +238 -0
  105. package/dist/components/Avatar/index.d.ts +42 -0
  106. package/dist/components/Avatar/index.d.ts.map +1 -0
  107. package/dist/components/Avatar/index.js +221 -0
  108. package/dist/components/Badge/Badge.module.scss.cjs +51 -0
  109. package/dist/components/Badge/Badge.module.scss.js +51 -0
  110. package/dist/components/Badge/index.cjs +78 -0
  111. package/dist/components/Badge/index.d.ts +41 -0
  112. package/dist/components/Badge/index.d.ts.map +1 -0
  113. package/dist/components/Badge/index.js +61 -0
  114. package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +47 -0
  115. package/dist/components/BentoGrid/BentoGrid.module.scss.js +47 -0
  116. package/dist/components/BentoGrid/index.cjs +87 -0
  117. package/dist/components/BentoGrid/index.d.ts +43 -0
  118. package/dist/components/BentoGrid/index.d.ts.map +1 -0
  119. package/dist/components/BentoGrid/index.js +70 -0
  120. package/dist/components/Box/Box.module.scss.cjs +315 -0
  121. package/dist/components/Box/Box.module.scss.js +315 -0
  122. package/dist/components/Box/index.cjs +104 -0
  123. package/dist/components/Box/index.d.ts +62 -0
  124. package/dist/components/Box/index.d.ts.map +1 -0
  125. package/dist/components/Box/index.js +87 -0
  126. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.cjs +29 -0
  127. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +29 -0
  128. package/dist/components/Breadcrumbs/index.cjs +118 -0
  129. package/dist/components/Breadcrumbs/index.d.ts +32 -0
  130. package/dist/components/Breadcrumbs/index.d.ts.map +1 -0
  131. package/dist/components/Breadcrumbs/index.js +101 -0
  132. package/dist/components/Button/Button.module.scss.cjs +44 -0
  133. package/dist/components/Button/Button.module.scss.js +44 -0
  134. package/dist/components/Button/index.cjs +140 -0
  135. package/dist/components/Button/index.d.ts +39 -0
  136. package/dist/components/Button/index.d.ts.map +1 -0
  137. package/dist/components/Button/index.js +123 -0
  138. package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs +38 -0
  139. package/dist/components/ButtonGroup/ButtonGroup.module.scss.js +38 -0
  140. package/dist/components/ButtonGroup/index.cjs +36 -0
  141. package/dist/components/ButtonGroup/index.d.ts +11 -0
  142. package/dist/components/ButtonGroup/index.d.ts.map +1 -0
  143. package/dist/components/ButtonGroup/index.js +19 -0
  144. package/dist/components/Card/Card.module.scss.cjs +54 -0
  145. package/dist/components/Card/Card.module.scss.js +54 -0
  146. package/dist/components/Card/index.cjs +123 -0
  147. package/dist/components/Card/index.d.ts +62 -0
  148. package/dist/components/Card/index.d.ts.map +1 -0
  149. package/dist/components/Card/index.js +106 -0
  150. package/dist/components/Chart/Chart.module.scss.cjs +50 -0
  151. package/dist/components/Chart/Chart.module.scss.js +50 -0
  152. package/dist/components/Chart/index.d.ts +65 -0
  153. package/dist/components/Chart/index.d.ts.map +1 -0
  154. package/dist/components/Checkbox/Checkbox.module.scss.cjs +38 -0
  155. package/dist/components/Checkbox/Checkbox.module.scss.js +38 -0
  156. package/dist/components/Checkbox/index.cjs +179 -0
  157. package/dist/components/Checkbox/index.d.ts +68 -0
  158. package/dist/components/Checkbox/index.d.ts.map +1 -0
  159. package/dist/components/Checkbox/index.js +162 -0
  160. package/dist/components/Chip/Chip.module.scss.cjs +50 -0
  161. package/dist/components/Chip/Chip.module.scss.js +50 -0
  162. package/dist/components/Chip/index.cjs +138 -0
  163. package/dist/components/Chip/index.d.ts +38 -0
  164. package/dist/components/Chip/index.d.ts.map +1 -0
  165. package/dist/components/Chip/index.js +121 -0
  166. package/dist/components/Cloud/DashboardLayoutPrototypes.shared.d.ts +33 -0
  167. package/dist/components/Cloud/DashboardLayoutPrototypes.shared.d.ts.map +1 -0
  168. package/dist/components/Cloud/DashboardLayoutPrototypes.shell.d.ts +11 -0
  169. package/dist/components/Cloud/DashboardLayoutPrototypes.shell.d.ts.map +1 -0
  170. package/dist/components/Cloud/PullRequestsPrototypes.content.d.ts +5 -0
  171. package/dist/components/Cloud/PullRequestsPrototypes.content.d.ts.map +1 -0
  172. package/dist/components/Cloud/PullRequestsPrototypes.detail-panels.d.ts +4 -0
  173. package/dist/components/Cloud/PullRequestsPrototypes.detail-panels.d.ts.map +1 -0
  174. package/dist/components/Cloud/PullRequestsPrototypes.detail.d.ts +3 -0
  175. package/dist/components/Cloud/PullRequestsPrototypes.detail.d.ts.map +1 -0
  176. package/dist/components/Cloud/PullRequestsPrototypes.id-data.d.ts +86 -0
  177. package/dist/components/Cloud/PullRequestsPrototypes.id-data.d.ts.map +1 -0
  178. package/dist/components/Cloud/PullRequestsPrototypes.id-page.d.ts +2 -0
  179. package/dist/components/Cloud/PullRequestsPrototypes.id-page.d.ts.map +1 -0
  180. package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +68 -0
  181. package/dist/components/CodeBlock/CodeBlock.module.scss.js +68 -0
  182. package/dist/components/CodeBlock/index.d.ts +95 -0
  183. package/dist/components/CodeBlock/index.d.ts.map +1 -0
  184. package/dist/components/Collapsible/Collapsible.module.scss.cjs +35 -0
  185. package/dist/components/Collapsible/Collapsible.module.scss.js +35 -0
  186. package/dist/components/Collapsible/index.cjs +186 -0
  187. package/dist/components/Collapsible/index.d.ts +45 -0
  188. package/dist/components/Collapsible/index.d.ts.map +1 -0
  189. package/dist/components/Collapsible/index.js +186 -0
  190. package/dist/components/ColorPicker/ColorPicker.module.scss.cjs +47 -0
  191. package/dist/components/ColorPicker/ColorPicker.module.scss.js +47 -0
  192. package/dist/components/ColorPicker/index.d.ts +29 -0
  193. package/dist/components/ColorPicker/index.d.ts.map +1 -0
  194. package/dist/components/Combobox/Combobox.module.scss.cjs +74 -0
  195. package/dist/components/Combobox/Combobox.module.scss.js +74 -0
  196. package/dist/components/Combobox/index.cjs +402 -0
  197. package/dist/components/Combobox/index.d.ts +99 -0
  198. package/dist/components/Combobox/index.d.ts.map +1 -0
  199. package/dist/components/Combobox/index.js +385 -0
  200. package/dist/components/Command/Command.module.scss.cjs +38 -0
  201. package/dist/components/Command/Command.module.scss.js +38 -0
  202. package/dist/components/Command/index.cjs +415 -0
  203. package/dist/components/Command/index.d.ts +58 -0
  204. package/dist/components/Command/index.d.ts.map +1 -0
  205. package/dist/components/Command/index.js +398 -0
  206. package/dist/components/ComponentDefaults/index.cjs +51 -0
  207. package/dist/components/ComponentDefaults/index.d.ts +15 -0
  208. package/dist/components/ComponentDefaults/index.d.ts.map +1 -0
  209. package/dist/components/ComponentDefaults/index.js +34 -0
  210. package/dist/components/ConversationList/ConversationList.module.scss.cjs +35 -0
  211. package/dist/components/ConversationList/ConversationList.module.scss.js +35 -0
  212. package/dist/components/ConversationList/index.cjs +168 -0
  213. package/dist/components/ConversationList/index.d.ts +43 -0
  214. package/dist/components/ConversationList/index.d.ts.map +1 -0
  215. package/dist/components/ConversationList/index.js +151 -0
  216. package/dist/components/DataTable/DataTable.icons.cjs +69 -0
  217. package/dist/components/DataTable/DataTable.icons.d.ts +7 -0
  218. package/dist/components/DataTable/DataTable.icons.d.ts.map +1 -0
  219. package/dist/components/DataTable/DataTable.icons.js +69 -0
  220. package/dist/components/DataTable/DataTable.module.scss.cjs +107 -0
  221. package/dist/components/DataTable/DataTable.module.scss.js +107 -0
  222. package/dist/components/DataTable/DataTable.support.cjs +64 -0
  223. package/dist/components/DataTable/DataTable.support.d.ts +10 -0
  224. package/dist/components/DataTable/DataTable.support.d.ts.map +1 -0
  225. package/dist/components/DataTable/DataTable.support.js +47 -0
  226. package/dist/components/DataTable/DataTable.virtual.cjs +103 -0
  227. package/dist/components/DataTable/DataTable.virtual.d.ts +92 -0
  228. package/dist/components/DataTable/DataTable.virtual.d.ts.map +1 -0
  229. package/dist/components/DataTable/DataTable.virtual.js +86 -0
  230. package/dist/components/DataTable/index.d.ts +100 -0
  231. package/dist/components/DataTable/index.d.ts.map +1 -0
  232. package/dist/components/DatePicker/DatePicker.module.scss.cjs +104 -0
  233. package/dist/components/DatePicker/DatePicker.module.scss.js +104 -0
  234. package/dist/components/DatePicker/index.d.ts +86 -0
  235. package/dist/components/DatePicker/index.d.ts.map +1 -0
  236. package/dist/components/Dialog/Dialog.module.scss.cjs +47 -0
  237. package/dist/components/Dialog/Dialog.module.scss.js +47 -0
  238. package/dist/components/Dialog/index.cjs +135 -0
  239. package/dist/components/Dialog/index.d.ts +81 -0
  240. package/dist/components/Dialog/index.d.ts.map +1 -0
  241. package/dist/components/Dialog/index.js +135 -0
  242. package/dist/components/Drawer/Drawer.module.scss.cjs +71 -0
  243. package/dist/components/Drawer/Drawer.module.scss.js +71 -0
  244. package/dist/components/Drawer/index.cjs +194 -0
  245. package/dist/components/Drawer/index.d.ts +95 -0
  246. package/dist/components/Drawer/index.d.ts.map +1 -0
  247. package/dist/components/Drawer/index.js +177 -0
  248. package/dist/components/Editor/Editor.module.scss.cjs +56 -0
  249. package/dist/components/Editor/Editor.module.scss.js +56 -0
  250. package/dist/components/Editor/index.d.ts +120 -0
  251. package/dist/components/Editor/index.d.ts.map +1 -0
  252. package/dist/components/EmptyState/EmptyState.module.scss.cjs +29 -0
  253. package/dist/components/EmptyState/EmptyState.module.scss.js +29 -0
  254. package/dist/components/EmptyState/index.cjs +65 -0
  255. package/dist/components/EmptyState/index.d.ts +34 -0
  256. package/dist/components/EmptyState/index.d.ts.map +1 -0
  257. package/dist/components/EmptyState/index.js +48 -0
  258. package/dist/components/Field/Field.module.scss.cjs +17 -0
  259. package/dist/components/Field/Field.module.scss.js +17 -0
  260. package/dist/components/Field/index.cjs +71 -0
  261. package/dist/components/Field/index.d.ts +54 -0
  262. package/dist/components/Field/index.d.ts.map +1 -0
  263. package/dist/components/Field/index.js +71 -0
  264. package/dist/components/Fieldset/Fieldset.module.scss.cjs +14 -0
  265. package/dist/components/Fieldset/Fieldset.module.scss.js +14 -0
  266. package/dist/components/Fieldset/index.cjs +25 -0
  267. package/dist/components/Fieldset/index.d.ts +20 -0
  268. package/dist/components/Fieldset/index.d.ts.map +1 -0
  269. package/dist/components/Fieldset/index.js +25 -0
  270. package/dist/components/Form/Form.module.scss.cjs +8 -0
  271. package/dist/components/Form/Form.module.scss.js +8 -0
  272. package/dist/components/Form/index.cjs +33 -0
  273. package/dist/components/Form/index.d.ts +17 -0
  274. package/dist/components/Form/index.d.ts.map +1 -0
  275. package/dist/components/Form/index.js +33 -0
  276. package/dist/components/Grid/Grid.module.scss.cjs +185 -0
  277. package/dist/components/Grid/Grid.module.scss.js +185 -0
  278. package/dist/components/Grid/index.cjs +120 -0
  279. package/dist/components/Grid/index.d.ts +71 -0
  280. package/dist/components/Grid/index.d.ts.map +1 -0
  281. package/dist/components/Grid/index.js +103 -0
  282. package/dist/components/Header/Header.module.scss.cjs +89 -0
  283. package/dist/components/Header/Header.module.scss.js +89 -0
  284. package/dist/components/Header/index.cjs +378 -0
  285. package/dist/components/Header/index.d.ts +155 -0
  286. package/dist/components/Header/index.d.ts.map +1 -0
  287. package/dist/components/Header/index.js +361 -0
  288. package/dist/components/Icon/Icon.module.scss.cjs +29 -0
  289. package/dist/components/Icon/Icon.module.scss.js +29 -0
  290. package/dist/components/Icon/index.cjs +75 -0
  291. package/dist/components/Icon/index.d.ts +37 -0
  292. package/dist/components/Icon/index.d.ts.map +1 -0
  293. package/dist/components/Icon/index.js +58 -0
  294. package/dist/components/IconButton/IconButton.module.scss.cjs +29 -0
  295. package/dist/components/IconButton/IconButton.module.scss.js +29 -0
  296. package/dist/components/IconButton/index.cjs +66 -0
  297. package/dist/components/IconButton/index.d.ts +38 -0
  298. package/dist/components/IconButton/index.d.ts.map +1 -0
  299. package/dist/components/IconButton/index.js +49 -0
  300. package/dist/components/Image/Image.module.scss.cjs +62 -0
  301. package/dist/components/Image/Image.module.scss.js +62 -0
  302. package/dist/components/Image/index.cjs +92 -0
  303. package/dist/components/Image/index.d.ts +33 -0
  304. package/dist/components/Image/index.d.ts.map +1 -0
  305. package/dist/components/Image/index.js +75 -0
  306. package/dist/components/Input/Input.module.scss.cjs +62 -0
  307. package/dist/components/Input/Input.module.scss.js +62 -0
  308. package/dist/components/Input/index.cjs +209 -0
  309. package/dist/components/Input/index.d.ts +64 -0
  310. package/dist/components/Input/index.d.ts.map +1 -0
  311. package/dist/components/Input/index.js +192 -0
  312. package/dist/components/Link/Link.module.scss.cjs +27 -0
  313. package/dist/components/Link/Link.module.scss.js +27 -0
  314. package/dist/components/Link/index.cjs +80 -0
  315. package/dist/components/Link/index.d.ts +23 -0
  316. package/dist/components/Link/index.d.ts.map +1 -0
  317. package/dist/components/Link/index.js +63 -0
  318. package/dist/components/List/List.module.scss.cjs +52 -0
  319. package/dist/components/List/List.module.scss.js +52 -0
  320. package/dist/components/List/index.cjs +65 -0
  321. package/dist/components/List/index.d.ts +26 -0
  322. package/dist/components/List/index.d.ts.map +1 -0
  323. package/dist/components/List/index.js +48 -0
  324. package/dist/components/Listbox/Listbox.module.scss.cjs +29 -0
  325. package/dist/components/Listbox/Listbox.module.scss.js +29 -0
  326. package/dist/components/Listbox/index.cjs +246 -0
  327. package/dist/components/Listbox/index.d.ts +32 -0
  328. package/dist/components/Listbox/index.d.ts.map +1 -0
  329. package/dist/components/Listbox/index.js +229 -0
  330. package/dist/components/Loading/Loading.module.scss.cjs +85 -0
  331. package/dist/components/Loading/Loading.module.scss.js +85 -0
  332. package/dist/components/Loading/index.cjs +150 -0
  333. package/dist/components/Loading/index.d.ts +44 -0
  334. package/dist/components/Loading/index.d.ts.map +1 -0
  335. package/dist/components/Loading/index.js +133 -0
  336. package/dist/components/Markdown/Markdown.module.scss.cjs +8 -0
  337. package/dist/components/Markdown/Markdown.module.scss.js +8 -0
  338. package/dist/components/Markdown/index.d.ts +15 -0
  339. package/dist/components/Markdown/index.d.ts.map +1 -0
  340. package/dist/components/Menu/Menu.module.scss.cjs +47 -0
  341. package/dist/components/Menu/Menu.module.scss.js +47 -0
  342. package/dist/components/Menu/index.cjs +283 -0
  343. package/dist/components/Menu/index.d.ts +96 -0
  344. package/dist/components/Menu/index.d.ts.map +1 -0
  345. package/dist/components/Menu/index.js +266 -0
  346. package/dist/components/Message/Message.module.scss.cjs +59 -0
  347. package/dist/components/Message/Message.module.scss.js +59 -0
  348. package/dist/components/Message/index.cjs +179 -0
  349. package/dist/components/Message/index.d.ts +58 -0
  350. package/dist/components/Message/index.d.ts.map +1 -0
  351. package/dist/components/Message/index.js +162 -0
  352. package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +89 -0
  353. package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +89 -0
  354. package/dist/components/NavigationMenu/NavigationMenuContext.cjs +40 -0
  355. package/dist/components/NavigationMenu/NavigationMenuContext.d.ts +58 -0
  356. package/dist/components/NavigationMenu/NavigationMenuContext.d.ts.map +1 -0
  357. package/dist/components/NavigationMenu/NavigationMenuContext.js +23 -0
  358. package/dist/components/NavigationMenu/index.cjs +675 -0
  359. package/dist/components/NavigationMenu/index.d.ts +96 -0
  360. package/dist/components/NavigationMenu/index.d.ts.map +1 -0
  361. package/dist/components/NavigationMenu/index.js +658 -0
  362. package/dist/components/NavigationMenu/useNavigationMenu.cjs +89 -0
  363. package/dist/components/NavigationMenu/useNavigationMenu.d.ts +40 -0
  364. package/dist/components/NavigationMenu/useNavigationMenu.d.ts.map +1 -0
  365. package/dist/components/NavigationMenu/useNavigationMenu.js +72 -0
  366. package/dist/components/Pagination/Pagination.module.scss.cjs +26 -0
  367. package/dist/components/Pagination/Pagination.module.scss.js +26 -0
  368. package/dist/components/Pagination/index.cjs +268 -0
  369. package/dist/components/Pagination/index.d.ts +37 -0
  370. package/dist/components/Pagination/index.d.ts.map +1 -0
  371. package/dist/components/Pagination/index.js +251 -0
  372. package/dist/components/Popover/Popover.module.scss.cjs +35 -0
  373. package/dist/components/Popover/Popover.module.scss.js +35 -0
  374. package/dist/components/Popover/index.cjs +178 -0
  375. package/dist/components/Popover/index.d.ts +90 -0
  376. package/dist/components/Popover/index.d.ts.map +1 -0
  377. package/dist/components/Popover/index.js +161 -0
  378. package/dist/components/Progress/Progress.module.scss.cjs +80 -0
  379. package/dist/components/Progress/Progress.module.scss.js +80 -0
  380. package/dist/components/Progress/index.cjs +166 -0
  381. package/dist/components/Progress/index.d.ts +40 -0
  382. package/dist/components/Progress/index.d.ts.map +1 -0
  383. package/dist/components/Progress/index.js +166 -0
  384. package/dist/components/Prompt/Prompt.module.scss.cjs +59 -0
  385. package/dist/components/Prompt/Prompt.module.scss.js +59 -0
  386. package/dist/components/Prompt/index.cjs +322 -0
  387. package/dist/components/Prompt/index.d.ts +132 -0
  388. package/dist/components/Prompt/index.d.ts.map +1 -0
  389. package/dist/components/Prompt/index.js +305 -0
  390. package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +56 -0
  391. package/dist/components/RadioGroup/RadioGroup.module.scss.js +56 -0
  392. package/dist/components/RadioGroup/index.cjs +182 -0
  393. package/dist/components/RadioGroup/index.d.ts +81 -0
  394. package/dist/components/RadioGroup/index.d.ts.map +1 -0
  395. package/dist/components/RadioGroup/index.js +165 -0
  396. package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +35 -0
  397. package/dist/components/ScrollArea/ScrollArea.module.scss.js +35 -0
  398. package/dist/components/ScrollArea/index.cjs +84 -0
  399. package/dist/components/ScrollArea/index.d.ts +24 -0
  400. package/dist/components/ScrollArea/index.d.ts.map +1 -0
  401. package/dist/components/ScrollArea/index.js +67 -0
  402. package/dist/components/Select/Select.module.scss.cjs +56 -0
  403. package/dist/components/Select/Select.module.scss.js +56 -0
  404. package/dist/components/Select/index.cjs +276 -0
  405. package/dist/components/Select/index.d.ts +87 -0
  406. package/dist/components/Select/index.d.ts.map +1 -0
  407. package/dist/components/Select/index.js +259 -0
  408. package/dist/components/Separator/Separator.module.scss.cjs +35 -0
  409. package/dist/components/Separator/Separator.module.scss.js +35 -0
  410. package/dist/components/Separator/index.cjs +83 -0
  411. package/dist/components/Separator/index.d.ts +15 -0
  412. package/dist/components/Separator/index.d.ts.map +1 -0
  413. package/dist/components/Separator/index.js +66 -0
  414. package/dist/components/Sidebar/Sidebar.module.scss.cjs +131 -0
  415. package/dist/components/Sidebar/Sidebar.module.scss.js +131 -0
  416. package/dist/components/Sidebar/index.cjs +763 -0
  417. package/dist/components/Sidebar/index.d.ts +216 -0
  418. package/dist/components/Sidebar/index.d.ts.map +1 -0
  419. package/dist/components/Sidebar/index.js +746 -0
  420. package/dist/components/Skeleton/Skeleton.module.scss.cjs +89 -0
  421. package/dist/components/Skeleton/Skeleton.module.scss.js +89 -0
  422. package/dist/components/Skeleton/index.cjs +110 -0
  423. package/dist/components/Skeleton/index.d.ts +60 -0
  424. package/dist/components/Skeleton/index.d.ts.map +1 -0
  425. package/dist/components/Skeleton/index.js +93 -0
  426. package/dist/components/Slider/Slider.module.scss.cjs +41 -0
  427. package/dist/components/Slider/Slider.module.scss.js +41 -0
  428. package/dist/components/Slider/index.cjs +142 -0
  429. package/dist/components/Slider/index.d.ts +48 -0
  430. package/dist/components/Slider/index.d.ts.map +1 -0
  431. package/dist/components/Slider/index.js +125 -0
  432. package/dist/components/Stack/Stack.module.scss.cjs +82 -0
  433. package/dist/components/Stack/Stack.module.scss.js +82 -0
  434. package/dist/components/Stack/index.cjs +138 -0
  435. package/dist/components/Stack/index.d.ts +68 -0
  436. package/dist/components/Stack/index.d.ts.map +1 -0
  437. package/dist/components/Stack/index.js +121 -0
  438. package/dist/components/Switch/index.d.ts +2 -0
  439. package/dist/components/Switch/index.d.ts.map +1 -0
  440. package/dist/components/Table/Table.module.scss.cjs +59 -0
  441. package/dist/components/Table/Table.module.scss.js +59 -0
  442. package/dist/components/Table/index.d.ts +61 -0
  443. package/dist/components/Table/index.d.ts.map +1 -0
  444. package/dist/components/TableOfContents/TableOfContents.module.scss.cjs +50 -0
  445. package/dist/components/TableOfContents/TableOfContents.module.scss.js +50 -0
  446. package/dist/components/TableOfContents/index.cjs +176 -0
  447. package/dist/components/TableOfContents/index.d.ts +53 -0
  448. package/dist/components/TableOfContents/index.d.ts.map +1 -0
  449. package/dist/components/TableOfContents/index.js +159 -0
  450. package/dist/components/Tabs/Tabs.module.scss.cjs +41 -0
  451. package/dist/components/Tabs/Tabs.module.scss.js +41 -0
  452. package/dist/components/Tabs/index.cjs +93 -0
  453. package/dist/components/Tabs/index.d.ts +58 -0
  454. package/dist/components/Tabs/index.d.ts.map +1 -0
  455. package/dist/components/Tabs/index.js +76 -0
  456. package/dist/components/Text/Text.module.scss.cjs +112 -0
  457. package/dist/components/Text/Text.module.scss.js +112 -0
  458. package/dist/components/Text/index.cjs +60 -0
  459. package/dist/components/Text/index.d.ts +41 -0
  460. package/dist/components/Text/index.d.ts.map +1 -0
  461. package/dist/components/Text/index.js +43 -0
  462. package/dist/components/Textarea/Textarea.module.scss.cjs +66 -0
  463. package/dist/components/Textarea/Textarea.module.scss.js +66 -0
  464. package/dist/components/Textarea/index.cjs +150 -0
  465. package/dist/components/Textarea/index.d.ts +62 -0
  466. package/dist/components/Textarea/index.d.ts.map +1 -0
  467. package/dist/components/Textarea/index.js +133 -0
  468. package/dist/components/Theme/ThemeToggle.module.scss.cjs +23 -0
  469. package/dist/components/Theme/ThemeToggle.module.scss.js +23 -0
  470. package/dist/components/Theme/index.cjs +353 -0
  471. package/dist/components/Theme/index.d.ts +111 -0
  472. package/dist/components/Theme/index.d.ts.map +1 -0
  473. package/dist/components/Theme/index.js +336 -0
  474. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +44 -0
  475. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +44 -0
  476. package/dist/components/ThinkingIndicator/index.cjs +171 -0
  477. package/dist/components/ThinkingIndicator/index.d.ts +44 -0
  478. package/dist/components/ThinkingIndicator/index.d.ts.map +1 -0
  479. package/dist/components/ThinkingIndicator/index.js +154 -0
  480. package/dist/components/Toast/Toast.module.scss.cjs +63 -0
  481. package/dist/components/Toast/Toast.module.scss.js +63 -0
  482. package/dist/components/Toast/index.cjs +316 -0
  483. package/dist/components/Toast/index.d.ts +52 -0
  484. package/dist/components/Toast/index.d.ts.map +1 -0
  485. package/dist/components/Toast/index.js +299 -0
  486. package/dist/components/Toggle/Toggle.module.scss.cjs +44 -0
  487. package/dist/components/Toggle/Toggle.module.scss.js +44 -0
  488. package/dist/components/Toggle/index.cjs +99 -0
  489. package/dist/components/Toggle/index.d.ts +43 -0
  490. package/dist/components/Toggle/index.d.ts.map +1 -0
  491. package/dist/components/Toggle/index.js +82 -0
  492. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +44 -0
  493. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +44 -0
  494. package/dist/components/ToggleGroup/index.cjs +172 -0
  495. package/dist/components/ToggleGroup/index.d.ts +53 -0
  496. package/dist/components/ToggleGroup/index.d.ts.map +1 -0
  497. package/dist/components/ToggleGroup/index.js +155 -0
  498. package/dist/components/Tooltip/Tooltip.module.scss.cjs +14 -0
  499. package/dist/components/Tooltip/Tooltip.module.scss.js +14 -0
  500. package/dist/components/Tooltip/index.cjs +133 -0
  501. package/dist/components/Tooltip/index.d.ts +76 -0
  502. package/dist/components/Tooltip/index.d.ts.map +1 -0
  503. package/dist/components/Tooltip/index.js +116 -0
  504. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.cjs +8 -0
  505. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.js +8 -0
  506. package/dist/components/VisuallyHidden/index.cjs +39 -0
  507. package/dist/components/VisuallyHidden/index.d.ts +10 -0
  508. package/dist/components/VisuallyHidden/index.d.ts.map +1 -0
  509. package/dist/components/VisuallyHidden/index.js +22 -0
  510. package/dist/data-table.cjs +310 -0
  511. package/dist/data-table.js +293 -0
  512. package/dist/datepicker.cjs +459 -0
  513. package/dist/datepicker.js +442 -0
  514. package/dist/editor.cjs +572 -0
  515. package/dist/editor.js +555 -0
  516. package/dist/index.cjs +288 -0
  517. package/dist/index.d.ts +77 -0
  518. package/dist/index.d.ts.map +1 -0
  519. package/dist/index.js +288 -0
  520. package/dist/markdown.cjs +70 -0
  521. package/dist/markdown.js +53 -0
  522. package/dist/node_modules/.pnpm/@tanstack_react-virtual@3.13.18_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@tanstack/react-virtual/dist/esm/index.cjs +68 -0
  523. package/dist/node_modules/.pnpm/@tanstack_react-virtual@3.13.18_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@tanstack/react-virtual/dist/esm/index.js +52 -0
  524. package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/index.cjs +822 -0
  525. package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/index.js +822 -0
  526. package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/utils.cjs +72 -0
  527. package/dist/node_modules/.pnpm/@tanstack_virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/utils.js +72 -0
  528. package/dist/table.cjs +122 -0
  529. package/dist/table.js +105 -0
  530. package/dist/utils/a11y.cjs +232 -0
  531. package/dist/utils/a11y.d.ts +133 -0
  532. package/dist/utils/a11y.d.ts.map +1 -0
  533. package/dist/utils/a11y.js +215 -0
  534. package/dist/utils/aria.cjs +41 -0
  535. package/dist/utils/aria.d.ts +44 -0
  536. package/dist/utils/aria.d.ts.map +1 -0
  537. package/dist/utils/aria.js +24 -0
  538. package/dist/utils/canonical-stamp.cjs +18 -0
  539. package/dist/utils/canonical-stamp.d.ts +25 -0
  540. package/dist/utils/canonical-stamp.d.ts.map +1 -0
  541. package/dist/utils/canonical-stamp.js +18 -0
  542. package/dist/utils/css-warning.cjs +17 -0
  543. package/dist/utils/css-warning.d.ts +2 -0
  544. package/dist/utils/css-warning.d.ts.map +1 -0
  545. package/dist/utils/css-warning.js +17 -0
  546. package/dist/utils/keyboard-shortcuts.cjs +294 -0
  547. package/dist/utils/keyboard-shortcuts.d.ts +293 -0
  548. package/dist/utils/keyboard-shortcuts.d.ts.map +1 -0
  549. package/dist/utils/keyboard-shortcuts.js +294 -0
  550. package/dist/utils/seed-derivation.cjs +478 -0
  551. package/dist/utils/seed-derivation.d.ts +140 -0
  552. package/dist/utils/seed-derivation.d.ts.map +1 -0
  553. package/dist/utils/seed-derivation.js +478 -0
  554. package/dist/utils/theme-presets.cjs +229 -0
  555. package/dist/utils/theme-presets.d.ts +103 -0
  556. package/dist/utils/theme-presets.d.ts.map +1 -0
  557. package/dist/utils/theme-presets.js +229 -0
  558. package/fragments.json +1 -0
  559. package/package.json +258 -0
  560. package/src/assets/fragments-logo.tsx +38 -0
  561. package/src/components/Accordion/Accordion.contract.json +169 -0
  562. package/src/components/Accordion/Accordion.module.scss +113 -0
  563. package/src/components/Accordion/Accordion.stories.tsx +106 -0
  564. package/src/components/Accordion/index.tsx +306 -0
  565. package/src/components/Alert/Alert.contract.json +157 -0
  566. package/src/components/Alert/Alert.module.scss +130 -0
  567. package/src/components/Alert/Alert.stories.tsx +119 -0
  568. package/src/components/Alert/index.tsx +249 -0
  569. package/src/components/AppShell/AppShell.contract.json +155 -0
  570. package/src/components/AppShell/AppShell.module.scss +239 -0
  571. package/src/components/AppShell/AppShell.stories.tsx +156 -0
  572. package/src/components/AppShell/index.tsx +518 -0
  573. package/src/components/Avatar/Avatar.contract.json +189 -0
  574. package/src/components/Avatar/Avatar.module.scss +136 -0
  575. package/src/components/Avatar/Avatar.stories.tsx +74 -0
  576. package/src/components/Avatar/index.tsx +311 -0
  577. package/src/components/Badge/Badge.contract.json +170 -0
  578. package/src/components/Badge/Badge.module.scss +146 -0
  579. package/src/components/Badge/Badge.stories.tsx +92 -0
  580. package/src/components/Badge/index.tsx +115 -0
  581. package/src/components/BentoGrid/BentoGrid.contract.json +135 -0
  582. package/src/components/BentoGrid/BentoGrid.module.scss +179 -0
  583. package/src/components/BentoGrid/BentoGrid.stories.tsx +98 -0
  584. package/src/components/BentoGrid/index.tsx +164 -0
  585. package/src/components/Box/Box.contract.json +423 -0
  586. package/src/components/Box/Box.module.scss +126 -0
  587. package/src/components/Box/Box.stories.tsx +150 -0
  588. package/src/components/Box/index.tsx +154 -0
  589. package/src/components/Breadcrumbs/Breadcrumbs.contract.json +143 -0
  590. package/src/components/Breadcrumbs/Breadcrumbs.module.scss +121 -0
  591. package/src/components/Breadcrumbs/Breadcrumbs.stories.tsx +87 -0
  592. package/src/components/Breadcrumbs/index.tsx +205 -0
  593. package/src/components/Button/Button.contract.json +212 -0
  594. package/src/components/Button/Button.module.scss +296 -0
  595. package/src/components/Button/Button.stories.tsx +103 -0
  596. package/src/components/Button/index.tsx +190 -0
  597. package/src/components/ButtonGroup/ButtonGroup.contract.json +140 -0
  598. package/src/components/ButtonGroup/ButtonGroup.module.scss +61 -0
  599. package/src/components/ButtonGroup/ButtonGroup.stories.tsx +97 -0
  600. package/src/components/ButtonGroup/index.tsx +34 -0
  601. package/src/components/Card/Card.contract.json +170 -0
  602. package/src/components/Card/Card.module.scss +212 -0
  603. package/src/components/Card/Card.stories.tsx +144 -0
  604. package/src/components/Card/index.tsx +233 -0
  605. package/src/components/Chart/Chart.contract.json +129 -0
  606. package/src/components/Chart/Chart.module.scss +128 -0
  607. package/src/components/Chart/Chart.stories.tsx +119 -0
  608. package/src/components/Chart/index.tsx +365 -0
  609. package/src/components/Checkbox/Checkbox.contract.json +256 -0
  610. package/src/components/Checkbox/Checkbox.module.scss +256 -0
  611. package/src/components/Checkbox/Checkbox.stories.tsx +68 -0
  612. package/src/components/Checkbox/index.tsx +264 -0
  613. package/src/components/Chip/Chip.contract.json +212 -0
  614. package/src/components/Chip/Chip.module.scss +265 -0
  615. package/src/components/Chip/Chip.stories.tsx +70 -0
  616. package/src/components/Chip/index.tsx +194 -0
  617. package/src/components/Cloud/CloudGovernanceShell.module.scss +88 -0
  618. package/src/components/Cloud/CloudGovernanceShell.stories.tsx +446 -0
  619. package/src/components/Cloud/ControlSizing.module.scss +49 -0
  620. package/src/components/Cloud/ControlSizing.stories.tsx +238 -0
  621. package/src/components/Cloud/DashboardLayoutPrototypes.module.scss +462 -0
  622. package/src/components/Cloud/DashboardLayoutPrototypes.shared.tsx +375 -0
  623. package/src/components/Cloud/DashboardLayoutPrototypes.shell.tsx +147 -0
  624. package/src/components/Cloud/DashboardLayoutPrototypes.stories.tsx +328 -0
  625. package/src/components/Cloud/PullRequestsPrototypes.content.tsx +283 -0
  626. package/src/components/Cloud/PullRequestsPrototypes.detail-panels.tsx +381 -0
  627. package/src/components/Cloud/PullRequestsPrototypes.detail.tsx +204 -0
  628. package/src/components/Cloud/PullRequestsPrototypes.id-data.ts +395 -0
  629. package/src/components/Cloud/PullRequestsPrototypes.id-page.tsx +349 -0
  630. package/src/components/Cloud/PullRequestsPrototypes.stories.tsx +81 -0
  631. package/src/components/CodeBlock/CodeBlock.contract.json +388 -0
  632. package/src/components/CodeBlock/CodeBlock.module.scss +384 -0
  633. package/src/components/CodeBlock/CodeBlock.stories.tsx +147 -0
  634. package/src/components/CodeBlock/index.tsx +872 -0
  635. package/src/components/Collapsible/Collapsible.contract.json +154 -0
  636. package/src/components/Collapsible/Collapsible.module.scss +119 -0
  637. package/src/components/Collapsible/Collapsible.stories.tsx +94 -0
  638. package/src/components/Collapsible/index.tsx +254 -0
  639. package/src/components/ColorPicker/ColorPicker.contract.json +212 -0
  640. package/src/components/ColorPicker/ColorPicker.module.scss +142 -0
  641. package/src/components/ColorPicker/ColorPicker.stories.tsx +74 -0
  642. package/src/components/ColorPicker/index.tsx +182 -0
  643. package/src/components/Combobox/Combobox.contract.json +297 -0
  644. package/src/components/Combobox/Combobox.module.scss +334 -0
  645. package/src/components/Combobox/Combobox.stories.tsx +133 -0
  646. package/src/components/Combobox/index.tsx +619 -0
  647. package/src/components/Command/Command.contract.json +165 -0
  648. package/src/components/Command/Command.module.scss +152 -0
  649. package/src/components/Command/Command.stories.tsx +102 -0
  650. package/src/components/Command/index.tsx +548 -0
  651. package/src/components/ComponentDefaults/index.tsx +56 -0
  652. package/src/components/ConversationList/ConversationList.contract.json +151 -0
  653. package/src/components/ConversationList/ConversationList.module.scss +160 -0
  654. package/src/components/ConversationList/ConversationList.stories.tsx +93 -0
  655. package/src/components/ConversationList/index.tsx +257 -0
  656. package/src/components/DataTable/DataTable.contract.json +302 -0
  657. package/src/components/DataTable/DataTable.icons.tsx +67 -0
  658. package/src/components/DataTable/DataTable.module.scss +429 -0
  659. package/src/components/DataTable/DataTable.stories.tsx +129 -0
  660. package/src/components/DataTable/DataTable.support.tsx +75 -0
  661. package/src/components/DataTable/DataTable.virtual.tsx +197 -0
  662. package/src/components/DataTable/index.tsx +519 -0
  663. package/src/components/DatePicker/DatePicker.contract.json +283 -0
  664. package/src/components/DatePicker/DatePicker.module.scss +434 -0
  665. package/src/components/DatePicker/DatePicker.stories.tsx +129 -0
  666. package/src/components/DatePicker/index.tsx +670 -0
  667. package/src/components/Dialog/Dialog.contract.json +159 -0
  668. package/src/components/Dialog/Dialog.module.scss +177 -0
  669. package/src/components/Dialog/Dialog.stories.tsx +154 -0
  670. package/src/components/Dialog/index.tsx +264 -0
  671. package/src/components/Drawer/Drawer.contract.json +161 -0
  672. package/src/components/Drawer/Drawer.module.scss +255 -0
  673. package/src/components/Drawer/Drawer.stories.tsx +144 -0
  674. package/src/components/Drawer/index.tsx +329 -0
  675. package/src/components/Editor/Editor.contract.json +263 -0
  676. package/src/components/Editor/Editor.module.scss +352 -0
  677. package/src/components/Editor/Editor.stories.tsx +99 -0
  678. package/src/components/Editor/index.tsx +866 -0
  679. package/src/components/EmptyState/EmptyState.contract.json +133 -0
  680. package/src/components/EmptyState/EmptyState.module.scss +131 -0
  681. package/src/components/EmptyState/EmptyState.stories.tsx +97 -0
  682. package/src/components/EmptyState/index.tsx +115 -0
  683. package/src/components/Field/Field.contract.json +157 -0
  684. package/src/components/Field/Field.module.scss +31 -0
  685. package/src/components/Field/Field.stories.tsx +109 -0
  686. package/src/components/Field/index.tsx +144 -0
  687. package/src/components/Fieldset/Fieldset.contract.json +117 -0
  688. package/src/components/Fieldset/Fieldset.module.scss +28 -0
  689. package/src/components/Fieldset/Fieldset.stories.tsx +116 -0
  690. package/src/components/Fieldset/index.tsx +57 -0
  691. package/src/components/Form/Form.contract.json +145 -0
  692. package/src/components/Form/Form.module.scss +8 -0
  693. package/src/components/Form/Form.stories.tsx +142 -0
  694. package/src/components/Form/index.tsx +54 -0
  695. package/src/components/Grid/Grid.contract.json +195 -0
  696. package/src/components/Grid/Grid.module.scss +165 -0
  697. package/src/components/Grid/Grid.stories.tsx +125 -0
  698. package/src/components/Grid/index.tsx +234 -0
  699. package/src/components/Header/Header.contract.json +196 -0
  700. package/src/components/Header/Header.module.scss +432 -0
  701. package/src/components/Header/Header.stories.tsx +133 -0
  702. package/src/components/Header/index.tsx +660 -0
  703. package/src/components/Icon/Icon.contract.json +194 -0
  704. package/src/components/Icon/Icon.module.scss +38 -0
  705. package/src/components/Icon/Icon.stories.tsx +80 -0
  706. package/src/components/Icon/index.tsx +105 -0
  707. package/src/components/IconButton/IconButton.module.scss +102 -0
  708. package/src/components/IconButton/IconButton.stories.tsx +78 -0
  709. package/src/components/IconButton/index.tsx +93 -0
  710. package/src/components/Image/Image.contract.json +209 -0
  711. package/src/components/Image/Image.module.scss +77 -0
  712. package/src/components/Image/Image.stories.tsx +109 -0
  713. package/src/components/Image/index.tsx +128 -0
  714. package/src/components/Input/Input.contract.json +325 -0
  715. package/src/components/Input/Input.module.scss +231 -0
  716. package/src/components/Input/Input.stories.tsx +104 -0
  717. package/src/components/Input/index.tsx +301 -0
  718. package/src/components/Link/Link.contract.json +180 -0
  719. package/src/components/Link/Link.module.scss +67 -0
  720. package/src/components/Link/Link.stories.tsx +67 -0
  721. package/src/components/Link/index.tsx +102 -0
  722. package/src/components/List/List.contract.json +154 -0
  723. package/src/components/List/List.module.scss +71 -0
  724. package/src/components/List/List.stories.tsx +95 -0
  725. package/src/components/List/index.tsx +107 -0
  726. package/src/components/Listbox/Listbox.contract.json +158 -0
  727. package/src/components/Listbox/Listbox.module.scss +113 -0
  728. package/src/components/Listbox/Listbox.stories.tsx +81 -0
  729. package/src/components/Listbox/index.tsx +309 -0
  730. package/src/components/Loading/Loading.contract.json +167 -0
  731. package/src/components/Loading/Loading.module.scss +259 -0
  732. package/src/components/Loading/Loading.stories.tsx +69 -0
  733. package/src/components/Loading/index.tsx +229 -0
  734. package/src/components/Markdown/Markdown.contract.json +127 -0
  735. package/src/components/Markdown/Markdown.module.scss +233 -0
  736. package/src/components/Markdown/Markdown.stories.tsx +75 -0
  737. package/src/components/Markdown/index.tsx +112 -0
  738. package/src/components/Menu/Menu.contract.json +177 -0
  739. package/src/components/Menu/Menu.module.scss +215 -0
  740. package/src/components/Menu/Menu.stories.tsx +113 -0
  741. package/src/components/Menu/index.tsx +411 -0
  742. package/src/components/Message/Message.contract.json +183 -0
  743. package/src/components/Message/Message.module.scss +238 -0
  744. package/src/components/Message/Message.stories.tsx +85 -0
  745. package/src/components/Message/index.tsx +293 -0
  746. package/src/components/NavigationMenu/NavigationMenu.contract.json +203 -0
  747. package/src/components/NavigationMenu/NavigationMenu.module.scss +515 -0
  748. package/src/components/NavigationMenu/NavigationMenu.stories.tsx +161 -0
  749. package/src/components/NavigationMenu/NavigationMenuContext.ts +108 -0
  750. package/src/components/NavigationMenu/index.tsx +1001 -0
  751. package/src/components/NavigationMenu/useNavigationMenu.ts +101 -0
  752. package/src/components/Pagination/Pagination.contract.json +163 -0
  753. package/src/components/Pagination/Pagination.module.scss +111 -0
  754. package/src/components/Pagination/Pagination.stories.tsx +81 -0
  755. package/src/components/Pagination/index.tsx +387 -0
  756. package/src/components/Popover/Popover.contract.json +163 -0
  757. package/src/components/Popover/Popover.module.scss +189 -0
  758. package/src/components/Popover/Popover.stories.tsx +152 -0
  759. package/src/components/Popover/index.tsx +284 -0
  760. package/src/components/Progress/Progress.contract.json +176 -0
  761. package/src/components/Progress/Progress.module.scss +185 -0
  762. package/src/components/Progress/Progress.stories.tsx +64 -0
  763. package/src/components/Progress/index.tsx +238 -0
  764. package/src/components/Prompt/Prompt.contract.json +213 -0
  765. package/src/components/Prompt/Prompt.module.scss +346 -0
  766. package/src/components/Prompt/Prompt.stories.tsx +93 -0
  767. package/src/components/Prompt/index.tsx +508 -0
  768. package/src/components/RadioGroup/RadioGroup.contract.json +236 -0
  769. package/src/components/RadioGroup/RadioGroup.module.scss +272 -0
  770. package/src/components/RadioGroup/RadioGroup.stories.tsx +107 -0
  771. package/src/components/RadioGroup/index.tsx +298 -0
  772. package/src/components/ScrollArea/ScrollArea.contract.json +131 -0
  773. package/src/components/ScrollArea/ScrollArea.module.scss +149 -0
  774. package/src/components/ScrollArea/ScrollArea.stories.tsx +97 -0
  775. package/src/components/ScrollArea/index.tsx +122 -0
  776. package/src/components/Select/Select.contract.json +249 -0
  777. package/src/components/Select/Select.module.scss +226 -0
  778. package/src/components/Select/Select.stories.tsx +127 -0
  779. package/src/components/Select/index.tsx +457 -0
  780. package/src/components/Separator/Separator.contract.json +143 -0
  781. package/src/components/Separator/Separator.module.scss +92 -0
  782. package/src/components/Separator/Separator.stories.tsx +84 -0
  783. package/src/components/Separator/index.tsx +97 -0
  784. package/src/components/Sidebar/Sidebar.contract.json +258 -0
  785. package/src/components/Sidebar/Sidebar.module.scss +650 -0
  786. package/src/components/Sidebar/Sidebar.stories.tsx +122 -0
  787. package/src/components/Sidebar/index.tsx +1168 -0
  788. package/src/components/Skeleton/Skeleton.contract.json +166 -0
  789. package/src/components/Skeleton/Skeleton.module.scss +166 -0
  790. package/src/components/Skeleton/Skeleton.stories.tsx +80 -0
  791. package/src/components/Skeleton/index.tsx +182 -0
  792. package/src/components/Slider/Slider.contract.json +248 -0
  793. package/src/components/Slider/Slider.module.scss +147 -0
  794. package/src/components/Slider/Slider.stories.tsx +73 -0
  795. package/src/components/Slider/index.tsx +189 -0
  796. package/src/components/Stack/Stack.contract.json +220 -0
  797. package/src/components/Stack/Stack.module.scss +136 -0
  798. package/src/components/Stack/Stack.stories.tsx +73 -0
  799. package/src/components/Stack/index.tsx +207 -0
  800. package/src/components/Switch/Switch.stories.tsx +59 -0
  801. package/src/components/Switch/index.ts +3 -0
  802. package/src/components/Table/Table.contract.json +171 -0
  803. package/src/components/Table/Table.module.scss +206 -0
  804. package/src/components/Table/Table.stories.tsx +219 -0
  805. package/src/components/Table/index.tsx +205 -0
  806. package/src/components/TableOfContents/TableOfContents.contract.json +165 -0
  807. package/src/components/TableOfContents/TableOfContents.module.scss +324 -0
  808. package/src/components/TableOfContents/TableOfContents.stories.tsx +120 -0
  809. package/src/components/TableOfContents/index.tsx +266 -0
  810. package/src/components/Tabs/Tabs.contract.json +159 -0
  811. package/src/components/Tabs/Tabs.module.scss +179 -0
  812. package/src/components/Tabs/Tabs.stories.tsx +136 -0
  813. package/src/components/Tabs/index.tsx +168 -0
  814. package/src/components/Text/Text.contract.json +241 -0
  815. package/src/components/Text/Text.module.scss +136 -0
  816. package/src/components/Text/Text.stories.tsx +133 -0
  817. package/src/components/Text/index.tsx +91 -0
  818. package/src/components/Textarea/Textarea.contract.json +308 -0
  819. package/src/components/Textarea/Textarea.module.scss +175 -0
  820. package/src/components/Textarea/Textarea.stories.tsx +107 -0
  821. package/src/components/Textarea/index.tsx +205 -0
  822. package/src/components/Theme/Theme.contract.json +152 -0
  823. package/src/components/Theme/Theme.stories.tsx +95 -0
  824. package/src/components/Theme/ThemeToggle.module.scss +91 -0
  825. package/src/components/Theme/index.tsx +579 -0
  826. package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +165 -0
  827. package/src/components/ThinkingIndicator/ThinkingIndicator.module.scss +107 -0
  828. package/src/components/ThinkingIndicator/ThinkingIndicator.stories.tsx +85 -0
  829. package/src/components/ThinkingIndicator/index.tsx +257 -0
  830. package/src/components/Toast/Toast.contract.json +181 -0
  831. package/src/components/Toast/Toast.module.scss +286 -0
  832. package/src/components/Toast/Toast.stories.tsx +91 -0
  833. package/src/components/Toast/index.tsx +439 -0
  834. package/src/components/Toggle/Toggle.contract.json +231 -0
  835. package/src/components/Toggle/Toggle.module.scss +244 -0
  836. package/src/components/Toggle/index.tsx +140 -0
  837. package/src/components/ToggleGroup/ToggleGroup.contract.json +206 -0
  838. package/src/components/ToggleGroup/ToggleGroup.module.scss +160 -0
  839. package/src/components/ToggleGroup/ToggleGroup.stories.tsx +114 -0
  840. package/src/components/ToggleGroup/index.tsx +252 -0
  841. package/src/components/Tooltip/Tooltip.contract.json +214 -0
  842. package/src/components/Tooltip/Tooltip.module.scss +87 -0
  843. package/src/components/Tooltip/Tooltip.stories.tsx +95 -0
  844. package/src/components/Tooltip/index.tsx +209 -0
  845. package/src/components/VisuallyHidden/VisuallyHidden.contract.json +116 -0
  846. package/src/components/VisuallyHidden/VisuallyHidden.module.scss +13 -0
  847. package/src/components/VisuallyHidden/VisuallyHidden.stories.tsx +78 -0
  848. package/src/components/VisuallyHidden/index.tsx +37 -0
  849. package/src/index.ts +728 -0
  850. package/src/scss.d.ts +4 -0
  851. package/src/styles/globals.scss +207 -0
  852. package/src/tokens/_computed.scss +225 -0
  853. package/src/tokens/_density.scss +176 -0
  854. package/src/tokens/_derive.scss +513 -0
  855. package/src/tokens/_mixins.scss +471 -0
  856. package/src/tokens/_palettes.scss +225 -0
  857. package/src/tokens/_property-registrations.scss +218 -0
  858. package/src/tokens/_radius.scss +107 -0
  859. package/src/tokens/_seeds.scss +83 -0
  860. package/src/tokens/_variables.scss +1045 -0
  861. package/src/utils/a11y.tsx +431 -0
  862. package/src/utils/aria.ts +63 -0
  863. package/src/utils/canonical-stamp.ts +47 -0
  864. package/src/utils/css-warning.ts +29 -0
  865. package/src/utils/keyboard-shortcuts.ts +502 -0
  866. package/src/utils/seed-derivation.ts +706 -0
  867. package/src/utils/theme-presets.ts +360 -0
@@ -0,0 +1,1045 @@
1
+ // ============================================
2
+ // @usefragments/ui Design Tokens
3
+ // ============================================
4
+ //
5
+ // SEED-BASED DESIGN SYSTEM
6
+ // ========================
7
+ // This token system supports two configuration approaches:
8
+ //
9
+ // 1. SEED-BASED (Recommended for new projects):
10
+ // Configure ~5-10 seed values and everything derives automatically.
11
+ // See _seeds.scss for available seeds.
12
+ //
13
+ // Example:
14
+ // @use '@usefragments/ui/styles' with (
15
+ // $fui-brand: #0066ff,
16
+ // $fui-neutral: "ice",
17
+ // $fui-density: "compact"
18
+ // );
19
+ //
20
+ // 2. CSS CUSTOM PROPERTIES (Runtime theming):
21
+ // Override CSS custom properties at runtime for dynamic theming.
22
+ // ============================================
23
+
24
+ // Import computed values from seed system
25
+ @use "computed" as computed;
26
+
27
+ // --------------------------------------------
28
+ // Base Configuration
29
+ // --------------------------------------------
30
+ // Base font size: 14px (change to 16px for larger UI)
31
+ // Base unit: 7px (change to 8px for standard 8pt grid)
32
+ // All spacing and sizing derives from these values.
33
+
34
+ $fui-base-font-size: computed.$computed-base-font-size !default;
35
+ $fui-base-unit: computed.$computed-base-unit !default;
36
+
37
+ // Helper function to convert base units to rem
38
+ // Usage: fui-unit(2) = 2 * 7px = 14px = 1rem (when base is 14px)
39
+ @function fui-unit($multiplier) {
40
+ @return calc(#{$multiplier} * #{$fui-base-unit} / #{$fui-base-font-size} * 1rem);
41
+ }
42
+
43
+ // --------------------------------------------
44
+ // Typography
45
+ // --------------------------------------------
46
+ $fui-font-sans:
47
+ "Geist Sans",
48
+ "Geist",
49
+ Inter,
50
+ system-ui,
51
+ -apple-system,
52
+ BlinkMacSystemFont,
53
+ "Segoe UI",
54
+ Roboto,
55
+ sans-serif !default;
56
+ $fui-font-mono:
57
+ "Geist Mono", "SF Mono", SFMono-Regular, ui-monospace, "Cascadia Code", Menlo, monospace !default;
58
+
59
+ // Font sizes (rem based on 14px root).
60
+ // Scale ladder tuned for industry-leading docs hierarchy:
61
+ // - UI chrome stays dense at 14px (sm/base).
62
+ // - `md` (15px) is the prose body size — comfortable reading.
63
+ // - `lg`/`xl`/`2xl` step 20 / 24 / 30 for h3 / h2 / large display.
64
+ // - `3xl`/`4xl` (36 / 48) land page-title and hero sizes without
65
+ // per-page clamps.
66
+ $fui-font-size-2xs: 0.714rem !default; // 10px
67
+ $fui-font-size-xs: 0.857rem !default; // 12px
68
+ $fui-font-size-sm: 1rem !default; // 14px (base)
69
+ $fui-font-size-base: 1rem !default; // 14px (= sm, body base)
70
+ $fui-font-size-md: 1.071rem !default; // 15px (prose body — longer reading)
71
+ $fui-font-size-lg: 1.429rem !default; // 20px (h3, dialog/drawer/alert title)
72
+ $fui-font-size-xl: 1.714rem !default; // 24px (h2, section heading)
73
+ $fui-font-size-2xl: 2.143rem !default; // 30px (large display)
74
+ $fui-font-size-3xl: 2.571rem !default; // 36px (h1, page title)
75
+ $fui-font-size-4xl: 3.429rem !default; // 48px (hero display)
76
+
77
+ $fui-font-weight-normal: 400 !default;
78
+ $fui-font-weight-medium: 500 !default;
79
+ $fui-font-weight-semibold: 600 !default;
80
+ $fui-font-weight-bold: 700 !default;
81
+
82
+ $fui-line-height-tight: 1.25 !default;
83
+ $fui-line-height-normal: 1.5 !default;
84
+ $fui-line-height-relaxed: 1.625 !default;
85
+ $fui-line-height-display: 1.1 !default; // h1/hero — tight for large type
86
+ $fui-line-height-prose: 1.7 !default; // p/li inside long-form reading columns
87
+
88
+ // Letter spacing — keep neutral by default so dense product chrome, headings,
89
+ // and generated app surfaces do not drift into separate typographic systems.
90
+ $fui-letter-spacing-tight: 0 !default; // for xl+ headings
91
+ $fui-letter-spacing-normal: normal !default;
92
+ $fui-letter-spacing-display: 0 !default; // for h1/display
93
+ $fui-letter-spacing-wide: 0.05em !default; // uppercase micro-labels (section headings, table/column headers)
94
+
95
+ // --------------------------------------------
96
+ // Spacing (derived from density seed)
97
+ // --------------------------------------------
98
+ // Micro-spacing for small internal alignments (margins, thumb offsets)
99
+ $fui-space-px: computed.$computed-space-px !default;
100
+ $fui-space-0-5: computed.$computed-space-0-5 !default;
101
+ $fui-space-0-75: computed.$computed-space-0-75 !default;
102
+
103
+ // Base unit grid spacing
104
+ $fui-space-1: computed.$computed-space-1 !default;
105
+ $fui-space-2: computed.$computed-space-2 !default;
106
+ $fui-space-3: computed.$computed-space-3 !default;
107
+ $fui-space-4: computed.$computed-space-4 !default;
108
+ $fui-space-5: computed.$computed-space-5 !default;
109
+ $fui-space-6: computed.$computed-space-6 !default;
110
+ $fui-space-8: computed.$computed-space-8 !default;
111
+ $fui-space-10: computed.$computed-space-10 !default;
112
+ $fui-space-12: computed.$computed-space-12 !default;
113
+
114
+ // --------------------------------------------
115
+ // Border Radius (derived from radius-style seed)
116
+ // --------------------------------------------
117
+ $fui-radius-sm: computed.$computed-radius-sm !default;
118
+ $fui-radius-md: computed.$computed-radius-md !default;
119
+ $fui-radius-lg: computed.$computed-radius-lg !default;
120
+ $fui-radius-xl: computed.$computed-radius-xl !default;
121
+ $fui-radius-full: computed.$computed-radius-full !default;
122
+
123
+ // --------------------------------------------
124
+ // Transitions
125
+ // --------------------------------------------
126
+ $fui-transition-fast: 160ms cubic-bezier(0.25, 0.46, 0.45, 0.94) !default; // Snappy easeOut for chrome
127
+ $fui-transition-normal: 200ms cubic-bezier(0.4, 0, 0.2, 1) !default; // Standard material-style easing
128
+
129
+ // --------------------------------------------
130
+ // Colors - Light Mode (derived from brand/neutral seeds)
131
+ // --------------------------------------------
132
+ // Accent colors (derived from $fui-brand seed)
133
+ $fui-color-accent: computed.$computed-color-accent !default;
134
+ $fui-color-on-accent: computed.$computed-color-on-accent !default;
135
+ $fui-color-accent-hover: computed.$computed-color-accent-hover !default;
136
+ $fui-color-accent-active: computed.$computed-color-accent-active !default;
137
+
138
+ // Semantic colors (from seeds or defaults)
139
+ $fui-color-danger: computed.$computed-color-danger !default;
140
+ $fui-color-danger-hover: computed.$computed-color-danger-hover !default;
141
+ $fui-color-success: computed.$computed-color-success !default;
142
+ $fui-color-warning: computed.$computed-color-warning !default;
143
+ $fui-color-info: computed.$computed-color-info !default;
144
+
145
+ // Semantic backgrounds (light)
146
+ $fui-color-danger-bg: computed.$computed-color-danger-bg !default;
147
+ $fui-color-success-bg: computed.$computed-color-success-bg !default;
148
+ $fui-color-warning-bg: computed.$computed-color-warning-bg !default;
149
+ $fui-color-info-bg: computed.$computed-color-info-bg !default;
150
+
151
+ // Semantic text colors (WCAG AA contrast-safe on semantic backgrounds)
152
+ $fui-color-danger-text: computed.$computed-color-danger-text !default;
153
+ $fui-color-success-text: computed.$computed-color-success-text !default;
154
+ $fui-color-warning-text: computed.$computed-color-warning-text !default;
155
+ $fui-color-info-text: computed.$computed-color-info-text !default;
156
+
157
+ // Semantic borders (fallbacks for --fui-color-*-border CSS custom properties)
158
+ $fui-color-danger-border: color-mix(in srgb, $fui-color-danger-text 30%, transparent) !default;
159
+ $fui-color-success-border: color-mix(in srgb, $fui-color-success-text 28%, transparent) !default;
160
+ $fui-color-warning-border: color-mix(in srgb, $fui-color-warning-text 28%, transparent) !default;
161
+ $fui-color-info-border: color-mix(in srgb, $fui-color-info-text 30%, transparent) !default;
162
+
163
+ // Surface colors (derived from $fui-neutral palette)
164
+ $fui-bg-primary: computed.$computed-bg-primary !default;
165
+ $fui-bg-secondary: computed.$computed-bg-secondary !default;
166
+ $fui-bg-tertiary: computed.$computed-bg-tertiary !default;
167
+ $fui-bg-elevated: computed.$computed-bg-elevated !default;
168
+ $fui-bg-subtle: computed.$computed-bg-subtle !default;
169
+ $fui-bg-hover: computed.$computed-bg-hover !default;
170
+ $fui-bg-active: computed.$computed-bg-active !default;
171
+ // The document canvas stays white in light mode. Component and app surfaces
172
+ // continue to use the computed neutral palette.
173
+ $fui-body-bg: #fff !default;
174
+ $fui-main-bg: computed.$computed-main-bg !default;
175
+
176
+ // Text colors (derived from $fui-neutral palette)
177
+ $fui-text-primary: computed.$computed-text-primary !default;
178
+ $fui-text-secondary: computed.$computed-text-secondary !default;
179
+ $fui-text-tertiary: computed.$computed-text-tertiary !default;
180
+ $fui-text-inverse: computed.$computed-text-inverse !default;
181
+
182
+ // Inverse surface — a themed surface that flips relative to the active theme
183
+ // (dark surface in light mode, light surface in dark mode). Used by tooltips
184
+ // and any always-contrasting chip. Pairs with $fui-text-inverse for its text.
185
+ $fui-bg-inverse: $fui-text-primary !default;
186
+
187
+ // Border colors (derived from $fui-neutral palette)
188
+ $fui-border: computed.$computed-border !default;
189
+ $fui-border-default: computed.$computed-border-default !default;
190
+ $fui-border-strong: computed.$computed-border-strong !default;
191
+
192
+ // Shadows (light)
193
+ $fui-shadow-sm: computed.$computed-shadow-sm !default;
194
+ $fui-shadow-md: computed.$computed-shadow-md !default;
195
+ $fui-shadow-lg: computed.$computed-shadow-lg !default;
196
+
197
+ // Focus ring (derived from $fui-brand)
198
+ $fui-focus-ring-color: computed.$computed-focus-ring-color !default;
199
+ $fui-focus-ring-offset: 2px !default;
200
+ $fui-focus-ring-width: 1px !default;
201
+
202
+ // Scrollbar (derived from $fui-neutral palette)
203
+ $fui-scrollbar-width: 8px !default;
204
+ $fui-scrollbar-track: computed.$computed-scrollbar-track !default;
205
+ $fui-scrollbar-thumb: computed.$computed-scrollbar-thumb !default;
206
+ $fui-scrollbar-thumb-hover: computed.$computed-scrollbar-thumb-hover !default;
207
+
208
+ // --------------------------------------------
209
+ // Colors - Dark Mode (derived from seeds)
210
+ // --------------------------------------------
211
+ // Accent colors (brand used directly in dark mode; on-accent handles text contrast)
212
+ $fui-dark-color-accent: computed.$computed-dark-color-accent !default;
213
+ $fui-dark-color-on-accent: computed.$computed-dark-color-on-accent !default;
214
+ $fui-dark-color-accent-hover: computed.$computed-dark-color-accent-hover !default;
215
+ $fui-dark-color-accent-active: computed.$computed-dark-color-accent-active !default;
216
+
217
+ // Surface colors (dark) - derived from $fui-neutral palette
218
+ $fui-dark-bg-primary: computed.$computed-dark-bg-primary !default;
219
+ $fui-dark-bg-secondary: computed.$computed-dark-bg-secondary !default;
220
+ $fui-dark-bg-tertiary: computed.$computed-dark-bg-tertiary !default;
221
+ $fui-dark-bg-elevated: computed.$computed-dark-bg-elevated !default;
222
+ $fui-dark-bg-subtle: computed.$computed-dark-bg-subtle !default;
223
+ $fui-dark-bg-hover: computed.$computed-dark-bg-hover !default;
224
+ $fui-dark-bg-active: computed.$computed-dark-bg-active !default;
225
+ $fui-dark-body-bg: computed.$computed-dark-body-bg !default;
226
+ $fui-dark-main-bg: computed.$computed-dark-main-bg !default;
227
+
228
+ // Text colors (dark) - derived from $fui-neutral palette
229
+ $fui-dark-text-primary: computed.$computed-dark-text-primary !default;
230
+ $fui-dark-text-secondary: computed.$computed-dark-text-secondary !default;
231
+ $fui-dark-text-tertiary: computed.$computed-dark-text-tertiary !default;
232
+ $fui-dark-text-inverse: computed.$computed-dark-text-inverse !default;
233
+
234
+ // Inverse surface (dark) — light surface for tooltips/inverted chips in dark mode
235
+ $fui-dark-bg-inverse: computed.$computed-dark-text-primary !default;
236
+
237
+ // Border colors (dark) - derived from $fui-neutral palette
238
+ $fui-dark-border: computed.$computed-dark-border !default;
239
+ $fui-dark-border-default: computed.$computed-dark-border-default !default;
240
+ $fui-dark-border-strong: computed.$computed-dark-border-strong !default;
241
+
242
+ // Shadows (dark)
243
+ $fui-dark-shadow-sm: computed.$computed-dark-shadow-sm !default;
244
+ $fui-dark-shadow-md: computed.$computed-dark-shadow-md !default;
245
+ $fui-dark-shadow-lg: computed.$computed-dark-shadow-lg !default;
246
+
247
+ // Semantic backgrounds (dark) - increased opacity for visibility
248
+ $fui-dark-color-danger-bg: computed.$computed-dark-color-danger-bg !default;
249
+ $fui-dark-color-success-bg: computed.$computed-dark-color-success-bg !default;
250
+ $fui-dark-color-warning-bg: computed.$computed-dark-color-warning-bg !default;
251
+ $fui-dark-color-info-bg: computed.$computed-dark-color-info-bg !default;
252
+
253
+ // Semantic text colors (dark, WCAG AA contrast-safe)
254
+ $fui-dark-color-danger-text: computed.$computed-dark-color-danger-text !default;
255
+ $fui-dark-color-success-text: computed.$computed-dark-color-success-text !default;
256
+ $fui-dark-color-warning-text: computed.$computed-dark-color-warning-text !default;
257
+ $fui-dark-color-info-text: computed.$computed-dark-color-info-text !default;
258
+
259
+ // Dark mode focus ring
260
+ $fui-dark-focus-ring-color: computed.$computed-dark-focus-ring-color !default;
261
+
262
+ // Scrollbar (dark mode)
263
+ $fui-dark-scrollbar-track: computed.$computed-dark-scrollbar-track !default;
264
+ $fui-dark-scrollbar-thumb: computed.$computed-dark-scrollbar-thumb !default;
265
+ $fui-dark-scrollbar-thumb-hover: computed.$computed-dark-scrollbar-thumb-hover !default;
266
+
267
+ // Overlay/backdrop
268
+ $fui-backdrop: computed.$computed-backdrop !default;
269
+ $fui-dark-backdrop: computed.$computed-dark-backdrop !default;
270
+
271
+ // --------------------------------------------
272
+ // Breakpoints
273
+ // --------------------------------------------
274
+ $fui-breakpoint-sm: 640px !default;
275
+ $fui-breakpoint-md: 768px !default;
276
+ $fui-breakpoint-lg: 1024px !default;
277
+ $fui-breakpoint-xl: 1280px !default;
278
+
279
+ // --------------------------------------------
280
+ // Component-specific tokens
281
+ // --------------------------------------------
282
+
283
+ // Button heights (derived from density seed)
284
+ $fui-button-height-xs: computed.$computed-button-height-xs !default;
285
+ $fui-button-height-sm: computed.$computed-button-height-sm !default;
286
+ $fui-button-height-md: computed.$computed-button-height-md !default;
287
+ $fui-button-height-lg: computed.$computed-button-height-lg !default;
288
+
289
+ // Input heights (derived from density seed)
290
+ // Note: These are dedicated input tokens, not reusing button heights
291
+ $fui-input-height: computed.$computed-input-height !default;
292
+ $fui-input-height-sm: computed.$computed-input-height-sm !default;
293
+ $fui-input-height-lg: computed.$computed-input-height-lg !default;
294
+
295
+ // Touch targets (derived from density seed)
296
+ $fui-touch-sm: computed.$computed-touch-sm !default;
297
+ $fui-touch-md: computed.$computed-touch-md !default;
298
+ $fui-touch-lg: computed.$computed-touch-lg !default;
299
+
300
+ // Minimum interactive target sizes.
301
+ // Keep this token globally available to preserve a product-control floor for
302
+ // touch/pointer targets. WCAG 2.2 allows 24px, but Fragments uses 32px so
303
+ // field controls, toolbar buttons, tabs, and picker triggers align.
304
+ $fui-target-size-min: 2.286rem !default; // 32px
305
+ $fui-target-size-comfortable: $fui-touch-md !default;
306
+
307
+ // Icon sizes (standard conventions)
308
+ $fui-icon-xs: 0.857rem !default; // 12px (inline/caption glyphs)
309
+ $fui-icon-sm: 1rem !default; // 14px (2 units)
310
+ $fui-icon-md: 1.143rem !default; // 16px (standard small icon)
311
+ $fui-icon-lg: 1.429rem !default; // 20px (standard medium icon)
312
+ $fui-icon-xl: 1.714rem !default; // 24px (standard large icon)
313
+ $fui-icon-2xl: 2.286rem !default; // 32px (display/empty-state/loading)
314
+
315
+ // Animation offsets
316
+ $fui-anim-offset-sm: 4px !default; // Small slide animation
317
+ $fui-anim-offset-md: 8px !default; // Medium slide animation
318
+
319
+ // Sidebar (multi-consumer — used by Sidebar, NavigationMenu, Theme)
320
+ $fui-sidebar-item-height: computed.$computed-sidebar-item-height !default; // density-responsive (compact/default: 32px, relaxed: 36px)
321
+
322
+ // AppShell Layout
323
+ $fui-appshell-header-height: 56px !default;
324
+ $fui-header-z-index: 40 !default;
325
+
326
+ // CodeBlock background — shared with Markdown's <pre> prose styling.
327
+ // Other code/tooltip styling tokens live in their component modules.
328
+ $fui-code-bg: #0c0c0e !default;
329
+
330
+ // --------------------------------------------
331
+ // CSS Custom Properties Export
332
+ // --------------------------------------------
333
+ // This mixin outputs CSS custom properties for runtime theming.
334
+ // Call it in your root styles: @include fui-css-variables;
335
+
336
+ @mixin fui-css-variables {
337
+ :root {
338
+ // Enable light-dark() automatic dark mode via color-scheme.
339
+ // Browsers supporting light-dark() (~92%) get automatic prefers-color-scheme support.
340
+ // Manual toggle via [data-theme="dark"] / .dark still works (sets color-scheme: dark).
341
+ color-scheme: light dark;
342
+
343
+ // Base configuration
344
+ font-size: #{$fui-base-font-size};
345
+ --fui-base-unit: #{$fui-base-unit};
346
+
347
+ // Seed colors — the 5 configurable seeds exposed as custom properties.
348
+ // Tracks SCSS seed variables, so compile-time customization is reflected.
349
+ // Consumers can override at runtime: `document.documentElement.style.setProperty('--fui-seed-brand', '#0066ff')`
350
+ // The @supports block below derives accent/semantic tokens from these seeds
351
+ // using relative color syntax in OKLCH space (perceptually uniform).
352
+ --fui-seed-brand: #{$fui-color-accent};
353
+ --fui-seed-danger: #{$fui-color-danger};
354
+ --fui-seed-success: #{$fui-color-success};
355
+ --fui-seed-warning: #{$fui-color-warning};
356
+ --fui-seed-info: #{$fui-color-info};
357
+
358
+ // Typography
359
+ --fui-font-sans: #{$fui-font-sans};
360
+ --fui-font-mono: #{$fui-font-mono};
361
+ --fui-font-size-2xs: #{$fui-font-size-2xs};
362
+ --fui-font-size-xs: #{$fui-font-size-xs};
363
+ --fui-font-size-sm: #{$fui-font-size-sm};
364
+ --fui-font-size-base: #{$fui-font-size-base};
365
+ --fui-font-size-md: #{$fui-font-size-md};
366
+ --fui-font-size-lg: #{$fui-font-size-lg};
367
+ --fui-font-size-xl: #{$fui-font-size-xl};
368
+ --fui-font-size-2xl: #{$fui-font-size-2xl};
369
+ --fui-font-size-3xl: #{$fui-font-size-3xl};
370
+ --fui-font-size-4xl: #{$fui-font-size-4xl};
371
+ --fui-font-weight-normal: #{$fui-font-weight-normal};
372
+ --fui-font-weight-medium: #{$fui-font-weight-medium};
373
+ --fui-font-weight-semibold: #{$fui-font-weight-semibold};
374
+ --fui-font-weight-bold: #{$fui-font-weight-bold};
375
+ --fui-line-height-tight: #{$fui-line-height-tight};
376
+ --fui-line-height-normal: #{$fui-line-height-normal};
377
+ --fui-line-height-relaxed: #{$fui-line-height-relaxed};
378
+ --fui-line-height-display: #{$fui-line-height-display};
379
+ --fui-line-height-prose: #{$fui-line-height-prose};
380
+ --fui-letter-spacing-tight: #{$fui-letter-spacing-tight};
381
+ --fui-letter-spacing-normal: #{$fui-letter-spacing-normal};
382
+ --fui-letter-spacing-display: #{$fui-letter-spacing-display};
383
+ --fui-letter-spacing-wide: #{$fui-letter-spacing-wide};
384
+
385
+ // Spacing (micro)
386
+ --fui-space-px: #{$fui-space-px};
387
+ --fui-space-0-5: #{$fui-space-0-5};
388
+ --fui-space-0-75: #{$fui-space-0-75};
389
+
390
+ // Spacing
391
+ --fui-space-1: #{$fui-space-1};
392
+ --fui-space-2: #{$fui-space-2};
393
+ --fui-space-3: #{$fui-space-3};
394
+ --fui-space-4: #{$fui-space-4};
395
+ --fui-space-5: #{$fui-space-5};
396
+ --fui-space-6: #{$fui-space-6};
397
+ --fui-space-8: #{$fui-space-8};
398
+ --fui-space-10: #{$fui-space-10};
399
+ --fui-space-12: #{$fui-space-12};
400
+
401
+ // Border radius
402
+ --fui-radius-sm: #{$fui-radius-sm};
403
+ --fui-radius-md: #{$fui-radius-md};
404
+ --fui-radius-lg: #{$fui-radius-lg};
405
+ --fui-radius-xl: #{$fui-radius-xl};
406
+ --fui-radius-full: #{$fui-radius-full};
407
+
408
+ // Transitions
409
+ --fui-transition-fast: #{$fui-transition-fast};
410
+ --fui-transition-normal: #{$fui-transition-normal};
411
+
412
+ // Colors — Accent (light-dark for automatic dark mode)
413
+ --fui-color-accent: light-dark(#{$fui-color-accent}, #{$fui-dark-color-accent});
414
+ --fui-color-on-accent: light-dark(#{$fui-color-on-accent}, #{$fui-dark-color-on-accent});
415
+ --fui-color-accent-hover: light-dark(
416
+ #{$fui-color-accent-hover},
417
+ #{$fui-dark-color-accent-hover}
418
+ );
419
+ --fui-color-accent-active: light-dark(
420
+ #{$fui-color-accent-active},
421
+ #{$fui-dark-color-accent-active}
422
+ );
423
+
424
+ // Colors — Semantic (same in light/dark, no light-dark() needed)
425
+ --fui-color-danger: #{$fui-color-danger};
426
+ --fui-color-danger-hover: #{$fui-color-danger-hover};
427
+ --fui-color-success: #{$fui-color-success};
428
+ --fui-color-warning: #{$fui-color-warning};
429
+ --fui-color-info: #{$fui-color-info};
430
+
431
+ // Colors — Semantic Status Recipe
432
+ // Inspired by compact status pills: dark mode uses a deep tinted fill with
433
+ // bright semantic text; light mode keeps the same hue recipe on a pale fill.
434
+ --fui-color-danger-bg: light-dark(
435
+ color-mix(in srgb, var(--fui-color-danger) 12%, white),
436
+ color-mix(in srgb, var(--fui-color-danger) 24%, black)
437
+ );
438
+ --fui-color-success-bg: light-dark(
439
+ color-mix(in srgb, var(--fui-color-success) 12%, white),
440
+ color-mix(in srgb, var(--fui-color-success) 24%, black)
441
+ );
442
+ --fui-color-warning-bg: light-dark(
443
+ color-mix(in srgb, var(--fui-color-warning) 12%, white),
444
+ color-mix(in srgb, var(--fui-color-warning) 24%, black)
445
+ );
446
+ --fui-color-info-bg: light-dark(
447
+ color-mix(in srgb, var(--fui-color-info) 12%, white),
448
+ color-mix(in srgb, var(--fui-color-info) 24%, black)
449
+ );
450
+
451
+ --fui-color-danger-text: light-dark(
452
+ color-mix(in srgb, var(--fui-color-danger) 72%, black),
453
+ color-mix(in srgb, var(--fui-color-danger) 78%, white 22%)
454
+ );
455
+ --fui-color-success-text: light-dark(
456
+ color-mix(in srgb, var(--fui-color-success) 72%, black),
457
+ color-mix(in srgb, var(--fui-color-success) 78%, white 22%)
458
+ );
459
+ --fui-color-warning-text: light-dark(
460
+ color-mix(in srgb, var(--fui-color-warning) 72%, black),
461
+ color-mix(in srgb, var(--fui-color-warning) 78%, white 22%)
462
+ );
463
+ --fui-color-info-text: light-dark(
464
+ color-mix(in srgb, var(--fui-color-info) 72%, black),
465
+ color-mix(in srgb, var(--fui-color-info) 78%, white 22%)
466
+ );
467
+
468
+ // Colors — Semantic Borders
469
+ --fui-color-danger-border: light-dark(
470
+ color-mix(in srgb, var(--fui-color-danger) 32%, transparent),
471
+ color-mix(in srgb, var(--fui-color-danger-text) 30%, transparent)
472
+ );
473
+ --fui-color-success-border: light-dark(
474
+ color-mix(in srgb, var(--fui-color-success) 32%, transparent),
475
+ color-mix(in srgb, var(--fui-color-success-text) 28%, transparent)
476
+ );
477
+ --fui-color-warning-border: light-dark(
478
+ color-mix(in srgb, var(--fui-color-warning) 32%, transparent),
479
+ color-mix(in srgb, var(--fui-color-warning-text) 28%, transparent)
480
+ );
481
+ --fui-color-info-border: light-dark(
482
+ color-mix(in srgb, var(--fui-color-info) 32%, transparent),
483
+ color-mix(in srgb, var(--fui-color-info-text) 30%, transparent)
484
+ );
485
+
486
+ // Backdrop
487
+ --fui-backdrop: light-dark(#{$fui-backdrop}, #{$fui-dark-backdrop});
488
+
489
+ // Surfaces
490
+ --fui-bg-primary: light-dark(#{$fui-bg-primary}, #{$fui-dark-bg-primary});
491
+ --fui-bg-secondary: light-dark(#{$fui-bg-secondary}, #{$fui-dark-bg-secondary});
492
+ --fui-bg-tertiary: light-dark(#{$fui-bg-tertiary}, #{$fui-dark-bg-tertiary});
493
+ --fui-bg-elevated: light-dark(#{$fui-bg-elevated}, #{$fui-dark-bg-elevated});
494
+ --fui-bg-subtle: light-dark(#{$fui-bg-subtle}, #{$fui-dark-bg-subtle});
495
+ --fui-bg-hover: light-dark(#{$fui-bg-hover}, #{$fui-dark-bg-hover});
496
+ --fui-bg-active: light-dark(#{$fui-bg-active}, #{$fui-dark-bg-active});
497
+ --fui-body-bg: light-dark(#{$fui-body-bg}, #{$fui-dark-body-bg});
498
+ --fui-main-bg: light-dark(#{$fui-main-bg}, #{$fui-dark-main-bg});
499
+ --fui-bg-inverse: light-dark(#{$fui-bg-inverse}, #{$fui-dark-bg-inverse});
500
+
501
+ // Text
502
+ --fui-text-primary: light-dark(#{$fui-text-primary}, #{$fui-dark-text-primary});
503
+ --fui-text-secondary: light-dark(#{$fui-text-secondary}, #{$fui-dark-text-secondary});
504
+ --fui-text-tertiary: light-dark(#{$fui-text-tertiary}, #{$fui-dark-text-tertiary});
505
+ --fui-text-inverse: light-dark(#{$fui-text-inverse}, #{$fui-dark-text-inverse});
506
+
507
+ // Borders
508
+ --fui-border: light-dark(#{$fui-border}, #{$fui-dark-border});
509
+ --fui-border-default: light-dark(#{$fui-border-default}, #{$fui-dark-border-default});
510
+ --fui-border-strong: light-dark(#{$fui-border-strong}, #{$fui-dark-border-strong});
511
+
512
+ // Native browser text selection. This should track the primary action blue,
513
+ // while component-selected states can stay tuned per control density.
514
+ --fui-selection-bg: light-dark(
515
+ color-mix(in srgb, var(--fui-button-primary-base, #0a84ff) 18%, transparent),
516
+ color-mix(in srgb, var(--fui-button-primary-base, #0a84ff) 32%, transparent)
517
+ );
518
+ --fui-selection-color: var(--fui-text-primary);
519
+
520
+ // Form chrome (shared by Input, Textarea, Select, Combobox, DatePicker,
521
+ // ColorPicker, Editor, and listbox-style controls).
522
+ --fui-field-bg: color-mix(in srgb, var(--fui-bg-elevated) 72%, transparent);
523
+ --fui-field-bg-disabled: color-mix(in srgb, var(--fui-bg-tertiary) 78%, var(--fui-bg-primary));
524
+ --fui-field-border: var(--fui-border-strong);
525
+ --fui-field-border-hover: color-mix(
526
+ in srgb,
527
+ var(--fui-text-tertiary) 46%,
528
+ var(--fui-border-strong)
529
+ );
530
+ --fui-field-border-focus: var(--fui-text-primary);
531
+ --fui-field-selection-bg: color-mix(in srgb, var(--fui-text-primary) 8%, transparent);
532
+ --fui-field-selection-bg-hover: color-mix(in srgb, var(--fui-text-primary) 11%, transparent);
533
+ --fui-field-selection-border: var(--fui-border-strong);
534
+ --fui-field-selection-color: var(--fui-text-primary);
535
+ --fui-form-group-bg: color-mix(in srgb, var(--fui-bg-secondary) 48%, var(--fui-bg-primary));
536
+ --fui-form-group-border: var(--fui-border-default);
537
+
538
+ // Keyboard shortcut hints. Kept flatter than buttons so embedded input
539
+ // hints read as secondary chrome, not as nested actions.
540
+ --fui-kbd-height: 1.286rem; // 18px at 14px root
541
+ --fui-kbd-min-width: 1.714rem; // 24px
542
+ --fui-kbd-padding-x: var(--fui-space-0-75);
543
+ --fui-kbd-gap: calc(var(--fui-space-px) * 2);
544
+ --fui-kbd-bg: color-mix(in srgb, var(--fui-text-primary) 4%, transparent);
545
+ --fui-kbd-border: color-mix(in srgb, var(--fui-border-strong) 72%, transparent);
546
+ --fui-kbd-color: var(--fui-text-tertiary);
547
+ --fui-kbd-shadow: inset 0 1px 0
548
+ light-dark(
549
+ color-mix(in srgb, white 74%, transparent),
550
+ color-mix(in srgb, white 5%, transparent)
551
+ );
552
+ --fui-kbd-font-size: var(--fui-font-size-2xs);
553
+ --fui-kbd-radius: var(--fui-radius-sm);
554
+ --fui-kbd-reserved-width: 2.714rem; // 38px, enough for "⌘K"
555
+
556
+ // Button chrome. Neutral and primary buttons use the same raised-edge
557
+ // recipe in light and dark: crisp border, subtle top highlight, and a
558
+ // pressed inset state.
559
+ --fui-button-radius: var(--fui-radius-lg);
560
+ --fui-button-primary-base: light-dark(#0a84ff, #0a84ff);
561
+ --fui-button-primary-hover: light-dark(#1994ff, #2f9bff);
562
+ --fui-button-primary-active: light-dark(#006edb, #0068d6);
563
+ --fui-button-primary-bg: linear-gradient(
564
+ to bottom,
565
+ color-mix(in srgb, var(--fui-button-primary-base) 78%, white 22%) 0%,
566
+ var(--fui-button-primary-base) 52%,
567
+ color-mix(in srgb, var(--fui-button-primary-active) 88%, black 12%) 100%
568
+ );
569
+ --fui-button-primary-bg-hover: linear-gradient(
570
+ to bottom,
571
+ color-mix(in srgb, var(--fui-button-primary-hover) 76%, white 24%) 0%,
572
+ var(--fui-button-primary-hover) 52%,
573
+ color-mix(in srgb, var(--fui-button-primary-active) 84%, black 16%) 100%
574
+ );
575
+ --fui-button-primary-bg-active: linear-gradient(
576
+ to bottom,
577
+ color-mix(in srgb, var(--fui-button-primary-active) 88%, black 12%) 0%,
578
+ var(--fui-button-primary-active) 100%
579
+ );
580
+ --fui-button-primary-border-hover: color-mix(
581
+ in srgb,
582
+ var(--fui-button-primary-active) 86%,
583
+ black 14%
584
+ );
585
+ --fui-button-primary-border: color-mix(
586
+ in srgb,
587
+ var(--fui-button-primary-active) 74%,
588
+ black 26%
589
+ );
590
+ --fui-button-primary-color: #fff;
591
+ --fui-button-primary-shadow:
592
+ inset 0 1px 0 color-mix(in srgb, white 30%, transparent),
593
+ inset 0 -1px 0 color-mix(in srgb, black 18%, transparent),
594
+ 0 1px 1px color-mix(in srgb, black 16%, transparent);
595
+ --fui-button-primary-shadow-active:
596
+ inset 0 1px 2px color-mix(in srgb, black 30%, transparent),
597
+ 0 1px 0 color-mix(in srgb, white 8%, transparent);
598
+
599
+ --fui-button-neutral-bg: linear-gradient(
600
+ to bottom,
601
+ light-dark(
602
+ color-mix(in srgb, var(--fui-bg-elevated) 97%, var(--fui-text-primary) 3%),
603
+ color-mix(in srgb, var(--fui-bg-elevated) 88%, var(--fui-text-primary) 12%)
604
+ )
605
+ 0%,
606
+ light-dark(
607
+ color-mix(in srgb, var(--fui-bg-elevated) 92%, var(--fui-text-primary) 8%),
608
+ color-mix(in srgb, var(--fui-bg-elevated) 96%, var(--fui-text-primary) 4%)
609
+ )
610
+ 100%
611
+ );
612
+ --fui-button-neutral-bg-hover: linear-gradient(
613
+ to bottom,
614
+ light-dark(
615
+ color-mix(in srgb, var(--fui-bg-elevated) 99%, var(--fui-text-primary) 1%),
616
+ color-mix(in srgb, var(--fui-bg-elevated) 82%, var(--fui-text-primary) 18%)
617
+ )
618
+ 0%,
619
+ light-dark(
620
+ color-mix(in srgb, var(--fui-bg-elevated) 88%, var(--fui-text-primary) 12%),
621
+ color-mix(in srgb, var(--fui-bg-elevated) 92%, var(--fui-text-primary) 8%)
622
+ )
623
+ 100%
624
+ );
625
+ --fui-button-neutral-bg-active: linear-gradient(
626
+ to bottom,
627
+ color-mix(in srgb, var(--fui-bg-elevated) 82%, var(--fui-text-primary) 18%) 0%,
628
+ color-mix(in srgb, var(--fui-bg-elevated) 90%, var(--fui-text-primary) 10%) 100%
629
+ );
630
+ --fui-button-neutral-border: color-mix(
631
+ in srgb,
632
+ var(--fui-border-strong) 78%,
633
+ var(--fui-text-primary) 22%
634
+ );
635
+ --fui-button-neutral-border-hover: color-mix(
636
+ in srgb,
637
+ var(--fui-border-strong) 58%,
638
+ var(--fui-text-primary) 42%
639
+ );
640
+ --fui-button-neutral-color: var(--fui-text-primary);
641
+ --fui-button-neutral-shadow:
642
+ inset 0 1px 0
643
+ light-dark(
644
+ color-mix(in srgb, white 88%, transparent),
645
+ color-mix(in srgb, white 7%, transparent)
646
+ ),
647
+ inset 0 -1px 0 color-mix(in srgb, var(--fui-text-primary) 7%, transparent),
648
+ 0 1px 1px color-mix(in srgb, black 12%, transparent);
649
+ --fui-button-neutral-shadow-active:
650
+ inset 0 1px 2px color-mix(in srgb, black 16%, transparent),
651
+ inset 0 0 0 1px color-mix(in srgb, var(--fui-text-primary) 6%, transparent);
652
+
653
+ // Popup/menu active-item highlight — neutral, deliberately stronger than
654
+ // --fui-bg-hover (which is tuned for subtle surface hovers and reads as ~invisible
655
+ // on menu items, esp. in dark mode). Shared by every popup-list surface. Accent is
656
+ // reserved for the *selected* item (see --fui-field-selection-*), not hover.
657
+ --fui-bg-highlight: color-mix(in srgb, var(--fui-text-primary) 7%, transparent);
658
+
659
+ // Product shell and navigation chrome. These stay neutral-first so a
660
+ // dashboard page reads as one system instead of brand-tinted islands.
661
+ --fui-app-canvas-bg: var(--fui-body-bg);
662
+ --fui-app-main-bg: var(--fui-main-bg);
663
+ --fui-app-sidebar-bg: color-mix(in srgb, var(--fui-bg-primary) 78%, var(--fui-bg-secondary));
664
+ --fui-sidebar-bg: var(--fui-app-sidebar-bg);
665
+ --fui-sidebar-border: var(--fui-border-default);
666
+ --fui-sidebar-item-color: var(--fui-text-secondary);
667
+ --fui-sidebar-item-icon-color: var(--fui-text-tertiary);
668
+ --fui-sidebar-item-hover-bg: var(--fui-bg-hover);
669
+ --fui-sidebar-item-hover-color: var(--fui-text-primary);
670
+ --fui-sidebar-item-active-bg: color-mix(in srgb, var(--fui-text-primary) 8%, transparent);
671
+ --fui-sidebar-item-active-border: transparent;
672
+ --fui-sidebar-item-active-color: var(--fui-text-primary);
673
+ --fui-sidebar-item-active-indicator: transparent;
674
+ --fui-sidebar-footer-border: color-mix(in srgb, var(--fui-border-default) 68%, transparent);
675
+
676
+ // Card/panel surfaces.
677
+ --fui-card-radius: var(--fui-radius-lg);
678
+ --fui-card-bg: color-mix(in srgb, var(--fui-bg-elevated) 92%, transparent);
679
+ --fui-card-border: color-mix(in srgb, var(--fui-border-default) 86%, transparent);
680
+ --fui-card-shadow: inset 0 1px 0
681
+ light-dark(
682
+ color-mix(in srgb, white 86%, transparent),
683
+ color-mix(in srgb, white 4%, transparent)
684
+ );
685
+ --fui-card-elevated-shadow:
686
+ var(--fui-card-shadow), 0 1px 2px color-mix(in srgb, black 8%, transparent),
687
+ 0 16px 36px -28px color-mix(in srgb, black 34%, transparent);
688
+ --fui-card-hover-bg: color-mix(in srgb, var(--fui-bg-elevated) 88%, var(--fui-text-primary) 4%);
689
+ --fui-card-hover-border: color-mix(in srgb, var(--fui-border-strong) 86%, transparent);
690
+ --fui-card-active-bg: color-mix(
691
+ in srgb,
692
+ var(--fui-bg-elevated) 84%,
693
+ var(--fui-text-primary) 6%
694
+ );
695
+ --fui-card-stat-bg: color-mix(in srgb, var(--fui-bg-elevated) 74%, transparent);
696
+ --fui-card-stat-border: color-mix(in srgb, var(--fui-border-default) 78%, transparent);
697
+ --fui-card-stat-shadow: var(--fui-card-shadow);
698
+ --fui-panel-bg: color-mix(in srgb, var(--fui-bg-elevated) 74%, transparent);
699
+ --fui-panel-border: color-mix(in srgb, var(--fui-border-default) 78%, transparent);
700
+
701
+ // Tables.
702
+ --fui-table-bg: transparent;
703
+ --fui-table-border: var(--fui-border-default);
704
+ --fui-table-header-bg: color-mix(in srgb, var(--fui-text-primary) 5%, transparent);
705
+ --fui-table-header-border: var(--fui-border-strong);
706
+ --fui-table-row-hover-bg: var(--fui-bg-hover);
707
+ --fui-table-row-active-bg: var(--fui-bg-active);
708
+ --fui-table-row-selected-bg: color-mix(in srgb, var(--fui-text-primary) 8%, transparent);
709
+ --fui-table-row-selected-border: var(--fui-border-strong);
710
+ --fui-table-subrow-bg: color-mix(in srgb, var(--fui-bg-secondary) 62%, transparent);
711
+
712
+ // Segmented controls / tabs.
713
+ --fui-tabs-pills-bg: color-mix(in srgb, var(--fui-text-primary) 5%, transparent);
714
+ --fui-tabs-pills-border: var(--fui-border-default);
715
+ --fui-tabs-pill-hover-bg: transparent;
716
+ --fui-tabs-pill-active-bg: color-mix(in srgb, var(--fui-text-primary) 9%, transparent);
717
+ --fui-tabs-pill-active-border: transparent;
718
+ --fui-tabs-pill-active-shadow: none;
719
+ --fui-toggle-group-selected-bg: color-mix(in srgb, var(--fui-text-primary) 9%, transparent);
720
+ --fui-toggle-group-selected-border: transparent;
721
+ --fui-toggle-group-selected-shadow: none;
722
+
723
+ // Shadows (not <color> type — light-dark() can't be used, handled in dark overrides)
724
+ --fui-shadow-sm: #{$fui-shadow-sm};
725
+ --fui-shadow-md: #{$fui-shadow-md};
726
+ --fui-shadow-lg: #{$fui-shadow-lg};
727
+
728
+ // Focus
729
+ --fui-focus-ring-color: light-dark(#{$fui-focus-ring-color}, #{$fui-dark-focus-ring-color});
730
+ --fui-focus-ring-offset: #{$fui-focus-ring-offset};
731
+ --fui-focus-ring-width: #{$fui-focus-ring-width};
732
+
733
+ // Scrollbar
734
+ --fui-scrollbar-width: #{$fui-scrollbar-width};
735
+ --fui-scrollbar-track: light-dark(#{$fui-scrollbar-track}, #{$fui-dark-scrollbar-track});
736
+ --fui-scrollbar-thumb: light-dark(#{$fui-scrollbar-thumb}, #{$fui-dark-scrollbar-thumb});
737
+ --fui-scrollbar-thumb-hover: light-dark(
738
+ #{$fui-scrollbar-thumb-hover},
739
+ #{$fui-dark-scrollbar-thumb-hover}
740
+ );
741
+
742
+ // Component heights (density-responsive)
743
+ --fui-button-height-xs: #{$fui-button-height-xs};
744
+ --fui-button-height-sm: #{$fui-button-height-sm};
745
+ --fui-button-height-md: #{$fui-button-height-md};
746
+ --fui-button-height-lg: #{$fui-button-height-lg};
747
+ --fui-input-height-sm: #{$fui-input-height-sm};
748
+ --fui-input-height: #{$fui-input-height};
749
+ --fui-input-height-lg: #{$fui-input-height-lg};
750
+
751
+ // Touch targets (density-responsive, Fragments control floor: ≥32px)
752
+ --fui-touch-sm: #{$fui-touch-sm};
753
+ --fui-touch-md: #{$fui-touch-md};
754
+ --fui-touch-lg: #{$fui-touch-lg};
755
+ --fui-target-size-min: #{$fui-target-size-min};
756
+
757
+ // Sidebar (density-responsive)
758
+ --fui-sidebar-item-height: #{$fui-sidebar-item-height};
759
+
760
+ // AppShell Layout
761
+ --fui-appshell-header-height: #{$fui-appshell-header-height};
762
+ --fui-header-z-index: #{$fui-header-z-index};
763
+
764
+ // Icon sizes (single source of truth — components must not hardcode SVG box sizes)
765
+ --fui-icon-xs: #{$fui-icon-xs};
766
+ --fui-icon-sm: #{$fui-icon-sm};
767
+ --fui-icon-md: #{$fui-icon-md};
768
+ --fui-icon-lg: #{$fui-icon-lg};
769
+ --fui-icon-xl: #{$fui-icon-xl};
770
+ --fui-icon-2xl: #{$fui-icon-2xl};
771
+ }
772
+
773
+ // Dark mode via data-theme attribute (manual toggle).
774
+ // Sets color-scheme: dark so light-dark() resolves to dark values.
775
+ // Explicit overrides kept as fallback for browsers without light-dark() (~8%).
776
+ :root[data-theme="dark"] {
777
+ color-scheme: dark;
778
+ @include _fui-dark-tokens;
779
+ }
780
+
781
+ // Dark mode via .dark class on html
782
+ :root.dark {
783
+ color-scheme: dark;
784
+ @include _fui-dark-tokens;
785
+ }
786
+
787
+ // Light mode explicit override (for manual toggle back to light)
788
+ :root[data-theme="light"],
789
+ :root.light {
790
+ color-scheme: light;
791
+ }
792
+
793
+ // ============================================
794
+ // Runtime Color Derivation (Progressive Enhancement)
795
+ // ============================================
796
+ // Browsers supporting relative color syntax (~93%) get reactive tokens
797
+ // that auto-update when --fui-seed-* properties change at runtime.
798
+ // Derivation uses OKLCH space for perceptually uniform results.
799
+ // Browsers without support gracefully fall through to SCSS-computed values above.
800
+ // Usage: document.documentElement.style.setProperty('--fui-seed-brand', '#0066ff')
801
+ // → accent, accent-hover, accent-active, focus-ring all update automatically.
802
+
803
+ @supports (color: oklch(from red l c h)) {
804
+ :root {
805
+ // Accent derived from seed-brand.
806
+ // Light mode: brand as-is. Dark mode: CHROMA-AWARE lift. Chroma is preserved
807
+ // (never clamped), so a saturated brand — e.g. blue-600 oklch(0.55 0.22 262) —
808
+ // stays a true, vibrant blue instead of a washed-out tint. Lightness is only
809
+ // lifted for near-grey/chroma-0 seeds, via the `0.95 - 2*c` term: a vibrant
810
+ // brand (high c) keeps its own lightness, while a neutral grey brand (c≈0) lifts
811
+ // toward ~0.85 so it stays visible on dark surfaces where lightness is the only
812
+ // perceptual cue. Final L is clamped to [0.55, 0.85].
813
+ --fui-color-accent: light-dark(
814
+ var(--fui-seed-brand),
815
+ oklch(from var(--fui-seed-brand) clamp(0.55, max(l, calc(0.95 - 2 * c)), 0.85) c h)
816
+ );
817
+
818
+ // Auto-contrast text for elements on accent backgrounds (buttons, chips, etc.)
819
+ // Lightness > 0.6 → dark text; otherwise → white. Users can override this token.
820
+ --fui-color-on-accent: oklch(
821
+ from var(--fui-color-accent) calc(0 + (1 - clamp(0, calc((l - 0.6) * 999), 1))) 0 0
822
+ );
823
+ --fui-color-accent-hover: light-dark(
824
+ oklch(from var(--fui-seed-brand) max(0.05, calc(l - 0.06)) c h),
825
+ oklch(
826
+ from var(--fui-seed-brand) clamp(0.6, max(calc(l + 0.06), calc(0.97 - 2 * c)), 0.9) c h
827
+ )
828
+ );
829
+ --fui-color-accent-active: light-dark(
830
+ oklch(from var(--fui-seed-brand) max(0.05, calc(l - 0.12)) c h),
831
+ oklch(
832
+ from var(--fui-seed-brand) clamp(0.5, max(calc(l - 0.04), calc(0.9 - 2 * c)), 0.82) c h
833
+ )
834
+ );
835
+
836
+ // Semantic hover derived from seed
837
+ --fui-color-danger-hover: oklch(from var(--fui-seed-danger) max(0.05, calc(l - 0.06)) c h);
838
+
839
+ // Semantic status recipe, matching the static token block above.
840
+ --fui-color-danger-bg: light-dark(
841
+ color-mix(in oklch, var(--fui-seed-danger) 12%, white),
842
+ color-mix(in oklch, var(--fui-seed-danger) 24%, black)
843
+ );
844
+ --fui-color-success-bg: light-dark(
845
+ color-mix(in oklch, var(--fui-seed-success) 12%, white),
846
+ color-mix(in oklch, var(--fui-seed-success) 24%, black)
847
+ );
848
+ --fui-color-warning-bg: light-dark(
849
+ color-mix(in oklch, var(--fui-seed-warning) 12%, white),
850
+ color-mix(in oklch, var(--fui-seed-warning) 24%, black)
851
+ );
852
+ --fui-color-info-bg: light-dark(
853
+ color-mix(in oklch, var(--fui-seed-info) 12%, white),
854
+ color-mix(in oklch, var(--fui-seed-info) 24%, black)
855
+ );
856
+ --fui-color-danger-text: light-dark(
857
+ color-mix(in oklch, var(--fui-seed-danger) 72%, black),
858
+ color-mix(in oklch, var(--fui-seed-danger) 78%, white 22%)
859
+ );
860
+ --fui-color-success-text: light-dark(
861
+ color-mix(in oklch, var(--fui-seed-success) 72%, black),
862
+ color-mix(in oklch, var(--fui-seed-success) 78%, white 22%)
863
+ );
864
+ --fui-color-warning-text: light-dark(
865
+ color-mix(in oklch, var(--fui-seed-warning) 72%, black),
866
+ color-mix(in oklch, var(--fui-seed-warning) 78%, white 22%)
867
+ );
868
+ --fui-color-info-text: light-dark(
869
+ color-mix(in oklch, var(--fui-seed-info) 72%, black),
870
+ color-mix(in oklch, var(--fui-seed-info) 78%, white 22%)
871
+ );
872
+
873
+ // Focus ring follows the resolved accent so dark brands are lifted on
874
+ // dark surfaces instead of disappearing into the field chrome.
875
+ --fui-focus-ring-color: var(--fui-color-accent);
876
+ }
877
+
878
+ // Runtime-derived dark mode overrides (replaces SCSS-computed when supported).
879
+ // Chroma-aware lift mirroring the light-dark() dark half above: vibrant brands
880
+ // keep their own lightness + chroma; near-grey brands lift toward ~0.85. Chroma
881
+ // is never clamped, so saturated brands (e.g. blue-600) stay true in dark mode.
882
+ :root[data-theme="dark"],
883
+ :root.dark {
884
+ --fui-color-accent: oklch(
885
+ from var(--fui-seed-brand) clamp(0.55, max(l, calc(0.95 - 2 * c)), 0.85) c h
886
+ );
887
+ --fui-color-on-accent: oklch(
888
+ from var(--fui-color-accent) calc(0 + (1 - clamp(0, calc((l - 0.6) * 999), 1))) 0 0
889
+ );
890
+ --fui-color-accent-hover: oklch(
891
+ from var(--fui-seed-brand) clamp(0.6, max(calc(l + 0.06), calc(0.97 - 2 * c)), 0.9) c h
892
+ );
893
+ --fui-color-accent-active: oklch(
894
+ from var(--fui-seed-brand) clamp(0.5, max(calc(l - 0.04), calc(0.9 - 2 * c)), 0.82) c h
895
+ );
896
+ --fui-color-danger-bg: color-mix(in oklch, var(--fui-seed-danger) 24%, black);
897
+ --fui-color-success-bg: color-mix(in oklch, var(--fui-seed-success) 24%, black);
898
+ --fui-color-warning-bg: color-mix(in oklch, var(--fui-seed-warning) 24%, black);
899
+ --fui-color-info-bg: color-mix(in oklch, var(--fui-seed-info) 24%, black);
900
+ --fui-color-danger-text: color-mix(in oklch, var(--fui-seed-danger) 78%, white 22%);
901
+ --fui-color-success-text: color-mix(in oklch, var(--fui-seed-success) 78%, white 22%);
902
+ --fui-color-warning-text: color-mix(in oklch, var(--fui-seed-warning) 78%, white 22%);
903
+ --fui-color-info-text: color-mix(in oklch, var(--fui-seed-info) 78%, white 22%);
904
+ --fui-focus-ring-color: var(--fui-color-accent);
905
+ }
906
+ }
907
+
908
+ // High contrast mode via system preference
909
+ @media (prefers-contrast: more) {
910
+ :root {
911
+ @include _fui-high-contrast-tokens;
912
+ }
913
+
914
+ :root[data-theme="dark"],
915
+ :root.dark {
916
+ --fui-bg-hover: rgba(255, 255, 255, 0.15);
917
+ --fui-bg-active: rgba(255, 255, 255, 0.22);
918
+ }
919
+ }
920
+
921
+ // High contrast mode via data attribute (manual toggle)
922
+ :root[data-high-contrast="true"] {
923
+ @include _fui-high-contrast-tokens;
924
+ }
925
+
926
+ // Global scrollbar styling
927
+ * {
928
+ // Firefox
929
+ scrollbar-width: thin;
930
+ scrollbar-color: var(--fui-scrollbar-thumb) var(--fui-scrollbar-track);
931
+ }
932
+
933
+ // Webkit browsers (Chrome, Safari, Edge)
934
+ *::-webkit-scrollbar {
935
+ width: var(--fui-scrollbar-width);
936
+ height: var(--fui-scrollbar-width);
937
+ }
938
+
939
+ *::-webkit-scrollbar-track {
940
+ background: var(--fui-scrollbar-track);
941
+ border-radius: calc(var(--fui-scrollbar-width) / 2);
942
+ }
943
+
944
+ *::-webkit-scrollbar-thumb {
945
+ background: var(--fui-scrollbar-thumb);
946
+ border-radius: calc(var(--fui-scrollbar-width) / 2);
947
+
948
+ &:hover {
949
+ background: var(--fui-scrollbar-thumb-hover);
950
+ }
951
+ }
952
+
953
+ *::-webkit-scrollbar-corner {
954
+ background: var(--fui-scrollbar-track);
955
+ }
956
+ }
957
+
958
+ // High contrast mode support
959
+ @mixin _fui-high-contrast-tokens {
960
+ // Increase focus ring visibility
961
+ --fui-focus-ring-width: 3px;
962
+
963
+ // Stronger borders for better visibility
964
+ --fui-border: var(--fui-text-primary);
965
+ --fui-border-strong: var(--fui-text-primary);
966
+
967
+ // Ensure minimum contrast on interactive elements
968
+ --fui-bg-hover: rgba(0, 0, 0, 0.12);
969
+ --fui-bg-active: rgba(0, 0, 0, 0.18);
970
+ --fui-field-border: var(--fui-text-primary);
971
+ --fui-field-border-hover: var(--fui-text-primary);
972
+ --fui-field-border-focus: var(--fui-color-accent);
973
+ --fui-field-selection-border: var(--fui-color-accent);
974
+ --fui-form-group-border: var(--fui-text-primary);
975
+ --fui-sidebar-item-active-border: var(--fui-text-primary);
976
+ --fui-tabs-pill-active-border: var(--fui-text-primary);
977
+ --fui-tabs-pill-active-shadow: inset 0 0 0 1px var(--fui-tabs-pill-active-border);
978
+ --fui-toggle-group-selected-border: var(--fui-text-primary);
979
+ --fui-toggle-group-selected-shadow: inset 0 0 0 1px var(--fui-toggle-group-selected-border);
980
+ }
981
+
982
+ // Private mixin for dark mode token values
983
+ @mixin _fui-dark-tokens {
984
+ // Accent colors — brand used directly; on-accent handles text contrast
985
+ --fui-color-accent: #{$fui-dark-color-accent};
986
+ --fui-color-on-accent: #{$fui-dark-color-on-accent};
987
+ --fui-color-accent-hover: #{$fui-dark-color-accent-hover};
988
+ --fui-color-accent-active: #{$fui-dark-color-accent-active};
989
+
990
+ // Surfaces
991
+ --fui-bg-primary: #{$fui-dark-bg-primary};
992
+ --fui-bg-secondary: #{$fui-dark-bg-secondary};
993
+ --fui-bg-tertiary: #{$fui-dark-bg-tertiary};
994
+ --fui-bg-elevated: #{$fui-dark-bg-elevated};
995
+ --fui-bg-subtle: #{$fui-dark-bg-subtle};
996
+ --fui-bg-hover: #{$fui-dark-bg-hover};
997
+ --fui-bg-active: #{$fui-dark-bg-active};
998
+ // Menu highlight runs a touch stronger in dark so it clears the low-contrast floor.
999
+ --fui-bg-highlight: color-mix(in srgb, var(--fui-text-primary) 10%, transparent);
1000
+ --fui-body-bg: #{$fui-dark-body-bg};
1001
+ --fui-main-bg: #{$fui-dark-main-bg};
1002
+ --fui-bg-inverse: #{$fui-dark-bg-inverse};
1003
+
1004
+ // Text
1005
+ --fui-text-primary: #{$fui-dark-text-primary};
1006
+ --fui-text-secondary: #{$fui-dark-text-secondary};
1007
+ --fui-text-tertiary: #{$fui-dark-text-tertiary};
1008
+ --fui-text-inverse: #{$fui-dark-text-inverse};
1009
+
1010
+ // Borders
1011
+ --fui-border: #{$fui-dark-border};
1012
+ --fui-border-default: #{$fui-dark-border-default};
1013
+ --fui-border-strong: #{$fui-dark-border-strong};
1014
+
1015
+ // Shadows
1016
+ --fui-shadow-sm: #{$fui-dark-shadow-sm};
1017
+ --fui-shadow-md: #{$fui-dark-shadow-md};
1018
+ --fui-shadow-lg: #{$fui-dark-shadow-lg};
1019
+
1020
+ // Semantic status recipe
1021
+ --fui-color-danger-bg: color-mix(in srgb, var(--fui-color-danger) 24%, black);
1022
+ --fui-color-success-bg: color-mix(in srgb, var(--fui-color-success) 24%, black);
1023
+ --fui-color-warning-bg: color-mix(in srgb, var(--fui-color-warning) 24%, black);
1024
+ --fui-color-info-bg: color-mix(in srgb, var(--fui-color-info) 24%, black);
1025
+
1026
+ --fui-color-danger-text: color-mix(in srgb, var(--fui-color-danger) 78%, white 22%);
1027
+ --fui-color-success-text: color-mix(in srgb, var(--fui-color-success) 78%, white 22%);
1028
+ --fui-color-warning-text: color-mix(in srgb, var(--fui-color-warning) 78%, white 22%);
1029
+ --fui-color-info-text: color-mix(in srgb, var(--fui-color-info) 78%, white 22%);
1030
+
1031
+ // Semantic borders
1032
+ --fui-color-danger-border: color-mix(in srgb, var(--fui-color-danger-text) 30%, transparent);
1033
+ --fui-color-success-border: color-mix(in srgb, var(--fui-color-success-text) 28%, transparent);
1034
+ --fui-color-warning-border: color-mix(in srgb, var(--fui-color-warning-text) 28%, transparent);
1035
+ --fui-color-info-border: color-mix(in srgb, var(--fui-color-info-text) 30%, transparent);
1036
+
1037
+ // Focus & backdrop
1038
+ --fui-focus-ring-color: #{$fui-dark-focus-ring-color};
1039
+ --fui-backdrop: #{$fui-dark-backdrop};
1040
+
1041
+ // Scrollbar
1042
+ --fui-scrollbar-track: #{$fui-dark-scrollbar-track};
1043
+ --fui-scrollbar-thumb: #{$fui-dark-scrollbar-thumb};
1044
+ --fui-scrollbar-thumb-hover: #{$fui-dark-scrollbar-thumb-hover};
1045
+ }