/** * Ein Kreisdiagramm. * * **Serverseitig gerendertes SVG, kein Skript.** Eine Diagrammbibliothek wäre * hier das Teuerste auf der Seite; die Rechnung ist ein Dutzend Zeilen * Trigonometrie, und das Ergebnis lädt ohne ein Byte JavaScript. * * Die Farben kommen **nicht** aus dem Stufensystem. Die sechs * Klassifizierungsfarben sind das einzige Buntsystem der Anwendung und * bedeuten dort etwas Bestimmtes; ein Tortenstück in Oxidrot würde als * „streng geheim" gelesen. Die Segmente sind deshalb Abstufungen von * `--steel`, von kräftig nach blass. * * Die Beschriftung steht daneben als Liste mit Zahlen, nicht nur als Farbe im * Kreis: Farbe allein darf keine Angabe tragen, siehe docs/10-design-system.md. * Damit ist das Diagramm der Schmuck und die Liste die Auskunft. */ export type Slice = { label: string; value: number } const GROESSE = 160 const RADIUS = 70 export function PieChart({ slices, emptyLabel, totalLabel, }: { slices: Slice[] emptyLabel: string /** „12 Fälle" - steht in der Mitte und sagt, worauf sich die Anteile beziehen. */ totalLabel: (total: number) => string }) { const gesamt = slices.reduce((summe, stueck) => summe + stueck.value, 0) if (gesamt === 0) return
{emptyLabel}
let begonnen = 0 const segmente = slices.map((stueck, index) => { const anteil = stueck.value / gesamt const start = begonnen begonnen += anteil return { ...stueck, anteil, farbe: farbeFuer(index, slices.length), pfad: kreisAusschnitt(start, begonnen), } }) return (