import { Bell, VolumeX } from "lucide-react"; import { cn } from "@/lib/utils"; import { TooltipData } from "../types"; interface MultiSeriesPayloadEntry { color?: string; name?: string; value?: string | number; dataKey?: string; payload?: Record; } interface ChartTooltipProps { active?: boolean; payload?: MultiSeriesPayloadEntry[]; label?: string; showColorIndicator?: boolean; colorIndicatorShape?: "circle" | "square"; } export function ChartTooltip({ active, payload, label, showColorIndicator = true, colorIndicatorShape = "square", }: ChartTooltipProps) { if (!active || !payload || payload.length === 0) { return null; } const data: TooltipData = (payload[0].payload || payload[0]) as TooltipData; const color = payload[0].color || data.color; return (
{showColorIndicator && color && (
)}

{label || data.name}

{typeof data.value === "number" ? data.value.toLocaleString() : data.value} {data.percentage !== undefined && ` (${data.percentage}%)`}

{data.newFindings !== undefined && data.newFindings > 0 && (
{data.newFindings} New Findings
)} {data.new !== undefined && data.new > 0 && (
{data.new} New
)} {data.muted !== undefined && data.muted > 0 && (
{data.muted} Muted
)} {data.change !== undefined && (

{(data.change as number) > 0 ? "+" : ""} {data.change}% {" "} Since Last Scan

)}
); } /** * Tooltip for charts with multiple data series (like LineChart) */ export function MultiSeriesChartTooltip({ active, payload, label, }: ChartTooltipProps) { if (!active || !payload || payload.length === 0) { return null; } return (

{label}

{payload.map((entry: MultiSeriesPayloadEntry, index: number) => (
{entry.name}: {entry.value} {entry.payload && entry.payload[`${entry.dataKey}_change`] && ( ( {(entry.payload[`${entry.dataKey}_change`] as number) > 0 ? "+" : ""} {entry.payload[`${entry.dataKey}_change`]}%) )}
))}
); }