"use client" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { TrendingUp, TrendingDown, Minus } from "lucide-react"; import { LucideIcon } from "lucide-react"; import { motion } from "framer-motion"; interface MetricsCardProps { title: string; value: string; description: string; icon: LucideIcon; trend: "up" | "down" | "neutral"; trendValue: string; } export default function MetricsCard({ title, value, description, icon: Icon, trend, trendValue }: MetricsCardProps) { const getTrendIcon = () => { switch (trend) { case "up": return ; case "down": return ; default: return ; } }; const getTrendColor = () => { switch (trend) { case "up": return "text-emerald-400 bg-emerald-500/10 border-emerald-500/10"; case "down": return "text-rose-400 bg-rose-500/10 border-rose-500/10"; default: return "text-blue-400 bg-blue-500/10 border-blue-500/10"; } }; const getCategoryColor = () => { const t = title.toLowerCase(); if (t.includes("revenue") || t.includes("profit")) return "amber"; if (t.includes("order")) return "blue"; if (t.includes("customer")) return "indigo"; if (t.includes("product") || t.includes("inventory")) return "purple"; return "primary"; } const categoryColor = getCategoryColor(); const getIconContainerColor = () => { switch (categoryColor) { case "amber": return "bg-amber-500/15 text-amber-500 border-amber-500/20"; case "blue": return "bg-blue-500/15 text-blue-500 border-blue-500/20"; case "indigo": return "bg-indigo-500/15 text-indigo-500 border-indigo-500/20"; case "purple": return "bg-purple-500/15 text-purple-500 border-purple-500/20"; default: return "bg-primary/15 text-primary border-primary/20"; } } const getBadgeColor = () => { switch (categoryColor) { case "amber": return "bg-amber-500/10 text-amber-400/80 border-amber-500/20"; case "blue": return "bg-blue-500/10 text-blue-400/80 border-blue-500/20"; case "indigo": return "bg-indigo-500/10 text-indigo-400/80 border-indigo-500/20"; case "purple": return "bg-purple-500/10 text-purple-400/80 border-purple-500/20"; default: return "bg-primary/10 text-primary/60 border-primary/20"; } } return ( {title} {value} {description} {getTrendIcon()} {trend === "up" ? "+" : ""}{trendValue} ); }
{description}