@starterlib/ui 0.9.0 → 0.10.0

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.
Files changed (38) hide show
  1. package/README.md +44 -32
  2. package/assets/icones/catalogue.json +1 -1
  3. package/fesm2022/starterlib-ui-donnees.mjs +200 -3
  4. package/fesm2022/starterlib-ui-donnees.mjs.map +1 -1
  5. package/fesm2022/starterlib-ui-etats.mjs +1158 -0
  6. package/fesm2022/starterlib-ui-etats.mjs.map +1 -0
  7. package/fesm2022/starterlib-ui-formulaires.mjs +3 -2
  8. package/fesm2022/starterlib-ui-formulaires.mjs.map +1 -1
  9. package/fesm2022/starterlib-ui-indicateurs.mjs +1013 -0
  10. package/fesm2022/starterlib-ui-indicateurs.mjs.map +1 -0
  11. package/fesm2022/starterlib-ui-libelles-en.mjs.map +1 -1
  12. package/fesm2022/starterlib-ui-listes.mjs +5 -2
  13. package/fesm2022/starterlib-ui-listes.mjs.map +1 -1
  14. package/fesm2022/starterlib-ui-messagerie.mjs +2 -2
  15. package/fesm2022/starterlib-ui-messagerie.mjs.map +1 -1
  16. package/fesm2022/starterlib-ui-mise-en-page.mjs +892 -0
  17. package/fesm2022/starterlib-ui-mise-en-page.mjs.map +1 -0
  18. package/fesm2022/starterlib-ui-onglets.mjs.map +1 -1
  19. package/fesm2022/starterlib-ui-parcours.mjs +222 -4
  20. package/fesm2022/starterlib-ui-parcours.mjs.map +1 -1
  21. package/fesm2022/starterlib-ui-saisie.mjs +131 -3
  22. package/fesm2022/starterlib-ui-saisie.mjs.map +1 -1
  23. package/fesm2022/starterlib-ui-surfaces.mjs +2 -1
  24. package/fesm2022/starterlib-ui-surfaces.mjs.map +1 -1
  25. package/fesm2022/starterlib-ui.mjs +3510 -7105
  26. package/fesm2022/starterlib-ui.mjs.map +1 -1
  27. package/package.json +15 -3
  28. package/types/starterlib-ui-donnees.d.ts +95 -1
  29. package/types/starterlib-ui-etats.d.ts +486 -0
  30. package/types/starterlib-ui-formulaires.d.ts +1 -1
  31. package/types/starterlib-ui-indicateurs.d.ts +463 -0
  32. package/types/starterlib-ui-listes.d.ts +2 -1
  33. package/types/starterlib-ui-mise-en-page.d.ts +355 -0
  34. package/types/starterlib-ui-onglets.d.ts +6 -0
  35. package/types/starterlib-ui-parcours.d.ts +123 -3
  36. package/types/starterlib-ui-saisie.d.ts +72 -2
  37. package/types/starterlib-ui-selection.d.ts +3 -2
  38. package/types/starterlib-ui.d.ts +52 -1605
@@ -1,6 +1,7 @@
1
1
  import * as i0 from "@angular/core";
2
- import { AnimationCallbackEvent, DestroyRef, EnvironmentProviders, InjectionToken, Provider, Resource, Signal, TemplateRef } from "@angular/core";
3
- import { ChoixDeTheme, ETATS_DE_BLOC, EtatDeBloc, EtatDeBloc as EtatDeBloc$1, EtatDeDocument, Langue, ListesDAdresses, MoyenDeCeremonie, NatureDeRegion, RechercheDAdresses, Ton, TonSemantique, VarianteDErreur, VarianteDErreur as VarianteDErreur$1, sansCommandesDeDirection } from "@starterlib/util";
2
+ import { AnimationCallbackEvent, DestroyRef, EnvironmentProviders, InjectionToken, Provider, Signal } from "@angular/core";
3
+ import { ChoixDeTheme, ETATS_DE_BLOC, EtatDeBloc, Langue, MoyenDeCeremonie, Ton, TonSemantique, VarianteDErreur, VarianteDErreur as VarianteDErreur$1, sansCommandesDeDirection } from "@starterlib/util";
4
+ import { EtatDeDocument, ListesDAdresses, NatureDeRegion, RechercheDAdresses } from "@starterlib/util/valeurs";
4
5
  import * as i1 from "@angular/router";
5
6
  export interface LibellesUi {
6
7
  /**
@@ -1124,81 +1125,6 @@ export declare class StIcon {
1124
1125
  };
1125
1126
  }, {}, never, never, true, never>;
1126
1127
  }
1127
- export type VarianteDeTexte = 'corps' | 'corps-sm' | 'discret' | 'legende' | 'meta' | 'mono';
1128
- export type GraisseDeTexte = 'normale' | 'moyenne' | 'semi';
1129
- /**
1130
- * Bloc de texte de l'echelle typographique.
1131
- *
1132
- * L'hote EST la boite : jamais `display: contents`, qui retire l'element de
1133
- * l'arbre d'accessibilite dans plusieurs navigateurs. Seul un texte `revelable`
1134
- * gagne une zone interieure, parce que son bouton doit rester HORS de la coupe.
1135
- *
1136
- * ```html
1137
- * <st-text variante="meta">Mis a jour il y a 2 min</st-text>
1138
- * <st-text [tronquerA]="3" revelable>{{ conditions }}</st-text>
1139
- * ```
1140
- */
1141
- export declare class StText {
1142
- readonly variante: import("@angular/core").InputSignal<VarianteDeTexte>;
1143
- readonly graisse: import("@angular/core").InputSignal<GraisseDeTexte>;
1144
- readonly enLigne: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1145
- /**
1146
- * Nombre de lignes au-dela duquel le texte est coupe.
1147
- *
1148
- * ⚠️ A ne jamais employer sur un message d'erreur, un statut, un libelle
1149
- * d'action, un montant ou un nom qui distingue : une information tronquee y
1150
- * devient fausse. Le texte coupe reste lu en entier par un lecteur d'ecran ;
1151
- * l'oeil, lui, n'en voit que le debut, d'ou `revelable`.
1152
- *
1153
- * ⚠️ **Sans `revelable`, un APERCU seulement** : le texte entier doit s'atteindre
1154
- * ailleurs, a l'oeil et au clavier (la ligne est un lien vers le detail, ou le
1155
- * detail est sur la page). Une bulle `title` ne le remplace pas : ni le clavier ni
1156
- * le toucher ne l'ouvrent (WCAG 1.4.10 et 2.1.1 ; audit UI du 2026-09-27, D-34).
1157
- * Partout ailleurs, `revelable`.
1158
- */
1159
- readonly tronquerA: import("@angular/core").InputSignal<number | null>;
1160
- /**
1161
- * Avec `tronquerA` : un bouton « Afficher la suite » / « Reduire » sous le
1162
- * bloc, SEULEMENT quand le texte deborde reellement de sa coupe (WCAG 1.4.4 et
1163
- * 1.4.10 : ce que la coupe cache doit rester atteignable a l'oeil).
1164
- */
1165
- readonly revelable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1166
- protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
1167
- protected readonly identifiantDuContenu: string;
1168
- protected readonly ouvert: import("@angular/core").WritableSignal<boolean>;
1169
- protected readonly deborde: import("@angular/core").WritableSignal<boolean>;
1170
- private readonly zone;
1171
- constructor();
1172
- protected basculer(): void;
1173
- static ɵfac: i0.ɵɵFactoryDeclaration<StText, never>;
1174
- static ɵcmp: i0.ɵɵComponentDeclaration<StText, "st-text", never, {
1175
- "variante": {
1176
- "alias": "variante";
1177
- "required": false;
1178
- "isSignal": true;
1179
- };
1180
- "graisse": {
1181
- "alias": "graisse";
1182
- "required": false;
1183
- "isSignal": true;
1184
- };
1185
- "enLigne": {
1186
- "alias": "enLigne";
1187
- "required": false;
1188
- "isSignal": true;
1189
- };
1190
- "tronquerA": {
1191
- "alias": "tronquerA";
1192
- "required": false;
1193
- "isSignal": true;
1194
- };
1195
- "revelable": {
1196
- "alias": "revelable";
1197
- "required": false;
1198
- "isSignal": true;
1199
- };
1200
- }, {}, never, ["*"], true, never>;
1201
- }
1202
1128
  export type NiveauDeTitre = 1 | 2 | 3 | 4 | 5 | 6;
1203
1129
  export type TailleDeTitre = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';
1204
1130
  /**
@@ -1450,98 +1376,6 @@ export declare class StProgress {
1450
1376
  };
1451
1377
  }, {}, never, ["*"], true, never>;
1452
1378
  }
1453
- /**
1454
- * Les silhouettes de la planche 9 de Claude Design (typologie des squelettes, lot 207) :
1455
- * - `texte` (defaut) : des lignes de texte, la derniere a 60 % ;
1456
- * - `tableau` : rangee d'en-tete courte, puis des rangees de cellules (la troisieme en pastille) ;
1457
- * - `liste` : des rangees disque de 40 px, deux lignes et un montant, en option sous une rangee
1458
- * d'en-tete (`entete`, planche 2) ;
1459
- * - `carte` : en-tete, media 16/9 a pictogramme, pied ;
1460
- * - `formulaire` : des champs (libelle, champ de 44 px, aide sur un champ sur deux) ;
1461
- * - `indicateur` : le bloc d'un indicateur chiffre (libelle et pastille, valeur, deux lignes).
1462
- */
1463
- export type VarianteDeSquelette = 'texte' | 'tableau' | 'liste' | 'carte' | 'formulaire' | 'indicateur';
1464
- /**
1465
- * Silhouette du contenu en cours de chargement.
1466
- *
1467
- * Entierement masque aux technologies d'assistance : c'est `stState` qui
1468
- * annonce le chargement, une fois. Un squelette annonce ligne par ligne
1469
- * noierait le lecteur d'ecran. Pose hors de `st-state`, son conteneur porte
1470
- * `aria-busy="true"` pendant le chargement (recette).
1471
- *
1472
- * Il doit reproduire la BOITE du contenu reel, sinon l'arrivee des donnees
1473
- * fait sauter la mise en page.
1474
- */
1475
- export declare class StSkeleton {
1476
- readonly variante: import("@angular/core").InputSignal<VarianteDeSquelette>;
1477
- /** Lignes de texte, rangees de tableau ou de liste, champs de formulaire. */
1478
- readonly lignes: import("@angular/core").InputSignalWithTransform<number, unknown>;
1479
- readonly colonnes: import("@angular/core").InputSignalWithTransform<number, unknown>;
1480
- readonly anime: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1481
- /**
1482
- * Pose la silhouette dans un creux (`surfaceConteneurBas`, 16 px de marge, coins de 8 px) :
1483
- * la planche 9 montre ainsi un bloc en attente au milieu d'une carte blanche.
1484
- */
1485
- readonly puits: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1486
- /**
1487
- * Une rangee d'en-tete au-dessus de la liste : deux blocs de 24 px aux deux bouts (le titre et
1488
- * l'action d'une liste, planche 2). Sans effet hors de la variante `liste`.
1489
- */
1490
- readonly entete: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1491
- protected readonly avecEntete: import("@angular/core").Signal<boolean>;
1492
- protected readonly enteteDeListe: readonly [32, 20];
1493
- protected readonly indicesDeLigne: import("@angular/core").Signal<number[]>;
1494
- protected readonly indicesDeColonne: import("@angular/core").Signal<number[]>;
1495
- /** Pas des titres de colonne. */
1496
- protected readonly enteteDeTableau: import("@angular/core").Signal<(24 | 32 | 20)[]>;
1497
- /** Pour chaque rangee, le pas de chaque cellule et si elle est une pastille. */
1498
- protected readonly rangeesDeTableau: import("@angular/core").Signal<{
1499
- pas: 16 | 24 | 40 | 32 | 20 | 28 | 48 | 36 | 14;
1500
- pastille: boolean;
1501
- }[][]>;
1502
- protected readonly rangeesDeListe: import("@angular/core").Signal<{
1503
- titre: 28 | 36 | 44;
1504
- sousTitre: 40 | 32 | 48;
1505
- montant: 24 | 20 | 28;
1506
- }[]>;
1507
- protected readonly champsDeFormulaire: import("@angular/core").Signal<{
1508
- libelle: 28 | 36;
1509
- aide: boolean;
1510
- }[]>;
1511
- static ɵfac: i0.ɵɵFactoryDeclaration<StSkeleton, never>;
1512
- static ɵcmp: i0.ɵɵComponentDeclaration<StSkeleton, "st-skeleton", never, {
1513
- "variante": {
1514
- "alias": "variante";
1515
- "required": false;
1516
- "isSignal": true;
1517
- };
1518
- "lignes": {
1519
- "alias": "lignes";
1520
- "required": false;
1521
- "isSignal": true;
1522
- };
1523
- "colonnes": {
1524
- "alias": "colonnes";
1525
- "required": false;
1526
- "isSignal": true;
1527
- };
1528
- "anime": {
1529
- "alias": "anime";
1530
- "required": false;
1531
- "isSignal": true;
1532
- };
1533
- "puits": {
1534
- "alias": "puits";
1535
- "required": false;
1536
- "isSignal": true;
1537
- };
1538
- "entete": {
1539
- "alias": "entete";
1540
- "required": false;
1541
- "isSignal": true;
1542
- };
1543
- }, {}, never, never, true, never>;
1544
- }
1545
1379
  /**
1546
1380
  * ⚠️ Une variante dit quel FOND le bouton prend, pas ce qu'il signifie ; c'est
1547
1381
  * un axe distinct du ton, et il le reste. Mais les membres rouges s'appellent
@@ -1913,129 +1747,6 @@ export declare class StLink {
1913
1747
  };
1914
1748
  }, {}, never, ["*"], true, never>;
1915
1749
  }
1916
- /**
1917
- * Regroupe des actions liees.
1918
- *
1919
- * ⚠️ `role="group"` et NON `role="toolbar"` : une barre d'outils exige un
1920
- * `tabindex` glissant et la navigation par fleches. Annoncer « barre d'outils »
1921
- * sans en fournir le comportement desoriente plus qu'un groupe simple. Le
1922
- * motif complet viendra avec les primitives d'`@angular/aria`.
1923
- *
1924
- * `attache` : le groupe marque ses enfants du tronc (`stButton`, `stIconButton`,
1925
- * `stLink`) par leur position, et chaque enfant rend ses coins (`_groupe.scss`) ; un
1926
- * enfant survole ou focalise passe au-dessus de son voisin. Les enfants d'un groupe
1927
- * attache ont la MEME taille (avertissement en developpement), et le groupe passe a la
1928
- * ligne plutot que de deborder (1.4.10). Au-dela de cinq boutons attaches, un
1929
- * `st-segmented-control` ou un `st-select` dit mieux la chose.
1930
- *
1931
- * `plateau` : le groupe pose sur le fond du conteneur, rayon et filet discret (planche 9).
1932
- */
1933
- export declare class StButtonGroup {
1934
- /** Nom du groupe : sans lui, le regroupement n'apprend rien a l'oral. */
1935
- readonly etiquette: import("@angular/core").InputSignal<string>;
1936
- readonly orientation: import("@angular/core").InputSignal<"horizontale" | "verticale">;
1937
- /** Boutons jointifs : un seul trait entre deux, coins exterieurs seulement. */
1938
- readonly attache: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1939
- /** Le groupe pose sur un plateau (planche 9). */
1940
- readonly plateau: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1941
- private readonly boutons;
1942
- private readonly boutonsIcone;
1943
- private readonly liens;
1944
- private readonly taillesDesBoutons;
1945
- private readonly taillesDesBoutonsIcone;
1946
- constructor();
1947
- static ɵfac: i0.ɵɵFactoryDeclaration<StButtonGroup, never>;
1948
- static ɵcmp: i0.ɵɵComponentDeclaration<StButtonGroup, "st-button-group", never, {
1949
- "etiquette": {
1950
- "alias": "etiquette";
1951
- "required": true;
1952
- "isSignal": true;
1953
- };
1954
- "orientation": {
1955
- "alias": "orientation";
1956
- "required": false;
1957
- "isSignal": true;
1958
- };
1959
- "attache": {
1960
- "alias": "attache";
1961
- "required": false;
1962
- "isSignal": true;
1963
- };
1964
- "plateau": {
1965
- "alias": "plateau";
1966
- "required": false;
1967
- "isSignal": true;
1968
- };
1969
- }, {}, ["boutons", "boutonsIcone", "liens", "taillesDesBoutons", "taillesDesBoutonsIcone"], ["*"], true, never>;
1970
- }
1971
- /**
1972
- * `collee` (defaut, planche 3b) : une carte collee au bas de la zone de
1973
- * defilement, a 16 px du bord. `pied` (planche 13) : une rangee posee a la fin du
1974
- * formulaire, sans cadre, pour un formulaire qui tient dans l'ecran.
1975
- */
1976
- export type DispositionDActions = 'collee' | 'pied';
1977
- /**
1978
- * Barre d'actions d'un formulaire.
1979
- *
1980
- * ```html
1981
- * <form (submit)="envoyer()">
1982
- * …
1983
- * <st-form-actions>
1984
- * <button debut stButton type="button">Annuler</button>
1985
- * <st-icon aide nom="cercle-alerte-plein" ton="danger" />
1986
- * <span aide id="aide-envoi">3 erreurs a corriger</span>
1987
- * <button stButton type="button">Enregistrer le brouillon</button>
1988
- * <button stButton type="submit" variante="primaire" aria-describedby="aide-envoi">
1989
- * Valider le virement
1990
- * </button>
1991
- * </st-form-actions>
1992
- * </form>
1993
- * ```
1994
- *
1995
- * ⚠️ **`sticky`, JAMAIS `fixed`.** Un element fixe sort du flux : a 200 %
1996
- * d'echelle il recouvre les derniers champs, et dans une vue embarquee il se
1997
- * pose sous la barre du systeme. Collee, la barre reste dans le document —
1998
- * elle suit le formulaire, cede la place a son pied, et respecte la zone sure
1999
- * du bas de l'ecran (`env(safe-area-inset-bottom)`).
2000
- *
2001
- * ⚠️ **Le focus n'est jamais recouvert** (WCAG 2.4.11). Collee, la barre cache
2002
- * les derniers champs quand le navigateur y amene un arret de tabulation : elle
2003
- * MESURE sa hauteur et la pose en `scroll-padding-block-end` sur son conteneur
2004
- * de defilement, avec le contrat d'hote `--st-form-actions-hauteur` (D13, D16).
2005
- *
2006
- * ⚠️ **L'ordre du document est l'ordre visuel.** Rien n'est inverse par le
2007
- * style : l'action principale s'ecrit en dernier, elle se lit en dernier et se
2008
- * tabule en dernier. `debut` accueille ce qui part a l'oppose (un retour, une
2009
- * annulation) et `aide` la raison d'une action indisponible, a relier au bouton
2010
- * par `aria-describedby`. Dans un conteneur de moins de 480 px, la barre
2011
- * s'empile, l'action principale en bas, sous le pouce (planche 6).
2012
- *
2013
- * `data-collee` dit que la barre FLOTTE sur du contenu qui continue dessous :
2014
- * son ombre s'epaissit alors (une barre posee a la fin du formulaire garde
2015
- * l'ombre de la planche 3b).
2016
- *
2017
- * Une seule action principale par formulaire, et elle est un vrai
2018
- * `type="submit"` : Entree dans un champ l'envoie. Deux avertissent en
2019
- * developpement.
2020
- */
2021
- export declare class StFormActions {
2022
- readonly disposition: import("@angular/core").InputSignal<DispositionDActions>;
2023
- protected readonly collee: import("@angular/core").WritableSignal<boolean>;
2024
- constructor();
2025
- /**
2026
- * Observe la barre collee : si elle flotte (`data-collee`) et quelle hauteur
2027
- * elle recouvre. Rend la fonction qui defait tout.
2028
- */
2029
- private suivreLaBarre;
2030
- static ɵfac: i0.ɵɵFactoryDeclaration<StFormActions, never>;
2031
- static ɵcmp: i0.ɵɵComponentDeclaration<StFormActions, "st-form-actions", never, {
2032
- "disposition": {
2033
- "alias": "disposition";
2034
- "required": false;
2035
- "isSignal": true;
2036
- };
2037
- }, {}, never, ["[debut]", "[aide]", "*"], true, never>;
2038
- }
2039
1750
  /**
2040
1751
  * Un segment du groupe. Les textes sont deja traduits ; le libelle visible est le nom du segment,
2041
1752
  * que `etiquette` complete.
@@ -2211,556 +1922,6 @@ export declare class StSegmentedControl {
2211
1922
  "touch": "touch";
2212
1923
  }, never, never, true, never>;
2213
1924
  }
2214
- /**
2215
- * Valeur technique courte et copiable : identifiant de trace, reference
2216
- * d'operation, code d'erreur. Jamais un secret.
2217
- *
2218
- * ⚠️ Le `<code>` est lu par TOUT LE MONDE, technologies d'assistance comprises, precede
2219
- * de son etiquette (« Code : 7f3a-91c4 ») : la valeur se selectionne au curseur virtuel.
2220
- * Avant 0.9, un `<code aria-hidden>` doublait une copie masquee, et le curseur virtuel ne
2221
- * pouvait rien selectionner. `translate="no"` : une reference ne se traduit pas.
2222
- *
2223
- * ⚠️ Le bouton de copie porte un nom DISTINCT par valeur : « Copier : <etiquette> », ou
2224
- * « Copier : <valeur> » sans etiquette. Deux valeurs techniques d'une page ne proposent plus
2225
- * deux boutons « Copier » ; sans etiquette, « Copier : Code » se repetait a chaque valeur
2226
- * (revue E7). La valeur est courte par contrat : le nom reste lisible a l'oral.
2227
- *
2228
- * ⚠️ La confirmation de copie passe par une petite region vivante interne, et
2229
- * le NOM DU BOUTON NE CHANGE PAS. Le changer ferait annoncer un autre bouton que
2230
- * celui que l'utilisateur a sous le doigt.
2231
- *
2232
- * ⚠️ Le retour se VOIT aussi (03 §3.20, MV-7) : l'icone passe a la coche, en
2233
- * `succes`, pendant `rythme.tenue.confirmation`, d'un coup ; un refus laisse un
2234
- * message visible sous la valeur jusqu'a la tentative suivante. Meme regle que
2235
- * `st-copy-button`.
2236
- */
2237
- export declare class StCode {
2238
- private readonly document;
2239
- private readonly libelles;
2240
- readonly valeur: import("@angular/core").InputSignal<string>;
2241
- readonly copiable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2242
- /**
2243
- * Nature de la valeur (« Identifiant de trace », « Reference de l'operation »), lue avant
2244
- * elle. `null` : « Code », le mot generique du dictionnaire.
2245
- */
2246
- readonly etiquette: import("@angular/core").InputSignal<string | null>;
2247
- /**
2248
- * Nom du bouton de copie. `null` : « Copier : <etiquette> » (« Copier : Code » sans etiquette).
2249
- * Jamais la valeur : un secret (TOTP) devenait le nom du bouton, lu et journalise par les
2250
- * technologies d'assistance (audit du 2026-09-27, A-11).
2251
- */
2252
- readonly libelleCopier: import("@angular/core").InputSignal<string | null>;
2253
- readonly messageDeConfirmation: import("@angular/core").InputSignal<string | null>;
2254
- /**
2255
- * La valeur telle qu'elle s'affiche ET se copie : sans commande de direction, ce qu'on voit est
2256
- * ce qu'on colle (audit du 2026-09-27, A-2).
2257
- */
2258
- protected readonly valeurAffichee: import("@angular/core").Signal<string>;
2259
- protected readonly etiquetteLue: import("@angular/core").Signal<string>;
2260
- protected readonly libelleCopierLu: import("@angular/core").Signal<string>;
2261
- readonly copie: import("@angular/core").OutputEmitterRef<string>;
2262
- protected readonly annonce: AnnonceLocale;
2263
- protected readonly copieConfirmee: import("@angular/core").WritableSignal<boolean>;
2264
- protected readonly copieRefusee: import("@angular/core").WritableSignal<boolean>;
2265
- protected readonly iconeDeCopie: import("@angular/core").Signal<"iban" | "code" | "copie" | "accessibilite" | "appareils" | "arborescence" | "asterisque" | "badge-coche" | "banque" | "batiment" | "bifurcation" | "billets" | "billets-envoi" | "billets-pile" | "boite" | "boite-de-reception" | "bouclier" | "bouclier-alerte" | "bouclier-coche" | "bouclier-coeur" | "bouclier-croix" | "bouclier-moitie" | "bouclier-recherche" | "bouclier-utilisateur" | "boussole" | "bouton-curseur" | "bulle-question" | "cadenas" | "cadenas-horloge" | "cadenas-ouvert" | "cadre-pied" | "cadre-texte" | "calendrier" | "calendrier-evenement" | "calendrier-horloge" | "calendrier-jour" | "calques" | "carte-bancaire" | "carte-bancaire-barre" | "carte-bancaire-cadenas" | "carte-contact" | "carte-identite" | "cartes-empilees" | "case-cochee" | "casse" | "cercle" | "cercle-alerte" | "cercle-chevron-bas" | "cercle-coche" | "cercle-coche-ouvert" | "cercle-croix" | "cercle-info" | "cercle-moins" | "cercle-plus" | "cercle-question" | "certificat" | "chandelier" | "chargement" | "cheque" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "chevrons-droite" | "chevrons-haut-bas" | "cle" | "cloche" | "cloche-sonnerie" | "coche" | "code-qr" | "code-qr-scanner" | "coffre-fort" | "colonnes" | "connexion" | "contraste" | "corbeille" | "corbeille-croix" | "courriel" | "crayon" | "croix" | "curseur-clic" | "deconnexion" | "devise" | "disposition" | "dollar" | "dossier" | "dossier-barre" | "dossier-ouvert" | "double-coche" | "echange" | "eclair" | "empreinte-digitale" | "enregistrer" | "entree" | "envoyer" | "epaisseur-de-trait" | "epingle" | "etoile" | "euro" | "fichier" | "fichier-image" | "fichier-pdf" | "fichier-texte" | "filtre" | "filtre-barre" | "filtre-lignes" | "fleche-bas" | "fleche-bas-gauche" | "fleche-bas-ligne" | "fleche-droite" | "fleche-gauche" | "fleche-haut" | "fleche-haut-droite" | "fleche-haut-ligne" | "fleche-large-haut" | "fleches-gauche-droite" | "flocon" | "flou" | "formes" | "globe" | "graphique-anneau" | "graphique-barres" | "graphique-barres-cadre" | "graphique-camembert" | "graphique-ligne" | "graphique-lignes" | "grille" | "grille-lignes" | "hexagone" | "historique" | "horloge" | "horloge-fleche" | "imprimer" | "interdit" | "jalons" | "jauge" | "lien" | "lien-externe" | "lignes" | "lignes-crayon" | "liste" | "liste-coche" | "liste-controle" | "liste-numerotee" | "luminosite" | "lune" | "maillet" | "maison" | "marque-page" | "menu" | "menu-ouvert" | "message" | "minuteur" | "mise-au-point" | "mise-en-page-image" | "moins" | "nuage-barre" | "nuage-televerser" | "octogone-alerte" | "oeil" | "oeil-barre" | "panneau-gauche" | "parametres" | "parapluie" | "parchemin" | "pieces" | "plus" | "pointeur" | "points" | "points-verticaux" | "portefeuille" | "portefeuille-cartes" | "presse-papiers-coche" | "presse-papiers-horloge" | "priorite-haute" | "rafraichir" | "recherche" | "recherche-barre" | "recherche-texte" | "rectangle-points" | "recu" | "redemarrer" | "reglages" | "regle" | "reseau-jauge" | "rotation-arriere" | "routeur" | "sablier" | "sablier-bas" | "sablier-haut" | "sac-argent" | "sans-contact" | "serveur" | "soleil" | "style-de-trait" | "synchro" | "synchro-probleme" | "tableau" | "tableau-de-bord" | "tableau-de-bord-plus" | "tablette" | "tabulation" | "telecharger" | "telephone-mobile" | "televerser" | "tendance-baisse" | "tendance-hausse" | "terminal" | "tirelire" | "triangle-alerte" | "triangle-bas" | "triangle-haut" | "trombone" | "utilisateur" | "utilisateur-crayon" | "utilisateurs" | "wifi" | "wifi-barre">;
2266
- protected readonly messageDeRefus: import("@angular/core").Signal<string>;
2267
- private minuterieDeConfirmation;
2268
- constructor();
2269
- /**
2270
- * Le bouton n'apparait que si le navigateur sait copier. Sans presse-papiers,
2271
- * un bouton qui ne fait rien vaut moins que la selection manuelle, que la
2272
- * feuille garde possible (`user-select: all`).
2273
- */
2274
- protected readonly copiePossible: import("@angular/core").Signal<boolean>;
2275
- protected auClicDeCopie(): Promise<void>;
2276
- static ɵfac: i0.ɵɵFactoryDeclaration<StCode, never>;
2277
- static ɵcmp: i0.ɵɵComponentDeclaration<StCode, "st-code", never, {
2278
- "valeur": {
2279
- "alias": "valeur";
2280
- "required": true;
2281
- "isSignal": true;
2282
- };
2283
- "copiable": {
2284
- "alias": "copiable";
2285
- "required": false;
2286
- "isSignal": true;
2287
- };
2288
- "etiquette": {
2289
- "alias": "etiquette";
2290
- "required": false;
2291
- "isSignal": true;
2292
- };
2293
- "libelleCopier": {
2294
- "alias": "libelleCopier";
2295
- "required": false;
2296
- "isSignal": true;
2297
- };
2298
- "messageDeConfirmation": {
2299
- "alias": "messageDeConfirmation";
2300
- "required": false;
2301
- "isSignal": true;
2302
- };
2303
- }, {
2304
- "copie": "copie";
2305
- }, never, never, true, never>;
2306
- }
2307
- /**
2308
- * ⚠️ `primaire` et non « info » : les deux designaient deja la meme couleur
2309
- * d'accent, et rien ne distinguait un statut « info » d'un statut « primaire »
2310
- * ailleurs dans le socle.
2311
- */
2312
- export type TonDeStatut = TonSemantique;
2313
- /**
2314
- * `md` (defaut) : 24 px, libelle de 11 px, icone de 16 px au trait (planche 2 de Claude Design).
2315
- * `sm` : 18 px, icone de 14 px PLEINE, pour les tableaux denses (a cette taille, un trait ne
2316
- * se lit plus).
2317
- */
2318
- export type TailleDePastille = 'md' | 'sm';
2319
- /**
2320
- * `icone` (defaut) : la forme du statut devant le libelle. `point` : un point fixe de 8 px,
2321
- * reserve au TEMOIN DE LIAISON (« Passerelle active ») ; un statut metier garde sa forme.
2322
- */
2323
- export type VarianteDePastille = 'icone' | 'point';
2324
- /**
2325
- * `capitales` (defaut) : le libelle en capitales de 11 px, a l'interlettrage du micro-libelle
2326
- * (forme de la planche 4, DESIGN.md « label-sm uppercase »). `phrase` : la casse du texte, en
2327
- * 12/16 — 11 px est reserve aux micro-libelles en capitales (ADR 0005 D18, D38).
2328
- */
2329
- export type CasseDePastille = 'phrase' | 'capitales';
2330
- /**
2331
- * Pastille de statut.
2332
- *
2333
- * ⚠️ Le libelle est OBLIGATOIRE, et l'icone differe par sa FORME d'un ton a l'autre (coche,
2334
- * horloge, croix, cercle) : un statut porte par la seule couleur est illisible pour une personne
2335
- * daltonienne, a l'impression, et sous un theme a fort contraste. Sans icone fournie, la forme
2336
- * vient du ton (lot 206) : un appelant ne peut plus l'oublier.
2337
- *
2338
- * ⚠️ Aucun role ARIA, malgre le nom du composant : `role="status"` en ferait
2339
- * une region vivante, et une liste de vingt lignes ferait annoncer vingt
2340
- * statuts a chaque rendu.
2341
- *
2342
- * Rendu de reference : la forme de la planche 4 (icone du ton, filet du ton a 20 %, capitales)
2343
- * a la taille de la planche 2 (24 px, libelle 11/600, icone de 16 au trait), ADR web/starter 0005
2344
- * D23. Les capitales sont le DEFAUT (revue E8) : un libelle de 11 px en casse de phrase est
2345
- * refuse par D18 ; la casse de phrase passe a 12/16.
2346
- */
2347
- export declare class StStatusPill {
2348
- /** Code machine du statut : sert aux tests et aux selecteurs, jamais a l'affichage. */
2349
- readonly statut: import("@angular/core").InputSignal<string>;
2350
- /** Texte deja traduit par l'appelant : le socle ne traduit rien. */
2351
- readonly libelle: import("@angular/core").InputSignal<string>;
2352
- /**
2353
- * `null` : la forme du ton (neutre `cercle`, information et primaire `cercle-info`, succes
2354
- * `cercle-coche`, avertissement `triangle-alerte`, danger `cercle-croix`). Fournie, une forme
2355
- * plus precise : `horloge` (en attente), `octogone-alerte` (bloque), `interdit` (opposition).
2356
- */
2357
- readonly icone: import("@angular/core").InputSignal<Icone | null>;
2358
- readonly ton: import("@angular/core").InputSignal<TonSemantique>;
2359
- readonly taille: import("@angular/core").InputSignal<TailleDePastille>;
2360
- readonly variante: import("@angular/core").InputSignal<VarianteDePastille>;
2361
- readonly casse: import("@angular/core").InputSignal<CasseDePastille>;
2362
- /**
2363
- * L'icone dessinee : celle de l'appelant, ou la forme du ton. En `sm`, le jumeau PLEIN des
2364
- * qu'il existe (a 14 px, un contour ne se lit plus) ; en `md`, le trait, sauf si l'appelant
2365
- * demande lui-meme le plein (`{ nom, variante: 'plein' }`).
2366
- */
2367
- protected readonly iconeDessinee: import("@angular/core").Signal<Icone>;
2368
- protected readonly tailleDIcone: import("@angular/core").Signal<TailleDIcone>;
2369
- static ɵfac: i0.ɵɵFactoryDeclaration<StStatusPill, never>;
2370
- static ɵcmp: i0.ɵɵComponentDeclaration<StStatusPill, "st-status-pill", never, {
2371
- "statut": {
2372
- "alias": "statut";
2373
- "required": true;
2374
- "isSignal": true;
2375
- };
2376
- "libelle": {
2377
- "alias": "libelle";
2378
- "required": true;
2379
- "isSignal": true;
2380
- };
2381
- "icone": {
2382
- "alias": "icone";
2383
- "required": false;
2384
- "isSignal": true;
2385
- };
2386
- "ton": {
2387
- "alias": "ton";
2388
- "required": false;
2389
- "isSignal": true;
2390
- };
2391
- "taille": {
2392
- "alias": "taille";
2393
- "required": false;
2394
- "isSignal": true;
2395
- };
2396
- "variante": {
2397
- "alias": "variante";
2398
- "required": false;
2399
- "isSignal": true;
2400
- };
2401
- "casse": {
2402
- "alias": "casse";
2403
- "required": false;
2404
- "isSignal": true;
2405
- };
2406
- }, {}, never, never, true, never>;
2407
- }
2408
- /**
2409
- * Ou le badge se pose sur son porteur :
2410
- * - `haut-fin` (defaut) : centre sur le coin superieur de fin (droit en francais), a 6 px du bord ;
2411
- * - `haut-debut` : le coin superieur de debut ;
2412
- * - `en-ligne` : dans le flux, apres le libelle (entree de navigation, onglet).
2413
- */
2414
- export type PositionDeBadge = 'haut-fin' | 'haut-debut' | 'en-ligne';
2415
- /**
2416
- * Porteur d'un `st-badge` : la cloche, l'entree de navigation, l'onglet qui compte.
2417
- *
2418
- * ```html
2419
- * <span stBadgeAncre etiquetteDuCompte=", 3 non lues">
2420
- * <st-icon nom="cloche" /> Notifications
2421
- * <st-badge [valeur]="3" />
2422
- * </span>
2423
- * ```
2424
- *
2425
- * ⚠️ Elle remplace la classe `st-badge-ancre` que la 0.8.0 exigeait et qu'aucune feuille ne
2426
- * definissait (A1099) : le badge restait dans le flux, loin de son porteur.
2427
- *
2428
- * Le badge est pose en ABSOLU dans son porteur : il apparait, grandit de « 3 » a « 99+ » et
2429
- * disparait sans jamais deplacer le porteur ni la page (aucun decalage de mise en page). Un seul
2430
- * decalage pour tous les badges : leur CENTRE a 6 px du coin, quelle que soit leur largeur.
2431
- *
2432
- * ⚠️ Le badge est MUET (un « 5 » flottant n'apprend rien) : le compte se dit par
2433
- * `etiquetteDuCompte`, texte masque rendu DANS le porteur, donc dans son nom accessible
2434
- * (« Notifications, 3 non lues »). Un porteur nomme par `aria-label` (un `stIconButton`) ignore
2435
- * son contenu : le compte va alors dans son `etiquette`.
2436
- */
2437
- export declare class StBadgeAncre {
2438
- /** La position du badge ; l'attribut nu vaut `haut-fin`. */
2439
- readonly position: import("@angular/core").InputSignalWithTransform<PositionDeBadge, "" | PositionDeBadge>;
2440
- /** Texte lu du compte (« , 3 non lues »), deja traduit par l'appelant ; `null` : aucun. */
2441
- readonly etiquetteDuCompte: import("@angular/core").InputSignal<string | null>;
2442
- constructor();
2443
- static ɵfac: i0.ɵɵFactoryDeclaration<StBadgeAncre, never>;
2444
- static ɵdir: i0.ɵɵDirectiveDeclaration<StBadgeAncre, "[stBadgeAncre]", never, {
2445
- "position": {
2446
- "alias": "stBadgeAncre";
2447
- "required": false;
2448
- "isSignal": true;
2449
- };
2450
- "etiquetteDuCompte": {
2451
- "alias": "etiquetteDuCompte";
2452
- "required": false;
2453
- "isSignal": true;
2454
- };
2455
- }, {}, never, never, true, never>;
2456
- }
2457
- export type TonDeBadge = TonSemantique;
2458
- /**
2459
- * Pastille de comptage superposee a un autre element (planche 2 de Claude Design, lot 206) :
2460
- * disque de 20 px, gelule qui s'allonge sans changer de hauteur, « 99+ » au-dela du plafond,
2461
- * point de 10 px a lisere de surface.
2462
- *
2463
- * ⚠️ Le chiffre est TOUJOURS muet. Un « 5 » flottant, lu hors contexte,
2464
- * n'apprend rien. Le compte doit entrer dans le nom accessible de l'element
2465
- * porteur : « Notifications, 5 non lues », par `etiquetteDuCompte` de l'ancre
2466
- * (`[stBadgeAncre]`) ou compose par l'appelant.
2467
- *
2468
- * Pose dans un porteur `[stBadgeAncre]`, il s'y superpose ; seul, il reste dans le flux.
2469
- */
2470
- export declare class StBadge {
2471
- protected readonly ancre: StBadgeAncre | null;
2472
- readonly valeur: import("@angular/core").InputSignal<string | number | null>;
2473
- readonly max: import("@angular/core").InputSignalWithTransform<number, unknown>;
2474
- readonly ton: import("@angular/core").InputSignal<TonSemantique>;
2475
- /** Point seul, sans chiffre : signale une nouveaute sans la quantifier. */
2476
- readonly point: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2477
- protected readonly texte: import("@angular/core").Signal<string>;
2478
- /** Rien a montrer : ni chiffre, ni point. La place reste reservee, rien ne saute. */
2479
- protected readonly vide: import("@angular/core").Signal<boolean>;
2480
- protected readonly etiquetteDuCompte: import("@angular/core").Signal<string | null>;
2481
- static ɵfac: i0.ɵɵFactoryDeclaration<StBadge, never>;
2482
- static ɵcmp: i0.ɵɵComponentDeclaration<StBadge, "st-badge", never, {
2483
- "valeur": {
2484
- "alias": "valeur";
2485
- "required": false;
2486
- "isSignal": true;
2487
- };
2488
- "max": {
2489
- "alias": "max";
2490
- "required": false;
2491
- "isSignal": true;
2492
- };
2493
- "ton": {
2494
- "alias": "ton";
2495
- "required": false;
2496
- "isSignal": true;
2497
- };
2498
- "point": {
2499
- "alias": "point";
2500
- "required": false;
2501
- "isSignal": true;
2502
- };
2503
- }, {}, never, never, true, never>;
2504
- }
2505
- /** Le ton de l'etiquette : papier teinte du ton (`discrete`) ou aplat (`pleine`). */
2506
- export type TonDEtiquette = Exclude<Ton, 'discret' | 'inverse'>;
2507
- /**
2508
- * `md` (defaut) : 22 px, 4 x 10 de marge (planches 10 a 12) ; `sm` : 18 px, 2 x 8 (planches 2,
2509
- * 6 et 8), pour une puce de code ou une legende. Le retrait n'existe qu'en `md`.
2510
- */
2511
- export type TailleDEtiquette = 'md' | 'sm';
2512
- /**
2513
- * `discrete` : texte du ton sur son papier teinte ; `pleine` : texte clair sur l'aplat du ton ;
2514
- * `attenuee` : le papier attenue de la marque, plus soutenu que le discret (surtitre en pastille
2515
- * d'un en-tete, planche 2 ; ADR 0005 D44). Seul le ton `primaire` a un papier attenue : un autre
2516
- * ton garde son papier discret.
2517
- */
2518
- export type VarianteDEtiquette = 'discrete' | 'pleine' | 'attenuee';
2519
- /** `mono` : une puce de code ou de reference, en JetBrains Mono (planches 2, 3 et 9). */
2520
- export type PoliceDEtiquette = 'texte' | 'mono';
2521
- /**
2522
- * `phrase` (defaut) : la casse du texte (une reference de code ne se met pas en capitales), en
2523
- * 12/16 ; `capitales` : le micro-libelle de 11 px. 11 px est reserve aux capitales (ADR 0005 D18,
2524
- * D38 ; revue E8).
2525
- */
2526
- export type CasseDEtiquette = 'phrase' | 'capitales';
2527
- /**
2528
- * Etiquette : une puce non interactive (categorie, reference, legende), eventuellement
2529
- * retirable dans un formulaire. Un filtre actif est un `st-filter-chip`.
2530
- *
2531
- * Rendu de reference : les puces des planches 2 a 16 de Claude Design (lot 206) — libelle
2532
- * 11/600 au micro-interlettrage en capitales, 12/16 en casse de phrase (D18), coins de 4 px (la
2533
- * pilule de quelques planches est un ecart assume), point ou icone de tete, police mono.
2534
- *
2535
- * ⚠️ Le retrait DEPLACE LE FOCUS. Sans cela, le bouton disparait sous le doigt de
2536
- * l'utilisateur clavier, le focus retombe sur le corps du document, et la navigation repart du
2537
- * haut de la page. C'est l'un des defauts d'accessibilite les plus frequents des listes
2538
- * d'etiquettes. Le focus va au bouton de retrait de la prochaine etiquette RETIRABLE, puis de la
2539
- * precedente, jamais a un autre bouton de la page ; a defaut, au groupe, ou au premier ancetre
2540
- * focalisable par script. Seul le MOMENT change avec le groupe (D80) : la liste de
2541
- * `[stGroupeDEtiquettes]` le pose avant l'emission ; `st-tag-group`, dont l'application tient les
2542
- * elements, apres leur retrait reel.
2543
- *
2544
- * ⚠️ Le role `listitem` n'est pose que dans la liste de `[stGroupeDEtiquettes]`, et PARTAGE : hors
2545
- * groupe, le role que l'appelant a ecrit (`<st-tag role="listitem">` dans sa propre liste) reste
2546
- * (revue E8 ; une liaison d'hote l'effacait). Dans le `li` de `st-tag-group`, aucun.
2547
- */
2548
- export declare class StTag {
2549
- private readonly element;
2550
- private readonly libelles;
2551
- private readonly groupe;
2552
- /** Le role du groupe, sauf role ecrit par l'appelant ; hors groupe, le sien. */
2553
- private readonly role;
2554
- readonly libelle: import("@angular/core").InputSignal<string>;
2555
- readonly supprimable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2556
- readonly ton: import("@angular/core").InputSignal<TonDEtiquette>;
2557
- readonly taille: import("@angular/core").InputSignal<TailleDEtiquette>;
2558
- readonly variante: import("@angular/core").InputSignal<VarianteDEtiquette>;
2559
- readonly police: import("@angular/core").InputSignal<PoliceDEtiquette>;
2560
- readonly casse: import("@angular/core").InputSignal<CasseDEtiquette>;
2561
- /** Un point de 6 px a l'encre du ton, devant le libelle (planches 2, 11 et 12). */
2562
- readonly point: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2563
- /** Une icone de tete, decorative : le libelle porte le sens. */
2564
- readonly iconeAvant: import("@angular/core").InputSignal<Icone | null>;
2565
- readonly supprime: import("@angular/core").OutputEmitterRef<void>;
2566
- constructor();
2567
- /** Le retrait n'existe qu'en `md` : a 18 px, sa cible tomberait sous 24 px. */
2568
- protected readonly retirable: import("@angular/core").Signal<boolean>;
2569
- /**
2570
- * Le nom du bouton de retrait : `LibellesUi.retirerLEtiquette(libelle)`, qui laisse la langue
2571
- * ordonner les mots (« Paris retire » contre « Remove Paris »).
2572
- */
2573
- protected readonly libelleDeSuppression: import("@angular/core").Signal<string>;
2574
- /**
2575
- * Le libelle est souvent une donnee (une ville, un courriel) : sans commande de direction, et
2576
- * isole (`<bdi>`), il ne reordonne ni l'etiquette ni ce qui l'entoure (audit du 2026-09-26, S-1).
2577
- */
2578
- protected readonly libelleAffiche: import("@angular/core").Signal<string>;
2579
- protected auRetrait(): void;
2580
- /**
2581
- * `Suppr` et `Retour arriere` sur le bouton retirent aussi l'etiquette (APG) : la touche que
2582
- * l'on presse naturellement pour effacer une valeur.
2583
- */
2584
- protected auClavier(evenement: Event): void;
2585
- /**
2586
- * Le bouton de retrait de la prochaine etiquette soeur RETIRABLE (une puce sans retrait, ou un
2587
- * autre element, est sautee), a defaut de la precedente. Seules les etiquettes soeurs comptent :
2588
- * un autre bouton voisin n'est pas la suite de la liste.
2589
- */
2590
- private voisineRetirable;
2591
- /** Hors groupe, a defaut de voisine : le premier ancetre focalisable par script. */
2592
- private ancetreFocalisable;
2593
- static ɵfac: i0.ɵɵFactoryDeclaration<StTag, never>;
2594
- static ɵcmp: i0.ɵɵComponentDeclaration<StTag, "st-tag", never, {
2595
- "libelle": {
2596
- "alias": "libelle";
2597
- "required": true;
2598
- "isSignal": true;
2599
- };
2600
- "supprimable": {
2601
- "alias": "supprimable";
2602
- "required": false;
2603
- "isSignal": true;
2604
- };
2605
- "ton": {
2606
- "alias": "ton";
2607
- "required": false;
2608
- "isSignal": true;
2609
- };
2610
- "taille": {
2611
- "alias": "taille";
2612
- "required": false;
2613
- "isSignal": true;
2614
- };
2615
- "variante": {
2616
- "alias": "variante";
2617
- "required": false;
2618
- "isSignal": true;
2619
- };
2620
- "police": {
2621
- "alias": "police";
2622
- "required": false;
2623
- "isSignal": true;
2624
- };
2625
- "casse": {
2626
- "alias": "casse";
2627
- "required": false;
2628
- "isSignal": true;
2629
- };
2630
- "point": {
2631
- "alias": "point";
2632
- "required": false;
2633
- "isSignal": true;
2634
- };
2635
- "iconeAvant": {
2636
- "alias": "iconeAvant";
2637
- "required": false;
2638
- "isSignal": true;
2639
- };
2640
- }, {
2641
- "supprime": "supprime";
2642
- }, never, never, true, never>;
2643
- }
2644
- /**
2645
- * Groupe d'etiquettes retirables : une liste (`role="list"`, chaque `st-tag` en `listitem`) et
2646
- * UNE region polie qui dit ce qui vient d'etre retire (« Paris retire »).
2647
- *
2648
- * ```html
2649
- * <div stGroupeDEtiquettes etiquette="Villes choisies">
2650
- * @for (ville of villes(); track ville) {
2651
- * <st-tag [libelle]="ville" supprimable (supprime)="retirer(ville)" />
2652
- * }
2653
- * </div>
2654
- * ```
2655
- *
2656
- * ⚠️ La region vit dans le GROUPE, et non dans l'etiquette : l'etiquette retiree quitte le
2657
- * document avant que son annonce n'arrive (`rythme.delai.annonce`), et une region detruite ne
2658
- * dit plus rien. Elle est hors de la liste : une liste ne contient que ses elements.
2659
- *
2660
- * ⚠️ La liste est focalisable par script (`tabindex="-1"`, hors de l'ordre de tabulation) : la
2661
- * DERNIERE etiquette retiree y pose le focus, qui sinon retombait sur le corps du document.
2662
- *
2663
- * Les etiquettes projetees recoivent ces crochets par un jeton (D80, partage avec `st-tag-group`) :
2664
- * chacune y est un `listitem`, et son retrait pose le focus et s'annonce AVANT son emission.
2665
- * Des etiquettes decrites en donnees, que l'application retire elle-meme, vont dans
2666
- * `st-tag-group`.
2667
- */
2668
- export declare class StGroupeDEtiquettes {
2669
- private readonly libelles;
2670
- /** Nom de la liste, lu en y entrant (« Villes choisies ») ; `null` : aucun. */
2671
- readonly etiquette: import("@angular/core").InputSignal<string | null>;
2672
- protected readonly annonce: AnnonceLocale;
2673
- private readonly liste;
2674
- /** Appele par une etiquette du groupe au moment ou elle est retiree. */
2675
- annoncerLeRetrait(libelle: string): void;
2676
- /** Appele par une etiquette retiree qui n'a plus de voisine retirable ou poser le focus. */
2677
- recevoirLeFocus(): void;
2678
- static ɵfac: i0.ɵɵFactoryDeclaration<StGroupeDEtiquettes, never>;
2679
- static ɵcmp: i0.ɵɵComponentDeclaration<StGroupeDEtiquettes, "[stGroupeDEtiquettes]", never, {
2680
- "etiquette": {
2681
- "alias": "etiquette";
2682
- "required": false;
2683
- "isSignal": true;
2684
- };
2685
- }, {}, never, ["*"], true, never>;
2686
- }
2687
- /** Une etiquette du groupe, decrite en donnees. */
2688
- export interface EtiquetteDeGroupe {
2689
- /** Cle stable et unique dans le groupe : c'est elle que `supprime` emet. */
2690
- readonly valeur: string;
2691
- readonly libelle: string;
2692
- readonly ton?: TonDEtiquette;
2693
- /** Offre le bouton de retrait, nomme par `retirerLEtiquette` (« Retirer Paris »). */
2694
- readonly supprimable?: boolean;
2695
- }
2696
- /**
2697
- * Le champ qui contient un `st-tag-group` (`st-tag-input`) : le groupe annonce ses retraits dans
2698
- * la region du champ, la seule du champ (D81), et rend le focus au champ quand plus aucune
2699
- * etiquette retirable ne reste.
2700
- */
2701
- export interface ChampAEtiquettes {
2702
- annoncer(message: string): void;
2703
- recevoirLeFocus(): void;
2704
- }
2705
- export declare const ST_CHAMP_A_ETIQUETTES: InjectionToken<ChampAEtiquettes>;
2706
- /**
2707
- * Groupe d'etiquettes decrites en donnees : une liste nommee, `ul > li > st-tag` (lot 252, ADR
2708
- * 0005 D80).
2709
- *
2710
- * ```html
2711
- * <st-tag-group etiquette="Villes choisies" [elements]="villes()" (supprime)="retirer($event)" />
2712
- * ```
2713
- *
2714
- * La liste est nommee SANS compte : le lecteur d'ecran dit deja le nombre d'elements en y
2715
- * entrant. Des etiquettes projetees vont dans `[stGroupeDEtiquettes]`.
2716
- *
2717
- * ⚠️ **Le focus suit le retrait REEL.** `elements` appartient a l'application : le groupe emet
2718
- * `supprime(valeur)` et attend que la valeur ait quitte la liste (apres un aller-retour serveur
2719
- * compris) pour rendre le focus a l'etiquette retirable suivante, sinon a la precedente, sinon a
2720
- * la liste (focalisable par script) — ou au champ qui contient le groupe. Focaliser a la demande
2721
- * visait une etiquette encore presente, puis le document quand elle disparaissait (A1160). Un
2722
- * focus parti ailleurs pendant l'attente n'est jamais repris. L'annonce (« Paris retire ») part
2723
- * au meme moment : elle dit ce qui a quitte la liste, et non ce qui a ete demande.
2724
- */
2725
- export declare class StTagGroup {
2726
- private readonly libelles;
2727
- private readonly document;
2728
- private readonly injecteur;
2729
- protected readonly champ: ChampAEtiquettes | null;
2730
- /** Nom de la liste, lu en y entrant (« Villes choisies »). */
2731
- readonly etiquette: import("@angular/core").InputSignal<string>;
2732
- /** Les etiquettes, dans l'ordre. */
2733
- readonly elements: import("@angular/core").InputSignal<readonly EtiquetteDeGroupe[]>;
2734
- /** La `valeur` de l'etiquette dont la personne demande le retrait. */
2735
- readonly supprime: import("@angular/core").OutputEmitterRef<string>;
2736
- protected readonly annonce: AnnonceLocale;
2737
- private readonly liste;
2738
- private enAttente;
2739
- constructor();
2740
- protected retirer(element: EtiquetteDeGroupe, indice: number): void;
2741
- private annoncer;
2742
- /**
2743
- * Seulement si le focus a ete perdu avec l'etiquette, ou s'il est encore sur ce qui a demande le
2744
- * retrait : la touche suivante (Espace, Entree) activerait sinon la voisine et retirerait une
2745
- * seconde etiquette.
2746
- */
2747
- private rendreLeFocus;
2748
- static ɵfac: i0.ɵɵFactoryDeclaration<StTagGroup, never>;
2749
- static ɵcmp: i0.ɵɵComponentDeclaration<StTagGroup, "st-tag-group", never, {
2750
- "etiquette": {
2751
- "alias": "etiquette";
2752
- "required": true;
2753
- "isSignal": true;
2754
- };
2755
- "elements": {
2756
- "alias": "elements";
2757
- "required": false;
2758
- "isSignal": true;
2759
- };
2760
- }, {
2761
- "supprime": "supprime";
2762
- }, never, never, true, never>;
2763
- }
2764
1925
  /** xs 24, sm 32, md 40 (defaut), lg 64, xl 96 px : l'echelle d'espacement du socle. */
2765
1926
  export type TailleDAvatar = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
2766
1927
  export type FormeDAvatar = 'cercle' | 'carre';
@@ -3321,177 +2482,39 @@ export declare class StCard {
3321
2482
  * La carte ne devient pas un controle : le nom accessible reste celui du lien,
3322
2483
  * le clavier n'a rien de plus a apprendre, et la zone cliquable couvre la carte
3323
2484
  * par un pseudo-element du lien. La carte, elle, se dit interactive
3324
- * (`data-interactive` : survol, appui) et porte l'anneau quand le lien a le focus
3325
- * visible.
3326
- *
3327
- * ⚠️ Le pseudo-element vit dans `@starterlib/ui/styles/couches.css`, la feuille
3328
- * que l'hote charge deja : une feuille de composant ne peut pas regler un
3329
- * element projete sans percer l'encapsulation (`::ng-deep`, deprecie). Sans
3330
- * cette feuille, le lien reste un lien, seulement pas etendu.
3331
- *
3332
- * ⚠️ L'hote doit rester en `position: static` : le pseudo-element se cale sur
3333
- * le premier ancetre positionne, qui doit etre la carte. `a`, `a[stLink]` et un
3334
- * `button` natif le sont ; `button[stButton]` et `button[stIconButton]` NON (leur
3335
- * hote ancre l'indicateur de chargement) : la directive y est refusee, la carte
3336
- * ne se dit pas interactive, et un avertissement le signale en developpement.
3337
- * Un hote positionne par une feuille d'application est traite de meme apres le
3338
- * premier rendu.
3339
- *
3340
- * Les AUTRES controles de la carte passent au-dessus de la zone etendue par une
3341
- * regle de `couches.css` (`position: relative; z-index: 1`, sans specificite :
3342
- * une position ecrite par l'application gagne) ; en developpement, la directive
3343
- * verifie au premier focus que chacun reste atteignable au pointeur.
3344
- */
3345
- export declare class StLienEtendu {
3346
- private readonly element;
3347
- private readonly carte;
3348
- protected inscription: import("@starterlib/ui").InscriptionDeLienEtendu | undefined;
3349
- protected readonly actif: import("@angular/core").WritableSignal<boolean>;
3350
- private verifie;
3351
- constructor();
3352
- protected signalerLeFocus(): void;
3353
- /** Un hote positionne par une feuille d'application : meme refus, apres rendu. */
3354
- private refuserUnHotePositionne;
3355
- static ɵfac: i0.ɵɵFactoryDeclaration<StLienEtendu, never>;
3356
- static ɵdir: i0.ɵɵDirectiveDeclaration<StLienEtendu, "a[stLienEtendu], button[stLienEtendu]", never, {}, {}, never, never, true, never>;
3357
- }
3358
- export type EspacementDeSection = 'aucun' | 'sm' | 'md' | 'lg';
3359
- /**
3360
- * Regroupement de contenu, expose comme REPERE de navigation quand il porte un
3361
- * nom, pose en ATTRIBUT sur une vraie balise `section`.
3362
- *
3363
- * ```html
3364
- * <section stSection titreDe="titre-operations" surtitre="Compte courant">
3365
- * <h2 stHeading titre id="titre-operations">Operations recentes</h2>
3366
- * <button stButton fin type="button">Exporter</button>
3367
- * …
3368
- * </section>
3369
- * ```
3370
- *
3371
- * ⚠️ Le point qui decide de tout : une region n'est exposee comme repere que si
3372
- * elle a un NOM ACCESSIBLE. Sans nom, la plupart des lecteurs d'ecran
3373
- * l'ignorent — la balise est la, le repere n'existe pas, et rien ne le signale.
3374
- * Une `section` native sans nom reste un simple bloc, ce qu'elle est
3375
- * reellement : son role de region vient de son nom, sans rien poser.
3376
- *
3377
- * Deux facons de la nommer, et la seconde vaut mieux : `titreDe` pointe le
3378
- * titre deja affiche, ce qui garde un seul texte a traduire et a maintenir. On
3379
- * nomme une section quand une personne au lecteur d'ecran voudrait y SAUTER ;
3380
- * au-dela de cinq reperes nommes par page, on regroupe.
3381
- *
3382
- * L'en-tete (planches 11 a 14) est facultatif : surtitre, titre projete
3383
- * (`[titre]`), description, et ce qui se place au bout (`[fin]` : une puce, une
3384
- * action). Sans aucun des quatre, il n'existe pas.
3385
- */
3386
- export declare class StSection {
3387
- /** Nom accessible ecrit a la main. A preferer `titreDe` quand un titre existe. */
3388
- readonly etiquette: import("@angular/core").InputSignal<string | null>;
3389
- /** Identifiant du titre qui nomme la section. Prime sur `etiquette`. */
3390
- readonly titreDe: import("@angular/core").InputSignal<string | null>;
3391
- /** Marge apres la section : 0, 16, 24 (defaut) ou 32 px. */
3392
- readonly espacement: import("@angular/core").InputSignal<EspacementDeSection>;
3393
- /** Petites capitales au-dessus du titre (planche 11). */
3394
- readonly surtitre: import("@angular/core").InputSignal<string | null>;
3395
- /** Une phrase sous le titre (planches 13 et 14). */
3396
- readonly description: import("@angular/core").InputSignal<string | null>;
3397
- private readonly element;
3398
- /**
3399
- * ⚠️ `aria-labelledby` et `aria-label` sont PARTAGES avec l'appelant
3400
- * (`noyau/attributs-partages`) : le composant ne pose que ce que ses entrees disent, et garde
3401
- * ce que l'appelant a ecrit OU LIE (`[attr.aria-labelledby]="idTitre"`). Une liaison d'hote
3402
- * effacait le nom lie, et la section cessait d'etre un repere sans rien dire (revue E7).
3403
- */
3404
- private readonly nommeePar;
3405
- private readonly nom;
3406
- constructor();
3407
- static ɵfac: i0.ɵɵFactoryDeclaration<StSection, never>;
3408
- static ɵcmp: i0.ɵɵComponentDeclaration<StSection, "section[stSection]", never, {
3409
- "etiquette": {
3410
- "alias": "etiquette";
3411
- "required": false;
3412
- "isSignal": true;
3413
- };
3414
- "titreDe": {
3415
- "alias": "titreDe";
3416
- "required": false;
3417
- "isSignal": true;
3418
- };
3419
- "espacement": {
3420
- "alias": "espacement";
3421
- "required": false;
3422
- "isSignal": true;
3423
- };
3424
- "surtitre": {
3425
- "alias": "surtitre";
3426
- "required": false;
3427
- "isSignal": true;
3428
- };
3429
- "description": {
3430
- "alias": "description";
3431
- "required": false;
3432
- "isSignal": true;
3433
- };
3434
- }, {}, never, ["[titre]", "[fin]", "*"], true, never>;
3435
- }
3436
- export type OrientationDeSeparateur = 'horizontale' | 'verticale';
3437
- /**
3438
- * `filet` (defaut) : la bordure decorative #d7dadf ; `tonale` : le trait de la surface du
3439
- * conteneur haut #e3e8f4, pose dans un panneau teinte (planches 10, 11 et 13). Un separateur
3440
- * porteur de sens prend la bordure forte (3,78:1) quelle que soit la variante.
3441
- */
3442
- export type VarianteDeSeparateur = 'filet' | 'tonale';
3443
- /**
3444
- * Trait de separation.
3445
- *
3446
- * ⚠️ **Decoratif par defaut, et c'est le bon defaut.** Un `<hr>` porte le role
3447
- * `separator` de facon implicite, que les lecteurs d'ecran annoncent. Sur une
3448
- * page qui en compte huit — ce qui est courant dans une liste de reglages — la
3449
- * lecture est ponctuee de huit « separateur » qui n'apprennent rien.
3450
- *
3451
- * Le role ne se pose que lorsque le trait porte vraiment du sens : il separe
3452
- * alors deux GROUPES que rien d'autre ne distingue, comme les sections d'un
3453
- * menu. Regle de tri : si le retirer ne retire aucune information, il est
3454
- * decoratif. Decoratif, il porte `aria-hidden` SEUL : un `role="none"` en plus
3455
- * ne disait rien de plus a un element deja retire de l'arbre.
2485
+ * (`data-interactive` : survol, appui) et porte l'anneau quand le lien a le focus
2486
+ * visible.
3456
2487
  *
3457
- * Porteur de sens, il prend la bordure FORTE (3:1, WCAG 1.4.11) : un trait qui
3458
- * separe deux groupes doit se voir. Marges : `--st-separateur-marge` (catalogue).
2488
+ * ⚠️ Le pseudo-element vit dans `@starterlib/ui/styles/couches.css`, la feuille
2489
+ * que l'hote charge deja : une feuille de composant ne peut pas regler un
2490
+ * element projete sans percer l'encapsulation (`::ng-deep`, deprecie). Sans
2491
+ * cette feuille, le lien reste un lien, seulement pas etendu.
3459
2492
  *
3460
- * Avec texte (lot 214) : un mot ou une date courte projetes (« ou », « Aujourd'hui ») se centrent
3461
- * entre deux traits, en style `legende` a l'encre attenuee. Le TEXTE est lu a sa place dans le
3462
- * flux ; les traits, dessines par la feuille, ne le sont pas. Ni `separator` (ses enfants sont
3463
- * presentationnels : le mot serait tu), ni `aria-hidden` (il le retirerait). Horizontal seulement.
2493
+ * ⚠️ L'hote doit rester en `position: static` : le pseudo-element se cale sur
2494
+ * le premier ancetre positionne, qui doit etre la carte. `a`, `a[stLink]` et un
2495
+ * `button` natif le sont ; `button[stButton]` et `button[stIconButton]` NON (leur
2496
+ * hote ancre l'indicateur de chargement) : la directive y est refusee, la carte
2497
+ * ne se dit pas interactive, et un avertissement le signale en developpement.
2498
+ * Un hote positionne par une feuille d'application est traite de meme apres le
2499
+ * premier rendu.
3464
2500
  *
3465
- * ```html
3466
- * <st-divider>ou</st-divider>
3467
- * ```
2501
+ * Les AUTRES controles de la carte passent au-dessus de la zone etendue par une
2502
+ * regle de `couches.css` (`position: relative; z-index: 1`, sans specificite :
2503
+ * une position ecrite par l'application gagne) ; en developpement, la directive
2504
+ * verifie au premier focus que chacun reste atteignable au pointeur.
3468
2505
  */
3469
- export declare class StDivider {
3470
- readonly orientation: import("@angular/core").InputSignal<OrientationDeSeparateur>;
3471
- readonly variante: import("@angular/core").InputSignal<VarianteDeSeparateur>;
3472
- /** Le trait separe deux groupes distincts, et doit donc etre annonce. */
3473
- readonly porteurDeSens: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3474
- /** Un texte est-il projete ? Releve au rendu : un contenu projete echappe aux requetes. */
3475
- protected readonly avecTexte: import("@angular/core").WritableSignal<boolean>;
2506
+ export declare class StLienEtendu {
2507
+ private readonly element;
2508
+ private readonly carte;
2509
+ protected inscription: import("@starterlib/ui").InscriptionDeLienEtendu | undefined;
2510
+ protected readonly actif: import("@angular/core").WritableSignal<boolean>;
2511
+ private verifie;
3476
2512
  constructor();
3477
- static ɵfac: i0.ɵɵFactoryDeclaration<StDivider, never>;
3478
- static ɵcmp: i0.ɵɵComponentDeclaration<StDivider, "st-divider", never, {
3479
- "orientation": {
3480
- "alias": "orientation";
3481
- "required": false;
3482
- "isSignal": true;
3483
- };
3484
- "variante": {
3485
- "alias": "variante";
3486
- "required": false;
3487
- "isSignal": true;
3488
- };
3489
- "porteurDeSens": {
3490
- "alias": "porteurDeSens";
3491
- "required": false;
3492
- "isSignal": true;
3493
- };
3494
- }, {}, never, ["*"], true, never>;
2513
+ protected signalerLeFocus(): void;
2514
+ /** Un hote positionne par une feuille d'application : meme refus, apres rendu. */
2515
+ private refuserUnHotePositionne;
2516
+ static ɵfac: i0.ɵɵFactoryDeclaration<StLienEtendu, never>;
2517
+ static ɵdir: i0.ɵɵDirectiveDeclaration<StLienEtendu, "a[stLienEtendu], button[stLienEtendu]", never, {}, {}, never, never, true, never>;
3495
2518
  }
3496
2519
  /**
3497
2520
  * Taille du titre de page : `3xl` (32 px, 24 sous `md`) par defaut ; `4xl` pour
@@ -4201,294 +3224,6 @@ export declare class StAuthShell {
4201
3224
  static ɵfac: i0.ɵɵFactoryDeclaration<StAuthShell, never>;
4202
3225
  static ɵcmp: i0.ɵɵComponentDeclaration<StAuthShell, "st-auth-shell", never, {}, {}, never, ["[entete]", "[banniere]", "*", "[pied]", "[version]"], true, never>;
4203
3226
  }
4204
- /** `clair` : surface a liseret primaire. `marque` : ilot sombre de la marque, a halo. */
4205
- export type VarianteDeDemarrage = 'clair' | 'marque';
4206
- /**
4207
- * Ecran de demarrage : ce qu'on voit pendant que l'application se charge, APRES l'amorce statique
4208
- * (`@starterlib/ui/styles/amorce.css`, peinte avant le JavaScript) et avant le premier ecran.
4209
- *
4210
- * ```html
4211
- * <st-splash-screen variante="marque" nom="Banque Exemple" sousTitre="Tresorerie"
4212
- * statut="Synchronisation des ordres" version="Version 0.9.0">
4213
- * <st-icon logo nom="banque" taille="28" />
4214
- * <span surtitre>PORTAIL</span>
4215
- * </st-splash-screen>
4216
- * ```
4217
- *
4218
- * ⚠️ **Aucune retention artificielle** (D25) : l'application le retire des qu'elle est prete. Un
4219
- * ecran de demarrage qui se montre « au moins deux secondes » fait attendre pour rien.
4220
- *
4221
- * ⚠️ **Le statut n'apparait qu'apres `rythme.delai.attente`** (200 ms) : un demarrage rapide ne
4222
- * fait pas clignoter une phrase qu'on n'a pas le temps de lire. Il est lu par une region
4223
- * `status`, presente VIDE des la creation ; sans `statut`, elle lit le libelle par defaut
4224
- * (`chargementEnCours`, masque) : l'attente est un message d'etat (WCAG 4.1.3). L'indicateur et
4225
- * la barre, eux, se taisent (une seule annonce).
4226
- *
4227
- * ⚠️ **Aucun `aria-busy` sur l'ecran** : un sous-arbre `busy` peut etre ignore par les lecteurs
4228
- * d'ecran jusqu'a son retour a `false`, et l'ecran est retire, jamais rendu « pret ». Il ferait
4229
- * taire la region meme qu'il contient.
4230
- *
4231
- * ⚠️ **La version est un texte public** : un numero de version, jamais un numero de construction,
4232
- * une adresse ou un detail d'infrastructure (EA-15).
4233
- *
4234
- * Emplacements : `[logo]` (tuile de 48 px), `[surtitre]` (ligne du haut, micro-libelle de 11 px
4235
- * mis en capitales par le composant, D18, D41), contenu libre sous le statut (une mention),
4236
- * `[pied]` apres la version (12/16 ; un micro-libelle projete y pose ses capitales lui-meme).
4237
- */
4238
- export declare class StSplashScreen {
4239
- private readonly libelles;
4240
- readonly variante: import("@angular/core").InputSignal<VarianteDeDemarrage>;
4241
- /** Nom de l'application ou de l'etablissement. */
4242
- readonly nom: import("@angular/core").InputSignal<string>;
4243
- readonly sousTitre: import("@angular/core").InputSignal<string | null>;
4244
- /** Ce qui se passe (« Synchronisation des ordres ») ; montre apres `rythme.delai.attente`. */
4245
- readonly statut: import("@angular/core").InputSignal<string | null>;
4246
- /** Version publiee (« Version 0.9.0 »), jamais un numero de construction. */
4247
- readonly version: import("@angular/core").InputSignal<string | null>;
4248
- /**
4249
- * Delai avant le statut, en millisecondes : `rythme.delai.attente` par defaut. Zero le montre
4250
- * tout de suite (une vignette de galerie, un test).
4251
- */
4252
- readonly delaiMs: import("@angular/core").InputSignalWithTransform<number, unknown>;
4253
- protected readonly etiquetteLue: import("@angular/core").Signal<string>;
4254
- protected readonly statutVisible: import("@angular/core").Signal<boolean>;
4255
- static ɵfac: i0.ɵɵFactoryDeclaration<StSplashScreen, never>;
4256
- static ɵcmp: i0.ɵɵComponentDeclaration<StSplashScreen, "st-splash-screen", never, {
4257
- "variante": {
4258
- "alias": "variante";
4259
- "required": false;
4260
- "isSignal": true;
4261
- };
4262
- "nom": {
4263
- "alias": "nom";
4264
- "required": true;
4265
- "isSignal": true;
4266
- };
4267
- "sousTitre": {
4268
- "alias": "sousTitre";
4269
- "required": false;
4270
- "isSignal": true;
4271
- };
4272
- "statut": {
4273
- "alias": "statut";
4274
- "required": false;
4275
- "isSignal": true;
4276
- };
4277
- "version": {
4278
- "alias": "version";
4279
- "required": false;
4280
- "isSignal": true;
4281
- };
4282
- "delaiMs": {
4283
- "alias": "delaiMs";
4284
- "required": false;
4285
- "isSignal": true;
4286
- };
4287
- }, {}, never, ["[surtitre]", "[logo]", "*", "[pied]"], true, never>;
4288
- }
4289
- /** Une etape d'un parcours, decrite par l'appelant. Les textes sont deja traduits. */
4290
- export interface EtapeDeParcours {
4291
- readonly libelle: string;
4292
- /** Precision sous le libelle (« Termine le 28.09 a 14:32 ») ; aucune si absente. */
4293
- readonly description?: string;
4294
- }
4295
- export type EtatDEtape = 'faite' | 'courante' | 'a-venir';
4296
- /** `verticale` : les etapes en colonne, a toutes les largeurs (un assistant a sa marge, lot 262). */
4297
- export type OrientationDeParcours = 'horizontale' | 'verticale';
4298
- /**
4299
- * Parcours par etapes : ou l'on en est, ce qui est fait, ce qui reste.
4300
- *
4301
- * ```html
4302
- * <st-stepper [etapes]="etapes" [etape]="indice()" />
4303
- * ```
4304
- *
4305
- * ⚠️ Une liste ORDONNEE : l'ordre des etapes est l'information, et le lecteur
4306
- * d'ecran annonce « 2 sur 4 » de lui-meme. L'etape courante porte
4307
- * `aria-current="step"`, ce qui est exactement le mot de la specification, et
4308
- * elle est seule a le porter.
4309
- *
4310
- * ⚠️ **L'etat de chaque etape se lit par sa forme ET par un texte**, jamais par
4311
- * la couleur seule : une coche pour ce qui est fait, un numero plein a halo pour
4312
- * l'etape en cours, un numero sur fond discret pour ce qui vient ; et un mot —
4313
- * « en cours », « a venir » dans le surtitre visible, « terminee » lu seulement,
4314
- * la double coche le montrant. Sous contraste force, il ne reste que la forme et
4315
- * le mot.
4316
- *
4317
- * Deux formes, sans transition de l'une a l'autre : la RANGEE (reperes de 40 px
4318
- * relies par des connecteurs de 4 px, surtitre, libelle, description) des que
4319
- * SA BOITE atteint la rupture `md` (requete de conteneur : une carte etroite sur
4320
- * un grand ecran prend la forme compacte), et la forme COMPACTE en dessous (« Etape 3 sur 4 : ... »,
4321
- * pourcentage CALCULE, un segment par etape, precedente et suivante). La forme
4322
- * compacte est une vue : la liste complete reste dans le document, lue
4323
- * seulement, et la vue est masquee aux lecteurs d'ecran pour ne rien dire deux
4324
- * fois. `compacte` l'impose a toutes les largeurs.
4325
- *
4326
- * Il n'est PAS interactif : revenir a une etape est une decision du parcours,
4327
- * qui la rend par un vrai lien ou un vrai bouton dans la page. Un indicateur
4328
- * cliquable promettrait un retour que tous les parcours n'autorisent pas.
4329
- *
4330
- * Le composant ne pose aucune marge externe : l'espace autour de lui appartient
4331
- * a la page.
4332
- */
4333
- export declare class StStepper {
4334
- private readonly libelles;
4335
- private readonly locale;
4336
- readonly etapes: import("@angular/core").InputSignal<readonly EtapeDeParcours[]>;
4337
- /**
4338
- * Indice de l'etape en cours, a partir de zero. Le nombre d'etapes dit un
4339
- * parcours acheve : toutes faites, aucune courante. Hors de ces bornes,
4340
- * l'indice est ramene a la plus proche, avec un avertissement en developpement.
4341
- */
4342
- readonly etape: import("@angular/core").InputSignal<number>;
4343
- /**
4344
- * Nom de la liste, jamais affiche. `null` : le `libelle` visible s'il est pose (un voyant lit
4345
- * « Virement », un lecteur d'ecran l'entend aussi), sinon « Etapes », du dictionnaire.
4346
- */
4347
- readonly etiquette: import("@angular/core").InputSignal<string | null>;
4348
- /** Nom visible du parcours, en surtitre de la forme compacte ; aucun si `null`. */
4349
- readonly libelle: import("@angular/core").InputSignal<string | null>;
4350
- /** Forme compacte a toutes les largeurs, et non sous la seule rupture `md`. */
4351
- readonly compacte: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
4352
- /** `verticale` : la liste en colonne a toutes les largeurs ; `compacte` l'emporte. */
4353
- readonly orientation: import("@angular/core").InputSignal<OrientationDeParcours>;
4354
- protected readonly etiquetteLue: import("@angular/core").Signal<string>;
4355
- protected readonly motDeLEtapeFaite: import("@angular/core").Signal<string>;
4356
- /** L'indice borne : une etape hors du parcours ne peut ni tout cocher ni tout vider en silence. */
4357
- private readonly courante;
4358
- protected readonly lignes: import("@angular/core").Signal<{
4359
- libelle: string;
4360
- description: string | null;
4361
- numero: number;
4362
- etat: EtatDEtape;
4363
- surtitre: string;
4364
- relie: boolean;
4365
- }[]>;
4366
- /** Le format de la locale de l'application : « 50 % » en francais, « 50% » en anglais. */
4367
- private readonly formatDuPourcentage;
4368
- /** Resume de la forme compacte : CALCULE sur les etapes faites, jamais recopie. */
4369
- protected readonly resume: import("@angular/core").Signal<{
4370
- titre: string;
4371
- pourcentage: string;
4372
- precedente: string | null;
4373
- suivante: string | null;
4374
- } | null>;
4375
- static ɵfac: i0.ɵɵFactoryDeclaration<StStepper, never>;
4376
- static ɵcmp: i0.ɵɵComponentDeclaration<StStepper, "st-stepper", never, {
4377
- "etapes": {
4378
- "alias": "etapes";
4379
- "required": true;
4380
- "isSignal": true;
4381
- };
4382
- "etape": {
4383
- "alias": "etape";
4384
- "required": true;
4385
- "isSignal": true;
4386
- };
4387
- "etiquette": {
4388
- "alias": "etiquette";
4389
- "required": false;
4390
- "isSignal": true;
4391
- };
4392
- "libelle": {
4393
- "alias": "libelle";
4394
- "required": false;
4395
- "isSignal": true;
4396
- };
4397
- "compacte": {
4398
- "alias": "compacte";
4399
- "required": false;
4400
- "isSignal": true;
4401
- };
4402
- "orientation": {
4403
- "alias": "orientation";
4404
- "required": false;
4405
- "isSignal": true;
4406
- };
4407
- }, {}, never, never, true, never>;
4408
- }
4409
- /**
4410
- * `ligne` : filet capillaire entre les lignes d'une liste de reglages (le
4411
- * defaut) ; `tuile` : chaque reglage dans sa tuile `surfaceConteneurBas`
4412
- * (regles de la planche 14).
4413
- */
4414
- export type VarianteDeLigneDeReglage = 'ligne' | 'tuile';
4415
- /**
4416
- * Ligne de reglage : un libelle, une description, et le controle qui les suit.
4417
- *
4418
- * ```html
4419
- * <st-settings-row libelle="Alertes par SMS" description="Un SMS a chaque virement sortant.">
4420
- * <st-switch libelle="Activer" [(checked)]="sms" />
4421
- * </st-settings-row>
4422
- * ```
4423
- *
4424
- * Facultatifs : un carre d'icone de 36 px en tete (`icone`, `ton`), et un
4425
- * complement du libelle sur sa ligne (`[suffixe]`, une puce « STRICT »).
4426
- *
4427
- * ⚠️ **La ligne est un GROUPE nomme et decrit, et non une etiquette.** Le
4428
- * controle projete garde son propre nom — celui de son `libelle`, ou un
4429
- * `aria-label` pour un element natif — et la ligne l'enveloppe d'un
4430
- * `role="group"` relie a son libelle par `aria-labelledby` et a sa description
4431
- * par `aria-describedby`. En entrant dans le groupe, le lecteur d'ecran lit le
4432
- * libelle, puis la description, puis le controle : « Alertes par SMS, groupe,
4433
- * Un SMS a chaque virement sortant, Activer, interrupteur, desactive ». En
4434
- * developpement, un controle projete SANS nom accessible est signale.
4435
- *
4436
- * Pourquoi pas un `label for` : la plupart des controles du socle portent deja
4437
- * leur etiquette, et un controle non natif (un groupe segmente, un declencheur
4438
- * de menu) n'en accepte aucun. Le groupe, lui, marche pour tous, sans que la
4439
- * ligne ait a connaitre ce qu'on lui projette.
4440
- *
4441
- * ⚠️ Un reglage s'applique IMMEDIATEMENT (c'est le sens de `st-switch`) ou
4442
- * s'envoie avec un formulaire : la ligne ne tranche pas, le controle le dit.
4443
- *
4444
- * Une ligne qui NAVIGUE (vers le detail d'un reglage) projette un `a[stLink]`
4445
- * suivi de l'icone `chevron-droite` de taille `sm`, miroitee en RTL.
4446
- */
4447
- export declare class StSettingsRow {
4448
- /** Texte visible, deja traduit : le socle ne traduit rien. */
4449
- readonly libelle: import("@angular/core").InputSignal<string>;
4450
- /** Ce que le reglage fait, en une phrase. Reliee au groupe par `aria-describedby`. */
4451
- readonly description: import("@angular/core").InputSignal<string | null>;
4452
- readonly variante: import("@angular/core").InputSignal<VarianteDeLigneDeReglage>;
4453
- /** Icone decorative du carre de tete ; `null` : pas de carre. */
4454
- readonly icone: import("@angular/core").InputSignal<Icone | null>;
4455
- /** Ton du glyphe du carre d'icone. */
4456
- readonly ton: import("@angular/core").InputSignal<TonDIcone>;
4457
- /** Identifiants du libelle et de la description, cibles des attributs ARIA. */
4458
- protected readonly identifiants: {
4459
- readonly libelle: `${string}-libelle`;
4460
- readonly description: `${string}-description`;
4461
- };
4462
- constructor();
4463
- static ɵfac: i0.ɵɵFactoryDeclaration<StSettingsRow, never>;
4464
- static ɵcmp: i0.ɵɵComponentDeclaration<StSettingsRow, "st-settings-row", never, {
4465
- "libelle": {
4466
- "alias": "libelle";
4467
- "required": true;
4468
- "isSignal": true;
4469
- };
4470
- "description": {
4471
- "alias": "description";
4472
- "required": false;
4473
- "isSignal": true;
4474
- };
4475
- "variante": {
4476
- "alias": "variante";
4477
- "required": false;
4478
- "isSignal": true;
4479
- };
4480
- "icone": {
4481
- "alias": "icone";
4482
- "required": false;
4483
- "isSignal": true;
4484
- };
4485
- "ton": {
4486
- "alias": "ton";
4487
- "required": false;
4488
- "isSignal": true;
4489
- };
4490
- }, {}, never, ["[suffixe]", "*"], true, never>;
4491
- }
4492
3227
  /** Les tons semantiques, sauf `primaire` : une banniere informe, elle ne marque pas. */
4493
3228
  export type TonDeBanniere = Exclude<TonSemantique, 'primaire'>;
4494
3229
  /** `bloc` : en page, au-dessus du contenu concerne. `bandeau` : sous l'en-tete de la coquille. */
@@ -4549,7 +3284,7 @@ export declare class StBanner {
4549
3284
  protected readonly idDuTitre: import("@angular/core").Signal<string>;
4550
3285
  protected readonly prefixe: import("@angular/core").Signal<string | null>;
4551
3286
  protected readonly libelleFermetureLu: import("@angular/core").Signal<string>;
4552
- protected readonly roleLu: import("@angular/core").Signal<"alert" | "status" | null>;
3287
+ protected readonly roleLu: import("@angular/core").Signal<"status" | "alert" | null>;
4553
3288
  /**
4554
3289
  * ⚠️ Le focus est DEPLACE avant l'emission, vers le premier element focalisable
4555
3290
  * VISIBLE qui suit (sinon le dernier qui precede, sinon le conteneur), sans
@@ -4651,7 +3386,7 @@ export declare class StInlineMessage {
4651
3386
  readonly icone: import("@angular/core").InputSignal<Icone | null>;
4652
3387
  protected readonly iconeLue: import("@angular/core").Signal<Icone>;
4653
3388
  protected readonly prefixe: import("@angular/core").Signal<string | null>;
4654
- protected readonly role: import("@angular/core").Signal<"alert" | "status" | null>;
3389
+ protected readonly role: import("@angular/core").Signal<"status" | "alert" | null>;
4655
3390
  /** Le contenu de la region, apres `rythme.delai.annonce` ; tout de suite sans `annonce`. */
4656
3391
  private readonly contenuInsere;
4657
3392
  protected readonly contenuVisible: import("@angular/core").Signal<boolean>;
@@ -4707,7 +3442,11 @@ export declare class StInlineMessage {
4707
3442
  *
4708
3443
  * ⚠️ **Le choix affiche est celui de l'appelant.** Un clic qui ne serait pas suivi d'un nouveau
4709
3444
  * `choix` (refus, enregistrement en echec) laisserait le radio clique coche a tort : le composant
4710
- * recale le segmente sur `choix` juste apres l'emission.
3445
+ * recale le segmente sur `choix` APRES le rendu qui suit le clic, quand l'entree porte ce que
3446
+ * l'appelant a pose, et par un signal LOCAL, qui n'emet rien. En 0.9.0, il le recalait dans une
3447
+ * microtache, sur une entree que le parent n'avait pas encore rafraichie, et en posant le `model`
3448
+ * du segmente : l'ancien choix repartait par `choisi`, et la page revenait en arriere dans le meme
3449
+ * clic (0.9.1).
4711
3450
  *
4712
3451
  * Compose sur `st-segmented-control` (lot 244, D151) : les radios natifs, les noms, le focus, le
4713
3452
  * survol et le contraste force sont ceux du segmente ; la piste reste celle de l'anatomie 6.1.
@@ -4720,7 +3459,9 @@ export declare class StThemeToggle {
4720
3459
  /** Icones seules (en-tete etroit) : chaque texte reste le nom accessible de son segment. */
4721
3460
  readonly compact: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
4722
3461
  readonly choisi: import("@angular/core").OutputEmitterRef<ChoixDeTheme>;
4723
- private readonly segmente;
3462
+ private readonly injecteur;
3463
+ /** Le choix que montre le segmente : celui de l'appelant, et le clic tant qu'il n'a pas suivi. */
3464
+ protected readonly affiche: import("@angular/core").WritableSignal<ChoixDeTheme>;
4724
3465
  protected readonly legende: import("@angular/core").Signal<string>;
4725
3466
  protected readonly options: import("@angular/core").Signal<readonly OptionDeSegment[]>;
4726
3467
  protected choisir(valeur: string): void;
@@ -4757,9 +3498,16 @@ export declare class StThemeToggle {
4757
3498
  * pas de `@starterlib/core` (ADR 0003). La coquille le relie au noyau :
4758
3499
  *
4759
3500
  * ```html
4760
- * <st-lang-switch [courante]="langue.courante()" (choisie)="langue.changer($event)" />
3501
+ * <st-lang-switch [courante]="langue.demandee()" (choisie)="langue.changer($event)" />
4761
3502
  * ```
4762
3503
  *
3504
+ * ⚠️ **`demandee`, et non `courante`** (0.9.1) : `StLangue` charge les catalogues AVANT de basculer.
3505
+ * Relie a `courante`, le selecteur revient a l'ancienne langue le temps du chargement (l'appelant
3506
+ * n'a pas encore suivi), puis repart vers la nouvelle. `demandee` porte la langue cliquee des le
3507
+ * clic. Le recalage suit la regle de `st-theme-toggle` : apres le rendu qui suit le clic, par un
3508
+ * signal local, sans jamais reemettre ; la 0.9.0 reemettait l'ancienne langue avant la fin du
3509
+ * chargement, et la derniere demande l'emportant, la bascule n'aboutissait jamais.
3510
+ *
4763
3511
  * Rendu de la planche 6 : piste enfoncee, segments de 32 px (44 au doigt), la langue courante en
4764
3512
  * blanc a filet interieur et en graisse 600 (EA-40). `compact` montre les codes « FR | EN » (en-tete
4765
3513
  * etroit) ; le nom lu commence par le code visible, puis l'endonyme dans sa langue (« FR Francais »,
@@ -4776,7 +3524,9 @@ export declare class StLangSwitch {
4776
3524
  /** Codes visibles (« FR », « EN ») ; le nom de chaque segment est le code, puis l'endonyme. */
4777
3525
  readonly compact: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
4778
3526
  readonly choisie: import("@angular/core").OutputEmitterRef<Langue>;
4779
- private readonly segmente;
3527
+ private readonly injecteur;
3528
+ /** La langue que montre le segmente : celle de l'appelant, et le clic tant qu'il n'a pas suivi. */
3529
+ protected readonly affiche: import("@angular/core").WritableSignal<Langue>;
4780
3530
  protected readonly legende: import("@angular/core").Signal<string>;
4781
3531
  protected readonly options: import("@angular/core").Signal<readonly OptionDeSegment[]>;
4782
3532
  protected choisir(code: string): void;
@@ -5197,307 +3947,4 @@ export declare class StLogo {
5197
3947
  };
5198
3948
  }, {}, never, never, true, never>;
5199
3949
  }
5200
- /**
5201
- * Presence du reseau, lue par `st-state` A L'INSTANT OU UNE ERREUR APPARAIT : une erreur survenue
5202
- * hors ligne se dit « hors ligne », pas « une erreur est survenue ». La lecture est figee avec
5203
- * l'erreur : une erreur deja affichee n'est jamais re-etiquetee quand la connectivite bascule.
5204
- *
5205
- * ⚠️ `ui` ne depend pas de `@starterlib/core` (ADR 0003) : c'est l'HOTE qui relie ce jeton a
5206
- * `StConnectivite` du noyau, qui fait d'un statut 0 la source d'autorite et se rouvre a la
5207
- * premiere reponse (lot 165) :
5208
- *
5209
- * ```ts
5210
- * { provide: ST_EN_LIGNE, useFactory: () => inject(StConnectivite).enLigne }
5211
- * ```
5212
- *
5213
- * ⚠️ Relie a `StConnectivite`, le jeton ne change le rendu d'AUCUNE reponse du serveur :
5214
- * l'intercepteur du noyau remet la connectivite en ligne sur toute reponse, avant que l'erreur
5215
- * n'atteigne la ressource. Seul le statut 0 fait alors autorite (predicat `estHorsLigne`). Le
5216
- * defaut, qui suit les evenements `online` / `offline` du navigateur, couvre en plus l'erreur
5217
- * rendue hors ligne sans reseau (un service worker qui repond a la place du serveur).
5218
- */
5219
- export declare const ST_EN_LIGNE: InjectionToken<Signal<boolean>>;
5220
- /** Ce qu'un etat degrade rend quand l'appelant n'a pas fourni son gabarit. */
5221
- type GabaritParDefaut = 'vide' | 'erreur' | 'hors-ligne';
5222
- /**
5223
- * Impose les cinq etats a un bloc qui consomme l'API, et centralise leur
5224
- * annonce.
5225
- *
5226
- * Deux usages. Le plus courant passe la ressource, et l'etat s'en deduit :
5227
- *
5228
- * ```html
5229
- * <st-state [ressource]="operations">
5230
- * <ng-template [stSucces]="operations" let-page>…</ng-template>
5231
- * <ng-template stErreur let-erreur><st-error [code]="erreur.code" … /></ng-template>
5232
- * <ng-template stVide><st-empty … /></ng-template>
5233
- * </st-state>
5234
- * ```
5235
- *
5236
- * L'autre pose `[etat]` a la main, pour un bloc qui ne vient pas d'une
5237
- * ressource — une soumission de formulaire, par exemple.
5238
- *
5239
- * ⚠️ Un RECHARGEMENT garde le contenu affiche, sous une barre de 4 px en tete du bloc
5240
- * (planche 9). Revenir a la silhouette a chaque changement de filtre fait clignoter la
5241
- * page entiere et perd la position de lecture ; seul un chargement SANS valeur retenue
5242
- * (premier appel, ou rejeu apres une erreur) montre la silhouette — jamais l'etat vide.
5243
- *
5244
- * ⚠️ Anti-clignotement, a l'oeil ET a l'oreille : rien avant `rythme.delai.attente`, puis
5245
- * la silhouette au moins `rythme.tenue.affichageMinimal` ; « Chargement en cours » n'est
5246
- * dit que si la silhouette est montree. Un rechargement de plus de
5247
- * `rythme.tenue.rechargementAnnonce` s'annonce une fois (« Actualisation en cours »).
5248
- *
5249
- * ⚠️ L'hote ne porte PAS `role="status"`, contrairement a ce qu'on attendrait :
5250
- * un remplacement de contenu A L'INTERIEUR d'une region vivante fait relire
5251
- * tout le sous-arbre par le lecteur d'ecran a chaque bascule d'etat. Seule une
5252
- * petite zone masquee porte l'annonce, qui tient en quelques mots.
5253
- *
5254
- * ⚠️ `REGION_VIVANTE_PARENTE` ne vaut que pour les etats que st-state ANNONCE (chargement,
5255
- * erreur, vide, hors ligne) : il se tait en succes, et le contenu du gabarit `stSucces` se dit
5256
- * donc lui-meme — une erreur d'action y garde son `role="alert"`, une banniere hors ligne son
5257
- * `role="status"`. Fourni a tout le contenu, le jeton les faisait taire sans que personne ne
5258
- * parle a leur place (revue E8).
5259
- *
5260
- * ⚠️ Un gabarit d'etat degrade oublie rend le gabarit PAR DEFAUT du dictionnaire (« Aucun
5261
- * resultat », « Une erreur est survenue », « Hors connexion ») plutot qu'un bloc vide ; en
5262
- * developpement, un avertissement le signale.
5263
- */
5264
- export declare class StState<T> {
5265
- private readonly libelles;
5266
- private readonly enLigne;
5267
- /** La ressource dont l'etat se deduit. */
5268
- readonly ressource: import("@angular/core").InputSignal<Resource<T> | null>;
5269
- /** Etat pose a la main. Il prime sur la ressource quand les deux existent. */
5270
- readonly etat: import("@angular/core").InputSignal<EtatDeBloc$1 | null>;
5271
- /** Ce qui compte comme « vide » : par defaut, une collection sans element. */
5272
- readonly estVide: import("@angular/core").InputSignal<(valeur: T) => boolean>;
5273
- /**
5274
- * Ce qui compte comme une perte de reseau : par defaut, le statut 0. Une erreur APPARUE
5275
- * pendant que `ST_EN_LIGNE` disait hors ligne en est une aussi, quel que soit ce predicat.
5276
- */
5277
- readonly estHorsLigne: import("@angular/core").InputSignal<(erreur: unknown) => boolean>;
5278
- /** Silhouette par defaut du chargement. `null` : un indicateur tournant. */
5279
- readonly squelette: import("@angular/core").InputSignal<VarianteDeSquelette | null>;
5280
- readonly lignesDeSquelette: import("@angular/core").InputSignalWithTransform<number, unknown>;
5281
- /**
5282
- * Rien n'est montre avant ce delai, en millisecondes (`rythme.delai.attente`). Zero : la
5283
- * silhouette tout de suite, pour un bloc dont on SAIT qu'il sera long (un rapport).
5284
- */
5285
- readonly delaiAvantSilhouette: import("@angular/core").InputSignalWithTransform<number, unknown>;
5286
- /** `null` : les annonces viennent du dictionnaire de l'application. `succes` se tait. */
5287
- readonly annonces: import("@angular/core").InputSignal<Readonly<Partial<Record<EtatDeBloc$1, string>>> | null>;
5288
- /**
5289
- * Hauteur reservee au bloc, longueur CSS (`'12rem'`, `'240px'`) : la silhouette, puis le contenu,
5290
- * y tiennent sans pousser ce qui suit — aucun decalage de mise en page au passage du chargement
5291
- * au succes (CLS 0, lot 211). Un contenu plus haut agrandit le bloc. `null` : rien de reserve.
5292
- */
5293
- readonly hauteurMinimale: import("@angular/core").InputSignal<string | null>;
5294
- private readonly gabaritSucces;
5295
- private readonly gabaritErreur;
5296
- private readonly gabaritVide;
5297
- private readonly gabaritHorsLigne;
5298
- private readonly gabaritChargement;
5299
- private readonly instantane;
5300
- /**
5301
- * La derniere valeur connue, gardee pendant qu'une autre se charge.
5302
- *
5303
- * ⚠️ Necessaire, et pas seulement confortable : un changement de PARAMETRE
5304
- * n'est pas un `reload`. Angular traite le premier comme une nouvelle
5305
- * requete — statut « loading », valeur videe. Sans cette memoire, changer un
5306
- * filtre ou tourner une page ferait donc disparaitre le tableau, clignoter la
5307
- * page, et perdre la position de lecture. Une erreur, elle, ne garde rien :
5308
- * afficher des donnees perimees sous un message d'erreur serait mentir.
5309
- */
5310
- private readonly valeurRetenue;
5311
- /**
5312
- * La connectivite a l'instant de l'erreur, figee avec elle : recalculee seulement quand une
5313
- * NOUVELLE erreur apparait. Lue en direct, une bascule du reseau re-etiquetait une erreur deja
5314
- * affichee (un 409 devenait « Hors connexion »), et la region polie la re-annoncait.
5315
- */
5316
- private readonly horsLigneALErreur;
5317
- /** Etat deduit de la ressource, valeur retenue comprise. */
5318
- private readonly etatDeLaRessource;
5319
- /**
5320
- * ⚠️ Un succes pose A LA MAIN sur une ressource qui n'a encore rien rendu passerait `undefined`
5321
- * au gabarit de succes, que son type promet defini (`let-page` : A1113) : c'est encore un
5322
- * chargement. Sans ressource, le succes pose a la main se rend tel quel.
5323
- */
5324
- protected readonly etatEffectif: Signal<EtatDeBloc$1>;
5325
- /**
5326
- * Une valeur est affichee, et une autre arrive — par rappel explicite ou par
5327
- * changement de parametre.
5328
- */
5329
- protected readonly enRechargement: Signal<boolean>;
5330
- /** Une ressource au repos (`idle`) n'attend rien : pas d'`aria-busy` perpetuel. */
5331
- protected readonly enAttente: Signal<boolean>;
5332
- /**
5333
- * La silhouette, une fois le delai anti-clignotement passe, et pour au moins la
5334
- * tenue minimale (`rythme.delai.attente`, `rythme.tenue.affichageMinimal`) : une
5335
- * reponse rapide n'a pas a clignoter, une reponse a 210 ms ne produit pas d'eclair.
5336
- * Le gabarit `stChargement` y est soumis aussi.
5337
- */
5338
- private readonly chargementVisible;
5339
- /** Un rechargement long s'annonce, une fois, passe `rythme.tenue.rechargementAnnonce`. */
5340
- private readonly rechargementLong;
5341
- /**
5342
- * La silhouette, une fois le delai anti-clignotement passe, et TENUE :
5343
- * elle reste le temps de la tenue minimale meme si la reponse arrive avant.
5344
- * ⚠️ Sans condition sur l'etat : exiger aussi « encore en chargement » faisait
5345
- * partir la silhouette des la reponse, et une reponse a 230 ms la montrait 30 ms
5346
- * — l'eclair que la tenue doit eviter (revue E5).
5347
- */
5348
- protected readonly montreLaSilhouette: Signal<boolean>;
5349
- /** Le gabarit `stChargement`, soumis au meme delai et a la meme tenue que la silhouette. */
5350
- protected readonly gabaritDeChargement: Signal<TemplateRef<void> | null>;
5351
- private readonly annoncesLues;
5352
- /**
5353
- * Ce qui se dit : l'etat, sauf le chargement tant que la silhouette n'est pas montree (une
5354
- * reponse a 100 ms ne dit rien), et « Actualisation en cours » pour un rechargement long.
5355
- */
5356
- protected readonly annonce: Signal<string>;
5357
- /**
5358
- * L'injecteur du gabarit de succes : il masque `REGION_VIVANTE_PARENTE`, que les fournisseurs
5359
- * de st-state posent pour les etats qu'il annonce. Le gabarit est declare dans le contenu de
5360
- * st-state : sans ce masque, il voyait le jeton.
5361
- */
5362
- private readonly injecteurDuSucces;
5363
- /** `null` : l'injecteur de declaration du gabarit, sous la region de st-state. */
5364
- protected readonly injecteurDuGabarit: Signal<import("@angular/core").DestroyableInjector | null>;
5365
- /** L'erreur de la ressource, decrite pour le gabarit (`let-erreur` : `ErreurDeBloc`). */
5366
- protected readonly erreurDecrite: Signal<ErreurDeBloc | null>;
5367
- /** Contexte passe au gabarit : la valeur en succes, l'erreur decrite en erreur. */
5368
- protected readonly contexte: Signal<{
5369
- $implicit: unknown;
5370
- }>;
5371
- /** Le gabarit de l'etat courant, ou `null` (silhouette, ou gabarit par defaut). */
5372
- protected readonly gabaritDeLEtat: Signal<TemplateRef<unknown> | null>;
5373
- /** L'etat degrade dont le gabarit manque, rendu par le gabarit du dictionnaire. */
5374
- protected readonly gabaritParDefaut: Signal<GabaritParDefaut | null>;
5375
- /** Les textes des gabarits par defaut : ceux du dictionnaire, jamais une phrase du serveur. */
5376
- protected readonly textesParDefaut: Signal<import("@starterlib/ui").LibellesUi>;
5377
- /**
5378
- * Ce qui est a l'ecran : la silhouette, ou le bloc de l'etat. Suivi pour le fondu
5379
- * d'arrivee, qui ne vaut qu'a la sortie d'un chargement MONTRE.
5380
- */
5381
- private readonly affiche;
5382
- constructor();
5383
- static ɵfac: i0.ɵɵFactoryDeclaration<StState<any>, never>;
5384
- static ɵcmp: i0.ɵɵComponentDeclaration<StState<any>, "st-state", never, {
5385
- "ressource": {
5386
- "alias": "ressource";
5387
- "required": false;
5388
- "isSignal": true;
5389
- };
5390
- "etat": {
5391
- "alias": "etat";
5392
- "required": false;
5393
- "isSignal": true;
5394
- };
5395
- "estVide": {
5396
- "alias": "estVide";
5397
- "required": false;
5398
- "isSignal": true;
5399
- };
5400
- "estHorsLigne": {
5401
- "alias": "estHorsLigne";
5402
- "required": false;
5403
- "isSignal": true;
5404
- };
5405
- "squelette": {
5406
- "alias": "squelette";
5407
- "required": false;
5408
- "isSignal": true;
5409
- };
5410
- "lignesDeSquelette": {
5411
- "alias": "lignesDeSquelette";
5412
- "required": false;
5413
- "isSignal": true;
5414
- };
5415
- "delaiAvantSilhouette": {
5416
- "alias": "delaiAvantSilhouette";
5417
- "required": false;
5418
- "isSignal": true;
5419
- };
5420
- "annonces": {
5421
- "alias": "annonces";
5422
- "required": false;
5423
- "isSignal": true;
5424
- };
5425
- "hauteurMinimale": {
5426
- "alias": "hauteurMinimale";
5427
- "required": false;
5428
- "isSignal": true;
5429
- };
5430
- }, {}, ["gabaritSucces", "gabaritErreur", "gabaritVide", "gabaritHorsLigne", "gabaritChargement"], never, true, never>;
5431
- }
5432
- /**
5433
- * Les gabarits des cinq etats, declares DANS `<st-state>`.
5434
- *
5435
- * ⚠️ Pourquoi des directives de contenu plutot que des entrees `TemplateRef` :
5436
- * un `<ng-template>` declare a l'exterieur du composant appartient a
5437
- * l'injecteur de l'endroit ou il est ECRIT, pas de celui qui le rend. Les
5438
- * fournisseurs de `st-state` — dont `REGION_VIVANTE_PARENTE`, qui fait taire
5439
- * les annonces en double — ne l'atteignaient donc pas, et l'erreur etait
5440
- * annoncee deux fois. Passer par le contenu rend la declaration a l'exterieur
5441
- * impossible : le defaut ne peut plus revenir.
5442
- */
5443
- export declare class StSucces<T> {
5444
- readonly gabarit: TemplateRef<{
5445
- $implicit: Exclude<T, undefined>;
5446
- }>;
5447
- /**
5448
- * La ressource n'est lue nulle part : elle porte le TYPE de la valeur, pour
5449
- * que `let-valeur` soit type dans le gabarit au lieu d'etre `unknown`.
5450
- */
5451
- readonly stSucces: import("@angular/core").InputSignal<Resource<T> | undefined>;
5452
- /**
5453
- * `Exclude<T, undefined>` : une ressource sans valeur initiale se type
5454
- * `T | undefined`, mais st-state ne rend ce gabarit QUE lorsqu'une valeur
5455
- * existe. Sans cela, chaque gabarit de succes devrait ecrire `page?.length`
5456
- * pour un cas qui ne se produit pas.
5457
- */
5458
- static ngTemplateContextGuard<T>(_directive: StSucces<T>, _contexte: unknown): _contexte is {
5459
- $implicit: Exclude<T, undefined>;
5460
- };
5461
- static ɵfac: i0.ɵɵFactoryDeclaration<StSucces<any>, never>;
5462
- static ɵdir: i0.ɵɵDirectiveDeclaration<StSucces<any>, "ng-template[stSucces]", never, {
5463
- "stSucces": {
5464
- "alias": "stSucces";
5465
- "required": false;
5466
- "isSignal": true;
5467
- };
5468
- }, {}, never, never, true, never>;
5469
- }
5470
- /**
5471
- * Erreur. Le contexte porte l'erreur DECRITE (`decrireLErreur`) : code machine, variante,
5472
- * rejouabilite, trace ; l'erreur brute reste dans `cause`. Les applications cessent de recopier
5473
- * leur « code de » et leur « est-ce rejouable ».
5474
- */
5475
- export declare class StErreur {
5476
- readonly gabarit: TemplateRef<{
5477
- $implicit: ErreurDeBloc;
5478
- }>;
5479
- static ngTemplateContextGuard(_directive: StErreur, _contexte: unknown): _contexte is {
5480
- $implicit: ErreurDeBloc;
5481
- };
5482
- static ɵfac: i0.ɵɵFactoryDeclaration<StErreur, never>;
5483
- static ɵdir: i0.ɵɵDirectiveDeclaration<StErreur, "ng-template[stErreur]", never, {}, {}, never, never, true, never>;
5484
- }
5485
- export declare class StVide {
5486
- readonly gabarit: TemplateRef<void>;
5487
- static ɵfac: i0.ɵɵFactoryDeclaration<StVide, never>;
5488
- static ɵdir: i0.ɵɵDirectiveDeclaration<StVide, "ng-template[stVide]", never, {}, {}, never, never, true, never>;
5489
- }
5490
- export declare class StHorsLigne {
5491
- readonly gabarit: TemplateRef<void>;
5492
- static ɵfac: i0.ɵɵFactoryDeclaration<StHorsLigne, never>;
5493
- static ɵdir: i0.ɵɵDirectiveDeclaration<StHorsLigne, "ng-template[stHorsLigne]", never, {}, {}, never, never, true, never>;
5494
- }
5495
- /** Chargement sur mesure. Sans lui, `st-state` rend sa silhouette par defaut. */
5496
- export declare class StChargement {
5497
- readonly gabarit: TemplateRef<void>;
5498
- static ɵfac: i0.ɵɵFactoryDeclaration<StChargement, never>;
5499
- static ɵdir: i0.ɵɵDirectiveDeclaration<StChargement, "ng-template[stChargement]", never, {}, {}, never, never, true, never>;
5500
- }
5501
- /** Toutes les directives de gabarit, a importer d'un coup. */
5502
- export declare const GABARITS_D_ETAT: readonly [typeof StSucces, typeof StErreur, typeof StVide, typeof StHorsLigne, typeof StChargement];
5503
3950
  export { ETATS_DE_BLOC, type EtatDeBloc, type VarianteDErreur };