'use client'; import { forwardRef, type ReactNode, type HTMLAttributes } from 'react'; import { motion, type HTMLMotionProps } from 'framer-motion'; import { clsx } from 'clsx'; type CardVariant = 'default' | 'gradient' | 'elevated' | 'feature'; interface CardProps extends Omit, 'children'> { variant?: CardVariant; header?: ReactNode; footer?: ReactNode; badge?: ReactNode; noPadding?: boolean; children: ReactNode; } const variantStyles: Record = { default: clsx( 'bg-white/5 backdrop-blur-xl', 'border border-white/10', ), gradient: clsx( 'bg-gradient-to-bl from-teal-500/10 via-slate-900/80 to-slate-900/90', 'backdrop-blur-xl border border-teal-500/20', ), elevated: clsx( 'bg-slate-800/80 backdrop-blur-xl', 'border border-white/10', 'shadow-xl shadow-black/20', ), feature: clsx( 'bg-gradient-to-bl from-teal-500/15 via-emerald-500/5 to-transparent', 'backdrop-blur-xl border border-teal-400/20', ), }; const Card = forwardRef( ( { variant = 'default', header, footer, badge, noPadding = false, children, className, ...props }, ref, ) => { return ( {badge && (
{badge}
)} {header && (
{header}
)}
{children}
{footer && (
{footer}
)}
); }, ); Card.displayName = 'Card'; interface CardTitleProps extends HTMLAttributes { children: ReactNode; } function CardTitle({ children, className, ...props }: CardTitleProps) { return (

{children}

); } function CardDescription({ children, className, ...props }: HTMLAttributes) { return (

{children}

); } export { Card, CardTitle, CardDescription }; export type { CardProps, CardVariant };