@mieweb/ui 0.3.0-dev.73 → 0.3.0-dev.74
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/dist/ag-grid.cjs +31 -21
- package/dist/ag-grid.cjs.map +1 -1
- package/dist/ag-grid.js +31 -21
- package/dist/ag-grid.js.map +1 -1
- package/dist/brands/bluehive.css +5 -5
- package/dist/brands/mieweb.css +5 -5
- package/dist/brands/ozwell.css +5 -5
- package/dist/brands/webchart.css +5 -5
- package/dist/{chunk-N2YMRZ7P.cjs → chunk-2EPJ5SMX.cjs} +5 -5
- package/dist/{chunk-N2YMRZ7P.cjs.map → chunk-2EPJ5SMX.cjs.map} +1 -1
- package/dist/{chunk-QDGZBDBI.cjs → chunk-2LF7PSSX.cjs} +3 -3
- package/dist/{chunk-QDGZBDBI.cjs.map → chunk-2LF7PSSX.cjs.map} +1 -1
- package/dist/{chunk-O43QBXRX.js → chunk-43GBCUSQ.js} +3 -3
- package/dist/{chunk-O43QBXRX.js.map → chunk-43GBCUSQ.js.map} +1 -1
- package/dist/{chunk-MOULJE34.js → chunk-4DMZAVB2.js} +6 -6
- package/dist/chunk-4DMZAVB2.js.map +1 -0
- package/dist/{chunk-OJ64Q3A5.js → chunk-5PUEQH2L.js} +3 -3
- package/dist/{chunk-OJ64Q3A5.js.map → chunk-5PUEQH2L.js.map} +1 -1
- package/dist/{chunk-VKTQQOUH.js → chunk-5U7IIMKH.js} +4 -4
- package/dist/{chunk-VKTQQOUH.js.map → chunk-5U7IIMKH.js.map} +1 -1
- package/dist/{chunk-TSZRR2ZK.cjs → chunk-67QT2WYS.cjs} +3 -3
- package/dist/{chunk-TSZRR2ZK.cjs.map → chunk-67QT2WYS.cjs.map} +1 -1
- package/dist/{chunk-LXHPW2ZF.cjs → chunk-7BARESXI.cjs} +3 -3
- package/dist/{chunk-LXHPW2ZF.cjs.map → chunk-7BARESXI.cjs.map} +1 -1
- package/dist/{chunk-BBQZNIB4.js → chunk-AL6ASCL6.js} +9 -9
- package/dist/{chunk-BBQZNIB4.js.map → chunk-AL6ASCL6.js.map} +1 -1
- package/dist/{chunk-AUXHRAID.cjs → chunk-CHMMHFOW.cjs} +9 -9
- package/dist/{chunk-AUXHRAID.cjs.map → chunk-CHMMHFOW.cjs.map} +1 -1
- package/dist/{chunk-JDI45GEY.js → chunk-CWDQ7OPJ.js} +3 -3
- package/dist/{chunk-JDI45GEY.js.map → chunk-CWDQ7OPJ.js.map} +1 -1
- package/dist/{chunk-Z4HZ35KX.cjs → chunk-DEZ7XSTG.cjs} +3 -3
- package/dist/{chunk-Z4HZ35KX.cjs.map → chunk-DEZ7XSTG.cjs.map} +1 -1
- package/dist/{chunk-GPBQCGKA.cjs → chunk-DT4CHRTJ.cjs} +382 -380
- package/dist/chunk-DT4CHRTJ.cjs.map +1 -0
- package/dist/{chunk-QMQE4PDD.cjs → chunk-E3GBBYAO.cjs} +6 -6
- package/dist/{chunk-QMQE4PDD.cjs.map → chunk-E3GBBYAO.cjs.map} +1 -1
- package/dist/{chunk-IMNLYVXJ.cjs → chunk-EUUQVDXX.cjs} +6 -6
- package/dist/{chunk-IMNLYVXJ.cjs.map → chunk-EUUQVDXX.cjs.map} +1 -1
- package/dist/{chunk-TF5OZDFU.js → chunk-FMGX2AM2.js} +6 -6
- package/dist/{chunk-TF5OZDFU.js.map → chunk-FMGX2AM2.js.map} +1 -1
- package/dist/{chunk-5NSURWMM.js → chunk-FYEK4RZ3.js} +4 -4
- package/dist/{chunk-5NSURWMM.js.map → chunk-FYEK4RZ3.js.map} +1 -1
- package/dist/{chunk-DLLVXNAQ.js → chunk-G7P5X2F4.js} +5 -5
- package/dist/{chunk-DLLVXNAQ.js.map → chunk-G7P5X2F4.js.map} +1 -1
- package/dist/{chunk-QEAIFTUL.cjs → chunk-HT3SXDFF.cjs} +5 -5
- package/dist/{chunk-QEAIFTUL.cjs.map → chunk-HT3SXDFF.cjs.map} +1 -1
- package/dist/{chunk-DCDXOT3A.js → chunk-IEVAVY43.js} +3 -3
- package/dist/{chunk-DCDXOT3A.js.map → chunk-IEVAVY43.js.map} +1 -1
- package/dist/{chunk-EMMQPDOY.cjs → chunk-KLLGX5O3.cjs} +4 -4
- package/dist/{chunk-EMMQPDOY.cjs.map → chunk-KLLGX5O3.cjs.map} +1 -1
- package/dist/{chunk-ND75VHB7.cjs → chunk-MIGLLTTD.cjs} +4 -4
- package/dist/{chunk-ND75VHB7.cjs.map → chunk-MIGLLTTD.cjs.map} +1 -1
- package/dist/{chunk-3DM6LMZG.js → chunk-MUYTGWGE.js} +4 -3
- package/dist/chunk-MUYTGWGE.js.map +1 -0
- package/dist/{chunk-VQW36LLX.cjs → chunk-NVHAQOHH.cjs} +3 -3
- package/dist/{chunk-VQW36LLX.cjs.map → chunk-NVHAQOHH.cjs.map} +1 -1
- package/dist/{chunk-4ASPCSWT.js → chunk-PU6ZC4GI.js} +3 -3
- package/dist/{chunk-4ASPCSWT.js.map → chunk-PU6ZC4GI.js.map} +1 -1
- package/dist/{chunk-JE4AH2TZ.cjs → chunk-Q2EWNXIB.cjs} +6 -6
- package/dist/chunk-Q2EWNXIB.cjs.map +1 -0
- package/dist/{chunk-PLIK3DN6.cjs → chunk-QASIWBXU.cjs} +4 -3
- package/dist/chunk-QASIWBXU.cjs.map +1 -0
- package/dist/{chunk-V2O636JO.js → chunk-QBFNONJD.js} +5 -5
- package/dist/{chunk-V2O636JO.js.map → chunk-QBFNONJD.js.map} +1 -1
- package/dist/{chunk-YR365F2H.cjs → chunk-QG7CJH4O.cjs} +3 -3
- package/dist/{chunk-YR365F2H.cjs.map → chunk-QG7CJH4O.cjs.map} +1 -1
- package/dist/{chunk-ZGSPFVGL.cjs → chunk-QNTUYH6G.cjs} +4 -4
- package/dist/{chunk-ZGSPFVGL.cjs.map → chunk-QNTUYH6G.cjs.map} +1 -1
- package/dist/{chunk-YN3ZIUYC.js → chunk-TRZXK57D.js} +6 -6
- package/dist/{chunk-YN3ZIUYC.js.map → chunk-TRZXK57D.js.map} +1 -1
- package/dist/{chunk-NDHW3ZRF.js → chunk-VCO2IZOG.js} +3 -3
- package/dist/{chunk-NDHW3ZRF.js.map → chunk-VCO2IZOG.js.map} +1 -1
- package/dist/{chunk-7XWPUWSL.js → chunk-WFS6R2F5.js} +3 -3
- package/dist/{chunk-7XWPUWSL.js.map → chunk-WFS6R2F5.js.map} +1 -1
- package/dist/{chunk-JCHVLSXS.js → chunk-WORZLEUZ.js} +382 -380
- package/dist/chunk-WORZLEUZ.js.map +1 -0
- package/dist/{chunk-RCMF6KZA.js → chunk-YTZPVEIO.js} +3 -3
- package/dist/{chunk-RCMF6KZA.js.map → chunk-YTZPVEIO.js.map} +1 -1
- package/dist/{chunk-6EN6ZIW3.js → chunk-YY23MK3V.js} +4 -4
- package/dist/{chunk-6EN6ZIW3.js.map → chunk-YY23MK3V.js.map} +1 -1
- package/dist/{chunk-QXJMKJJV.cjs → chunk-ZKFVGYBK.cjs} +3 -3
- package/dist/{chunk-QXJMKJJV.cjs.map → chunk-ZKFVGYBK.cjs.map} +1 -1
- package/dist/{chunk-Z2ABQA5Z.cjs → chunk-ZRI6OXQD.cjs} +3 -3
- package/dist/{chunk-Z2ABQA5Z.cjs.map → chunk-ZRI6OXQD.cjs.map} +1 -1
- package/dist/components/AudioPlayer/index.cjs +6 -6
- package/dist/components/AudioPlayer/index.js +1 -1
- package/dist/components/AudioRecorder/index.cjs +6 -6
- package/dist/components/AudioRecorder/index.js +1 -1
- package/dist/components/Card/index.cjs +15 -15
- package/dist/components/Card/index.js +1 -1
- package/dist/components/Checkbox/index.cjs +4 -4
- package/dist/components/Checkbox/index.js +1 -1
- package/dist/components/CountryCodeDropdown/index.cjs +4 -4
- package/dist/components/CountryCodeDropdown/index.js +1 -1
- package/dist/components/DateInput/index.cjs +2 -2
- package/dist/components/DateInput/index.js +1 -1
- package/dist/components/Dropdown/index.cjs +7 -7
- package/dist/components/Dropdown/index.js +1 -1
- package/dist/components/Pagination/index.cjs +4 -4
- package/dist/components/Pagination/index.js +1 -1
- package/dist/components/PhoneInput/index.cjs +3 -3
- package/dist/components/PhoneInput/index.js +1 -1
- package/dist/components/Progress/index.cjs +6 -6
- package/dist/components/Progress/index.js +1 -1
- package/dist/components/QuickAction/index.cjs +6 -6
- package/dist/components/QuickAction/index.js +1 -1
- package/dist/components/Radio/index.cjs +4 -4
- package/dist/components/Radio/index.js +1 -1
- package/dist/components/SchedulePicker/index.cjs +10 -10
- package/dist/components/SchedulePicker/index.js +1 -1
- package/dist/components/Select/index.cjs +3 -3
- package/dist/components/Select/index.js +1 -1
- package/dist/components/Slider/index.cjs +5 -5
- package/dist/components/Slider/index.js +1 -1
- package/dist/components/Spinner/index.cjs +5 -5
- package/dist/components/Spinner/index.js +1 -1
- package/dist/components/Switch/index.cjs +4 -4
- package/dist/components/Switch/index.js +1 -1
- package/dist/components/Tabs/index.cjs +7 -7
- package/dist/components/Tabs/index.js +1 -1
- package/dist/components/Text/index.cjs +4 -4
- package/dist/components/Text/index.js +1 -1
- package/dist/index.cjs +737 -766
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +453 -482
- package/dist/index.js.map +1 -1
- package/dist/styles/init.css +24 -11
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/dist/chunk-3DM6LMZG.js.map +0 -1
- package/dist/chunk-GPBQCGKA.cjs.map +0 -1
- package/dist/chunk-JCHVLSXS.js.map +0 -1
- package/dist/chunk-JE4AH2TZ.cjs.map +0 -1
- package/dist/chunk-MOULJE34.js.map +0 -1
- package/dist/chunk-PLIK3DN6.cjs.map +0 -1
|
@@ -56,7 +56,7 @@ var cardVariants = cva(
|
|
|
56
56
|
var cardAccentVariants = cva("absolute left-0 top-0 bottom-0 w-1", {
|
|
57
57
|
variants: {
|
|
58
58
|
color: {
|
|
59
|
-
primary: "bg-primary-
|
|
59
|
+
primary: "bg-primary-800",
|
|
60
60
|
success: "bg-success",
|
|
61
61
|
warning: "bg-warning",
|
|
62
62
|
destructive: "bg-destructive",
|
|
@@ -106,9 +106,9 @@ var Card = React.forwardRef(
|
|
|
106
106
|
}
|
|
107
107
|
),
|
|
108
108
|
loading && /* @__PURE__ */ jsx("div", { className: "bg-card/80 absolute inset-0 z-10 flex items-center justify-center backdrop-blur-sm", children: /* @__PURE__ */ jsxs("div", { className: "flex gap-1", children: [
|
|
109
|
-
/* @__PURE__ */ jsx("div", { className: "bg-primary-
|
|
110
|
-
/* @__PURE__ */ jsx("div", { className: "bg-primary-
|
|
111
|
-
/* @__PURE__ */ jsx("div", { className: "bg-primary-
|
|
109
|
+
/* @__PURE__ */ jsx("div", { className: "bg-primary-800 h-2 w-2 animate-bounce rounded-full [animation-delay:-0.3s]" }),
|
|
110
|
+
/* @__PURE__ */ jsx("div", { className: "bg-primary-800 h-2 w-2 animate-bounce rounded-full [animation-delay:-0.15s]" }),
|
|
111
|
+
/* @__PURE__ */ jsx("div", { className: "bg-primary-800 h-2 w-2 animate-bounce rounded-full" })
|
|
112
112
|
] }) }),
|
|
113
113
|
children
|
|
114
114
|
]
|
|
@@ -215,7 +215,7 @@ var CardBadge = React.forwardRef(
|
|
|
215
215
|
}, ref) => {
|
|
216
216
|
const variantClasses = {
|
|
217
217
|
default: "bg-muted text-muted-foreground",
|
|
218
|
-
primary: "bg-primary-
|
|
218
|
+
primary: "bg-primary-800 text-white",
|
|
219
219
|
success: "bg-success text-success-foreground",
|
|
220
220
|
warning: "bg-warning text-warning-foreground",
|
|
221
221
|
destructive: "bg-destructive text-destructive-foreground"
|
|
@@ -312,7 +312,7 @@ var CardCollapsible = React.forwardRef(
|
|
|
312
312
|
{
|
|
313
313
|
type: "button",
|
|
314
314
|
onClick: handleToggle,
|
|
315
|
-
className: "text-primary-
|
|
315
|
+
className: "text-primary-800 focus-visible:ring-primary-500 flex items-center gap-1 rounded text-sm hover:underline focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
|
|
316
316
|
"aria-expanded": expanded,
|
|
317
317
|
children: typeof trigger === "string" ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
318
318
|
expanded ? "Show less" : trigger,
|
|
@@ -366,7 +366,7 @@ var CardStat = React.forwardRef(
|
|
|
366
366
|
className: cn("flex items-start gap-3", className),
|
|
367
367
|
...props,
|
|
368
368
|
children: [
|
|
369
|
-
icon && /* @__PURE__ */ jsx("div", { className: "bg-primary-500/10 text-primary-
|
|
369
|
+
icon && /* @__PURE__ */ jsx("div", { className: "bg-primary-500/10 text-primary-800 rounded-lg p-2", children: icon }),
|
|
370
370
|
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
371
371
|
/* @__PURE__ */ jsx("div", { className: "text-2xl font-bold tracking-tight", children: value }),
|
|
372
372
|
/* @__PURE__ */ jsx("div", { className: "text-muted-foreground text-sm", children: label }),
|
|
@@ -413,5 +413,5 @@ var CardStat = React.forwardRef(
|
|
|
413
413
|
CardStat.displayName = "CardStat";
|
|
414
414
|
|
|
415
415
|
export { Card, CardActions, CardBadge, CardCollapsible, CardContent, CardDescription, CardDivider, CardFooter, CardHeader, CardMedia, CardStat, CardTitle, cardAccentVariants, cardVariants };
|
|
416
|
-
//# sourceMappingURL=chunk-
|
|
417
|
-
//# sourceMappingURL=chunk-
|
|
416
|
+
//# sourceMappingURL=chunk-AL6ASCL6.js.map
|
|
417
|
+
//# sourceMappingURL=chunk-AL6ASCL6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Card/Card.tsx"],"names":[],"mappings":"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","file":"chunk-BBQZNIB4.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst cardVariants = cva(\n [\n 'rounded-xl bg-card text-card-foreground',\n 'border border-border',\n 'relative overflow-hidden',\n ],\n {\n variants: {\n padding: {\n none: 'p-0',\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-6',\n xl: 'p-8',\n },\n variant: {\n default: 'shadow-card',\n elevated: 'shadow-lg border-0',\n outlined: 'shadow-none border-2',\n ghost: 'shadow-none border-0 bg-transparent',\n filled: 'shadow-none border-0 bg-muted',\n },\n interactive: {\n true: [\n 'transition-all duration-200',\n 'hover:shadow-md hover:border-primary-200',\n 'dark:hover:border-primary-800',\n 'cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2',\n ],\n false: '',\n },\n selected: {\n true: 'ring-2 ring-primary-500 border-primary-500',\n false: '',\n },\n orientation: {\n vertical: 'flex flex-col',\n horizontal: 'flex flex-row',\n },\n },\n defaultVariants: {\n padding: 'md',\n variant: 'default',\n interactive: false,\n selected: false,\n orientation: 'vertical',\n },\n }\n);\n\nconst cardAccentVariants = cva('absolute left-0 top-0 bottom-0 w-1', {\n variants: {\n color: {\n primary: 'bg-primary-500',\n success: 'bg-success',\n warning: 'bg-warning',\n destructive: 'bg-destructive',\n info: 'bg-primary-200',\n },\n },\n});\n\nexport interface CardProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {\n /** Semantic HTML element to render as */\n as?: 'div' | 'article' | 'section' | 'aside';\n /** Accent color bar on the left side */\n accent?: 'primary' | 'success' | 'warning' | 'destructive' | 'info';\n /** Loading state - shows skeleton overlay */\n loading?: boolean;\n}\n\n/**\n * A card container component for grouping related content.\n *\n * @example\n * ```tsx\n * <Card padding=\"lg\" variant=\"elevated\">\n * <CardHeader>\n * <CardTitle>Card Title</CardTitle>\n * </CardHeader>\n * <CardContent>Card content goes here</CardContent>\n * </Card>\n * ```\n */\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n (\n {\n className,\n padding,\n variant,\n interactive,\n selected,\n orientation,\n accent,\n loading,\n as: Component = 'div',\n children,\n ...props\n },\n ref\n ) => {\n return (\n <Component\n ref={ref}\n className={cn(\n cardVariants({\n padding,\n variant,\n interactive,\n selected,\n orientation,\n }),\n accent && 'pl-4',\n className\n )}\n data-slot=\"card\"\n data-loading={loading || undefined}\n aria-busy={loading || undefined}\n {...props}\n >\n {accent && (\n <div\n className={cn(cardAccentVariants({ color: accent }))}\n aria-hidden=\"true\"\n />\n )}\n {loading && (\n <div className=\"bg-card/80 absolute inset-0 z-10 flex items-center justify-center backdrop-blur-sm\">\n <div className=\"flex gap-1\">\n <div className=\"bg-primary-500 h-2 w-2 animate-bounce rounded-full [animation-delay:-0.3s]\" />\n <div className=\"bg-primary-500 h-2 w-2 animate-bounce rounded-full [animation-delay:-0.15s]\" />\n <div className=\"bg-primary-500 h-2 w-2 animate-bounce rounded-full\" />\n </div>\n </div>\n )}\n {children}\n </Component>\n );\n }\n);\n\nCard.displayName = 'Card';\n\n/**\n * Header section of a Card\n */\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-header\"\n className={cn('flex flex-col gap-1.5 pb-4', className)}\n {...props}\n />\n));\n\nCardHeader.displayName = 'CardHeader';\n\n/**\n * Title for a Card\n */\nconst CardTitle = React.forwardRef<\n globalThis.HTMLHeadingElement,\n React.HTMLAttributes<globalThis.HTMLHeadingElement>\n>(({ className, children, ...props }, ref) => (\n <h3\n ref={ref}\n data-slot=\"card-title\"\n className={cn(\n 'text-lg leading-none font-semibold tracking-tight',\n className\n )}\n {...props}\n >\n {children}\n </h3>\n));\n\nCardTitle.displayName = 'CardTitle';\n\n/**\n * Description text for a Card\n */\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"card-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n));\n\nCardDescription.displayName = 'CardDescription';\n\n/**\n * Main content area of a Card\n */\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-content\"\n className={cn('', className)}\n {...props}\n />\n));\n\nCardContent.displayName = 'CardContent';\n\n/**\n * Footer section of a Card\n */\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-footer\"\n className={cn('flex items-center pt-4', className)}\n {...props}\n />\n));\n\nCardFooter.displayName = 'CardFooter';\n\n/**\n * Image/Media section for a Card - typically used at the top\n */\nexport interface CardMediaProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n /** Aspect ratio of the media */\n aspectRatio?: 'video' | 'square' | 'wide' | 'auto';\n /** Optional overlay content */\n overlay?: React.ReactNode;\n}\n\nconst CardMedia = React.forwardRef<HTMLDivElement, CardMediaProps>(\n ({ className, aspectRatio = 'video', overlay, src, alt, ...props }, ref) => {\n const aspectClasses = {\n video: 'aspect-video',\n square: 'aspect-square',\n wide: 'aspect-[21/9]',\n auto: '',\n };\n\n return (\n <div\n ref={ref}\n data-slot=\"card-media\"\n className={cn(\n 'relative -mx-4 -mt-4 overflow-hidden first:rounded-t-xl',\n className\n )}\n >\n <img\n src={src}\n alt={alt}\n className={cn('w-full object-cover', aspectClasses[aspectRatio])}\n {...props}\n />\n {overlay && (\n <div className=\"absolute inset-0 flex items-end bg-gradient-to-t from-neutral-900/60 to-transparent p-4\">\n {overlay}\n </div>\n )}\n </div>\n );\n }\n);\n\nCardMedia.displayName = 'CardMedia';\n\n/**\n * Badge/Label component for Cards\n */\nexport interface CardBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Badge color variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'destructive';\n /** Position of the badge */\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n}\n\nconst CardBadge = React.forwardRef<HTMLSpanElement, CardBadgeProps>(\n (\n {\n className,\n variant = 'default',\n position = 'top-right',\n children,\n ...props\n },\n ref\n ) => {\n const variantClasses = {\n default: 'bg-muted text-muted-foreground',\n primary: 'bg-primary-500 text-white',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n destructive: 'bg-destructive text-destructive-foreground',\n };\n\n const positionClasses = {\n 'top-left': 'top-2 left-2',\n 'top-right': 'top-2 right-2',\n 'bottom-left': 'bottom-2 left-2',\n 'bottom-right': 'bottom-2 right-2',\n };\n\n return (\n <span\n ref={ref}\n data-slot=\"card-badge\"\n className={cn(\n 'absolute z-10 rounded-md px-2 py-1 text-xs font-medium',\n variantClasses[variant],\n positionClasses[position],\n className\n )}\n {...props}\n >\n {children}\n </span>\n );\n }\n);\n\nCardBadge.displayName = 'CardBadge';\n\n/**\n * Actions area for Card buttons/links\n */\nexport interface CardActionsProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Alignment of actions */\n align?: 'left' | 'center' | 'right' | 'between' | 'around';\n}\n\nconst CardActions = React.forwardRef<HTMLDivElement, CardActionsProps>(\n ({ className, align = 'right', children, ...props }, ref) => {\n const alignClasses = {\n left: 'justify-start',\n center: 'justify-center',\n right: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n };\n\n return (\n <div\n ref={ref}\n data-slot=\"card-actions\"\n className={cn(\n 'flex items-center gap-2 pt-4',\n alignClasses[align],\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCardActions.displayName = 'CardActions';\n\n/**\n * Divider line within a Card\n */\nconst CardDivider = React.forwardRef<\n globalThis.HTMLHRElement,\n React.HTMLAttributes<globalThis.HTMLHRElement>\n>(({ className, ...props }, ref) => (\n <hr\n ref={ref}\n data-slot=\"card-divider\"\n className={cn('border-border -mx-4 my-4', className)}\n {...props}\n />\n));\n\nCardDivider.displayName = 'CardDivider';\n\n/**\n * Collapsible content section for Cards\n */\nexport interface CardCollapsibleProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Whether the content is expanded */\n expanded?: boolean;\n /** Callback when expand state changes */\n onExpandChange?: (expanded: boolean) => void;\n /** Trigger element/text for expanding */\n trigger?: React.ReactNode;\n}\n\nconst CardCollapsible = React.forwardRef<HTMLDivElement, CardCollapsibleProps>(\n (\n {\n className,\n expanded: controlledExpanded,\n onExpandChange,\n trigger = 'Show more',\n children,\n ...props\n },\n ref\n ) => {\n const [internalExpanded, setInternalExpanded] = React.useState(false);\n const isControlled = controlledExpanded !== undefined;\n const expanded = isControlled ? controlledExpanded : internalExpanded;\n\n const handleToggle = () => {\n if (isControlled) {\n onExpandChange?.(!expanded);\n } else {\n setInternalExpanded(!expanded);\n }\n };\n\n return (\n <div\n ref={ref}\n data-slot=\"card-collapsible\"\n className={cn('', className)}\n {...props}\n >\n <button\n type=\"button\"\n onClick={handleToggle}\n className=\"text-primary-600 focus-visible:ring-primary-500 flex items-center gap-1 rounded text-sm hover:underline focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\"\n aria-expanded={expanded}\n >\n {typeof trigger === 'string' ? (\n <>\n {expanded ? 'Show less' : trigger}\n <svg\n className={cn(\n 'h-4 w-4 transition-transform',\n expanded && 'rotate-180'\n )}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </>\n ) : (\n trigger\n )}\n </button>\n <div\n className={cn(\n 'grid transition-all duration-300 ease-in-out',\n expanded\n ? 'mt-3 grid-rows-[1fr] opacity-100'\n : 'grid-rows-[0fr] opacity-0'\n )}\n >\n <div className=\"overflow-hidden\">{children}</div>\n </div>\n </div>\n );\n }\n);\n\nCardCollapsible.displayName = 'CardCollapsible';\n\n/**\n * Stat/Metric display for Cards\n */\nexport interface CardStatProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The main value/number */\n value: React.ReactNode;\n /** Label describing the stat */\n label: string;\n /** Trend indicator */\n trend?: { value: number; label?: string };\n /** Icon to display */\n icon?: React.ReactNode;\n}\n\nconst CardStat = React.forwardRef<HTMLDivElement, CardStatProps>(\n ({ className, value, label, trend, icon, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-slot=\"card-stat\"\n className={cn('flex items-start gap-3', className)}\n {...props}\n >\n {icon && (\n <div className=\"bg-primary-500/10 text-primary-600 rounded-lg p-2\">\n {icon}\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-2xl font-bold tracking-tight\">{value}</div>\n <div className=\"text-muted-foreground text-sm\">{label}</div>\n {trend && (\n <div\n className={cn(\n 'mt-1 flex items-center gap-1 text-sm',\n trend.value >= 0 ? 'text-success' : 'text-destructive'\n )}\n >\n <svg\n className={cn('h-4 w-4', trend.value < 0 && 'rotate-180')}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M5 10l7-7m0 0l7 7m-7-7v18\"\n />\n </svg>\n <span>{Math.abs(trend.value)}%</span>\n {trend.label && (\n <span className=\"text-muted-foreground\">{trend.label}</span>\n )}\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nCardStat.displayName = 'CardStat';\n\nexport {\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n CardMedia,\n CardBadge,\n CardActions,\n CardDivider,\n CardCollapsible,\n CardStat,\n cardVariants,\n cardAccentVariants,\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Card/Card.tsx"],"names":[],"mappings":";;;;;AAIA,IAAM,YAAA,GAAe,GAAA;AAAA,EACnB;AAAA,IACE,yCAAA;AAAA,IACA,sBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,KAAA;AAAA,QACN,EAAA,EAAI,KAAA;AAAA,QACJ,EAAA,EAAI,KAAA;AAAA,QACJ,EAAA,EAAI,KAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,aAAA;AAAA,QACT,QAAA,EAAU,oBAAA;AAAA,QACV,QAAA,EAAU,sBAAA;AAAA,QACV,KAAA,EAAO,qCAAA;AAAA,QACP,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,WAAA,EAAa;AAAA,QACX,IAAA,EAAM;AAAA,UACJ,6BAAA;AAAA,UACA,0CAAA;AAAA,UACA,+BAAA;AAAA,UACA,gBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,OACT;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,4CAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AAAA,MACA,WAAA,EAAa;AAAA,QACX,QAAA,EAAU,eAAA;AAAA,QACV,UAAA,EAAY;AAAA;AACd,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,IAAA;AAAA,MACT,OAAA,EAAS,SAAA;AAAA,MACT,WAAA,EAAa,KAAA;AAAA,MACb,QAAA,EAAU,KAAA;AAAA,MACV,WAAA,EAAa;AAAA;AACf;AAEJ;AAEA,IAAM,kBAAA,GAAqB,IAAI,oCAAA,EAAsC;AAAA,EACnE,QAAA,EAAU;AAAA,IACR,KAAA,EAAO;AAAA,MACL,OAAA,EAAS,gBAAA;AAAA,MACT,OAAA,EAAS,YAAA;AAAA,MACT,OAAA,EAAS,YAAA;AAAA,MACT,WAAA,EAAa,gBAAA;AAAA,MACb,IAAA,EAAM;AAAA;AACR;AAEJ,CAAC;AA2BD,IAAM,IAAA,GAAa,KAAA,CAAA,UAAA;AAAA,EACjB,CACE;AAAA,IACE,SAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAI,SAAA,GAAY,KAAA;AAAA,IAChB,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,uBACE,IAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,YAAA,CAAa;AAAA,YACX,OAAA;AAAA,YACA,OAAA;AAAA,YACA,WAAA;AAAA,YACA,QAAA;AAAA,YACA;AAAA,WACD,CAAA;AAAA,UACD,MAAA,IAAU,MAAA;AAAA,UACV;AAAA,SACF;AAAA,QACA,WAAA,EAAU,MAAA;AAAA,QACV,gBAAc,OAAA,IAAW,MAAA;AAAA,QACzB,aAAW,OAAA,IAAW,MAAA;AAAA,QACrB,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,MAAA,oBACC,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,WAAW,EAAA,CAAG,kBAAA,CAAmB,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAC,CAAA;AAAA,cACnD,aAAA,EAAY;AAAA;AAAA,WACd;AAAA,UAED,OAAA,wBACE,KAAA,EAAA,EAAI,SAAA,EAAU,sFACb,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,YAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4EAAA,EAA6E,CAAA;AAAA,4BAC5F,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6EAAA,EAA8E,CAAA;AAAA,4BAC7F,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EAAqD;AAAA,WAAA,EACtE,CAAA,EACF,CAAA;AAAA,UAED;AAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AAEA,IAAA,CAAK,WAAA,GAAc,MAAA;AAKnB,IAAM,UAAA,GAAmB,iBAGvB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,aAAA;AAAA,IACV,SAAA,EAAW,EAAA,CAAG,4BAAA,EAA8B,SAAS,CAAA;AAAA,IACpD,GAAG;AAAA;AACN,CACD;AAED,UAAA,CAAW,WAAA,GAAc,YAAA;AAKzB,IAAM,SAAA,GAAkB,iBAGtB,CAAC,EAAE,WAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpC,GAAA;AAAA,EAAC,IAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,YAAA;AAAA,IACV,SAAA,EAAW,EAAA;AAAA,MACT,mDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEH;AAAA;AACH,CACD;AAED,SAAA,CAAU,WAAA,GAAc,WAAA;AAKxB,IAAM,eAAA,GAAwB,iBAG5B,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAC,GAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,kBAAA;AAAA,IACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,IACvD,GAAG;AAAA;AACN,CACD;AAED,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAK9B,IAAM,WAAA,GAAoB,iBAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,cAAA;AAAA,IACV,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,SAAS,CAAA;AAAA,IAC1B,GAAG;AAAA;AACN,CACD;AAED,WAAA,CAAY,WAAA,GAAc,aAAA;AAK1B,IAAM,UAAA,GAAmB,iBAGvB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,aAAA;AAAA,IACV,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA;AAAA,IAChD,GAAG;AAAA;AACN,CACD;AAED,UAAA,CAAW,WAAA,GAAc,YAAA;AAYzB,IAAM,SAAA,GAAkB,KAAA,CAAA,UAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,WAAA,GAAc,OAAA,EAAS,OAAA,EAAS,GAAA,EAAK,GAAA,EAAK,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC1E,IAAA,MAAM,aAAA,GAAgB;AAAA,MACpB,KAAA,EAAO,cAAA;AAAA,MACP,MAAA,EAAQ,eAAA;AAAA,MACR,IAAA,EAAM,eAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACR;AAEA,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,YAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,yDAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA;AAAA,cACA,GAAA;AAAA,cACA,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,aAAA,CAAc,WAAW,CAAC,CAAA;AAAA,cAC9D,GAAG;AAAA;AAAA,WACN;AAAA,UACC,OAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2FACZ,QAAA,EAAA,OAAA,EACH;AAAA;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA;AAYxB,IAAM,SAAA,GAAkB,KAAA,CAAA,UAAA;AAAA,EACtB,CACE;AAAA,IACE,SAAA;AAAA,IACA,OAAA,GAAU,SAAA;AAAA,IACV,QAAA,GAAW,WAAA;AAAA,IACX,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,cAAA,GAAiB;AAAA,MACrB,OAAA,EAAS,gCAAA;AAAA,MACT,OAAA,EAAS,2BAAA;AAAA,MACT,OAAA,EAAS,oCAAA;AAAA,MACT,OAAA,EAAS,oCAAA;AAAA,MACT,WAAA,EAAa;AAAA,KACf;AAEA,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,UAAA,EAAY,cAAA;AAAA,MACZ,WAAA,EAAa,eAAA;AAAA,MACb,aAAA,EAAe,iBAAA;AAAA,MACf,cAAA,EAAgB;AAAA,KAClB;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,YAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,wDAAA;AAAA,UACA,eAAe,OAAO,CAAA;AAAA,UACtB,gBAAgB,QAAQ,CAAA;AAAA,UACxB;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA;AAUxB,IAAM,WAAA,GAAoB,KAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,KAAA,GAAQ,SAAS,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC3D,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,IAAA,EAAM,eAAA;AAAA,MACN,MAAA,EAAQ,gBAAA;AAAA,MACR,KAAA,EAAO,aAAA;AAAA,MACP,OAAA,EAAS,iBAAA;AAAA,MACT,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,cAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,8BAAA;AAAA,UACA,aAAa,KAAK,CAAA;AAAA,UAClB;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;AAK1B,IAAM,WAAA,GAAoB,iBAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAC,IAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,cAAA;AAAA,IACV,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA;AAAA,IAClD,GAAG;AAAA;AACN,CACD;AAED,WAAA,CAAY,WAAA,GAAc,aAAA;AAc1B,IAAM,eAAA,GAAwB,KAAA,CAAA,UAAA;AAAA,EAC5B,CACE;AAAA,IACE,SAAA;AAAA,IACA,QAAA,EAAU,kBAAA;AAAA,IACV,cAAA;AAAA,IACA,OAAA,GAAU,WAAA;AAAA,IACV,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAU,eAAS,KAAK,CAAA;AACpE,IAAA,MAAM,eAAe,kBAAA,KAAuB,MAAA;AAC5C,IAAA,MAAM,QAAA,GAAW,eAAe,kBAAA,GAAqB,gBAAA;AAErD,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,cAAA,GAAiB,CAAC,QAAQ,CAAA;AAAA,MAC5B,CAAA,MAAO;AACL,QAAA,mBAAA,CAAoB,CAAC,QAAQ,CAAA;AAAA,MAC/B;AAAA,IACF,CAAA;AAEA,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,kBAAA;AAAA,QACV,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,SAAS,CAAA;AAAA,QAC1B,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,YAAA;AAAA,cACT,SAAA,EAAU,6KAAA;AAAA,cACV,eAAA,EAAe,QAAA;AAAA,cAEd,QAAA,EAAA,OAAO,OAAA,KAAY,QAAA,mBAClB,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,gBAAA,QAAA,GAAW,WAAA,GAAc,OAAA;AAAA,gCAC1B,GAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,8BAAA;AAAA,sBACA,QAAA,IAAY;AAAA,qBACd;AAAA,oBACA,IAAA,EAAK,MAAA;AAAA,oBACL,MAAA,EAAO,cAAA;AAAA,oBACP,OAAA,EAAQ,WAAA;AAAA,oBAER,QAAA,kBAAA,GAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,aAAA,EAAc,OAAA;AAAA,wBACd,cAAA,EAAe,OAAA;AAAA,wBACf,WAAA,EAAa,CAAA;AAAA,wBACb,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA;AACF,eAAA,EACF,CAAA,GAEA;AAAA;AAAA,WAEJ;AAAA,0BACA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,8CAAA;AAAA,gBACA,WACI,kCAAA,GACA;AAAA,eACN;AAAA,cAEA,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAS;AAAA;AAAA;AAC7C;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAgB9B,IAAM,QAAA,GAAiB,KAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,KAAA,EAAO,OAAO,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC3D,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,WAAA;AAAA,QACV,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA;AAAA,QAChD,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,IAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EACZ,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,0BAEF,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EAAqC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,4BAC1D,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAiC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,YACrD,KAAA,oBACC,IAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,sCAAA;AAAA,kBACA,KAAA,CAAM,KAAA,IAAS,CAAA,GAAI,cAAA,GAAiB;AAAA,iBACtC;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAA,GAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,WAAW,EAAA,CAAG,SAAA,EAAW,KAAA,CAAM,KAAA,GAAQ,KAAK,YAAY,CAAA;AAAA,sBACxD,IAAA,EAAK,MAAA;AAAA,sBACL,MAAA,EAAO,cAAA;AAAA,sBACP,OAAA,EAAQ,WAAA;AAAA,sBAER,QAAA,kBAAA,GAAA;AAAA,wBAAC,MAAA;AAAA,wBAAA;AAAA,0BACC,aAAA,EAAc,OAAA;AAAA,0BACd,cAAA,EAAe,OAAA;AAAA,0BACf,WAAA,EAAa,CAAA;AAAA,0BACb,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA,mBACF;AAAA,uCACC,MAAA,EAAA,EAAM,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAK,GAAA,CAAI,MAAM,KAAK,CAAA;AAAA,oBAAE;AAAA,mBAAA,EAAC,CAAA;AAAA,kBAC7B,MAAM,KAAA,oBACL,GAAA,CAAC,UAAK,SAAA,EAAU,uBAAA,EAAyB,gBAAM,KAAA,EAAM;AAAA;AAAA;AAAA;AAEzD,WAAA,EAEJ;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-AL6ASCL6.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst cardVariants = cva(\n [\n 'rounded-xl bg-card text-card-foreground',\n 'border border-border',\n 'relative overflow-hidden',\n ],\n {\n variants: {\n padding: {\n none: 'p-0',\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-6',\n xl: 'p-8',\n },\n variant: {\n default: 'shadow-card',\n elevated: 'shadow-lg border-0',\n outlined: 'shadow-none border-2',\n ghost: 'shadow-none border-0 bg-transparent',\n filled: 'shadow-none border-0 bg-muted',\n },\n interactive: {\n true: [\n 'transition-all duration-200',\n 'hover:shadow-md hover:border-primary-200',\n 'dark:hover:border-primary-800',\n 'cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2',\n ],\n false: '',\n },\n selected: {\n true: 'ring-2 ring-primary-500 border-primary-500',\n false: '',\n },\n orientation: {\n vertical: 'flex flex-col',\n horizontal: 'flex flex-row',\n },\n },\n defaultVariants: {\n padding: 'md',\n variant: 'default',\n interactive: false,\n selected: false,\n orientation: 'vertical',\n },\n }\n);\n\nconst cardAccentVariants = cva('absolute left-0 top-0 bottom-0 w-1', {\n variants: {\n color: {\n primary: 'bg-primary-800',\n success: 'bg-success',\n warning: 'bg-warning',\n destructive: 'bg-destructive',\n info: 'bg-primary-200',\n },\n },\n});\n\nexport interface CardProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {\n /** Semantic HTML element to render as */\n as?: 'div' | 'article' | 'section' | 'aside';\n /** Accent color bar on the left side */\n accent?: 'primary' | 'success' | 'warning' | 'destructive' | 'info';\n /** Loading state - shows skeleton overlay */\n loading?: boolean;\n}\n\n/**\n * A card container component for grouping related content.\n *\n * @example\n * ```tsx\n * <Card padding=\"lg\" variant=\"elevated\">\n * <CardHeader>\n * <CardTitle>Card Title</CardTitle>\n * </CardHeader>\n * <CardContent>Card content goes here</CardContent>\n * </Card>\n * ```\n */\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n (\n {\n className,\n padding,\n variant,\n interactive,\n selected,\n orientation,\n accent,\n loading,\n as: Component = 'div',\n children,\n ...props\n },\n ref\n ) => {\n return (\n <Component\n ref={ref}\n className={cn(\n cardVariants({\n padding,\n variant,\n interactive,\n selected,\n orientation,\n }),\n accent && 'pl-4',\n className\n )}\n data-slot=\"card\"\n data-loading={loading || undefined}\n aria-busy={loading || undefined}\n {...props}\n >\n {accent && (\n <div\n className={cn(cardAccentVariants({ color: accent }))}\n aria-hidden=\"true\"\n />\n )}\n {loading && (\n <div className=\"bg-card/80 absolute inset-0 z-10 flex items-center justify-center backdrop-blur-sm\">\n <div className=\"flex gap-1\">\n <div className=\"bg-primary-800 h-2 w-2 animate-bounce rounded-full [animation-delay:-0.3s]\" />\n <div className=\"bg-primary-800 h-2 w-2 animate-bounce rounded-full [animation-delay:-0.15s]\" />\n <div className=\"bg-primary-800 h-2 w-2 animate-bounce rounded-full\" />\n </div>\n </div>\n )}\n {children}\n </Component>\n );\n }\n);\n\nCard.displayName = 'Card';\n\n/**\n * Header section of a Card\n */\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-header\"\n className={cn('flex flex-col gap-1.5 pb-4', className)}\n {...props}\n />\n));\n\nCardHeader.displayName = 'CardHeader';\n\n/**\n * Title for a Card\n */\nconst CardTitle = React.forwardRef<\n globalThis.HTMLHeadingElement,\n React.HTMLAttributes<globalThis.HTMLHeadingElement>\n>(({ className, children, ...props }, ref) => (\n <h3\n ref={ref}\n data-slot=\"card-title\"\n className={cn(\n 'text-lg leading-none font-semibold tracking-tight',\n className\n )}\n {...props}\n >\n {children}\n </h3>\n));\n\nCardTitle.displayName = 'CardTitle';\n\n/**\n * Description text for a Card\n */\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"card-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n));\n\nCardDescription.displayName = 'CardDescription';\n\n/**\n * Main content area of a Card\n */\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-content\"\n className={cn('', className)}\n {...props}\n />\n));\n\nCardContent.displayName = 'CardContent';\n\n/**\n * Footer section of a Card\n */\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-footer\"\n className={cn('flex items-center pt-4', className)}\n {...props}\n />\n));\n\nCardFooter.displayName = 'CardFooter';\n\n/**\n * Image/Media section for a Card - typically used at the top\n */\nexport interface CardMediaProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n /** Aspect ratio of the media */\n aspectRatio?: 'video' | 'square' | 'wide' | 'auto';\n /** Optional overlay content */\n overlay?: React.ReactNode;\n}\n\nconst CardMedia = React.forwardRef<HTMLDivElement, CardMediaProps>(\n ({ className, aspectRatio = 'video', overlay, src, alt, ...props }, ref) => {\n const aspectClasses = {\n video: 'aspect-video',\n square: 'aspect-square',\n wide: 'aspect-[21/9]',\n auto: '',\n };\n\n return (\n <div\n ref={ref}\n data-slot=\"card-media\"\n className={cn(\n 'relative -mx-4 -mt-4 overflow-hidden first:rounded-t-xl',\n className\n )}\n >\n <img\n src={src}\n alt={alt}\n className={cn('w-full object-cover', aspectClasses[aspectRatio])}\n {...props}\n />\n {overlay && (\n <div className=\"absolute inset-0 flex items-end bg-gradient-to-t from-neutral-900/60 to-transparent p-4\">\n {overlay}\n </div>\n )}\n </div>\n );\n }\n);\n\nCardMedia.displayName = 'CardMedia';\n\n/**\n * Badge/Label component for Cards\n */\nexport interface CardBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Badge color variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'destructive';\n /** Position of the badge */\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n}\n\nconst CardBadge = React.forwardRef<HTMLSpanElement, CardBadgeProps>(\n (\n {\n className,\n variant = 'default',\n position = 'top-right',\n children,\n ...props\n },\n ref\n ) => {\n const variantClasses = {\n default: 'bg-muted text-muted-foreground',\n primary: 'bg-primary-800 text-white',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n destructive: 'bg-destructive text-destructive-foreground',\n };\n\n const positionClasses = {\n 'top-left': 'top-2 left-2',\n 'top-right': 'top-2 right-2',\n 'bottom-left': 'bottom-2 left-2',\n 'bottom-right': 'bottom-2 right-2',\n };\n\n return (\n <span\n ref={ref}\n data-slot=\"card-badge\"\n className={cn(\n 'absolute z-10 rounded-md px-2 py-1 text-xs font-medium',\n variantClasses[variant],\n positionClasses[position],\n className\n )}\n {...props}\n >\n {children}\n </span>\n );\n }\n);\n\nCardBadge.displayName = 'CardBadge';\n\n/**\n * Actions area for Card buttons/links\n */\nexport interface CardActionsProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Alignment of actions */\n align?: 'left' | 'center' | 'right' | 'between' | 'around';\n}\n\nconst CardActions = React.forwardRef<HTMLDivElement, CardActionsProps>(\n ({ className, align = 'right', children, ...props }, ref) => {\n const alignClasses = {\n left: 'justify-start',\n center: 'justify-center',\n right: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n };\n\n return (\n <div\n ref={ref}\n data-slot=\"card-actions\"\n className={cn(\n 'flex items-center gap-2 pt-4',\n alignClasses[align],\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCardActions.displayName = 'CardActions';\n\n/**\n * Divider line within a Card\n */\nconst CardDivider = React.forwardRef<\n globalThis.HTMLHRElement,\n React.HTMLAttributes<globalThis.HTMLHRElement>\n>(({ className, ...props }, ref) => (\n <hr\n ref={ref}\n data-slot=\"card-divider\"\n className={cn('border-border -mx-4 my-4', className)}\n {...props}\n />\n));\n\nCardDivider.displayName = 'CardDivider';\n\n/**\n * Collapsible content section for Cards\n */\nexport interface CardCollapsibleProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Whether the content is expanded */\n expanded?: boolean;\n /** Callback when expand state changes */\n onExpandChange?: (expanded: boolean) => void;\n /** Trigger element/text for expanding */\n trigger?: React.ReactNode;\n}\n\nconst CardCollapsible = React.forwardRef<HTMLDivElement, CardCollapsibleProps>(\n (\n {\n className,\n expanded: controlledExpanded,\n onExpandChange,\n trigger = 'Show more',\n children,\n ...props\n },\n ref\n ) => {\n const [internalExpanded, setInternalExpanded] = React.useState(false);\n const isControlled = controlledExpanded !== undefined;\n const expanded = isControlled ? controlledExpanded : internalExpanded;\n\n const handleToggle = () => {\n if (isControlled) {\n onExpandChange?.(!expanded);\n } else {\n setInternalExpanded(!expanded);\n }\n };\n\n return (\n <div\n ref={ref}\n data-slot=\"card-collapsible\"\n className={cn('', className)}\n {...props}\n >\n <button\n type=\"button\"\n onClick={handleToggle}\n className=\"text-primary-800 focus-visible:ring-primary-500 flex items-center gap-1 rounded text-sm hover:underline focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\"\n aria-expanded={expanded}\n >\n {typeof trigger === 'string' ? (\n <>\n {expanded ? 'Show less' : trigger}\n <svg\n className={cn(\n 'h-4 w-4 transition-transform',\n expanded && 'rotate-180'\n )}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </>\n ) : (\n trigger\n )}\n </button>\n <div\n className={cn(\n 'grid transition-all duration-300 ease-in-out',\n expanded\n ? 'mt-3 grid-rows-[1fr] opacity-100'\n : 'grid-rows-[0fr] opacity-0'\n )}\n >\n <div className=\"overflow-hidden\">{children}</div>\n </div>\n </div>\n );\n }\n);\n\nCardCollapsible.displayName = 'CardCollapsible';\n\n/**\n * Stat/Metric display for Cards\n */\nexport interface CardStatProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The main value/number */\n value: React.ReactNode;\n /** Label describing the stat */\n label: string;\n /** Trend indicator */\n trend?: { value: number; label?: string };\n /** Icon to display */\n icon?: React.ReactNode;\n}\n\nconst CardStat = React.forwardRef<HTMLDivElement, CardStatProps>(\n ({ className, value, label, trend, icon, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-slot=\"card-stat\"\n className={cn('flex items-start gap-3', className)}\n {...props}\n >\n {icon && (\n <div className=\"bg-primary-500/10 text-primary-800 rounded-lg p-2\">\n {icon}\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-2xl font-bold tracking-tight\">{value}</div>\n <div className=\"text-muted-foreground text-sm\">{label}</div>\n {trend && (\n <div\n className={cn(\n 'mt-1 flex items-center gap-1 text-sm',\n trend.value >= 0 ? 'text-success' : 'text-destructive'\n )}\n >\n <svg\n className={cn('h-4 w-4', trend.value < 0 && 'rotate-180')}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M5 10l7-7m0 0l7 7m-7-7v18\"\n />\n </svg>\n <span>{Math.abs(trend.value)}%</span>\n {trend.label && (\n <span className=\"text-muted-foreground\">{trend.label}</span>\n )}\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nCardStat.displayName = 'CardStat';\n\nexport {\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n CardMedia,\n CardBadge,\n CardActions,\n CardDivider,\n CardCollapsible,\n CardStat,\n cardVariants,\n cardAccentVariants,\n};\n"]}
|
|
@@ -78,7 +78,7 @@ var cardVariants = classVarianceAuthority.cva(
|
|
|
78
78
|
var cardAccentVariants = classVarianceAuthority.cva("absolute left-0 top-0 bottom-0 w-1", {
|
|
79
79
|
variants: {
|
|
80
80
|
color: {
|
|
81
|
-
primary: "bg-primary-
|
|
81
|
+
primary: "bg-primary-800",
|
|
82
82
|
success: "bg-success",
|
|
83
83
|
warning: "bg-warning",
|
|
84
84
|
destructive: "bg-destructive",
|
|
@@ -128,9 +128,9 @@ var Card = React__namespace.forwardRef(
|
|
|
128
128
|
}
|
|
129
129
|
),
|
|
130
130
|
loading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-card/80 absolute inset-0 z-10 flex items-center justify-center backdrop-blur-sm", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-1", children: [
|
|
131
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-primary-
|
|
132
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-primary-
|
|
133
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-primary-
|
|
131
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-primary-800 h-2 w-2 animate-bounce rounded-full [animation-delay:-0.3s]" }),
|
|
132
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-primary-800 h-2 w-2 animate-bounce rounded-full [animation-delay:-0.15s]" }),
|
|
133
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-primary-800 h-2 w-2 animate-bounce rounded-full" })
|
|
134
134
|
] }) }),
|
|
135
135
|
children
|
|
136
136
|
]
|
|
@@ -237,7 +237,7 @@ var CardBadge = React__namespace.forwardRef(
|
|
|
237
237
|
}, ref) => {
|
|
238
238
|
const variantClasses = {
|
|
239
239
|
default: "bg-muted text-muted-foreground",
|
|
240
|
-
primary: "bg-primary-
|
|
240
|
+
primary: "bg-primary-800 text-white",
|
|
241
241
|
success: "bg-success text-success-foreground",
|
|
242
242
|
warning: "bg-warning text-warning-foreground",
|
|
243
243
|
destructive: "bg-destructive text-destructive-foreground"
|
|
@@ -334,7 +334,7 @@ var CardCollapsible = React__namespace.forwardRef(
|
|
|
334
334
|
{
|
|
335
335
|
type: "button",
|
|
336
336
|
onClick: handleToggle,
|
|
337
|
-
className: "text-primary-
|
|
337
|
+
className: "text-primary-800 focus-visible:ring-primary-500 flex items-center gap-1 rounded text-sm hover:underline focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
|
|
338
338
|
"aria-expanded": expanded,
|
|
339
339
|
children: typeof trigger === "string" ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
340
340
|
expanded ? "Show less" : trigger,
|
|
@@ -388,7 +388,7 @@ var CardStat = React__namespace.forwardRef(
|
|
|
388
388
|
className: chunkOR5DRJCW_cjs.cn("flex items-start gap-3", className),
|
|
389
389
|
...props,
|
|
390
390
|
children: [
|
|
391
|
-
icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-primary-500/10 text-primary-
|
|
391
|
+
icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-primary-500/10 text-primary-800 rounded-lg p-2", children: icon }),
|
|
392
392
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
393
393
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-2xl font-bold tracking-tight", children: value }),
|
|
394
394
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground text-sm", children: label }),
|
|
@@ -448,5 +448,5 @@ exports.CardStat = CardStat;
|
|
|
448
448
|
exports.CardTitle = CardTitle;
|
|
449
449
|
exports.cardAccentVariants = cardAccentVariants;
|
|
450
450
|
exports.cardVariants = cardVariants;
|
|
451
|
-
//# sourceMappingURL=chunk-
|
|
452
|
-
//# sourceMappingURL=chunk-
|
|
451
|
+
//# sourceMappingURL=chunk-CHMMHFOW.cjs.map
|
|
452
|
+
//# sourceMappingURL=chunk-CHMMHFOW.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Card/Card.tsx"],"names":["cva","React","jsxs","cn","jsx","Fragment"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAM,YAAA,GAAeA,0BAAA;AAAA,EACnB;AAAA,IACE,yCAAA;AAAA,IACA,sBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,KAAA;AAAA,QACN,EAAA,EAAI,KAAA;AAAA,QACJ,EAAA,EAAI,KAAA;AAAA,QACJ,EAAA,EAAI,KAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,aAAA;AAAA,QACT,QAAA,EAAU,oBAAA;AAAA,QACV,QAAA,EAAU,sBAAA;AAAA,QACV,KAAA,EAAO,qCAAA;AAAA,QACP,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,WAAA,EAAa;AAAA,QACX,IAAA,EAAM;AAAA,UACJ,6BAAA;AAAA,UACA,0CAAA;AAAA,UACA,+BAAA;AAAA,UACA,gBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,OACT;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,4CAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AAAA,MACA,WAAA,EAAa;AAAA,QACX,QAAA,EAAU,eAAA;AAAA,QACV,UAAA,EAAY;AAAA;AACd,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,IAAA;AAAA,MACT,OAAA,EAAS,SAAA;AAAA,MACT,WAAA,EAAa,KAAA;AAAA,MACb,QAAA,EAAU,KAAA;AAAA,MACV,WAAA,EAAa;AAAA;AACf;AAEJ;AAEA,IAAM,kBAAA,GAAqBA,2BAAI,oCAAA,EAAsC;AAAA,EACnE,QAAA,EAAU;AAAA,IACR,KAAA,EAAO;AAAA,MACL,OAAA,EAAS,gBAAA;AAAA,MACT,OAAA,EAAS,YAAA;AAAA,MACT,OAAA,EAAS,YAAA;AAAA,MACT,WAAA,EAAa,gBAAA;AAAA,MACb,IAAA,EAAM;AAAA;AACR;AAEJ,CAAC;AA2BD,IAAM,IAAA,GAAaC,gBAAA,CAAA,UAAA;AAAA,EACjB,CACE;AAAA,IACE,SAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAI,SAAA,GAAY,KAAA;AAAA,IAChB,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,uBACEC,eAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAWC,oBAAA;AAAA,UACT,YAAA,CAAa;AAAA,YACX,OAAA;AAAA,YACA,OAAA;AAAA,YACA,WAAA;AAAA,YACA,QAAA;AAAA,YACA;AAAA,WACD,CAAA;AAAA,UACD,MAAA,IAAU,MAAA;AAAA,UACV;AAAA,SACF;AAAA,QACA,WAAA,EAAU,MAAA;AAAA,QACV,gBAAc,OAAA,IAAW,MAAA;AAAA,QACzB,aAAW,OAAA,IAAW,MAAA;AAAA,QACrB,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,MAAA,oBACCC,cAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,WAAWD,oBAAA,CAAG,kBAAA,CAAmB,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAC,CAAA;AAAA,cACnD,aAAA,EAAY;AAAA;AAAA,WACd;AAAA,UAED,OAAA,mCACE,KAAA,EAAA,EAAI,SAAA,EAAU,sFACb,QAAA,kBAAAD,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,YAAA,EACb,QAAA,EAAA;AAAA,4BAAAE,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4EAAA,EAA6E,CAAA;AAAA,4BAC5FA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6EAAA,EAA8E,CAAA;AAAA,4BAC7FA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EAAqD;AAAA,WAAA,EACtE,CAAA,EACF,CAAA;AAAA,UAED;AAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AAEA,IAAA,CAAK,WAAA,GAAc,MAAA;AAKnB,IAAM,UAAA,GAAmBH,4BAGvB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1BG,cAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,aAAA;AAAA,IACV,SAAA,EAAWD,oBAAA,CAAG,4BAAA,EAA8B,SAAS,CAAA;AAAA,IACpD,GAAG;AAAA;AACN,CACD;AAED,UAAA,CAAW,WAAA,GAAc,YAAA;AAKzB,IAAM,SAAA,GAAkBF,4BAGtB,CAAC,EAAE,WAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpCG,cAAA;AAAA,EAAC,IAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,YAAA;AAAA,IACV,SAAA,EAAWD,oBAAA;AAAA,MACT,mDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEH;AAAA;AACH,CACD;AAED,SAAA,CAAU,WAAA,GAAc,WAAA;AAKxB,IAAM,eAAA,GAAwBF,4BAG5B,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1BG,cAAA;AAAA,EAAC,GAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,kBAAA;AAAA,IACV,SAAA,EAAWD,oBAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,IACvD,GAAG;AAAA;AACN,CACD;AAED,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAK9B,IAAM,WAAA,GAAoBF,4BAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1BG,cAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,cAAA;AAAA,IACV,SAAA,EAAWD,oBAAA,CAAG,EAAA,EAAI,SAAS,CAAA;AAAA,IAC1B,GAAG;AAAA;AACN,CACD;AAED,WAAA,CAAY,WAAA,GAAc,aAAA;AAK1B,IAAM,UAAA,GAAmBF,4BAGvB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1BG,cAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,aAAA;AAAA,IACV,SAAA,EAAWD,oBAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA;AAAA,IAChD,GAAG;AAAA;AACN,CACD;AAED,UAAA,CAAW,WAAA,GAAc,YAAA;AAYzB,IAAM,SAAA,GAAkBF,gBAAA,CAAA,UAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,WAAA,GAAc,OAAA,EAAS,OAAA,EAAS,GAAA,EAAK,GAAA,EAAK,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC1E,IAAA,MAAM,aAAA,GAAgB;AAAA,MACpB,KAAA,EAAO,cAAA;AAAA,MACP,MAAA,EAAQ,eAAA;AAAA,MACR,IAAA,EAAM,eAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACR;AAEA,IAAA,uBACEC,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,YAAA;AAAA,QACV,SAAA,EAAWC,oBAAA;AAAA,UACT,yDAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA;AAAA,cACA,GAAA;AAAA,cACA,SAAA,EAAWD,oBAAA,CAAG,qBAAA,EAAuB,aAAA,CAAc,WAAW,CAAC,CAAA;AAAA,cAC9D,GAAG;AAAA;AAAA,WACN;AAAA,UACC,OAAA,oBACCC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2FACZ,QAAA,EAAA,OAAA,EACH;AAAA;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA;AAYxB,IAAM,SAAA,GAAkBH,gBAAA,CAAA,UAAA;AAAA,EACtB,CACE;AAAA,IACE,SAAA;AAAA,IACA,OAAA,GAAU,SAAA;AAAA,IACV,QAAA,GAAW,WAAA;AAAA,IACX,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,cAAA,GAAiB;AAAA,MACrB,OAAA,EAAS,gCAAA;AAAA,MACT,OAAA,EAAS,2BAAA;AAAA,MACT,OAAA,EAAS,oCAAA;AAAA,MACT,OAAA,EAAS,oCAAA;AAAA,MACT,WAAA,EAAa;AAAA,KACf;AAEA,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,UAAA,EAAY,cAAA;AAAA,MACZ,WAAA,EAAa,eAAA;AAAA,MACb,aAAA,EAAe,iBAAA;AAAA,MACf,cAAA,EAAgB;AAAA,KAClB;AAEA,IAAA,uBACEG,cAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,YAAA;AAAA,QACV,SAAA,EAAWD,oBAAA;AAAA,UACT,wDAAA;AAAA,UACA,eAAe,OAAO,CAAA;AAAA,UACtB,gBAAgB,QAAQ,CAAA;AAAA,UACxB;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA;AAUxB,IAAM,WAAA,GAAoBF,gBAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,KAAA,GAAQ,SAAS,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC3D,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,IAAA,EAAM,eAAA;AAAA,MACN,MAAA,EAAQ,gBAAA;AAAA,MACR,KAAA,EAAO,aAAA;AAAA,MACP,OAAA,EAAS,iBAAA;AAAA,MACT,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,uBACEG,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,cAAA;AAAA,QACV,SAAA,EAAWD,oBAAA;AAAA,UACT,8BAAA;AAAA,UACA,aAAa,KAAK,CAAA;AAAA,UAClB;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;AAK1B,IAAM,WAAA,GAAoBF,4BAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1BG,cAAA;AAAA,EAAC,IAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,cAAA;AAAA,IACV,SAAA,EAAWD,oBAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA;AAAA,IAClD,GAAG;AAAA;AACN,CACD;AAED,WAAA,CAAY,WAAA,GAAc,aAAA;AAc1B,IAAM,eAAA,GAAwBF,gBAAA,CAAA,UAAA;AAAA,EAC5B,CACE;AAAA,IACE,SAAA;AAAA,IACA,QAAA,EAAU,kBAAA;AAAA,IACV,cAAA;AAAA,IACA,OAAA,GAAU,WAAA;AAAA,IACV,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAUA,0BAAS,KAAK,CAAA;AACpE,IAAA,MAAM,eAAe,kBAAA,KAAuB,MAAA;AAC5C,IAAA,MAAM,QAAA,GAAW,eAAe,kBAAA,GAAqB,gBAAA;AAErD,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,cAAA,GAAiB,CAAC,QAAQ,CAAA;AAAA,MAC5B,CAAA,MAAO;AACL,QAAA,mBAAA,CAAoB,CAAC,QAAQ,CAAA;AAAA,MAC/B;AAAA,IACF,CAAA;AAEA,IAAA,uBACEC,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,kBAAA;AAAA,QACV,SAAA,EAAWC,oBAAA,CAAG,EAAA,EAAI,SAAS,CAAA;AAAA,QAC1B,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,YAAA;AAAA,cACT,SAAA,EAAU,6KAAA;AAAA,cACV,eAAA,EAAe,QAAA;AAAA,cAEd,QAAA,EAAA,OAAO,OAAA,KAAY,QAAA,mBAClBF,eAAA,CAAAG,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,gBAAA,QAAA,GAAW,WAAA,GAAc,OAAA;AAAA,gCAC1BD,cAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAWD,oBAAA;AAAA,sBACT,8BAAA;AAAA,sBACA,QAAA,IAAY;AAAA,qBACd;AAAA,oBACA,IAAA,EAAK,MAAA;AAAA,oBACL,MAAA,EAAO,cAAA;AAAA,oBACP,OAAA,EAAQ,WAAA;AAAA,oBAER,QAAA,kBAAAC,cAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,aAAA,EAAc,OAAA;AAAA,wBACd,cAAA,EAAe,OAAA;AAAA,wBACf,WAAA,EAAa,CAAA;AAAA,wBACb,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA;AACF,eAAA,EACF,CAAA,GAEA;AAAA;AAAA,WAEJ;AAAA,0BACAA,cAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAWD,oBAAA;AAAA,gBACT,8CAAA;AAAA,gBACA,WACI,kCAAA,GACA;AAAA,eACN;AAAA,cAEA,QAAA,kBAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAS;AAAA;AAAA;AAC7C;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAgB9B,IAAM,QAAA,GAAiBH,gBAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,KAAA,EAAO,OAAO,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC3D,IAAA,uBACEC,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,WAAA;AAAA,QACV,SAAA,EAAWC,oBAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA;AAAA,QAChD,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,IAAA,oBACCC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EACZ,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,0BAEFF,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,4BAAAE,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EAAqC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,4BAC1DA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAiC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,YACrD,KAAA,oBACCF,eAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAWC,oBAAA;AAAA,kBACT,sCAAA;AAAA,kBACA,KAAA,CAAM,KAAA,IAAS,CAAA,GAAI,cAAA,GAAiB;AAAA,iBACtC;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAC,cAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,WAAWD,oBAAA,CAAG,SAAA,EAAW,KAAA,CAAM,KAAA,GAAQ,KAAK,YAAY,CAAA;AAAA,sBACxD,IAAA,EAAK,MAAA;AAAA,sBACL,MAAA,EAAO,cAAA;AAAA,sBACP,OAAA,EAAQ,WAAA;AAAA,sBAER,QAAA,kBAAAC,cAAA;AAAA,wBAAC,MAAA;AAAA,wBAAA;AAAA,0BACC,aAAA,EAAc,OAAA;AAAA,0BACd,cAAA,EAAe,OAAA;AAAA,0BACf,WAAA,EAAa,CAAA;AAAA,0BACb,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA,mBACF;AAAA,kDACC,MAAA,EAAA,EAAM,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAK,GAAA,CAAI,MAAM,KAAK,CAAA;AAAA,oBAAE;AAAA,mBAAA,EAAC,CAAA;AAAA,kBAC7B,MAAM,KAAA,oBACLA,cAAA,CAAC,UAAK,SAAA,EAAU,uBAAA,EAAyB,gBAAM,KAAA,EAAM;AAAA;AAAA;AAAA;AAEzD,WAAA,EAEJ;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-AUXHRAID.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst cardVariants = cva(\n [\n 'rounded-xl bg-card text-card-foreground',\n 'border border-border',\n 'relative overflow-hidden',\n ],\n {\n variants: {\n padding: {\n none: 'p-0',\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-6',\n xl: 'p-8',\n },\n variant: {\n default: 'shadow-card',\n elevated: 'shadow-lg border-0',\n outlined: 'shadow-none border-2',\n ghost: 'shadow-none border-0 bg-transparent',\n filled: 'shadow-none border-0 bg-muted',\n },\n interactive: {\n true: [\n 'transition-all duration-200',\n 'hover:shadow-md hover:border-primary-200',\n 'dark:hover:border-primary-800',\n 'cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2',\n ],\n false: '',\n },\n selected: {\n true: 'ring-2 ring-primary-500 border-primary-500',\n false: '',\n },\n orientation: {\n vertical: 'flex flex-col',\n horizontal: 'flex flex-row',\n },\n },\n defaultVariants: {\n padding: 'md',\n variant: 'default',\n interactive: false,\n selected: false,\n orientation: 'vertical',\n },\n }\n);\n\nconst cardAccentVariants = cva('absolute left-0 top-0 bottom-0 w-1', {\n variants: {\n color: {\n primary: 'bg-primary-500',\n success: 'bg-success',\n warning: 'bg-warning',\n destructive: 'bg-destructive',\n info: 'bg-primary-200',\n },\n },\n});\n\nexport interface CardProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {\n /** Semantic HTML element to render as */\n as?: 'div' | 'article' | 'section' | 'aside';\n /** Accent color bar on the left side */\n accent?: 'primary' | 'success' | 'warning' | 'destructive' | 'info';\n /** Loading state - shows skeleton overlay */\n loading?: boolean;\n}\n\n/**\n * A card container component for grouping related content.\n *\n * @example\n * ```tsx\n * <Card padding=\"lg\" variant=\"elevated\">\n * <CardHeader>\n * <CardTitle>Card Title</CardTitle>\n * </CardHeader>\n * <CardContent>Card content goes here</CardContent>\n * </Card>\n * ```\n */\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n (\n {\n className,\n padding,\n variant,\n interactive,\n selected,\n orientation,\n accent,\n loading,\n as: Component = 'div',\n children,\n ...props\n },\n ref\n ) => {\n return (\n <Component\n ref={ref}\n className={cn(\n cardVariants({\n padding,\n variant,\n interactive,\n selected,\n orientation,\n }),\n accent && 'pl-4',\n className\n )}\n data-slot=\"card\"\n data-loading={loading || undefined}\n aria-busy={loading || undefined}\n {...props}\n >\n {accent && (\n <div\n className={cn(cardAccentVariants({ color: accent }))}\n aria-hidden=\"true\"\n />\n )}\n {loading && (\n <div className=\"bg-card/80 absolute inset-0 z-10 flex items-center justify-center backdrop-blur-sm\">\n <div className=\"flex gap-1\">\n <div className=\"bg-primary-500 h-2 w-2 animate-bounce rounded-full [animation-delay:-0.3s]\" />\n <div className=\"bg-primary-500 h-2 w-2 animate-bounce rounded-full [animation-delay:-0.15s]\" />\n <div className=\"bg-primary-500 h-2 w-2 animate-bounce rounded-full\" />\n </div>\n </div>\n )}\n {children}\n </Component>\n );\n }\n);\n\nCard.displayName = 'Card';\n\n/**\n * Header section of a Card\n */\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-header\"\n className={cn('flex flex-col gap-1.5 pb-4', className)}\n {...props}\n />\n));\n\nCardHeader.displayName = 'CardHeader';\n\n/**\n * Title for a Card\n */\nconst CardTitle = React.forwardRef<\n globalThis.HTMLHeadingElement,\n React.HTMLAttributes<globalThis.HTMLHeadingElement>\n>(({ className, children, ...props }, ref) => (\n <h3\n ref={ref}\n data-slot=\"card-title\"\n className={cn(\n 'text-lg leading-none font-semibold tracking-tight',\n className\n )}\n {...props}\n >\n {children}\n </h3>\n));\n\nCardTitle.displayName = 'CardTitle';\n\n/**\n * Description text for a Card\n */\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"card-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n));\n\nCardDescription.displayName = 'CardDescription';\n\n/**\n * Main content area of a Card\n */\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-content\"\n className={cn('', className)}\n {...props}\n />\n));\n\nCardContent.displayName = 'CardContent';\n\n/**\n * Footer section of a Card\n */\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-footer\"\n className={cn('flex items-center pt-4', className)}\n {...props}\n />\n));\n\nCardFooter.displayName = 'CardFooter';\n\n/**\n * Image/Media section for a Card - typically used at the top\n */\nexport interface CardMediaProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n /** Aspect ratio of the media */\n aspectRatio?: 'video' | 'square' | 'wide' | 'auto';\n /** Optional overlay content */\n overlay?: React.ReactNode;\n}\n\nconst CardMedia = React.forwardRef<HTMLDivElement, CardMediaProps>(\n ({ className, aspectRatio = 'video', overlay, src, alt, ...props }, ref) => {\n const aspectClasses = {\n video: 'aspect-video',\n square: 'aspect-square',\n wide: 'aspect-[21/9]',\n auto: '',\n };\n\n return (\n <div\n ref={ref}\n data-slot=\"card-media\"\n className={cn(\n 'relative -mx-4 -mt-4 overflow-hidden first:rounded-t-xl',\n className\n )}\n >\n <img\n src={src}\n alt={alt}\n className={cn('w-full object-cover', aspectClasses[aspectRatio])}\n {...props}\n />\n {overlay && (\n <div className=\"absolute inset-0 flex items-end bg-gradient-to-t from-neutral-900/60 to-transparent p-4\">\n {overlay}\n </div>\n )}\n </div>\n );\n }\n);\n\nCardMedia.displayName = 'CardMedia';\n\n/**\n * Badge/Label component for Cards\n */\nexport interface CardBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Badge color variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'destructive';\n /** Position of the badge */\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n}\n\nconst CardBadge = React.forwardRef<HTMLSpanElement, CardBadgeProps>(\n (\n {\n className,\n variant = 'default',\n position = 'top-right',\n children,\n ...props\n },\n ref\n ) => {\n const variantClasses = {\n default: 'bg-muted text-muted-foreground',\n primary: 'bg-primary-500 text-white',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n destructive: 'bg-destructive text-destructive-foreground',\n };\n\n const positionClasses = {\n 'top-left': 'top-2 left-2',\n 'top-right': 'top-2 right-2',\n 'bottom-left': 'bottom-2 left-2',\n 'bottom-right': 'bottom-2 right-2',\n };\n\n return (\n <span\n ref={ref}\n data-slot=\"card-badge\"\n className={cn(\n 'absolute z-10 rounded-md px-2 py-1 text-xs font-medium',\n variantClasses[variant],\n positionClasses[position],\n className\n )}\n {...props}\n >\n {children}\n </span>\n );\n }\n);\n\nCardBadge.displayName = 'CardBadge';\n\n/**\n * Actions area for Card buttons/links\n */\nexport interface CardActionsProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Alignment of actions */\n align?: 'left' | 'center' | 'right' | 'between' | 'around';\n}\n\nconst CardActions = React.forwardRef<HTMLDivElement, CardActionsProps>(\n ({ className, align = 'right', children, ...props }, ref) => {\n const alignClasses = {\n left: 'justify-start',\n center: 'justify-center',\n right: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n };\n\n return (\n <div\n ref={ref}\n data-slot=\"card-actions\"\n className={cn(\n 'flex items-center gap-2 pt-4',\n alignClasses[align],\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCardActions.displayName = 'CardActions';\n\n/**\n * Divider line within a Card\n */\nconst CardDivider = React.forwardRef<\n globalThis.HTMLHRElement,\n React.HTMLAttributes<globalThis.HTMLHRElement>\n>(({ className, ...props }, ref) => (\n <hr\n ref={ref}\n data-slot=\"card-divider\"\n className={cn('border-border -mx-4 my-4', className)}\n {...props}\n />\n));\n\nCardDivider.displayName = 'CardDivider';\n\n/**\n * Collapsible content section for Cards\n */\nexport interface CardCollapsibleProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Whether the content is expanded */\n expanded?: boolean;\n /** Callback when expand state changes */\n onExpandChange?: (expanded: boolean) => void;\n /** Trigger element/text for expanding */\n trigger?: React.ReactNode;\n}\n\nconst CardCollapsible = React.forwardRef<HTMLDivElement, CardCollapsibleProps>(\n (\n {\n className,\n expanded: controlledExpanded,\n onExpandChange,\n trigger = 'Show more',\n children,\n ...props\n },\n ref\n ) => {\n const [internalExpanded, setInternalExpanded] = React.useState(false);\n const isControlled = controlledExpanded !== undefined;\n const expanded = isControlled ? controlledExpanded : internalExpanded;\n\n const handleToggle = () => {\n if (isControlled) {\n onExpandChange?.(!expanded);\n } else {\n setInternalExpanded(!expanded);\n }\n };\n\n return (\n <div\n ref={ref}\n data-slot=\"card-collapsible\"\n className={cn('', className)}\n {...props}\n >\n <button\n type=\"button\"\n onClick={handleToggle}\n className=\"text-primary-600 focus-visible:ring-primary-500 flex items-center gap-1 rounded text-sm hover:underline focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\"\n aria-expanded={expanded}\n >\n {typeof trigger === 'string' ? (\n <>\n {expanded ? 'Show less' : trigger}\n <svg\n className={cn(\n 'h-4 w-4 transition-transform',\n expanded && 'rotate-180'\n )}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </>\n ) : (\n trigger\n )}\n </button>\n <div\n className={cn(\n 'grid transition-all duration-300 ease-in-out',\n expanded\n ? 'mt-3 grid-rows-[1fr] opacity-100'\n : 'grid-rows-[0fr] opacity-0'\n )}\n >\n <div className=\"overflow-hidden\">{children}</div>\n </div>\n </div>\n );\n }\n);\n\nCardCollapsible.displayName = 'CardCollapsible';\n\n/**\n * Stat/Metric display for Cards\n */\nexport interface CardStatProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The main value/number */\n value: React.ReactNode;\n /** Label describing the stat */\n label: string;\n /** Trend indicator */\n trend?: { value: number; label?: string };\n /** Icon to display */\n icon?: React.ReactNode;\n}\n\nconst CardStat = React.forwardRef<HTMLDivElement, CardStatProps>(\n ({ className, value, label, trend, icon, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-slot=\"card-stat\"\n className={cn('flex items-start gap-3', className)}\n {...props}\n >\n {icon && (\n <div className=\"bg-primary-500/10 text-primary-600 rounded-lg p-2\">\n {icon}\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-2xl font-bold tracking-tight\">{value}</div>\n <div className=\"text-muted-foreground text-sm\">{label}</div>\n {trend && (\n <div\n className={cn(\n 'mt-1 flex items-center gap-1 text-sm',\n trend.value >= 0 ? 'text-success' : 'text-destructive'\n )}\n >\n <svg\n className={cn('h-4 w-4', trend.value < 0 && 'rotate-180')}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M5 10l7-7m0 0l7 7m-7-7v18\"\n />\n </svg>\n <span>{Math.abs(trend.value)}%</span>\n {trend.label && (\n <span className=\"text-muted-foreground\">{trend.label}</span>\n )}\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nCardStat.displayName = 'CardStat';\n\nexport {\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n CardMedia,\n CardBadge,\n CardActions,\n CardDivider,\n CardCollapsible,\n CardStat,\n cardVariants,\n cardAccentVariants,\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Card/Card.tsx"],"names":["cva","React","jsxs","cn","jsx","Fragment"],"mappings":"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","file":"chunk-CHMMHFOW.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst cardVariants = cva(\n [\n 'rounded-xl bg-card text-card-foreground',\n 'border border-border',\n 'relative overflow-hidden',\n ],\n {\n variants: {\n padding: {\n none: 'p-0',\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-6',\n xl: 'p-8',\n },\n variant: {\n default: 'shadow-card',\n elevated: 'shadow-lg border-0',\n outlined: 'shadow-none border-2',\n ghost: 'shadow-none border-0 bg-transparent',\n filled: 'shadow-none border-0 bg-muted',\n },\n interactive: {\n true: [\n 'transition-all duration-200',\n 'hover:shadow-md hover:border-primary-200',\n 'dark:hover:border-primary-800',\n 'cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2',\n ],\n false: '',\n },\n selected: {\n true: 'ring-2 ring-primary-500 border-primary-500',\n false: '',\n },\n orientation: {\n vertical: 'flex flex-col',\n horizontal: 'flex flex-row',\n },\n },\n defaultVariants: {\n padding: 'md',\n variant: 'default',\n interactive: false,\n selected: false,\n orientation: 'vertical',\n },\n }\n);\n\nconst cardAccentVariants = cva('absolute left-0 top-0 bottom-0 w-1', {\n variants: {\n color: {\n primary: 'bg-primary-800',\n success: 'bg-success',\n warning: 'bg-warning',\n destructive: 'bg-destructive',\n info: 'bg-primary-200',\n },\n },\n});\n\nexport interface CardProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {\n /** Semantic HTML element to render as */\n as?: 'div' | 'article' | 'section' | 'aside';\n /** Accent color bar on the left side */\n accent?: 'primary' | 'success' | 'warning' | 'destructive' | 'info';\n /** Loading state - shows skeleton overlay */\n loading?: boolean;\n}\n\n/**\n * A card container component for grouping related content.\n *\n * @example\n * ```tsx\n * <Card padding=\"lg\" variant=\"elevated\">\n * <CardHeader>\n * <CardTitle>Card Title</CardTitle>\n * </CardHeader>\n * <CardContent>Card content goes here</CardContent>\n * </Card>\n * ```\n */\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n (\n {\n className,\n padding,\n variant,\n interactive,\n selected,\n orientation,\n accent,\n loading,\n as: Component = 'div',\n children,\n ...props\n },\n ref\n ) => {\n return (\n <Component\n ref={ref}\n className={cn(\n cardVariants({\n padding,\n variant,\n interactive,\n selected,\n orientation,\n }),\n accent && 'pl-4',\n className\n )}\n data-slot=\"card\"\n data-loading={loading || undefined}\n aria-busy={loading || undefined}\n {...props}\n >\n {accent && (\n <div\n className={cn(cardAccentVariants({ color: accent }))}\n aria-hidden=\"true\"\n />\n )}\n {loading && (\n <div className=\"bg-card/80 absolute inset-0 z-10 flex items-center justify-center backdrop-blur-sm\">\n <div className=\"flex gap-1\">\n <div className=\"bg-primary-800 h-2 w-2 animate-bounce rounded-full [animation-delay:-0.3s]\" />\n <div className=\"bg-primary-800 h-2 w-2 animate-bounce rounded-full [animation-delay:-0.15s]\" />\n <div className=\"bg-primary-800 h-2 w-2 animate-bounce rounded-full\" />\n </div>\n </div>\n )}\n {children}\n </Component>\n );\n }\n);\n\nCard.displayName = 'Card';\n\n/**\n * Header section of a Card\n */\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-header\"\n className={cn('flex flex-col gap-1.5 pb-4', className)}\n {...props}\n />\n));\n\nCardHeader.displayName = 'CardHeader';\n\n/**\n * Title for a Card\n */\nconst CardTitle = React.forwardRef<\n globalThis.HTMLHeadingElement,\n React.HTMLAttributes<globalThis.HTMLHeadingElement>\n>(({ className, children, ...props }, ref) => (\n <h3\n ref={ref}\n data-slot=\"card-title\"\n className={cn(\n 'text-lg leading-none font-semibold tracking-tight',\n className\n )}\n {...props}\n >\n {children}\n </h3>\n));\n\nCardTitle.displayName = 'CardTitle';\n\n/**\n * Description text for a Card\n */\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"card-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n));\n\nCardDescription.displayName = 'CardDescription';\n\n/**\n * Main content area of a Card\n */\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-content\"\n className={cn('', className)}\n {...props}\n />\n));\n\nCardContent.displayName = 'CardContent';\n\n/**\n * Footer section of a Card\n */\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-footer\"\n className={cn('flex items-center pt-4', className)}\n {...props}\n />\n));\n\nCardFooter.displayName = 'CardFooter';\n\n/**\n * Image/Media section for a Card - typically used at the top\n */\nexport interface CardMediaProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n /** Aspect ratio of the media */\n aspectRatio?: 'video' | 'square' | 'wide' | 'auto';\n /** Optional overlay content */\n overlay?: React.ReactNode;\n}\n\nconst CardMedia = React.forwardRef<HTMLDivElement, CardMediaProps>(\n ({ className, aspectRatio = 'video', overlay, src, alt, ...props }, ref) => {\n const aspectClasses = {\n video: 'aspect-video',\n square: 'aspect-square',\n wide: 'aspect-[21/9]',\n auto: '',\n };\n\n return (\n <div\n ref={ref}\n data-slot=\"card-media\"\n className={cn(\n 'relative -mx-4 -mt-4 overflow-hidden first:rounded-t-xl',\n className\n )}\n >\n <img\n src={src}\n alt={alt}\n className={cn('w-full object-cover', aspectClasses[aspectRatio])}\n {...props}\n />\n {overlay && (\n <div className=\"absolute inset-0 flex items-end bg-gradient-to-t from-neutral-900/60 to-transparent p-4\">\n {overlay}\n </div>\n )}\n </div>\n );\n }\n);\n\nCardMedia.displayName = 'CardMedia';\n\n/**\n * Badge/Label component for Cards\n */\nexport interface CardBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Badge color variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'destructive';\n /** Position of the badge */\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n}\n\nconst CardBadge = React.forwardRef<HTMLSpanElement, CardBadgeProps>(\n (\n {\n className,\n variant = 'default',\n position = 'top-right',\n children,\n ...props\n },\n ref\n ) => {\n const variantClasses = {\n default: 'bg-muted text-muted-foreground',\n primary: 'bg-primary-800 text-white',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n destructive: 'bg-destructive text-destructive-foreground',\n };\n\n const positionClasses = {\n 'top-left': 'top-2 left-2',\n 'top-right': 'top-2 right-2',\n 'bottom-left': 'bottom-2 left-2',\n 'bottom-right': 'bottom-2 right-2',\n };\n\n return (\n <span\n ref={ref}\n data-slot=\"card-badge\"\n className={cn(\n 'absolute z-10 rounded-md px-2 py-1 text-xs font-medium',\n variantClasses[variant],\n positionClasses[position],\n className\n )}\n {...props}\n >\n {children}\n </span>\n );\n }\n);\n\nCardBadge.displayName = 'CardBadge';\n\n/**\n * Actions area for Card buttons/links\n */\nexport interface CardActionsProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Alignment of actions */\n align?: 'left' | 'center' | 'right' | 'between' | 'around';\n}\n\nconst CardActions = React.forwardRef<HTMLDivElement, CardActionsProps>(\n ({ className, align = 'right', children, ...props }, ref) => {\n const alignClasses = {\n left: 'justify-start',\n center: 'justify-center',\n right: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n };\n\n return (\n <div\n ref={ref}\n data-slot=\"card-actions\"\n className={cn(\n 'flex items-center gap-2 pt-4',\n alignClasses[align],\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCardActions.displayName = 'CardActions';\n\n/**\n * Divider line within a Card\n */\nconst CardDivider = React.forwardRef<\n globalThis.HTMLHRElement,\n React.HTMLAttributes<globalThis.HTMLHRElement>\n>(({ className, ...props }, ref) => (\n <hr\n ref={ref}\n data-slot=\"card-divider\"\n className={cn('border-border -mx-4 my-4', className)}\n {...props}\n />\n));\n\nCardDivider.displayName = 'CardDivider';\n\n/**\n * Collapsible content section for Cards\n */\nexport interface CardCollapsibleProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Whether the content is expanded */\n expanded?: boolean;\n /** Callback when expand state changes */\n onExpandChange?: (expanded: boolean) => void;\n /** Trigger element/text for expanding */\n trigger?: React.ReactNode;\n}\n\nconst CardCollapsible = React.forwardRef<HTMLDivElement, CardCollapsibleProps>(\n (\n {\n className,\n expanded: controlledExpanded,\n onExpandChange,\n trigger = 'Show more',\n children,\n ...props\n },\n ref\n ) => {\n const [internalExpanded, setInternalExpanded] = React.useState(false);\n const isControlled = controlledExpanded !== undefined;\n const expanded = isControlled ? controlledExpanded : internalExpanded;\n\n const handleToggle = () => {\n if (isControlled) {\n onExpandChange?.(!expanded);\n } else {\n setInternalExpanded(!expanded);\n }\n };\n\n return (\n <div\n ref={ref}\n data-slot=\"card-collapsible\"\n className={cn('', className)}\n {...props}\n >\n <button\n type=\"button\"\n onClick={handleToggle}\n className=\"text-primary-800 focus-visible:ring-primary-500 flex items-center gap-1 rounded text-sm hover:underline focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\"\n aria-expanded={expanded}\n >\n {typeof trigger === 'string' ? (\n <>\n {expanded ? 'Show less' : trigger}\n <svg\n className={cn(\n 'h-4 w-4 transition-transform',\n expanded && 'rotate-180'\n )}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </>\n ) : (\n trigger\n )}\n </button>\n <div\n className={cn(\n 'grid transition-all duration-300 ease-in-out',\n expanded\n ? 'mt-3 grid-rows-[1fr] opacity-100'\n : 'grid-rows-[0fr] opacity-0'\n )}\n >\n <div className=\"overflow-hidden\">{children}</div>\n </div>\n </div>\n );\n }\n);\n\nCardCollapsible.displayName = 'CardCollapsible';\n\n/**\n * Stat/Metric display for Cards\n */\nexport interface CardStatProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The main value/number */\n value: React.ReactNode;\n /** Label describing the stat */\n label: string;\n /** Trend indicator */\n trend?: { value: number; label?: string };\n /** Icon to display */\n icon?: React.ReactNode;\n}\n\nconst CardStat = React.forwardRef<HTMLDivElement, CardStatProps>(\n ({ className, value, label, trend, icon, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-slot=\"card-stat\"\n className={cn('flex items-start gap-3', className)}\n {...props}\n >\n {icon && (\n <div className=\"bg-primary-500/10 text-primary-800 rounded-lg p-2\">\n {icon}\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-2xl font-bold tracking-tight\">{value}</div>\n <div className=\"text-muted-foreground text-sm\">{label}</div>\n {trend && (\n <div\n className={cn(\n 'mt-1 flex items-center gap-1 text-sm',\n trend.value >= 0 ? 'text-success' : 'text-destructive'\n )}\n >\n <svg\n className={cn('h-4 w-4', trend.value < 0 && 'rotate-180')}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M5 10l7-7m0 0l7 7m-7-7v18\"\n />\n </svg>\n <span>{Math.abs(trend.value)}%</span>\n {trend.label && (\n <span className=\"text-muted-foreground\">{trend.label}</span>\n )}\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nCardStat.displayName = 'CardStat';\n\nexport {\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n CardMedia,\n CardBadge,\n CardActions,\n CardDivider,\n CardCollapsible,\n CardStat,\n cardVariants,\n cardAccentVariants,\n};\n"]}
|
|
@@ -296,7 +296,7 @@ var DateInput = React.forwardRef(
|
|
|
296
296
|
"focus:ring-ring focus:ring-2 focus:outline-none",
|
|
297
297
|
day === null && "invisible",
|
|
298
298
|
day !== null && "hover:bg-muted",
|
|
299
|
-
isSelectedDay(day) && "bg-primary-800 hover:bg-primary-
|
|
299
|
+
isSelectedDay(day) && "bg-primary-800 hover:bg-primary-900 text-white",
|
|
300
300
|
isToday(day) && !isSelectedDay(day) && "border-primary-800 text-primary-800 border"
|
|
301
301
|
),
|
|
302
302
|
children: day
|
|
@@ -470,5 +470,5 @@ function ChevronRightIcon() {
|
|
|
470
470
|
}
|
|
471
471
|
|
|
472
472
|
export { DateInput };
|
|
473
|
-
//# sourceMappingURL=chunk-
|
|
474
|
-
//# sourceMappingURL=chunk-
|
|
473
|
+
//# sourceMappingURL=chunk-CWDQ7OPJ.js.map
|
|
474
|
+
//# sourceMappingURL=chunk-CWDQ7OPJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/DateInput/DateInput.tsx"],"names":[],"mappings":"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","file":"chunk-JDI45GEY.js","sourcesContent":["import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport {\n formatDateValue,\n isValidDate,\n isDateInPast,\n isDateInFuture,\n calculateAge,\n} from '../../utils/date';\nimport { Input, type InputProps } from '../Input';\nimport { Calendar } from 'lucide-react';\n\nexport type DateInputMode =\n | 'default'\n | 'dob'\n | 'expiration'\n | 'past'\n | 'future';\n\nexport type DateInputWidth = 'full' | 'fit' | 'fixed';\n\nconst widthClasses: Record<DateInputWidth, string> = {\n full: 'w-full',\n fit: 'w-fit',\n fixed: 'w-44', // ~176px - enough for MM/DD/YYYY + calendar icon\n};\n\nconst sizeClasses = {\n sm: 'h-8 text-sm',\n md: 'h-10 text-base',\n lg: 'h-12 text-lg',\n} as const;\n\nexport interface DateInputProps extends Omit<\n InputProps,\n 'type' | 'onChange' | 'value'\n> {\n /** The date value in MM/DD/YYYY format */\n value?: string;\n /** Callback fired when the value changes */\n onChange?: (value: string) => void;\n /** Validation mode for the date input */\n mode?: DateInputMode;\n /** Minimum age for DOB validation (default: 0) */\n minAge?: number;\n /** Maximum age for DOB validation */\n maxAge?: number;\n /** Whether to validate on blur */\n validateOnBlur?: boolean;\n /** Whether to show a calendar picker button */\n showCalendar?: boolean;\n /** Width behavior of the input */\n width?: DateInputWidth;\n}\n\nfunction getValidationError(\n value: string,\n mode: DateInputMode,\n minAge?: number,\n maxAge?: number\n): string | undefined {\n if (!value || value.replace(/\\D/g, '').length === 0) {\n return undefined;\n }\n\n if (!isValidDate(value)) {\n return 'Please enter a valid date (MM/DD/YYYY)';\n }\n\n switch (mode) {\n case 'dob': {\n if (!isDateInPast(value)) {\n return 'Date of birth must be in the past';\n }\n const age = calculateAge(value);\n if (age !== null) {\n if (minAge !== undefined && age < minAge) {\n return `Must be at least ${minAge} years old`;\n }\n if (maxAge !== undefined && age > maxAge) {\n return `Must be no more than ${maxAge} years old`;\n }\n }\n break;\n }\n case 'expiration':\n if (!isDateInFuture(value)) {\n return 'Expiration date must be in the future';\n }\n break;\n case 'past':\n if (!isDateInPast(value)) {\n return 'Date must be in the past';\n }\n break;\n case 'future':\n if (!isDateInFuture(value)) {\n return 'Date must be in the future';\n }\n break;\n }\n\n return undefined;\n}\n\n/**\n * A date input that automatically formats to MM/DD/YYYY with validation modes.\n *\n * @example\n * ```tsx\n * // Date of birth with age validation\n * <DateInput\n * label=\"Date of Birth\"\n * mode=\"dob\"\n * minAge={18}\n * validateOnBlur\n * />\n *\n * // With calendar picker\n * <DateInput\n * label=\"Select Date\"\n * showCalendar\n * />\n *\n * // Expiration date\n * <DateInput\n * label=\"License Expiration\"\n * mode=\"expiration\"\n * validateOnBlur\n * />\n * ```\n */\nconst DateInput = React.forwardRef<HTMLInputElement, DateInputProps>(\n (\n {\n value = '',\n onChange,\n mode = 'default',\n minAge,\n maxAge,\n validateOnBlur,\n showCalendar = false,\n width = 'full',\n className,\n onBlur,\n hasError,\n error,\n ...props\n },\n ref\n ) => {\n const [displayValue, setDisplayValue] = React.useState(() =>\n formatDateValue(value)\n );\n const [localError, setLocalError] = React.useState<string | undefined>();\n\n // Sync external value changes\n React.useEffect(() => {\n setDisplayValue(formatDateValue(value));\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const formatted = formatDateValue(e.target.value);\n setDisplayValue(formatted);\n onChange?.(formatted);\n\n // Clear error when user starts typing again\n if (localError) {\n setLocalError(undefined);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(e);\n\n if (validateOnBlur) {\n const validationError = getValidationError(\n displayValue,\n mode,\n minAge,\n maxAge\n );\n setLocalError(validationError);\n }\n };\n\n const placeholder = mode === 'expiration' ? 'MM/DD/YYYY' : 'MM/DD/YYYY';\n const autoComplete =\n mode === 'dob' ? 'bday' : mode === 'expiration' ? 'cc-exp' : undefined;\n\n // Generate stable ID for accessibility\n const generatedId = React.useId();\n\n // Calendar picker state\n const [isCalendarOpen, setIsCalendarOpen] = React.useState(false);\n const calendarRef = React.useRef<HTMLDivElement>(null);\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n\n // Parse current value into date parts for calendar\n const parsedDate = React.useMemo(() => {\n if (!displayValue || !isValidDate(displayValue)) {\n return {\n month: new Date().getMonth(),\n year: new Date().getFullYear(),\n day: null,\n };\n }\n const [month, day, year] = displayValue.split('/').map(Number);\n return { month: month - 1, year, day };\n }, [displayValue]);\n\n const [calendarMonth, setCalendarMonth] = React.useState(parsedDate.month);\n const [calendarYear, setCalendarYear] = React.useState(parsedDate.year);\n\n // Update calendar view when value changes\n React.useEffect(() => {\n if (displayValue && isValidDate(displayValue)) {\n const [month, , year] = displayValue.split('/').map(Number);\n setCalendarMonth(month - 1);\n setCalendarYear(year);\n }\n }, [displayValue]);\n\n // Close calendar on click outside\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n calendarRef.current &&\n !calendarRef.current.contains(event.target as HTMLElement) &&\n buttonRef.current &&\n !buttonRef.current.contains(event.target as HTMLElement)\n ) {\n setIsCalendarOpen(false);\n }\n };\n\n if (isCalendarOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () =>\n document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isCalendarOpen]);\n\n // Close on Escape key\n React.useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsCalendarOpen(false);\n buttonRef.current?.focus();\n }\n };\n\n if (isCalendarOpen) {\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }\n }, [isCalendarOpen]);\n\n const handleDateSelect = (day: number) => {\n const month = String(calendarMonth + 1).padStart(2, '0');\n const dayStr = String(day).padStart(2, '0');\n const year = String(calendarYear);\n const formatted = `${month}/${dayStr}/${year}`;\n setDisplayValue(formatted);\n onChange?.(formatted);\n setIsCalendarOpen(false);\n\n // Validate if needed\n if (validateOnBlur) {\n const validationError = getValidationError(\n formatted,\n mode,\n minAge,\n maxAge\n );\n setLocalError(validationError);\n }\n };\n\n const getDaysInMonth = (month: number, year: number) => {\n return new Date(year, month + 1, 0).getDate();\n };\n\n const getFirstDayOfMonth = (month: number, year: number) => {\n return new Date(year, month, 1).getDay();\n };\n\n const renderCalendar = () => {\n const daysInMonth = getDaysInMonth(calendarMonth, calendarYear);\n const firstDay = getFirstDayOfMonth(calendarMonth, calendarYear);\n const days: (number | null)[] = [];\n\n // Add empty cells for days before the first day of the month\n for (let i = 0; i < firstDay; i++) {\n days.push(null);\n }\n\n // Add the days of the month\n for (let i = 1; i <= daysInMonth; i++) {\n days.push(i);\n }\n\n const monthNames = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n\n const isSelectedDay = (day: number) => {\n return (\n parsedDate.day === day &&\n parsedDate.month === calendarMonth &&\n parsedDate.year === calendarYear\n );\n };\n\n const isToday = (day: number) => {\n const today = new Date();\n return (\n day === today.getDate() &&\n calendarMonth === today.getMonth() &&\n calendarYear === today.getFullYear()\n );\n };\n\n return (\n <div\n ref={calendarRef}\n className={cn(\n 'absolute top-full left-0 z-50 mt-1',\n 'bg-background border-border rounded-lg border shadow-lg',\n 'w-72 p-3'\n )}\n role=\"dialog\"\n aria-label=\"Choose date\"\n >\n {/* Header with month/year navigation */}\n <div className=\"mb-3 flex items-center justify-between\">\n <button\n type=\"button\"\n onClick={() => {\n if (calendarMonth === 0) {\n setCalendarMonth(11);\n setCalendarYear(calendarYear - 1);\n } else {\n setCalendarMonth(calendarMonth - 1);\n }\n }}\n className=\"hover:bg-muted rounded-md p-1 transition-colors\"\n aria-label=\"Previous month\"\n >\n <ChevronLeftIcon />\n </button>\n <div className=\"flex items-center gap-2\">\n <select\n value={calendarMonth}\n onChange={(e) => setCalendarMonth(Number(e.target.value))}\n className=\"bg-background border-border rounded border px-2 py-1 text-sm\"\n aria-label=\"Select month\"\n >\n {monthNames.map((name, i) => (\n <option key={name} value={i}>\n {name}\n </option>\n ))}\n </select>\n <select\n value={calendarYear}\n onChange={(e) => setCalendarYear(Number(e.target.value))}\n className=\"bg-background border-border rounded border px-2 py-1 text-sm\"\n aria-label=\"Select year\"\n >\n {Array.from(\n { length: 150 },\n (_, i) => new Date().getFullYear() - 100 + i\n ).map((year) => (\n <option key={year} value={year}>\n {year}\n </option>\n ))}\n </select>\n </div>\n <button\n type=\"button\"\n onClick={() => {\n if (calendarMonth === 11) {\n setCalendarMonth(0);\n setCalendarYear(calendarYear + 1);\n } else {\n setCalendarMonth(calendarMonth + 1);\n }\n }}\n className=\"hover:bg-muted rounded-md p-1 transition-colors\"\n aria-label=\"Next month\"\n >\n <ChevronRightIcon />\n </button>\n </div>\n\n {/* Day headers */}\n <div className=\"mb-1 grid grid-cols-7 gap-1\">\n {['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'].map((day) => (\n <div\n key={day}\n className=\"text-muted-foreground py-1 text-center text-xs font-medium\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {days.map((day, index) => (\n <button\n key={index}\n type=\"button\"\n disabled={day === null}\n onClick={() => day && handleDateSelect(day)}\n className={cn(\n 'h-8 w-8 rounded-md text-sm transition-colors',\n 'focus:ring-ring focus:ring-2 focus:outline-none',\n day === null && 'invisible',\n day !== null && 'hover:bg-muted',\n isSelectedDay(day!) &&\n 'bg-primary-800 hover:bg-primary-700 text-white',\n isToday(day!) &&\n !isSelectedDay(day!) &&\n 'border-primary-800 text-primary-800 border'\n )}\n >\n {day}\n </button>\n ))}\n </div>\n\n {/* Today button */}\n <div className=\"border-border mt-3 border-t pt-3\">\n <button\n type=\"button\"\n onClick={() => {\n const today = new Date();\n setCalendarMonth(today.getMonth());\n setCalendarYear(today.getFullYear());\n handleDateSelect(today.getDate());\n }}\n className=\"text-primary-800 w-full text-sm hover:underline\"\n >\n Today\n </button>\n </div>\n </div>\n );\n };\n\n if (showCalendar) {\n // Extract label/error/helper and component-specific props to handle positioning correctly\n // Filter out Input component props that aren't valid HTML input attributes\n const { label, helperText, hideLabel, required, size, ...inputProps } =\n props;\n // Ensure size has a valid value (fallback to 'md' if null/undefined)\n const resolvedSize = size ?? 'md';\n const inputId = inputProps.id || generatedId;\n const errorId = `${inputId}-error`;\n const helperId = `${inputId}-helper`;\n const showError = hasError || !!localError;\n const errorMessage = error || localError;\n\n return (\n <div className={cn('flex flex-col gap-1.5', widthClasses[width])}>\n {label && (\n <label\n htmlFor={inputId}\n className={cn(\n 'text-foreground text-sm font-medium',\n hideLabel && 'sr-only'\n )}\n >\n {label}\n {required && (\n <span\n className=\"ml-1\"\n style={{ color: '#ef4444' }}\n aria-hidden=\"true\"\n >\n *\n </span>\n )}\n </label>\n )}\n <div className=\"relative\">\n <input\n ref={ref}\n id={inputId}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete={autoComplete}\n placeholder={placeholder}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n aria-invalid={showError}\n aria-describedby={\n [errorMessage ? errorId : null, helperText ? helperId : null]\n .filter(Boolean)\n .join(' ') || undefined\n }\n className={cn(\n 'w-full px-3 py-2',\n 'rounded-lg border',\n 'bg-background text-foreground',\n 'placeholder:text-muted-foreground',\n 'transition-colors duration-200',\n 'focus:ring-ring focus:border-transparent focus:ring-2 focus:outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n sizeClasses[resolvedSize],\n showError\n ? 'border-destructive focus:ring-destructive'\n : 'border-input',\n 'pr-10',\n className\n )}\n {...inputProps}\n />\n <button\n ref={buttonRef}\n type=\"button\"\n onClick={() => setIsCalendarOpen(!isCalendarOpen)}\n className={cn(\n 'absolute top-1/2 right-3 -translate-y-1/2',\n 'text-muted-foreground hover:text-foreground',\n 'focus:text-foreground focus:outline-none',\n 'transition-colors'\n )}\n aria-label=\"Open calendar\"\n aria-expanded={isCalendarOpen}\n aria-haspopup=\"dialog\"\n >\n <Calendar size={18} />\n </button>\n {isCalendarOpen && renderCalendar()}\n </div>\n {errorMessage && (\n <p\n id={errorId}\n className=\"text-sm\"\n style={{ color: '#ef4444' }}\n role=\"alert\"\n >\n {errorMessage}\n </p>\n )}\n {helperText && !errorMessage && (\n <p id={helperId} className=\"text-muted-foreground text-sm\">\n {helperText}\n </p>\n )}\n </div>\n );\n }\n\n return (\n <Input\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete={autoComplete}\n placeholder={placeholder}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n hasError={hasError || !!localError}\n error={error || localError}\n className={cn(widthClasses[width], className)}\n {...props}\n />\n );\n }\n);\n\nDateInput.displayName = 'DateInput';\n\n// Simple icon components\nfunction ChevronLeftIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n );\n}\n\nfunction ChevronRightIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n}\n\nexport { DateInput };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/DateInput/DateInput.tsx"],"names":[],"mappings":"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","file":"chunk-CWDQ7OPJ.js","sourcesContent":["import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport {\n formatDateValue,\n isValidDate,\n isDateInPast,\n isDateInFuture,\n calculateAge,\n} from '../../utils/date';\nimport { Input, type InputProps } from '../Input';\nimport { Calendar } from 'lucide-react';\n\nexport type DateInputMode =\n | 'default'\n | 'dob'\n | 'expiration'\n | 'past'\n | 'future';\n\nexport type DateInputWidth = 'full' | 'fit' | 'fixed';\n\nconst widthClasses: Record<DateInputWidth, string> = {\n full: 'w-full',\n fit: 'w-fit',\n fixed: 'w-44', // ~176px - enough for MM/DD/YYYY + calendar icon\n};\n\nconst sizeClasses = {\n sm: 'h-8 text-sm',\n md: 'h-10 text-base',\n lg: 'h-12 text-lg',\n} as const;\n\nexport interface DateInputProps extends Omit<\n InputProps,\n 'type' | 'onChange' | 'value'\n> {\n /** The date value in MM/DD/YYYY format */\n value?: string;\n /** Callback fired when the value changes */\n onChange?: (value: string) => void;\n /** Validation mode for the date input */\n mode?: DateInputMode;\n /** Minimum age for DOB validation (default: 0) */\n minAge?: number;\n /** Maximum age for DOB validation */\n maxAge?: number;\n /** Whether to validate on blur */\n validateOnBlur?: boolean;\n /** Whether to show a calendar picker button */\n showCalendar?: boolean;\n /** Width behavior of the input */\n width?: DateInputWidth;\n}\n\nfunction getValidationError(\n value: string,\n mode: DateInputMode,\n minAge?: number,\n maxAge?: number\n): string | undefined {\n if (!value || value.replace(/\\D/g, '').length === 0) {\n return undefined;\n }\n\n if (!isValidDate(value)) {\n return 'Please enter a valid date (MM/DD/YYYY)';\n }\n\n switch (mode) {\n case 'dob': {\n if (!isDateInPast(value)) {\n return 'Date of birth must be in the past';\n }\n const age = calculateAge(value);\n if (age !== null) {\n if (minAge !== undefined && age < minAge) {\n return `Must be at least ${minAge} years old`;\n }\n if (maxAge !== undefined && age > maxAge) {\n return `Must be no more than ${maxAge} years old`;\n }\n }\n break;\n }\n case 'expiration':\n if (!isDateInFuture(value)) {\n return 'Expiration date must be in the future';\n }\n break;\n case 'past':\n if (!isDateInPast(value)) {\n return 'Date must be in the past';\n }\n break;\n case 'future':\n if (!isDateInFuture(value)) {\n return 'Date must be in the future';\n }\n break;\n }\n\n return undefined;\n}\n\n/**\n * A date input that automatically formats to MM/DD/YYYY with validation modes.\n *\n * @example\n * ```tsx\n * // Date of birth with age validation\n * <DateInput\n * label=\"Date of Birth\"\n * mode=\"dob\"\n * minAge={18}\n * validateOnBlur\n * />\n *\n * // With calendar picker\n * <DateInput\n * label=\"Select Date\"\n * showCalendar\n * />\n *\n * // Expiration date\n * <DateInput\n * label=\"License Expiration\"\n * mode=\"expiration\"\n * validateOnBlur\n * />\n * ```\n */\nconst DateInput = React.forwardRef<HTMLInputElement, DateInputProps>(\n (\n {\n value = '',\n onChange,\n mode = 'default',\n minAge,\n maxAge,\n validateOnBlur,\n showCalendar = false,\n width = 'full',\n className,\n onBlur,\n hasError,\n error,\n ...props\n },\n ref\n ) => {\n const [displayValue, setDisplayValue] = React.useState(() =>\n formatDateValue(value)\n );\n const [localError, setLocalError] = React.useState<string | undefined>();\n\n // Sync external value changes\n React.useEffect(() => {\n setDisplayValue(formatDateValue(value));\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const formatted = formatDateValue(e.target.value);\n setDisplayValue(formatted);\n onChange?.(formatted);\n\n // Clear error when user starts typing again\n if (localError) {\n setLocalError(undefined);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(e);\n\n if (validateOnBlur) {\n const validationError = getValidationError(\n displayValue,\n mode,\n minAge,\n maxAge\n );\n setLocalError(validationError);\n }\n };\n\n const placeholder = mode === 'expiration' ? 'MM/DD/YYYY' : 'MM/DD/YYYY';\n const autoComplete =\n mode === 'dob' ? 'bday' : mode === 'expiration' ? 'cc-exp' : undefined;\n\n // Generate stable ID for accessibility\n const generatedId = React.useId();\n\n // Calendar picker state\n const [isCalendarOpen, setIsCalendarOpen] = React.useState(false);\n const calendarRef = React.useRef<HTMLDivElement>(null);\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n\n // Parse current value into date parts for calendar\n const parsedDate = React.useMemo(() => {\n if (!displayValue || !isValidDate(displayValue)) {\n return {\n month: new Date().getMonth(),\n year: new Date().getFullYear(),\n day: null,\n };\n }\n const [month, day, year] = displayValue.split('/').map(Number);\n return { month: month - 1, year, day };\n }, [displayValue]);\n\n const [calendarMonth, setCalendarMonth] = React.useState(parsedDate.month);\n const [calendarYear, setCalendarYear] = React.useState(parsedDate.year);\n\n // Update calendar view when value changes\n React.useEffect(() => {\n if (displayValue && isValidDate(displayValue)) {\n const [month, , year] = displayValue.split('/').map(Number);\n setCalendarMonth(month - 1);\n setCalendarYear(year);\n }\n }, [displayValue]);\n\n // Close calendar on click outside\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n calendarRef.current &&\n !calendarRef.current.contains(event.target as HTMLElement) &&\n buttonRef.current &&\n !buttonRef.current.contains(event.target as HTMLElement)\n ) {\n setIsCalendarOpen(false);\n }\n };\n\n if (isCalendarOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () =>\n document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isCalendarOpen]);\n\n // Close on Escape key\n React.useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsCalendarOpen(false);\n buttonRef.current?.focus();\n }\n };\n\n if (isCalendarOpen) {\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }\n }, [isCalendarOpen]);\n\n const handleDateSelect = (day: number) => {\n const month = String(calendarMonth + 1).padStart(2, '0');\n const dayStr = String(day).padStart(2, '0');\n const year = String(calendarYear);\n const formatted = `${month}/${dayStr}/${year}`;\n setDisplayValue(formatted);\n onChange?.(formatted);\n setIsCalendarOpen(false);\n\n // Validate if needed\n if (validateOnBlur) {\n const validationError = getValidationError(\n formatted,\n mode,\n minAge,\n maxAge\n );\n setLocalError(validationError);\n }\n };\n\n const getDaysInMonth = (month: number, year: number) => {\n return new Date(year, month + 1, 0).getDate();\n };\n\n const getFirstDayOfMonth = (month: number, year: number) => {\n return new Date(year, month, 1).getDay();\n };\n\n const renderCalendar = () => {\n const daysInMonth = getDaysInMonth(calendarMonth, calendarYear);\n const firstDay = getFirstDayOfMonth(calendarMonth, calendarYear);\n const days: (number | null)[] = [];\n\n // Add empty cells for days before the first day of the month\n for (let i = 0; i < firstDay; i++) {\n days.push(null);\n }\n\n // Add the days of the month\n for (let i = 1; i <= daysInMonth; i++) {\n days.push(i);\n }\n\n const monthNames = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n\n const isSelectedDay = (day: number) => {\n return (\n parsedDate.day === day &&\n parsedDate.month === calendarMonth &&\n parsedDate.year === calendarYear\n );\n };\n\n const isToday = (day: number) => {\n const today = new Date();\n return (\n day === today.getDate() &&\n calendarMonth === today.getMonth() &&\n calendarYear === today.getFullYear()\n );\n };\n\n return (\n <div\n ref={calendarRef}\n className={cn(\n 'absolute top-full left-0 z-50 mt-1',\n 'bg-background border-border rounded-lg border shadow-lg',\n 'w-72 p-3'\n )}\n role=\"dialog\"\n aria-label=\"Choose date\"\n >\n {/* Header with month/year navigation */}\n <div className=\"mb-3 flex items-center justify-between\">\n <button\n type=\"button\"\n onClick={() => {\n if (calendarMonth === 0) {\n setCalendarMonth(11);\n setCalendarYear(calendarYear - 1);\n } else {\n setCalendarMonth(calendarMonth - 1);\n }\n }}\n className=\"hover:bg-muted rounded-md p-1 transition-colors\"\n aria-label=\"Previous month\"\n >\n <ChevronLeftIcon />\n </button>\n <div className=\"flex items-center gap-2\">\n <select\n value={calendarMonth}\n onChange={(e) => setCalendarMonth(Number(e.target.value))}\n className=\"bg-background border-border rounded border px-2 py-1 text-sm\"\n aria-label=\"Select month\"\n >\n {monthNames.map((name, i) => (\n <option key={name} value={i}>\n {name}\n </option>\n ))}\n </select>\n <select\n value={calendarYear}\n onChange={(e) => setCalendarYear(Number(e.target.value))}\n className=\"bg-background border-border rounded border px-2 py-1 text-sm\"\n aria-label=\"Select year\"\n >\n {Array.from(\n { length: 150 },\n (_, i) => new Date().getFullYear() - 100 + i\n ).map((year) => (\n <option key={year} value={year}>\n {year}\n </option>\n ))}\n </select>\n </div>\n <button\n type=\"button\"\n onClick={() => {\n if (calendarMonth === 11) {\n setCalendarMonth(0);\n setCalendarYear(calendarYear + 1);\n } else {\n setCalendarMonth(calendarMonth + 1);\n }\n }}\n className=\"hover:bg-muted rounded-md p-1 transition-colors\"\n aria-label=\"Next month\"\n >\n <ChevronRightIcon />\n </button>\n </div>\n\n {/* Day headers */}\n <div className=\"mb-1 grid grid-cols-7 gap-1\">\n {['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'].map((day) => (\n <div\n key={day}\n className=\"text-muted-foreground py-1 text-center text-xs font-medium\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {days.map((day, index) => (\n <button\n key={index}\n type=\"button\"\n disabled={day === null}\n onClick={() => day && handleDateSelect(day)}\n className={cn(\n 'h-8 w-8 rounded-md text-sm transition-colors',\n 'focus:ring-ring focus:ring-2 focus:outline-none',\n day === null && 'invisible',\n day !== null && 'hover:bg-muted',\n isSelectedDay(day!) &&\n 'bg-primary-800 hover:bg-primary-900 text-white',\n isToday(day!) &&\n !isSelectedDay(day!) &&\n 'border-primary-800 text-primary-800 border'\n )}\n >\n {day}\n </button>\n ))}\n </div>\n\n {/* Today button */}\n <div className=\"border-border mt-3 border-t pt-3\">\n <button\n type=\"button\"\n onClick={() => {\n const today = new Date();\n setCalendarMonth(today.getMonth());\n setCalendarYear(today.getFullYear());\n handleDateSelect(today.getDate());\n }}\n className=\"text-primary-800 w-full text-sm hover:underline\"\n >\n Today\n </button>\n </div>\n </div>\n );\n };\n\n if (showCalendar) {\n // Extract label/error/helper and component-specific props to handle positioning correctly\n // Filter out Input component props that aren't valid HTML input attributes\n const { label, helperText, hideLabel, required, size, ...inputProps } =\n props;\n // Ensure size has a valid value (fallback to 'md' if null/undefined)\n const resolvedSize = size ?? 'md';\n const inputId = inputProps.id || generatedId;\n const errorId = `${inputId}-error`;\n const helperId = `${inputId}-helper`;\n const showError = hasError || !!localError;\n const errorMessage = error || localError;\n\n return (\n <div className={cn('flex flex-col gap-1.5', widthClasses[width])}>\n {label && (\n <label\n htmlFor={inputId}\n className={cn(\n 'text-foreground text-sm font-medium',\n hideLabel && 'sr-only'\n )}\n >\n {label}\n {required && (\n <span\n className=\"ml-1\"\n style={{ color: '#ef4444' }}\n aria-hidden=\"true\"\n >\n *\n </span>\n )}\n </label>\n )}\n <div className=\"relative\">\n <input\n ref={ref}\n id={inputId}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete={autoComplete}\n placeholder={placeholder}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n aria-invalid={showError}\n aria-describedby={\n [errorMessage ? errorId : null, helperText ? helperId : null]\n .filter(Boolean)\n .join(' ') || undefined\n }\n className={cn(\n 'w-full px-3 py-2',\n 'rounded-lg border',\n 'bg-background text-foreground',\n 'placeholder:text-muted-foreground',\n 'transition-colors duration-200',\n 'focus:ring-ring focus:border-transparent focus:ring-2 focus:outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n sizeClasses[resolvedSize],\n showError\n ? 'border-destructive focus:ring-destructive'\n : 'border-input',\n 'pr-10',\n className\n )}\n {...inputProps}\n />\n <button\n ref={buttonRef}\n type=\"button\"\n onClick={() => setIsCalendarOpen(!isCalendarOpen)}\n className={cn(\n 'absolute top-1/2 right-3 -translate-y-1/2',\n 'text-muted-foreground hover:text-foreground',\n 'focus:text-foreground focus:outline-none',\n 'transition-colors'\n )}\n aria-label=\"Open calendar\"\n aria-expanded={isCalendarOpen}\n aria-haspopup=\"dialog\"\n >\n <Calendar size={18} />\n </button>\n {isCalendarOpen && renderCalendar()}\n </div>\n {errorMessage && (\n <p\n id={errorId}\n className=\"text-sm\"\n style={{ color: '#ef4444' }}\n role=\"alert\"\n >\n {errorMessage}\n </p>\n )}\n {helperText && !errorMessage && (\n <p id={helperId} className=\"text-muted-foreground text-sm\">\n {helperText}\n </p>\n )}\n </div>\n );\n }\n\n return (\n <Input\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete={autoComplete}\n placeholder={placeholder}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n hasError={hasError || !!localError}\n error={error || localError}\n className={cn(widthClasses[width], className)}\n {...props}\n />\n );\n }\n);\n\nDateInput.displayName = 'DateInput';\n\n// Simple icon components\nfunction ChevronLeftIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n );\n}\n\nfunction ChevronRightIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n}\n\nexport { DateInput };\n"]}
|
|
@@ -16,7 +16,7 @@ var spinnerVariants = classVarianceAuthority.cva(
|
|
|
16
16
|
xl: "h-12 w-12"
|
|
17
17
|
},
|
|
18
18
|
variant: {
|
|
19
|
-
default: "text-primary-
|
|
19
|
+
default: "text-primary-800",
|
|
20
20
|
muted: "text-muted-foreground",
|
|
21
21
|
white: "text-white"
|
|
22
22
|
}
|
|
@@ -115,5 +115,5 @@ exports.FullPageSpinner = FullPageSpinner;
|
|
|
115
115
|
exports.Spinner = Spinner;
|
|
116
116
|
exports.SpinnerWithLabel = SpinnerWithLabel;
|
|
117
117
|
exports.spinnerVariants = spinnerVariants;
|
|
118
|
-
//# sourceMappingURL=chunk-
|
|
119
|
-
//# sourceMappingURL=chunk-
|
|
118
|
+
//# sourceMappingURL=chunk-DEZ7XSTG.cjs.map
|
|
119
|
+
//# sourceMappingURL=chunk-DEZ7XSTG.cjs.map
|