@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
|
@@ -177,6 +177,11 @@ const FAMILLES = {
|
|
|
177
177
|
teinte: 25,
|
|
178
178
|
chromaMax: .19,
|
|
179
179
|
vocation: "danger, erreur, action destructrice"
|
|
180
|
+
},
|
|
181
|
+
violet: {
|
|
182
|
+
teinte: 294,
|
|
183
|
+
chromaMax: .11,
|
|
184
|
+
vocation: "essai : environnement fictif, bac a sable (jamais un statut ni une action)"
|
|
180
185
|
}
|
|
181
186
|
};
|
|
182
187
|
const NEUTRES = {
|
|
@@ -308,6 +313,7 @@ const definitionsDesPrimitives = {
|
|
|
308
313
|
vert: rampe("vert"),
|
|
309
314
|
ambre: rampe("ambre"),
|
|
310
315
|
rouge: rampe("rouge"),
|
|
316
|
+
violet: rampe("violet"),
|
|
311
317
|
serie: engendrer(RANGS_DE_SERIE, (rang) => SERIE[rang])
|
|
312
318
|
};
|
|
313
319
|
function enHex$1(rampeDefinie) {
|
|
@@ -321,6 +327,7 @@ const primitives = {
|
|
|
321
327
|
vert: enHex$1(definitionsDesPrimitives.vert),
|
|
322
328
|
ambre: enHex$1(definitionsDesPrimitives.ambre),
|
|
323
329
|
rouge: enHex$1(definitionsDesPrimitives.rouge),
|
|
330
|
+
violet: enHex$1(definitionsDesPrimitives.violet),
|
|
324
331
|
serie: enHex$1(definitionsDesPrimitives.serie)
|
|
325
332
|
};
|
|
326
333
|
const espacement = {
|
|
@@ -678,7 +685,13 @@ const SOMBRE_CALCULE = {
|
|
|
678
685
|
surfaceSurvolElevee: "#383f49",
|
|
679
686
|
surfaceActive: "#424851"
|
|
680
687
|
};
|
|
681
|
-
const { neutre, bleu, azur, or, vert, ambre, rouge } = primitives;
|
|
688
|
+
const { neutre, bleu, azur, or, vert, ambre, rouge, violet, serie } = primitives;
|
|
689
|
+
function serieSombre(rang) {
|
|
690
|
+
return oklchVersHex({
|
|
691
|
+
...definitionsDesPrimitives.serie[rang].oklch,
|
|
692
|
+
l: .72
|
|
693
|
+
});
|
|
694
|
+
}
|
|
682
695
|
const themeClair = {
|
|
683
696
|
fond: RENDU.fond,
|
|
684
697
|
surface: neutre[0],
|
|
@@ -740,6 +753,18 @@ const themeClair = {
|
|
|
740
753
|
dangerDiscret: rouge[50],
|
|
741
754
|
surDangerDiscret: rouge[900],
|
|
742
755
|
dangerDiscretCourant: rouge[100],
|
|
756
|
+
erreur: rouge[600],
|
|
757
|
+
surErreur: neutre[0],
|
|
758
|
+
erreurDiscret: rouge[50],
|
|
759
|
+
surErreurDiscret: rouge[900],
|
|
760
|
+
essai: violet[600],
|
|
761
|
+
surEssai: neutre[0],
|
|
762
|
+
essaiDiscret: violet[50],
|
|
763
|
+
surEssaiDiscret: violet[900],
|
|
764
|
+
serie1: serie[1],
|
|
765
|
+
serie2: serie[2],
|
|
766
|
+
serie3: serie[3],
|
|
767
|
+
serie4: serie[4],
|
|
743
768
|
positif: RENDU.positif,
|
|
744
769
|
negatif: RENDU.texte
|
|
745
770
|
};
|
|
@@ -804,6 +829,18 @@ const themeSombre = {
|
|
|
804
829
|
dangerDiscret: rouge[900],
|
|
805
830
|
surDangerDiscret: rouge[100],
|
|
806
831
|
dangerDiscretCourant: rouge[950],
|
|
832
|
+
erreur: rouge[300],
|
|
833
|
+
surErreur: neutre[950],
|
|
834
|
+
erreurDiscret: rouge[900],
|
|
835
|
+
surErreurDiscret: rouge[100],
|
|
836
|
+
essai: violet[300],
|
|
837
|
+
surEssai: neutre[950],
|
|
838
|
+
essaiDiscret: violet[900],
|
|
839
|
+
surEssaiDiscret: violet[100],
|
|
840
|
+
serie1: serieSombre(1),
|
|
841
|
+
serie2: serieSombre(2),
|
|
842
|
+
serie3: serieSombre(3),
|
|
843
|
+
serie4: serieSombre(4),
|
|
807
844
|
positif: vert[300],
|
|
808
845
|
negatif: neutre[100]
|
|
809
846
|
};
|
|
@@ -811,6 +848,12 @@ const themes = {
|
|
|
811
848
|
clair: themeClair,
|
|
812
849
|
sombre: themeSombre
|
|
813
850
|
};
|
|
851
|
+
const aliasDeRole = {
|
|
852
|
+
erreur: "danger",
|
|
853
|
+
surErreur: "surDanger",
|
|
854
|
+
erreurDiscret: "dangerDiscret",
|
|
855
|
+
surErreurDiscret: "surDangerDiscret"
|
|
856
|
+
};
|
|
814
857
|
function surChacune(premierPlan, arrierePlans, nature = "courant") {
|
|
815
858
|
return arrierePlans.map((arrierePlan) => ({
|
|
816
859
|
premierPlan,
|
|
@@ -982,6 +1025,48 @@ const pairesDeContraste = [
|
|
|
982
1025
|
"dangerDiscret",
|
|
983
1026
|
"dangerDiscretCourant"
|
|
984
1027
|
]),
|
|
1028
|
+
{
|
|
1029
|
+
premierPlan: "surErreur",
|
|
1030
|
+
arrierePlan: "erreur",
|
|
1031
|
+
nature: "courant"
|
|
1032
|
+
},
|
|
1033
|
+
{
|
|
1034
|
+
premierPlan: "surErreurDiscret",
|
|
1035
|
+
arrierePlan: "erreurDiscret",
|
|
1036
|
+
nature: "courant"
|
|
1037
|
+
},
|
|
1038
|
+
...surChacune("erreur", [...SURFACES_DE_STATUT, "erreurDiscret"]),
|
|
1039
|
+
{
|
|
1040
|
+
premierPlan: "surEssai",
|
|
1041
|
+
arrierePlan: "essai",
|
|
1042
|
+
nature: "courant"
|
|
1043
|
+
},
|
|
1044
|
+
{
|
|
1045
|
+
premierPlan: "surEssaiDiscret",
|
|
1046
|
+
arrierePlan: "essaiDiscret",
|
|
1047
|
+
nature: "courant"
|
|
1048
|
+
},
|
|
1049
|
+
...surChacune("essai", [...SURFACES_DE_STATUT, "essaiDiscret"]),
|
|
1050
|
+
...surChacune("serie1", [
|
|
1051
|
+
"fond",
|
|
1052
|
+
"surface",
|
|
1053
|
+
"surfaceElevee"
|
|
1054
|
+
], "composant"),
|
|
1055
|
+
...surChacune("serie2", [
|
|
1056
|
+
"fond",
|
|
1057
|
+
"surface",
|
|
1058
|
+
"surfaceElevee"
|
|
1059
|
+
], "composant"),
|
|
1060
|
+
...surChacune("serie3", [
|
|
1061
|
+
"fond",
|
|
1062
|
+
"surface",
|
|
1063
|
+
"surfaceElevee"
|
|
1064
|
+
], "composant"),
|
|
1065
|
+
...surChacune("serie4", [
|
|
1066
|
+
"fond",
|
|
1067
|
+
"surface",
|
|
1068
|
+
"surfaceElevee"
|
|
1069
|
+
], "composant"),
|
|
985
1070
|
...surChacune("positif", [
|
|
986
1071
|
"surface",
|
|
987
1072
|
"fond",
|
|
@@ -1081,7 +1166,8 @@ const surfacesDuFocus = [
|
|
|
1081
1166
|
"accent",
|
|
1082
1167
|
"succes",
|
|
1083
1168
|
"information",
|
|
1084
|
-
"avertissement"
|
|
1169
|
+
"avertissement",
|
|
1170
|
+
"essaiDiscret"
|
|
1085
1171
|
];
|
|
1086
1172
|
const COUCHES = [
|
|
1087
1173
|
"repos",
|
|
@@ -1227,30 +1313,35 @@ const stylesTypographiques = {
|
|
|
1227
1313
|
interligne: "md",
|
|
1228
1314
|
graisse: "semi",
|
|
1229
1315
|
interlettrage: "approche",
|
|
1316
|
+
famille: "titre",
|
|
1230
1317
|
usage: "intertitre, titre de dialogue et de carte (18/24)"
|
|
1231
1318
|
},
|
|
1232
1319
|
"titre-3": {
|
|
1233
1320
|
taille: "xl",
|
|
1234
1321
|
graisse: "semi",
|
|
1235
1322
|
interlettrage: "approche",
|
|
1323
|
+
famille: "titre",
|
|
1236
1324
|
usage: "titre de section"
|
|
1237
1325
|
},
|
|
1238
1326
|
"titre-2": {
|
|
1239
1327
|
taille: "2xl",
|
|
1240
1328
|
graisse: "semi",
|
|
1241
1329
|
interlettrage: "approche",
|
|
1330
|
+
famille: "titre",
|
|
1242
1331
|
usage: "titre de bloc majeur"
|
|
1243
1332
|
},
|
|
1244
1333
|
"titre-1": {
|
|
1245
1334
|
taille: "3xl",
|
|
1246
1335
|
graisse: "semi",
|
|
1247
1336
|
interlettrage: "approche",
|
|
1337
|
+
famille: "titre",
|
|
1248
1338
|
usage: "titre de page (h1 de 32 px, D18)"
|
|
1249
1339
|
},
|
|
1250
1340
|
affichage: {
|
|
1251
1341
|
taille: "4xl",
|
|
1252
1342
|
graisse: "semi",
|
|
1253
1343
|
interlettrage: "approche",
|
|
1344
|
+
famille: "titre",
|
|
1254
1345
|
usage: "annonce, titre d ecran de marque"
|
|
1255
1346
|
},
|
|
1256
1347
|
"affichage-grand": {
|
|
@@ -1311,6 +1402,7 @@ function declarationsDuStyle(nom) {
|
|
|
1311
1402
|
const style = stylesTypographiques[nom];
|
|
1312
1403
|
return [
|
|
1313
1404
|
...style.famille === "mono" ? ["font-family: var(--st-police-mono);"] : [],
|
|
1405
|
+
...style.famille === "titre" ? ["font-family: var(--st-police-titre, var(--st-police-base));"] : [],
|
|
1314
1406
|
`font-size: var(--st-taille-${style.taille});`,
|
|
1315
1407
|
`line-height: var(--st-interligne-${style.interligne ?? style.taille});`,
|
|
1316
1408
|
`font-weight: var(--st-graisse-${style.graisse});`,
|
|
@@ -1343,6 +1435,27 @@ ${branches.join("")} } @else {
|
|
|
1343
1435
|
}
|
|
1344
1436
|
const LATIN = "U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD";
|
|
1345
1437
|
const LATIN_ETENDU = "U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF";
|
|
1438
|
+
const ARIAL = {
|
|
1439
|
+
unitesParEm: 2048,
|
|
1440
|
+
ascendante: 1854,
|
|
1441
|
+
descendante: 434,
|
|
1442
|
+
interligneAjoute: 67,
|
|
1443
|
+
chasseMoyenne: 904
|
|
1444
|
+
};
|
|
1445
|
+
const COURIER_NEW = {
|
|
1446
|
+
unitesParEm: 2048,
|
|
1447
|
+
ascendante: 1705,
|
|
1448
|
+
descendante: 615,
|
|
1449
|
+
interligneAjoute: 0,
|
|
1450
|
+
chasseMoyenne: 1229
|
|
1451
|
+
};
|
|
1452
|
+
const TIMES_NEW_ROMAN = {
|
|
1453
|
+
unitesParEm: 2048,
|
|
1454
|
+
ascendante: 1825,
|
|
1455
|
+
descendante: 443,
|
|
1456
|
+
interligneAjoute: 87,
|
|
1457
|
+
chasseMoyenne: 832
|
|
1458
|
+
};
|
|
1346
1459
|
const policesDuSocle = [{
|
|
1347
1460
|
famille: "Inter Variable",
|
|
1348
1461
|
graisses: "100 900",
|
|
@@ -1391,13 +1504,7 @@ const policesDuSocle = [{
|
|
|
1391
1504
|
"Liberation Sans",
|
|
1392
1505
|
"Arimo"
|
|
1393
1506
|
],
|
|
1394
|
-
metriques:
|
|
1395
|
-
unitesParEm: 2048,
|
|
1396
|
-
ascendante: 1854,
|
|
1397
|
-
descendante: 434,
|
|
1398
|
-
interligneAjoute: 67,
|
|
1399
|
-
chasseMoyenne: 904
|
|
1400
|
-
}
|
|
1507
|
+
metriques: ARIAL
|
|
1401
1508
|
}
|
|
1402
1509
|
}, {
|
|
1403
1510
|
famille: "JetBrains Mono Variable",
|
|
@@ -1427,15 +1534,42 @@ const policesDuSocle = [{
|
|
|
1427
1534
|
"Liberation Mono",
|
|
1428
1535
|
"Cousine"
|
|
1429
1536
|
],
|
|
1430
|
-
metriques:
|
|
1431
|
-
unitesParEm: 2048,
|
|
1432
|
-
ascendante: 1705,
|
|
1433
|
-
descendante: 615,
|
|
1434
|
-
interligneAjoute: 0,
|
|
1435
|
-
chasseMoyenne: 1229
|
|
1436
|
-
}
|
|
1537
|
+
metriques: COURIER_NEW
|
|
1437
1538
|
}
|
|
1438
1539
|
}];
|
|
1540
|
+
const policesDeTitre = [{
|
|
1541
|
+
famille: "Source Serif 4 Variable",
|
|
1542
|
+
graisses: "200 900",
|
|
1543
|
+
paquet: "@fontsource-variable/source-serif-4",
|
|
1544
|
+
licenceLivree: "LICENSE-source-serif.txt",
|
|
1545
|
+
fichiers: [{
|
|
1546
|
+
fichier: "source-serif-4-latin-ext-wght-normal.woff2",
|
|
1547
|
+
unicodeRange: LATIN_ETENDU,
|
|
1548
|
+
aPrecharger: false
|
|
1549
|
+
}, {
|
|
1550
|
+
fichier: "source-serif-4-latin-wght-normal.woff2",
|
|
1551
|
+
unicodeRange: LATIN,
|
|
1552
|
+
aPrecharger: false
|
|
1553
|
+
}],
|
|
1554
|
+
metriques: {
|
|
1555
|
+
unitesParEm: 1e3,
|
|
1556
|
+
ascendante: 1036,
|
|
1557
|
+
descendante: 335,
|
|
1558
|
+
interligneAjoute: 0,
|
|
1559
|
+
chasseMoyenne: 475.57
|
|
1560
|
+
},
|
|
1561
|
+
repli: {
|
|
1562
|
+
famille: "Source Serif 4 Repli",
|
|
1563
|
+
locales: [
|
|
1564
|
+
"Times New Roman",
|
|
1565
|
+
"TimesNewRomanPSMT",
|
|
1566
|
+
"Liberation Serif",
|
|
1567
|
+
"Tinos"
|
|
1568
|
+
],
|
|
1569
|
+
metriques: TIMES_NEW_ROMAN
|
|
1570
|
+
}
|
|
1571
|
+
}];
|
|
1572
|
+
const pileDeTitre = "'Source Serif 4 Variable', 'Source Serif 4 Repli', Georgia, serif";
|
|
1439
1573
|
function pourcent(valeur) {
|
|
1440
1574
|
return `${(Math.round(valeur * 1e4) / 100).toFixed(2)}%`;
|
|
1441
1575
|
}
|
|
@@ -1453,8 +1587,8 @@ function surchargesDuRepli(police) {
|
|
|
1453
1587
|
function fichiersAPrecharger() {
|
|
1454
1588
|
return policesDuSocle.flatMap((p) => p.fichiers.filter((f) => f.aPrecharger).map((f) => f.fichier));
|
|
1455
1589
|
}
|
|
1456
|
-
function
|
|
1457
|
-
|
|
1590
|
+
function facesDesPolices(polices) {
|
|
1591
|
+
return polices.flatMap((police) => {
|
|
1458
1592
|
const faces = police.fichiers.map((f) => `@font-face {
|
|
1459
1593
|
font-family: '${police.famille}';
|
|
1460
1594
|
font-style: normal;
|
|
@@ -1474,6 +1608,9 @@ function feuilleDesPolices() {
|
|
|
1474
1608
|
}`;
|
|
1475
1609
|
return [...faces, repli];
|
|
1476
1610
|
});
|
|
1611
|
+
}
|
|
1612
|
+
function feuilleDesPolices() {
|
|
1613
|
+
const blocs = facesDesPolices(policesDuSocle);
|
|
1477
1614
|
return `/* Engendre par @starterlib/tokens \u2014 ne pas modifier a la main.
|
|
1478
1615
|
Regenerer : pnpm tokens:css
|
|
1479
1616
|
|
|
@@ -1486,6 +1623,23 @@ ${fichiersAPrecharger().map((f) => ` <link rel="preload" href="\u2026/police
|
|
|
1486
1623
|
${blocs.join("\n\n")}
|
|
1487
1624
|
`;
|
|
1488
1625
|
}
|
|
1626
|
+
function feuilleDesPolicesDeTitre() {
|
|
1627
|
+
return `/* Engendre par @starterlib/tokens \u2014 ne pas modifier a la main.
|
|
1628
|
+
Regenerer : pnpm tokens:css
|
|
1629
|
+
|
|
1630
|
+
Police de TITRE, OPTIONNELLE (Source Serif 4, SIL OFL 1.1, voir polices/LICENSE-source-serif.txt) :
|
|
1631
|
+
a charger EN PLUS de polices.css par l'application qui veut ses titres en serif. Sans elle, les
|
|
1632
|
+
styles titre-* et affichage gardent la police de base, et aucun octet de plus ne part. Ne pas la
|
|
1633
|
+
precharger sur un ecran anonyme sous seuil (ADR 0031) : font-display: optional et le repli metrise
|
|
1634
|
+
excluent tout decalage a son arrivee. Recette : docs/recettes/police.md. */
|
|
1635
|
+
|
|
1636
|
+
${facesDesPolices(policesDeTitre).join("\n\n")}
|
|
1637
|
+
|
|
1638
|
+
:root {
|
|
1639
|
+
--st-police-titre: ${pileDeTitre};
|
|
1640
|
+
}
|
|
1641
|
+
`;
|
|
1642
|
+
}
|
|
1489
1643
|
const jetonsDeComposant = [
|
|
1490
1644
|
{
|
|
1491
1645
|
nom: "--st-commande-hauteur",
|
|
@@ -1509,7 +1663,8 @@ const jetonsDeComposant = [
|
|
|
1509
1663
|
"st-password-field",
|
|
1510
1664
|
"st-tag-input",
|
|
1511
1665
|
"st-file-upload",
|
|
1512
|
-
"st-pagination"
|
|
1666
|
+
"st-pagination",
|
|
1667
|
+
"st-bottom-nav"
|
|
1513
1668
|
]
|
|
1514
1669
|
},
|
|
1515
1670
|
{
|
|
@@ -1540,8 +1695,8 @@ const jetonsDeComposant = [
|
|
|
1540
1695
|
{
|
|
1541
1696
|
nom: "--st-carte-rayon",
|
|
1542
1697
|
repli: "var(--st-rayon-lg)",
|
|
1543
|
-
role: "Rayon de la carte, la surface la plus chartee : 12 px, distinct des surfaces flottantes.",
|
|
1544
|
-
lecteurs: ["st-card"]
|
|
1698
|
+
role: "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).",
|
|
1699
|
+
lecteurs: ["st-card", "st-auth-shell"]
|
|
1545
1700
|
},
|
|
1546
1701
|
{
|
|
1547
1702
|
nom: "--st-tableau-cellule-bloc",
|
|
@@ -1614,6 +1769,8 @@ const jetonsDeComposant = [
|
|
|
1614
1769
|
];
|
|
1615
1770
|
const contratsDHote = [
|
|
1616
1771
|
"--st-hauteur-entete",
|
|
1772
|
+
"--st-hauteur-pied",
|
|
1773
|
+
"--st-hauteur-action",
|
|
1617
1774
|
"--st-coquille-hauteur-entete",
|
|
1618
1775
|
"--st-form-actions-hauteur",
|
|
1619
1776
|
"--st-choix-interligne",
|
|
@@ -1637,7 +1794,24 @@ const variablesInternes = [
|
|
|
1637
1794
|
"--st-tableau-plan-entete",
|
|
1638
1795
|
"--st-tableau-plan-coin",
|
|
1639
1796
|
"--st-skeleton-derniere",
|
|
1640
|
-
"--st-virtual-list-hauteur"
|
|
1797
|
+
"--st-virtual-list-hauteur",
|
|
1798
|
+
"--st-avatar-group-taille",
|
|
1799
|
+
"--st-carte-espace",
|
|
1800
|
+
"--st-carte-ombre-survol",
|
|
1801
|
+
"--st-carte-trace-survol",
|
|
1802
|
+
"--st-deadline-encre",
|
|
1803
|
+
"--st-deadline-fond",
|
|
1804
|
+
"--st-dialogue-sens",
|
|
1805
|
+
"--st-form-row-colonnes",
|
|
1806
|
+
"--st-meter-encre",
|
|
1807
|
+
"--st-repartition-hauteur",
|
|
1808
|
+
"--st-skeleton-pas",
|
|
1809
|
+
"--st-tableau-decalage-figee",
|
|
1810
|
+
"--st-tableau-fond-ligne",
|
|
1811
|
+
"--st-timeline-repere",
|
|
1812
|
+
"--st-toast-cible",
|
|
1813
|
+
"--st-toast-ton",
|
|
1814
|
+
"--st-tri-rembourrage"
|
|
1641
1815
|
];
|
|
1642
1816
|
function estJetonDeComposant(nom) {
|
|
1643
1817
|
return jetonsDeComposant.some((jeton) => jeton.nom === nom);
|
|
@@ -1649,24 +1823,28 @@ function enKebab(valeur) {
|
|
|
1649
1823
|
function aplatir(prefixe, valeurs) {
|
|
1650
1824
|
return Object.entries(valeurs).map(([cle, valeur]) => ` ${prefixe}-${enKebab(cle)}: ${valeur};`);
|
|
1651
1825
|
}
|
|
1652
|
-
function selonLeTheme(clair, sombre) {
|
|
1826
|
+
function selonLeTheme$1(clair, sombre) {
|
|
1653
1827
|
return clair === sombre ? clair : `light-dark(${clair}, ${sombre})`;
|
|
1654
1828
|
}
|
|
1655
1829
|
function nomDeCouleur(jeton) {
|
|
1656
1830
|
return `${PREFIXE}-couleur-${enKebab(jeton)}`;
|
|
1657
1831
|
}
|
|
1658
|
-
function couleursEnCss() {
|
|
1659
|
-
return Object.keys(themeClair).map((jeton) =>
|
|
1832
|
+
function couleursEnCss(litteral = false) {
|
|
1833
|
+
return Object.keys(themeClair).map((jeton) => {
|
|
1834
|
+
const cible = aliasDeRole[jeton];
|
|
1835
|
+
const valeur = cible === void 0 || litteral ? selonLeTheme$1(themeClair[jeton], themeSombre[jeton]) : `var(${nomDeCouleur(cible)})`;
|
|
1836
|
+
return ` ${nomDeCouleur(jeton)}: ${valeur};`;
|
|
1837
|
+
});
|
|
1660
1838
|
}
|
|
1661
1839
|
function ombresEnCss() {
|
|
1662
1840
|
return [
|
|
1663
1841
|
` ${PREFIXE}-ombre-none: none;`,
|
|
1664
1842
|
...COUCHES.map((couche) => {
|
|
1665
|
-
const valeur = ombres[couche].map((c) => `${c.geometrie} ${selonLeTheme(c.couleur.clair, c.couleur.sombre)}`).join(", ");
|
|
1843
|
+
const valeur = ombres[couche].map((c) => `${c.geometrie} ${selonLeTheme$1(c.couleur.clair, c.couleur.sombre)}`).join(", ");
|
|
1666
1844
|
return ` ${PREFIXE}-ombre-${couche}: ${valeur};`;
|
|
1667
1845
|
}),
|
|
1668
|
-
` ${PREFIXE}-voile: ${selonLeTheme(voile.clair, voile.sombre)};`,
|
|
1669
|
-
` ${PREFIXE}-couleur-ombre: ${selonLeTheme(couleurDOmbre.clair, couleurDOmbre.sombre)};`
|
|
1846
|
+
` ${PREFIXE}-voile: ${selonLeTheme$1(voile.clair, voile.sombre)};`,
|
|
1847
|
+
` ${PREFIXE}-couleur-ombre: ${selonLeTheme$1(couleurDOmbre.clair, couleurDOmbre.sombre)};`
|
|
1670
1848
|
];
|
|
1671
1849
|
}
|
|
1672
1850
|
function cssDesEchelles() {
|
|
@@ -1695,8 +1873,8 @@ function cssDesEchelles() {
|
|
|
1695
1873
|
` ${PREFIXE}-cible-min: ${cibleMinimale};`
|
|
1696
1874
|
].join("\n");
|
|
1697
1875
|
}
|
|
1698
|
-
function cssDuTheme() {
|
|
1699
|
-
return [...couleursEnCss(), ...ombresEnCss()].join("\n");
|
|
1876
|
+
function cssDuTheme(litteral = false) {
|
|
1877
|
+
return [...couleursEnCss(litteral), ...ombresEnCss()].join("\n");
|
|
1700
1878
|
}
|
|
1701
1879
|
function variablesDeDensite(mode, retrait = " ") {
|
|
1702
1880
|
return Object.entries(densite[mode]).map(([nom, valeur]) => `${retrait}${PREFIXE}-${nom}: ${valeur};`).join("\n");
|
|
@@ -1743,8 +1921,8 @@ function themeSousContrasteRenforce(theme) {
|
|
|
1743
1921
|
return rendu;
|
|
1744
1922
|
}
|
|
1745
1923
|
const aliasDeContrasteRenforce = {
|
|
1746
|
-
...Object.fromEntries(Object.entries(aliasDeContrasteRenforceParJeton).map(([jeton, cible]) => [nomDeCouleur(jeton), selonLeTheme(themeClair[cible], themeSombre[cible])])),
|
|
1747
|
-
...Object.fromEntries(Object.entries(encresDeContrasteRenforce).map(([jeton, encres]) => [nomDeCouleur(jeton), selonLeTheme(encres.clair, encres.sombre)])),
|
|
1924
|
+
...Object.fromEntries(Object.entries(aliasDeContrasteRenforceParJeton).map(([jeton, cible]) => [nomDeCouleur(jeton), selonLeTheme$1(themeClair[cible], themeSombre[cible])])),
|
|
1925
|
+
...Object.fromEntries(Object.entries(encresDeContrasteRenforce).map(([jeton, encres]) => [nomDeCouleur(jeton), selonLeTheme$1(encres.clair, encres.sombre)])),
|
|
1748
1926
|
[`${PREFIXE}-focus-epaisseur`]: `var(${PREFIXE}-epaisseur-forte)`
|
|
1749
1927
|
};
|
|
1750
1928
|
const couleursSysteme = {
|
|
@@ -1770,7 +1948,9 @@ const couleursSysteme = {
|
|
|
1770
1948
|
"succesDiscret",
|
|
1771
1949
|
"avertissementDiscret",
|
|
1772
1950
|
"dangerDiscret",
|
|
1773
|
-
"dangerDiscretCourant"
|
|
1951
|
+
"dangerDiscretCourant",
|
|
1952
|
+
"erreurDiscret",
|
|
1953
|
+
"essaiDiscret"
|
|
1774
1954
|
],
|
|
1775
1955
|
CanvasText: [
|
|
1776
1956
|
"texte",
|
|
@@ -1790,6 +1970,12 @@ const couleursSysteme = {
|
|
|
1790
1970
|
"danger",
|
|
1791
1971
|
"dangerSurvol",
|
|
1792
1972
|
"dangerActif",
|
|
1973
|
+
"erreur",
|
|
1974
|
+
"essai",
|
|
1975
|
+
"serie1",
|
|
1976
|
+
"serie2",
|
|
1977
|
+
"serie3",
|
|
1978
|
+
"serie4",
|
|
1793
1979
|
"positif",
|
|
1794
1980
|
"surPrimaireDiscret",
|
|
1795
1981
|
"surPrimaireAttenue",
|
|
@@ -1797,7 +1983,9 @@ const couleursSysteme = {
|
|
|
1797
1983
|
"surInformationDiscret",
|
|
1798
1984
|
"surSuccesDiscret",
|
|
1799
1985
|
"surAvertissementDiscret",
|
|
1800
|
-
"surDangerDiscret"
|
|
1986
|
+
"surDangerDiscret",
|
|
1987
|
+
"surErreurDiscret",
|
|
1988
|
+
"surEssaiDiscret"
|
|
1801
1989
|
],
|
|
1802
1990
|
GrayText: ["texteDesactive"],
|
|
1803
1991
|
LinkText: [
|
|
@@ -1819,7 +2007,9 @@ const encresDAplat = [
|
|
|
1819
2007
|
"surInformation",
|
|
1820
2008
|
"surSucces",
|
|
1821
2009
|
"surAvertissement",
|
|
1822
|
-
"surDanger"
|
|
2010
|
+
"surDanger",
|
|
2011
|
+
"surErreur",
|
|
2012
|
+
"surEssai"
|
|
1823
2013
|
];
|
|
1824
2014
|
const derogationsDImpression = {
|
|
1825
2015
|
fond: "#ffffff",
|
|
@@ -1835,13 +2025,15 @@ const derogationsDImpression = {
|
|
|
1835
2025
|
avertissement: "#783f03",
|
|
1836
2026
|
danger: "#960c19",
|
|
1837
2027
|
information: "#0b5776",
|
|
2028
|
+
essai: primitives.violet[700],
|
|
1838
2029
|
primaireDiscret: "#ffffff",
|
|
1839
2030
|
primaireAttenue: "#ffffff",
|
|
1840
2031
|
accentDiscret: "#ffffff",
|
|
1841
2032
|
informationDiscret: "#ffffff",
|
|
1842
2033
|
succesDiscret: "#ffffff",
|
|
1843
2034
|
avertissementDiscret: "#ffffff",
|
|
1844
|
-
dangerDiscret: "#ffffff"
|
|
2035
|
+
dangerDiscret: "#ffffff",
|
|
2036
|
+
essaiDiscret: "#ffffff"
|
|
1845
2037
|
};
|
|
1846
2038
|
const taillesDImpression = {
|
|
1847
2039
|
"2xs": "8pt",
|
|
@@ -1856,7 +2048,7 @@ const taillesDImpression = {
|
|
|
1856
2048
|
"5xl": "28pt",
|
|
1857
2049
|
"6xl": "32pt"
|
|
1858
2050
|
};
|
|
1859
|
-
function declarations(valeurs, retrait) {
|
|
2051
|
+
function declarations$1(valeurs, retrait) {
|
|
1860
2052
|
return Object.entries(valeurs).map(([nom, valeur]) => `${retrait}${nom}: ${valeur};`).join("\n");
|
|
1861
2053
|
}
|
|
1862
2054
|
function blocContrasteForce() {
|
|
@@ -1864,7 +2056,7 @@ function blocContrasteForce() {
|
|
|
1864
2056
|
for (const [systeme, jetons] of Object.entries(couleursSysteme)) for (const jeton of jetons) alias[nomDeCouleur(jeton)] = systeme;
|
|
1865
2057
|
for (const couche of ["none", ...COUCHES]) alias[`${PREFIXE}-ombre-${couche}`] = "none";
|
|
1866
2058
|
alias[`${PREFIXE}-epaisseur-capillaire`] = epaisseurCapillaire.base;
|
|
1867
|
-
return declarations(alias, " ");
|
|
2059
|
+
return declarations$1(alias, " ");
|
|
1868
2060
|
}
|
|
1869
2061
|
function blocImpression() {
|
|
1870
2062
|
const valeurs = {};
|
|
@@ -1873,12 +2065,38 @@ function blocImpression() {
|
|
|
1873
2065
|
valeurs[`${PREFIXE}-voile`] = "transparent";
|
|
1874
2066
|
valeurs[`${PREFIXE}-epaisseur-capillaire`] = epaisseurCapillaire.base;
|
|
1875
2067
|
for (const [cle, taille] of Object.entries(taillesDImpression)) valeurs[`${PREFIXE}-taille-${cle}`] = taille;
|
|
1876
|
-
return declarations(valeurs, " ");
|
|
2068
|
+
return declarations$1(valeurs, " ");
|
|
1877
2069
|
}
|
|
1878
2070
|
function affichageSelonLeTheme(theme, retrait = " ") {
|
|
1879
2071
|
const visible = "inline";
|
|
1880
2072
|
return [`${retrait}${PREFIXE}-affichage-si-clair: ${theme === "clair" ? visible : "none"};`, `${retrait}${PREFIXE}-affichage-si-sombre: ${theme === "sombre" ? visible : "none"};`].join("\n");
|
|
1881
2073
|
}
|
|
2074
|
+
const REGLAGE_DU_PREFIXE_DE_TON = `${PREFIXE}-prefixe-de-ton`;
|
|
2075
|
+
function reglesDuPrefixeDeTon() {
|
|
2076
|
+
return `.st-prefixe-de-ton {
|
|
2077
|
+
position: absolute;
|
|
2078
|
+
width: 1px;
|
|
2079
|
+
height: 1px;
|
|
2080
|
+
padding: 0;
|
|
2081
|
+
margin: -1px;
|
|
2082
|
+
overflow: hidden;
|
|
2083
|
+
clip-path: inset(50%);
|
|
2084
|
+
white-space: nowrap;
|
|
2085
|
+
border: 0;
|
|
2086
|
+
}
|
|
2087
|
+
|
|
2088
|
+
@container style(${REGLAGE_DU_PREFIXE_DE_TON}: visible) {
|
|
2089
|
+
.st-prefixe-de-ton {
|
|
2090
|
+
position: static;
|
|
2091
|
+
width: auto;
|
|
2092
|
+
height: auto;
|
|
2093
|
+
margin: 0;
|
|
2094
|
+
overflow: visible;
|
|
2095
|
+
clip-path: none;
|
|
2096
|
+
white-space: normal;
|
|
2097
|
+
}
|
|
2098
|
+
}`;
|
|
2099
|
+
}
|
|
1882
2100
|
function feuilleDeJetons() {
|
|
1883
2101
|
return `/* Engendre par @starterlib/tokens \u2014 ne pas modifier a la main.
|
|
1884
2102
|
Regenerer : pnpm tokens:css */
|
|
@@ -1971,26 +2189,31 @@ ${variablesDeDensite("compacte")}
|
|
|
1971
2189
|
ne se fige jamais. \`:where(:root)\` : la regle pese (0,1,0), comme les autres. */
|
|
1972
2190
|
@media (prefers-reduced-motion: reduce) {
|
|
1973
2191
|
:where(:root):not([data-mouvement='complet']) {
|
|
1974
|
-
${declarations(mouvementReduit, " ")}
|
|
2192
|
+
${declarations$1(mouvementReduit, " ")}
|
|
1975
2193
|
}
|
|
1976
2194
|
}
|
|
1977
2195
|
|
|
1978
2196
|
[data-mouvement='reduit'] {
|
|
1979
|
-
${declarations(mouvementReduit, " ")}
|
|
2197
|
+
${declarations$1(mouvementReduit, " ")}
|
|
1980
2198
|
}
|
|
1981
2199
|
|
|
1982
2200
|
/* Gel d'une image : au changement de theme ou de langue, rien ne transite le temps
|
|
1983
2201
|
d'un rendu (StTheme et StLangue posent data-gel sur <html>). Place apres le
|
|
1984
2202
|
mouvement : un mouvement complet choisi ne leve pas le gel. */
|
|
1985
2203
|
[data-gel] {
|
|
1986
|
-
${declarations(mouvementGele, " ")}
|
|
2204
|
+
${declarations$1(mouvementGele, " ")}
|
|
1987
2205
|
}
|
|
1988
2206
|
|
|
1989
|
-
/* WCAG 2.4.11 : un arret de tabulation ne remonte jamais sous l'en-tete collant
|
|
1990
|
-
|
|
1991
|
-
|
|
2207
|
+
/* WCAG 2.4.11 : un arret de tabulation ne remonte jamais sous l'en-tete collant, ni ne
|
|
2208
|
+
descend sous la barre de navigation inferieure ou sous l'action permanente flottante.
|
|
2209
|
+
\`${PREFIXE}-hauteur-entete\` est posee sur <html> par st-app-shell, qui mesure son
|
|
2210
|
+
en-tete ; \`${PREFIXE}-hauteur-pied\` par st-bottom-nav, sous md (P08-05) ;
|
|
2211
|
+
\`${PREFIXE}-hauteur-action\` par st-app-shell, sous md, du bas de la fenetre au haut de
|
|
2212
|
+
l'action qui flotte (P08-06), barre comprise. Sans elles, le repli vaut zero et rien ne
|
|
2213
|
+
change. */
|
|
1992
2214
|
html {
|
|
1993
2215
|
scroll-padding-block-start: var(${PREFIXE}-hauteur-entete, 0px);
|
|
2216
|
+
scroll-padding-block-end: max(var(${PREFIXE}-hauteur-pied, 0px), var(${PREFIXE}-hauteur-action, 0px));
|
|
1994
2217
|
}
|
|
1995
2218
|
|
|
1996
2219
|
/* Rythme vertical d'un formulaire, porte par le CONTENEUR (lot 200) : les champs du
|
|
@@ -2020,6 +2243,11 @@ html {
|
|
|
2020
2243
|
border: 0;
|
|
2021
2244
|
}
|
|
2022
2245
|
|
|
2246
|
+
/* Prefixe de ton (\u00ab Erreur : \u00bb, P08-03) : masque et lu, comme .st-vh ; affiche sous le reglage
|
|
2247
|
+
${REGLAGE_DU_PREFIXE_DE_TON}: visible, pose par l'application sur la racine, une zone ou une
|
|
2248
|
+
instance (requete de style : Chrome 111, Safari 18, Firefox 151 ; en deca, il reste masque). */
|
|
2249
|
+
${reglesDuPrefixeDeTon()}
|
|
2250
|
+
|
|
2023
2251
|
/* Contrat avec le CDK : ses surfaces (menus, popovers, infobulles, tiroirs,
|
|
2024
2252
|
dialogues) s'empilent par l'ordre du DOM dans ce conteneur, qui lit le plan. */
|
|
2025
2253
|
.cdk-overlay-container {
|
|
@@ -2029,7 +2257,7 @@ html {
|
|
|
2029
2257
|
/* Contraste renforce : alias du theme courant, clair ou sombre (01 \u00a77.1). */
|
|
2030
2258
|
@media (prefers-contrast: more) {
|
|
2031
2259
|
:root {
|
|
2032
|
-
${declarations(aliasDeContrasteRenforce, " ")}
|
|
2260
|
+
${declarations$1(aliasDeContrasteRenforce, " ")}
|
|
2033
2261
|
}
|
|
2034
2262
|
}
|
|
2035
2263
|
|
|
@@ -2141,12 +2369,12 @@ ${variablesDeDensite("compacte")}
|
|
|
2141
2369
|
|
|
2142
2370
|
@media (prefers-reduced-motion: reduce) {
|
|
2143
2371
|
:host(:not([data-mouvement='complet'])) {
|
|
2144
|
-
${declarations(mouvementReduit, " ")}
|
|
2372
|
+
${declarations$1(mouvementReduit, " ")}
|
|
2145
2373
|
}
|
|
2146
2374
|
}
|
|
2147
2375
|
|
|
2148
2376
|
:host([data-mouvement='reduit']) {
|
|
2149
|
-
${declarations(mouvementReduit, " ")}
|
|
2377
|
+
${declarations$1(mouvementReduit, " ")}
|
|
2150
2378
|
}
|
|
2151
2379
|
|
|
2152
2380
|
.st-vh,
|
|
@@ -2162,9 +2390,11 @@ ${declarations(mouvementReduit, " ")}
|
|
|
2162
2390
|
border: 0;
|
|
2163
2391
|
}
|
|
2164
2392
|
|
|
2393
|
+
${reglesDuPrefixeDeTon()}
|
|
2394
|
+
|
|
2165
2395
|
@media (prefers-contrast: more) {
|
|
2166
2396
|
:host {
|
|
2167
|
-
${declarations(aliasDeContrasteRenforce, " ")}
|
|
2397
|
+
${declarations$1(aliasDeContrasteRenforce, " ")}
|
|
2168
2398
|
}
|
|
2169
2399
|
}
|
|
2170
2400
|
|
|
@@ -2206,7 +2436,7 @@ function partielDesJetons() {
|
|
|
2206
2436
|
$jetons: (
|
|
2207
2437
|
${[
|
|
2208
2438
|
cssDesEchelles(),
|
|
2209
|
-
cssDuTheme(),
|
|
2439
|
+
cssDuTheme(true),
|
|
2210
2440
|
variablesDeDensite("confortable")
|
|
2211
2441
|
].join("\n").split("\n").map((ligne) => DECLARATION_DE_JETON.exec(ligne)).filter((trouve) => trouve !== null).map(([, nom, valeur]) => entreeDeCarte(nom ?? "", valeur ?? "")).join("\n")}
|
|
2212
2442
|
);
|
|
@@ -2227,8 +2457,8 @@ function jetonsDtcg() {
|
|
|
2227
2457
|
const jetons = {
|
|
2228
2458
|
$description: "Jetons de @starterlib/tokens au format DTCG 2025.10. Engendre par tools/generer-css.mjs : ne pas modifier.",
|
|
2229
2459
|
couleur: {
|
|
2230
|
-
clair: couleurs(themeClair),
|
|
2231
|
-
sombre: couleurs(themeSombre)
|
|
2460
|
+
clair: couleurs(themeClair, "clair"),
|
|
2461
|
+
sombre: couleurs(themeSombre, "sombre")
|
|
2232
2462
|
},
|
|
2233
2463
|
espacement: dimensions(espacement),
|
|
2234
2464
|
rayon: dimensions(rayon),
|
|
@@ -2252,12 +2482,15 @@ function jetonsDtcg() {
|
|
|
2252
2482
|
};
|
|
2253
2483
|
return `${JSON.stringify(jetons, null, 2)}\n`;
|
|
2254
2484
|
}
|
|
2255
|
-
function couleurs(theme) {
|
|
2485
|
+
function couleurs(theme, nomDuTheme) {
|
|
2256
2486
|
const noms = Object.keys(theme);
|
|
2257
|
-
return Object.fromEntries(noms.map((nom) =>
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2487
|
+
return Object.fromEntries(noms.map((nom) => {
|
|
2488
|
+
const cible = aliasDeRole[nom];
|
|
2489
|
+
return [nom, {
|
|
2490
|
+
$type: "color",
|
|
2491
|
+
$value: cible === void 0 ? couleur(theme[nom]) : `{couleur.${nomDuTheme}.${cible}}`
|
|
2492
|
+
}];
|
|
2493
|
+
}));
|
|
2261
2494
|
}
|
|
2262
2495
|
function couleur(hex) {
|
|
2263
2496
|
return {
|
|
@@ -2292,6 +2525,374 @@ function dimension(valeur) {
|
|
|
2292
2525
|
function familles(pile) {
|
|
2293
2526
|
return pile.split(",").map((famille) => famille.trim().replace(/^'(.*)'$/, "$1"));
|
|
2294
2527
|
}
|
|
2295
|
-
|
|
2528
|
+
var MarqueNonConforme = class extends Error {
|
|
2529
|
+
defauts;
|
|
2530
|
+
constructor(nom, defauts) {
|
|
2531
|
+
super(`Marque ${nom} non conforme :\n ${defauts.join("\n ")}`);
|
|
2532
|
+
this.name = "MarqueNonConforme";
|
|
2533
|
+
this.defauts = defauts;
|
|
2534
|
+
}
|
|
2535
|
+
};
|
|
2536
|
+
const pairesDuContourEleve = [{
|
|
2537
|
+
premierPlan: "bordureForteElevee",
|
|
2538
|
+
arrierePlans: [
|
|
2539
|
+
"surfaceElevee",
|
|
2540
|
+
"surfaceConteneurHaut",
|
|
2541
|
+
"surface"
|
|
2542
|
+
],
|
|
2543
|
+
nature: "composant"
|
|
2544
|
+
}];
|
|
2545
|
+
const ecartsDeMarque = [...ecartsDeSurface, {
|
|
2546
|
+
devant: "surface",
|
|
2547
|
+
derriere: "fond",
|
|
2548
|
+
minimum: 1.03,
|
|
2549
|
+
pourquoi: "une surface posee sur la page s en detache"
|
|
2550
|
+
}];
|
|
2551
|
+
const ALIAS_DU_CONTOUR_ELEVE = { bordureForteElevee: "texteDiscret" };
|
|
2552
|
+
const conteneursEleves = [
|
|
2553
|
+
"st-dialog-container",
|
|
2554
|
+
"st-dialog-content",
|
|
2555
|
+
"st-menu",
|
|
2556
|
+
"st-popover"
|
|
2557
|
+
];
|
|
2558
|
+
const NOM_DE_MARQUE = /^[a-z][a-z0-9-]{1,40}$/;
|
|
2559
|
+
const HEX = /^#[0-9a-fA-F]{6}$/;
|
|
2560
|
+
const ROLES = /* @__PURE__ */ new Set([...Object.keys(themeClair), "bordureForteElevee"]);
|
|
2561
|
+
const NATURES = /* @__PURE__ */ new Set([
|
|
2562
|
+
"courant",
|
|
2563
|
+
"grand",
|
|
2564
|
+
"composant"
|
|
2565
|
+
]);
|
|
2566
|
+
const THEMES = ["clair", "sombre"];
|
|
2567
|
+
const RAISON_MINIMALE = 40;
|
|
2568
|
+
function base(theme) {
|
|
2569
|
+
return theme === "clair" ? themeClair : themeSombre;
|
|
2570
|
+
}
|
|
2571
|
+
function enMinuscules(valeur) {
|
|
2572
|
+
return valeur.toLowerCase();
|
|
2573
|
+
}
|
|
2574
|
+
function themeDeMarque(valeurs, theme) {
|
|
2575
|
+
const posees = valeurs[theme];
|
|
2576
|
+
const rendu = { ...base(theme) };
|
|
2577
|
+
for (const [role, valeur] of Object.entries(posees)) if (valeur !== void 0) rendu[role] = enMinuscules(valeur);
|
|
2578
|
+
rendu["bordureForteElevee"] = enMinuscules(posees.bordureForteElevee ?? posees.bordureForte ?? base(theme).bordureForte);
|
|
2579
|
+
for (const [role, cible] of Object.entries(aliasDeRole)) if (posees[role] === void 0) rendu[role] = rendu[cible] ?? base(theme)[cible];
|
|
2580
|
+
return rendu;
|
|
2581
|
+
}
|
|
2582
|
+
function poseParLaMarque(valeurs, theme, role) {
|
|
2583
|
+
const valeur = valeurs[theme][role];
|
|
2584
|
+
if (valeur === void 0) return false;
|
|
2585
|
+
if (role === "bordureForteElevee") return true;
|
|
2586
|
+
const cible = aliasDeRole[role];
|
|
2587
|
+
const sansElle = cible === void 0 ? base(theme)[role] : enMinuscules(valeurs[theme][cible] ?? base(theme)[cible]);
|
|
2588
|
+
return enMinuscules(valeur) !== sansElle;
|
|
2589
|
+
}
|
|
2590
|
+
function themeDeMarqueSousContrasteRenforce(valeurs, theme) {
|
|
2591
|
+
const normal = themeDeMarque(valeurs, theme);
|
|
2592
|
+
const rendu = { ...normal };
|
|
2593
|
+
const alias = {
|
|
2594
|
+
...aliasDeContrasteRenforceParJeton,
|
|
2595
|
+
...ALIAS_DU_CONTOUR_ELEVE
|
|
2596
|
+
};
|
|
2597
|
+
for (const [role, cible] of Object.entries(alias)) rendu[role] = normal[cible];
|
|
2598
|
+
for (const [role, encres] of Object.entries(encresDeContrasteRenforce)) if (!poseParLaMarque(valeurs, theme, role)) rendu[role] = encres[theme];
|
|
2599
|
+
return rendu;
|
|
2600
|
+
}
|
|
2601
|
+
function mesure(theme, jetons, devant, derriere) {
|
|
2602
|
+
const rapport = rapportDeContraste(jetons[devant], jetons[derriere]);
|
|
2603
|
+
return `${theme} : ${devant} (${jetons[devant]}) sur ${derriere} (${jetons[derriere]}) = ${rapport.toFixed(2)}:1`;
|
|
2604
|
+
}
|
|
2605
|
+
function memeEcart(e, a, b) {
|
|
2606
|
+
return e[0] === a && e[1] === b || e[0] === b && e[1] === a;
|
|
2607
|
+
}
|
|
2608
|
+
function estUnObjet(valeur) {
|
|
2609
|
+
return typeof valeur === "object" && valeur !== null && !Array.isArray(valeur);
|
|
2610
|
+
}
|
|
2611
|
+
function citee(valeur) {
|
|
2612
|
+
if (valeur === void 0) return "absent";
|
|
2613
|
+
return typeof valeur === "string" ? valeur : JSON.stringify(valeur);
|
|
2614
|
+
}
|
|
2615
|
+
function liste(valeur) {
|
|
2616
|
+
return Array.isArray(valeur) ? valeur : [];
|
|
2617
|
+
}
|
|
2618
|
+
function raisonEcrite(valeur) {
|
|
2619
|
+
return typeof valeur === "string" && valeur.length >= RAISON_MINIMALE;
|
|
2620
|
+
}
|
|
2621
|
+
function defautsDeForme(valeurs) {
|
|
2622
|
+
if (!estUnObjet(valeurs)) return ["la marque n est pas un objet"];
|
|
2623
|
+
const defauts = [];
|
|
2624
|
+
const nom = valeurs["nom"];
|
|
2625
|
+
if (typeof nom !== "string" || !NOM_DE_MARQUE.test(nom)) defauts.push(`nom : « ${citee(nom)} » hors de ^[a-z][a-z0-9-]{1,40}$`);
|
|
2626
|
+
for (const theme of THEMES) {
|
|
2627
|
+
const couleurs = valeurs[theme];
|
|
2628
|
+
if (!estUnObjet(couleurs)) {
|
|
2629
|
+
defauts.push(`${theme} : un objet de roles est attendu (vide s il n y a rien a poser)`);
|
|
2630
|
+
continue;
|
|
2631
|
+
}
|
|
2632
|
+
for (const [role, valeur] of Object.entries(couleurs)) {
|
|
2633
|
+
if (!ROLES.has(role)) defauts.push(`${theme} : role inconnu « ${role} »`);
|
|
2634
|
+
if (typeof valeur !== "string" || !HEX.test(valeur)) defauts.push(`${theme} : ${role} = « ${citee(valeur)} », hexadecimal #rrggbb attendu`);
|
|
2635
|
+
}
|
|
2636
|
+
}
|
|
2637
|
+
const malFormees = [
|
|
2638
|
+
"exemptions",
|
|
2639
|
+
"paires",
|
|
2640
|
+
"pairesExclues"
|
|
2641
|
+
].filter((cle) => valeurs[cle] !== void 0 && !Array.isArray(valeurs[cle]));
|
|
2642
|
+
if (malFormees.length > 0) return [...defauts, ...malFormees.map((cle) => `${cle} : une liste est attendue`)];
|
|
2643
|
+
const primitives = valeurs["primitives"];
|
|
2644
|
+
if (primitives !== void 0 && !estUnObjet(primitives)) defauts.push("primitives : un objet de familles est attendu");
|
|
2645
|
+
else for (const [famille, pas] of Object.entries(primitives ?? {})) {
|
|
2646
|
+
if (!estUnObjet(pas)) {
|
|
2647
|
+
defauts.push(`primitive ${famille} : un objet de pas est attendu`);
|
|
2648
|
+
continue;
|
|
2649
|
+
}
|
|
2650
|
+
for (const [cle, valeur] of Object.entries(pas)) if (typeof valeur !== "string" || !HEX.test(valeur)) defauts.push(`primitive ${famille}.${cle} = « ${citee(valeur)} », hexadecimal #rrggbb attendu`);
|
|
2651
|
+
}
|
|
2652
|
+
for (const exemption of liste(valeurs["exemptions"])) {
|
|
2653
|
+
const ecart = estUnObjet(exemption) ? exemption["ecart"] : void 0;
|
|
2654
|
+
if (!estUnObjet(exemption) || !Array.isArray(ecart) || ecart.length !== 2 || !ecart.every((role) => typeof role === "string")) {
|
|
2655
|
+
defauts.push("exemption : `ecart` attend deux roles, [devant, derriere]");
|
|
2656
|
+
continue;
|
|
2657
|
+
}
|
|
2658
|
+
const [devant, derriere] = ecart;
|
|
2659
|
+
const cle = `exemption ${devant}/${derriere}`;
|
|
2660
|
+
if (!ecartsDeMarque.some((e) => memeEcart([e.devant, e.derriere], devant, derriere))) defauts.push(`${cle} : aucun ecart de surface de ce nom (ecartsDeMarque)`);
|
|
2661
|
+
const theme = exemption["theme"];
|
|
2662
|
+
if (theme !== void 0 && theme !== "clair" && theme !== "sombre") defauts.push(`${cle} : theme « ${citee(theme)} » inconnu`);
|
|
2663
|
+
if (!raisonEcrite(exemption["raison"])) defauts.push(`${cle} : raison absente ou trop courte (${RAISON_MINIMALE.toString()} caracteres au moins)`);
|
|
2664
|
+
}
|
|
2665
|
+
for (const paire of liste(valeurs["paires"])) {
|
|
2666
|
+
const premierPlan = estUnObjet(paire) ? paire["premierPlan"] : void 0;
|
|
2667
|
+
const arrierePlans = estUnObjet(paire) ? paire["arrierePlans"] : void 0;
|
|
2668
|
+
if (!estUnObjet(paire) || !Array.isArray(arrierePlans)) {
|
|
2669
|
+
defauts.push(`paire ${citee(premierPlan)} : \`arrierePlans\` attend une liste de roles`);
|
|
2670
|
+
continue;
|
|
2671
|
+
}
|
|
2672
|
+
for (const role of [premierPlan, ...arrierePlans]) if (typeof role !== "string" || !ROLES.has(role)) defauts.push(`paire : role inconnu « ${citee(role)} »`);
|
|
2673
|
+
const nature = paire["nature"];
|
|
2674
|
+
if (typeof nature !== "string" || !NATURES.has(nature)) defauts.push(`paire ${citee(premierPlan)} : nature « ${citee(nature)} » inconnue`);
|
|
2675
|
+
}
|
|
2676
|
+
for (const exclue of liste(valeurs["pairesExclues"])) {
|
|
2677
|
+
if (!estUnObjet(exclue)) {
|
|
2678
|
+
defauts.push("paire exclue : un objet est attendu");
|
|
2679
|
+
continue;
|
|
2680
|
+
}
|
|
2681
|
+
const premierPlan = exclue["premierPlan"];
|
|
2682
|
+
const arrierePlan = exclue["arrierePlan"];
|
|
2683
|
+
for (const role of [premierPlan, arrierePlan]) if (typeof role !== "string" || !ROLES.has(role)) defauts.push(`paire exclue : role inconnu « ${citee(role)} »`);
|
|
2684
|
+
if (!raisonEcrite(exclue["raison"])) defauts.push(`paire exclue ${citee(premierPlan)}/${citee(arrierePlan)} : raison absente ou trop courte`);
|
|
2685
|
+
}
|
|
2686
|
+
return defauts;
|
|
2687
|
+
}
|
|
2688
|
+
function pairesExigees(valeurs) {
|
|
2689
|
+
const exclues = valeurs.pairesExclues ?? [];
|
|
2690
|
+
const toutes = [...pairesDeContraste, ...[...pairesDuContourEleve, ...valeurs.paires ?? []].flatMap((p) => p.arrierePlans.map((arrierePlan) => ({
|
|
2691
|
+
premierPlan: p.premierPlan,
|
|
2692
|
+
arrierePlan,
|
|
2693
|
+
nature: p.nature
|
|
2694
|
+
})))];
|
|
2695
|
+
const vues = /* @__PURE__ */ new Set();
|
|
2696
|
+
return toutes.filter((p) => {
|
|
2697
|
+
const cle = `${p.premierPlan}/${p.arrierePlan}`;
|
|
2698
|
+
if (vues.has(cle)) return false;
|
|
2699
|
+
vues.add(cle);
|
|
2700
|
+
return !exclues.some((e) => e.premierPlan === p.premierPlan && e.arrierePlan === p.arrierePlan);
|
|
2701
|
+
});
|
|
2702
|
+
}
|
|
2703
|
+
function defautsDeLaMarque(entree) {
|
|
2704
|
+
const forme = defautsDeForme(entree);
|
|
2705
|
+
if (forme.length > 0) return forme;
|
|
2706
|
+
const valeurs = entree;
|
|
2707
|
+
const defauts = [];
|
|
2708
|
+
const paires = pairesExigees(valeurs);
|
|
2709
|
+
for (const theme of THEMES) {
|
|
2710
|
+
const rendus = [[theme, themeDeMarque(valeurs, theme)], [`${theme} (contraste renforce)`, themeDeMarqueSousContrasteRenforce(valeurs, theme)]];
|
|
2711
|
+
for (const [nomDuRendu, jetons] of rendus) {
|
|
2712
|
+
for (const p of paires) {
|
|
2713
|
+
const seuil = seuilExige("AA", p.nature);
|
|
2714
|
+
if (rapportDeContraste(jetons[p.premierPlan], jetons[p.arrierePlan]) < seuil) defauts.push(`${mesure(nomDuRendu, jetons, p.premierPlan, p.arrierePlan)}, minimum ${String(seuil)}:1`);
|
|
2715
|
+
}
|
|
2716
|
+
for (const surface of surfacesDuFocus) {
|
|
2717
|
+
const anneau = rapportDeContraste(jetons.anneauFocus, jetons[surface]);
|
|
2718
|
+
const lisere = rapportDeContraste(jetons.lisereFocus, jetons[surface]);
|
|
2719
|
+
if (Math.max(anneau, lisere) < 3) defauts.push(`${nomDuRendu} : focus sur ${surface} (${jetons[surface]}) : anneau ${anneau.toFixed(2)}:1, lisere ${lisere.toFixed(2)}:1, l'un des deux a 3:1 au moins`);
|
|
2720
|
+
}
|
|
2721
|
+
}
|
|
2722
|
+
const jetons = themeDeMarque(valeurs, theme);
|
|
2723
|
+
for (const e of ecartsDeMarque) {
|
|
2724
|
+
if (rapportDeContraste(jetons[e.devant], jetons[e.derriere]) >= e.minimum) continue;
|
|
2725
|
+
if (!(valeurs.exemptions ?? []).some((x) => memeEcart(x.ecart, e.devant, e.derriere) && (x.theme === void 0 || x.theme === theme))) {
|
|
2726
|
+
defauts.push(`${mesure(theme, jetons, e.devant, e.derriere)}, ecart minimum ${String(e.minimum)}:1 (${e.pourquoi}) : relever l'ecart, ou l'exempter avec sa raison (le filet porte la separation)`);
|
|
2727
|
+
continue;
|
|
2728
|
+
}
|
|
2729
|
+
const filet = Math.max(rapportDeContraste(jetons.bordure, jetons[e.devant]), rapportDeContraste(jetons.bordure, jetons[e.derriere]));
|
|
2730
|
+
if (filet < 1.2) defauts.push(`${theme} : ecart ${e.devant}/${e.derriere} exempte, mais le filet bordure (${jetons.bordure}) n'y est perceptible sur aucune des deux surfaces (${filet.toFixed(2)}:1, minimum ${String(SEUIL_DE_PERCEPTIBILITE)}:1)`);
|
|
2731
|
+
}
|
|
2732
|
+
for (const { jeton } of exemptesDeContraste) if (rapportDeContraste(jetons[jeton], jetons.surface) < 1.2) defauts.push(`${mesure(theme, jetons, jeton, "surface")}, jeton exempte qui doit rester perceptible (${String(SEUIL_DE_PERCEPTIBILITE)}:1)`);
|
|
2733
|
+
}
|
|
2734
|
+
for (const exclue of valeurs.pairesExclues ?? []) if (!THEMES.some((theme) => {
|
|
2735
|
+
const jetons = themeDeMarque(valeurs, theme);
|
|
2736
|
+
return rapportDeContraste(jetons[exclue.premierPlan], jetons[exclue.arrierePlan]) < 4.5;
|
|
2737
|
+
})) defauts.push(`paire exclue ${exclue.premierPlan}/${exclue.arrierePlan} : elle tient dans les deux themes, la redeclarer en paire`);
|
|
2738
|
+
return defauts;
|
|
2739
|
+
}
|
|
2740
|
+
function selonLeTheme(clair, sombre) {
|
|
2741
|
+
return clair === sombre ? clair : `light-dark(${clair}, ${sombre})`;
|
|
2742
|
+
}
|
|
2743
|
+
function nomDuRole(role) {
|
|
2744
|
+
return nomDeCouleur(role);
|
|
2745
|
+
}
|
|
2746
|
+
function rolesPoses(valeurs) {
|
|
2747
|
+
return [...Object.keys(themeClair), "bordureForteElevee"].filter((role) => role === "bordureForteElevee" || THEMES.some((t) => poseParLaMarque(valeurs, t, role)));
|
|
2748
|
+
}
|
|
2749
|
+
function encreDImpression(ecran, derogation) {
|
|
2750
|
+
const couleur = hexVersOklch(ecran);
|
|
2751
|
+
const plafond = hexVersOklch(derogation).l;
|
|
2752
|
+
return couleur.l <= plafond ? ecran : oklchVersHex({
|
|
2753
|
+
...couleur,
|
|
2754
|
+
l: plafond
|
|
2755
|
+
});
|
|
2756
|
+
}
|
|
2757
|
+
function declarations(lignes, retrait) {
|
|
2758
|
+
return lignes.map(([nom, valeur]) => `${retrait}${nom}: ${valeur};`).join("\n");
|
|
2759
|
+
}
|
|
2760
|
+
function feuilleDeMarque(valeurs) {
|
|
2761
|
+
const defauts = defautsDeLaMarque(valeurs);
|
|
2762
|
+
if (defauts.length > 0) throw new MarqueNonConforme(valeurs.nom, defauts);
|
|
2763
|
+
const clair = themeDeMarque(valeurs, "clair");
|
|
2764
|
+
const sombre = themeDeMarque(valeurs, "sombre");
|
|
2765
|
+
const poses = rolesPoses(valeurs);
|
|
2766
|
+
const racine = poses.map((role) => [nomDuRole(role), selonLeTheme(clair[role], sombre[role])]);
|
|
2767
|
+
const renforceClair = themeDeMarqueSousContrasteRenforce(valeurs, "clair");
|
|
2768
|
+
const renforceSombre = themeDeMarqueSousContrasteRenforce(valeurs, "sombre");
|
|
2769
|
+
const renforces = [
|
|
2770
|
+
...Object.keys(aliasDeContrasteRenforceParJeton),
|
|
2771
|
+
...Object.keys(encresDeContrasteRenforce),
|
|
2772
|
+
...Object.keys(ALIAS_DU_CONTOUR_ELEVE)
|
|
2773
|
+
];
|
|
2774
|
+
const contrasteRenforce = [...new Set(renforces)].map((role) => [nomDuRole(role), selonLeTheme(renforceClair[role], renforceSombre[role])]);
|
|
2775
|
+
const systeme = /* @__PURE__ */ new Map();
|
|
2776
|
+
for (const [couleur, jetons] of Object.entries(couleursSysteme)) for (const jeton of jetons) systeme.set(jeton, couleur);
|
|
2777
|
+
systeme.set("bordureForteElevee", systeme.get("bordureForte") ?? "CanvasText");
|
|
2778
|
+
const contrasteForce = poses.filter((role) => systeme.has(role)).map((role) => [nomDuRole(role), systeme.get(role) ?? "CanvasText"]);
|
|
2779
|
+
const derogations = derogationsDImpression;
|
|
2780
|
+
const impression = poses.flatMap((role) => {
|
|
2781
|
+
const prolonge = role === "bordureForteElevee" ? "bordureForte" : aliasDeRole[role];
|
|
2782
|
+
const derogation = derogations[role] ?? (prolonge === void 0 ? void 0 : derogations[prolonge]);
|
|
2783
|
+
if (derogation === void 0) return [];
|
|
2784
|
+
const fond = derogation.toLowerCase() === "#ffffff";
|
|
2785
|
+
return [[nomDuRole(role), fond ? derogation : encreDImpression(clair[role], derogation)]];
|
|
2786
|
+
});
|
|
2787
|
+
return `/* Engendre par @starterlib/tokens — ne pas modifier a la main.
|
|
2788
|
+
Marque « ${valeurs.nom} »${valeurs.description === void 0 ? "" : ` : ${valeurs.description}`}
|
|
2789
|
+
A charger APRES starter-tokens.css. Regenerer : pnpm tokens:css (socle) ou
|
|
2790
|
+
starter-web jetons --marque <fichier> (application). Roles et gardes : README de @starterlib/tokens,
|
|
2791
|
+
niveau 2 bis. */
|
|
2792
|
+
|
|
2793
|
+
:root {
|
|
2794
|
+
${declarations(racine, " ")}
|
|
2795
|
+
}
|
|
2796
|
+
|
|
2797
|
+
/* Les conteneurs eleves (fond surface-elevee) : leurs champs prennent le contour que la marque a
|
|
2798
|
+
prouve a 3:1 sur ces surfaces. Sans feuille de marque, rien ne change. */
|
|
2799
|
+
${conteneursEleves.join(",\n")} {
|
|
2800
|
+
${PREFIXE}-couleur-bordure-forte: var(${PREFIXE}-couleur-bordure-forte-elevee);
|
|
2801
|
+
}
|
|
2802
|
+
|
|
2803
|
+
/* Contraste renforce : les alias du socle, resolus dans la marque. */
|
|
2804
|
+
@media (prefers-contrast: more) {
|
|
2805
|
+
:root {
|
|
2806
|
+
${declarations(contrasteRenforce, " ")}
|
|
2807
|
+
}
|
|
2808
|
+
}
|
|
2809
|
+
|
|
2810
|
+
/* Contraste force : les roles poses par la marque, vers leur couleur systeme. */
|
|
2811
|
+
@media (forced-colors: active) {
|
|
2812
|
+
:root {
|
|
2813
|
+
${declarations(contrasteForce, " ")}
|
|
2814
|
+
}
|
|
2815
|
+
}
|
|
2816
|
+
|
|
2817
|
+
/* Impression : les derogations du socle pour les roles poses ; une encre ne fait que foncer. */
|
|
2818
|
+
@media print {
|
|
2819
|
+
:root {
|
|
2820
|
+
${declarations(impression, " ")}
|
|
2821
|
+
}
|
|
2822
|
+
}
|
|
2823
|
+
`;
|
|
2824
|
+
}
|
|
2825
|
+
function jetonsDtcgDeMarque(valeurs) {
|
|
2826
|
+
const defauts = defautsDeLaMarque(valeurs);
|
|
2827
|
+
if (defauts.length > 0) throw new MarqueNonConforme(valeurs.nom, defauts);
|
|
2828
|
+
const couleur = (hex) => {
|
|
2829
|
+
return {
|
|
2830
|
+
colorSpace: "srgb",
|
|
2831
|
+
components: [
|
|
2832
|
+
1,
|
|
2833
|
+
3,
|
|
2834
|
+
5
|
|
2835
|
+
].map((debut) => Number.parseInt(hex.slice(debut, debut + 2), 16) / 255).map((canal) => Number(canal.toFixed(4))),
|
|
2836
|
+
alpha: 1,
|
|
2837
|
+
hex
|
|
2838
|
+
};
|
|
2839
|
+
};
|
|
2840
|
+
const theme = (nomDuTheme) => {
|
|
2841
|
+
const jetons = themeDeMarque(valeurs, nomDuTheme);
|
|
2842
|
+
return Object.fromEntries(Object.keys(jetons).map((nom) => {
|
|
2843
|
+
const cible = aliasDeRole[nom];
|
|
2844
|
+
return [nom, {
|
|
2845
|
+
$type: "color",
|
|
2846
|
+
$value: (cible !== void 0 && !poseParLaMarque(valeurs, nomDuTheme, nom) ? `{couleur.${nomDuTheme}.${cible}}` : null) ?? couleur(jetons[nom])
|
|
2847
|
+
}];
|
|
2848
|
+
}));
|
|
2849
|
+
};
|
|
2850
|
+
const primitives = Object.fromEntries(Object.entries(valeurs.primitives ?? {}).map(([famille, pas]) => [famille, Object.fromEntries(Object.entries(pas).map(([cle, valeur]) => [cle, {
|
|
2851
|
+
$type: "color",
|
|
2852
|
+
$value: couleur(enMinuscules(valeur))
|
|
2853
|
+
}]))]));
|
|
2854
|
+
const fichier = {
|
|
2855
|
+
$description: `Marque ${valeurs.nom} de @starterlib/tokens au format DTCG 2025.10 : les deux themes complets (socle ecrase par la marque). Engendre : ne pas modifier.`,
|
|
2856
|
+
couleur: {
|
|
2857
|
+
clair: theme("clair"),
|
|
2858
|
+
sombre: theme("sombre")
|
|
2859
|
+
},
|
|
2860
|
+
...Object.keys(primitives).length > 0 ? { primitive: primitives } : {}
|
|
2861
|
+
};
|
|
2862
|
+
return `${JSON.stringify(fichier, null, 2)}\n`;
|
|
2863
|
+
}
|
|
2864
|
+
const marqueExempleBlanc = {
|
|
2865
|
+
nom: "exemple-blanc",
|
|
2866
|
+
description: "fond blanc et gris froids, erreur a l'encre du texte (exemple du socle)",
|
|
2867
|
+
clair: {
|
|
2868
|
+
fond: "#ffffff",
|
|
2869
|
+
surface: "#ffffff",
|
|
2870
|
+
surfaceEnfoncee: "#f4f6f8",
|
|
2871
|
+
surfaceSelection: "#e9edf2",
|
|
2872
|
+
bordure: "#e1e6ec",
|
|
2873
|
+
bordureForte: "#7b8794",
|
|
2874
|
+
bordureForteElevee: "#7e848b",
|
|
2875
|
+
erreur: "#161c24",
|
|
2876
|
+
erreurDiscret: "#f4f6f8",
|
|
2877
|
+
surErreurDiscret: "#161c24"
|
|
2878
|
+
},
|
|
2879
|
+
sombre: {
|
|
2880
|
+
bordureForte: "#5d6982",
|
|
2881
|
+
bordureForteElevee: "#7e848b",
|
|
2882
|
+
erreur: "#f2f4f6",
|
|
2883
|
+
erreurDiscret: "#2b3139",
|
|
2884
|
+
surErreurDiscret: "#f2f4f6"
|
|
2885
|
+
},
|
|
2886
|
+
exemptions: [{
|
|
2887
|
+
ecart: ["surface", "fond"],
|
|
2888
|
+
theme: "clair",
|
|
2889
|
+
raison: "Fond = surface = blanc : une carte posee sur le fond se detache par son filet, jamais par un aplat."
|
|
2890
|
+
}, {
|
|
2891
|
+
ecart: ["surfaceEnfoncee", "surface"],
|
|
2892
|
+
theme: "clair",
|
|
2893
|
+
raison: "Retrait #f4f6f8 a 1,08:1 du blanc, sous le seuil 1,12 du socle : tout creux porte un filet ou un contour."
|
|
2894
|
+
}]
|
|
2895
|
+
};
|
|
2896
|
+
export { CLES_DE_TAILLE, COUCHES, C_PAS, FAMILLES, L_PAS, MODES_DE_DENSITE, MarqueNonConforme, PAS_DE_RAMPE, PAS_NEUTRES, PREFIXE, RANGS_DE_SERIE, REGLAGE_DU_PREFIXE_DE_TON, SEUIL_DE_PERCEPTIBILITE, aliasDeContrasteRenforce, aliasDeContrasteRenforceParJeton, aliasDeRole, apca, cadence, cadenceMinimale, cibleMinimale, cibleTactileMinimale, composer, conteneursEleves, contratsDHote, couleurDOmbre, couleursSysteme, courbe, cssDesEchelles, cssDuTheme, declarationsDuStyle, defautsDeLaMarque, definitionDuPas, definitionsDesPrimitives, densite, deplacement, derogationsDImpression, duree, ecartsDeMarque, ecartsDeSurface, enKebab, encresDAplat, encresDeContrasteRenforce, epaisseur, epaisseurCapillaire, espacement, estJetonDeComposant, exemptesDeContraste, feuilleDeJetons, feuilleDeMarque, feuilleDesJetonsDUnElement, feuilleDesPolices, feuilleDesPolicesDeTitre, fichiersAPrecharger, focus, hauteurDeCommande, hexVersOklch, interlettrageDuStyle, jetonsDeComposant, jetonsDtcg, jetonsDtcgDeMarque, largeur, lireCouleur, luminanceRelative, marqueExempleBlanc, mouvementGele, mouvementReduit, nomDeCouleur, nombreDeJetonsDeCouleur, oklchEnCss, oklchVersHex, oklchVersSrgb, ombreDuTheme, ombres, pairesDeContraste, pairesDuContourEleve, pairesExclues, partielDeTypographie, partielDesJetons, pileDeTitre, plan, policesDeTitre, policesDuSocle, primitives, rapportDeContraste, rayon, respecteLeContraste, rolesDesPrimitives, seuilExige, stylesTypographiques, surchargesDuRepli, surfacesDuFocus, taillesDImpression, themeClair, themeDeMarque, themeDeMarqueSousContrasteRenforce, themeSombre, themeSousContrasteRenforce, themes, typographie, variablesInternes, versRvb, voile };
|
|
2296
2897
|
|
|
2297
2898
|
//# sourceMappingURL=starterlib-tokens-moteur.mjs.map
|