import { useId, useMemo } from 'react'; import type { ReactNode } from 'react'; import { Card, theme } from 'antd'; import { Sparkline } from '@/components/viz'; import { mean, peak } from './useOverviewHistory'; interface VitalTileProps { available?: boolean; icon: ReactNode; label: string; percent: number; statusColor: string; detail: string; footLeft: string; footRight: string; data: number[]; isMobile: boolean; } export default function VitalTile({ available = true, icon, label, percent, statusColor, detail, footLeft, footRight, data, isMobile, }: VitalTileProps) { const { token } = theme.useToken(); const labelId = useId(); const meanColor = token.colorTextTertiary; const referenceLines = useMemo( () => (data.length > 1 ? [{ y: mean(data), dash: '3 4', color: meanColor }] : []), [data, meanColor], ); return (
{icon} {label}
{available ? percent.toFixed(1) : '—'} {available && %}
{available ? detail : '—'}
{available ? footLeft : '—'} {available ? footRight : '—'}
0 ? null : 100} stroke={statusColor} referenceLines={referenceLines} yFormatter={(v) => `${v.toFixed(0)}%`} name1={label} />
); }