2025-10-21 10:14:40 +02:00
|
|
|
import { ReactNode } from 'react';
|
|
|
|
|
|
|
|
|
|
interface CardProps {
|
|
|
|
|
children: ReactNode;
|
2025-10-23 21:52:16 +02:00
|
|
|
variant?: 'default' | 'glass' | 'outlined';
|
2025-10-28 15:23:18 +01:00
|
|
|
hoverable?: boolean;
|
2025-10-21 10:14:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default function Card({
|
|
|
|
|
children,
|
|
|
|
|
variant = 'default',
|
|
|
|
|
}: CardProps) {
|
2025-10-21 10:22:00 +02:00
|
|
|
const baseClasses = "relative overflow-hidden rounded-xl transition-all duration-300 ease-out";
|
2025-10-21 10:14:40 +02:00
|
|
|
|
|
|
|
|
const variantClasses = {
|
2025-10-28 16:17:54 +01:00
|
|
|
default: "bg-gradient-to-br bg-gradient-to-br from-stone-800 via-stone-900 to-stone-800 border border-stone-700",
|
2025-10-28 17:11:21 +01:00
|
|
|
glass: "bg-gradient-to-br bg-gradient-to-br from-white/5 via-white/10 to-white/5 border border-white/10 backdrop-blur-sm",
|
2025-10-28 16:17:54 +01:00
|
|
|
outlined: "bg-transparent border-2 border-stone-700/50"
|
2025-10-21 10:14:40 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div
|
2025-10-28 15:23:18 +01:00
|
|
|
className={`${baseClasses} ${variantClasses[variant]}`}
|
2025-10-21 10:14:40 +02:00
|
|
|
>
|
|
|
|
|
{children}
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
interface CardHeaderProps {
|
|
|
|
|
children: ReactNode;
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 15:23:18 +01:00
|
|
|
export function CardHeader({ children }: CardHeaderProps) {
|
2025-10-21 10:14:40 +02:00
|
|
|
return (
|
2025-10-28 15:23:18 +01:00
|
|
|
<div className={`p-6 pb-0`}>
|
2025-10-21 10:14:40 +02:00
|
|
|
{children}
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
interface CardContentProps {
|
|
|
|
|
children: ReactNode;
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 15:23:18 +01:00
|
|
|
export function CardContent({ children }: CardContentProps) {
|
2025-10-21 10:14:40 +02:00
|
|
|
return (
|
2025-10-28 15:23:18 +01:00
|
|
|
<div className={`p-6 pb-4`}>
|
2025-10-21 10:14:40 +02:00
|
|
|
{children}
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
interface CardFooterProps {
|
|
|
|
|
children: ReactNode;
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 15:23:18 +01:00
|
|
|
export function CardFooter({ children }: CardFooterProps) {
|
2025-10-21 10:14:40 +02:00
|
|
|
return (
|
2025-10-28 15:23:18 +01:00
|
|
|
<div className={`p-6 pt-8`}>
|
2025-10-21 10:14:40 +02:00
|
|
|
{children}
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|