République
française
dsfr-data
Documentation — Web Components DSFR pour la dataviz
Composant de tableau de données avec fonctionnalites de recherche, filtrage, tri, pagination et export CSV.
Se connecte a un <dsfr-data-source> pour recevoir les données dynamiquement.
| Attribut | Type | Description |
|---|---|---|
source | String | Id de la source (ou du transformateur) dont ce tableau consomme les données. |
columns | String | Définition des colonnes : "clé:Label, cle2:Label2". Omis : toutes les clés présentes dans les données deviennent colonnes, dans leur ordre d'apparition, libellé = clé — le tableau suit un schéma dynamique (aval d'un dsfr-data-pivot, #255). |
search | Boolean | Afficher un champ de recherche |
filters | String | Colonnes filtrables: "ministere,statut" |
sort | String | Tri par défaut: "score:desc" |
pagination | Number | Nombre d'éléments par page (0 = pas de pagination) |
export | String | Formats d'export disponibles: "csv", "html" (separables par virgule) |
caption | String | Titre du tableau, rendu dans caption (masqué visuellement, lu par les lecteurs d'écran — RGAA 5.4, #669). À défaut, dérivé de aria-label. |
decimals | Number | Nombre de décimales des cellules numériques (#666). Absent : au plus 2 décimales, format fr-FR. Les exports CSV/HTML ne sont pas concernés. |
url-sync | Boolean | Synchronise le numéro de page dans l'URL (replaceState) |
url-page-param | String | Nom du paramètre URL pour la page (défaut: "page") |
server-sort | Boolean | Active le tri serveur. Au lieu de trier localement, envoie une commande { orderBy } au source upstream (dsfr-data-query server-side) qui re-fetche les données triees. |
columns-auto | Boolean | Complète columns avec les clés des données qui n'y figurent pas (ordre d'apparition, libellé = clé) : les premières colonnes sont libellées et figées, les suivantes suivent les données (#640). |
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é. |
count-label | String | Nom compté par le compteur rendu au-dessus du tableau, à la place de « résultat » : count-label="commune" affiche « 1 234 communes » (#925, AM-077 — même grammaire que dsfr-data-search, #779). Une forme seule prend un « s » au pluriel ; pour un pluriel irrégulier ou un mot invariable, donner les deux formes séparées par une **barre verticale** : count-label="cheval|chevaux", count-label="prix|prix". La virgule ne sépare PAS les deux formes. Poser l'attribut fait aussi passer le nombre par le formateur fr-FR (séparateur de milliers). Sans l'attribut, le compteur est rendu exactement comme avant. La mention « (filtré) » suit le compteur dans les deux cas. |
Les anciens noms francais (colonnes, recherche, filtres, tri, server-tri) restent lus en alias deprecies (#300).
Événements : le composant n'émet pas d'événement custom ; il participe au data-bridge en consommateur (abonnement à la source) et émet des commandes dsfr-data-source-command (page, orderBy) en pagination/tri serveur.
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é — un tableau de 19 000 lignes que personne ne lira ne part pas.
Le tableau rend alors le texte de idle-message (« Choisissez un filtre pour afficher
les données » par défaut) à la place du message « aucune donnée » : rien n'a été demandé, aucune
requête n'est revenue vide. Le mécanisme est décrit sur
dsfr-data-source.
Colorer une cellule selon sa valeur ne se fait pas dans le tableau : la règle est une donnée, elle
se calcule en amont. cell-class relie une colonne affichée à une colonne de classes
produite par le compute de
dsfr-data-normalize.
| Attribut | Type | Description |
|---|---|---|
cell-class | String | Classe CSS d'une cellule pilotée par une colonne calculée (#740) : "colonne:colonne_classe", plusieurs paires séparées par des virgules ; "colonne" seul classe la cellule par sa propre valeur. La valeur de la colonne de classe DEVIENT la classe de la cellule (plusieurs classes séparées par des espaces) : produisez-la avec le compute de dsfr-data-normalize, par exemple compute="alerte = when taux >= 50 then 'seuil-ok' else 'seuil-bas'", puis stylez .seuil-bas dans la page. Seuls les identifiants CSS sont retenus, le reste est ignoré. Quand la colonne de classe n'est pas affichée, sa valeur est ajoutée à la cellule en texte pour les lecteurs d'écran : l'information n'est jamais portée par la seule couleur. |
<dsfr-data-normalize id="calc" source="src"
compute="alerte = when taux >= 50 then 'seuil-ok' else 'seuil-bas'">
</dsfr-data-normalize>
<dsfr-data-list source="calc"
columns="commune:Commune, taux:Taux (%)"
cell-class="taux:alerte">
</dsfr-data-list>
<style>.seuil-bas { color: var(--text-default-error); }</style>
Plusieurs paires se séparent par des virgules ; cell-class="taux" seul classe la
cellule par sa propre valeur. Seuls les identifiants CSS sont retenus. Quand la colonne de classes
n'est pas affichée, sa valeur est ajoutée à la cellule en texte pour les lecteurs d'écran :
l'information n'est jamais portée par la seule couleur.
Un tableau sert souvent de sélecteur : on clique une ligne, et les graphiques de la page se
recentrent sur elle. refine-on-click nomme le champ dont la valeur de la ligne
cliquée devient un filtre eq. Une colonne de sélection est ajoutée en tête du
tableau : un bouton par ligne, atteignable au clavier et dont l'état est annoncé
(aria-pressed) — la couleur de la ligne n'est jamais la seule marque.
| Attribut | Type | Description |
|---|---|---|
refine-on-click | String | Champ dont la valeur de la ligne cliquée devient un filtre eq (#734). Premier clic = filtre, second clic sur la même ligne = retrait, clic sur une autre ligne = remplacement. Une colonne de sélection est ajoutée en tête du tableau : un bouton par ligne, atteignable au clavier, dont l'état est annoncé (aria-pressed) — la couleur de la ligne sélectionnée n'est jamais la seule marque. Avec context="id" (recommandé), le tableau s'enregistre comme filtre du dsfr-data-context : diffusion à toutes ses sources cibles au dialecte de chacune, tag dans dsfr-data-context-tags, URL portée par le contexte. Sans context, la clause part directement à source (whereKey list-select-ID) — sans tag ni URL, et le tableau se filtre lui-même (seule la ligne cliquée reste, jusqu'au second clic). |
context | String | Identifiant du dsfr-data-context auquel s'enregistrer en refine-on-click (#734, ADR-104). Le contexte peut être déclaré après le tableau dans la page. Vide = commande directe à source (chemin dégradé). |
label | String | Libellé du tag de contexte en refine-on-click (#734). Vide = le libellé de la colonne filtrée, à défaut le nom du champ. |
<dsfr-data-context id="ctx" sources="src"></dsfr-data-context> <dsfr-data-context-tags for="ctx"></dsfr-data-context-tags> <dsfr-data-list source="src" columns="departement:Département, total:Total" refine-on-click="departement" context="ctx" label="Département"> </dsfr-data-list>
Premier clic = filtre, second clic sur la même ligne = retrait, clic sur une autre ligne =
remplacement. Avec context (recommandé), le tableau s'enregistre comme filtre du
dsfr-data-context : diffusion à toutes ses sources cibles au
dialecte de chacune, tag supprimable, URL portée par le contexte, et label donne son
libellé au tag. Sans context, la clause part directement à source — sans
tag ni URL, et le tableau se filtre lui-même, ne gardant que la ligne cliquée jusqu'au second clic.
Affiche uniquement les données dans un tableau sans fonctionnalites supplementaires.
<dsfr-data-list source="sites" columns="nom:Nom du site, ministere:Ministere, score_rgaa:RGAA (%)"> </dsfr-data-list>
Ajoute un champ de recherche pour filtrer les données en temps reel.
<dsfr-data-list source="sites" columns="nom:Nom du site, ministere:Ministere, score_rgaa:RGAA (%)" search> </dsfr-data-list>
Ajoute des menus deroulants pour filtrer par colonne spécifique.
<dsfr-data-list source="sites" columns="nom:Nom du site, ministere:Ministere, statut:Statut, score_rgaa:RGAA (%)" filters="ministere,statut"> </dsfr-data-list>
Definit un tri par défaut et permet de trier en cliquant sur les en-tetes.
<dsfr-data-list source="sites" columns="nom:Nom du site, ministere:Ministere, score_rgaa:RGAA (%)" sort="score_rgaa:desc"> </dsfr-data-list>
Divise les données en pages pour une meilleure lisibilite.
<dsfr-data-list source="sites" columns="nom:Nom du site, ministere:Ministere, score_rgaa:RGAA (%)" pagination="5"> </dsfr-data-list>
Ajoute un bouton pour exporter les données au format CSV.
<dsfr-data-list source="sites" columns="nom:Nom du site, ministere:Ministere, score_rgaa:RGAA (%)" export="csv"> </dsfr-data-list>
Combine toutes les fonctionnalites : recherche, filtres, tri, pagination et export.
<dsfr-data-list source="sites" columns="nom:Nom du site, ministere:Ministere, score_rgaa:RGAA (%), score_dsfr:DSFR (%), statut:Statut, certificat_valide:Certificat" search filters="ministere,statut" sort="score_rgaa:desc" pagination="10" export="csv"> </dsfr-data-list>
Quand la source utilise paginate, dsfr-data-list détecté automatiquement
la pagination serveur. Chaque changement de page declenche un nouvel appel API. Le nombre total
d'enregistrements et de pages vient des metadonnees de l'API.
<dsfr-data-source id="rappels" api-type="opendatasoft" dataset-id="rappelconso-v2-gtin-trie" base-url="https://data.economie.gouv.fr" server-side paginate page-size="20"> </dsfr-data-source> <dsfr-data-list source="rappels" columns="modeles_ou_references:Produit, categorie_produit:Catégorie, marque_produit:Marque" search sort="date_publication:desc" pagination="20"> </dsfr-data-list>
Comportement : en mode pagination serveur, le total affiche (ex: "34 874 resultats")
vient de meta.total. La recherche, le tri et les filtres ne s'appliquent qu'aux données
de la page courante. Pour filtrer sur tout le dataset, utilisez les paramètres API via params.
Performance : Pour les grands ensembles de données, utilisez toujours la pagination
pour eviter de surcharger le navigateur. Avec paginate sur dsfr-data-source,
la pagination est geree cote serveur et seule la page courante est en memoire.
Accessibilité : Le composant inclut automatiquement les attributs ARIA necessaires pour les lecteurs d'écran.