@uselets/ui 1.20.3 → 2.0.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 (295) hide show
  1. package/README.md +322 -425
  2. package/dist/as-child-Dxg3Xo1G.d.ts +41 -0
  3. package/dist/cli/uselets.mjs +5 -4
  4. package/dist/cli/uselets.mjs.map +1 -1
  5. package/dist/components/accordion.d.ts +12 -8
  6. package/dist/components/accordion.js +1 -1
  7. package/dist/components/accordion.js.map +1 -1
  8. package/dist/components/alert-dialog.d.ts +20 -15
  9. package/dist/components/alert-dialog.js +1 -1
  10. package/dist/components/alert-dialog.js.map +1 -1
  11. package/dist/components/alert.d.ts +1 -1
  12. package/dist/components/alert.js +1 -1
  13. package/dist/components/alert.js.map +1 -1
  14. package/dist/components/anchor.d.ts +3 -5
  15. package/dist/components/anchor.js +1 -1
  16. package/dist/components/anchor.js.map +1 -1
  17. package/dist/components/area-chart.d.ts +54 -0
  18. package/dist/components/area-chart.js +1 -1
  19. package/dist/components/area-chart.js.map +1 -1
  20. package/dist/components/avatar.d.ts +12 -7
  21. package/dist/components/avatar.js +1 -1
  22. package/dist/components/avatar.js.map +1 -1
  23. package/dist/components/badge.d.ts +3 -5
  24. package/dist/components/badge.js +1 -1
  25. package/dist/components/badge.js.map +1 -1
  26. package/dist/components/bar-chart.d.ts +48 -0
  27. package/dist/components/bar-chart.js +1 -1
  28. package/dist/components/bar-chart.js.map +1 -1
  29. package/dist/components/bottom-nav.d.ts +7 -3
  30. package/dist/components/bottom-nav.js +1 -1
  31. package/dist/components/bottom-nav.js.map +1 -1
  32. package/dist/components/breadcrumb.d.ts +3 -4
  33. package/dist/components/breadcrumb.js +1 -1
  34. package/dist/components/breadcrumb.js.map +1 -1
  35. package/dist/components/button-group.d.ts +3 -4
  36. package/dist/components/button-group.js +1 -1
  37. package/dist/components/button-group.js.map +1 -1
  38. package/dist/components/button.d.ts +8 -4
  39. package/dist/components/button.js +1 -1
  40. package/dist/components/button.js.map +1 -1
  41. package/dist/components/calendar.d.ts +4 -0
  42. package/dist/components/calendar.js +1 -1
  43. package/dist/components/calendar.js.map +1 -1
  44. package/dist/components/card.d.ts +4 -0
  45. package/dist/components/card.js +1 -1
  46. package/dist/components/card.js.map +1 -1
  47. package/dist/components/carousel.d.ts +11 -3
  48. package/dist/components/carousel.js +1 -1
  49. package/dist/components/carousel.js.map +1 -1
  50. package/dist/components/center.d.ts +1 -1
  51. package/dist/components/center.js +1 -1
  52. package/dist/components/center.js.map +1 -1
  53. package/dist/components/chart.js +4 -4
  54. package/dist/components/chart.js.map +1 -1
  55. package/dist/components/checkbox.d.ts +14 -4
  56. package/dist/components/checkbox.js +1 -1
  57. package/dist/components/checkbox.js.map +1 -1
  58. package/dist/components/code.js +1 -1
  59. package/dist/components/code.js.map +1 -1
  60. package/dist/components/collapsible.d.ts +8 -7
  61. package/dist/components/collapsible.js +1 -1
  62. package/dist/components/collapsible.js.map +1 -1
  63. package/dist/components/combobox.d.ts +48 -26
  64. package/dist/components/combobox.js +1 -1
  65. package/dist/components/combobox.js.map +1 -1
  66. package/dist/components/command.d.ts +16 -2
  67. package/dist/components/command.js +1 -1
  68. package/dist/components/command.js.map +1 -1
  69. package/dist/components/container.d.ts +1 -1
  70. package/dist/components/container.js +1 -1
  71. package/dist/components/container.js.map +1 -1
  72. package/dist/components/data-table.d.ts +177 -2
  73. package/dist/components/data-table.js +1 -1
  74. package/dist/components/data-table.js.map +1 -1
  75. package/dist/components/date-range-picker.d.ts +24 -2
  76. package/dist/components/date-range-picker.js +1 -1
  77. package/dist/components/date-range-picker.js.map +1 -1
  78. package/dist/components/dialog.d.ts +33 -15
  79. package/dist/components/dialog.js +1 -1
  80. package/dist/components/dialog.js.map +1 -1
  81. package/dist/components/direction.d.ts +7 -0
  82. package/dist/components/direction.js +1 -0
  83. package/dist/components/donut-chart.d.ts +12 -0
  84. package/dist/components/donut-chart.js +1 -1
  85. package/dist/components/donut-chart.js.map +1 -1
  86. package/dist/components/drawer.d.ts +33 -15
  87. package/dist/components/drawer.js +1 -1
  88. package/dist/components/drawer.js.map +1 -1
  89. package/dist/components/dropdown-menu.d.ts +36 -26
  90. package/dist/components/dropdown-menu.js +1 -1
  91. package/dist/components/dropdown-menu.js.map +1 -1
  92. package/dist/components/dropzone.d.ts +19 -0
  93. package/dist/components/dropzone.js +1 -1
  94. package/dist/components/dropzone.js.map +1 -1
  95. package/dist/components/empty.js +1 -1
  96. package/dist/components/empty.js.map +1 -1
  97. package/dist/components/field.d.ts +16 -4
  98. package/dist/components/field.js +1 -1
  99. package/dist/components/field.js.map +1 -1
  100. package/dist/components/flex.d.ts +1 -1
  101. package/dist/components/flex.js +1 -1
  102. package/dist/components/flex.js.map +1 -1
  103. package/dist/components/grid.d.ts +13 -0
  104. package/dist/components/grid.js +1 -1
  105. package/dist/components/grid.js.map +1 -1
  106. package/dist/components/group.d.ts +1 -1
  107. package/dist/components/group.js +1 -1
  108. package/dist/components/group.js.map +1 -1
  109. package/dist/components/heading.d.ts +3 -5
  110. package/dist/components/heading.js +1 -1
  111. package/dist/components/heading.js.map +1 -1
  112. package/dist/components/hover-card.d.ts +7 -6
  113. package/dist/components/hover-card.js +1 -1
  114. package/dist/components/hover-card.js.map +1 -1
  115. package/dist/components/input-group.d.ts +2 -2
  116. package/dist/components/input-group.js +1 -1
  117. package/dist/components/input-group.js.map +1 -1
  118. package/dist/components/input-otp.d.ts +4 -2
  119. package/dist/components/input-otp.js +1 -1
  120. package/dist/components/input-otp.js.map +1 -1
  121. package/dist/components/input.d.ts +1 -1
  122. package/dist/components/input.js +1 -1
  123. package/dist/components/input.js.map +1 -1
  124. package/dist/components/kbd.js +1 -1
  125. package/dist/components/kbd.js.map +1 -1
  126. package/dist/components/label.d.ts +3 -4
  127. package/dist/components/label.js +1 -1
  128. package/dist/components/label.js.map +1 -1
  129. package/dist/components/list.d.ts +8 -5
  130. package/dist/components/list.js +1 -1
  131. package/dist/components/list.js.map +1 -1
  132. package/dist/components/logo.d.ts +113 -0
  133. package/dist/components/logo.js +1 -1
  134. package/dist/components/marker.d.ts +4 -5
  135. package/dist/components/marker.js +1 -1
  136. package/dist/components/marker.js.map +1 -1
  137. package/dist/components/mask-input.d.ts +6 -0
  138. package/dist/components/mask-input.js +1 -1
  139. package/dist/components/mask-input.js.map +1 -1
  140. package/dist/components/native-select.d.ts +5 -1
  141. package/dist/components/native-select.js +1 -1
  142. package/dist/components/native-select.js.map +1 -1
  143. package/dist/components/navigation-menu.d.ts +19 -20
  144. package/dist/components/navigation-menu.js +1 -1
  145. package/dist/components/navigation-menu.js.map +1 -1
  146. package/dist/components/number-field.d.ts +18 -13
  147. package/dist/components/number-field.js +1 -1
  148. package/dist/components/number-field.js.map +1 -1
  149. package/dist/components/pagination.d.ts +9 -0
  150. package/dist/components/pagination.js +1 -1
  151. package/dist/components/pagination.js.map +1 -1
  152. package/dist/components/phone-input.d.ts +6 -0
  153. package/dist/components/phone-input.js +1 -1
  154. package/dist/components/phone-input.js.map +1 -1
  155. package/dist/components/pie-chart.d.ts +53 -0
  156. package/dist/components/pie-chart.js +1 -1
  157. package/dist/components/pie-chart.js.map +1 -1
  158. package/dist/components/popover.d.ts +13 -12
  159. package/dist/components/popover.js +1 -1
  160. package/dist/components/popover.js.map +1 -1
  161. package/dist/components/progress.d.ts +9 -3
  162. package/dist/components/progress.js +1 -1
  163. package/dist/components/progress.js.map +1 -1
  164. package/dist/components/radio-group.d.ts +20 -6
  165. package/dist/components/radio-group.js +1 -1
  166. package/dist/components/radio-group.js.map +1 -1
  167. package/dist/components/resizable.d.ts +1 -0
  168. package/dist/components/resizable.js +1 -1
  169. package/dist/components/resizable.js.map +1 -1
  170. package/dist/components/ring-progress.d.ts +9 -1
  171. package/dist/components/ring-progress.js +1 -1
  172. package/dist/components/ring-progress.js.map +1 -1
  173. package/dist/components/scroll-area.d.ts +3 -3
  174. package/dist/components/scroll-area.js +1 -1
  175. package/dist/components/scroll-area.js.map +1 -1
  176. package/dist/components/select.d.ts +25 -20
  177. package/dist/components/select.js +1 -1
  178. package/dist/components/select.js.map +1 -1
  179. package/dist/components/separator.d.ts +9 -4
  180. package/dist/components/separator.js +1 -1
  181. package/dist/components/separator.js.map +1 -1
  182. package/dist/components/sidebar.d.ts +63 -18
  183. package/dist/components/sidebar.js +1 -1
  184. package/dist/components/sidebar.js.map +1 -1
  185. package/dist/components/simple-grid.d.ts +7 -0
  186. package/dist/components/simple-grid.js +1 -1
  187. package/dist/components/simple-grid.js.map +1 -1
  188. package/dist/components/skeleton.d.ts +4 -0
  189. package/dist/components/skeleton.js +1 -1
  190. package/dist/components/skeleton.js.map +1 -1
  191. package/dist/components/slider.d.ts +2 -2
  192. package/dist/components/slider.js +1 -1
  193. package/dist/components/slider.js.map +1 -1
  194. package/dist/components/sonner.js +1 -1
  195. package/dist/components/sonner.js.map +1 -1
  196. package/dist/components/spinner.d.ts +1 -1
  197. package/dist/components/spinner.js +1 -1
  198. package/dist/components/spinner.js.map +1 -1
  199. package/dist/components/stack.d.ts +1 -1
  200. package/dist/components/stack.js +1 -1
  201. package/dist/components/stack.js.map +1 -1
  202. package/dist/components/stepper.d.ts +46 -25
  203. package/dist/components/stepper.js +1 -1
  204. package/dist/components/stepper.js.map +1 -1
  205. package/dist/components/switch.d.ts +17 -3
  206. package/dist/components/switch.js +1 -1
  207. package/dist/components/switch.js.map +1 -1
  208. package/dist/components/table.d.ts +10 -1
  209. package/dist/components/table.js +1 -1
  210. package/dist/components/table.js.map +1 -1
  211. package/dist/components/tabs.d.ts +14 -10
  212. package/dist/components/tabs.js +1 -1
  213. package/dist/components/tabs.js.map +1 -1
  214. package/dist/components/text.d.ts +3 -5
  215. package/dist/components/text.js +1 -1
  216. package/dist/components/text.js.map +1 -1
  217. package/dist/components/textarea.d.ts +1 -1
  218. package/dist/components/textarea.js +1 -1
  219. package/dist/components/textarea.js.map +1 -1
  220. package/dist/components/theme.d.ts +12 -0
  221. package/dist/components/theme.js +1 -1
  222. package/dist/components/theme.js.map +1 -1
  223. package/dist/components/timeline.d.ts +25 -1
  224. package/dist/components/timeline.js +1 -1
  225. package/dist/components/timeline.js.map +1 -1
  226. package/dist/components/toggle-group.d.ts +16 -6
  227. package/dist/components/toggle-group.js +1 -1
  228. package/dist/components/toggle-group.js.map +1 -1
  229. package/dist/components/toggle.d.ts +4 -4
  230. package/dist/components/toggle.js +1 -1
  231. package/dist/components/toggle.js.map +1 -1
  232. package/dist/components/tooltip.d.ts +15 -8
  233. package/dist/components/tooltip.js +1 -1
  234. package/dist/components/tooltip.js.map +1 -1
  235. package/dist/components/unstyled-button.d.ts +3 -5
  236. package/dist/components/unstyled-button.js +1 -1
  237. package/dist/components/unstyled-button.js.map +1 -1
  238. package/dist/components/visibility.d.ts +2 -0
  239. package/dist/components/visibility.js +1 -1
  240. package/dist/components/visibility.js.map +1 -1
  241. package/dist/hooks/use-breakpoint-value.d.ts +1 -0
  242. package/dist/hooks/use-breakpoint-value.js.map +1 -1
  243. package/dist/hooks/use-breakpoint.d.ts +1 -0
  244. package/dist/hooks/use-breakpoint.js.map +1 -1
  245. package/dist/hooks/use-disclosure.d.ts +3 -0
  246. package/dist/hooks/use-disclosure.js +1 -1
  247. package/dist/hooks/use-disclosure.js.map +1 -1
  248. package/dist/hooks/use-document-visibility.d.ts +1 -0
  249. package/dist/hooks/use-document-visibility.js.map +1 -1
  250. package/dist/hooks/use-hotkeys.d.ts +1 -1
  251. package/dist/hooks/use-hotkeys.js +1 -1
  252. package/dist/hooks/use-idle.d.ts +9 -0
  253. package/dist/hooks/use-idle.js.map +1 -1
  254. package/dist/hooks/use-interval.d.ts +1 -0
  255. package/dist/hooks/use-interval.js.map +1 -1
  256. package/dist/hooks/use-local-storage.d.ts +6 -0
  257. package/dist/hooks/use-local-storage.js +1 -1
  258. package/dist/hooks/use-local-storage.js.map +1 -1
  259. package/dist/hooks/use-mask.d.ts +1 -0
  260. package/dist/hooks/use-mask.js.map +1 -1
  261. package/dist/hooks/use-mobile.d.ts +1 -0
  262. package/dist/hooks/use-mobile.js.map +1 -1
  263. package/dist/index.d.ts +9 -7
  264. package/dist/index.js +1 -1
  265. package/dist/lib/as-child.d.ts +2 -0
  266. package/dist/lib/as-child.js +2 -0
  267. package/dist/lib/as-child.js.map +1 -0
  268. package/dist/lib/badge.js.map +1 -1
  269. package/dist/lib/button.js.map +1 -1
  270. package/dist/lib/color.js.map +1 -1
  271. package/dist/lib/compose-refs.js +1 -1
  272. package/dist/lib/compose-refs.js.map +1 -1
  273. package/dist/lib/progress.js.map +1 -1
  274. package/dist/lib/utils.d.ts +1 -1
  275. package/dist/lib/utils.js.map +1 -1
  276. package/dist/logo--R3_XDgA.js +2 -0
  277. package/dist/logo--R3_XDgA.js.map +1 -0
  278. package/dist/postcss.config.js.map +1 -1
  279. package/dist/resolve-class-name-BurP8ngI.js +2 -0
  280. package/dist/resolve-class-name-BurP8ngI.js.map +1 -0
  281. package/dist/skills/uselets-ui/SKILL.md +9 -3
  282. package/dist/skills/uselets-ui/references/component-catalog.md +31 -16
  283. package/dist/skills/uselets-ui/references/migration-v1-to-v2.md +599 -0
  284. package/dist/skills/uselets-ui/references/package-guide.md +23 -7
  285. package/dist/styles/base.css +21 -0
  286. package/dist/{use-hotkeys-DOjcX9Tt.d.ts → use-hotkeys-D1_TEIwN.d.ts} +2 -1
  287. package/dist/use-hotkeys-YDJmGWX6.js.map +1 -1
  288. package/package.json +18 -19
  289. package/skills/uselets-ui/SKILL.md +9 -3
  290. package/skills/uselets-ui/references/component-catalog.md +31 -16
  291. package/skills/uselets-ui/references/migration-v1-to-v2.md +599 -0
  292. package/skills/uselets-ui/references/package-guide.md +23 -7
  293. package/dist/data-table-DWWVGWbU.d.ts +0 -4184
  294. package/dist/logo-B0thHtTS.js +0 -2
  295. package/dist/logo-B0thHtTS.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"button-group.js","names":["Separator"],"sources":["../../src/components/button-group.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority'\nimport { Slot } from 'radix-ui'\n\nimport { cn } from '../lib/utils'\nimport { Separator } from './separator'\n\nconst buttonGroupVariants = cva(\n \"flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-lg [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1\",\n {\n variants: {\n orientation: {\n horizontal:\n '[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-lg!',\n vertical:\n 'flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-lg!'\n }\n },\n defaultVariants: {\n orientation: 'horizontal'\n }\n }\n)\n\nexport type ButtonGroupProps = React.ComponentProps<'div'> & VariantProps<typeof buttonGroupVariants>\n\nexport type ButtonGroupTextProps = React.ComponentProps<'div'> & {\n asChild?: boolean\n}\n\nexport type ButtonGroupSeparatorProps = React.ComponentProps<typeof Separator>\n\nfunction ButtonGroup({ className, orientation, ...props }: ButtonGroupProps) {\n return (\n <div\n data-slot=\"button-group\"\n data-orientation={orientation}\n className={cn(buttonGroupVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction ButtonGroupText({ className, asChild = false, ...props }: ButtonGroupTextProps) {\n const Comp = asChild ? Slot.Root : 'div'\n\n return (\n <Comp\n className={cn(\n \"flex items-center gap-2 rounded-lg border bg-muted px-2.5 text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ButtonGroupSeparator({ className, orientation = 'vertical', ...props }: ButtonGroupSeparatorProps) {\n return (\n <Separator\n data-slot=\"button-group-separator\"\n orientation={orientation}\n className={cn(\n 'relative self-stretch bg-input data-horizontal:mx-px data-horizontal:w-auto data-vertical:my-px data-vertical:h-auto',\n className\n )}\n {...props}\n />\n )\n}\n\nexport { ButtonGroup, ButtonGroupSeparator, ButtonGroupText, buttonGroupVariants }\n"],"mappings":"+OAMA,MAAM,EAAsB,EAC1B,2RACA,CACE,SAAU,CACR,YAAa,CACX,WACE,wKACF,SACE,gLACJ,CACF,EACA,gBAAiB,CACf,YAAa,YACf,CACF,CACF,EAUA,SAAS,YAAY,CAAE,YAAW,cAAa,GAAG,GAA2B,CAC3E,OACE,EAAC,MAAD,CACE,YAAU,eACV,mBAAkB,EAClB,UAAW,EAAG,EAAoB,CAAE,aAAY,CAAC,EAAG,CAAS,EAC7D,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,gBAAgB,CAAE,YAAW,UAAU,GAAO,GAAG,GAA+B,CACvF,IAAM,EAAO,EAAU,EAAK,KAAO,MAEnC,OACE,EAAC,EAAD,CACE,UAAW,EACT,iJACA,CACF,EACA,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,qBAAqB,CAAE,YAAW,cAAc,WAAY,GAAG,GAAoC,CAC1G,OACE,EAACA,EAAD,CACE,YAAU,yBACG,cACb,UAAW,EACT,uHACA,CACF,EACA,GAAI,CACL,CAAA,CAEL"}
1
+ {"version":3,"file":"button-group.js","names":["resolveClassName","buttonGroupVariants","cva","props","orientation","cn","className","useAsChild","Separator","state"],"sources":["../../src/components/button-group.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority'\n\nimport { type AsChildProps, useAsChild } from '../lib/as-child'\nimport { cn } from '../lib/utils'\nimport { resolveClassName } from '../utils/resolve-class-name'\nimport { Separator } from './separator'\n\nconst buttonGroupVariants = cva(\n \"flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-lg [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1\",\n {\n variants: {\n orientation: {\n horizontal:\n '[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-lg!',\n vertical:\n 'flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-lg!'\n }\n },\n defaultVariants: {\n orientation: 'horizontal'\n }\n }\n)\n\nexport type ButtonGroupProps = React.ComponentProps<'div'> & VariantProps<typeof buttonGroupVariants>\n\nexport type ButtonGroupTextProps = AsChildProps<'div'>\n\nexport type ButtonGroupSeparatorProps = React.ComponentProps<typeof Separator>\n\nfunction ButtonGroup({ className, orientation, ...props }: ButtonGroupProps) {\n return (\n <div\n data-slot=\"button-group\"\n data-orientation={orientation}\n className={cn(buttonGroupVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction ButtonGroupText({ className, ...props }: ButtonGroupTextProps) {\n return useAsChild('div', {\n className: cn(\n \"flex items-center gap-2 rounded-lg border bg-muted px-2.5 text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n ),\n ...props\n })\n}\n\nfunction ButtonGroupSeparator({ className, orientation = 'vertical', ...props }: ButtonGroupSeparatorProps) {\n return (\n <Separator\n data-slot=\"button-group-separator\"\n orientation={orientation}\n className={(state) =>\n cn(\n 'relative self-stretch bg-input data-horizontal:mx-px data-horizontal:w-auto data-vertical:my-px data-vertical:h-auto',\n resolveClassName(className, state)\n )\n }\n {...props}\n />\n )\n}\n\nexport { ButtonGroup, ButtonGroupSeparator, ButtonGroupText, buttonGroupVariants }\n"],"mappings":"qTAOA,MAAMC,EAAsBC,EAC1B,2RACA,CACE,SAAU,CACR,YAAa,CACX,WACE,wKACF,SACE,gLACJ,CACF,EACA,gBAAiB,CACf,YAAa,YACf,CACF,CACF,EAQA,SAAS,YAAY,CAAE,YAAW,cAAa,GAAGC,GAA2B,CAC3E,MACE,kBAAC,MAAD,CACE,YAAU,eACV,mBAAkBC,EAClB,UAAWC,EAAGJ,EAAoB,CAAE,aAAY,CAAC,EAAGK,CAAS,EAC7D,GAAIH,CACL,CAAA,CAEL,CAEA,SAAS,gBAAgB,CAAE,YAAW,GAAGA,GAA+B,CACtE,OAAOI,EAAW,MAAO,CACvB,UAAWF,EACT,iJACAC,CACF,EACA,GAAGH,CACL,CAAC,CACH,CAEA,SAAS,qBAAqB,CAAE,YAAW,cAAc,WAAY,GAAGA,GAAoC,CAC1G,MACE,kBAACK,EAAD,CACE,YAAU,yBACG,cACb,UAAY,GACVH,EACE,uHACAL,EAAiBM,EAAWG,CAAK,CACnC,EAEF,GAAIN,CACL,CAAA,CAEL"}
@@ -1,17 +1,21 @@
1
1
  import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
- import { VariantProps } from "class-variance-authority";
2
+ import { n as AsChildProps } from "../as-child-Dxg3Xo1G.js";
3
3
  import * as React from "react";
4
+ import { VariantProps } from "class-variance-authority";
4
5
  //#region src/components/button.d.ts
5
6
  declare const buttonVariants: (props?: ({
6
7
  variant?: "ghost" | "link" | "outline" | "secondary" | "solid" | "subtle" | null | undefined;
7
8
  color?: "blue" | "brand" | "gray" | "green" | "indigo" | "pink" | "primary" | "red" | "yellow" | "zinc" | null | undefined;
8
9
  size?: "icon" | "icon-lg" | "icon-sm" | "icon-xl" | "icon-xs" | "lg" | "md" | "sm" | "xl" | "xs" | null | undefined;
9
10
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
10
- export type ButtonProps = React.ComponentProps<'button'> & VariantProps<typeof buttonVariants> & {
11
- asChild?: boolean;
11
+ export type ButtonProps = AsChildProps<'button'> & VariantProps<typeof buttonVariants> & {
12
+ /**
13
+ * Shows a spinner, disables the button and sets `aria-busy`.
14
+ * @default false
15
+ */
12
16
  loading?: boolean;
13
17
  };
14
- declare function Button({ children, className, variant, color, size, asChild, disabled, loading, ...props }: ButtonProps): React.JSX.Element;
18
+ declare function Button({ children, className, variant, color, size, asChild, disabled, loading, onClick, ...props }: ButtonProps): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
15
19
  //#endregion
16
20
  export { Button, buttonVariants };
17
21
  //# sourceMappingURL=button.d.ts.map
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{buttonColorVariants as t}from"../lib/button.js";import{Spinner as n}from"./spinner.js";import{Slot as r}from"radix-ui";import{Fragment as i,jsx as a,jsxs as o}from"react/jsx-runtime";import{cva as s}from"class-variance-authority";const c=s(`focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 relative rounded-full border border-transparent bg-clip-padding text-sm font-semibold focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all [&_svg]:transition-colors disabled:pointer-events-none disabled:opacity-50 disabled:data-[loading=true]:pointer-events-auto disabled:data-[loading=true]:cursor-not-allowed disabled:data-[loading=true]:opacity-100 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none`,{variants:{variant:{solid:`bg-(--button-solid) text-(--button-solid-foreground) hover:bg-(--button-solid-hover) data-[loading=true]:hover:bg-(--button-solid)`,secondary:`border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50`,outline:`border-(--button-outline-border) bg-transparent text-(--button-outline-foreground) hover:bg-(--button-solid) hover:text-(--button-solid-foreground) hover:[&_svg]:text-(--button-solid-foreground) data-[loading=true]:hover:bg-background data-[loading=true]:hover:text-(--button-outline-foreground) aria-expanded:bg-(--button-solid) aria-expanded:text-(--button-solid-foreground) aria-expanded:[&_svg]:text-(--button-solid-foreground)`,subtle:`bg-(--button-soft) text-(--button-soft-foreground) hover:bg-(--button-soft-hover) hover:text-(--button-soft-foreground) data-[loading=true]:hover:bg-(--button-soft) data-[loading=true]:hover:text-(--button-soft-foreground) aria-expanded:bg-(--button-soft-hover) aria-expanded:text-(--button-soft-foreground)`,ghost:`text-(--button-ghost-foreground) hover:bg-(--button-ghost-hover) hover:text-(--button-ghost-foreground) data-[loading=true]:hover:bg-transparent data-[loading=true]:hover:text-(--button-ghost-foreground) aria-expanded:bg-(--button-ghost-hover) aria-expanded:text-(--button-ghost-foreground)`,link:`text-(--button-link-foreground) underline-offset-4 hover:underline data-[loading=true]:hover:no-underline`},color:t,size:{xs:`h-7 gap-1 px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3`,sm:`h-8 gap-1 px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5`,md:`h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2`,lg:`h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3`,xl:`h-11 gap-2 px-3 has-data-[icon=inline-end]:pr-4 has-data-[icon=inline-start]:pl-4`,icon:`size-9`,"icon-xs":`size-7 in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3`,"icon-sm":`size-8 in-data-[slot=button-group]:rounded-lg`,"icon-lg":`size-10`,"icon-xl":`size-11`}},defaultVariants:{variant:`solid`,color:`primary`,size:`md`}});function Button({children:t,className:s,variant:l=`solid`,color:u=`primary`,size:d=`md`,asChild:f=!1,disabled:p,loading:m=!1,...h}){let g=f?r.Root:`button`;return a(g,{type:f?void 0:`button`,"data-slot":`button`,"data-variant":l,"data-color":u,"data-size":d,"data-loading":m,"aria-busy":m?!0:void 0,disabled:p||m,className:e(c({variant:l,color:u,size:d,className:s})),...h,children:m&&!f?o(i,{children:[a(`span`,{className:`invisible inline-flex items-center gap-[inherit]`,children:t}),a(`span`,{className:`absolute inset-0 inline-flex items-center justify-center`,children:a(n,{})})]}):m?a(n,{}):t})}export{Button,c as buttonVariants};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{useAsChild as e}from"../lib/as-child.js";import{cn as t}from"../lib/utils.js";import{buttonColorVariants as n}from"../lib/button.js";import{Spinner as r}from"./spinner.js";import*as i from"react";import{Fragment as a,jsx as o,jsxs as s}from"react/jsx-runtime";import{cva as c}from"class-variance-authority";const l=c(`focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 relative rounded-full border border-transparent bg-clip-padding text-sm font-semibold focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all [&_svg]:transition-colors disabled:pointer-events-none disabled:opacity-50 disabled:data-[loading=true]:pointer-events-auto disabled:data-[loading=true]:cursor-not-allowed disabled:data-[loading=true]:opacity-100 aria-disabled:pointer-events-none aria-disabled:opacity-50 aria-disabled:data-[loading=true]:pointer-events-auto aria-disabled:data-[loading=true]:cursor-not-allowed aria-disabled:data-[loading=true]:opacity-100 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none`,{variants:{variant:{solid:`bg-(--button-solid) text-(--button-solid-foreground) hover:bg-(--button-solid-hover) data-[loading=true]:hover:bg-(--button-solid)`,secondary:`border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50`,outline:`border-(--button-outline-border) bg-transparent text-(--button-outline-foreground) hover:bg-(--button-solid) hover:text-(--button-solid-foreground) hover:[&_svg]:text-(--button-solid-foreground) data-[loading=true]:hover:bg-transparent data-[loading=true]:hover:text-(--button-outline-foreground) data-[loading=true]:hover:[&_svg]:text-(--button-outline-foreground) aria-expanded:bg-(--button-solid) aria-expanded:text-(--button-solid-foreground) aria-expanded:[&_svg]:text-(--button-solid-foreground)`,subtle:`bg-(--button-soft) text-(--button-soft-foreground) hover:bg-(--button-soft-hover) hover:text-(--button-soft-foreground) data-[loading=true]:hover:bg-(--button-soft) data-[loading=true]:hover:text-(--button-soft-foreground) aria-expanded:bg-(--button-soft-hover) aria-expanded:text-(--button-soft-foreground)`,ghost:`text-(--button-ghost-foreground) hover:bg-(--button-ghost-hover) hover:text-(--button-ghost-foreground) data-[loading=true]:hover:bg-transparent data-[loading=true]:hover:text-(--button-ghost-foreground) aria-expanded:bg-(--button-ghost-hover) aria-expanded:text-(--button-ghost-foreground)`,link:`text-(--button-link-foreground) underline-offset-4 hover:underline data-[loading=true]:hover:no-underline`},color:n,size:{xs:`h-7 gap-1 px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3`,sm:`h-8 gap-1 px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5`,md:`h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2`,lg:`h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3`,xl:`h-11 gap-2 px-3 has-data-[icon=inline-end]:pr-4 has-data-[icon=inline-start]:pl-4`,icon:`size-9`,"icon-xs":`size-7 in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3`,"icon-sm":`size-8 in-data-[slot=button-group]:rounded-lg`,"icon-lg":`size-10`,"icon-xl":`size-11`}},defaultVariants:{variant:`solid`,color:`primary`,size:`md`}});function renderLoadingContent(e){return/* @__PURE__ */ s(a,{children:[/* @__PURE__ */ o(`span`,{className:`invisible inline-flex items-center gap-[inherit]`,children:e}),/* @__PURE__ */ o(`span`,{className:`absolute inset-0 inline-flex items-center justify-center`,children:/* @__PURE__ */ o(r,{})})]})}function Button({children:n,className:r,variant:a=`solid`,color:o=`primary`,size:s=`md`,asChild:c=!1,disabled:u,loading:d=!1,onClick:f,...p}){let m=u||d,h=c&&m,g=n;if(d&&c){let e=i.Children.only(n);g=i.cloneElement(e,void 0,renderLoadingContent(e.props.children))}else d&&(g=renderLoadingContent(n));return e(`button`,{asChild:c,type:c?void 0:`button`,"data-slot":`button`,"data-variant":a,"data-color":o,"data-size":s,"data-loading":d,"aria-busy":d?!0:void 0,"aria-disabled":h?!0:void 0,disabled:c?void 0:m,onClick:h?e=>e.preventDefault():f,className:t(l({variant:a,color:o,size:s,className:r})),...p,children:g})}export{Button,l as buttonVariants};
2
2
  //# sourceMappingURL=button.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"button.js","names":[],"sources":["../../src/components/button.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { Slot } from 'radix-ui'\n\nimport { buttonColorVariants } from '../lib/button'\nimport { cn } from '../lib/utils'\nimport { Spinner } from './spinner'\n\nconst buttonVariants = cva(\n \"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 relative rounded-full border border-transparent bg-clip-padding text-sm font-semibold focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all [&_svg]:transition-colors disabled:pointer-events-none disabled:opacity-50 disabled:data-[loading=true]:pointer-events-auto disabled:data-[loading=true]:cursor-not-allowed disabled:data-[loading=true]:opacity-100 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none\",\n {\n variants: {\n variant: {\n solid:\n 'bg-(--button-solid) text-(--button-solid-foreground) hover:bg-(--button-solid-hover) data-[loading=true]:hover:bg-(--button-solid)',\n secondary:\n 'border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50',\n outline:\n 'border-(--button-outline-border) bg-transparent text-(--button-outline-foreground) hover:bg-(--button-solid) hover:text-(--button-solid-foreground) hover:[&_svg]:text-(--button-solid-foreground) data-[loading=true]:hover:bg-background data-[loading=true]:hover:text-(--button-outline-foreground) aria-expanded:bg-(--button-solid) aria-expanded:text-(--button-solid-foreground) aria-expanded:[&_svg]:text-(--button-solid-foreground)',\n subtle:\n 'bg-(--button-soft) text-(--button-soft-foreground) hover:bg-(--button-soft-hover) hover:text-(--button-soft-foreground) data-[loading=true]:hover:bg-(--button-soft) data-[loading=true]:hover:text-(--button-soft-foreground) aria-expanded:bg-(--button-soft-hover) aria-expanded:text-(--button-soft-foreground)',\n ghost:\n 'text-(--button-ghost-foreground) hover:bg-(--button-ghost-hover) hover:text-(--button-ghost-foreground) data-[loading=true]:hover:bg-transparent data-[loading=true]:hover:text-(--button-ghost-foreground) aria-expanded:bg-(--button-ghost-hover) aria-expanded:text-(--button-ghost-foreground)',\n link: 'text-(--button-link-foreground) underline-offset-4 hover:underline data-[loading=true]:hover:no-underline'\n },\n color: buttonColorVariants,\n size: {\n xs: \"h-7 gap-1 px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 gap-1 px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n md: 'h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',\n lg: 'h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3',\n xl: 'h-11 gap-2 px-3 has-data-[icon=inline-end]:pr-4 has-data-[icon=inline-start]:pl-4',\n icon: 'size-9',\n 'icon-xs': \"size-7 in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n 'icon-sm': 'size-8 in-data-[slot=button-group]:rounded-lg',\n 'icon-lg': 'size-10',\n 'icon-xl': 'size-11'\n }\n },\n defaultVariants: {\n variant: 'solid',\n color: 'primary',\n size: 'md'\n }\n }\n)\n\nexport type ButtonProps = React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n loading?: boolean\n }\n\nfunction Button({\n children,\n className,\n variant = 'solid',\n color = 'primary',\n size = 'md',\n asChild = false,\n disabled,\n loading = false,\n ...props\n}: ButtonProps) {\n const Comp = asChild ? Slot.Root : 'button'\n const isDisabled = disabled || loading\n\n return (\n <Comp\n type={!asChild ? 'button' : undefined}\n data-slot=\"button\"\n data-variant={variant}\n data-color={color}\n data-size={size}\n data-loading={loading}\n aria-busy={loading ? true : undefined}\n disabled={isDisabled}\n className={cn(buttonVariants({ variant, color, size, className }))}\n {...props}\n >\n {loading && !asChild ? (\n <>\n <span className=\"invisible inline-flex items-center gap-[inherit]\">{children}</span>\n <span className=\"absolute inset-0 inline-flex items-center justify-center\">\n <Spinner />\n </span>\n </>\n ) : loading ? (\n <Spinner />\n ) : (\n children\n )}\n </Comp>\n )\n}\n\nexport { Button, buttonVariants }\n"],"mappings":"0TASA,MAAM,EAAiB,EACrB,ouBACA,CACE,SAAU,CACR,QAAS,CACP,MACE,qIACF,UACE,kLACF,QACE,kbACF,OACE,sTACF,MACE,qSACF,KAAM,2GACR,EACA,MAAO,EACP,KAAM,CACJ,GAAI,2KACJ,GAAI,qLACJ,GAAI,8HACJ,GAAI,wFACJ,GAAI,oFACJ,KAAM,SACN,UAAW,qFACX,UAAW,gDACX,UAAW,UACX,UAAW,SACb,CACF,EACA,gBAAiB,CACf,QAAS,QACT,MAAO,UACP,KAAM,IACR,CACF,CACF,EAQA,SAAS,OAAO,CACd,WACA,YACA,UAAU,QACV,QAAQ,UACR,OAAO,KACP,UAAU,GACV,WACA,UAAU,GACV,GAAG,GACW,CACd,IAAM,EAAO,EAAU,EAAK,KAAO,SAGnC,OACE,EAAC,EAAD,CACE,KAAO,EAAqB,IAAA,GAAX,SACjB,YAAU,SACV,eAAc,EACd,aAAY,EACZ,YAAW,EACX,eAAc,EACd,YAAW,EAAU,GAAO,IAAA,GAC5B,SAXe,GAAY,EAY3B,UAAW,EAAG,EAAe,CAAE,UAAS,QAAO,OAAM,WAAU,CAAC,CAAC,EACjE,GAAI,EAEH,SAAA,GAAW,CAAC,EACX,EAAA,EAAA,CAAA,SAAA,CACE,EAAC,OAAD,CAAM,UAAU,mDAAoD,UAAe,CAAA,EACnF,EAAC,OAAD,CAAM,UAAU,2DACd,SAAA,EAAC,EAAD,CAAU,CAAA,CACN,CAAA,CACN,CAAA,CAAA,EACA,EACF,EAAC,EAAD,CAAU,CAAA,EAEV,CAEE,CAAA,CAEV"}
1
+ {"version":3,"file":"button.js","names":["React","buttonVariants","cva","buttonColorVariants","Fragment","Spinner","props","isDisabled","disabled","loading","isAriaDisabled","asChild","content","children","child","useAsChild","variant","color","size","event","onClick","cn"],"sources":["../../src/components/button.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { type AsChildProps, useAsChild } from '../lib/as-child'\nimport { buttonColorVariants } from '../lib/button'\nimport { cn } from '../lib/utils'\nimport { Spinner } from './spinner'\n\nconst buttonVariants = cva(\n \"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 relative rounded-full border border-transparent bg-clip-padding text-sm font-semibold focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all [&_svg]:transition-colors disabled:pointer-events-none disabled:opacity-50 disabled:data-[loading=true]:pointer-events-auto disabled:data-[loading=true]:cursor-not-allowed disabled:data-[loading=true]:opacity-100 aria-disabled:pointer-events-none aria-disabled:opacity-50 aria-disabled:data-[loading=true]:pointer-events-auto aria-disabled:data-[loading=true]:cursor-not-allowed aria-disabled:data-[loading=true]:opacity-100 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none\",\n {\n variants: {\n variant: {\n solid:\n 'bg-(--button-solid) text-(--button-solid-foreground) hover:bg-(--button-solid-hover) data-[loading=true]:hover:bg-(--button-solid)',\n secondary:\n 'border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50',\n outline:\n 'border-(--button-outline-border) bg-transparent text-(--button-outline-foreground) hover:bg-(--button-solid) hover:text-(--button-solid-foreground) hover:[&_svg]:text-(--button-solid-foreground) data-[loading=true]:hover:bg-transparent data-[loading=true]:hover:text-(--button-outline-foreground) data-[loading=true]:hover:[&_svg]:text-(--button-outline-foreground) aria-expanded:bg-(--button-solid) aria-expanded:text-(--button-solid-foreground) aria-expanded:[&_svg]:text-(--button-solid-foreground)',\n subtle:\n 'bg-(--button-soft) text-(--button-soft-foreground) hover:bg-(--button-soft-hover) hover:text-(--button-soft-foreground) data-[loading=true]:hover:bg-(--button-soft) data-[loading=true]:hover:text-(--button-soft-foreground) aria-expanded:bg-(--button-soft-hover) aria-expanded:text-(--button-soft-foreground)',\n ghost:\n 'text-(--button-ghost-foreground) hover:bg-(--button-ghost-hover) hover:text-(--button-ghost-foreground) data-[loading=true]:hover:bg-transparent data-[loading=true]:hover:text-(--button-ghost-foreground) aria-expanded:bg-(--button-ghost-hover) aria-expanded:text-(--button-ghost-foreground)',\n link: 'text-(--button-link-foreground) underline-offset-4 hover:underline data-[loading=true]:hover:no-underline'\n },\n color: buttonColorVariants,\n size: {\n xs: \"h-7 gap-1 px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 gap-1 px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n md: 'h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',\n lg: 'h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3',\n xl: 'h-11 gap-2 px-3 has-data-[icon=inline-end]:pr-4 has-data-[icon=inline-start]:pl-4',\n icon: 'size-9',\n 'icon-xs': \"size-7 in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n 'icon-sm': 'size-8 in-data-[slot=button-group]:rounded-lg',\n 'icon-lg': 'size-10',\n 'icon-xl': 'size-11'\n }\n },\n defaultVariants: {\n variant: 'solid',\n color: 'primary',\n size: 'md'\n }\n }\n)\n\nexport type ButtonProps = AsChildProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n /**\n * Shows a spinner, disables the button and sets `aria-busy`.\n * @default false\n */\n loading?: boolean\n }\n\nfunction renderLoadingContent(children: React.ReactNode) {\n return (\n <>\n <span className=\"invisible inline-flex items-center gap-[inherit]\">{children}</span>\n <span className=\"absolute inset-0 inline-flex items-center justify-center\">\n <Spinner />\n </span>\n </>\n )\n}\n\nfunction Button({\n children,\n className,\n variant = 'solid',\n color = 'primary',\n size = 'md',\n asChild = false,\n disabled,\n loading = false,\n onClick,\n ...props\n}: ButtonProps) {\n const isDisabled = disabled || loading\n // A non-button child (e.g. a link) can't be natively disabled, so it gets `aria-disabled` and a\n // click guard instead.\n const isAriaDisabled = asChild && isDisabled\n\n let content = children\n if (loading && asChild) {\n const child = React.Children.only(children) as React.ReactElement<{ children?: React.ReactNode }>\n content = React.cloneElement(child, undefined, renderLoadingContent(child.props.children))\n } else if (loading) {\n content = renderLoadingContent(children)\n }\n\n return useAsChild('button', {\n asChild,\n type: !asChild ? 'button' : undefined,\n 'data-slot': 'button',\n 'data-variant': variant,\n 'data-color': color,\n 'data-size': size,\n 'data-loading': loading,\n 'aria-busy': loading ? true : undefined,\n 'aria-disabled': isAriaDisabled ? true : undefined,\n disabled: asChild ? undefined : isDisabled,\n onClick: isAriaDisabled ? (event: React.MouseEvent) => event.preventDefault() : onClick,\n className: cn(buttonVariants({ variant, color, size, className })),\n ...props,\n children: content\n })\n}\n\nexport { Button, buttonVariants }\n"],"mappings":"kWASA,MAAMC,EAAiBC,EACrB,w7BACA,CACE,SAAU,CACR,QAAS,CACP,MACE,qIACF,UACE,kLACF,QACE,wfACF,OACE,sTACF,MACE,qSACF,KAAM,2GACR,EACA,MAAOC,EACP,KAAM,CACJ,GAAI,2KACJ,GAAI,qLACJ,GAAI,8HACJ,GAAI,wFACJ,GAAI,oFACJ,KAAM,SACN,UAAW,qFACX,UAAW,gDACX,UAAW,UACX,UAAW,SACb,CACF,EACA,gBAAiB,CACf,QAAS,QACT,MAAO,UACP,KAAM,IACR,CACF,CACF,EAWA,SAAS,qBAAqB,EAA2B,CACvD,MACE,kBAAAC,EAAA,CAAA,SAAA,CACE,kBAAC,OAAD,CAAM,UAAU,mDAAoD,UAAe,CAAA,EACnF,kBAAC,OAAD,CAAM,UAAU,2DACd,SAAA,kBAACC,EAAD,CAAU,CAAA,CACN,CAAA,CACN,CAAA,CAAA,CAEN,CAEA,SAAS,OAAO,CACd,WACA,YACA,UAAU,QACV,QAAQ,UACR,OAAO,KACP,UAAU,GACV,WACA,UAAU,GACV,UACA,GAAGC,GACW,CACd,IAAMC,EAAaC,GAAYC,EAGzBC,EAAiBC,GAAWJ,EAE9BK,EAAUC,EACd,GAAIJ,GAAWE,EAAS,CACtB,IAAMG,EAAQd,EAAM,SAAS,KAAKa,CAAQ,EAC1C,EAAUb,EAAM,aAAac,EAAO,IAAA,GAAW,qBAAqBA,EAAM,MAAM,QAAQ,CAAC,CAC3F,MAAWL,IACT,EAAU,qBAAqBI,CAAQ,GAGzC,OAAOE,EAAW,SAAU,CAC1B,UACA,KAAOJ,EAAqB,IAAA,GAAX,SACjB,YAAa,SACb,eAAgBK,EAChB,aAAcC,EACd,YAAaC,EACb,eAAgBT,EAChB,YAAaA,EAAU,GAAO,IAAA,GAC9B,gBAAiBC,EAAiB,GAAO,IAAA,GACzC,SAAUC,EAAU,IAAA,GAAYJ,EAChC,QAASG,EAAkB,GAA4BS,EAAM,eAAe,EAAIC,EAChF,UAAWC,EAAGpB,EAAe,CAAE,UAAS,QAAO,OAAM,WAAU,CAAC,CAAC,EACjE,GAAGK,EACH,SAAUM,CACZ,CAAC,CACH"}
@@ -5,6 +5,10 @@ import { DateRange, DayButton, DayPicker, Locale } from "react-day-picker";
5
5
  import * as locale from "react-day-picker/locale";
6
6
  //#region src/components/calendar.d.ts
7
7
  export type CalendarProps = React.ComponentProps<typeof DayPicker> & {
8
+ /**
9
+ * `Button` variant of the previous/next month buttons.
10
+ * @default 'ghost'
11
+ */
8
12
  buttonVariant?: React.ComponentProps<typeof Button>['variant'];
9
13
  };
10
14
  export type CalendarDayButtonProps = Omit<React.ComponentProps<typeof DayButton>, 'color'> & {
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{Button as t,buttonVariants as n}from"./button.js";import{IconChevronDown as r,IconChevronLeft as i,IconChevronRight as a}from"@tabler/icons-react";import{jsx as o}from"react/jsx-runtime";import*as s from"react";import{DayPicker as c,getDefaultClassNames as l}from"react-day-picker";import*as u from"react-day-picker/locale";function Calendar({className:t,classNames:s,showOutsideDays:u=!0,captionLayout:d=`label`,buttonVariant:f=`ghost`,locale:p,formatters:m,components:h,...g}){let _=l();return o(c,{showOutsideDays:u,className:e(`group/calendar bg-background p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent`,String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,t),captionLayout:d,locale:p,formatters:{formatMonthDropdown:e=>e.toLocaleString(p?.code,{month:`short`}),...m},classNames:{root:e(`w-fit`,_.root),months:e(`relative flex gap-4`,_.months),month:e(`flex w-full flex-col gap-4`,_.month),nav:e(`absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1`,_.nav),button_previous:e(n({variant:f}),`size-(--cell-size) p-0 select-none aria-disabled:opacity-50`,_.button_previous),button_next:e(n({variant:f}),`size-(--cell-size) p-0 select-none aria-disabled:opacity-50`,_.button_next),month_caption:e(`flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)`,_.month_caption),dropdowns:e(`flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium`,_.dropdowns),dropdown_root:e(`relative rounded-(--cell-radius)`,_.dropdown_root),dropdown:e(`absolute inset-0 bg-popover opacity-0`,_.dropdown),caption_label:e(`font-medium select-none`,d===`label`?`text-sm`:`flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground`,_.caption_label),month_grid:`w-full border-collapse`,weekdays:e(`flex`,_.weekdays),weekday:e(`flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none`,_.weekday),week:e(`mt-2 flex w-full`,_.week),week_number_header:e(`w-(--cell-size) text-xs font-normal text-muted-foreground select-none`,_.week_number_header),week_number:e(`text-xs font-normal tabular-nums text-muted-foreground select-none`,_.week_number),day:e(`group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)`,g.showWeekNumber?`[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)`:`[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)`,_.day),range_start:e(`relative isolate z-0 rounded-l-(--cell-radius) bg-primary-50 after:absolute after:inset-y-0 after:right-0 after:w-4 after:bg-primary-50 dark:bg-primary-950 dark:after:bg-primary-950`,_.range_start),range_middle:e(`rounded-none`,_.range_middle),range_end:e(`relative isolate z-0 rounded-r-(--cell-radius) bg-primary-50 after:absolute after:inset-y-0 after:left-0 after:w-4 after:bg-primary-50 dark:bg-primary-950 dark:after:bg-primary-950`,_.range_end),today:e(`rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none`,_.today),outside:e(`text-muted-foreground aria-selected:text-muted-foreground`,_.outside),disabled:e(`text-muted-foreground opacity-50`,_.disabled),hidden:e(`invisible`,_.hidden),...s},components:{Root:({className:t,rootRef:n,...r})=>o(`div`,{"data-slot":`calendar`,ref:n,className:e(t),...r}),Chevron:({className:t,orientation:n,...s})=>o(n===`left`?i:n===`right`?a:r,{className:e(`size-4`,t),...s}),DayButton:({...e})=>o(CalendarDayButton,{locale:p,...e}),WeekNumber:({children:e,...t})=>o(`td`,{...t,children:o(`div`,{className:`flex size-(--cell-size) items-center justify-center text-center text-xs font-normal tabular-nums`,children:e})}),...h},...g})}function CalendarDayButton({className:n,day:r,modifiers:i,locale:a,...c}){let u=l(),d=r.date.getDay()===0||r.date.getDay()===6,f=s.useRef(null);return s.useEffect(()=>{i.focused&&f.current?.focus()},[i.focused]),o(t,{ref:f,variant:`ghost`,size:`icon`,color:`zinc`,"data-day":r.date.toLocaleDateString(a?.code),"data-weekend":d,"data-selected-single":i.selected&&!i.range_start&&!i.range_end&&!i.range_middle,"data-range-start":i.range_start,"data-range-end":i.range_end,"data-range-middle":i.range_middle,className:e(`relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 text-foreground leading-none font-normal`,`hover:bg-primary-50 hover:text-foreground dark:hover:bg-primary-950 dark:hover:text-foreground`,`group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50`,`data-[weekend=true]:text-destructive data-[weekend=true]:hover:bg-red-50 data-[weekend=true]:hover:text-destructive dark:data-[weekend=true]:hover:bg-red-950`,`data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-primary-50 data-[range-middle=true]:text-foreground data-[range-middle=true]:hover:bg-primary-50 data-[range-middle=true]:hover:text-foreground dark:data-[range-middle=true]:bg-primary-950 dark:data-[range-middle=true]:hover:bg-primary-950`,`data-[range-middle=true]:data-[weekend=true]:text-destructive data-[range-middle=true]:data-[weekend=true]:hover:bg-red-50 data-[range-middle=true]:data-[weekend=true]:hover:text-destructive dark:data-[range-middle=true]:data-[weekend=true]:hover:bg-red-950`,`data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-end=true]:bg-primary-500 data-[range-end=true]:text-white data-[range-end=true]:hover:bg-primary-500 data-[range-end=true]:hover:text-white dark:data-[range-end=true]:hover:bg-primary-500`,`data-[range-end=true]:data-[weekend=true]:text-white data-[range-end=true]:data-[weekend=true]:hover:text-white`,`data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) data-[range-start=true]:bg-primary-500 data-[range-start=true]:text-white data-[range-start=true]:hover:bg-primary-500 data-[range-start=true]:hover:text-white dark:data-[range-start=true]:hover:bg-primary-500`,`data-[range-start=true]:data-[weekend=true]:text-white data-[range-start=true]:data-[weekend=true]:hover:text-white`,`data-[selected-single=true]:bg-primary-500 data-[selected-single=true]:text-white data-[selected-single=true]:hover:bg-primary-500 data-[selected-single=true]:hover:text-white dark:data-[selected-single=true]:hover:bg-primary-500`,`data-[selected-single=true]:data-[weekend=true]:text-white data-[selected-single=true]:data-[weekend=true]:hover:text-white`,`[&>span]:text-xs [&>span]:opacity-70`,u.day,n),...c})}export{Calendar,CalendarDayButton,u as locale};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{Button as t,buttonVariants as n}from"./button.js";import{IconChevronDown as r,IconChevronLeft as i,IconChevronRight as a}from"@tabler/icons-react";import*as o from"react";import{jsx as s}from"react/jsx-runtime";import{DayPicker as c,getDefaultClassNames as l}from"react-day-picker";import*as u from"react-day-picker/locale";function Calendar({className:t,classNames:o,showOutsideDays:u=!0,captionLayout:d=`label`,buttonVariant:f=`ghost`,locale:p,formatters:m,components:h,...g}){let _=l();return/* @__PURE__ */ s(c,{showOutsideDays:u,className:e(`group/calendar bg-background p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent`,String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,t),captionLayout:d,locale:p,formatters:{formatMonthDropdown:e=>e.toLocaleString(p?.code,{month:`short`}),...m},classNames:{root:e(`w-fit`,_.root),months:e(`relative flex gap-4`,_.months),month:e(`flex w-full flex-col gap-4`,_.month),nav:e(`absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1`,_.nav),button_previous:e(n({variant:f}),`size-(--cell-size) p-0 select-none aria-disabled:opacity-50`,_.button_previous),button_next:e(n({variant:f}),`size-(--cell-size) p-0 select-none aria-disabled:opacity-50`,_.button_next),month_caption:e(`flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)`,_.month_caption),dropdowns:e(`flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium`,_.dropdowns),dropdown_root:e(`relative rounded-(--cell-radius)`,_.dropdown_root),dropdown:e(`absolute inset-0 bg-popover opacity-0`,_.dropdown),caption_label:e(`font-medium select-none`,d===`label`?`text-sm`:`flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground`,_.caption_label),month_grid:`w-full border-collapse`,weekdays:e(`flex`,_.weekdays),weekday:e(`flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none`,_.weekday),week:e(`mt-2 flex w-full`,_.week),week_number_header:e(`w-(--cell-size) text-xs font-normal text-muted-foreground select-none`,_.week_number_header),week_number:e(`text-xs font-normal tabular-nums text-muted-foreground select-none`,_.week_number),day:e(`group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)`,g.showWeekNumber?`[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)`:`[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)`,_.day),range_start:e(`relative isolate z-0 rounded-l-(--cell-radius) bg-primary-50 after:absolute after:inset-y-0 after:right-0 after:w-4 after:bg-primary-50 dark:bg-primary-950 dark:after:bg-primary-950`,_.range_start),range_middle:e(`rounded-none`,_.range_middle),range_end:e(`relative isolate z-0 rounded-r-(--cell-radius) bg-primary-50 after:absolute after:inset-y-0 after:left-0 after:w-4 after:bg-primary-50 dark:bg-primary-950 dark:after:bg-primary-950`,_.range_end),today:e(`rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none`,_.today),outside:e(`text-muted-foreground aria-selected:text-muted-foreground`,_.outside),disabled:e(`text-muted-foreground opacity-50`,_.disabled),hidden:e(`invisible`,_.hidden),...o},components:{Root:({className:t,rootRef:n,...r})=>/* @__PURE__ */ s(`div`,{"data-slot":`calendar`,ref:n,className:e(t),...r}),Chevron:({className:t,orientation:n,...o})=>s(n===`left`?i:n===`right`?a:r,{className:e(`size-4`,t),...o}),DayButton:({...e})=>/* @__PURE__ */ s(CalendarDayButton,{locale:p,...e}),WeekNumber:({children:e,...t})=>/* @__PURE__ */ s(`td`,{...t,children:/* @__PURE__ */ s(`div`,{className:`flex size-(--cell-size) items-center justify-center text-center text-xs font-normal tabular-nums`,children:e})}),...h},...g})}function CalendarDayButton({className:n,day:r,modifiers:i,locale:a,...c}){let u=l(),d=r.date.getDay()===0||r.date.getDay()===6,f=o.useRef(null);return o.useEffect(()=>{i.focused&&f.current?.focus()},[i.focused]),/* @__PURE__ */ s(t,{ref:f,variant:`ghost`,size:`icon`,color:`zinc`,"data-day":r.date.toLocaleDateString(a?.code),"data-weekend":d,"data-selected-single":i.selected&&!i.range_start&&!i.range_end&&!i.range_middle,"data-range-start":i.range_start,"data-range-end":i.range_end,"data-range-middle":i.range_middle,className:e(`relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 text-foreground leading-none font-normal`,`hover:bg-primary-50 hover:text-foreground dark:hover:bg-primary-950 dark:hover:text-foreground`,`group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50`,`data-[weekend=true]:text-destructive data-[weekend=true]:hover:bg-red-50 data-[weekend=true]:hover:text-destructive dark:data-[weekend=true]:hover:bg-red-950`,`data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-primary-50 data-[range-middle=true]:text-foreground data-[range-middle=true]:hover:bg-primary-50 data-[range-middle=true]:hover:text-foreground dark:data-[range-middle=true]:bg-primary-950 dark:data-[range-middle=true]:hover:bg-primary-950`,`data-[range-middle=true]:data-[weekend=true]:text-destructive data-[range-middle=true]:data-[weekend=true]:hover:bg-red-50 data-[range-middle=true]:data-[weekend=true]:hover:text-destructive dark:data-[range-middle=true]:data-[weekend=true]:hover:bg-red-950`,`data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-end=true]:bg-primary-500 data-[range-end=true]:text-white data-[range-end=true]:hover:bg-primary-500 data-[range-end=true]:hover:text-white dark:data-[range-end=true]:hover:bg-primary-500`,`data-[range-end=true]:data-[weekend=true]:text-white data-[range-end=true]:data-[weekend=true]:hover:text-white`,`data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) data-[range-start=true]:bg-primary-500 data-[range-start=true]:text-white data-[range-start=true]:hover:bg-primary-500 data-[range-start=true]:hover:text-white dark:data-[range-start=true]:hover:bg-primary-500`,`data-[range-start=true]:data-[weekend=true]:text-white data-[range-start=true]:data-[weekend=true]:hover:text-white`,`data-[selected-single=true]:bg-primary-500 data-[selected-single=true]:text-white data-[selected-single=true]:hover:bg-primary-500 data-[selected-single=true]:hover:text-white dark:data-[selected-single=true]:hover:bg-primary-500`,`data-[selected-single=true]:data-[weekend=true]:text-white data-[selected-single=true]:data-[weekend=true]:hover:text-white`,`[&>span]:text-xs [&>span]:opacity-70`,u.day,n),...c})}export{Calendar,CalendarDayButton,u as locale};
2
2
  //# sourceMappingURL=calendar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.js","names":[],"sources":["../../src/components/calendar.tsx"],"sourcesContent":["import * as React from 'react'\nimport { type DateRange, type DayButton, DayPicker, getDefaultClassNames, type Locale } from 'react-day-picker'\nimport * as locale from 'react-day-picker/locale'\n\nimport { IconChevronDown, IconChevronLeft, IconChevronRight } from '@tabler/icons-react'\n\nimport { cn } from '../lib/utils'\nimport { Button, buttonVariants } from './button'\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>['variant']\n}\n\nexport type CalendarDayButtonProps = Omit<React.ComponentProps<typeof DayButton>, 'color'> & {\n locale?: Partial<Locale>\n}\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = 'label',\n buttonVariant = 'ghost',\n locale,\n formatters,\n components,\n ...props\n}: CalendarProps) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n 'group/calendar bg-background p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent',\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n locale={locale}\n formatters={{\n formatMonthDropdown: (date) => date.toLocaleString(locale?.code, { month: 'short' }),\n ...formatters\n }}\n classNames={{\n root: cn('w-fit', defaultClassNames.root),\n months: cn('relative flex gap-4', defaultClassNames.months),\n month: cn('flex w-full flex-col gap-4', defaultClassNames.month),\n nav: cn('absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1', defaultClassNames.nav),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n 'size-(--cell-size) p-0 select-none aria-disabled:opacity-50',\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n 'size-(--cell-size) p-0 select-none aria-disabled:opacity-50',\n defaultClassNames.button_next\n ),\n month_caption: cn(\n 'flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)',\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n 'flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium',\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn('relative rounded-(--cell-radius)', defaultClassNames.dropdown_root),\n dropdown: cn('absolute inset-0 bg-popover opacity-0', defaultClassNames.dropdown),\n caption_label: cn(\n 'font-medium select-none',\n captionLayout === 'label'\n ? 'text-sm'\n : 'flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground',\n defaultClassNames.caption_label\n ),\n month_grid: 'w-full border-collapse',\n weekdays: cn('flex', defaultClassNames.weekdays),\n weekday: cn(\n 'flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none',\n defaultClassNames.weekday\n ),\n week: cn('mt-2 flex w-full', defaultClassNames.week),\n week_number_header: cn(\n 'w-(--cell-size) text-xs font-normal text-muted-foreground select-none',\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n 'text-xs font-normal tabular-nums text-muted-foreground select-none',\n defaultClassNames.week_number\n ),\n day: cn(\n 'group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)',\n props.showWeekNumber\n ? '[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)'\n : '[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)',\n defaultClassNames.day\n ),\n range_start: cn(\n 'relative isolate z-0 rounded-l-(--cell-radius) bg-primary-50 after:absolute after:inset-y-0 after:right-0 after:w-4 after:bg-primary-50 dark:bg-primary-950 dark:after:bg-primary-950',\n defaultClassNames.range_start\n ),\n range_middle: cn('rounded-none', defaultClassNames.range_middle),\n range_end: cn(\n 'relative isolate z-0 rounded-r-(--cell-radius) bg-primary-50 after:absolute after:inset-y-0 after:left-0 after:w-4 after:bg-primary-50 dark:bg-primary-950 dark:after:bg-primary-950',\n defaultClassNames.range_end\n ),\n today: cn(\n 'rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none',\n defaultClassNames.today\n ),\n outside: cn('text-muted-foreground aria-selected:text-muted-foreground', defaultClassNames.outside),\n disabled: cn('text-muted-foreground opacity-50', defaultClassNames.disabled),\n hidden: cn('invisible', defaultClassNames.hidden),\n ...classNames\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div data-slot=\"calendar\" ref={rootRef as React.Ref<HTMLDivElement>} className={cn(className)} {...props} />\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === 'left') {\n return <IconChevronLeft className={cn('size-4', className)} {...props} />\n }\n\n if (orientation === 'right') {\n return <IconChevronRight className={cn('size-4', className)} {...props} />\n }\n\n return <IconChevronDown className={cn('size-4', className)} {...props} />\n },\n DayButton: ({ ...props }) => <CalendarDayButton locale={locale} {...props} />,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center text-xs font-normal tabular-nums\">\n {children}\n </div>\n </td>\n )\n },\n ...components\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({ className, day, modifiers, locale, ...props }: CalendarDayButtonProps) {\n const defaultClassNames = getDefaultClassNames()\n const isWeekend = day.date.getDay() === 0 || day.date.getDay() === 6\n\n const ref = React.useRef<HTMLButtonElement>(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n color=\"zinc\"\n data-day={day.date.toLocaleDateString(locale?.code)}\n data-weekend={isWeekend}\n data-selected-single={\n modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n 'relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 text-foreground leading-none font-normal',\n 'hover:bg-primary-50 hover:text-foreground dark:hover:bg-primary-950 dark:hover:text-foreground',\n 'group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50',\n 'data-[weekend=true]:text-destructive data-[weekend=true]:hover:bg-red-50 data-[weekend=true]:hover:text-destructive dark:data-[weekend=true]:hover:bg-red-950',\n 'data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-primary-50 data-[range-middle=true]:text-foreground data-[range-middle=true]:hover:bg-primary-50 data-[range-middle=true]:hover:text-foreground dark:data-[range-middle=true]:bg-primary-950 dark:data-[range-middle=true]:hover:bg-primary-950',\n 'data-[range-middle=true]:data-[weekend=true]:text-destructive data-[range-middle=true]:data-[weekend=true]:hover:bg-red-50 data-[range-middle=true]:data-[weekend=true]:hover:text-destructive dark:data-[range-middle=true]:data-[weekend=true]:hover:bg-red-950',\n 'data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-end=true]:bg-primary-500 data-[range-end=true]:text-white data-[range-end=true]:hover:bg-primary-500 data-[range-end=true]:hover:text-white dark:data-[range-end=true]:hover:bg-primary-500',\n 'data-[range-end=true]:data-[weekend=true]:text-white data-[range-end=true]:data-[weekend=true]:hover:text-white',\n 'data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) data-[range-start=true]:bg-primary-500 data-[range-start=true]:text-white data-[range-start=true]:hover:bg-primary-500 data-[range-start=true]:hover:text-white dark:data-[range-start=true]:hover:bg-primary-500',\n 'data-[range-start=true]:data-[weekend=true]:text-white data-[range-start=true]:data-[weekend=true]:hover:text-white',\n 'data-[selected-single=true]:bg-primary-500 data-[selected-single=true]:text-white data-[selected-single=true]:hover:bg-primary-500 data-[selected-single=true]:hover:text-white dark:data-[selected-single=true]:hover:bg-primary-500',\n 'data-[selected-single=true]:data-[weekend=true]:text-white data-[selected-single=true]:data-[weekend=true]:hover:text-white',\n '[&>span]:text-xs [&>span]:opacity-70',\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton, type DateRange, locale }\n"],"mappings":"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"}
1
+ {"version":3,"file":"calendar.js","names":["React","locale","props","defaultClassNames","getDefaultClassNames","DayPicker","cn","className","date","formatters","buttonVariants","buttonVariant","captionLayout","classNames","rootRef","jsx","orientation","IconChevronLeft","IconChevronRight","IconChevronDown","components","isWeekend","day","ref","modifiers","Button"],"sources":["../../src/components/calendar.tsx"],"sourcesContent":["import * as React from 'react'\nimport { type DateRange, type DayButton, DayPicker, getDefaultClassNames, type Locale } from 'react-day-picker'\nimport * as locale from 'react-day-picker/locale'\n\nimport { IconChevronDown, IconChevronLeft, IconChevronRight } from '@tabler/icons-react'\n\nimport { cn } from '../lib/utils'\nimport { Button, buttonVariants } from './button'\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker> & {\n /**\n * `Button` variant of the previous/next month buttons.\n * @default 'ghost'\n */\n buttonVariant?: React.ComponentProps<typeof Button>['variant']\n}\n\nexport type CalendarDayButtonProps = Omit<React.ComponentProps<typeof DayButton>, 'color'> & {\n locale?: Partial<Locale>\n}\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = 'label',\n buttonVariant = 'ghost',\n locale,\n formatters,\n components,\n ...props\n}: CalendarProps) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n 'group/calendar bg-background p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent',\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n locale={locale}\n formatters={{\n formatMonthDropdown: (date) => date.toLocaleString(locale?.code, { month: 'short' }),\n ...formatters\n }}\n classNames={{\n root: cn('w-fit', defaultClassNames.root),\n months: cn('relative flex gap-4', defaultClassNames.months),\n month: cn('flex w-full flex-col gap-4', defaultClassNames.month),\n nav: cn('absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1', defaultClassNames.nav),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n 'size-(--cell-size) p-0 select-none aria-disabled:opacity-50',\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n 'size-(--cell-size) p-0 select-none aria-disabled:opacity-50',\n defaultClassNames.button_next\n ),\n month_caption: cn(\n 'flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)',\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n 'flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium',\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn('relative rounded-(--cell-radius)', defaultClassNames.dropdown_root),\n dropdown: cn('absolute inset-0 bg-popover opacity-0', defaultClassNames.dropdown),\n caption_label: cn(\n 'font-medium select-none',\n captionLayout === 'label'\n ? 'text-sm'\n : 'flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground',\n defaultClassNames.caption_label\n ),\n month_grid: 'w-full border-collapse',\n weekdays: cn('flex', defaultClassNames.weekdays),\n weekday: cn(\n 'flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none',\n defaultClassNames.weekday\n ),\n week: cn('mt-2 flex w-full', defaultClassNames.week),\n week_number_header: cn(\n 'w-(--cell-size) text-xs font-normal text-muted-foreground select-none',\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n 'text-xs font-normal tabular-nums text-muted-foreground select-none',\n defaultClassNames.week_number\n ),\n day: cn(\n 'group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)',\n props.showWeekNumber\n ? '[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)'\n : '[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)',\n defaultClassNames.day\n ),\n range_start: cn(\n 'relative isolate z-0 rounded-l-(--cell-radius) bg-primary-50 after:absolute after:inset-y-0 after:right-0 after:w-4 after:bg-primary-50 dark:bg-primary-950 dark:after:bg-primary-950',\n defaultClassNames.range_start\n ),\n range_middle: cn('rounded-none', defaultClassNames.range_middle),\n range_end: cn(\n 'relative isolate z-0 rounded-r-(--cell-radius) bg-primary-50 after:absolute after:inset-y-0 after:left-0 after:w-4 after:bg-primary-50 dark:bg-primary-950 dark:after:bg-primary-950',\n defaultClassNames.range_end\n ),\n today: cn(\n 'rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none',\n defaultClassNames.today\n ),\n outside: cn('text-muted-foreground aria-selected:text-muted-foreground', defaultClassNames.outside),\n disabled: cn('text-muted-foreground opacity-50', defaultClassNames.disabled),\n hidden: cn('invisible', defaultClassNames.hidden),\n ...classNames\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div data-slot=\"calendar\" ref={rootRef as React.Ref<HTMLDivElement>} className={cn(className)} {...props} />\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === 'left') {\n return <IconChevronLeft className={cn('size-4', className)} {...props} />\n }\n\n if (orientation === 'right') {\n return <IconChevronRight className={cn('size-4', className)} {...props} />\n }\n\n return <IconChevronDown className={cn('size-4', className)} {...props} />\n },\n DayButton: ({ ...props }) => <CalendarDayButton locale={locale} {...props} />,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center text-xs font-normal tabular-nums\">\n {children}\n </div>\n </td>\n )\n },\n ...components\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({ className, day, modifiers, locale, ...props }: CalendarDayButtonProps) {\n const defaultClassNames = getDefaultClassNames()\n const isWeekend = day.date.getDay() === 0 || day.date.getDay() === 6\n\n const ref = React.useRef<HTMLButtonElement>(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n color=\"zinc\"\n data-day={day.date.toLocaleDateString(locale?.code)}\n data-weekend={isWeekend}\n data-selected-single={\n modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n 'relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 text-foreground leading-none font-normal',\n 'hover:bg-primary-50 hover:text-foreground dark:hover:bg-primary-950 dark:hover:text-foreground',\n 'group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50',\n 'data-[weekend=true]:text-destructive data-[weekend=true]:hover:bg-red-50 data-[weekend=true]:hover:text-destructive dark:data-[weekend=true]:hover:bg-red-950',\n 'data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-primary-50 data-[range-middle=true]:text-foreground data-[range-middle=true]:hover:bg-primary-50 data-[range-middle=true]:hover:text-foreground dark:data-[range-middle=true]:bg-primary-950 dark:data-[range-middle=true]:hover:bg-primary-950',\n 'data-[range-middle=true]:data-[weekend=true]:text-destructive data-[range-middle=true]:data-[weekend=true]:hover:bg-red-50 data-[range-middle=true]:data-[weekend=true]:hover:text-destructive dark:data-[range-middle=true]:data-[weekend=true]:hover:bg-red-950',\n 'data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-end=true]:bg-primary-500 data-[range-end=true]:text-white data-[range-end=true]:hover:bg-primary-500 data-[range-end=true]:hover:text-white dark:data-[range-end=true]:hover:bg-primary-500',\n 'data-[range-end=true]:data-[weekend=true]:text-white data-[range-end=true]:data-[weekend=true]:hover:text-white',\n 'data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) data-[range-start=true]:bg-primary-500 data-[range-start=true]:text-white data-[range-start=true]:hover:bg-primary-500 data-[range-start=true]:hover:text-white dark:data-[range-start=true]:hover:bg-primary-500',\n 'data-[range-start=true]:data-[weekend=true]:text-white data-[range-start=true]:data-[weekend=true]:hover:text-white',\n 'data-[selected-single=true]:bg-primary-500 data-[selected-single=true]:text-white data-[selected-single=true]:hover:bg-primary-500 data-[selected-single=true]:hover:text-white dark:data-[selected-single=true]:hover:bg-primary-500',\n 'data-[selected-single=true]:data-[weekend=true]:text-white data-[selected-single=true]:data-[weekend=true]:hover:text-white',\n '[&>span]:text-xs [&>span]:opacity-70',\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton, type DateRange, locale }\n"],"mappings":"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"}
@@ -2,6 +2,10 @@ import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
2
  import * as React from "react";
3
3
  //#region src/components/card.d.ts
4
4
  export type CardProps = React.ComponentProps<'div'> & {
5
+ /**
6
+ * Padding and gap between parts.
7
+ * @default 'md'
8
+ */
5
9
  size?: 'sm' | 'md' | 'lg';
6
10
  };
7
11
  export type CardHeaderProps = React.ComponentProps<'div'>;
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{jsx as t}from"react/jsx-runtime";function Card({className:n,size:r=`md`,...i}){return t(`div`,{"data-slot":`card`,"data-size":r,className:e(`group/card flex flex-col gap-4 overflow-hidden rounded-xl py-4 text-sm bg-card text-card-foreground ring-foreground/10 ring-1`,`has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0`,`data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0`,`data-[size=lg]:gap-6 data-[size=lg]:py-6 data-[size=lg]:has-data-[slot=card-footer]:pb-0`,`*:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl`,n),...i})}function CardHeader({className:n,...r}){return t(`div`,{"data-slot":`card-header`,className:e(`group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4`,`group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3`,`group-data-[size=lg]/card:px-6`,`has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]`,n),...r})}function CardTitle({className:n,...r}){return t(`div`,{"data-slot":`card-title`,className:e(`text-lg leading-snug font-bold group-data-[size=sm]/card:text-sm group-data-[size=lg]/card:text-xl`,n),...r})}function CardDescription({className:n,...r}){return t(`div`,{"data-slot":`card-description`,className:e(`text-muted-foreground text-sm`,n),...r})}function CardAction({className:n,...r}){return t(`div`,{"data-slot":`card-action`,className:e(`col-start-2 row-span-2 row-start-1 self-start justify-self-end`,n),...r})}function CardContent({className:n,...r}){return t(`div`,{"data-slot":`card-content`,className:e(`px-4 group-data-[size=sm]/card:px-3 group-data-[size=lg]/card:px-6`,n),...r})}function CardFooter({className:n,...r}){return t(`div`,{"data-slot":`card-footer`,className:e(`bg-muted/50 flex items-center rounded-b-xl border-t p-4`,`group-data-[size=sm]/card:p-3 group-data-[size=lg]/card:p-6`,n),...r})}export{Card,CardAction,CardContent,CardDescription,CardFooter,CardHeader,CardTitle};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{jsx as t}from"react/jsx-runtime";function Card({className:n,size:r=`md`,...i}){return/* @__PURE__ */ t(`div`,{"data-slot":`card`,"data-size":r,className:e(`group/card flex flex-col gap-4 overflow-hidden rounded-xl py-4 text-sm bg-card text-card-foreground ring-foreground/10 ring-1`,`has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0`,`data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0`,`data-[size=lg]:gap-6 data-[size=lg]:py-6 data-[size=lg]:has-data-[slot=card-footer]:pb-0`,`*:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl`,n),...i})}function CardHeader({className:n,...r}){return/* @__PURE__ */ t(`div`,{"data-slot":`card-header`,className:e(`group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4`,`group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3`,`group-data-[size=lg]/card:px-6`,`has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]`,n),...r})}function CardTitle({className:n,...r}){return/* @__PURE__ */ t(`div`,{"data-slot":`card-title`,className:e(`text-lg leading-snug font-bold group-data-[size=sm]/card:text-sm group-data-[size=lg]/card:text-xl`,n),...r})}function CardDescription({className:n,...r}){return/* @__PURE__ */ t(`div`,{"data-slot":`card-description`,className:e(`text-muted-foreground text-sm`,n),...r})}function CardAction({className:n,...r}){return/* @__PURE__ */ t(`div`,{"data-slot":`card-action`,className:e(`col-start-2 row-span-2 row-start-1 self-start justify-self-end`,n),...r})}function CardContent({className:n,...r}){return/* @__PURE__ */ t(`div`,{"data-slot":`card-content`,className:e(`px-4 group-data-[size=sm]/card:px-3 group-data-[size=lg]/card:px-6`,n),...r})}function CardFooter({className:n,...r}){return/* @__PURE__ */ t(`div`,{"data-slot":`card-footer`,className:e(`bg-muted/50 flex items-center rounded-b-xl border-t p-4`,`group-data-[size=sm]/card:p-3 group-data-[size=lg]/card:p-6`,n),...r})}export{Card,CardAction,CardContent,CardDescription,CardFooter,CardHeader,CardTitle};
2
2
  //# sourceMappingURL=card.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"card.js","names":[],"sources":["../../src/components/card.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nexport type CardProps = React.ComponentProps<'div'> & { size?: 'sm' | 'md' | 'lg' }\n\nexport type CardHeaderProps = React.ComponentProps<'div'>\n\nexport type CardTitleProps = React.ComponentProps<'div'>\n\nexport type CardDescriptionProps = React.ComponentProps<'div'>\n\nexport type CardActionProps = React.ComponentProps<'div'>\n\nexport type CardContentProps = React.ComponentProps<'div'>\n\nexport type CardFooterProps = React.ComponentProps<'div'>\n\nfunction Card({ className, size = 'md', ...props }: CardProps) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\n 'group/card flex flex-col gap-4 overflow-hidden rounded-xl py-4 text-sm bg-card text-card-foreground ring-foreground/10 ring-1',\n 'has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0',\n 'data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0',\n 'data-[size=lg]:gap-6 data-[size=lg]:py-6 data-[size=lg]:has-data-[slot=card-footer]:pb-0',\n '*:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: CardHeaderProps) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n 'group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4',\n 'group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3',\n 'group-data-[size=lg]/card:px-6',\n 'has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: CardTitleProps) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\n 'text-lg leading-snug font-bold group-data-[size=sm]/card:text-sm group-data-[size=lg]/card:text-xl',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: CardDescriptionProps) {\n return <div data-slot=\"card-description\" className={cn('text-muted-foreground text-sm', className)} {...props} />\n}\n\nfunction CardAction({ className, ...props }: CardActionProps) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn('col-start-2 row-span-2 row-start-1 self-start justify-self-end', className)}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: CardContentProps) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn('px-4 group-data-[size=sm]/card:px-3 group-data-[size=lg]/card:px-6', className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: CardFooterProps) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n 'bg-muted/50 flex items-center rounded-b-xl border-t p-4',\n 'group-data-[size=sm]/card:p-3 group-data-[size=lg]/card:p-6',\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle }\n"],"mappings":"qHAkBA,SAAS,KAAK,CAAE,YAAW,OAAO,KAAM,GAAG,GAAoB,CAC7D,OACE,EAAC,MAAD,CACE,YAAU,OACV,YAAW,EACX,UAAW,EACT,gIACA,+DACA,2FACA,2FACA,mEACA,CACF,EACA,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,WAAW,CAAE,YAAW,GAAG,GAA0B,CAC5D,OACE,EAAC,MAAD,CACE,YAAU,cACV,UAAW,EACT,kGACA,6FACA,iCACA,0GACA,CACF,EACA,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,UAAU,CAAE,YAAW,GAAG,GAAyB,CAC1D,OACE,EAAC,MAAD,CACE,YAAU,aACV,UAAW,EACT,qGACA,CACF,EACA,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,gBAAgB,CAAE,YAAW,GAAG,GAA+B,CACtE,OAAO,EAAC,MAAD,CAAK,YAAU,mBAAmB,UAAW,EAAG,gCAAiC,CAAS,EAAG,GAAI,CAAQ,CAAA,CAClH,CAEA,SAAS,WAAW,CAAE,YAAW,GAAG,GAA0B,CAC5D,OACE,EAAC,MAAD,CACE,YAAU,cACV,UAAW,EAAG,iEAAkE,CAAS,EACzF,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,YAAY,CAAE,YAAW,GAAG,GAA2B,CAC9D,OACE,EAAC,MAAD,CACE,YAAU,eACV,UAAW,EAAG,qEAAsE,CAAS,EAC7F,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,WAAW,CAAE,YAAW,GAAG,GAA0B,CAC5D,OACE,EAAC,MAAD,CACE,YAAU,cACV,UAAW,EACT,0DACA,8DACA,CACF,EACA,GAAI,CACL,CAAA,CAEL"}
1
+ {"version":3,"file":"card.js","names":["props","size","cn","className"],"sources":["../../src/components/card.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nexport type CardProps = React.ComponentProps<'div'> & {\n /**\n * Padding and gap between parts.\n * @default 'md'\n */\n size?: 'sm' | 'md' | 'lg'\n}\n\nexport type CardHeaderProps = React.ComponentProps<'div'>\n\nexport type CardTitleProps = React.ComponentProps<'div'>\n\nexport type CardDescriptionProps = React.ComponentProps<'div'>\n\nexport type CardActionProps = React.ComponentProps<'div'>\n\nexport type CardContentProps = React.ComponentProps<'div'>\n\nexport type CardFooterProps = React.ComponentProps<'div'>\n\nfunction Card({ className, size = 'md', ...props }: CardProps) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\n 'group/card flex flex-col gap-4 overflow-hidden rounded-xl py-4 text-sm bg-card text-card-foreground ring-foreground/10 ring-1',\n 'has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0',\n 'data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0',\n 'data-[size=lg]:gap-6 data-[size=lg]:py-6 data-[size=lg]:has-data-[slot=card-footer]:pb-0',\n '*:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: CardHeaderProps) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n 'group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4',\n 'group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3',\n 'group-data-[size=lg]/card:px-6',\n 'has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: CardTitleProps) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\n 'text-lg leading-snug font-bold group-data-[size=sm]/card:text-sm group-data-[size=lg]/card:text-xl',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: CardDescriptionProps) {\n return <div data-slot=\"card-description\" className={cn('text-muted-foreground text-sm', className)} {...props} />\n}\n\nfunction CardAction({ className, ...props }: CardActionProps) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn('col-start-2 row-span-2 row-start-1 self-start justify-self-end', className)}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: CardContentProps) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn('px-4 group-data-[size=sm]/card:px-3 group-data-[size=lg]/card:px-6', className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: CardFooterProps) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n 'bg-muted/50 flex items-center rounded-b-xl border-t p-4',\n 'group-data-[size=sm]/card:p-3 group-data-[size=lg]/card:p-6',\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle }\n"],"mappings":"qHAwBA,SAAS,KAAK,CAAE,YAAW,OAAO,KAAM,GAAGA,GAAoB,CAC7D,MACE,kBAAC,MAAD,CACE,YAAU,OACV,YAAWC,EACX,UAAWC,EACT,gIACA,+DACA,2FACA,2FACA,mEACAC,CACF,EACA,GAAIH,CACL,CAAA,CAEL,CAEA,SAAS,WAAW,CAAE,YAAW,GAAGA,GAA0B,CAC5D,MACE,kBAAC,MAAD,CACE,YAAU,cACV,UAAWE,EACT,kGACA,6FACA,iCACA,0GACAC,CACF,EACA,GAAIH,CACL,CAAA,CAEL,CAEA,SAAS,UAAU,CAAE,YAAW,GAAGA,GAAyB,CAC1D,MACE,kBAAC,MAAD,CACE,YAAU,aACV,UAAWE,EACT,qGACAC,CACF,EACA,GAAIH,CACL,CAAA,CAEL,CAEA,SAAS,gBAAgB,CAAE,YAAW,GAAGA,GAA+B,CACtE,MAAO,kBAAC,MAAD,CAAK,YAAU,mBAAmB,UAAWE,EAAG,gCAAiCC,CAAS,EAAG,GAAIH,CAAQ,CAAA,CAClH,CAEA,SAAS,WAAW,CAAE,YAAW,GAAGA,GAA0B,CAC5D,MACE,kBAAC,MAAD,CACE,YAAU,cACV,UAAWE,EAAG,iEAAkEC,CAAS,EACzF,GAAIH,CACL,CAAA,CAEL,CAEA,SAAS,YAAY,CAAE,YAAW,GAAGA,GAA2B,CAC9D,MACE,kBAAC,MAAD,CACE,YAAU,eACV,UAAWE,EAAG,qEAAsEC,CAAS,EAC7F,GAAIH,CACL,CAAA,CAEL,CAEA,SAAS,WAAW,CAAE,YAAW,GAAGA,GAA0B,CAC5D,MACE,kBAAC,MAAD,CACE,YAAU,cACV,UAAWE,EACT,0DACA,8DACAC,CACF,EACA,GAAIH,CACL,CAAA,CAEL"}
@@ -8,9 +8,16 @@ type CarouselOptions = UseCarouselParameters[0];
8
8
  type CarouselPlugin = UseCarouselParameters[1];
9
9
  export type CarouselApi = UseEmblaCarouselType[1];
10
10
  export type CarouselProps = React.ComponentProps<'div'> & {
11
+ /** Embla Carousel options, such as `loop`, `align` and `slidesToScroll`. */
11
12
  opts?: CarouselOptions;
13
+ /** Embla Carousel plugins, such as autoplay. */
12
14
  plugins?: CarouselPlugin;
15
+ /**
16
+ * Scroll direction.
17
+ * @default 'horizontal'
18
+ */
13
19
  orientation?: 'horizontal' | 'vertical';
20
+ /** Receives the Embla API once the carousel is ready. */
14
21
  setApi?: (api: CarouselApi) => void;
15
22
  };
16
23
  export type CarouselContentProps = React.ComponentProps<'div'>;
@@ -18,6 +25,7 @@ export type CarouselItemProps = React.ComponentProps<'div'>;
18
25
  export type CarouselPreviousProps = React.ComponentProps<typeof Button>;
19
26
  export type CarouselNextProps = React.ComponentProps<typeof Button>;
20
27
  export type CarouselIndicatorsProps = React.ComponentProps<'div'> & {
28
+ /** Returns extra props for the dot of each slide index. */
21
29
  getIndicatorProps?: (index: number) => React.ComponentProps<'button'>;
22
30
  };
23
31
  type CarouselContextProps = {
@@ -32,11 +40,11 @@ type CarouselContextProps = {
32
40
  scrollSnaps: number[];
33
41
  } & CarouselProps;
34
42
  declare function useCarousel(): CarouselContextProps;
35
- declare function Carousel({ orientation, opts, setApi, plugins, className, children, ...props }: CarouselProps): React.JSX.Element;
43
+ declare function Carousel({ orientation, opts, setApi, plugins, className, children, onKeyDown, ...props }: CarouselProps): React.JSX.Element;
36
44
  declare function CarouselContent({ className, ...props }: CarouselContentProps): React.JSX.Element;
37
45
  declare function CarouselItem({ className, ...props }: CarouselItemProps): React.JSX.Element;
38
- declare function CarouselPrevious({ className, variant, size, color, ...props }: CarouselPreviousProps): React.JSX.Element;
39
- declare function CarouselNext({ className, variant, size, color, ...props }: CarouselNextProps): React.JSX.Element;
46
+ declare function CarouselPrevious({ className, variant, size, onClick, ...props }: CarouselPreviousProps): React.JSX.Element;
47
+ declare function CarouselNext({ className, variant, size, onClick, ...props }: CarouselNextProps): React.JSX.Element;
40
48
  declare function CarouselIndicators({ className, getIndicatorProps, ...props }: CarouselIndicatorsProps): React.JSX.Element | null;
41
49
  //#endregion
42
50
  export { Carousel, CarouselContent, CarouselIndicators, CarouselItem, CarouselNext, CarouselPrevious, useCarousel };
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{Button as t}from"./button.js";import{IconChevronLeft as n,IconChevronRight as r}from"@tabler/icons-react";import{jsx as i,jsxs as a}from"react/jsx-runtime";import*as o from"react";import s from"embla-carousel-react";const c=o.createContext(null);function useCarousel(){let e=o.useContext(c);if(!e)throw Error(`useCarousel must be used within a <Carousel />`);return e}function Carousel({orientation:t=`horizontal`,opts:n,setApi:r,plugins:a,className:l,children:u,...d}){let[f,p]=s({...n,axis:t===`horizontal`?`x`:`y`},a),[m,h]=o.useState(!1),[g,_]=o.useState(!1),[v,y]=o.useState(0),[b,x]=o.useState([]),S=o.useCallback(e=>{e&&(h(e.canScrollPrev()),_(e.canScrollNext()),y(e.selectedScrollSnap()),x(e.scrollSnapList()))},[]),C=o.useCallback(()=>{p?.scrollPrev()},[p]),w=o.useCallback(()=>{p?.scrollNext()},[p]),T=o.useCallback(e=>{p?.scrollTo(e)},[p]),E=o.useCallback(e=>{e.key===`ArrowLeft`?(e.preventDefault(),C()):e.key===`ArrowRight`&&(e.preventDefault(),w())},[C,w]);return o.useEffect(()=>{p&&r&&r(p)},[p,r]),o.useEffect(()=>{if(p)return S(p),p.on(`reInit`,S),p.on(`select`,S),()=>{p?.off(`reInit`,S),p?.off(`select`,S)}},[p,S]),i(c.Provider,{value:{carouselRef:f,api:p,opts:n,orientation:t||(n?.axis===`y`?`vertical`:`horizontal`),scrollPrev:C,scrollNext:w,scrollTo:T,canScrollPrev:m,canScrollNext:g,selectedIndex:v,scrollSnaps:b},children:i(`section`,{onKeyDownCapture:E,className:e(`relative`,l),"data-slot":`carousel`,...d,children:u})})}function CarouselContent({className:t,...n}){let{carouselRef:r,orientation:a}=useCarousel();return i(`div`,{ref:r,className:`overflow-hidden`,"data-slot":`carousel-content`,children:i(`div`,{className:e(`flex`,a===`horizontal`?`-ml-4`:`-mt-4 flex-col`,t),...n})})}function CarouselItem({className:t,...n}){let{orientation:r}=useCarousel();return i(`div`,{"data-slot":`carousel-item`,className:e(`min-w-0 shrink-0 grow-0 basis-full`,r===`horizontal`?`pl-4`:`pt-4`,t),...n})}function CarouselPrevious({className:r,variant:o=`outline`,size:s=`icon-sm`,color:c=`zinc`,...l}){let{orientation:u,scrollPrev:d,canScrollPrev:f}=useCarousel();return a(t,{"data-slot":`carousel-previous`,color:c,variant:o,size:s,className:e(`absolute touch-manipulation rounded-full`,u===`horizontal`?`top-1/2 -left-12 -translate-y-1/2`:`-top-12 left-1/2 -translate-x-1/2 rotate-90`,r),disabled:!f,onClick:d,...l,children:[i(n,{}),i(`span`,{className:`sr-only`,children:`Previous slide`})]})}function CarouselNext({className:n,variant:o=`outline`,size:s=`icon-sm`,color:c=`zinc`,...l}){let{orientation:u,scrollNext:d,canScrollNext:f}=useCarousel();return a(t,{"data-slot":`carousel-next`,color:c,variant:o,size:s,className:e(`absolute touch-manipulation rounded-full`,u===`horizontal`?`top-1/2 -right-12 -translate-y-1/2`:`-bottom-12 left-1/2 -translate-x-1/2 rotate-90`,n),disabled:!f,onClick:d,...l,children:[i(r,{}),i(`span`,{className:`sr-only`,children:`Next slide`})]})}function CarouselIndicators({className:t,getIndicatorProps:n,...r}){let{orientation:a,scrollSnaps:o,selectedIndex:s,scrollTo:c}=useCarousel();return o.length===0?null:i(`div`,{"data-slot":`carousel-indicators`,className:e(`pointer-events-none absolute flex justify-center gap-2`,a===`horizontal`?`inset-x-0 bottom-4 flex-row`:`inset-y-0 right-4 flex-col items-center`,t),...r,children:o.map((t,r)=>{let{className:a,onClick:o,...l}=n?.(r)??{};return i(`button`,{...l,type:`button`,"data-slot":`carousel-indicator`,"data-active":s===r||void 0,"aria-label":`Go to slide ${r+1}`,className:e(`pointer-events-auto cursor-pointer size-2.5 touch-manipulation rounded-full bg-background opacity-60 shadow-sm ring-1 ring-border transition-opacity hover:opacity-100 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3 focus-visible:outline-none data-[active=true]:opacity-100`,a),onClick:e=>{c(r),o?.(e)}},t)})})}export{Carousel,CarouselContent,CarouselIndicators,CarouselItem,CarouselNext,CarouselPrevious,useCarousel};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{Button as t}from"./button.js";import{IconChevronLeft as n,IconChevronRight as r}from"@tabler/icons-react";import*as i from"react";import{jsx as a,jsxs as o}from"react/jsx-runtime";import s from"embla-carousel-react";const c=i.createContext(null);function useCarousel(){let e=i.useContext(c);if(!e)throw Error(`useCarousel must be used within a <Carousel />`);return e}function isEditableTarget(e){return e instanceof Element&&e.closest(`input, textarea, select, [contenteditable]:not([contenteditable="false"])`)!==null}function Carousel({orientation:t=`horizontal`,opts:n,setApi:r,plugins:o,className:l,children:u,onKeyDown:d,...f}){let[p,m]=s({...n,axis:t===`horizontal`?`x`:`y`},o),[h,g]=i.useState(!1),[_,v]=i.useState(!1),[y,b]=i.useState(0),[x,S]=i.useState([]),C=i.useCallback(e=>{e&&(g(e.canScrollPrev()),v(e.canScrollNext()),b(e.selectedScrollSnap()),S(e.scrollSnapList()))},[]),w=i.useCallback(()=>{m?.scrollPrev()},[m]),T=i.useCallback(()=>{m?.scrollNext()},[m]),E=i.useCallback(e=>{m?.scrollTo(e)},[m]),D=n?.direction===`rtl`,O=i.useCallback(e=>{if(d?.(e),e.defaultPrevented||isEditableTarget(e.target))return;let[n,r]=t===`vertical`?[`ArrowUp`,`ArrowDown`]:D?[`ArrowRight`,`ArrowLeft`]:[`ArrowLeft`,`ArrowRight`];e.key===n?(e.preventDefault(),w()):e.key===r&&(e.preventDefault(),T())},[d,t,D,w,T]);return i.useEffect(()=>{m&&r&&r(m)},[m,r]),i.useEffect(()=>{if(m)return C(m),m.on(`reInit`,C),m.on(`select`,C),()=>{m?.off(`reInit`,C),m?.off(`select`,C)}},[m,C]),/* @__PURE__ */ a(c.Provider,{value:{carouselRef:p,api:m,opts:n,orientation:t||(n?.axis===`y`?`vertical`:`horizontal`),scrollPrev:w,scrollNext:T,scrollTo:E,canScrollPrev:h,canScrollNext:_,selectedIndex:y,scrollSnaps:x},children:/* @__PURE__ */ a(`section`,{role:`region`,"aria-roledescription":`carousel`,onKeyDown:O,className:e(`relative`,l),"data-slot":`carousel`,...f,children:u})})}function CarouselContent({className:t,...n}){let{carouselRef:r,orientation:i}=useCarousel();return/* @__PURE__ */ a(`div`,{ref:r,className:`overflow-hidden`,"data-slot":`carousel-content`,children:/* @__PURE__ */ a(`div`,{className:e(`flex`,i===`horizontal`?`-ml-4`:`-mt-4 flex-col`,t),...n})})}function CarouselItem({className:t,...n}){let{orientation:r}=useCarousel();return/* @__PURE__ */ a(`div`,{"data-slot":`carousel-item`,className:e(`min-w-0 shrink-0 grow-0 basis-full`,r===`horizontal`?`pl-4`:`pt-4`,t),...n})}function CarouselPrevious({className:r,variant:i=`secondary`,size:s=`icon-sm`,onClick:c,...l}){let{orientation:u,scrollPrev:d,canScrollPrev:f}=useCarousel();return/* @__PURE__ */ o(t,{"data-slot":`carousel-previous`,variant:i,size:s,className:e(`absolute touch-manipulation rounded-full`,u===`horizontal`?`top-1/2 -left-12 -translate-y-1/2`:`-top-12 left-1/2 -translate-x-1/2 rotate-90`,r),disabled:!f,onClick:e=>{c?.(e),e.defaultPrevented||d()},...l,children:[/* @__PURE__ */ a(n,{}),/* @__PURE__ */ a(`span`,{className:`sr-only`,children:`Previous slide`})]})}function CarouselNext({className:n,variant:i=`secondary`,size:s=`icon-sm`,onClick:c,...l}){let{orientation:u,scrollNext:d,canScrollNext:f}=useCarousel();return/* @__PURE__ */ o(t,{"data-slot":`carousel-next`,variant:i,size:s,className:e(`absolute touch-manipulation rounded-full`,u===`horizontal`?`top-1/2 -right-12 -translate-y-1/2`:`-bottom-12 left-1/2 -translate-x-1/2 rotate-90`,n),disabled:!f,onClick:e=>{c?.(e),e.defaultPrevented||d()},...l,children:[/* @__PURE__ */ a(r,{}),/* @__PURE__ */ a(`span`,{className:`sr-only`,children:`Next slide`})]})}function CarouselIndicators({className:t,getIndicatorProps:n,...r}){let{orientation:i,scrollSnaps:o,selectedIndex:s,scrollTo:c}=useCarousel();return o.length===0?null:/* @__PURE__ */ a(`div`,{"data-slot":`carousel-indicators`,className:e(`pointer-events-none absolute flex justify-center gap-2`,i===`horizontal`?`inset-x-0 bottom-4 flex-row`:`inset-y-0 right-4 flex-col items-center`,t),...r,children:o.map((t,r)=>{let{className:i,onClick:o,...l}=n?.(r)??{};return/* @__PURE__ */ a(`button`,{"aria-label":`Go to slide ${r+1}`,...l,type:`button`,"data-slot":`carousel-indicator`,"data-active":s===r||void 0,className:e(`pointer-events-auto cursor-pointer size-2.5 touch-manipulation rounded-full bg-background opacity-60 shadow-sm ring-1 ring-border transition-opacity hover:opacity-100 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3 focus-visible:outline-none data-[active=true]:opacity-100`,i),onClick:e=>{c(r),o?.(e)}},t)})})}export{Carousel,CarouselContent,CarouselIndicators,CarouselItem,CarouselNext,CarouselPrevious,useCarousel};
2
2
  //# sourceMappingURL=carousel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"carousel.js","names":[],"sources":["../../src/components/carousel.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { IconChevronLeft, IconChevronRight } from '@tabler/icons-react'\nimport useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react'\n\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\n\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\nexport type CarouselApi = UseEmblaCarouselType[1]\n\nexport type CarouselProps = React.ComponentProps<'div'> & {\n opts?: CarouselOptions\n plugins?: CarouselPlugin\n orientation?: 'horizontal' | 'vertical'\n setApi?: (api: CarouselApi) => void\n}\n\nexport type CarouselContentProps = React.ComponentProps<'div'>\n\nexport type CarouselItemProps = React.ComponentProps<'div'>\n\nexport type CarouselPreviousProps = React.ComponentProps<typeof Button>\n\nexport type CarouselNextProps = React.ComponentProps<typeof Button>\n\nexport type CarouselIndicatorsProps = React.ComponentProps<'div'> & {\n getIndicatorProps?: (index: number) => React.ComponentProps<'button'>\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0]\n api: ReturnType<typeof useEmblaCarousel>[1]\n scrollPrev: () => void\n scrollNext: () => void\n scrollTo: (index: number) => void\n canScrollPrev: boolean\n canScrollNext: boolean\n selectedIndex: number\n scrollSnaps: number[]\n} & CarouselProps\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error('useCarousel must be used within a <Carousel />')\n }\n\n return context\n}\n\nfunction Carousel({ orientation = 'horizontal', opts, setApi, plugins, className, children, ...props }: CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === 'horizontal' ? 'x' : 'y'\n },\n plugins\n )\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n const [selectedIndex, setSelectedIndex] = React.useState(0)\n const [scrollSnaps, setScrollSnaps] = React.useState<number[]>([])\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n setSelectedIndex(api.selectedScrollSnap())\n setScrollSnaps(api.scrollSnapList())\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const scrollTo = React.useCallback(\n (index: number) => {\n api?.scrollTo(index)\n },\n [api]\n )\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'ArrowLeft') {\n event.preventDefault()\n scrollPrev()\n } else if (event.key === 'ArrowRight') {\n event.preventDefault()\n scrollNext()\n }\n },\n [scrollPrev, scrollNext]\n )\n\n React.useEffect(() => {\n if (!api || !setApi) return\n setApi(api)\n }, [api, setApi])\n\n React.useEffect(() => {\n if (!api) return\n onSelect(api)\n api.on('reInit', onSelect)\n api.on('select', onSelect)\n\n return () => {\n api?.off('reInit', onSelect)\n api?.off('select', onSelect)\n }\n }, [api, onSelect])\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation: orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),\n scrollPrev,\n scrollNext,\n scrollTo,\n canScrollPrev,\n canScrollNext,\n selectedIndex,\n scrollSnaps\n }}\n >\n <section onKeyDownCapture={handleKeyDown} className={cn('relative', className)} data-slot=\"carousel\" {...props}>\n {children}\n </section>\n </CarouselContext.Provider>\n )\n}\n\nfunction CarouselContent({ className, ...props }: CarouselContentProps) {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\" data-slot=\"carousel-content\">\n <div className={cn('flex', orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col', className)} {...props} />\n </div>\n )\n}\n\nfunction CarouselItem({ className, ...props }: CarouselItemProps) {\n const { orientation } = useCarousel()\n\n return (\n <div\n data-slot=\"carousel-item\"\n className={cn('min-w-0 shrink-0 grow-0 basis-full', orientation === 'horizontal' ? 'pl-4' : 'pt-4', className)}\n {...props}\n />\n )\n}\n\nfunction CarouselPrevious({\n className,\n variant = 'outline',\n size = 'icon-sm',\n color = 'zinc',\n ...props\n}: CarouselPreviousProps) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n color={color}\n variant={variant}\n size={size}\n className={cn(\n 'absolute touch-manipulation rounded-full',\n orientation === 'horizontal'\n ? 'top-1/2 -left-12 -translate-y-1/2'\n : '-top-12 left-1/2 -translate-x-1/2 rotate-90',\n className\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <IconChevronLeft />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n )\n}\n\nfunction CarouselNext({\n className,\n variant = 'outline',\n size = 'icon-sm',\n color = 'zinc',\n ...props\n}: CarouselNextProps) {\n const { orientation, scrollNext, canScrollNext } = useCarousel()\n\n return (\n <Button\n data-slot=\"carousel-next\"\n color={color}\n variant={variant}\n size={size}\n className={cn(\n 'absolute touch-manipulation rounded-full',\n orientation === 'horizontal'\n ? 'top-1/2 -right-12 -translate-y-1/2'\n : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',\n className\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <IconChevronRight />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n )\n}\n\nfunction CarouselIndicators({ className, getIndicatorProps, ...props }: CarouselIndicatorsProps) {\n const { orientation, scrollSnaps, selectedIndex, scrollTo } = useCarousel()\n\n if (scrollSnaps.length === 0) {\n return null\n }\n\n return (\n <div\n data-slot=\"carousel-indicators\"\n className={cn(\n 'pointer-events-none absolute flex justify-center gap-2',\n orientation === 'horizontal' ? 'inset-x-0 bottom-4 flex-row' : 'inset-y-0 right-4 flex-col items-center',\n className\n )}\n {...props}\n >\n {scrollSnaps.map((snap, index) => {\n const { className: indicatorClassName, onClick, ...indicatorProps } = getIndicatorProps?.(index) ?? {}\n\n return (\n <button\n key={snap}\n {...indicatorProps}\n type=\"button\"\n data-slot=\"carousel-indicator\"\n data-active={selectedIndex === index ? true : undefined}\n aria-label={`Go to slide ${index + 1}`}\n className={cn(\n 'pointer-events-auto cursor-pointer size-2.5 touch-manipulation rounded-full bg-background opacity-60 shadow-sm ring-1 ring-border transition-opacity hover:opacity-100 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3 focus-visible:outline-none data-[active=true]:opacity-100',\n indicatorClassName\n )}\n onClick={(event) => {\n scrollTo(index)\n onClick?.(event)\n }}\n />\n )\n })}\n </div>\n )\n}\n\nexport { Carousel, CarouselContent, CarouselIndicators, CarouselItem, CarouselNext, CarouselPrevious, useCarousel }\n"],"mappings":"4SA6CA,MAAM,EAAkB,EAAM,cAA2C,IAAI,EAE7E,SAAS,aAAc,CACrB,IAAM,EAAU,EAAM,WAAW,CAAe,EAEhD,GAAI,CAAC,EACH,MAAU,MAAM,gDAAgD,EAGlE,OAAO,CACT,CAEA,SAAS,SAAS,CAAE,cAAc,aAAc,OAAM,SAAQ,UAAS,YAAW,WAAU,GAAG,GAAwB,CACrH,GAAM,CAAC,EAAa,GAAO,EACzB,CACE,GAAG,EACH,KAAM,IAAgB,aAAe,IAAM,GAC7C,EACA,CACF,EACM,CAAC,EAAe,GAAoB,EAAM,SAAS,EAAK,EACxD,CAAC,EAAe,GAAoB,EAAM,SAAS,EAAK,EACxD,CAAC,EAAe,GAAoB,EAAM,SAAS,CAAC,EACpD,CAAC,EAAa,GAAkB,EAAM,SAAmB,CAAC,CAAC,EAE3D,EAAW,EAAM,YAAa,GAAqB,CAClD,IACL,EAAiB,EAAI,cAAc,CAAC,EACpC,EAAiB,EAAI,cAAc,CAAC,EACpC,EAAiB,EAAI,mBAAmB,CAAC,EACzC,EAAe,EAAI,eAAe,CAAC,EACrC,EAAG,CAAC,CAAC,EAEC,EAAa,EAAM,gBAAkB,CACzC,GAAK,WAAW,CAClB,EAAG,CAAC,CAAG,CAAC,EAEF,EAAa,EAAM,gBAAkB,CACzC,GAAK,WAAW,CAClB,EAAG,CAAC,CAAG,CAAC,EAEF,EAAW,EAAM,YACpB,GAAkB,CACjB,GAAK,SAAS,CAAK,CACrB,EACA,CAAC,CAAG,CACN,EAEM,EAAgB,EAAM,YACzB,GAA+C,CAC1C,EAAM,MAAQ,aAChB,EAAM,eAAe,EACrB,EAAW,GACF,EAAM,MAAQ,eACvB,EAAM,eAAe,EACrB,EAAW,EAEf,EACA,CAAC,EAAY,CAAU,CACzB,EAmBA,OAjBA,EAAM,cAAgB,CACf,GAAQ,GACb,EAAO,CAAG,CACZ,EAAG,CAAC,EAAK,CAAM,CAAC,EAEhB,EAAM,cAAgB,CACf,KAKL,OAJA,EAAS,CAAG,EACZ,EAAI,GAAG,SAAU,CAAQ,EACzB,EAAI,GAAG,SAAU,CAAQ,MAEZ,CACX,GAAK,IAAI,SAAU,CAAQ,EAC3B,GAAK,IAAI,SAAU,CAAQ,CAC7B,CACF,EAAG,CAAC,EAAK,CAAQ,CAAC,EAGhB,EAAC,EAAgB,SAAjB,CACE,MAAO,CACL,cACK,MACL,OACA,YAAa,IAAgB,GAAM,OAAS,IAAM,WAAa,cAC/D,aACA,aACA,WACA,gBACA,gBACA,gBACA,aACF,EAEA,SAAA,EAAC,UAAD,CAAS,iBAAkB,EAAe,UAAW,EAAG,WAAY,CAAS,EAAG,YAAU,WAAW,GAAI,EACtG,UACM,CAAA,CACe,CAAA,CAE9B,CAEA,SAAS,gBAAgB,CAAE,YAAW,GAAG,GAA+B,CACtE,GAAM,CAAE,cAAa,eAAgB,YAAY,EAEjD,OACE,EAAC,MAAD,CAAK,IAAK,EAAa,UAAU,kBAAkB,YAAU,mBAC3D,SAAA,EAAC,MAAD,CAAK,UAAW,EAAG,OAAQ,IAAgB,aAAe,QAAU,iBAAkB,CAAS,EAAG,GAAI,CAAQ,CAAA,CAC3G,CAAA,CAET,CAEA,SAAS,aAAa,CAAE,YAAW,GAAG,GAA4B,CAChE,GAAM,CAAE,eAAgB,YAAY,EAEpC,OACE,EAAC,MAAD,CACE,YAAU,gBACV,UAAW,EAAG,qCAAsC,IAAgB,aAAe,OAAS,OAAQ,CAAS,EAC7G,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,iBAAiB,CACxB,YACA,UAAU,UACV,OAAO,UACP,QAAQ,OACR,GAAG,GACqB,CACxB,GAAM,CAAE,cAAa,aAAY,iBAAkB,YAAY,EAE/D,OACE,EAAC,EAAD,CACE,YAAU,oBACH,QACE,UACH,OACN,UAAW,EACT,2CACA,IAAgB,aACZ,oCACA,8CACJ,CACF,EACA,SAAU,CAAC,EACX,QAAS,EACT,GAAI,EAdN,SAAA,CAgBE,EAAC,EAAD,CAAkB,CAAA,EAClB,EAAC,OAAD,CAAM,UAAU,UAAU,SAAA,gBAAoB,CAAA,CACxC,GAEZ,CAEA,SAAS,aAAa,CACpB,YACA,UAAU,UACV,OAAO,UACP,QAAQ,OACR,GAAG,GACiB,CACpB,GAAM,CAAE,cAAa,aAAY,iBAAkB,YAAY,EAE/D,OACE,EAAC,EAAD,CACE,YAAU,gBACH,QACE,UACH,OACN,UAAW,EACT,2CACA,IAAgB,aACZ,qCACA,iDACJ,CACF,EACA,SAAU,CAAC,EACX,QAAS,EACT,GAAI,EAdN,SAAA,CAgBE,EAAC,EAAD,CAAmB,CAAA,EACnB,EAAC,OAAD,CAAM,UAAU,UAAU,SAAA,YAAgB,CAAA,CACpC,GAEZ,CAEA,SAAS,mBAAmB,CAAE,YAAW,oBAAmB,GAAG,GAAkC,CAC/F,GAAM,CAAE,cAAa,cAAa,gBAAe,YAAa,YAAY,EAM1E,OAJI,EAAY,SAAW,EAClB,KAIP,EAAC,MAAD,CACE,YAAU,sBACV,UAAW,EACT,yDACA,IAAgB,aAAe,8BAAgC,0CAC/D,CACF,EACA,GAAI,EAEH,SAAA,EAAY,KAAK,EAAM,IAAU,CAChC,GAAM,CAAE,UAAW,EAAoB,UAAS,GAAG,GAAmB,IAAoB,CAAK,GAAK,CAAC,EAErG,OACE,EAAC,SAAD,CAEE,GAAI,EACJ,KAAK,SACL,YAAU,qBACV,cAAa,IAAkB,GAAe,IAAA,GAC9C,aAAY,eAAe,EAAQ,IACnC,UAAW,EACT,6SACA,CACF,EACA,QAAU,GAAU,CAClB,EAAS,CAAK,EACd,IAAU,CAAK,CACjB,CACD,EAdM,CAcN,CAEL,CAAC,CACE,CAAA,CAET"}
1
+ {"version":3,"file":"carousel.js","names":["React","useEmblaCarousel","CarouselContext","context","target","props","carouselRef","api","opts","orientation","plugins","canScrollPrev","setCanScrollPrev","canScrollNext","setCanScrollNext","selectedIndex","setSelectedIndex","scrollSnaps","setScrollSnaps","onSelect","scrollPrev","scrollNext","scrollTo","index","isRtl","handleKeyDown","onKeyDown","event","prevKey","nextKey","setApi","cn","className","Button","onClick","IconChevronLeft","IconChevronRight","indicatorClassName","indicatorProps","getIndicatorProps","snap"],"sources":["../../src/components/carousel.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { IconChevronLeft, IconChevronRight } from '@tabler/icons-react'\nimport useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react'\n\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\n\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\nexport type CarouselApi = UseEmblaCarouselType[1]\n\nexport type CarouselProps = React.ComponentProps<'div'> & {\n /** Embla Carousel options, such as `loop`, `align` and `slidesToScroll`. */\n opts?: CarouselOptions\n /** Embla Carousel plugins, such as autoplay. */\n plugins?: CarouselPlugin\n /**\n * Scroll direction.\n * @default 'horizontal'\n */\n orientation?: 'horizontal' | 'vertical'\n /** Receives the Embla API once the carousel is ready. */\n setApi?: (api: CarouselApi) => void\n}\n\nexport type CarouselContentProps = React.ComponentProps<'div'>\n\nexport type CarouselItemProps = React.ComponentProps<'div'>\n\nexport type CarouselPreviousProps = React.ComponentProps<typeof Button>\n\nexport type CarouselNextProps = React.ComponentProps<typeof Button>\n\nexport type CarouselIndicatorsProps = React.ComponentProps<'div'> & {\n /** Returns extra props for the dot of each slide index. */\n getIndicatorProps?: (index: number) => React.ComponentProps<'button'>\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0]\n api: ReturnType<typeof useEmblaCarousel>[1]\n scrollPrev: () => void\n scrollNext: () => void\n scrollTo: (index: number) => void\n canScrollPrev: boolean\n canScrollNext: boolean\n selectedIndex: number\n scrollSnaps: number[]\n} & CarouselProps\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error('useCarousel must be used within a <Carousel />')\n }\n\n return context\n}\n\nconst EDITABLE_TARGET_SELECTOR = 'input, textarea, select, [contenteditable]:not([contenteditable=\"false\"])'\n\nfunction isEditableTarget(target: EventTarget) {\n return target instanceof Element && target.closest(EDITABLE_TARGET_SELECTOR) !== null\n}\n\nfunction Carousel({\n orientation = 'horizontal',\n opts,\n setApi,\n plugins,\n className,\n children,\n onKeyDown,\n ...props\n}: CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === 'horizontal' ? 'x' : 'y'\n },\n plugins\n )\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n const [selectedIndex, setSelectedIndex] = React.useState(0)\n const [scrollSnaps, setScrollSnaps] = React.useState<number[]>([])\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n setSelectedIndex(api.selectedScrollSnap())\n setScrollSnaps(api.scrollSnapList())\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const scrollTo = React.useCallback(\n (index: number) => {\n api?.scrollTo(index)\n },\n [api]\n )\n\n const isRtl = opts?.direction === 'rtl'\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLElement>) => {\n onKeyDown?.(event as React.KeyboardEvent<HTMLDivElement>)\n // Leave arrows to text fields and to controls inside a slide (slider, radio group...) that handle them.\n if (event.defaultPrevented || isEditableTarget(event.target)) return\n\n const [prevKey, nextKey] =\n orientation === 'vertical'\n ? ['ArrowUp', 'ArrowDown']\n : isRtl\n ? ['ArrowRight', 'ArrowLeft']\n : ['ArrowLeft', 'ArrowRight']\n\n if (event.key === prevKey) {\n event.preventDefault()\n scrollPrev()\n } else if (event.key === nextKey) {\n event.preventDefault()\n scrollNext()\n }\n },\n [onKeyDown, orientation, isRtl, scrollPrev, scrollNext]\n )\n\n React.useEffect(() => {\n if (!api || !setApi) return\n setApi(api)\n }, [api, setApi])\n\n React.useEffect(() => {\n if (!api) return\n onSelect(api)\n api.on('reInit', onSelect)\n api.on('select', onSelect)\n\n return () => {\n api?.off('reInit', onSelect)\n api?.off('select', onSelect)\n }\n }, [api, onSelect])\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation: orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),\n scrollPrev,\n scrollNext,\n scrollTo,\n canScrollPrev,\n canScrollNext,\n selectedIndex,\n scrollSnaps\n }}\n >\n <section\n role=\"region\"\n aria-roledescription=\"carousel\"\n onKeyDown={handleKeyDown}\n className={cn('relative', className)}\n data-slot=\"carousel\"\n {...props}\n >\n {children}\n </section>\n </CarouselContext.Provider>\n )\n}\n\nfunction CarouselContent({ className, ...props }: CarouselContentProps) {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\" data-slot=\"carousel-content\">\n <div className={cn('flex', orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col', className)} {...props} />\n </div>\n )\n}\n\nfunction CarouselItem({ className, ...props }: CarouselItemProps) {\n const { orientation } = useCarousel()\n\n return (\n <div\n data-slot=\"carousel-item\"\n className={cn('min-w-0 shrink-0 grow-0 basis-full', orientation === 'horizontal' ? 'pl-4' : 'pt-4', className)}\n {...props}\n />\n )\n}\n\nfunction CarouselPrevious({\n className,\n variant = 'secondary',\n size = 'icon-sm',\n onClick,\n ...props\n}: CarouselPreviousProps) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n 'absolute touch-manipulation rounded-full',\n orientation === 'horizontal'\n ? 'top-1/2 -left-12 -translate-y-1/2'\n : '-top-12 left-1/2 -translate-x-1/2 rotate-90',\n className\n )}\n disabled={!canScrollPrev}\n onClick={(event) => {\n onClick?.(event)\n if (!event.defaultPrevented) scrollPrev()\n }}\n {...props}\n >\n <IconChevronLeft />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n )\n}\n\nfunction CarouselNext({ className, variant = 'secondary', size = 'icon-sm', onClick, ...props }: CarouselNextProps) {\n const { orientation, scrollNext, canScrollNext } = useCarousel()\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n 'absolute touch-manipulation rounded-full',\n orientation === 'horizontal'\n ? 'top-1/2 -right-12 -translate-y-1/2'\n : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',\n className\n )}\n disabled={!canScrollNext}\n onClick={(event) => {\n onClick?.(event)\n if (!event.defaultPrevented) scrollNext()\n }}\n {...props}\n >\n <IconChevronRight />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n )\n}\n\nfunction CarouselIndicators({ className, getIndicatorProps, ...props }: CarouselIndicatorsProps) {\n const { orientation, scrollSnaps, selectedIndex, scrollTo } = useCarousel()\n\n if (scrollSnaps.length === 0) {\n return null\n }\n\n return (\n <div\n data-slot=\"carousel-indicators\"\n className={cn(\n 'pointer-events-none absolute flex justify-center gap-2',\n orientation === 'horizontal' ? 'inset-x-0 bottom-4 flex-row' : 'inset-y-0 right-4 flex-col items-center',\n className\n )}\n {...props}\n >\n {scrollSnaps.map((snap, index) => {\n const { className: indicatorClassName, onClick, ...indicatorProps } = getIndicatorProps?.(index) ?? {}\n\n return (\n <button\n key={snap}\n aria-label={`Go to slide ${index + 1}`}\n {...indicatorProps}\n type=\"button\"\n data-slot=\"carousel-indicator\"\n data-active={selectedIndex === index ? true : undefined}\n className={cn(\n 'pointer-events-auto cursor-pointer size-2.5 touch-manipulation rounded-full bg-background opacity-60 shadow-sm ring-1 ring-border transition-opacity hover:opacity-100 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3 focus-visible:outline-none data-[active=true]:opacity-100',\n indicatorClassName\n )}\n onClick={(event) => {\n scrollTo(index)\n onClick?.(event)\n }}\n />\n )\n })}\n </div>\n )\n}\n\nexport { Carousel, CarouselContent, CarouselIndicators, CarouselItem, CarouselNext, CarouselPrevious, useCarousel }\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
- import { VariantProps } from "class-variance-authority";
3
2
  import * as React from "react";
3
+ import { VariantProps } from "class-variance-authority";
4
4
  //#region src/components/center.d.ts
5
5
  declare const centerVariants: (props?: ({
6
6
  direction?: "horizontal" | "vertical" | null | undefined;
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{jsx as t}from"react/jsx-runtime";import{cva as n}from"class-variance-authority";const r=n(`flex items-center justify-center`,{variants:{direction:{horizontal:`flex-row`,vertical:`flex-col`},size:{xs:`gap-1`,sm:`gap-2`,md:`gap-3`,lg:`gap-4`,xl:`gap-6`}},defaultVariants:{direction:`horizontal`,size:`md`}});function Center({className:n,direction:i=`horizontal`,size:a=`md`,...o}){return t(`div`,{"data-slot":`center`,"data-direction":i,"data-size":a,className:e(r({direction:i,size:a}),n),...o})}export{Center,r as centerVariants};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{jsx as t}from"react/jsx-runtime";import{cva as n}from"class-variance-authority";const r=n(`flex items-center justify-center`,{variants:{direction:{horizontal:`flex-row`,vertical:`flex-col`},size:{xs:`gap-1`,sm:`gap-2`,md:`gap-3`,lg:`gap-4`,xl:`gap-6`}},defaultVariants:{direction:`horizontal`,size:`md`}});function Center({className:n,direction:i=`horizontal`,size:a=`md`,...o}){return/* @__PURE__ */ t(`div`,{"data-slot":`center`,"data-direction":i,"data-size":a,className:e(r({direction:i,size:a}),n),...o})}export{Center,r as centerVariants};
2
2
  //# sourceMappingURL=center.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"center.js","names":[],"sources":["../../src/components/center.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\n\nconst centerVariants = cva('flex items-center justify-center', {\n variants: {\n direction: {\n horizontal: 'flex-row',\n vertical: 'flex-col'\n },\n size: {\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n xl: 'gap-6'\n }\n },\n defaultVariants: {\n direction: 'horizontal',\n size: 'md'\n }\n})\n\nexport type CenterProps = React.ComponentProps<'div'> & VariantProps<typeof centerVariants>\n\nfunction Center({ className, direction = 'horizontal', size = 'md', ...props }: CenterProps) {\n return (\n <div\n data-slot=\"center\"\n data-direction={direction}\n data-size={size}\n className={cn(centerVariants({ direction, size }), className)}\n {...props}\n />\n )\n}\n\nexport { Center, centerVariants }\n"],"mappings":"oKAMA,MAAM,EAAiB,EAAI,mCAAoC,CAC7D,SAAU,CACR,UAAW,CACT,WAAY,WACZ,SAAU,UACZ,EACA,KAAM,CACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,OACN,CACF,EACA,gBAAiB,CACf,UAAW,aACX,KAAM,IACR,CACF,CAAC,EAID,SAAS,OAAO,CAAE,YAAW,YAAY,aAAc,OAAO,KAAM,GAAG,GAAsB,CAC3F,OACE,EAAC,MAAD,CACE,YAAU,SACV,iBAAgB,EAChB,YAAW,EACX,UAAW,EAAG,EAAe,CAAE,YAAW,MAAK,CAAC,EAAG,CAAS,EAC5D,GAAI,CACL,CAAA,CAEL"}
1
+ {"version":3,"file":"center.js","names":["centerVariants","cva","props","direction","size","cn","className"],"sources":["../../src/components/center.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\n\nconst centerVariants = cva('flex items-center justify-center', {\n variants: {\n direction: {\n horizontal: 'flex-row',\n vertical: 'flex-col'\n },\n size: {\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n xl: 'gap-6'\n }\n },\n defaultVariants: {\n direction: 'horizontal',\n size: 'md'\n }\n})\n\nexport type CenterProps = React.ComponentProps<'div'> & VariantProps<typeof centerVariants>\n\nfunction Center({ className, direction = 'horizontal', size = 'md', ...props }: CenterProps) {\n return (\n <div\n data-slot=\"center\"\n data-direction={direction}\n data-size={size}\n className={cn(centerVariants({ direction, size }), className)}\n {...props}\n />\n )\n}\n\nexport { Center, centerVariants }\n"],"mappings":"oKAMA,MAAMA,EAAiBC,EAAI,mCAAoC,CAC7D,SAAU,CACR,UAAW,CACT,WAAY,WACZ,SAAU,UACZ,EACA,KAAM,CACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,OACN,CACF,EACA,gBAAiB,CACf,UAAW,aACX,KAAM,IACR,CACF,CAAC,EAID,SAAS,OAAO,CAAE,YAAW,YAAY,aAAc,OAAO,KAAM,GAAGC,GAAsB,CAC3F,MACE,kBAAC,MAAD,CACE,YAAU,SACV,iBAAgBC,EAChB,YAAWC,EACX,UAAWC,EAAGL,EAAe,CAAE,YAAW,MAAK,CAAC,EAAGM,CAAS,EAC5D,GAAIJ,CACL,CAAA,CAEL"}
@@ -1,8 +1,8 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{Fragment as t,jsx as n,jsxs as r}from"react/jsx-runtime";import*as i from"react";import*as a from"recharts";const o={light:``,dark:`.dark`},s=[`primary`,`brand`,`gray`,`zinc`,`red`,`yellow`,`green`,`blue`,`indigo`,`pink`];function resolveChartColor(e){if(e)return s.includes(e)?`var(--${e})`:e}const c=[`var(--chart-1)`,`var(--chart-2)`,`var(--chart-3)`,`var(--chart-4)`,`var(--chart-5)`],l=i.createContext(null);function useChart(){let e=i.useContext(l);if(!e)throw Error(`useChart must be used within a <ChartContainer />`);return e}function ChartContainer({id:t,className:r,children:o,config:s,...c}){let u=i.useId(),d=`chart-${t||u.replace(/:/g,``)}`;return n(l.Provider,{value:{config:s},children:n(`div`,{"data-slot":`chart`,"data-chart":d,className:e(`flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden`,r),...c,children:n(a.ResponsiveContainer,{children:o})})})}const ChartStyle=({id:e,config:t})=>{let r=Object.entries(t).filter(([,e])=>e.theme||e.color);if(!r.length)return null;let i=Object.entries(o).map(([t,n])=>`
2
- ${n} [data-chart=${e}] {
3
- ${r.map(([e,n])=>{let r=n.theme?.[t]||n.color;return r?` --color-${e}: ${r};`:null}).join(`
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import*as t from"react";import{Fragment as n,jsx as r,jsxs as i}from"react/jsx-runtime";import*as a from"recharts";const o={light:``,dark:`.dark`},s=[`primary`,`brand`,`gray`,`zinc`,`red`,`yellow`,`green`,`blue`,`indigo`,`pink`];function resolveChartColor(e){if(e)return s.includes(e)?`var(--${e})`:e}const c=[`var(--chart-1)`,`var(--chart-2)`,`var(--chart-3)`,`var(--chart-4)`,`var(--chart-5)`],l=t.createContext(null);function useChart(){let e=t.useContext(l);if(!e)throw Error(`useChart must be used within a <ChartContainer />`);return e}function ChartContainer({id:n,className:i,children:o,config:s,...c}){let u=t.useId(),d=`chart-${n||u.replace(/:/g,``)}`;return/* @__PURE__ */ r(l.Provider,{value:{config:s},children:/* @__PURE__ */ r(`div`,{"data-slot":`chart`,"data-chart":d,className:e(`flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden`,i),...c,children:/* @__PURE__ */ r(a.ResponsiveContainer,{children:o})})})}const ChartStyle=({id:e,config:t})=>{let n=Object.entries(t).filter(([,e])=>e.theme||e.color);if(!n.length)return null;let i=Object.entries(o).map(([t,r])=>`
2
+ ${r} [data-chart=${e}] {
3
+ ${n.map(([e,n])=>{let r=n.theme?.[t]||n.color;return r?` --color-${e}: ${r};`:null}).join(`
4
4
  `)}
5
5
  }
6
6
  `).join(`
7
- `);return n(`style`,{children:i})},u=a.Tooltip;function ChartTooltipContent({active:a,payload:o,className:s,indicator:c=`dot`,hideLabel:l=!1,hideIndicator:u=!1,label:d,labelFormatter:f,labelClassName:p,formatter:m,color:h,nameKey:g,labelKey:_}){let{config:v}=useChart(),y=i.useMemo(()=>{if(l||!o?.length)return null;let[t]=o,r=`${_||t?.dataKey||t?.name||`value`}`,i=getPayloadConfigFromPayload(v,t,r),a=!_&&typeof d==`string`?v[d]?.label||d:i?.label;return f?n(`div`,{className:e(`font-medium`,p),children:f(a,o)}):a?n(`div`,{className:e(`font-medium`,p),children:a}):null},[d,f,o,l,p,v,_]);if(!a||!o?.length)return null;let b=o.length===1&&c!==`dot`;return r(`div`,{className:e(`grid min-w-32 items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl`,s),children:[b?null:y,n(`div`,{className:`grid gap-1.5`,children:o.filter(e=>e.type!==`none`).map((i,a)=>{let o=`${g||i.name||i.dataKey||`value`}`,s=getPayloadConfigFromPayload(v,i,o),l=h||i.payload.fill||i.color;return n(`div`,{className:e(`flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground`,c===`dot`&&`items-center`),children:m&&i?.value!==void 0&&i.name?m(i.value,i.name,i,a,i.payload):r(t,{children:[s?.icon?n(s.icon,{}):!u&&n(`div`,{className:e(`shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)`,{"h-2.5 w-2.5":c===`dot`,"w-1":c===`line`,"w-0 border-[1.5px] border-dashed bg-transparent":c===`dashed`,"my-0.5":b&&c===`dashed`}),style:{"--color-bg":l,"--color-border":l}}),r(`div`,{className:e(`flex flex-1 justify-between leading-none`,b?`items-end`:`items-center`),children:[r(`div`,{className:`grid gap-1.5`,children:[b?y:null,n(`span`,{className:`text-muted-foreground`,children:s?.label||i.name})]}),i.value&&n(`span`,{className:`font-mono font-medium text-foreground tabular-nums`,children:i.value.toLocaleString()})]})]})},String(i.dataKey))})})]})}const d=a.Legend;function ChartLegendContent({className:t,hideIcon:i=!1,payload:a,verticalAlign:o=`bottom`,nameKey:s}){let{config:c}=useChart();return a?.length?n(`div`,{className:e(`flex items-center justify-center flex-wrap gap-2`,o===`top`?`pb-3`:`pt-3`,t),children:a.filter(e=>e.type!==`none`).map(t=>{let a=`${s||t.dataKey||`value`}`,o=getPayloadConfigFromPayload(c,t,a);return r(`div`,{className:e(`flex items-center gap-1 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground`),children:[o?.icon&&!i?n(o.icon,{}):n(`div`,{className:`h-3 w-3 shrink-0 rounded-[2px]`,style:{backgroundColor:t.color}}),o?.label]},t.value)})}):null}function getPayloadConfigFromPayload(e,t,n){if(typeof t!=`object`||!t)return;let r=`payload`in t&&typeof t.payload==`object`&&t.payload!==null?t.payload:void 0,i=n;return n in t&&typeof t[n]==`string`?i=t[n]:r&&n in r&&typeof r[n]==`string`&&(i=r[n]),i in e?e[i]:e[n]}export{s as CHART_COLOR_KEYS,ChartContainer,d as ChartLegend,ChartLegendContent,ChartStyle,u as ChartTooltip,ChartTooltipContent,c as DEFAULT_CHART_PALETTE,resolveChartColor};
7
+ `);return/* @__PURE__ */ r(`style`,{children:i})},u=a.Tooltip;function ChartTooltipContent({active:a,payload:o,className:s,indicator:c=`dot`,hideLabel:l=!1,hideIndicator:u=!1,label:d,labelFormatter:f,labelClassName:p,formatter:m,color:h,nameKey:g,labelKey:_}){let{config:v}=useChart(),y=t.useMemo(()=>{if(l||!o?.length)return null;let[t]=o,n=`${_||t?.dataKey||t?.name||`value`}`,i=getPayloadConfigFromPayload(v,t,n),a=!_&&typeof d==`string`?v[d]?.label||d:i?.label;return f?/* @__PURE__ */ r(`div`,{className:e(`font-medium`,p),children:f(a,o)}):a?/* @__PURE__ */ r(`div`,{className:e(`font-medium`,p),children:a}):null},[d,f,o,l,p,v,_]);if(!a||!o?.length)return null;let b=o.length===1&&c!==`dot`;return/* @__PURE__ */ i(`div`,{className:e(`grid min-w-32 items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl`,s),children:[b?null:y,/* @__PURE__ */ r(`div`,{className:`grid gap-1.5`,children:o.filter(e=>e.type!==`none`).map((t,a)=>{let o=`${g||t.name||t.dataKey||`value`}`,s=getPayloadConfigFromPayload(v,t,o),l=h||t.payload.fill||t.color;return/* @__PURE__ */ r(`div`,{className:e(`flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground`,c===`dot`&&`items-center`),children:m&&t?.value!==void 0&&t.name?m(t.value,t.name,t,a,t.payload):/* @__PURE__ */ i(n,{children:[s?.icon?/* @__PURE__ */ r(s.icon,{}):!u&&/* @__PURE__ */ r(`div`,{className:e(`shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)`,{"h-2.5 w-2.5":c===`dot`,"w-1":c===`line`,"w-0 border-[1.5px] border-dashed bg-transparent":c===`dashed`,"my-0.5":b&&c===`dashed`}),style:{"--color-bg":l,"--color-border":l}}),/* @__PURE__ */ i(`div`,{className:e(`flex flex-1 justify-between leading-none`,b?`items-end`:`items-center`),children:[/* @__PURE__ */ i(`div`,{className:`grid gap-1.5`,children:[b?y:null,/* @__PURE__ */ r(`span`,{className:`text-muted-foreground`,children:s?.label||t.name})]}),t.value&&/* @__PURE__ */ r(`span`,{className:`font-mono font-medium text-foreground tabular-nums`,children:t.value.toLocaleString()})]})]})},String(t.dataKey))})})]})}const d=a.Legend;function ChartLegendContent({className:t,hideIcon:n=!1,payload:a,verticalAlign:o=`bottom`,nameKey:s}){let{config:c}=useChart();return a?.length?/* @__PURE__ */ r(`div`,{className:e(`flex items-center justify-center flex-wrap gap-2`,o===`top`?`pb-3`:`pt-3`,t),children:a.filter(e=>e.type!==`none`).map(t=>{let a=`${s||t.dataKey||`value`}`,o=getPayloadConfigFromPayload(c,t,a);return/* @__PURE__ */ i(`div`,{className:e(`flex items-center gap-1 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground`),children:[o?.icon&&!n?/* @__PURE__ */ r(o.icon,{}):/* @__PURE__ */ r(`div`,{className:`h-3 w-3 shrink-0 rounded-[2px]`,style:{backgroundColor:t.color}}),o?.label]},t.value)})}):null}function getPayloadConfigFromPayload(e,t,n){if(typeof t!=`object`||!t)return;let r=`payload`in t&&typeof t.payload==`object`&&t.payload!==null?t.payload:void 0,i=n;return n in t&&typeof t[n]==`string`?i=t[n]:r&&n in r&&typeof r[n]==`string`&&(i=r[n]),i in e?e[i]:e[n]}export{s as CHART_COLOR_KEYS,ChartContainer,d as ChartLegend,ChartLegendContent,ChartStyle,u as ChartTooltip,ChartTooltipContent,c as DEFAULT_CHART_PALETTE,resolveChartColor};
8
8
  //# sourceMappingURL=chart.js.map