Props sémantiques

Les props sémantiques (ou propriétés sémantiques) sont des paramètres nommés de façon intentionnelle et fonctionnelle plutôt que visuelle ou technique utilisés pour décrire les variantes d’un composant dans un Design System (en Figma, code ou autre outil).

Elles permettent de séparer le quoi du comment :

  • Sémantique = ce que l’élément signifie ou fait (ex. : state="disabled", intent="danger")
  • Visuel/technique = à quoi il ressemble (ex. : color="#ff0000", opacity=0.4)

Exemple concret : un bouton

Props non sémantiques (à éviter) :

color = red  
size = 16px  
opacity = 0.4

Ces valeurs décrivent l’apparence, pas l’intention. Elles deviennent obsolètes si le design change.

Props sémantiques (recommandées) :

state = disabled  
intent = destructive
size = large

→ Ces noms expriment le rôle, l’état ou le comportement attendu, indépendamment du style visuel.


🎯 Pourquoi utiliser des props sémantiques ?

AvantageExplication
MaintenabilitéSi le rouge devient orange pour les actions destructrices, seul le token de design change — pas la prop intent="destructive".
Clarté pour les équipesUn développeur, un designer ou un chef de produit comprend immédiatement ce que signifie state="loading".
Alignement design/développementLes mêmes termes sont utilisés en Figma (variantes) et en code (React props, CSS classes).
Accessibilité & logique métierLe state="disabled" implique à la fois un style visuel et un comportement (non cliquable, non focusable).

Dans Figma : comment les appliquer ?

Lorsque vous créez des variantes de composants :

  1. Nommez vos propriétés avec des termes fonctionnels :
    • Statedefault / hover / active / focus / disabled / loading
    • Intentprimary / secondary / success / warning / danger
    • Sizesmall / medium / large
    • Typesubmit / reset / link
  2. Évitez les noms liés à la couleur, à la taille exacte ou à la police :
    • BlueButton, BigText, RedAlert
    • Button variant="primary", Text size="heading", Alert severity="error"

Astuce Figma : Utilisez la casse camelCase ou kebab-case dans les noms de variantes pour faciliter l’export vers le code (ex. : isFullWidth).

Exemples transverses

ContexteProp sémantiqueValeurs possibles
Formulairestatusidle / success / error / warning
Notificationseverityinfo / success / warning / error
Icônedecorativetrue / false (pour l’accessibilité)
CarteisSelectabletrue / false

Lien avec les tokens de design

Les props sémantiques pilotent les tokens :

  • intent="danger" → utilise le token color.intent.danger
  • size="large" → utilise le token spacing.scale.lg

Cela crée une chaîne sémantique cohérente : intention → token → valeur visuelle.

Les contenus de définition restent publics. Les ressources (outils, grilles, supports) liées à cette fiche sont disponibles dans l’espace membre.