import React, { ReactNode, useState } from "react"; import { Link } from "react-router"; import { ArrowUpIcon, ArrowDownIcon } from "../../icons"; import { EnhancedTooltip } from "../ui/tooltip/EnhancedTooltip"; export interface MetricCardProps { title: string; value: string | number; subtitle?: string; trend?: number; // Positive or negative trend value icon: ReactNode; accentColor: "blue" | "green" | "orange" | "purple" | "red"; href?: string; onClick?: () => void; tooltip?: string | ReactNode; // Enhanced tooltip content details?: Array<{ label: string; value: string | number }>; // Breakdown for tooltip className?: string; } const accentColors = { blue: { bg: "bg-blue-50 dark:bg-blue-500/10", hover: "hover:bg-blue-100 dark:hover:bg-blue-500/20", border: "bg-brand-500", icon: "text-brand-500", }, green: { bg: "bg-green-50 dark:bg-green-500/10", hover: "hover:bg-green-100 dark:hover:bg-green-500/20", border: "bg-success-500", icon: "text-success-500", }, orange: { bg: "bg-amber-50 dark:bg-amber-500/10", hover: "hover:bg-amber-100 dark:hover:bg-amber-500/20", border: "bg-warning-500", icon: "text-warning-500", }, purple: { bg: "bg-purple-50 dark:bg-purple-500/10", hover: "hover:bg-purple-100 dark:hover:bg-purple-500/20", border: "bg-purple-500", icon: "text-purple-500", }, red: { bg: "bg-red-50 dark:bg-red-500/10", hover: "hover:bg-red-100 dark:hover:bg-red-500/20", border: "bg-error-500", icon: "text-error-500", }, }; export default function EnhancedMetricCard({ title, value, subtitle, trend, icon, accentColor, href, onClick, tooltip, details, className = "", }: MetricCardProps) { const [isHovered, setIsHovered] = useState(false); const colors = accentColors[accentColor]; const formatValue = (val: string | number): string => { if (typeof val === "number") { return val.toLocaleString(); } return val; }; const tooltipContent = tooltip || ( details ? (
{title}
{subtitle}
)}