@starterlib/ui 0.10.3 → 0.10.5

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.
@@ -1,7 +1,7 @@
1
1
  import { AnnonceLocale, Icone, TailleDAvatar, TailleDIconeFixe, TonDAvatar } from "@starterlib/ui";
2
2
  import * as i0 from "@angular/core";
3
3
  import { Ton, TonSemantique } from "@starterlib/util";
4
- import { Montant } from "@starterlib/util/valeurs";
4
+ import { BlocDeDocument, DocumentStructure, EmphaseDeDocument, LienDeDocument, Montant, MorceauDeTexte } from "@starterlib/util/valeurs";
5
5
  export type TypeMasque = 'iban' | 'carte' | 'telephone' | 'reference';
6
6
  /**
7
7
  * `ligne` : dans le flux d'une phrase ou d'une cellule. `tuile` : la tuile de la planche 2
@@ -1579,5 +1579,67 @@ export declare class StCode {
1579
1579
  "copie": "copie";
1580
1580
  }, never, never, true, never>;
1581
1581
  }
1582
+ /** Un titre de page va de 1 a 6 ; un document en occupe trois, decales. */
1583
+ type NiveauDeTitre = 2 | 3 | 4 | 5;
1584
+ /**
1585
+ * Un document structure (`DocumentStructure` de `@starterlib/util/valeurs`) rendu PAR GABARIT :
1586
+ * aide, mentions legales, confidentialite, declaration d'accessibilite, message de maintenance
1587
+ * (lot 280, N11).
1588
+ *
1589
+ * ```html
1590
+ * <st-document [document]="mentions()" />
1591
+ * ```
1592
+ *
1593
+ * ⚠️ **Aucun HTML, aucun puits DOM.** Chaque noeud a son element dans le gabarit (`@for`,
1594
+ * `@switch`) : titres, paragraphes, listes, `<strong>`, `<em>`, liens. Le texte est interpole,
1595
+ * jamais interprete — `require-trusted-types-for 'script'` n'a rien a refuser, et un catalogue
1596
+ * forge ne peut rien injecter.
1597
+ *
1598
+ * ⚠️ **Des liens internes seulement**, suivis par le routeur : le document ne mene jamais a une
1599
+ * autre origine. `validerLeDocument` (et le schema publie) refuse deja un lien qui n'est pas un
1600
+ * chemin `/...` ; le composant, lui, ne rend qu'un document ainsi valide.
1601
+ *
1602
+ * ⚠️ **Des liens legers.** Un `<a>` natif par lien — `href` prepare par `Location` (la base de
1603
+ * l'application comprise), l'apparence du lien de phrase du socle — et UN ecouteur de clic sur
1604
+ * l'hote, qui confie la navigation au routeur. Un `stLink` et un `routerLink` par lien coutaient
1605
+ * 464 ms pour 2 000 liens au banc (lot 280) : une page d'aide ne doit pas figer l'ecran.
1606
+ *
1607
+ * ⚠️ **Les titres suivent la page.** Un document commence au niveau 2 (sous le `h1` de la page) ;
1608
+ * `niveauDeDepart` le decale quand il vit plus bas (dans une section `h2`, il commence a 3). Un
1609
+ * niveau ne saute jamais.
1610
+ */
1611
+ export declare class StDocument {
1612
+ readonly document: import("@angular/core").InputSignal<DocumentStructure>;
1613
+ /** Le niveau du premier titre du document dans la page : 2 (defaut) ou 3. */
1614
+ readonly niveauDeDepart: import("@angular/core").InputSignal<2 | 3>;
1615
+ private readonly decalage;
1616
+ private readonly routeur;
1617
+ private readonly emplacement;
1618
+ /** L'adresse d'un lien interne, telle que le navigateur l'ouvrira (base de l'application comprise). */
1619
+ protected adresse(chemin: string): string;
1620
+ /**
1621
+ * Un clic sur un lien du document : le routeur navigue, sans recharger. Un clic du milieu ou
1622
+ * avec une touche (nouvel onglet, nouvelle fenetre) reste au navigateur, comme pour `routerLink`.
1623
+ */
1624
+ protected suivre(evenement: MouseEvent): void;
1625
+ protected niveau(bloc: Extract<BlocDeDocument, {
1626
+ type: 'titre';
1627
+ }>): NiveauDeTitre;
1628
+ protected estLien(morceau: MorceauDeTexte): morceau is LienDeDocument;
1629
+ protected estEmphase(morceau: MorceauDeTexte): morceau is EmphaseDeDocument;
1630
+ static ɵfac: i0.ɵɵFactoryDeclaration<StDocument, never>;
1631
+ static ɵcmp: i0.ɵɵComponentDeclaration<StDocument, "st-document", never, {
1632
+ "document": {
1633
+ "alias": "document";
1634
+ "required": true;
1635
+ "isSignal": true;
1636
+ };
1637
+ "niveauDeDepart": {
1638
+ "alias": "niveauDeDepart";
1639
+ "required": false;
1640
+ "isSignal": true;
1641
+ };
1642
+ }, {}, never, never, true, never>;
1643
+ }
1582
1644
 
1583
1645
  export {};
@@ -1,95 +1,164 @@
1
1
  import * as i0 from "@angular/core";
2
+ import { InjectionToken, Provider, Signal } from "@angular/core";
3
+ import { CatalogueDuPointDEntree } from "@starterlib/ui";
4
+ import { StDialog } from "@starterlib/ui/surfaces";
2
5
  /**
3
- * `rail` (lot 176) : RESERVE au rail de 72 px de la planche 6 (D22 : tiroir sous `md`, rail de `md` a
4
- * `xl`, colonne au-dela), que le lot 235 dessine. Le type est fixe des la 0.9 pour que ce lot ne
5
- * change pas une sortie publique (`modeEffectif`) ; d'ici la, le rail se rend en colonne.
6
+ * Les libelles de `@starterlib/ui/navigation` (lot 235) : le catalogue par point d'entree (AD-10,
7
+ * D154), comme ceux de l'arbre et des formulaires. La langue suit celle du dictionnaire du tronc ;
8
+ * le nom du repere de navigation (`navigationPrincipale`), lui, reste au tronc.
9
+ */
10
+ export interface LibellesNavigation {
11
+ /** Le titre visible du tiroir, qui le nomme (« Menu ») : distinct du nom du `<nav>` qu'il contient. */
12
+ readonly menu: string;
13
+ /** La fermeture visible du tiroir, obligatoire au tactile (APG dialog). */
14
+ readonly fermerLeMenu: string;
15
+ }
16
+ export declare const LIBELLES_NAVIGATION_FR: LibellesNavigation;
17
+ export declare const LIBELLES_NAVIGATION_EN: LibellesNavigation;
18
+ /**
19
+ * Les catalogues de la navigation par langue (sous-etiquette primaire : `fr`, `en`). Une
20
+ * application qui ajoute une langue au dictionnaire du tronc ajoute la sienne ici, par
21
+ * `fournirLibellesNavigation({ de: ... })`.
22
+ */
23
+ export declare const ST_LIBELLES_NAVIGATION: InjectionToken<Readonly<Record<string, LibellesNavigation>>>;
24
+ /** Ajoute (ou remplace) des catalogues de la navigation, par langue. */
25
+ export declare function fournirLibellesNavigation(catalogues: Readonly<Record<string, LibellesNavigation>>): Provider;
26
+ /**
27
+ * Le catalogue de la langue du dictionnaire du tronc ; le francais quand la langue n'en a pas, un
28
+ * repli signale en developpement (D-29). A appeler dans un contexte d'injection.
29
+ */
30
+ export declare function libellesDeLaNavigation(): Signal<LibellesNavigation>;
31
+ /**
32
+ * Le catalogue de la navigation ET la langue de son repli (`catalogueDuPointDEntree`) : `lang` de
33
+ * ce qu'il ecrit seul (D-29). A appeler dans un contexte d'injection.
34
+ */
35
+ export declare function catalogueDeLaNavigation(): Signal<CatalogueDuPointDEntree<LibellesNavigation>>;
36
+ /**
37
+ * `auto` suit D22 (planche 6) : tiroir sous `md`, rail de `md` a `xl`, colonne des `xl`.
38
+ * `rail` (lot 235) : une colonne de 72 px (`--st-largeur-rail`) qui ne montre que les icones des
39
+ * liens ; le libelle de chacun parait en infobulle au survol et au focus, et reste son nom.
6
40
  */
7
41
  export type ModeDeNavigation = 'auto' | 'persistant' | 'modal' | 'rail';
42
+ /** Ce que la navigation rend REELLEMENT : `repli` est le tiroir ouvert sans couche. */
43
+ export type DispositionDeNavigation = 'colonne' | 'rail' | 'tiroir' | 'repli';
8
44
  /**
9
- * Navigation laterale : une region a cote du contenu sur grand ecran, un tiroir
10
- * sur petit ecran.
45
+ * Navigation laterale : une colonne a cote du contenu sur grand ecran, un rail d'icones entre
46
+ * `md` et `xl`, un tiroir sur petit ecran (D22).
11
47
  *
12
48
  * ```html
13
49
  * <st-app-shell>
14
- * <button entete stButton [stSidenavToggle]="navigation">Menu</button>
15
- * <st-sidenav navigation #navigation etiquette="Navigation principale">
16
- * <a routerLink="/comptes">Comptes</a>
50
+ * <st-header entete>
51
+ * <button bascule stIconButton icone="menu" etiquette="Menu" [stSidenavToggle]="navigation"></button>
52
+ * <st-lang-switch secondaire … />
53
+ * </st-header>
54
+ * <st-sidenav navigation #navigation>
55
+ * <a stNavLink="/comptes"><st-icon nom="portefeuille" taille="24" />Comptes</a>
56
+ * <st-lang-switch secondaire … />
57
+ * <a pied stNavLink="/deconnexion"><st-icon nom="deconnexion" taille="24" />Se deconnecter</a>
17
58
  * </st-sidenav>
18
59
  * …
19
60
  * </st-app-shell>
20
61
  * ```
21
62
  *
22
- * ⚠️ **Deux modes, jamais confondus.** Persistante, c'est une REGION de la page :
23
- * aucun piege, rien a ouvrir. Modale, c'est un TIROIR, donc un `StDialog` — role,
24
- * piegeage du focus, Echap, retour du focus au bouton — et non une region
25
- * glissee par-dessus la page avec un peu de CSS, qui laisserait le clavier
26
- * parcourir la page cachee dessous.
63
+ * ⚠️ **Des modes jamais confondus.** En colonne et en rail, c'est une REGION de la page : aucun
64
+ * piege, rien a ouvrir ; la colonne est COLLANTE sous l'en-tete et defile en elle-meme. En tiroir,
65
+ * c'est un `StDialog` — role, piegeage du focus, Echap, retour du focus au bouton — nomme par son
66
+ * titre visible « Menu », avec sa fermeture « Fermer le menu » ; le `<nav>` qu'il contient garde
67
+ * son nom. Jamais une region glissee par-dessus la page avec un peu de CSS, qui laisserait le
68
+ * clavier parcourir la page cachee dessous.
69
+ *
70
+ * ⚠️ **Elle porte son propre `<nav>`, et un seul a la fois.** En tiroir, la region en ligne
71
+ * DISPARAIT : laissee en place, elle resterait un repere vide.
27
72
  *
28
- * ⚠️ **Elle porte son propre `<nav>`, et un seul a la fois.** Sur petit ecran,
29
- * la region en ligne DISPARAIT quand le tiroir prend le relais : laissee en
30
- * place, elle resterait un repere de navigation vide, que le lecteur d'ecran
31
- * proposerait sans rien y trouver.
73
+ * ⚠️ **Aucun echec silencieux.** Si le module des surfaces ne se charge pas (hors ligne, cache
74
+ * vide), le tiroir s'ouvre EN LIGNE, sous l'en-tete, sans voile ni piege (`data-mode="repli"`) :
75
+ * un simple depliant, qu'Echap et toute navigation referment.
32
76
  *
33
- * Un lien suivi dans le tiroir le ferme : `StDialog` se ferme a toute navigation
34
- * du routeur.
77
+ * Deux creneaux : `[pied]` en bas de la navigation (deconnexion, aide, version), `[secondaire]`
78
+ * pour les actions que l'en-tete retire sous `md` (langue, theme), reproposees par le tiroir.
79
+ * Un lien suivi dans le tiroir le ferme : `StDialog` se ferme a toute navigation du routeur.
35
80
  */
36
81
  export declare class StSidenav {
37
82
  private readonly injecteur;
38
83
  private readonly libelles;
84
+ /** « Menu » et « Fermer le menu » : le catalogue du point d'entree (D154), et sa langue de repli. */
85
+ protected readonly catalogue: import("@angular/core").Signal<import("@starterlib/ui").CatalogueDuPointDEntree<import("@starterlib/ui/navigation").LibellesNavigation>>;
39
86
  /**
40
- * Nom du repere. `null` : « Navigation principale », du dictionnaire. A
41
- * renseigner des qu'une page compte deux navigations, qui doivent se
42
- * distinguer.
87
+ * Nom du repere de navigation. `null` : « Navigation principale », du dictionnaire. A
88
+ * renseigner des qu'une page compte deux navigations, qui doivent se distinguer. Le tiroir,
89
+ * lui, se nomme toujours « Menu ».
43
90
  */
44
91
  readonly etiquette: import("@angular/core").InputSignal<string | null>;
45
92
  protected readonly etiquetteLue: import("@angular/core").Signal<string>;
46
- /** `auto` : persistante sur grand ecran, tiroir en dessous. */
93
+ /** `auto` : colonne des `xl`, rail de `md` a `xl`, tiroir en dessous (D22). */
47
94
  readonly mode: import("@angular/core").InputSignal<ModeDeNavigation>;
48
- protected readonly identifiant: string;
95
+ /**
96
+ * Identifiant du `<nav>` : celui que le bouton de bascule vise par `aria-controls` (lot 234),
97
+ * present en ligne ou dans le tiroir ouvert. Tiroir ferme, le `<nav>` n'existe pas encore, et
98
+ * `aria-expanded="false"` dit pourquoi.
99
+ */
100
+ readonly identifiant: string;
101
+ protected readonly identifiantDuTitre: string;
102
+ private readonly ecranMoyen;
49
103
  private readonly ecranLarge;
50
104
  /** Mode reellement applique. Lu par le bouton, qui ne s'affiche qu'en tiroir. */
51
105
  readonly modeEffectif: import("@angular/core").Signal<"persistant" | "modal" | "rail">;
52
106
  private readonly ouvertInterne;
53
107
  readonly ouvert: import("@angular/core").Signal<boolean>;
108
+ private readonly repliInterne;
109
+ /** Tiroir ouvert SANS couche : le module des surfaces n'a pas pu etre charge. */
110
+ readonly repli: import("@angular/core").Signal<boolean>;
111
+ /** Ce que la navigation rend, pose en `data-disposition` sur le `<nav>` : la feuille le lit. */
112
+ protected readonly disposition: import("@angular/core").Signal<DispositionDeNavigation>;
54
113
  private readonly chargementDuTiroir;
55
114
  /**
56
115
  * Le module du tiroir se charge encore, passe `rythme.delai.attente` (03 §3.9,
57
- * MV-12). Lu par le bouton de bascule, qui pose `aria-busy` : sans lui,
58
- * l'ouverture differee etait INVISIBLE, et un second clic semblait necessaire.
59
- * Pas d'indicateur dans un bouton-icone de 44 px : le curseur d'attente suffit.
116
+ * MV-12). Lu par le bouton de bascule, qui pose `aria-busy` et le curseur d'attente : sans
117
+ * lui, l'ouverture differee etait INVISIBLE, et un second clic semblait necessaire.
60
118
  */
61
119
  readonly enAttente: import("@angular/core").Signal<boolean>;
62
120
  private readonly gabarit;
63
121
  private reference;
64
122
  private ouvertureEnCours;
123
+ private demande;
65
124
  private detruit;
66
125
  /**
67
126
  * Le service de dialogue, charge a la PREMIERE ouverture et garde ensuite.
68
- * Rend `null` si le composant a ete detruit pendant l'attente.
127
+ * Rend `null` si le composant a ete detruit pendant l'attente ; LEVE si le module ne se charge
128
+ * pas (le repli s'en charge).
69
129
  *
70
130
  * ⚠️ Le specificateur etant dans la carte d'importation de l'application
71
131
  * federee, cet import dynamique resout vers l'INSTANCE PARTAGEE du point
72
132
  * d'entree : le tiroir emploie le meme `StDialog`, le meme recouvrement et la
73
- * meme pile que le reste de l'application. Un import dynamique ne dedouble
74
- * rien ; il decale seulement le moment du telechargement.
133
+ * meme pile que le reste de l'application.
75
134
  *
76
- * ⚠️ **Le controle de destruction est ICI, avant `injecteur.get`, et non chez
77
- * l'appelant.** Un injecteur detruit ne rend pas `undefined` : il LEVE
78
- * (NG0205). Le controle place apres la resolution du service arrivait donc
79
- * trop tard, et une navigation pendant le chargement du module produisait un
80
- * rejet non gere — invisible en developpement, remonte comme erreur
81
- * applicative en production, puisque `basculer()` appelle `ouvrir()` sans
82
- * attendre sa promesse.
135
+ * ⚠️ **Le controle de destruction est ICI, avant `injecteur.get`.** Un injecteur detruit ne rend
136
+ * pas `undefined` : il LEVE (NG0205).
83
137
  */
138
+ /**
139
+ * Le module des surfaces, charge a la demande (ADR 0031, decision 3). Une methode a part : un
140
+ * essai y simule le module injoignable (hors ligne), que le repli doit rattraper.
141
+ */
142
+ protected chargerLesSurfaces(): Promise<{
143
+ readonly StDialog: typeof StDialog;
144
+ }>;
84
145
  private serviceDeDialogue;
85
146
  constructor();
86
147
  /**
87
- * Ouvre le tiroir. Asynchrone depuis la 0.8.0 : le module du dialogue se
88
- * charge a la demande. La promesse est tenue quand le tiroir est a l'ecran —
89
- * un test l'attend, l'appelant ordinaire n'a rien a en faire.
148
+ * Charge le module du tiroir sans rien montrer : le bouton de bascule l'appelle a l'INTENTION
149
+ * (survol, focus, appui), et le clic trouve le module deja la. Sans effet s'il l'est deja ; un
150
+ * echec est rattrape par l'ouverture, qui bascule alors en repli.
151
+ */
152
+ precharger(): void;
153
+ /**
154
+ * Ouvre le tiroir. Asynchrone : le module du dialogue se charge a la demande. La promesse est
155
+ * tenue quand le tiroir est a l'ecran (ou le repli en ligne) — un test l'attend, l'appelant
156
+ * ordinaire n'a rien a en faire. Elle ne rejette jamais.
90
157
  */
91
158
  ouvrir(): Promise<void>;
92
159
  fermer(): void;
160
+ /** Echap et la navigation referment le repli ; le tiroir, lui, a les siens. */
161
+ protected fermerLeRepli(): void;
93
162
  /** Reste synchrone : c'est ce que lit la liaison de clic du bouton. */
94
163
  basculer(): void;
95
164
  static ɵfac: i0.ɵɵFactoryDeclaration<StSidenav, never>;
@@ -104,25 +173,38 @@ export declare class StSidenav {
104
173
  "required": false;
105
174
  "isSignal": true;
106
175
  };
107
- }, {}, never, ["*"], true, never>;
176
+ }, {}, never, ["*", "[secondaire]", "[pied]"], true, never>;
108
177
  }
109
178
  /**
110
179
  * Bouton qui ouvre la navigation en tiroir.
111
180
  *
112
- * ⚠️ **Masque quand la navigation est persistante.** Un bouton « Menu » qui ne
113
- * fait rien, parce que la navigation est deja affichee a cote, est un arret de
114
- * tabulation inutile et une promesse non tenue.
181
+ * ```html
182
+ * <button stIconButton icone="menu" etiquette="Menu" [stSidenavToggle]="navigation"></button>
183
+ * ```
184
+ *
185
+ * ⚠️ **Sur un `<button>` natif, et nulle part ailleurs** (lot 234) : le selecteur
186
+ * est `button[stSidenavToggle]`. Pose sur un `<div>` ou un `<a>`, il ne s'applique
187
+ * pas et le gabarit ne compile plus — un contrat d'hote impose plutot que
188
+ * documente : clavier (Entree, Espace), role et focus viennent du bouton.
189
+ *
190
+ * ⚠️ **Masque quand la navigation n'est pas un tiroir** (colonne, rail). Un bouton
191
+ * « Menu » qui ne fait rien, parce que la navigation est deja affichee a cote, est
192
+ * un arret de tabulation inutile et une promesse non tenue.
115
193
  *
116
194
  * ⚠️ `aria-expanded` suit l'ouverture du tiroir : sans lui, rien ne dit a qui
117
- * n'en voit pas l'effet que le bouton a agi.
195
+ * n'en voit pas l'effet que le bouton a agi. `aria-controls` vise le `<nav>` de
196
+ * la navigation (`StSidenav.identifiant`), present des que le tiroir est ouvert.
197
+ * En repli sans couche (lot 235), ce n'est plus un dialogue : `aria-haspopup` tombe.
118
198
  *
119
- * `aria-busy` pendant le chargement DIFFERE du tiroir, passe le delai d'attente
120
- * (MV-12) : le clic a ete pris, la navigation arrive.
199
+ * **Chargement a l'intention** (lot 235) : survol, focus et appui prechargent le
200
+ * module du tiroir ; le clic le trouve le plus souvent deja la. Sinon, `aria-busy`
201
+ * et le curseur d'attente, passe le delai d'attente (MV-12) : le clic a ete pris,
202
+ * la navigation arrive ; un second clic, pendant ce temps, ne fait rien.
121
203
  */
122
204
  export declare class StSidenavToggle {
123
205
  readonly stSidenavToggle: import("@angular/core").InputSignal<StSidenav>;
124
206
  static ɵfac: i0.ɵɵFactoryDeclaration<StSidenavToggle, never>;
125
- static ɵdir: i0.ɵɵDirectiveDeclaration<StSidenavToggle, "[stSidenavToggle]", never, {
207
+ static ɵdir: i0.ɵɵDirectiveDeclaration<StSidenavToggle, "button[stSidenavToggle]", never, {
126
208
  "stSidenavToggle": {
127
209
  "alias": "stSidenavToggle";
128
210
  "required": true;
@@ -1,5 +1,5 @@
1
1
  import * as i0 from "@angular/core";
2
- import { AnimationCallbackEvent, DestroyRef, EnvironmentProviders, InjectionToken, Provider, Signal } from "@angular/core";
2
+ import { AnimationCallbackEvent, DestroyRef, EnvironmentProviders, InjectionToken, OnInit, Provider, Signal } from "@angular/core";
3
3
  import { ChoixDeTheme, ETATS_DE_BLOC, EtatDeBloc, Langue, MoyenDeCeremonie, Ton, TonSemantique, VarianteDErreur, VarianteDErreur as VarianteDErreur$1, sansCommandesDeDirection } from "@starterlib/util";
4
4
  import { EtatDeDocument, ListesDAdresses, NatureDeRegion, RechercheDAdresses } from "@starterlib/util/valeurs";
5
5
  import * as i1 from "@angular/router";
@@ -2531,8 +2531,9 @@ export declare class StLienEtendu {
2531
2531
  */
2532
2532
  export type TailleDeTitreDePage = 'xl' | '2xl' | '3xl' | '4xl';
2533
2533
  /**
2534
- * Titre de page : le `h1`, ses puces, sa precision et les actions qui lui sont
2535
- * attachees.
2534
+ * Titre de page : le `h1`, son aide contextuelle (`[aide]`, lot 280), ses puces, sa precision et
2535
+ * les actions qui lui sont attachees. L'aide et les puces vont sur la rangee du titre, HORS de la
2536
+ * balise : leur texte n'entre pas dans le nom du titre.
2536
2537
  *
2537
2538
  * ⚠️ Il rend une **vraie balise de titre**, un `h1` par defaut : `StNavigation`
2538
2539
  * de `@starterlib/core` vise le titre de niveau 1 pour y poser le focus apres
@@ -2596,7 +2597,7 @@ export declare class StPageTitle {
2596
2597
  "required": false;
2597
2598
  "isSignal": true;
2598
2599
  };
2599
- }, {}, never, ["*", "[puces]", "[precision]", "[actions]"], true, never>;
2600
+ }, {}, never, ["*", "[aide]", "[puces]", "[precision]", "[actions]"], true, never>;
2600
2601
  }
2601
2602
  /** Un maillon du fil. Sans `lien`, il n'est pas cliquable. */
2602
2603
  export interface MaillonDeFil {
@@ -2905,9 +2906,10 @@ export declare class StAppShell {
2905
2906
  * que l'hote charge). Des `md`, la ligne ne se replie jamais ; dessous, les actions passent sur
2906
2907
  * une ligne de plus plutot que de deborder (WCAG 1.4.10).
2907
2908
  *
2908
- * ⚠️ `secondaire` (langue, theme) marque ce qui pourra quitter l'en-tete sous `md` quand le
2909
- * tiroir de navigation le reproposera (lot 234). D'ici la, l'attribut ne retire rien : masquer
2910
- * une action sans repli la rendrait inatteignable sur un telephone.
2909
+ * ⚠️ `secondaire` (langue, theme) marque ce qui QUITTE l'en-tete sous `md` (lot 235) : le tiroir
2910
+ * de navigation le repropose, a condition que l'application l'y projette aussi
2911
+ * (`<st-lang-switch secondaire … />` dans `st-sidenav`). Sans ce second exemplaire, l'action
2912
+ * serait inatteignable sur un telephone : ne rien marquer `secondaire` garde tout dans l'en-tete.
2911
2913
  *
2912
2914
  * ```html
2913
2915
  * <st-header>
@@ -2973,15 +2975,18 @@ export declare class StFooter {
2973
2975
  }
2974
2976
  /**
2975
2977
  * Lien de navigation principale, pose en attribut sur un `<a>` natif :
2976
- * `routerLink`, etat actif, icone et pastille, en un seul geste.
2978
+ * `routerLink`, etat courant, icone et pastille, en un seul geste.
2977
2979
  *
2978
2980
  * ```html
2979
2981
  * <st-sidenav navigation>
2980
- * <a stNavLink="/comptes"><st-icon nom="fichier" />Comptes</a>
2982
+ * <a stNavLink="/"><st-icon nom="maison" taille="24" />Accueil</a>
2983
+ * <a stNavLink="/comptes"><st-icon nom="portefeuille" taille="24" />Comptes</a>
2981
2984
  * <a [stNavLink]="['/messages']">
2982
- * Messages<span class="st-vh">, 5 non lus</span>
2985
+ * <st-icon nom="messages" taille="24" />
2986
+ * Messagerie<span class="st-vh">, 5 non lus</span>
2983
2987
  * <st-badge [valeur]="5" />
2984
2988
  * </a>
2989
+ * <a stNavLink="/aide"><st-icon nom="casque" taille="24" />Aide<st-icon fin nom="lien-externe" /></a>
2985
2990
  * </st-sidenav>
2986
2991
  * ```
2987
2992
  *
@@ -2992,32 +2997,60 @@ export declare class StFooter {
2992
2997
  * l'observateur de rupture pour un lien. Et la coquille le PEINT : le second
2993
2998
  * critere de l'ADR 0031 le garde au tronc pour la meme raison.
2994
2999
  *
2995
- * ⚠️ **L'etat actif est porte par `aria-current="page"`**, pose par le routeur,
3000
+ * **Une grille, une colonne d'icone reservee** (lot 234) : l'icone de tete dans
3001
+ * une colonne de 24 px, TOUJOURS reservee — un lien sans icone garde son libelle
3002
+ * aligne sur les autres —, le libelle, puis la pastille (`st-badge`) ou une icone
3003
+ * de fin (`st-icon fin` : `lien-externe`, `chevron-droite`), l'une ou l'autre.
3004
+ * L'ordre du DOM est celui de l'ecran (icone, libelle, fin), quel que soit
3005
+ * l'ordre d'ecriture. Le libelle tient sur UNE ligne et se tronque par une
3006
+ * ellipse : une navigation ne se replie jamais, et le nom accessible, lui, reste
3007
+ * entier.
3008
+ *
3009
+ * ⚠️ **L'etat courant est porte par `aria-current="page"`**, pose par le routeur,
2996
3010
  * et c'est sur lui que la feuille se branche — jamais sur la seule couleur : le
2997
- * lien courant se lit a sa graisse et au marqueur sur son bord de depart, qui
2998
- * survivent au contraste force. La classe `st-nav-link--actif` accompagne, pour
2999
- * qui veut y accrocher un style.
3011
+ * lien courant se lit a sa graisse et au marqueur de 3 px sur son bord de depart,
3012
+ * qui survivent au contraste force (D22 : fond `surface-conteneur-bas`, texte
3013
+ * `texte-primaire` 600, marqueur et icone `primaire`). La classe
3014
+ * `st-nav-link--actif` accompagne, pour qui veut y accrocher un style.
3015
+ *
3016
+ * ⚠️ **Le lien racine est exact par defaut.** `stNavLink="/"` sans
3017
+ * `optionsDActivation` ne s'allume que sur `/` : en inclusion, il serait courant
3018
+ * sur TOUTES les pages. Poser `optionsDActivation` l'emporte toujours.
3000
3019
  *
3001
3020
  * ⚠️ La pastille est `aria-hidden` : le compte qu'elle affiche doit entrer
3002
3021
  * dans le nom du lien, par un texte lisible par lecteur seulement (`.st-vh`),
3003
- * compose par l'appelant.
3022
+ * compose par l'appelant. En developpement, un `st-badge` sans `.st-vh` dans le
3023
+ * lien est signale.
3004
3024
  *
3005
3025
  * Un composant et non une directive, parce qu'il RANGE ce qu'on lui projette :
3006
- * l'icone devant, la pastille derriere, le libelle entre les deux, sans que
3007
- * l'ordre d'ecriture compte.
3008
- */
3009
- export declare class StNavLink {
3026
+ * l'icone devant, la pastille derriere, le libelle entre les deux. Un lien qu'on
3027
+ * ne peut pas suivre ne se rend pas (`@if` cote application) : jamais
3028
+ * `aria-disabled` sur un lien de navigation.
3029
+ */
3030
+ export declare class StNavLink implements OnInit {
3031
+ private readonly lien;
3032
+ private readonly actif;
3033
+ private readonly routeur;
3034
+ /** L'objet d'options de `RouterLinkActive` avant toute liaison : `optionsDActivation` le remplace. */
3035
+ private readonly optionsParDefaut;
3010
3036
  constructor();
3037
+ ngOnInit(): void;
3011
3038
  static ɵfac: i0.ɵɵFactoryDeclaration<StNavLink, never>;
3012
- static ɵcmp: i0.ɵɵComponentDeclaration<StNavLink, "a[stNavLink]", never, {}, {}, never, ["st-icon", "*", "st-badge"], true, [{
3039
+ static ɵcmp: i0.ɵɵComponentDeclaration<StNavLink, "a[stNavLink]", never, {}, {}, never, ["st-icon:not([fin])", "*", "st-badge, st-icon[fin]"], true, [{
3013
3040
  directive: typeof i1.RouterLink;
3014
3041
  inputs: {
3015
3042
  "routerLink": "stNavLink";
3043
+ "target": "target";
3016
3044
  "queryParams": "queryParams";
3017
3045
  "fragment": "fragment";
3018
3046
  "queryParamsHandling": "queryParamsHandling";
3019
- "replaceUrl": "replaceUrl";
3020
3047
  "state": "state";
3048
+ "info": "info";
3049
+ "relativeTo": "relativeTo";
3050
+ "preserveFragment": "preserveFragment";
3051
+ "skipLocationChange": "skipLocationChange";
3052
+ "replaceUrl": "replaceUrl";
3053
+ "browserUrl": "browserUrl";
3021
3054
  };
3022
3055
  outputs: {};
3023
3056
  }, {
@@ -3037,6 +3070,7 @@ export declare class StNavLink {
3037
3070
  * <st-breadcrumb forme="compacte" separateur="/" [maillons]="maillons" />
3038
3071
  * <st-tag surtitre ton="primaire" variante="attenuee" casse="capitales" point libelle="Tresorerie" />
3039
3072
  * Mes operations
3073
+ * <st-help-button aide sujet="Mes operations">{{ t('tresorerie.aide.operations') }}</st-help-button>
3040
3074
  * <st-tag puces casse="capitales" taille="sm" libelle="ISO-20022" />
3041
3075
  * <button stButton variante="primaire" actions>Exporter</button>
3042
3076
  * <st-tabs etiquette="Vue" [onglets]="onglets" [(selection)]="vue" />
@@ -3044,10 +3078,15 @@ export declare class StNavLink {
3044
3078
  * ```
3045
3079
  *
3046
3080
  * Emplacements : `st-breadcrumb` (par element), `[surtitre]` et `[meta]` au-dessus du titre,
3047
- * contenu par defaut = TEXTE du titre, `[puces]` sur sa rangee, `[precision]` (texte riche, a
3048
- * codes) sous lui, `[actions]` a droite des `lg` et dessous avant, `st-tabs` ou
3081
+ * contenu par defaut = TEXTE du titre, `[aide]` puis `[puces]` sur sa rangee, `[precision]` (texte
3082
+ * riche, a codes) sous lui, `[actions]` a droite des `lg` et dessous avant, `st-tabs` ou
3049
3083
  * `st-segmented-control` (par element) en bas.
3050
3084
  *
3085
+ * L'aide contextuelle de la page (lot 280) : un `st-help-button` (`@starterlib/ui/surfaces`) dans
3086
+ * `[aide]`, juste apres le titre et HORS de lui. Son texte est la cle `<perimetre>.aide.<page>`,
3087
+ * soeur du titre de la route `<perimetre>.pages.<page>` : l'etape `i18n` de `starter-web verify`
3088
+ * exige cette cle pour chaque route du manifeste, et refuse une aide sans page.
3089
+ *
3051
3090
  * ⚠️ Le fil et les onglets se reconnaissent a leur ELEMENT (`st-breadcrumb`,
3052
3091
  * `st-tabs`), pas a un attribut : `onglets` est deja le nom d'une entree de
3053
3092
  * `st-tabs`, et un attribut nu du meme nom lui passerait une chaine vide. Un
@@ -3115,7 +3154,7 @@ export declare class StPageHeader {
3115
3154
  "required": false;
3116
3155
  "isSignal": true;
3117
3156
  };
3118
- }, {}, never, ["st-breadcrumb", "[surtitre]", "[meta]", "*", "[puces]", "[precision]", "[actions]", "st-tabs, st-nav-tabs, st-segmented-control"], true, never>;
3157
+ }, {}, never, ["st-breadcrumb", "[surtitre]", "[meta]", "*", "[aide]", "[puces]", "[precision]", "[actions]", "st-tabs, st-nav-tabs, st-segmented-control"], true, never>;
3119
3158
  }
3120
3159
  /**
3121
3160
  * Barre fine de progression d'une navigation, sous l'en-tete.