KpiCard
À quoi il sert
KpiCard écrit un indicateur : sa valeur et son unité en grand, sa variation dite en mots, une sparkline en option.
Quand l’utiliser
- Résumer une mesure clé d’un tableau de bord : visites, durée, taux.
- Dire la variation par un mot (hausse, baisse, stable), son pourcentage signé et sa référence.
- Ajouter la tendance par une sparkline, avec son tableau de données lié.
Quand ne pas l’utiliser
- Avec plus de 9 chiffres entiers : le build échoue avec kpi.unreadable ; changer d’échelle et d’unité (k€, M€).
- Pour dire si une variation est bonne ou mauvaise : la carte ne colore pas le sens, une hausse d’erreurs n’est pas un succès. Écrire le jugement dans le titre ou la référence.
- Avec une valeur ou une référence non finie : le build échoue avec kpi.bad-value ou kpi.bad-reference.
- Pour situer une valeur dans des seuils : utiliser GaugeChart.
Exemples
Visites du mois
1 190 visites
Baisse de 4,03 % (−50 visites) par rapport au mois précédent
Données du graphique
| Mois | Visites (visites) |
|---|---|
| 1 janvier 2025 | 820 |
| 1 février 2025 | 790 |
| 1 mars 2025 | 880 |
| 1 avril 2025 | 940 |
| 1 mai 2025 | 1 010 |
| 1 juin 2025 | 980 |
| 1 juillet 2025 | 870 |
| 1 août 2025 | 810 |
| 1 septembre 2025 | 1 050 |
| 1 octobre 2025 | 1 180 |
| 1 novembre 2025 | 1 240 |
| 1 décembre 2025 | 1 190 |
Durée médiane d’une visite
94 s
Baisse de 12,96 % (−14 s) par rapport au mois précédent
Taux de rebond
41 %
Stable par rapport au mois précédent
Téléchargements de la brochure
36
Hausse de 36 par rapport au mois précédent
Abonnés à l’infolettre
1 280
Visites du mois
Aucune donnée à afficher.
---
import KpiCard from '@paulperigault/astro/KpiCard.astro';
---
<KpiCard
id="visites-mois"
title="Visites du mois"
value={1190}
unit="visites"
reference={1240}
referenceLabel="par rapport au mois précédent"
trend={{ title: 'Visites par mois en 2025', dataset: visites }}
/>Variantes
Recommandation d’usage
Une carte porte une mesure, sa variation et au plus une tendance. Les cartes se rangent en grille et s’empilent sur un écran étroit.
Budgets de poids
- Carte avec sparkline de 500 points : sous 10 ko et 400 nœuds, tableau lié exclu.
Limites connues
- La couleur ne distingue pas hausse et baisse : choix assumé, voir D-051.
- Les couleurs --pp-chart-1..6 restent figées sur l’accent par défaut tant que l’issue #121 n’est pas faite.
Teinte d’accent
--pp-accent-hue règle la teinte OKLCH en degrés ; clarté et chroma restent ceux du système. Le branchement dans le build de tokens n’est pas fait (#121) : les graphiques ci-dessus utilisent les jetons figés sur la teinte 270.7. Le tableau montre ce que la dérivation donnerait pour la teinte 150, calculée à la construction de la page.
| Rang | Figé, teinte 270.7, clair | Dérivé, teinte 150, clair | Dérivé, teinte 150, sombre |
|---|---|---|---|
| --pp-chart-1 | oklch(47% 0.19 270.7) | oklch(47% 0.1294 150) | oklch(78% 0.1 150) |
| --pp-chart-2 | oklch(64% 0.1491 60.7) | oklch(68% 0.31 330) | oklch(56% 0.24 315) |
| --pp-chart-3 | oklch(20% 0.0787 30.7) | oklch(20% 0.0986 315) | oklch(88% 0.086 315) |
| --pp-chart-4 | oklch(64% 0.1091 195.7) | oklch(48% 0.095 345) | oklch(52% 0.1235 120) |
| --pp-chart-5 | oklch(44% 0.1781 0.7) | oklch(24% 0.0661 150) | oklch(56% 0.1 180) |
| --pp-chart-6 | oklch(64% 0.2026 285.7) | oklch(64% 0.1346 165) | oklch(92% 0.2184 120) |
Accessibilité
Clavier
- La carte n’est pas interactive et ne reçoit pas le focus.
- Le tableau de la sparkline se déplie au clavier (élément details natif).
Lecteur d’écran
- La carte est un groupe nommé par son titre ; la valeur et la variation suivent en texte.
- La variation est dite en mots : « Baisse de 4,03 % (−50 visites) par rapport au mois précédent ».
- La sparkline porte son title et son desc, et son tableau est lié.
Garanti par le composant
- Le sens de la variation est écrit (mot et signe) : ni flèche ni couleur ne le portent seules (WCAG 1.4.1).
- Une variation que l’arrondi écrase est dite « quasi stable », pas « stable » ; une référence nulle ne produit aucun pourcentage.
- Texte de la carte au corps courant (18 px), chiffres tabulaires ; aucun attribut style.
- Sans valeur, état vide écrit ; une valeur invalide fait échouer le build avec son code.
À la charge de l’intégrateur
- Donner un id unique par page (lettres, chiffres, tirets).
- Nommer la référence (« par rapport au mois précédent ») : un pourcentage sans point de comparaison ne dit rien.
- La locale vient de la propriété locale (défaut fr), jamais de celle du build.
Propriétés
| Propriété | Type | Défaut | Description |
|---|---|---|---|
| value (obligatoire) | number | null | — | Valeur mesurée ; `null` : état vide. |
| unit | string | '' | Unité écrite avec la valeur (`€`, `%`, `ms`). |
| reference | number | null | null | Valeur de comparaison (période précédente, objectif) ; absente : pas de variation. |
| referenceLabel | string | '' | Ce à quoi se compare la variation, écrit après elle (« par rapport à septembre »). |
| trend | { title: string; dataset: unknown; } | — | Tendance : un jeu à une série ; son titre nomme la période (« Visites par mois »). |
| labels | Partial<KpiLabels> | {} | Textes de l'interface (défaut : français). |
| id (obligatoire) | string | — | Préfixe unique des ids du titre et de la description : lettres, chiffres et tirets. |
| title (obligatoire) | string | — | Titre du graphique, premier élément de son nom accessible. |
| locale | string | 'fr' | Locale des nombres et des dates. Défaut : `fr`. |
| class | string | — | Réservé au placement du composant dans son parent. |
Jetons utilisés
--pp-chart-1--pp-chart-2--pp-chart-3--pp-chart-4--pp-chart-5--pp-chart-6--pp-color-bg--pp-color-fg--pp-color-line--pp-color-muted--pp-color-surface--pp-font-family-sans--pp-font-line-height-heading--pp-font-size--1--pp-font-size-0--pp-font-size-3--pp-font-weight-medium--pp-font-weight-regular--pp-font-weight-semibold--pp-radius-surface--pp-size-measure--pp-size-rule--pp-size-target-min--pp-space-2xs--pp-space-3xs--pp-space-s--pp-space-xs
Preuves et décisions
- WCAG 1.4.1 Utilisation de la couleur
- ADR-0007 : visualisation de données, décision 3 (variation dite en mots)
- Convention : 9 chiffres entiers au plus par tuile, non une preuve
- Tests : packages/astro/test/KpiCard.test.ts