Composants

25 composants, chacun avec une démonstration interactive, ses états et ses règles d'accessibilité. Tous consomment uniquement des tokens sémantiques et fonctionnent dans les deux thèmes.

Button

Déclenche une action. Une seule action principale par zone ; les autres sont secondaires ou discrètes.

Variantes primary, secondary, ghost, dangerÉtats repos, survol, focus, pressé, chargement, désactivé

Hauteur minimale 36 px, 44 px recommandée sur mobile. L'état de chargement pose aria-busy et garde un libellé lisible. Libellé = verbe d'action. États : repos, survol, focus, pressé, chargement, désactivé.

Link

Mène vers une autre page ou une autre section. Si l'élément déclenche une action sur place, c'est un bouton.

Le libellé doit avoir du sens hors contexte : pas de « cliquez ici ». Les liens externes l'annoncent. États : repos, survol, focus, visité.

Text field

Saisie courte. Toujours accompagné d'un libellé visible ; l'aide et l'erreur s'affichent sous le champ.

Visible par toute l'équipe.

Indiquez une adresse valide, par exemple nom@domaine.fr.

Le code postal contient 5 chiffres.

Astuce saisissez un email incorrect puis quittez le champ

Libellé relié par for, aide et erreur reliées par aria-describedby, aria-invalid en cas d'erreur. Le placeholder n'est jamais un libellé. États : repos, focus, erreur, désactivé.

Textarea

Saisie longue, redimensionnable verticalement.

500 caractères maximum.

Libellé visible relié par for, aide et limite annoncées par aria-describedby, redimensionnable verticalement. États : repos, focus, erreur, désactivé.

Select

Choix unique dans une liste de plus de cinq options. En dessous, préférer des boutons radio.

Élément natif select : clavier, lecteurs d'écran et mobile fonctionnent sans code supplémentaire. États : repos, focus, désactivé.

Checkbox

Choix multiples indépendants, ou acceptation d'une condition.

Élément natif ; le libellé entier est cliquable ; Espace coche et décoche. États : non coché, coché, focus, désactivé.

Radio button

Choix unique parmi deux à cinq options visibles en même temps.

Niveau d'autonomie

Groupe dans un fieldset avec legend. Les flèches déplacent la sélection dans le groupe. États : sélectionné, non sélectionné, focus, désactivé.

Switch

Active ou désactive un réglage avec effet immédiat, sans bouton de validation.

role="switch" : l'état activé ou désactivé est annoncé ; Espace bascule ; l'effet est immédiat, sans bouton de validation. États : désactivé, activé, focus.

Slider

Règle une valeur continue dans un intervalle ; l'effet se voit pendant qu'on fait glisser la poignée.

input type="range" natif, nommé par son label ; ← → ajustent la valeur, la poignée se saisit à la souris comme au doigt. États : repos, survol, saisi, focus.

Segmented control

Bascule entre deux à cinq vues ou filtres d'un même contenu.

Groupe nommé par aria-label, chaque option porte aria-pressed ; navigation par Tab. États : sélectionné, non sélectionné, survol, focus.

Badge

Indique un statut. La couleur est toujours doublée d'un libellé.

BrouillonEn revuePubliéÀ revoirBloqué

Non interactif ; la couleur est toujours doublée par un libellé et une pastille. Variantes : neutre, info, succès, avertissement, erreur.

Tag

Catégorise un contenu. Non interactif par défaut ; cliquable seulement s'il filtre une liste.

Design SystemIA GénérativeGouvernanceData

Non interactif par défaut ; s'il filtre une liste, il devient un bouton avec aria-pressed. États : repos, accent.

Alert

Message persistant lié au contexte de la page. Pour une confirmation éphémère, utiliser un toast.

Nouvelle version disponible

La version 2.0 introduit le thème sombre par défaut.

Cas d'usage validé

Il apparaît désormais dans le registre.

Revue périodique à prévoir

Ce cas d'usage n'a pas été revu depuis 12 mois.

role="alert" réservé aux erreurs urgentes, role="status" ou note sinon ; l'icône est décorative (aria-hidden). Variantes : info, succès, avertissement, erreur.

Toast

Confirmation brève d'une action, qui disparaît seule après cinq secondes. Jamais pour une erreur bloquante.

Région role="status" avec aria-live="polite" : le message est lu sans voler le focus. Bouton de fermeture accessible. Variantes : succès, erreur.

Tooltip

Précise un élément au survol ou au focus. Ne contient jamais d'information indispensable.

Exporte au format JSON W3C

role="tooltip" relié par aria-describedby ; apparaît au survol et au focus ; Échap la masque ; jamais d'information indispensable. États : masquée, visible.

Modal

Interrompt le parcours pour une décision. À réserver aux confirmations importantes et aux tâches courtes.

Élément natif dialog : focus piégé, fermeture par Échap, retour du focus sur le bouton d'origine. Le bouton destructif dit ce qu'il détruit. États : fermée, ouverte.

Tabs

Organise des contenus de même niveau sans changer de page.

Utilisez les flèches gauche et droite pour changer d'onglet.

tablist, tab, tabpanel ; flèches gauche et droite, Début et Fin ; un seul onglet dans l'ordre de tabulation. États : actif, inactif, survol, focus.

Accordion

Replie des contenus secondaires, par exemple une FAQ.

Qui peut contribuer au Design System ?

Toutes les équipes, via le processus de contribution décrit dans la gouvernance.

Faut-il déclarer un usage de l'IA ?

Oui, chaque usage est inscrit au registre avec son niveau de risque.

Éléments natifs details et summary : Entrée et Espace ouvrent et ferment, l'état est annoncé. États : fermé, ouvert, focus.

Breadcrumb

Situe la page dans l'arborescence pour les sites de plus de deux niveaux.

nav nommée, liste ordonnée, dernier élément marqué aria-current="page" et non cliquable. États : lien, survol, page courante.

Pagination

Découpe une longue liste en pages numérotées.

nav nommée ; page courante en aria-current="page" ; flèches avec aria-label explicite. États : repos, survol, focus, courante.

Avatar

Représente une personne. Photo si disponible, initiales sinon.

Samy JemaïCMLDABKTMR+1

Photo avec texte alternatif ; initiales en role="img" avec le nom complet ; un groupe annonce le nombre de personnes. Variantes : 32, 40, 56 px, groupe.

Progress bar

Montre l'avancement d'une tâche dont on connaît la durée ou le volume.

Évaluation en cours64 %

role="progressbar" avec aria-valuenow, aria-valuemin, aria-valuemax et un libellé relié. États : en cours, terminé.

Skeleton

Réserve l'espace pendant le chargement pour éviter les sauts de mise en page.

Le conteneur porte aria-busy="true" ; aucun texte factice n'est lu ; l'animation s'arrête si l'utilisateur réduit les animations. États : chargement, contenu chargé.

Card

Regroupe des informations sur un même objet. Si toute la carte est cliquable, un seul lien la couvre.

Cas d'usage

Recherche documentaire (RAG)

Réponses sourcées à partir des documents internes.

Vedette

Bordure animée

Réservée à un seul élément mis en avant par page.

Un seul lien couvre la carte ; le titre est un vrai titre ; le focus est visible sur toute la carte. Variantes : statique, cliquable, mise en avant.

Table

Données à comparer ligne à ligne. Les chiffres sont alignés à droite et en chiffres tabulaires.

Registre des cas d'usage IA, extrait
Cas d'usagePropriétaireRisqueRevue
Assistant de rédactionContenuFaible03/2026
Copilote conseillerRelation clientLimité06/2026
SolvabilitéCréditÉlevé09/2026
Exemple fictif registre de démonstration

caption, en-têtes en th scope, chiffres alignés à droite ; défilement horizontal limité au tableau. États : repos, survol de ligne.