@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 @@
1
+ {"version":3,"file":"Alert.js","names":["styles","Alert_module_default","icons","InfoIcon","SuccessIcon","WarningIcon","ErrorIcon","Alert","forwardRef","props","titleId","useId","hasTitle","title","intent","cn","variant","className","icon","children","action","onDismiss","IconButton","dismissLabel","CloseIcon"],"sources":["../../../src/components/Alert/Alert.tsx"],"sourcesContent":["import { forwardRef, useId, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '@/utils/cn';\nimport { CloseIcon, ErrorIcon, InfoIcon, SuccessIcon, WarningIcon } from '../Icon';\nimport { IconButton } from '../IconButton';\nimport styles from './Alert.module.css';\n\nexport type AlertIntent = 'info' | 'success' | 'warning' | 'danger';\n\nexport interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** @default 'info' */\n intent?: AlertIntent;\n /** @default 'subtle' */\n variant?: 'subtle' | 'solid';\n /** Short summary shown in bold above the content. */\n title?: ReactNode;\n /** Replaces the intent icon. `false` hides it. */\n icon?: ReactNode;\n /** Controls placed after the content, such as a button or a link. */\n action?: ReactNode;\n /** Shows a dismiss button that calls this function. */\n onDismiss?: () => void;\n /**\n * Accessible name of the dismiss button.\n * @default 'Dismiss'\n */\n dismissLabel?: string;\n}\n\nconst icons: Record<AlertIntent, ReactNode> = {\n info: <InfoIcon />,\n success: <SuccessIcon />,\n warning: <WarningIcon />,\n danger: <ErrorIcon />,\n};\n\n/**\n * Highlighted message about the page or a task. Warnings and errors use `role=\"alert\"`, so they\n * are announced as soon as they appear; the others use `role=\"status\"`. Override with `role`.\n */\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n {\n intent = 'info',\n variant = 'subtle',\n title,\n icon,\n action,\n onDismiss,\n dismissLabel = 'Dismiss',\n className,\n children,\n ...props\n },\n ref,\n) {\n const titleId = useId();\n const hasTitle = title !== undefined && title !== null;\n\n return (\n <div\n ref={ref}\n role={intent === 'warning' || intent === 'danger' ? 'alert' : 'status'}\n aria-labelledby={hasTitle ? titleId : undefined}\n className={cn(styles.alert, styles[intent], styles[variant], className)}\n {...props}\n >\n {icon !== false && (\n <span className={styles.icon} aria-hidden=\"true\">\n {icon ?? icons[intent]}\n </span>\n )}\n <div className={styles.content}>\n {hasTitle && (\n <p id={titleId} className={styles.title}>\n {title}\n </p>\n )}\n {children !== undefined && <div className={styles.description}>{children}</div>}\n {action !== undefined && <div className={styles.action}>{action}</div>}\n </div>\n {onDismiss && (\n <IconButton label={dismissLabel} size=\"sm\" className={styles.dismiss} onClick={onDismiss}>\n <CloseIcon />\n </IconButton>\n )}\n </div>\n );\n});\n"],"mappings":";;;;;;;;AA4BA,IAAME,IAAwC;CAC5C,MAAM,kBAACC,GAAD,CAAW,CAAA;CACjB,SAAS,kBAACC,GAAD,CAAc,CAAA;CACvB,SAAS,kBAACC,GAAD,CAAc,CAAA;CACvB,QAAQ,kBAACC,GAAD,CAAY,CAAA;AACtB,GAMaC,IAAQC,EAAuC,SAC1D,EACE,YAAS,QACT,aAAU,UACV,UACA,SACA,WACA,cACA,kBAAe,WACf,cACA,aACA,GAAGC,KAEL,GACA;CACA,IAAMC,IAAUC,EAAM,GAChBC,IAAWC,KAAiC;CAElD,OACE,kBAAC,OAAD;EACO;EACL,MAAMC,MAAW,aAAaA,MAAW,WAAW,UAAU;EAC9D,mBAAiBF,IAAWF,IAAU,KAAA;EACtC,WAAWK,EAAGf,EAAO,OAAOA,EAAOc,IAASd,EAAOgB,IAAUC,CAAS;EACtE,GAAIR;EALN,UAAA;GAOGS,MAAS,MACR,kBAAC,QAAD;IAAM,WAAWlB,EAAO;IAAM,eAAY;IACvC,UAAAkB,KAAQhB,EAAMY;GACX,CAAA;GAER,kBAAC,OAAD;IAAK,WAAWd,EAAO;IAAvB,UAAA;KACGY,KACC,kBAAC,KAAD;MAAG,IAAIF;MAAS,WAAWV,EAAO;MAC/B,UAAAa;KACA,CAAA;KAEJM,MAAa,KAAA,KAAa,kBAAC,OAAD;MAAK,WAAWnB,EAAO;MAAc;KAAc,CAAA;KAC7EoB,MAAW,KAAA,KAAa,kBAAC,OAAD;MAAK,WAAWpB,EAAO;MAAS,UAAAoB;KAAY,CAAA;IAClE;;GACJC,KACC,kBAACC,GAAD;IAAY,OAAOC;IAAc,MAAK;IAAK,WAAWvB,EAAO;IAAS,SAASqB;IAC7E,UAAA,kBAACG,GAAD,CAAY,CAAA;GACF,CAAA;EAEX;;AAET,CAAC"}
@@ -0,0 +1,19 @@
1
+ // src/components/Alert/Alert.module.css
2
+ var e = "onyx-alert-7cYyI", t = "onyx-info-9r3r1", n = "onyx-success-1bzoB", r = "onyx-warning-q-j1Q", i = "onyx-danger-CiZkW", a = "onyx-subtle-XhGd-", o = "onyx-icon-Zg6SB", s = "onyx-title-abGgF", c = "onyx-solid-s-oW5", l = "onyx-content-UXnmZ", u = "onyx-description-pXPvw", d = "onyx-action-WeFR6", f = "onyx-dismiss-dQPPE", p = {
3
+ alert: e,
4
+ info: t,
5
+ success: n,
6
+ warning: r,
7
+ danger: i,
8
+ subtle: a,
9
+ icon: o,
10
+ title: s,
11
+ solid: c,
12
+ content: l,
13
+ description: u,
14
+ action: d,
15
+ dismiss: f
16
+ };
17
+ export { d as action, e as alert, l as content, i as danger, p as default, u as description, f as dismiss, o as icon, t as info, c as solid, a as subtle, n as success, s as title, r as warning };
18
+
19
+ //# sourceMappingURL=Alert.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alert.module.js","names":["alert","info","success","warning","danger","subtle","icon","title","solid","content","description","action","dismiss","Alert_module_default"],"sources":["../../../src/components/Alert/Alert.module.css"],"sourcesContent":[".alert {\n display: flex;\n gap: var(--space-3);\n align-items: flex-start;\n padding: var(--space-3) var(--space-4);\n font-size: var(--font-size-sm);\n line-height: var(--line-height-normal);\n border: var(--border-width-thin) solid transparent;\n border-radius: var(--radius-lg);\n}\n\n.info {\n --alert-solid: var(--color-info);\n --alert-on-solid: var(--color-on-info);\n --alert-subtle: var(--color-info-subtle);\n --alert-text: var(--color-info-text);\n --alert-border: var(--color-info-border);\n}\n\n.success {\n --alert-solid: var(--color-success);\n --alert-on-solid: var(--color-on-success);\n --alert-subtle: var(--color-success-subtle);\n --alert-text: var(--color-success-text);\n --alert-border: var(--color-success-border);\n}\n\n.warning {\n --alert-solid: var(--color-warning);\n --alert-on-solid: var(--color-on-warning);\n --alert-subtle: var(--color-warning-subtle);\n --alert-text: var(--color-warning-text);\n --alert-border: var(--color-warning-border);\n}\n\n.danger {\n --alert-solid: var(--color-danger);\n --alert-on-solid: var(--color-on-danger);\n --alert-subtle: var(--color-danger-subtle);\n --alert-text: var(--color-danger-text);\n --alert-border: var(--color-danger-border);\n}\n\n.subtle {\n color: var(--color-text);\n background-color: var(--alert-subtle);\n border-color: var(--alert-border);\n}\n\n.subtle .icon,\n.subtle .title {\n color: var(--alert-text);\n}\n\n.solid {\n color: var(--alert-on-solid);\n background-color: var(--alert-solid);\n}\n\n.icon {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n height: 1lh;\n}\n\n.icon > svg {\n width: var(--size-icon-md);\n height: var(--size-icon-md);\n}\n\n.content {\n display: grid;\n flex: 1;\n gap: var(--space-1);\n min-width: 0;\n}\n\n.title {\n margin: 0;\n font-weight: var(--font-weight-semibold);\n}\n\n.description {\n min-width: 0;\n}\n\n.description > :where(p) {\n margin: 0;\n}\n\n.action {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-2);\n margin-top: var(--space-2);\n}\n\n.dismiss {\n margin-block: calc(var(--space-1) * -1);\n margin-inline-end: calc(var(--space-2) * -1);\n color: inherit;\n}\n"],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export { Alert } from './Alert.js';
2
+ export type { AlertIntent, AlertProps } from './Alert.js';
@@ -0,0 +1,16 @@
1
+ import { HTMLAttributes } from 'react';
2
+ export type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
3
+ export interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {
4
+ /** Name of the person or entity. Names the avatar and provides the initials fallback. */
5
+ name: string;
6
+ /** Image URL. The initials show while it is missing or fails to load. */
7
+ src?: string;
8
+ /** Alternative text of the image. @default name */
9
+ alt?: string;
10
+ /** @default 'md' */
11
+ size?: AvatarSize;
12
+ /** @default 'circle' */
13
+ shape?: 'circle' | 'square';
14
+ }
15
+ /** Picture of a person or entity, with their initials as a fallback. */
16
+ export declare const Avatar: import('react').ForwardRefExoticComponent<AvatarProps & import('react').RefAttributes<HTMLSpanElement>>;
@@ -0,0 +1,33 @@
1
+ "use client";
2
+ import { cn as e } from "../../utils/cn.js";
3
+ import t from "./Avatar.module.js";
4
+ import { forwardRef as n, useState as r } from "react";
5
+ import { jsx as i } from "react/jsx-runtime";
6
+ // src/components/Avatar/Avatar.tsx
7
+ function a(e) {
8
+ let t = e.trim().split(/\s+/).filter(Boolean);
9
+ return (t.length > 1 ? [t[0], t.at(-1)] : [t[0]]).map((e) => e ? String.fromCodePoint(e.codePointAt(0)) : "").join("").toUpperCase();
10
+ }
11
+ var o = n(function({ name: n, src: o, alt: s = n, size: c = "md", shape: l = "circle", className: u, ...d }, f) {
12
+ let [p, m] = r(), h = o !== void 0 && o !== p;
13
+ return /* @__PURE__ */ i("span", {
14
+ ref: f,
15
+ role: h ? void 0 : "img",
16
+ "aria-label": h ? void 0 : n,
17
+ className: e(t.avatar, t[c], t[l], u),
18
+ ...d,
19
+ children: h ? /* @__PURE__ */ i("img", {
20
+ className: t.image,
21
+ src: o,
22
+ alt: s,
23
+ onError: () => m(o)
24
+ }) : /* @__PURE__ */ i("span", {
25
+ className: t.initials,
26
+ "aria-hidden": "true",
27
+ children: a(n)
28
+ })
29
+ });
30
+ });
31
+ export { o as Avatar };
32
+
33
+ //# sourceMappingURL=Avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar.js","names":["styles","Avatar_module_default","getInitials","words","name","word","Avatar","forwardRef","props","failedSrc","setFailedSrc","useState","showImage","src","cn","size","shape","className"],"sources":["../../../src/components/Avatar/Avatar.tsx"],"sourcesContent":["import { forwardRef, useState, type HTMLAttributes } from 'react';\nimport { cn } from '@/utils/cn';\nimport styles from './Avatar.module.css';\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {\n /** Name of the person or entity. Names the avatar and provides the initials fallback. */\n name: string;\n /** Image URL. The initials show while it is missing or fails to load. */\n src?: string;\n /** Alternative text of the image. @default name */\n alt?: string;\n /** @default 'md' */\n size?: AvatarSize;\n /** @default 'circle' */\n shape?: 'circle' | 'square';\n}\n\nfunction getInitials(name: string) {\n const words = name.trim().split(/\\s+/).filter(Boolean);\n const letters = words.length > 1 ? [words[0], words.at(-1)] : [words[0]];\n\n return letters\n .map((word) => (word ? String.fromCodePoint(word.codePointAt(0)!) : ''))\n .join('')\n .toUpperCase();\n}\n\n/** Picture of a person or entity, with their initials as a fallback. */\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(function Avatar(\n { name, src, alt = name, size = 'md', shape = 'circle', className, ...props },\n ref,\n) {\n const [failedSrc, setFailedSrc] = useState<string>();\n const showImage = src !== undefined && src !== failedSrc;\n\n return (\n <span\n ref={ref}\n role={showImage ? undefined : 'img'}\n aria-label={showImage ? undefined : name}\n className={cn(styles.avatar, styles[size], styles[shape], className)}\n {...props}\n >\n {showImage ? (\n <img className={styles.image} src={src} alt={alt} onError={() => setFailedSrc(src)} />\n ) : (\n <span className={styles.initials} aria-hidden=\"true\">\n {getInitials(name)}\n </span>\n )}\n </span>\n );\n});\n"],"mappings":";;;;;;AAmBA,SAASE,EAAY,GAAc;CACjC,IAAMC,IAAQC,EAAK,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO;CAGrD,QAFgBD,EAAM,SAAS,IAAI,CAACA,EAAM,IAAIA,EAAM,GAAG,EAAE,CAAC,IAAI,CAACA,EAAM,EAAE,EAAA,CAGpE,KAAK,MAAUE,IAAO,OAAO,cAAcA,EAAK,YAAY,CAAC,CAAE,IAAI,EAAG,CAAC,CACvE,KAAK,EAAE,CAAC,CACR,YAAY;AACjB;AAGA,IAAaC,IAASC,EAAyC,SAC7D,EAAE,SAAM,QAAK,SAAMH,GAAM,UAAO,MAAM,WAAQ,UAAU,cAAW,GAAGI,KACtE,GACA;CACA,IAAM,CAACC,GAAWC,KAAgBC,EAAiB,GAC7CC,IAAYC,MAAQ,KAAA,KAAaA,MAAQJ;CAE/C,OACE,kBAAC,QAAD;EACO;EACL,MAAMG,IAAY,KAAA,IAAY;EAC9B,cAAYA,IAAY,KAAA,IAAYR;EACpC,WAAWU,EAAGd,EAAO,QAAQA,EAAOe,IAAOf,EAAOgB,IAAQC,CAAS;EACnE,GAAIT;EAEH,UAAAI,IACC,kBAAC,OAAD;GAAK,WAAWZ,EAAO;GAAY;GAAU;GAAK,eAAeU,EAAaG,CAAG;EAAI,CAAA,IAErF,kBAAC,QAAD;GAAM,WAAWb,EAAO;GAAU,eAAY;GAC3C,UAAAE,EAAYE,CAAI;EACb,CAAA;CAEJ,CAAA;AAEV,CAAC"}
@@ -0,0 +1,15 @@
1
+ // src/components/Avatar/Avatar.module.css
2
+ var e = "onyx-avatar-3xMuZ", t = "onyx-circle-O2tJa", n = "onyx-square-KXudv", r = "onyx-image-ieqGp", i = "onyx-xs-oSaLL", a = "onyx-sm-sZ2bk", o = "onyx-md-Fdkbz", s = "onyx-lg-pTTUA", c = "onyx-xl-mW58F", l = {
3
+ avatar: e,
4
+ circle: t,
5
+ square: n,
6
+ image: r,
7
+ xs: i,
8
+ sm: a,
9
+ md: o,
10
+ lg: s,
11
+ xl: c
12
+ };
13
+ export { e as avatar, t as circle, l as default, r as image, s as lg, o as md, a as sm, n as square, c as xl, i as xs };
14
+
15
+ //# sourceMappingURL=Avatar.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar.module.js","names":["avatar","circle","square","image","xs","sm","md","lg","xl","Avatar_module_default"],"sources":["../../../src/components/Avatar/Avatar.module.css"],"sourcesContent":[".avatar {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n font-weight: var(--font-weight-medium);\n line-height: var(--line-height-none);\n color: var(--color-primary-text);\n vertical-align: middle;\n user-select: none;\n background-color: var(--color-primary-subtle);\n}\n\n.circle {\n border-radius: var(--radius-full);\n}\n\n.square {\n border-radius: var(--radius-md);\n}\n\n.image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.xs {\n width: var(--space-6);\n height: var(--space-6);\n font-size: var(--font-size-xs);\n}\n\n.sm {\n width: var(--size-control-sm);\n height: var(--size-control-sm);\n font-size: var(--font-size-xs);\n}\n\n.md {\n width: var(--size-control-md);\n height: var(--size-control-md);\n font-size: var(--font-size-sm);\n}\n\n.lg {\n width: var(--size-control-lg);\n height: var(--size-control-lg);\n font-size: var(--font-size-md);\n}\n\n.xl {\n width: var(--space-16);\n height: var(--space-16);\n font-size: var(--font-size-xl);\n}\n"],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export { Avatar } from './Avatar.js';
2
+ export type { AvatarProps, AvatarSize } from './Avatar.js';
@@ -0,0 +1,15 @@
1
+ import { HTMLAttributes, ReactNode } from 'react';
2
+ export type BadgeIntent = 'neutral' | 'primary' | 'success' | 'warning' | 'danger' | 'info';
3
+ export type BadgeVariant = 'subtle' | 'solid' | 'outline';
4
+ export interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
5
+ /** @default 'neutral' */
6
+ intent?: BadgeIntent;
7
+ /** @default 'subtle' */
8
+ variant?: BadgeVariant;
9
+ /** @default 'md' */
10
+ size?: 'sm' | 'md';
11
+ /** Element rendered before the label, usually an icon. */
12
+ icon?: ReactNode;
13
+ }
14
+ /** Short status or category label. Not interactive: put it next to a control, not inside one. */
15
+ export declare const Badge: import('react').ForwardRefExoticComponent<BadgeProps & import('react').RefAttributes<HTMLSpanElement>>;
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ import { cn as e } from "../../utils/cn.js";
3
+ import t from "./Badge.module.js";
4
+ import { forwardRef as n } from "react";
5
+ import { jsxs as r } from "react/jsx-runtime";
6
+ // src/components/Badge/Badge.tsx
7
+ var i = n(function({ intent: n = "neutral", variant: i = "subtle", size: a = "md", icon: o, className: s, children: c, ...l }, u) {
8
+ return /* @__PURE__ */ r("span", {
9
+ ref: u,
10
+ className: e(t.badge, t[n], t[i], t[a], s),
11
+ ...l,
12
+ children: [o, c]
13
+ });
14
+ });
15
+ export { i as Badge };
16
+
17
+ //# sourceMappingURL=Badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Badge.js","names":["styles","Badge_module_default","Badge","forwardRef","props","cn","intent","variant","size","className","icon","children"],"sources":["../../../src/components/Badge/Badge.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '@/utils/cn';\nimport styles from './Badge.module.css';\n\nexport type BadgeIntent = 'neutral' | 'primary' | 'success' | 'warning' | 'danger' | 'info';\nexport type BadgeVariant = 'subtle' | 'solid' | 'outline';\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n /** @default 'neutral' */\n intent?: BadgeIntent;\n /** @default 'subtle' */\n variant?: BadgeVariant;\n /** @default 'md' */\n size?: 'sm' | 'md';\n /** Element rendered before the label, usually an icon. */\n icon?: ReactNode;\n}\n\n/** Short status or category label. Not interactive: put it next to a control, not inside one. */\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { intent = 'neutral', variant = 'subtle', size = 'md', icon, className, children, ...props },\n ref,\n) {\n return (\n <span\n ref={ref}\n className={cn(styles.badge, styles[intent], styles[variant], styles[size], className)}\n {...props}\n >\n {icon}\n {children}\n </span>\n );\n});\n"],"mappings":";;;;;;AAmBA,IAAaE,IAAQC,EAAwC,SAC3D,EAAE,YAAS,WAAW,aAAU,UAAU,UAAO,MAAM,SAAM,cAAW,aAAU,GAAGC,KACrF,GACA;CACA,OACE,kBAAC,QAAD;EACO;EACL,WAAWC,EAAGL,EAAO,OAAOA,EAAOM,IAASN,EAAOO,IAAUP,EAAOQ,IAAOC,CAAS;EACpF,GAAIL;EAHN,UAAA,CAKGM,GACAC,CACG;;AAEV,CAAC"}
@@ -0,0 +1,18 @@
1
+ // src/components/Badge/Badge.module.css
2
+ var e = "onyx-badge-RsuMz", t = "onyx-sm-LYsCn", n = "onyx-md-4Or8q", r = "onyx-neutral-lulSm", i = "onyx-primary-S0WCS", a = "onyx-success-u9JiS", o = "onyx-warning-nsGp-", s = "onyx-danger-PD2hz", c = "onyx-info-na6DQ", l = "onyx-subtle-boe3x", u = "onyx-solid-0Leug", d = "onyx-outline-x06HL", f = {
3
+ badge: e,
4
+ sm: t,
5
+ md: n,
6
+ neutral: r,
7
+ primary: i,
8
+ success: a,
9
+ warning: o,
10
+ danger: s,
11
+ info: c,
12
+ subtle: l,
13
+ solid: u,
14
+ outline: d
15
+ };
16
+ export { e as badge, s as danger, f as default, c as info, n as md, r as neutral, d as outline, i as primary, t as sm, u as solid, l as subtle, a as success, o as warning };
17
+
18
+ //# sourceMappingURL=Badge.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Badge.module.js","names":["badge","sm","md","neutral","primary","success","warning","danger","info","subtle","solid","outline","Badge_module_default"],"sources":["../../../src/components/Badge/Badge.module.css"],"sourcesContent":[".badge {\n display: inline-flex;\n gap: var(--space-1);\n align-items: center;\n max-width: 100%;\n font-weight: var(--font-weight-medium);\n line-height: var(--line-height-tight);\n white-space: nowrap;\n vertical-align: middle;\n border: var(--border-width-thin) solid transparent;\n border-radius: var(--radius-full);\n}\n\n.sm {\n padding: 0 var(--space-2);\n font-size: var(--font-size-xs);\n}\n\n.md {\n padding: var(--space-1) var(--space-3);\n font-size: var(--font-size-sm);\n}\n\n.neutral {\n --badge-solid: var(--color-bg-inverse);\n --badge-on-solid: var(--color-text-inverse);\n --badge-subtle: var(--color-bg-muted);\n --badge-text: var(--color-text);\n --badge-border: var(--color-border-strong);\n}\n\n.primary {\n --badge-solid: var(--color-primary);\n --badge-on-solid: var(--color-on-primary);\n --badge-subtle: var(--color-primary-subtle);\n --badge-text: var(--color-primary-text);\n --badge-border: var(--color-primary);\n}\n\n.success {\n --badge-solid: var(--color-success);\n --badge-on-solid: var(--color-on-success);\n --badge-subtle: var(--color-success-subtle);\n --badge-text: var(--color-success-text);\n --badge-border: var(--color-success);\n}\n\n.warning {\n --badge-solid: var(--color-warning);\n --badge-on-solid: var(--color-on-warning);\n --badge-subtle: var(--color-warning-subtle);\n --badge-text: var(--color-warning-text);\n --badge-border: var(--color-warning);\n}\n\n.danger {\n --badge-solid: var(--color-danger);\n --badge-on-solid: var(--color-on-danger);\n --badge-subtle: var(--color-danger-subtle);\n --badge-text: var(--color-danger-text);\n --badge-border: var(--color-danger);\n}\n\n.info {\n --badge-solid: var(--color-info);\n --badge-on-solid: var(--color-on-info);\n --badge-subtle: var(--color-info-subtle);\n --badge-text: var(--color-info-text);\n --badge-border: var(--color-info);\n}\n\n.subtle {\n color: var(--badge-text);\n background-color: var(--badge-subtle);\n}\n\n.solid {\n color: var(--badge-on-solid);\n background-color: var(--badge-solid);\n}\n\n.outline {\n color: var(--badge-text);\n border-color: var(--badge-border);\n}\n"],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export { Badge } from './Badge.js';
2
+ export type { BadgeIntent, BadgeProps, BadgeVariant } from './Badge.js';
@@ -0,0 +1,26 @@
1
+ import { ElementType, HTMLAttributes, LiHTMLAttributes, ReactNode } from 'react';
2
+ import { PolymorphicComponent, PolymorphicPropsWithRef } from '../../utils/polymorphic.js';
3
+ export interface BreadcrumbProps extends HTMLAttributes<HTMLElement> {
4
+ /** Element shown between items. Defaults to a chevron. */
5
+ separator?: ReactNode;
6
+ /**
7
+ * Accessible name of the navigation landmark.
8
+ * @default 'Breadcrumb'
9
+ */
10
+ 'aria-label'?: string;
11
+ }
12
+ /** Trail of links from the home page to the current page. */
13
+ export declare const Breadcrumb: import('react').ForwardRefExoticComponent<BreadcrumbProps & import('react').RefAttributes<HTMLElement>>;
14
+ export type BreadcrumbItemProps = LiHTMLAttributes<HTMLLIElement>;
15
+ /** One step of the trail. Holds a `BreadcrumbLink`. */
16
+ export declare const BreadcrumbItem: import('react').ForwardRefExoticComponent<BreadcrumbItemProps & import('react').RefAttributes<HTMLLIElement>>;
17
+ export interface BreadcrumbLinkOwnProps {
18
+ /**
19
+ * Marks the link as the current page with `aria-current="page"`.
20
+ * @default false
21
+ */
22
+ current?: boolean;
23
+ }
24
+ export type BreadcrumbLinkProps<As extends ElementType = 'a'> = PolymorphicPropsWithRef<As, BreadcrumbLinkOwnProps>;
25
+ /** Link of a `BreadcrumbItem`. Use `as` to render a router link. */
26
+ export declare const BreadcrumbLink: PolymorphicComponent<"a", BreadcrumbLinkOwnProps>;
@@ -0,0 +1,44 @@
1
+ "use client";
2
+ import { cn as e } from "../../utils/cn.js";
3
+ import { ChevronRightIcon as t } from "../Icon/icons.js";
4
+ import n from "./Breadcrumb.module.js";
5
+ import { createContext as r, forwardRef as i, useContext as a } from "react";
6
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
7
+ // src/components/Breadcrumb/Breadcrumb.tsx
8
+ var c = r(null), l = i(function({ separator: r = /* @__PURE__ */ o(t, {}), "aria-label": i = "Breadcrumb", className: a, children: s, ...l }, u) {
9
+ return /* @__PURE__ */ o("nav", {
10
+ ref: u,
11
+ "aria-label": i,
12
+ className: e(n.breadcrumb, a),
13
+ ...l,
14
+ children: /* @__PURE__ */ o("ol", {
15
+ className: n.list,
16
+ children: /* @__PURE__ */ o(c.Provider, {
17
+ value: r,
18
+ children: s
19
+ })
20
+ })
21
+ });
22
+ }), u = i(function({ className: t, children: r, ...i }, l) {
23
+ let u = a(c);
24
+ return /* @__PURE__ */ s("li", {
25
+ ref: l,
26
+ className: e(n.item, t),
27
+ ...i,
28
+ children: [/* @__PURE__ */ o("span", {
29
+ className: n.separator,
30
+ "aria-hidden": "true",
31
+ children: u
32
+ }), r]
33
+ });
34
+ }), d = i(function({ as: t = "a", current: r = !1, className: i, ...a }, s) {
35
+ return /* @__PURE__ */ o(t, {
36
+ ref: s,
37
+ "aria-current": r ? "page" : void 0,
38
+ className: e(n.link, i),
39
+ ...a
40
+ });
41
+ });
42
+ export { l as Breadcrumb, u as BreadcrumbItem, d as BreadcrumbLink };
43
+
44
+ //# sourceMappingURL=Breadcrumb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Breadcrumb.js","names":["styles","Breadcrumb_module_default","SeparatorContext","createContext","Breadcrumb","forwardRef","ChevronRightIcon","ariaLabel","props","cn","className","separator","BreadcrumbItem","useContext","children","BreadcrumbLink","Component","current"],"sources":["../../../src/components/Breadcrumb/Breadcrumb.tsx"],"sourcesContent":["import {\n createContext,\n forwardRef,\n useContext,\n type ElementType,\n type HTMLAttributes,\n type LiHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '@/utils/cn';\nimport type {\n PolymorphicComponent,\n PolymorphicProps,\n PolymorphicPropsWithRef,\n} from '@/utils/polymorphic';\nimport { ChevronRightIcon } from '../Icon';\nimport styles from './Breadcrumb.module.css';\n\nconst SeparatorContext = createContext<ReactNode>(null);\n\nexport interface BreadcrumbProps extends HTMLAttributes<HTMLElement> {\n /** Element shown between items. Defaults to a chevron. */\n separator?: ReactNode;\n /**\n * Accessible name of the navigation landmark.\n * @default 'Breadcrumb'\n */\n 'aria-label'?: string;\n}\n\n/** Trail of links from the home page to the current page. */\nexport const Breadcrumb = forwardRef<HTMLElement, BreadcrumbProps>(function Breadcrumb(\n {\n separator = <ChevronRightIcon />,\n 'aria-label': ariaLabel = 'Breadcrumb',\n className,\n children,\n ...props\n },\n ref,\n) {\n return (\n <nav ref={ref} aria-label={ariaLabel} className={cn(styles.breadcrumb, className)} {...props}>\n <ol className={styles.list}>\n <SeparatorContext.Provider value={separator}>{children}</SeparatorContext.Provider>\n </ol>\n </nav>\n );\n});\n\nexport type BreadcrumbItemProps = LiHTMLAttributes<HTMLLIElement>;\n\n/** One step of the trail. Holds a `BreadcrumbLink`. */\nexport const BreadcrumbItem = forwardRef<HTMLLIElement, BreadcrumbItemProps>(\n function BreadcrumbItem({ className, children, ...props }, ref) {\n const separator = useContext(SeparatorContext);\n\n return (\n <li ref={ref} className={cn(styles.item, className)} {...props}>\n <span className={styles.separator} aria-hidden=\"true\">\n {separator}\n </span>\n {children}\n </li>\n );\n },\n);\n\nexport interface BreadcrumbLinkOwnProps {\n /**\n * Marks the link as the current page with `aria-current=\"page\"`.\n * @default false\n */\n current?: boolean;\n}\n\nexport type BreadcrumbLinkProps<As extends ElementType = 'a'> = PolymorphicPropsWithRef<\n As,\n BreadcrumbLinkOwnProps\n>;\n\n/** Link of a `BreadcrumbItem`. Use `as` to render a router link. */\nexport const BreadcrumbLink = forwardRef<\n HTMLAnchorElement,\n PolymorphicProps<'a', BreadcrumbLinkOwnProps>\n>(function BreadcrumbLink({ as: Component = 'a', current = false, className, ...props }, ref) {\n return (\n <Component\n ref={ref}\n aria-current={current ? 'page' : undefined}\n className={cn(styles.link, className)}\n {...props}\n />\n );\n}) as PolymorphicComponent<'a', BreadcrumbLinkOwnProps>;\n"],"mappings":";;;;;;;AAkBA,IAAME,IAAmBC,EAAyB,IAAI,GAazCC,IAAaC,EAAyC,SACjE,EACE,eAAY,kBAACC,GAAD,CAAmB,CAAA,GAC/B,cAAcC,IAAY,cAC1B,cACA,aACA,GAAGC,KAEL,GACA;CACA,OACE,kBAAC,OAAD;EAAU;EAAK,cAAYD;EAAW,WAAWE,EAAGT,EAAO,YAAYU,CAAS;EAAG,GAAIF;EACrF,UAAA,kBAAC,MAAD;GAAI,WAAWR,EAAO;GACpB,UAAA,kBAACE,EAAiB,UAAlB;IAA2B,OAAOS;IAAY;GAAoC,CAAA;EAChF,CAAA;CACD,CAAA;AAET,CAAC,GAKYC,IAAiBP,EAC5B,SAAwB,EAAE,cAAW,aAAU,GAAGG,KAAS,GAAK;CAC9D,IAAMG,IAAYE,EAAWX,CAAgB;CAE7C,OACE,kBAAC,MAAD;EAAS;EAAK,WAAWO,EAAGT,EAAO,MAAMU,CAAS;EAAG,GAAIF;EAAzD,UAAA,CACE,kBAAC,QAAD;GAAM,WAAWR,EAAO;GAAW,eAAY;GAC5C,UAAAW;EACG,CAAA,GACLG,CACC;;AAER,CACF,GAgBaC,IAAiBV,EAG5B,SAAwB,EAAE,IAAIW,IAAY,KAAK,aAAU,IAAO,cAAW,GAAGR,KAAS,GAAK;CAC5F,OACE,kBAACQ,GAAD;EACO;EACL,gBAAcC,IAAU,SAAS,KAAA;EACjC,WAAWR,EAAGT,EAAO,MAAMU,CAAS;EACpC,GAAIF;CACL,CAAA;AAEL,CAAC"}
@@ -0,0 +1,11 @@
1
+ // src/components/Breadcrumb/Breadcrumb.module.css
2
+ var e = "onyx-breadcrumb-TVagK", t = "onyx-list-0leIR", n = "onyx-item-ZczhA", r = "onyx-separator-qrUX-", i = "onyx-link-nDu8Y onyx-focusRing-qmcYD", a = {
3
+ breadcrumb: e,
4
+ list: t,
5
+ item: n,
6
+ separator: r,
7
+ link: i
8
+ };
9
+ export { e as breadcrumb, a as default, n as item, i as link, t as list, r as separator };
10
+
11
+ //# sourceMappingURL=Breadcrumb.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Breadcrumb.module.js","names":["breadcrumb","list","item","separator","link","Breadcrumb_module_default"],"sources":["../../../src/components/Breadcrumb/Breadcrumb.module.css"],"sourcesContent":[".breadcrumb {\n min-width: 0;\n font-size: var(--font-size-sm);\n}\n\n.list {\n display: flex;\n flex-wrap: wrap;\n row-gap: var(--space-1);\n align-items: center;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.item {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n}\n\n.separator {\n display: inline-flex;\n margin-inline: var(--space-2);\n color: var(--color-text-muted);\n}\n\n.item:first-child .separator {\n display: none;\n}\n\n:dir(rtl) .separator > svg {\n scale: -1 1;\n}\n\n.link {\n composes: focusRing from '../../styles/focus-ring.module.css';\n overflow: hidden;\n color: var(--color-text-muted);\n text-decoration-line: none;\n text-overflow: ellipsis;\n white-space: nowrap;\n border-radius: var(--radius-sm);\n transition: color var(--duration-fast) var(--easing-standard);\n}\n\n.link:is(a[href]):hover {\n color: var(--color-text);\n text-decoration-line: underline;\n text-underline-offset: 0.2em;\n}\n\n.link[aria-current='page'] {\n font-weight: var(--font-weight-medium);\n color: var(--color-text);\n}\n\n@media (pointer: coarse) {\n .link {\n display: inline-block;\n line-height: var(--size-touch-target);\n }\n}\n"],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export { Breadcrumb, BreadcrumbItem, BreadcrumbLink } from './Breadcrumb.js';
2
+ export type { BreadcrumbItemProps, BreadcrumbLinkOwnProps, BreadcrumbLinkProps, BreadcrumbProps, } from './Breadcrumb.js';
@@ -0,0 +1,29 @@
1
+ import { ButtonHTMLAttributes, ReactNode } from 'react';
2
+ export type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';
3
+ export type ButtonSize = 'sm' | 'md' | 'lg';
4
+ export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
5
+ /** @default 'primary' */
6
+ variant?: ButtonVariant;
7
+ /** @default 'md' */
8
+ size?: ButtonSize;
9
+ /**
10
+ * Shows a spinner and ignores clicks while keeping the button focusable and its width stable.
11
+ * @default false
12
+ */
13
+ loading?: boolean;
14
+ /**
15
+ * Added to the accessible name while `loading`.
16
+ * @default 'Loading'
17
+ */
18
+ loadingLabel?: string;
19
+ /** Element rendered before the label, usually an icon. */
20
+ startIcon?: ReactNode;
21
+ /** Element rendered after the label, usually an icon. */
22
+ endIcon?: ReactNode;
23
+ /**
24
+ * Stretches the button to the width of its container.
25
+ * @default false
26
+ */
27
+ fullWidth?: boolean;
28
+ }
29
+ export declare const Button: import('react').ForwardRefExoticComponent<ButtonProps & import('react').RefAttributes<HTMLButtonElement>>;
@@ -0,0 +1,40 @@
1
+ "use client";
2
+ import { cn as e } from "../../utils/cn.js";
3
+ import { VisuallyHidden as t } from "../VisuallyHidden/VisuallyHidden.js";
4
+ import { Spinner as n } from "../Spinner/Spinner.js";
5
+ import r from "./Button.module.js";
6
+ import { forwardRef as i } from "react";
7
+ import { Fragment as a, jsx as o, jsxs as s } from "react/jsx-runtime";
8
+ // src/components/Button/Button.tsx
9
+ var c = i(function({ variant: i = "primary", size: c = "md", loading: l = !1, loadingLabel: u = "Loading", startIcon: d, endIcon: f, fullWidth: p = !1, type: m = "button", className: h, children: g, onClick: _, ...v }, y) {
10
+ return /* @__PURE__ */ s("button", {
11
+ ref: y,
12
+ type: m,
13
+ "aria-disabled": l || void 0,
14
+ "data-loading": l || void 0,
15
+ className: e(r.button, r[i], r[c], p && r.fullWidth, h),
16
+ onClick: (e) => {
17
+ l ? e.preventDefault() : _?.(e);
18
+ },
19
+ ...v,
20
+ children: [/* @__PURE__ */ s("span", {
21
+ className: r.content,
22
+ children: [
23
+ d,
24
+ g,
25
+ f
26
+ ]
27
+ }), l && /* @__PURE__ */ s(a, { children: [
28
+ /* @__PURE__ */ o(n, {
29
+ decorative: !0,
30
+ size: "inherit",
31
+ className: r.spinner
32
+ }),
33
+ " ",
34
+ /* @__PURE__ */ o(t, { children: u })
35
+ ] })]
36
+ });
37
+ });
38
+ export { c as Button };
39
+
40
+ //# sourceMappingURL=Button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.js","names":["styles","_Fragment","Button_module_default","Button","forwardRef","props","loading","cn","variant","size","fullWidth","className","event","onClick","startIcon","children","endIcon","Fragment","Spinner","VisuallyHidden","loadingLabel"],"sources":["../../../src/components/Button/Button.tsx"],"sourcesContent":["import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '@/utils/cn';\nimport { Spinner } from '../Spinner';\nimport { VisuallyHidden } from '../VisuallyHidden';\nimport styles from './Button.module.css';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** @default 'primary' */\n variant?: ButtonVariant;\n /** @default 'md' */\n size?: ButtonSize;\n /**\n * Shows a spinner and ignores clicks while keeping the button focusable and its width stable.\n * @default false\n */\n loading?: boolean;\n /**\n * Added to the accessible name while `loading`.\n * @default 'Loading'\n */\n loadingLabel?: string;\n /** Element rendered before the label, usually an icon. */\n startIcon?: ReactNode;\n /** Element rendered after the label, usually an icon. */\n endIcon?: ReactNode;\n /**\n * Stretches the button to the width of its container.\n * @default false\n */\n fullWidth?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'primary',\n size = 'md',\n loading = false,\n loadingLabel = 'Loading',\n startIcon,\n endIcon,\n fullWidth = false,\n type = 'button',\n className,\n children,\n onClick,\n ...props\n },\n ref,\n) {\n return (\n <button\n ref={ref}\n type={type}\n aria-disabled={loading || undefined}\n data-loading={loading || undefined}\n className={cn(\n styles.button,\n styles[variant],\n styles[size],\n fullWidth && styles.fullWidth,\n className,\n )}\n onClick={(event) => {\n if (loading) {\n event.preventDefault();\n return;\n }\n onClick?.(event);\n }}\n {...props}\n >\n <span className={styles.content}>\n {startIcon}\n {children}\n {endIcon}\n </span>\n {loading && (\n <>\n <Spinner decorative size=\"inherit\" className={styles.spinner} />{' '}\n <VisuallyHidden>{loadingLabel}</VisuallyHidden>\n </>\n )}\n </button>\n );\n});\n"],"mappings":";;;;;;;;AAmCA,IAAaG,IAASC,EAA2C,SAC/D,EACE,aAAU,WACV,UAAO,MACP,aAAU,IACV,kBAAe,WACf,cACA,YACA,eAAY,IACZ,UAAO,UACP,cACA,aACA,YACA,GAAGC,KAEL,GACA;CACA,OACE,kBAAC,UAAD;EACO;EACC;EACN,iBAAeC,KAAW,KAAA;EAC1B,gBAAcA,KAAW,KAAA;EACzB,WAAWC,EACTP,EAAO,QACPA,EAAOQ,IACPR,EAAOS,IACPC,KAAaV,EAAO,WACpBW,CACF;EACA,UAAU,MAAU;GAClB,AAAIL,IACFM,EAAM,eAAe,IAGvBC,IAAUD,CAAK;EACjB;EACA,GAAIP;EAnBN,UAAA,CAqBE,kBAAC,QAAD;GAAM,WAAWL,EAAO;GAAxB,UAAA;IACGc;IACAC;IACAC;GACG;EACL,CAAA,GAAAV,KACC,kBAAAL,GAAA,EAAA,UAAA;GACE,kBAACiB,GAAD;IAAS,YAAA;IAAW,MAAK;IAAU,WAAWlB,EAAO;GAAU,CAAA;GAAE;GACjE,kBAACmB,GAAD,EAAA,UAAiBC,EAA6B,CAAA;EAC9C,EAAA,CAAA,CAEE;;AAEZ,CAAC"}
@@ -0,0 +1,18 @@
1
+ // src/components/Button/Button.module.css
2
+ var e = "onyx-button-2ZuB7 onyx-focusRing-qmcYD", t = "onyx-content-EKXmF", n = "onyx-spinner-ZExvW", r = "onyx-sm-NhG0g", i = "onyx-md-hH4h3", a = "onyx-lg-2plQf", o = "onyx-fullWidth-36oJT", s = "onyx-primary-s1sM6", c = "onyx-danger-V4fX8", l = "onyx-secondary-R0waJ", u = "onyx-outline-F5jq-", d = "onyx-ghost-1KINV", f = {
3
+ button: e,
4
+ content: t,
5
+ spinner: n,
6
+ sm: r,
7
+ md: i,
8
+ lg: a,
9
+ fullWidth: o,
10
+ primary: s,
11
+ danger: c,
12
+ secondary: l,
13
+ outline: u,
14
+ ghost: d
15
+ };
16
+ export { e as button, t as content, c as danger, f as default, o as fullWidth, d as ghost, a as lg, i as md, u as outline, s as primary, l as secondary, r as sm, n as spinner };
17
+
18
+ //# sourceMappingURL=Button.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.module.js","names":["button","content","spinner","sm","md","lg","fullWidth","primary","danger","secondary","outline","ghost","Button_module_default"],"sources":["../../../src/components/Button/Button.module.css"],"sourcesContent":[".button {\n composes: focusRing from '../../styles/focus-ring.module.css';\n position: relative;\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n font-weight: var(--font-weight-medium);\n line-height: var(--line-height-tight);\n white-space: nowrap;\n text-decoration: none;\n cursor: pointer;\n user-select: none;\n background-color: transparent;\n border: var(--border-width-thin) solid transparent;\n border-radius: var(--radius-md);\n transition-timing-function: var(--easing-standard);\n transition-duration: var(--duration-fast);\n transition-property: background-color, border-color, color;\n}\n\n.content {\n display: inline-flex;\n gap: var(--space-2);\n align-items: center;\n justify-content: center;\n min-width: 0;\n}\n\n.button[data-loading] {\n cursor: progress;\n}\n\n.button[data-loading] .content {\n opacity: 0;\n}\n\n.spinner {\n position: absolute;\n inset: 0;\n margin: auto;\n}\n\n.sm {\n min-height: var(--size-control-sm);\n padding-inline: var(--space-3);\n font-size: var(--font-size-sm);\n}\n\n.md {\n min-height: var(--size-control-md);\n padding-inline: var(--space-4);\n font-size: var(--font-size-sm);\n}\n\n.lg {\n min-height: var(--size-control-lg);\n padding-inline: var(--space-5);\n font-size: var(--font-size-md);\n}\n\n.fullWidth {\n width: 100%;\n}\n\n.primary {\n color: var(--color-on-primary);\n background-color: var(--color-primary);\n}\n\n.primary:hover:not(:disabled, [aria-disabled='true']) {\n background-color: var(--color-primary-hover);\n}\n\n.primary:active:not(:disabled, [aria-disabled='true']) {\n background-color: var(--color-primary-active);\n}\n\n.danger {\n color: var(--color-on-danger);\n background-color: var(--color-danger);\n}\n\n.danger:hover:not(:disabled, [aria-disabled='true']) {\n background-color: var(--color-danger-hover);\n}\n\n.danger:active:not(:disabled, [aria-disabled='true']) {\n background-color: var(--color-danger-active);\n}\n\n.secondary {\n color: var(--color-text);\n background-color: var(--color-bg-muted);\n}\n\n.outline {\n color: var(--color-text);\n border-color: var(--color-border-strong);\n}\n\n.ghost {\n color: var(--color-text);\n}\n\n:is(.secondary, .outline, .ghost):hover:not(:disabled, [aria-disabled='true']) {\n background-image: linear-gradient(var(--color-state-hover), var(--color-state-hover));\n}\n\n:is(.secondary, .outline, .ghost):active:not(:disabled, [aria-disabled='true']) {\n background-image: linear-gradient(var(--color-state-active), var(--color-state-active));\n}\n\n.button:disabled {\n color: var(--color-text-disabled);\n cursor: not-allowed;\n background-color: var(--color-bg-muted);\n border-color: transparent;\n}\n\n:is(.outline, .ghost):disabled {\n background-color: transparent;\n}\n\n.outline:disabled {\n border-color: var(--color-border);\n}\n\n@media (pointer: coarse) {\n .button {\n min-height: var(--size-touch-target);\n }\n}\n"],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export { Button } from './Button.js';
2
+ export type { ButtonProps, ButtonSize, ButtonVariant } from './Button.js';
@@ -0,0 +1,24 @@
1
+ import { ElementType, HTMLAttributes } from 'react';
2
+ import { PolymorphicComponent, PolymorphicPropsWithRef } from '../../utils/polymorphic.js';
3
+ export interface CardOwnProps {
4
+ /** @default 'outline' */
5
+ variant?: 'outline' | 'elevated' | 'filled';
6
+ /**
7
+ * Inner spacing, shared by the header, body and footer.
8
+ * @default 'md'
9
+ */
10
+ padding?: 'none' | 'sm' | 'md' | 'lg';
11
+ }
12
+ export type CardProps<As extends ElementType = 'div'> = PolymorphicPropsWithRef<As, CardOwnProps>;
13
+ /**
14
+ * Surface that groups related content. Use `as="article"` or `as="section"` when the content
15
+ * stands on its own, and `CardHeader`, `CardBody` and `CardFooter` to lay it out.
16
+ */
17
+ export declare const Card: PolymorphicComponent<"div", CardOwnProps>;
18
+ export type CardSectionProps = HTMLAttributes<HTMLDivElement>;
19
+ /** Top of a card, usually a heading with an optional action beside it. */
20
+ export declare const CardHeader: import('react').ForwardRefExoticComponent<CardSectionProps & import('react').RefAttributes<HTMLDivElement>>;
21
+ /** Main content of a card. */
22
+ export declare const CardBody: import('react').ForwardRefExoticComponent<CardSectionProps & import('react').RefAttributes<HTMLDivElement>>;
23
+ /** Bottom of a card, usually actions. */
24
+ export declare const CardFooter: import('react').ForwardRefExoticComponent<CardSectionProps & import('react').RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,34 @@
1
+ "use client";
2
+ import { cn as e } from "../../utils/cn.js";
3
+ import t from "./Card.module.js";
4
+ import { forwardRef as n } from "react";
5
+ import { jsx as r } from "react/jsx-runtime";
6
+ // src/components/Card/Card.tsx
7
+ var i = n(function({ as: n = "div", variant: i = "outline", padding: a = "md", className: o, ...s }, c) {
8
+ return /* @__PURE__ */ r(n, {
9
+ ref: c,
10
+ className: e(t.card, t[i], t[a], o),
11
+ ...s
12
+ });
13
+ }), a = n(function({ className: n, ...i }, a) {
14
+ return /* @__PURE__ */ r("div", {
15
+ ref: a,
16
+ className: e(t.header, n),
17
+ ...i
18
+ });
19
+ }), o = n(function({ className: n, ...i }, a) {
20
+ return /* @__PURE__ */ r("div", {
21
+ ref: a,
22
+ className: e(t.body, n),
23
+ ...i
24
+ });
25
+ }), s = n(function({ className: n, ...i }, a) {
26
+ return /* @__PURE__ */ r("div", {
27
+ ref: a,
28
+ className: e(t.footer, n),
29
+ ...i
30
+ });
31
+ });
32
+ export { i as Card, o as CardBody, s as CardFooter, a as CardHeader };
33
+
34
+ //# sourceMappingURL=Card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.js","names":["styles","Card_module_default","Card","forwardRef","Component","props","cn","variant","padding","className","CardHeader","CardBody","CardFooter"],"sources":["../../../src/components/Card/Card.tsx"],"sourcesContent":["import { forwardRef, type ElementType, type HTMLAttributes } from 'react';\nimport { cn } from '@/utils/cn';\nimport type {\n PolymorphicComponent,\n PolymorphicProps,\n PolymorphicPropsWithRef,\n} from '@/utils/polymorphic';\nimport styles from './Card.module.css';\n\nexport interface CardOwnProps {\n /** @default 'outline' */\n variant?: 'outline' | 'elevated' | 'filled';\n /**\n * Inner spacing, shared by the header, body and footer.\n * @default 'md'\n */\n padding?: 'none' | 'sm' | 'md' | 'lg';\n}\n\nexport type CardProps<As extends ElementType = 'div'> = PolymorphicPropsWithRef<As, CardOwnProps>;\n\n/**\n * Surface that groups related content. Use `as=\"article\"` or `as=\"section\"` when the content\n * stands on its own, and `CardHeader`, `CardBody` and `CardFooter` to lay it out.\n */\nexport const Card = forwardRef<HTMLDivElement, PolymorphicProps<'div', CardOwnProps>>(function Card(\n { as: Component = 'div', variant = 'outline', padding = 'md', className, ...props },\n ref,\n) {\n return (\n <Component\n ref={ref}\n className={cn(styles.card, styles[variant], styles[padding], className)}\n {...props}\n />\n );\n}) as PolymorphicComponent<'div', CardOwnProps>;\n\nexport type CardSectionProps = HTMLAttributes<HTMLDivElement>;\n\n/** Top of a card, usually a heading with an optional action beside it. */\nexport const CardHeader = forwardRef<HTMLDivElement, CardSectionProps>(function CardHeader(\n { className, ...props },\n ref,\n) {\n return <div ref={ref} className={cn(styles.header, className)} {...props} />;\n});\n\n/** Main content of a card. */\nexport const CardBody = forwardRef<HTMLDivElement, CardSectionProps>(function CardBody(\n { className, ...props },\n ref,\n) {\n return <div ref={ref} className={cn(styles.body, className)} {...props} />;\n});\n\n/** Bottom of a card, usually actions. */\nexport const CardFooter = forwardRef<HTMLDivElement, CardSectionProps>(function CardFooter(\n { className, ...props },\n ref,\n) {\n return <div ref={ref} className={cn(styles.footer, className)} {...props} />;\n});\n"],"mappings":";;;;;;AAyBA,IAAaE,IAAOC,EAAkE,SACpF,EAAE,IAAIC,IAAY,OAAO,aAAU,WAAW,aAAU,MAAM,cAAW,GAAGC,KAC5E,GACA;CACA,OACE,kBAACD,GAAD;EACO;EACL,WAAWE,EAAGN,EAAO,MAAMA,EAAOO,IAAUP,EAAOQ,IAAUC,CAAS;EACtE,GAAIJ;CACL,CAAA;AAEL,CAAC,GAKYK,IAAaP,EAA6C,SACrE,EAAE,cAAW,GAAGE,KAChB,GACA;CACA,OAAO,kBAAC,OAAD;EAAU;EAAK,WAAWC,EAAGN,EAAO,QAAQS,CAAS;EAAG,GAAIJ;CAAQ,CAAA;AAC7E,CAAC,GAGYM,IAAWR,EAA6C,SACnE,EAAE,cAAW,GAAGE,KAChB,GACA;CACA,OAAO,kBAAC,OAAD;EAAU;EAAK,WAAWC,EAAGN,EAAO,MAAMS,CAAS;EAAG,GAAIJ;CAAQ,CAAA;AAC3E,CAAC,GAGYO,IAAaT,EAA6C,SACrE,EAAE,cAAW,GAAGE,KAChB,GACA;CACA,OAAO,kBAAC,OAAD;EAAU;EAAK,WAAWC,EAAGN,EAAO,QAAQS,CAAS;EAAG,GAAIJ;CAAQ,CAAA;AAC7E,CAAC"}
@@ -0,0 +1,17 @@
1
+ // src/components/Card/Card.module.css
2
+ var e = "onyx-card-Cb1o4", t = "onyx-outline-5JlQf", n = "onyx-elevated-5VEDw", r = "onyx-filled-wikYw", i = "onyx-none-GcNRH", a = "onyx-sm-J1U3g", o = "onyx-md-hGw-i", s = "onyx-lg-Qu3G6", c = "onyx-header-PTXf2", l = "onyx-body-W441Z", u = "onyx-footer-Mu-JC", d = {
3
+ card: e,
4
+ outline: t,
5
+ elevated: n,
6
+ filled: r,
7
+ none: i,
8
+ sm: a,
9
+ md: o,
10
+ lg: s,
11
+ header: c,
12
+ body: l,
13
+ footer: u
14
+ };
15
+ export { l as body, e as card, d as default, n as elevated, r as filled, u as footer, c as header, s as lg, o as md, i as none, t as outline, a as sm };
16
+
17
+ //# sourceMappingURL=Card.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.module.js","names":["card","outline","elevated","filled","none","sm","md","lg","header","body","footer","Card_module_default"],"sources":["../../../src/components/Card/Card.module.css"],"sourcesContent":[".card {\n --card-padding: var(--space-5);\n\n display: flex;\n flex-direction: column;\n min-width: 0;\n overflow: hidden;\n color: var(--color-text);\n border: var(--border-width-thin) solid transparent;\n border-radius: var(--radius-xl);\n}\n\n.outline {\n background-color: var(--color-surface);\n border-color: var(--color-border);\n}\n\n.elevated {\n background-color: var(--color-surface-raised);\n border-color: var(--color-border);\n box-shadow: var(--shadow-md);\n}\n\n.filled {\n background-color: var(--color-bg-subtle);\n}\n\n.none {\n --card-padding: 0;\n}\n\n.sm {\n --card-padding: var(--space-3);\n}\n\n.md {\n --card-padding: var(--space-5);\n}\n\n.lg {\n --card-padding: var(--space-8);\n}\n\n.header,\n.body,\n.footer {\n padding: var(--card-padding);\n}\n\n.header {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-2) var(--space-4);\n align-items: flex-start;\n justify-content: space-between;\n}\n\n.header + .body {\n padding-top: 0;\n}\n\n.body {\n display: grid;\n flex: 1;\n gap: var(--space-3);\n align-content: start;\n}\n\n.footer {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-3);\n align-items: center;\n justify-content: flex-end;\n border-top: var(--border-width-thin) solid var(--color-border);\n}\n"],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export { Card, CardBody, CardFooter, CardHeader } from './Card.js';
2
+ export type { CardOwnProps, CardProps, CardSectionProps } from './Card.js';
@@ -0,0 +1,21 @@
1
+ import { InputHTMLAttributes, ReactNode } from 'react';
2
+ export type ChoiceSize = 'sm' | 'md' | 'lg';
3
+ export interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {
4
+ /** Label shown next to the box. Without it, name the checkbox with `aria-label`. */
5
+ children?: ReactNode;
6
+ /** Extra text below the label, linked with `aria-describedby`. */
7
+ description?: ReactNode;
8
+ /**
9
+ * Shows a dash for a "some selected" state. It is visual and announced as mixed, but clicking
10
+ * still toggles `checked`.
11
+ * @default false
12
+ */
13
+ indeterminate?: boolean;
14
+ /** Marks the checkbox as invalid. */
15
+ invalid?: boolean;
16
+ /** @default 'md' */
17
+ size?: ChoiceSize;
18
+ /** Called with the new checked state. */
19
+ onCheckedChange?: (checked: boolean) => void;
20
+ }
21
+ export declare const Checkbox: import('react').ForwardRefExoticComponent<CheckboxProps & import('react').RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,52 @@
1
+ "use client";
2
+ import { cn as e } from "../../utils/cn.js";
3
+ import { CheckIcon as t, MinusIcon as n } from "../Icon/icons.js";
4
+ import { mergeRefs as r } from "../../utils/mergeRefs.js";
5
+ import i from "../../styles/choice.module.js";
6
+ import a from "./Checkbox.module.js";
7
+ import { forwardRef as o, useEffect as s, useId as c, useMemo as l, useRef as u } from "react";
8
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
9
+ // src/components/Checkbox/Checkbox.tsx
10
+ var p = o(function({ children: o, description: p, indeterminate: m = !1, invalid: h = !1, size: g = "md", onCheckedChange: _, onChange: v, className: y, style: b, id: x, "aria-describedby": S, ...C }, w) {
11
+ let T = c(), E = x ?? T, D = `${E}-description`, O = u(null), k = l(() => r(w, O), [w]);
12
+ return s(() => {
13
+ O.current && (O.current.indeterminate = m);
14
+ }), /* @__PURE__ */ f("div", {
15
+ className: e(i.choice, i[g], y),
16
+ style: b,
17
+ children: [
18
+ /* @__PURE__ */ f("span", {
19
+ className: i.control,
20
+ children: [/* @__PURE__ */ d("input", {
21
+ ref: k,
22
+ type: "checkbox",
23
+ id: E,
24
+ "aria-invalid": h || void 0,
25
+ "aria-describedby": e(p !== void 0 && D, S) || void 0,
26
+ className: i.input,
27
+ onChange: (e) => {
28
+ v?.(e), _?.(e.target.checked);
29
+ },
30
+ ...C
31
+ }), /* @__PURE__ */ f("span", {
32
+ className: e(i.box, a.box),
33
+ "aria-hidden": "true",
34
+ children: [/* @__PURE__ */ d(t, { className: a.check }), /* @__PURE__ */ d(n, { className: a.dash })]
35
+ })]
36
+ }),
37
+ o !== void 0 && /* @__PURE__ */ d("label", {
38
+ htmlFor: E,
39
+ className: i.label,
40
+ children: o
41
+ }),
42
+ p !== void 0 && /* @__PURE__ */ d("span", {
43
+ id: D,
44
+ className: i.description,
45
+ children: p
46
+ })
47
+ ]
48
+ });
49
+ });
50
+ export { p as Checkbox };
51
+
52
+ //# sourceMappingURL=Checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.js","names":["choice","styles","choice_module_default","Checkbox_module_default","Checkbox","forwardRef","describedBy","props","generatedId","useId","inputId","id","descriptionId","inputRef","useRef","mergedRef","useMemo","mergeRefs","ref","useEffect","indeterminate","cn","size","className","invalid","description","onChange","event","onCheckedChange","CheckIcon","MinusIcon","children"],"sources":["../../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["import {\n forwardRef,\n useEffect,\n useId,\n useMemo,\n useRef,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '@/utils/cn';\nimport { mergeRefs } from '@/utils/mergeRefs';\nimport choice from '@/styles/choice.module.css';\nimport { CheckIcon, MinusIcon } from '../Icon';\nimport styles from './Checkbox.module.css';\n\nexport type ChoiceSize = 'sm' | 'md' | 'lg';\n\nexport interface CheckboxProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'size'\n> {\n /** Label shown next to the box. Without it, name the checkbox with `aria-label`. */\n children?: ReactNode;\n /** Extra text below the label, linked with `aria-describedby`. */\n description?: ReactNode;\n /**\n * Shows a dash for a \"some selected\" state. It is visual and announced as mixed, but clicking\n * still toggles `checked`.\n * @default false\n */\n indeterminate?: boolean;\n /** Marks the checkbox as invalid. */\n invalid?: boolean;\n /** @default 'md' */\n size?: ChoiceSize;\n /** Called with the new checked state. */\n onCheckedChange?: (checked: boolean) => void;\n}\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n {\n children,\n description,\n indeterminate = false,\n invalid = false,\n size = 'md',\n onCheckedChange,\n onChange,\n className,\n style,\n id,\n 'aria-describedby': describedBy,\n ...props\n },\n ref,\n) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const descriptionId = `${inputId}-description`;\n const inputRef = useRef<HTMLInputElement>(null);\n const mergedRef = useMemo(() => mergeRefs(ref, inputRef), [ref]);\n\n useEffect(() => {\n if (inputRef.current) inputRef.current.indeterminate = indeterminate;\n });\n\n return (\n <div className={cn(choice.choice, choice[size], className)} style={style}>\n <span className={choice.control}>\n <input\n ref={mergedRef}\n type=\"checkbox\"\n id={inputId}\n aria-invalid={invalid || undefined}\n aria-describedby={\n cn(description !== undefined && descriptionId, describedBy) || undefined\n }\n className={choice.input}\n onChange={(event) => {\n onChange?.(event);\n onCheckedChange?.(event.target.checked);\n }}\n {...props}\n />\n <span className={cn(choice.box, styles.box)} aria-hidden=\"true\">\n <CheckIcon className={styles.check} />\n <MinusIcon className={styles.dash} />\n </span>\n </span>\n {children !== undefined && (\n <label htmlFor={inputId} className={choice.label}>\n {children}\n </label>\n )}\n {description !== undefined && (\n <span id={descriptionId} className={choice.description}>\n {description}\n </span>\n )}\n </div>\n );\n});\n"],"mappings":";;;;;;;;;AAuCA,IAAaI,IAAWC,EAA4C,SAClE,EACE,aACA,gBACA,mBAAgB,IAChB,aAAU,IACV,UAAO,MACP,oBACA,aACA,cACA,UACA,OACA,oBAAoBC,GACpB,GAAGC,KAEL,GACA;CACA,IAAMC,IAAcC,EAAM,GACpBC,IAAUC,KAAMH,GAChBI,IAAgB,GAAGF,EAAQ,eAC3BG,IAAWC,EAAyB,IAAI,GACxCC,IAAYC,QAAcC,EAAUC,GAAKL,CAAQ,GAAG,CAACK,CAAG,CAAC;CAM/D,OAJAC,QAAgB;EACd,AAAIN,EAAS,YAAS,EAAS,QAAQ,gBAAgBO;CACzD,CAAC,GAGC,kBAAC,OAAD;EAAK,WAAWC,EAAGrB,EAAO,QAAQA,EAAOsB,IAAOC,CAAS;EAAU;EAAnE,UAAA;GACE,kBAAC,QAAD;IAAM,WAAWvB,EAAO;IAAxB,UAAA,CACE,kBAAC,SAAD;KACE,KAAKe;KACL,MAAK;KACL,IAAIL;KACJ,gBAAcc,KAAW,KAAA;KACzB,oBACEH,EAAGI,MAAgB,KAAA,KAAab,GAAeN,CAAW,KAAK,KAAA;KAEjE,WAAWN,EAAO;KAClB,WAAW,MAAU;MAEnB,AADA0B,IAAWC,CAAK,GAChBC,IAAkBD,EAAM,OAAO,OAAO;KACxC;KACA,GAAIpB;IACL,CAAA,GACD,kBAAC,QAAD;KAAM,WAAWc,EAAGrB,EAAO,KAAKC,EAAO,GAAG;KAAG,eAAY;KAAzD,UAAA,CACE,kBAAC4B,GAAD,EAAW,WAAW5B,EAAO,MAAQ,CAAA,GACrC,kBAAC6B,GAAD,EAAW,WAAW7B,EAAO,KAAO,CAAA,CAChC;IACF,CAAA,CAAA;;GACL8B,MAAa,KAAA,KACZ,kBAAC,SAAD;IAAO,SAASrB;IAAS,WAAWV,EAAO;IACxC;GACI,CAAA;GAERyB,MAAgB,KAAA,KACf,kBAAC,QAAD;IAAM,IAAIb;IAAe,WAAWZ,EAAO;IACxC,UAAAyB;GACG,CAAA;EAEL;;AAET,CAAC"}