diff options
Diffstat (limited to 'frontend/src/components/ui/card.tsx')
-rw-r--r-- | frontend/src/components/ui/card.tsx | 23 |
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, } |