@docyrus/shadcn 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/README.md +158 -0
  2. package/dist/default/accordion.d.ts +9 -0
  3. package/dist/default/accordion.js +51 -0
  4. package/dist/default/accordion.js.map +1 -0
  5. package/dist/default/alert-dialog.d.ts +23 -0
  6. package/dist/default/alert-dialog.js +153 -0
  7. package/dist/default/alert-dialog.js.map +1 -0
  8. package/dist/default/alert.d.ts +11 -0
  9. package/dist/default/alert.js +56 -0
  10. package/dist/default/alert.js.map +1 -0
  11. package/dist/default/aspect-ratio.d.ts +6 -0
  12. package/dist/default/aspect-ratio.js +8 -0
  13. package/dist/default/aspect-ratio.js.map +1 -0
  14. package/dist/default/avatar.d.ts +8 -0
  15. package/dist/default/avatar.js +46 -0
  16. package/dist/default/avatar.js.map +1 -0
  17. package/dist/default/badge.d.ts +13 -0
  18. package/dist/default/badge.js +32 -0
  19. package/dist/default/badge.js.map +1 -0
  20. package/dist/default/breadcrumb.d.ts +22 -0
  21. package/dist/default/breadcrumb.js +94 -0
  22. package/dist/default/breadcrumb.js.map +1 -0
  23. package/dist/default/button-group.d.ts +17 -0
  24. package/dist/default/button-group.js +98 -0
  25. package/dist/default/button-group.js.map +1 -0
  26. package/dist/default/button.d.ts +14 -0
  27. package/dist/default/button.js +54 -0
  28. package/dist/default/button.js.map +1 -0
  29. package/dist/default/calendar.d.ts +13 -0
  30. package/dist/default/calendar.js +231 -0
  31. package/dist/default/calendar.js.map +1 -0
  32. package/dist/default/card.d.ts +10 -0
  33. package/dist/default/card.js +66 -0
  34. package/dist/default/card.js.map +1 -0
  35. package/dist/default/carousel.d.ts +23 -0
  36. package/dist/default/carousel.js +237 -0
  37. package/dist/default/carousel.js.map +1 -0
  38. package/dist/default/chart.d.ts +69 -0
  39. package/dist/default/chart.js +241 -0
  40. package/dist/default/chart.js.map +1 -0
  41. package/dist/default/checkbox.d.ts +6 -0
  42. package/dist/default/checkbox.js +34 -0
  43. package/dist/default/checkbox.js.map +1 -0
  44. package/dist/default/collapsible.d.ts +8 -0
  45. package/dist/default/collapsible.js +9 -0
  46. package/dist/default/collapsible.js.map +1 -0
  47. package/dist/default/command.d.ts +83 -0
  48. package/dist/default/command.js +169 -0
  49. package/dist/default/command.js.map +1 -0
  50. package/dist/default/context-menu.d.ts +30 -0
  51. package/dist/default/context-menu.js +146 -0
  52. package/dist/default/context-menu.js.map +1 -0
  53. package/dist/default/dialog.d.ts +22 -0
  54. package/dist/default/dialog.js +101 -0
  55. package/dist/default/dialog.js.map +1 -0
  56. package/dist/default/drawer.d.ts +27 -0
  57. package/dist/default/drawer.js +99 -0
  58. package/dist/default/drawer.js.map +1 -0
  59. package/dist/default/dropdown-menu.d.ts +30 -0
  60. package/dist/default/dropdown-menu.js +143 -0
  61. package/dist/default/dropdown-menu.js.map +1 -0
  62. package/dist/default/empty.d.ts +15 -0
  63. package/dist/default/empty.js +104 -0
  64. package/dist/default/empty.js.map +1 -0
  65. package/dist/default/field.d.ts +30 -0
  66. package/dist/default/field.js +253 -0
  67. package/dist/default/field.js.map +1 -0
  68. package/dist/default/form.d.ts +28 -0
  69. package/dist/default/form.js +121 -0
  70. package/dist/default/form.js.map +1 -0
  71. package/dist/default/hover-card.d.ts +8 -0
  72. package/dist/default/hover-card.js +30 -0
  73. package/dist/default/hover-card.js.map +1 -0
  74. package/dist/default/index.d.ts +95 -0
  75. package/dist/default/index.js +4029 -0
  76. package/dist/default/index.js.map +1 -0
  77. package/dist/default/input-group.d.ts +20 -0
  78. package/dist/default/input-group.js +225 -0
  79. package/dist/default/input-group.js.map +1 -0
  80. package/dist/default/input-otp.d.ts +37 -0
  81. package/dist/default/input-otp.js +53 -0
  82. package/dist/default/input-otp.js.map +1 -0
  83. package/dist/default/input.d.ts +5 -0
  84. package/dist/default/input.js +30 -0
  85. package/dist/default/input.js.map +1 -0
  86. package/dist/default/item.d.ts +28 -0
  87. package/dist/default/item.js +203 -0
  88. package/dist/default/item.js.map +1 -0
  89. package/dist/default/kbd.d.ts +6 -0
  90. package/dist/default/kbd.js +37 -0
  91. package/dist/default/kbd.js.map +1 -0
  92. package/dist/default/label.d.ts +8 -0
  93. package/dist/default/label.js +26 -0
  94. package/dist/default/label.js.map +1 -0
  95. package/dist/default/menubar.d.ts +31 -0
  96. package/dist/default/menubar.js +194 -0
  97. package/dist/default/menubar.js.map +1 -0
  98. package/dist/default/navigation-menu.d.ts +15 -0
  99. package/dist/default/navigation-menu.js +106 -0
  100. package/dist/default/navigation-menu.js.map +1 -0
  101. package/dist/default/pagination.d.ts +33 -0
  102. package/dist/default/pagination.js +146 -0
  103. package/dist/default/pagination.js.map +1 -0
  104. package/dist/default/popover.d.ts +8 -0
  105. package/dist/default/popover.js +30 -0
  106. package/dist/default/popover.js.map +1 -0
  107. package/dist/default/progress.d.ts +6 -0
  108. package/dist/default/progress.js +32 -0
  109. package/dist/default/progress.js.map +1 -0
  110. package/dist/default/radio-group.d.ts +7 -0
  111. package/dist/default/radio-group.js +41 -0
  112. package/dist/default/radio-group.js.map +1 -0
  113. package/dist/default/resizable.d.ts +27 -0
  114. package/dist/default/resizable.js +42 -0
  115. package/dist/default/resizable.js.map +1 -0
  116. package/dist/default/scroll-area.d.ts +7 -0
  117. package/dist/default/scroll-area.js +44 -0
  118. package/dist/default/scroll-area.js.map +1 -0
  119. package/dist/default/select.d.ts +15 -0
  120. package/dist/default/select.js +121 -0
  121. package/dist/default/select.js.map +1 -0
  122. package/dist/default/separator.d.ts +6 -0
  123. package/dist/default/separator.js +31 -0
  124. package/dist/default/separator.js.map +1 -0
  125. package/dist/default/sheet.d.ts +29 -0
  126. package/dist/default/sheet.js +112 -0
  127. package/dist/default/sheet.js.map +1 -0
  128. package/dist/default/sidebar.d.ts +71 -0
  129. package/dist/default/sidebar.js +780 -0
  130. package/dist/default/sidebar.js.map +1 -0
  131. package/dist/default/skeleton.d.ts +5 -0
  132. package/dist/default/skeleton.js +24 -0
  133. package/dist/default/skeleton.js.map +1 -0
  134. package/dist/default/slider.d.ts +6 -0
  135. package/dist/default/slider.js +30 -0
  136. package/dist/default/slider.js.map +1 -0
  137. package/dist/default/sonner.d.ts +7 -0
  138. package/dist/default/sonner.js +35 -0
  139. package/dist/default/sonner.js.map +1 -0
  140. package/dist/default/spinner.d.ts +5 -0
  141. package/dist/default/spinner.js +24 -0
  142. package/dist/default/spinner.js.map +1 -0
  143. package/dist/default/styles.css +149 -0
  144. package/dist/default/switch.d.ts +6 -0
  145. package/dist/default/switch.js +34 -0
  146. package/dist/default/switch.js.map +1 -0
  147. package/dist/default/table.d.ts +12 -0
  148. package/dist/default/table.js +87 -0
  149. package/dist/default/table.js.map +1 -0
  150. package/dist/default/tabs.d.ts +9 -0
  151. package/dist/default/tabs.js +51 -0
  152. package/dist/default/tabs.js.map +1 -0
  153. package/dist/default/textarea.d.ts +5 -0
  154. package/dist/default/textarea.js +27 -0
  155. package/dist/default/textarea.js.map +1 -0
  156. package/dist/default/toggle-group.d.ts +15 -0
  157. package/dist/default/toggle-group.js +77 -0
  158. package/dist/default/toggle-group.js.map +1 -0
  159. package/dist/default/toggle.d.ts +15 -0
  160. package/dist/default/toggle.js +44 -0
  161. package/dist/default/toggle.js.map +1 -0
  162. package/dist/default/tooltip.d.ts +9 -0
  163. package/dist/default/tooltip.js +29 -0
  164. package/dist/default/tooltip.js.map +1 -0
  165. package/dist/hooks/index.d.ts +1 -0
  166. package/dist/hooks/index.js +21 -0
  167. package/dist/hooks/index.js.map +1 -0
  168. package/dist/hooks/use-mobile.d.ts +3 -0
  169. package/dist/hooks/use-mobile.js +21 -0
  170. package/dist/hooks/use-mobile.js.map +1 -0
  171. package/dist/index.d.ts +98 -0
  172. package/dist/index.js +4029 -0
  173. package/dist/index.js.map +1 -0
  174. package/dist/lib/index.d.ts +2 -0
  175. package/dist/lib/index.js +11 -0
  176. package/dist/lib/index.js.map +1 -0
  177. package/dist/lib/utils.d.ts +5 -0
  178. package/dist/lib/utils.js +11 -0
  179. package/dist/lib/utils.js.map +1 -0
  180. package/dist/new-york/accordion.d.ts +10 -0
  181. package/dist/new-york/accordion.js +68 -0
  182. package/dist/new-york/accordion.js.map +1 -0
  183. package/dist/new-york/alert-dialog.d.ts +17 -0
  184. package/dist/new-york/alert-dialog.js +171 -0
  185. package/dist/new-york/alert-dialog.js.map +1 -0
  186. package/dist/new-york/alert.d.ts +13 -0
  187. package/dist/new-york/alert.js +71 -0
  188. package/dist/new-york/alert.js.map +1 -0
  189. package/dist/new-york/aspect-ratio.d.ts +6 -0
  190. package/dist/new-york/aspect-ratio.js +12 -0
  191. package/dist/new-york/aspect-ratio.js.map +1 -0
  192. package/dist/new-york/avatar.d.ts +9 -0
  193. package/dist/new-york/avatar.js +58 -0
  194. package/dist/new-york/avatar.js.map +1 -0
  195. package/dist/new-york/badge.d.ts +13 -0
  196. package/dist/new-york/badge.js +46 -0
  197. package/dist/new-york/badge.js.map +1 -0
  198. package/dist/new-york/breadcrumb.d.ts +14 -0
  199. package/dist/new-york/breadcrumb.js +104 -0
  200. package/dist/new-york/breadcrumb.js.map +1 -0
  201. package/dist/new-york/button-group.d.ts +17 -0
  202. package/dist/new-york/button-group.js +100 -0
  203. package/dist/new-york/button-group.js.map +1 -0
  204. package/dist/new-york/button.d.ts +14 -0
  205. package/dist/new-york/button.js +58 -0
  206. package/dist/new-york/button.js.map +1 -0
  207. package/dist/new-york/calendar.d.ts +13 -0
  208. package/dist/new-york/calendar.js +237 -0
  209. package/dist/new-york/calendar.js.map +1 -0
  210. package/dist/new-york/card.d.ts +12 -0
  211. package/dist/new-york/card.js +91 -0
  212. package/dist/new-york/card.js.map +1 -0
  213. package/dist/new-york/carousel.d.ts +24 -0
  214. package/dist/new-york/carousel.js +246 -0
  215. package/dist/new-york/carousel.js.map +1 -0
  216. package/dist/new-york/chart.d.ts +43 -0
  217. package/dist/new-york/chart.js +243 -0
  218. package/dist/new-york/chart.js.map +1 -0
  219. package/dist/new-york/checkbox.d.ts +7 -0
  220. package/dist/new-york/checkbox.js +37 -0
  221. package/dist/new-york/checkbox.js.map +1 -0
  222. package/dist/new-york/collapsible.d.ts +8 -0
  223. package/dist/new-york/collapsible.js +35 -0
  224. package/dist/new-york/collapsible.js.map +1 -0
  225. package/dist/new-york/command.d.ts +22 -0
  226. package/dist/new-york/command.js +266 -0
  227. package/dist/new-york/command.js.map +1 -0
  228. package/dist/new-york/context-menu.d.ts +28 -0
  229. package/dist/new-york/context-menu.js +215 -0
  230. package/dist/new-york/context-menu.js.map +1 -0
  231. package/dist/new-york/dialog.d.ts +18 -0
  232. package/dist/new-york/dialog.js +134 -0
  233. package/dist/new-york/dialog.js.map +1 -0
  234. package/dist/new-york/drawer.d.ts +16 -0
  235. package/dist/new-york/drawer.js +125 -0
  236. package/dist/new-york/drawer.js.map +1 -0
  237. package/dist/new-york/dropdown-menu.d.ts +28 -0
  238. package/dist/new-york/dropdown-menu.js +224 -0
  239. package/dist/new-york/dropdown-menu.js.map +1 -0
  240. package/dist/new-york/empty.d.ts +15 -0
  241. package/dist/new-york/empty.js +104 -0
  242. package/dist/new-york/empty.js.map +1 -0
  243. package/dist/new-york/field.d.ts +30 -0
  244. package/dist/new-york/field.js +263 -0
  245. package/dist/new-york/field.js.map +1 -0
  246. package/dist/new-york/form.d.ts +28 -0
  247. package/dist/new-york/form.js +131 -0
  248. package/dist/new-york/form.js.map +1 -0
  249. package/dist/new-york/hover-card.d.ts +9 -0
  250. package/dist/new-york/hover-card.js +42 -0
  251. package/dist/new-york/hover-card.js.map +1 -0
  252. package/dist/new-york/index.d.ts +92 -0
  253. package/dist/new-york/index.js +4965 -0
  254. package/dist/new-york/index.js.map +1 -0
  255. package/dist/new-york/input-group.d.ts +20 -0
  256. package/dist/new-york/input-group.js +226 -0
  257. package/dist/new-york/input-group.js.map +1 -0
  258. package/dist/new-york/input-otp.d.ts +14 -0
  259. package/dist/new-york/input-otp.js +70 -0
  260. package/dist/new-york/input-otp.js.map +1 -0
  261. package/dist/new-york/input.d.ts +6 -0
  262. package/dist/new-york/input.js +28 -0
  263. package/dist/new-york/input.js.map +1 -0
  264. package/dist/new-york/item.d.ts +28 -0
  265. package/dist/new-york/item.js +205 -0
  266. package/dist/new-york/item.js.map +1 -0
  267. package/dist/new-york/kbd.d.ts +6 -0
  268. package/dist/new-york/kbd.js +37 -0
  269. package/dist/new-york/kbd.js.map +1 -0
  270. package/dist/new-york/label.d.ts +7 -0
  271. package/dist/new-york/label.js +28 -0
  272. package/dist/new-york/label.js.map +1 -0
  273. package/dist/new-york/menubar.d.ts +29 -0
  274. package/dist/new-york/menubar.js +243 -0
  275. package/dist/new-york/menubar.js.map +1 -0
  276. package/dist/new-york/navigation-menu.d.ts +18 -0
  277. package/dist/new-york/navigation-menu.js +169 -0
  278. package/dist/new-york/navigation-menu.js.map +1 -0
  279. package/dist/new-york/pagination.d.ts +18 -0
  280. package/dist/new-york/pagination.js +147 -0
  281. package/dist/new-york/pagination.js.map +1 -0
  282. package/dist/new-york/popover.d.ts +10 -0
  283. package/dist/new-york/popover.js +47 -0
  284. package/dist/new-york/popover.js.map +1 -0
  285. package/dist/new-york/progress.d.ts +7 -0
  286. package/dist/new-york/progress.js +38 -0
  287. package/dist/new-york/progress.js.map +1 -0
  288. package/dist/new-york/radio-group.d.ts +8 -0
  289. package/dist/new-york/radio-group.js +50 -0
  290. package/dist/new-york/radio-group.js.map +1 -0
  291. package/dist/new-york/resizable.d.ts +11 -0
  292. package/dist/new-york/resizable.js +53 -0
  293. package/dist/new-york/resizable.js.map +1 -0
  294. package/dist/new-york/scroll-area.d.ts +8 -0
  295. package/dist/new-york/scroll-area.js +65 -0
  296. package/dist/new-york/scroll-area.js.map +1 -0
  297. package/dist/new-york/select.d.ts +18 -0
  298. package/dist/new-york/select.js +169 -0
  299. package/dist/new-york/select.js.map +1 -0
  300. package/dist/new-york/separator.d.ts +7 -0
  301. package/dist/new-york/separator.js +32 -0
  302. package/dist/new-york/separator.js.map +1 -0
  303. package/dist/new-york/sheet.d.ts +16 -0
  304. package/dist/new-york/sheet.js +126 -0
  305. package/dist/new-york/sheet.js.map +1 -0
  306. package/dist/new-york/sidebar.d.ts +75 -0
  307. package/dist/new-york/sidebar.js +859 -0
  308. package/dist/new-york/sidebar.js.map +1 -0
  309. package/dist/new-york/skeleton.d.ts +5 -0
  310. package/dist/new-york/skeleton.js +22 -0
  311. package/dist/new-york/skeleton.js.map +1 -0
  312. package/dist/new-york/slider.d.ts +7 -0
  313. package/dist/new-york/slider.js +69 -0
  314. package/dist/new-york/slider.js.map +1 -0
  315. package/dist/new-york/sonner.d.ts +6 -0
  316. package/dist/new-york/sonner.js +34 -0
  317. package/dist/new-york/sonner.js.map +1 -0
  318. package/dist/new-york/spinner.d.ts +5 -0
  319. package/dist/new-york/spinner.js +24 -0
  320. package/dist/new-york/spinner.js.map +1 -0
  321. package/dist/new-york/styles.css +129 -0
  322. package/dist/new-york/switch.d.ts +7 -0
  323. package/dist/new-york/switch.js +37 -0
  324. package/dist/new-york/switch.js.map +1 -0
  325. package/dist/new-york/table.d.ts +13 -0
  326. package/dist/new-york/table.js +114 -0
  327. package/dist/new-york/table.js.map +1 -0
  328. package/dist/new-york/tabs.d.ts +10 -0
  329. package/dist/new-york/tabs.js +70 -0
  330. package/dist/new-york/tabs.js.map +1 -0
  331. package/dist/new-york/textarea.d.ts +6 -0
  332. package/dist/new-york/textarea.js +25 -0
  333. package/dist/new-york/textarea.js.map +1 -0
  334. package/dist/new-york/toggle-group.d.ts +14 -0
  335. package/dist/new-york/toggle-group.js +95 -0
  336. package/dist/new-york/toggle-group.js.map +1 -0
  337. package/dist/new-york/toggle.d.ts +13 -0
  338. package/dist/new-york/toggle.js +49 -0
  339. package/dist/new-york/toggle.js.map +1 -0
  340. package/dist/new-york/tooltip.d.ts +10 -0
  341. package/dist/new-york/tooltip.js +58 -0
  342. package/dist/new-york/tooltip.js.map +1 -0
  343. package/package.json +133 -0
package/dist/index.js ADDED
@@ -0,0 +1,4029 @@
1
+ import * as React35 from 'react';
2
+ import { useMemo } from 'react';
3
+ import * as AccordionPrimitive from '@radix-ui/react-accordion';
4
+ import { ChevronDown, ArrowLeft, ArrowRight, Check, X, Search, ChevronRight, Circle, Dot, ChevronUp, PanelLeft, MoreHorizontal, ChevronLeftIcon, ChevronRightIcon, ChevronDownIcon, ChevronLeft, GripVertical, LoaderCircle, OctagonX, TriangleAlert, Info, CircleCheck, Loader2Icon } from 'lucide-react';
5
+ import { clsx } from 'clsx';
6
+ import { twMerge } from 'tailwind-merge';
7
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
+ import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
9
+ import { Slot } from '@radix-ui/react-slot';
10
+ import { cva } from 'class-variance-authority';
11
+ import * as AspectRatioPrimitive from '@radix-ui/react-aspect-ratio';
12
+ import * as AvatarPrimitive from '@radix-ui/react-avatar';
13
+ import * as SeparatorPrimitive from '@radix-ui/react-separator';
14
+ import { getDefaultClassNames, DayPicker } from 'react-day-picker';
15
+ import useEmblaCarousel from 'embla-carousel-react';
16
+ import * as RechartsPrimitive from 'recharts';
17
+ import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
18
+ import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
19
+ import { Command as Command$1 } from 'cmdk';
20
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
21
+ import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
22
+ import { Drawer as Drawer$1 } from 'vaul';
23
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
24
+ import * as LabelPrimitive from '@radix-ui/react-label';
25
+ import { useFormContext, FormProvider, Controller } from 'react-hook-form';
26
+ import * as HoverCardPrimitive from '@radix-ui/react-hover-card';
27
+ import { OTPInput, OTPInputContext } from 'input-otp';
28
+ import * as MenubarPrimitive from '@radix-ui/react-menubar';
29
+ import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
30
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
31
+ import * as ProgressPrimitive from '@radix-ui/react-progress';
32
+ import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
33
+ import * as ResizablePrimitive from 'react-resizable-panels';
34
+ import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
35
+ import * as SelectPrimitive from '@radix-ui/react-select';
36
+ import * as TooltipPrimitive from '@radix-ui/react-tooltip';
37
+ import * as SliderPrimitive from '@radix-ui/react-slider';
38
+ import { useTheme } from 'next-themes';
39
+ import { Toaster as Toaster$1 } from 'sonner';
40
+ import * as SwitchPrimitives from '@radix-ui/react-switch';
41
+ import * as TabsPrimitive from '@radix-ui/react-tabs';
42
+ import * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group';
43
+ import * as TogglePrimitive from '@radix-ui/react-toggle';
44
+
45
+ // src/default/accordion.tsx
46
+ function cn(...inputs) {
47
+ return twMerge(clsx(inputs));
48
+ }
49
+ var Accordion = AccordionPrimitive.Root;
50
+ var AccordionItem = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
51
+ AccordionPrimitive.Item,
52
+ {
53
+ ref,
54
+ className: cn("border-b", className),
55
+ ...props
56
+ }
57
+ ));
58
+ AccordionItem.displayName = "AccordionItem";
59
+ var AccordionTrigger = React35.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
60
+ AccordionPrimitive.Trigger,
61
+ {
62
+ ref,
63
+ className: cn(
64
+ "flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",
65
+ className
66
+ ),
67
+ ...props,
68
+ children: [
69
+ children,
70
+ /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 shrink-0 transition-transform duration-200" })
71
+ ]
72
+ }
73
+ ) }));
74
+ AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
75
+ var AccordionContent = React35.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
76
+ AccordionPrimitive.Content,
77
+ {
78
+ ref,
79
+ className: "overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
80
+ ...props,
81
+ children: /* @__PURE__ */ jsx("div", { className: cn("pb-4 pt-0", className), children })
82
+ }
83
+ ));
84
+ AccordionContent.displayName = AccordionPrimitive.Content.displayName;
85
+ var buttonVariants = cva(
86
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
87
+ {
88
+ variants: {
89
+ variant: {
90
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
91
+ destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
92
+ outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
93
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
94
+ ghost: "hover:bg-accent hover:text-accent-foreground",
95
+ link: "text-primary underline-offset-4 hover:underline"
96
+ },
97
+ size: {
98
+ default: "h-10 px-4 py-2",
99
+ sm: "h-9 rounded-md px-3",
100
+ lg: "h-11 rounded-md px-8",
101
+ icon: "h-10 w-10"
102
+ }
103
+ },
104
+ defaultVariants: {
105
+ variant: "default",
106
+ size: "default"
107
+ }
108
+ }
109
+ );
110
+ var Button = React35.forwardRef(
111
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
112
+ const Comp = asChild ? Slot : "button";
113
+ return /* @__PURE__ */ jsx(
114
+ Comp,
115
+ {
116
+ className: cn(buttonVariants({ variant, size, className })),
117
+ ref,
118
+ ...props
119
+ }
120
+ );
121
+ }
122
+ );
123
+ Button.displayName = "Button";
124
+ var AlertDialog = AlertDialogPrimitive.Root;
125
+ var AlertDialogTrigger = AlertDialogPrimitive.Trigger;
126
+ var AlertDialogPortal = AlertDialogPrimitive.Portal;
127
+ var AlertDialogOverlay = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
128
+ AlertDialogPrimitive.Overlay,
129
+ {
130
+ className: cn(
131
+ "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
132
+ className
133
+ ),
134
+ ...props,
135
+ ref
136
+ }
137
+ ));
138
+ AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
139
+ var AlertDialogContent = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
140
+ /* @__PURE__ */ jsx(AlertDialogOverlay, {}),
141
+ /* @__PURE__ */ jsx(
142
+ AlertDialogPrimitive.Content,
143
+ {
144
+ ref,
145
+ className: cn(
146
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
147
+ className
148
+ ),
149
+ ...props
150
+ }
151
+ )
152
+ ] }));
153
+ AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
154
+ var AlertDialogHeader = ({
155
+ className,
156
+ ...props
157
+ }) => /* @__PURE__ */ jsx(
158
+ "div",
159
+ {
160
+ className: cn(
161
+ "flex flex-col space-y-2 text-center sm:text-left",
162
+ className
163
+ ),
164
+ ...props
165
+ }
166
+ );
167
+ AlertDialogHeader.displayName = "AlertDialogHeader";
168
+ var AlertDialogFooter = ({
169
+ className,
170
+ ...props
171
+ }) => /* @__PURE__ */ jsx(
172
+ "div",
173
+ {
174
+ className: cn(
175
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
176
+ className
177
+ ),
178
+ ...props
179
+ }
180
+ );
181
+ AlertDialogFooter.displayName = "AlertDialogFooter";
182
+ var AlertDialogTitle = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
183
+ AlertDialogPrimitive.Title,
184
+ {
185
+ ref,
186
+ className: cn("text-lg font-semibold", className),
187
+ ...props
188
+ }
189
+ ));
190
+ AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
191
+ var AlertDialogDescription = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
192
+ AlertDialogPrimitive.Description,
193
+ {
194
+ ref,
195
+ className: cn("text-sm text-muted-foreground", className),
196
+ ...props
197
+ }
198
+ ));
199
+ AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
200
+ var AlertDialogAction = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
201
+ AlertDialogPrimitive.Action,
202
+ {
203
+ ref,
204
+ className: cn(buttonVariants(), className),
205
+ ...props
206
+ }
207
+ ));
208
+ AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
209
+ var AlertDialogCancel = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
210
+ AlertDialogPrimitive.Cancel,
211
+ {
212
+ ref,
213
+ className: cn(
214
+ buttonVariants({ variant: "outline" }),
215
+ "mt-2 sm:mt-0",
216
+ className
217
+ ),
218
+ ...props
219
+ }
220
+ ));
221
+ AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
222
+ var alertVariants = cva(
223
+ "relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",
224
+ {
225
+ variants: {
226
+ variant: {
227
+ default: "bg-background text-foreground",
228
+ destructive: "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive"
229
+ }
230
+ },
231
+ defaultVariants: {
232
+ variant: "default"
233
+ }
234
+ }
235
+ );
236
+ var Alert = React35.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ jsx(
237
+ "div",
238
+ {
239
+ ref,
240
+ role: "alert",
241
+ className: cn(alertVariants({ variant }), className),
242
+ ...props
243
+ }
244
+ ));
245
+ Alert.displayName = "Alert";
246
+ var AlertTitle = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
247
+ "h5",
248
+ {
249
+ ref,
250
+ className: cn("mb-1 font-medium leading-none tracking-tight", className),
251
+ ...props
252
+ }
253
+ ));
254
+ AlertTitle.displayName = "AlertTitle";
255
+ var AlertDescription = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
256
+ "div",
257
+ {
258
+ ref,
259
+ className: cn("text-sm [&_p]:leading-relaxed", className),
260
+ ...props
261
+ }
262
+ ));
263
+ AlertDescription.displayName = "AlertDescription";
264
+ var AspectRatio = AspectRatioPrimitive.Root;
265
+ var Avatar = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
266
+ AvatarPrimitive.Root,
267
+ {
268
+ ref,
269
+ className: cn(
270
+ "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
271
+ className
272
+ ),
273
+ ...props
274
+ }
275
+ ));
276
+ Avatar.displayName = AvatarPrimitive.Root.displayName;
277
+ var AvatarImage = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
278
+ AvatarPrimitive.Image,
279
+ {
280
+ ref,
281
+ className: cn("aspect-square h-full w-full", className),
282
+ ...props
283
+ }
284
+ ));
285
+ AvatarImage.displayName = AvatarPrimitive.Image.displayName;
286
+ var AvatarFallback = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
287
+ AvatarPrimitive.Fallback,
288
+ {
289
+ ref,
290
+ className: cn(
291
+ "flex h-full w-full items-center justify-center rounded-full bg-muted",
292
+ className
293
+ ),
294
+ ...props
295
+ }
296
+ ));
297
+ AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
298
+ var badgeVariants = cva(
299
+ "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
300
+ {
301
+ variants: {
302
+ variant: {
303
+ default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
304
+ secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
305
+ destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
306
+ outline: "text-foreground"
307
+ }
308
+ },
309
+ defaultVariants: {
310
+ variant: "default"
311
+ }
312
+ }
313
+ );
314
+ function Badge({ className, variant, ...props }) {
315
+ return /* @__PURE__ */ jsx("div", { className: cn(badgeVariants({ variant }), className), ...props });
316
+ }
317
+ var Breadcrumb = React35.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx("nav", { ref, "aria-label": "breadcrumb", ...props }));
318
+ Breadcrumb.displayName = "Breadcrumb";
319
+ var BreadcrumbList = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
320
+ "ol",
321
+ {
322
+ ref,
323
+ className: cn(
324
+ "flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5",
325
+ className
326
+ ),
327
+ ...props
328
+ }
329
+ ));
330
+ BreadcrumbList.displayName = "BreadcrumbList";
331
+ var BreadcrumbItem = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
332
+ "li",
333
+ {
334
+ ref,
335
+ className: cn("inline-flex items-center gap-1.5", className),
336
+ ...props
337
+ }
338
+ ));
339
+ BreadcrumbItem.displayName = "BreadcrumbItem";
340
+ var BreadcrumbLink = React35.forwardRef(({ asChild, className, ...props }, ref) => {
341
+ const Comp = asChild ? Slot : "a";
342
+ return /* @__PURE__ */ jsx(
343
+ Comp,
344
+ {
345
+ ref,
346
+ className: cn("transition-colors hover:text-foreground", className),
347
+ ...props
348
+ }
349
+ );
350
+ });
351
+ BreadcrumbLink.displayName = "BreadcrumbLink";
352
+ var BreadcrumbPage = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
353
+ "span",
354
+ {
355
+ ref,
356
+ role: "link",
357
+ "aria-disabled": "true",
358
+ "aria-current": "page",
359
+ className: cn("font-normal text-foreground", className),
360
+ ...props
361
+ }
362
+ ));
363
+ BreadcrumbPage.displayName = "BreadcrumbPage";
364
+ var BreadcrumbSeparator = ({
365
+ children,
366
+ className,
367
+ ...props
368
+ }) => /* @__PURE__ */ jsx(
369
+ "li",
370
+ {
371
+ role: "presentation",
372
+ "aria-hidden": "true",
373
+ className: cn("[&>svg]:w-3.5 [&>svg]:h-3.5", className),
374
+ ...props,
375
+ children: children ?? /* @__PURE__ */ jsx(ChevronRight, {})
376
+ }
377
+ );
378
+ BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
379
+ var BreadcrumbEllipsis = ({
380
+ className,
381
+ ...props
382
+ }) => /* @__PURE__ */ jsxs(
383
+ "span",
384
+ {
385
+ role: "presentation",
386
+ "aria-hidden": "true",
387
+ className: cn("flex h-9 w-9 items-center justify-center", className),
388
+ ...props,
389
+ children: [
390
+ /* @__PURE__ */ jsx(MoreHorizontal, { className: "h-4 w-4" }),
391
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "More" })
392
+ ]
393
+ }
394
+ );
395
+ BreadcrumbEllipsis.displayName = "BreadcrumbElipssis";
396
+ var Separator = React35.forwardRef(
397
+ ({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx(
398
+ SeparatorPrimitive.Root,
399
+ {
400
+ ref,
401
+ decorative,
402
+ orientation,
403
+ className: cn(
404
+ "shrink-0 bg-border",
405
+ orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
406
+ className
407
+ ),
408
+ ...props
409
+ }
410
+ )
411
+ );
412
+ Separator.displayName = SeparatorPrimitive.Root.displayName;
413
+ var buttonGroupVariants = cva(
414
+ "flex w-fit items-stretch has-[>[data-slot=button-group]]:gap-2 [&>*]:focus-visible:relative [&>*]:focus-visible:z-10 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1",
415
+ {
416
+ variants: {
417
+ orientation: {
418
+ horizontal: "[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none",
419
+ vertical: "flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none"
420
+ }
421
+ },
422
+ defaultVariants: {
423
+ orientation: "horizontal"
424
+ }
425
+ }
426
+ );
427
+ function ButtonGroup({
428
+ className,
429
+ orientation,
430
+ ...props
431
+ }) {
432
+ return /* @__PURE__ */ jsx(
433
+ "div",
434
+ {
435
+ role: "group",
436
+ "data-slot": "button-group",
437
+ "data-orientation": orientation,
438
+ className: cn(buttonGroupVariants({ orientation }), className),
439
+ ...props
440
+ }
441
+ );
442
+ }
443
+ function ButtonGroupText({
444
+ className,
445
+ asChild = false,
446
+ ...props
447
+ }) {
448
+ const Comp = asChild ? Slot : "div";
449
+ return /* @__PURE__ */ jsx(
450
+ Comp,
451
+ {
452
+ className: cn(
453
+ "bg-muted shadow-xs flex items-center gap-2 rounded-md border px-4 text-sm font-medium [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none",
454
+ className
455
+ ),
456
+ ...props
457
+ }
458
+ );
459
+ }
460
+ function ButtonGroupSeparator({
461
+ className,
462
+ orientation = "vertical",
463
+ ...props
464
+ }) {
465
+ return /* @__PURE__ */ jsx(
466
+ Separator,
467
+ {
468
+ "data-slot": "button-group-separator",
469
+ orientation,
470
+ className: cn(
471
+ "bg-input relative !m-0 self-stretch data-[orientation=vertical]:h-auto",
472
+ className
473
+ ),
474
+ ...props
475
+ }
476
+ );
477
+ }
478
+ function Calendar({
479
+ className,
480
+ classNames,
481
+ showOutsideDays = true,
482
+ captionLayout = "label",
483
+ buttonVariant = "ghost",
484
+ formatters,
485
+ components,
486
+ ...props
487
+ }) {
488
+ const defaultClassNames = getDefaultClassNames();
489
+ return /* @__PURE__ */ jsx(
490
+ DayPicker,
491
+ {
492
+ showOutsideDays,
493
+ className: cn(
494
+ "bg-background group/calendar p-3 [--cell-size:2rem] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",
495
+ String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
496
+ String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
497
+ className
498
+ ),
499
+ captionLayout,
500
+ formatters: {
501
+ formatMonthDropdown: (date) => date.toLocaleString("default", { month: "short" }),
502
+ ...formatters
503
+ },
504
+ classNames: {
505
+ root: cn("w-fit", defaultClassNames.root),
506
+ months: cn(
507
+ "relative flex flex-col gap-4 md:flex-row",
508
+ defaultClassNames.months
509
+ ),
510
+ month: cn("flex w-full flex-col gap-4", defaultClassNames.month),
511
+ nav: cn(
512
+ "absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",
513
+ defaultClassNames.nav
514
+ ),
515
+ button_previous: cn(
516
+ buttonVariants({ variant: buttonVariant }),
517
+ "h-[--cell-size] w-[--cell-size] select-none p-0 aria-disabled:opacity-50",
518
+ defaultClassNames.button_previous
519
+ ),
520
+ button_next: cn(
521
+ buttonVariants({ variant: buttonVariant }),
522
+ "h-[--cell-size] w-[--cell-size] select-none p-0 aria-disabled:opacity-50",
523
+ defaultClassNames.button_next
524
+ ),
525
+ month_caption: cn(
526
+ "flex h-[--cell-size] w-full items-center justify-center px-[--cell-size]",
527
+ defaultClassNames.month_caption
528
+ ),
529
+ dropdowns: cn(
530
+ "flex h-[--cell-size] w-full items-center justify-center gap-1.5 text-sm font-medium",
531
+ defaultClassNames.dropdowns
532
+ ),
533
+ dropdown_root: cn(
534
+ "has-focus:border-ring border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] relative rounded-md border",
535
+ defaultClassNames.dropdown_root
536
+ ),
537
+ dropdown: cn(
538
+ "bg-popover absolute inset-0 opacity-0",
539
+ defaultClassNames.dropdown
540
+ ),
541
+ caption_label: cn(
542
+ "select-none font-medium",
543
+ captionLayout === "label" ? "text-sm" : "[&>svg]:text-muted-foreground flex h-8 items-center gap-1 rounded-md pl-2 pr-1 text-sm [&>svg]:size-3.5",
544
+ defaultClassNames.caption_label
545
+ ),
546
+ table: "w-full border-collapse",
547
+ weekdays: cn("flex", defaultClassNames.weekdays),
548
+ weekday: cn(
549
+ "text-muted-foreground flex-1 select-none rounded-md text-[0.8rem] font-normal",
550
+ defaultClassNames.weekday
551
+ ),
552
+ week: cn("mt-2 flex w-full", defaultClassNames.week),
553
+ week_number_header: cn(
554
+ "w-[--cell-size] select-none",
555
+ defaultClassNames.week_number_header
556
+ ),
557
+ week_number: cn(
558
+ "text-muted-foreground select-none text-[0.8rem]",
559
+ defaultClassNames.week_number
560
+ ),
561
+ day: cn(
562
+ "group/day relative aspect-square h-full w-full select-none p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md",
563
+ defaultClassNames.day
564
+ ),
565
+ range_start: cn(
566
+ "bg-accent rounded-l-md",
567
+ defaultClassNames.range_start
568
+ ),
569
+ range_middle: cn("rounded-none", defaultClassNames.range_middle),
570
+ range_end: cn("bg-accent rounded-r-md", defaultClassNames.range_end),
571
+ today: cn(
572
+ "bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",
573
+ defaultClassNames.today
574
+ ),
575
+ outside: cn(
576
+ "text-muted-foreground aria-selected:text-muted-foreground",
577
+ defaultClassNames.outside
578
+ ),
579
+ disabled: cn(
580
+ "text-muted-foreground opacity-50",
581
+ defaultClassNames.disabled
582
+ ),
583
+ hidden: cn("invisible", defaultClassNames.hidden),
584
+ ...classNames
585
+ },
586
+ components: {
587
+ Root: ({ className: className2, rootRef, ...props2 }) => {
588
+ return /* @__PURE__ */ jsx(
589
+ "div",
590
+ {
591
+ "data-slot": "calendar",
592
+ ref: rootRef,
593
+ className: cn(className2),
594
+ ...props2
595
+ }
596
+ );
597
+ },
598
+ Chevron: ({ className: className2, orientation, ...props2 }) => {
599
+ if (orientation === "left") {
600
+ return /* @__PURE__ */ jsx(ChevronLeftIcon, { className: cn("size-4", className2), ...props2 });
601
+ }
602
+ if (orientation === "right") {
603
+ return /* @__PURE__ */ jsx(
604
+ ChevronRightIcon,
605
+ {
606
+ className: cn("size-4", className2),
607
+ ...props2
608
+ }
609
+ );
610
+ }
611
+ return /* @__PURE__ */ jsx(ChevronDownIcon, { className: cn("size-4", className2), ...props2 });
612
+ },
613
+ DayButton: CalendarDayButton,
614
+ WeekNumber: ({ children, ...props2 }) => {
615
+ return /* @__PURE__ */ jsx("td", { ...props2, children: /* @__PURE__ */ jsx("div", { className: "flex size-[--cell-size] items-center justify-center text-center", children }) });
616
+ },
617
+ ...components
618
+ },
619
+ ...props
620
+ }
621
+ );
622
+ }
623
+ function CalendarDayButton({
624
+ className,
625
+ day,
626
+ modifiers,
627
+ ...props
628
+ }) {
629
+ const defaultClassNames = getDefaultClassNames();
630
+ const ref = React35.useRef(null);
631
+ React35.useEffect(() => {
632
+ if (modifiers.focused) ref.current?.focus();
633
+ }, [modifiers.focused]);
634
+ return /* @__PURE__ */ jsx(
635
+ Button,
636
+ {
637
+ ref,
638
+ variant: "ghost",
639
+ size: "icon",
640
+ "data-day": day.date.toLocaleDateString(),
641
+ "data-selected-single": modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle,
642
+ "data-range-start": modifiers.range_start,
643
+ "data-range-end": modifiers.range_end,
644
+ "data-range-middle": modifiers.range_middle,
645
+ className: cn(
646
+ "data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 flex aspect-square h-auto w-full min-w-[--cell-size] flex-col gap-1 font-normal leading-none data-[range-end=true]:rounded-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] [&>span]:text-xs [&>span]:opacity-70",
647
+ defaultClassNames.day,
648
+ className
649
+ ),
650
+ ...props
651
+ }
652
+ );
653
+ }
654
+ var Card = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
655
+ "div",
656
+ {
657
+ ref,
658
+ className: cn(
659
+ "rounded-lg border bg-card text-card-foreground shadow-sm",
660
+ className
661
+ ),
662
+ ...props
663
+ }
664
+ ));
665
+ Card.displayName = "Card";
666
+ var CardHeader = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
667
+ "div",
668
+ {
669
+ ref,
670
+ className: cn("flex flex-col space-y-1.5 p-6", className),
671
+ ...props
672
+ }
673
+ ));
674
+ CardHeader.displayName = "CardHeader";
675
+ var CardTitle = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
676
+ "div",
677
+ {
678
+ ref,
679
+ className: cn(
680
+ "text-2xl font-semibold leading-none tracking-tight",
681
+ className
682
+ ),
683
+ ...props
684
+ }
685
+ ));
686
+ CardTitle.displayName = "CardTitle";
687
+ var CardDescription = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
688
+ "div",
689
+ {
690
+ ref,
691
+ className: cn("text-sm text-muted-foreground", className),
692
+ ...props
693
+ }
694
+ ));
695
+ CardDescription.displayName = "CardDescription";
696
+ var CardContent = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("p-6 pt-0", className), ...props }));
697
+ CardContent.displayName = "CardContent";
698
+ var CardFooter = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
699
+ "div",
700
+ {
701
+ ref,
702
+ className: cn("flex items-center p-6 pt-0", className),
703
+ ...props
704
+ }
705
+ ));
706
+ CardFooter.displayName = "CardFooter";
707
+ var CarouselContext = React35.createContext(null);
708
+ function useCarousel() {
709
+ const context = React35.useContext(CarouselContext);
710
+ if (!context) {
711
+ throw new Error("useCarousel must be used within a <Carousel />");
712
+ }
713
+ return context;
714
+ }
715
+ var Carousel = React35.forwardRef(
716
+ ({
717
+ orientation = "horizontal",
718
+ opts,
719
+ setApi,
720
+ plugins,
721
+ className,
722
+ children,
723
+ ...props
724
+ }, ref) => {
725
+ const [carouselRef, api] = useEmblaCarousel(
726
+ {
727
+ ...opts,
728
+ axis: orientation === "horizontal" ? "x" : "y"
729
+ },
730
+ plugins
731
+ );
732
+ const [canScrollPrev, setCanScrollPrev] = React35.useState(false);
733
+ const [canScrollNext, setCanScrollNext] = React35.useState(false);
734
+ const onSelect = React35.useCallback((api2) => {
735
+ if (!api2) {
736
+ return;
737
+ }
738
+ setCanScrollPrev(api2.canScrollPrev());
739
+ setCanScrollNext(api2.canScrollNext());
740
+ }, []);
741
+ const scrollPrev = React35.useCallback(() => {
742
+ api?.scrollPrev();
743
+ }, [api]);
744
+ const scrollNext = React35.useCallback(() => {
745
+ api?.scrollNext();
746
+ }, [api]);
747
+ const handleKeyDown = React35.useCallback(
748
+ (event) => {
749
+ if (event.key === "ArrowLeft") {
750
+ event.preventDefault();
751
+ scrollPrev();
752
+ } else if (event.key === "ArrowRight") {
753
+ event.preventDefault();
754
+ scrollNext();
755
+ }
756
+ },
757
+ [scrollPrev, scrollNext]
758
+ );
759
+ React35.useEffect(() => {
760
+ if (!api || !setApi) {
761
+ return;
762
+ }
763
+ setApi(api);
764
+ }, [api, setApi]);
765
+ React35.useEffect(() => {
766
+ if (!api) {
767
+ return;
768
+ }
769
+ onSelect(api);
770
+ api.on("reInit", onSelect);
771
+ api.on("select", onSelect);
772
+ return () => {
773
+ api?.off("select", onSelect);
774
+ };
775
+ }, [api, onSelect]);
776
+ return /* @__PURE__ */ jsx(
777
+ CarouselContext.Provider,
778
+ {
779
+ value: {
780
+ carouselRef,
781
+ api,
782
+ opts,
783
+ orientation: orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
784
+ scrollPrev,
785
+ scrollNext,
786
+ canScrollPrev,
787
+ canScrollNext
788
+ },
789
+ children: /* @__PURE__ */ jsx(
790
+ "div",
791
+ {
792
+ ref,
793
+ onKeyDownCapture: handleKeyDown,
794
+ className: cn("relative", className),
795
+ role: "region",
796
+ "aria-roledescription": "carousel",
797
+ ...props,
798
+ children
799
+ }
800
+ )
801
+ }
802
+ );
803
+ }
804
+ );
805
+ Carousel.displayName = "Carousel";
806
+ var CarouselContent = React35.forwardRef(({ className, ...props }, ref) => {
807
+ const { carouselRef, orientation } = useCarousel();
808
+ return /* @__PURE__ */ jsx("div", { ref: carouselRef, className: "overflow-hidden", children: /* @__PURE__ */ jsx(
809
+ "div",
810
+ {
811
+ ref,
812
+ className: cn(
813
+ "flex",
814
+ orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
815
+ className
816
+ ),
817
+ ...props
818
+ }
819
+ ) });
820
+ });
821
+ CarouselContent.displayName = "CarouselContent";
822
+ var CarouselItem = React35.forwardRef(({ className, ...props }, ref) => {
823
+ const { orientation } = useCarousel();
824
+ return /* @__PURE__ */ jsx(
825
+ "div",
826
+ {
827
+ ref,
828
+ role: "group",
829
+ "aria-roledescription": "slide",
830
+ className: cn(
831
+ "min-w-0 shrink-0 grow-0 basis-full",
832
+ orientation === "horizontal" ? "pl-4" : "pt-4",
833
+ className
834
+ ),
835
+ ...props
836
+ }
837
+ );
838
+ });
839
+ CarouselItem.displayName = "CarouselItem";
840
+ var CarouselPrevious = React35.forwardRef(({ className, variant = "outline", size = "icon", ...props }, ref) => {
841
+ const { orientation, scrollPrev, canScrollPrev } = useCarousel();
842
+ return /* @__PURE__ */ jsxs(
843
+ Button,
844
+ {
845
+ ref,
846
+ variant,
847
+ size,
848
+ className: cn(
849
+ "absolute h-8 w-8 rounded-full",
850
+ orientation === "horizontal" ? "-left-12 top-1/2 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
851
+ className
852
+ ),
853
+ disabled: !canScrollPrev,
854
+ onClick: scrollPrev,
855
+ ...props,
856
+ children: [
857
+ /* @__PURE__ */ jsx(ArrowLeft, { className: "h-4 w-4" }),
858
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Previous slide" })
859
+ ]
860
+ }
861
+ );
862
+ });
863
+ CarouselPrevious.displayName = "CarouselPrevious";
864
+ var CarouselNext = React35.forwardRef(({ className, variant = "outline", size = "icon", ...props }, ref) => {
865
+ const { orientation, scrollNext, canScrollNext } = useCarousel();
866
+ return /* @__PURE__ */ jsxs(
867
+ Button,
868
+ {
869
+ ref,
870
+ variant,
871
+ size,
872
+ className: cn(
873
+ "absolute h-8 w-8 rounded-full",
874
+ orientation === "horizontal" ? "-right-12 top-1/2 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
875
+ className
876
+ ),
877
+ disabled: !canScrollNext,
878
+ onClick: scrollNext,
879
+ ...props,
880
+ children: [
881
+ /* @__PURE__ */ jsx(ArrowRight, { className: "h-4 w-4" }),
882
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Next slide" })
883
+ ]
884
+ }
885
+ );
886
+ });
887
+ CarouselNext.displayName = "CarouselNext";
888
+ var THEMES = { light: "", dark: ".dark" };
889
+ var ChartContext = React35.createContext(null);
890
+ function useChart() {
891
+ const context = React35.useContext(ChartContext);
892
+ if (!context) {
893
+ throw new Error("useChart must be used within a <ChartContainer />");
894
+ }
895
+ return context;
896
+ }
897
+ var ChartContainer = React35.forwardRef(({ id, className, children, config, ...props }, ref) => {
898
+ const uniqueId = React35.useId();
899
+ const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
900
+ return /* @__PURE__ */ jsx(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs(
901
+ "div",
902
+ {
903
+ "data-chart": chartId,
904
+ ref,
905
+ className: cn(
906
+ "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-none [&_.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[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none",
907
+ className
908
+ ),
909
+ ...props,
910
+ children: [
911
+ /* @__PURE__ */ jsx(ChartStyle, { id: chartId, config }),
912
+ /* @__PURE__ */ jsx(RechartsPrimitive.ResponsiveContainer, { children })
913
+ ]
914
+ }
915
+ ) });
916
+ });
917
+ ChartContainer.displayName = "Chart";
918
+ var ChartStyle = ({ id, config }) => {
919
+ const colorConfig = Object.entries(config).filter(
920
+ ([, config2]) => config2.theme || config2.color
921
+ );
922
+ if (!colorConfig.length) {
923
+ return null;
924
+ }
925
+ return /* @__PURE__ */ jsx(
926
+ "style",
927
+ {
928
+ dangerouslySetInnerHTML: {
929
+ __html: Object.entries(THEMES).map(
930
+ ([theme, prefix]) => `
931
+ ${prefix} [data-chart=${id}] {
932
+ ${colorConfig.map(([key, itemConfig]) => {
933
+ const color = itemConfig.theme?.[theme] || itemConfig.color;
934
+ return color ? ` --color-${key}: ${color};` : null;
935
+ }).join("\n")}
936
+ }
937
+ `
938
+ ).join("\n")
939
+ }
940
+ }
941
+ );
942
+ };
943
+ var ChartTooltip = RechartsPrimitive.Tooltip;
944
+ var ChartTooltipContent = React35.forwardRef(
945
+ ({
946
+ active,
947
+ payload,
948
+ className,
949
+ indicator = "dot",
950
+ hideLabel = false,
951
+ hideIndicator = false,
952
+ label,
953
+ labelFormatter,
954
+ labelClassName,
955
+ formatter,
956
+ color,
957
+ nameKey,
958
+ labelKey
959
+ }, ref) => {
960
+ const { config } = useChart();
961
+ const tooltipLabel = React35.useMemo(() => {
962
+ if (hideLabel || !payload?.length) {
963
+ return null;
964
+ }
965
+ const [item] = payload;
966
+ const key = `${labelKey || item?.dataKey || item?.name || "value"}`;
967
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
968
+ const value = !labelKey && typeof label === "string" ? config[label]?.label || label : itemConfig?.label;
969
+ if (labelFormatter) {
970
+ return /* @__PURE__ */ jsx("div", { className: cn("font-medium", labelClassName), children: labelFormatter(value, payload) });
971
+ }
972
+ if (!value) {
973
+ return null;
974
+ }
975
+ return /* @__PURE__ */ jsx("div", { className: cn("font-medium", labelClassName), children: value });
976
+ }, [
977
+ label,
978
+ labelFormatter,
979
+ payload,
980
+ hideLabel,
981
+ labelClassName,
982
+ config,
983
+ labelKey
984
+ ]);
985
+ if (!active || !payload?.length) {
986
+ return null;
987
+ }
988
+ const nestLabel = payload.length === 1 && indicator !== "dot";
989
+ return /* @__PURE__ */ jsxs(
990
+ "div",
991
+ {
992
+ ref,
993
+ className: cn(
994
+ "grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",
995
+ className
996
+ ),
997
+ children: [
998
+ !nestLabel ? tooltipLabel : null,
999
+ /* @__PURE__ */ jsx("div", { className: "grid gap-1.5", children: payload.filter((item) => item.type !== "none").map((item, index) => {
1000
+ const key = `${nameKey || item.name || item.dataKey || "value"}`;
1001
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
1002
+ const indicatorColor = color || item.payload.fill || item.color;
1003
+ return /* @__PURE__ */ jsx(
1004
+ "div",
1005
+ {
1006
+ className: cn(
1007
+ "flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",
1008
+ indicator === "dot" && "items-center"
1009
+ ),
1010
+ children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ jsxs(Fragment, { children: [
1011
+ itemConfig?.icon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx(
1012
+ "div",
1013
+ {
1014
+ className: cn(
1015
+ "shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]",
1016
+ {
1017
+ "h-2.5 w-2.5": indicator === "dot",
1018
+ "w-1": indicator === "line",
1019
+ "w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
1020
+ "my-0.5": nestLabel && indicator === "dashed"
1021
+ }
1022
+ ),
1023
+ style: {
1024
+ "--color-bg": indicatorColor,
1025
+ "--color-border": indicatorColor
1026
+ }
1027
+ }
1028
+ ),
1029
+ /* @__PURE__ */ jsxs(
1030
+ "div",
1031
+ {
1032
+ className: cn(
1033
+ "flex flex-1 justify-between leading-none",
1034
+ nestLabel ? "items-end" : "items-center"
1035
+ ),
1036
+ children: [
1037
+ /* @__PURE__ */ jsxs("div", { className: "grid gap-1.5", children: [
1038
+ nestLabel ? tooltipLabel : null,
1039
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: itemConfig?.label || item.name })
1040
+ ] }),
1041
+ item.value && /* @__PURE__ */ jsx("span", { className: "font-mono font-medium tabular-nums text-foreground", children: item.value.toLocaleString() })
1042
+ ]
1043
+ }
1044
+ )
1045
+ ] })
1046
+ },
1047
+ item.dataKey
1048
+ );
1049
+ }) })
1050
+ ]
1051
+ }
1052
+ );
1053
+ }
1054
+ );
1055
+ ChartTooltipContent.displayName = "ChartTooltip";
1056
+ var ChartLegend = RechartsPrimitive.Legend;
1057
+ var ChartLegendContent = React35.forwardRef(
1058
+ ({ className, hideIcon = false, payload, verticalAlign = "bottom", nameKey }, ref) => {
1059
+ const { config } = useChart();
1060
+ if (!payload?.length) {
1061
+ return null;
1062
+ }
1063
+ return /* @__PURE__ */ jsx(
1064
+ "div",
1065
+ {
1066
+ ref,
1067
+ className: cn(
1068
+ "flex items-center justify-center gap-4",
1069
+ verticalAlign === "top" ? "pb-3" : "pt-3",
1070
+ className
1071
+ ),
1072
+ children: payload.filter((item) => item.type !== "none").map((item) => {
1073
+ const key = `${nameKey || item.dataKey || "value"}`;
1074
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
1075
+ return /* @__PURE__ */ jsxs(
1076
+ "div",
1077
+ {
1078
+ className: cn(
1079
+ "flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"
1080
+ ),
1081
+ children: [
1082
+ itemConfig?.icon && !hideIcon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : /* @__PURE__ */ jsx(
1083
+ "div",
1084
+ {
1085
+ className: "h-2 w-2 shrink-0 rounded-[2px]",
1086
+ style: {
1087
+ backgroundColor: item.color
1088
+ }
1089
+ }
1090
+ ),
1091
+ itemConfig?.label
1092
+ ]
1093
+ },
1094
+ item.value
1095
+ );
1096
+ })
1097
+ }
1098
+ );
1099
+ }
1100
+ );
1101
+ ChartLegendContent.displayName = "ChartLegend";
1102
+ function getPayloadConfigFromPayload(config, payload, key) {
1103
+ if (typeof payload !== "object" || payload === null) {
1104
+ return void 0;
1105
+ }
1106
+ const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : void 0;
1107
+ let configLabelKey = key;
1108
+ if (key in payload && typeof payload[key] === "string") {
1109
+ configLabelKey = payload[key];
1110
+ } else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") {
1111
+ configLabelKey = payloadPayload[key];
1112
+ }
1113
+ return configLabelKey in config ? config[configLabelKey] : config[key];
1114
+ }
1115
+ var Checkbox = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1116
+ CheckboxPrimitive.Root,
1117
+ {
1118
+ ref,
1119
+ className: cn(
1120
+ "grid place-content-center peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",
1121
+ className
1122
+ ),
1123
+ ...props,
1124
+ children: /* @__PURE__ */ jsx(
1125
+ CheckboxPrimitive.Indicator,
1126
+ {
1127
+ className: cn("grid place-content-center text-current"),
1128
+ children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" })
1129
+ }
1130
+ )
1131
+ }
1132
+ ));
1133
+ Checkbox.displayName = CheckboxPrimitive.Root.displayName;
1134
+ var Collapsible = CollapsiblePrimitive.Root;
1135
+ var CollapsibleTrigger2 = CollapsiblePrimitive.CollapsibleTrigger;
1136
+ var CollapsibleContent2 = CollapsiblePrimitive.CollapsibleContent;
1137
+ var Dialog = DialogPrimitive.Root;
1138
+ var DialogTrigger = DialogPrimitive.Trigger;
1139
+ var DialogPortal = DialogPrimitive.Portal;
1140
+ var DialogClose = DialogPrimitive.Close;
1141
+ var DialogOverlay = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1142
+ DialogPrimitive.Overlay,
1143
+ {
1144
+ ref,
1145
+ className: cn(
1146
+ "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
1147
+ className
1148
+ ),
1149
+ ...props
1150
+ }
1151
+ ));
1152
+ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
1153
+ var DialogContent = React35.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
1154
+ /* @__PURE__ */ jsx(DialogOverlay, {}),
1155
+ /* @__PURE__ */ jsxs(
1156
+ DialogPrimitive.Content,
1157
+ {
1158
+ ref,
1159
+ className: cn(
1160
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
1161
+ className
1162
+ ),
1163
+ ...props,
1164
+ children: [
1165
+ children,
1166
+ /* @__PURE__ */ jsxs(DialogPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground", children: [
1167
+ /* @__PURE__ */ jsx(X, { className: "h-4 w-4" }),
1168
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
1169
+ ] })
1170
+ ]
1171
+ }
1172
+ )
1173
+ ] }));
1174
+ DialogContent.displayName = DialogPrimitive.Content.displayName;
1175
+ var DialogHeader = ({
1176
+ className,
1177
+ ...props
1178
+ }) => /* @__PURE__ */ jsx(
1179
+ "div",
1180
+ {
1181
+ className: cn(
1182
+ "flex flex-col space-y-1.5 text-center sm:text-left",
1183
+ className
1184
+ ),
1185
+ ...props
1186
+ }
1187
+ );
1188
+ DialogHeader.displayName = "DialogHeader";
1189
+ var DialogFooter = ({
1190
+ className,
1191
+ ...props
1192
+ }) => /* @__PURE__ */ jsx(
1193
+ "div",
1194
+ {
1195
+ className: cn(
1196
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
1197
+ className
1198
+ ),
1199
+ ...props
1200
+ }
1201
+ );
1202
+ DialogFooter.displayName = "DialogFooter";
1203
+ var DialogTitle = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1204
+ DialogPrimitive.Title,
1205
+ {
1206
+ ref,
1207
+ className: cn(
1208
+ "text-lg font-semibold leading-none tracking-tight",
1209
+ className
1210
+ ),
1211
+ ...props
1212
+ }
1213
+ ));
1214
+ DialogTitle.displayName = DialogPrimitive.Title.displayName;
1215
+ var DialogDescription = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1216
+ DialogPrimitive.Description,
1217
+ {
1218
+ ref,
1219
+ className: cn("text-sm text-muted-foreground", className),
1220
+ ...props
1221
+ }
1222
+ ));
1223
+ DialogDescription.displayName = DialogPrimitive.Description.displayName;
1224
+ var Command = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1225
+ Command$1,
1226
+ {
1227
+ ref,
1228
+ className: cn(
1229
+ "flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",
1230
+ className
1231
+ ),
1232
+ ...props
1233
+ }
1234
+ ));
1235
+ Command.displayName = Command$1.displayName;
1236
+ var CommandDialog = ({ children, ...props }) => {
1237
+ return /* @__PURE__ */ jsx(Dialog, { ...props, children: /* @__PURE__ */ jsx(DialogContent, { className: "overflow-hidden p-0 shadow-lg", children: /* @__PURE__ */ jsx(Command, { className: "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children }) }) });
1238
+ };
1239
+ var CommandInput = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs("div", { className: "flex items-center border-b px-3", "cmdk-input-wrapper": "", children: [
1240
+ /* @__PURE__ */ jsx(Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
1241
+ /* @__PURE__ */ jsx(
1242
+ Command$1.Input,
1243
+ {
1244
+ ref,
1245
+ className: cn(
1246
+ "flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
1247
+ className
1248
+ ),
1249
+ ...props
1250
+ }
1251
+ )
1252
+ ] }));
1253
+ CommandInput.displayName = Command$1.Input.displayName;
1254
+ var CommandList = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1255
+ Command$1.List,
1256
+ {
1257
+ ref,
1258
+ className: cn("max-h-[300px] overflow-y-auto overflow-x-hidden", className),
1259
+ ...props
1260
+ }
1261
+ ));
1262
+ CommandList.displayName = Command$1.List.displayName;
1263
+ var CommandEmpty = React35.forwardRef((props, ref) => /* @__PURE__ */ jsx(
1264
+ Command$1.Empty,
1265
+ {
1266
+ ref,
1267
+ className: "py-6 text-center text-sm",
1268
+ ...props
1269
+ }
1270
+ ));
1271
+ CommandEmpty.displayName = Command$1.Empty.displayName;
1272
+ var CommandGroup = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1273
+ Command$1.Group,
1274
+ {
1275
+ ref,
1276
+ className: cn(
1277
+ "overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",
1278
+ className
1279
+ ),
1280
+ ...props
1281
+ }
1282
+ ));
1283
+ CommandGroup.displayName = Command$1.Group.displayName;
1284
+ var CommandSeparator = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1285
+ Command$1.Separator,
1286
+ {
1287
+ ref,
1288
+ className: cn("-mx-1 h-px bg-border", className),
1289
+ ...props
1290
+ }
1291
+ ));
1292
+ CommandSeparator.displayName = Command$1.Separator.displayName;
1293
+ var CommandItem = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1294
+ Command$1.Item,
1295
+ {
1296
+ ref,
1297
+ className: cn(
1298
+ "relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1299
+ className
1300
+ ),
1301
+ ...props
1302
+ }
1303
+ ));
1304
+ CommandItem.displayName = Command$1.Item.displayName;
1305
+ var CommandShortcut = ({
1306
+ className,
1307
+ ...props
1308
+ }) => {
1309
+ return /* @__PURE__ */ jsx(
1310
+ "span",
1311
+ {
1312
+ className: cn(
1313
+ "ml-auto text-xs tracking-widest text-muted-foreground",
1314
+ className
1315
+ ),
1316
+ ...props
1317
+ }
1318
+ );
1319
+ };
1320
+ CommandShortcut.displayName = "CommandShortcut";
1321
+ var ContextMenu = ContextMenuPrimitive.Root;
1322
+ var ContextMenuTrigger = ContextMenuPrimitive.Trigger;
1323
+ var ContextMenuGroup = ContextMenuPrimitive.Group;
1324
+ var ContextMenuPortal = ContextMenuPrimitive.Portal;
1325
+ var ContextMenuSub = ContextMenuPrimitive.Sub;
1326
+ var ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;
1327
+ var ContextMenuSubTrigger = React35.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1328
+ ContextMenuPrimitive.SubTrigger,
1329
+ {
1330
+ ref,
1331
+ className: cn(
1332
+ "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
1333
+ inset && "pl-8",
1334
+ className
1335
+ ),
1336
+ ...props,
1337
+ children: [
1338
+ children,
1339
+ /* @__PURE__ */ jsx(ChevronRight, { className: "ml-auto h-4 w-4" })
1340
+ ]
1341
+ }
1342
+ ));
1343
+ ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName;
1344
+ var ContextMenuSubContent = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1345
+ ContextMenuPrimitive.SubContent,
1346
+ {
1347
+ ref,
1348
+ className: cn(
1349
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-context-menu-content-transform-origin]",
1350
+ className
1351
+ ),
1352
+ ...props
1353
+ }
1354
+ ));
1355
+ ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName;
1356
+ var ContextMenuContent = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
1357
+ ContextMenuPrimitive.Content,
1358
+ {
1359
+ ref,
1360
+ className: cn(
1361
+ "z-50 max-h-[--radix-context-menu-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-context-menu-content-transform-origin]",
1362
+ className
1363
+ ),
1364
+ ...props
1365
+ }
1366
+ ) }));
1367
+ ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName;
1368
+ var ContextMenuItem = React35.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
1369
+ ContextMenuPrimitive.Item,
1370
+ {
1371
+ ref,
1372
+ className: cn(
1373
+ "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1374
+ inset && "pl-8",
1375
+ className
1376
+ ),
1377
+ ...props
1378
+ }
1379
+ ));
1380
+ ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName;
1381
+ var ContextMenuCheckboxItem = React35.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
1382
+ ContextMenuPrimitive.CheckboxItem,
1383
+ {
1384
+ ref,
1385
+ className: cn(
1386
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1387
+ className
1388
+ ),
1389
+ checked,
1390
+ ...props,
1391
+ children: [
1392
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" }) }) }),
1393
+ children
1394
+ ]
1395
+ }
1396
+ ));
1397
+ ContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName;
1398
+ var ContextMenuRadioItem = React35.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1399
+ ContextMenuPrimitive.RadioItem,
1400
+ {
1401
+ ref,
1402
+ className: cn(
1403
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1404
+ className
1405
+ ),
1406
+ ...props,
1407
+ children: [
1408
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Circle, { className: "h-2 w-2 fill-current" }) }) }),
1409
+ children
1410
+ ]
1411
+ }
1412
+ ));
1413
+ ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName;
1414
+ var ContextMenuLabel = React35.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
1415
+ ContextMenuPrimitive.Label,
1416
+ {
1417
+ ref,
1418
+ className: cn(
1419
+ "px-2 py-1.5 text-sm font-semibold text-foreground",
1420
+ inset && "pl-8",
1421
+ className
1422
+ ),
1423
+ ...props
1424
+ }
1425
+ ));
1426
+ ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName;
1427
+ var ContextMenuSeparator = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1428
+ ContextMenuPrimitive.Separator,
1429
+ {
1430
+ ref,
1431
+ className: cn("-mx-1 my-1 h-px bg-border", className),
1432
+ ...props
1433
+ }
1434
+ ));
1435
+ ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName;
1436
+ var ContextMenuShortcut = ({
1437
+ className,
1438
+ ...props
1439
+ }) => {
1440
+ return /* @__PURE__ */ jsx(
1441
+ "span",
1442
+ {
1443
+ className: cn(
1444
+ "ml-auto text-xs tracking-widest text-muted-foreground",
1445
+ className
1446
+ ),
1447
+ ...props
1448
+ }
1449
+ );
1450
+ };
1451
+ ContextMenuShortcut.displayName = "ContextMenuShortcut";
1452
+ var Drawer = ({
1453
+ shouldScaleBackground = true,
1454
+ ...props
1455
+ }) => /* @__PURE__ */ jsx(
1456
+ Drawer$1.Root,
1457
+ {
1458
+ shouldScaleBackground,
1459
+ ...props
1460
+ }
1461
+ );
1462
+ Drawer.displayName = "Drawer";
1463
+ var DrawerTrigger = Drawer$1.Trigger;
1464
+ var DrawerPortal = Drawer$1.Portal;
1465
+ var DrawerClose = Drawer$1.Close;
1466
+ var DrawerOverlay = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1467
+ Drawer$1.Overlay,
1468
+ {
1469
+ ref,
1470
+ className: cn("fixed inset-0 z-50 bg-black/80", className),
1471
+ ...props
1472
+ }
1473
+ ));
1474
+ DrawerOverlay.displayName = Drawer$1.Overlay.displayName;
1475
+ var DrawerContent = React35.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DrawerPortal, { children: [
1476
+ /* @__PURE__ */ jsx(DrawerOverlay, {}),
1477
+ /* @__PURE__ */ jsxs(
1478
+ Drawer$1.Content,
1479
+ {
1480
+ ref,
1481
+ className: cn(
1482
+ "fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border bg-background",
1483
+ className
1484
+ ),
1485
+ ...props,
1486
+ children: [
1487
+ /* @__PURE__ */ jsx("div", { className: "mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted" }),
1488
+ children
1489
+ ]
1490
+ }
1491
+ )
1492
+ ] }));
1493
+ DrawerContent.displayName = "DrawerContent";
1494
+ var DrawerHeader = ({
1495
+ className,
1496
+ ...props
1497
+ }) => /* @__PURE__ */ jsx(
1498
+ "div",
1499
+ {
1500
+ className: cn("grid gap-1.5 p-4 text-center sm:text-left", className),
1501
+ ...props
1502
+ }
1503
+ );
1504
+ DrawerHeader.displayName = "DrawerHeader";
1505
+ var DrawerFooter = ({
1506
+ className,
1507
+ ...props
1508
+ }) => /* @__PURE__ */ jsx(
1509
+ "div",
1510
+ {
1511
+ className: cn("mt-auto flex flex-col gap-2 p-4", className),
1512
+ ...props
1513
+ }
1514
+ );
1515
+ DrawerFooter.displayName = "DrawerFooter";
1516
+ var DrawerTitle = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1517
+ Drawer$1.Title,
1518
+ {
1519
+ ref,
1520
+ className: cn(
1521
+ "text-lg font-semibold leading-none tracking-tight",
1522
+ className
1523
+ ),
1524
+ ...props
1525
+ }
1526
+ ));
1527
+ DrawerTitle.displayName = Drawer$1.Title.displayName;
1528
+ var DrawerDescription = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1529
+ Drawer$1.Description,
1530
+ {
1531
+ ref,
1532
+ className: cn("text-sm text-muted-foreground", className),
1533
+ ...props
1534
+ }
1535
+ ));
1536
+ DrawerDescription.displayName = Drawer$1.Description.displayName;
1537
+ var DropdownMenu = DropdownMenuPrimitive.Root;
1538
+ var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
1539
+ var DropdownMenuGroup = DropdownMenuPrimitive.Group;
1540
+ var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
1541
+ var DropdownMenuSub = DropdownMenuPrimitive.Sub;
1542
+ var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
1543
+ var DropdownMenuSubTrigger = React35.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1544
+ DropdownMenuPrimitive.SubTrigger,
1545
+ {
1546
+ ref,
1547
+ className: cn(
1548
+ "flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1549
+ inset && "pl-8",
1550
+ className
1551
+ ),
1552
+ ...props,
1553
+ children: [
1554
+ children,
1555
+ /* @__PURE__ */ jsx(ChevronRight, { className: "ml-auto" })
1556
+ ]
1557
+ }
1558
+ ));
1559
+ DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
1560
+ var DropdownMenuSubContent = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1561
+ DropdownMenuPrimitive.SubContent,
1562
+ {
1563
+ ref,
1564
+ className: cn(
1565
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
1566
+ className
1567
+ ),
1568
+ ...props
1569
+ }
1570
+ ));
1571
+ DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
1572
+ var DropdownMenuContent = React35.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
1573
+ DropdownMenuPrimitive.Content,
1574
+ {
1575
+ ref,
1576
+ sideOffset,
1577
+ className: cn(
1578
+ "z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
1579
+ className
1580
+ ),
1581
+ ...props
1582
+ }
1583
+ ) }));
1584
+ DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
1585
+ var DropdownMenuItem = React35.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
1586
+ DropdownMenuPrimitive.Item,
1587
+ {
1588
+ ref,
1589
+ className: cn(
1590
+ "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1591
+ inset && "pl-8",
1592
+ className
1593
+ ),
1594
+ ...props
1595
+ }
1596
+ ));
1597
+ DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
1598
+ var DropdownMenuCheckboxItem = React35.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
1599
+ DropdownMenuPrimitive.CheckboxItem,
1600
+ {
1601
+ ref,
1602
+ className: cn(
1603
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1604
+ className
1605
+ ),
1606
+ checked,
1607
+ ...props,
1608
+ children: [
1609
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" }) }) }),
1610
+ children
1611
+ ]
1612
+ }
1613
+ ));
1614
+ DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
1615
+ var DropdownMenuRadioItem = React35.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1616
+ DropdownMenuPrimitive.RadioItem,
1617
+ {
1618
+ ref,
1619
+ className: cn(
1620
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1621
+ className
1622
+ ),
1623
+ ...props,
1624
+ children: [
1625
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Circle, { className: "h-2 w-2 fill-current" }) }) }),
1626
+ children
1627
+ ]
1628
+ }
1629
+ ));
1630
+ DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
1631
+ var DropdownMenuLabel = React35.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
1632
+ DropdownMenuPrimitive.Label,
1633
+ {
1634
+ ref,
1635
+ className: cn(
1636
+ "px-2 py-1.5 text-sm font-semibold",
1637
+ inset && "pl-8",
1638
+ className
1639
+ ),
1640
+ ...props
1641
+ }
1642
+ ));
1643
+ DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
1644
+ var DropdownMenuSeparator = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1645
+ DropdownMenuPrimitive.Separator,
1646
+ {
1647
+ ref,
1648
+ className: cn("-mx-1 my-1 h-px bg-muted", className),
1649
+ ...props
1650
+ }
1651
+ ));
1652
+ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
1653
+ var DropdownMenuShortcut = ({
1654
+ className,
1655
+ ...props
1656
+ }) => {
1657
+ return /* @__PURE__ */ jsx(
1658
+ "span",
1659
+ {
1660
+ className: cn("ml-auto text-xs tracking-widest opacity-60", className),
1661
+ ...props
1662
+ }
1663
+ );
1664
+ };
1665
+ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
1666
+ function Empty({ className, ...props }) {
1667
+ return /* @__PURE__ */ jsx(
1668
+ "div",
1669
+ {
1670
+ "data-slot": "empty",
1671
+ className: cn(
1672
+ "flex min-w-0 flex-1 flex-col items-center justify-center gap-6 text-balance rounded-lg border-dashed p-6 text-center md:p-12",
1673
+ className
1674
+ ),
1675
+ ...props
1676
+ }
1677
+ );
1678
+ }
1679
+ function EmptyHeader({ className, ...props }) {
1680
+ return /* @__PURE__ */ jsx(
1681
+ "div",
1682
+ {
1683
+ "data-slot": "empty-header",
1684
+ className: cn(
1685
+ "flex max-w-sm flex-col items-center gap-2 text-center",
1686
+ className
1687
+ ),
1688
+ ...props
1689
+ }
1690
+ );
1691
+ }
1692
+ var emptyMediaVariants = cva(
1693
+ "mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
1694
+ {
1695
+ variants: {
1696
+ variant: {
1697
+ default: "bg-transparent",
1698
+ icon: "bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6"
1699
+ }
1700
+ },
1701
+ defaultVariants: {
1702
+ variant: "default"
1703
+ }
1704
+ }
1705
+ );
1706
+ function EmptyMedia({
1707
+ className,
1708
+ variant = "default",
1709
+ ...props
1710
+ }) {
1711
+ return /* @__PURE__ */ jsx(
1712
+ "div",
1713
+ {
1714
+ "data-slot": "empty-icon",
1715
+ "data-variant": variant,
1716
+ className: cn(emptyMediaVariants({ variant, className })),
1717
+ ...props
1718
+ }
1719
+ );
1720
+ }
1721
+ function EmptyTitle({ className, ...props }) {
1722
+ return /* @__PURE__ */ jsx(
1723
+ "div",
1724
+ {
1725
+ "data-slot": "empty-title",
1726
+ className: cn("text-lg font-medium tracking-tight", className),
1727
+ ...props
1728
+ }
1729
+ );
1730
+ }
1731
+ function EmptyDescription({ className, ...props }) {
1732
+ return /* @__PURE__ */ jsx(
1733
+ "div",
1734
+ {
1735
+ "data-slot": "empty-description",
1736
+ className: cn(
1737
+ "text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4",
1738
+ className
1739
+ ),
1740
+ ...props
1741
+ }
1742
+ );
1743
+ }
1744
+ function EmptyContent({ className, ...props }) {
1745
+ return /* @__PURE__ */ jsx(
1746
+ "div",
1747
+ {
1748
+ "data-slot": "empty-content",
1749
+ className: cn(
1750
+ "flex w-full min-w-0 max-w-sm flex-col items-center gap-4 text-balance text-sm",
1751
+ className
1752
+ ),
1753
+ ...props
1754
+ }
1755
+ );
1756
+ }
1757
+ var labelVariants = cva(
1758
+ "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
1759
+ );
1760
+ var Label3 = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1761
+ LabelPrimitive.Root,
1762
+ {
1763
+ ref,
1764
+ className: cn(labelVariants(), className),
1765
+ ...props
1766
+ }
1767
+ ));
1768
+ Label3.displayName = LabelPrimitive.Root.displayName;
1769
+ function FieldSet({ className, ...props }) {
1770
+ return /* @__PURE__ */ jsx(
1771
+ "fieldset",
1772
+ {
1773
+ "data-slot": "field-set",
1774
+ className: cn(
1775
+ "flex flex-col gap-6",
1776
+ "has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3",
1777
+ className
1778
+ ),
1779
+ ...props
1780
+ }
1781
+ );
1782
+ }
1783
+ function FieldLegend({
1784
+ className,
1785
+ variant = "legend",
1786
+ ...props
1787
+ }) {
1788
+ return /* @__PURE__ */ jsx(
1789
+ "legend",
1790
+ {
1791
+ "data-slot": "field-legend",
1792
+ "data-variant": variant,
1793
+ className: cn(
1794
+ "mb-3 font-medium",
1795
+ "data-[variant=legend]:text-base",
1796
+ "data-[variant=label]:text-sm",
1797
+ className
1798
+ ),
1799
+ ...props
1800
+ }
1801
+ );
1802
+ }
1803
+ function FieldGroup({ className, ...props }) {
1804
+ return /* @__PURE__ */ jsx(
1805
+ "div",
1806
+ {
1807
+ "data-slot": "field-group",
1808
+ className: cn(
1809
+ "group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4",
1810
+ className
1811
+ ),
1812
+ ...props
1813
+ }
1814
+ );
1815
+ }
1816
+ var fieldVariants = cva(
1817
+ "group/field data-[invalid=true]:text-destructive flex w-full gap-3",
1818
+ {
1819
+ variants: {
1820
+ orientation: {
1821
+ vertical: ["flex-col [&>*]:w-full [&>.sr-only]:w-auto"],
1822
+ horizontal: [
1823
+ "flex-row items-center",
1824
+ "[&>[data-slot=field-label]]:flex-auto",
1825
+ "has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px has-[>[data-slot=field-content]]:items-start"
1826
+ ],
1827
+ responsive: [
1828
+ "@md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto flex-col [&>*]:w-full [&>.sr-only]:w-auto",
1829
+ "@md/field-group:[&>[data-slot=field-label]]:flex-auto",
1830
+ "@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
1831
+ ]
1832
+ }
1833
+ },
1834
+ defaultVariants: {
1835
+ orientation: "vertical"
1836
+ }
1837
+ }
1838
+ );
1839
+ function Field({
1840
+ className,
1841
+ orientation = "vertical",
1842
+ ...props
1843
+ }) {
1844
+ return /* @__PURE__ */ jsx(
1845
+ "div",
1846
+ {
1847
+ role: "group",
1848
+ "data-slot": "field",
1849
+ "data-orientation": orientation,
1850
+ className: cn(fieldVariants({ orientation }), className),
1851
+ ...props
1852
+ }
1853
+ );
1854
+ }
1855
+ function FieldContent({ className, ...props }) {
1856
+ return /* @__PURE__ */ jsx(
1857
+ "div",
1858
+ {
1859
+ "data-slot": "field-content",
1860
+ className: cn(
1861
+ "group/field-content flex flex-1 flex-col gap-1.5 leading-snug",
1862
+ className
1863
+ ),
1864
+ ...props
1865
+ }
1866
+ );
1867
+ }
1868
+ function FieldLabel({
1869
+ className,
1870
+ ...props
1871
+ }) {
1872
+ return /* @__PURE__ */ jsx(
1873
+ Label3,
1874
+ {
1875
+ "data-slot": "field-label",
1876
+ className: cn(
1877
+ "group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50",
1878
+ "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>[data-slot=field]]:p-4",
1879
+ "has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10",
1880
+ className
1881
+ ),
1882
+ ...props
1883
+ }
1884
+ );
1885
+ }
1886
+ function FieldTitle({ className, ...props }) {
1887
+ return /* @__PURE__ */ jsx(
1888
+ "div",
1889
+ {
1890
+ "data-slot": "field-label",
1891
+ className: cn(
1892
+ "flex w-fit items-center gap-2 text-sm font-medium leading-snug group-data-[disabled=true]/field:opacity-50",
1893
+ className
1894
+ ),
1895
+ ...props
1896
+ }
1897
+ );
1898
+ }
1899
+ function FieldDescription({ className, ...props }) {
1900
+ return /* @__PURE__ */ jsx(
1901
+ "p",
1902
+ {
1903
+ "data-slot": "field-description",
1904
+ className: cn(
1905
+ "text-muted-foreground text-sm font-normal leading-normal group-has-[[data-orientation=horizontal]]/field:text-balance",
1906
+ "nth-last-2:-mt-1 last:mt-0 [[data-variant=legend]+&]:-mt-1.5",
1907
+ "[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4",
1908
+ className
1909
+ ),
1910
+ ...props
1911
+ }
1912
+ );
1913
+ }
1914
+ function FieldSeparator({
1915
+ children,
1916
+ className,
1917
+ ...props
1918
+ }) {
1919
+ return /* @__PURE__ */ jsxs(
1920
+ "div",
1921
+ {
1922
+ "data-slot": "field-separator",
1923
+ "data-content": !!children,
1924
+ className: cn(
1925
+ "relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2",
1926
+ className
1927
+ ),
1928
+ ...props,
1929
+ children: [
1930
+ /* @__PURE__ */ jsx(Separator, { className: "absolute inset-0 top-1/2" }),
1931
+ children && /* @__PURE__ */ jsx(
1932
+ "span",
1933
+ {
1934
+ className: "bg-background text-muted-foreground relative mx-auto block w-fit px-2",
1935
+ "data-slot": "field-separator-content",
1936
+ children
1937
+ }
1938
+ )
1939
+ ]
1940
+ }
1941
+ );
1942
+ }
1943
+ function FieldError({
1944
+ className,
1945
+ children,
1946
+ errors,
1947
+ ...props
1948
+ }) {
1949
+ const content = useMemo(() => {
1950
+ if (children) {
1951
+ return children;
1952
+ }
1953
+ if (!errors) {
1954
+ return null;
1955
+ }
1956
+ if (errors?.length === 1 && errors[0]?.message) {
1957
+ return errors[0].message;
1958
+ }
1959
+ return /* @__PURE__ */ jsx("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: errors.map(
1960
+ (error, index) => error?.message && /* @__PURE__ */ jsx("li", { children: error.message }, index)
1961
+ ) });
1962
+ }, [children, errors]);
1963
+ if (!content) {
1964
+ return null;
1965
+ }
1966
+ return /* @__PURE__ */ jsx(
1967
+ "div",
1968
+ {
1969
+ role: "alert",
1970
+ "data-slot": "field-error",
1971
+ className: cn("text-destructive text-sm font-normal", className),
1972
+ ...props,
1973
+ children: content
1974
+ }
1975
+ );
1976
+ }
1977
+ var Form = FormProvider;
1978
+ var FormFieldContext = React35.createContext(null);
1979
+ var FormField = ({
1980
+ ...props
1981
+ }) => {
1982
+ return /* @__PURE__ */ jsx(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx(Controller, { ...props }) });
1983
+ };
1984
+ var useFormField = () => {
1985
+ const fieldContext = React35.useContext(FormFieldContext);
1986
+ const itemContext = React35.useContext(FormItemContext);
1987
+ const { getFieldState, formState } = useFormContext();
1988
+ if (!fieldContext) {
1989
+ throw new Error("useFormField should be used within <FormField>");
1990
+ }
1991
+ if (!itemContext) {
1992
+ throw new Error("useFormField should be used within <FormItem>");
1993
+ }
1994
+ const fieldState = getFieldState(fieldContext.name, formState);
1995
+ const { id } = itemContext;
1996
+ return {
1997
+ id,
1998
+ name: fieldContext.name,
1999
+ formItemId: `${id}-form-item`,
2000
+ formDescriptionId: `${id}-form-item-description`,
2001
+ formMessageId: `${id}-form-item-message`,
2002
+ ...fieldState
2003
+ };
2004
+ };
2005
+ var FormItemContext = React35.createContext(null);
2006
+ var FormItem = React35.forwardRef(({ className, ...props }, ref) => {
2007
+ const id = React35.useId();
2008
+ return /* @__PURE__ */ jsx(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx("div", { ref, className: cn("space-y-2", className), ...props }) });
2009
+ });
2010
+ FormItem.displayName = "FormItem";
2011
+ var FormLabel = React35.forwardRef(({ className, ...props }, ref) => {
2012
+ const { error, formItemId } = useFormField();
2013
+ return /* @__PURE__ */ jsx(
2014
+ Label3,
2015
+ {
2016
+ ref,
2017
+ className: cn(error && "text-destructive", className),
2018
+ htmlFor: formItemId,
2019
+ ...props
2020
+ }
2021
+ );
2022
+ });
2023
+ FormLabel.displayName = "FormLabel";
2024
+ var FormControl = React35.forwardRef(({ ...props }, ref) => {
2025
+ const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
2026
+ return /* @__PURE__ */ jsx(
2027
+ Slot,
2028
+ {
2029
+ ref,
2030
+ id: formItemId,
2031
+ "aria-describedby": !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`,
2032
+ "aria-invalid": !!error,
2033
+ ...props
2034
+ }
2035
+ );
2036
+ });
2037
+ FormControl.displayName = "FormControl";
2038
+ var FormDescription = React35.forwardRef(({ className, ...props }, ref) => {
2039
+ const { formDescriptionId } = useFormField();
2040
+ return /* @__PURE__ */ jsx(
2041
+ "p",
2042
+ {
2043
+ ref,
2044
+ id: formDescriptionId,
2045
+ className: cn("text-sm text-muted-foreground", className),
2046
+ ...props
2047
+ }
2048
+ );
2049
+ });
2050
+ FormDescription.displayName = "FormDescription";
2051
+ var FormMessage = React35.forwardRef(({ className, children, ...props }, ref) => {
2052
+ const { error, formMessageId } = useFormField();
2053
+ const body = error ? String(error?.message ?? "") : children;
2054
+ if (!body) {
2055
+ return null;
2056
+ }
2057
+ return /* @__PURE__ */ jsx(
2058
+ "p",
2059
+ {
2060
+ ref,
2061
+ id: formMessageId,
2062
+ className: cn("text-sm font-medium text-destructive", className),
2063
+ ...props,
2064
+ children: body
2065
+ }
2066
+ );
2067
+ });
2068
+ FormMessage.displayName = "FormMessage";
2069
+ var HoverCard = HoverCardPrimitive.Root;
2070
+ var HoverCardTrigger = HoverCardPrimitive.Trigger;
2071
+ var HoverCardContent = React35.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(
2072
+ HoverCardPrimitive.Content,
2073
+ {
2074
+ ref,
2075
+ align,
2076
+ sideOffset,
2077
+ className: cn(
2078
+ "z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-hover-card-content-transform-origin]",
2079
+ className
2080
+ ),
2081
+ ...props
2082
+ }
2083
+ ));
2084
+ HoverCardContent.displayName = HoverCardPrimitive.Content.displayName;
2085
+ var Input = React35.forwardRef(
2086
+ ({ className, type, ...props }, ref) => {
2087
+ return /* @__PURE__ */ jsx(
2088
+ "input",
2089
+ {
2090
+ type,
2091
+ className: cn(
2092
+ "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
2093
+ className
2094
+ ),
2095
+ ref,
2096
+ ...props
2097
+ }
2098
+ );
2099
+ }
2100
+ );
2101
+ Input.displayName = "Input";
2102
+ var Textarea = React35.forwardRef(({ className, ...props }, ref) => {
2103
+ return /* @__PURE__ */ jsx(
2104
+ "textarea",
2105
+ {
2106
+ className: cn(
2107
+ "flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
2108
+ className
2109
+ ),
2110
+ ref,
2111
+ ...props
2112
+ }
2113
+ );
2114
+ });
2115
+ Textarea.displayName = "Textarea";
2116
+ function InputGroup({ className, ...props }) {
2117
+ return /* @__PURE__ */ jsx(
2118
+ "div",
2119
+ {
2120
+ "data-slot": "input-group",
2121
+ role: "group",
2122
+ className: cn(
2123
+ "group/input-group border-input dark:bg-input/30 shadow-xs relative flex w-full items-center rounded-md border outline-none transition-[color,box-shadow]",
2124
+ "h-9 has-[>textarea]:h-auto",
2125
+ // Variants based on alignment.
2126
+ "has-[>[data-align=inline-start]]:[&>input]:pl-2",
2127
+ "has-[>[data-align=inline-end]]:[&>input]:pr-2",
2128
+ "has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3",
2129
+ "has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3",
2130
+ // Focus state.
2131
+ "has-[[data-slot=input-group-control]:focus-visible]:ring-ring has-[[data-slot=input-group-control]:focus-visible]:ring-1",
2132
+ // Error state.
2133
+ "has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40",
2134
+ className
2135
+ ),
2136
+ ...props
2137
+ }
2138
+ );
2139
+ }
2140
+ var inputGroupAddonVariants = cva(
2141
+ "text-muted-foreground flex h-auto cursor-text select-none items-center justify-center gap-2 py-1.5 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4",
2142
+ {
2143
+ variants: {
2144
+ align: {
2145
+ "inline-start": "order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]",
2146
+ "inline-end": "order-last pr-3 has-[>button]:mr-[-0.4rem] has-[>kbd]:mr-[-0.35rem]",
2147
+ "block-start": "[.border-b]:pb-3 order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5",
2148
+ "block-end": "[.border-t]:pt-3 order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5"
2149
+ }
2150
+ },
2151
+ defaultVariants: {
2152
+ align: "inline-start"
2153
+ }
2154
+ }
2155
+ );
2156
+ function InputGroupAddon({
2157
+ className,
2158
+ align = "inline-start",
2159
+ ...props
2160
+ }) {
2161
+ return /* @__PURE__ */ jsx(
2162
+ "div",
2163
+ {
2164
+ role: "group",
2165
+ "data-slot": "input-group-addon",
2166
+ "data-align": align,
2167
+ className: cn(inputGroupAddonVariants({ align }), className),
2168
+ onClick: (e) => {
2169
+ if (e.target.closest("button")) {
2170
+ return;
2171
+ }
2172
+ e.currentTarget.parentElement?.querySelector("input")?.focus();
2173
+ },
2174
+ ...props
2175
+ }
2176
+ );
2177
+ }
2178
+ var inputGroupButtonVariants = cva(
2179
+ "flex items-center gap-2 text-sm shadow-none",
2180
+ {
2181
+ variants: {
2182
+ size: {
2183
+ xs: "h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5",
2184
+ sm: "h-8 gap-1.5 rounded-md px-2.5 has-[>svg]:px-2.5",
2185
+ "icon-xs": "size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0",
2186
+ "icon-sm": "size-8 p-0 has-[>svg]:p-0"
2187
+ }
2188
+ },
2189
+ defaultVariants: {
2190
+ size: "xs"
2191
+ }
2192
+ }
2193
+ );
2194
+ function InputGroupButton({
2195
+ className,
2196
+ type = "button",
2197
+ variant = "ghost",
2198
+ size = "xs",
2199
+ ...props
2200
+ }) {
2201
+ return /* @__PURE__ */ jsx(
2202
+ Button,
2203
+ {
2204
+ type,
2205
+ "data-size": size,
2206
+ variant,
2207
+ className: cn(inputGroupButtonVariants({ size }), className),
2208
+ ...props
2209
+ }
2210
+ );
2211
+ }
2212
+ function InputGroupText({ className, ...props }) {
2213
+ return /* @__PURE__ */ jsx(
2214
+ "span",
2215
+ {
2216
+ className: cn(
2217
+ "text-muted-foreground flex items-center gap-2 text-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none",
2218
+ className
2219
+ ),
2220
+ ...props
2221
+ }
2222
+ );
2223
+ }
2224
+ function InputGroupInput({
2225
+ className,
2226
+ ...props
2227
+ }) {
2228
+ return /* @__PURE__ */ jsx(
2229
+ Input,
2230
+ {
2231
+ "data-slot": "input-group-control",
2232
+ className: cn(
2233
+ "flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent",
2234
+ className
2235
+ ),
2236
+ ...props
2237
+ }
2238
+ );
2239
+ }
2240
+ function InputGroupTextarea({
2241
+ className,
2242
+ ...props
2243
+ }) {
2244
+ return /* @__PURE__ */ jsx(
2245
+ Textarea,
2246
+ {
2247
+ "data-slot": "input-group-control",
2248
+ className: cn(
2249
+ "flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent",
2250
+ className
2251
+ ),
2252
+ ...props
2253
+ }
2254
+ );
2255
+ }
2256
+ var InputOTP = React35.forwardRef(({ className, containerClassName, ...props }, ref) => /* @__PURE__ */ jsx(
2257
+ OTPInput,
2258
+ {
2259
+ ref,
2260
+ containerClassName: cn(
2261
+ "flex items-center gap-2 has-[:disabled]:opacity-50",
2262
+ containerClassName
2263
+ ),
2264
+ className: cn("disabled:cursor-not-allowed", className),
2265
+ ...props
2266
+ }
2267
+ ));
2268
+ InputOTP.displayName = "InputOTP";
2269
+ var InputOTPGroup = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("flex items-center", className), ...props }));
2270
+ InputOTPGroup.displayName = "InputOTPGroup";
2271
+ var InputOTPSlot = React35.forwardRef(({ index, className, ...props }, ref) => {
2272
+ const inputOTPContext = React35.useContext(OTPInputContext);
2273
+ const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index];
2274
+ return /* @__PURE__ */ jsxs(
2275
+ "div",
2276
+ {
2277
+ ref,
2278
+ className: cn(
2279
+ "relative flex h-10 w-10 items-center justify-center border-y border-r border-input text-sm transition-all first:rounded-l-md first:border-l last:rounded-r-md",
2280
+ isActive && "z-10 ring-2 ring-ring ring-offset-background",
2281
+ className
2282
+ ),
2283
+ ...props,
2284
+ children: [
2285
+ char,
2286
+ hasFakeCaret && /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" }) })
2287
+ ]
2288
+ }
2289
+ );
2290
+ });
2291
+ InputOTPSlot.displayName = "InputOTPSlot";
2292
+ var InputOTPSeparator = React35.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, role: "separator", ...props, children: /* @__PURE__ */ jsx(Dot, {}) }));
2293
+ InputOTPSeparator.displayName = "InputOTPSeparator";
2294
+ function ItemGroup({ className, ...props }) {
2295
+ return /* @__PURE__ */ jsx(
2296
+ "div",
2297
+ {
2298
+ role: "list",
2299
+ "data-slot": "item-group",
2300
+ className: cn("group/item-group flex flex-col", className),
2301
+ ...props
2302
+ }
2303
+ );
2304
+ }
2305
+ function ItemSeparator({
2306
+ className,
2307
+ ...props
2308
+ }) {
2309
+ return /* @__PURE__ */ jsx(
2310
+ Separator,
2311
+ {
2312
+ "data-slot": "item-separator",
2313
+ orientation: "horizontal",
2314
+ className: cn("my-0", className),
2315
+ ...props
2316
+ }
2317
+ );
2318
+ }
2319
+ var itemVariants = cva(
2320
+ "group/item [a]:hover:bg-accent/50 focus-visible:border-ring focus-visible:ring-ring/50 [a]:transition-colors flex flex-wrap items-center rounded-md border border-transparent text-sm outline-none transition-colors duration-100 focus-visible:ring-[3px]",
2321
+ {
2322
+ variants: {
2323
+ variant: {
2324
+ default: "bg-transparent",
2325
+ outline: "border-border",
2326
+ muted: "bg-muted/50"
2327
+ },
2328
+ size: {
2329
+ default: "gap-4 p-4 ",
2330
+ sm: "gap-2.5 px-4 py-3"
2331
+ }
2332
+ },
2333
+ defaultVariants: {
2334
+ variant: "default",
2335
+ size: "default"
2336
+ }
2337
+ }
2338
+ );
2339
+ function Item4({
2340
+ className,
2341
+ variant = "default",
2342
+ size = "default",
2343
+ asChild = false,
2344
+ ...props
2345
+ }) {
2346
+ const Comp = asChild ? Slot : "div";
2347
+ return /* @__PURE__ */ jsx(
2348
+ Comp,
2349
+ {
2350
+ "data-slot": "item",
2351
+ "data-variant": variant,
2352
+ "data-size": size,
2353
+ className: cn(itemVariants({ variant, size, className })),
2354
+ ...props
2355
+ }
2356
+ );
2357
+ }
2358
+ var itemMediaVariants = cva(
2359
+ "flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=item-description]]/item:translate-y-0.5 group-has-[[data-slot=item-description]]/item:self-start [&_svg]:pointer-events-none",
2360
+ {
2361
+ variants: {
2362
+ variant: {
2363
+ default: "bg-transparent",
2364
+ icon: "bg-muted size-8 rounded-sm border [&_svg:not([class*='size-'])]:size-4",
2365
+ image: "size-10 overflow-hidden rounded-sm [&_img]:size-full [&_img]:object-cover"
2366
+ }
2367
+ },
2368
+ defaultVariants: {
2369
+ variant: "default"
2370
+ }
2371
+ }
2372
+ );
2373
+ function ItemMedia({
2374
+ className,
2375
+ variant = "default",
2376
+ ...props
2377
+ }) {
2378
+ return /* @__PURE__ */ jsx(
2379
+ "div",
2380
+ {
2381
+ "data-slot": "item-media",
2382
+ "data-variant": variant,
2383
+ className: cn(itemMediaVariants({ variant, className })),
2384
+ ...props
2385
+ }
2386
+ );
2387
+ }
2388
+ function ItemContent({ className, ...props }) {
2389
+ return /* @__PURE__ */ jsx(
2390
+ "div",
2391
+ {
2392
+ "data-slot": "item-content",
2393
+ className: cn(
2394
+ "flex flex-1 flex-col gap-1 [&+[data-slot=item-content]]:flex-none",
2395
+ className
2396
+ ),
2397
+ ...props
2398
+ }
2399
+ );
2400
+ }
2401
+ function ItemTitle({ className, ...props }) {
2402
+ return /* @__PURE__ */ jsx(
2403
+ "div",
2404
+ {
2405
+ "data-slot": "item-title",
2406
+ className: cn(
2407
+ "flex w-fit items-center gap-2 text-sm font-medium leading-snug",
2408
+ className
2409
+ ),
2410
+ ...props
2411
+ }
2412
+ );
2413
+ }
2414
+ function ItemDescription({ className, ...props }) {
2415
+ return /* @__PURE__ */ jsx(
2416
+ "p",
2417
+ {
2418
+ "data-slot": "item-description",
2419
+ className: cn(
2420
+ "text-muted-foreground line-clamp-2 text-balance text-sm font-normal leading-normal",
2421
+ "[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4",
2422
+ className
2423
+ ),
2424
+ ...props
2425
+ }
2426
+ );
2427
+ }
2428
+ function ItemActions({ className, ...props }) {
2429
+ return /* @__PURE__ */ jsx(
2430
+ "div",
2431
+ {
2432
+ "data-slot": "item-actions",
2433
+ className: cn("flex items-center gap-2", className),
2434
+ ...props
2435
+ }
2436
+ );
2437
+ }
2438
+ function ItemHeader({ className, ...props }) {
2439
+ return /* @__PURE__ */ jsx(
2440
+ "div",
2441
+ {
2442
+ "data-slot": "item-header",
2443
+ className: cn(
2444
+ "flex basis-full items-center justify-between gap-2",
2445
+ className
2446
+ ),
2447
+ ...props
2448
+ }
2449
+ );
2450
+ }
2451
+ function ItemFooter({ className, ...props }) {
2452
+ return /* @__PURE__ */ jsx(
2453
+ "div",
2454
+ {
2455
+ "data-slot": "item-footer",
2456
+ className: cn(
2457
+ "flex basis-full items-center justify-between gap-2",
2458
+ className
2459
+ ),
2460
+ ...props
2461
+ }
2462
+ );
2463
+ }
2464
+ function Kbd({ className, ...props }) {
2465
+ return /* @__PURE__ */ jsx(
2466
+ "kbd",
2467
+ {
2468
+ "data-slot": "kbd",
2469
+ className: cn(
2470
+ "bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 select-none items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium",
2471
+ "[&_svg:not([class*='size-'])]:size-3",
2472
+ "[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10",
2473
+ className
2474
+ ),
2475
+ ...props
2476
+ }
2477
+ );
2478
+ }
2479
+ function KbdGroup({ className, ...props }) {
2480
+ return /* @__PURE__ */ jsx(
2481
+ "kbd",
2482
+ {
2483
+ "data-slot": "kbd-group",
2484
+ className: cn("inline-flex items-center gap-1", className),
2485
+ ...props
2486
+ }
2487
+ );
2488
+ }
2489
+ function MenubarMenu({
2490
+ ...props
2491
+ }) {
2492
+ return /* @__PURE__ */ jsx(MenubarPrimitive.Menu, { ...props });
2493
+ }
2494
+ function MenubarGroup({
2495
+ ...props
2496
+ }) {
2497
+ return /* @__PURE__ */ jsx(MenubarPrimitive.Group, { ...props });
2498
+ }
2499
+ function MenubarPortal({
2500
+ ...props
2501
+ }) {
2502
+ return /* @__PURE__ */ jsx(MenubarPrimitive.Portal, { ...props });
2503
+ }
2504
+ function MenubarRadioGroup({
2505
+ ...props
2506
+ }) {
2507
+ return /* @__PURE__ */ jsx(MenubarPrimitive.RadioGroup, { ...props });
2508
+ }
2509
+ function MenubarSub({
2510
+ ...props
2511
+ }) {
2512
+ return /* @__PURE__ */ jsx(MenubarPrimitive.Sub, { "data-slot": "menubar-sub", ...props });
2513
+ }
2514
+ var Menubar = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2515
+ MenubarPrimitive.Root,
2516
+ {
2517
+ ref,
2518
+ className: cn(
2519
+ "flex h-10 items-center space-x-1 rounded-md border bg-background p-1",
2520
+ className
2521
+ ),
2522
+ ...props
2523
+ }
2524
+ ));
2525
+ Menubar.displayName = MenubarPrimitive.Root.displayName;
2526
+ var MenubarTrigger = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2527
+ MenubarPrimitive.Trigger,
2528
+ {
2529
+ ref,
2530
+ className: cn(
2531
+ "flex cursor-default select-none items-center rounded-sm px-3 py-1.5 text-sm font-medium outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
2532
+ className
2533
+ ),
2534
+ ...props
2535
+ }
2536
+ ));
2537
+ MenubarTrigger.displayName = MenubarPrimitive.Trigger.displayName;
2538
+ var MenubarSubTrigger = React35.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
2539
+ MenubarPrimitive.SubTrigger,
2540
+ {
2541
+ ref,
2542
+ className: cn(
2543
+ "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
2544
+ inset && "pl-8",
2545
+ className
2546
+ ),
2547
+ ...props,
2548
+ children: [
2549
+ children,
2550
+ /* @__PURE__ */ jsx(ChevronRight, { className: "ml-auto h-4 w-4" })
2551
+ ]
2552
+ }
2553
+ ));
2554
+ MenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName;
2555
+ var MenubarSubContent = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2556
+ MenubarPrimitive.SubContent,
2557
+ {
2558
+ ref,
2559
+ className: cn(
2560
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-menubar-content-transform-origin]",
2561
+ className
2562
+ ),
2563
+ ...props
2564
+ }
2565
+ ));
2566
+ MenubarSubContent.displayName = MenubarPrimitive.SubContent.displayName;
2567
+ var MenubarContent = React35.forwardRef(
2568
+ ({ className, align = "start", alignOffset = -4, sideOffset = 8, ...props }, ref) => /* @__PURE__ */ jsx(MenubarPrimitive.Portal, { children: /* @__PURE__ */ jsx(
2569
+ MenubarPrimitive.Content,
2570
+ {
2571
+ ref,
2572
+ align,
2573
+ alignOffset,
2574
+ sideOffset,
2575
+ className: cn(
2576
+ "z-50 min-w-[12rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-menubar-content-transform-origin]",
2577
+ className
2578
+ ),
2579
+ ...props
2580
+ }
2581
+ ) })
2582
+ );
2583
+ MenubarContent.displayName = MenubarPrimitive.Content.displayName;
2584
+ var MenubarItem = React35.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
2585
+ MenubarPrimitive.Item,
2586
+ {
2587
+ ref,
2588
+ className: cn(
2589
+ "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
2590
+ inset && "pl-8",
2591
+ className
2592
+ ),
2593
+ ...props
2594
+ }
2595
+ ));
2596
+ MenubarItem.displayName = MenubarPrimitive.Item.displayName;
2597
+ var MenubarCheckboxItem = React35.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
2598
+ MenubarPrimitive.CheckboxItem,
2599
+ {
2600
+ ref,
2601
+ className: cn(
2602
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
2603
+ className
2604
+ ),
2605
+ checked,
2606
+ ...props,
2607
+ children: [
2608
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" }) }) }),
2609
+ children
2610
+ ]
2611
+ }
2612
+ ));
2613
+ MenubarCheckboxItem.displayName = MenubarPrimitive.CheckboxItem.displayName;
2614
+ var MenubarRadioItem = React35.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
2615
+ MenubarPrimitive.RadioItem,
2616
+ {
2617
+ ref,
2618
+ className: cn(
2619
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
2620
+ className
2621
+ ),
2622
+ ...props,
2623
+ children: [
2624
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Circle, { className: "h-2 w-2 fill-current" }) }) }),
2625
+ children
2626
+ ]
2627
+ }
2628
+ ));
2629
+ MenubarRadioItem.displayName = MenubarPrimitive.RadioItem.displayName;
2630
+ var MenubarLabel = React35.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
2631
+ MenubarPrimitive.Label,
2632
+ {
2633
+ ref,
2634
+ className: cn(
2635
+ "px-2 py-1.5 text-sm font-semibold",
2636
+ inset && "pl-8",
2637
+ className
2638
+ ),
2639
+ ...props
2640
+ }
2641
+ ));
2642
+ MenubarLabel.displayName = MenubarPrimitive.Label.displayName;
2643
+ var MenubarSeparator = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2644
+ MenubarPrimitive.Separator,
2645
+ {
2646
+ ref,
2647
+ className: cn("-mx-1 my-1 h-px bg-muted", className),
2648
+ ...props
2649
+ }
2650
+ ));
2651
+ MenubarSeparator.displayName = MenubarPrimitive.Separator.displayName;
2652
+ var MenubarShortcut = ({
2653
+ className,
2654
+ ...props
2655
+ }) => {
2656
+ return /* @__PURE__ */ jsx(
2657
+ "span",
2658
+ {
2659
+ className: cn(
2660
+ "ml-auto text-xs tracking-widest text-muted-foreground",
2661
+ className
2662
+ ),
2663
+ ...props
2664
+ }
2665
+ );
2666
+ };
2667
+ MenubarShortcut.displayname = "MenubarShortcut";
2668
+ var NavigationMenu = React35.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
2669
+ NavigationMenuPrimitive.Root,
2670
+ {
2671
+ ref,
2672
+ className: cn(
2673
+ "relative z-10 flex max-w-max flex-1 items-center justify-center",
2674
+ className
2675
+ ),
2676
+ ...props,
2677
+ children: [
2678
+ children,
2679
+ /* @__PURE__ */ jsx(NavigationMenuViewport, {})
2680
+ ]
2681
+ }
2682
+ ));
2683
+ NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName;
2684
+ var NavigationMenuList = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2685
+ NavigationMenuPrimitive.List,
2686
+ {
2687
+ ref,
2688
+ className: cn(
2689
+ "group flex flex-1 list-none items-center justify-center space-x-1",
2690
+ className
2691
+ ),
2692
+ ...props
2693
+ }
2694
+ ));
2695
+ NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName;
2696
+ var NavigationMenuItem = NavigationMenuPrimitive.Item;
2697
+ var navigationMenuTriggerStyle = cva(
2698
+ "group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=open]:text-accent-foreground data-[state=open]:bg-accent/50 data-[state=open]:hover:bg-accent data-[state=open]:focus:bg-accent"
2699
+ );
2700
+ var NavigationMenuTrigger = React35.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
2701
+ NavigationMenuPrimitive.Trigger,
2702
+ {
2703
+ ref,
2704
+ className: cn(navigationMenuTriggerStyle(), "group", className),
2705
+ ...props,
2706
+ children: [
2707
+ children,
2708
+ " ",
2709
+ /* @__PURE__ */ jsx(
2710
+ ChevronDown,
2711
+ {
2712
+ className: "relative top-[1px] ml-1 h-3 w-3 transition duration-200 group-data-[state=open]:rotate-180",
2713
+ "aria-hidden": "true"
2714
+ }
2715
+ )
2716
+ ]
2717
+ }
2718
+ ));
2719
+ NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;
2720
+ var NavigationMenuContent = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2721
+ NavigationMenuPrimitive.Content,
2722
+ {
2723
+ ref,
2724
+ className: cn(
2725
+ "left-0 top-0 w-full data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out 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 md:absolute md:w-auto ",
2726
+ className
2727
+ ),
2728
+ ...props
2729
+ }
2730
+ ));
2731
+ NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;
2732
+ var NavigationMenuLink = NavigationMenuPrimitive.Link;
2733
+ var NavigationMenuViewport = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { className: cn("absolute left-0 top-full flex justify-center"), children: /* @__PURE__ */ jsx(
2734
+ NavigationMenuPrimitive.Viewport,
2735
+ {
2736
+ className: cn(
2737
+ "origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]",
2738
+ className
2739
+ ),
2740
+ ref,
2741
+ ...props
2742
+ }
2743
+ ) }));
2744
+ NavigationMenuViewport.displayName = NavigationMenuPrimitive.Viewport.displayName;
2745
+ var NavigationMenuIndicator = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2746
+ NavigationMenuPrimitive.Indicator,
2747
+ {
2748
+ ref,
2749
+ className: cn(
2750
+ "top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in",
2751
+ className
2752
+ ),
2753
+ ...props,
2754
+ children: /* @__PURE__ */ jsx("div", { className: "relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md" })
2755
+ }
2756
+ ));
2757
+ NavigationMenuIndicator.displayName = NavigationMenuPrimitive.Indicator.displayName;
2758
+ var Pagination = ({ className, ...props }) => /* @__PURE__ */ jsx(
2759
+ "nav",
2760
+ {
2761
+ role: "navigation",
2762
+ "aria-label": "pagination",
2763
+ className: cn("mx-auto flex w-full justify-center", className),
2764
+ ...props
2765
+ }
2766
+ );
2767
+ Pagination.displayName = "Pagination";
2768
+ var PaginationContent = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2769
+ "ul",
2770
+ {
2771
+ ref,
2772
+ className: cn("flex flex-row items-center gap-1", className),
2773
+ ...props
2774
+ }
2775
+ ));
2776
+ PaginationContent.displayName = "PaginationContent";
2777
+ var PaginationItem = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("li", { ref, className: cn("", className), ...props }));
2778
+ PaginationItem.displayName = "PaginationItem";
2779
+ var PaginationLink = ({
2780
+ className,
2781
+ isActive,
2782
+ size = "icon",
2783
+ ...props
2784
+ }) => /* @__PURE__ */ jsx(
2785
+ "a",
2786
+ {
2787
+ "aria-current": isActive ? "page" : void 0,
2788
+ className: cn(
2789
+ buttonVariants({
2790
+ variant: isActive ? "outline" : "ghost",
2791
+ size
2792
+ }),
2793
+ className
2794
+ ),
2795
+ ...props
2796
+ }
2797
+ );
2798
+ PaginationLink.displayName = "PaginationLink";
2799
+ var PaginationPrevious = ({
2800
+ className,
2801
+ ...props
2802
+ }) => /* @__PURE__ */ jsxs(
2803
+ PaginationLink,
2804
+ {
2805
+ "aria-label": "Go to previous page",
2806
+ size: "default",
2807
+ className: cn("gap-1 pl-2.5", className),
2808
+ ...props,
2809
+ children: [
2810
+ /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4" }),
2811
+ /* @__PURE__ */ jsx("span", { children: "Previous" })
2812
+ ]
2813
+ }
2814
+ );
2815
+ PaginationPrevious.displayName = "PaginationPrevious";
2816
+ var PaginationNext = ({
2817
+ className,
2818
+ ...props
2819
+ }) => /* @__PURE__ */ jsxs(
2820
+ PaginationLink,
2821
+ {
2822
+ "aria-label": "Go to next page",
2823
+ size: "default",
2824
+ className: cn("gap-1 pr-2.5", className),
2825
+ ...props,
2826
+ children: [
2827
+ /* @__PURE__ */ jsx("span", { children: "Next" }),
2828
+ /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4" })
2829
+ ]
2830
+ }
2831
+ );
2832
+ PaginationNext.displayName = "PaginationNext";
2833
+ var PaginationEllipsis = ({
2834
+ className,
2835
+ ...props
2836
+ }) => /* @__PURE__ */ jsxs(
2837
+ "span",
2838
+ {
2839
+ "aria-hidden": true,
2840
+ className: cn("flex h-9 w-9 items-center justify-center", className),
2841
+ ...props,
2842
+ children: [
2843
+ /* @__PURE__ */ jsx(MoreHorizontal, { className: "h-4 w-4" }),
2844
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "More pages" })
2845
+ ]
2846
+ }
2847
+ );
2848
+ PaginationEllipsis.displayName = "PaginationEllipsis";
2849
+ var Popover = PopoverPrimitive.Root;
2850
+ var PopoverTrigger = PopoverPrimitive.Trigger;
2851
+ var PopoverContent = React35.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
2852
+ PopoverPrimitive.Content,
2853
+ {
2854
+ ref,
2855
+ align,
2856
+ sideOffset,
2857
+ className: cn(
2858
+ "z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]",
2859
+ className
2860
+ ),
2861
+ ...props
2862
+ }
2863
+ ) }));
2864
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName;
2865
+ var Progress = React35.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ jsx(
2866
+ ProgressPrimitive.Root,
2867
+ {
2868
+ ref,
2869
+ className: cn(
2870
+ "relative h-4 w-full overflow-hidden rounded-full bg-secondary",
2871
+ className
2872
+ ),
2873
+ ...props,
2874
+ children: /* @__PURE__ */ jsx(
2875
+ ProgressPrimitive.Indicator,
2876
+ {
2877
+ className: "h-full w-full flex-1 bg-primary transition-all",
2878
+ style: { transform: `translateX(-${100 - (value || 0)}%)` }
2879
+ }
2880
+ )
2881
+ }
2882
+ ));
2883
+ Progress.displayName = ProgressPrimitive.Root.displayName;
2884
+ var RadioGroup4 = React35.forwardRef(({ className, ...props }, ref) => {
2885
+ return /* @__PURE__ */ jsx(
2886
+ RadioGroupPrimitive.Root,
2887
+ {
2888
+ className: cn("grid gap-2", className),
2889
+ ...props,
2890
+ ref
2891
+ }
2892
+ );
2893
+ });
2894
+ RadioGroup4.displayName = RadioGroupPrimitive.Root.displayName;
2895
+ var RadioGroupItem = React35.forwardRef(({ className, ...props }, ref) => {
2896
+ return /* @__PURE__ */ jsx(
2897
+ RadioGroupPrimitive.Item,
2898
+ {
2899
+ ref,
2900
+ className: cn(
2901
+ "aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
2902
+ className
2903
+ ),
2904
+ ...props,
2905
+ children: /* @__PURE__ */ jsx(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx(Circle, { className: "h-2.5 w-2.5 fill-current text-current" }) })
2906
+ }
2907
+ );
2908
+ });
2909
+ RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
2910
+ var ResizablePanelGroup = ({
2911
+ className,
2912
+ ...props
2913
+ }) => /* @__PURE__ */ jsx(
2914
+ ResizablePrimitive.PanelGroup,
2915
+ {
2916
+ className: cn(
2917
+ "flex h-full w-full data-[panel-group-direction=vertical]:flex-col",
2918
+ className
2919
+ ),
2920
+ ...props
2921
+ }
2922
+ );
2923
+ var ResizablePanel = ResizablePrimitive.Panel;
2924
+ var ResizableHandle = ({
2925
+ withHandle,
2926
+ className,
2927
+ ...props
2928
+ }) => /* @__PURE__ */ jsx(
2929
+ ResizablePrimitive.PanelResizeHandle,
2930
+ {
2931
+ className: cn(
2932
+ "relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:-translate-y-1/2 data-[panel-group-direction=vertical]:after:translate-x-0 [&[data-panel-group-direction=vertical]>div]:rotate-90",
2933
+ className
2934
+ ),
2935
+ ...props,
2936
+ children: withHandle && /* @__PURE__ */ jsx("div", { className: "z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border", children: /* @__PURE__ */ jsx(GripVertical, { className: "h-2.5 w-2.5" }) })
2937
+ }
2938
+ );
2939
+ var ScrollArea = React35.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
2940
+ ScrollAreaPrimitive.Root,
2941
+ {
2942
+ ref,
2943
+ className: cn("relative overflow-hidden", className),
2944
+ ...props,
2945
+ children: [
2946
+ /* @__PURE__ */ jsx(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]", children }),
2947
+ /* @__PURE__ */ jsx(ScrollBar, {}),
2948
+ /* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, {})
2949
+ ]
2950
+ }
2951
+ ));
2952
+ ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
2953
+ var ScrollBar = React35.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ jsx(
2954
+ ScrollAreaPrimitive.ScrollAreaScrollbar,
2955
+ {
2956
+ ref,
2957
+ orientation,
2958
+ className: cn(
2959
+ "flex touch-none select-none transition-colors",
2960
+ orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-[1px]",
2961
+ orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent p-[1px]",
2962
+ className
2963
+ ),
2964
+ ...props,
2965
+ children: /* @__PURE__ */ jsx(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" })
2966
+ }
2967
+ ));
2968
+ ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
2969
+ var Select = SelectPrimitive.Root;
2970
+ var SelectGroup = SelectPrimitive.Group;
2971
+ var SelectValue = SelectPrimitive.Value;
2972
+ var SelectTrigger = React35.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
2973
+ SelectPrimitive.Trigger,
2974
+ {
2975
+ ref,
2976
+ className: cn(
2977
+ "flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
2978
+ className
2979
+ ),
2980
+ ...props,
2981
+ children: [
2982
+ children,
2983
+ /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 opacity-50" }) })
2984
+ ]
2985
+ }
2986
+ ));
2987
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
2988
+ var SelectScrollUpButton = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2989
+ SelectPrimitive.ScrollUpButton,
2990
+ {
2991
+ ref,
2992
+ className: cn(
2993
+ "flex cursor-default items-center justify-center py-1",
2994
+ className
2995
+ ),
2996
+ ...props,
2997
+ children: /* @__PURE__ */ jsx(ChevronUp, { className: "h-4 w-4" })
2998
+ }
2999
+ ));
3000
+ SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
3001
+ var SelectScrollDownButton = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3002
+ SelectPrimitive.ScrollDownButton,
3003
+ {
3004
+ ref,
3005
+ className: cn(
3006
+ "flex cursor-default items-center justify-center py-1",
3007
+ className
3008
+ ),
3009
+ ...props,
3010
+ children: /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4" })
3011
+ }
3012
+ ));
3013
+ SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
3014
+ var SelectContent = React35.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
3015
+ SelectPrimitive.Content,
3016
+ {
3017
+ ref,
3018
+ className: cn(
3019
+ "relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-select-content-transform-origin]",
3020
+ position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
3021
+ className
3022
+ ),
3023
+ position,
3024
+ ...props,
3025
+ children: [
3026
+ /* @__PURE__ */ jsx(SelectScrollUpButton, {}),
3027
+ /* @__PURE__ */ jsx(
3028
+ SelectPrimitive.Viewport,
3029
+ {
3030
+ className: cn(
3031
+ "p-1",
3032
+ position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
3033
+ ),
3034
+ children
3035
+ }
3036
+ ),
3037
+ /* @__PURE__ */ jsx(SelectScrollDownButton, {})
3038
+ ]
3039
+ }
3040
+ ) }));
3041
+ SelectContent.displayName = SelectPrimitive.Content.displayName;
3042
+ var SelectLabel = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3043
+ SelectPrimitive.Label,
3044
+ {
3045
+ ref,
3046
+ className: cn("py-1.5 pl-8 pr-2 text-sm font-semibold", className),
3047
+ ...props
3048
+ }
3049
+ ));
3050
+ SelectLabel.displayName = SelectPrimitive.Label.displayName;
3051
+ var SelectItem = React35.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
3052
+ SelectPrimitive.Item,
3053
+ {
3054
+ ref,
3055
+ className: cn(
3056
+ "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
3057
+ className
3058
+ ),
3059
+ ...props,
3060
+ children: [
3061
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" }) }) }),
3062
+ /* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children })
3063
+ ]
3064
+ }
3065
+ ));
3066
+ SelectItem.displayName = SelectPrimitive.Item.displayName;
3067
+ var SelectSeparator = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3068
+ SelectPrimitive.Separator,
3069
+ {
3070
+ ref,
3071
+ className: cn("-mx-1 my-1 h-px bg-muted", className),
3072
+ ...props
3073
+ }
3074
+ ));
3075
+ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
3076
+ var Sheet = DialogPrimitive.Root;
3077
+ var SheetTrigger = DialogPrimitive.Trigger;
3078
+ var SheetClose = DialogPrimitive.Close;
3079
+ var SheetPortal = DialogPrimitive.Portal;
3080
+ var SheetOverlay = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3081
+ DialogPrimitive.Overlay,
3082
+ {
3083
+ className: cn(
3084
+ "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
3085
+ className
3086
+ ),
3087
+ ...props,
3088
+ ref
3089
+ }
3090
+ ));
3091
+ SheetOverlay.displayName = DialogPrimitive.Overlay.displayName;
3092
+ var sheetVariants = cva(
3093
+ "fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
3094
+ {
3095
+ variants: {
3096
+ side: {
3097
+ top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
3098
+ bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
3099
+ left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
3100
+ right: "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"
3101
+ }
3102
+ },
3103
+ defaultVariants: {
3104
+ side: "right"
3105
+ }
3106
+ }
3107
+ );
3108
+ var SheetContent = React35.forwardRef(({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ jsxs(SheetPortal, { children: [
3109
+ /* @__PURE__ */ jsx(SheetOverlay, {}),
3110
+ /* @__PURE__ */ jsxs(
3111
+ DialogPrimitive.Content,
3112
+ {
3113
+ ref,
3114
+ className: cn(sheetVariants({ side }), className),
3115
+ ...props,
3116
+ children: [
3117
+ children,
3118
+ /* @__PURE__ */ jsxs(DialogPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary", children: [
3119
+ /* @__PURE__ */ jsx(X, { className: "h-4 w-4" }),
3120
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
3121
+ ] })
3122
+ ]
3123
+ }
3124
+ )
3125
+ ] }));
3126
+ SheetContent.displayName = DialogPrimitive.Content.displayName;
3127
+ var SheetHeader = ({
3128
+ className,
3129
+ ...props
3130
+ }) => /* @__PURE__ */ jsx(
3131
+ "div",
3132
+ {
3133
+ className: cn(
3134
+ "flex flex-col space-y-2 text-center sm:text-left",
3135
+ className
3136
+ ),
3137
+ ...props
3138
+ }
3139
+ );
3140
+ SheetHeader.displayName = "SheetHeader";
3141
+ var SheetFooter = ({
3142
+ className,
3143
+ ...props
3144
+ }) => /* @__PURE__ */ jsx(
3145
+ "div",
3146
+ {
3147
+ className: cn(
3148
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
3149
+ className
3150
+ ),
3151
+ ...props
3152
+ }
3153
+ );
3154
+ SheetFooter.displayName = "SheetFooter";
3155
+ var SheetTitle = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3156
+ DialogPrimitive.Title,
3157
+ {
3158
+ ref,
3159
+ className: cn("text-lg font-semibold text-foreground", className),
3160
+ ...props
3161
+ }
3162
+ ));
3163
+ SheetTitle.displayName = DialogPrimitive.Title.displayName;
3164
+ var SheetDescription = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3165
+ DialogPrimitive.Description,
3166
+ {
3167
+ ref,
3168
+ className: cn("text-sm text-muted-foreground", className),
3169
+ ...props
3170
+ }
3171
+ ));
3172
+ SheetDescription.displayName = DialogPrimitive.Description.displayName;
3173
+ var MOBILE_BREAKPOINT = 768;
3174
+ function useIsMobile() {
3175
+ const [isMobile, setIsMobile] = React35.useState(void 0);
3176
+ React35.useEffect(() => {
3177
+ const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
3178
+ const onChange = () => {
3179
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
3180
+ };
3181
+ mql.addEventListener("change", onChange);
3182
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
3183
+ return () => mql.removeEventListener("change", onChange);
3184
+ }, []);
3185
+ return !!isMobile;
3186
+ }
3187
+ function Skeleton({
3188
+ className,
3189
+ ...props
3190
+ }) {
3191
+ return /* @__PURE__ */ jsx(
3192
+ "div",
3193
+ {
3194
+ className: cn("animate-pulse rounded-md bg-muted", className),
3195
+ ...props
3196
+ }
3197
+ );
3198
+ }
3199
+ var TooltipProvider = TooltipPrimitive.Provider;
3200
+ var Tooltip2 = TooltipPrimitive.Root;
3201
+ var TooltipTrigger = TooltipPrimitive.Trigger;
3202
+ var TooltipContent = React35.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(
3203
+ TooltipPrimitive.Content,
3204
+ {
3205
+ ref,
3206
+ sideOffset,
3207
+ className: cn(
3208
+ "z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-tooltip-content-transform-origin]",
3209
+ className
3210
+ ),
3211
+ ...props
3212
+ }
3213
+ ));
3214
+ TooltipContent.displayName = TooltipPrimitive.Content.displayName;
3215
+ var SIDEBAR_COOKIE_NAME = "sidebar_state";
3216
+ var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
3217
+ var SIDEBAR_WIDTH = "16rem";
3218
+ var SIDEBAR_WIDTH_MOBILE = "18rem";
3219
+ var SIDEBAR_WIDTH_ICON = "3rem";
3220
+ var SIDEBAR_KEYBOARD_SHORTCUT = "b";
3221
+ var SidebarContext = React35.createContext(null);
3222
+ function useSidebar() {
3223
+ const context = React35.useContext(SidebarContext);
3224
+ if (!context) {
3225
+ throw new Error("useSidebar must be used within a SidebarProvider.");
3226
+ }
3227
+ return context;
3228
+ }
3229
+ var SidebarProvider = React35.forwardRef(
3230
+ ({
3231
+ defaultOpen = true,
3232
+ open: openProp,
3233
+ onOpenChange: setOpenProp,
3234
+ className,
3235
+ style,
3236
+ children,
3237
+ ...props
3238
+ }, ref) => {
3239
+ const isMobile = useIsMobile();
3240
+ const [openMobile, setOpenMobile] = React35.useState(false);
3241
+ const [_open, _setOpen] = React35.useState(defaultOpen);
3242
+ const open = openProp ?? _open;
3243
+ const setOpen = React35.useCallback(
3244
+ (value) => {
3245
+ const openState = typeof value === "function" ? value(open) : value;
3246
+ if (setOpenProp) {
3247
+ setOpenProp(openState);
3248
+ } else {
3249
+ _setOpen(openState);
3250
+ }
3251
+ document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
3252
+ },
3253
+ [setOpenProp, open]
3254
+ );
3255
+ const toggleSidebar = React35.useCallback(() => {
3256
+ return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
3257
+ }, [isMobile, setOpen, setOpenMobile]);
3258
+ React35.useEffect(() => {
3259
+ const handleKeyDown = (event) => {
3260
+ if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
3261
+ event.preventDefault();
3262
+ toggleSidebar();
3263
+ }
3264
+ };
3265
+ window.addEventListener("keydown", handleKeyDown);
3266
+ return () => window.removeEventListener("keydown", handleKeyDown);
3267
+ }, [toggleSidebar]);
3268
+ const state = open ? "expanded" : "collapsed";
3269
+ const contextValue = React35.useMemo(
3270
+ () => ({
3271
+ state,
3272
+ open,
3273
+ setOpen,
3274
+ isMobile,
3275
+ openMobile,
3276
+ setOpenMobile,
3277
+ toggleSidebar
3278
+ }),
3279
+ [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
3280
+ );
3281
+ return /* @__PURE__ */ jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsx(
3282
+ "div",
3283
+ {
3284
+ style: {
3285
+ "--sidebar-width": SIDEBAR_WIDTH,
3286
+ "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
3287
+ ...style
3288
+ },
3289
+ className: cn(
3290
+ "group/sidebar-wrapper flex min-h-svh w-full has-[[data-variant=inset]]:bg-sidebar",
3291
+ className
3292
+ ),
3293
+ ref,
3294
+ ...props,
3295
+ children
3296
+ }
3297
+ ) }) });
3298
+ }
3299
+ );
3300
+ SidebarProvider.displayName = "SidebarProvider";
3301
+ var Sidebar = React35.forwardRef(
3302
+ ({
3303
+ side = "left",
3304
+ variant = "sidebar",
3305
+ collapsible = "offcanvas",
3306
+ className,
3307
+ children,
3308
+ ...props
3309
+ }, ref) => {
3310
+ const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
3311
+ if (collapsible === "none") {
3312
+ return /* @__PURE__ */ jsx(
3313
+ "div",
3314
+ {
3315
+ className: cn(
3316
+ "flex h-full w-[--sidebar-width] flex-col bg-sidebar text-sidebar-foreground",
3317
+ className
3318
+ ),
3319
+ ref,
3320
+ ...props,
3321
+ children
3322
+ }
3323
+ );
3324
+ }
3325
+ if (isMobile) {
3326
+ return /* @__PURE__ */ jsx(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: /* @__PURE__ */ jsxs(
3327
+ SheetContent,
3328
+ {
3329
+ "data-sidebar": "sidebar",
3330
+ "data-mobile": "true",
3331
+ className: "w-[--sidebar-width] bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",
3332
+ style: {
3333
+ "--sidebar-width": SIDEBAR_WIDTH_MOBILE
3334
+ },
3335
+ side,
3336
+ children: [
3337
+ /* @__PURE__ */ jsxs(SheetHeader, { className: "sr-only", children: [
3338
+ /* @__PURE__ */ jsx(SheetTitle, { children: "Sidebar" }),
3339
+ /* @__PURE__ */ jsx(SheetDescription, { children: "Displays the mobile sidebar." })
3340
+ ] }),
3341
+ /* @__PURE__ */ jsx("div", { className: "flex h-full w-full flex-col", children })
3342
+ ]
3343
+ }
3344
+ ) });
3345
+ }
3346
+ return /* @__PURE__ */ jsxs(
3347
+ "div",
3348
+ {
3349
+ ref,
3350
+ className: "group peer hidden text-sidebar-foreground md:block",
3351
+ "data-state": state,
3352
+ "data-collapsible": state === "collapsed" ? collapsible : "",
3353
+ "data-variant": variant,
3354
+ "data-side": side,
3355
+ children: [
3356
+ /* @__PURE__ */ jsx(
3357
+ "div",
3358
+ {
3359
+ className: cn(
3360
+ "relative w-[--sidebar-width] bg-transparent transition-[width] duration-200 ease-linear",
3361
+ "group-data-[collapsible=offcanvas]:w-0",
3362
+ "group-data-[side=right]:rotate-180",
3363
+ variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4))]" : "group-data-[collapsible=icon]:w-[--sidebar-width-icon]"
3364
+ )
3365
+ }
3366
+ ),
3367
+ /* @__PURE__ */ jsx(
3368
+ "div",
3369
+ {
3370
+ className: cn(
3371
+ "fixed inset-y-0 z-10 hidden h-svh w-[--sidebar-width] transition-[left,right,width] duration-200 ease-linear md:flex",
3372
+ side === "left" ? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]" : "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",
3373
+ // Adjust the padding for floating and inset variants.
3374
+ variant === "floating" || variant === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4)_+2px)]" : "group-data-[collapsible=icon]:w-[--sidebar-width-icon] group-data-[side=left]:border-r group-data-[side=right]:border-l",
3375
+ className
3376
+ ),
3377
+ ...props,
3378
+ children: /* @__PURE__ */ jsx(
3379
+ "div",
3380
+ {
3381
+ "data-sidebar": "sidebar",
3382
+ className: "flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow",
3383
+ children
3384
+ }
3385
+ )
3386
+ }
3387
+ )
3388
+ ]
3389
+ }
3390
+ );
3391
+ }
3392
+ );
3393
+ Sidebar.displayName = "Sidebar";
3394
+ var SidebarTrigger = React35.forwardRef(({ className, onClick, ...props }, ref) => {
3395
+ const { toggleSidebar } = useSidebar();
3396
+ return /* @__PURE__ */ jsxs(
3397
+ Button,
3398
+ {
3399
+ ref,
3400
+ "data-sidebar": "trigger",
3401
+ variant: "ghost",
3402
+ size: "icon",
3403
+ className: cn("h-7 w-7", className),
3404
+ onClick: (event) => {
3405
+ onClick?.(event);
3406
+ toggleSidebar();
3407
+ },
3408
+ ...props,
3409
+ children: [
3410
+ /* @__PURE__ */ jsx(PanelLeft, {}),
3411
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Toggle Sidebar" })
3412
+ ]
3413
+ }
3414
+ );
3415
+ });
3416
+ SidebarTrigger.displayName = "SidebarTrigger";
3417
+ var SidebarRail = React35.forwardRef(({ className, ...props }, ref) => {
3418
+ const { toggleSidebar } = useSidebar();
3419
+ return /* @__PURE__ */ jsx(
3420
+ "button",
3421
+ {
3422
+ ref,
3423
+ "data-sidebar": "rail",
3424
+ "aria-label": "Toggle Sidebar",
3425
+ tabIndex: -1,
3426
+ onClick: toggleSidebar,
3427
+ title: "Toggle Sidebar",
3428
+ className: cn(
3429
+ "absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex",
3430
+ "[[data-side=left]_&]:cursor-w-resize [[data-side=right]_&]:cursor-e-resize",
3431
+ "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize",
3432
+ "group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full group-data-[collapsible=offcanvas]:hover:bg-sidebar",
3433
+ "[[data-side=left][data-collapsible=offcanvas]_&]:-right-2",
3434
+ "[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",
3435
+ className
3436
+ ),
3437
+ ...props
3438
+ }
3439
+ );
3440
+ });
3441
+ SidebarRail.displayName = "SidebarRail";
3442
+ var SidebarInset = React35.forwardRef(({ className, ...props }, ref) => {
3443
+ return /* @__PURE__ */ jsx(
3444
+ "main",
3445
+ {
3446
+ ref,
3447
+ className: cn(
3448
+ "relative flex w-full flex-1 flex-col bg-background",
3449
+ "md:peer-data-[variant=inset]:m-2 md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow",
3450
+ className
3451
+ ),
3452
+ ...props
3453
+ }
3454
+ );
3455
+ });
3456
+ SidebarInset.displayName = "SidebarInset";
3457
+ var SidebarInput = React35.forwardRef(({ className, ...props }, ref) => {
3458
+ return /* @__PURE__ */ jsx(
3459
+ Input,
3460
+ {
3461
+ ref,
3462
+ "data-sidebar": "input",
3463
+ className: cn(
3464
+ "h-8 w-full bg-background shadow-none focus-visible:ring-2 focus-visible:ring-sidebar-ring",
3465
+ className
3466
+ ),
3467
+ ...props
3468
+ }
3469
+ );
3470
+ });
3471
+ SidebarInput.displayName = "SidebarInput";
3472
+ var SidebarHeader = React35.forwardRef(({ className, ...props }, ref) => {
3473
+ return /* @__PURE__ */ jsx(
3474
+ "div",
3475
+ {
3476
+ ref,
3477
+ "data-sidebar": "header",
3478
+ className: cn("flex flex-col gap-2 p-2", className),
3479
+ ...props
3480
+ }
3481
+ );
3482
+ });
3483
+ SidebarHeader.displayName = "SidebarHeader";
3484
+ var SidebarFooter = React35.forwardRef(({ className, ...props }, ref) => {
3485
+ return /* @__PURE__ */ jsx(
3486
+ "div",
3487
+ {
3488
+ ref,
3489
+ "data-sidebar": "footer",
3490
+ className: cn("flex flex-col gap-2 p-2", className),
3491
+ ...props
3492
+ }
3493
+ );
3494
+ });
3495
+ SidebarFooter.displayName = "SidebarFooter";
3496
+ var SidebarSeparator = React35.forwardRef(({ className, ...props }, ref) => {
3497
+ return /* @__PURE__ */ jsx(
3498
+ Separator,
3499
+ {
3500
+ ref,
3501
+ "data-sidebar": "separator",
3502
+ className: cn("mx-2 w-auto bg-sidebar-border", className),
3503
+ ...props
3504
+ }
3505
+ );
3506
+ });
3507
+ SidebarSeparator.displayName = "SidebarSeparator";
3508
+ var SidebarContent = React35.forwardRef(({ className, ...props }, ref) => {
3509
+ return /* @__PURE__ */ jsx(
3510
+ "div",
3511
+ {
3512
+ ref,
3513
+ "data-sidebar": "content",
3514
+ className: cn(
3515
+ "flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden",
3516
+ className
3517
+ ),
3518
+ ...props
3519
+ }
3520
+ );
3521
+ });
3522
+ SidebarContent.displayName = "SidebarContent";
3523
+ var SidebarGroup = React35.forwardRef(({ className, ...props }, ref) => {
3524
+ return /* @__PURE__ */ jsx(
3525
+ "div",
3526
+ {
3527
+ ref,
3528
+ "data-sidebar": "group",
3529
+ className: cn("relative flex w-full min-w-0 flex-col p-2", className),
3530
+ ...props
3531
+ }
3532
+ );
3533
+ });
3534
+ SidebarGroup.displayName = "SidebarGroup";
3535
+ var SidebarGroupLabel = React35.forwardRef(({ className, asChild = false, ...props }, ref) => {
3536
+ const Comp = asChild ? Slot : "div";
3537
+ return /* @__PURE__ */ jsx(
3538
+ Comp,
3539
+ {
3540
+ ref,
3541
+ "data-sidebar": "group-label",
3542
+ className: cn(
3543
+ "flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 outline-none ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
3544
+ "group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",
3545
+ className
3546
+ ),
3547
+ ...props
3548
+ }
3549
+ );
3550
+ });
3551
+ SidebarGroupLabel.displayName = "SidebarGroupLabel";
3552
+ var SidebarGroupAction = React35.forwardRef(({ className, asChild = false, ...props }, ref) => {
3553
+ const Comp = asChild ? Slot : "button";
3554
+ return /* @__PURE__ */ jsx(
3555
+ Comp,
3556
+ {
3557
+ ref,
3558
+ "data-sidebar": "group-action",
3559
+ className: cn(
3560
+ "absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
3561
+ // Increases the hit area of the button on mobile.
3562
+ "after:absolute after:-inset-2 after:md:hidden",
3563
+ "group-data-[collapsible=icon]:hidden",
3564
+ className
3565
+ ),
3566
+ ...props
3567
+ }
3568
+ );
3569
+ });
3570
+ SidebarGroupAction.displayName = "SidebarGroupAction";
3571
+ var SidebarGroupContent = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3572
+ "div",
3573
+ {
3574
+ ref,
3575
+ "data-sidebar": "group-content",
3576
+ className: cn("w-full text-sm", className),
3577
+ ...props
3578
+ }
3579
+ ));
3580
+ SidebarGroupContent.displayName = "SidebarGroupContent";
3581
+ var SidebarMenu = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3582
+ "ul",
3583
+ {
3584
+ ref,
3585
+ "data-sidebar": "menu",
3586
+ className: cn("flex w-full min-w-0 flex-col gap-1", className),
3587
+ ...props
3588
+ }
3589
+ ));
3590
+ SidebarMenu.displayName = "SidebarMenu";
3591
+ var SidebarMenuItem = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3592
+ "li",
3593
+ {
3594
+ ref,
3595
+ "data-sidebar": "menu-item",
3596
+ className: cn("group/menu-item relative", className),
3597
+ ...props
3598
+ }
3599
+ ));
3600
+ SidebarMenuItem.displayName = "SidebarMenuItem";
3601
+ var sidebarMenuButtonVariants = cva(
3602
+ "peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
3603
+ {
3604
+ variants: {
3605
+ variant: {
3606
+ default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
3607
+ outline: "bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"
3608
+ },
3609
+ size: {
3610
+ default: "h-8 text-sm",
3611
+ sm: "h-7 text-xs",
3612
+ lg: "h-12 text-sm group-data-[collapsible=icon]:!p-0"
3613
+ }
3614
+ },
3615
+ defaultVariants: {
3616
+ variant: "default",
3617
+ size: "default"
3618
+ }
3619
+ }
3620
+ );
3621
+ var SidebarMenuButton = React35.forwardRef(
3622
+ ({
3623
+ asChild = false,
3624
+ isActive = false,
3625
+ variant = "default",
3626
+ size = "default",
3627
+ tooltip,
3628
+ className,
3629
+ ...props
3630
+ }, ref) => {
3631
+ const Comp = asChild ? Slot : "button";
3632
+ const { isMobile, state } = useSidebar();
3633
+ const button = /* @__PURE__ */ jsx(
3634
+ Comp,
3635
+ {
3636
+ ref,
3637
+ "data-sidebar": "menu-button",
3638
+ "data-size": size,
3639
+ "data-active": isActive,
3640
+ className: cn(sidebarMenuButtonVariants({ variant, size }), className),
3641
+ ...props
3642
+ }
3643
+ );
3644
+ if (!tooltip) {
3645
+ return button;
3646
+ }
3647
+ if (typeof tooltip === "string") {
3648
+ tooltip = {
3649
+ children: tooltip
3650
+ };
3651
+ }
3652
+ return /* @__PURE__ */ jsxs(Tooltip2, { children: [
3653
+ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: button }),
3654
+ /* @__PURE__ */ jsx(
3655
+ TooltipContent,
3656
+ {
3657
+ side: "right",
3658
+ align: "center",
3659
+ hidden: state !== "collapsed" || isMobile,
3660
+ ...tooltip
3661
+ }
3662
+ )
3663
+ ] });
3664
+ }
3665
+ );
3666
+ SidebarMenuButton.displayName = "SidebarMenuButton";
3667
+ var SidebarMenuAction = React35.forwardRef(({ className, asChild = false, showOnHover = false, ...props }, ref) => {
3668
+ const Comp = asChild ? Slot : "button";
3669
+ return /* @__PURE__ */ jsx(
3670
+ Comp,
3671
+ {
3672
+ ref,
3673
+ "data-sidebar": "menu-action",
3674
+ className: cn(
3675
+ "absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>svg]:shrink-0",
3676
+ // Increases the hit area of the button on mobile.
3677
+ "after:absolute after:-inset-2 after:md:hidden",
3678
+ "peer-data-[size=sm]/menu-button:top-1",
3679
+ "peer-data-[size=default]/menu-button:top-1.5",
3680
+ "peer-data-[size=lg]/menu-button:top-2.5",
3681
+ "group-data-[collapsible=icon]:hidden",
3682
+ showOnHover && "group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0",
3683
+ className
3684
+ ),
3685
+ ...props
3686
+ }
3687
+ );
3688
+ });
3689
+ SidebarMenuAction.displayName = "SidebarMenuAction";
3690
+ var SidebarMenuBadge = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3691
+ "div",
3692
+ {
3693
+ ref,
3694
+ "data-sidebar": "menu-badge",
3695
+ className: cn(
3696
+ "pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground",
3697
+ "peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground",
3698
+ "peer-data-[size=sm]/menu-button:top-1",
3699
+ "peer-data-[size=default]/menu-button:top-1.5",
3700
+ "peer-data-[size=lg]/menu-button:top-2.5",
3701
+ "group-data-[collapsible=icon]:hidden",
3702
+ className
3703
+ ),
3704
+ ...props
3705
+ }
3706
+ ));
3707
+ SidebarMenuBadge.displayName = "SidebarMenuBadge";
3708
+ var SidebarMenuSkeleton = React35.forwardRef(({ className, showIcon = false, ...props }, ref) => {
3709
+ const width = React35.useMemo(() => {
3710
+ return `${Math.floor(Math.random() * 40) + 50}%`;
3711
+ }, []);
3712
+ return /* @__PURE__ */ jsxs(
3713
+ "div",
3714
+ {
3715
+ ref,
3716
+ "data-sidebar": "menu-skeleton",
3717
+ className: cn("flex h-8 items-center gap-2 rounded-md px-2", className),
3718
+ ...props,
3719
+ children: [
3720
+ showIcon && /* @__PURE__ */ jsx(
3721
+ Skeleton,
3722
+ {
3723
+ className: "size-4 rounded-md",
3724
+ "data-sidebar": "menu-skeleton-icon"
3725
+ }
3726
+ ),
3727
+ /* @__PURE__ */ jsx(
3728
+ Skeleton,
3729
+ {
3730
+ className: "h-4 max-w-[--skeleton-width] flex-1",
3731
+ "data-sidebar": "menu-skeleton-text",
3732
+ style: {
3733
+ "--skeleton-width": width
3734
+ }
3735
+ }
3736
+ )
3737
+ ]
3738
+ }
3739
+ );
3740
+ });
3741
+ SidebarMenuSkeleton.displayName = "SidebarMenuSkeleton";
3742
+ var SidebarMenuSub = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3743
+ "ul",
3744
+ {
3745
+ ref,
3746
+ "data-sidebar": "menu-sub",
3747
+ className: cn(
3748
+ "mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5",
3749
+ "group-data-[collapsible=icon]:hidden",
3750
+ className
3751
+ ),
3752
+ ...props
3753
+ }
3754
+ ));
3755
+ SidebarMenuSub.displayName = "SidebarMenuSub";
3756
+ var SidebarMenuSubItem = React35.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx("li", { ref, ...props }));
3757
+ SidebarMenuSubItem.displayName = "SidebarMenuSubItem";
3758
+ var SidebarMenuSubButton = React35.forwardRef(({ asChild = false, size = "md", isActive, className, ...props }, ref) => {
3759
+ const Comp = asChild ? Slot : "a";
3760
+ return /* @__PURE__ */ jsx(
3761
+ Comp,
3762
+ {
3763
+ ref,
3764
+ "data-sidebar": "menu-sub-button",
3765
+ "data-size": size,
3766
+ "data-active": isActive,
3767
+ className: cn(
3768
+ "flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-none ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground",
3769
+ "data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground",
3770
+ size === "sm" && "text-xs",
3771
+ size === "md" && "text-sm",
3772
+ "group-data-[collapsible=icon]:hidden",
3773
+ className
3774
+ ),
3775
+ ...props
3776
+ }
3777
+ );
3778
+ });
3779
+ SidebarMenuSubButton.displayName = "SidebarMenuSubButton";
3780
+ var Slider = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(
3781
+ SliderPrimitive.Root,
3782
+ {
3783
+ ref,
3784
+ className: cn(
3785
+ "relative flex w-full touch-none select-none items-center",
3786
+ className
3787
+ ),
3788
+ ...props,
3789
+ children: [
3790
+ /* @__PURE__ */ jsx(SliderPrimitive.Track, { className: "relative h-2 w-full grow overflow-hidden rounded-full bg-secondary", children: /* @__PURE__ */ jsx(SliderPrimitive.Range, { className: "absolute h-full bg-primary" }) }),
3791
+ /* @__PURE__ */ jsx(SliderPrimitive.Thumb, { className: "block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50" })
3792
+ ]
3793
+ }
3794
+ ));
3795
+ Slider.displayName = SliderPrimitive.Root.displayName;
3796
+ var Toaster = ({ ...props }) => {
3797
+ const { theme = "system" } = useTheme();
3798
+ return /* @__PURE__ */ jsx(
3799
+ Toaster$1,
3800
+ {
3801
+ theme,
3802
+ className: "toaster group",
3803
+ icons: {
3804
+ success: /* @__PURE__ */ jsx(CircleCheck, { className: "h-4 w-4" }),
3805
+ info: /* @__PURE__ */ jsx(Info, { className: "h-4 w-4" }),
3806
+ warning: /* @__PURE__ */ jsx(TriangleAlert, { className: "h-4 w-4" }),
3807
+ error: /* @__PURE__ */ jsx(OctagonX, { className: "h-4 w-4" }),
3808
+ loading: /* @__PURE__ */ jsx(LoaderCircle, { className: "h-4 w-4 animate-spin" })
3809
+ },
3810
+ toastOptions: {
3811
+ classNames: {
3812
+ toast: "group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",
3813
+ description: "group-[.toast]:text-muted-foreground",
3814
+ actionButton: "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",
3815
+ cancelButton: "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"
3816
+ }
3817
+ },
3818
+ ...props
3819
+ }
3820
+ );
3821
+ };
3822
+ function Spinner({ className, ...props }) {
3823
+ return /* @__PURE__ */ jsx(
3824
+ Loader2Icon,
3825
+ {
3826
+ role: "status",
3827
+ "aria-label": "Loading",
3828
+ className: cn("size-4 animate-spin", className),
3829
+ ...props
3830
+ }
3831
+ );
3832
+ }
3833
+ var Switch = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3834
+ SwitchPrimitives.Root,
3835
+ {
3836
+ className: cn(
3837
+ "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
3838
+ className
3839
+ ),
3840
+ ...props,
3841
+ ref,
3842
+ children: /* @__PURE__ */ jsx(
3843
+ SwitchPrimitives.Thumb,
3844
+ {
3845
+ className: cn(
3846
+ "pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0"
3847
+ )
3848
+ }
3849
+ )
3850
+ }
3851
+ ));
3852
+ Switch.displayName = SwitchPrimitives.Root.displayName;
3853
+ var Table = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsx(
3854
+ "table",
3855
+ {
3856
+ ref,
3857
+ className: cn("w-full caption-bottom text-sm", className),
3858
+ ...props
3859
+ }
3860
+ ) }));
3861
+ Table.displayName = "Table";
3862
+ var TableHeader = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("thead", { ref, className: cn("[&_tr]:border-b", className), ...props }));
3863
+ TableHeader.displayName = "TableHeader";
3864
+ var TableBody = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3865
+ "tbody",
3866
+ {
3867
+ ref,
3868
+ className: cn("[&_tr:last-child]:border-0", className),
3869
+ ...props
3870
+ }
3871
+ ));
3872
+ TableBody.displayName = "TableBody";
3873
+ var TableFooter = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3874
+ "tfoot",
3875
+ {
3876
+ ref,
3877
+ className: cn(
3878
+ "border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",
3879
+ className
3880
+ ),
3881
+ ...props
3882
+ }
3883
+ ));
3884
+ TableFooter.displayName = "TableFooter";
3885
+ var TableRow = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3886
+ "tr",
3887
+ {
3888
+ ref,
3889
+ className: cn(
3890
+ "border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",
3891
+ className
3892
+ ),
3893
+ ...props
3894
+ }
3895
+ ));
3896
+ TableRow.displayName = "TableRow";
3897
+ var TableHead = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3898
+ "th",
3899
+ {
3900
+ ref,
3901
+ className: cn(
3902
+ "h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",
3903
+ className
3904
+ ),
3905
+ ...props
3906
+ }
3907
+ ));
3908
+ TableHead.displayName = "TableHead";
3909
+ var TableCell = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3910
+ "td",
3911
+ {
3912
+ ref,
3913
+ className: cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className),
3914
+ ...props
3915
+ }
3916
+ ));
3917
+ TableCell.displayName = "TableCell";
3918
+ var TableCaption = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3919
+ "caption",
3920
+ {
3921
+ ref,
3922
+ className: cn("mt-4 text-sm text-muted-foreground", className),
3923
+ ...props
3924
+ }
3925
+ ));
3926
+ TableCaption.displayName = "TableCaption";
3927
+ var Tabs = TabsPrimitive.Root;
3928
+ var TabsList = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3929
+ TabsPrimitive.List,
3930
+ {
3931
+ ref,
3932
+ className: cn(
3933
+ "inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",
3934
+ className
3935
+ ),
3936
+ ...props
3937
+ }
3938
+ ));
3939
+ TabsList.displayName = TabsPrimitive.List.displayName;
3940
+ var TabsTrigger = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3941
+ TabsPrimitive.Trigger,
3942
+ {
3943
+ ref,
3944
+ className: cn(
3945
+ "inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",
3946
+ className
3947
+ ),
3948
+ ...props
3949
+ }
3950
+ ));
3951
+ TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
3952
+ var TabsContent = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3953
+ TabsPrimitive.Content,
3954
+ {
3955
+ ref,
3956
+ className: cn(
3957
+ "mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
3958
+ className
3959
+ ),
3960
+ ...props
3961
+ }
3962
+ ));
3963
+ TabsContent.displayName = TabsPrimitive.Content.displayName;
3964
+ var toggleVariants = cva(
3965
+ "inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 gap-2",
3966
+ {
3967
+ variants: {
3968
+ variant: {
3969
+ default: "bg-transparent",
3970
+ outline: "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground"
3971
+ },
3972
+ size: {
3973
+ default: "h-10 px-3 min-w-10",
3974
+ sm: "h-9 px-2.5 min-w-9",
3975
+ lg: "h-11 px-5 min-w-11"
3976
+ }
3977
+ },
3978
+ defaultVariants: {
3979
+ variant: "default",
3980
+ size: "default"
3981
+ }
3982
+ }
3983
+ );
3984
+ var Toggle = React35.forwardRef(({ className, variant, size, ...props }, ref) => /* @__PURE__ */ jsx(
3985
+ TogglePrimitive.Root,
3986
+ {
3987
+ ref,
3988
+ className: cn(toggleVariants({ variant, size, className })),
3989
+ ...props
3990
+ }
3991
+ ));
3992
+ Toggle.displayName = TogglePrimitive.Root.displayName;
3993
+ var ToggleGroupContext = React35.createContext({
3994
+ size: "default",
3995
+ variant: "default"
3996
+ });
3997
+ var ToggleGroup = React35.forwardRef(({ className, variant, size, children, ...props }, ref) => /* @__PURE__ */ jsx(
3998
+ ToggleGroupPrimitive.Root,
3999
+ {
4000
+ ref,
4001
+ className: cn("flex items-center justify-center gap-1", className),
4002
+ ...props,
4003
+ children: /* @__PURE__ */ jsx(ToggleGroupContext.Provider, { value: { variant, size }, children })
4004
+ }
4005
+ ));
4006
+ ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;
4007
+ var ToggleGroupItem = React35.forwardRef(({ className, children, variant, size, ...props }, ref) => {
4008
+ const context = React35.useContext(ToggleGroupContext);
4009
+ return /* @__PURE__ */ jsx(
4010
+ ToggleGroupPrimitive.Item,
4011
+ {
4012
+ ref,
4013
+ className: cn(
4014
+ toggleVariants({
4015
+ variant: context.variant || variant,
4016
+ size: context.size || size
4017
+ }),
4018
+ className
4019
+ ),
4020
+ ...props,
4021
+ children
4022
+ }
4023
+ );
4024
+ });
4025
+ ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;
4026
+
4027
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item4 as Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Label3 as Label, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverTrigger, Progress, RadioGroup4 as RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Spinner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip2 as Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, buttonGroupVariants, buttonVariants, cn, navigationMenuTriggerStyle, toggleVariants, useFormField, useIsMobile, useSidebar };
4028
+ //# sourceMappingURL=index.js.map
4029
+ //# sourceMappingURL=index.js.map