@vitinnczk/onyx-ui 0.0.0-stage → 0.2.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 (323) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/LICENSE +21 -0
  3. package/README.md +330 -2
  4. package/dist/components/Accordion/Accordion.d.ts +42 -0
  5. package/dist/components/Accordion/Accordion.js +105 -0
  6. package/dist/components/Accordion/Accordion.js.map +1 -0
  7. package/dist/components/Accordion/Accordion.module.js +14 -0
  8. package/dist/components/Accordion/Accordion.module.js.map +1 -0
  9. package/dist/components/Accordion/index.d.ts +2 -0
  10. package/dist/components/Alert/Alert.d.ts +26 -0
  11. package/dist/components/Alert/Alert.js +58 -0
  12. package/dist/components/Alert/Alert.js.map +1 -0
  13. package/dist/components/Alert/Alert.module.js +19 -0
  14. package/dist/components/Alert/Alert.module.js.map +1 -0
  15. package/dist/components/Alert/index.d.ts +2 -0
  16. package/dist/components/Avatar/Avatar.d.ts +16 -0
  17. package/dist/components/Avatar/Avatar.js +33 -0
  18. package/dist/components/Avatar/Avatar.js.map +1 -0
  19. package/dist/components/Avatar/Avatar.module.js +15 -0
  20. package/dist/components/Avatar/Avatar.module.js.map +1 -0
  21. package/dist/components/Avatar/index.d.ts +2 -0
  22. package/dist/components/Badge/Badge.d.ts +15 -0
  23. package/dist/components/Badge/Badge.js +17 -0
  24. package/dist/components/Badge/Badge.js.map +1 -0
  25. package/dist/components/Badge/Badge.module.js +18 -0
  26. package/dist/components/Badge/Badge.module.js.map +1 -0
  27. package/dist/components/Badge/index.d.ts +2 -0
  28. package/dist/components/Breadcrumb/Breadcrumb.d.ts +26 -0
  29. package/dist/components/Breadcrumb/Breadcrumb.js +44 -0
  30. package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -0
  31. package/dist/components/Breadcrumb/Breadcrumb.module.js +11 -0
  32. package/dist/components/Breadcrumb/Breadcrumb.module.js.map +1 -0
  33. package/dist/components/Breadcrumb/index.d.ts +2 -0
  34. package/dist/components/Button/Button.d.ts +29 -0
  35. package/dist/components/Button/Button.js +40 -0
  36. package/dist/components/Button/Button.js.map +1 -0
  37. package/dist/components/Button/Button.module.js +18 -0
  38. package/dist/components/Button/Button.module.js.map +1 -0
  39. package/dist/components/Button/index.d.ts +2 -0
  40. package/dist/components/Card/Card.d.ts +24 -0
  41. package/dist/components/Card/Card.js +34 -0
  42. package/dist/components/Card/Card.js.map +1 -0
  43. package/dist/components/Card/Card.module.js +17 -0
  44. package/dist/components/Card/Card.module.js.map +1 -0
  45. package/dist/components/Card/index.d.ts +2 -0
  46. package/dist/components/Checkbox/Checkbox.d.ts +21 -0
  47. package/dist/components/Checkbox/Checkbox.js +52 -0
  48. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  49. package/dist/components/Checkbox/Checkbox.module.js +9 -0
  50. package/dist/components/Checkbox/Checkbox.module.js.map +1 -0
  51. package/dist/components/Checkbox/index.d.ts +2 -0
  52. package/dist/components/Divider/Divider.d.ts +18 -0
  53. package/dist/components/Divider/Divider.js +24 -0
  54. package/dist/components/Divider/Divider.js.map +1 -0
  55. package/dist/components/Divider/Divider.module.js +12 -0
  56. package/dist/components/Divider/Divider.module.js.map +1 -0
  57. package/dist/components/Divider/index.d.ts +2 -0
  58. package/dist/components/Drawer/Drawer.d.ts +18 -0
  59. package/dist/components/Drawer/Drawer.js +27 -0
  60. package/dist/components/Drawer/Drawer.js.map +1 -0
  61. package/dist/components/Drawer/Drawer.module.js +17 -0
  62. package/dist/components/Drawer/Drawer.module.js.map +1 -0
  63. package/dist/components/Drawer/index.d.ts +2 -0
  64. package/dist/components/DropdownMenu/DropdownMenu.d.ts +65 -0
  65. package/dist/components/DropdownMenu/DropdownMenu.js +159 -0
  66. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -0
  67. package/dist/components/DropdownMenu/DropdownMenu.module.js +16 -0
  68. package/dist/components/DropdownMenu/DropdownMenu.module.js.map +1 -0
  69. package/dist/components/DropdownMenu/index.d.ts +2 -0
  70. package/dist/components/EmptyState/EmptyState.d.ts +20 -0
  71. package/dist/components/EmptyState/EmptyState.js +36 -0
  72. package/dist/components/EmptyState/EmptyState.js.map +1 -0
  73. package/dist/components/EmptyState/EmptyState.module.js +12 -0
  74. package/dist/components/EmptyState/EmptyState.module.js.map +1 -0
  75. package/dist/components/EmptyState/index.d.ts +2 -0
  76. package/dist/components/FormField/FormField.d.ts +24 -0
  77. package/dist/components/FormField/FormField.js +49 -0
  78. package/dist/components/FormField/FormField.js.map +1 -0
  79. package/dist/components/FormField/FormField.module.js +10 -0
  80. package/dist/components/FormField/FormField.module.js.map +1 -0
  81. package/dist/components/FormField/formFieldContext.d.ts +24 -0
  82. package/dist/components/FormField/formFieldContext.js +18 -0
  83. package/dist/components/FormField/formFieldContext.js.map +1 -0
  84. package/dist/components/FormField/index.d.ts +2 -0
  85. package/dist/components/Heading/Heading.d.ts +14 -0
  86. package/dist/components/Heading/Heading.js +32 -0
  87. package/dist/components/Heading/Heading.js.map +1 -0
  88. package/dist/components/Heading/Heading.module.js +14 -0
  89. package/dist/components/Heading/Heading.module.js.map +1 -0
  90. package/dist/components/Heading/index.d.ts +2 -0
  91. package/dist/components/Icon/Icon.d.ts +16 -0
  92. package/dist/components/Icon/Icon.js +28 -0
  93. package/dist/components/Icon/Icon.js.map +1 -0
  94. package/dist/components/Icon/Icon.module.js +13 -0
  95. package/dist/components/Icon/Icon.module.js.map +1 -0
  96. package/dist/components/Icon/icons.d.ts +17 -0
  97. package/dist/components/Icon/icons.js +47 -0
  98. package/dist/components/Icon/icons.js.map +1 -0
  99. package/dist/components/Icon/index.d.ts +3 -0
  100. package/dist/components/IconButton/IconButton.d.ts +12 -0
  101. package/dist/components/IconButton/IconButton.js +25 -0
  102. package/dist/components/IconButton/IconButton.js.map +1 -0
  103. package/dist/components/IconButton/IconButton.module.js +11 -0
  104. package/dist/components/IconButton/IconButton.module.js.map +1 -0
  105. package/dist/components/IconButton/index.d.ts +2 -0
  106. package/dist/components/Input/Input.d.ts +18 -0
  107. package/dist/components/Input/Input.js +47 -0
  108. package/dist/components/Input/Input.js.map +1 -0
  109. package/dist/components/Input/Input.module.js +5 -0
  110. package/dist/components/Input/Input.module.js.map +1 -0
  111. package/dist/components/Input/index.d.ts +2 -0
  112. package/dist/components/Label/Label.d.ts +15 -0
  113. package/dist/components/Label/Label.js +22 -0
  114. package/dist/components/Label/Label.js.map +1 -0
  115. package/dist/components/Label/Label.module.js +10 -0
  116. package/dist/components/Label/Label.module.js.map +1 -0
  117. package/dist/components/Label/index.d.ts +2 -0
  118. package/dist/components/Link/Link.d.ts +23 -0
  119. package/dist/components/Link/Link.js +27 -0
  120. package/dist/components/Link/Link.js.map +1 -0
  121. package/dist/components/Link/Link.module.js +11 -0
  122. package/dist/components/Link/Link.module.js.map +1 -0
  123. package/dist/components/Link/index.d.ts +2 -0
  124. package/dist/components/Modal/DialogSurface.d.ts +39 -0
  125. package/dist/components/Modal/DialogSurface.js +69 -0
  126. package/dist/components/Modal/DialogSurface.js.map +1 -0
  127. package/dist/components/Modal/DialogSurface.module.js +16 -0
  128. package/dist/components/Modal/DialogSurface.module.js.map +1 -0
  129. package/dist/components/Modal/Modal.d.ts +34 -0
  130. package/dist/components/Modal/Modal.js +44 -0
  131. package/dist/components/Modal/Modal.js.map +1 -0
  132. package/dist/components/Modal/Modal.module.js +13 -0
  133. package/dist/components/Modal/Modal.module.js.map +1 -0
  134. package/dist/components/Modal/index.d.ts +3 -0
  135. package/dist/components/Pagination/Pagination.d.ts +46 -0
  136. package/dist/components/Pagination/Pagination.js +71 -0
  137. package/dist/components/Pagination/Pagination.js.map +1 -0
  138. package/dist/components/Pagination/Pagination.module.js +13 -0
  139. package/dist/components/Pagination/Pagination.module.js.map +1 -0
  140. package/dist/components/Pagination/index.d.ts +2 -0
  141. package/dist/components/Popover/Popover.d.ts +46 -0
  142. package/dist/components/Popover/Popover.js +89 -0
  143. package/dist/components/Popover/Popover.js.map +1 -0
  144. package/dist/components/Popover/Popover.module.js +12 -0
  145. package/dist/components/Popover/Popover.module.js.map +1 -0
  146. package/dist/components/Popover/index.d.ts +2 -0
  147. package/dist/components/Portal/Portal.d.ts +10 -0
  148. package/dist/components/Portal/Portal.js +13 -0
  149. package/dist/components/Portal/Portal.js.map +1 -0
  150. package/dist/components/Portal/index.d.ts +2 -0
  151. package/dist/components/Progress/Progress.d.ts +28 -0
  152. package/dist/components/Progress/Progress.js +42 -0
  153. package/dist/components/Progress/Progress.js.map +1 -0
  154. package/dist/components/Progress/Progress.module.js +18 -0
  155. package/dist/components/Progress/Progress.module.js.map +1 -0
  156. package/dist/components/Progress/index.d.ts +2 -0
  157. package/dist/components/RadioGroup/RadioGroup.d.ts +41 -0
  158. package/dist/components/RadioGroup/RadioGroup.js +112 -0
  159. package/dist/components/RadioGroup/RadioGroup.js.map +1 -0
  160. package/dist/components/RadioGroup/RadioGroup.module.js +16 -0
  161. package/dist/components/RadioGroup/RadioGroup.module.js.map +1 -0
  162. package/dist/components/RadioGroup/index.d.ts +2 -0
  163. package/dist/components/Select/Select.d.ts +19 -0
  164. package/dist/components/Select/Select.js +44 -0
  165. package/dist/components/Select/Select.js.map +1 -0
  166. package/dist/components/Select/Select.module.js +10 -0
  167. package/dist/components/Select/Select.module.js.map +1 -0
  168. package/dist/components/Select/index.d.ts +2 -0
  169. package/dist/components/Skeleton/Skeleton.d.ts +22 -0
  170. package/dist/components/Skeleton/Skeleton.js +33 -0
  171. package/dist/components/Skeleton/Skeleton.js.map +1 -0
  172. package/dist/components/Skeleton/Skeleton.module.js +12 -0
  173. package/dist/components/Skeleton/Skeleton.module.js.map +1 -0
  174. package/dist/components/Skeleton/index.d.ts +2 -0
  175. package/dist/components/Slider/Slider.d.ts +38 -0
  176. package/dist/components/Slider/Slider.js +55 -0
  177. package/dist/components/Slider/Slider.js.map +1 -0
  178. package/dist/components/Slider/Slider.module.js +11 -0
  179. package/dist/components/Slider/Slider.module.js.map +1 -0
  180. package/dist/components/Slider/index.d.ts +2 -0
  181. package/dist/components/Spinner/Spinner.d.ts +22 -0
  182. package/dist/components/Spinner/Spinner.js +34 -0
  183. package/dist/components/Spinner/Spinner.js.map +1 -0
  184. package/dist/components/Spinner/Spinner.module.js +17 -0
  185. package/dist/components/Spinner/Spinner.module.js.map +1 -0
  186. package/dist/components/Spinner/index.d.ts +2 -0
  187. package/dist/components/Switch/Switch.d.ts +17 -0
  188. package/dist/components/Switch/Switch.js +48 -0
  189. package/dist/components/Switch/Switch.js.map +1 -0
  190. package/dist/components/Switch/Switch.module.js +9 -0
  191. package/dist/components/Switch/Switch.module.js.map +1 -0
  192. package/dist/components/Switch/index.d.ts +2 -0
  193. package/dist/components/Table/Table.d.ts +84 -0
  194. package/dist/components/Table/Table.js +105 -0
  195. package/dist/components/Table/Table.js.map +1 -0
  196. package/dist/components/Table/Table.module.js +23 -0
  197. package/dist/components/Table/Table.module.js.map +1 -0
  198. package/dist/components/Table/index.d.ts +2 -0
  199. package/dist/components/Tabs/Tabs.d.ts +41 -0
  200. package/dist/components/Tabs/Tabs.js +86 -0
  201. package/dist/components/Tabs/Tabs.js.map +1 -0
  202. package/dist/components/Tabs/Tabs.module.js +14 -0
  203. package/dist/components/Tabs/Tabs.module.js.map +1 -0
  204. package/dist/components/Tabs/index.d.ts +2 -0
  205. package/dist/components/Text/Text.d.ts +22 -0
  206. package/dist/components/Text/Text.js +37 -0
  207. package/dist/components/Text/Text.js.map +1 -0
  208. package/dist/components/Text/Text.module.js +30 -0
  209. package/dist/components/Text/Text.module.js.map +1 -0
  210. package/dist/components/Text/index.d.ts +2 -0
  211. package/dist/components/Textarea/Textarea.d.ts +17 -0
  212. package/dist/components/Textarea/Textarea.js +36 -0
  213. package/dist/components/Textarea/Textarea.js.map +1 -0
  214. package/dist/components/Textarea/Textarea.module.js +11 -0
  215. package/dist/components/Textarea/Textarea.module.js.map +1 -0
  216. package/dist/components/Textarea/index.d.ts +2 -0
  217. package/dist/components/ThemeProvider/ThemeProvider.d.ts +39 -0
  218. package/dist/components/ThemeProvider/ThemeProvider.js +36 -0
  219. package/dist/components/ThemeProvider/ThemeProvider.js.map +1 -0
  220. package/dist/components/ThemeProvider/index.d.ts +2 -0
  221. package/dist/components/ThemeProvider/themeStore.d.ts +8 -0
  222. package/dist/components/ThemeProvider/themeStore.js +36 -0
  223. package/dist/components/ThemeProvider/themeStore.js.map +1 -0
  224. package/dist/components/Toast/Toast.d.ts +66 -0
  225. package/dist/components/Toast/Toast.js +166 -0
  226. package/dist/components/Toast/Toast.js.map +1 -0
  227. package/dist/components/Toast/Toast.module.js +27 -0
  228. package/dist/components/Toast/Toast.module.js.map +1 -0
  229. package/dist/components/Toast/index.d.ts +2 -0
  230. package/dist/components/Tooltip/Tooltip.d.ts +40 -0
  231. package/dist/components/Tooltip/Tooltip.js +63 -0
  232. package/dist/components/Tooltip/Tooltip.js.map +1 -0
  233. package/dist/components/Tooltip/Tooltip.module.js +8 -0
  234. package/dist/components/Tooltip/Tooltip.module.js.map +1 -0
  235. package/dist/components/Tooltip/index.d.ts +2 -0
  236. package/dist/components/VisuallyHidden/VisuallyHidden.d.ts +4 -0
  237. package/dist/components/VisuallyHidden/VisuallyHidden.js +16 -0
  238. package/dist/components/VisuallyHidden/VisuallyHidden.js.map +1 -0
  239. package/dist/components/VisuallyHidden/VisuallyHidden.module.js +5 -0
  240. package/dist/components/VisuallyHidden/VisuallyHidden.module.js.map +1 -0
  241. package/dist/components/VisuallyHidden/index.d.ts +2 -0
  242. package/dist/hooks/index.d.ts +10 -0
  243. package/dist/hooks/useClickOutside.d.ts +10 -0
  244. package/dist/hooks/useClickOutside.js +21 -0
  245. package/dist/hooks/useClickOutside.js.map +1 -0
  246. package/dist/hooks/useControllableState.d.ts +10 -0
  247. package/dist/hooks/useControllableState.js +16 -0
  248. package/dist/hooks/useControllableState.js.map +1 -0
  249. package/dist/hooks/useEscapeKey.d.ts +9 -0
  250. package/dist/hooks/useEscapeKey.js +21 -0
  251. package/dist/hooks/useEscapeKey.js.map +1 -0
  252. package/dist/hooks/useFocusTrap.d.ts +19 -0
  253. package/dist/hooks/useFocusTrap.js +42 -0
  254. package/dist/hooks/useFocusTrap.js.map +1 -0
  255. package/dist/hooks/useLatestRef.d.ts +1 -0
  256. package/dist/hooks/useLatestRef.js +12 -0
  257. package/dist/hooks/useLatestRef.js.map +1 -0
  258. package/dist/hooks/useScrollLock.d.ts +10 -0
  259. package/dist/hooks/useScrollLock.js +19 -0
  260. package/dist/hooks/useScrollLock.js.map +1 -0
  261. package/dist/hooks/useTimeout.d.ts +5 -0
  262. package/dist/hooks/useTimeout.js +16 -0
  263. package/dist/hooks/useTimeout.js.map +1 -0
  264. package/dist/index.d.ts +83 -0
  265. package/dist/index.js +59 -0
  266. package/dist/styles/choice.module.js +15 -0
  267. package/dist/styles/choice.module.js.map +1 -0
  268. package/dist/styles/field.module.js +11 -0
  269. package/dist/styles/field.module.js.map +1 -0
  270. package/dist/styles.css +2 -0
  271. package/dist/tokens/breakpoints.d.ts +12 -0
  272. package/dist/tokens/breakpoints.js +11 -0
  273. package/dist/tokens/breakpoints.js.map +1 -0
  274. package/dist/tokens/colors.d.ts +82 -0
  275. package/dist/tokens/colors.js +92 -0
  276. package/dist/tokens/colors.js.map +1 -0
  277. package/dist/tokens/focus.d.ts +4 -0
  278. package/dist/tokens/focus.js +8 -0
  279. package/dist/tokens/focus.js.map +1 -0
  280. package/dist/tokens/index.d.ts +22 -0
  281. package/dist/tokens/index.js +37 -0
  282. package/dist/tokens/index.js.map +1 -0
  283. package/dist/tokens/motion.d.ts +21 -0
  284. package/dist/tokens/motion.js +16 -0
  285. package/dist/tokens/motion.js.map +1 -0
  286. package/dist/tokens/radius.d.ts +9 -0
  287. package/dist/tokens/radius.js +13 -0
  288. package/dist/tokens/radius.js.map +1 -0
  289. package/dist/tokens/shadows.d.ts +12 -0
  290. package/dist/tokens/shadows.js +12 -0
  291. package/dist/tokens/shadows.js.map +1 -0
  292. package/dist/tokens/sizes.d.ts +22 -0
  293. package/dist/tokens/sizes.js +23 -0
  294. package/dist/tokens/sizes.js.map +1 -0
  295. package/dist/tokens/spacing.d.ts +19 -0
  296. package/dist/tokens/spacing.js +19 -0
  297. package/dist/tokens/spacing.js.map +1 -0
  298. package/dist/tokens/themes.d.ts +256 -0
  299. package/dist/tokens/themes.js +120 -0
  300. package/dist/tokens/themes.js.map +1 -0
  301. package/dist/tokens/typography.d.ts +37 -0
  302. package/dist/tokens/typography.js +35 -0
  303. package/dist/tokens/typography.js.map +1 -0
  304. package/dist/tokens/z-index.d.ts +8 -0
  305. package/dist/tokens/z-index.js +11 -0
  306. package/dist/tokens/z-index.js.map +1 -0
  307. package/dist/utils/cn.d.ts +8 -0
  308. package/dist/utils/cn.js +14 -0
  309. package/dist/utils/cn.js.map +1 -0
  310. package/dist/utils/floating.d.ts +20 -0
  311. package/dist/utils/floating.js +31 -0
  312. package/dist/utils/floating.js.map +1 -0
  313. package/dist/utils/getElementRef.d.ts +3 -0
  314. package/dist/utils/getElementRef.js +8 -0
  315. package/dist/utils/getElementRef.js.map +1 -0
  316. package/dist/utils/mergeRefs.d.ts +2 -0
  317. package/dist/utils/mergeRefs.js +9 -0
  318. package/dist/utils/mergeRefs.js.map +1 -0
  319. package/dist/utils/polymorphic.d.ts +13 -0
  320. package/dist/utils/refocusIfLost.d.ts +6 -0
  321. package/dist/utils/refocusIfLost.js +10 -0
  322. package/dist/utils/refocusIfLost.js.map +1 -0
  323. package/package.json +106 -4
@@ -0,0 +1,256 @@
1
+ /**
2
+ * Semantic colors of the light theme (the default), exposed as `--color-<name>`. Components
3
+ * only use these, never the palette, so a theme only has to redefine this layer.
4
+ *
5
+ * Each intent (`primary`, `success`, `warning`, `danger`, `info`) has:
6
+ * - `<intent>`: solid fill, with `-hover` and `-active` states
7
+ * - `on-<intent>`: text and icons on the solid fill
8
+ * - `<intent>-subtle`: tinted background (alerts, badges)
9
+ * - `<intent>-text`: intent-colored text on any background, subtle included
10
+ * - `<intent>-border`: decorative border on the subtle background
11
+ */
12
+ export declare const lightColors: {
13
+ readonly bg: string;
14
+ readonly 'bg-subtle': string;
15
+ readonly 'bg-muted': string;
16
+ readonly 'bg-inverse': string;
17
+ readonly surface: string;
18
+ readonly 'surface-raised': string;
19
+ readonly backdrop: `color-mix(in srgb, ${string} 50%, transparent)`;
20
+ readonly text: string;
21
+ readonly 'text-muted': string;
22
+ readonly 'text-disabled': string;
23
+ readonly 'text-inverse': string;
24
+ /** Decorative borders: dividers, card outlines. */
25
+ readonly border: string;
26
+ /** Borders that identify a control (inputs, checkboxes); must reach 3:1. */
27
+ readonly 'border-strong': string;
28
+ readonly focus: string;
29
+ /** Translucent layers for hovered and pressed items, over any surface. */
30
+ readonly 'state-hover': `color-mix(in srgb, ${string} 6%, transparent)`;
31
+ readonly 'state-active': `color-mix(in srgb, ${string} 12%, transparent)`;
32
+ readonly primary: string;
33
+ readonly 'primary-hover': string;
34
+ readonly 'primary-active': string;
35
+ readonly 'on-primary': string;
36
+ readonly 'primary-subtle': string;
37
+ readonly 'primary-text': string;
38
+ readonly 'primary-border': string;
39
+ readonly success: string;
40
+ readonly 'success-hover': string;
41
+ readonly 'success-active': string;
42
+ readonly 'on-success': string;
43
+ readonly 'success-subtle': string;
44
+ readonly 'success-text': string;
45
+ readonly 'success-border': string;
46
+ readonly warning: string;
47
+ readonly 'warning-hover': string;
48
+ readonly 'warning-active': string;
49
+ readonly 'on-warning': string;
50
+ readonly 'warning-subtle': string;
51
+ readonly 'warning-text': string;
52
+ readonly 'warning-border': string;
53
+ readonly danger: string;
54
+ readonly 'danger-hover': string;
55
+ readonly 'danger-active': string;
56
+ readonly 'on-danger': string;
57
+ readonly 'danger-subtle': string;
58
+ readonly 'danger-text': string;
59
+ readonly 'danger-border': string;
60
+ readonly info: string;
61
+ readonly 'info-hover': string;
62
+ readonly 'info-active': string;
63
+ readonly 'on-info': string;
64
+ readonly 'info-subtle': string;
65
+ readonly 'info-text': string;
66
+ readonly 'info-border': string;
67
+ };
68
+ export type SemanticColor = keyof typeof lightColors;
69
+ /**
70
+ * Semantic colors of the dark theme. Solid fills use the light end of each scale with dark
71
+ * text on top, and hover/active get lighter instead of darker.
72
+ */
73
+ export declare const darkColors: {
74
+ readonly bg: string;
75
+ readonly 'bg-subtle': string;
76
+ readonly 'bg-muted': string;
77
+ readonly 'bg-inverse': string;
78
+ readonly surface: string;
79
+ readonly 'surface-raised': string;
80
+ readonly backdrop: `color-mix(in srgb, ${string} 60%, transparent)`;
81
+ readonly text: string;
82
+ readonly 'text-muted': string;
83
+ readonly 'text-disabled': string;
84
+ readonly 'text-inverse': string;
85
+ readonly border: string;
86
+ readonly 'border-strong': string;
87
+ readonly focus: string;
88
+ readonly 'state-hover': `color-mix(in srgb, ${string} 8%, transparent)`;
89
+ readonly 'state-active': `color-mix(in srgb, ${string} 14%, transparent)`;
90
+ readonly primary: string;
91
+ readonly 'primary-hover': string;
92
+ readonly 'primary-active': string;
93
+ readonly 'on-primary': string;
94
+ readonly 'primary-subtle': string;
95
+ readonly 'primary-text': string;
96
+ readonly 'primary-border': string;
97
+ readonly success: string;
98
+ readonly 'success-hover': string;
99
+ readonly 'success-active': string;
100
+ readonly 'on-success': string;
101
+ readonly 'success-subtle': string;
102
+ readonly 'success-text': string;
103
+ readonly 'success-border': string;
104
+ readonly warning: string;
105
+ readonly 'warning-hover': string;
106
+ readonly 'warning-active': string;
107
+ readonly 'on-warning': string;
108
+ readonly 'warning-subtle': string;
109
+ readonly 'warning-text': string;
110
+ readonly 'warning-border': string;
111
+ readonly danger: string;
112
+ readonly 'danger-hover': string;
113
+ readonly 'danger-active': string;
114
+ readonly 'on-danger': string;
115
+ readonly 'danger-subtle': string;
116
+ readonly 'danger-text': string;
117
+ readonly 'danger-border': string;
118
+ readonly info: string;
119
+ readonly 'info-hover': string;
120
+ readonly 'info-active': string;
121
+ readonly 'on-info': string;
122
+ readonly 'info-subtle': string;
123
+ readonly 'info-text': string;
124
+ readonly 'info-border': string;
125
+ };
126
+ export interface ThemeTokens {
127
+ /** Value of the CSS `color-scheme` property: native controls and scrollbars follow it. */
128
+ colorScheme: 'light' | 'dark';
129
+ colors: Record<SemanticColor, string>;
130
+ /** RGB channels used by every `--shadow-*` token. */
131
+ shadowColor: string;
132
+ }
133
+ /**
134
+ * Built-in themes. Each one is a `[data-theme='<name>']` block in `src/styles/themes/`;
135
+ * light is also the default on `:root`.
136
+ */
137
+ export declare const themes: {
138
+ readonly light: {
139
+ readonly colorScheme: "light";
140
+ readonly colors: {
141
+ readonly bg: string;
142
+ readonly 'bg-subtle': string;
143
+ readonly 'bg-muted': string;
144
+ readonly 'bg-inverse': string;
145
+ readonly surface: string;
146
+ readonly 'surface-raised': string;
147
+ readonly backdrop: `color-mix(in srgb, ${string} 50%, transparent)`;
148
+ readonly text: string;
149
+ readonly 'text-muted': string;
150
+ readonly 'text-disabled': string;
151
+ readonly 'text-inverse': string;
152
+ /** Decorative borders: dividers, card outlines. */
153
+ readonly border: string;
154
+ /** Borders that identify a control (inputs, checkboxes); must reach 3:1. */
155
+ readonly 'border-strong': string;
156
+ readonly focus: string;
157
+ /** Translucent layers for hovered and pressed items, over any surface. */
158
+ readonly 'state-hover': `color-mix(in srgb, ${string} 6%, transparent)`;
159
+ readonly 'state-active': `color-mix(in srgb, ${string} 12%, transparent)`;
160
+ readonly primary: string;
161
+ readonly 'primary-hover': string;
162
+ readonly 'primary-active': string;
163
+ readonly 'on-primary': string;
164
+ readonly 'primary-subtle': string;
165
+ readonly 'primary-text': string;
166
+ readonly 'primary-border': string;
167
+ readonly success: string;
168
+ readonly 'success-hover': string;
169
+ readonly 'success-active': string;
170
+ readonly 'on-success': string;
171
+ readonly 'success-subtle': string;
172
+ readonly 'success-text': string;
173
+ readonly 'success-border': string;
174
+ readonly warning: string;
175
+ readonly 'warning-hover': string;
176
+ readonly 'warning-active': string;
177
+ readonly 'on-warning': string;
178
+ readonly 'warning-subtle': string;
179
+ readonly 'warning-text': string;
180
+ readonly 'warning-border': string;
181
+ readonly danger: string;
182
+ readonly 'danger-hover': string;
183
+ readonly 'danger-active': string;
184
+ readonly 'on-danger': string;
185
+ readonly 'danger-subtle': string;
186
+ readonly 'danger-text': string;
187
+ readonly 'danger-border': string;
188
+ readonly info: string;
189
+ readonly 'info-hover': string;
190
+ readonly 'info-active': string;
191
+ readonly 'on-info': string;
192
+ readonly 'info-subtle': string;
193
+ readonly 'info-text': string;
194
+ readonly 'info-border': string;
195
+ };
196
+ readonly shadowColor: "24 24 27";
197
+ };
198
+ readonly dark: {
199
+ readonly colorScheme: "dark";
200
+ readonly colors: {
201
+ readonly bg: string;
202
+ readonly 'bg-subtle': string;
203
+ readonly 'bg-muted': string;
204
+ readonly 'bg-inverse': string;
205
+ readonly surface: string;
206
+ readonly 'surface-raised': string;
207
+ readonly backdrop: `color-mix(in srgb, ${string} 60%, transparent)`;
208
+ readonly text: string;
209
+ readonly 'text-muted': string;
210
+ readonly 'text-disabled': string;
211
+ readonly 'text-inverse': string;
212
+ readonly border: string;
213
+ readonly 'border-strong': string;
214
+ readonly focus: string;
215
+ readonly 'state-hover': `color-mix(in srgb, ${string} 8%, transparent)`;
216
+ readonly 'state-active': `color-mix(in srgb, ${string} 14%, transparent)`;
217
+ readonly primary: string;
218
+ readonly 'primary-hover': string;
219
+ readonly 'primary-active': string;
220
+ readonly 'on-primary': string;
221
+ readonly 'primary-subtle': string;
222
+ readonly 'primary-text': string;
223
+ readonly 'primary-border': string;
224
+ readonly success: string;
225
+ readonly 'success-hover': string;
226
+ readonly 'success-active': string;
227
+ readonly 'on-success': string;
228
+ readonly 'success-subtle': string;
229
+ readonly 'success-text': string;
230
+ readonly 'success-border': string;
231
+ readonly warning: string;
232
+ readonly 'warning-hover': string;
233
+ readonly 'warning-active': string;
234
+ readonly 'on-warning': string;
235
+ readonly 'warning-subtle': string;
236
+ readonly 'warning-text': string;
237
+ readonly 'warning-border': string;
238
+ readonly danger: string;
239
+ readonly 'danger-hover': string;
240
+ readonly 'danger-active': string;
241
+ readonly 'on-danger': string;
242
+ readonly 'danger-subtle': string;
243
+ readonly 'danger-text': string;
244
+ readonly 'danger-border': string;
245
+ readonly info: string;
246
+ readonly 'info-hover': string;
247
+ readonly 'info-active': string;
248
+ readonly 'on-info': string;
249
+ readonly 'info-subtle': string;
250
+ readonly 'info-text': string;
251
+ readonly 'info-border': string;
252
+ };
253
+ readonly shadowColor: "0 0 0";
254
+ };
255
+ };
256
+ export type ThemeName = keyof typeof themes;
@@ -0,0 +1,120 @@
1
+ // src/tokens/themes.ts
2
+ var e = (e, t) => t === void 0 ? `var(--color-${e})` : `var(--color-${e}-${t})`, t = {
3
+ bg: e("white"),
4
+ "bg-subtle": e("neutral", 50),
5
+ "bg-muted": e("neutral", 100),
6
+ "bg-inverse": e("neutral", 900),
7
+ surface: e("white"),
8
+ "surface-raised": e("white"),
9
+ backdrop: `color-mix(in srgb, ${e("neutral", 900)} 50%, transparent)`,
10
+ text: e("neutral", 900),
11
+ "text-muted": e("neutral", 600),
12
+ "text-disabled": e("neutral", 400),
13
+ "text-inverse": e("white"),
14
+ border: e("neutral", 200),
15
+ "border-strong": e("neutral", 500),
16
+ focus: e("primary", 600),
17
+ "state-hover": `color-mix(in srgb, ${e("neutral", 900)} 6%, transparent)`,
18
+ "state-active": `color-mix(in srgb, ${e("neutral", 900)} 12%, transparent)`,
19
+ primary: e("primary", 600),
20
+ "primary-hover": e("primary", 700),
21
+ "primary-active": e("primary", 800),
22
+ "on-primary": e("white"),
23
+ "primary-subtle": e("primary", 50),
24
+ "primary-text": e("primary", 700),
25
+ "primary-border": e("primary", 200),
26
+ success: e("success", 700),
27
+ "success-hover": e("success", 800),
28
+ "success-active": e("success", 900),
29
+ "on-success": e("white"),
30
+ "success-subtle": e("success", 50),
31
+ "success-text": e("success", 800),
32
+ "success-border": e("success", 200),
33
+ warning: e("warning", 700),
34
+ "warning-hover": e("warning", 800),
35
+ "warning-active": e("warning", 900),
36
+ "on-warning": e("white"),
37
+ "warning-subtle": e("warning", 50),
38
+ "warning-text": e("warning", 800),
39
+ "warning-border": e("warning", 200),
40
+ danger: e("danger", 600),
41
+ "danger-hover": e("danger", 700),
42
+ "danger-active": e("danger", 800),
43
+ "on-danger": e("white"),
44
+ "danger-subtle": e("danger", 50),
45
+ "danger-text": e("danger", 700),
46
+ "danger-border": e("danger", 200),
47
+ info: e("info", 700),
48
+ "info-hover": e("info", 800),
49
+ "info-active": e("info", 900),
50
+ "on-info": e("white"),
51
+ "info-subtle": e("info", 50),
52
+ "info-text": e("info", 800),
53
+ "info-border": e("info", 200)
54
+ }, n = {
55
+ bg: e("neutral", 900),
56
+ "bg-subtle": e("neutral", 800),
57
+ "bg-muted": e("neutral", 700),
58
+ "bg-inverse": e("neutral", 50),
59
+ surface: e("neutral", 900),
60
+ "surface-raised": e("neutral", 800),
61
+ backdrop: `color-mix(in srgb, ${e("black")} 60%, transparent)`,
62
+ text: e("neutral", 50),
63
+ "text-muted": e("neutral", 300),
64
+ "text-disabled": e("neutral", 500),
65
+ "text-inverse": e("neutral", 900),
66
+ border: e("neutral", 700),
67
+ "border-strong": e("neutral", 400),
68
+ focus: e("primary", 300),
69
+ "state-hover": `color-mix(in srgb, ${e("white")} 8%, transparent)`,
70
+ "state-active": `color-mix(in srgb, ${e("white")} 14%, transparent)`,
71
+ primary: e("primary", 400),
72
+ "primary-hover": e("primary", 300),
73
+ "primary-active": e("primary", 200),
74
+ "on-primary": e("neutral", 900),
75
+ "primary-subtle": e("primary", 900),
76
+ "primary-text": e("primary", 300),
77
+ "primary-border": e("primary", 700),
78
+ success: e("success", 400),
79
+ "success-hover": e("success", 300),
80
+ "success-active": e("success", 200),
81
+ "on-success": e("neutral", 900),
82
+ "success-subtle": e("success", 900),
83
+ "success-text": e("success", 300),
84
+ "success-border": e("success", 700),
85
+ warning: e("warning", 400),
86
+ "warning-hover": e("warning", 300),
87
+ "warning-active": e("warning", 200),
88
+ "on-warning": e("neutral", 900),
89
+ "warning-subtle": e("warning", 900),
90
+ "warning-text": e("warning", 300),
91
+ "warning-border": e("warning", 700),
92
+ danger: e("danger", 400),
93
+ "danger-hover": e("danger", 300),
94
+ "danger-active": e("danger", 200),
95
+ "on-danger": e("neutral", 900),
96
+ "danger-subtle": e("danger", 900),
97
+ "danger-text": e("danger", 300),
98
+ "danger-border": e("danger", 700),
99
+ info: e("info", 400),
100
+ "info-hover": e("info", 300),
101
+ "info-active": e("info", 200),
102
+ "on-info": e("neutral", 900),
103
+ "info-subtle": e("info", 900),
104
+ "info-text": e("info", 300),
105
+ "info-border": e("info", 700)
106
+ }, r = {
107
+ light: {
108
+ colorScheme: "light",
109
+ colors: t,
110
+ shadowColor: "24 24 27"
111
+ },
112
+ dark: {
113
+ colorScheme: "dark",
114
+ colors: n,
115
+ shadowColor: "0 0 0"
116
+ }
117
+ };
118
+ export { n as darkColors, t as lightColors, r as themes };
119
+
120
+ //# sourceMappingURL=themes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.js","names":["ref","step","color","lightColors","darkColors","themes"],"sources":["../../src/tokens/themes.ts"],"sourcesContent":["import type { baseColors, PaletteColor, PaletteStep } from './colors';\n\nconst ref = (color: PaletteColor | keyof typeof baseColors, step?: PaletteStep) =>\n step === undefined ? `var(--color-${color})` : `var(--color-${color}-${step})`;\n\n/**\n * Semantic colors of the light theme (the default), exposed as `--color-<name>`. Components\n * only use these, never the palette, so a theme only has to redefine this layer.\n *\n * Each intent (`primary`, `success`, `warning`, `danger`, `info`) has:\n * - `<intent>`: solid fill, with `-hover` and `-active` states\n * - `on-<intent>`: text and icons on the solid fill\n * - `<intent>-subtle`: tinted background (alerts, badges)\n * - `<intent>-text`: intent-colored text on any background, subtle included\n * - `<intent>-border`: decorative border on the subtle background\n */\nexport const lightColors = {\n bg: ref('white'),\n 'bg-subtle': ref('neutral', 50),\n 'bg-muted': ref('neutral', 100),\n 'bg-inverse': ref('neutral', 900),\n surface: ref('white'),\n 'surface-raised': ref('white'),\n backdrop: `color-mix(in srgb, ${ref('neutral', 900)} 50%, transparent)`,\n\n text: ref('neutral', 900),\n 'text-muted': ref('neutral', 600),\n 'text-disabled': ref('neutral', 400),\n 'text-inverse': ref('white'),\n\n /** Decorative borders: dividers, card outlines. */\n border: ref('neutral', 200),\n /** Borders that identify a control (inputs, checkboxes); must reach 3:1. */\n 'border-strong': ref('neutral', 500),\n focus: ref('primary', 600),\n\n /** Translucent layers for hovered and pressed items, over any surface. */\n 'state-hover': `color-mix(in srgb, ${ref('neutral', 900)} 6%, transparent)`,\n 'state-active': `color-mix(in srgb, ${ref('neutral', 900)} 12%, transparent)`,\n\n primary: ref('primary', 600),\n 'primary-hover': ref('primary', 700),\n 'primary-active': ref('primary', 800),\n 'on-primary': ref('white'),\n 'primary-subtle': ref('primary', 50),\n 'primary-text': ref('primary', 700),\n 'primary-border': ref('primary', 200),\n\n success: ref('success', 700),\n 'success-hover': ref('success', 800),\n 'success-active': ref('success', 900),\n 'on-success': ref('white'),\n 'success-subtle': ref('success', 50),\n 'success-text': ref('success', 800),\n 'success-border': ref('success', 200),\n\n warning: ref('warning', 700),\n 'warning-hover': ref('warning', 800),\n 'warning-active': ref('warning', 900),\n 'on-warning': ref('white'),\n 'warning-subtle': ref('warning', 50),\n 'warning-text': ref('warning', 800),\n 'warning-border': ref('warning', 200),\n\n danger: ref('danger', 600),\n 'danger-hover': ref('danger', 700),\n 'danger-active': ref('danger', 800),\n 'on-danger': ref('white'),\n 'danger-subtle': ref('danger', 50),\n 'danger-text': ref('danger', 700),\n 'danger-border': ref('danger', 200),\n\n info: ref('info', 700),\n 'info-hover': ref('info', 800),\n 'info-active': ref('info', 900),\n 'on-info': ref('white'),\n 'info-subtle': ref('info', 50),\n 'info-text': ref('info', 800),\n 'info-border': ref('info', 200),\n} as const;\n\nexport type SemanticColor = keyof typeof lightColors;\n\n/**\n * Semantic colors of the dark theme. Solid fills use the light end of each scale with dark\n * text on top, and hover/active get lighter instead of darker.\n */\nexport const darkColors = {\n bg: ref('neutral', 900),\n 'bg-subtle': ref('neutral', 800),\n 'bg-muted': ref('neutral', 700),\n 'bg-inverse': ref('neutral', 50),\n surface: ref('neutral', 900),\n 'surface-raised': ref('neutral', 800),\n backdrop: `color-mix(in srgb, ${ref('black')} 60%, transparent)`,\n\n text: ref('neutral', 50),\n 'text-muted': ref('neutral', 300),\n 'text-disabled': ref('neutral', 500),\n 'text-inverse': ref('neutral', 900),\n\n border: ref('neutral', 700),\n 'border-strong': ref('neutral', 400),\n focus: ref('primary', 300),\n\n 'state-hover': `color-mix(in srgb, ${ref('white')} 8%, transparent)`,\n 'state-active': `color-mix(in srgb, ${ref('white')} 14%, transparent)`,\n\n primary: ref('primary', 400),\n 'primary-hover': ref('primary', 300),\n 'primary-active': ref('primary', 200),\n 'on-primary': ref('neutral', 900),\n 'primary-subtle': ref('primary', 900),\n 'primary-text': ref('primary', 300),\n 'primary-border': ref('primary', 700),\n\n success: ref('success', 400),\n 'success-hover': ref('success', 300),\n 'success-active': ref('success', 200),\n 'on-success': ref('neutral', 900),\n 'success-subtle': ref('success', 900),\n 'success-text': ref('success', 300),\n 'success-border': ref('success', 700),\n\n warning: ref('warning', 400),\n 'warning-hover': ref('warning', 300),\n 'warning-active': ref('warning', 200),\n 'on-warning': ref('neutral', 900),\n 'warning-subtle': ref('warning', 900),\n 'warning-text': ref('warning', 300),\n 'warning-border': ref('warning', 700),\n\n danger: ref('danger', 400),\n 'danger-hover': ref('danger', 300),\n 'danger-active': ref('danger', 200),\n 'on-danger': ref('neutral', 900),\n 'danger-subtle': ref('danger', 900),\n 'danger-text': ref('danger', 300),\n 'danger-border': ref('danger', 700),\n\n info: ref('info', 400),\n 'info-hover': ref('info', 300),\n 'info-active': ref('info', 200),\n 'on-info': ref('neutral', 900),\n 'info-subtle': ref('info', 900),\n 'info-text': ref('info', 300),\n 'info-border': ref('info', 700),\n} as const satisfies Record<SemanticColor, string>;\n\nexport interface ThemeTokens {\n /** Value of the CSS `color-scheme` property: native controls and scrollbars follow it. */\n colorScheme: 'light' | 'dark';\n colors: Record<SemanticColor, string>;\n /** RGB channels used by every `--shadow-*` token. */\n shadowColor: string;\n}\n\n/**\n * Built-in themes. Each one is a `[data-theme='<name>']` block in `src/styles/themes/`;\n * light is also the default on `:root`.\n */\nexport const themes = {\n light: { colorScheme: 'light', colors: lightColors, shadowColor: '24 24 27' },\n dark: { colorScheme: 'dark', colors: darkColors, shadowColor: '0 0 0' },\n} as const satisfies Record<string, ThemeTokens>;\n\nexport type ThemeName = keyof typeof themes;\n"],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export declare const fontFamily: {
2
+ readonly base: "system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif";
3
+ readonly mono: "ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace";
4
+ };
5
+ /** In `rem` so text follows the user's browser font size. */
6
+ export declare const fontSize: {
7
+ readonly xs: "0.75rem";
8
+ readonly sm: "0.875rem";
9
+ readonly md: "1rem";
10
+ readonly lg: "1.125rem";
11
+ readonly xl: "1.25rem";
12
+ readonly '2xl': "1.5rem";
13
+ readonly '3xl': "1.875rem";
14
+ readonly '4xl': "2.25rem";
15
+ readonly '5xl': "3rem";
16
+ };
17
+ export declare const fontWeight: {
18
+ readonly regular: "400";
19
+ readonly medium: "500";
20
+ readonly semibold: "600";
21
+ readonly bold: "700";
22
+ };
23
+ /** Unitless, so they scale with the font size of the element they are applied to. */
24
+ export declare const lineHeight: {
25
+ readonly none: "1";
26
+ readonly tight: "1.25";
27
+ readonly snug: "1.375";
28
+ readonly normal: "1.5";
29
+ readonly relaxed: "1.625";
30
+ };
31
+ export declare const letterSpacing: {
32
+ readonly tighter: "-0.05em";
33
+ readonly tight: "-0.025em";
34
+ readonly normal: "0";
35
+ readonly wide: "0.025em";
36
+ readonly wider: "0.05em";
37
+ };
@@ -0,0 +1,35 @@
1
+ // src/tokens/typography.ts
2
+ var e = {
3
+ base: "system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",
4
+ mono: "ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace"
5
+ }, t = {
6
+ xs: "0.75rem",
7
+ sm: "0.875rem",
8
+ md: "1rem",
9
+ lg: "1.125rem",
10
+ xl: "1.25rem",
11
+ "2xl": "1.5rem",
12
+ "3xl": "1.875rem",
13
+ "4xl": "2.25rem",
14
+ "5xl": "3rem"
15
+ }, n = {
16
+ regular: "400",
17
+ medium: "500",
18
+ semibold: "600",
19
+ bold: "700"
20
+ }, r = {
21
+ none: "1",
22
+ tight: "1.25",
23
+ snug: "1.375",
24
+ normal: "1.5",
25
+ relaxed: "1.625"
26
+ }, i = {
27
+ tighter: "-0.05em",
28
+ tight: "-0.025em",
29
+ normal: "0",
30
+ wide: "0.025em",
31
+ wider: "0.05em"
32
+ };
33
+ export { e as fontFamily, t as fontSize, n as fontWeight, i as letterSpacing, r as lineHeight };
34
+
35
+ //# sourceMappingURL=typography.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typography.js","names":["fontFamily","fontSize","fontWeight","lineHeight","letterSpacing"],"sources":["../../src/tokens/typography.ts"],"sourcesContent":["export const fontFamily = {\n base: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n mono: \"ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace\",\n} as const;\n\n/** In `rem` so text follows the user's browser font size. */\nexport const fontSize = {\n xs: '0.75rem',\n sm: '0.875rem',\n md: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n '2xl': '1.5rem',\n '3xl': '1.875rem',\n '4xl': '2.25rem',\n '5xl': '3rem',\n} as const;\n\nexport const fontWeight = {\n regular: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n} as const;\n\n/** Unitless, so they scale with the font size of the element they are applied to. */\nexport const lineHeight = {\n none: '1',\n tight: '1.25',\n snug: '1.375',\n normal: '1.5',\n relaxed: '1.625',\n} as const;\n\nexport const letterSpacing = {\n tighter: '-0.05em',\n tight: '-0.025em',\n normal: '0',\n wide: '0.025em',\n wider: '0.05em',\n} as const;\n"],"mappings":";AAAA,IAAaA,IAAa;CACxB,MAAM;CACN,MAAM;AACR,GAGaC,IAAW;CACtB,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,OAAO;CACP,OAAO;CACP,OAAO;AACT,GAEaC,IAAa;CACxB,SAAS;CACT,QAAQ;CACR,UAAU;CACV,MAAM;AACR,GAGaC,IAAa;CACxB,MAAM;CACN,OAAO;CACP,MAAM;CACN,QAAQ;CACR,SAAS;AACX,GAEaC,IAAgB;CAC3B,SAAS;CACT,OAAO;CACP,QAAQ;CACR,MAAM;CACN,OAAO;AACT"}
@@ -0,0 +1,8 @@
1
+ /** Stacking order of floating layers, lowest to highest. */
2
+ export declare const zIndex: {
3
+ readonly dropdown: "1000";
4
+ readonly overlay: "1100";
5
+ readonly modal: "1200";
6
+ readonly toast: "1300";
7
+ readonly tooltip: "1400";
8
+ };
@@ -0,0 +1,11 @@
1
+ // src/tokens/z-index.ts
2
+ var e = {
3
+ dropdown: "1000",
4
+ overlay: "1100",
5
+ modal: "1200",
6
+ toast: "1300",
7
+ tooltip: "1400"
8
+ };
9
+ export { e as zIndex };
10
+
11
+ //# sourceMappingURL=z-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"z-index.js","names":["zIndex"],"sources":["../../src/tokens/z-index.ts"],"sourcesContent":["/** Stacking order of floating layers, lowest to highest. */\nexport const zIndex = {\n dropdown: '1000',\n overlay: '1100',\n modal: '1200',\n toast: '1300',\n tooltip: '1400',\n} as const;\n"],"mappings":";AACA,IAAaA,IAAS;CACpB,UAAU;CACV,SAAS;CACT,OAAO;CACP,OAAO;CACP,SAAS;AACX"}
@@ -0,0 +1,8 @@
1
+ export type ClassValue = string | number | false | null | undefined | readonly ClassValue[];
2
+ /**
3
+ * Merges class names, skipping falsy values and flattening nested arrays.
4
+ *
5
+ * @example
6
+ * cn('button', isActive && 'button--active', className);
7
+ */
8
+ export declare function cn(...inputs: ClassValue[]): string;
@@ -0,0 +1,14 @@
1
+ // src/utils/cn.ts
2
+ function e(...t) {
3
+ let n = [];
4
+ for (let r of t) if (r || r === 0) {
5
+ if (Array.isArray(r)) {
6
+ let t = e(...r);
7
+ t && n.push(t);
8
+ } else n.push(String(r));
9
+ }
10
+ return n.join(" ");
11
+ }
12
+ export { e as cn };
13
+
14
+ //# sourceMappingURL=cn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn.js","names":["cn","inputs","classes","input","nested"],"sources":["../../src/utils/cn.ts"],"sourcesContent":["export type ClassValue = string | number | false | null | undefined | readonly ClassValue[];\n\n/**\n * Merges class names, skipping falsy values and flattening nested arrays.\n *\n * @example\n * cn('button', isActive && 'button--active', className);\n */\nexport function cn(...inputs: ClassValue[]): string {\n const classes: string[] = [];\n\n for (const input of inputs) {\n if (!input && input !== 0) continue;\n\n if (Array.isArray(input)) {\n const nested = cn(...input);\n if (nested) classes.push(nested);\n } else {\n classes.push(String(input));\n }\n }\n\n return classes.join(' ');\n}\n"],"mappings":";AAQA,SAAgBA,EAAG,GAAGC,GAA8B;CAClD,IAAMC,IAAoB,CAAC;CAE3B,KAAK,IAAMC,KAASF,GAClB,IAAKE,KAASA,MAAU,GAExB;MAAI,MAAM,QAAQA,CAAK,GAAG;GACxB,IAAMC,IAASJ,EAAG,GAAGG,CAAK;GAC1B,AAAIC,KAAQF,EAAQ,KAAKE,CAAM;EACjC,OACE,EAAQ,KAAK,OAAOD,CAAK,CAAC;CAAA;CAI9B,OAAOD,EAAQ,KAAK,GAAG;AACzB"}
@@ -0,0 +1,20 @@
1
+ import { Placement } from '@floating-ui/react-dom';
2
+ export type { Placement };
3
+ export interface UseFloatingLayerOptions {
4
+ open: boolean;
5
+ placement: Placement;
6
+ /** Gap between the reference and the floating element, in pixels. */
7
+ gap: number;
8
+ /** Makes the floating element at least as wide as the reference. */
9
+ matchWidth?: boolean;
10
+ }
11
+ /**
12
+ * Positions a floating element next to a reference element, flipping and shifting it to stay in
13
+ * the viewport and capping its height to the space available.
14
+ */
15
+ export declare function useFloatingLayer({ open, placement, gap, matchWidth, }: UseFloatingLayerOptions): {
16
+ setReference: (node: import('@floating-ui/react-dom').ReferenceType | null) => void;
17
+ setFloating: (node: HTMLElement | null) => void;
18
+ floatingStyles: import('react').CSSProperties;
19
+ side: "top" | "right" | "bottom" | "left";
20
+ };
@@ -0,0 +1,31 @@
1
+ import { autoUpdate as e, flip as t, offset as n, shift as r, size as i, useFloating as a } from "@floating-ui/react-dom";
2
+ // src/utils/floating.ts
3
+ var o = 8;
4
+ function s({ open: s, placement: c, gap: l, matchWidth: u = !1 }) {
5
+ let d = a({
6
+ open: s,
7
+ placement: c,
8
+ strategy: "fixed",
9
+ whileElementsMounted: e,
10
+ middleware: [
11
+ n(l),
12
+ t({ padding: o }),
13
+ r({ padding: o }),
14
+ i({
15
+ padding: o,
16
+ apply({ availableHeight: e, rects: t, elements: n }) {
17
+ n.floating.style.maxHeight = `${Math.max(e, 0)}px`, u && (n.floating.style.minWidth = `${t.reference.width}px`);
18
+ }
19
+ })
20
+ ]
21
+ });
22
+ return {
23
+ setReference: d.refs.setReference,
24
+ setFloating: d.refs.setFloating,
25
+ floatingStyles: d.floatingStyles,
26
+ side: d.placement.split("-")[0]
27
+ };
28
+ }
29
+ export { s as useFloatingLayer };
30
+
31
+ //# sourceMappingURL=floating.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floating.js","names":["viewportPadding","useFloatingLayer","floating","useFloating","autoUpdate","offset","gap","flip","shift","size","availableHeight","matchWidth","rects"],"sources":["../../src/utils/floating.ts"],"sourcesContent":["import {\n autoUpdate,\n flip,\n offset,\n shift,\n size,\n useFloating,\n type Placement,\n} from '@floating-ui/react-dom';\n\nexport type { Placement };\n\nexport interface UseFloatingLayerOptions {\n open: boolean;\n placement: Placement;\n /** Gap between the reference and the floating element, in pixels. */\n gap: number;\n /** Makes the floating element at least as wide as the reference. */\n matchWidth?: boolean;\n}\n\nconst viewportPadding = 8;\n\n/**\n * Positions a floating element next to a reference element, flipping and shifting it to stay in\n * the viewport and capping its height to the space available.\n */\nexport function useFloatingLayer({\n open,\n placement,\n gap,\n matchWidth = false,\n}: UseFloatingLayerOptions) {\n const floating = useFloating({\n open,\n placement,\n strategy: 'fixed',\n whileElementsMounted: autoUpdate,\n middleware: [\n offset(gap),\n flip({ padding: viewportPadding }),\n shift({ padding: viewportPadding }),\n size({\n padding: viewportPadding,\n apply({ availableHeight, rects, elements }) {\n elements.floating.style.maxHeight = `${Math.max(availableHeight, 0)}px`;\n if (matchWidth) elements.floating.style.minWidth = `${rects.reference.width}px`;\n },\n }),\n ],\n });\n\n return {\n setReference: floating.refs.setReference,\n setFloating: floating.refs.setFloating,\n floatingStyles: floating.floatingStyles,\n side: floating.placement.split('-')[0] as 'top' | 'right' | 'bottom' | 'left',\n };\n}\n"],"mappings":";;AAqBA,IAAMA,IAAkB;AAMxB,SAAgBC,EAAiB,EAC/B,SACA,cACA,QACA,gBAAa,MACa;CAC1B,IAAMC,IAAWC,EAAY;EAC3B;EACA;EACA,UAAU;EACV,sBAAsBC;EACtB,YAAY;GACVC,EAAOC,CAAG;GACVC,EAAK,EAAE,SAASP,EAAgB,CAAC;GACjCQ,EAAM,EAAE,SAASR,EAAgB,CAAC;GAClCS,EAAK;IACH,SAAST;IACT,MAAM,EAAE,oBAAiB,UAAO,eAAY;KAE1C,AADA,EAAS,SAAS,MAAM,YAAY,GAAG,KAAK,IAAIU,GAAiB,CAAC,EAAE,KAChEC,MAAY,EAAS,SAAS,MAAM,WAAW,GAAGC,EAAM,UAAU,MAAM;IAC9E;GACF,CAAC;EACH;CACF,CAAC;CAED,OAAO;EACL,cAAcV,EAAS,KAAK;EAC5B,aAAaA,EAAS,KAAK;EAC3B,gBAAgBA,EAAS;EACzB,MAAMA,EAAS,UAAU,MAAM,GAAG,CAAC,CAAC;CACtC;AACF"}
@@ -0,0 +1,3 @@
1
+ import { ReactElement, Ref } from 'react';
2
+ /** Reads the ref of an element: a prop since React 19, a field of the element before. */
3
+ export declare function getElementRef<T>(element: ReactElement): Ref<T> | undefined;
@@ -0,0 +1,8 @@
1
+ // src/utils/getElementRef.ts
2
+ function e(e) {
3
+ let t = e.props, n = Object.getOwnPropertyDescriptor(t, "ref"), r = n?.get && "isReactWarning" in n.get;
4
+ return n && !r ? t.ref : e.ref ?? void 0;
5
+ }
6
+ export { e as getElementRef };
7
+
8
+ //# sourceMappingURL=getElementRef.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getElementRef.js","names":["getElementRef","props","element","descriptor","warnsOnAccess"],"sources":["../../src/utils/getElementRef.ts"],"sourcesContent":["import type { ReactElement, Ref } from 'react';\n\n/** Reads the ref of an element: a prop since React 19, a field of the element before. */\nexport function getElementRef<T>(element: ReactElement): Ref<T> | undefined {\n const props = element.props as { ref?: Ref<T> };\n const descriptor = Object.getOwnPropertyDescriptor(props, 'ref');\n const warnsOnAccess = descriptor?.get && 'isReactWarning' in descriptor.get;\n\n if (descriptor && !warnsOnAccess) return props.ref;\n return (element as unknown as { ref?: Ref<T> }).ref ?? undefined;\n}\n"],"mappings":";AAGA,SAAgBA,EAAiB,GAA2C;CAC1E,IAAMC,IAAQC,EAAQ,OAChBC,IAAa,OAAO,yBAAyBF,GAAO,KAAK,GACzDG,IAAgBD,GAAY,OAAO,oBAAoBA,EAAW;CAGxE,OADIA,KAAc,CAACC,IAAsBH,EAAM,MACvCC,EAAwC,OAAO,KAAA;AACzD"}
@@ -0,0 +1,2 @@
1
+ import { Ref, RefCallback } from 'react';
2
+ export declare function mergeRefs<T>(...refs: (Ref<T> | undefined)[]): RefCallback<T>;
@@ -0,0 +1,9 @@
1
+ // src/utils/mergeRefs.ts
2
+ function e(...e) {
3
+ return (t) => {
4
+ for (let n of e) typeof n == "function" ? n(t) : n && (n.current = t);
5
+ };
6
+ }
7
+ export { e as mergeRefs };
8
+
9
+ //# sourceMappingURL=mergeRefs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeRefs.js","names":["mergeRefs","refs","ref","value"],"sources":["../../src/utils/mergeRefs.ts"],"sourcesContent":["import type { Ref, RefCallback } from 'react';\n\nexport function mergeRefs<T>(...refs: (Ref<T> | undefined)[]): RefCallback<T> {\n return (value) => {\n for (const ref of refs) {\n if (typeof ref === 'function') ref(value);\n else if (ref) ref.current = value;\n }\n };\n}\n"],"mappings":";AAEA,SAAgBA,EAAa,GAAGC,GAA8C;CAC5E,QAAQ,MAAU;EAChB,KAAK,IAAMC,KAAOD,GAChB,AAAI,OAAOC,KAAQ,aAAYA,EAAIC,CAAK,IAC/BD,MAAK,EAAI,UAAUC;CAEhC;AACF"}
@@ -0,0 +1,13 @@
1
+ import { ComponentPropsWithoutRef, ComponentPropsWithRef, ElementType, ReactNode } from 'react';
2
+ export type PolymorphicRef<As extends ElementType> = ComponentPropsWithRef<As>['ref'];
3
+ export type PolymorphicProps<As extends ElementType, Props = object> = Props & {
4
+ /** Element or component rendered in place of the default one. */
5
+ as?: As;
6
+ } & Omit<ComponentPropsWithoutRef<As>, keyof Props | 'as'>;
7
+ export type PolymorphicPropsWithRef<As extends ElementType, Props = object> = PolymorphicProps<As, Props> & {
8
+ ref?: PolymorphicRef<As>;
9
+ };
10
+ export interface PolymorphicComponent<DefaultAs extends ElementType, Props = object> {
11
+ <As extends ElementType = DefaultAs>(props: PolymorphicPropsWithRef<As, Props>): ReactNode;
12
+ displayName?: string;
13
+ }