@starterlib/tokens
v0.8.0
Published
Jetons de design du socle frontal starter : couleurs semantiques, echelles, contraste WCAG. Aucune dependance de rendu, Angular compris.
Maintainers
Readme
@starterlib/tokens
Jetons de design du socle frontal starter : couleurs semantiques, echelles, themes clair et sombre, et la feuille CSS engendree depuis le TypeScript.
Aucune dependance, Angular compris. Le paquet reste donc consommable par un courriel, un document PDF ou un outil de design, et le contraste se teste sans monter le moindre composant.
Installation
pnpm add @starterlib/tokensFeuille CSS
@import '@starterlib/tokens/styles/starter-tokens.css';Elle pose les variables --st-* sur :root, le theme sombre sous
[data-theme='sombre'] et sous prefers-color-scheme: dark, et reduit les
durees sous prefers-reduced-motion. color-scheme suit le theme effectif :
les controles natifs, les barres de defilement et le remplissage automatique
restent dans le bon theme meme quand l'utilisateur force un theme contraire a
son systeme.
Elle obeit aussi a la PERSONNE, pas seulement au theme :
prefers-contrast: more— le filet decoratif devient le filet fort, et le texte discret redevient du texte, par alias du theme courant ;@media print— les jetons clairs, quel que soit le theme a l'ecran ;html { scroll-padding-block-start: var(--st-hauteur-entete, 0px) }— la hauteur quest-app-shellmesure sur son en-tete collant, pour qu'un arret de tabulation ne remonte jamais dessous (WCAG 2.4.11). Sans coquille, zero.
Points de rupture
Un partiel Sass, engendre comme la feuille, et la meme echelle en TypeScript :
@use '@starterlib/tokens/styles/ruptures' as rupture;
.grille {
@include rupture.depuis('lg') {
grid-template-columns: 1fr 3fr;
}
}
// aussi : rupture.$rupture-lg (64rem), rupture.$ruptures (la carte)import { RUPTURES } from '@starterlib/tokens';
inject(BreakpointObserver).observe(RUPTURES.lg.requete); // '(min-width: 64rem)'
RUPTURES.lg.px; // 1024En rem, mobile d'abord : une requete de media en rem suit la taille de police
choisie par la personne dans son navigateur, la ou des px l'ignoreraient. Une
valeur ecrite a la main la ou l'echelle existe est un defaut, et le socle se le
garde (pnpm test sur ui).
Le theme se force par attribut, et l'attribut l'emporte dans les deux sens :
<html data-theme="sombre"></html>API TypeScript
import { themes, contraste, echelles } from '@starterlib/tokens';themes.clairetthemes.sombre: couleurs semantiques.echelles: espacement, typographie, rayons, ombres, durees, plans.RUPTURES: les points de rupture en px, en rem et en requete de media.contraste(a, b): rapport WCAG, employe par les tests du depot.
Niveau 3 — reglages de composant
Les quelques valeurs qu'une application peut poser sans forker une feuille de
style. Elles sont listees en commentaire en tete de la feuille engendree, et dans
jetonsDeComposant cote TypeScript.
/* Toute l'application */
:root {
--st-commande-rayon: var(--st-rayon-pleine);
}
/* Ou une zone seulement */
.tableau-dense {
--st-tableau-cellule-bloc: var(--st-espacement-1);
}| Reglage | Defaut | Pour |
| ----------------------------- | -------------------------- | ------------------------------------------ |
| --st-commande-hauteur | --st-cible-tactile-min | hauteur minimale des boutons et des champs |
| --st-commande-rayon | --st-rayon-md | identite de marque |
| --st-surface-rayon | --st-rayon-md | carte, dialogue, menu, popover |
| --st-tableau-cellule-bloc | --st-espacement-3 | densite verticale d'un tableau |
| --st-tableau-cellule-ligne | --st-espacement-3 | densite horizontale |
| --st-tableau-largeur-case | 3rem | colonne des cases a cocher |
| --st-calendrier-jour-taille | --st-cible-tactile-min | calendrier dense |
| --st-anim-chargement | propre a chaque indicateur | rythme d'un indicateur d'activite |
| --st-anim-respiration | 1600ms | rythme sous mouvement reduit |
⚠️ Le socle ne les DECLARE jamais : il les lit au point d'usage, avec un repli. Une declaration sur l'hote d'un composant l'emporterait sur la valeur heritee, et votre reglage n'aurait aucun effet — sans le moindre message. Une garde du depot le verifie, et le banc en vrai navigateur verifie qu'un reglage pose a la racine atteint bien les composants.
⚠️ Aucune couleur n'est ouverte ici. Une couleur se change au niveau semantique : deux sources de verite pour le meme bleu, et les paires de contraste verifiees ne garantissent plus rien.
⚠️ Un reglage ne descend pas sous un plancher d'accessibilite. Un jour de calendrier reste au-dessus de la cible minimale, quoi qu'on pose.
Garde de non-derive
Le CSS est engendre, jamais ecrit a la main — la feuille comme le partiel
des ruptures. pnpm tokens:css:check echoue si un fichier livre ne correspond
plus aux jetons TypeScript — meme principe que le controle de contrat cote
backend.
Accessibilite
25 paires semantiques sont verifiees en AA dans les deux themes par les tests du paquet. Toute exemption porte une raison ecrite et reste perceptible.
