| import React from "react"; | |
| import { cn } from "@/lib/utils/cn"; | |
| interface CardProps extends React.HTMLAttributes<HTMLDivElement> { | |
| variant?: "default" | "outline" | "elevated" | "glass"; | |
| } | |
| export const Card: React.FC<CardProps> = ({ | |
| children, | |
| variant = "default", | |
| className, | |
| ...props | |
| }) => { | |
| const variants = { | |
| default: "bg-white/80 backdrop-blur-sm border border-gray-200/50 shadow-md hover:shadow-lg transition-all duration-300", | |
| outline: "bg-transparent border-2 border-gray-300/50 hover:border-gray-400 transition-all duration-300", | |
| elevated: "bg-white shadow-xl hover:shadow-2xl transition-all duration-300 hover:-translate-y-1", | |
| glass: "glass border border-white/20 shadow-xl hover:shadow-2xl transition-all duration-300 hover:-translate-y-1", | |
| }; | |
| return ( | |
| <div | |
| className={cn("rounded-2xl p-6 hover-lift", variants[variant], className)} | |
| {...props} | |
| > | |
| {children} | |
| </div> | |
| ); | |
| }; | |
| export const CardHeader: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({ | |
| children, | |
| className, | |
| ...props | |
| }) => ( | |
| <div className={cn("mb-6", className)} {...props}> | |
| {children} | |
| </div> | |
| ); | |
| export const CardTitle: React.FC<React.HTMLAttributes<HTMLHeadingElement>> = ({ | |
| children, | |
| className, | |
| ...props | |
| }) => ( | |
| <h3 className={cn("text-2xl font-bold gradient-text", className)} {...props}> | |
| {children} | |
| </h3> | |
| ); | |
| export const CardDescription: React.FC<React.HTMLAttributes<HTMLParagraphElement>> = ({ | |
| children, | |
| className, | |
| ...props | |
| }) => ( | |
| <p className={cn("text-sm text-gray-600 mt-2", className)} {...props}> | |
| {children} | |
| </p> | |
| ); | |
| export const CardContent: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({ | |
| children, | |
| className, | |
| ...props | |
| }) => ( | |
| <div className={cn("", className)} {...props}> | |
| {children} | |
| </div> | |
| ); | |
| export const CardFooter: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({ | |
| children, | |
| className, | |
| ...props | |
| }) => ( | |
| <div className={cn("mt-6 flex items-center justify-between", className)} {...props}> | |
| {children} | |
| </div> | |
| ); | |