Custom widgets conformes DSFR pour Grist, permettant de visualiser vos données avec des graphiques, KPI, cartes et tableaux conformes au Design System de l'État français.
Les widgets sont déployés automatiquement sur GitHub Pages à chaque push sur main.
Utilisez ces URLs dans Grist (Menu widget → Custom → URL) :
| Widget | URL | Description |
|---|---|---|
| Graphique / Carte / KPI | https://bmatge.github.io/dsfr-data/chart/ |
Widget polyvalent : graphiques, cartes France, KPI. Choisissez le type dans les options. |
| Tableau | https://bmatge.github.io/dsfr-data/datalist/ |
Tableau avec recherche, tri, pagination, export CSV |
Ce widget unique supporte 10 types de visualisations :
Graphiques :
- bar : Barres verticales
- line : Lignes
- pie : Camembert
- radar : Radar
- scatter : Nuage de points
- gauge : Jauge
- bar-line : Barres + Lignes
Cartes France :
- map : Départements
- map-reg : Régions
KPI :
- kpi : Indicateur clé de performance
Dans les options du widget Grist, mappez les colonnes dont vous avez besoin selon votre type de visualisation :
| Colonne | Type | Utilisation | Obligatoire ? |
|---|---|---|---|
| Label | Texte | Étiquettes (graphiques) ou Nom (cartes) | Optionnel |
| Value | Numérique | Valeur principale | Requis |
| Value2 | Numérique | Série secondaire (graphiques multi-séries) | Optionnel |
| Code | Texte | Code géo INSEE (cartes uniquement) | Pour maps uniquement |
Exemples :
- Graphique à barres : Mapper Label + Value
- Carte départements : Mapper Code + Value (+ Label optionnel)
- KPI : Mapper uniquement Value
Cliquez sur l'icône ⚙️ dans Grist pour configurer :
Options communes :
- Type de visualisation : choisir parmi les 10 types disponibles
- Palette de couleurs : Bleu France, catégorique, séquentielle, divergente, neutre
- Unité (tooltip) : ex: EUR, %, habitants
Options pour graphiques (bar, line uniquement) :
- Barres horizontales
- Barres empilées
Options pour KPI :
- Agrégation : moyenne, somme, comptage, min, max
- Format : nombre, pourcentage, euro, décimal
- Libellé KPI : texte affiché sous la valeur
- Icône KPI : classe Remix Icon (ex: ri-line-chart-line)
- Couleur KPI : bleu, vert, orange, rouge, ou automatique (seuils)
- Aucun mapping requis - affiche automatiquement toutes les colonnes
- Options : pagination (10/20/50/tout), barre de recherche, export CSV
npm run build # Build la lib principale (génère le UMD)
npm run build:shared # Build le package sharednpm run dev --workspace=@dsfr-data/app-grist-widgetsLe serveur démarre sur http://localhost:5173/ (ou 5174 si le port est occupé).
- Test local sans Grist : http://localhost:5173/test-local.html
- Widget Chart : http://localhost:5173/chart/index.html
- Widget Datalist : http://localhost:5173/datalist/index.html
- Créez une table avec des données dans Grist
- Ajoutez un widget Custom
- Dans "Custom URL", utilisez :
http://localhost:5173/chart/index.html - Mappez les colonnes nécessaires selon votre type de visualisation
- Testez le panneau d'options (⚙️) pour changer le type de visualisation
npm run build --workspace=@dsfr-data/app-grist-widgetsGénère le dossier dist/ avec :
chart/: Widget multi-types (graphiques + cartes + KPI)datalist/: Widget tableauassets/: JavaScript et CSS bundléslib/dsfr-data.umd.js: build UMD de la bibliothèquemanifest.json: manifeste Grist
Le workflow .github/workflows/deploy-grist-widgets.yml déploie automatiquement sur GitHub Pages lors :
- De push sur
mainmodifiantapps/grist-widgets/**,src/**oupackages/shared/** - De déclenchement manuel (workflow_dispatch)
Le déploiement :
- Build le package
@dsfr-data/shared - Build la lib principale (génère
dist/dsfr-data.umd.js) - Build les grist-widgets
- Déploie
apps/grist-widgets/dist/sur GitHub Pages
apps/grist-widgets/
├── chart/index.html # Widget multi-types (graphiques + cartes + KPI)
├── datalist/index.html # Widget tableau
├── src/
│ ├── chart.ts # Entry point widget multi-types
│ ├── datalist.ts # Entry point widget tableau
│ ├── shared/
│ │ ├── grist-bridge.ts # Pont avec l'API Grist
│ │ └── grist-options-panel.ts # Panneau d'options partagé
│ ├── styles/
│ │ └── grist-widgets.css # Styles communs (zoom 80%)
│ └── types/
│ └── grist-plugin-api.d.ts # Types TypeScript
├── test-local.html # Page de test sans Grist
├── manifest.json # Manifeste Grist (déployé sur Pages)
└── vite.config.ts # Config Vite
Les widgets utilisent l'API Plugin Grist :
import grist from 'grist-plugin-api';
// Écouter les changements de données
grist.ready();
grist.onRecords((records) => {
// Dispatcher les données vers les composants dsfr-data-*
DsfrData.dispatchDataLoaded('grist', records);
});
// Afficher le panneau d'options
grist.onEditOptions(() => {
// Afficher le panneau de configuration
});- @gouvfr/dsfr : Design System de l'État Français
- @gouvfr/dsfr-chart : Composants Vue de graphiques DSFR
- dsfr-data : Web Components Lit (build UMD)
- grist-plugin-api : API Plugin Grist
Voir LICENSE à la racine du projet.