import { memo } from 'react'; import { Area, AreaChart, CartesianGrid, ResponsiveContainer, Tooltip, XAxis, YAxis, } from 'recharts'; import { chartSeriesDelta, chartSeriesPeak, type ChartDisplayMode, } from '../../help/chartSampleData'; import './HashrateChart.css'; export interface ChartPoint { time: string; value: number; label?: string; } interface HashrateChartProps { data: ChartPoint[]; title?: string; color?: string; unit?: string; height?: number; displayMode?: ChartDisplayMode; } const GRAD_IDS = ['cyan', 'magenta', 'amber', 'green', 'purple'] as const; function colorToId(color: string): string { if (color.includes('e8f5') || color.includes('f5ff') || color.includes('06b6d4') || color === '#00e8f5' || color === '#00f5ff' || color.includes('neon-cyan')) return 'cyan'; if (color.includes('2da6') || color.includes('8b5cf6')) return 'magenta'; if (color.includes('b020') || color.includes('eab308')) return 'amber'; if (color.includes('39ff') || color.includes('22c55e')) return 'green'; return 'purple'; } function HashrateChart({ data, title, color = 'var(--neon-cyan)', unit = 'H/s', height = 280, displayMode = 'live', }: HashrateChartProps) { const gradId = colorToId(color); const peak = chartSeriesPeak(data); const delta = chartSeriesDelta(data); const liveLabel = displayMode === 'live' ? '● LIVE' : '○ IDLE'; const liveClass = displayMode === 'live' ? 'pulse' : 'empty'; if (data.length === 0) { return (
{title || 'Telemetry'}
No live data yet — connect miners to populate this chart