Système de design : de la décision au composant
Un système de design est un langage partagé entre produit, design, contenu et code. Il accélère les décisions répétées et rend les exceptions visibles. Ce n’est ni un catalogue de captures d’écran ni une collection de composants isolés.
Les quatre niveaux
1. Principes
Les principes donnent un filtre aux décisions : clarté avant décoration, progression visible, une action principale par zone, accessibilité dès la structure et retour explicite après une action.
2. Tokens
Un token nomme une décision réutilisable : couleur d’accent, surface, texte, espace, rayon, ombre, hauteur de contrôle ou durée de mouvement.
:root {
--sl-accent: #00d1ff;
--sl-text-primary: #ffffff;
--sl-text-secondary: rgba(255, 255, 255, 0.72);
--sl-space-4: 16px;
--sl-radius: 12px;
--sl-control-height: 44px;
}
Un nom sémantique survit mieux à un changement visuel qu’un nom comme
--blue-3. Les tokens ne doivent pas devenir une couche d’indirection
illisible : chacun doit avoir une intention et un lieu d’usage documentés.
3. Primitives
Une primitive porte un contrat bas niveau : Button, Input, Badge, Card,
ProgressBar, Alert, Modal ou Tabs. Elle doit utiliser le bon HTML,
exposer les états et accepter seulement les propriétés nécessaires.
4. Patterns
Un pattern assemble des primitives pour un problème récurrent : formulaire de connexion, liste filtrable, session de révision, résumé d’erreurs ou parcours de reprise. Le pattern documente la décision produit ; il ne doit pas masquer des règles différentes derrière le même nom.
Spécifier un composant
Pour chaque composant, écris une fiche courte :
| Question | Exemple pour ProgressBar |
|---|---|
| Quel problème ? | Montrer l’avancement et le reste à faire. |
| Quel rôle ? | Une progression avec valeur et maximum exposés. |
| Quelles variantes ? | Indéterminée ou déterminée, selon le contrat. |
| Quels états ? | Repos, mise à jour, terminé, erreur si le produit le prévoit. |
| Quel contenu ? | « Carte 3 sur 10 », pas une barre sans contexte. |
| Quelles contraintes ? | Lisible au zoom, au clavier et avec un texte long. |
| Comment tester ? | Valeur 0, valeur maximale, changement dynamique et lecteur d’écran. |
Une variante ne doit exister que si elle correspond à une intention, un niveau
de priorité ou un état vérifiable. Button color="purple" décrit une
apparence ; Button variant="primary" décrit une responsabilité.
Les états ne sont pas optionnels
Un composant interactif doit répondre aux questions suivantes :
- comment se voit le repos ?
- comment se voit et se décrit le focus ?
- que se passe-t-il pendant un envoi ou une attente ?
- quel changement confirme le succès ?
- comment l’erreur explique-t-elle la récupération ?
- que voit une personne quand il n’y a aucun résultat ?
- pourquoi l’action est-elle désactivée, et que peut-on faire à la place ?
Le composant peut fournir la mécanique et le style ; le contenu du message reste lié au contexte de la page. Une alerte générique ne doit pas remplacer un message d’erreur qui nomme le champ et la correction attendue.