import { ReactNode } from "react"; import clsx from "clsx"; import Button from "../button/Button"; type CardVariant = "surface" | "panel" | "frosted" | "borderless" | "gradient"; type CardPadding = "none" | "xs" | "sm" | "md" | "lg"; type CardShadow = "none" | "sm" | "md"; interface CardProps { children: ReactNode; className?: string; onClick?: () => void; variant?: CardVariant; padding?: CardPadding; shadow?: CardShadow; } export const Card: React.FC = ({ children, className = "", onClick, variant = "surface", padding = "md", shadow = "sm", }) => { const variantClasses: Record = { surface: "bg-white border border-gray-200 dark:bg-white/[0.03] dark:border-white/10", panel: "bg-gray-50 border border-gray-100 dark:bg-white/[0.04] dark:border-white/[0.04]", frosted: "bg-white/80 backdrop-blur-xl border border-white/60 dark:bg-white/[0.08] dark:border-white/20", borderless: "bg-transparent border border-transparent", gradient: "bg-[linear-gradient(180deg,var(--color-panel),var(--color-panel-alt))] border border-white/20 dark:border-white/10", }; const paddingClasses: Record = { none: "p-0", xs: "p-3", sm: "p-4 sm:p-5", md: "p-5 sm:p-6", lg: "p-6 sm:p-8", }; const shadowClasses: Record = { none: "", sm: "shadow-theme-sm", md: "shadow-theme-lg", }; return (
{children}
); }; interface CardImageProps { src: string; alt?: string; className?: string; } export const CardImage: React.FC = ({ src, alt = "card", className = "", }) => { return (
{alt}
); }; interface CardTitleProps { children: ReactNode; className?: string; } export const CardTitle: React.FC = ({ children, className = "", }) => { return (

{children}

); }; interface CardContentProps { children: ReactNode; className?: string; } export const CardContent: React.FC = ({ children, className = "", }) => { return (
{children}
); }; interface CardDescriptionProps { children: ReactNode; className?: string; } export const CardDescription: React.FC = ({ children, className = "", }) => { return (

{children}

); }; interface CardActionProps { children: ReactNode; href?: string; onClick?: () => void; variant?: "button" | "link"; className?: string; } export const CardAction: React.FC = ({ children, href, onClick, variant = "button", className = "", }) => { if (variant === "button") { return (
); } return ( {children} ); }; interface CardIconProps { children: ReactNode; className?: string; } export const CardIcon: React.FC = ({ children, className = "", }) => { return (
{children}
); }; interface HorizontalCardProps { children: ReactNode; className?: string; } export const HorizontalCard: React.FC = ({ children, className = "", }) => { return (
{children}
); };