import * as React from "react"; import { Card, CardContent } from "~/components/ui/card"; import { cn } from "~/lib/utils"; import type { LucideIcon } from "lucide-react"; interface StatsCardProps { title: string; value: string | number; description?: string; icon?: LucideIcon; trend?: { value: number; isPositive: boolean; }; variant?: "default" | "success" | "warning" | "error" | "info"; className?: string; } const variantStyles = { default: { icon: "text-foreground", background: "bg-muted/50", }, success: { icon: "text-primary", background: "bg-primary/10", }, warning: { icon: "text-status-warning", background: "bg-status-warning-muted", }, error: { icon: "text-status-error", background: "bg-status-error-muted", }, info: { icon: "text-status-info", background: "bg-status-info-muted", }, }; export function StatsCard({ title, value, description, icon: Icon, trend, variant = "default", className, }: StatsCardProps) { const styles = variantStyles[variant]; return (

{title}

{value}

{trend && ( {trend.isPositive ? "+" : ""} {trend.value}% )}
{description && (

{description}

)}
{Icon && (
)}
); } export function StatsCardSkeleton() { return (
); }