@gv-tech/design-system 2.2.0 → 2.4.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.
- package/.release-please-manifest.json +1 -1
- package/CHANGELOG.md +20 -0
- package/dist/App.d.ts +1 -2
- package/dist/App.d.ts.map +1 -1
- package/dist/accordion.cjs.js +2 -0
- package/dist/accordion.cjs.js.map +1 -0
- package/dist/accordion.es.js +38 -0
- package/dist/accordion.es.js.map +1 -0
- package/dist/alert-dialog.cjs.js +2 -0
- package/dist/alert-dialog.cjs.js.map +1 -0
- package/dist/alert-dialog.es.js +64 -0
- package/dist/alert-dialog.es.js.map +1 -0
- package/dist/alert.cjs.js +2 -0
- package/dist/alert.cjs.js.map +1 -0
- package/dist/alert.es.js +32 -0
- package/dist/alert.es.js.map +1 -0
- package/dist/aspect-ratio.cjs.js +2 -0
- package/dist/aspect-ratio.cjs.js.map +1 -0
- package/dist/aspect-ratio.es.js +6 -0
- package/dist/aspect-ratio.es.js.map +1 -0
- package/dist/avatar.cjs.js +2 -0
- package/dist/avatar.cjs.js.map +1 -0
- package/dist/avatar.es.js +29 -0
- package/dist/avatar.es.js.map +1 -0
- package/dist/badge.cjs.js +2 -0
- package/dist/badge.cjs.js.map +1 -0
- package/dist/badge.es.js +26 -0
- package/dist/badge.es.js.map +1 -0
- package/dist/breadcrumb.cjs.js +2 -0
- package/dist/breadcrumb.cjs.js.map +1 -0
- package/dist/breadcrumb.es.js +68 -0
- package/dist/breadcrumb.es.js.map +1 -0
- package/dist/button.cjs.js +2 -0
- package/dist/button.cjs.js.map +1 -0
- package/dist/button.es.js +39 -0
- package/dist/button.es.js.map +1 -0
- package/dist/calendar.cjs.js +2 -0
- package/dist/calendar.cjs.js.map +1 -0
- package/dist/calendar.es.js +132 -0
- package/dist/calendar.es.js.map +1 -0
- package/dist/card.cjs.js +2 -0
- package/dist/card.cjs.js.map +1 -0
- package/dist/card.es.js +34 -0
- package/dist/card.es.js.map +1 -0
- package/dist/carousel.cjs.js +2 -0
- package/dist/carousel.cjs.js.map +1 -0
- package/dist/carousel.es.js +158 -0
- package/dist/carousel.es.js.map +1 -0
- package/dist/chart.cjs.js +8 -0
- package/dist/chart.cjs.js.map +1 -0
- package/dist/chart.es.js +187 -0
- package/dist/chart.es.js.map +1 -0
- package/dist/checkbox.cjs.js +2 -0
- package/dist/checkbox.cjs.js.map +1 -0
- package/dist/checkbox.es.js +20 -0
- package/dist/checkbox.es.js.map +1 -0
- package/dist/collapsible.cjs.js +2 -0
- package/dist/collapsible.cjs.js.map +1 -0
- package/dist/collapsible.es.js +8 -0
- package/dist/collapsible.es.js.map +1 -0
- package/dist/command.cjs.js +2 -0
- package/dist/command.cjs.js.map +1 -0
- package/dist/command.es.js +86 -0
- package/dist/command.es.js.map +1 -0
- package/dist/components/docs/Sidebar.d.ts +2 -1
- package/dist/components/docs/Sidebar.d.ts.map +1 -1
- package/dist/components/ui/command.d.ts.map +1 -1
- package/dist/components/ui/theme-provider.d.ts +4 -0
- package/dist/components/ui/theme-provider.d.ts.map +1 -0
- package/dist/components/ui/theme-provider.test.d.ts +2 -0
- package/dist/components/ui/theme-provider.test.d.ts.map +1 -0
- package/dist/context-menu.cjs.js +2 -0
- package/dist/context-menu.cjs.js.map +1 -0
- package/dist/context-menu.es.js +121 -0
- package/dist/context-menu.es.js.map +1 -0
- package/dist/design-system.css +1 -1
- package/dist/dialog.cjs.js +2 -0
- package/dist/dialog.cjs.js.map +1 -0
- package/dist/dialog.es.js +65 -0
- package/dist/dialog.es.js.map +1 -0
- package/dist/drawer.cjs.js +2 -0
- package/dist/drawer.cjs.js.map +1 -0
- package/dist/drawer.es.js +54 -0
- package/dist/drawer.es.js.map +1 -0
- package/dist/dropdown-menu.cjs.js +2 -0
- package/dist/dropdown-menu.cjs.js.map +1 -0
- package/dist/dropdown-menu.es.js +123 -0
- package/dist/dropdown-menu.es.js.map +1 -0
- package/dist/form.cjs.js +2 -0
- package/dist/form.cjs.js.map +1 -0
- package/dist/form.es.js +83 -0
- package/dist/form.es.js.map +1 -0
- package/dist/hover-card.cjs.js +2 -0
- package/dist/hover-card.cjs.js.map +1 -0
- package/dist/hover-card.es.js +23 -0
- package/dist/hover-card.es.js.map +1 -0
- package/dist/index.cjs.js +1 -7
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +285 -2446
- package/dist/index.es.js.map +1 -1
- package/dist/input.cjs.js +2 -0
- package/dist/input.cjs.js.map +1 -0
- package/dist/input.es.js +22 -0
- package/dist/input.es.js.map +1 -0
- package/dist/label.cjs.js +2 -0
- package/dist/label.cjs.js.map +1 -0
- package/dist/label.es.js +9 -0
- package/dist/label.es.js.map +1 -0
- package/dist/menubar.cjs.js +2 -0
- package/dist/menubar.cjs.js.map +1 -0
- package/dist/menubar.es.js +161 -0
- package/dist/menubar.es.js.map +1 -0
- package/dist/navigation-menu.cjs.js +2 -0
- package/dist/navigation-menu.cjs.js.map +1 -0
- package/dist/navigation-menu.es.js +96 -0
- package/dist/navigation-menu.es.js.map +1 -0
- package/dist/pages/GettingStarted.d.ts.map +1 -1
- package/dist/pages/components/ThemeToggleDocs.d.ts.map +1 -1
- package/dist/pagination.cjs.js +2 -0
- package/dist/pagination.cjs.js.map +1 -0
- package/dist/pagination.es.js +60 -0
- package/dist/pagination.es.js.map +1 -0
- package/dist/popover.cjs.js +2 -0
- package/dist/popover.cjs.js.map +1 -0
- package/dist/popover.es.js +24 -0
- package/dist/popover.es.js.map +1 -0
- package/dist/progress.cjs.js +2 -0
- package/dist/progress.cjs.js.map +1 -0
- package/dist/progress.es.js +24 -0
- package/dist/progress.es.js.map +1 -0
- package/dist/radio-group.cjs.js +2 -0
- package/dist/radio-group.cjs.js.map +1 -0
- package/dist/radio-group.es.js +23 -0
- package/dist/radio-group.es.js.map +1 -0
- package/dist/registry/command.json +1 -1
- package/dist/registry/index.json +14 -0
- package/dist/registry/search.json +1 -1
- package/dist/registry/search.test.json +1 -1
- package/dist/registry/theme-provider.json +13 -0
- package/dist/registry/theme-provider.test.json +13 -0
- package/dist/resizable.cjs.js +2 -0
- package/dist/resizable.cjs.js.map +1 -0
- package/dist/resizable.es.js +34 -0
- package/dist/resizable.es.js.map +1 -0
- package/dist/scroll-area.cjs.js +2 -0
- package/dist/scroll-area.cjs.js.map +1 -0
- package/dist/scroll-area.es.js +30 -0
- package/dist/scroll-area.es.js.map +1 -0
- package/dist/search.cjs.js +2 -0
- package/dist/search.cjs.js.map +1 -0
- package/dist/search.es.js +60 -0
- package/dist/search.es.js.map +1 -0
- package/dist/select.cjs.js +2 -0
- package/dist/select.cjs.js.map +1 -0
- package/dist/select.es.js +100 -0
- package/dist/select.es.js.map +1 -0
- package/dist/separator.cjs.js +2 -0
- package/dist/separator.cjs.js.map +1 -0
- package/dist/separator.es.js +18 -0
- package/dist/separator.es.js.map +1 -0
- package/dist/sheet.cjs.js +2 -0
- package/dist/sheet.cjs.js.map +1 -0
- package/dist/sheet.es.js +64 -0
- package/dist/sheet.es.js.map +1 -0
- package/dist/skeleton.cjs.js +2 -0
- package/dist/skeleton.cjs.js.map +1 -0
- package/dist/skeleton.es.js +9 -0
- package/dist/skeleton.es.js.map +1 -0
- package/dist/slider.cjs.js +2 -0
- package/dist/slider.cjs.js.map +1 -0
- package/dist/slider.es.js +20 -0
- package/dist/slider.es.js.map +1 -0
- package/dist/sonner.cjs.js +2 -0
- package/dist/sonner.cjs.js.map +1 -0
- package/dist/sonner.es.js +25 -0
- package/dist/sonner.es.js.map +1 -0
- package/dist/switch.cjs.js +2 -0
- package/dist/switch.cjs.js.map +1 -0
- package/dist/switch.es.js +27 -0
- package/dist/switch.es.js.map +1 -0
- package/dist/table.cjs.js +2 -0
- package/dist/table.cjs.js.map +1 -0
- package/dist/table.es.js +70 -0
- package/dist/table.es.js.map +1 -0
- package/dist/tabs.cjs.js +2 -0
- package/dist/tabs.cjs.js.map +1 -0
- package/dist/tabs.es.js +46 -0
- package/dist/tabs.es.js.map +1 -0
- package/dist/textarea.cjs.js +2 -0
- package/dist/textarea.cjs.js.map +1 -0
- package/dist/textarea.es.js +21 -0
- package/dist/textarea.es.js.map +1 -0
- package/dist/theme/tokens.d.ts +46 -0
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme-provider.cjs.js +2 -0
- package/dist/theme-provider.cjs.js.map +1 -0
- package/dist/theme-provider.es.js +9 -0
- package/dist/theme-provider.es.js.map +1 -0
- package/dist/theme-toggle-CCUkxY6o.mjs +181 -0
- package/dist/theme-toggle-CCUkxY6o.mjs.map +1 -0
- package/dist/theme-toggle-Dc_nm_32.js +2 -0
- package/dist/theme-toggle-Dc_nm_32.js.map +1 -0
- package/dist/theme-toggle.cjs.js +2 -0
- package/dist/theme-toggle.cjs.js.map +1 -0
- package/dist/theme-toggle.es.js +9 -0
- package/dist/theme-toggle.es.js.map +1 -0
- package/dist/toast.cjs.js +2 -0
- package/dist/toast.cjs.js.map +1 -0
- package/dist/toast.es.js +70 -0
- package/dist/toast.es.js.map +1 -0
- package/dist/toaster-BjPc-lId.js +2 -0
- package/dist/toaster-BjPc-lId.js.map +1 -0
- package/dist/toaster-Bk6a4gIz.mjs +120 -0
- package/dist/toaster-Bk6a4gIz.mjs.map +1 -0
- package/dist/toaster.cjs.js +2 -0
- package/dist/toaster.cjs.js.map +1 -0
- package/dist/toaster.es.js +7 -0
- package/dist/toaster.es.js.map +1 -0
- package/dist/toggle-group.cjs.js +2 -0
- package/dist/toggle-group.cjs.js.map +1 -0
- package/dist/toggle-group.es.js +33 -0
- package/dist/toggle-group.es.js.map +1 -0
- package/dist/toggle.cjs.js +2 -0
- package/dist/toggle.cjs.js.map +1 -0
- package/dist/toggle.es.js +29 -0
- package/dist/toggle.es.js.map +1 -0
- package/dist/tooltip.cjs.js +2 -0
- package/dist/tooltip.cjs.js.map +1 -0
- package/dist/tooltip.es.js +23 -0
- package/dist/tooltip.es.js.map +1 -0
- package/dist/utils-C9QGdMaH.mjs +8 -0
- package/dist/utils-C9QGdMaH.mjs.map +1 -0
- package/dist/utils-CUFNKXRW.js +2 -0
- package/dist/utils-CUFNKXRW.js.map +1 -0
- package/dist/{vendor-BLvpSabH.mjs → vendor-CCQzmGyD.mjs} +1131 -1160
- package/dist/vendor-CCQzmGyD.mjs.map +1 -0
- package/dist/{vendor-n4WFhtJT.js → vendor-CIyDEr7H.js} +12 -12
- package/dist/vendor-CIyDEr7H.js.map +1 -0
- package/package.json +251 -5
- package/scripts/sync-exports.ts +52 -0
- package/scripts/sync-tokens.ts +73 -0
- package/scripts/{validate.js → validate.ts} +14 -8
- package/src/App.tsx +64 -27
- package/src/components/docs/ComponentShowcase.tsx +5 -5
- package/src/components/docs/Sidebar.tsx +3 -2
- package/src/components/ui/command.tsx +3 -1
- package/src/components/ui/search.test.tsx +2 -0
- package/src/components/ui/search.tsx +3 -3
- package/src/components/ui/theme-provider.test.tsx +47 -0
- package/src/components/ui/theme-provider.tsx +12 -0
- package/src/globals.css +22 -0
- package/src/index.ts +1 -0
- package/src/pages/ColorTokensDocs.tsx +4 -4
- package/src/pages/GettingStarted.tsx +43 -10
- package/src/pages/components/ThemeToggleDocs.tsx +155 -8
- package/src/theme/tokens.ts +60 -38
- package/vite.config.ts +27 -4
- package/dist/vendor-BLvpSabH.mjs.map +0 -1
- package/dist/vendor-n4WFhtJT.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.cjs.js","sources":["../src/components/ui/calendar.tsx"],"sourcesContent":["import { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';\nimport * as React from 'react';\nimport { DayButton, DayPicker, getDefaultClassNames } from 'react-day-picker';\n\nimport { Button, buttonVariants } from '@/components/ui/button';\nimport { cn } from '@/lib/utils';\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = 'label',\n buttonVariant = 'ghost',\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>['variant'];\n}) {\n const defaultClassNames = getDefaultClassNames();\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n 'bg-background group/calendar p-3 [--cell-size:2.5rem] [[data-slot=card-content]_&]:bg-transparent [[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 'relative',\n className,\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) => date.toLocaleString('default', { month: 'short' }),\n ...formatters,\n }}\n classNames={{\n root: cn('w-fit', defaultClassNames.root),\n months: cn('relative flex flex-col gap-4 md:flex-row', defaultClassNames.months),\n month: cn('flex w-full flex-col gap-4', defaultClassNames.month),\n nav: cn(\n 'absolute inset-x-0 top-2 flex items-center justify-between pointer-events-none px-2',\n defaultClassNames.nav,\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n 'h-7 w-7 select-none p-0 aria-disabled:opacity-50 pointer-events-auto',\n defaultClassNames.button_previous,\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n 'h-7 w-7 select-none p-0 aria-disabled:opacity-50 pointer-events-auto',\n defaultClassNames.button_next,\n ),\n month_caption: cn(\n 'flex h-[--cell-size] w-full items-center justify-center text-sm font-medium',\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(\n 'has-focus:border-ring border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] relative rounded-md border',\n defaultClassNames.dropdown_root,\n ),\n dropdown: cn('bg-popover absolute inset-0 opacity-0', defaultClassNames.dropdown),\n caption_label: cn(\n 'select-none font-medium',\n captionLayout === 'label'\n ? 'text-sm'\n : '[&>svg]:text-muted-foreground flex h-8 items-center gap-1 rounded-md pl-2 pr-1 text-sm [&>svg]:size-3.5',\n defaultClassNames.caption_label,\n ),\n table: 'w-full border-collapse grow',\n weekdays: cn('flex', defaultClassNames.weekdays),\n weekday: cn(\n 'text-muted-foreground pt-1 flex-1 select-none rounded-md text-[0.8rem] font-normal uppercase',\n defaultClassNames.weekday,\n ),\n week: cn('flex w-full mt-2', defaultClassNames.week),\n week_number_header: cn('w-[--cell-size] select-none', defaultClassNames.week_number_header),\n week_number: cn('text-muted-foreground select-none text-[0.8rem]', defaultClassNames.week_number),\n day: cn(\n 'group/day relative flex aspect-square h-10 w-10 select-none items-center justify-center p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md',\n defaultClassNames.day,\n ),\n range_start: cn('bg-accent rounded-l-md', defaultClassNames.range_start),\n range_middle: cn('rounded-none', defaultClassNames.range_middle),\n range_end: cn('bg-accent rounded-r-md', defaultClassNames.range_end),\n today: cn(\n 'bg-accent text-accent-foreground rounded-md 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 <div data-slot=\"calendar\" ref={rootRef} className={cn(className)} {...props} />;\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === 'left') {\n return <ChevronLeftIcon className={cn('size-4', className)} {...props} />;\n }\n\n if (orientation === 'right') {\n return <ChevronRightIcon className={cn('size-4', className)} {...props} />;\n }\n\n return <ChevronDownIcon className={cn('size-4', className)} {...props} />;\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-[--cell-size] items-center justify-center text-center\">{children}</div>\n </td>\n );\n },\n ...components,\n }}\n {...props}\n />\n );\n}\n\nfunction CalendarDayButton({ className, day, modifiers, ...props }: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames();\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 data-day={day.date.toLocaleDateString()}\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 'data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 flex aspect-square h-full w-full min-w-[--cell-size] items-center justify-center font-normal leading-none data-[range-end=true]:rounded-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] [&>span]:text-xs [&>span]:opacity-70',\n defaultClassNames.day,\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Calendar, CalendarDayButton };\n"],"names":["Calendar","className","classNames","showOutsideDays","captionLayout","buttonVariant","formatters","components","props","defaultClassNames","getDefaultClassNames","jsx","DayPicker","cn","date","buttonVariants","rootRef","orientation","ChevronLeftIcon","ChevronRightIcon","ChevronDownIcon","CalendarDayButton","children","day","modifiers","ref","React","Button"],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { m as f, j as n, n as b, o as w, l as h, C as y } from "./vendor-CCQzmGyD.mjs";
|
|
2
|
+
import * as g from "react";
|
|
3
|
+
import { buttonVariants as m, Button as _ } from "./button.es.js";
|
|
4
|
+
import { c as e } from "./utils-C9QGdMaH.mjs";
|
|
5
|
+
function N({
|
|
6
|
+
className: c,
|
|
7
|
+
classNames: i,
|
|
8
|
+
showOutsideDays: r = !0,
|
|
9
|
+
captionLayout: s = "label",
|
|
10
|
+
buttonVariant: l = "ghost",
|
|
11
|
+
formatters: u,
|
|
12
|
+
components: p,
|
|
13
|
+
...x
|
|
14
|
+
}) {
|
|
15
|
+
const t = f();
|
|
16
|
+
return /* @__PURE__ */ n.jsx(
|
|
17
|
+
b,
|
|
18
|
+
{
|
|
19
|
+
showOutsideDays: r,
|
|
20
|
+
className: e(
|
|
21
|
+
"bg-background group/calendar p-3 [--cell-size:2.5rem] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",
|
|
22
|
+
String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
|
|
23
|
+
String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
|
|
24
|
+
"relative",
|
|
25
|
+
c
|
|
26
|
+
),
|
|
27
|
+
captionLayout: s,
|
|
28
|
+
formatters: {
|
|
29
|
+
formatMonthDropdown: (a) => a.toLocaleString("default", { month: "short" }),
|
|
30
|
+
...u
|
|
31
|
+
},
|
|
32
|
+
classNames: {
|
|
33
|
+
root: e("w-fit", t.root),
|
|
34
|
+
months: e("relative flex flex-col gap-4 md:flex-row", t.months),
|
|
35
|
+
month: e("flex w-full flex-col gap-4", t.month),
|
|
36
|
+
nav: e(
|
|
37
|
+
"absolute inset-x-0 top-2 flex items-center justify-between pointer-events-none px-2",
|
|
38
|
+
t.nav
|
|
39
|
+
),
|
|
40
|
+
button_previous: e(
|
|
41
|
+
m({ variant: l }),
|
|
42
|
+
"h-7 w-7 select-none p-0 aria-disabled:opacity-50 pointer-events-auto",
|
|
43
|
+
t.button_previous
|
|
44
|
+
),
|
|
45
|
+
button_next: e(
|
|
46
|
+
m({ variant: l }),
|
|
47
|
+
"h-7 w-7 select-none p-0 aria-disabled:opacity-50 pointer-events-auto",
|
|
48
|
+
t.button_next
|
|
49
|
+
),
|
|
50
|
+
month_caption: e(
|
|
51
|
+
"flex h-[--cell-size] w-full items-center justify-center text-sm font-medium",
|
|
52
|
+
t.month_caption
|
|
53
|
+
),
|
|
54
|
+
dropdowns: e(
|
|
55
|
+
"flex h-[--cell-size] w-full items-center justify-center gap-1.5 text-sm font-medium",
|
|
56
|
+
t.dropdowns
|
|
57
|
+
),
|
|
58
|
+
dropdown_root: e(
|
|
59
|
+
"has-focus:border-ring border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] relative rounded-md border",
|
|
60
|
+
t.dropdown_root
|
|
61
|
+
),
|
|
62
|
+
dropdown: e("bg-popover absolute inset-0 opacity-0", t.dropdown),
|
|
63
|
+
caption_label: e(
|
|
64
|
+
"select-none font-medium",
|
|
65
|
+
s === "label" ? "text-sm" : "[&>svg]:text-muted-foreground flex h-8 items-center gap-1 rounded-md pl-2 pr-1 text-sm [&>svg]:size-3.5",
|
|
66
|
+
t.caption_label
|
|
67
|
+
),
|
|
68
|
+
table: "w-full border-collapse grow",
|
|
69
|
+
weekdays: e("flex", t.weekdays),
|
|
70
|
+
weekday: e(
|
|
71
|
+
"text-muted-foreground pt-1 flex-1 select-none rounded-md text-[0.8rem] font-normal uppercase",
|
|
72
|
+
t.weekday
|
|
73
|
+
),
|
|
74
|
+
week: e("flex w-full mt-2", t.week),
|
|
75
|
+
week_number_header: e("w-[--cell-size] select-none", t.week_number_header),
|
|
76
|
+
week_number: e("text-muted-foreground select-none text-[0.8rem]", t.week_number),
|
|
77
|
+
day: e(
|
|
78
|
+
"group/day relative flex aspect-square h-10 w-10 select-none items-center justify-center p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md",
|
|
79
|
+
t.day
|
|
80
|
+
),
|
|
81
|
+
range_start: e("bg-accent rounded-l-md", t.range_start),
|
|
82
|
+
range_middle: e("rounded-none", t.range_middle),
|
|
83
|
+
range_end: e("bg-accent rounded-r-md", t.range_end),
|
|
84
|
+
today: e(
|
|
85
|
+
"bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",
|
|
86
|
+
t.today
|
|
87
|
+
),
|
|
88
|
+
outside: e("text-muted-foreground aria-selected:text-muted-foreground", t.outside),
|
|
89
|
+
disabled: e("text-muted-foreground opacity-50", t.disabled),
|
|
90
|
+
hidden: e("invisible", t.hidden),
|
|
91
|
+
...i
|
|
92
|
+
},
|
|
93
|
+
components: {
|
|
94
|
+
Root: ({ className: a, rootRef: d, ...o }) => /* @__PURE__ */ n.jsx("div", { "data-slot": "calendar", ref: d, className: e(a), ...o }),
|
|
95
|
+
Chevron: ({ className: a, orientation: d, ...o }) => d === "left" ? /* @__PURE__ */ n.jsx(w, { className: e("size-4", a), ...o }) : d === "right" ? /* @__PURE__ */ n.jsx(h, { className: e("size-4", a), ...o }) : /* @__PURE__ */ n.jsx(y, { className: e("size-4", a), ...o }),
|
|
96
|
+
DayButton: v,
|
|
97
|
+
WeekNumber: ({ children: a, ...d }) => /* @__PURE__ */ n.jsx("td", { ...d, children: /* @__PURE__ */ n.jsx("div", { className: "flex size-[--cell-size] items-center justify-center text-center", children: a }) }),
|
|
98
|
+
...p
|
|
99
|
+
},
|
|
100
|
+
...x
|
|
101
|
+
}
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
function v({ className: c, day: i, modifiers: r, ...s }) {
|
|
105
|
+
const l = f(), u = g.useRef(null);
|
|
106
|
+
return g.useEffect(() => {
|
|
107
|
+
r.focused && u.current?.focus();
|
|
108
|
+
}, [r.focused]), /* @__PURE__ */ n.jsx(
|
|
109
|
+
_,
|
|
110
|
+
{
|
|
111
|
+
ref: u,
|
|
112
|
+
variant: "ghost",
|
|
113
|
+
size: "icon",
|
|
114
|
+
"data-day": i.date.toLocaleDateString(),
|
|
115
|
+
"data-selected-single": r.selected && !r.range_start && !r.range_end && !r.range_middle,
|
|
116
|
+
"data-range-start": r.range_start,
|
|
117
|
+
"data-range-end": r.range_end,
|
|
118
|
+
"data-range-middle": r.range_middle,
|
|
119
|
+
className: e(
|
|
120
|
+
"data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 flex aspect-square h-full w-full min-w-[--cell-size] items-center justify-center font-normal leading-none data-[range-end=true]:rounded-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] [&>span]:text-xs [&>span]:opacity-70",
|
|
121
|
+
l.day,
|
|
122
|
+
c
|
|
123
|
+
),
|
|
124
|
+
...s
|
|
125
|
+
}
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
export {
|
|
129
|
+
N as Calendar,
|
|
130
|
+
v as CalendarDayButton
|
|
131
|
+
};
|
|
132
|
+
//# sourceMappingURL=calendar.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.es.js","sources":["../src/components/ui/calendar.tsx"],"sourcesContent":["import { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';\nimport * as React from 'react';\nimport { DayButton, DayPicker, getDefaultClassNames } from 'react-day-picker';\n\nimport { Button, buttonVariants } from '@/components/ui/button';\nimport { cn } from '@/lib/utils';\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = 'label',\n buttonVariant = 'ghost',\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>['variant'];\n}) {\n const defaultClassNames = getDefaultClassNames();\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n 'bg-background group/calendar p-3 [--cell-size:2.5rem] [[data-slot=card-content]_&]:bg-transparent [[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 'relative',\n className,\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) => date.toLocaleString('default', { month: 'short' }),\n ...formatters,\n }}\n classNames={{\n root: cn('w-fit', defaultClassNames.root),\n months: cn('relative flex flex-col gap-4 md:flex-row', defaultClassNames.months),\n month: cn('flex w-full flex-col gap-4', defaultClassNames.month),\n nav: cn(\n 'absolute inset-x-0 top-2 flex items-center justify-between pointer-events-none px-2',\n defaultClassNames.nav,\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n 'h-7 w-7 select-none p-0 aria-disabled:opacity-50 pointer-events-auto',\n defaultClassNames.button_previous,\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n 'h-7 w-7 select-none p-0 aria-disabled:opacity-50 pointer-events-auto',\n defaultClassNames.button_next,\n ),\n month_caption: cn(\n 'flex h-[--cell-size] w-full items-center justify-center text-sm font-medium',\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(\n 'has-focus:border-ring border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] relative rounded-md border',\n defaultClassNames.dropdown_root,\n ),\n dropdown: cn('bg-popover absolute inset-0 opacity-0', defaultClassNames.dropdown),\n caption_label: cn(\n 'select-none font-medium',\n captionLayout === 'label'\n ? 'text-sm'\n : '[&>svg]:text-muted-foreground flex h-8 items-center gap-1 rounded-md pl-2 pr-1 text-sm [&>svg]:size-3.5',\n defaultClassNames.caption_label,\n ),\n table: 'w-full border-collapse grow',\n weekdays: cn('flex', defaultClassNames.weekdays),\n weekday: cn(\n 'text-muted-foreground pt-1 flex-1 select-none rounded-md text-[0.8rem] font-normal uppercase',\n defaultClassNames.weekday,\n ),\n week: cn('flex w-full mt-2', defaultClassNames.week),\n week_number_header: cn('w-[--cell-size] select-none', defaultClassNames.week_number_header),\n week_number: cn('text-muted-foreground select-none text-[0.8rem]', defaultClassNames.week_number),\n day: cn(\n 'group/day relative flex aspect-square h-10 w-10 select-none items-center justify-center p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md',\n defaultClassNames.day,\n ),\n range_start: cn('bg-accent rounded-l-md', defaultClassNames.range_start),\n range_middle: cn('rounded-none', defaultClassNames.range_middle),\n range_end: cn('bg-accent rounded-r-md', defaultClassNames.range_end),\n today: cn(\n 'bg-accent text-accent-foreground rounded-md 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 <div data-slot=\"calendar\" ref={rootRef} className={cn(className)} {...props} />;\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === 'left') {\n return <ChevronLeftIcon className={cn('size-4', className)} {...props} />;\n }\n\n if (orientation === 'right') {\n return <ChevronRightIcon className={cn('size-4', className)} {...props} />;\n }\n\n return <ChevronDownIcon className={cn('size-4', className)} {...props} />;\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-[--cell-size] items-center justify-center text-center\">{children}</div>\n </td>\n );\n },\n ...components,\n }}\n {...props}\n />\n );\n}\n\nfunction CalendarDayButton({ className, day, modifiers, ...props }: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames();\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 data-day={day.date.toLocaleDateString()}\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 'data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 flex aspect-square h-full w-full min-w-[--cell-size] items-center justify-center font-normal leading-none data-[range-end=true]:rounded-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] [&>span]:text-xs [&>span]:opacity-70',\n defaultClassNames.day,\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Calendar, CalendarDayButton };\n"],"names":["Calendar","className","classNames","showOutsideDays","captionLayout","buttonVariant","formatters","components","props","defaultClassNames","getDefaultClassNames","jsx","DayPicker","cn","date","buttonVariants","rootRef","orientation","ChevronLeftIcon","ChevronRightIcon","ChevronDownIcon","CalendarDayButton","children","day","modifiers","ref","React","Button"],"mappings":";;;;AAOA,SAASA,EAAS;AAAA,EAChB,WAAAC;AAAA,EACA,YAAAC;AAAA,EACA,iBAAAC,IAAkB;AAAA,EAClB,eAAAC,IAAgB;AAAA,EAChB,eAAAC,IAAgB;AAAA,EAChB,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,GAAGC;AACL,GAEG;AACD,QAAMC,IAAoBC,EAAA;AAE1B,SACEC,gBAAAA,EAAAA;AAAAA,IAACC;AAAA,IAAA;AAAA,MACC,iBAAAT;AAAA,MACA,WAAWU;AAAA,QACT;AAAA,QACA,OAAO;AAAA,QACP,OAAO;AAAA,QACP;AAAA,QACAZ;AAAA,MAAA;AAAA,MAEF,eAAAG;AAAA,MACA,YAAY;AAAA,QACV,qBAAqB,CAACU,MAASA,EAAK,eAAe,WAAW,EAAE,OAAO,SAAS;AAAA,QAChF,GAAGR;AAAA,MAAA;AAAA,MAEL,YAAY;AAAA,QACV,MAAMO,EAAG,SAASJ,EAAkB,IAAI;AAAA,QACxC,QAAQI,EAAG,4CAA4CJ,EAAkB,MAAM;AAAA,QAC/E,OAAOI,EAAG,8BAA8BJ,EAAkB,KAAK;AAAA,QAC/D,KAAKI;AAAA,UACH;AAAA,UACAJ,EAAkB;AAAA,QAAA;AAAA,QAEpB,iBAAiBI;AAAA,UACfE,EAAe,EAAE,SAASV,GAAe;AAAA,UACzC;AAAA,UACAI,EAAkB;AAAA,QAAA;AAAA,QAEpB,aAAaI;AAAA,UACXE,EAAe,EAAE,SAASV,GAAe;AAAA,UACzC;AAAA,UACAI,EAAkB;AAAA,QAAA;AAAA,QAEpB,eAAeI;AAAA,UACb;AAAA,UACAJ,EAAkB;AAAA,QAAA;AAAA,QAEpB,WAAWI;AAAA,UACT;AAAA,UACAJ,EAAkB;AAAA,QAAA;AAAA,QAEpB,eAAeI;AAAA,UACb;AAAA,UACAJ,EAAkB;AAAA,QAAA;AAAA,QAEpB,UAAUI,EAAG,yCAAyCJ,EAAkB,QAAQ;AAAA,QAChF,eAAeI;AAAA,UACb;AAAA,UACAT,MAAkB,UACd,YACA;AAAA,UACJK,EAAkB;AAAA,QAAA;AAAA,QAEpB,OAAO;AAAA,QACP,UAAUI,EAAG,QAAQJ,EAAkB,QAAQ;AAAA,QAC/C,SAASI;AAAA,UACP;AAAA,UACAJ,EAAkB;AAAA,QAAA;AAAA,QAEpB,MAAMI,EAAG,oBAAoBJ,EAAkB,IAAI;AAAA,QACnD,oBAAoBI,EAAG,+BAA+BJ,EAAkB,kBAAkB;AAAA,QAC1F,aAAaI,EAAG,mDAAmDJ,EAAkB,WAAW;AAAA,QAChG,KAAKI;AAAA,UACH;AAAA,UACAJ,EAAkB;AAAA,QAAA;AAAA,QAEpB,aAAaI,EAAG,0BAA0BJ,EAAkB,WAAW;AAAA,QACvE,cAAcI,EAAG,gBAAgBJ,EAAkB,YAAY;AAAA,QAC/D,WAAWI,EAAG,0BAA0BJ,EAAkB,SAAS;AAAA,QACnE,OAAOI;AAAA,UACL;AAAA,UACAJ,EAAkB;AAAA,QAAA;AAAA,QAEpB,SAASI,EAAG,6DAA6DJ,EAAkB,OAAO;AAAA,QAClG,UAAUI,EAAG,oCAAoCJ,EAAkB,QAAQ;AAAA,QAC3E,QAAQI,EAAG,aAAaJ,EAAkB,MAAM;AAAA,QAChD,GAAGP;AAAA,MAAA;AAAA,MAEL,YAAY;AAAA,QACV,MAAM,CAAC,EAAE,WAAAD,GAAW,SAAAe,GAAS,GAAGR,QACvBG,gBAAAA,EAAAA,IAAC,OAAA,EAAI,aAAU,YAAW,KAAKK,GAAS,WAAWH,EAAGZ,CAAS,GAAI,GAAGO,EAAAA,CAAO;AAAA,QAEtF,SAAS,CAAC,EAAE,WAAAP,GAAW,aAAAgB,GAAa,GAAGT,QACjCS,MAAgB,SACXN,gBAAAA,EAAAA,IAACO,KAAgB,WAAWL,EAAG,UAAUZ,CAAS,GAAI,GAAGO,GAAO,IAGrES,MAAgB,UACXN,gBAAAA,EAAAA,IAACQ,KAAiB,WAAWN,EAAG,UAAUZ,CAAS,GAAI,GAAGO,GAAO,IAGnEG,gBAAAA,EAAAA,IAACS,KAAgB,WAAWP,EAAG,UAAUZ,CAAS,GAAI,GAAGO,GAAO;AAAA,QAEzE,WAAWa;AAAA,QACX,YAAY,CAAC,EAAE,UAAAC,GAAU,GAAGd,QAExBG,gBAAAA,EAAAA,IAAC,QAAI,GAAGH,GACN,gCAAC,OAAA,EAAI,WAAU,mEAAmE,UAAAc,EAAA,CAAS,EAAA,CAC7F;AAAA,QAGJ,GAAGf;AAAA,MAAA;AAAA,MAEJ,GAAGC;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAASa,EAAkB,EAAE,WAAApB,GAAW,KAAAsB,GAAK,WAAAC,GAAW,GAAGhB,KAAiD;AAC1G,QAAMC,IAAoBC,EAAA,GAEpBe,IAAMC,EAAM,OAA0B,IAAI;AAChD,SAAAA,EAAM,UAAU,MAAM;AACpB,IAAIF,EAAU,WAASC,EAAI,SAAS,MAAA;AAAA,EACtC,GAAG,CAACD,EAAU,OAAO,CAAC,GAGpBb,gBAAAA,EAAAA;AAAAA,IAACgB;AAAA,IAAA;AAAA,MACC,KAAAF;AAAA,MACA,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,YAAUF,EAAI,KAAK,mBAAA;AAAA,MACnB,wBACEC,EAAU,YAAY,CAACA,EAAU,eAAe,CAACA,EAAU,aAAa,CAACA,EAAU;AAAA,MAErF,oBAAkBA,EAAU;AAAA,MAC5B,kBAAgBA,EAAU;AAAA,MAC1B,qBAAmBA,EAAU;AAAA,MAC7B,WAAWX;AAAA,QACT;AAAA,QACAJ,EAAkB;AAAA,QAClBR;AAAA,MAAA;AAAA,MAED,GAAGO;AAAA,IAAA;AAAA,EAAA;AAGV;"}
|
package/dist/card.cjs.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./vendor-CIyDEr7H.js"),m=require("react"),s=require("./utils-CUFNKXRW.js");function u(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const d=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,d.get?d:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const o=u(m),n=o.forwardRef(({className:e,...r},t)=>a.jsxRuntimeExports.jsx("div",{ref:t,className:s.cn("rounded-xl border bg-card text-card-foreground shadow",e),...r}));n.displayName="Card";const c=o.forwardRef(({className:e,...r},t)=>a.jsxRuntimeExports.jsx("div",{ref:t,className:s.cn("flex flex-col space-y-1.5 p-6",e),...r}));c.displayName="CardHeader";const i=o.forwardRef(({className:e,...r},t)=>a.jsxRuntimeExports.jsx("div",{ref:t,className:s.cn("font-semibold leading-none tracking-tight",e),...r}));i.displayName="CardTitle";const l=o.forwardRef(({className:e,...r},t)=>a.jsxRuntimeExports.jsx("div",{ref:t,className:s.cn("text-sm text-muted-foreground",e),...r}));l.displayName="CardDescription";const f=o.forwardRef(({className:e,...r},t)=>a.jsxRuntimeExports.jsx("div",{ref:t,className:s.cn("p-6 pt-0",e),...r}));f.displayName="CardContent";const p=o.forwardRef(({className:e,...r},t)=>a.jsxRuntimeExports.jsx("div",{ref:t,className:s.cn("flex items-center p-6 pt-0",e),...r}));p.displayName="CardFooter";exports.Card=n;exports.CardContent=f;exports.CardDescription=l;exports.CardFooter=p;exports.CardHeader=c;exports.CardTitle=i;
|
|
2
|
+
//# sourceMappingURL=card.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card.cjs.js","sources":["../src/components/ui/card.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('rounded-xl border bg-card text-card-foreground shadow', className)} {...props} />\n));\nCard.displayName = 'Card';\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\n ),\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('font-semibold leading-none tracking-tight', className)} {...props} />\n ),\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n ),\n);\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />,\n);\nCardContent.displayName = 'CardContent';\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center p-6 pt-0', className)} {...props} />\n ),\n);\nCardFooter.displayName = 'CardFooter';\n\nexport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };\n"],"names":["Card","React","className","props","ref","cn","CardHeader","jsx","CardTitle","CardDescription","CardContent","CardFooter"],"mappings":"scAIMA,EAAOC,EAAM,WAAiE,CAAC,CAAE,UAAAC,EAAW,GAAGC,GAASC,4BAC3G,MAAA,CAAI,IAAAA,EAAU,UAAWC,EAAAA,GAAG,wDAAyDH,CAAS,EAAI,GAAGC,EAAO,CAC9G,EACDH,EAAK,YAAc,OAEnB,MAAMM,EAAaL,EAAM,WACvB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IACxBG,EAAAA,kBAAAA,IAAC,MAAA,CAAI,IAAAH,EAAU,UAAWC,EAAAA,GAAG,gCAAiCH,CAAS,EAAI,GAAGC,CAAA,CAAO,CAEzF,EACAG,EAAW,YAAc,aAEzB,MAAME,EAAYP,EAAM,WACtB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IACxBG,EAAAA,kBAAAA,IAAC,MAAA,CAAI,IAAAH,EAAU,UAAWC,EAAAA,GAAG,4CAA6CH,CAAS,EAAI,GAAGC,CAAA,CAAO,CAErG,EACAK,EAAU,YAAc,YAExB,MAAMC,EAAkBR,EAAM,WAC5B,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IACxBG,EAAAA,kBAAAA,IAAC,MAAA,CAAI,IAAAH,EAAU,UAAWC,EAAAA,GAAG,gCAAiCH,CAAS,EAAI,GAAGC,CAAA,CAAO,CAEzF,EACAM,EAAgB,YAAc,kBAE9B,MAAMC,EAAcT,EAAM,WACxB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAAQG,EAAAA,kBAAAA,IAAC,MAAA,CAAI,IAAAH,EAAU,UAAWC,EAAAA,GAAG,WAAYH,CAAS,EAAI,GAAGC,CAAA,CAAO,CACpG,EACAO,EAAY,YAAc,cAE1B,MAAMC,EAAaV,EAAM,WACvB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IACxBG,EAAAA,kBAAAA,IAAC,MAAA,CAAI,IAAAH,EAAU,UAAWC,EAAAA,GAAG,6BAA8BH,CAAS,EAAI,GAAGC,CAAA,CAAO,CAEtF,EACAQ,EAAW,YAAc"}
|
package/dist/card.es.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { j as d } from "./vendor-CCQzmGyD.mjs";
|
|
2
|
+
import * as s from "react";
|
|
3
|
+
import { c as o } from "./utils-C9QGdMaH.mjs";
|
|
4
|
+
const t = s.forwardRef(({ className: a, ...e }, r) => /* @__PURE__ */ d.jsx("div", { ref: r, className: o("rounded-xl border bg-card text-card-foreground shadow", a), ...e }));
|
|
5
|
+
t.displayName = "Card";
|
|
6
|
+
const i = s.forwardRef(
|
|
7
|
+
({ className: a, ...e }, r) => /* @__PURE__ */ d.jsx("div", { ref: r, className: o("flex flex-col space-y-1.5 p-6", a), ...e })
|
|
8
|
+
);
|
|
9
|
+
i.displayName = "CardHeader";
|
|
10
|
+
const c = s.forwardRef(
|
|
11
|
+
({ className: a, ...e }, r) => /* @__PURE__ */ d.jsx("div", { ref: r, className: o("font-semibold leading-none tracking-tight", a), ...e })
|
|
12
|
+
);
|
|
13
|
+
c.displayName = "CardTitle";
|
|
14
|
+
const m = s.forwardRef(
|
|
15
|
+
({ className: a, ...e }, r) => /* @__PURE__ */ d.jsx("div", { ref: r, className: o("text-sm text-muted-foreground", a), ...e })
|
|
16
|
+
);
|
|
17
|
+
m.displayName = "CardDescription";
|
|
18
|
+
const n = s.forwardRef(
|
|
19
|
+
({ className: a, ...e }, r) => /* @__PURE__ */ d.jsx("div", { ref: r, className: o("p-6 pt-0", a), ...e })
|
|
20
|
+
);
|
|
21
|
+
n.displayName = "CardContent";
|
|
22
|
+
const f = s.forwardRef(
|
|
23
|
+
({ className: a, ...e }, r) => /* @__PURE__ */ d.jsx("div", { ref: r, className: o("flex items-center p-6 pt-0", a), ...e })
|
|
24
|
+
);
|
|
25
|
+
f.displayName = "CardFooter";
|
|
26
|
+
export {
|
|
27
|
+
t as Card,
|
|
28
|
+
n as CardContent,
|
|
29
|
+
m as CardDescription,
|
|
30
|
+
f as CardFooter,
|
|
31
|
+
i as CardHeader,
|
|
32
|
+
c as CardTitle
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=card.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card.es.js","sources":["../src/components/ui/card.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('rounded-xl border bg-card text-card-foreground shadow', className)} {...props} />\n));\nCard.displayName = 'Card';\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\n ),\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('font-semibold leading-none tracking-tight', className)} {...props} />\n ),\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n ),\n);\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />,\n);\nCardContent.displayName = 'CardContent';\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center p-6 pt-0', className)} {...props} />\n ),\n);\nCardFooter.displayName = 'CardFooter';\n\nexport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };\n"],"names":["Card","React","className","props","ref","cn","CardHeader","jsx","CardTitle","CardDescription","CardContent","CardFooter"],"mappings":";;;AAIA,MAAMA,IAAOC,EAAM,WAAiE,CAAC,EAAE,WAAAC,GAAW,GAAGC,KAASC,4BAC3G,OAAA,EAAI,KAAAA,GAAU,WAAWC,EAAG,yDAAyDH,CAAS,GAAI,GAAGC,GAAO,CAC9G;AACDH,EAAK,cAAc;AAEnB,MAAMM,IAAaL,EAAM;AAAA,EACvB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MACxBG,gBAAAA,EAAAA,IAAC,OAAA,EAAI,KAAAH,GAAU,WAAWC,EAAG,iCAAiCH,CAAS,GAAI,GAAGC,EAAA,CAAO;AAEzF;AACAG,EAAW,cAAc;AAEzB,MAAME,IAAYP,EAAM;AAAA,EACtB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MACxBG,gBAAAA,EAAAA,IAAC,OAAA,EAAI,KAAAH,GAAU,WAAWC,EAAG,6CAA6CH,CAAS,GAAI,GAAGC,EAAA,CAAO;AAErG;AACAK,EAAU,cAAc;AAExB,MAAMC,IAAkBR,EAAM;AAAA,EAC5B,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MACxBG,gBAAAA,EAAAA,IAAC,OAAA,EAAI,KAAAH,GAAU,WAAWC,EAAG,iCAAiCH,CAAS,GAAI,GAAGC,EAAA,CAAO;AAEzF;AACAM,EAAgB,cAAc;AAE9B,MAAMC,IAAcT,EAAM;AAAA,EACxB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAAQG,gBAAAA,EAAAA,IAAC,OAAA,EAAI,KAAAH,GAAU,WAAWC,EAAG,YAAYH,CAAS,GAAI,GAAGC,EAAA,CAAO;AACpG;AACAO,EAAY,cAAc;AAE1B,MAAMC,IAAaV,EAAM;AAAA,EACvB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MACxBG,gBAAAA,EAAAA,IAAC,OAAA,EAAI,KAAAH,GAAU,WAAWC,EAAG,8BAA8BH,CAAS,GAAI,GAAGC,EAAA,CAAO;AAEtF;AACAQ,EAAW,cAAc;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("./vendor-CIyDEr7H.js"),z=require("react"),j=require("./button.cjs.js"),d=require("./utils-CUFNKXRW.js");function D(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const o=D(z),N=o.createContext(null);function m(){const e=o.useContext(N);if(!e)throw new Error("useCarousel must be used within a <Carousel />");return e}const h=o.forwardRef(({orientation:e="horizontal",opts:r,setApi:t,plugins:n,className:c,children:u,...i},x)=>{const[y,s]=l.useEmblaCarousel({...r,axis:e==="horizontal"?"x":"y"},n),[E,P]=o.useState(!1),[S,g]=o.useState(!1),f=o.useCallback(a=>{a&&(P(a.canScrollPrev()),g(a.canScrollNext()))},[]),C=o.useCallback(()=>{s?.scrollPrev()},[s]),p=o.useCallback(()=>{s?.scrollNext()},[s]),k=o.useCallback(a=>{a.key==="ArrowLeft"?(a.preventDefault(),C()):a.key==="ArrowRight"&&(a.preventDefault(),p())},[C,p]);return o.useEffect(()=>{!s||!t||t(s)},[s,t]),o.useEffect(()=>{if(s)return f(s),s.on("reInit",f),s.on("select",f),()=>{s?.off("select",f)}},[s,f]),l.jsxRuntimeExports.jsx(N.Provider,{value:{carouselRef:y,api:s,opts:r,orientation:e||(r?.axis==="y"?"vertical":"horizontal"),scrollPrev:C,scrollNext:p,canScrollPrev:E,canScrollNext:S},children:l.jsxRuntimeExports.jsx("div",{ref:x,onKeyDownCapture:k,className:d.cn("relative",c),role:"region","aria-roledescription":"carousel",...i,children:u})})});h.displayName="Carousel";const v=o.forwardRef(({className:e,...r},t)=>{const{carouselRef:n,orientation:c}=m();return l.jsxRuntimeExports.jsx("div",{ref:n,className:"overflow-hidden",children:l.jsxRuntimeExports.jsx("div",{ref:t,className:d.cn("flex",c==="horizontal"?"-ml-4":"-mt-4 flex-col",e),...r})})});v.displayName="CarouselContent";const w=o.forwardRef(({className:e,...r},t)=>{const{orientation:n}=m();return l.jsxRuntimeExports.jsx("div",{ref:t,role:"group","aria-roledescription":"slide",className:d.cn("min-w-0 shrink-0 grow-0 basis-full",n==="horizontal"?"pl-4":"pt-4",e),...r})});w.displayName="CarouselItem";const R=o.forwardRef(({className:e,variant:r="outline",size:t="icon",...n},c)=>{const{orientation:u,scrollPrev:i,canScrollPrev:x}=m();return l.jsxRuntimeExports.jsxs(j.Button,{ref:c,variant:r,size:t,className:d.cn("absolute h-8 w-8 rounded-full",u==="horizontal"?"-left-12 top-1/2 -translate-y-1/2":"-top-12 left-1/2 -translate-x-1/2 rotate-90",e),disabled:!x,onClick:i,...n,children:[l.jsxRuntimeExports.jsx(l.ArrowLeft,{className:"h-4 w-4"}),l.jsxRuntimeExports.jsx("span",{className:"sr-only",children:"Previous slide"})]})});R.displayName="CarouselPrevious";const b=o.forwardRef(({className:e,variant:r="outline",size:t="icon",...n},c)=>{const{orientation:u,scrollNext:i,canScrollNext:x}=m();return l.jsxRuntimeExports.jsxs(j.Button,{ref:c,variant:r,size:t,className:d.cn("absolute h-8 w-8 rounded-full",u==="horizontal"?"-right-12 top-1/2 -translate-y-1/2":"-bottom-12 left-1/2 -translate-x-1/2 rotate-90",e),disabled:!x,onClick:i,...n,children:[l.jsxRuntimeExports.jsx(l.ArrowRight,{className:"h-4 w-4"}),l.jsxRuntimeExports.jsx("span",{className:"sr-only",children:"Next slide"})]})});b.displayName="CarouselNext";exports.Carousel=h;exports.CarouselContent=v;exports.CarouselItem=w;exports.CarouselNext=b;exports.CarouselPrevious=R;
|
|
2
|
+
//# sourceMappingURL=carousel.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carousel.cjs.js","sources":["../src/components/ui/carousel.tsx"],"sourcesContent":["import useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react';\nimport { ArrowLeft, ArrowRight } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/utils';\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n orientation?: 'horizontal' | 'vertical';\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\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 Carousel = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement> & CarouselProps>(\n ({ orientation = 'horizontal', opts, setApi, plugins, className, children, ...props }, ref) => {\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\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) {\n return;\n }\n\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\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 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) {\n return;\n }\n\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) {\n return;\n }\n\n onSelect(api);\n api.on('reInit', onSelect);\n api.on('select', onSelect);\n\n return () => {\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 canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n ref={ref}\n onKeyDownCapture={handleKeyDown}\n className={cn('relative', className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n },\n);\nCarousel.displayName = 'Carousel';\n\nconst CarouselContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\">\n <div\n ref={ref}\n className={cn('flex', orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col', className)}\n {...props}\n />\n </div>\n );\n },\n);\nCarouselContent.displayName = 'CarouselContent';\n\nconst CarouselItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const { orientation } = useCarousel();\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-roledescription=\"slide\"\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);\nCarouselItem.displayName = 'CarouselItem';\n\nconst CarouselPrevious = React.forwardRef<HTMLButtonElement, React.ComponentProps<typeof Button>>(\n ({ className, variant = 'outline', size = 'icon', ...props }, ref) => {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n 'absolute h-8 w-8 rounded-full',\n orientation === 'horizontal'\n ? '-left-12 top-1/2 -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 <ArrowLeft className=\"h-4 w-4\" />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n },\n);\nCarouselPrevious.displayName = 'CarouselPrevious';\n\nconst CarouselNext = React.forwardRef<HTMLButtonElement, React.ComponentProps<typeof Button>>(\n ({ className, variant = 'outline', size = 'icon', ...props }, ref) => {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n 'absolute h-8 w-8 rounded-full',\n orientation === 'horizontal'\n ? '-right-12 top-1/2 -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 <ArrowRight className=\"h-4 w-4\" />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n },\n);\nCarouselNext.displayName = 'CarouselNext';\n\nexport { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type CarouselApi };\n"],"names":["CarouselContext","React","useCarousel","context","Carousel","orientation","opts","setApi","plugins","className","children","props","ref","carouselRef","api","useEmblaCarousel","canScrollPrev","setCanScrollPrev","canScrollNext","setCanScrollNext","onSelect","scrollPrev","scrollNext","handleKeyDown","event","jsx","cn","CarouselContent","CarouselItem","CarouselPrevious","variant","size","jsxs","Button","ArrowLeft","CarouselNext","ArrowRight"],"mappings":"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"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { u as R, j as t, p as S, q as k } from "./vendor-CCQzmGyD.mjs";
|
|
2
|
+
import * as e from "react";
|
|
3
|
+
import { Button as N } from "./button.es.js";
|
|
4
|
+
import { c as x } from "./utils-C9QGdMaH.mjs";
|
|
5
|
+
const w = e.createContext(null);
|
|
6
|
+
function m() {
|
|
7
|
+
const o = e.useContext(w);
|
|
8
|
+
if (!o)
|
|
9
|
+
throw new Error("useCarousel must be used within a <Carousel />");
|
|
10
|
+
return o;
|
|
11
|
+
}
|
|
12
|
+
const z = e.forwardRef(
|
|
13
|
+
({ orientation: o = "horizontal", opts: l, setApi: s, plugins: a, className: c, children: i, ...u }, f) => {
|
|
14
|
+
const [p, r] = R(
|
|
15
|
+
{
|
|
16
|
+
...l,
|
|
17
|
+
axis: o === "horizontal" ? "x" : "y"
|
|
18
|
+
},
|
|
19
|
+
a
|
|
20
|
+
), [v, y] = e.useState(!1), [j, b] = e.useState(!1), d = e.useCallback((n) => {
|
|
21
|
+
n && (y(n.canScrollPrev()), b(n.canScrollNext()));
|
|
22
|
+
}, []), C = e.useCallback(() => {
|
|
23
|
+
r?.scrollPrev();
|
|
24
|
+
}, [r]), h = e.useCallback(() => {
|
|
25
|
+
r?.scrollNext();
|
|
26
|
+
}, [r]), P = e.useCallback(
|
|
27
|
+
(n) => {
|
|
28
|
+
n.key === "ArrowLeft" ? (n.preventDefault(), C()) : n.key === "ArrowRight" && (n.preventDefault(), h());
|
|
29
|
+
},
|
|
30
|
+
[C, h]
|
|
31
|
+
);
|
|
32
|
+
return e.useEffect(() => {
|
|
33
|
+
!r || !s || s(r);
|
|
34
|
+
}, [r, s]), e.useEffect(() => {
|
|
35
|
+
if (r)
|
|
36
|
+
return d(r), r.on("reInit", d), r.on("select", d), () => {
|
|
37
|
+
r?.off("select", d);
|
|
38
|
+
};
|
|
39
|
+
}, [r, d]), /* @__PURE__ */ t.jsx(
|
|
40
|
+
w.Provider,
|
|
41
|
+
{
|
|
42
|
+
value: {
|
|
43
|
+
carouselRef: p,
|
|
44
|
+
api: r,
|
|
45
|
+
opts: l,
|
|
46
|
+
orientation: o || (l?.axis === "y" ? "vertical" : "horizontal"),
|
|
47
|
+
scrollPrev: C,
|
|
48
|
+
scrollNext: h,
|
|
49
|
+
canScrollPrev: v,
|
|
50
|
+
canScrollNext: j
|
|
51
|
+
},
|
|
52
|
+
children: /* @__PURE__ */ t.jsx(
|
|
53
|
+
"div",
|
|
54
|
+
{
|
|
55
|
+
ref: f,
|
|
56
|
+
onKeyDownCapture: P,
|
|
57
|
+
className: x("relative", c),
|
|
58
|
+
role: "region",
|
|
59
|
+
"aria-roledescription": "carousel",
|
|
60
|
+
...u,
|
|
61
|
+
children: i
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
z.displayName = "Carousel";
|
|
69
|
+
const g = e.forwardRef(
|
|
70
|
+
({ className: o, ...l }, s) => {
|
|
71
|
+
const { carouselRef: a, orientation: c } = m();
|
|
72
|
+
return /* @__PURE__ */ t.jsx("div", { ref: a, className: "overflow-hidden", children: /* @__PURE__ */ t.jsx(
|
|
73
|
+
"div",
|
|
74
|
+
{
|
|
75
|
+
ref: s,
|
|
76
|
+
className: x("flex", c === "horizontal" ? "-ml-4" : "-mt-4 flex-col", o),
|
|
77
|
+
...l
|
|
78
|
+
}
|
|
79
|
+
) });
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
g.displayName = "CarouselContent";
|
|
83
|
+
const E = e.forwardRef(
|
|
84
|
+
({ className: o, ...l }, s) => {
|
|
85
|
+
const { orientation: a } = m();
|
|
86
|
+
return /* @__PURE__ */ t.jsx(
|
|
87
|
+
"div",
|
|
88
|
+
{
|
|
89
|
+
ref: s,
|
|
90
|
+
role: "group",
|
|
91
|
+
"aria-roledescription": "slide",
|
|
92
|
+
className: x("min-w-0 shrink-0 grow-0 basis-full", a === "horizontal" ? "pl-4" : "pt-4", o),
|
|
93
|
+
...l
|
|
94
|
+
}
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
);
|
|
98
|
+
E.displayName = "CarouselItem";
|
|
99
|
+
const D = e.forwardRef(
|
|
100
|
+
({ className: o, variant: l = "outline", size: s = "icon", ...a }, c) => {
|
|
101
|
+
const { orientation: i, scrollPrev: u, canScrollPrev: f } = m();
|
|
102
|
+
return /* @__PURE__ */ t.jsxs(
|
|
103
|
+
N,
|
|
104
|
+
{
|
|
105
|
+
ref: c,
|
|
106
|
+
variant: l,
|
|
107
|
+
size: s,
|
|
108
|
+
className: x(
|
|
109
|
+
"absolute h-8 w-8 rounded-full",
|
|
110
|
+
i === "horizontal" ? "-left-12 top-1/2 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
|
|
111
|
+
o
|
|
112
|
+
),
|
|
113
|
+
disabled: !f,
|
|
114
|
+
onClick: u,
|
|
115
|
+
...a,
|
|
116
|
+
children: [
|
|
117
|
+
/* @__PURE__ */ t.jsx(S, { className: "h-4 w-4" }),
|
|
118
|
+
/* @__PURE__ */ t.jsx("span", { className: "sr-only", children: "Previous slide" })
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
);
|
|
124
|
+
D.displayName = "CarouselPrevious";
|
|
125
|
+
const I = e.forwardRef(
|
|
126
|
+
({ className: o, variant: l = "outline", size: s = "icon", ...a }, c) => {
|
|
127
|
+
const { orientation: i, scrollNext: u, canScrollNext: f } = m();
|
|
128
|
+
return /* @__PURE__ */ t.jsxs(
|
|
129
|
+
N,
|
|
130
|
+
{
|
|
131
|
+
ref: c,
|
|
132
|
+
variant: l,
|
|
133
|
+
size: s,
|
|
134
|
+
className: x(
|
|
135
|
+
"absolute h-8 w-8 rounded-full",
|
|
136
|
+
i === "horizontal" ? "-right-12 top-1/2 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
|
|
137
|
+
o
|
|
138
|
+
),
|
|
139
|
+
disabled: !f,
|
|
140
|
+
onClick: u,
|
|
141
|
+
...a,
|
|
142
|
+
children: [
|
|
143
|
+
/* @__PURE__ */ t.jsx(k, { className: "h-4 w-4" }),
|
|
144
|
+
/* @__PURE__ */ t.jsx("span", { className: "sr-only", children: "Next slide" })
|
|
145
|
+
]
|
|
146
|
+
}
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
);
|
|
150
|
+
I.displayName = "CarouselNext";
|
|
151
|
+
export {
|
|
152
|
+
z as Carousel,
|
|
153
|
+
g as CarouselContent,
|
|
154
|
+
E as CarouselItem,
|
|
155
|
+
I as CarouselNext,
|
|
156
|
+
D as CarouselPrevious
|
|
157
|
+
};
|
|
158
|
+
//# sourceMappingURL=carousel.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carousel.es.js","sources":["../src/components/ui/carousel.tsx"],"sourcesContent":["import useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react';\nimport { ArrowLeft, ArrowRight } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/utils';\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n orientation?: 'horizontal' | 'vertical';\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\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 Carousel = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement> & CarouselProps>(\n ({ orientation = 'horizontal', opts, setApi, plugins, className, children, ...props }, ref) => {\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\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) {\n return;\n }\n\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\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 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) {\n return;\n }\n\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) {\n return;\n }\n\n onSelect(api);\n api.on('reInit', onSelect);\n api.on('select', onSelect);\n\n return () => {\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 canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n ref={ref}\n onKeyDownCapture={handleKeyDown}\n className={cn('relative', className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n },\n);\nCarousel.displayName = 'Carousel';\n\nconst CarouselContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\">\n <div\n ref={ref}\n className={cn('flex', orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col', className)}\n {...props}\n />\n </div>\n );\n },\n);\nCarouselContent.displayName = 'CarouselContent';\n\nconst CarouselItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const { orientation } = useCarousel();\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-roledescription=\"slide\"\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);\nCarouselItem.displayName = 'CarouselItem';\n\nconst CarouselPrevious = React.forwardRef<HTMLButtonElement, React.ComponentProps<typeof Button>>(\n ({ className, variant = 'outline', size = 'icon', ...props }, ref) => {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n 'absolute h-8 w-8 rounded-full',\n orientation === 'horizontal'\n ? '-left-12 top-1/2 -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 <ArrowLeft className=\"h-4 w-4\" />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n },\n);\nCarouselPrevious.displayName = 'CarouselPrevious';\n\nconst CarouselNext = React.forwardRef<HTMLButtonElement, React.ComponentProps<typeof Button>>(\n ({ className, variant = 'outline', size = 'icon', ...props }, ref) => {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n 'absolute h-8 w-8 rounded-full',\n orientation === 'horizontal'\n ? '-right-12 top-1/2 -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 <ArrowRight className=\"h-4 w-4\" />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n },\n);\nCarouselNext.displayName = 'CarouselNext';\n\nexport { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type CarouselApi };\n"],"names":["CarouselContext","React","useCarousel","context","Carousel","orientation","opts","setApi","plugins","className","children","props","ref","carouselRef","api","useEmblaCarousel","canScrollPrev","setCanScrollPrev","canScrollNext","setCanScrollNext","onSelect","scrollPrev","scrollNext","handleKeyDown","event","jsx","cn","CarouselContent","CarouselItem","CarouselPrevious","variant","size","jsxs","Button","ArrowLeft","CarouselNext","ArrowRight"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./vendor-CIyDEr7H.js"),$=require("react"),l=require("./utils-CUFNKXRW.js");function O(o){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const n in o)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(o,n);Object.defineProperty(e,n,r.get?r:{enumerable:!0,get:()=>o[n]})}}return e.default=o,Object.freeze(e)}const x=O($),P={light:"",dark:".dark"},E=x.createContext(null);function y(){const o=x.useContext(E);if(!o)throw new Error("useChart must be used within a <ChartContainer />");return o}const _=x.forwardRef(({id:o,className:e,children:n,config:r,...a},u)=>{const i=x.useId(),c=`chart-${o||i.replace(/:/g,"")}`;return t.jsxRuntimeExports.jsx(E.Provider,{value:{config:r},children:t.jsxRuntimeExports.jsxs("div",{"data-chart":c,ref:u,className:l.cn("flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none",e),...a,children:[t.jsxRuntimeExports.jsx(w,{id:c,config:r}),t.jsxRuntimeExports.jsx(t.ResponsiveContainer,{children:n})]})})});_.displayName="Chart";const w=({id:o,config:e})=>{const n=Object.entries(e).filter(([,r])=>r.theme||r.color);return n.length?t.jsxRuntimeExports.jsx("style",{dangerouslySetInnerHTML:{__html:Object.entries(P).map(([r,a])=>`
|
|
2
|
+
${a} [data-chart=${o}] {
|
|
3
|
+
${n.map(([u,i])=>{const c=i.theme?.[r]||i.color;return c?` --color-${u}: ${c};`:null}).join(`
|
|
4
|
+
`)}
|
|
5
|
+
}
|
|
6
|
+
`).join(`
|
|
7
|
+
`)}}):null},M=t.Tooltip,k=x.forwardRef(({active:o,payload:e,className:n,indicator:r="dot",hideLabel:a=!1,hideIndicator:u=!1,label:i,labelFormatter:c,labelClassName:h,formatter:f,color:L,nameKey:T,labelKey:g},S)=>{const{config:p}=y(),C=x.useMemo(()=>{if(a||!e?.length)return null;const[s]=e,j=`${g||s?.dataKey||s?.name||"value"}`,v=b(p,s,j),d=!g&&typeof i=="string"?p[i]?.label||i:v?.label;return c?t.jsxRuntimeExports.jsx("div",{className:l.cn("font-medium",h),children:c(d,e)}):d?t.jsxRuntimeExports.jsx("div",{className:l.cn("font-medium",h),children:d}):null},[i,c,e,a,h,p,g]);if(!o||!e?.length)return null;const m=e.length===1&&r!=="dot";return t.jsxRuntimeExports.jsxs("div",{ref:S,className:l.cn("grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",n),children:[m?null:C,t.jsxRuntimeExports.jsx("div",{className:"grid gap-1.5",children:e.filter(s=>s.type!=="none").map((s,j)=>{const v=`${T||s.name||s.dataKey||"value"}`,d=b(p,s,v),R=L||s.payload.fill||s.color;return t.jsxRuntimeExports.jsx("div",{className:l.cn("flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",r==="dot"&&"items-center"),children:f&&s?.value!==void 0&&s.name?f(s.value,s.name,s,j,s.payload):t.jsxRuntimeExports.jsxs(t.jsxRuntimeExports.Fragment,{children:[d?.icon?t.jsxRuntimeExports.jsx(d.icon,{}):!u&&t.jsxRuntimeExports.jsx("div",{className:l.cn("shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]",{"h-2.5 w-2.5":r==="dot","w-1":r==="line","w-0 border-[1.5px] border-dashed bg-transparent":r==="dashed","my-0.5":m&&r==="dashed"}),style:{"--color-bg":R,"--color-border":R}}),t.jsxRuntimeExports.jsxs("div",{className:l.cn("flex flex-1 justify-between leading-none",m?"items-end":"items-center"),children:[t.jsxRuntimeExports.jsxs("div",{className:"grid gap-1.5",children:[m?C:null,t.jsxRuntimeExports.jsx("span",{className:"text-muted-foreground",children:d?.label||s.name})]}),s.value&&t.jsxRuntimeExports.jsx("span",{className:"font-mono font-medium tabular-nums text-foreground",children:s.value.toLocaleString()})]})]})},s.dataKey)})})]})});k.displayName="ChartTooltip";const q=t.Legend,N=x.forwardRef(({className:o,hideIcon:e=!1,payload:n,verticalAlign:r="bottom",nameKey:a},u)=>{const{config:i}=y();return n?.length?t.jsxRuntimeExports.jsx("div",{ref:u,className:l.cn("flex items-center justify-center gap-4",r==="top"?"pb-3":"pt-3",o),children:n.filter(c=>c.type!=="none").map(c=>{const h=`${a||c.dataKey||"value"}`,f=b(i,c,h);return t.jsxRuntimeExports.jsxs("div",{className:l.cn("flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"),children:[f?.icon&&!e?t.jsxRuntimeExports.jsx(f.icon,{}):t.jsxRuntimeExports.jsx("div",{className:"h-2 w-2 shrink-0 rounded-[2px]",style:{backgroundColor:c.color}}),f?.label]},c.value)})}):null});N.displayName="ChartLegend";function b(o,e,n){if(typeof e!="object"||e===null)return;const r="payload"in e&&typeof e.payload=="object"&&e.payload!==null?e.payload:void 0;let a=n;return n in e&&typeof e[n]=="string"?a=e[n]:r&&n in r&&typeof r[n]=="string"&&(a=r[n]),a in o?o[a]:o[n]}exports.ChartContainer=_;exports.ChartLegend=q;exports.ChartLegendContent=N;exports.ChartStyle=w;exports.ChartTooltip=M;exports.ChartTooltipContent=k;
|
|
8
|
+
//# sourceMappingURL=chart.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart.cjs.js","sources":["../src/components/ui/chart.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as RechartsPrimitive from 'recharts';\n\nimport { cn } from '@/lib/utils';\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: '', dark: '.dark' } as const;\n\nexport type ChartConfig = {\n [k in string]: {\n label?: React.ReactNode;\n icon?: React.ComponentType;\n } & ({ color?: string; theme?: never } | { color?: never; theme: Record<keyof typeof THEMES, string> });\n};\n\ntype ChartContextProps = {\n config: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n const context = React.useContext(ChartContext);\n\n if (!context) {\n throw new Error('useChart must be used within a <ChartContainer />');\n }\n\n return context;\n}\n\nconst ChartContainer = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<'div'> & {\n config: ChartConfig;\n children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>['children'];\n }\n>(({ id, className, children, config, ...props }, ref) => {\n const uniqueId = React.useId();\n const chartId = `chart-${id || uniqueId.replace(/:/g, '')}`;\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-chart={chartId}\n ref={ref}\n className={cn(\n \"flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none\",\n className,\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n <RechartsPrimitive.ResponsiveContainer>{children}</RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n );\n});\nChartContainer.displayName = 'Chart';\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(([, config]) => config.theme || config.color);\n\n if (!colorConfig.length) {\n return null;\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color = itemConfig.theme?.[theme as keyof typeof itemConfig.theme] || itemConfig.color;\n return color ? ` --color-${key}: ${color};` : null;\n })\n .join('\\n')}\n}\n`,\n )\n .join('\\n'),\n }}\n />\n );\n};\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\nconst ChartTooltipContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n React.ComponentProps<'div'> & {\n hideLabel?: boolean;\n hideIndicator?: boolean;\n indicator?: 'line' | 'dot' | 'dashed';\n nameKey?: string;\n labelKey?: string;\n }\n>(\n (\n {\n active,\n payload,\n className,\n indicator = 'dot',\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n },\n ref,\n ) => {\n const { config } = useChart();\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null;\n }\n\n const [item] = payload;\n const key = `${labelKey || item?.dataKey || item?.name || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const value =\n !labelKey && typeof label === 'string'\n ? config[label as keyof typeof config]?.label || label\n : itemConfig?.label;\n\n if (labelFormatter) {\n return <div className={cn('font-medium', labelClassName)}>{labelFormatter(value, payload)}</div>;\n }\n\n if (!value) {\n return null;\n }\n\n return <div className={cn('font-medium', labelClassName)}>{value}</div>;\n }, [label, labelFormatter, payload, hideLabel, labelClassName, config, labelKey]);\n\n if (!active || !payload?.length) {\n return null;\n }\n\n const nestLabel = payload.length === 1 && indicator !== 'dot';\n\n return (\n <div\n ref={ref}\n className={cn(\n 'grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl',\n className,\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload\n .filter((item) => item.type !== 'none')\n .map((item, index) => {\n const key = `${nameKey || item.name || item.dataKey || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const indicatorColor = color || item.payload.fill || item.color;\n\n return (\n <div\n key={item.dataKey}\n className={cn(\n 'flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground',\n indicator === 'dot' && 'items-center',\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn('shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]', {\n 'h-2.5 w-2.5': indicator === 'dot',\n 'w-1': indicator === 'line',\n 'w-0 border-[1.5px] border-dashed bg-transparent': indicator === 'dashed',\n 'my-0.5': nestLabel && indicator === 'dashed',\n })}\n style={\n {\n '--color-bg': indicatorColor,\n '--color-border': indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n 'flex flex-1 justify-between leading-none',\n nestLabel ? 'items-end' : 'items-center',\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">{itemConfig?.label || item.name}</span>\n </div>\n {item.value && (\n <span className=\"font-mono font-medium tabular-nums text-foreground\">\n {item.value.toLocaleString()}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n },\n);\nChartTooltipContent.displayName = 'ChartTooltip';\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\nconst ChartLegendContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<'div'> &\n Pick<RechartsPrimitive.LegendProps, 'payload' | 'verticalAlign'> & {\n hideIcon?: boolean;\n nameKey?: string;\n }\n>(({ className, hideIcon = false, payload, verticalAlign = 'bottom', nameKey }, ref) => {\n const { config } = useChart();\n\n if (!payload?.length) {\n return null;\n }\n\n return (\n <div\n ref={ref}\n className={cn('flex items-center justify-center gap-4', verticalAlign === 'top' ? 'pb-3' : 'pt-3', className)}\n >\n {payload\n .filter((item) => item.type !== 'none')\n .map((item) => {\n const key = `${nameKey || item.dataKey || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n return (\n <div\n key={item.value}\n className={cn('flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground')}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n );\n })}\n </div>\n );\n});\nChartLegendContent.displayName = 'ChartLegend';\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(config: ChartConfig, payload: unknown, key: string) {\n if (typeof payload !== 'object' || payload === null) {\n return undefined;\n }\n\n const payloadPayload =\n 'payload' in payload && typeof payload.payload === 'object' && payload.payload !== null\n ? payload.payload\n : undefined;\n\n let configLabelKey: string = key;\n\n if (key in payload && typeof payload[key as keyof typeof payload] === 'string') {\n configLabelKey = payload[key as keyof typeof payload] as string;\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof payloadPayload[key as keyof typeof payloadPayload] === 'string'\n ) {\n configLabelKey = payloadPayload[key as keyof typeof payloadPayload] as string;\n }\n\n return configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];\n}\n\nexport { ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent };\n"],"names":["THEMES","ChartContext","React","useChart","context","ChartContainer","id","className","children","config","props","ref","uniqueId","chartId","jsxs","cn","jsx","ChartStyle","RechartsPrimitive.ResponsiveContainer","colorConfig","theme","prefix","key","itemConfig","color","ChartTooltip","RechartsPrimitive.Tooltip","ChartTooltipContent","active","payload","indicator","hideLabel","hideIndicator","label","labelFormatter","labelClassName","formatter","nameKey","labelKey","tooltipLabel","item","getPayloadConfigFromPayload","value","nestLabel","index","indicatorColor","Fragment","ChartLegend","RechartsPrimitive.Legend","ChartLegendContent","hideIcon","verticalAlign","payloadPayload","configLabelKey"],"mappings":"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"}
|