@badnpm/ui 0.0.0-stage → 0.0.1

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 (310) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +193 -2
  3. package/dist/cjs/components/accordion.cjs +24 -0
  4. package/dist/cjs/components/alert-dialog.cjs +56 -0
  5. package/dist/cjs/components/alert.cjs +34 -0
  6. package/dist/cjs/components/aspect-ratio.cjs +12 -0
  7. package/dist/cjs/components/attachment.cjs +80 -0
  8. package/dist/cjs/components/avatar.cjs +31 -0
  9. package/dist/cjs/components/badge.cjs +38 -0
  10. package/dist/cjs/components/breadcrumb.cjs +46 -0
  11. package/dist/cjs/components/bubble.cjs +66 -0
  12. package/dist/cjs/components/button-group.cjs +43 -0
  13. package/dist/cjs/components/button.cjs +41 -0
  14. package/dist/cjs/components/calendar.cjs +100 -0
  15. package/dist/cjs/components/card.cjs +34 -0
  16. package/dist/cjs/components/carousel.cjs +113 -0
  17. package/dist/cjs/components/chart.cjs +160 -0
  18. package/dist/cjs/components/checkbox.cjs +13 -0
  19. package/dist/cjs/components/code-block.cjs +110 -0
  20. package/dist/cjs/components/collapsible.cjs +18 -0
  21. package/dist/cjs/components/combobox.cjs +96 -0
  22. package/dist/cjs/components/command.cjs +46 -0
  23. package/dist/cjs/components/context-menu.cjs +69 -0
  24. package/dist/cjs/components/dialog.cjs +50 -0
  25. package/dist/cjs/components/drawer.cjs +108 -0
  26. package/dist/cjs/components/dropdown-menu.cjs +68 -0
  27. package/dist/cjs/components/empty.cjs +42 -0
  28. package/dist/cjs/components/field.cjs +80 -0
  29. package/dist/cjs/components/hover-card.cjs +20 -0
  30. package/dist/cjs/components/input-group.cjs +66 -0
  31. package/dist/cjs/components/input-otp.cjs +46 -0
  32. package/dist/cjs/components/input.cjs +11 -0
  33. package/dist/cjs/components/item.cjs +91 -0
  34. package/dist/cjs/components/kbd.cjs +14 -0
  35. package/dist/cjs/components/label.cjs +11 -0
  36. package/dist/cjs/components/marker.cjs +41 -0
  37. package/dist/cjs/components/menubar.cjs +75 -0
  38. package/dist/cjs/components/message-scroller.cjs +45 -0
  39. package/dist/cjs/components/message.cjs +30 -0
  40. package/dist/cjs/components/native-select.cjs +19 -0
  41. package/dist/cjs/components/navigation-menu.cjs +43 -0
  42. package/dist/cjs/components/pagination.cjs +36 -0
  43. package/dist/cjs/components/popover.cjs +31 -0
  44. package/dist/cjs/components/progress.cjs +28 -0
  45. package/dist/cjs/components/questionnaire.cjs +70 -0
  46. package/dist/cjs/components/radio-group.cjs +16 -0
  47. package/dist/cjs/components/resizable.cjs +39 -0
  48. package/dist/cjs/components/scroll-area.cjs +15 -0
  49. package/dist/cjs/components/select.cjs +47 -0
  50. package/dist/cjs/components/separator.cjs +11 -0
  51. package/dist/cjs/components/sheet.cjs +47 -0
  52. package/dist/cjs/components/sidebar.cjs +301 -0
  53. package/dist/cjs/components/skeleton.cjs +10 -0
  54. package/dist/cjs/components/slider.cjs +16 -0
  55. package/dist/cjs/components/spinner.cjs +11 -0
  56. package/dist/cjs/components/switch.cjs +12 -0
  57. package/dist/cjs/components/table.cjs +38 -0
  58. package/dist/cjs/components/tabs.cjs +37 -0
  59. package/dist/cjs/components/textarea.cjs +10 -0
  60. package/dist/cjs/components/theme-toggle.cjs +19 -0
  61. package/dist/cjs/components/toast.cjs +82 -0
  62. package/dist/cjs/components/toggle-group.cjs +47 -0
  63. package/dist/cjs/components/toggle.cjs +30 -0
  64. package/dist/cjs/components/tooltip.cjs +24 -0
  65. package/dist/cjs/components/trace.cjs +40 -0
  66. package/dist/cjs/hooks/use-highlighted-code.cjs +73 -0
  67. package/dist/cjs/hooks/use-hydrated.cjs +15 -0
  68. package/dist/cjs/hooks/use-mobile.cjs +36 -0
  69. package/dist/cjs/index.cjs +497 -0
  70. package/dist/cjs/lib/highlighter.cjs +96 -0
  71. package/dist/cjs/lib/preference.cjs +40 -0
  72. package/dist/cjs/providers/preference-provider.cjs +127 -0
  73. package/dist/cjs/providers/theme-provider.cjs +181 -0
  74. package/dist/cjs/types/components/accordion.d.ts +9 -0
  75. package/dist/cjs/types/components/alert-dialog.d.ts +20 -0
  76. package/dist/cjs/types/components/alert.d.ts +13 -0
  77. package/dist/cjs/types/components/aspect-ratio.d.ts +7 -0
  78. package/dist/cjs/types/components/attachment.d.ts +26 -0
  79. package/dist/cjs/types/components/avatar.d.ts +13 -0
  80. package/dist/cjs/types/components/badge.d.ts +11 -0
  81. package/dist/cjs/types/components/breadcrumb.d.ts +12 -0
  82. package/dist/cjs/types/components/bubble.d.ts +19 -0
  83. package/dist/cjs/types/components/button-group.d.ts +14 -0
  84. package/dist/cjs/types/components/button.d.ts +12 -0
  85. package/dist/cjs/types/components/calendar.d.ts +12 -0
  86. package/dist/cjs/types/components/card.d.ts +13 -0
  87. package/dist/cjs/types/components/carousel.d.ts +31 -0
  88. package/dist/cjs/types/components/chart.d.ts +47 -0
  89. package/dist/cjs/types/components/checkbox.d.ts +6 -0
  90. package/dist/cjs/types/components/code-block.d.ts +29 -0
  91. package/dist/cjs/types/components/collapsible.d.ts +8 -0
  92. package/dist/cjs/types/components/combobox.d.ts +26 -0
  93. package/dist/cjs/types/components/command.d.ts +21 -0
  94. package/dist/cjs/types/components/context-menu.d.ts +31 -0
  95. package/dist/cjs/types/components/dialog.d.ts +19 -0
  96. package/dist/cjs/types/components/direction.d.ts +1 -0
  97. package/dist/cjs/types/components/drawer.d.ts +18 -0
  98. package/dist/cjs/types/components/dropdown-menu.d.ts +31 -0
  99. package/dist/cjs/types/components/empty.d.ts +15 -0
  100. package/dist/cjs/types/components/field.d.ts +28 -0
  101. package/dist/cjs/types/components/hover-card.d.ts +8 -0
  102. package/dist/cjs/types/components/index.d.ts +65 -0
  103. package/dist/cjs/types/components/input-group.d.ts +21 -0
  104. package/dist/cjs/types/components/input-otp.d.ts +13 -0
  105. package/dist/cjs/types/components/input.d.ts +5 -0
  106. package/dist/cjs/types/components/item.d.ts +25 -0
  107. package/dist/cjs/types/components/kbd.d.ts +6 -0
  108. package/dist/cjs/types/components/label.d.ts +5 -0
  109. package/dist/cjs/types/components/marker.d.ts +13 -0
  110. package/dist/cjs/types/components/menubar.d.ts +31 -0
  111. package/dist/cjs/types/components/message-scroller.d.ts +13 -0
  112. package/dist/cjs/types/components/message.d.ts +12 -0
  113. package/dist/cjs/types/components/native-select.d.ts +10 -0
  114. package/dist/cjs/types/components/navigation-menu.d.ts +15 -0
  115. package/dist/cjs/types/components/pagination.d.ts +19 -0
  116. package/dist/cjs/types/components/popover.d.ts +11 -0
  117. package/dist/cjs/types/components/progress.d.ts +10 -0
  118. package/dist/cjs/types/components/questionnaire.d.ts +21 -0
  119. package/dist/cjs/types/components/radio-group.d.ts +8 -0
  120. package/dist/cjs/types/components/resizable.d.ts +10 -0
  121. package/dist/cjs/types/components/scroll-area.d.ts +7 -0
  122. package/dist/cjs/types/components/select.d.ts +17 -0
  123. package/dist/cjs/types/components/separator.d.ts +6 -0
  124. package/dist/cjs/types/components/sheet.d.ts +16 -0
  125. package/dist/cjs/types/components/sidebar.d.ts +66 -0
  126. package/dist/cjs/types/components/skeleton.d.ts +5 -0
  127. package/dist/cjs/types/components/slider.d.ts +6 -0
  128. package/dist/cjs/types/components/spinner.d.ts +5 -0
  129. package/dist/cjs/types/components/switch.d.ts +8 -0
  130. package/dist/cjs/types/components/table.d.ts +12 -0
  131. package/dist/cjs/types/components/tabs.d.ts +14 -0
  132. package/dist/cjs/types/components/textarea.d.ts +5 -0
  133. package/dist/cjs/types/components/theme-toggle.d.ts +14 -0
  134. package/dist/cjs/types/components/toast.d.ts +19 -0
  135. package/dist/cjs/types/components/toggle-group.d.ts +13 -0
  136. package/dist/cjs/types/components/toggle.d.ts +12 -0
  137. package/dist/cjs/types/components/tooltip.d.ts +9 -0
  138. package/dist/cjs/types/components/trace.d.ts +20 -0
  139. package/dist/cjs/types/hooks/index.d.ts +3 -0
  140. package/dist/cjs/types/hooks/use-highlighted-code.d.ts +3 -0
  141. package/dist/cjs/types/hooks/use-hydrated.d.ts +4 -0
  142. package/dist/cjs/types/hooks/use-mobile.d.ts +3 -0
  143. package/dist/cjs/types/index.d.ts +73 -0
  144. package/dist/cjs/types/lib/highlighter.d.ts +11 -0
  145. package/dist/cjs/types/lib/index.d.ts +3 -0
  146. package/dist/cjs/types/lib/preference.d.ts +85 -0
  147. package/dist/cjs/types/lib/utils.d.ts +1 -0
  148. package/dist/cjs/types/package.json +1 -0
  149. package/dist/cjs/types/providers/index.d.ts +2 -0
  150. package/dist/cjs/types/providers/preference-provider.d.ts +20 -0
  151. package/dist/cjs/types/providers/theme-provider.d.ts +25 -0
  152. package/dist/esm/components/accordion.js +19 -0
  153. package/dist/esm/components/alert-dialog.js +43 -0
  154. package/dist/esm/components/alert.js +29 -0
  155. package/dist/esm/components/aspect-ratio.js +10 -0
  156. package/dist/esm/components/attachment.js +70 -0
  157. package/dist/esm/components/avatar.js +24 -0
  158. package/dist/esm/components/badge.js +35 -0
  159. package/dist/esm/components/breadcrumb.js +38 -0
  160. package/dist/esm/components/bubble.js +61 -0
  161. package/dist/esm/components/button-group.js +38 -0
  162. package/dist/esm/components/button.js +38 -0
  163. package/dist/esm/components/calendar.js +78 -0
  164. package/dist/esm/components/card.js +26 -0
  165. package/dist/esm/components/carousel.js +87 -0
  166. package/dist/esm/components/chart.js +133 -0
  167. package/dist/esm/components/checkbox.js +11 -0
  168. package/dist/esm/components/code-block.js +82 -0
  169. package/dist/esm/components/collapsible.js +14 -0
  170. package/dist/esm/components/combobox.js +60 -0
  171. package/dist/esm/components/command.js +36 -0
  172. package/dist/esm/components/context-menu.js +53 -0
  173. package/dist/esm/components/dialog.js +39 -0
  174. package/dist/esm/components/drawer.js +77 -0
  175. package/dist/esm/components/dropdown-menu.js +52 -0
  176. package/dist/esm/components/empty.js +35 -0
  177. package/dist/esm/components/field.js +69 -0
  178. package/dist/esm/components/hover-card.js +16 -0
  179. package/dist/esm/components/input-group.js +59 -0
  180. package/dist/esm/components/input-otp.js +22 -0
  181. package/dist/esm/components/input.js +9 -0
  182. package/dist/esm/components/item.js +80 -0
  183. package/dist/esm/components/kbd.js +11 -0
  184. package/dist/esm/components/label.js +9 -0
  185. package/dist/esm/components/marker.js +36 -0
  186. package/dist/esm/components/menubar.js +58 -0
  187. package/dist/esm/components/message-scroller.js +27 -0
  188. package/dist/esm/components/message.js +23 -0
  189. package/dist/esm/components/native-select.js +15 -0
  190. package/dist/esm/components/navigation-menu.js +33 -0
  191. package/dist/esm/components/pagination.js +28 -0
  192. package/dist/esm/components/popover.js +24 -0
  193. package/dist/esm/components/progress.js +22 -0
  194. package/dist/esm/components/questionnaire.js +54 -0
  195. package/dist/esm/components/radio-group.js +13 -0
  196. package/dist/esm/components/resizable.js +16 -0
  197. package/dist/esm/components/scroll-area.js +12 -0
  198. package/dist/esm/components/select.js +36 -0
  199. package/dist/esm/components/separator.js +9 -0
  200. package/dist/esm/components/sheet.js +38 -0
  201. package/dist/esm/components/sidebar.js +257 -0
  202. package/dist/esm/components/skeleton.js +8 -0
  203. package/dist/esm/components/slider.js +14 -0
  204. package/dist/esm/components/spinner.js +9 -0
  205. package/dist/esm/components/switch.js +10 -0
  206. package/dist/esm/components/table.js +29 -0
  207. package/dist/esm/components/tabs.js +31 -0
  208. package/dist/esm/components/textarea.js +8 -0
  209. package/dist/esm/components/theme-toggle.js +17 -0
  210. package/dist/esm/components/toast.js +68 -0
  211. package/dist/esm/components/toggle-group.js +25 -0
  212. package/dist/esm/components/toggle.js +27 -0
  213. package/dist/esm/components/tooltip.js +19 -0
  214. package/dist/esm/components/trace.js +31 -0
  215. package/dist/esm/hooks/use-highlighted-code.js +52 -0
  216. package/dist/esm/hooks/use-hydrated.js +13 -0
  217. package/dist/esm/hooks/use-mobile.js +15 -0
  218. package/dist/esm/index.js +73 -0
  219. package/dist/esm/lib/highlighter.js +93 -0
  220. package/dist/esm/lib/preference.js +35 -0
  221. package/dist/esm/providers/preference-provider.js +124 -0
  222. package/dist/esm/providers/theme-provider.js +178 -0
  223. package/dist/styles/custom.css +2 -0
  224. package/dist/styles/font/LICENSE +93 -0
  225. package/dist/styles/font/files/11944884.woff2 +0 -0
  226. package/dist/styles/font/files/3f081d19.woff2 +0 -0
  227. package/dist/styles/font/files/aa4aa22f.woff2 +0 -0
  228. package/dist/styles/font/files/ba1a9b92.woff2 +0 -0
  229. package/dist/styles/font/files/eadd8e6c.woff2 +0 -0
  230. package/dist/styles/font/geist.css +2 -0
  231. package/dist/styles/index.css +2 -0
  232. package/dist/types/components/accordion.d.ts +9 -0
  233. package/dist/types/components/alert-dialog.d.ts +20 -0
  234. package/dist/types/components/alert.d.ts +13 -0
  235. package/dist/types/components/aspect-ratio.d.ts +7 -0
  236. package/dist/types/components/attachment.d.ts +26 -0
  237. package/dist/types/components/avatar.d.ts +13 -0
  238. package/dist/types/components/badge.d.ts +11 -0
  239. package/dist/types/components/breadcrumb.d.ts +12 -0
  240. package/dist/types/components/bubble.d.ts +19 -0
  241. package/dist/types/components/button-group.d.ts +14 -0
  242. package/dist/types/components/button.d.ts +12 -0
  243. package/dist/types/components/calendar.d.ts +12 -0
  244. package/dist/types/components/card.d.ts +13 -0
  245. package/dist/types/components/carousel.d.ts +31 -0
  246. package/dist/types/components/chart.d.ts +47 -0
  247. package/dist/types/components/checkbox.d.ts +6 -0
  248. package/dist/types/components/code-block.d.ts +29 -0
  249. package/dist/types/components/collapsible.d.ts +8 -0
  250. package/dist/types/components/combobox.d.ts +26 -0
  251. package/dist/types/components/command.d.ts +21 -0
  252. package/dist/types/components/context-menu.d.ts +31 -0
  253. package/dist/types/components/dialog.d.ts +19 -0
  254. package/dist/types/components/direction.d.ts +1 -0
  255. package/dist/types/components/drawer.d.ts +18 -0
  256. package/dist/types/components/dropdown-menu.d.ts +31 -0
  257. package/dist/types/components/empty.d.ts +15 -0
  258. package/dist/types/components/field.d.ts +28 -0
  259. package/dist/types/components/hover-card.d.ts +8 -0
  260. package/dist/types/components/index.d.ts +65 -0
  261. package/dist/types/components/input-group.d.ts +21 -0
  262. package/dist/types/components/input-otp.d.ts +13 -0
  263. package/dist/types/components/input.d.ts +5 -0
  264. package/dist/types/components/item.d.ts +25 -0
  265. package/dist/types/components/kbd.d.ts +6 -0
  266. package/dist/types/components/label.d.ts +5 -0
  267. package/dist/types/components/marker.d.ts +13 -0
  268. package/dist/types/components/menubar.d.ts +31 -0
  269. package/dist/types/components/message-scroller.d.ts +13 -0
  270. package/dist/types/components/message.d.ts +12 -0
  271. package/dist/types/components/native-select.d.ts +10 -0
  272. package/dist/types/components/navigation-menu.d.ts +15 -0
  273. package/dist/types/components/pagination.d.ts +19 -0
  274. package/dist/types/components/popover.d.ts +11 -0
  275. package/dist/types/components/progress.d.ts +10 -0
  276. package/dist/types/components/questionnaire.d.ts +21 -0
  277. package/dist/types/components/radio-group.d.ts +8 -0
  278. package/dist/types/components/resizable.d.ts +10 -0
  279. package/dist/types/components/scroll-area.d.ts +7 -0
  280. package/dist/types/components/select.d.ts +17 -0
  281. package/dist/types/components/separator.d.ts +6 -0
  282. package/dist/types/components/sheet.d.ts +16 -0
  283. package/dist/types/components/sidebar.d.ts +66 -0
  284. package/dist/types/components/skeleton.d.ts +5 -0
  285. package/dist/types/components/slider.d.ts +6 -0
  286. package/dist/types/components/spinner.d.ts +5 -0
  287. package/dist/types/components/switch.d.ts +8 -0
  288. package/dist/types/components/table.d.ts +12 -0
  289. package/dist/types/components/tabs.d.ts +14 -0
  290. package/dist/types/components/textarea.d.ts +5 -0
  291. package/dist/types/components/theme-toggle.d.ts +14 -0
  292. package/dist/types/components/toast.d.ts +19 -0
  293. package/dist/types/components/toggle-group.d.ts +13 -0
  294. package/dist/types/components/toggle.d.ts +12 -0
  295. package/dist/types/components/tooltip.d.ts +9 -0
  296. package/dist/types/components/trace.d.ts +20 -0
  297. package/dist/types/hooks/index.d.ts +3 -0
  298. package/dist/types/hooks/use-highlighted-code.d.ts +3 -0
  299. package/dist/types/hooks/use-hydrated.d.ts +4 -0
  300. package/dist/types/hooks/use-mobile.d.ts +3 -0
  301. package/dist/types/index.d.ts +73 -0
  302. package/dist/types/lib/highlighter.d.ts +11 -0
  303. package/dist/types/lib/index.d.ts +3 -0
  304. package/dist/types/lib/preference.d.ts +85 -0
  305. package/dist/types/lib/utils.d.ts +1 -0
  306. package/dist/types/providers/index.d.ts +2 -0
  307. package/dist/types/providers/preference-provider.d.ts +20 -0
  308. package/dist/types/providers/theme-provider.d.ts +25 -0
  309. package/dist/umd/index.js +86818 -0
  310. package/package.json +116 -4
@@ -0,0 +1,35 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { cva } from 'class-variance-authority';
3
+ import { cn } from 'cn';
4
+
5
+ function Empty({ className, ...props }) {
6
+ return (jsx("div", { "data-slot": "empty", className: cn("flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance", className), ...props }));
7
+ }
8
+ function EmptyHeader({ className, ...props }) {
9
+ return (jsx("div", { "data-slot": "empty-header", className: cn("flex max-w-sm flex-col items-center gap-2", className), ...props }));
10
+ }
11
+ const emptyMediaVariants = cva("mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0", {
12
+ variants: {
13
+ variant: {
14
+ default: "bg-transparent",
15
+ icon: "flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4",
16
+ },
17
+ },
18
+ defaultVariants: {
19
+ variant: "default",
20
+ },
21
+ });
22
+ function EmptyMedia({ className, variant = "default", ...props }) {
23
+ return (jsx("div", { "data-slot": "empty-icon", "data-variant": variant, className: cn(emptyMediaVariants({ variant, className })), ...props }));
24
+ }
25
+ function EmptyTitle({ className, ...props }) {
26
+ return (jsx("div", { "data-slot": "empty-title", className: cn("font-heading text-sm font-medium tracking-tight", className), ...props }));
27
+ }
28
+ function EmptyDescription({ className, ...props }) {
29
+ return (jsx("div", { "data-slot": "empty-description", className: cn("text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", className), ...props }));
30
+ }
31
+ function EmptyContent({ className, ...props }) {
32
+ return (jsx("div", { "data-slot": "empty-content", className: cn("flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance", className), ...props }));
33
+ }
34
+
35
+ export { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle };
@@ -0,0 +1,69 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { useMemo } from 'react';
3
+ import { cva } from 'class-variance-authority';
4
+ import { cn } from 'cn';
5
+ import { Label } from './label.js';
6
+ import { Separator } from './separator.js';
7
+
8
+ function FieldSet({ className, ...props }) {
9
+ return (jsx("fieldset", { "data-slot": "field-set", className: cn("flex flex-col gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3", className), ...props }));
10
+ }
11
+ function FieldLegend({ className, variant = "legend", ...props }) {
12
+ return (jsx("legend", { "data-slot": "field-legend", "data-variant": variant, className: cn("mb-1.5 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base", className), ...props }));
13
+ }
14
+ function FieldGroup({ className, ...props }) {
15
+ return (jsx("div", { "data-slot": "field-group", className: cn("group/field-group @container/field-group flex w-full flex-col gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4", className), ...props }));
16
+ }
17
+ const fieldVariants = cva("group/field flex w-full gap-2 data-[invalid=true]:text-destructive", {
18
+ variants: {
19
+ orientation: {
20
+ vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
21
+ horizontal: "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",
22
+ responsive: "flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",
23
+ },
24
+ },
25
+ defaultVariants: {
26
+ orientation: "vertical",
27
+ },
28
+ });
29
+ function Field({ className, orientation = "vertical", ...props }) {
30
+ return (jsx("div", { role: "group", "data-slot": "field", "data-orientation": orientation, className: cn(fieldVariants({ orientation }), className), ...props }));
31
+ }
32
+ function FieldContent({ className, ...props }) {
33
+ return (jsx("div", { "data-slot": "field-content", className: cn("group/field-content flex flex-1 flex-col gap-0.5 leading-snug", className), ...props }));
34
+ }
35
+ function FieldLabel({ className, ...props }) {
36
+ return (jsx(Label, { "data-slot": "field-label", className: cn("group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-data-checked:border-primary/30 has-data-checked:bg-primary/5 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border has-[>[data-slot=field]]:not-has-[:disabled,[data-disabled]]:hover:bg-muted/50 has-[>[data-slot=field]]:has-[:focus-visible]:border-ring has-[>[data-slot=field]]:has-[:focus-visible]:ring-3 has-[>[data-slot=field]]:has-[:focus-visible]:ring-ring/50 *:data-[slot=field]:p-2.5 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10", "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col", className), ...props }));
37
+ }
38
+ function FieldTitle({ className, ...props }) {
39
+ return (jsx("div", { "data-slot": "field-label", className: cn("flex w-fit items-center gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50", className), ...props }));
40
+ }
41
+ function FieldDescription({ className, ...props }) {
42
+ return (jsx("p", { "data-slot": "field-description", className: cn("text-left text-sm leading-normal font-normal text-muted-foreground group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5", "last:mt-0 nth-last-2:-mt-1", "[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", className), ...props }));
43
+ }
44
+ function FieldSeparator({ children, className, ...props }) {
45
+ return (jsxs("div", { "data-slot": "field-separator", "data-content": !!children, className: cn("relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2", className), ...props, children: [jsx(Separator, { className: "absolute inset-0 top-1/2" }), children && (jsx("span", { className: "relative mx-auto block w-fit bg-background px-2 text-muted-foreground", "data-slot": "field-separator-content", children: children }))] }));
46
+ }
47
+ function FieldError({ className, children, errors, ...props }) {
48
+ const content = useMemo(() => {
49
+ if (children) {
50
+ return children;
51
+ }
52
+ if (!errors?.length) {
53
+ return null;
54
+ }
55
+ const uniqueErrors = [
56
+ ...new Map(errors.map((error) => [error?.message, error])).values(),
57
+ ];
58
+ if (uniqueErrors?.length == 1) {
59
+ return uniqueErrors[0]?.message;
60
+ }
61
+ return (jsx("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: uniqueErrors.map((error, index) => error?.message && jsx("li", { children: error.message }, index)) }));
62
+ }, [children, errors]);
63
+ if (!content) {
64
+ return null;
65
+ }
66
+ return (jsx("div", { role: "alert", "data-slot": "field-error", className: cn("text-sm font-normal text-destructive", className), ...props, children: content }));
67
+ }
68
+
69
+ export { Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle };
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { PreviewCard } from '@base-ui/react/preview-card';
4
+ import { cn } from 'cn';
5
+
6
+ function HoverCard({ ...props }) {
7
+ return jsx(PreviewCard.Root, { "data-slot": "hover-card", ...props });
8
+ }
9
+ function HoverCardTrigger({ ...props }) {
10
+ return (jsx(PreviewCard.Trigger, { "data-slot": "hover-card-trigger", ...props }));
11
+ }
12
+ function HoverCardContent({ className, side = "bottom", sideOffset = 4, align = "center", alignOffset = 4, ...props }) {
13
+ return (jsx(PreviewCard.Portal, { "data-slot": "hover-card-portal", children: jsx(PreviewCard.Positioner, { align: align, alignOffset: alignOffset, side: side, sideOffset: sideOffset, className: "isolate z-50", children: jsx(PreviewCard.Popup, { "data-slot": "hover-card-content", className: cn("z-50 w-64 origin-(--transform-origin) rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className), ...props }) }) }));
14
+ }
15
+
16
+ export { HoverCard, HoverCardContent, HoverCardTrigger };
@@ -0,0 +1,59 @@
1
+ "use client";
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { cva } from 'class-variance-authority';
4
+ import { cn } from 'cn';
5
+ import { Button } from './button.js';
6
+ import { Input } from './input.js';
7
+ import { Textarea } from './textarea.js';
8
+
9
+ function InputGroup({ className, ...props }) {
10
+ return (jsx("div", { "data-slot": "input-group", role: "group", className: cn("group/input-group relative flex h-8 w-full min-w-0 items-center rounded-lg border border-input transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:bg-input/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:bg-input/30 dark:has-disabled:bg-input/80 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5", className), ...props }));
11
+ }
12
+ const inputGroupAddonVariants = cva("flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4", {
13
+ variants: {
14
+ align: {
15
+ "inline-start": "order-first pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem]",
16
+ "inline-end": "order-last pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem]",
17
+ "block-start": "order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2",
18
+ "block-end": "order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2",
19
+ },
20
+ },
21
+ defaultVariants: {
22
+ align: "inline-start",
23
+ },
24
+ });
25
+ function InputGroupAddon({ className, align = "inline-start", ...props }) {
26
+ return (jsx("div", { role: "group", "data-slot": "input-group-addon", "data-align": align, className: cn(inputGroupAddonVariants({ align }), className), onClick: (e) => {
27
+ if (e.target.closest("button")) {
28
+ return;
29
+ }
30
+ e.currentTarget.parentElement?.querySelector("input")?.focus();
31
+ }, ...props }));
32
+ }
33
+ const inputGroupButtonVariants = cva("flex items-center gap-2 text-sm shadow-none", {
34
+ variants: {
35
+ size: {
36
+ xs: "h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5",
37
+ sm: "",
38
+ "icon-xs": "size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0",
39
+ "icon-sm": "size-8 p-0 has-[>svg]:p-0",
40
+ },
41
+ },
42
+ defaultVariants: {
43
+ size: "xs",
44
+ },
45
+ });
46
+ function InputGroupButton({ className, type = "button", variant = "ghost", size = "xs", ...props }) {
47
+ return (jsx(Button, { type: type, "data-size": size, variant: variant, className: cn(inputGroupButtonVariants({ size }), className), ...props }));
48
+ }
49
+ function InputGroupText({ className, ...props }) {
50
+ return (jsx("span", { className: cn("flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4", className), ...props }));
51
+ }
52
+ function InputGroupInput({ className, ...props }) {
53
+ return (jsx(Input, { "data-slot": "input-group-control", className: cn("flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent", className), ...props }));
54
+ }
55
+ function InputGroupTextarea({ className, ...props }) {
56
+ return (jsx(Textarea, { "data-slot": "input-group-control", className: cn("flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent", className), ...props }));
57
+ }
58
+
59
+ export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea };
@@ -0,0 +1,22 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { cn } from 'cn';
4
+ import { OTPInput, OTPInputContext } from 'input-otp';
5
+ import { MinusIcon } from 'lucide-react';
6
+
7
+ function InputOTP({ className, containerClassName, ...props }) {
8
+ return (jsx(OTPInput, { "data-slot": "input-otp", containerClassName: cn("cn-input-otp flex items-center has-disabled:opacity-50", containerClassName), spellCheck: false, className: cn("disabled:cursor-not-allowed", className), ...props }));
9
+ }
10
+ function InputOTPGroup({ className, ...props }) {
11
+ return (jsx("div", { "data-slot": "input-otp-group", className: cn("flex items-center rounded-lg has-aria-invalid:border-destructive has-aria-invalid:ring-3 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40", className), ...props }));
12
+ }
13
+ function InputOTPSlot({ index, className, ...props }) {
14
+ const inputOTPContext = React.useContext(OTPInputContext);
15
+ const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
16
+ return (jsxs("div", { "data-slot": "input-otp-slot", "data-active": isActive, className: cn("relative flex size-8 items-center justify-center border-y border-r border-input text-sm transition-all outline-none first:rounded-l-lg first:border-l last:rounded-r-lg aria-invalid:border-destructive data-[active=true]:z-10 data-[active=true]:border-ring data-[active=true]:ring-3 data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:data-[active=true]:aria-invalid:ring-destructive/40", className), ...props, children: [char, hasFakeCaret && (jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: jsx("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" }) }))] }));
17
+ }
18
+ function InputOTPSeparator({ ...props }) {
19
+ return (jsx("div", { "data-slot": "input-otp-separator", className: "flex items-center [&_svg:not([class*='size-'])]:size-4", role: "separator", ...props, children: jsx(MinusIcon, {}) }));
20
+ }
21
+
22
+ export { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot };
@@ -0,0 +1,9 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Input as Input$1 } from '@base-ui/react/input';
3
+ import { cn } from 'cn';
4
+
5
+ function Input({ className, type, ...props }) {
6
+ return (jsx(Input$1, { type: type, "data-slot": "input", className: cn("h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", className), ...props }));
7
+ }
8
+
9
+ export { Input };
@@ -0,0 +1,80 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { mergeProps } from '@base-ui/react/merge-props';
3
+ import { useRender } from '@base-ui/react/use-render';
4
+ import { cva } from 'class-variance-authority';
5
+ import { cn } from 'cn';
6
+ import { Separator } from './separator.js';
7
+
8
+ function ItemGroup({ className, ...props }) {
9
+ return (jsx("div", { role: "list", "data-slot": "item-group", className: cn("group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2", className), ...props }));
10
+ }
11
+ function ItemSeparator({ className, ...props }) {
12
+ return (jsx(Separator, { "data-slot": "item-separator", orientation: "horizontal", className: cn("my-2", className), ...props }));
13
+ }
14
+ const itemVariants = cva("group/item flex w-full flex-wrap items-center rounded-lg border text-sm transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [a]:transition-colors [a]:hover:bg-muted", {
15
+ variants: {
16
+ variant: {
17
+ default: "border-transparent",
18
+ outline: "border-border",
19
+ muted: "border-transparent bg-muted/50",
20
+ },
21
+ size: {
22
+ default: "gap-2.5 px-3 py-2.5",
23
+ sm: "gap-2.5 px-3 py-2.5",
24
+ xs: "gap-2 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0",
25
+ },
26
+ },
27
+ defaultVariants: {
28
+ variant: "default",
29
+ size: "default",
30
+ },
31
+ });
32
+ function Item({ className, variant = "default", size = "default", render, ...props }) {
33
+ return useRender({
34
+ defaultTagName: "div",
35
+ props: mergeProps({
36
+ className: cn(itemVariants({ variant, size, className })),
37
+ }, props),
38
+ render,
39
+ state: {
40
+ slot: "item",
41
+ variant,
42
+ size,
43
+ },
44
+ });
45
+ }
46
+ const itemMediaVariants = cva("flex shrink-0 items-center justify-center gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start [&_svg]:pointer-events-none", {
47
+ variants: {
48
+ variant: {
49
+ default: "bg-transparent",
50
+ icon: "[&_svg:not([class*='size-'])]:size-4",
51
+ image: "size-10 overflow-hidden rounded-sm group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover",
52
+ },
53
+ },
54
+ defaultVariants: {
55
+ variant: "default",
56
+ },
57
+ });
58
+ function ItemMedia({ className, variant = "default", ...props }) {
59
+ return (jsx("div", { "data-slot": "item-media", "data-variant": variant, className: cn(itemMediaVariants({ variant, className })), ...props }));
60
+ }
61
+ function ItemContent({ className, ...props }) {
62
+ return (jsx("div", { "data-slot": "item-content", className: cn("flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0 [&+[data-slot=item-content]]:flex-none", className), ...props }));
63
+ }
64
+ function ItemTitle({ className, ...props }) {
65
+ return (jsx("div", { "data-slot": "item-title", className: cn("line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4", className), ...props }));
66
+ }
67
+ function ItemDescription({ className, ...props }) {
68
+ return (jsx("p", { "data-slot": "item-description", className: cn("line-clamp-2 text-left text-sm leading-normal font-normal text-muted-foreground group-data-[size=xs]/item:text-xs [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", className), ...props }));
69
+ }
70
+ function ItemActions({ className, ...props }) {
71
+ return (jsx("div", { "data-slot": "item-actions", className: cn("flex items-center gap-2", className), ...props }));
72
+ }
73
+ function ItemHeader({ className, ...props }) {
74
+ return (jsx("div", { "data-slot": "item-header", className: cn("flex basis-full items-center justify-between gap-2", className), ...props }));
75
+ }
76
+ function ItemFooter({ className, ...props }) {
77
+ return (jsx("div", { "data-slot": "item-footer", className: cn("flex basis-full items-center justify-between gap-2", className), ...props }));
78
+ }
79
+
80
+ export { Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle };
@@ -0,0 +1,11 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { cn } from 'cn';
3
+
4
+ function Kbd({ className, ...props }) {
5
+ return (jsx("kbd", { "data-slot": "kbd", className: cn("pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 [&_svg:not([class*='size-'])]:size-3", className), ...props }));
6
+ }
7
+ function KbdGroup({ className, ...props }) {
8
+ return (jsx("kbd", { "data-slot": "kbd-group", className: cn("inline-flex items-center gap-1", className), ...props }));
9
+ }
10
+
11
+ export { Kbd, KbdGroup };
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { cn } from 'cn';
4
+
5
+ function Label({ className, ...props }) {
6
+ return (jsx("label", { "data-slot": "label", className: cn("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", className), ...props }));
7
+ }
8
+
9
+ export { Label };
@@ -0,0 +1,36 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { mergeProps } from '@base-ui/react/merge-props';
3
+ import { useRender } from '@base-ui/react/use-render';
4
+ import { cva } from 'class-variance-authority';
5
+ import { cn } from 'cn';
6
+
7
+ const markerVariants = cva("group/marker relative flex min-h-4 w-full items-center gap-2 text-left text-sm text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [a]:underline [a]:underline-offset-3 [a]:hover:text-foreground", {
8
+ variants: {
9
+ variant: {
10
+ default: "",
11
+ separator: "before:mr-1 before:h-px before:min-w-0 before:flex-1 before:bg-border after:ml-1 after:h-px after:min-w-0 after:flex-1 after:bg-border",
12
+ border: "border-b border-border pb-2",
13
+ },
14
+ },
15
+ });
16
+ function Marker({ className, variant = "default", render, ...props }) {
17
+ return useRender({
18
+ defaultTagName: "div",
19
+ props: mergeProps({
20
+ className: cn(markerVariants({ variant, className })),
21
+ }, props),
22
+ render,
23
+ state: {
24
+ slot: "marker",
25
+ variant,
26
+ },
27
+ });
28
+ }
29
+ function MarkerIcon({ className, ...props }) {
30
+ return (jsx("span", { "data-slot": "marker-icon", "aria-hidden": "true", className: cn("size-4 shrink-0 [&_svg:not([class*='size-'])]:size-4", className), ...props }));
31
+ }
32
+ function MarkerContent({ className, ...props }) {
33
+ return (jsx("span", { "data-slot": "marker-content", className: cn("min-w-0 wrap-break-word group-data-[variant=separator]/marker:flex-none group-data-[variant=separator]/marker:text-center *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className), ...props }));
34
+ }
35
+
36
+ export { Marker, MarkerContent, MarkerIcon, markerVariants };
@@ -0,0 +1,58 @@
1
+ "use client";
2
+ import { jsx, jsxs } from 'react/jsx-runtime';
3
+ import { Menu } from '@base-ui/react/menu';
4
+ import { Menubar as Menubar$1 } from '@base-ui/react/menubar';
5
+ import { cn } from 'cn';
6
+ import { DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenu, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from './dropdown-menu.js';
7
+ import { CheckIcon } from 'lucide-react';
8
+
9
+ function Menubar({ className, ...props }) {
10
+ return (jsx(Menubar$1, { "data-slot": "menubar", className: cn("flex h-8 items-center gap-0.5 rounded-lg border p-[3px]", className), ...props }));
11
+ }
12
+ function MenubarMenu({ ...props }) {
13
+ return jsx(DropdownMenu, { "data-slot": "menubar-menu", ...props });
14
+ }
15
+ function MenubarGroup({ ...props }) {
16
+ return jsx(DropdownMenuGroup, { "data-slot": "menubar-group", ...props });
17
+ }
18
+ function MenubarPortal({ ...props }) {
19
+ return jsx(DropdownMenuPortal, { "data-slot": "menubar-portal", ...props });
20
+ }
21
+ function MenubarTrigger({ className, ...props }) {
22
+ return (jsx(DropdownMenuTrigger, { "data-slot": "menubar-trigger", className: cn("flex items-center rounded-sm px-1.5 py-[2px] text-sm font-medium outline-hidden select-none hover:bg-muted aria-expanded:bg-muted", className), ...props }));
23
+ }
24
+ function MenubarContent({ className, align = "start", alignOffset = -4, sideOffset = 8, ...props }) {
25
+ return (jsx(DropdownMenuContent, { "data-slot": "menubar-content", align: align, alignOffset: alignOffset, sideOffset: sideOffset, className: cn("min-w-36 rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95", className), ...props }));
26
+ }
27
+ function MenubarItem({ className, inset, variant = "default", ...props }) {
28
+ return (jsx(DropdownMenuItem, { "data-slot": "menubar-item", "data-inset": inset, "data-variant": variant, className: cn("group/menubar-item gap-1.5 rounded-md px-1.5 py-1 text-sm focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive!", className), ...props }));
29
+ }
30
+ function MenubarCheckboxItem({ className, children, checked, inset, ...props }) {
31
+ return (jsxs(Menu.CheckboxItem, { "data-slot": "menubar-checkbox-item", "data-inset": inset, className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-1.5 pl-7 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0", className), checked: checked, ...props, children: [jsx("span", { className: "pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4", children: jsx(Menu.CheckboxItemIndicator, { children: jsx(CheckIcon, {}) }) }), children] }));
32
+ }
33
+ function MenubarRadioGroup({ ...props }) {
34
+ return jsx(DropdownMenuRadioGroup, { "data-slot": "menubar-radio-group", ...props });
35
+ }
36
+ function MenubarRadioItem({ className, children, inset, ...props }) {
37
+ return (jsxs(Menu.RadioItem, { "data-slot": "menubar-radio-item", "data-inset": inset, className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-1.5 pl-7 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), ...props, children: [jsx("span", { className: "pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4", children: jsx(Menu.RadioItemIndicator, { children: jsx(CheckIcon, {}) }) }), children] }));
38
+ }
39
+ function MenubarLabel({ className, inset, ...props }) {
40
+ return (jsx(DropdownMenuLabel, { "data-slot": "menubar-label", "data-inset": inset, className: cn("px-1.5 py-1 text-sm font-medium data-inset:pl-7", className), ...props }));
41
+ }
42
+ function MenubarSeparator({ className, ...props }) {
43
+ return (jsx(DropdownMenuSeparator, { "data-slot": "menubar-separator", className: cn("-mx-1 my-1 h-px bg-border", className), ...props }));
44
+ }
45
+ function MenubarShortcut({ className, ...props }) {
46
+ return (jsx(DropdownMenuShortcut, { "data-slot": "menubar-shortcut", className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-focus/menubar-item:text-accent-foreground", className), ...props }));
47
+ }
48
+ function MenubarSub({ ...props }) {
49
+ return jsx(DropdownMenuSub, { "data-slot": "menubar-sub", ...props });
50
+ }
51
+ function MenubarSubTrigger({ className, inset, ...props }) {
52
+ return (jsx(DropdownMenuSubTrigger, { "data-slot": "menubar-sub-trigger", "data-inset": inset, className: cn("gap-1.5 rounded-md px-1.5 py-1 text-sm focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-open:bg-accent data-open:text-accent-foreground [&_svg:not([class*='size-'])]:size-4", className), ...props }));
53
+ }
54
+ function MenubarSubContent({ className, ...props }) {
55
+ return (jsx(DropdownMenuSubContent, { "data-slot": "menubar-sub-content", className: cn("min-w-32 rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className), ...props }));
56
+ }
57
+
58
+ export { Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger };
@@ -0,0 +1,27 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { MessageScroller as MessageScroller$1 } from '@shadcn/react/message-scroller';
3
+ export { useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility } from '@shadcn/react/message-scroller';
4
+ import { cn } from 'cn';
5
+ import { Button } from './button.js';
6
+ import { ArrowDownIcon } from 'lucide-react';
7
+
8
+ function MessageScrollerProvider(props) {
9
+ return jsx(MessageScroller$1.Provider, { ...props });
10
+ }
11
+ function MessageScroller({ className, ...props }) {
12
+ return (jsx(MessageScroller$1.Root, { "data-slot": "message-scroller", className: cn("group/message-scroller relative flex size-full min-h-0 flex-col overflow-hidden", className), ...props }));
13
+ }
14
+ function MessageScrollerViewport({ className, ...props }) {
15
+ return (jsx(MessageScroller$1.Viewport, { "data-slot": "message-scroller-viewport", className: cn("size-full min-h-0 min-w-0 scroll-fade-b scrollbar-thin scrollbar-gutter-stable overflow-y-auto overscroll-contain contain-content data-autoscrolling:scrollbar-thumb-transparent data-autoscrolling:scrollbar-track-transparent data-pending-scroll:invisible", className), ...props }));
16
+ }
17
+ function MessageScrollerContent({ className, ...props }) {
18
+ return (jsx(MessageScroller$1.Content, { "data-slot": "message-scroller-content", className: cn("flex h-max min-h-full flex-col gap-6", className), ...props }));
19
+ }
20
+ function MessageScrollerItem({ className, scrollAnchor = false, ...props }) {
21
+ return (jsx(MessageScroller$1.Item, { "data-slot": "message-scroller-item", scrollAnchor: scrollAnchor, className: cn("min-w-0 shrink-0 [contain-intrinsic-size:auto_10rem] [content-visibility:auto]", className), ...props }));
22
+ }
23
+ function MessageScrollerButton({ direction = "end", className, children, render, variant = "secondary", size = "icon-sm", ...props }) {
24
+ return (jsx(MessageScroller$1.Button, { "data-slot": "message-scroller-button", "data-direction": direction, "data-variant": variant, "data-size": size, direction: direction, className: cn("absolute inset-s-1/2 -translate-x-1/2 border-border bg-background text-foreground transition-[translate,scale,opacity] duration-200 hover:bg-muted hover:text-foreground data-[active=false]:pointer-events-none data-[active=false]:scale-95 data-[active=false]:opacity-0 data-[active=false]:duration-400 data-[active=false]:ease-[cubic-bezier(0.7,0,0.84,0)] data-[active=true]:translate-y-0 data-[active=true]:scale-100 data-[active=true]:opacity-100 data-[active=true]:ease-[cubic-bezier(0.23,1,0.32,1)] data-[direction=end]:bottom-4 data-[direction=end]:data-[active=false]:translate-y-full data-[direction=start]:top-4 data-[direction=start]:data-[active=false]:-translate-y-full rtl:translate-x-1/2 data-[direction=start]:[&_svg]:rotate-180", className), render: render ?? jsx(Button, { variant: variant, size: size }), ...props, children: children ?? (jsxs(Fragment, { children: [jsx(ArrowDownIcon, {}), jsx("span", { className: "sr-only", children: direction === "end" ? "Scroll to end" : "Scroll to start" })] })) }));
25
+ }
26
+
27
+ export { MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport };
@@ -0,0 +1,23 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { cn } from 'cn';
3
+
4
+ function MessageGroup({ className, ...props }) {
5
+ return (jsx("div", { "data-slot": "message-group", className: cn("flex min-w-0 flex-col gap-2", className), ...props }));
6
+ }
7
+ function Message({ className, align = "start", ...props }) {
8
+ return (jsx("div", { "data-slot": "message", "data-align": align, className: cn("group/message relative flex w-full min-w-0 gap-2 text-sm data-[align=end]:flex-row-reverse", className), ...props }));
9
+ }
10
+ function MessageAvatar({ className, ...props }) {
11
+ return (jsx("div", { "data-slot": "message-avatar", className: cn("flex w-fit min-w-8 shrink-0 items-center justify-center self-end overflow-hidden rounded-full bg-muted group-has-data-[slot=message-footer]/message:-translate-y-8", className), ...props }));
12
+ }
13
+ function MessageContent({ className, ...props }) {
14
+ return (jsx("div", { "data-slot": "message-content", className: cn("flex w-full min-w-0 flex-col gap-2.5 wrap-break-word group-data-[align=end]/message:*:data-slot:self-end", className), ...props }));
15
+ }
16
+ function MessageHeader({ className, ...props }) {
17
+ return (jsx("div", { "data-slot": "message-header", className: cn("flex max-w-full min-w-0 items-center px-3 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0", className), ...props }));
18
+ }
19
+ function MessageFooter({ className, ...props }) {
20
+ return (jsx("div", { "data-slot": "message-footer", className: cn("flex max-w-full min-w-0 items-center px-3 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0 group-data-[align=end]/message:justify-end", className), ...props }));
21
+ }
22
+
23
+ export { Message, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader };
@@ -0,0 +1,15 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { cn } from 'cn';
3
+ import { ChevronDownIcon } from 'lucide-react';
4
+
5
+ function NativeSelect({ className, size = "default", ...props }) {
6
+ return (jsxs("div", { className: cn("group/native-select relative w-fit has-[select:disabled]:opacity-50", className), "data-slot": "native-select-wrapper", "data-size": size, children: [jsx("select", { "data-slot": "native-select", "data-size": size, className: "h-8 w-full min-w-0 appearance-none rounded-lg border border-input bg-transparent py-1 pr-8 pl-2.5 text-sm transition-colors outline-none select-none selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-[size=sm]:py-0.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", ...props }), jsx(ChevronDownIcon, { className: "pointer-events-none absolute top-1/2 right-2.5 size-4 -translate-y-1/2 text-muted-foreground select-none", "aria-hidden": "true", "data-slot": "native-select-icon" })] }));
7
+ }
8
+ function NativeSelectOption({ className, ...props }) {
9
+ return (jsx("option", { "data-slot": "native-select-option", className: cn("bg-[Canvas] text-[CanvasText]", className), ...props }));
10
+ }
11
+ function NativeSelectOptGroup({ className, ...props }) {
12
+ return (jsx("optgroup", { "data-slot": "native-select-optgroup", className: cn("bg-[Canvas] text-[CanvasText]", className), ...props }));
13
+ }
14
+
15
+ export { NativeSelect, NativeSelectOptGroup, NativeSelectOption };
@@ -0,0 +1,33 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { NavigationMenu as NavigationMenu$1 } from '@base-ui/react/navigation-menu';
3
+ import { cva } from 'class-variance-authority';
4
+ import { cn } from 'cn';
5
+ import { ChevronDownIcon } from 'lucide-react';
6
+
7
+ function NavigationMenu({ align = "start", className, children, ...props }) {
8
+ return (jsxs(NavigationMenu$1.Root, { "data-slot": "navigation-menu", className: cn("group/navigation-menu relative flex max-w-max flex-1 items-center justify-center", className), ...props, children: [children, jsx(NavigationMenuPositioner, { align: align })] }));
9
+ }
10
+ function NavigationMenuList({ className, ...props }) {
11
+ return (jsx(NavigationMenu$1.List, { "data-slot": "navigation-menu-list", className: cn("group flex flex-1 list-none items-center justify-center gap-0", className), ...props }));
12
+ }
13
+ function NavigationMenuItem({ className, ...props }) {
14
+ return (jsx(NavigationMenu$1.Item, { "data-slot": "navigation-menu-item", className: cn("relative", className), ...props }));
15
+ }
16
+ const navigationMenuTriggerStyle = cva("group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-lg px-2.5 py-1.5 text-sm font-medium transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-open:bg-muted/50 data-open:hover:bg-muted data-open:focus:bg-muted");
17
+ function NavigationMenuTrigger({ className, children, ...props }) {
18
+ return (jsxs(NavigationMenu$1.Trigger, { "data-slot": "navigation-menu-trigger", className: cn(navigationMenuTriggerStyle(), "group", className), ...props, children: [children, " ", jsx(ChevronDownIcon, { className: "relative top-px ml-1 size-3 transition duration-300 group-data-popup-open/navigation-menu-trigger:rotate-180 group-data-open/navigation-menu-trigger:rotate-180", "aria-hidden": "true" })] }));
19
+ }
20
+ function NavigationMenuContent({ className, ...props }) {
21
+ return (jsx(NavigationMenu$1.Content, { "data-slot": "navigation-menu-content", className: cn("data-ending-style:data-activation-direction=left:translate-x-[50%] data-ending-style:data-activation-direction=right:translate-x-[-50%] data-starting-style:data-activation-direction=left:translate-x-[-50%] data-starting-style:data-activation-direction=right:translate-x-[50%] h-full w-auto p-1 transition-[opacity,transform,translate] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-lg group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:ring-foreground/10 group-data-[viewport=false]/navigation-menu:duration-300 data-ending-style:opacity-0 data-starting-style:opacity-0 data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:fade-out **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95", className), ...props }));
22
+ }
23
+ function NavigationMenuPositioner({ className, side = "bottom", sideOffset = 8, align = "start", alignOffset = 0, ...props }) {
24
+ return (jsx(NavigationMenu$1.Portal, { children: jsx(NavigationMenu$1.Positioner, { side: side, sideOffset: sideOffset, align: align, alignOffset: alignOffset, className: cn("isolate z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] data-instant:transition-none data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0", className), ...props, children: jsx(NavigationMenu$1.Popup, { className: "data-[ending-style]:easing-[ease] xs:w-(--popup-width) relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) rounded-lg bg-popover text-popover-foreground shadow ring-1 ring-foreground/10 transition-[opacity,transform,width,height,scale,translate] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0", children: jsx(NavigationMenu$1.Viewport, { className: "relative size-full overflow-hidden" }) }) }) }));
25
+ }
26
+ function NavigationMenuLink({ className, ...props }) {
27
+ return (jsx(NavigationMenu$1.Link, { "data-slot": "navigation-menu-link", className: cn("flex items-center gap-2 rounded-lg p-2 text-sm transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-md data-active:bg-muted/50 data-active:hover:bg-muted data-active:focus:bg-muted [&_svg:not([class*='size-'])]:size-4", className), ...props }));
28
+ }
29
+ function NavigationMenuIndicator({ className, ...props }) {
30
+ return (jsx(NavigationMenu$1.Icon, { "data-slot": "navigation-menu-indicator", className: cn("top-full z-1 flex h-1.5 items-end justify-center overflow-hidden data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:animate-in data-[state=visible]:fade-in", className), ...props, children: jsx("div", { className: "relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md" }) }));
31
+ }
32
+
33
+ export { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPositioner, NavigationMenuTrigger, navigationMenuTriggerStyle };
@@ -0,0 +1,28 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { cn } from 'cn';
3
+ import { Button } from './button.js';
4
+ import { MoreHorizontalIcon, ChevronRightIcon, ChevronLeftIcon } from 'lucide-react';
5
+
6
+ function Pagination({ className, ...props }) {
7
+ return (jsx("nav", { role: "navigation", "aria-label": "pagination", "data-slot": "pagination", className: cn("mx-auto flex w-full justify-center", className), ...props }));
8
+ }
9
+ function PaginationContent({ className, ...props }) {
10
+ return (jsx("ul", { "data-slot": "pagination-content", className: cn("flex items-center gap-0.5", className), ...props }));
11
+ }
12
+ function PaginationItem({ ...props }) {
13
+ return jsx("li", { "data-slot": "pagination-item", ...props });
14
+ }
15
+ function PaginationLink({ className, isActive, size = "icon", ...props }) {
16
+ return (jsx(Button, { variant: isActive ? "outline" : "ghost", size: size, className: cn(className), nativeButton: false, render: jsx("a", { "aria-current": isActive ? "page" : undefined, "data-slot": "pagination-link", "data-active": isActive, ...props }) }));
17
+ }
18
+ function PaginationPrevious({ className, text = "Previous", ...props }) {
19
+ return (jsxs(PaginationLink, { "aria-label": "Go to previous page", size: "default", className: cn("pl-1.5!", className), ...props, children: [jsx(ChevronLeftIcon, { "data-icon": "inline-start" }), jsx("span", { className: "hidden sm:block", children: text })] }));
20
+ }
21
+ function PaginationNext({ className, text = "Next", ...props }) {
22
+ return (jsxs(PaginationLink, { "aria-label": "Go to next page", size: "default", className: cn("pr-1.5!", className), ...props, children: [jsx("span", { className: "hidden sm:block", children: text }), jsx(ChevronRightIcon, { "data-icon": "inline-end" })] }));
23
+ }
24
+ function PaginationEllipsis({ className, ...props }) {
25
+ return (jsxs("span", { "aria-hidden": true, "data-slot": "pagination-ellipsis", className: cn("flex size-8 items-center justify-center [&_svg:not([class*='size-'])]:size-4", className), ...props, children: [jsx(MoreHorizontalIcon, {}), jsx("span", { className: "sr-only", children: "More pages" })] }));
26
+ }
27
+
28
+ export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious };
@@ -0,0 +1,24 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Popover as Popover$1 } from '@base-ui/react/popover';
3
+ import { cn } from 'cn';
4
+
5
+ function Popover({ ...props }) {
6
+ return jsx(Popover$1.Root, { "data-slot": "popover", ...props });
7
+ }
8
+ function PopoverTrigger({ ...props }) {
9
+ return jsx(Popover$1.Trigger, { "data-slot": "popover-trigger", ...props });
10
+ }
11
+ function PopoverContent({ className, align = "center", alignOffset = 0, side = "bottom", sideOffset = 4, ...props }) {
12
+ return (jsx(Popover$1.Portal, { children: jsx(Popover$1.Positioner, { align: align, alignOffset: alignOffset, side: side, sideOffset: sideOffset, className: "isolate z-50", children: jsx(Popover$1.Popup, { "data-slot": "popover-content", className: cn("z-50 flex w-72 origin-(--transform-origin) flex-col gap-2.5 rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className), ...props }) }) }));
13
+ }
14
+ function PopoverHeader({ className, ...props }) {
15
+ return (jsx("div", { "data-slot": "popover-header", className: cn("flex flex-col gap-0.5 text-sm", className), ...props }));
16
+ }
17
+ function PopoverTitle({ className, ...props }) {
18
+ return (jsx(Popover$1.Title, { "data-slot": "popover-title", className: cn("font-medium", className), ...props }));
19
+ }
20
+ function PopoverDescription({ className, ...props }) {
21
+ return (jsx(Popover$1.Description, { "data-slot": "popover-description", className: cn("text-muted-foreground", className), ...props }));
22
+ }
23
+
24
+ export { Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger };