aboutsummaryrefslogtreecommitdiffstats
path: root/frontend/src/components/ui/card.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/components/ui/card.tsx')
-rw-r--r--frontend/src/components/ui/card.tsx23
1 files changed, 18 insertions, 5 deletions
diff --git a/frontend/src/components/ui/card.tsx b/frontend/src/components/ui/card.tsx
index d05bbc6..9ec9328 100644
--- a/frontend/src/components/ui/card.tsx
+++ b/frontend/src/components/ui/card.tsx
@@ -2,12 +2,24 @@ import * as React from "react"
import { cn } from "@/lib/utils"
-function Card({ className, ...props }: React.ComponentProps<"div">) {
+const cardVariants = {
+ default: "bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm transition-all duration-300",
+ interactive: "bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm hover:shadow-md transition-all duration-300 hover:border-primary/20 hover:translate-y-[-2px]",
+ elevated: "bg-card text-card-foreground flex flex-col gap-6 rounded-xl border-0 py-6 shadow-md transition-all duration-300",
+ outline: "bg-transparent text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-none transition-all duration-300",
+ gradient: "bg-gradient-to-br from-card to-background text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm transition-all duration-300",
+}
+
+interface CardProps extends React.ComponentProps<"div"> {
+ variant?: keyof typeof cardVariants;
+}
+
+function Card({ className, variant = "default", ...props }: CardProps) {
return (
<div
data-slot="card"
className={cn(
- "bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",
+ cardVariants[variant],
className
)}
{...props}
@@ -20,7 +32,7 @@ function CardHeader({ className, ...props }: React.ComponentProps<"div">) {
<div
data-slot="card-header"
className={cn(
- "@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",
+ "@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6 animate-in fade-in-50 duration-300",
className
)}
{...props}
@@ -65,7 +77,7 @@ function CardContent({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="card-content"
- className={cn("px-6", className)}
+ className={cn("px-6 animate-in fade-in-50 duration-300 delay-75", className)}
{...props}
/>
)
@@ -75,7 +87,7 @@ function CardFooter({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="card-footer"
- className={cn("flex items-center px-6 [.border-t]:pt-6", className)}
+ className={cn("flex items-center px-6 [.border-t]:pt-6 animate-in fade-in-50 duration-300 delay-150", className)}
{...props}
/>
)
@@ -89,4 +101,5 @@ export {
CardAction,
CardDescription,
CardContent,
+ cardVariants,
}