import type { DailyActivityPoint } from "@/lib/types"; /** * Dual-area activity chart: total messages (signal) vs flagged (vermilion). * Pure SVG, scales to container. Includes a 7-day trailing window hint. */ export function AreaActivity({ daily, height = 200, }: { daily: DailyActivityPoint[]; height?: number; }) { const w = 720; const pad = 8; const n = daily.length; const max = Math.max(...daily.map((d) => d.messages), 1); const x = (i: number) => pad + (i / Math.max(n - 1, 1)) * (w - pad * 2); const y = (v: number) => height - pad - (v / max) * (height - pad * 2); const msgLine = daily.map((d, i) => `${i === 0 ? "M" : "L"}${x(i).toFixed(1)},${y(d.messages).toFixed(1)}`).join(" "); const flagLine = daily.map((d, i) => `${i === 0 ? "M" : "L"}${x(i).toFixed(1)},${y(d.flagged).toFixed(1)}`).join(" "); const msgArea = `${msgLine} L${x(n - 1).toFixed(1)},${height - pad} L${x(0).toFixed(1)},${height - pad} Z`; return ( {[0.25, 0.5, 0.75].map((g) => ( ))} {daily.map((d, i) => i % 2 === 0 ? ( {d.day.slice(5)} ) : null, )} ); }