République
française
dsfr-data
Documentation — Web Components DSFR pour la dataviz
Wrapper qui connecte les graphiques officiels DSFR Chart au système dsfr-data-source
pour une alimentation dynamique des données.
Ce composant utilise la bibliothèque officielle DSFR Chart tout en beneficiant de la connexion automatique aux sources de données.
| Attribut | Type | Description |
|---|---|---|
source | String | Id de la <dsfr-data-source> (ou d'un transformateur) dont ce graphique consomme les données. |
type | DSFRChartType | Type de graphique DSFR |
label-field | String | Chemin vers le champ label. Alias inline champ:Libellé (#1244), la grammaire de value-field (#668) et de dsfr-data-a11y (#1230) : label-field="dep_nom:Département" lit la colonne dep_nom, et « Département » devient l'en-tête de la colonne de libellé du tableau de la DataBox (databox). Le libellé ne sert nulle part ailleurs : DSFR Chart n'a pas de titre d'axe, et les graduations portent les VALEURS de la colonne. Sans deux-points, rien ne change. Un : littéral dans un chemin ou un libellé s'échappe en %3A (escapeColonValue) ; une colonne qui existe telle quelle dans les données, deux-points compris, est lue telle quelle. |
value-field | String | Chemin vers le champ valeur. Alias inline champ:Libellé (#668) : value-field="Panier_moyen:Panier moyen" affiche « Panier moyen » dans la légende à la place du nom technique. Un name explicite prime sur l'alias. Un : littéral dans un chemin ou un libellé s'échappe en %3A (escapeColonValue). |
empty-label | String | Libellé affiché pour une catégorie vide (null, undefined ou "" dans label-field) : légende du pie, axe X des cartésiens (#647). Sans lui, DSFR Chart substituerait « Série N » à un nom vide. Pour EXCLURE ces lignes plutôt que les nommer, filtrer en amont : where="champ:isnotnull" (query) ou where="champ is not null" (source ODS). |
heading-level | Number | Niveau de titre HTML du titre de la DataBox (RGAA 9.1, #670) : entier de 2 à 6, borné (défaut 3, rendu historique de DSFR Chart). heading-level="2" rend un h2. |
selected-palette | String | Palette de couleurs, appliquée par DSFR Chart : categorical (une couleur par série, une par part sur un camembert), default (une seule couleur), sequentialAscending / sequentialDescending (la couleur suit la valeur), divergentAscending / divergentDescending (quatre tons vert → rouge, une couleur par série), neutral (un gris, base de highlight-index). Pour fixer la couleur d'une série : color-map. Sur une carte (map*), le défaut est sequentialAscending (celui de DSFR Chart) et l'attribut n'est transmis que s'il est posé (#1347). |
unit-tooltip | String | Unité à afficher dans les tooltips (%, €…). DSFR Chart l'insère comme du HTML : le HTML simple est gardé (m<sup>2</sup>), le contenu actif retiré avant d'être relayé (#1289). |
horizontal | Boolean | Affichage horizontal (bar chart uniquement) |
stacked | Boolean | Barres empilées (bar chart uniquement) |
fill | Boolean | Remplir le graphique (pie chart: true = plein, false = donut) |
code-field | String | Chemin vers le champ code (prioritaire sur label-field) : département/région (map/map-reg), nom d'académie (map-aca), code pays ISO a2/a3/num (map-monde) |
map-highlight | String | ID du département/région à mettre en avant (map chart) |
gauge-value | Number | Valeur pour la jauge (gauge chart uniquement) |
value-field-2 | String | Chemin vers un second champ de valeur (pour bar-line: y-line). Alias inline champ:Libellé accepté (#668). |
value-fields | String | Champs de valeur supplémentaires, séparés par des virgules (ex: 'budget,score'). Alias inline champ:Libellé par série (#668) : value-fields="budget:Budget, score:Score". Un name explicite (tableau JSON) prime sur les alias. |
series-field | String | Champ "clé de série" pour des données au format long/tidy : ses valeurs distinctes deviennent autant de series (mode multi-series sans colonnes multiples). Ex: données {mois, groupe, valeur} avec series-field="groupe" → une série par groupe. S'applique aux types multi-series (bar, line, radar). Prioritaire sur value-fields. Une cellule (libellé, série) sans observation vaut null (#1198) : la courbe s'interrompt, la barre est absente — jamais un 0 dessiné. |
name | String | Nom(s) de série. Chaîne simple recommandée (name="Taux"), enveloppée automatiquement pour DSFR Chart ; tableau JSON pour le multi-séries (name='["Réalisé","Objectif"]'). Sur les cartes (map*), un seul nom : le premier élément d'un JSON est retenu (#653). Priorité (#668) : name explicite, sinon l'alias inline champ:Libellé de value-field(s), sinon le nom du champ (ou les valeurs de series-field en mode tidy). |
unit-tooltip-bar | String | Unité pour les barres (bar-line uniquement). Même nettoyage que unit-tooltip. |
highlight-index | String | Index des barres à mettre en avant (ex: "[0, 2]", type bar). N'agit qu'avec selected-palette="neutral" : les barres citées en bleu, les autres en gris. Sans effet avec toute autre palette (DSFR Chart 2.1.1). |
x-min | String | Borne minimale de l'axe HORIZONTAL, quand il porte des nombres : scatter et line dont les étiquettes sont numériques (années, mesures), et barres horizontales (type="bar" horizontal), où l'axe horizontal est celui des valeurs. La borne est posée exactement. Elle est ignorée, avec un avertissement console, si elle masquerait une donnée (minimum au-dessus de la plus petite valeur portée par l'axe) et, sur des barres horizontales, si elle est positive : des barres partent de zéro. Sans effet, et signalée en console, sur un axe d'étiquettes (bar vertical, bar-line, line ou scatter à étiquettes texte), sur radar et sur les types sans axe (pie, gauge, cartes). |
x-max | String | Borne maximale de l'axe HORIZONTAL, quand il porte des nombres : scatter et line dont les étiquettes sont numériques (années, mesures), et barres horizontales (type="bar" horizontal), où l'axe horizontal est celui des valeurs. La borne est posée exactement. Elle est ignorée, avec un avertissement console, si elle masquerait une donnée (maximum en dessous de la plus grande valeur portée par l'axe). Sans effet, et signalée en console, sur un axe d'étiquettes (bar vertical, bar-line, line ou scatter à étiquettes texte), sur radar et sur les types sans axe (pie, gauge, cartes). |
y-min | String | Borne minimale de l'axe des VALEURS, où qu'il soit dessiné : axe vertical de line, scatter et bar, axe horizontal de barres horizontales (type="bar" horizontal — x-min y fait la même chose et l'emporte si les deux sont écrits), axe des barres (à gauche) de bar-line (l'axe de la ligne, à droite, n'a pas de borne), échelle radiale de radar (le centre du radar est fixé à y-min au lieu du minimum des données). La borne est posée exactement (y-min="5" sur une courbe : l'axe part de 5). Hors radar, elle est ignorée, avec un avertissement console, si elle masquerait une donnée (minimum au-dessus de la plus petite valeur) et, sur des barres (bar, bar-line), si elle est positive : des barres partent de zéro, seul un minimum négatif ou nul agit. Sans effet, et signalée en console, sur les types sans axe (pie, gauge, cartes). |
y-max | String | Borne maximale de l'axe des VALEURS, où qu'il soit dessiné : axe vertical de line, scatter et bar, axe horizontal de barres horizontales (type="bar" horizontal — x-max y fait la même chose et l'emporte si les deux sont écrits), axe des barres (à gauche) de bar-line (l'axe de la ligne, à droite, n'a pas de borne), échelle radiale de radar (si y-min et y-max sont entiers avec une amplitude de 1 à 10, la grille utilise des anneaux entiers). La borne est posée exactement (y-max="37" : l'axe s'arrête à 37). Hors radar, elle est ignorée, avec un avertissement console, si elle masquerait une donnée (maximum en dessous de la plus grande valeur ; pour des barres empilées, du plus grand cumul). Sans effet, et signalée en console, sur les types sans axe (pie, gauge, cartes). |
reference-lines | String | Lignes de référence (overlay) au format JSON. Graphiques cartésiens uniquement (line, bar, bar-line, scatter). Chaque item : { axis: "x"|"y", value: string|number, label?, color?, dash?, position? }. axis:"x" → ligne verticale à une catégorie/date ; axis:"y" → ligne horizontale à un seuil. Ex : reference-lines='[{"axis":"x","value":"2026-02", "label":"Lancement","color":"#c9191e","dash":true}]'. |
targets | String | Cibles / objectifs futurs (overlay) au format JSON. Types line et bar-line uniquement. Chaque item : { x: string|number (échéance, requis), value: number (requis), series?: string|number (nom de dataset ou index, défaut 0), label?: string, color?: string }. L'axe X est étendu automatiquement si l'échéance est au-delà des données (séries paddées avec null : trait plein jusqu'au dernier point réel, trajectoire pointillée vers le losange). Ex : targets='[{"x":2030,"value":26,"label":"Cible 2030 : 26 %"}]'. |
targets-zone | String | Zone future grisée + frontière pointillée réalisé/projeté. "off" désactive. |
targets-legend | String | Légende réalisé/projeté sous le graphe : "" = libellés par défaut (« Données historiques » / « Trajectoire, cible extrapolée »), "off" = masquée, '["a","b"]' = libellés personnalisés. |
idle-message | String | Message rendu quand l'amont attend un filtre (require-where, #690). Distinct de « aucune donnée » : aucune requête n'a été faite. Vide, le libellé par défaut est utilisé. |
Sur une page d'exploration, l'amont peut porter require-where
(<dsfr-data-source> ou <dsfr-data-query>) et ne rien émettre tant
qu'aucun filtre n'est posé. Le graphique rend alors le texte de idle-message
(« Choisissez un filtre pour afficher les données » par défaut) plutôt qu'un cadre vide : aucune
requête n'a été faite, ce n'est pas un jeu de résultats vide. Le mécanisme est décrit sur
dsfr-data-source.
y-min et y-max bornent l'axe des valeurs, où qu'il soit
dessiné ; x-min et x-max bornent l'axe horizontal quand
il porte des nombres. Pour chaque couple attribut × type, la borne agit ou elle est signalée par
un avertissement dans la console : elle n'est jamais ignorée en silence.
| Type | y-min / y-max | x-min / x-max |
|---|---|---|
line, scatter | Axe vertical, celui des valeurs. | Axe horizontal, si les étiquettes sont numériques (années, mesures). Sans effet, et signalé, sur des étiquettes texte. |
bar | Axe vertical, celui des valeurs. | Sans effet, et signalé : l'axe horizontal porte des étiquettes. |
bar + horizontal | Axe des valeurs, qui est ici l'axe horizontal. | Le même axe. Si les deux sont écrits avec des valeurs différentes, x-* l'emporte et y-* est signalé. |
bar-line | Axe des barres, à gauche. L'axe de la ligne, à droite, n'a pas de borne. | Sans effet, et signalé. |
radar | Échelle radiale : le centre du radar est fixé à y-min. | Sans effet, et signalé. |
pie, gauge, map, map-reg, map-aca, map-monde | Sans effet, et signalé : ce type n'a pas d'axe. | Sans effet, et signalé. |
y-min="5" sur une courbe donne un axe
qui part de 5, y-max="37" un axe qui s'arrête à 37 : elle n'est pas arrondie à la
graduation voisine.
where de
dsfr-data-query).
bar, bar-line). C'est la
longueur d'une barre qu'on compare : un axe tronqué fait d'un écart de 40 % un écart du simple au
triple. Un minimum positif y est donc ignoré et signalé ; seul un minimum négatif ou nul agit. Pour
un axe qui ne part pas de zéro, une courbe convient.
y-min et y-max sur chaque
graphique leur donnent une échelle commune.
<!-- Taux sur une échelle fixe, de 0 à 100 --> <dsfr-data-chart source="taux" type="line" label-field="annee" value-field="taux" y-min="0" y-max="100"> </dsfr-data-chart> <!-- Barres horizontales : y-max borne l'axe des valeurs (horizontal) --> <dsfr-data-chart source="taux" type="bar" horizontal label-field="region" value-field="taux" y-max="100"> </dsfr-data-chart>
selected-palette attribue les couleurs dans l'ordre des séries : la même modalité
change de couleur dès que le filtrage change l'ordre. Quand une modalité porte une convention
(le réalisé en bleu, l'objectif en rouge, un parti politique, un niveau d'alerte),
color-map la fixe.
| Attribut | Type | Description |
|---|---|---|
color-map | String | Couleur fixée par modalité (#732) : paires modalité:#couleur séparées par des virgules, même grammaire que dsfr-data-map-layer. Ex : "Réalisé:#000091,Objectif:#E1000F". La modalité est un nom de série (une couleur par courbe ou par barre) ou, à défaut, un libellé de l'axe (une couleur par part de camembert, par barre, ou par point d'une courbe, d'un radar ou d'un nuage — le trait garde la couleur de sa série, #1244). Les modalités non citées gardent la couleur de la palette. Une virgule ou un deux-points dans une modalité s'écrit %2C ou %3A. Sans effet sur les cartes (map*). |
<dsfr-data-chart source="budget" type="line" label-field="mois" value-fields="realise,objectif" color-map="realise:#000091, objectif:#E1000F"> </dsfr-data-chart>
La modalité est un nom de série pour les courbes et les barres, un libellé de l'axe pour les parts
d'un camembert. Les modalités non citées gardent la couleur de la palette : on ne fixe que ce qui
doit l'être. Sans effet sur les cartes choroplèthes (type="map" et ses variantes), dont
le dégradé est piloté par selected-palette. La même grammaire existe sur
dsfr-data-map-layer.
Une carte (type="map" et ses variantes) affiche sous son titre une valeur de
synthèse. Par défaut, c'est la moyenne non pondérée des valeurs dessinées :
chaque territoire pèse autant, quelle que soit sa taille. Pour un taux, ce n'est pas le taux
national. La moyenne des taux de personnels des collèges par département vaut 4,27 %, le taux
national 5,6 %. Sur un indicateur homogène, l'écart est faible et passe inaperçu ; sur un
indicateur dispersé, il atteint le quart de la valeur, et rien à l'écran ne distingue les deux cas.
| Attribut | Type | Description |
|---|---|---|
map-summary | String | MODE de synthèse du résumé affiché sous le titre d'une carte (type="map*"), #927 — calculé sur les lignes dessinées, donc suivant les filtres comme le reste de la carte : - sum — la **somme**. La seule synthèse juste d'une carte de VOLUMES : le nombre de licenciés, d'établissements, de logements par territoire. La moyenne d'un volume par territoire ne mesure rien (« 3 074,06 en France » pour 310 480 licences) ; - avg — la moyenne NON pondérée, le calcul historique. Juste pour un indicateur dont les territoires pèsent pareil, faux pour un taux dès qu'ils diffèrent : la Lozère y pèse autant que le Nord ; - weighted — la moyenne pondérée, Σ(valeur × effectif) / Σ(effectif). La synthèse juste d'une carte de TAUX (#763), et exige map-summary-weight ; - none — **aucun résumé**. Le choix honnête quand la carte ne porte pas un indicateur qui se résume en un nombre (un indice, un rang, une catégorie recodée). Ce qui disparaît est le CHIFFRE : l'en-tête « …, en France » appartient à DSFR Chart et reste affiché, sans valeur (vérifié au navigateur le 2026-09-19). **La première question d'une carte thématique est volume ou taux**, et elle décide du mode : un volume s'additionne, un taux se pondère, et l'autre calcul est faux dans les deux sens. Une somme n'a de sens que si les lignes dessinées forment une PARTITION du territoire — chaque unité comptée une fois et une seule. Deux lignes portant le même code géographique sont additionnées toutes les deux alors que la carte n'en dessine qu'une (la dernière) : un avertissement console le signale en mode sum, et il faut alors agréger en amont (dsfr-data-query group-by="dep"). Les lignes écartées faute de code géographique exploitable ne sont dans aucun résumé — le compte de ces lignes est déjà journalisé. **Attribut absent : rien ne change.** Le résumé garde son ordre historique — valeur fournie, sinon moyenne pondérée si map-summary-weight est posé, sinon moyenne non pondérée. Cet attribut n'est qu'une façon de plus de résumer, jamais une redéfinition des chiffres déjà publiés. **Ordre de priorité** : none l'emporte sur tout ; map-summary-value (littéral, #763) l'emporte ensuite sur le mode, avec un avertissement console quand les deux sont posés. Un mode inconnu, ou weighted sans map-summary-weight, est une erreur de configuration et n'affiche AUCUN résumé — jamais un chiffre de repli qui aurait l'air juste. **Ce que le résumé lit** : la colonne value-field, telle qu'elle arrive — donc arrondis d'un dsfr-data-normalize round="…" en amont compris, qui faussent weighted sans se voir (PG-031, #929). L'arrondi au centième que la carte applique pour SE DESSINER, lui, ne compte pas. Pour arrondir l'affichage sans fausser le calcul : map-summary-field. Ce que le résumé écarte est DIT sous la carte (#1201) : les lignes au code absent ou hors du découpage ne sont ni dessinées ni comptées, et une note « Ce chiffre écarte N lignes sans territoire sur la carte » le signale — avec leur total pour sum. |
map-summary-weight | String | Champ d'effectif pour un résumé de carte PONDÉRÉ (#763) : Σ(valeur × effectif) / Σ(effectif) sur les lignes dessinées. Pour un taux de personnels par élève, map-summary-weight="nb_eleves" rend le taux national, là où la moyenne des taux départementaux s'en écarte. Les lignes dont l'effectif n'est pas numérique sont écartées du calcul ; si aucune n'en porte, erreur de configuration et pas de résumé. **Sur quoi porte le calcul** : la colonne value-field telle qu'elle arrive. L'arrondi au centième que la carte applique pour SE DESSINER ne compte pas — le résumé repart des lignes source. Mais un dsfr-data-normalize round="champ:1" en amont réécrit la colonne dans la donnée, et la pondération porte alors sur des valeurs arrondies : 4,5331 au lieu de 4,5368 sur 101 départements (PG-031, #929). map-summary-field désigne alors la colonne brute. |
map-summary-value | String | Valeur du résumé affiché sous le titre des cartes (type="map*"), à la place de la moyenne calculée (#763). Nombre littéral, décimales à la française acceptées (map-summary-value="5,6") : la valeur nationale publiée par ailleurs, qui fait autorité. Prime sur map-summary-weight. Une valeur non numérique est une erreur de configuration, et aucun résumé n'est affiché plutôt qu'un chiffre faux. Sans cet attribut ni map-summary-weight, le résumé est la moyenne NON PONDÉRÉE des valeurs dessinées sur la carte. Pour un taux, ce n'est pas le taux national dès que les territoires ont des tailles différentes : l'écart mesuré atteint le quart de la valeur sur un indicateur dispersé, et reste invisible sur un indicateur homogène. |
map-summary-field | String | Colonne sur laquelle le résumé d'une carte est CALCULÉ, quand elle n'est pas celle qu'on affiche (#929). Sans l'attribut le résumé porte sur value-field ; avec, value-field ne sert plus qu'au tracé et à l'infobulle. C'est la réponse au piège de composition d'un arrondi amont : compute="taux_aff = round(taux, 1)", puis value-field="taux_aff" map-summary-field="taux". Vaut pour les trois calculs (sum, avg, weighted), sans effet sous map-summary-value ou map-summary="none". Un champ qu'aucune ligne dessinée ne porte en numérique est une erreur de configuration nommée : aucun résumé, jamais un repli silencieux sur la colonne affichée — qui serait le chiffre faux que l'attribut évite. **Attribut absent : rien ne change.** |
<!-- Taux national : moyenne des taux pondérée par l'effectif --> <dsfr-data-chart source="personnels" type="map" code-field="code_dep" value-field="taux_personnels" map-summary-weight="nb_eleves"> </dsfr-data-chart>
Choisir l'effectif qui a servi de dénominateur au taux : pondérer un taux par élève par le nombre
d'élèves rend exactement le rapport des deux sommes. Quand la valeur nationale est publiée par
ailleurs et fait autorité, map-summary-value la reprend telle quelle. Seules les
lignes dessinées entrent dans le calcul : une ligne au code géographique invalide ne pèse pas.
map-summary choisit le mode de synthèse, et la première question
d'une carte thématique le décide : volume ou taux. Un volume s'additionne
(map-summary="sum") — la moyenne d'un nombre de licenciés par département
n'est pas un chiffre lisible, et une valeur écrite à la main dans
map-summary-value cesse d'être juste au premier filtre. Un taux se pondère
(map-summary="weighted"). map-summary="none" retire le chiffre
quand l'indicateur ne se résume pas en un nombre — l'en-tête « en France » appartient
à DSFR Chart et reste affiché.
<!-- Carte de volumes : le résumé est le total, et il suit les filtres --> <dsfr-data-chart source="licences" type="map" code-field="code_dep" value-field="nb_licences" map-summary="sum"> </dsfr-data-chart>
Une somme suppose une partition : chaque territoire compté une fois. Deux
lignes portant le même code sont additionnées toutes les deux alors que la carte n'en dessine
qu'une — un avertissement console le signale, et il faut agréger en amont
(dsfr-data-query group-by="code_dep"). Un mode inconnu, ou
weighted sans map-summary-weight, est une erreur de configuration :
aucun résumé n'est affiché plutôt qu'un chiffre de repli qui aurait l'air juste.
Le résumé porte sur la colonne value-field telle qu'elle arrive.
L'arrondi au centième que la carte applique pour se dessiner ne compte pas — le calcul repart
des lignes source. Mais un arrondi posé en amont
(dsfr-data-normalize round="champ:1", le réflexe pour une infobulle lisible)
réécrit la colonne dans la donnée : la pondération porte alors sur des valeurs arrondies, et
le taux national est faux de peu — donc invisible. Mesuré sur les 101 départements d'une
fédération sportive : 4,5331 au lieu de 4,5368.
map-summary-field désigne la colonne de calcul, distincte de
celle qu'on affiche.
<!-- Afficher l'arrondi, calculer sur la valeur brute --> <dsfr-data-normalize id="n" source="licences" compute="lics_pop_aff = round(lics_pop, 1)"></dsfr-data-normalize> <dsfr-data-chart source="n" type="map" code-field="code_dep" value-field="lics_pop_aff" map-summary-weight="pop" map-summary-field="lics_pop"> </dsfr-data-chart>
Un champ de calcul qu'aucune ligne dessinée ne porte en numérique est une erreur de configuration : aucun résumé n'est affiché, jamais un repli silencieux sur la colonne affichée — qui serait exactement le chiffre faux que l'attribut existe pour éviter.
L'attribut databox active l'habillage DataBox DSFR autour du graphique :
cadre editorial avec titre, source, date, switch chart/tableau integre, screenshot PNG,
téléchargement CSV, plein écran, tendance.
| Attribut | Type | Description |
|---|---|---|
databox | Boolean | Envelopper le chart dans une DataBox DSFR native. Son menu « Plus d'actions » (CSV, capture, actions), son infobulle et sa fenêtre ne s'ouvrent que si la page charge le JavaScript du DSFR (dsfr.module.min.js) ; sinon un avertissement console le dit (#1289). |
databox-title | String | Titre affiché dans l'en-tête DataBox |
databox-source | String | Mention de la source (ex: "INSEE, 2024") |
databox-date | String | Date de la donnée (ex: "Mars 2024"), affichée dans le pied de la DataBox et sur les cartes. Aucune date n'est rendue si l'attribut est absent — plus de repli sur la date du jour, qui n'est pas celle des données (#650). Prime sur databox-date-field quand les deux sont posés. |
databox-date-field | String | Fraîcheur lue dans la donnée (#661) : chemin d'une colonne de dates ISO (AAAA-MM-JJ, heure facultative). La plus récente est affichée comme date de la DataBox (et des cartes), formatée JJ/MM/AAAA. Ignoré si databox-date est posé ; aucune date rendue si la colonne ne contient aucune date ISO valide. |
databox-download | Boolean | Bouton téléchargement CSV dans DataBox |
databox-screenshot | Boolean | Bouton screenshot PNG |
databox-fullscreen | Boolean | Bouton à l'icône « plein écran » de la DataBox. Avec DSFR Chart 2.1.1, il n'apparaît qu'accompagné de databox-modal-title, et il ouvre cette modale (databox-modal-content) : le graphique lui-même n'est pas agrandi (#1179). Posé SEUL, il ne rend rien : un avertissement console le dit (#1289). |
databox-trend | String | Badge tendance (ex: "+5.2", "-3.1") |
databox-tooltip-title | String | Titre du tooltip info DataBox (rendu comme du texte) |
databox-tooltip-content | String | Contenu du tooltip info DataBox (rendu comme du texte, aucune balise) |
databox-modal-title | String | Titre de la modale DataBox (texte). La fenêtre n'existe qu'avec ce titre ET databox-fullscreen : sans l'un des deux, rien n'est rendu et un avertissement console le dit (#1289). |
databox-modal-content | String | Contenu de la modale DataBox, en HTML SIMPLE (paragraphes, gras, liens, listes). DSFR Chart le pose tel quel dans la page : le composant le nettoie avant de le relayer (#1289) — scripts, iframes, styles, attributs on*, URL javascript: et data: sont retirés, et le retrait signalé dans la console. Une valeur venue d'une donnée s'échappe avant d'y être écrite. Sans effet sans databox-modal-title et databox-fullscreen. |
databox-default-source | String | Source par défaut du sélecteur multi-source de la DataBox. SANS EFFET avec dsfr-data-chart, qui ne déclare au cadre qu'une source : aucun sélecteur n'est affiché, et un avertissement console le dit (#1289). |
databox-actions | String | Entrées ajoutées au menu « Plus d'actions » du cadre : tableau JSON de libellés, ex. '["Source officielle","Méthode"]'. Une entrée n'a AUCUN comportement par elle-même : la page la branche en écoutant le clic du bouton, qui porte data-action (le libellé en minuscules, sans accents, tout autre caractère en tiret : source-officielle) et data-id (l'id du cadre). Valeur mal formée : erreur de configuration (data-dsfr-config-error), les entrées fautives sont écartées et le cadre reste affiché (#1289). |
Événements : le composant n'émet pas d'événement custom ; il participe au data-bridge en consommateur (abonnement à la source, états loading/erreur/vide rendus dans le wrapper).
Quand databox est active, dsfr-data-a11y ne doit PAS inclure
table ni download (DataBox les fournit déjà).
Conserver uniquement description sur dsfr-data-a11y.
Mesuré dans un navigateur, sur DSFR Chart 2.1.1. Deux attributs sont posés dans la page comme du HTML ; tous les autres sont rendus comme du texte — une balise qu'on y écrit se lit à l'écran, elle ne produit pas d'élément.
| Attribut | Rendu comme | Ce que fait la bibliothèque |
|---|---|---|
databox-modal-content | HTML | Nettoyé avant d'être relayé : paragraphes, gras, italique, liens, listes, tableaux, images sont gardés ; le contenu actif est retiré, et le retrait signalé dans la console. |
unit-tooltip, unit-tooltip-bar | HTML (dans l'infobulle du graphique, au survol) | Même nettoyage. m<sup>2</sup> garde son exposant. |
databox-title, databox-source, databox-date, databox-trend | Texte | Relayé tel quel. |
databox-tooltip-title, databox-tooltip-content, databox-modal-title | Texte | Relayé tel quel. |
databox-actions (chaque libellé) | Texte | Validé avant d'être relayé (voir plus bas). |
name, alias de value-field et de label-field, valeurs de label-field et de series-field, empty-label | Texte (légende, axe, tableau) | Relayé tel quel ; le tableau du cadre est échappé par la bibliothèque. |
reference-lines, targets, targets-legend (libellés) | Texte | Dessinés par la bibliothèque, sans innerHTML. |
Ce qui est retiré du HTML. Les éléments script, iframe,
object, embed, style, template, meta,
base, link, textarea, title, xmp,
noscript, noembed, noframes, plaintext, les animations
SVG animate et set ; tout attribut on* ; les URL
javascript:, vbscript: et data: dans href,
src, action, formaction (une image en data: perd donc
sa source) ; les commentaires. Le reste est rendu à l'identique.
Le nettoyage retire ce qui s'exécute, pas ce qui trompe : un lien, un formulaire qui
poste vers un autre site, une image distante, un attribut style restent. Une valeur lue
dans les données ou saisie par un tiers s'échappe (<,
&) avant d'être écrite dans ces deux attributs.
Menu, infobulle et fenêtre exigent le JavaScript du DSFR. Le bouton « Plus d'actions »
(qui porte « Télécharger en CSV », « Capture d'écran » et vos actions), l'infobulle
(databox-tooltip-*) et la fenêtre d'information (databox-modal-*) sont des
composants du DSFR : ils ne s'ouvrent que si la page charge dsfr.module.min.js. Sans lui,
le clic ne fait rien ; le composant l'écrit une fois dans la console. Le basculement graphique / tableau
fonctionne sans.
La fenêtre d'information exige deux attributs. databox-fullscreen et
databox-modal-title : l'un sans l'autre ne rend rien, et un avertissement console nomme
celui qui manque. databox-default-source est sans effet avec dsfr-data-chart,
qui ne déclare au cadre qu'une source ; il est signalé de la même façon.
Brancher une action. databox-actions='["Source officielle","Méthode"]'
ajoute deux entrées au menu. Une entrée n'a aucun comportement par elle-même : c'est un
bouton qui porte data-action — le libellé en minuscules, sans accents, tout autre caractère
remplacé par un tiret — et data-id, l'id du cadre (databox- suivi de l'id du
graphique). La page écoute le clic :
document.addEventListener('click', (e) => {
const bouton = e.target.closest('[data-action="source-officielle"]');
if (bouton && bouton.dataset.id === 'databox-mon-graphique') {
window.open('https://exemple.fr/source', '_blank', 'noopener');
}
});
Une valeur mal formée — JSON invalide, autre chose qu'un tableau, entrée qui n'est pas une chaîne non
vide — est une erreur de configuration (data-dsfr-config-error sur le composant, message
dans la console) : les entrées fautives sont écartées, les autres gardées, et le cadre reste affiché.
Vue tableau de la DataBox. Elle reprend ce que le graphique trace : une colonne
par champ de valeur (value-field, value-field-2, value-fields),
dont l'en-tête est le libellé de la légende. Au format long (series-field), le tableau
pivote comme le graphique : une ligne par libellé, une colonne par série, une cellule vide là où
une série n'a pas d'observation. Le tableau montre 100 lignes au plus, comme celui de
dsfr-data-a11y, et l'annonce sous le tableau : « Affichage limité aux 100 premières
lignes sur N. » Les nombres y sont écrits en français, comme dans le tableau de
dsfr-data-a11y (« 2,27 », « 1 234,5 », au plus deux décimales) ; une valeur non
nulle inférieure à 0,01 en valeur absolue garde deux chiffres significatifs (0,00123 s'écrit
« 0,0012 », jamais « 0 »). Les valeurs tracées, elles, ne changent pas. La colonne de libellé porte ce que l'axe affiche
(empty-label compris), sous l'alias de label-field quand il est écrit :
label-field="dep_nom:Département".
type accepte bar, line, pie,
radar, gauge, scatter, bar-line et les quatre
cartes choroplèthes map (départements), map-reg (régions),
map-aca (académies) et map-monde. Les quatre variantes de carte sont des
valeurs de type, pas des composants : elles n'ont pas de page propre et sont
documentées dans Graphiques — map-chart, avec les clés
géographiques attendues par chacune.
<dsfr-data-chart source="sites" type="bar" label-field="nom" value-field="score_rgaa" selected-palette="categorical" unit-tooltip="%"> </dsfr-data-chart>
<dsfr-data-chart source="sites" type="bar" label-field="ministere" value-field="score_rgaa" horizontal="true"> </dsfr-data-chart>
<dsfr-data-chart source="sites" type="line" label-field="nom" value-field="score_dsfr" unit-tooltip="%"> </dsfr-data-chart>
L'attribut reference-lines superpose des repères : ligne horizontale à un seuil
(axis:"y") ou verticale à une catégorie (axis:"x"), avec un libellé en pastille.
Graphiques cartésiens uniquement (line, bar, bar-line, scatter).
<dsfr-data-chart source="sites" type="line" label-field="nom" value-field="score_dsfr" reference-lines='[{"axis":"y","value":80,"label":"Objectif","color":"#c9191e"}]'> </dsfr-data-chart>
L'attribut targets représente un objectif lointain : l'axe X est étendu jusqu'à
l'échéance, une trajectoire pointillée relie le dernier point réel à un losange, la zone future
est grisée et une légende « Données historiques / Trajectoire, cible extrapolée » est ajoutée.
Au survol du losange, un tooltip liste les cibles de toutes les séries à cette échéance.
Types line et bar-line uniquement — préférer des labels numériques
(axe linéaire : l'écart 2025 → 2030 est proportionnel).
<dsfr-data-chart source="fossiles" type="line" label-field="annee" value-field="part" unit-tooltip=" %" targets='[{"x":"2030","value":26,"label":"Cible 2030 : 26 %"}]'> </dsfr-data-chart>
<dsfr-data-chart source="sites" type="pie" label-field="ministere" value-field="score_rgaa" selected-palette="categorical"> </dsfr-data-chart>
<dsfr-data-chart source="sites" type="radar" label-field="ministere" value-field="score_rgaa" y-min="0" y-max="100"> </dsfr-data-chart>
<dsfr-data-chart id="chart" source="data" type="bar" label-field="ministere" value-field="score_moyen" databox databox-title="Score RGAA moyen par ministere" databox-source="Referentiel RGAA" databox-date="2024" databox-download databox-screenshot> </dsfr-data-chart> <!-- Avec DataBox : pas de table ni download sur a11y --> <dsfr-data-a11y for="chart" source="data" description="Ce graphique montre le score RGAA moyen par ministere."> </dsfr-data-a11y>
| Fonctionnalite | dsfr-data-chart | DSFR Chart natif |
|---|---|---|
| Données dynamiques | Oui (via dsfr-data-source) | Non (statiques) |
| Rafraîchissement auto | Oui | Non |
| Transformation données | Automatique | Manuelle |
| Complexite d'usage | Simple | Moyenne |