/** * RoseChart (nightingale / polar area) - API canonique (référence Svelte, * React/Vue doivent s'aligner) * * Diagramme polaire de Florence Nightingale : N secteurs d'angle ÉGAL * (360° / N), le RAYON de chaque secteur ∝ value (c'est le rayon qui porte * l'information, PAS l'angle - voilà ce qui le distingue d'un camembert où * l'angle porte l'information et le rayon est constant). * * Échelle du rayon : rayon = sqrt(value / maxValue) * R. * La racine carrée rend l'AIRE du secteur proportionnelle à la valeur * (aire ∝ rayon²), donc honnête perceptuellement - un secteur deux fois * plus « gros » à l'œil vaut bien deux fois plus. Un mapping linéaire * (value/maxValue * R) exagérerait les grandes valeurs (aire ∝ value²). * * Props obligatoires : * data RoseChartDatum[] - {label, value, tone?} * label string - aria-label du graphique * * Props optionnelles : * width number (défaut 320) - largeur du viewBox en px * height number (défaut 320) - hauteur du viewBox en px * class string - classe CSS supplémentaire * * Labels : le libellé est posé sur le secteur si son rayon est assez grand * (> 40% de R). Couleur de texte calculée par contrastTextForTone() pour * garantir le contraste WCAG sur chaque fond catégoriel - pas de blanc fixe. * * NaN/négatif : les valeurs non-finies ou ≤ 0 sont ignorées (rayon 0, pas de * secteur dessiné) et exclues du calcul de maxValue. Tableau vide → rendu * vide sans crash. */ export type RoseChartTone = "category1" | "category2" | "category3" | "category4" | "category5" | "category6" | "category7" | "category8"; export type RoseChartDatum = { label: string; value: number; tone?: RoseChartTone; }; type RoseChartProps = { data: RoseChartDatum[]; label: string; width?: number; height?: number; class?: string; }; declare const RoseChart: import("svelte").Component; type RoseChart = ReturnType; export default RoseChart; //# sourceMappingURL=RoseChart.svelte.d.ts.map