@zukhruf/shadcn 0.0.0-stage → 0.3.21

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 (277) hide show
  1. package/LICENSE +48 -0
  2. package/README.md +166 -2
  3. package/dist/components/accordion.d.ts +7 -0
  4. package/dist/components/accordion.d.ts.map +1 -0
  5. package/dist/components/accordion.js +18 -0
  6. package/dist/components/accordion.js.map +1 -0
  7. package/dist/components/alert-dialog.d.ts +19 -0
  8. package/dist/components/alert-dialog.d.ts.map +1 -0
  9. package/dist/components/alert-dialog.js +44 -0
  10. package/dist/components/alert-dialog.js.map +1 -0
  11. package/dist/components/alert.d.ts +11 -0
  12. package/dist/components/alert.d.ts.map +1 -0
  13. package/dist/components/alert.js +29 -0
  14. package/dist/components/alert.js.map +1 -0
  15. package/dist/components/aspect-ratio.d.ts +5 -0
  16. package/dist/components/aspect-ratio.d.ts.map +1 -0
  17. package/dist/components/aspect-ratio.js +9 -0
  18. package/dist/components/aspect-ratio.js.map +1 -0
  19. package/dist/components/attachment.d.ts +24 -0
  20. package/dist/components/attachment.d.ts.map +1 -0
  21. package/dist/components/attachment.js +70 -0
  22. package/dist/components/attachment.js.map +1 -0
  23. package/dist/components/avatar.d.ts +12 -0
  24. package/dist/components/avatar.d.ts.map +1 -0
  25. package/dist/components/avatar.js +25 -0
  26. package/dist/components/avatar.js.map +1 -0
  27. package/dist/components/badge.d.ts +8 -0
  28. package/dist/components/badge.d.ts.map +1 -0
  29. package/dist/components/badge.js +34 -0
  30. package/dist/components/badge.js.map +1 -0
  31. package/dist/components/breadcrumb.d.ts +11 -0
  32. package/dist/components/breadcrumb.d.ts.map +1 -0
  33. package/dist/components/breadcrumb.js +38 -0
  34. package/dist/components/breadcrumb.js.map +1 -0
  35. package/dist/components/bubble.d.ts +17 -0
  36. package/dist/components/bubble.d.ts.map +1 -0
  37. package/dist/components/bubble.js +61 -0
  38. package/dist/components/bubble.js.map +1 -0
  39. package/dist/components/button-group.d.ts +11 -0
  40. package/dist/components/button-group.d.ts.map +1 -0
  41. package/dist/components/button-group.js +37 -0
  42. package/dist/components/button-group.js.map +1 -0
  43. package/dist/components/button.d.ts +9 -0
  44. package/dist/components/button.d.ts.map +1 -0
  45. package/dist/components/button.js +35 -0
  46. package/dist/components/button.js.map +1 -0
  47. package/dist/components/calendar.d.ts +11 -0
  48. package/dist/components/calendar.d.ts.map +1 -0
  49. package/dist/components/calendar.js +77 -0
  50. package/dist/components/calendar.js.map +1 -0
  51. package/dist/components/card.d.ts +12 -0
  52. package/dist/components/card.d.ts.map +1 -0
  53. package/dist/components/card.js +26 -0
  54. package/dist/components/card.js.map +1 -0
  55. package/dist/components/carousel.d.ts +29 -0
  56. package/dist/components/carousel.d.ts.map +1 -0
  57. package/dist/components/carousel.js +92 -0
  58. package/dist/components/carousel.js.map +1 -0
  59. package/dist/components/chart.d.ts +45 -0
  60. package/dist/components/chart.d.ts.map +1 -0
  61. package/dist/components/chart.js +133 -0
  62. package/dist/components/chart.js.map +1 -0
  63. package/dist/components/checkbox.d.ts +4 -0
  64. package/dist/components/checkbox.d.ts.map +1 -0
  65. package/dist/components/checkbox.js +10 -0
  66. package/dist/components/checkbox.js.map +1 -0
  67. package/dist/components/code-block.d.ts +27 -0
  68. package/dist/components/code-block.d.ts.map +1 -0
  69. package/dist/components/code-block.js +81 -0
  70. package/dist/components/code-block.js.map +1 -0
  71. package/dist/components/collapsible.d.ts +6 -0
  72. package/dist/components/collapsible.d.ts.map +1 -0
  73. package/dist/components/collapsible.js +14 -0
  74. package/dist/components/collapsible.js.map +1 -0
  75. package/dist/components/combobox.d.ts +25 -0
  76. package/dist/components/combobox.d.ts.map +1 -0
  77. package/dist/components/combobox.js +59 -0
  78. package/dist/components/combobox.js.map +1 -0
  79. package/dist/components/command.d.ts +20 -0
  80. package/dist/components/command.d.ts.map +1 -0
  81. package/dist/components/command.js +37 -0
  82. package/dist/components/command.js.map +1 -0
  83. package/dist/components/context-menu.d.ts +30 -0
  84. package/dist/components/context-menu.d.ts.map +1 -0
  85. package/dist/components/context-menu.js +53 -0
  86. package/dist/components/context-menu.js.map +1 -0
  87. package/dist/components/dialog.d.ts +18 -0
  88. package/dist/components/dialog.d.ts.map +1 -0
  89. package/dist/components/dialog.js +39 -0
  90. package/dist/components/dialog.js.map +1 -0
  91. package/dist/components/direction.d.ts +2 -0
  92. package/dist/components/direction.d.ts.map +1 -0
  93. package/dist/components/direction.js +3 -0
  94. package/dist/components/direction.js.map +1 -0
  95. package/dist/components/drawer.d.ts +17 -0
  96. package/dist/components/drawer.d.ts.map +1 -0
  97. package/dist/components/drawer.js +76 -0
  98. package/dist/components/drawer.js.map +1 -0
  99. package/dist/components/dropdown-menu.d.ts +30 -0
  100. package/dist/components/dropdown-menu.d.ts.map +1 -0
  101. package/dist/components/dropdown-menu.js +53 -0
  102. package/dist/components/dropdown-menu.js.map +1 -0
  103. package/dist/components/empty.d.ts +12 -0
  104. package/dist/components/empty.d.ts.map +1 -0
  105. package/dist/components/empty.js +34 -0
  106. package/dist/components/empty.js.map +1 -0
  107. package/dist/components/field.d.ts +25 -0
  108. package/dist/components/field.d.ts.map +1 -0
  109. package/dist/components/field.js +69 -0
  110. package/dist/components/field.js.map +1 -0
  111. package/dist/components/hover-card.d.ts +6 -0
  112. package/dist/components/hover-card.d.ts.map +1 -0
  113. package/dist/components/hover-card.js +15 -0
  114. package/dist/components/hover-card.js.map +1 -0
  115. package/dist/components/input-group.d.ts +19 -0
  116. package/dist/components/input-group.d.ts.map +1 -0
  117. package/dist/components/input-group.js +59 -0
  118. package/dist/components/input-group.js.map +1 -0
  119. package/dist/components/input-otp.d.ts +12 -0
  120. package/dist/components/input-otp.d.ts.map +1 -0
  121. package/dist/components/input-otp.js +22 -0
  122. package/dist/components/input-otp.js.map +1 -0
  123. package/dist/components/input.d.ts +4 -0
  124. package/dist/components/input.d.ts.map +1 -0
  125. package/dist/components/input.js +9 -0
  126. package/dist/components/input.js.map +1 -0
  127. package/dist/components/item.d.ts +23 -0
  128. package/dist/components/item.d.ts.map +1 -0
  129. package/dist/components/item.js +80 -0
  130. package/dist/components/item.js.map +1 -0
  131. package/dist/components/kbd.d.ts +4 -0
  132. package/dist/components/kbd.d.ts.map +1 -0
  133. package/dist/components/kbd.js +10 -0
  134. package/dist/components/kbd.js.map +1 -0
  135. package/dist/components/label.d.ts +4 -0
  136. package/dist/components/label.d.ts.map +1 -0
  137. package/dist/components/label.js +9 -0
  138. package/dist/components/label.js.map +1 -0
  139. package/dist/components/marker.d.ts +11 -0
  140. package/dist/components/marker.d.ts.map +1 -0
  141. package/dist/components/marker.js +36 -0
  142. package/dist/components/marker.js.map +1 -0
  143. package/dist/components/menubar.d.ts +30 -0
  144. package/dist/components/menubar.d.ts.map +1 -0
  145. package/dist/components/menubar.js +58 -0
  146. package/dist/components/menubar.js.map +1 -0
  147. package/dist/components/message-scroller.d.ts +11 -0
  148. package/dist/components/message-scroller.d.ts.map +1 -0
  149. package/dist/components/message-scroller.js +27 -0
  150. package/dist/components/message-scroller.js.map +1 -0
  151. package/dist/components/message.d.ts +11 -0
  152. package/dist/components/message.d.ts.map +1 -0
  153. package/dist/components/message.js +23 -0
  154. package/dist/components/message.js.map +1 -0
  155. package/dist/components/native-select.d.ts +9 -0
  156. package/dist/components/native-select.d.ts.map +1 -0
  157. package/dist/components/native-select.js +15 -0
  158. package/dist/components/native-select.js.map +1 -0
  159. package/dist/components/navigation-menu.d.ts +12 -0
  160. package/dist/components/navigation-menu.d.ts.map +1 -0
  161. package/dist/components/navigation-menu.js +32 -0
  162. package/dist/components/navigation-menu.js.map +1 -0
  163. package/dist/components/pagination.d.ts +18 -0
  164. package/dist/components/pagination.d.ts.map +1 -0
  165. package/dist/components/pagination.js +28 -0
  166. package/dist/components/pagination.js.map +1 -0
  167. package/dist/components/popover.d.ts +10 -0
  168. package/dist/components/popover.d.ts.map +1 -0
  169. package/dist/components/popover.js +25 -0
  170. package/dist/components/popover.js.map +1 -0
  171. package/dist/components/progress.d.ts +8 -0
  172. package/dist/components/progress.d.ts.map +1 -0
  173. package/dist/components/progress.js +21 -0
  174. package/dist/components/progress.js.map +1 -0
  175. package/dist/components/questionnaire.d.ts +20 -0
  176. package/dist/components/questionnaire.d.ts.map +1 -0
  177. package/dist/components/questionnaire.js +54 -0
  178. package/dist/components/questionnaire.js.map +1 -0
  179. package/dist/components/radio-group.d.ts +6 -0
  180. package/dist/components/radio-group.d.ts.map +1 -0
  181. package/dist/components/radio-group.js +13 -0
  182. package/dist/components/radio-group.js.map +1 -0
  183. package/dist/components/resizable.d.ts +8 -0
  184. package/dist/components/resizable.d.ts.map +1 -0
  185. package/dist/components/resizable.js +15 -0
  186. package/dist/components/resizable.js.map +1 -0
  187. package/dist/components/scroll-area.d.ts +6 -0
  188. package/dist/components/scroll-area.d.ts.map +1 -0
  189. package/dist/components/scroll-area.js +13 -0
  190. package/dist/components/scroll-area.js.map +1 -0
  191. package/dist/components/select.d.ts +16 -0
  192. package/dist/components/select.d.ts.map +1 -0
  193. package/dist/components/select.js +36 -0
  194. package/dist/components/select.js.map +1 -0
  195. package/dist/components/separator.d.ts +4 -0
  196. package/dist/components/separator.d.ts.map +1 -0
  197. package/dist/components/separator.js +9 -0
  198. package/dist/components/separator.js.map +1 -0
  199. package/dist/components/sheet.d.ts +15 -0
  200. package/dist/components/sheet.d.ts.map +1 -0
  201. package/dist/components/sheet.js +39 -0
  202. package/dist/components/sheet.js.map +1 -0
  203. package/dist/components/sidebar.d.ts +64 -0
  204. package/dist/components/sidebar.d.ts.map +1 -0
  205. package/dist/components/sidebar.js +257 -0
  206. package/dist/components/sidebar.js.map +1 -0
  207. package/dist/components/skeleton.d.ts +3 -0
  208. package/dist/components/skeleton.d.ts.map +1 -0
  209. package/dist/components/skeleton.js +7 -0
  210. package/dist/components/skeleton.js.map +1 -0
  211. package/dist/components/slider.d.ts +4 -0
  212. package/dist/components/slider.d.ts.map +1 -0
  213. package/dist/components/slider.js +13 -0
  214. package/dist/components/slider.js.map +1 -0
  215. package/dist/components/spinner.d.ts +3 -0
  216. package/dist/components/spinner.d.ts.map +1 -0
  217. package/dist/components/spinner.js +8 -0
  218. package/dist/components/spinner.js.map +1 -0
  219. package/dist/components/switch.d.ts +6 -0
  220. package/dist/components/switch.d.ts.map +1 -0
  221. package/dist/components/switch.js +9 -0
  222. package/dist/components/switch.js.map +1 -0
  223. package/dist/components/table.d.ts +11 -0
  224. package/dist/components/table.d.ts.map +1 -0
  225. package/dist/components/table.js +30 -0
  226. package/dist/components/table.js.map +1 -0
  227. package/dist/components/tabs.d.ts +11 -0
  228. package/dist/components/tabs.d.ts.map +1 -0
  229. package/dist/components/tabs.js +30 -0
  230. package/dist/components/tabs.js.map +1 -0
  231. package/dist/components/textarea.d.ts +4 -0
  232. package/dist/components/textarea.d.ts.map +1 -0
  233. package/dist/components/textarea.js +8 -0
  234. package/dist/components/textarea.js.map +1 -0
  235. package/dist/components/toast.d.ts +17 -0
  236. package/dist/components/toast.d.ts.map +1 -0
  237. package/dist/components/toast.js +68 -0
  238. package/dist/components/toast.js.map +1 -0
  239. package/dist/components/toggle-group.d.ts +12 -0
  240. package/dist/components/toggle-group.d.ts.map +1 -0
  241. package/dist/components/toggle-group.js +26 -0
  242. package/dist/components/toggle-group.js.map +1 -0
  243. package/dist/components/toggle.d.ts +9 -0
  244. package/dist/components/toggle.d.ts.map +1 -0
  245. package/dist/components/toggle.js +27 -0
  246. package/dist/components/toggle.js.map +1 -0
  247. package/dist/components/tooltip.d.ts +7 -0
  248. package/dist/components/tooltip.d.ts.map +1 -0
  249. package/dist/components/tooltip.js +18 -0
  250. package/dist/components/tooltip.js.map +1 -0
  251. package/dist/components/trace.d.ts +19 -0
  252. package/dist/components/trace.d.ts.map +1 -0
  253. package/dist/components/trace.js +31 -0
  254. package/dist/components/trace.js.map +1 -0
  255. package/dist/hooks/use-highlighted-code.d.ts +3 -0
  256. package/dist/hooks/use-highlighted-code.d.ts.map +1 -0
  257. package/dist/hooks/use-highlighted-code.js +50 -0
  258. package/dist/hooks/use-highlighted-code.js.map +1 -0
  259. package/dist/hooks/use-mobile.d.ts +2 -0
  260. package/dist/hooks/use-mobile.d.ts.map +1 -0
  261. package/dist/hooks/use-mobile.js +16 -0
  262. package/dist/hooks/use-mobile.js.map +1 -0
  263. package/dist/index.d.ts +66 -0
  264. package/dist/index.d.ts.map +1 -0
  265. package/dist/index.js +66 -0
  266. package/dist/index.js.map +1 -0
  267. package/dist/lib/highlighter.d.ts +10 -0
  268. package/dist/lib/highlighter.d.ts.map +1 -0
  269. package/dist/lib/highlighter.js +92 -0
  270. package/dist/lib/highlighter.js.map +1 -0
  271. package/dist/lib/utils.d.ts +2 -0
  272. package/dist/lib/utils.d.ts.map +1 -0
  273. package/dist/lib/utils.js +2 -0
  274. package/dist/lib/utils.js.map +1 -0
  275. package/package.json +85 -4
  276. package/styles.css +18 -0
  277. package/theme.css +772 -0
@@ -0,0 +1,92 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Button } from '#components/button';
4
+ import { cn } from 'cn';
5
+ import useEmblaCarousel, {} from 'embla-carousel-react';
6
+ import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';
7
+ import * as React from 'react';
8
+ const CarouselContext = React.createContext(null);
9
+ function useCarousel() {
10
+ const context = React.useContext(CarouselContext);
11
+ if (!context) {
12
+ throw new Error('useCarousel must be used within a <Carousel />');
13
+ }
14
+ return context;
15
+ }
16
+ function Carousel({ orientation = 'horizontal', opts, setApi, plugins, className, children, ...props }) {
17
+ const [carouselRef, api] = useEmblaCarousel({
18
+ ...opts,
19
+ axis: orientation === 'horizontal' ? 'x' : 'y',
20
+ }, plugins);
21
+ const [canScrollPrev, setCanScrollPrev] = React.useState(false);
22
+ const [canScrollNext, setCanScrollNext] = React.useState(false);
23
+ const onSelect = React.useCallback((api) => {
24
+ if (!api)
25
+ return;
26
+ setCanScrollPrev(api.canScrollPrev());
27
+ setCanScrollNext(api.canScrollNext());
28
+ }, []);
29
+ const scrollPrev = React.useCallback(() => {
30
+ api?.scrollPrev();
31
+ }, [api]);
32
+ const scrollNext = React.useCallback(() => {
33
+ api?.scrollNext();
34
+ }, [api]);
35
+ const handleKeyDown = React.useCallback((event) => {
36
+ if (event.key === 'ArrowLeft') {
37
+ event.preventDefault();
38
+ scrollPrev();
39
+ }
40
+ else if (event.key === 'ArrowRight') {
41
+ event.preventDefault();
42
+ scrollNext();
43
+ }
44
+ }, [scrollPrev, scrollNext]);
45
+ React.useEffect(() => {
46
+ if (!api || !setApi)
47
+ return;
48
+ setApi(api);
49
+ }, [api, setApi]);
50
+ React.useEffect(() => {
51
+ if (!api)
52
+ return;
53
+ onSelect(api);
54
+ api.on('reInit', onSelect);
55
+ api.on('select', onSelect);
56
+ return () => {
57
+ api?.off('select', onSelect);
58
+ };
59
+ }, [api, onSelect]);
60
+ return (_jsx(CarouselContext.Provider, { value: {
61
+ carouselRef,
62
+ api: api,
63
+ opts,
64
+ orientation: orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),
65
+ scrollPrev,
66
+ scrollNext,
67
+ canScrollPrev,
68
+ canScrollNext,
69
+ }, children: _jsx("div", { onKeyDownCapture: handleKeyDown, className: cn('relative', className), role: "region", "aria-roledescription": "carousel", "data-slot": "carousel", ...props, children: children }) }));
70
+ }
71
+ function CarouselContent({ className, ...props }) {
72
+ const { carouselRef, orientation } = useCarousel();
73
+ return (_jsx("div", { ref: carouselRef, className: "overflow-hidden", "data-slot": "carousel-content", children: _jsx("div", { className: cn('flex', orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col', className), ...props }) }));
74
+ }
75
+ function CarouselItem({ className, ...props }) {
76
+ const { orientation } = useCarousel();
77
+ return (_jsx("div", { role: "group", "aria-roledescription": "slide", "data-slot": "carousel-item", className: cn('min-w-0 shrink-0 grow-0 basis-full', orientation === 'horizontal' ? 'pl-4' : 'pt-4', className), ...props }));
78
+ }
79
+ function CarouselPrevious({ className, variant = 'outline', size = 'icon-sm', ...props }) {
80
+ const { orientation, scrollPrev, canScrollPrev } = useCarousel();
81
+ return (_jsxs(Button, { "data-slot": "carousel-previous", variant: variant, size: size, className: cn('absolute touch-manipulation rounded-full', orientation === 'horizontal'
82
+ ? 'inset-y-0 -left-12 my-auto'
83
+ : '-top-12 left-1/2 -translate-x-1/2 rotate-90', className), disabled: !canScrollPrev, onClick: scrollPrev, ...props, children: [_jsx(ChevronLeftIcon, {}), _jsx("span", { className: "sr-only", children: "Previous slide" })] }));
84
+ }
85
+ function CarouselNext({ className, variant = 'outline', size = 'icon-sm', ...props }) {
86
+ const { orientation, scrollNext, canScrollNext } = useCarousel();
87
+ return (_jsxs(Button, { "data-slot": "carousel-next", variant: variant, size: size, className: cn('absolute touch-manipulation rounded-full', orientation === 'horizontal'
88
+ ? 'inset-y-0 -right-12 my-auto'
89
+ : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90', className), disabled: !canScrollNext, onClick: scrollNext, ...props, children: [_jsx(ChevronRightIcon, {}), _jsx("span", { className: "sr-only", children: "Next slide" })] }));
90
+ }
91
+ export { Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext, useCarousel, };
92
+ //# sourceMappingURL=carousel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carousel.js","sourceRoot":"","sources":["../../src/components/carousel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import * as React from 'react';
2
+ import * as RechartsPrimitive from 'recharts';
3
+ import type { TooltipValueType } from 'recharts';
4
+ declare const THEMES: {
5
+ readonly light: "";
6
+ readonly dark: ".dark";
7
+ };
8
+ type TooltipNameType = number | string;
9
+ export type ChartConfig = Record<string, {
10
+ label?: React.ReactNode;
11
+ icon?: React.ComponentType;
12
+ } & ({
13
+ color?: string;
14
+ theme?: never;
15
+ } | {
16
+ color?: never;
17
+ theme: Record<keyof typeof THEMES, string>;
18
+ })>;
19
+ declare function ChartContainer({ id, className, children, config, initialDimension, ...props }: React.ComponentProps<'div'> & {
20
+ config: ChartConfig;
21
+ children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>['children'];
22
+ initialDimension?: {
23
+ width: number;
24
+ height: number;
25
+ };
26
+ }): React.JSX.Element;
27
+ declare const ChartStyle: ({ id, config }: {
28
+ id: string;
29
+ config: ChartConfig;
30
+ }) => React.JSX.Element | null;
31
+ declare const ChartTooltip: typeof RechartsPrimitive.Tooltip;
32
+ declare function ChartTooltipContent({ active, payload, className, indicator, hideLabel, hideIndicator, label, labelFormatter, labelClassName, formatter, color, nameKey, labelKey, }: React.ComponentProps<typeof RechartsPrimitive.Tooltip> & React.ComponentProps<'div'> & {
33
+ hideLabel?: boolean;
34
+ hideIndicator?: boolean;
35
+ indicator?: 'line' | 'dot' | 'dashed';
36
+ nameKey?: string;
37
+ labelKey?: string;
38
+ } & Omit<RechartsPrimitive.DefaultTooltipContentProps<TooltipValueType, TooltipNameType>, 'accessibilityLayer'>): React.JSX.Element | null;
39
+ declare const ChartLegend: React.MemoExoticComponent<(outsideProps: RechartsPrimitive.LegendProps) => React.ReactPortal | null>;
40
+ declare function ChartLegendContent({ className, hideIcon, payload, verticalAlign, nameKey, }: React.ComponentProps<'div'> & {
41
+ hideIcon?: boolean;
42
+ nameKey?: string;
43
+ } & RechartsPrimitive.DefaultLegendContentProps): React.JSX.Element | null;
44
+ export { ChartContainer, ChartTooltip, ChartTooltipContent, ChartLegend, ChartLegendContent, ChartStyle, };
45
+ //# sourceMappingURL=chart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../src/components/chart.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,iBAAiB,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGjD,QAAA,MAAM,MAAM;;;CAAwC,CAAC;AAGrD,KAAK,eAAe,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvC,MAAM,MAAM,WAAW,GAAG,MAAM,CAC9B,MAAM,EACN;IACE,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC5B,GAAG,CACA;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,GACjC;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,OAAO,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAChE,CACF,CAAC;AAkBF,iBAAS,cAAc,CAAC,EACtB,EAAE,EACF,SAAS,EACT,QAAQ,EACR,MAAM,EACN,gBAAoC,EACpC,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,cAAc,CAC5B,OAAO,iBAAiB,CAAC,mBAAmB,CAC7C,CAAC,UAAU,CAAC,CAAC;IACd,gBAAgB,CAAC,EAAE;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,qBAwBA;AAED,QAAA,MAAM,UAAU,GAAI,gBAAgB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,6BA+BtE,CAAC;AAEF,QAAA,MAAM,YAAY,kCAA4B,CAAC;AAE/C,iBAAS,mBAAmB,CAAC,EAC3B,MAAM,EACN,OAAO,EACP,SAAS,EACT,SAAiB,EACjB,SAAiB,EACjB,aAAqB,EACrB,KAAK,EACL,cAAc,EACd,cAAc,EACd,SAAS,EACT,KAAK,EACL,OAAO,EACP,QAAQ,GACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,iBAAiB,CAAC,OAAO,CAAC,GACvD,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CACN,iBAAiB,CAAC,0BAA0B,CAC1C,gBAAgB,EAChB,eAAe,CAChB,EACD,oBAAoB,CACrB,4BA6HF;AAED,QAAA,MAAM,WAAW,sGAA2B,CAAC;AAE7C,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,QAAgB,EAChB,OAAO,EACP,aAAwB,EACxB,OAAO,GACR,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,iBAAiB,CAAC,yBAAyB,4BA4C9C;AAsCD,OAAO,EACL,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,UAAU,GACX,CAAC"}
@@ -0,0 +1,133 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { cn } from 'cn';
4
+ import * as React from 'react';
5
+ import * as RechartsPrimitive from 'recharts';
6
+ // Format: { THEME_NAME: CSS_SELECTOR }
7
+ const THEMES = { light: '', dark: '.dark' };
8
+ const INITIAL_DIMENSION = { width: 320, height: 200 };
9
+ const ChartContext = React.createContext(null);
10
+ function useChart() {
11
+ const context = React.useContext(ChartContext);
12
+ if (!context) {
13
+ throw new Error('useChart must be used within a <ChartContainer />');
14
+ }
15
+ return context;
16
+ }
17
+ function ChartContainer({ id, className, children, config, initialDimension = INITIAL_DIMENSION, ...props }) {
18
+ const uniqueId = React.useId();
19
+ const chartId = `chart-${id ?? uniqueId.replace(/:/g, '')}`;
20
+ return (_jsx(ChartContext.Provider, { value: { config }, children: _jsxs("div", { "data-slot": "chart", "data-chart": chartId, className: cn("flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden", className), ...props, children: [_jsx(ChartStyle, { id: chartId, config: config }), _jsx(RechartsPrimitive.ResponsiveContainer, { initialDimension: initialDimension, children: children })] }) }));
21
+ }
22
+ const ChartStyle = ({ id, config }) => {
23
+ const colorConfig = Object.entries(config).filter(([, config]) => config.theme ?? config.color);
24
+ if (!colorConfig.length) {
25
+ return null;
26
+ }
27
+ return (_jsx("style", { dangerouslySetInnerHTML: {
28
+ __html: Object.entries(THEMES)
29
+ .map(([theme, prefix]) => `
30
+ ${prefix} [data-chart=${id}] {
31
+ ${colorConfig
32
+ .map(([key, itemConfig]) => {
33
+ const color = itemConfig.theme?.[theme] ??
34
+ itemConfig.color;
35
+ return color ? ` --color-${key}: ${color};` : null;
36
+ })
37
+ .join('\n')}
38
+ }
39
+ `)
40
+ .join('\n'),
41
+ } }));
42
+ };
43
+ const ChartTooltip = RechartsPrimitive.Tooltip;
44
+ function ChartTooltipContent({ active, payload, className, indicator = 'dot', hideLabel = false, hideIndicator = false, label, labelFormatter, labelClassName, formatter, color, nameKey, labelKey, }) {
45
+ const { config } = useChart();
46
+ const tooltipLabel = React.useMemo(() => {
47
+ if (hideLabel || !payload?.length) {
48
+ return null;
49
+ }
50
+ const [item] = payload;
51
+ const key = `${labelKey ?? item?.dataKey ?? item?.name ?? 'value'}`;
52
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
53
+ const value = !labelKey && typeof label === 'string'
54
+ ? (config[label]?.label ?? label)
55
+ : itemConfig?.label;
56
+ if (labelFormatter) {
57
+ return (_jsx("div", { className: cn('font-medium', labelClassName), children: labelFormatter(value, payload) }));
58
+ }
59
+ if (!value) {
60
+ return null;
61
+ }
62
+ return _jsx("div", { className: cn('font-medium', labelClassName), children: value });
63
+ }, [
64
+ label,
65
+ labelFormatter,
66
+ payload,
67
+ hideLabel,
68
+ labelClassName,
69
+ config,
70
+ labelKey,
71
+ ]);
72
+ if (!active || !payload?.length) {
73
+ return null;
74
+ }
75
+ const nestLabel = payload.length === 1 && indicator !== 'dot';
76
+ return (_jsxs("div", { className: cn('grid min-w-32 items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl', className), children: [!nestLabel ? tooltipLabel : null, _jsx("div", { className: "grid gap-1.5", children: payload
77
+ .filter((item) => item.type !== 'none')
78
+ .map((item, index) => {
79
+ const key = `${nameKey ?? item.name ?? item.dataKey ?? 'value'}`;
80
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
81
+ const indicatorColor = color ?? item.payload?.fill ?? item.color;
82
+ return (_jsx("div", { className: cn('flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground', indicator === 'dot' && 'items-center'), children: formatter && item?.value !== undefined && item.name ? (formatter(item.value, item.name, item, index, item.payload)) : (_jsxs(_Fragment, { children: [itemConfig?.icon ? (_jsx(itemConfig.icon, {})) : (!hideIndicator && (_jsx("div", { className: cn('shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)', {
83
+ 'h-2.5 w-2.5': indicator === 'dot',
84
+ 'w-1': indicator === 'line',
85
+ 'w-0 border-[1.5px] border-dashed bg-transparent': indicator === 'dashed',
86
+ 'my-0.5': nestLabel && indicator === 'dashed',
87
+ }), style: {
88
+ '--color-bg': indicatorColor,
89
+ '--color-border': indicatorColor,
90
+ } }))), _jsxs("div", { className: cn('flex flex-1 justify-between leading-none', nestLabel ? 'items-end' : 'items-center'), children: [_jsxs("div", { className: "grid gap-1.5", children: [nestLabel ? tooltipLabel : null, _jsx("span", { className: "text-muted-foreground", children: itemConfig?.label ?? item.name })] }), item.value != null && (_jsx("span", { className: "font-mono font-medium text-foreground tabular-nums", children: typeof item.value === 'number'
91
+ ? item.value.toLocaleString()
92
+ : String(item.value) }))] })] })) }, index));
93
+ }) })] }));
94
+ }
95
+ const ChartLegend = RechartsPrimitive.Legend;
96
+ function ChartLegendContent({ className, hideIcon = false, payload, verticalAlign = 'bottom', nameKey, }) {
97
+ const { config } = useChart();
98
+ if (!payload?.length) {
99
+ return null;
100
+ }
101
+ return (_jsx("div", { className: cn('flex items-center justify-center gap-4', verticalAlign === 'top' ? 'pb-3' : 'pt-3', className), children: payload
102
+ .filter((item) => item.type !== 'none')
103
+ .map((item, index) => {
104
+ const key = `${nameKey ?? item.dataKey ?? 'value'}`;
105
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
106
+ return (_jsxs("div", { className: cn('flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground'), children: [itemConfig?.icon && !hideIcon ? (_jsx(itemConfig.icon, {})) : (_jsx("div", { className: "h-2 w-2 shrink-0 rounded-[2px]", style: {
107
+ backgroundColor: item.color,
108
+ } })), itemConfig?.label] }, index));
109
+ }) }));
110
+ }
111
+ function getPayloadConfigFromPayload(config, payload, key) {
112
+ if (typeof payload !== 'object' || payload === null) {
113
+ return undefined;
114
+ }
115
+ const payloadPayload = 'payload' in payload &&
116
+ typeof payload.payload === 'object' &&
117
+ payload.payload !== null
118
+ ? payload.payload
119
+ : undefined;
120
+ let configLabelKey = key;
121
+ if (key in payload &&
122
+ typeof payload[key] === 'string') {
123
+ configLabelKey = payload[key];
124
+ }
125
+ else if (payloadPayload &&
126
+ key in payloadPayload &&
127
+ typeof payloadPayload[key] === 'string') {
128
+ configLabelKey = payloadPayload[key];
129
+ }
130
+ return configLabelKey in config ? config[configLabelKey] : config[key];
131
+ }
132
+ export { ChartContainer, ChartTooltip, ChartTooltipContent, ChartLegend, ChartLegendContent, ChartStyle, };
133
+ //# sourceMappingURL=chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart.js","sourceRoot":"","sources":["../../src/components/chart.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Checkbox as CheckboxPrimitive } from '@base-ui/react/checkbox';
2
+ declare function Checkbox({ className, ...props }: CheckboxPrimitive.Root.Props): import("react").JSX.Element;
3
+ export { Checkbox };
4
+ //# sourceMappingURL=checkbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/components/checkbox.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAIxE,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,+BAkBtE;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Checkbox as CheckboxPrimitive } from '@base-ui/react/checkbox';
4
+ import { cn } from 'cn';
5
+ import { CheckIcon } from 'lucide-react';
6
+ function Checkbox({ className, ...props }) {
7
+ return (_jsx(CheckboxPrimitive.Root, { "data-slot": "checkbox", className: cn('peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input transition-colors outline-none group-has-disabled/field:opacity-50 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(CheckboxPrimitive.Indicator, { "data-slot": "checkbox-indicator", className: "grid place-content-center text-current transition-none [&>svg]:size-3.5", children: _jsx(CheckIcon, {}) }) }));
8
+ }
9
+ export { Checkbox };
10
+ //# sourceMappingURL=checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../../src/components/checkbox.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,EAAE,EAAE,MAAM,IAAI,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,SAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAgC;IACrE,OAAO,CACL,KAAC,iBAAiB,CAAC,IAAI,iBACX,UAAU,EACpB,SAAS,EAAE,EAAE,CACX,y1BAAy1B,EACz1B,SAAS,CACV,KACG,KAAK,YAET,KAAC,iBAAiB,CAAC,SAAS,iBAChB,oBAAoB,EAC9B,SAAS,EAAC,yEAAyE,YAEnF,KAAC,SAAS,KAAG,GACe,GACP,CAC1B,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { Button } from '#components/button';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ import * as React from 'react';
4
+ declare const codeBlockVariants: (props?: ({
5
+ variant?: "default" | "destructive" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ declare function CodeBlock({ className, variant, size, ...props }: React.ComponentProps<'div'> & VariantProps<typeof codeBlockVariants> & {
8
+ size?: 'default' | 'sm';
9
+ }): React.JSX.Element;
10
+ declare function CodeBlockHeader({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
11
+ declare function CodeBlockTitle({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
12
+ declare function CodeBlockActions({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
13
+ declare function CodeBlockCopyButton({ value, variant, size, className, onClick, ...props }: React.ComponentProps<typeof Button> & {
14
+ value: string;
15
+ }): React.JSX.Element;
16
+ declare function CodeBlockContent({ className, children, style, wrap, lineNumbers, startLine, ...props }: React.ComponentProps<'pre'> & {
17
+ wrap?: boolean;
18
+ lineNumbers?: boolean;
19
+ startLine?: number;
20
+ }): React.JSX.Element;
21
+ declare const codeBlockLineVariants: (props?: ({
22
+ variant?: "default" | "added" | "removed" | "highlighted" | null | undefined;
23
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
24
+ declare function CodeBlockLine({ className, variant, children, ...props }: React.ComponentProps<'span'> & VariantProps<typeof codeBlockLineVariants>): React.JSX.Element;
25
+ declare function CodeBlockFooter({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
26
+ export { CodeBlock, CodeBlockHeader, CodeBlockTitle, CodeBlockActions, CodeBlockCopyButton, CodeBlockContent, CodeBlockLine, CodeBlockFooter, };
27
+ //# sourceMappingURL=code-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-block.d.ts","sourceRoot":"","sources":["../../src/components/code-block.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,KAAK,YAAY,EAAO,MAAM,0BAA0B,CAAC;AAGlE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,QAAA,MAAM,iBAAiB;;8EAetB,CAAC;AAEF,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,OAAmB,EACnB,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAC5B,YAAY,CAAC,OAAO,iBAAiB,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,qBAUrE;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW5E;AAED,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW3E;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW7B;AAED,iBAAS,mBAAmB,CAAC,EAC3B,KAAK,EACL,OAAiB,EACjB,IAAgB,EAChB,SAAS,EACT,OAAO,EACP,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,qBAqCzD;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,KAAK,EACL,IAAY,EACZ,WAAmB,EACnB,SAAa,EACb,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,qBA8BA;AAED,QAAA,MAAM,qBAAqB;;8EAe1B,CAAC;AAEF,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,OAAmB,EACnB,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,qBAAqB,CAAC,qBAoB3E;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW5E;AAED,OAAO,EACL,SAAS,EACT,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,eAAe,GAChB,CAAC"}
@@ -0,0 +1,81 @@
1
+ 'use client';
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Button } from '#components/button';
4
+ import { cva } from 'class-variance-authority';
5
+ import { cn } from 'cn';
6
+ import { CheckIcon, CopyIcon } from 'lucide-react';
7
+ import * as React from 'react';
8
+ const codeBlockVariants = cva('group/code-block relative flex w-full min-w-0 flex-col overflow-hidden rounded-lg text-sm has-[>[data-slot=code-block-content]:focus-visible]:ring-3 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/50 data-[size=sm]:text-xs', {
9
+ variants: {
10
+ variant: {
11
+ default: 'border border-input text-foreground has-[>[data-slot=code-block-content]:focus-visible]:border-ring dark:bg-input/30',
12
+ destructive: 'border border-destructive/30 text-destructive dark:border-destructive/40',
13
+ },
14
+ },
15
+ defaultVariants: {
16
+ variant: 'default',
17
+ },
18
+ });
19
+ function CodeBlock({ className, variant = 'default', size = 'default', ...props }) {
20
+ return (_jsx("div", { "data-slot": "code-block", "data-variant": variant, "data-size": size, className: cn(codeBlockVariants({ variant }), className), ...props }));
21
+ }
22
+ function CodeBlockHeader({ className, ...props }) {
23
+ return (_jsx("div", { "data-slot": "code-block-header", className: cn('flex min-w-0 shrink-0 items-center gap-2 px-3 pt-3 text-muted-foreground group-data-[size=sm]/code-block:px-2.5 group-data-[size=sm]/code-block:pt-2.5 group-data-[variant=destructive]/code-block:text-destructive *:has-[>[data-slot=code-block-title]]:min-w-0', className), ...props }));
24
+ }
25
+ function CodeBlockTitle({ className, ...props }) {
26
+ return (_jsx("div", { "data-slot": "code-block-title", className: cn("min-w-0 truncate font-sans text-sm font-medium text-foreground group-data-[size=sm]/code-block:text-xs group-data-[variant=destructive]/code-block:text-destructive [&_svg]:pointer-events-none [&_svg]:inline-block [&_svg]:align-middle [&_svg:not([class*='size-'])]:size-3.5 *:[svg]:me-1.5", className), ...props }));
27
+ }
28
+ function CodeBlockActions({ className, ...props }) {
29
+ return (_jsx("div", { "data-slot": "code-block-actions", className: cn('-my-1 ms-auto -me-1.5 flex shrink-0 items-center gap-1 [[data-slot=code-block]>&]:absolute [[data-slot=code-block]>&]:end-2 [[data-slot=code-block]>&]:top-2 [[data-slot=code-block]>&]:z-10 [[data-slot=code-block]>&]:m-0 [[data-slot=code-block]>&]:opacity-0 [[data-slot=code-block]>&]:transition-opacity [[data-slot=code-block]>&]:group-focus-within/code-block:opacity-100 [[data-slot=code-block]>&]:group-hover/code-block:opacity-100 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-1.5 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-1.5 [[data-slot=code-block]>&]:pointer-coarse:opacity-100 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10', className), ...props }));
30
+ }
31
+ function CodeBlockCopyButton({ value, variant = 'ghost', size = 'icon-xs', className, onClick, ...props }) {
32
+ const [copied, setCopied] = React.useState(false);
33
+ React.useEffect(() => {
34
+ if (!copied) {
35
+ return;
36
+ }
37
+ const timeout = setTimeout(() => setCopied(false), 2000);
38
+ return () => clearTimeout(timeout);
39
+ }, [copied]);
40
+ return (_jsxs(_Fragment, { children: [_jsx(Button, { "data-slot": "code-block-copy-button", "data-copied": copied || undefined, variant: variant, size: size, "aria-label": copied ? 'Copied' : 'Copy', className: cn(className), onClick: (event) => {
41
+ onClick?.(event);
42
+ navigator.clipboard
43
+ .writeText(value)
44
+ .then(() => setCopied(true))
45
+ .catch(() => { });
46
+ }, ...props, children: copied ? _jsx(CheckIcon, {}) : _jsx(CopyIcon, {}) }), _jsx("span", { "aria-live": "polite", className: "sr-only", children: copied ? 'Copied' : '' })] }));
47
+ }
48
+ function CodeBlockContent({ className, children, style, wrap = false, lineNumbers = false, startLine = 1, ...props }) {
49
+ return (_jsx("pre", { "data-slot": "code-block-content", "data-wrap": wrap || undefined, "data-numbered": lineNumbers || undefined, dir: "ltr", tabIndex: 0, style: { counterReset: `line ${startLine - 1}`, ...style }, className: cn('min-h-0 min-w-0 scroll-fade-x scrollbar-thin overflow-auto px-3 py-3 text-start font-mono leading-relaxed outline-none group-has-data-[slot=code-block-footer]/code-block:pb-2 group-has-data-[slot=code-block-header]/code-block:pt-2 group-data-[size=sm]/code-block:px-2.5 group-data-[size=sm]/code-block:py-2.5 group-data-[size=sm]/code-block:group-has-data-[slot=code-block-header]/code-block:pt-1.5 data-wrap:scroll-fade-y data-wrap:wrap-break-word data-wrap:whitespace-pre-wrap', className), ...props, children: _jsx("code", { "data-slot": "code-block-code", className: "grid min-h-lh min-w-max content-start in-data-numbered:grid-cols-[auto_1fr] in-data-wrap:min-w-0", children: lineNumbers && typeof children === 'string'
50
+ ? children
51
+ .replace(/\n$/, '')
52
+ .split('\n')
53
+ .map((line, index) => (_jsx(CodeBlockLine, { children: line }, index)))
54
+ : children }) }));
55
+ }
56
+ const codeBlockLineVariants = cva("relative -mx-3 block min-h-lh px-3 group-data-[size=sm]/code-block:-mx-2.5 group-data-[size=sm]/code-block:px-2.5 before:min-w-6 before:text-end before:text-muted-foreground after:absolute after:start-1 after:top-0 after:text-muted-foreground after:select-none in-data-numbered:col-span-2 in-data-numbered:grid in-data-numbered:grid-cols-subgrid in-data-numbered:gap-x-3 in-data-numbered:[counter-increment:line] in-data-numbered:before:content-[counter(line)] in-data-numbered:before:select-none in-data-numbered:supports-[content:counter(line)_/_'']:before:content-[counter(line)_/_'']", {
57
+ variants: {
58
+ variant: {
59
+ default: '',
60
+ added: "bg-muted after:content-['+']",
61
+ removed: "bg-destructive/10 after:text-destructive after:content-['−']",
62
+ highlighted: 'bg-muted',
63
+ },
64
+ },
65
+ defaultVariants: {
66
+ variant: 'default',
67
+ },
68
+ });
69
+ function CodeBlockLine({ className, variant = 'default', children, ...props }) {
70
+ // An empty line holds a newline so copying a selection keeps blank lines.
71
+ const empty = children === undefined ||
72
+ children === null ||
73
+ children === '' ||
74
+ (Array.isArray(children) && children.length === 0);
75
+ return (_jsx("span", { "data-slot": "code-block-line", "data-variant": variant, className: cn(codeBlockLineVariants({ variant }), className), ...props, children: _jsx("span", { "data-slot": "code-block-line-content", className: "min-w-0", children: empty ? '\n' : children }) }));
76
+ }
77
+ function CodeBlockFooter({ className, ...props }) {
78
+ return (_jsx("div", { "data-slot": "code-block-footer", className: cn('flex min-w-0 shrink-0 items-center gap-2 px-3 pb-3 text-muted-foreground group-data-[size=sm]/code-block:px-2.5 group-data-[size=sm]/code-block:pb-2.5', className), ...props }));
79
+ }
80
+ export { CodeBlock, CodeBlockHeader, CodeBlockTitle, CodeBlockActions, CodeBlockCopyButton, CodeBlockContent, CodeBlockLine, CodeBlockFooter, };
81
+ //# sourceMappingURL=code-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-block.js","sourceRoot":"","sources":["../../src/components/code-block.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Collapsible as CollapsiblePrimitive } from '@base-ui/react/collapsible';
2
+ declare function Collapsible({ ...props }: CollapsiblePrimitive.Root.Props): import("react").JSX.Element;
3
+ declare function CollapsibleTrigger({ ...props }: CollapsiblePrimitive.Trigger.Props): import("react").JSX.Element;
4
+ declare function CollapsibleContent({ ...props }: CollapsiblePrimitive.Panel.Props): import("react").JSX.Element;
5
+ export { Collapsible, CollapsibleTrigger, CollapsibleContent };
6
+ //# sourceMappingURL=collapsible.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collapsible.d.ts","sourceRoot":"","sources":["../../src/components/collapsible.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEjF,iBAAS,WAAW,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,CAAC,IAAI,CAAC,KAAK,+BAEjE;AAED,iBAAS,kBAAkB,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,CAAC,OAAO,CAAC,KAAK,+BAI3E;AAED,iBAAS,kBAAkB,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,CAAC,KAAK,CAAC,KAAK,+BAIzE;AAED,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Collapsible as CollapsiblePrimitive } from '@base-ui/react/collapsible';
4
+ function Collapsible({ ...props }) {
5
+ return _jsx(CollapsiblePrimitive.Root, { "data-slot": "collapsible", ...props });
6
+ }
7
+ function CollapsibleTrigger({ ...props }) {
8
+ return (_jsx(CollapsiblePrimitive.Trigger, { "data-slot": "collapsible-trigger", ...props }));
9
+ }
10
+ function CollapsibleContent({ ...props }) {
11
+ return (_jsx(CollapsiblePrimitive.Panel, { "data-slot": "collapsible-content", ...props }));
12
+ }
13
+ export { Collapsible, CollapsibleTrigger, CollapsibleContent };
14
+ //# sourceMappingURL=collapsible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collapsible.js","sourceRoot":"","sources":["../../src/components/collapsible.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEjF,SAAS,WAAW,CAAC,EAAE,GAAG,KAAK,EAAmC;IAChE,OAAO,KAAC,oBAAoB,CAAC,IAAI,iBAAW,aAAa,KAAK,KAAK,GAAI,CAAC;AAC1E,CAAC;AAED,SAAS,kBAAkB,CAAC,EAAE,GAAG,KAAK,EAAsC;IAC1E,OAAO,CACL,KAAC,oBAAoB,CAAC,OAAO,iBAAW,qBAAqB,KAAK,KAAK,GAAI,CAC5E,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,EAAE,GAAG,KAAK,EAAoC;IACxE,OAAO,CACL,KAAC,oBAAoB,CAAC,KAAK,iBAAW,qBAAqB,KAAK,KAAK,GAAI,CAC1E,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { Combobox as ComboboxPrimitive } from '@base-ui/react';
2
+ import * as React from 'react';
3
+ declare const Combobox: typeof ComboboxPrimitive.Root;
4
+ declare function ComboboxValue({ ...props }: ComboboxPrimitive.Value.Props): React.JSX.Element;
5
+ declare function ComboboxTrigger({ className, children, ...props }: ComboboxPrimitive.Trigger.Props): React.JSX.Element;
6
+ declare function ComboboxInput({ className, children, disabled, showTrigger, showClear, ...props }: ComboboxPrimitive.Input.Props & {
7
+ showTrigger?: boolean;
8
+ showClear?: boolean;
9
+ }): React.JSX.Element;
10
+ declare function ComboboxContent({ className, side, sideOffset, align, alignOffset, anchor, ...props }: ComboboxPrimitive.Popup.Props & Pick<ComboboxPrimitive.Positioner.Props, 'side' | 'align' | 'sideOffset' | 'alignOffset' | 'anchor'>): React.JSX.Element;
11
+ declare function ComboboxList({ className, ...props }: ComboboxPrimitive.List.Props): React.JSX.Element;
12
+ declare function ComboboxItem({ className, children, ...props }: ComboboxPrimitive.Item.Props): React.JSX.Element;
13
+ declare function ComboboxGroup({ className, ...props }: ComboboxPrimitive.Group.Props): React.JSX.Element;
14
+ declare function ComboboxLabel({ className, ...props }: ComboboxPrimitive.GroupLabel.Props): React.JSX.Element;
15
+ declare function ComboboxCollection({ ...props }: ComboboxPrimitive.Collection.Props): React.JSX.Element;
16
+ declare function ComboboxEmpty({ className, ...props }: ComboboxPrimitive.Empty.Props): React.JSX.Element;
17
+ declare function ComboboxSeparator({ className, ...props }: ComboboxPrimitive.Separator.Props): React.JSX.Element;
18
+ declare function ComboboxChips({ className, ...props }: React.ComponentPropsWithRef<typeof ComboboxPrimitive.Chips> & ComboboxPrimitive.Chips.Props): React.JSX.Element;
19
+ declare function ComboboxChip({ className, children, showRemove, ...props }: ComboboxPrimitive.Chip.Props & {
20
+ showRemove?: boolean;
21
+ }): React.JSX.Element;
22
+ declare function ComboboxChipsInput({ className, ...props }: ComboboxPrimitive.Input.Props): React.JSX.Element;
23
+ declare function useComboboxAnchor(): React.RefObject<HTMLDivElement | null>;
24
+ export { Combobox, ComboboxInput, ComboboxContent, ComboboxList, ComboboxItem, ComboboxGroup, ComboboxLabel, ComboboxCollection, ComboboxEmpty, ComboboxSeparator, ComboboxChips, ComboboxChip, ComboboxChipsInput, ComboboxTrigger, ComboboxValue, useComboboxAnchor, };
25
+ //# sourceMappingURL=combobox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../src/components/combobox.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAG/D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,QAAA,MAAM,QAAQ,+BAAyB,CAAC;AAExC,iBAAS,aAAa,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,qBAEjE;AAED,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,iBAAiB,CAAC,OAAO,CAAC,KAAK,qBAWjC;AAeD,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,QAAQ,EACR,QAAgB,EAChB,WAAkB,EAClB,SAAiB,EACjB,GAAG,KAAK,EACT,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,GAAG;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,qBAuBA;AAED,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,IAAe,EACf,UAAc,EACd,KAAe,EACf,WAAe,EACf,MAAM,EACN,GAAG,KAAK,EACT,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,GAC9B,IAAI,CACF,iBAAiB,CAAC,UAAU,CAAC,KAAK,EAClC,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,QAAQ,CAC3D,qBAuBF;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,qBAW1E;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,qBAoB9B;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,qBAQ5E;AAED,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,iBAAiB,CAAC,UAAU,CAAC,KAAK,qBAQpC;AAED,iBAAS,kBAAkB,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,UAAU,CAAC,KAAK,qBAI3E;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,qBAW5E;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,iBAAiB,CAAC,SAAS,CAAC,KAAK,qBAQnC;AAED,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,qBAAqB,CAAC,OAAO,iBAAiB,CAAC,KAAK,CAAC,GAC5D,iBAAiB,CAAC,KAAK,CAAC,KAAK,qBAW9B;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,QAAQ,EACR,UAAiB,EACjB,GAAG,KAAK,EACT,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,GAAG;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,qBAsBA;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,qBAQ/B;AAED,iBAAS,iBAAiB,2CAEzB;AAED,OAAO,EACL,QAAQ,EACR,aAAa,EACb,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,iBAAiB,GAClB,CAAC"}
@@ -0,0 +1,59 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Button } from '#components/button';
4
+ import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, } from '#components/input-group';
5
+ import { Combobox as ComboboxPrimitive } from '@base-ui/react';
6
+ import { cn } from 'cn';
7
+ import { CheckIcon, ChevronDownIcon, XIcon } from 'lucide-react';
8
+ import * as React from 'react';
9
+ const Combobox = ComboboxPrimitive.Root;
10
+ function ComboboxValue({ ...props }) {
11
+ return _jsx(ComboboxPrimitive.Value, { "data-slot": "combobox-value", ...props });
12
+ }
13
+ function ComboboxTrigger({ className, children, ...props }) {
14
+ return (_jsxs(ComboboxPrimitive.Trigger, { "data-slot": "combobox-trigger", className: cn("[&_svg:not([class*='size-'])]:size-4", className), ...props, children: [children, _jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" })] }));
15
+ }
16
+ function ComboboxClear({ className, ...props }) {
17
+ return (_jsx(ComboboxPrimitive.Clear, { "data-slot": "combobox-clear", render: _jsx(InputGroupButton, { variant: "ghost", size: "icon-xs" }), className: cn(className), ...props, children: _jsx(XIcon, { className: "pointer-events-none" }) }));
18
+ }
19
+ function ComboboxInput({ className, children, disabled = false, showTrigger = true, showClear = false, ...props }) {
20
+ return (_jsxs(InputGroup, { className: cn('w-auto', className), children: [_jsx(ComboboxPrimitive.Input, { render: _jsx(InputGroupInput, { disabled: disabled }), ...props }), _jsxs(InputGroupAddon, { align: "inline-end", children: [showTrigger && (_jsx(InputGroupButton, { size: "icon-xs", variant: "ghost", render: _jsx(ComboboxTrigger, {}), "data-slot": "input-group-button", className: "group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent", disabled: disabled })), showClear && _jsx(ComboboxClear, { disabled: disabled })] }), children] }));
21
+ }
22
+ function ComboboxContent({ className, side = 'bottom', sideOffset = 6, align = 'start', alignOffset = 0, anchor, ...props }) {
23
+ return (_jsx(ComboboxPrimitive.Portal, { children: _jsx(ComboboxPrimitive.Positioner, { side: side, sideOffset: sideOffset, align: align, alignOffset: alignOffset, anchor: anchor, className: "isolate z-50", children: _jsx(ComboboxPrimitive.Popup, { "data-slot": "combobox-content", "data-chips": !!anchor, className: cn('group/combobox-content relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+--spacing(7))] origin-(--transform-origin) overflow-hidden rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[chips=true]:min-w-(--anchor-width) 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-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:border-input/30 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:shadow-none 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 }) }) }));
24
+ }
25
+ function ComboboxList({ className, ...props }) {
26
+ return (_jsx(ComboboxPrimitive.List, { "data-slot": "combobox-list", className: cn('no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto overscroll-contain p-1 data-empty:p-0', className), ...props }));
27
+ }
28
+ function ComboboxItem({ className, children, ...props }) {
29
+ return (_jsxs(ComboboxPrimitive.Item, { "data-slot": "combobox-item", className: cn("relative flex w-full cursor-default items-center gap-2 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**: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", className), ...props, children: [children, _jsx(ComboboxPrimitive.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" }) })] }));
30
+ }
31
+ function ComboboxGroup({ className, ...props }) {
32
+ return (_jsx(ComboboxPrimitive.Group, { "data-slot": "combobox-group", className: cn(className), ...props }));
33
+ }
34
+ function ComboboxLabel({ className, ...props }) {
35
+ return (_jsx(ComboboxPrimitive.GroupLabel, { "data-slot": "combobox-label", className: cn('px-2 py-1.5 text-xs text-muted-foreground', className), ...props }));
36
+ }
37
+ function ComboboxCollection({ ...props }) {
38
+ return (_jsx(ComboboxPrimitive.Collection, { "data-slot": "combobox-collection", ...props }));
39
+ }
40
+ function ComboboxEmpty({ className, ...props }) {
41
+ return (_jsx(ComboboxPrimitive.Empty, { "data-slot": "combobox-empty", className: cn('hidden w-full justify-center py-2 text-center text-sm text-muted-foreground group-data-empty/combobox-content:flex', className), ...props }));
42
+ }
43
+ function ComboboxSeparator({ className, ...props }) {
44
+ return (_jsx(ComboboxPrimitive.Separator, { "data-slot": "combobox-separator", className: cn('-mx-1 my-1 h-px bg-border', className), ...props }));
45
+ }
46
+ function ComboboxChips({ className, ...props }) {
47
+ return (_jsx(ComboboxPrimitive.Chips, { "data-slot": "combobox-chips", className: cn('flex min-h-8 flex-wrap items-center gap-1 rounded-lg border border-input bg-transparent bg-clip-padding px-2.5 py-1 text-sm transition-colors focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50 has-aria-invalid:border-destructive has-aria-invalid:ring-3 has-aria-invalid:ring-destructive/20 has-data-[slot=combobox-chip]:px-1 dark:bg-input/30 dark:has-aria-invalid:border-destructive/50 dark:has-aria-invalid:ring-destructive/40', className), ...props }));
48
+ }
49
+ function ComboboxChip({ className, children, showRemove = true, ...props }) {
50
+ return (_jsxs(ComboboxPrimitive.Chip, { "data-slot": "combobox-chip", className: cn('flex h-[calc(--spacing(5.25))] w-fit items-center justify-center gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium whitespace-nowrap text-foreground has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:opacity-50 has-data-[slot=combobox-chip-remove]:pr-0', className), ...props, children: [children, showRemove && (_jsx(ComboboxPrimitive.ChipRemove, { render: _jsx(Button, { variant: "ghost", size: "icon-xs" }), className: "-ml-1 opacity-50 hover:opacity-100", "data-slot": "combobox-chip-remove", children: _jsx(XIcon, { className: "pointer-events-none" }) }))] }));
51
+ }
52
+ function ComboboxChipsInput({ className, ...props }) {
53
+ return (_jsx(ComboboxPrimitive.Input, { "data-slot": "combobox-chip-input", className: cn('min-w-16 flex-1 outline-none', className), ...props }));
54
+ }
55
+ function useComboboxAnchor() {
56
+ return React.useRef(null);
57
+ }
58
+ export { Combobox, ComboboxInput, ComboboxContent, ComboboxList, ComboboxItem, ComboboxGroup, ComboboxLabel, ComboboxCollection, ComboboxEmpty, ComboboxSeparator, ComboboxChips, ComboboxChip, ComboboxChipsInput, ComboboxTrigger, ComboboxValue, useComboboxAnchor, };
59
+ //# sourceMappingURL=combobox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combobox.js","sourceRoot":"","sources":["../../src/components/combobox.tsx"],"names":[],"mappings":"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"}