@starterlib/ui 0.5.0 → 0.7.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.
@@ -2,6 +2,7 @@ import * as _angular_core from '@angular/core';
2
2
  import { InjectionToken, Signal, Provider, DestroyRef, TemplateRef, Resource } from '@angular/core';
3
3
  import { Ton, Montant, TonSemantique, DateIso, PlageDeDates, DescriptionDeFichier, ChoixDeTheme, Langue, EtatDeBloc } from '@starterlib/util';
4
4
  export { ETATS_DE_BLOC, EtatDeBloc } from '@starterlib/util';
5
+ import * as i1 from '@angular/router';
5
6
  import { ValidationError, FormValueControl, FormCheckboxControl } from '@angular/forms/signals';
6
7
  import * as _starterlib_ui from '@starterlib/ui';
7
8
 
@@ -49,6 +50,22 @@ interface LibellesUi {
49
50
  readonly filDAriane: string;
50
51
  readonly allerAuContenu: string;
51
52
  readonly navigationPrincipale: string;
53
+ /** Nom du repere de navigation du pied de page. */
54
+ readonly liensDuPied: string;
55
+ /** Barre de progression d'une navigation entre pages. */
56
+ readonly chargement: string;
57
+ /** Barre d'actions : texte du declencheur replie, et nom de son menu. */
58
+ readonly plus: string;
59
+ readonly plusDActions: string;
60
+ /** Parcours par etapes : nom de la liste, et etat de chaque etape. */
61
+ readonly etapes: string;
62
+ readonly etapeTerminee: string;
63
+ readonly etapeEnCours: string;
64
+ readonly etapeAVenir: string;
65
+ /** Tendance d'un indicateur chiffre, lue avant le texte de l'appelant. */
66
+ readonly tendanceEnHausse: string;
67
+ readonly tendanceEnBaisse: string;
68
+ readonly tendanceStable: string;
52
69
  /** Transverses */
53
70
  readonly theme: string;
54
71
  readonly themeSysteme: string;
@@ -118,6 +135,10 @@ interface LibellesUi {
118
135
  readonly tropDeFichiers: (nombre: number) => string;
119
136
  readonly typesAcceptes: (types: string) => string;
120
137
  readonly tailleMaximale: (taille: string) => string;
138
+ readonly televersementDe: (fichier: string) => string;
139
+ readonly annulerLeTeleversement: (fichier: string) => string;
140
+ readonly fichierDepose: (fichier: string) => string;
141
+ readonly fichierRefuse: (fichier: string) => string;
121
142
  /** Listes et tableaux */
122
143
  readonly pagination: string;
123
144
  readonly pagePrecedente: string;
@@ -318,18 +339,45 @@ type TonDIcone = Exclude<Ton, 'inverse'>;
318
339
  * Une icone est **decorative par defaut**. Regle de tri : si la retirer ne
319
340
  * retire aucune information, elle est decorative. Une icone posee a cote d'un
320
341
  * texte qui dit la meme chose l'est toujours.
342
+ *
343
+ * **Deux sprites, deux entrees.** Sans `sprite`, l'icone vient du sprite du
344
+ * socle (`CHEMIN_DU_SPRITE`, fourni par la coquille), et `nom` est contraint au
345
+ * type `NomDIcone` : une faute de frappe echoue a la compilation. Avec `sprite`
346
+ * — le chemin ABSOLU et hache que le manifeste d'un remote annonce —, l'icone
347
+ * est METIER : `nomMetier` accepte n'importe quel identifiant du sprite donne.
348
+ *
349
+ * ```html
350
+ * <st-icon nom="coche" />
351
+ * <st-icon [sprite]="manifeste.sprite" nomMetier="virement-instantane" />
352
+ * ```
353
+ *
354
+ * ⚠️ Un `nomMetier` sans `sprite` est refuse : le sprite du socle ne le
355
+ * contient pas, et une reference `use` qui ne resout pas ne rend RIEN, sans
356
+ * erreur. Mieux vaut echouer au rendu, une fois, avec la marche a suivre.
321
357
  */
322
358
  declare class StIcon {
323
359
  private readonly cheminDuSprite;
324
- readonly nom: _angular_core.InputSignal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "tri" | "triangle-alerte" | "utilisateur">;
360
+ /** Nom d'un symbole du sprite du socle. Obligatoire sans `sprite`. */
361
+ readonly nom: _angular_core.InputSignal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "tri" | "triangle-alerte" | "utilisateur" | null>;
362
+ /**
363
+ * Chemin absolu d'un sprite METIER, hache, tel que le manifeste du remote le
364
+ * fournit. Jamais un chemin nu comme `/assets/icones/metier.svg` : le cache
365
+ * d'un an sur empreinte servirait l'ancien sprite apres un deploiement.
366
+ */
367
+ readonly sprite: _angular_core.InputSignal<string | null>;
368
+ /** Nom d'un symbole du sprite METIER. Hors du type ferme du socle, et l'exige. */
369
+ readonly nomMetier: _angular_core.InputSignal<string | null>;
325
370
  readonly taille: _angular_core.InputSignal<TailleDIcone>;
326
371
  readonly ton: _angular_core.InputSignal<TonDIcone>;
327
372
  /** `null` : l'icone est decorative et reste muette pour les lecteurs. */
328
373
  readonly etiquette: _angular_core.InputSignal<string | null>;
329
374
  protected readonly estDecorative: _angular_core.Signal<boolean>;
375
+ /** Seul le sprite du socle a des chevrons a miroiter : un sprite metier dessine les siens. */
376
+ protected readonly directionnelle: _angular_core.Signal<boolean>;
330
377
  protected readonly reference: _angular_core.Signal<string>;
378
+ private nomDuSocle;
331
379
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StIcon, never>;
332
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StIcon, "st-icon", never, { "nom": { "alias": "nom"; "required": true; "isSignal": true; }; "taille": { "alias": "taille"; "required": false; "isSignal": true; }; "ton": { "alias": "ton"; "required": false; "isSignal": true; }; "etiquette": { "alias": "etiquette"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
380
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StIcon, "st-icon", never, { "nom": { "alias": "nom"; "required": false; "isSignal": true; }; "sprite": { "alias": "sprite"; "required": false; "isSignal": true; }; "nomMetier": { "alias": "nomMetier"; "required": false; "isSignal": true; }; "taille": { "alias": "taille"; "required": false; "isSignal": true; }; "ton": { "alias": "ton"; "required": false; "isSignal": true; }; "etiquette": { "alias": "etiquette"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
333
381
  }
334
382
 
335
383
  /**
@@ -420,6 +468,8 @@ declare class StSpinner {
420
468
  }
421
469
 
422
470
  type TonDeProgression = Extract<Ton, 'primaire' | 'succes' | 'danger'>;
471
+ /** `fine` : un trait de l'echelle des epaisseurs, pour une barre posee sous un en-tete. */
472
+ type EpaisseurDeProgression = 'normale' | 'fine';
423
473
  /**
424
474
  * Barre de progression, determinee ou indeterminee.
425
475
  *
@@ -434,6 +484,7 @@ declare class StProgress {
434
484
  /** Obligatoire : une barre sans nom accessible n'apprend rien. */
435
485
  readonly etiquette: _angular_core.InputSignal<string>;
436
486
  readonly ton: _angular_core.InputSignal<TonDeProgression>;
487
+ readonly epaisseur: _angular_core.InputSignal<EpaisseurDeProgression>;
437
488
  /** Texte lu a la place du pourcentage quand celui-ci n'est pas parlant. */
438
489
  readonly texteDeValeur: _angular_core.InputSignal<string | null>;
439
490
  protected readonly estIndeterminee: _angular_core.Signal<boolean>;
@@ -441,7 +492,7 @@ declare class StProgress {
441
492
  protected readonly valeurAnnoncee: _angular_core.Signal<number | null>;
442
493
  protected readonly pourcentage: _angular_core.Signal<number>;
443
494
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StProgress, never>;
444
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StProgress, "st-progress", never, { "valeur": { "alias": "valeur"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "etiquette": { "alias": "etiquette"; "required": true; "isSignal": true; }; "ton": { "alias": "ton"; "required": false; "isSignal": true; }; "texteDeValeur": { "alias": "texteDeValeur"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
495
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StProgress, "st-progress", never, { "valeur": { "alias": "valeur"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "etiquette": { "alias": "etiquette"; "required": true; "isSignal": true; }; "ton": { "alias": "ton"; "required": false; "isSignal": true; }; "epaisseur": { "alias": "epaisseur"; "required": false; "isSignal": true; }; "texteDeValeur": { "alias": "texteDeValeur"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
445
496
  }
446
497
 
447
498
  type VarianteDeSquelette = 'texte' | 'tableau' | 'carte';
@@ -598,6 +649,40 @@ declare class StButtonGroup {
598
649
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StButtonGroup, "st-button-group", never, { "etiquette": { "alias": "etiquette"; "required": true; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "attache": { "alias": "attache"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
599
650
  }
600
651
 
652
+ /**
653
+ * Barre d'actions d'un formulaire, collee en BAS de la zone de defilement.
654
+ *
655
+ * ```html
656
+ * <form (submit)="envoyer()">
657
+ * …
658
+ * <st-form-actions>
659
+ * <a debut stLink routerLink="..">Annuler</a>
660
+ * <button stButton type="button">Enregistrer le brouillon</button>
661
+ * <button stButton type="submit" variante="primaire">Valider le virement</button>
662
+ * </st-form-actions>
663
+ * </form>
664
+ * ```
665
+ *
666
+ * ⚠️ **`sticky`, JAMAIS `fixed`.** Un element fixe sort du flux : a 200 %
667
+ * d'echelle il recouvre les derniers champs, et dans une vue embarquee il se
668
+ * pose sous la barre du systeme. Collee, la barre reste dans le document —
669
+ * elle suit le formulaire, cede la place a son pied, et respecte la zone sure
670
+ * du bas de l'ecran (`env(safe-area-inset-bottom)`).
671
+ *
672
+ * ⚠️ **L'ordre du document est l'ordre visuel.** Rien n'est inverse par le
673
+ * style : l'action principale s'ecrit en dernier, elle se lit en dernier et se
674
+ * tabule en dernier — la ou la personne arrive apres avoir relu ses champs.
675
+ * L'emplacement `debut` accueille ce qui part a l'oppose (un retour, une
676
+ * annulation), et vient en premier dans les deux ordres.
677
+ *
678
+ * Une seule action principale par formulaire, et elle est un vrai
679
+ * `type="submit"` : Entree dans un champ l'envoie.
680
+ */
681
+ declare class StFormActions {
682
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StFormActions, never>;
683
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StFormActions, "st-form-actions", never, {}, {}, never, ["[debut]", "*"], true, never>;
684
+ }
685
+
601
686
  /**
602
687
  * Valeur technique courte et copiable : identifiant de trace, reference
603
688
  * d'operation, code d'erreur.
@@ -805,6 +890,54 @@ declare class StCount {
805
890
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StCount, "st-count", never, { "valeur": { "alias": "valeur"; "required": true; "isSignal": true; }; "ton": { "alias": "ton"; "required": false; "isSignal": true; }; "abregerAuDela": { "alias": "abregerAuDela"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
806
891
  }
807
892
 
893
+ type SensDeTendance = 'hausse' | 'baisse' | 'stable';
894
+ /** La tendance d'un indicateur, decrite par l'appelant. Le texte est deja traduit. */
895
+ interface TendanceDeStat {
896
+ readonly sens: SensDeTendance;
897
+ /** Ce qui s'affiche a cote de la fleche : « +2,4 % sur un mois ». */
898
+ readonly texte: string;
899
+ /**
900
+ * ⚠️ Choisi par l'appelant, et non deduit du sens : une hausse des frais est
901
+ * un `danger`, une hausse de l'epargne un `succes`. Le socle ne sait pas
902
+ * lequel des deux il affiche.
903
+ */
904
+ readonly ton?: TonSemantique;
905
+ }
906
+ /**
907
+ * Indicateur chiffre : un libelle, une valeur, et sa tendance.
908
+ *
909
+ * ```html
910
+ * <st-stat libelle="Solde disponible" [tendance]="{ sens: 'hausse', texte: '+2,4 % sur un mois', ton: 'succes' }">
911
+ * <st-money [valeur]="solde" />
912
+ * </st-stat>
913
+ * ```
914
+ *
915
+ * La valeur est PROJETEE : c'est `st-money`, `st-count` ou `st-date` qui la
916
+ * formate dans la langue courante, et le socle n'a pas a redire comment.
917
+ *
918
+ * ⚠️ **La tendance se lit par un texte ET une icone, jamais par la couleur
919
+ * seule.** Le texte de l'appelant porte deja le signe ; l'icone porte le sens ;
920
+ * et un mot lisible par lecteur seulement — « en hausse », « en baisse »,
921
+ * « stable » — precede le texte, parce qu'un lecteur d'ecran ne lit pas un
922
+ * chevron.
923
+ *
924
+ * Le libelle vient AVANT la valeur dans le document, comme dans une phrase :
925
+ * « Solde disponible, 1 234,50 € ». A l'ecran, il se pose au-dessus, en petit.
926
+ */
927
+ declare class StStat {
928
+ private readonly libelles;
929
+ /** Texte visible, deja traduit. */
930
+ readonly libelle: _angular_core.InputSignal<string>;
931
+ readonly tendance: _angular_core.InputSignal<TendanceDeStat | null>;
932
+ /** Precision sous la valeur : la periode, la source. Jamais une information critique. */
933
+ readonly precision: _angular_core.InputSignal<string | null>;
934
+ protected readonly icone: _angular_core.Signal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "tri" | "triangle-alerte" | "utilisateur" | null>;
935
+ protected readonly tonDeTendance: _angular_core.Signal<TonSemantique>;
936
+ protected readonly sensLu: _angular_core.Signal<string>;
937
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StStat, never>;
938
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StStat, "st-stat", never, { "libelle": { "alias": "libelle"; "required": true; "isSignal": true; }; "tendance": { "alias": "tendance"; "required": false; "isSignal": true; }; "precision": { "alias": "precision"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
939
+ }
940
+
808
941
  /**
809
942
  * ⚠️ `primaire` et non « info » : les deux designaient deja la meme couleur
810
943
  * d'accent, et rien ne distinguait un statut « info » d'un statut « primaire »
@@ -1187,15 +1320,21 @@ declare class StSkipLink {
1187
1320
  }
1188
1321
 
1189
1322
  /**
1190
- * Coquille d'une application : lien d'evitement, en-tete, navigation, contenu
1191
- * principal, pied de page.
1323
+ * Propriete posee sur `<html>` avec la hauteur mesuree de l'en-tete collant.
1324
+ * La feuille de `@starterlib/tokens` la lit dans `scroll-padding-block-start`.
1325
+ */
1326
+ declare const PROPRIETE_HAUTEUR_ENTETE = "--st-hauteur-entete";
1327
+ /**
1328
+ * Coquille d'une application : lien d'evitement, en-tete, bannieres globales,
1329
+ * navigation, contenu principal, pied de page.
1192
1330
  *
1193
1331
  * ```html
1194
1332
  * <st-app-shell>
1195
- * <ng-container entete>…</ng-container>
1196
- * <ng-container navigation>…</ng-container>
1333
+ * <st-header entete>…</st-header>
1334
+ * <st-offline-banner bannieres … />
1335
+ * <st-sidenav navigation>…</st-sidenav>
1197
1336
  * <router-outlet />
1198
- * <ng-container pied>…</ng-container>
1337
+ * <st-footer pied>…</st-footer>
1199
1338
  * </st-app-shell>
1200
1339
  * ```
1201
1340
  *
@@ -1218,11 +1357,28 @@ declare class StSkipLink {
1218
1357
  * `st-sidenav` qui porte ce repere. Pose ici aussi, il s'imbriquerait — le
1219
1358
  * lecteur d'ecran annoncerait « navigation, navigation » — et resterait vide
1220
1359
  * sur petit ecran, quand le contenu part dans le tiroir.
1360
+ *
1361
+ * ⚠️ **L'en-tete est collant, et la coquille en MESURE la hauteur** (WCAG
1362
+ * 2.4.11). Un element collant recouvre ce que le navigateur fait defiler vers
1363
+ * lui : sans decalage, chaque arret de tabulation qui remonte se cache SOUS
1364
+ * l'en-tete. La hauteur n'est pas connue d'avance — elle change avec le zoom,
1365
+ * la taille de police, le repli des actions — d'ou un `ResizeObserver`, qui
1366
+ * pose `--st-hauteur-entete` sur `<html>` ; la feuille de jetons la lit dans
1367
+ * `scroll-padding-block-start`. Sans navigateur (rendu serveur, jsdom), rien
1368
+ * n'est mesure et le repli de la feuille vaut zero.
1369
+ *
1370
+ * L'emplacement `bannieres` est un conteneur sans role, entre l'en-tete et le
1371
+ * corps : chaque banniere porte sa propre region vivante. Jamais `fixed`.
1221
1372
  */
1222
1373
  declare class StAppShell {
1374
+ private readonly document;
1375
+ private readonly entete;
1376
+ private observateur;
1223
1377
  protected readonly identifiantDuContenu = "contenu-principal";
1378
+ constructor();
1379
+ private mesurerLEntete;
1224
1380
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StAppShell, never>;
1225
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StAppShell, "st-app-shell", never, {}, {}, never, ["[entete]", "[navigation]", "*", "[pied]"], true, never>;
1381
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StAppShell, "st-app-shell", never, {}, {}, never, ["[entete]", "[bannieres]", "[navigation]", "*", "[pied]"], true, never>;
1226
1382
  }
1227
1383
 
1228
1384
  /**
@@ -1256,6 +1412,286 @@ declare class StHeader {
1256
1412
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StHeader, "st-header", never, {}, {}, never, ["[bascule]", "[marque]", "*"], true, never>;
1257
1413
  }
1258
1414
 
1415
+ /**
1416
+ * Contenu du pied de page : mentions, version, statut.
1417
+ *
1418
+ * ```html
1419
+ * <st-app-shell>
1420
+ * …
1421
+ * <st-footer pied>
1422
+ * <a mentions stLink routerLink="/mentions">Mentions legales</a>
1423
+ * <a mentions stLink routerLink="/aide">Aide</a>
1424
+ * <span version>Version 1.4.2</span>
1425
+ * <st-status-pill statut="ok" libelle="Services disponibles" icone="cercle-coche" ton="succes" />
1426
+ * </st-footer>
1427
+ * </st-app-shell>
1428
+ * ```
1429
+ *
1430
+ * ⚠️ **Aucun repere `contentinfo` ici** : le `footer` de `st-app-shell` le porte
1431
+ * deja, et un second en ferait annoncer deux. Ce composant est le CONTENU du
1432
+ * pied. Ses mentions, elles, forment un repere de navigation nomme — c'est ce
1433
+ * qui permet a un lecteur d'ecran de sauter directement aux liens du pied, et
1434
+ * de les distinguer de la navigation principale.
1435
+ *
1436
+ * ⚠️ L'aide se pose ICI, dans les mentions, et au meme endroit sur le gabarit
1437
+ * pleine page : WCAG 3.2.6 exige qu'un mecanisme d'aide garde sa place d'une
1438
+ * page a l'autre.
1439
+ *
1440
+ * ⚠️ La `version` est un texte affiche : jamais un secret de construction, ni
1441
+ * une empreinte de commit qui dirait a un attaquant exactement quel code tourne.
1442
+ * Le numero de version publie suffit au support.
1443
+ *
1444
+ * Le statut est un `st-status-pill` projete, reconnu a son ELEMENT : `statut`
1445
+ * est le nom d'une de ses entrees, et un attribut nu du meme nom lui passerait
1446
+ * une chaine vide. Icone et texte, jamais la couleur seule ; un autre element
1447
+ * prend sa place par `ngProjectAs="st-status-pill"`.
1448
+ */
1449
+ declare class StFooter {
1450
+ private readonly libelles;
1451
+ /** Nom du repere des mentions. `null` : le texte vient du dictionnaire. */
1452
+ readonly etiquette: _angular_core.InputSignal<string | null>;
1453
+ protected readonly etiquetteLue: _angular_core.Signal<string>;
1454
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StFooter, never>;
1455
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StFooter, "st-footer", never, { "etiquette": { "alias": "etiquette"; "required": false; "isSignal": true; }; }, {}, never, ["[mentions]", "[version]", "st-status-pill"], true, never>;
1456
+ }
1457
+
1458
+ /**
1459
+ * Lien de navigation principale, pose en attribut sur un `<a>` natif :
1460
+ * `routerLink`, etat actif, icone et pastille, en un seul geste.
1461
+ *
1462
+ * ```html
1463
+ * <st-sidenav navigation>
1464
+ * <a stNavLink="/comptes"><st-icon nom="fichier" />Comptes</a>
1465
+ * <a [stNavLink]="['/messages']">
1466
+ * Messages<span class="st-vh">, 5 non lus</span>
1467
+ * <st-badge [valeur]="5" />
1468
+ * </a>
1469
+ * </st-sidenav>
1470
+ * ```
1471
+ *
1472
+ * **Ou il vit, et pourquoi.** Dans le tronc, a cote de `st-breadcrumb` et non
1473
+ * dans `ui/interactions` avec `st-sidenav` : les points d'entree se decoupent
1474
+ * par pair lourd, et ce lien n'en traine aucun — `@angular/router` est deja
1475
+ * exige par le tronc. Une SPA qui rend sa navigation sans tiroir n'a pas a
1476
+ * charger Aria pour un lien.
1477
+ *
1478
+ * ⚠️ **L'etat actif est porte par `aria-current="page"`**, pose par le routeur,
1479
+ * et c'est sur lui que la feuille se branche — jamais sur la seule couleur : le
1480
+ * lien courant se lit a sa graisse et au marqueur sur son bord de depart, qui
1481
+ * survivent au contraste force. La classe `st-nav-link--actif` accompagne, pour
1482
+ * qui veut y accrocher un style.
1483
+ *
1484
+ * ⚠️ La pastille est `aria-hidden` : le compte qu'elle affiche doit entrer
1485
+ * dans le nom du lien, par un texte lisible par lecteur seulement (`.st-vh`),
1486
+ * compose par l'appelant.
1487
+ *
1488
+ * Un composant et non une directive, parce qu'il RANGE ce qu'on lui projette :
1489
+ * l'icone devant, la pastille derriere, le libelle entre les deux, sans que
1490
+ * l'ordre d'ecriture compte.
1491
+ */
1492
+ declare class StNavLink {
1493
+ constructor();
1494
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StNavLink, never>;
1495
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StNavLink, "a[stNavLink]", never, {}, {}, never, ["st-icon", "*", "st-badge"], true, [{ directive: typeof i1.RouterLink; inputs: { "routerLink": "stNavLink"; "queryParams": "queryParams"; "fragment": "fragment"; "queryParamsHandling": "queryParamsHandling"; "replaceUrl": "replaceUrl"; "state": "state"; }; outputs: {}; }, { directive: typeof i1.RouterLinkActive; inputs: { "routerLinkActiveOptions": "optionsDActivation"; }; outputs: {}; }]>;
1496
+ }
1497
+
1498
+ /**
1499
+ * En-tete de page : fil d'Ariane, titre de niveau 1, actions, onglets.
1500
+ * Premier enfant de la page d'un remote.
1501
+ *
1502
+ * ```html
1503
+ * <st-page-header precision="Trente derniers jours">
1504
+ * <st-breadcrumb [maillons]="maillons" />
1505
+ * Mes operations
1506
+ * <button stButton variante="primaire" actions>Exporter</button>
1507
+ * <st-tabs etiquette="Vue" [onglets]="onglets" [(selection)]="vue" />
1508
+ * </st-page-header>
1509
+ * ```
1510
+ *
1511
+ * ⚠️ Le fil et les onglets se reconnaissent a leur ELEMENT (`st-breadcrumb`,
1512
+ * `st-tabs`), pas a un attribut : `onglets` est deja le nom d'une entree de
1513
+ * `st-tabs`, et un attribut nu du meme nom lui passerait une chaine vide. Un
1514
+ * autre element prend leur place par `ngProjectAs="st-tabs"`.
1515
+ *
1516
+ * ⚠️ **Un seul `h1` par page, et c'est lui.** `StNavigation` de
1517
+ * `@starterlib/core` y pose le focus apres chaque changement de route — son
1518
+ * selecteur par defaut vise `h1, [role="heading"][aria-level="1"]` —, et le
1519
+ * lecteur d'ecran lit alors la phrase qui dit ou l'on vient d'arriver. Une
1520
+ * page qui titre ailleurs perd ce focus en silence (F14 du plan de la
1521
+ * coquille) ; une page qui titre deux fois le rend ambigu.
1522
+ *
1523
+ * ⚠️ Le fil d'Ariane vient AVANT le titre dans l'ordre du document, comme dans
1524
+ * la lecture : on sait d'ou l'on vient avant de lire ou l'on est. Les onglets
1525
+ * viennent apres : ils decoupent le contenu de la page, pas son identite.
1526
+ *
1527
+ * Il ne rend rien lui-meme d'autre que `st-page-title` : le fil, les actions et
1528
+ * les onglets sont ceux de la page, projetes.
1529
+ */
1530
+ declare class StPageHeader {
1531
+ /** Texte secondaire sous le titre. Jamais porteur d'information critique. */
1532
+ readonly precision: _angular_core.InputSignal<string | null>;
1533
+ /** Cible d'un `aria-labelledby` : une region se nomme par son titre. */
1534
+ readonly identifiant: _angular_core.InputSignal<string | null>;
1535
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StPageHeader, never>;
1536
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StPageHeader, "st-page-header", never, { "precision": { "alias": "precision"; "required": false; "isSignal": true; }; "identifiant": { "alias": "identifiant"; "required": false; "isSignal": true; }; }, {}, never, ["st-breadcrumb", "*", "[actions]", "st-tabs"], true, never>;
1537
+ }
1538
+
1539
+ /**
1540
+ * Barre fine de progression d'une navigation, sous l'en-tete.
1541
+ *
1542
+ * ```html
1543
+ * <st-header entete>…</st-header>
1544
+ * <st-route-progress entete [actif]="navigation.enCours()" />
1545
+ * ```
1546
+ *
1547
+ * ⚠️ **Rien avant `delaiMs`** (200 ms par defaut). Une navigation qui aboutit
1548
+ * en 80 ms n'a pas a clignoter : la barre apparaitrait et disparaitrait avant
1549
+ * d'etre lue, et l'oeil retiendrait un scintillement a chaque clic. Passe le
1550
+ * delai, elle reste jusqu'a la fin, meme si celle-ci survient juste apres.
1551
+ *
1552
+ * ⚠️ **Aucun `aria-busy` sur `main`**, et ce n'est pas un oubli : `aria-busy`
1553
+ * fait TAIRE les mises a jour de la region qu'il marque, y compris les annonces
1554
+ * de la page qui arrive. La barre est un `progressbar` indetermine et nomme :
1555
+ * c'est ce qu'un lecteur d'ecran trouve s'il la cherche, sans etre interrompu.
1556
+ *
1557
+ * Elle n'occupe aucune hauteur : posee en absolu sous son hote, elle ne fait
1558
+ * pas sauter la page en apparaissant.
1559
+ */
1560
+ declare class StRouteProgress {
1561
+ private readonly libelles;
1562
+ /** Vrai entre le debut et la fin d'une navigation. */
1563
+ readonly actif: _angular_core.InputSignalWithTransform<boolean, unknown>;
1564
+ /** Delai avant d'afficher quoi que ce soit. Zero : tout de suite. */
1565
+ readonly delaiMs: _angular_core.InputSignal<number>;
1566
+ /** `null` : « Chargement », du dictionnaire. */
1567
+ readonly etiquette: _angular_core.InputSignal<string | null>;
1568
+ protected readonly etiquetteLue: _angular_core.Signal<string>;
1569
+ private readonly visibleInterne;
1570
+ protected readonly visible: _angular_core.Signal<boolean>;
1571
+ constructor();
1572
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StRouteProgress, never>;
1573
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StRouteProgress, "st-route-progress", never, { "actif": { "alias": "actif"; "required": false; "isSignal": true; }; "delaiMs": { "alias": "delaiMs"; "required": false; "isSignal": true; }; "etiquette": { "alias": "etiquette"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1574
+ }
1575
+
1576
+ /**
1577
+ * Gabarit pleine page : connexion, mot de passe oublie, mode embarque.
1578
+ *
1579
+ * ```html
1580
+ * <st-auth-shell>
1581
+ * <st-logo entete nom="Banque Exemple" clair="/ui/socle/assets/logo.svg" />
1582
+ * <st-lang-switch entete … />
1583
+ * <st-theme-toggle entete … />
1584
+ * <st-banner banniere ton="neutre" [message]="motifDeRedirection()" />
1585
+ * <router-outlet />
1586
+ * <a pied stLink routerLink="/mentions">Mentions legales</a>
1587
+ * <a pied stLink routerLink="/aide">Aide</a>
1588
+ * </st-auth-shell>
1589
+ * ```
1590
+ *
1591
+ * Ce que `st-app-shell` a, et qu'il n'a PAS, volontairement : ni navigation
1592
+ * laterale (rien a naviguer avant d'etre connecte), ni avertissement
1593
+ * d'inactivite (pas de session a fermer), ni messages ephemeres (rien ne se
1594
+ * passe en arriere-plan). Ce qu'il garde : le lien d'evitement — une page de
1595
+ * connexion se traverse aussi au clavier —, un `main` etroit centre a la
1596
+ * mesure de lecture, et les trois reperes, une fois chacun.
1597
+ *
1598
+ * ⚠️ **L'aide au meme endroit que dans l'application** (WCAG 3.2.6) : dans le
1599
+ * pied, comme dans `st-footer`. Une personne qui a trouve l'aide en bas de page
1600
+ * une fois doit la retrouver la, connectee ou non.
1601
+ *
1602
+ * L'emplacement `banniere`, en tete du `main`, recoit le MOTIF d'arrivee :
1603
+ * session expiree, fermee ailleurs, mot de passe reinitialise. Un `st-banner`
1604
+ * neutre y suffit ; jamais un message ephemere, qui serait manque.
1605
+ */
1606
+ declare class StAuthShell {
1607
+ protected readonly identifiantDuContenu = "contenu-principal";
1608
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StAuthShell, never>;
1609
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StAuthShell, "st-auth-shell", never, {}, {}, never, ["[entete]", "[banniere]", "*", "[pied]"], true, never>;
1610
+ }
1611
+
1612
+ /** Une etape d'un parcours, decrite par l'appelant. Le texte est deja traduit. */
1613
+ interface EtapeDeParcours {
1614
+ readonly libelle: string;
1615
+ }
1616
+ type EtatDEtape = 'faite' | 'courante' | 'a-venir';
1617
+ /**
1618
+ * Parcours par etapes : ou l'on en est, ce qui est fait, ce qui reste.
1619
+ *
1620
+ * ```html
1621
+ * <st-stepper [etapes]="etapes" [etape]="indice()" />
1622
+ * ```
1623
+ *
1624
+ * ⚠️ Une liste ORDONNEE : l'ordre des etapes est l'information, et le lecteur
1625
+ * d'ecran annonce « 2 sur 4 » de lui-meme. L'etape courante porte
1626
+ * `aria-current="step"`, ce qui est exactement le mot de la specification.
1627
+ *
1628
+ * ⚠️ **L'etat de chaque etape se lit par sa forme ET par un texte**, jamais par
1629
+ * la couleur seule : une coche pour ce qui est fait, un numero plein pour
1630
+ * l'etape en cours, un numero cercle pour ce qui vient ; et un mot lisible par
1631
+ * lecteur seulement — « terminee », « en cours », « a venir » — apres chaque
1632
+ * libelle. Sous contraste force, il ne reste que la forme et le mot.
1633
+ *
1634
+ * Il n'est PAS interactif : revenir a une etape est une decision du parcours,
1635
+ * qui la rend par un vrai lien ou un vrai bouton dans la page. Un indicateur
1636
+ * cliquable promettrait un retour que tous les parcours n'autorisent pas.
1637
+ */
1638
+ declare class StStepper {
1639
+ private readonly libelles;
1640
+ readonly etapes: _angular_core.InputSignal<readonly EtapeDeParcours[]>;
1641
+ /** Indice de l'etape en cours, a partir de zero. */
1642
+ readonly etape: _angular_core.InputSignal<number>;
1643
+ /** Nom de la liste. `null` : « Etapes », du dictionnaire. */
1644
+ readonly etiquette: _angular_core.InputSignal<string | null>;
1645
+ protected readonly etiquetteLue: _angular_core.Signal<string>;
1646
+ protected readonly lignes: _angular_core.Signal<{
1647
+ libelle: string;
1648
+ numero: number;
1649
+ etat: EtatDEtape;
1650
+ texteDEtat: string;
1651
+ }[]>;
1652
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StStepper, never>;
1653
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StStepper, "st-stepper", never, { "etapes": { "alias": "etapes"; "required": true; "isSignal": true; }; "etape": { "alias": "etape"; "required": true; "isSignal": true; }; "etiquette": { "alias": "etiquette"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1654
+ }
1655
+
1656
+ /**
1657
+ * Ligne de reglage : un libelle, une description, et le controle qui les suit.
1658
+ *
1659
+ * ```html
1660
+ * <st-settings-row libelle="Alertes par SMS" description="Un SMS a chaque virement sortant.">
1661
+ * <st-switch libelle="Activer" [(checked)]="sms" />
1662
+ * </st-settings-row>
1663
+ * ```
1664
+ *
1665
+ * ⚠️ **La ligne est un GROUPE nomme et decrit, et non une etiquette.** Le
1666
+ * controle projete garde son propre nom — celui de son `libelle`, ou un
1667
+ * `aria-label` pour un element natif — et la ligne l'enveloppe d'un
1668
+ * `role="group"` relie a son libelle par `aria-labelledby` et a sa description
1669
+ * par `aria-describedby`. En entrant dans le groupe, le lecteur d'ecran lit le
1670
+ * libelle, puis la description, puis le controle : « Alertes par SMS, groupe,
1671
+ * Un SMS a chaque virement sortant, Activer, interrupteur, desactive ».
1672
+ *
1673
+ * Pourquoi pas un `label for` : la plupart des controles du socle portent deja
1674
+ * leur etiquette, et un controle non natif (un groupe segmente, un declencheur
1675
+ * de menu) n'en accepte aucun. Le groupe, lui, marche pour tous, sans que la
1676
+ * ligne ait a connaitre ce qu'on lui projette.
1677
+ *
1678
+ * ⚠️ Un reglage s'applique IMMEDIATEMENT (c'est le sens de `st-switch`) ou
1679
+ * s'envoie avec un formulaire : la ligne ne tranche pas, le controle le dit.
1680
+ */
1681
+ declare class StSettingsRow {
1682
+ /** Texte visible, deja traduit : le socle ne traduit rien. */
1683
+ readonly libelle: _angular_core.InputSignal<string>;
1684
+ /** Ce que le reglage fait, en une phrase. Reliee au groupe par `aria-describedby`. */
1685
+ readonly description: _angular_core.InputSignal<string | null>;
1686
+ /** Identifiants du libelle et de la description, cibles des attributs ARIA. */
1687
+ readonly identifiants: {
1688
+ readonly libelle: `${string}-libelle`;
1689
+ readonly description: `${string}-description`;
1690
+ };
1691
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StSettingsRow, never>;
1692
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StSettingsRow, "st-settings-row", never, { "libelle": { "alias": "libelle"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1693
+ }
1694
+
1259
1695
  type TonDeBanniere = TonSemantique;
1260
1696
  /**
1261
1697
  * Message de page, persistant jusqu'a ce qu'on le ferme.
@@ -2167,6 +2603,22 @@ declare class StCalendar {
2167
2603
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StCalendar, "st-calendar", never, { "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "dateMin": { "alias": "dateMin"; "required": false; "isSignal": true; }; "dateMax": { "alias": "dateMax"; "required": false; "isSignal": true; }; "plage": { "alias": "plage"; "required": false; "isSignal": true; }; }, { "choix": "choix"; "fermeture": "fermeture"; }, never, never, true, never>;
2168
2604
  }
2169
2605
 
2606
+ /**
2607
+ * Cle d'un fichier choisi : deux choix du meme fichier ne l'ajoutent pas deux
2608
+ * fois, et l'application s'en sert pour dire ou en est chaque televersement.
2609
+ */
2610
+ declare function cleDeFichier(fichier: File): string;
2611
+ /**
2612
+ * Ou en est un fichier, vu de l'application. `message` dit POURQUOI un fichier
2613
+ * est refuse — « antivirus indisponible » et « type refuse » n'appellent pas la
2614
+ * meme suite (UX-3 de la 0.6.0).
2615
+ */
2616
+ interface EtatDeTeleversementAffiche {
2617
+ readonly etape: 'en-cours' | 'depose' | 'refuse';
2618
+ /** 0 a 100, pendant l'envoi. */
2619
+ readonly progression?: number;
2620
+ readonly message?: string;
2621
+ }
2170
2622
  /**
2171
2623
  * Choix de fichiers, sur un `input type="file"` natif.
2172
2624
  *
@@ -2195,6 +2647,11 @@ declare class StCalendar {
2195
2647
  * Chaque changement de la liste s'annonce : « 2 fichiers choisis ». Un fichier
2196
2648
  * retire rend le focus au bouton de retrait suivant, ou au choix de fichiers : le
2197
2649
  * focus ne tombe jamais sur le document.
2650
+ *
2651
+ * ⚠️ **Il ne televerse pas.** `etats` dit ou en est chaque fichier, et le bouton
2652
+ * de la ligne devient « Annuler » pendant l'envoi : le trajet — declaration, depot
2653
+ * pre-signe, confirmation antivirus — vit dans `StTeleversement`
2654
+ * (`@starterlib/core`), seul a parler au reseau.
2198
2655
  */
2199
2656
  declare class StFileUpload extends ContratDeChamp implements FormValueControl<readonly File[]> {
2200
2657
  protected readonly libelles: _angular_core.Signal<_starterlib_ui.LibellesUi>;
@@ -2207,6 +2664,11 @@ declare class StFileUpload extends ContratDeChamp implements FormValueControl<re
2207
2664
  readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
2208
2665
  /** En octets. Affiche en aide ; la verification est dans le schema. */
2209
2666
  readonly tailleMax: _angular_core.InputSignal<number | null>;
2667
+ /**
2668
+ * Ou en est chaque fichier, par `cleDeFichier`. Le composant AFFICHE ce trajet,
2669
+ * il ne le fait pas : `StTeleversement` de `@starterlib/core` s'en charge.
2670
+ */
2671
+ readonly etats: _angular_core.InputSignal<ReadonlyMap<string, EtatDeTeleversementAffiche> | null>;
2210
2672
  protected readonly annonce: AnnonceLocale;
2211
2673
  protected readonly survol: _angular_core.WritableSignal<boolean>;
2212
2674
  protected readonly aideLue: _angular_core.Signal<string | null>;
@@ -2214,15 +2676,18 @@ declare class StFileUpload extends ContratDeChamp implements FormValueControl<re
2214
2676
  fichier: File;
2215
2677
  cle: string;
2216
2678
  taille: string;
2679
+ etat: EtatDeTeleversementAffiche | null;
2217
2680
  }[]>;
2218
2681
  protected surChoix(evenement: Event): void;
2219
2682
  protected surSurvol(evenement: DragEvent): void;
2220
2683
  protected surDepot(evenement: DragEvent): void;
2684
+ /** Emis quand la personne interrompt un envoi : c'est l'application qui annule. */
2685
+ readonly annulation: _angular_core.OutputEmitterRef<File>;
2221
2686
  protected retirer(indice: number): void;
2222
2687
  protected aLaSortie(evenement: FocusEvent): void;
2223
2688
  private ajouter;
2224
2689
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StFileUpload, never>;
2225
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StFileUpload, "st-file-upload", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "tailleMax": { "alias": "tailleMax"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
2690
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StFileUpload, "st-file-upload", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "tailleMax": { "alias": "tailleMax"; "required": false; "isSignal": true; }; "etats": { "alias": "etats"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "annulation": "annulation"; }, never, never, true, never>;
2226
2691
  }
2227
2692
 
2228
2693
  /**
@@ -2981,5 +3446,5 @@ declare class StChargement {
2981
3446
  /** Toutes les directives de gabarit, a importer d'un coup. */
2982
3447
  declare const GABARITS_D_ETAT: readonly [typeof StSucces, typeof StErreur, typeof StVide, typeof StHorsLigne, typeof StChargement];
2983
3448
 
2984
- export { AnnonceLocale, CHEMIN_DU_SPRITE, ContratDeChamp, ControleDeSaisie, FUSEAU_PAR_DEFAUT, GABARITS_D_ETAT, IDENTIFIANT_DU_CONTENU_PRINCIPAL, LIBELLES_EN, LIBELLES_FR, NOMS_DICONE, REGION_VIVANTE_PARENTE, ST_LIBELLES, ST_LOCALE, StAppShell, StAvatar, StBadge, StBanner, StBreadcrumb, StButton, StButtonGroup, StCalendar, StCard, StCellule, StChargement, StCheckbox, StCode, StControleDeChamp, StCopyButton, StCount, StDataTable, StDate, StDescription, StDescriptionList, StDivider, StElementDeListe, StEmpty, StErreur, StError, StErrorSummary, StFieldset, StFileUpload, StFilterBar, StFilterChip, StFormField, StHeader, StHeading, StHorsLigne, StIbanField, StIcon, StIconButton, StInlineMessage, StInput, StLangSwitch, StLink, StList, StLogo, StMasked, StMoney, StOfflineBanner, StOtpField, StPageTitle, StPagination, StPasswordField, StPhoneField, StProgress, StRadioGroup, StRelativeTime, StSearchField, StSection, StSelect, StSkeleton, StSkipLink, StSortHeader, StSpinner, StState, StStatusPill, StSucces, StSwitch, StTableauVide, StTag, StText, StTextarea, StThemeToggle, StTimer, StVide, copierDansLePressePapiers, erreurDate, erreurIban, erreurPlageDeDates, erreurTelephone, erreursDeFichiers, exempleDeDate, filtrerOptions, formaterDuree, fournirCheminDuSprite, fusionnerErreurs, messageDErreur, motifLocal, normaliserPourRecherche, pressePapiersDisponible, provideStarterUi };
2985
- export type { BornesDeDate, ColonneDeTableau, ConfigurationUi, ContexteDElementDeListe, ContexteDeCellule, ContexteDeDescription, DensiteDeTableau, DispositionDeChamp, ElementDeDescription, ElementDeSaisie, ErreurAffichable, FiltreActif, Focalisable, FormatDeDate, GraisseDeTexte, IssueDeCopie, LibellesUi, MaillonDeFil, ModeDePagination, NiveauDeTitre, NomDIcone, OptionDeListe, OptionRadio, OrientationDeSeparateur, ReglesDeFichiers, ReliefDeCarte, RembourrageDeCarte, RemplissageDeTelephone, SensDeTri, TailleDIcone, TailleDeBouton, TailleDeSpinner, TailleDeTitre, TonDIcone, TonDeBadge, TonDeBanniere, TonDeMessage, TonDeProgression, TonDeSpinner, TonDeStatut, TriDeTableau, TypeDeSaisie, TypeMasque, UsageDuMotDePasse, VarianteDErreur, VarianteDeBouton, VarianteDeBoutonIcone, VarianteDeLien, VarianteDeSquelette, VarianteDeTexte };
3449
+ export { AnnonceLocale, CHEMIN_DU_SPRITE, ContratDeChamp, ControleDeSaisie, FUSEAU_PAR_DEFAUT, GABARITS_D_ETAT, IDENTIFIANT_DU_CONTENU_PRINCIPAL, LIBELLES_EN, LIBELLES_FR, NOMS_DICONE, PROPRIETE_HAUTEUR_ENTETE, REGION_VIVANTE_PARENTE, ST_LIBELLES, ST_LOCALE, StAppShell, StAuthShell, StAvatar, StBadge, StBanner, StBreadcrumb, StButton, StButtonGroup, StCalendar, StCard, StCellule, StChargement, StCheckbox, StCode, StControleDeChamp, StCopyButton, StCount, StDataTable, StDate, StDescription, StDescriptionList, StDivider, StElementDeListe, StEmpty, StErreur, StError, StErrorSummary, StFieldset, StFileUpload, StFilterBar, StFilterChip, StFooter, StFormActions, StFormField, StHeader, StHeading, StHorsLigne, StIbanField, StIcon, StIconButton, StInlineMessage, StInput, StLangSwitch, StLink, StList, StLogo, StMasked, StMoney, StNavLink, StOfflineBanner, StOtpField, StPageHeader, StPageTitle, StPagination, StPasswordField, StPhoneField, StProgress, StRadioGroup, StRelativeTime, StRouteProgress, StSearchField, StSection, StSelect, StSettingsRow, StSkeleton, StSkipLink, StSortHeader, StSpinner, StStat, StState, StStatusPill, StStepper, StSucces, StSwitch, StTableauVide, StTag, StText, StTextarea, StThemeToggle, StTimer, StVide, cleDeFichier, copierDansLePressePapiers, erreurDate, erreurIban, erreurPlageDeDates, erreurTelephone, erreursDeFichiers, exempleDeDate, filtrerOptions, formaterDuree, fournirCheminDuSprite, fusionnerErreurs, messageDErreur, motifLocal, normaliserPourRecherche, pressePapiersDisponible, provideStarterUi };
3450
+ export type { BornesDeDate, ColonneDeTableau, ConfigurationUi, ContexteDElementDeListe, ContexteDeCellule, ContexteDeDescription, DensiteDeTableau, DispositionDeChamp, ElementDeDescription, ElementDeSaisie, EpaisseurDeProgression, ErreurAffichable, EtapeDeParcours, EtatDEtape, EtatDeTeleversementAffiche, FiltreActif, Focalisable, FormatDeDate, GraisseDeTexte, IssueDeCopie, LibellesUi, MaillonDeFil, ModeDePagination, NiveauDeTitre, NomDIcone, OptionDeListe, OptionRadio, OrientationDeSeparateur, ReglesDeFichiers, ReliefDeCarte, RembourrageDeCarte, RemplissageDeTelephone, SensDeTendance, SensDeTri, TailleDIcone, TailleDeBouton, TailleDeSpinner, TailleDeTitre, TendanceDeStat, TonDIcone, TonDeBadge, TonDeBanniere, TonDeMessage, TonDeProgression, TonDeSpinner, TonDeStatut, TriDeTableau, TypeDeSaisie, TypeMasque, UsageDuMotDePasse, VarianteDErreur, VarianteDeBouton, VarianteDeBoutonIcone, VarianteDeLien, VarianteDeSquelette, VarianteDeTexte };