"use client"; import React from "react"; import { TrendingUp, TrendingDown } from "lucide-react"; import { cn } from "@/lib/utils"; import { Card, CardBody } from "./Card"; import { Badge } from "./Badge"; export function MetricCard({ label, value, delta, tone = "neutral", icon, subtitle, isPercentage, className, }: { label: string; value: number | string; delta?: number; // percentage change, e.g. +5.2 tone?: "neutral" | "brand" | "green" | "red" | "amber" | "violet" | "blue"; icon?: React.ReactNode; subtitle?: string; isPercentage?: boolean; className?: string; }) { const showValue = isPercentage ? `${Number(value).toFixed(1)}%` : typeof value === "number" ? value.toLocaleString() : value; return ( {label} {showValue} {subtitle !== undefined && ( {subtitle} )} {delta !== undefined && ( {delta >= 0 ? ( <> +{delta.toFixed(1)}% > ) : ( <> {delta.toFixed(1)}% > )} vs last period )} {icon && ( {icon} )} ); } export function MetricPill({ label, value, tone = "neutral", isPercentage, }: { label: string; value: number | string; tone?: "neutral" | "brand" | "green" | "red" | "amber" | "blue"; isPercentage?: boolean; }) { const shown = isPercentage ? `${Number(value).toFixed(1)}%` : value; const toneMap: Record = { neutral: "bg-slate-100 text-slate-700", brand: "bg-brand-50 text-brand-700", blue: "bg-sky-50 text-sky-700", green: "bg-emerald-50 text-emerald-700", red: "bg-red-50 text-red-700", amber: "bg-amber-50 text-amber-700", }; return ( {label} {shown} ); }