@badnpm/ui 0.0.0 → 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 (283) hide show
  1. package/README.md +11 -11
  2. package/dist/cjs/components/accordion.cjs +24 -0
  3. package/dist/cjs/components/alert-dialog.cjs +56 -0
  4. package/dist/cjs/components/alert.cjs +34 -0
  5. package/dist/cjs/components/aspect-ratio.cjs +12 -0
  6. package/dist/cjs/components/attachment.cjs +80 -0
  7. package/dist/cjs/components/avatar.cjs +31 -0
  8. package/dist/cjs/components/badge.cjs +38 -0
  9. package/dist/cjs/components/breadcrumb.cjs +46 -0
  10. package/dist/cjs/components/bubble.cjs +66 -0
  11. package/dist/cjs/components/button-group.cjs +43 -0
  12. package/dist/cjs/components/calendar.cjs +100 -0
  13. package/dist/cjs/components/card.cjs +34 -0
  14. package/dist/cjs/components/carousel.cjs +113 -0
  15. package/dist/cjs/components/chart.cjs +160 -0
  16. package/dist/cjs/components/checkbox.cjs +13 -0
  17. package/dist/cjs/components/code-block.cjs +110 -0
  18. package/dist/cjs/components/collapsible.cjs +18 -0
  19. package/dist/cjs/components/combobox.cjs +96 -0
  20. package/dist/cjs/components/command.cjs +46 -0
  21. package/dist/cjs/components/context-menu.cjs +69 -0
  22. package/dist/cjs/components/dialog.cjs +50 -0
  23. package/dist/cjs/components/drawer.cjs +108 -0
  24. package/dist/cjs/components/dropdown-menu.cjs +68 -0
  25. package/dist/cjs/components/empty.cjs +42 -0
  26. package/dist/cjs/components/field.cjs +80 -0
  27. package/dist/cjs/components/hover-card.cjs +20 -0
  28. package/dist/cjs/components/input-group.cjs +66 -0
  29. package/dist/cjs/components/input-otp.cjs +46 -0
  30. package/dist/cjs/components/item.cjs +91 -0
  31. package/dist/cjs/components/kbd.cjs +14 -0
  32. package/dist/cjs/components/label.cjs +11 -0
  33. package/dist/cjs/components/marker.cjs +41 -0
  34. package/dist/cjs/components/menubar.cjs +75 -0
  35. package/dist/cjs/components/message-scroller.cjs +45 -0
  36. package/dist/cjs/components/message.cjs +30 -0
  37. package/dist/cjs/components/native-select.cjs +19 -0
  38. package/dist/cjs/components/navigation-menu.cjs +43 -0
  39. package/dist/cjs/components/pagination.cjs +36 -0
  40. package/dist/cjs/components/popover.cjs +31 -0
  41. package/dist/cjs/components/progress.cjs +28 -0
  42. package/dist/cjs/components/questionnaire.cjs +70 -0
  43. package/dist/cjs/components/radio-group.cjs +16 -0
  44. package/dist/cjs/components/resizable.cjs +39 -0
  45. package/dist/cjs/components/scroll-area.cjs +15 -0
  46. package/dist/cjs/components/select.cjs +47 -0
  47. package/dist/cjs/components/separator.cjs +11 -0
  48. package/dist/cjs/components/sheet.cjs +47 -0
  49. package/dist/cjs/components/sidebar.cjs +301 -0
  50. package/dist/cjs/components/skeleton.cjs +10 -0
  51. package/dist/cjs/components/slider.cjs +16 -0
  52. package/dist/cjs/components/spinner.cjs +11 -0
  53. package/dist/cjs/components/switch.cjs +12 -0
  54. package/dist/cjs/components/table.cjs +38 -0
  55. package/dist/cjs/components/tabs.cjs +37 -0
  56. package/dist/cjs/components/textarea.cjs +10 -0
  57. package/dist/cjs/components/toast.cjs +82 -0
  58. package/dist/cjs/components/toggle-group.cjs +47 -0
  59. package/dist/cjs/components/toggle.cjs +30 -0
  60. package/dist/cjs/components/tooltip.cjs +24 -0
  61. package/dist/cjs/components/trace.cjs +40 -0
  62. package/dist/cjs/hooks/use-highlighted-code.cjs +73 -0
  63. package/dist/cjs/hooks/use-hydrated.cjs +2 -2
  64. package/dist/cjs/hooks/use-mobile.cjs +36 -0
  65. package/dist/cjs/index.cjs +467 -0
  66. package/dist/cjs/lib/highlighter.cjs +96 -0
  67. package/dist/cjs/providers/preference-provider.cjs +13 -13
  68. package/dist/cjs/providers/theme-provider.cjs +10 -10
  69. package/dist/cjs/types/components/accordion.d.ts +9 -0
  70. package/dist/cjs/types/components/alert-dialog.d.ts +20 -0
  71. package/dist/cjs/types/components/alert.d.ts +13 -0
  72. package/dist/cjs/types/components/aspect-ratio.d.ts +7 -0
  73. package/dist/cjs/types/components/attachment.d.ts +26 -0
  74. package/dist/cjs/types/components/avatar.d.ts +13 -0
  75. package/dist/cjs/types/components/badge.d.ts +11 -0
  76. package/dist/cjs/types/components/breadcrumb.d.ts +12 -0
  77. package/dist/cjs/types/components/bubble.d.ts +19 -0
  78. package/dist/cjs/types/components/button-group.d.ts +14 -0
  79. package/dist/cjs/types/components/button.d.ts +4 -4
  80. package/dist/cjs/types/components/calendar.d.ts +12 -0
  81. package/dist/cjs/types/components/card.d.ts +13 -0
  82. package/dist/cjs/types/components/carousel.d.ts +31 -0
  83. package/dist/cjs/types/components/chart.d.ts +47 -0
  84. package/dist/cjs/types/components/checkbox.d.ts +6 -0
  85. package/dist/cjs/types/components/code-block.d.ts +29 -0
  86. package/dist/cjs/types/components/collapsible.d.ts +8 -0
  87. package/dist/cjs/types/components/combobox.d.ts +26 -0
  88. package/dist/cjs/types/components/command.d.ts +21 -0
  89. package/dist/cjs/types/components/context-menu.d.ts +31 -0
  90. package/dist/cjs/types/components/dialog.d.ts +19 -0
  91. package/dist/cjs/types/components/direction.d.ts +1 -0
  92. package/dist/cjs/types/components/drawer.d.ts +18 -0
  93. package/dist/cjs/types/components/dropdown-menu.d.ts +31 -0
  94. package/dist/cjs/types/components/empty.d.ts +15 -0
  95. package/dist/cjs/types/components/field.d.ts +28 -0
  96. package/dist/cjs/types/components/hover-card.d.ts +8 -0
  97. package/dist/cjs/types/components/index.d.ts +62 -0
  98. package/dist/cjs/types/components/input-group.d.ts +21 -0
  99. package/dist/cjs/types/components/input-otp.d.ts +13 -0
  100. package/dist/cjs/types/components/input.d.ts +2 -2
  101. package/dist/cjs/types/components/item.d.ts +25 -0
  102. package/dist/cjs/types/components/kbd.d.ts +6 -0
  103. package/dist/cjs/types/components/label.d.ts +5 -0
  104. package/dist/cjs/types/components/marker.d.ts +13 -0
  105. package/dist/cjs/types/components/menubar.d.ts +31 -0
  106. package/dist/cjs/types/components/message-scroller.d.ts +13 -0
  107. package/dist/cjs/types/components/message.d.ts +12 -0
  108. package/dist/cjs/types/components/native-select.d.ts +10 -0
  109. package/dist/cjs/types/components/navigation-menu.d.ts +15 -0
  110. package/dist/cjs/types/components/pagination.d.ts +19 -0
  111. package/dist/cjs/types/components/popover.d.ts +11 -0
  112. package/dist/cjs/types/components/progress.d.ts +10 -0
  113. package/dist/cjs/types/components/questionnaire.d.ts +21 -0
  114. package/dist/cjs/types/components/radio-group.d.ts +8 -0
  115. package/dist/cjs/types/components/resizable.d.ts +10 -0
  116. package/dist/cjs/types/components/scroll-area.d.ts +7 -0
  117. package/dist/cjs/types/components/select.d.ts +17 -0
  118. package/dist/cjs/types/components/separator.d.ts +6 -0
  119. package/dist/cjs/types/components/sheet.d.ts +16 -0
  120. package/dist/cjs/types/components/sidebar.d.ts +66 -0
  121. package/dist/cjs/types/components/skeleton.d.ts +5 -0
  122. package/dist/cjs/types/components/slider.d.ts +6 -0
  123. package/dist/cjs/types/components/spinner.d.ts +5 -0
  124. package/dist/cjs/types/components/switch.d.ts +8 -0
  125. package/dist/cjs/types/components/table.d.ts +12 -0
  126. package/dist/cjs/types/components/tabs.d.ts +14 -0
  127. package/dist/cjs/types/components/textarea.d.ts +5 -0
  128. package/dist/cjs/types/components/theme-toggle.d.ts +2 -2
  129. package/dist/cjs/types/components/toast.d.ts +19 -0
  130. package/dist/cjs/types/components/toggle-group.d.ts +13 -0
  131. package/dist/cjs/types/components/toggle.d.ts +12 -0
  132. package/dist/cjs/types/components/tooltip.d.ts +9 -0
  133. package/dist/cjs/types/components/trace.d.ts +20 -0
  134. package/dist/cjs/types/hooks/index.d.ts +2 -0
  135. package/dist/cjs/types/hooks/use-highlighted-code.d.ts +3 -0
  136. package/dist/cjs/types/hooks/use-mobile.d.ts +3 -0
  137. package/dist/cjs/types/index.d.ts +65 -0
  138. package/dist/cjs/types/lib/highlighter.d.ts +11 -0
  139. package/dist/cjs/types/lib/index.d.ts +1 -0
  140. package/dist/cjs/types/providers/preference-provider.d.ts +2 -2
  141. package/dist/cjs/types/providers/theme-provider.d.ts +2 -2
  142. package/dist/esm/components/accordion.js +19 -0
  143. package/dist/esm/components/alert-dialog.js +43 -0
  144. package/dist/esm/components/alert.js +29 -0
  145. package/dist/esm/components/aspect-ratio.js +10 -0
  146. package/dist/esm/components/attachment.js +70 -0
  147. package/dist/esm/components/avatar.js +24 -0
  148. package/dist/esm/components/badge.js +35 -0
  149. package/dist/esm/components/breadcrumb.js +38 -0
  150. package/dist/esm/components/bubble.js +61 -0
  151. package/dist/esm/components/button-group.js +38 -0
  152. package/dist/esm/components/calendar.js +78 -0
  153. package/dist/esm/components/card.js +26 -0
  154. package/dist/esm/components/carousel.js +87 -0
  155. package/dist/esm/components/chart.js +133 -0
  156. package/dist/esm/components/checkbox.js +11 -0
  157. package/dist/esm/components/code-block.js +82 -0
  158. package/dist/esm/components/collapsible.js +14 -0
  159. package/dist/esm/components/combobox.js +60 -0
  160. package/dist/esm/components/command.js +36 -0
  161. package/dist/esm/components/context-menu.js +53 -0
  162. package/dist/esm/components/dialog.js +39 -0
  163. package/dist/esm/components/drawer.js +77 -0
  164. package/dist/esm/components/dropdown-menu.js +52 -0
  165. package/dist/esm/components/empty.js +35 -0
  166. package/dist/esm/components/field.js +69 -0
  167. package/dist/esm/components/hover-card.js +16 -0
  168. package/dist/esm/components/input-group.js +59 -0
  169. package/dist/esm/components/input-otp.js +22 -0
  170. package/dist/esm/components/item.js +80 -0
  171. package/dist/esm/components/kbd.js +11 -0
  172. package/dist/esm/components/label.js +9 -0
  173. package/dist/esm/components/marker.js +36 -0
  174. package/dist/esm/components/menubar.js +58 -0
  175. package/dist/esm/components/message-scroller.js +27 -0
  176. package/dist/esm/components/message.js +23 -0
  177. package/dist/esm/components/native-select.js +15 -0
  178. package/dist/esm/components/navigation-menu.js +33 -0
  179. package/dist/esm/components/pagination.js +28 -0
  180. package/dist/esm/components/popover.js +24 -0
  181. package/dist/esm/components/progress.js +22 -0
  182. package/dist/esm/components/questionnaire.js +54 -0
  183. package/dist/esm/components/radio-group.js +13 -0
  184. package/dist/esm/components/resizable.js +16 -0
  185. package/dist/esm/components/scroll-area.js +12 -0
  186. package/dist/esm/components/select.js +36 -0
  187. package/dist/esm/components/separator.js +9 -0
  188. package/dist/esm/components/sheet.js +38 -0
  189. package/dist/esm/components/sidebar.js +257 -0
  190. package/dist/esm/components/skeleton.js +8 -0
  191. package/dist/esm/components/slider.js +14 -0
  192. package/dist/esm/components/spinner.js +9 -0
  193. package/dist/esm/components/switch.js +10 -0
  194. package/dist/esm/components/table.js +29 -0
  195. package/dist/esm/components/tabs.js +31 -0
  196. package/dist/esm/components/textarea.js +8 -0
  197. package/dist/esm/components/toast.js +68 -0
  198. package/dist/esm/components/toggle-group.js +25 -0
  199. package/dist/esm/components/toggle.js +27 -0
  200. package/dist/esm/components/tooltip.js +19 -0
  201. package/dist/esm/components/trace.js +31 -0
  202. package/dist/esm/hooks/use-highlighted-code.js +52 -0
  203. package/dist/esm/hooks/use-mobile.js +15 -0
  204. package/dist/esm/index.js +65 -0
  205. package/dist/esm/lib/highlighter.js +93 -0
  206. package/dist/styles/custom.css +2 -0
  207. package/dist/styles/index.css +1 -1
  208. package/dist/types/components/accordion.d.ts +9 -0
  209. package/dist/types/components/alert-dialog.d.ts +20 -0
  210. package/dist/types/components/alert.d.ts +13 -0
  211. package/dist/types/components/aspect-ratio.d.ts +7 -0
  212. package/dist/types/components/attachment.d.ts +26 -0
  213. package/dist/types/components/avatar.d.ts +13 -0
  214. package/dist/types/components/badge.d.ts +11 -0
  215. package/dist/types/components/breadcrumb.d.ts +12 -0
  216. package/dist/types/components/bubble.d.ts +19 -0
  217. package/dist/types/components/button-group.d.ts +14 -0
  218. package/dist/types/components/button.d.ts +4 -4
  219. package/dist/types/components/calendar.d.ts +12 -0
  220. package/dist/types/components/card.d.ts +13 -0
  221. package/dist/types/components/carousel.d.ts +31 -0
  222. package/dist/types/components/chart.d.ts +47 -0
  223. package/dist/types/components/checkbox.d.ts +6 -0
  224. package/dist/types/components/code-block.d.ts +29 -0
  225. package/dist/types/components/collapsible.d.ts +8 -0
  226. package/dist/types/components/combobox.d.ts +26 -0
  227. package/dist/types/components/command.d.ts +21 -0
  228. package/dist/types/components/context-menu.d.ts +31 -0
  229. package/dist/types/components/dialog.d.ts +19 -0
  230. package/dist/types/components/direction.d.ts +1 -0
  231. package/dist/types/components/drawer.d.ts +18 -0
  232. package/dist/types/components/dropdown-menu.d.ts +31 -0
  233. package/dist/types/components/empty.d.ts +15 -0
  234. package/dist/types/components/field.d.ts +28 -0
  235. package/dist/types/components/hover-card.d.ts +8 -0
  236. package/dist/types/components/index.d.ts +62 -0
  237. package/dist/types/components/input-group.d.ts +21 -0
  238. package/dist/types/components/input-otp.d.ts +13 -0
  239. package/dist/types/components/input.d.ts +2 -2
  240. package/dist/types/components/item.d.ts +25 -0
  241. package/dist/types/components/kbd.d.ts +6 -0
  242. package/dist/types/components/label.d.ts +5 -0
  243. package/dist/types/components/marker.d.ts +13 -0
  244. package/dist/types/components/menubar.d.ts +31 -0
  245. package/dist/types/components/message-scroller.d.ts +13 -0
  246. package/dist/types/components/message.d.ts +12 -0
  247. package/dist/types/components/native-select.d.ts +10 -0
  248. package/dist/types/components/navigation-menu.d.ts +15 -0
  249. package/dist/types/components/pagination.d.ts +19 -0
  250. package/dist/types/components/popover.d.ts +11 -0
  251. package/dist/types/components/progress.d.ts +10 -0
  252. package/dist/types/components/questionnaire.d.ts +21 -0
  253. package/dist/types/components/radio-group.d.ts +8 -0
  254. package/dist/types/components/resizable.d.ts +10 -0
  255. package/dist/types/components/scroll-area.d.ts +7 -0
  256. package/dist/types/components/select.d.ts +17 -0
  257. package/dist/types/components/separator.d.ts +6 -0
  258. package/dist/types/components/sheet.d.ts +16 -0
  259. package/dist/types/components/sidebar.d.ts +66 -0
  260. package/dist/types/components/skeleton.d.ts +5 -0
  261. package/dist/types/components/slider.d.ts +6 -0
  262. package/dist/types/components/spinner.d.ts +5 -0
  263. package/dist/types/components/switch.d.ts +8 -0
  264. package/dist/types/components/table.d.ts +12 -0
  265. package/dist/types/components/tabs.d.ts +14 -0
  266. package/dist/types/components/textarea.d.ts +5 -0
  267. package/dist/types/components/theme-toggle.d.ts +2 -2
  268. package/dist/types/components/toast.d.ts +19 -0
  269. package/dist/types/components/toggle-group.d.ts +13 -0
  270. package/dist/types/components/toggle.d.ts +12 -0
  271. package/dist/types/components/tooltip.d.ts +9 -0
  272. package/dist/types/components/trace.d.ts +20 -0
  273. package/dist/types/hooks/index.d.ts +2 -0
  274. package/dist/types/hooks/use-highlighted-code.d.ts +3 -0
  275. package/dist/types/hooks/use-mobile.d.ts +3 -0
  276. package/dist/types/index.d.ts +65 -0
  277. package/dist/types/lib/highlighter.d.ts +11 -0
  278. package/dist/types/lib/index.d.ts +1 -0
  279. package/dist/types/providers/preference-provider.d.ts +2 -2
  280. package/dist/types/providers/theme-provider.d.ts +2 -2
  281. package/dist/umd/index.js +86764 -3487
  282. package/package.json +39 -4
  283. package/dist/styles/body.css +0 -7
@@ -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 };
@@ -0,0 +1,22 @@
1
+ "use client";
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+ import { Progress as Progress$1 } from '@base-ui/react/progress';
4
+ import { cn } from 'cn';
5
+
6
+ function Progress({ className, children, value, ...props }) {
7
+ return (jsxs(Progress$1.Root, { value: value, "data-slot": "progress", className: cn("flex flex-wrap gap-3", className), ...props, children: [children, jsx(ProgressTrack, { children: jsx(ProgressIndicator, {}) })] }));
8
+ }
9
+ function ProgressTrack({ className, ...props }) {
10
+ return (jsx(Progress$1.Track, { className: cn("relative flex h-1 w-full items-center overflow-x-hidden rounded-full bg-muted", className), "data-slot": "progress-track", ...props }));
11
+ }
12
+ function ProgressIndicator({ className, ...props }) {
13
+ return (jsx(Progress$1.Indicator, { "data-slot": "progress-indicator", className: cn("h-full bg-primary transition-all", className), ...props }));
14
+ }
15
+ function ProgressLabel({ className, ...props }) {
16
+ return (jsx(Progress$1.Label, { className: cn("text-sm font-medium", className), "data-slot": "progress-label", ...props }));
17
+ }
18
+ function ProgressValue({ className, ...props }) {
19
+ return (jsx(Progress$1.Value, { className: cn("ml-auto text-sm text-muted-foreground tabular-nums", className), "data-slot": "progress-value", ...props }));
20
+ }
21
+
22
+ export { Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue };
@@ -0,0 +1,54 @@
1
+ "use client";
2
+ import { jsx, jsxs } from 'react/jsx-runtime';
3
+ import { Questionnaire as Questionnaire$1 } from '@shadcn/react/questionnaire';
4
+ import { cn } from 'cn';
5
+ import { buttonVariants } from './button.js';
6
+ import { CheckIcon } from 'lucide-react';
7
+
8
+ function Questionnaire({ className, ...props }) {
9
+ return (jsx(Questionnaire$1.Root, { "data-slot": "questionnaire", className: cn("flex w-full min-w-0 flex-col gap-4", className), ...props }));
10
+ }
11
+ function QuestionnaireProgress({ className, ...props }) {
12
+ return (jsx(Questionnaire$1.Progress, { "data-slot": "questionnaire-progress", className: cn("min-h-[1lh] w-fit min-w-[14ch] text-xs font-medium text-muted-foreground tabular-nums", className), ...props }));
13
+ }
14
+ function QuestionnaireItem({ className, ...props }) {
15
+ return (jsx(Questionnaire$1.Item, { "data-slot": "questionnaire-item", className: cn("flex min-w-0 flex-col gap-4 border-0 p-0 outline-none", className), ...props }));
16
+ }
17
+ function QuestionnaireTitle({ className, ...props }) {
18
+ return (jsx(Questionnaire$1.Title, { "data-slot": "questionnaire-title", className: cn("font-heading text-base leading-snug font-medium text-pretty [&:not(:has(~[data-slot=questionnaire-description]))]:mb-4", className), ...props }));
19
+ }
20
+ function QuestionnaireDescription({ className, ...props }) {
21
+ return (jsx(Questionnaire$1.Description, { "data-slot": "questionnaire-description", className: cn("text-sm text-pretty text-muted-foreground", className), ...props }));
22
+ }
23
+ function QuestionnaireChoices({ className, ...props }) {
24
+ return (jsx(Questionnaire$1.Choices, { "data-slot": "questionnaire-choices", className: cn("group/questionnaire-choices grid min-w-0 gap-2", className), ...props }));
25
+ }
26
+ function QuestionnaireChoice({ children, className, ...props }) {
27
+ return (jsxs(Questionnaire$1.Choice, { "data-slot": "questionnaire-choice", className: cn("group/questionnaire-choice relative flex min-h-11 cursor-pointer items-start gap-2.5 rounded-lg border border-input bg-transparent px-3 py-2.5 text-start text-sm transition-colors outline-none select-none hover:bg-muted/50 has-[>input:focus-visible]:border-ring has-[>input:focus-visible]:ring-3 has-[>input:focus-visible]:ring-ring/50 data-invalid:border-destructive dark:bg-input/20 data-checked:border-primary/40 data-checked:bg-muted dark:data-checked:bg-muted", "data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50", className), ...props, children: [jsx(Questionnaire$1.ChoiceInput, { "data-slot": "questionnaire-choice-input", className: "absolute inset-0 z-10 size-full cursor-pointer opacity-0" }), jsxs("span", { "aria-hidden": "true", "data-slot": "questionnaire-choice-indicator", className: "pointer-events-none relative flex size-4 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-[4px] border border-input group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 group-data-[type=radio]/questionnaire-choice:rounded-full group-data-checked/questionnaire-choice:border-primary group-data-checked/questionnaire-choice:bg-primary group-data-checked/questionnaire-choice:text-primary-foreground dark:bg-input/30 dark:group-data-checked/questionnaire-choice:bg-primary", children: [jsx("span", { "data-slot": "questionnaire-choice-indicator-dot", className: "hidden size-2 rounded-full bg-primary-foreground group-data-[type=checkbox]/questionnaire-choice:hidden group-data-checked/questionnaire-choice:block" }), jsx(CheckIcon, { "data-slot": "questionnaire-choice-indicator-check", className: "hidden size-3.5 group-data-[type=radio]/questionnaire-choice:hidden group-data-checked/questionnaire-choice:block" })] }), jsx(Questionnaire$1.ChoiceLabel, { "data-slot": "questionnaire-choice-label", className: "flex min-w-0 flex-1 flex-col gap-0.5 leading-snug", children: children }), jsx(Questionnaire$1.ChoiceShortcut, { "data-slot": "questionnaire-choice-shortcut", className: "pointer-events-none ms-auto hidden size-5 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-md border border-input bg-background font-mono text-[0.625rem] leading-none font-medium text-muted-foreground group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 group-data-[shortcut]/questionnaire-choice:inline-flex" })] }));
28
+ }
29
+ function QuestionnaireChoiceDescription({ className, ...props }) {
30
+ return (jsx("span", { "data-slot": "questionnaire-choice-description", className: cn("text-muted-foreground", className), ...props }));
31
+ }
32
+ function QuestionnaireInput({ className, ...props }) {
33
+ return (jsx("div", { "data-slot": "questionnaire-input-wrapper", className: "group/questionnaire-input relative w-full min-w-0", children: jsx(Questionnaire$1.Input, { "data-slot": "questionnaire-input", className: cn("h-8 min-h-11 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-[color,box-shadow,background-color] outline-none 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 sm:min-h-0 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", "selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground", className), ...props }) }));
34
+ }
35
+ function QuestionnaireError({ className, ...props }) {
36
+ return (jsx(Questionnaire$1.Error, { "data-slot": "questionnaire-error", className: cn("mt-2 text-sm text-destructive", className), ...props }));
37
+ }
38
+ function QuestionnaireActions({ className, ...props }) {
39
+ return (jsx("div", { "data-slot": "questionnaire-actions", className: cn("grid min-h-11 w-full grid-cols-[minmax(0,1fr)_auto_auto] items-center gap-2 sm:min-h-8", className), ...props }));
40
+ }
41
+ function QuestionnairePrevious({ children, className, size = "default", variant = "outline", ...props }) {
42
+ return (jsx(Questionnaire$1.Previous, { "data-slot": "questionnaire-previous", "data-size": size, "data-variant": variant, className: cn(buttonVariants({ size, variant }), "col-start-1 row-start-1 min-h-11 justify-self-start sm:min-h-0", className), ...props, children: children ?? "Previous" }));
43
+ }
44
+ function QuestionnaireSkip({ children, className, size = "default", variant = "outline", ...props }) {
45
+ return (jsx(Questionnaire$1.Skip, { "data-slot": "questionnaire-skip", "data-size": size, "data-variant": variant, className: cn(buttonVariants({ size, variant }), "col-start-2 row-start-1 min-h-11 justify-self-end sm:min-h-0", className), ...props, children: children ?? "Skip" }));
46
+ }
47
+ function QuestionnaireNext({ children, className, size = "default", variant = "default", ...props }) {
48
+ return (jsx(Questionnaire$1.Next, { "data-slot": "questionnaire-next", "data-size": size, "data-variant": variant, className: cn(buttonVariants({ size, variant }), "col-start-3 row-start-1 min-h-11 justify-self-end sm:min-h-0", className), ...props, children: children ?? "Next" }));
49
+ }
50
+ function QuestionnaireSubmit({ children, className, size = "default", variant = "default", ...props }) {
51
+ return (jsx(Questionnaire$1.Submit, { "data-slot": "questionnaire-submit", "data-size": size, "data-variant": variant, className: cn(buttonVariants({ size, variant }), "col-start-3 row-start-1 min-h-11 justify-self-end sm:min-h-0", className), ...props, children: children ?? "Submit" }));
52
+ }
53
+
54
+ export { Questionnaire, QuestionnaireActions, QuestionnaireChoice, QuestionnaireChoiceDescription, QuestionnaireChoices, QuestionnaireDescription, QuestionnaireError, QuestionnaireInput, QuestionnaireItem, QuestionnaireNext, QuestionnairePrevious, QuestionnaireProgress, QuestionnaireSkip, QuestionnaireSubmit, QuestionnaireTitle };
@@ -0,0 +1,13 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Radio } from '@base-ui/react/radio';
3
+ import { RadioGroup as RadioGroup$1 } from '@base-ui/react/radio-group';
4
+ import { cn } from 'cn';
5
+
6
+ function RadioGroup({ className, ...props }) {
7
+ return (jsx(RadioGroup$1, { "data-slot": "radio-group", className: cn("grid w-full gap-2", className), ...props }));
8
+ }
9
+ function RadioGroupItem({ className, ...props }) {
10
+ return (jsx(Radio.Root, { "data-slot": "radio-group-item", className: cn("group/radio-group-item peer relative flex aspect-square size-4 shrink-0 rounded-full border border-input outline-none group-has-[:focus-visible]/field-label:ring-0 group-has-[:focus-visible]/field-label:not-data-checked:border-input after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground group-has-[:focus-visible]/field-label:data-checked:border-primary dark:data-checked:bg-primary", className), ...props, children: jsx(Radio.Indicator, { "data-slot": "radio-group-indicator", className: "flex size-4 items-center justify-center", children: jsx("span", { className: "absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground" }) }) }));
11
+ }
12
+
13
+ export { RadioGroup, RadioGroupItem };
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { cn } from 'cn';
4
+ import * as ResizablePrimitive from 'react-resizable-panels';
5
+
6
+ function ResizablePanelGroup({ className, ...props }) {
7
+ return (jsx(ResizablePrimitive.Group, { "data-slot": "resizable-panel-group", className: cn("flex h-full w-full aria-[orientation=vertical]:flex-col", className), ...props }));
8
+ }
9
+ function ResizablePanel({ ...props }) {
10
+ return jsx(ResizablePrimitive.Panel, { "data-slot": "resizable-panel", ...props });
11
+ }
12
+ function ResizableHandle({ withHandle, className, ...props }) {
13
+ return (jsx(ResizablePrimitive.Separator, { "data-slot": "resizable-handle", className: cn("relative flex w-px items-center justify-center bg-border ring-offset-background after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90", className), ...props, children: withHandle && (jsx("div", { className: "z-10 flex h-6 w-1 shrink-0 rounded-lg bg-border" })) }));
14
+ }
15
+
16
+ export { ResizableHandle, ResizablePanel, ResizablePanelGroup };
@@ -0,0 +1,12 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { ScrollArea as ScrollArea$1 } from '@base-ui/react/scroll-area';
3
+ import { cn } from 'cn';
4
+
5
+ function ScrollArea({ className, children, ...props }) {
6
+ return (jsxs(ScrollArea$1.Root, { "data-slot": "scroll-area", className: cn("relative", className), ...props, children: [jsx(ScrollArea$1.Viewport, { "data-slot": "scroll-area-viewport", className: "size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1", children: children }), jsx(ScrollBar, {}), jsx(ScrollArea$1.Corner, {})] }));
7
+ }
8
+ function ScrollBar({ className, orientation = "vertical", ...props }) {
9
+ return (jsx(ScrollArea$1.Scrollbar, { "data-slot": "scroll-area-scrollbar", "data-orientation": orientation, orientation: orientation, className: cn("flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent", className), ...props, children: jsx(ScrollArea$1.Thumb, { "data-slot": "scroll-area-thumb", className: "relative flex-1 rounded-full bg-border" }) }));
10
+ }
11
+
12
+ export { ScrollArea, ScrollBar };
@@ -0,0 +1,36 @@
1
+ "use client";
2
+ import { jsx, jsxs } from 'react/jsx-runtime';
3
+ import { Select as Select$1 } from '@base-ui/react/select';
4
+ import { cn } from 'cn';
5
+ import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react';
6
+
7
+ const Select = Select$1.Root;
8
+ function SelectGroup({ className, ...props }) {
9
+ return (jsx(Select$1.Group, { "data-slot": "select-group", className: cn("scroll-my-1 p-1", className), ...props }));
10
+ }
11
+ function SelectValue({ className, ...props }) {
12
+ return (jsx(Select$1.Value, { "data-slot": "select-value", className: cn("flex flex-1 text-left", className), ...props }));
13
+ }
14
+ function SelectTrigger({ className, size = "default", children, ...props }) {
15
+ return (jsxs(Select$1.Trigger, { "data-slot": "select-trigger", "data-size": size, className: cn("flex w-fit items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), ...props, children: [children, jsx(Select$1.Icon, { render: jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" }) })] }));
16
+ }
17
+ function SelectContent({ className, children, side = "bottom", sideOffset = 4, align = "center", alignOffset = 0, alignItemWithTrigger = true, ...props }) {
18
+ return (jsx(Select$1.Portal, { children: jsx(Select$1.Positioner, { side: side, sideOffset: sideOffset, align: align, alignOffset: alignOffset, alignItemWithTrigger: alignItemWithTrigger, className: "isolate z-50", children: jsxs(Select$1.Popup, { "data-slot": "select-content", "data-align-trigger": alignItemWithTrigger, className: cn("relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none 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, children: [jsx(SelectScrollUpButton, {}), jsx(Select$1.List, { children: children }), jsx(SelectScrollDownButton, {})] }) }) }));
19
+ }
20
+ function SelectLabel({ className, ...props }) {
21
+ return (jsx(Select$1.GroupLabel, { "data-slot": "select-label", className: cn("px-1.5 py-1 text-xs text-muted-foreground", className), ...props }));
22
+ }
23
+ function SelectItem({ className, children, ...props }) {
24
+ return (jsxs(Select$1.Item, { "data-slot": "select-item", className: cn("relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", className), ...props, children: [jsx(Select$1.ItemText, { className: "flex flex-1 shrink-0 gap-2 whitespace-nowrap", children: children }), jsx(Select$1.ItemIndicator, { render: jsx("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center" }), children: jsx(CheckIcon, { className: "pointer-events-none" }) })] }));
25
+ }
26
+ function SelectSeparator({ className, ...props }) {
27
+ return (jsx(Select$1.Separator, { "data-slot": "select-separator", className: cn("pointer-events-none -mx-1 my-1 h-px bg-border", className), ...props }));
28
+ }
29
+ function SelectScrollUpButton({ className, ...props }) {
30
+ return (jsx(Select$1.ScrollUpArrow, { "data-slot": "select-scroll-up-button", className: cn("top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4", className), ...props, children: jsx(ChevronUpIcon, {}) }));
31
+ }
32
+ function SelectScrollDownButton({ className, ...props }) {
33
+ return (jsx(Select$1.ScrollDownArrow, { "data-slot": "select-scroll-down-button", className: cn("bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4", className), ...props, children: jsx(ChevronDownIcon, {}) }));
34
+ }
35
+
36
+ export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue };
@@ -0,0 +1,9 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Separator as Separator$1 } from '@base-ui/react/separator';
3
+ import { cn } from 'cn';
4
+
5
+ function Separator({ className, orientation = "horizontal", ...props }) {
6
+ return (jsx(Separator$1, { "data-slot": "separator", orientation: orientation, className: cn("shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch", className), ...props }));
7
+ }
8
+
9
+ export { Separator };
@@ -0,0 +1,38 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { Dialog } from '@base-ui/react/dialog';
3
+ import { cn } from 'cn';
4
+ import { Button } from './button.js';
5
+ import { XIcon } from 'lucide-react';
6
+
7
+ function Sheet({ ...props }) {
8
+ return jsx(Dialog.Root, { "data-slot": "sheet", ...props });
9
+ }
10
+ function SheetTrigger({ ...props }) {
11
+ return jsx(Dialog.Trigger, { "data-slot": "sheet-trigger", ...props });
12
+ }
13
+ function SheetClose({ ...props }) {
14
+ return jsx(Dialog.Close, { "data-slot": "sheet-close", ...props });
15
+ }
16
+ function SheetPortal({ ...props }) {
17
+ return jsx(Dialog.Portal, { "data-slot": "sheet-portal", ...props });
18
+ }
19
+ function SheetOverlay({ className, ...props }) {
20
+ return (jsx(Dialog.Backdrop, { "data-slot": "sheet-overlay", className: cn("fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs", className), ...props }));
21
+ }
22
+ function SheetContent({ className, children, side = "right", showCloseButton = true, ...props }) {
23
+ return (jsxs(SheetPortal, { children: [jsx(SheetOverlay, {}), jsxs(Dialog.Popup, { "data-slot": "sheet-content", "data-side": side, className: cn("fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm", className), ...props, children: [children, showCloseButton && (jsxs(Dialog.Close, { "data-slot": "sheet-close", render: jsx(Button, { variant: "ghost", className: "absolute top-3 right-3", size: "icon-sm" }), children: [jsx(XIcon, {}), jsx("span", { className: "sr-only", children: "Close" })] }))] })] }));
24
+ }
25
+ function SheetHeader({ className, ...props }) {
26
+ return (jsx("div", { "data-slot": "sheet-header", className: cn("flex flex-col gap-0.5 p-4", className), ...props }));
27
+ }
28
+ function SheetFooter({ className, ...props }) {
29
+ return (jsx("div", { "data-slot": "sheet-footer", className: cn("mt-auto flex flex-col gap-2 p-4", className), ...props }));
30
+ }
31
+ function SheetTitle({ className, ...props }) {
32
+ return (jsx(Dialog.Title, { "data-slot": "sheet-title", className: cn("font-heading text-base font-medium text-foreground", className), ...props }));
33
+ }
34
+ function SheetDescription({ className, ...props }) {
35
+ return (jsx(Dialog.Description, { "data-slot": "sheet-description", className: cn("text-sm text-muted-foreground", className), ...props }));
36
+ }
37
+
38
+ export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger };