import { Component, For, createMemo } from 'solid-js'; import { formatBytes } from '../utils/formatters'; interface MemoryChartProps { data: Array<{ label: string; value: number; total: number; colorClass: string; }>; } const MemoryChart: Component = props => { const chartData = createMemo(() => { const total = props.data.reduce((sum, item) => sum + item.value, 0); if (total === 0) return []; let cumulative = 0; return props.data.map(item => { const startAngle = (cumulative / total) * 360; cumulative += item.value; const endAngle = (cumulative / total) * 360; const largeArc = endAngle - startAngle > 180 ? 1 : 0; return { ...item, startAngle, endAngle, largeArc, percentage: ((item.value / total) * 100).toFixed(1), }; }); }); const polarToCartesian = (cx: number, cy: number, r: number, angle: number) => { const rad = ((angle - 90) * Math.PI) / 180; return { x: cx + r * Math.cos(rad), y: cy + r * Math.sin(rad), }; }; const describeArc = ( cx: number, cy: number, r: number, startAngle: number, endAngle: number, largeArc: number, ) => { const start = polarToCartesian(cx, cy, r, startAngle); const end = polarToCartesian(cx, cy, r, endAngle); return `M ${start.x} ${start.y} A ${r} ${r} 0 ${largeArc} 1 ${end.x} ${end.y}`; }; return (
{item => (
{item.label} {formatBytes(item.value)} {item.percentage}%
)}
{item => ( )} {formatBytes(props.data.reduce((sum, d) => sum + d.value, 0))} Total
); }; export default MemoryChart;