@starterlib/tokens 0.10.14 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +126 -4
- package/fesm2022/starterlib-tokens-moteur.mjs +659 -58
- package/fesm2022/starterlib-tokens-moteur.mjs.map +1 -1
- package/fesm2022/starterlib-tokens.mjs +1 -0
- package/fesm2022/starterlib-tokens.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/_jetons.scss +12 -0
- package/styles/_typographie.scss +5 -0
- package/styles/exemple-blanc.tokens.json +1941 -0
- package/styles/polices/LICENSE-source-serif.txt +93 -0
- package/styles/polices/source-serif-4-latin-ext-wght-normal.woff2 +0 -0
- package/styles/polices/source-serif-4-latin-wght-normal.woff2 +0 -0
- package/styles/polices-titres.css +39 -0
- package/styles/starter-tokens-exemple-blanc.css +72 -0
- package/styles/starter-tokens.css +59 -3
- package/styles/starter-tokens.tokens.json +240 -0
- package/types/starterlib-tokens-moteur.d.ts +193 -13
- package/types/starterlib-tokens.d.ts +10 -0
package/README.md
CHANGED
|
@@ -151,6 +151,21 @@ moyenne, calcules sur le fichier livre) : la page ne saute pas quand la police
|
|
|
151
151
|
arrive. Recette complete, budget et correspondance avec les planches :
|
|
152
152
|
[docs/recettes/police.md](../../docs/recettes/police.md).
|
|
153
153
|
|
|
154
|
+
### Police de titre, optionnelle
|
|
155
|
+
|
|
156
|
+
Source Serif 4 (SIL OFL 1.1), dans sa PROPRE feuille : les styles `titre-1` a `titre-4` et
|
|
157
|
+
`affichage` lisent `var(--st-police-titre, var(--st-police-base))`, et seule cette feuille declare le
|
|
158
|
+
jeton. Qui ne la charge pas garde ses titres dans la police de base, sans un octet de plus.
|
|
159
|
+
|
|
160
|
+
```css
|
|
161
|
+
@import '@starterlib/tokens/styles/polices.css';
|
|
162
|
+
@import '@starterlib/tokens/styles/polices-titres.css';
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Meme regime que les autres : `font-display: optional`, repli metrise sur Times New Roman et ses
|
|
166
|
+
clones (`Source Serif 4 Repli`), metriques relues sur le fichier livre par `tools/verifier-police.mjs`.
|
|
167
|
+
Ne pas la PRECHARGER sur un ecran anonyme sous seuil : la recette dit quand et comment.
|
|
168
|
+
|
|
154
169
|
## Styles typographiques
|
|
155
170
|
|
|
156
171
|
Des styles composites (taille, interligne, graisse, approche, chiffres ; jamais de
|
|
@@ -198,6 +213,8 @@ import { themeClair, themeSombre, rapportDeContraste, apca } from '@starterlib/t
|
|
|
198
213
|
|
|
199
214
|
- `themeClair` et `themeSombre` : les couleurs semantiques, chacune une `CouleurHex`
|
|
200
215
|
(`#${string}`) : `primaire: 'bleu'` ne compile pas (lot 158) ; `ombres`, `voile`.
|
|
216
|
+
- `aliasDeRole` : les roles dont la valeur par defaut est celle d'un autre (`erreur` vaut
|
|
217
|
+
`danger`, P08-03) ; la feuille les ecrit `var()` de leur cible, le fichier DTCG en reference.
|
|
201
218
|
- `primitives`, `definitionsDesPrimitives` : les rampes, ENGENDREES en OKLCH
|
|
202
219
|
(`oklchVersHex`, `hexVersOklch`), jamais recopiees.
|
|
203
220
|
- `espacement`, `typographie`, `rayon`, `epaisseur`, `largeur`, `hauteurDeCommande`,
|
|
@@ -233,9 +250,86 @@ import jetons from '@starterlib/tokens/styles/starter-tokens.tokens.json' with {
|
|
|
233
250
|
| `police` | les piles de polices, en listes | `fontFamily` |
|
|
234
251
|
| `duree` | les durees du mouvement, en ms | `duration` |
|
|
235
252
|
|
|
236
|
-
Une couleur s'ecrit en sRGB (`colorSpace`, `components` de 0 a 1) avec son `hex` en repli
|
|
237
|
-
|
|
238
|
-
|
|
253
|
+
Une couleur s'ecrit en sRGB (`colorSpace`, `components` de 0 a 1) avec son `hex` en repli ; un role
|
|
254
|
+
alias (`erreur`, `surErreur`, `erreurDiscret`, `surErreurDiscret`) en reference de sa cible,
|
|
255
|
+
`{couleur.clair.danger}`. Les ombres, les courbes, les cadences et les derogations (contraste
|
|
256
|
+
renforce, impression, mouvement reduit) n'y sont pas : ce sont des regles de la feuille, pas des
|
|
257
|
+
valeurs a recopier ailleurs.
|
|
258
|
+
|
|
259
|
+
## Niveau 2 bis — marque
|
|
260
|
+
|
|
261
|
+
Une application obtient son identite par des **valeurs**, jamais par une feuille ecrite a la main :
|
|
262
|
+
une marque pose, pour chaque theme, la valeur de roles semantiques (`fond`, `surface`,
|
|
263
|
+
`surfaceEnfoncee`, `surfaceSelection`, `bordure`, `bordureForte`, `bordureForteElevee`, `texte`,
|
|
264
|
+
`texteDiscret`, `primaire`, `accent`, les tons de statut, `positif`, `negatif`... : tout nom de
|
|
265
|
+
`JetonsDeCouleur`). Le moteur rejoue sur le theme qui en resulte TOUTES les gardes de la feuille par
|
|
266
|
+
defaut, dans les deux themes : paires de contraste (4,5:1 texte, 3:1 non textuel) au rendu normal et
|
|
267
|
+
sous contraste renforce, focus a deux voies sur chaque surface, ecarts de surface perceptibles,
|
|
268
|
+
jetons exemptes perceptibles. Conforme, il engendre `starter-tokens-<nom>.css`, a charger **apres**
|
|
269
|
+
`starter-tokens.css` ; sinon il refuse, chaque paire fautive nommee.
|
|
270
|
+
|
|
271
|
+
```json
|
|
272
|
+
{
|
|
273
|
+
"nom": "ma-marque",
|
|
274
|
+
"clair": {
|
|
275
|
+
"fond": "#ffffff",
|
|
276
|
+
"surface": "#ffffff",
|
|
277
|
+
"bordure": "#e1e6ec",
|
|
278
|
+
"bordureForte": "#7b8794"
|
|
279
|
+
},
|
|
280
|
+
"sombre": { "bordureForte": "#5d6982", "bordureForteElevee": "#7e848b" },
|
|
281
|
+
"exemptions": [
|
|
282
|
+
{
|
|
283
|
+
"ecart": ["surface", "fond"],
|
|
284
|
+
"theme": "clair",
|
|
285
|
+
"raison": "Fond = surface = blanc : une carte posee sur le fond se detache par son filet."
|
|
286
|
+
}
|
|
287
|
+
]
|
|
288
|
+
}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
starter-web jetons --marque marque.json # ecrit dist/<spa>/browser/starter-tokens-ma-marque.css
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
`starter-web verify` (etape `jetons`) rejoue la marque a chaque verification tant qu'un fichier
|
|
296
|
+
`marque.json`, `marque.ts` ou `marque.mjs` est a la racine de la SPA. En TypeScript :
|
|
297
|
+
`defautsDeLaMarque(valeurs)`, `feuilleDeMarque(valeurs)`, `jetonsDtcgDeMarque(valeurs)` et
|
|
298
|
+
`themeDeMarque(valeurs, theme)` dans `@starterlib/tokens/moteur`.
|
|
299
|
+
|
|
300
|
+
Ce qu'une marque **peut** changer : la valeur des roles, et elle seule. Ce qu'elle **ne peut pas**
|
|
301
|
+
changer : la structure (les noms de jetons), les echelles, les rayons et les hauteurs, qui restent des
|
|
302
|
+
reglages de niveau 3 ou des decisions du socle.
|
|
303
|
+
|
|
304
|
+
- **`bordureForteElevee`**, le contour d'un champ pose sur une surface elevee (dialogue, menu,
|
|
305
|
+
popover, conteneur haut), vaut `bordureForte` s'il n'est pas pose ; il est exige a 3:1 sur la
|
|
306
|
+
surface elevee, le conteneur haut et la surface. La feuille de marque fait lire ce role par
|
|
307
|
+
`st-dialog-container`, `st-dialog-content`, `st-menu` et `st-popover` ; sans marque, rien ne change
|
|
308
|
+
(la feuille par defaut ne le declare pas).
|
|
309
|
+
- **`erreur`** (P08-03), avec `surErreur`, `erreurDiscret` et `surErreurDiscret` : la couleur d'une
|
|
310
|
+
faute ou d'un echec (champ invalide, recapitulatif, refus, envoi echoue), distincte de `danger`
|
|
311
|
+
(destruction, urgence). Sans valeur, ils valent ceux de `danger` (dans la marque aussi : une
|
|
312
|
+
marque qui pose `danger` peint l'erreur de son danger) ; poses, ils sont declares et tenus aux
|
|
313
|
+
memes paires que le danger, AA dans les deux themes. La marque d'exemple pose l'erreur a
|
|
314
|
+
l'encre du texte sur papier gris : une faute sans rouge. Recensement des usages et migration :
|
|
315
|
+
[`docs/recettes/erreur-et-danger.md`](../../docs/recettes/erreur-et-danger.md).
|
|
316
|
+
- **`essai`** (P08-04), avec `surEssai`, `essaiDiscret` et `surEssaiDiscret` : l'environnement
|
|
317
|
+
d'essai (donnees fictives), sur la famille violette (`primitives.violet`, teinte 294, chroma
|
|
318
|
+
0,11 : pas 600 en clair, 300 en sombre, papier 50 et 900). Une marque le pose a sa valeur ; ses
|
|
319
|
+
paires sont celles d'un statut. Aucun composant ne le prend sans demande (recette
|
|
320
|
+
[`docs/recettes/environnement-d-essai.md`](../../docs/recettes/environnement-d-essai.md)).
|
|
321
|
+
- **Exemption** : un ecart de surface sous son seuil (la liste `ecartsDeMarque`, qui ajoute la
|
|
322
|
+
surface sur le fond aux ecarts du socle) s'assume par une raison ecrite (40 caracteres au moins),
|
|
323
|
+
pour un theme ou les deux ; le filet (`bordure`) doit alors etre perceptible sur l'une des deux
|
|
324
|
+
surfaces au moins.
|
|
325
|
+
- **Paires** : une marque peut en exiger de plus (`paires`) et en exclure (`pairesExclues`, raison
|
|
326
|
+
ecrite), a condition que l'exclusion echoue vraiment dans un theme.
|
|
327
|
+
- **Contraste renforce, contraste force, impression** : la feuille de marque reporte les alias du
|
|
328
|
+
socle resolus dans la marque, les couleurs systeme des roles poses, et les derogations d'impression
|
|
329
|
+
(une encre ne fait que foncer).
|
|
330
|
+
|
|
331
|
+
Exemple du socle : `styles/starter-tokens-exemple-blanc.css` (et `exemple-blanc.tokens.json`), fond
|
|
332
|
+
blanc et gris froids, erreur a l'encre du texte, que le banc applique par son reglage « Marque ».
|
|
239
333
|
|
|
240
334
|
## Niveau 3 — reglages de composant
|
|
241
335
|
|
|
@@ -264,7 +358,7 @@ ecarte.
|
|
|
264
358
|
| `--st-commande-hauteur` | `--st-hauteur-commande-defaut` | Hauteur MINIMALE commune des boutons, champs et listes deroulantes. Une seule valeur pour tous : une ligne ou le champ fait 44 px et le bouton 40 se voit tout de suite. Le repli suit la densite (44 / 36 / 32, 44 au doigt). Un reglage plus court ne descend jamais sous le plancher des commandes (D4) : 32 px au pointeur fin, 44 au doigt. |
|
|
265
359
|
| `--st-commande-rayon` | `--st-rayon-md` | Rayon des commandes. C'est le reglage d'identite le plus demande. |
|
|
266
360
|
| `--st-surface-rayon` | `--st-rayon-md` | Rayon des surfaces flottantes qui portent du contenu : menu, popover, dialogue, message ; et de la carte de choix (st-choice), posee a filet sur la meme mesure (brief 18). |
|
|
267
|
-
| `--st-carte-rayon` | `--st-rayon-lg` | Rayon de la carte, la surface la plus chartee : 12 px, distinct des surfaces flottantes.
|
|
361
|
+
| `--st-carte-rayon` | `--st-rayon-lg` | Rayon de la carte, la surface la plus chartee : 12 px, distinct des surfaces flottantes ; celui de la carte du gabarit pleine page aussi (0.11.1). |
|
|
268
362
|
| `--st-tableau-cellule-bloc` | `--st-espacement-0` | Respiration verticale d'une cellule ; aucune par defaut : la hauteur de ligne du mode fait le rythme (D29). |
|
|
269
363
|
| `--st-tableau-cellule-ligne` | `calc(var(--st-densite-cellule-ligne) + var(--st-espacement-1))` | Respiration horizontale d'une cellule ; le repli suit la densite (16 / 16 / 12 px). |
|
|
270
364
|
| `--st-tableau-largeur-case` | `--st-espacement-12` | Largeur de la colonne des cases a cocher ; la colonne figee suivante se decale d autant. |
|
|
@@ -291,6 +385,34 @@ verifiees ne garantissent plus rien.
|
|
|
291
385
|
⚠️ **Un reglage ne descend pas sous un plancher d'accessibilite.** Un jour de
|
|
292
386
|
calendrier reste au-dessus de la cible minimale, quoi qu'on pose.
|
|
293
387
|
|
|
388
|
+
### Reglage d'affichage : `--st-prefixe-de-ton`
|
|
389
|
+
|
|
390
|
+
`masque` (defaut) ou `visible` (P08-03). Le prefixe qui dit le ton d'un message EN MOTS
|
|
391
|
+
(« Erreur : », « Avertissement : ») est toujours lu par les lecteurs d'ecran ; sous `visible`, il
|
|
392
|
+
s'affiche aussi devant le message d'un champ (`st-inline-message`), d'une banniere (`st-banner`)
|
|
393
|
+
et devant chaque ligne du recapitulatif d'erreurs (`st-error-summary`, a la place de la puce) :
|
|
394
|
+
une faute se lit au mot, sans la couleur.
|
|
395
|
+
|
|
396
|
+
```css
|
|
397
|
+
/* Toute l'application */
|
|
398
|
+
:root {
|
|
399
|
+
--st-prefixe-de-ton: visible;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/* Ou le remettre a masque sur une zone (une alerte critique qui porte son propre mot) */
|
|
403
|
+
.alerte-critique {
|
|
404
|
+
--st-prefixe-de-ton: masque;
|
|
405
|
+
}
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
Comme les reglages ci-dessus, le socle ne le declare jamais. Il ne le lit pas par `var()` : des
|
|
409
|
+
requetes de style, `@container style(--st-prefixe-de-ton: visible)` (feuille des jetons pour la
|
|
410
|
+
classe `.st-prefixe-de-ton`, feuille du recapitulatif pour ses lignes), rendent le prefixe visible la
|
|
411
|
+
ou le reglage s'herite, aussitot pose, sans script. C'est pourquoi il n'est
|
|
412
|
+
pas au catalogue `jetonsDeComposant` (des valeurs lues avec un repli, plafonnees par D8). Requete
|
|
413
|
+
de style : Chrome 111, Safari 18, Firefox 151 (Baseline depuis mai 2026) ; en deca, au plancher du
|
|
414
|
+
socle (Safari 17.5, Firefox 129 a 150), le prefixe reste masque, et lu.
|
|
415
|
+
|
|
294
416
|
## Garde de non-derive
|
|
295
417
|
|
|
296
418
|
Le CSS est **engendre**, jamais ecrit a la main — la feuille, les partiels des
|