@starterlib/ui 0.8.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENCES-TIERCES.md +236 -0
- package/README.md +101 -47
- package/assets/icones/catalogue.json +3296 -0
- package/assets/icones/sprite.svg +235 -35
- package/fesm2022/starterlib-ui-arbre.mjs +473 -80
- package/fesm2022/starterlib-ui-arbre.mjs.map +1 -1
- package/fesm2022/starterlib-ui-donnees.mjs +3551 -522
- package/fesm2022/starterlib-ui-donnees.mjs.map +1 -1
- package/fesm2022/starterlib-ui-formulaires.mjs +3186 -443
- package/fesm2022/starterlib-ui-formulaires.mjs.map +1 -1
- package/fesm2022/starterlib-ui-libelles-en.mjs +380 -139
- package/fesm2022/starterlib-ui-libelles-en.mjs.map +1 -1
- package/fesm2022/starterlib-ui-listes.mjs +5354 -658
- package/fesm2022/starterlib-ui-listes.mjs.map +1 -1
- package/fesm2022/starterlib-ui-messagerie.mjs +737 -0
- package/fesm2022/starterlib-ui-messagerie.mjs.map +1 -0
- package/fesm2022/starterlib-ui-navigation.mjs +506 -243
- package/fesm2022/starterlib-ui-navigation.mjs.map +1 -1
- package/fesm2022/starterlib-ui-onglets.mjs +369 -135
- package/fesm2022/starterlib-ui-onglets.mjs.map +1 -1
- package/fesm2022/starterlib-ui-parcours.mjs +2449 -0
- package/fesm2022/starterlib-ui-parcours.mjs.map +1 -0
- package/fesm2022/starterlib-ui-qr.mjs +907 -0
- package/fesm2022/starterlib-ui-qr.mjs.map +1 -0
- package/fesm2022/starterlib-ui-saisie.mjs +8566 -1589
- package/fesm2022/starterlib-ui-saisie.mjs.map +1 -1
- package/fesm2022/starterlib-ui-selection.mjs +1340 -268
- package/fesm2022/starterlib-ui-selection.mjs.map +1 -1
- package/fesm2022/starterlib-ui-sens.mjs +59 -0
- package/fesm2022/starterlib-ui-sens.mjs.map +1 -0
- package/fesm2022/starterlib-ui-surfaces.mjs +5140 -1387
- package/fesm2022/starterlib-ui-surfaces.mjs.map +1 -1
- package/fesm2022/starterlib-ui.mjs +10721 -2871
- package/fesm2022/starterlib-ui.mjs.map +1 -1
- package/package.json +27 -18
- package/styles/amorce.css +69 -0
- package/styles/couches.css +178 -0
- package/types/starterlib-ui-arbre.d.ts +199 -25
- package/types/starterlib-ui-donnees.d.ts +1441 -180
- package/types/starterlib-ui-formulaires.d.ts +1174 -139
- package/types/starterlib-ui-libelles-en.d.ts +3 -23
- package/types/starterlib-ui-listes.d.ts +2310 -255
- package/types/starterlib-ui-messagerie.d.ts +317 -0
- package/types/starterlib-ui-navigation.d.ts +201 -63
- package/types/starterlib-ui-onglets.d.ts +172 -43
- package/types/starterlib-ui-parcours.d.ts +916 -0
- package/types/starterlib-ui-qr.d.ts +105 -0
- package/types/starterlib-ui-saisie.d.ts +3431 -549
- package/types/starterlib-ui-selection.d.ts +441 -65
- package/types/starterlib-ui-sens.d.ts +44 -0
- package/types/starterlib-ui-surfaces.d.ts +1899 -510
- package/types/starterlib-ui.d.ts +4749 -1115
- package/fesm2022/starterlib-ui-interactions.mjs +0 -43
- package/fesm2022/starterlib-ui-interactions.mjs.map +0 -1
- package/types/starterlib-ui-interactions.d.ts +0 -4
|
@@ -1,76 +1,174 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import { InjectionToken,
|
|
3
|
-
import * as i1 from
|
|
4
|
-
import { Ton, TonSemantique } from
|
|
5
|
-
import { NomDIcone,
|
|
6
|
-
import { CdkDialogContainer } from
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { InjectionToken, OnInit, Signal, TemplateRef, Type } from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/aria/menu";
|
|
4
|
+
import { Ton, TonSemantique, sansCommandesDeDirection, texteDUneLigne } from "@starterlib/util";
|
|
5
|
+
import { AnnonceLocale, Icone, NomDIcone, TailleDeBouton, VarianteDeBouton } from "@starterlib/ui";
|
|
6
|
+
import { CdkDialogContainer, DIALOG_DATA, DialogConfig } from "@angular/cdk/dialog";
|
|
7
|
+
export type AlignementDeMenu = 'debut' | 'fin';
|
|
8
|
+
/**
|
|
9
|
+
* `detachee` (defaut du socle) : le menu flotte a 4 px de son declencheur, rayon et filet
|
|
10
|
+
* complets. `collee` (planche 5, module 5.4) : le menu prolonge son declencheur, sans ecart, au
|
|
11
|
+
* moins aussi large que lui ; les coins qui se touchent sont carres, des deux cotes.
|
|
12
|
+
*/
|
|
13
|
+
export type AccrocheDeMenu = 'detachee' | 'collee';
|
|
14
|
+
/**
|
|
15
|
+
* L'element focalise a l'ouverture : le premier (clic, Entree, Espace, Fleche bas) ou le dernier
|
|
16
|
+
* (Fleche haut).
|
|
17
|
+
*/
|
|
18
|
+
export type EntreeFocaliseeALOuverture = 'premier' | 'dernier';
|
|
10
19
|
/**
|
|
11
20
|
* Menu d'actions. Le declencheur le designe, comme chez Material :
|
|
12
21
|
*
|
|
13
22
|
* ```html
|
|
14
|
-
* <button
|
|
23
|
+
* <button stButton [stMenuTrigger]="compte">Actions</button>
|
|
15
24
|
*
|
|
16
25
|
* <st-menu #compte etiquette="Compte" (selection)="agir($event)">
|
|
17
26
|
* <button stMenuItem valeur="profil">Mon profil</button>
|
|
18
|
-
* <
|
|
27
|
+
* <hr stMenuSeparator />
|
|
28
|
+
* <button stMenuItem valeur="quitter" ton="danger">Se deconnecter</button>
|
|
19
29
|
* </st-menu>
|
|
20
30
|
* ```
|
|
21
31
|
*
|
|
32
|
+
* Motif APG « menu button », tenu de bout en bout (lot 231) :
|
|
33
|
+
*
|
|
34
|
+
* - a l'ouverture, le focus va au PREMIER element (clic, Entree, Espace, Fleche bas) ou au
|
|
35
|
+
* DERNIER (Fleche haut), jamais au conteneur : le lecteur d'ecran annonce l'element, et la
|
|
36
|
+
* fleche suivante atteint le deuxieme ;
|
|
37
|
+
* - Echap ferme et rend le focus au declencheur ; la selection aussi ;
|
|
38
|
+
* - Tab ferme : le focus revient au declencheur et la tabulation repart de lui (le menu vit en
|
|
39
|
+
* fin de document, dans la couche : sans cela, Tab sortait de la page) ;
|
|
40
|
+
* - un focus pose ailleurs (clic, script) ferme SANS reprendre le focus ;
|
|
41
|
+
* - un second clic sur le declencheur ferme (garde de `CoucheAncree`) ;
|
|
42
|
+
* - le declencheur porte `aria-controls` vers l'identifiant du menu.
|
|
43
|
+
*
|
|
22
44
|
* ⚠️ Pourquoi le declencheur est DEHORS et les elements DEDANS. La primitive
|
|
23
45
|
* `Menu` d'`@angular/aria` relie ses elements au menu par injection, et un
|
|
24
46
|
* contenu projete garde l'injecteur de l'endroit ou il est ECRIT — jamais celui
|
|
25
47
|
* qui le rend. Les elements doivent donc etre ecrits a l'interieur de l'element
|
|
26
48
|
* qui porte le menu, sans quoi ils ne s'y enregistrent pas : le clavier ne
|
|
27
49
|
* bouge plus, et rien ne le signale. Le declencheur, lui, n'a rien a faire dans
|
|
28
|
-
* un `role="menu"`, qui ne contient que des elements de menu.
|
|
29
|
-
*
|
|
30
|
-
* Le clavier vient d'Aria, le placement du CDK. Le socle n'ecrit ni l'un ni
|
|
31
|
-
* l'autre : deux motifs longs, que l'on croit finis avant de les avoir
|
|
32
|
-
* eprouves au lecteur d'ecran ou au bord de l'ecran.
|
|
50
|
+
* un `role="menu"`, qui ne contient que des elements de menu et des separateurs.
|
|
33
51
|
*
|
|
34
52
|
* ⚠️ A l'ouverture, l'element est DEPLACE dans la couche d'overlay
|
|
35
53
|
* (`DomPortal`), il n'est pas recree : ses liaisons, son etat et son injecteur
|
|
36
54
|
* survivent au passage, ce qu'un gabarit reconstruit perdrait.
|
|
37
55
|
*/
|
|
38
|
-
declare class StMenu {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
56
|
+
export declare class StMenu {
|
|
57
|
+
private readonly element;
|
|
58
|
+
private readonly aria;
|
|
59
|
+
private readonly couche;
|
|
60
|
+
/** Nom du menu pour les technologies d'assistance. */
|
|
61
|
+
readonly etiquette: import("@angular/core").InputSignal<string>;
|
|
62
|
+
readonly alignement: import("@angular/core").InputSignal<AlignementDeMenu>;
|
|
63
|
+
/** `detachee` (defaut) ou `collee` au declencheur (planche 5). */
|
|
64
|
+
readonly accroche: import("@angular/core").InputSignal<AccrocheDeMenu>;
|
|
65
|
+
private readonly ouvertInterne;
|
|
66
|
+
readonly ouvert: import("@angular/core").Signal<boolean>;
|
|
67
|
+
private declencheur;
|
|
68
|
+
/**
|
|
69
|
+
* Vrai quand CE menu a pose `data-accroche-menu` sur son declencheur (ouvert par script depuis
|
|
70
|
+
* un element sans `stMenuTrigger`) : il ne retire a la fermeture que ce qu'il a pose. Sous
|
|
71
|
+
* `stMenuTrigger`, la marque est permanente (D53) et appartient a la directive.
|
|
72
|
+
*/
|
|
73
|
+
private accrochePosee;
|
|
74
|
+
/**
|
|
75
|
+
* Garde du survol apres une ouverture AU CLAVIER : `attente` jusqu'au premier survol, puis la
|
|
76
|
+
* position du pointeur a ce moment-la. Un menu qui s'ouvre sous un pointeur immobile recoit un
|
|
77
|
+
* `mouseover` (Chromium le rejoue apres la mise en page), et la primitive y deplace le focus :
|
|
78
|
+
* la fleche haut ouvrait sur le dernier element, et le focus sautait au premier. Seul un
|
|
79
|
+
* pointeur qui BOUGE rend la main au survol.
|
|
80
|
+
*/
|
|
81
|
+
private gardeDuSurvol;
|
|
82
|
+
constructor();
|
|
83
|
+
/** Identifiant du menu (celui de la primitive), que le declencheur pose en `aria-controls`. */
|
|
84
|
+
identifiant(): string;
|
|
85
|
+
/**
|
|
86
|
+
* Ouvre depuis `declencheur`, le focus sur le premier ou le dernier element. `parClavier` :
|
|
87
|
+
* ouvert par une touche (fleches, Entree, Espace) ; le survol d'un pointeur immobile ne deplace
|
|
88
|
+
* alors pas le focus.
|
|
89
|
+
*/
|
|
90
|
+
ouvrirDepuis(declencheur: HTMLElement, focus?: EntreeFocaliseeALOuverture, parClavier?: boolean): void;
|
|
91
|
+
/**
|
|
92
|
+
* Ferme, et rend le focus au declencheur : sans cela, le focus retombe sur le
|
|
93
|
+
* corps du document, et la navigation clavier reprend en haut de page.
|
|
94
|
+
*
|
|
95
|
+
* ⚠️ Le focus est rendu A LA DEMANDE, pas a la fin du fondu (03 §2.6 c) : au
|
|
96
|
+
* clavier, on ne fait pas attendre 120 ms. La couche, elle, part en fondu et
|
|
97
|
+
* n'est detachee qu'a la fin de sa transition — dans la meme tache quand la
|
|
98
|
+
* duree vaut zero. Un focus que la personne a pose ailleurs n'est jamais repris.
|
|
99
|
+
*/
|
|
100
|
+
fermer(options?: {
|
|
101
|
+
readonly rendreLeFocus?: boolean;
|
|
102
|
+
}): void;
|
|
103
|
+
basculerDepuis(declencheur: HTMLElement, parClavier?: boolean): void;
|
|
104
|
+
protected auClavier(evenement: KeyboardEvent): void;
|
|
105
|
+
private filtrerLeSurvol;
|
|
106
|
+
/** Un `pointermove` a des coordonnees differentes de la garde : le pointeur a VRAIMENT bouge. */
|
|
107
|
+
private libererLaGardeAuMouvement;
|
|
108
|
+
/** Un focus pose HORS du menu et hors du declencheur ferme, sans le reprendre. */
|
|
109
|
+
protected aLaPerteDuFocus(evenement: FocusEvent): void;
|
|
110
|
+
/** Accroche collee : le declencheur retrouve ses coins en meme temps que le menu se ferme. */
|
|
111
|
+
private oublierLeDeclencheur;
|
|
112
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StMenu, never>;
|
|
113
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StMenu, "st-menu", never, {
|
|
114
|
+
"etiquette": {
|
|
115
|
+
"alias": "etiquette";
|
|
116
|
+
"required": true;
|
|
117
|
+
"isSignal": true;
|
|
118
|
+
};
|
|
119
|
+
"alignement": {
|
|
120
|
+
"alias": "alignement";
|
|
121
|
+
"required": false;
|
|
122
|
+
"isSignal": true;
|
|
123
|
+
};
|
|
124
|
+
"accroche": {
|
|
125
|
+
"alias": "accroche";
|
|
126
|
+
"required": false;
|
|
127
|
+
"isSignal": true;
|
|
128
|
+
};
|
|
129
|
+
}, {}, never, ["*"], true, [{
|
|
130
|
+
directive: typeof i1.Menu;
|
|
131
|
+
inputs: {
|
|
132
|
+
"wrap": "wrap";
|
|
133
|
+
"typeaheadDelay": "typeaheadDelay";
|
|
134
|
+
"disabled": "indisponible";
|
|
135
|
+
};
|
|
136
|
+
outputs: {
|
|
137
|
+
"itemSelected": "selection";
|
|
138
|
+
};
|
|
139
|
+
}]>;
|
|
140
|
+
}
|
|
65
141
|
/**
|
|
66
142
|
* ⚠️ `danger` et non « destructeur » : c'est le meme rouge, la meme intention,
|
|
67
143
|
* et l'appelant ne doit pas avoir a se souvenir que le menu, LUI, a son mot.
|
|
144
|
+
*
|
|
145
|
+
* `danger-discret` (lot 265, EA-234) : la SORTIE (« Se deconnecter » du menu de compte), sur le
|
|
146
|
+
* papier danger discret des le repos ; pas une destruction, donc sans confirmation.
|
|
147
|
+
*/
|
|
148
|
+
export type TonDElementDeMenu = Extract<Ton, 'neutre' | 'danger'> | 'danger-discret';
|
|
149
|
+
/**
|
|
150
|
+
* Entree a etat : `case` (menuitemcheckbox, independante) ou `radio` (menuitemradio, une parmi
|
|
151
|
+
* ses voisines). Sans choix, l'entree est une action (`menuitem`).
|
|
152
|
+
*
|
|
153
|
+
* ⚠️ `radio` est RESERVE a un vrai groupe exclusif (au moins deux entrees `radio` voisines, une
|
|
154
|
+
* seule cochee a la fois) : ARIA definit `menuitemradio` comme membre d'un ensemble. Un reglage
|
|
155
|
+
* a bascule seul (« Afficher les archives », coche ou non) est un `case`, jamais un `radio` isole
|
|
156
|
+
* (revue E12).
|
|
68
157
|
*/
|
|
69
|
-
type
|
|
158
|
+
export type ChoixDElementDeMenu = 'case' | 'radio';
|
|
70
159
|
/**
|
|
71
160
|
* Element de menu, pose en ATTRIBUT sur un `<button>` natif — meme raison que
|
|
72
161
|
* `st-button` : une enveloppe casserait le comportement natif du bouton.
|
|
73
162
|
*
|
|
163
|
+
* ```html
|
|
164
|
+
* <button stMenuItem valeur="dupliquer" icone="copie">Dupliquer</button>
|
|
165
|
+
* <button stMenuItem valeur="xml" icone="telecharger" choix="radio" coche>
|
|
166
|
+
* Exporter <span suffixe>XML</span>
|
|
167
|
+
* </button>
|
|
168
|
+
* <hr stMenuSeparator />
|
|
169
|
+
* <button stMenuItem valeur="annuler" icone="corbeille" ton="danger">Annuler</button>
|
|
170
|
+
* ```
|
|
171
|
+
*
|
|
74
172
|
* Le clavier (fleches, Debut, Fin, saisie au vol, indice de tabulation
|
|
75
173
|
* glissant) vient de la primitive `MenuItem` d'`@angular/aria`, composee en
|
|
76
174
|
* directive d'hote. Le socle n'en reecrit aucune part : ces motifs sont longs a
|
|
@@ -80,96 +178,493 @@ type TonDElementDeMenu = Extract<Ton, 'neutre' | 'danger'>;
|
|
|
80
178
|
* defaut : c'est elle que `st-menu` emet a la selection. Un menu dont les
|
|
81
179
|
* elements n'ont pas d'identite stable oblige l'appelant a distinguer ses
|
|
82
180
|
* actions par leur libelle, donc par leur traduction.
|
|
181
|
+
*
|
|
182
|
+
* ⚠️ `choix` et non `type` : `type="button"` est l'attribut NATIF du bouton, qu'une entree
|
|
183
|
+
* nommee `type` aurait capture.
|
|
184
|
+
*
|
|
185
|
+
* `[suffixe]` : un complement court en fin de ligne (format, raccourci), en chasse fixe et en
|
|
186
|
+
* capitales ; il fait partie du nom accessible de l'entree.
|
|
83
187
|
*/
|
|
84
|
-
declare class StMenuItem {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
188
|
+
export declare class StMenuItem {
|
|
189
|
+
private readonly aria;
|
|
190
|
+
readonly icone: import("@angular/core").InputSignal<Icone | null>;
|
|
191
|
+
readonly ton: import("@angular/core").InputSignal<TonDElementDeMenu>;
|
|
192
|
+
/** Entree a etat (case ou radio) ; `null` : une action. */
|
|
193
|
+
readonly choix: import("@angular/core").InputSignal<ChoixDElementDeMenu | null>;
|
|
194
|
+
/** Etat d'une entree `choix` : `aria-checked`, et le rendu choisi (fond, graisse, icone). */
|
|
195
|
+
readonly coche: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
196
|
+
/**
|
|
197
|
+
* ⚠️ Pose APRES la liaison de la primitive (celle de l'hote l'emporte) : sans `choix`, le role
|
|
198
|
+
* reste celui que la primitive tient, jamais `null`, qui retirerait l'attribut.
|
|
199
|
+
*/
|
|
200
|
+
protected readonly roleLu: import("@angular/core").Signal<"menuitemcheckbox" | "menuitemradio" | "menuitem">;
|
|
201
|
+
protected readonly cocheLu: import("@angular/core").Signal<string | null>;
|
|
202
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StMenuItem, never>;
|
|
203
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StMenuItem, "button[stMenuItem]", never, {
|
|
204
|
+
"icone": {
|
|
205
|
+
"alias": "icone";
|
|
206
|
+
"required": false;
|
|
207
|
+
"isSignal": true;
|
|
208
|
+
};
|
|
209
|
+
"ton": {
|
|
210
|
+
"alias": "ton";
|
|
211
|
+
"required": false;
|
|
212
|
+
"isSignal": true;
|
|
213
|
+
};
|
|
214
|
+
"choix": {
|
|
215
|
+
"alias": "choix";
|
|
216
|
+
"required": false;
|
|
217
|
+
"isSignal": true;
|
|
218
|
+
};
|
|
219
|
+
"coche": {
|
|
220
|
+
"alias": "coche";
|
|
221
|
+
"required": false;
|
|
222
|
+
"isSignal": true;
|
|
223
|
+
};
|
|
224
|
+
}, {}, never, ["*", "[suffixe]"], true, [{
|
|
225
|
+
directive: typeof i1.MenuItem;
|
|
226
|
+
inputs: {
|
|
227
|
+
"value": "valeur";
|
|
228
|
+
"disabled": "desactive";
|
|
229
|
+
"role": "role";
|
|
230
|
+
};
|
|
231
|
+
outputs: {};
|
|
232
|
+
}]>;
|
|
89
233
|
}
|
|
90
|
-
|
|
91
234
|
/**
|
|
92
235
|
* Controle qui ouvre un menu. Il le DESIGNE, il ne le contient pas :
|
|
93
236
|
*
|
|
94
237
|
* ```html
|
|
95
|
-
* <button
|
|
238
|
+
* <button stButton [stMenuTrigger]="compte">Actions</button>
|
|
96
239
|
* <st-menu #compte etiquette="Compte">…</st-menu>
|
|
97
240
|
* ```
|
|
98
241
|
*
|
|
242
|
+
* Meme convention de designation que `[stPopoverTrigger]="couche"` (lot 228) : le menu se
|
|
243
|
+
* passe a l'attribut lui-meme, et il est requis.
|
|
244
|
+
*
|
|
245
|
+
* Le declencheur porte `aria-haspopup="menu"`, `aria-expanded` et `aria-controls` (l'identifiant
|
|
246
|
+
* du menu) ; la fleche bas ouvre sur le premier element, la fleche haut sur le dernier.
|
|
247
|
+
*
|
|
248
|
+
* ⚠️ `type="button"` est FORCE sur un `<button>` : dans un formulaire, un declencheur sans type
|
|
249
|
+
* est un bouton d'envoi, et ouvrir un menu soumettait le formulaire.
|
|
250
|
+
*
|
|
99
251
|
* ⚠️ Le type de `menu` est importe en TYPE seulement : `st-menu` n'a pas besoin
|
|
100
252
|
* de cette directive, et l'importer dans les deux sens formerait un cycle.
|
|
101
253
|
*/
|
|
102
|
-
declare class StMenuTrigger {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
254
|
+
export declare class StMenuTrigger {
|
|
255
|
+
private readonly element;
|
|
256
|
+
/**
|
|
257
|
+
* ⚠️ Pose `type="button"` UNE FOIS, imperativement, jamais par `[attr.type]` : une liaison
|
|
258
|
+
* d'attribut hote part d'un etat non initialise et vaut `null` hors `<button>`, or Angular
|
|
259
|
+
* appelle `removeAttribute` des le premier passage pour une liaison a `null` — un
|
|
260
|
+
* `<input type="button">` perdait son `type` (redevenait un champ texte), et un
|
|
261
|
+
* `<button type="submit">` ecrit par l'auteur voyait son type ecrase en silence. On ne pose
|
|
262
|
+
* donc rien hors `<button>`, et jamais par-dessus un type deja explicite.
|
|
263
|
+
*/
|
|
264
|
+
constructor();
|
|
265
|
+
/** Le menu ouvert par ce controle : `[stMenuTrigger]="menu"`. */
|
|
266
|
+
readonly stMenuTrigger: import("@angular/core").InputSignal<StMenu>;
|
|
267
|
+
/** Le menu designe. */
|
|
268
|
+
protected readonly cible: import("@angular/core").Signal<StMenu>;
|
|
269
|
+
/**
|
|
270
|
+
* D53 : le declencheur d'un menu COLLE garde sa disposition (libelle au debut, fleche en fin de
|
|
271
|
+
* ligne, largeur du panneau) ferme comme ouvert : la marque est posee EN PERMANENCE, jamais le
|
|
272
|
+
* temps de l'ouverture seulement, sans quoi le bouton changeait de forme au clic. Le cote
|
|
273
|
+
* (`data-menu-cote`, coins et fleche retournee) reste pose par le menu, ouvert seulement.
|
|
274
|
+
*/
|
|
275
|
+
protected readonly accrocheLue: import("@angular/core").Signal<"collee" | null>;
|
|
276
|
+
/**
|
|
277
|
+
* Vrai quand l'element est indisponible, natif (`:disabled`) ou logiciel (`aria-disabled`,
|
|
278
|
+
* pose par `stButton indisponible`). Aucun de ses evenements n'ouvre alors le menu : le clic
|
|
279
|
+
* est deja avale par la garde de `stButton`, mais les fleches (ci-dessous) ne passaient pas
|
|
280
|
+
* par elle et ouvraient quand meme le menu au clavier.
|
|
281
|
+
*/
|
|
282
|
+
private estIndisponible;
|
|
283
|
+
/** `detail === 0` : un clic produit par Entree ou Espace, donc une ouverture au clavier. */
|
|
284
|
+
protected basculer(evenement: MouseEvent): void;
|
|
285
|
+
/**
|
|
286
|
+
* Fleche bas : ouvre sur le PREMIER element ; fleche haut : sur le DERNIER (APG « menu
|
|
287
|
+
* button »). Entree et Espace passent par le clic natif du bouton, qui ouvre sur le premier.
|
|
288
|
+
*/
|
|
289
|
+
protected auClavier(evenement: KeyboardEvent): void;
|
|
290
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StMenuTrigger, never>;
|
|
291
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StMenuTrigger, "[stMenuTrigger]", never, {
|
|
292
|
+
"stMenuTrigger": {
|
|
293
|
+
"alias": "stMenuTrigger";
|
|
294
|
+
"required": true;
|
|
295
|
+
"isSignal": true;
|
|
296
|
+
};
|
|
297
|
+
}, {}, never, never, true, never>;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Separateur d'un menu, pose sur un `<hr>` natif : son role `separator` est IMPLICITE, et c'est
|
|
301
|
+
* l'un des deux enfants qu'un `role="menu"` admet (avec les elements de menu). Il ne prend pas le
|
|
302
|
+
* focus et la primitive d'Aria ne le compte pas : les fleches le sautent.
|
|
303
|
+
*
|
|
304
|
+
* ```html
|
|
305
|
+
* <button stMenuItem valeur="imprimer" icone="imprimer">Imprimer</button>
|
|
306
|
+
* <hr stMenuSeparator />
|
|
307
|
+
* <button stMenuItem valeur="annuler" icone="corbeille" ton="danger">Annuler</button>
|
|
308
|
+
* ```
|
|
309
|
+
*
|
|
310
|
+
* R13 : l'entree `danger` vient en dernier, apres un separateur ; jamais plus de huit entrees
|
|
311
|
+
* sans separateur.
|
|
312
|
+
*/
|
|
313
|
+
export declare class StMenuSeparator {
|
|
314
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StMenuSeparator, never>;
|
|
315
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StMenuSeparator, "hr[stMenuSeparator]", never, {}, {}, never, never, true, never>;
|
|
316
|
+
}
|
|
317
|
+
/** Les fonds d'un bouton scinde : ceux que le bouton-icone du chevron sait aussi prendre. */
|
|
318
|
+
export type VarianteDeBoutonScinde = Extract<VarianteDeBouton, 'primaire' | 'secondaire' | 'tonale'>;
|
|
319
|
+
/** Les tailles communes au bouton et au bouton-icone : un groupe attache n'en melange pas deux. */
|
|
320
|
+
export type TailleDeBoutonScinde = Extract<TailleDeBouton, 'sm' | 'md'>;
|
|
321
|
+
/**
|
|
322
|
+
* Le bouton scinde (lot 265) : une action directe et, colle a elle, le menu de ses variantes
|
|
323
|
+
* (« Enregistrer », et « Enregistrer et fermer », « Enregistrer comme modele »).
|
|
324
|
+
*
|
|
325
|
+
* ```html
|
|
326
|
+
* <st-split-button libelle="Enregistrer" type="submit" [menu]="variantes" (action)="…" />
|
|
327
|
+
* <st-menu #variantes etiquette="Autres enregistrements" alignement="fin" (selection)="…">
|
|
328
|
+
* <button stMenuItem valeur="fermer">Enregistrer et fermer</button>
|
|
329
|
+
* </st-menu>
|
|
330
|
+
* ```
|
|
331
|
+
*
|
|
332
|
+
* - DEUX boutons distincts dans un `st-button-group` attache : l'action (qui peut envoyer son
|
|
333
|
+
* formulaire), puis le chevron, un bouton de menu APG nomme « Plus d'options pour Enregistrer »
|
|
334
|
+
* (`aria-haspopup`, `aria-expanded`, `aria-controls` par `[stMenuTrigger]`). Deux arrets de
|
|
335
|
+
* tabulation, deux anneaux de focus entiers : le focalise passe au-dessus de son voisin.
|
|
336
|
+
* - Chargement et indisponibilite gagnent les deux : pendant l'envoi, le chevron se tait aussi.
|
|
337
|
+
* - Le menu est ecrit a cote par l'application, comme pour tout `[stMenuTrigger]`.
|
|
338
|
+
*/
|
|
339
|
+
export declare class StSplitButton {
|
|
340
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
341
|
+
/** Le libelle de l'action, deja traduit : visible, il nomme le groupe et le second bouton. */
|
|
342
|
+
readonly libelle: import("@angular/core").InputSignal<string>;
|
|
343
|
+
/** Le menu des variantes de l'action. */
|
|
344
|
+
readonly menu: import("@angular/core").InputSignal<StMenu>;
|
|
345
|
+
readonly variante: import("@angular/core").InputSignal<VarianteDeBoutonScinde>;
|
|
346
|
+
readonly taille: import("@angular/core").InputSignal<TailleDeBoutonScinde>;
|
|
347
|
+
/** `submit` : l'action envoie son formulaire ; le chevron reste un `button`. */
|
|
348
|
+
readonly type: import("@angular/core").InputSignal<"submit" | "button">;
|
|
349
|
+
readonly iconeAvant: import("@angular/core").InputSignal<Icone | null>;
|
|
350
|
+
/** Le nom du chevron ; defaut : « Plus d'options pour {libelle} ». */
|
|
351
|
+
readonly etiquetteDuMenu: import("@angular/core").InputSignal<string | null>;
|
|
352
|
+
readonly chargement: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
353
|
+
readonly indisponible: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
354
|
+
/** Le clic de l'action (un `submit` envoie aussi son formulaire). */
|
|
355
|
+
readonly action: import("@angular/core").OutputEmitterRef<MouseEvent>;
|
|
356
|
+
protected readonly nomDuMenu: import("@angular/core").Signal<string>;
|
|
357
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StSplitButton, never>;
|
|
358
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StSplitButton, "st-split-button", never, {
|
|
359
|
+
"libelle": {
|
|
360
|
+
"alias": "libelle";
|
|
361
|
+
"required": true;
|
|
362
|
+
"isSignal": true;
|
|
363
|
+
};
|
|
364
|
+
"menu": {
|
|
365
|
+
"alias": "menu";
|
|
366
|
+
"required": true;
|
|
367
|
+
"isSignal": true;
|
|
368
|
+
};
|
|
369
|
+
"variante": {
|
|
370
|
+
"alias": "variante";
|
|
371
|
+
"required": false;
|
|
372
|
+
"isSignal": true;
|
|
373
|
+
};
|
|
374
|
+
"taille": {
|
|
375
|
+
"alias": "taille";
|
|
376
|
+
"required": false;
|
|
377
|
+
"isSignal": true;
|
|
378
|
+
};
|
|
379
|
+
"type": {
|
|
380
|
+
"alias": "type";
|
|
381
|
+
"required": false;
|
|
382
|
+
"isSignal": true;
|
|
383
|
+
};
|
|
384
|
+
"iconeAvant": {
|
|
385
|
+
"alias": "iconeAvant";
|
|
386
|
+
"required": false;
|
|
387
|
+
"isSignal": true;
|
|
388
|
+
};
|
|
389
|
+
"etiquetteDuMenu": {
|
|
390
|
+
"alias": "etiquetteDuMenu";
|
|
391
|
+
"required": false;
|
|
392
|
+
"isSignal": true;
|
|
393
|
+
};
|
|
394
|
+
"chargement": {
|
|
395
|
+
"alias": "chargement";
|
|
396
|
+
"required": false;
|
|
397
|
+
"isSignal": true;
|
|
398
|
+
};
|
|
399
|
+
"indisponible": {
|
|
400
|
+
"alias": "indisponible";
|
|
401
|
+
"required": false;
|
|
402
|
+
"isSignal": true;
|
|
403
|
+
};
|
|
404
|
+
}, {
|
|
405
|
+
"action": "action";
|
|
406
|
+
}, never, never, true, never>;
|
|
407
|
+
}
|
|
408
|
+
/** Une entree du menu de compte : sa valeur (emise a la selection), son libelle traduit. */
|
|
409
|
+
export interface ElementDeMenuDeCompte {
|
|
410
|
+
readonly valeur: string;
|
|
411
|
+
readonly libelle: string;
|
|
412
|
+
readonly icone?: Icone | null;
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Le menu de compte (lot 265), qui remplace « avatar + Se deconnecter » ecrits en clair dans
|
|
416
|
+
* l'en-tete : profil, preferences, securite, puis la deconnexion.
|
|
417
|
+
*
|
|
418
|
+
* ```html
|
|
419
|
+
* <st-user-menu [nom]="nom()" fonction="Superviseur reseau" [elements]="entrees"
|
|
420
|
+
* (selection)="naviguer($event)" (deconnexion)="session.deconnecter()" />
|
|
421
|
+
* ```
|
|
422
|
+
*
|
|
423
|
+
* - PRESENTATION PURE : il n'injecte pas `@starterlib/core` (ADR 0003) ; la session, la navigation
|
|
424
|
+
* et la deconnexion appartiennent a l'application, qui recoit `selection` et `deconnexion`.
|
|
425
|
+
* - Le declencheur est un bouton de menu APG nomme « Compte de {nom} » (le nom visible y est
|
|
426
|
+
* contenu, WCAG 2.5.3) : l'avatar, le nom (masque sous `md`), un chevron qui pivote a
|
|
427
|
+
* l'ouverture.
|
|
428
|
+
* - L'en-tete du panneau (avatar, nom, fonction, courriel) n'est pas une entree : muet dans le
|
|
429
|
+
* menu, il le DECRIT (`aria-describedby`). Les entrees sont des `stMenuItem` ; la deconnexion
|
|
430
|
+
* vient en dernier, apres un separateur, en danger discret (EA-234) : une sortie, pas une
|
|
431
|
+
* destruction, donc sans confirmation.
|
|
432
|
+
*/
|
|
433
|
+
export declare class StUserMenu {
|
|
434
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
435
|
+
protected readonly deconnecter = "st-user-menu:deconnexion";
|
|
436
|
+
/** Prenom et nom tels qu'affiches. */
|
|
437
|
+
readonly nom: import("@angular/core").InputSignal<string>;
|
|
438
|
+
/** La fonction ou le role metier (« Superviseur reseau ») ; jamais un droit technique. */
|
|
439
|
+
readonly fonction: import("@angular/core").InputSignal<string | null>;
|
|
440
|
+
readonly courriel: import("@angular/core").InputSignal<string | null>;
|
|
441
|
+
/** La photo ; sans elle, les initiales. */
|
|
442
|
+
readonly image: import("@angular/core").InputSignal<string | null>;
|
|
443
|
+
readonly elements: import("@angular/core").InputSignal<readonly ElementDeMenuDeCompte[]>;
|
|
444
|
+
/** La valeur de l'entree choisie. */
|
|
445
|
+
readonly selection: import("@angular/core").OutputEmitterRef<string>;
|
|
446
|
+
readonly deconnexion: import("@angular/core").OutputEmitterRef<void>;
|
|
447
|
+
/**
|
|
448
|
+
* Nom, fonction et courriel sont des donnees : sans commande de direction, et isoles par leur
|
|
449
|
+
* element dans le gabarit, le courriel de gauche a droite. Le nom l'est partout, jusque dans le
|
|
450
|
+
* nom du compte (l'elision lit sa premiere lettre) et les initiales des avatars (audit UI du
|
|
451
|
+
* 2026-09-27, D-5).
|
|
452
|
+
*/
|
|
453
|
+
protected readonly affichable: typeof sansCommandesDeDirection;
|
|
454
|
+
protected readonly nomAffiche: import("@angular/core").Signal<string>;
|
|
455
|
+
protected readonly nomDuCompte: import("@angular/core").Signal<string>;
|
|
456
|
+
protected readonly idDeLEntete: string;
|
|
457
|
+
protected choisir(valeur: unknown): void;
|
|
458
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StUserMenu, never>;
|
|
459
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StUserMenu, "st-user-menu", never, {
|
|
460
|
+
"nom": {
|
|
461
|
+
"alias": "nom";
|
|
462
|
+
"required": true;
|
|
463
|
+
"isSignal": true;
|
|
464
|
+
};
|
|
465
|
+
"fonction": {
|
|
466
|
+
"alias": "fonction";
|
|
467
|
+
"required": false;
|
|
468
|
+
"isSignal": true;
|
|
469
|
+
};
|
|
470
|
+
"courriel": {
|
|
471
|
+
"alias": "courriel";
|
|
472
|
+
"required": false;
|
|
473
|
+
"isSignal": true;
|
|
474
|
+
};
|
|
475
|
+
"image": {
|
|
476
|
+
"alias": "image";
|
|
477
|
+
"required": false;
|
|
478
|
+
"isSignal": true;
|
|
479
|
+
};
|
|
480
|
+
"elements": {
|
|
481
|
+
"alias": "elements";
|
|
482
|
+
"required": false;
|
|
483
|
+
"isSignal": true;
|
|
484
|
+
};
|
|
485
|
+
}, {
|
|
486
|
+
"selection": "selection";
|
|
487
|
+
"deconnexion": "deconnexion";
|
|
488
|
+
}, never, never, true, never>;
|
|
109
489
|
}
|
|
110
|
-
|
|
111
490
|
/** Une action secondaire, decrite par l'appelant. Le libelle est deja traduit. */
|
|
112
|
-
interface ActionDeBarre {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
491
|
+
export interface ActionDeBarre {
|
|
492
|
+
/** Identite stable, emise a l'activation : jamais le libelle, donc jamais la traduction. */
|
|
493
|
+
readonly valeur: string;
|
|
494
|
+
readonly libelle: string;
|
|
495
|
+
readonly icone?: Icone;
|
|
496
|
+
readonly ton?: TonDElementDeMenu;
|
|
497
|
+
readonly desactive?: boolean;
|
|
498
|
+
/**
|
|
499
|
+
* L'action est en cours (un export qui se prepare) : leve par l'appelant DES l'activation,
|
|
500
|
+
* baisse a la reponse. En bouton, l'etat de chargement de `stButton` (indicateur differe,
|
|
501
|
+
* `aria-busy`, clics avales : aucune seconde activation) ; dans « Plus d'actions », l'entree est
|
|
502
|
+
* indisponible le temps de l'action, un element de menu n'ayant pas d'indicateur. Comme pour
|
|
503
|
+
* `stButton`, l'annonce de l'attente revient a l'application (audit UI du 2026-09-27, D-11).
|
|
504
|
+
*/
|
|
505
|
+
readonly enCours?: boolean;
|
|
506
|
+
}
|
|
507
|
+
/** Taille des boutons secondaires : 44 (defaut, suit la densite), 36 ou 32 px. */
|
|
508
|
+
export type TailleDeBarre = Extract<TailleDeBouton, 'md' | 'sm' | 'xs'>;
|
|
509
|
+
/** Une entree du menu « Plus d'actions » ; `separee` : un separateur la precede (R13). */
|
|
510
|
+
interface EntreeDeBarre {
|
|
511
|
+
readonly action: ActionDeBarre;
|
|
512
|
+
readonly separee: boolean;
|
|
119
513
|
}
|
|
120
514
|
/**
|
|
121
|
-
* Barre d'actions d'une page ou d'une section : UNE action
|
|
122
|
-
* projetee,
|
|
515
|
+
* Barre d'actions d'une page ou d'une section : des actions secondaires, decrites, et UNE action
|
|
516
|
+
* principale, projetee, qui ferme la ligne.
|
|
123
517
|
*
|
|
124
518
|
* ```html
|
|
125
|
-
* <st-toolbar [secondaires]="actions" (action)="agir($event)">
|
|
126
|
-
* <button stButton variante="primaire"
|
|
519
|
+
* <st-toolbar etiquette="Beneficiaires" [secondaires]="actions" (action)="agir($event)">
|
|
520
|
+
* <button stButton variante="primaire" stToolbarPrincipale (click)="creer()">
|
|
521
|
+
* Ajouter un beneficiaire
|
|
522
|
+
* </button>
|
|
127
523
|
* </st-toolbar>
|
|
128
524
|
* ```
|
|
129
525
|
*
|
|
526
|
+
* Motif APG « toolbar » (lot 231) : `role="toolbar"` nomme par `etiquette`, UN SEUL arret de
|
|
527
|
+
* tabulation (indice glissant), Fleches gauche et droite (inversees de droite a gauche), Debut et
|
|
528
|
+
* Fin. La fleche bas sur « Plus d'actions » ouvre son menu, sur le premier element.
|
|
529
|
+
*
|
|
130
530
|
* ⚠️ **Pourquoi les secondaires sont des DONNEES** et non des boutons projetes :
|
|
131
|
-
* sous `md`, elles vivent dans un `st-menu` « Plus », dont les elements doivent
|
|
531
|
+
* sous `md`, elles vivent dans un `st-menu` « Plus d'actions », dont les elements doivent
|
|
132
532
|
* etre ecrits sous l'element qui porte le menu — un contenu projete garde
|
|
133
533
|
* l'injecteur de l'endroit ou il est ecrit, et ne s'y enregistrerait pas. La
|
|
134
|
-
* barre rend donc
|
|
135
|
-
* n'
|
|
136
|
-
*
|
|
534
|
+
* barre rend donc la forme de la rupture, boutons ou elements de menu, jamais les deux : une
|
|
535
|
+
* action n'existe qu'une fois dans l'arbre d'accessibilite. Elle emet la `valeur` de l'action
|
|
536
|
+
* activee, quelle que soit la forme.
|
|
137
537
|
*
|
|
138
|
-
* ⚠️ **
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
538
|
+
* ⚠️ **Un seul bouton plein par barre.** Quand une principale est projetee, une action
|
|
539
|
+
* `ton: 'danger'` n'est jamais un bouton plein a cote d'elle : elle vit dans « Plus d'actions »,
|
|
540
|
+
* derniere, apres un separateur. Sans principale (barre d'une selection), elle est rendue en
|
|
541
|
+
* bouton `danger`. En developpement, la barre signale deux pleins (primaire ou danger) et un
|
|
542
|
+
* bouton projete sans `principale`, qui ne serait pas rendu.
|
|
142
543
|
*
|
|
143
544
|
* Elle vit dans `ui/surfaces` parce qu'elle importe `st-menu`, donc le CDK :
|
|
144
545
|
* c'est la meme raison qui en a fait sortir `st-header`.
|
|
145
546
|
*/
|
|
146
|
-
declare class StToolbar {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
547
|
+
export declare class StToolbar {
|
|
548
|
+
private readonly libelles;
|
|
549
|
+
private readonly hote;
|
|
550
|
+
/** Nom de la barre pour les technologies d'assistance (« Actions des beneficiaires »). */
|
|
551
|
+
readonly etiquette: import("@angular/core").InputSignal<string>;
|
|
552
|
+
readonly secondaires: import("@angular/core").InputSignal<readonly ActionDeBarre[]>;
|
|
553
|
+
/** Nom du bouton « Plus d'actions ». `null` : celui du dictionnaire. */
|
|
554
|
+
readonly libellePlus: import("@angular/core").InputSignal<string | null>;
|
|
555
|
+
/** Taille des boutons secondaires : 44 px par defaut, 36 ou 32 (barres des planches 13 et 14). */
|
|
556
|
+
readonly taille: import("@angular/core").InputSignal<TailleDeBarre>;
|
|
557
|
+
/** Emise avec la `valeur` de l'action secondaire activee. */
|
|
558
|
+
readonly action: import("@angular/core").OutputEmitterRef<string>;
|
|
559
|
+
protected readonly libellePlusLu: import("@angular/core").Signal<string>;
|
|
560
|
+
/** Forme large (boutons) a partir de la rupture `md`, etroite (menu) en dessous. */
|
|
561
|
+
private readonly large;
|
|
562
|
+
/** Le menu « Plus d'actions », s'il est rendu (forme etroite ou danger seul en forme large). */
|
|
563
|
+
private readonly menuPlus;
|
|
564
|
+
private readonly boutonsProjetes;
|
|
565
|
+
private readonly elementsProjetes;
|
|
566
|
+
private readonly marques;
|
|
567
|
+
private readonly aPrincipale;
|
|
568
|
+
/** Les secondaires en boutons (forme large) ; la regle du plein unique en retire le danger. */
|
|
569
|
+
protected readonly boutons: import("@angular/core").Signal<readonly ActionDeBarre[]>;
|
|
570
|
+
/** Les entrees du menu : tout en forme etroite, le danger seul en forme large a principale. */
|
|
571
|
+
protected readonly entrees: import("@angular/core").Signal<readonly EntreeDeBarre[]>;
|
|
572
|
+
/** L'arret de tabulation unique de la barre. */
|
|
573
|
+
private actif;
|
|
574
|
+
constructor();
|
|
575
|
+
protected varianteDe(action: ActionDeBarre): VarianteDeBouton;
|
|
576
|
+
protected declencher(action: ActionDeBarre): void;
|
|
577
|
+
protected surSelection(valeur: unknown): void;
|
|
578
|
+
protected auFocus(evenement: FocusEvent): void;
|
|
579
|
+
protected auClavier(evenement: KeyboardEvent): void;
|
|
580
|
+
/**
|
|
581
|
+
* Le sens d'ecriture HERITE, comme `st-calendar`, sans style calcule ni mise en page : `:dir()`
|
|
582
|
+
* resout `dir="auto"`. L'attribut `dir` le plus proche, lu tel quel, prenait « auto » pour de
|
|
583
|
+
* gauche a droite, et les fleches restaient a l'endroit sous un ancetre de droite a gauche (audit
|
|
584
|
+
* UI du 2026-09-27, D-6). Il ne sert plus qu'au moteur qui ne connait pas `:dir()`.
|
|
585
|
+
*/
|
|
586
|
+
private ecritDeDroiteAGauche;
|
|
587
|
+
/** Les elements de la ligne, dans l'ordre du document ; le menu ferme n'en fait pas partie. */
|
|
588
|
+
private arrets;
|
|
589
|
+
/**
|
|
590
|
+
* Le menu ouvert dont le focus est tombe sur le corps du document (son element focalise a
|
|
591
|
+
* disparu du DOM au dernier rendu) ferme sans esperer le reprendre : la personne l'a de toute
|
|
592
|
+
* facon deja perdu.
|
|
593
|
+
*/
|
|
594
|
+
private fermerLeMenuSiOrphelin;
|
|
595
|
+
private glisser;
|
|
596
|
+
private avertir;
|
|
597
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StToolbar, never>;
|
|
598
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StToolbar, "st-toolbar", never, {
|
|
599
|
+
"etiquette": {
|
|
600
|
+
"alias": "etiquette";
|
|
601
|
+
"required": true;
|
|
602
|
+
"isSignal": true;
|
|
603
|
+
};
|
|
604
|
+
"secondaires": {
|
|
605
|
+
"alias": "secondaires";
|
|
606
|
+
"required": false;
|
|
607
|
+
"isSignal": true;
|
|
608
|
+
};
|
|
609
|
+
"libellePlus": {
|
|
610
|
+
"alias": "libellePlus";
|
|
611
|
+
"required": false;
|
|
612
|
+
"isSignal": true;
|
|
613
|
+
};
|
|
614
|
+
"taille": {
|
|
615
|
+
"alias": "taille";
|
|
616
|
+
"required": false;
|
|
617
|
+
"isSignal": true;
|
|
618
|
+
};
|
|
619
|
+
}, {
|
|
620
|
+
"action": "action";
|
|
621
|
+
}, ["boutonsProjetes", "elementsProjetes", "marques"], ["[principale], [stToolbarPrincipale]"], true, never>;
|
|
622
|
+
}
|
|
623
|
+
/**
|
|
624
|
+
* Marque l'action PRINCIPALE projetee dans `st-toolbar` : elle ferme la ligne, apres les
|
|
625
|
+
* secondaires et le « Plus d'actions ». L'attribut nu `principale` reste lu ; la directive le dit
|
|
626
|
+
* au type, et a l'editeur. La projection se decide sur l'attribut ECRIT dans le gabarit (l'un ou
|
|
627
|
+
* l'autre), jamais sur un attribut pose par une directive.
|
|
628
|
+
*
|
|
629
|
+
* ```html
|
|
630
|
+
* <st-toolbar etiquette="Beneficiaires" [secondaires]="actions">
|
|
631
|
+
* <button stButton variante="primaire" stToolbarPrincipale>Ajouter un beneficiaire</button>
|
|
632
|
+
* </st-toolbar>
|
|
633
|
+
* ```
|
|
634
|
+
*/
|
|
635
|
+
export declare class StToolbarPrincipale {
|
|
636
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StToolbarPrincipale, never>;
|
|
637
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StToolbarPrincipale, "[stToolbarPrincipale]", never, {}, {}, never, never, true, never>;
|
|
638
|
+
}
|
|
163
639
|
/**
|
|
164
640
|
* Identifiant du titre du dialogue, decide a l'ouverture et fourni au contenu.
|
|
165
641
|
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
642
|
+
* Le CDK (22) fournit l'injecteur du dialogue au composant ouvert COMME au gabarit
|
|
643
|
+
* (`_attachDialogContent` construit le `TemplatePortal` avec cet injecteur) : un `st-dialog-title`
|
|
644
|
+
* y recoit donc cet identifiant dans les deux cas, et n'en forge un que hors d'un dialogue ouvert
|
|
645
|
+
* par `StDialog` (vitrine).
|
|
646
|
+
*
|
|
647
|
+
* Depuis le lot 229, le NOM du dialogue ne depend pas de ce jeton : le conteneur lit l'identifiant
|
|
648
|
+
* du titre REELLEMENT rendu dans son DOM, et ne pose `aria-labelledby` que s'il existe. Un dialogue
|
|
649
|
+
* sans titre ne porte donc plus de `aria-labelledby` pendant (A1204).
|
|
170
650
|
*/
|
|
171
|
-
declare const IDENTIFIANT_DU_TITRE: InjectionToken<string>;
|
|
172
|
-
|
|
651
|
+
export declare const IDENTIFIANT_DU_TITRE: InjectionToken<string>;
|
|
652
|
+
/** Ce qu'un dialogue ouvert par `StDialog` dit a son contenu. */
|
|
653
|
+
export interface ContexteDeDialogue {
|
|
654
|
+
/**
|
|
655
|
+
* La croix standard de `st-dialog-title` est-elle offerte ? Faux pour un `alertdialog`, qui
|
|
656
|
+
* exige une REPONSE, et sous `fermetureInterdite`, ou seules les actions ferment (ADR 0005
|
|
657
|
+
* D54). Ne gouverne QUE cette croix : une action `[stDialogClose]` reste toujours visible.
|
|
658
|
+
*/
|
|
659
|
+
readonly fermable: boolean;
|
|
660
|
+
}
|
|
661
|
+
/**
|
|
662
|
+
* Contexte du dialogue, fourni par `StDialog` a chaque ouverture. Absent hors d'un dialogue (une
|
|
663
|
+
* vitrine de galerie) : la croix de `st-dialog-title` n'y apparait que si on la demande.
|
|
664
|
+
*/
|
|
665
|
+
export declare const CONTEXTE_DE_DIALOGUE: InjectionToken<ContexteDeDialogue>;
|
|
666
|
+
/** Ton d'une confirmation : `danger` pour ce qui detruit, `primaire` sinon. */
|
|
667
|
+
export type TonDeConfirmation = Extract<TonSemantique, 'primaire' | 'danger'>;
|
|
173
668
|
/**
|
|
174
669
|
* Ce que l'appelant decrit pour obtenir une confirmation.
|
|
175
670
|
*
|
|
@@ -179,124 +674,233 @@ declare const IDENTIFIANT_DU_TITRE: InjectionToken<string>;
|
|
|
179
674
|
* changement d'IBAN — merite une re-authentification par second facteur, que le
|
|
180
675
|
* backend sait deja demander.
|
|
181
676
|
*/
|
|
182
|
-
interface DemandeDeConfirmation {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
|
|
677
|
+
export interface DemandeDeConfirmation {
|
|
678
|
+
/** Une question fermee : « Revoquer cet appareil ? ». */
|
|
679
|
+
readonly titre: string;
|
|
680
|
+
/**
|
|
681
|
+
* Ce qui sera perdu, en une ou deux phrases. C'est la DESCRIPTION du dialogue : le lecteur
|
|
682
|
+
* d'ecran la lit apres le titre, avant les boutons. La valeur a recopier y est mise en valeur
|
|
683
|
+
* la ou le message la nomme (guillemets compris).
|
|
684
|
+
*/
|
|
685
|
+
readonly message: string;
|
|
686
|
+
/** Repete le verbe de l'action (« Supprimer », « Revoquer ») ; defaut « Confirmer ». */
|
|
687
|
+
readonly libelleConfirmation?: string;
|
|
688
|
+
readonly libelleAnnulation?: string;
|
|
689
|
+
/**
|
|
690
|
+
* `danger` : l'action detruit quelque chose. Bouton `danger`, icone d'intention
|
|
691
|
+
* `triangle-alerte` et surtitre dans la couleur du danger, fond inerte. Defaut : `primaire`.
|
|
692
|
+
*/
|
|
693
|
+
readonly ton?: TonDeConfirmation;
|
|
694
|
+
/** Icone du titre. Defaut : `triangle-alerte` sous `danger`, aucune sinon ; `null` la retire. */
|
|
695
|
+
readonly icone?: NomDIcone | null;
|
|
696
|
+
/** Surtitre sous le titre (reference, portee), en capitales dans la couleur du ton. */
|
|
697
|
+
readonly sousTitre?: string;
|
|
698
|
+
/** Icone du bouton de confirmation (`corbeille-croix` pour une suppression). */
|
|
699
|
+
readonly iconeConfirmation?: NomDIcone;
|
|
700
|
+
/**
|
|
701
|
+
* Croix standard dans l'en-tete : elle vaut « Annuler ». Defaut : vrai.
|
|
702
|
+
*
|
|
703
|
+
* ⚠️ Sans effet sous `ton: 'danger'` OU avec `saisieDeConfirmation` : la
|
|
704
|
+
* confirmation est alors un `alertdialog`, qui n'a jamais de croix (ADR 0005 D54 et D68) ; Echap y
|
|
705
|
+
* vaut « Annuler », jamais la confirmation.
|
|
706
|
+
*/
|
|
707
|
+
readonly fermable?: boolean;
|
|
708
|
+
/**
|
|
709
|
+
* Texte que la personne doit recopier pour confirmer. Le dialogue devient un `alertdialog`,
|
|
710
|
+
* sans croix (D54) : « Annuler » et Echap sont ses seules sorties sans confirmation.
|
|
711
|
+
*
|
|
712
|
+
* ⚠️ A reserver a l'irreversible. Ce n'est pas une ceinture de securite de
|
|
713
|
+
* plus : c'est le seul moyen de rompre l'automatisme de qui clique « Oui »
|
|
714
|
+
* sans lire, et son cout — une saisie — n'est justifie que la ou l'erreur ne
|
|
715
|
+
* se repare pas. Un nom court, jamais un IBAN complet (SEC-3).
|
|
716
|
+
*/
|
|
717
|
+
readonly saisieDeConfirmation?: string;
|
|
718
|
+
}
|
|
719
|
+
/** Un morceau de texte : la valeur mise en valeur, ou ce qui l'entoure. */
|
|
720
|
+
interface Morceau {
|
|
721
|
+
readonly texte: string;
|
|
722
|
+
readonly valeur: boolean;
|
|
723
|
+
}
|
|
724
|
+
/**
|
|
725
|
+
* Dialogue de confirmation, ouvert par `StDialog.confirmer(demande)` (planche 5, dialogue A).
|
|
201
726
|
*
|
|
202
727
|
* ⚠️ **Le bouton de confirmation n'est jamais celui qui recoit le focus.** Le
|
|
203
|
-
* dialogue entier le recoit (voir `StDialog`), et le premier arret de
|
|
204
|
-
*
|
|
205
|
-
*
|
|
206
|
-
*
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
728
|
+
* dialogue entier le recoit (voir `StDialog`), et le premier arret de tabulation est la croix
|
|
729
|
+
* (quand elle est rendue : jamais sur un `alertdialog`, D54), puis le champ de recopie s'il
|
|
730
|
+
* existe, puis l'annulation. Un dialogue
|
|
731
|
+
* destructeur dont le bouton dangereux est deja focalise se valide par une seule touche Entree —
|
|
732
|
+
* c'est-a-dire par le geste que la personne etait en train de faire quand il s'est ouvert.
|
|
733
|
+
*
|
|
734
|
+
* ⚠️ **La recopie parle.** Entree dans le champ confirme si la recopie correspond ; sinon le
|
|
735
|
+
* champ passe `aria-invalid`, un message d'erreur relie apparait sous lui, une region d'alerte
|
|
736
|
+
* l'annonce (le champ garde le focus : rien n'est relu sans ca), et le focus y reste. Le bouton
|
|
737
|
+
* indisponible dit pourquoi (`raisonIndisponible`) : jamais un bouton muet.
|
|
738
|
+
*/
|
|
739
|
+
export declare class StConfirmDialog {
|
|
740
|
+
/** La valeur mise en valeur s'affiche comme elle se recopie : sur une ligne, sans invisible. */
|
|
741
|
+
protected readonly uneLigne: typeof texteDUneLigne;
|
|
742
|
+
private readonly reference;
|
|
743
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
744
|
+
private readonly identifiants;
|
|
745
|
+
protected readonly demande: DemandeDeConfirmation;
|
|
746
|
+
protected readonly saisie: import("@angular/core").WritableSignal<string>;
|
|
747
|
+
/** Une validation a ete tentee (Entree dans le champ) : l'erreur peut se montrer. */
|
|
748
|
+
private readonly tentative;
|
|
749
|
+
/**
|
|
750
|
+
* Annonce l'echec d'une recopie a chaque tentative (alerte assertive) : le message d'erreur
|
|
751
|
+
* n'a ni role ni region vivante (`st-inline-message` sans `annonce`, reserve a un message qui
|
|
752
|
+
* apparait APRES un formulaire), et le focus reste dans le champ deja focalise — ni l'un ni
|
|
753
|
+
* l'autre changement n'est donc relu par NVDA ou JAWS sans cette region dediee. `AnnonceLocale`
|
|
754
|
+
* vide puis remplit, ce qui fait relire une seconde tentative identique.
|
|
755
|
+
*/
|
|
756
|
+
protected readonly erreurAnnoncee: AnnonceLocale;
|
|
757
|
+
/**
|
|
758
|
+
* Identifiant du message, que `StDialog.confirmer` relie par `aria-describedby` : il le passe
|
|
759
|
+
* dans les donnees (champ interne) ; un dialogue ouvert autrement en forge un.
|
|
760
|
+
*/
|
|
761
|
+
protected readonly identifiantDuMessage: string;
|
|
762
|
+
/** Uniques par instance : deux confirmations empilees dupliqueraient un identifiant fixe. */
|
|
763
|
+
protected readonly identifiantDeSaisie: string;
|
|
764
|
+
protected readonly identifiantDeLAide: string;
|
|
765
|
+
protected readonly identifiantDeLErreur: string;
|
|
766
|
+
protected readonly ton: import("@angular/core").Signal<TonDeConfirmation>;
|
|
767
|
+
/** Ton de l'en-tete : `danger` le met en forme « ton » ; sinon un titre simple ou a tuile. */
|
|
768
|
+
protected readonly tonDuTitre: import("@angular/core").Signal<TonSemantique>;
|
|
769
|
+
protected readonly icone: import("@angular/core").Signal<"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" | "code-qr" | "code-qr-scanner" | "coffre-fort" | "colonnes" | "connexion" | "contraste" | "copie" | "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" | "iban" | "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" | null>;
|
|
770
|
+
protected readonly libelleConfirmation: import("@angular/core").Signal<string>;
|
|
771
|
+
protected readonly libelleAnnulation: import("@angular/core").Signal<string>;
|
|
772
|
+
protected readonly libelleRecopie: import("@angular/core").Signal<string>;
|
|
773
|
+
/** Le message, la valeur a recopier mise en valeur la ou il la nomme. */
|
|
774
|
+
protected readonly morceauxDuMessage: import("@angular/core").Signal<readonly Morceau[]>;
|
|
775
|
+
/** L'etiquette du champ, la valeur a recopier dans sa propre boite (chasse fixe). */
|
|
776
|
+
protected readonly morceauxDeLEtiquette: import("@angular/core").Signal<readonly Morceau[]>;
|
|
777
|
+
/**
|
|
778
|
+
* ⚠️ La comparaison ignore la casse et les espaces de bord, mais RIEN
|
|
779
|
+
* d'autre. Exiger la casse exacte transforme une confirmation en jeu
|
|
780
|
+
* d'adresse, et pousse a copier-coller — ce qui annule precisement l'effet
|
|
781
|
+
* recherche. L'aide sous le champ le dit.
|
|
782
|
+
*
|
|
783
|
+
* ⚠️ Normalisee en NFC puis comparee avec `toLowerCase()` (jamais `toLocaleLowerCase()` sans
|
|
784
|
+
* argument) : une valeur composee en NFD (claviers macOS, certains IME) doit correspondre a la
|
|
785
|
+
* meme valeur affichee en NFC, et le repli sur la locale par defaut du NAVIGATEUR ferait echouer
|
|
786
|
+
* une recopie exacte sous une locale a regle de casse particuliere (le i turc, par exemple).
|
|
787
|
+
*/
|
|
788
|
+
protected readonly confirmationPossible: import("@angular/core").Signal<boolean>;
|
|
789
|
+
/** La recopie correspond : la coche de succes s'affiche dans le champ. */
|
|
790
|
+
protected readonly correspond: import("@angular/core").Signal<boolean>;
|
|
791
|
+
/** Erreur montree apres une tentative, tant que la recopie ne correspond pas. */
|
|
792
|
+
protected readonly invalide: import("@angular/core").Signal<boolean>;
|
|
793
|
+
protected readonly descriptionDuChamp: import("@angular/core").Signal<string>;
|
|
794
|
+
protected auChangement(evenement: Event): void;
|
|
795
|
+
/** Entree dans le champ : confirme si la recopie correspond, sinon le dit et garde le focus. */
|
|
796
|
+
protected valider(evenement: Event): void;
|
|
797
|
+
protected confirmer(): void;
|
|
798
|
+
protected annuler(): void;
|
|
799
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StConfirmDialog, never>;
|
|
800
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StConfirmDialog, "st-confirm-dialog", never, {}, {}, never, never, true, never>;
|
|
801
|
+
}
|
|
233
802
|
/** Ce que l'appelant regle a l'ouverture. */
|
|
234
|
-
interface OptionsDeDialogue<D = unknown> {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
803
|
+
export interface OptionsDeDialogue<D = unknown> {
|
|
804
|
+
/** Donnees passees au composant, lisibles par `DONNEES_DE_DIALOGUE`. */
|
|
805
|
+
readonly donnees?: D;
|
|
806
|
+
/**
|
|
807
|
+
* Nom accessible quand le dialogue n'affiche pas de `st-dialog-title`, ou tant que son titre
|
|
808
|
+
* n'a pas de texte (titre differe ou lie a des donnees en chargement). Des qu'un titre au texte
|
|
809
|
+
* non vide est rendu, le titre visible l'emporte.
|
|
810
|
+
*/
|
|
811
|
+
readonly etiquette?: string;
|
|
812
|
+
/**
|
|
813
|
+
* Retire la croix, Echap, le clic sur le fond ET la fermeture par navigation (routeur comme
|
|
814
|
+
* historique) : seules les actions du dialogue le ferment (ADR 0005 D54).
|
|
815
|
+
*
|
|
816
|
+
* ⚠️ A reserver aux dialogues qui perdraient du travail en se fermant. Un
|
|
817
|
+
* dialogue qu'on ne peut pas fermer au clavier est une impasse pour qui
|
|
818
|
+
* n'utilise pas la souris ; la fermeture doit alors exister ailleurs, en
|
|
819
|
+
* toutes lettres : une action `[stDialogClose]`, toujours visible.
|
|
820
|
+
*/
|
|
821
|
+
readonly fermetureInterdite?: boolean;
|
|
822
|
+
/**
|
|
823
|
+
* Ignore le clic sur le fond, mais laisse Echap fermer.
|
|
824
|
+
*
|
|
825
|
+
* ⚠️ La distinction compte, et le CDK ne la fait pas : son `disableClose`
|
|
826
|
+
* bloque les DEUX. Or le clic hors du panneau est le geste le plus facile a
|
|
827
|
+
* faire par megarde, tandis qu'Echap est un choix delibere — et, sur une
|
|
828
|
+
* confirmation, il vaut ANNULER, ce qui est sans danger. Bloquer Echap ne
|
|
829
|
+
* protege rien et prive le clavier de sa sortie.
|
|
830
|
+
*/
|
|
831
|
+
readonly fondInerte?: boolean;
|
|
832
|
+
/**
|
|
833
|
+
* `alertdialog` pour ce qui exige une reponse immediate : une session qui
|
|
834
|
+
* expire, une perte imminente. Le lecteur d'ecran l'annonce avec plus
|
|
835
|
+
* d'insistance qu'un dialogue ordinaire — a ne pas galvauder.
|
|
836
|
+
*/
|
|
837
|
+
readonly role?: 'dialog' | 'alertdialog';
|
|
838
|
+
/**
|
|
839
|
+
* Offre la croix standard de `st-dialog-title`. Defaut : vrai. Ne gouverne QUE cette croix :
|
|
840
|
+
* une action `[stDialogClose]` reste toujours visible (ADR 0005 D54).
|
|
841
|
+
*
|
|
842
|
+
* ⚠️ Sans effet sur un `alertdialog` ni sous `fermetureInterdite`, qui n'ont JAMAIS de croix
|
|
843
|
+
* (D54) : le premier exige une reponse, et Echap y rend l'issue non destructive ; le second ne
|
|
844
|
+
* se ferme que par ses actions. `fermable: true` y est ignore (avertissement en developpement).
|
|
845
|
+
* Faux : le dialogue se ferme par ses actions (et Echap).
|
|
846
|
+
*/
|
|
847
|
+
readonly fermable?: boolean;
|
|
848
|
+
/**
|
|
849
|
+
* Largeur d'un dialogue centre, par les jetons (D2) : `sm` 24rem (confirmation), `md` 32rem
|
|
850
|
+
* (defaut, formulaire court), `lg` 48rem (tableau, comparaison). Sous 480 px, toutes prennent
|
|
851
|
+
* `100vw - 32 px`. Sans effet sur un tiroir ; `largeur` reste la derogation libre.
|
|
852
|
+
*/
|
|
853
|
+
readonly taille?: TailleDeDialogue;
|
|
854
|
+
/**
|
|
855
|
+
* Garde le dialogue ouvert a une navigation, du routeur comme de l'historique. Defaut : vrai
|
|
856
|
+
* pour un `alertdialog`, faux sinon.
|
|
857
|
+
*
|
|
858
|
+
* ⚠️ Un `alertdialog` exige une REPONSE. Le fermer a une navigation le resolvait sans resultat,
|
|
859
|
+
* et l'avertissement d'inactivite prenait ce silence pour « Rester connecte » : une redirection
|
|
860
|
+
* programmee prolongeait la session sans personne devant l'ecran (A1199, A1216).
|
|
861
|
+
*/
|
|
862
|
+
readonly survitALaNavigation?: boolean;
|
|
863
|
+
/**
|
|
864
|
+
* Selecteur de l'element qui recoit le focus a l'ouverture, a la place du
|
|
865
|
+
* dialogue lui-meme.
|
|
866
|
+
*
|
|
867
|
+
* ⚠️ Pour un `alertdialog`, le motif ARIA veut le focus sur l'action la MOINS
|
|
868
|
+
* destructrice : « Rester connecte », jamais « Se deconnecter ». Une touche
|
|
869
|
+
* Entree reflexe ne doit rien detruire.
|
|
870
|
+
*/
|
|
871
|
+
readonly focusInitial?: string;
|
|
872
|
+
/** Identifiant du texte qui DECRIT le dialogue, lu a l'ouverture apres son nom. */
|
|
873
|
+
readonly descriptionDe?: string;
|
|
874
|
+
/**
|
|
875
|
+
* Largeur imposee du panneau. Absente : celle de la feuille des couches
|
|
876
|
+
* (`@starterlib/ui/styles/couches.css`) — celle de `taille` pour un dialogue (32rem par
|
|
877
|
+
* defaut), 28rem pour un tiroir lateral, toute la largeur pour une feuille inferieure, sans
|
|
878
|
+
* jamais depasser l'ecran. Honoree dans les trois cas (A1214).
|
|
879
|
+
*/
|
|
880
|
+
readonly largeur?: string;
|
|
881
|
+
readonly classe?: string;
|
|
882
|
+
/**
|
|
883
|
+
* Ancre le panneau sur un bord : c'est le TIROIR.
|
|
884
|
+
*
|
|
885
|
+
* ⚠️ Un tiroir modal EST un dialogue — meme role, meme piegeage du focus,
|
|
886
|
+
* meme Echap. Seule sa geometrie change. Lui donner son propre service
|
|
887
|
+
* dupliquerait toute la machinerie d'accessibilite pour une difference de
|
|
888
|
+
* position, et la copie finirait par deriver de l'original.
|
|
889
|
+
*
|
|
890
|
+
* `debut` et `fin` suivent le sens d'ecriture ; `bas` donne la feuille
|
|
891
|
+
* inferieure, qui est la forme utile sur telephone.
|
|
892
|
+
*/
|
|
893
|
+
readonly cote?: CoteDuTiroir;
|
|
292
894
|
}
|
|
895
|
+
/** Largeur d'un dialogue centre (jetons `--st-largeur-dialogue-*`). */
|
|
896
|
+
export type TailleDeDialogue = 'sm' | 'md' | 'lg';
|
|
293
897
|
/** Bord auquel un tiroir s'ancre. Logique, donc juste aussi en ecriture droite a gauche. */
|
|
294
|
-
type CoteDuTiroir = 'debut' | 'fin' | 'bas';
|
|
898
|
+
export type CoteDuTiroir = 'debut' | 'fin' | 'bas';
|
|
295
899
|
/** Reference sur un dialogue ouvert. */
|
|
296
|
-
interface ReferenceDeDialogue<R> {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
900
|
+
export interface ReferenceDeDialogue<R> {
|
|
901
|
+
/** Resout a la fermeture. `undefined` quand le dialogue est simplement quitte. */
|
|
902
|
+
readonly ferme: Promise<R | undefined>;
|
|
903
|
+
fermer(resultat?: R): void;
|
|
300
904
|
}
|
|
301
905
|
/**
|
|
302
906
|
* Ouvre des dialogues modaux.
|
|
@@ -308,45 +912,68 @@ interface ReferenceDeDialogue<R> {
|
|
|
308
912
|
* Le socle n'en reecrit aucune part.
|
|
309
913
|
*
|
|
310
914
|
* Ce qu'il ajoute au CDK : le focus sur le dialogue, `aria-modal`, un fond inerte
|
|
311
|
-
* qui laisse Echap fermer, et la fermeture a toute navigation
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
915
|
+
* qui laisse Echap fermer, la croix standard (`fermable`), et la fermeture a toute navigation
|
|
916
|
+
* ABOUTIE du routeur — sauf pour un `alertdialog`, qui attend sa reponse
|
|
917
|
+
* (`survitALaNavigation`), et un dialogue `fermetureInterdite`.
|
|
918
|
+
*
|
|
919
|
+
* Mouvement (03 §3.5, lot 196) : le voile (`st-voile`, feuille des couches) et le
|
|
920
|
+
* panneau arrivent en fondu, le panneau monte de `--st-deplacement-moyen` ; un
|
|
921
|
+
* tiroir glisse depuis son bord. A la fermeture, panneau et voile partent
|
|
922
|
+
* ENSEMBLE en fondu, et la couche n'est detachee qu'a la fin de la transition —
|
|
923
|
+
* ou dans la meme tache quand la duree vaut zero (mouvement reduit, gel). Une
|
|
924
|
+
* fermeture par NAVIGATION est immediate : la page change dessous, un fondu la
|
|
925
|
+
* retarderait.
|
|
926
|
+
*
|
|
927
|
+
* ⚠️ Le focus revient au declencheur au DETACHEMENT, et non a la demande : tant que
|
|
928
|
+
* la couche est la, le CDK garde le reste de la page en `aria-hidden`, et un focus
|
|
929
|
+
* pose dans une region masquee n'est pas annonce. L'attente est bornee par la
|
|
930
|
+
* duree de sortie (120 ms), nulle sous mouvement reduit.
|
|
931
|
+
*/
|
|
932
|
+
export declare class StDialog {
|
|
933
|
+
private readonly cdk;
|
|
934
|
+
private readonly overlay;
|
|
935
|
+
/** Identifiants prefixes par l'APP_ID (lot 228) : deux applications dans la page n'ont plus le meme titre. */
|
|
936
|
+
private readonly identifiants;
|
|
937
|
+
/** Une fonction de fermeture par dialogue ouvert : c'est tout ce qu'il faut garder. */
|
|
938
|
+
private readonly ouverts;
|
|
939
|
+
constructor();
|
|
940
|
+
/**
|
|
941
|
+
* Ouvre un composant, ou un GABARIT.
|
|
942
|
+
*
|
|
943
|
+
* Un gabarit sert quand le contenu vit deja dans le composant appelant — un
|
|
944
|
+
* tiroir de navigation qui deplace ses propres liens sur petit ecran. Un
|
|
945
|
+
* `st-dialog-title` pose dedans le nomme (le conteneur lit son identifiant dans le DOM) ;
|
|
946
|
+
* sans titre, `etiquette` est OBLIGATOIRE : un dialogue encore sans nom une fois l'application
|
|
947
|
+
* stable est signale en developpement (`console.error`).
|
|
948
|
+
*
|
|
949
|
+
* ⚠️ Un titre DIFFERE (donnees chargees, `@defer`) ou encore vide exige aussi `etiquette` : le
|
|
950
|
+
* lecteur d'ecran annonce le nom au focus d'ouverture et ne le relit pas. `etiquette` nomme le
|
|
951
|
+
* dialogue a cet instant, puis le titre la remplace des qu'il porte un texte ; sans elle, un nom
|
|
952
|
+
* arrive apres le focus est averti en developpement (`console.warn`).
|
|
953
|
+
*/
|
|
954
|
+
ouvrir<R = unknown, D = unknown>(composant: Type<unknown> | TemplateRef<unknown>, options?: OptionsDeDialogue<D>): ReferenceDeDialogue<R>;
|
|
955
|
+
/**
|
|
956
|
+
* ⚠️ Un tiroir occupe toute la hauteur du bord ou il s'ancre, et une feuille
|
|
957
|
+
* inferieure toute la largeur. Sans cela, le panneau flotte au milieu et ne
|
|
958
|
+
* se lit plus comme un tiroir.
|
|
959
|
+
*/
|
|
960
|
+
private geometrie;
|
|
961
|
+
private classes;
|
|
962
|
+
/**
|
|
963
|
+
* Demande une confirmation, et rend `true` seulement si elle est donnee.
|
|
964
|
+
*
|
|
965
|
+
* ⚠️ La fermeture par Echap ou par le fond rend `false` : quitter n'est pas
|
|
966
|
+
* confirmer. C'est pourquoi la valeur est comparee explicitement plutot que
|
|
967
|
+
* testee pour sa veracite — `undefined` doit valoir non.
|
|
968
|
+
*/
|
|
969
|
+
confirmer(demande: DemandeDeConfirmation): Promise<boolean>;
|
|
970
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StDialog, never>;
|
|
971
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
972
|
+
}
|
|
973
|
+
/** Forme du panneau : dialogue centre, tiroir lateral, feuille inferieure. */
|
|
974
|
+
export type FormeDuPanneauDeDialogue = 'dialogue' | 'tiroir' | 'feuille';
|
|
975
|
+
/**
|
|
976
|
+
* Le panneau du dialogue : sa surface, son filet, son arrondi, son ombre.
|
|
350
977
|
*
|
|
351
978
|
* ⚠️ Pourquoi ce composant existe. `CdkDialogContainer` n'a **aucune
|
|
352
979
|
* apparence** : c'est voulu de la part du CDK, qui ne decide d'aucun style. Le
|
|
@@ -360,29 +987,141 @@ declare class StDialog {
|
|
|
360
987
|
* l'oubli ne se verrait qu'a l'ecran. Ici, l'apparence voyage avec le
|
|
361
988
|
* composant.
|
|
362
989
|
*
|
|
990
|
+
* Nom accessible (lot 229, A1204 et revue) : `aria-labelledby` vise le titre REELLEMENT rendu
|
|
991
|
+
* dans le panneau (`st-dialog-title`), jamais un identifiant pendant ; sans titre, `aria-label`
|
|
992
|
+
* porte `etiquette`. Le titre l'emporte, comme `OptionsDeDialogue.etiquette` le dit. Les
|
|
993
|
+
* attributs viennent de la `DialogConfig` PUBLIQUE injectee, plus du `_config` interne du CDK.
|
|
994
|
+
*
|
|
995
|
+
* ⚠️ Le nom est ECRIT sur l'hote dans la phase `write` de chaque rendu, et non par une liaison
|
|
996
|
+
* d'hote nourrie d'un signal : le CDK pose le focus d'ouverture dans un `afterNextRender` de phase
|
|
997
|
+
* `mixedReadWrite`, qui suit `write` et precede `read` dans le MEME rendu. Lu en `read` puis lie,
|
|
998
|
+
* le nom n'arrivait qu'au rendu suivant, le focus deja pose : le lecteur d'ecran annoncait
|
|
999
|
+
* « dialogue », sans nom, et ne le relisait pas.
|
|
1000
|
+
*
|
|
1001
|
+
* Le titre ne nomme que s'il porte un TEXTE : un titre lie a des donnees encore absentes rendrait
|
|
1002
|
+
* un nom vide au focus d'ouverture ; `etiquette` nomme alors le dialogue jusqu'a l'arrivee du
|
|
1003
|
+
* texte (revue 2 du lot 229).
|
|
1004
|
+
*
|
|
1005
|
+
* Controles de developpement, une fois l'application stable (titre differe par `@defer`, une
|
|
1006
|
+
* requete ou une macro-tache compris) : un dialogue au nom encore vide est signale
|
|
1007
|
+
* (`console.error`) ; un nom arrive APRES le focus d'ouverture est averti (`console.warn` : le
|
|
1008
|
+
* lecteur d'ecran a annonce « dialogue » sans nom et ne relit pas ; poser `etiquette`) ; un
|
|
1009
|
+
* dialogue au fond inerte (`fermetureInterdite`, `fondInerte`) sans aucune sortie visible (ni
|
|
1010
|
+
* `[stDialogClose]`, croix comprise, ni bouton dans `st-dialog-actions`) est signale
|
|
1011
|
+
* (`console.error`) : c'est une impasse (WCAG 2.1.2).
|
|
1012
|
+
*
|
|
363
1013
|
* L'encapsulation reste EMULEE : seuls l'hote et le panneau qui l'enveloppe
|
|
364
1014
|
* sont styles, par `:host` et `:host-context()`. Aucun contenu projete n'est
|
|
365
1015
|
* vise, donc rien ne justifie de rendre ces styles globaux.
|
|
366
1016
|
*/
|
|
367
|
-
declare class StDialogContainer extends CdkDialogContainer {
|
|
368
|
-
|
|
369
|
-
|
|
1017
|
+
export declare class StDialogContainer extends CdkDialogContainer {
|
|
1018
|
+
protected readonly configuration: DialogConfig<unknown, unknown, import("@angular/cdk/dialog").DialogContainer>;
|
|
1019
|
+
protected readonly forme: FormeDuPanneauDeDialogue;
|
|
1020
|
+
constructor();
|
|
1021
|
+
/**
|
|
1022
|
+
* Controles de developpement, APRES stabilisation : un titre differe (donnees chargees, `@defer`,
|
|
1023
|
+
* macro-tache) n'est pas un nom absent. Attendre la stabilite, une macro-tache, puis la stabilite
|
|
1024
|
+
* a nouveau couvre ce qui s'enregistre comme tache en attente (requetes, `@defer`, rendus
|
|
1025
|
+
* planifies) et ce qu'une macro-tache immediate declenche. `console.error` et non une exception :
|
|
1026
|
+
* un `ErrorHandler` strict ne doit pas faire d'un nom tardif un echec d'application.
|
|
1027
|
+
*
|
|
1028
|
+
* ⚠️ Chaque attente est COURUE contre la destruction : une tache en attente qui ne finit jamais
|
|
1029
|
+
* (flux SSE, sondage long) laissait `whenStable()` pendant, et la fermeture retenue garder
|
|
1030
|
+
* l'hote detache et tout son contenu (revue 2 du lot 229).
|
|
1031
|
+
*/
|
|
1032
|
+
private controlerEnDeveloppement;
|
|
1033
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StDialogContainer, never>;
|
|
1034
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StDialogContainer, "st-dialog-container", never, {}, {}, never, never, true, never>;
|
|
370
1035
|
}
|
|
371
|
-
|
|
1036
|
+
/** Niveau du titre : 2 par defaut, la page dessous a deja son `h1`. */
|
|
1037
|
+
export type NiveauDeTitreDeDialogue = 2 | 3 | 4;
|
|
1038
|
+
/**
|
|
1039
|
+
* Forme de l'en-tete, deduite des entrees (planche 5) :
|
|
1040
|
+
* - `simple` : titre seul (et sous-titre discret) ;
|
|
1041
|
+
* - `tuile` : `icone` dans une tuile de 36 px, sous-titre discret, filet PERMANENT sous l'en-tete ;
|
|
1042
|
+
* - `ton` : `ton` autre que `neutre` : icone de ton nue, surtitre en capitales dans la couleur du
|
|
1043
|
+
* ton, sans filet (dialogue de confirmation).
|
|
1044
|
+
*/
|
|
1045
|
+
export type FormeDEnteteDeDialogue = 'simple' | 'tuile' | 'ton';
|
|
372
1046
|
/**
|
|
373
|
-
*
|
|
374
|
-
*
|
|
1047
|
+
* En-tete du dialogue : son titre, qui NOMME le dialogue, et la croix standard.
|
|
1048
|
+
*
|
|
1049
|
+
* ```html
|
|
1050
|
+
* <st-dialog-title icone="utilisateur-crayon" sousTitre="Mandat ISO-20022">
|
|
1051
|
+
* Modifier le beneficiaire
|
|
1052
|
+
* </st-dialog-title>
|
|
1053
|
+
* <st-dialog-title ton="danger" icone="triangle-alerte" sousTitre="Action definitive">
|
|
1054
|
+
* Revoquer l'acces a ce terminal ?
|
|
1055
|
+
* </st-dialog-title>
|
|
1056
|
+
* ```
|
|
1057
|
+
*
|
|
1058
|
+
* ⚠️ Un `h2` par defaut et non un `h1` : le dialogue s'ouvre par-dessus une page qui a deja son
|
|
1059
|
+
* titre de niveau 1, et deux `h1` cassent la table des matieres des lecteurs d'ecran. `niveau`
|
|
1060
|
+
* le change pour un dialogue pose dans une section plus profonde.
|
|
375
1061
|
*
|
|
376
|
-
*
|
|
377
|
-
*
|
|
378
|
-
*
|
|
1062
|
+
* L'identifiant du titre est celui que `StDialog` fournit (composant comme gabarit : le CDK leur
|
|
1063
|
+
* donne l'injecteur du dialogue), a defaut un identifiant forge ici (vitrine) : le conteneur le lit
|
|
1064
|
+
* dans son DOM pour poser `aria-labelledby` (lot 229, A1204).
|
|
1065
|
+
*
|
|
1066
|
+
* La croix (`fermeture`) : `button[stIconButton][stDialogClose]` de 44 px, glyphe de 20 qui
|
|
1067
|
+
* affleure la marge du texte. Par defaut, elle suit le dialogue : presente s'il est `fermable`,
|
|
1068
|
+
* absente d'un `alertdialog` et d'un dialogue `fermetureInterdite` (ADR 0005 D54), qui ne la
|
|
1069
|
+
* rendent JAMAIS, meme demandee. Hors d'un dialogue (vitrine), elle n'apparait que sur
|
|
1070
|
+
* `[fermeture]="true"`. L'emplacement `[fermeture]` recoit une fermeture propre au lieu de la
|
|
1071
|
+
* croix (poser alors `[fermeture]="false"`).
|
|
379
1072
|
*/
|
|
380
|
-
declare class StDialogTitle {
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
1073
|
+
export declare class StDialogTitle {
|
|
1074
|
+
private readonly contexte;
|
|
1075
|
+
private readonly dansUnDialogue;
|
|
1076
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
1077
|
+
protected readonly identifiant: string;
|
|
1078
|
+
/** Icone de l'en-tete : en tuile, ou nue dans la couleur du `ton`. */
|
|
1079
|
+
readonly icone: import("@angular/core").InputSignal<"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" | "code-qr" | "code-qr-scanner" | "coffre-fort" | "colonnes" | "connexion" | "contraste" | "copie" | "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" | "iban" | "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" | null>;
|
|
1080
|
+
/** Ton de l'en-tete (confirmation, alerte) : icone et surtitre dans sa couleur. */
|
|
1081
|
+
readonly ton: import("@angular/core").InputSignal<TonSemantique>;
|
|
1082
|
+
/** Ligne sous le titre : reference, contexte. En capitales sous un `ton`. */
|
|
1083
|
+
readonly sousTitre: import("@angular/core").InputSignal<string | null>;
|
|
1084
|
+
readonly niveau: import("@angular/core").InputSignal<NiveauDeTitreDeDialogue>;
|
|
1085
|
+
/**
|
|
1086
|
+
* Croix standard ; `undefined` : celle du dialogue (`fermable`), absente hors dialogue. Un
|
|
1087
|
+
* attribut nu (`fermeture`) vaut vrai, comme toute entree booleenne du socle (audit du
|
|
1088
|
+
* 2026-09-27, Q-16).
|
|
1089
|
+
*/
|
|
1090
|
+
readonly fermeture: import("@angular/core").InputSignalWithTransform<boolean | undefined, unknown>;
|
|
1091
|
+
protected readonly forme: import("@angular/core").Signal<FormeDEnteteDeDialogue>;
|
|
1092
|
+
/** Sous un `ton` sans icone ecrite, l'icone du ton (table unique du socle). */
|
|
1093
|
+
protected readonly iconeRendue: import("@angular/core").Signal<"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" | "code-qr" | "code-qr-scanner" | "coffre-fort" | "colonnes" | "connexion" | "contraste" | "copie" | "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" | "iban" | "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" | null>;
|
|
1094
|
+
protected readonly tonDeLIcone: import("@angular/core").Signal<TonSemantique>;
|
|
1095
|
+
protected readonly croix: import("@angular/core").Signal<boolean>;
|
|
1096
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StDialogTitle, never>;
|
|
1097
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StDialogTitle, "st-dialog-title", never, {
|
|
1098
|
+
"icone": {
|
|
1099
|
+
"alias": "icone";
|
|
1100
|
+
"required": false;
|
|
1101
|
+
"isSignal": true;
|
|
1102
|
+
};
|
|
1103
|
+
"ton": {
|
|
1104
|
+
"alias": "ton";
|
|
1105
|
+
"required": false;
|
|
1106
|
+
"isSignal": true;
|
|
1107
|
+
};
|
|
1108
|
+
"sousTitre": {
|
|
1109
|
+
"alias": "sousTitre";
|
|
1110
|
+
"required": false;
|
|
1111
|
+
"isSignal": true;
|
|
1112
|
+
};
|
|
1113
|
+
"niveau": {
|
|
1114
|
+
"alias": "niveau";
|
|
1115
|
+
"required": false;
|
|
1116
|
+
"isSignal": true;
|
|
1117
|
+
};
|
|
1118
|
+
"fermeture": {
|
|
1119
|
+
"alias": "fermeture";
|
|
1120
|
+
"required": false;
|
|
1121
|
+
"isSignal": true;
|
|
1122
|
+
};
|
|
1123
|
+
}, {}, never, ["*", "[fermeture]"], true, never>;
|
|
384
1124
|
}
|
|
385
|
-
|
|
386
1125
|
/**
|
|
387
1126
|
* Corps du dialogue, defilant quand il deborde.
|
|
388
1127
|
*
|
|
@@ -391,70 +1130,149 @@ declare class StDialogTitle {
|
|
|
391
1130
|
* l'ecran est le defaut classique, et il ne se voit qu'a 200 % d'echelle ou sur
|
|
392
1131
|
* un ecran bas.
|
|
393
1132
|
*
|
|
394
|
-
*
|
|
1133
|
+
* Sa hauteur DERIVE du panneau (lot 229, A1443) : il prend la place que le titre et les actions
|
|
1134
|
+
* laissent (`flex: 1 1 auto`), le panneau portant la hauteur maximale (dialogue centre :
|
|
1135
|
+
* `100dvh - 48 px` ; tiroir : pleine hauteur). L'ancien plafond de `60vh` laissait un tiroir a
|
|
1136
|
+
* moitie vide sous ses actions.
|
|
1137
|
+
*
|
|
1138
|
+
* ⚠️ **Focalisable et nomme seulement quand il defile.** Une zone defilante sans
|
|
395
1139
|
* controle doit recevoir le focus, sinon le clavier ne peut pas la faire
|
|
396
|
-
* defiler — le texte d'une condition generale, par exemple
|
|
1140
|
+
* defiler — le texte d'une condition generale, par exemple ; elle devient alors une
|
|
1141
|
+
* `region` nommee, pour que le lecteur d'ecran dise ou le focus s'est pose. Mais la premiere
|
|
397
1142
|
* version posait `tabindex="0"` sans condition : sur un dialogue court, la zone
|
|
398
1143
|
* de texte devenait le premier arret de tabulation, AVANT le bouton
|
|
399
1144
|
* d'annulation, contrairement a ce que `StConfirmDialog` affirmait.
|
|
1145
|
+
*
|
|
1146
|
+
* Rembourrage `md` : 16 / 24 sous un en-tete simple ou de ton, 24 sous un en-tete a filet
|
|
1147
|
+
* permanent (forme `tuile`), comme la planche 5.
|
|
1148
|
+
*
|
|
1149
|
+
* Quand il defile, deux filets capillaires l'encadrent (planche 5) : deux elements a part, hors
|
|
1150
|
+
* de la zone qui defile, comme les sentinelles de la planche. `data-defile-haut` et
|
|
1151
|
+
* `data-defile-bas`, sur l'hote, disent s'il reste du contenu au-dessus ou au-dessous (lisibles
|
|
1152
|
+
* par une feuille d'application). La zone qui defile est `.st-dialog-content__corps`.
|
|
400
1153
|
*/
|
|
401
|
-
declare class StDialogContent {
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
1154
|
+
export declare class StDialogContent {
|
|
1155
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
1156
|
+
/** `aucun` pour un contenu qui gere ses propres marges, comme un tableau. */
|
|
1157
|
+
readonly rembourrage: import("@angular/core").InputSignal<"md" | "aucun">;
|
|
1158
|
+
protected readonly defilante: import("@angular/core").WritableSignal<boolean>;
|
|
1159
|
+
protected readonly resteAuDessus: import("@angular/core").WritableSignal<boolean>;
|
|
1160
|
+
protected readonly resteAuDessous: import("@angular/core").WritableSignal<boolean>;
|
|
1161
|
+
/** Precede d'un en-tete a filet permanent (forme `tuile`) : le corps y respire de 24 px. */
|
|
1162
|
+
protected readonly apresUnFilet: import("@angular/core").WritableSignal<boolean>;
|
|
1163
|
+
private readonly corps;
|
|
1164
|
+
constructor();
|
|
1165
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StDialogContent, never>;
|
|
1166
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StDialogContent, "st-dialog-content", never, {
|
|
1167
|
+
"rembourrage": {
|
|
1168
|
+
"alias": "rembourrage";
|
|
1169
|
+
"required": false;
|
|
1170
|
+
"isSignal": true;
|
|
1171
|
+
};
|
|
1172
|
+
}, {}, never, ["*"], true, never>;
|
|
408
1173
|
}
|
|
409
|
-
|
|
410
1174
|
/**
|
|
411
|
-
* Barre d'actions du dialogue.
|
|
1175
|
+
* Barre d'actions du dialogue : pied teinte a filet permanent (planche 5), actions a la fin.
|
|
412
1176
|
*
|
|
413
1177
|
* ⚠️ L'action de confirmation est a DROITE et l'annulation a gauche, dans cet
|
|
414
1178
|
* ordre dans le DOM : l'ordre de tabulation doit suivre l'ordre visuel, sinon
|
|
415
1179
|
* le clavier et la souris ne donnent pas le meme parcours. Inverser
|
|
416
|
-
* visuellement par `row-reverse` casserait cette correspondance.
|
|
1180
|
+
* visuellement par `row-reverse` casserait cette correspondance. Une action
|
|
1181
|
+
* primaire ou destructrice posee EN PREMIER parmi plusieurs avertit en developpement.
|
|
1182
|
+
*
|
|
1183
|
+
* Sous `sm` (480 px), les actions s'empilent en pleine largeur, dans l'ordre du DOM : la
|
|
1184
|
+
* confirmation en bas, sous le pouce.
|
|
1185
|
+
*/
|
|
1186
|
+
export declare class StDialogActions {
|
|
1187
|
+
readonly alignement: import("@angular/core").InputSignal<"debut" | "fin" | "entre">;
|
|
1188
|
+
constructor();
|
|
1189
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StDialogActions, never>;
|
|
1190
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StDialogActions, "st-dialog-actions", never, {
|
|
1191
|
+
"alignement": {
|
|
1192
|
+
"alias": "alignement";
|
|
1193
|
+
"required": false;
|
|
1194
|
+
"isSignal": true;
|
|
1195
|
+
};
|
|
1196
|
+
}, {}, never, ["*"], true, never>;
|
|
1197
|
+
}
|
|
1198
|
+
/**
|
|
1199
|
+
* Ferme le dialogue qui le contient avec un resultat : une ACTION (« Annuler », « Rester
|
|
1200
|
+
* connecte »), ou la croix standard posee a la main dans un gabarit sans `st-dialog-title`.
|
|
1201
|
+
*
|
|
1202
|
+
* ```html
|
|
1203
|
+
* <button stButton variante="secondaire" [stDialogClose]="false">Annuler</button>
|
|
1204
|
+
* <button stIconButton stDialogClose icone="croix" etiquette="Fermer"></button>
|
|
1205
|
+
* ```
|
|
1206
|
+
*
|
|
1207
|
+
* - `type="button"` FORCE : dans un formulaire, un bouton sans type soumet, et la fermeture
|
|
1208
|
+
* enverrait le formulaire qu'elle devait abandonner.
|
|
1209
|
+
* - La valeur de l'attribut est le RESULTAT de la fermeture ; ecrit nu (`stDialogClose`), il n'y en
|
|
1210
|
+
* a pas (`undefined`, comme Echap).
|
|
1211
|
+
* - JAMAIS masque (ADR 0005 D54) : `fermable` ne gouverne que la croix de `st-dialog-title`. Un
|
|
1212
|
+
* `alertdialog` ou un dialogue `fermetureInterdite` ne se ferme QUE par ses actions : les masquer
|
|
1213
|
+
* laissait un dialogue sans reponse possible (revue du lot 229). Poser une croix a la main dans
|
|
1214
|
+
* un dialogue qui exige une reponse est une decision de l'appelant.
|
|
1215
|
+
* - Le focus revient au declencheur par le CDK (`restoreFocus`), comme pour toute fermeture.
|
|
1216
|
+
*
|
|
1217
|
+
* Hors d'un dialogue (vitrine de galerie), le clic ne fait rien : il n'y a rien a fermer.
|
|
417
1218
|
*/
|
|
418
|
-
declare class
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
1219
|
+
export declare class StDialogClose {
|
|
1220
|
+
private readonly reference;
|
|
1221
|
+
/** Resultat rendu a l'appelant ; une chaine vide (attribut nu) vaut « aucun resultat ». */
|
|
1222
|
+
readonly stDialogClose: import("@angular/core").InputSignal<unknown>;
|
|
1223
|
+
protected fermer(): void;
|
|
1224
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StDialogClose, never>;
|
|
1225
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StDialogClose, "button[stDialogClose]", never, {
|
|
1226
|
+
"stDialogClose": {
|
|
1227
|
+
"alias": "stDialogClose";
|
|
1228
|
+
"required": false;
|
|
1229
|
+
"isSignal": true;
|
|
1230
|
+
};
|
|
1231
|
+
}, {}, never, never, true, never>;
|
|
422
1232
|
}
|
|
423
|
-
|
|
424
1233
|
/** Action offerte dans le message, comme « Annuler ». */
|
|
425
|
-
interface ActionDeToast {
|
|
426
|
-
|
|
427
|
-
|
|
1234
|
+
export interface ActionDeToast {
|
|
1235
|
+
readonly libelle: string;
|
|
1236
|
+
readonly faire: () => void;
|
|
428
1237
|
}
|
|
429
1238
|
/** Ce que l'appelant demande a afficher. */
|
|
430
|
-
interface DemandeDeToast {
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
1239
|
+
export interface DemandeDeToast {
|
|
1240
|
+
/**
|
|
1241
|
+
* ⚠️ Aucune donnee personnelle complete : un message reste a l'ecran le temps
|
|
1242
|
+
* qu'il faut pour etre lu — et lu par-dessus l'epaule. Un IBAN, un numero de
|
|
1243
|
+
* carte ou de telephone s'y ecrivent masques, comme le fait `st-masked`.
|
|
1244
|
+
*/
|
|
1245
|
+
readonly message: string;
|
|
1246
|
+
/**
|
|
1247
|
+
* Titre court, en gras au-dessus du message (planche 5). Optionnel : une confirmation tient
|
|
1248
|
+
* souvent en une phrase, et un titre qui la repete n'apporte rien.
|
|
1249
|
+
*/
|
|
1250
|
+
readonly titre?: string;
|
|
1251
|
+
/**
|
|
1252
|
+
* `primaire` est accepte et rendu comme `information`. `danger` reste a l'ecran jusqu'a sa
|
|
1253
|
+
* fermeture, sauf `dureeMs` explicite : une erreur doit etre lue.
|
|
1254
|
+
*/
|
|
1255
|
+
readonly ton?: TonSemantique;
|
|
1256
|
+
/**
|
|
1257
|
+
* ⚠️ Un message porteur d'action ne disparait PAS tout seul. WCAG 2.2.1 :
|
|
1258
|
+
* un contenu qui s'efface sur minuterie doit pouvoir etre prolonge ou
|
|
1259
|
+
* desactive. Un « Annuler » qui s'evanouit en quatre secondes est inutilisable
|
|
1260
|
+
* pour qui lit lentement, navigue au clavier ou emploie un lecteur d'ecran —
|
|
1261
|
+
* et c'est precisement la personne a qui l'annulation sert le plus.
|
|
1262
|
+
*/
|
|
1263
|
+
readonly action?: ActionDeToast;
|
|
1264
|
+
/**
|
|
1265
|
+
* Duree d'affichage en millisecondes. Ignoree des qu'une action est fournie.
|
|
1266
|
+
* `null` : le message reste jusqu'a sa fermeture, par un bouton « Ignorer ». Absente :
|
|
1267
|
+
* `rythme.tenue.toast`, sauf pour `danger`, persistant par defaut.
|
|
1268
|
+
*/
|
|
1269
|
+
readonly dureeMs?: number | null;
|
|
451
1270
|
}
|
|
452
1271
|
/** Un message affiche, tel que le conteneur le connait. */
|
|
453
|
-
interface Toast extends DemandeDeToast {
|
|
454
|
-
|
|
455
|
-
|
|
1272
|
+
export interface Toast extends DemandeDeToast {
|
|
1273
|
+
readonly identifiant: number;
|
|
1274
|
+
readonly ton: TonSemantique;
|
|
456
1275
|
}
|
|
457
|
-
|
|
458
1276
|
/**
|
|
459
1277
|
* Messages ephemeres.
|
|
460
1278
|
*
|
|
@@ -462,14 +1280,24 @@ interface Toast extends DemandeDeToast {
|
|
|
462
1280
|
* const messages = inject(StToast);
|
|
463
1281
|
* messages.montrer({ message: 'Virement enregistre', ton: 'succes' });
|
|
464
1282
|
* messages.montrer({
|
|
465
|
-
*
|
|
1283
|
+
* titre: 'Beneficiaire supprime',
|
|
1284
|
+
* message: 'Il ne recevra plus de virement.',
|
|
466
1285
|
* action: { libelle: 'Annuler', faire: () => this.retablir() },
|
|
467
1286
|
* });
|
|
468
1287
|
* ```
|
|
469
1288
|
*
|
|
470
|
-
* ⚠️ **
|
|
471
|
-
*
|
|
472
|
-
*
|
|
1289
|
+
* ⚠️ **Une seule pile pour toute l'application**, creee a la premiere demande, et
|
|
1290
|
+
* par ce service seulement : la pile n'est pas un composant public. Deux piles
|
|
1291
|
+
* superposees se recouvrent, et doublent les regions vivantes.
|
|
1292
|
+
*
|
|
1293
|
+
* ⚠️ **Au-dessus de tout, toujours.** La pile vit dans son PROPRE hote, enfant de
|
|
1294
|
+
* `<body>`, porteur de `popover="manual"` et montre par `showPopover()` : la couche
|
|
1295
|
+
* superieure du navigateur. Les volets du CDK y vivent aussi, et le dernier montre
|
|
1296
|
+
* passe devant : chaque volet ajoute ensuite (un dialogue ouvert apres un message)
|
|
1297
|
+
* fait remonter la pile au sommet. Un message porteur d'action reste donc cliquable
|
|
1298
|
+
* sous un dialogue, et ses regions vivantes ne recoivent pas l'`aria-hidden` que le
|
|
1299
|
+
* dialogue du CDK pose sur le reste de la page (il epargne les porteurs de
|
|
1300
|
+
* `popover`). Sans `popover`, repli : `position: fixed` au plan des notifications.
|
|
473
1301
|
*
|
|
474
1302
|
* ⚠️ **A n'employer que pour ce qui peut etre manque.** Un message ephemere
|
|
475
1303
|
* n'est pas une facon d'annoncer une erreur : si l'information compte, elle
|
|
@@ -477,85 +1305,127 @@ interface Toast extends DemandeDeToast {
|
|
|
477
1305
|
* champ. La regle de tri : si la personne qui n'a pas vu le message est
|
|
478
1306
|
* penalisee, ce n'est pas un toast.
|
|
479
1307
|
*/
|
|
480
|
-
declare class StToast {
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
1308
|
+
export declare class StToast {
|
|
1309
|
+
private readonly document;
|
|
1310
|
+
private readonly application;
|
|
1311
|
+
private readonly injecteur;
|
|
1312
|
+
private readonly volets;
|
|
1313
|
+
private conteneur;
|
|
1314
|
+
private observateur;
|
|
1315
|
+
private retirerLeSuiviDesPopovers;
|
|
1316
|
+
constructor();
|
|
1317
|
+
/** Affiche un message. Rend son identifiant, pour pouvoir le retirer. */
|
|
1318
|
+
montrer(demande: DemandeDeToast): number;
|
|
1319
|
+
retirer(identifiant: number): void;
|
|
1320
|
+
/**
|
|
1321
|
+
* Place le focus sur le message le plus recent (raccourci F6, bouton « Notifications » de la
|
|
1322
|
+
* coquille). Rend `false` quand il n'y a aucun message.
|
|
1323
|
+
*/
|
|
1324
|
+
focaliser(): boolean;
|
|
1325
|
+
private pile;
|
|
1326
|
+
/** Remet la pile au sommet de la couche superieure : le dernier montre passe devant. */
|
|
1327
|
+
private remonter;
|
|
1328
|
+
/**
|
|
1329
|
+
* Chaque volet ajoute au conteneur du CDK (dialogue, menu, infobulle) se montre APRES la pile
|
|
1330
|
+
* dans la couche superieure : la pile remonte derriere lui. L'observateur rappelle apres la
|
|
1331
|
+
* tache qui a montre le volet, donc apres son `showPopover()`. Un volet RETIRE (dialogue ferme)
|
|
1332
|
+
* rappelle aussi : `data-dialogue-ouvert` doit retomber quand plus aucun n'est modal. Un popover
|
|
1333
|
+
* montre ailleurs dans la page la fait remonter de meme (lot 233, reste).
|
|
1334
|
+
*/
|
|
1335
|
+
private suivreLesVolets;
|
|
1336
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StToast, never>;
|
|
1337
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
1338
|
+
}
|
|
1339
|
+
/**
|
|
1340
|
+
* Comment un message se ferme : la croix (message temporise, ou porteur d'action), ou un bouton
|
|
1341
|
+
* « Ignorer » en texte (message persistant sans action, planche 5).
|
|
1342
|
+
*/
|
|
1343
|
+
export type FermetureDeToast = 'croix' | 'ignorer';
|
|
1344
|
+
/**
|
|
1345
|
+
* UN message ephemere, tel que la pile le dessine : barre de ton de 3 px au bord de depart, icone
|
|
1346
|
+
* pleine de 20 px alignee sur la premiere ligne, titre optionnel, message, action en texte et
|
|
1347
|
+
* fermeture (planche 5, module 5.4).
|
|
1348
|
+
*
|
|
1349
|
+
* ⚠️ **Piece de rendu, pas un moyen d'afficher un message.** En application, un message passe par
|
|
1350
|
+
* `StToast.montrer()` : c'est la pile qui l'annonce (regions vivantes permanentes), le temporise,
|
|
1351
|
+
* le borne et rend le focus a sa fermeture. Pose seul dans une page, ce composant n'annonce rien
|
|
1352
|
+
* et ne part jamais. Il est public pour qu'une vitrine (banc, documentation) le montre en place.
|
|
1353
|
+
*
|
|
1354
|
+
* Il ne porte AUCUN role : voir `StToast`.
|
|
1355
|
+
*/
|
|
1356
|
+
export declare class StToastMessage {
|
|
1357
|
+
private readonly libelles;
|
|
1358
|
+
readonly ton: import("@angular/core").InputSignal<TonSemantique>;
|
|
1359
|
+
readonly titre: import("@angular/core").InputSignal<string | null | undefined>;
|
|
1360
|
+
readonly message: import("@angular/core").InputSignal<string>;
|
|
1361
|
+
/** Libelle de l'action (un verbe : « Annuler », « Consulter ») ; absent : aucune action. */
|
|
1362
|
+
readonly libelleDAction: import("@angular/core").InputSignal<string | null | undefined>;
|
|
1363
|
+
readonly fermeture: import("@angular/core").InputSignal<FermetureDeToast>;
|
|
1364
|
+
/** L'action a ete activee. */
|
|
1365
|
+
readonly action: import("@angular/core").OutputEmitterRef<void>;
|
|
1366
|
+
/** La croix ou « Ignorer » a ete activee. */
|
|
1367
|
+
readonly retrait: import("@angular/core").OutputEmitterRef<void>;
|
|
1368
|
+
/** `primaire` se dessine comme `information` (brief 13). */
|
|
1369
|
+
protected readonly tonRendu: import("@angular/core").Signal<"neutre" | "information" | "succes" | "avertissement" | "danger">;
|
|
1370
|
+
/** Icone pleine au ton ; le neutre garde le contour, sans couleur de statut. */
|
|
1371
|
+
protected readonly icone: import("@angular/core").Signal<Icone>;
|
|
1372
|
+
protected readonly libelleFermeture: import("@angular/core").Signal<string>;
|
|
1373
|
+
protected readonly libelleIgnorer: import("@angular/core").Signal<string>;
|
|
1374
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StToastMessage, never>;
|
|
1375
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StToastMessage, "st-toast-message", never, {
|
|
1376
|
+
"ton": {
|
|
1377
|
+
"alias": "ton";
|
|
1378
|
+
"required": false;
|
|
1379
|
+
"isSignal": true;
|
|
1380
|
+
};
|
|
1381
|
+
"titre": {
|
|
1382
|
+
"alias": "titre";
|
|
1383
|
+
"required": false;
|
|
1384
|
+
"isSignal": true;
|
|
1385
|
+
};
|
|
1386
|
+
"message": {
|
|
1387
|
+
"alias": "message";
|
|
1388
|
+
"required": true;
|
|
1389
|
+
"isSignal": true;
|
|
1390
|
+
};
|
|
1391
|
+
"libelleDAction": {
|
|
1392
|
+
"alias": "libelleDAction";
|
|
1393
|
+
"required": false;
|
|
1394
|
+
"isSignal": true;
|
|
1395
|
+
};
|
|
1396
|
+
"fermeture": {
|
|
1397
|
+
"alias": "fermeture";
|
|
1398
|
+
"required": false;
|
|
1399
|
+
"isSignal": true;
|
|
1400
|
+
};
|
|
1401
|
+
}, {
|
|
1402
|
+
"action": "action";
|
|
1403
|
+
"retrait": "retrait";
|
|
1404
|
+
}, never, never, true, never>;
|
|
1405
|
+
}
|
|
551
1406
|
/** Reponse donnee a l'avertissement. */
|
|
552
|
-
type ReponseDInactivite = 'prolonger' | 'deconnecter';
|
|
1407
|
+
export type ReponseDInactivite = 'prolonger' | 'deconnecter';
|
|
1408
|
+
/**
|
|
1409
|
+
* Seuils ou le temps restant s'annonce, en secondes : 60 et 30 en region polie, 10 en alerte.
|
|
1410
|
+
*
|
|
1411
|
+
* ⚠️ JAMAIS a chaque seconde : une region qui change toutes les secondes recouvre tout ce que
|
|
1412
|
+
* le lecteur d'ecran dit, y compris les deux boutons que la personne cherche justement a atteindre.
|
|
1413
|
+
*/
|
|
1414
|
+
export declare const SEUILS_D_ANNONCE_PAR_DEFAUT: readonly number[];
|
|
1415
|
+
/** Un seuil a cette valeur ou en dessous s'annonce en ALERTE (`role="alert"`), plus en polie. */
|
|
1416
|
+
export declare const SEUIL_D_ALERTE = 10;
|
|
553
1417
|
/** Ce que l'avertissement passe a son panneau. */
|
|
554
|
-
interface DonneesDInactivite {
|
|
555
|
-
|
|
556
|
-
|
|
1418
|
+
export interface DonneesDInactivite {
|
|
1419
|
+
readonly restant: Signal<number>;
|
|
1420
|
+
readonly identifiantDeDescription: string;
|
|
1421
|
+
/**
|
|
1422
|
+
* Duree totale de l'avertissement, en secondes : la jauge se lit `restant / duree`. Absente,
|
|
1423
|
+
* le premier `restant` recu (la jauge part pleine).
|
|
1424
|
+
*/
|
|
1425
|
+
readonly duree?: number;
|
|
1426
|
+
/** Seuils d'annonce ; defaut `SEUILS_D_ANNONCE_PAR_DEFAUT`. */
|
|
1427
|
+
readonly seuils?: readonly number[];
|
|
557
1428
|
}
|
|
558
|
-
|
|
559
1429
|
/**
|
|
560
1430
|
* Avertissement avant fermeture de session pour inactivite.
|
|
561
1431
|
*
|
|
@@ -579,42 +1449,110 @@ interface DonneesDInactivite {
|
|
|
579
1449
|
* ⚠️ **Le clic a cote ne prolonge rien**, pour la raison que donne `StInactivite`
|
|
580
1450
|
* du noyau : le dialogue disparaitrait sans que la session ait ete prolongee cote
|
|
581
1451
|
* serveur. Il faut repondre. Echap, geste delibere, vaut « Rester connecte ».
|
|
1452
|
+
*
|
|
1453
|
+
* ⚠️ **Une fermeture SUBIE ne prolonge rien non plus** (A1199, A1216). Une navigation du
|
|
1454
|
+
* routeur fermait l'alerte sans reponse, et ce silence valait « Rester connecte » : une
|
|
1455
|
+
* redirection programmee prolongeait la session sans personne devant l'ecran. L'alerte survit
|
|
1456
|
+
* desormais a la navigation (`survitALaNavigation`), et toute fermeture sans reponse la rouvre
|
|
1457
|
+
* tant que le decompte court, sans rien emettre.
|
|
582
1458
|
*/
|
|
583
|
-
declare class StIdleWarning {
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
1459
|
+
export declare class StIdleWarning {
|
|
1460
|
+
private readonly dialogues;
|
|
1461
|
+
/** `null` : aucun avertissement en cours. */
|
|
1462
|
+
readonly secondesRestantes: import("@angular/core").InputSignal<number | null>;
|
|
1463
|
+
/**
|
|
1464
|
+
* Duree totale de l'avertissement, en secondes : la jauge du panneau se lit
|
|
1465
|
+
* `secondesRestantes / duree`. `null` : la premiere valeur recue (la jauge part pleine).
|
|
1466
|
+
*/
|
|
1467
|
+
readonly duree: import("@angular/core").InputSignal<number | null>;
|
|
1468
|
+
/** Seuils ou le temps restant s'annonce (defaut 60 et 30 s en polie, 10 s en alerte). */
|
|
1469
|
+
readonly seuils: import("@angular/core").InputSignal<readonly number[]>;
|
|
1470
|
+
readonly prolonge: import("@angular/core").OutputEmitterRef<void>;
|
|
1471
|
+
readonly deconnecte: import("@angular/core").OutputEmitterRef<void>;
|
|
1472
|
+
private readonly restant;
|
|
1473
|
+
private reference;
|
|
1474
|
+
private readonly identifiantDeDescription;
|
|
1475
|
+
constructor();
|
|
1476
|
+
private ouvrir;
|
|
1477
|
+
private fermerSansReponse;
|
|
1478
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StIdleWarning, never>;
|
|
1479
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StIdleWarning, "st-idle-warning", never, {
|
|
1480
|
+
"secondesRestantes": {
|
|
1481
|
+
"alias": "secondesRestantes";
|
|
1482
|
+
"required": false;
|
|
1483
|
+
"isSignal": true;
|
|
1484
|
+
};
|
|
1485
|
+
"duree": {
|
|
1486
|
+
"alias": "duree";
|
|
1487
|
+
"required": false;
|
|
1488
|
+
"isSignal": true;
|
|
1489
|
+
};
|
|
1490
|
+
"seuils": {
|
|
1491
|
+
"alias": "seuils";
|
|
1492
|
+
"required": false;
|
|
1493
|
+
"isSignal": true;
|
|
1494
|
+
};
|
|
1495
|
+
}, {
|
|
1496
|
+
"prolonge": "prolonge";
|
|
1497
|
+
"deconnecte": "deconnecte";
|
|
1498
|
+
}, never, never, true, never>;
|
|
1499
|
+
}
|
|
1500
|
+
/**
|
|
1501
|
+
* Contenu du dialogue d'avertissement (planche 5, dialogue B). Ouvert par `st-idle-warning`,
|
|
1502
|
+
* jamais directement.
|
|
1503
|
+
*
|
|
1504
|
+
* Anatomie : en-tete de ton `avertissement` (sablier, surtitre « Inactivite detectee », sans
|
|
1505
|
+
* croix), message qui DECRIT l'alerte et dit la duree, bloc minuteur (duree `role="timer"`
|
|
1506
|
+
* nommee par sa legende, jauge `st-progress` avertissement), actions aux deux bouts.
|
|
1507
|
+
*
|
|
1508
|
+
* ⚠️ Rien ne pulse, rien ne s'anime par seconde (EA-13) : sous 10 s, rien ne change a l'ecran ;
|
|
1509
|
+
* c'est l'annonce ASSERTIVE qui porte l'escalade. La duree est en chiffres tabulaires : ni la
|
|
1510
|
+
* phrase ni le bloc ne tremblent pendant le decompte.
|
|
1511
|
+
*
|
|
1512
|
+
* ⚠️ Echap est traite ICI, en reponse explicite « Rester connecte » : le dialogue s'ouvre avec
|
|
1513
|
+
* `fermetureInterdite`, et toute autre fermeture (sans reponse) est une fermeture SUBIE, que
|
|
1514
|
+
* `st-idle-warning` ne prend jamais pour une prolongation.
|
|
1515
|
+
*/
|
|
1516
|
+
export declare class StIdleWarningPanel {
|
|
1517
|
+
private readonly reference;
|
|
1518
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
1519
|
+
private readonly locale;
|
|
1520
|
+
protected readonly donnees: DonneesDInactivite;
|
|
1521
|
+
/** Seuils de 60 et 30 s : region polie. */
|
|
1522
|
+
protected readonly annonce: AnnonceLocale;
|
|
1523
|
+
/** Seuil de 10 s : region d'alerte (assertive). */
|
|
1524
|
+
protected readonly alerte: AnnonceLocale;
|
|
1525
|
+
protected readonly identifiantDeLegende: string;
|
|
1526
|
+
/** Duree totale : donnee, ou le premier `restant` recu. */
|
|
1527
|
+
private readonly duree;
|
|
1528
|
+
protected readonly restant: import("@angular/core").Signal<number>;
|
|
1529
|
+
/** La duree dite en toutes lettres (« 1 min 30 s ») : description et annonces. */
|
|
1530
|
+
protected readonly dureeLue: import("@angular/core").Signal<string>;
|
|
1531
|
+
/** Deux chiffres au moins, sans separateur de milliers, dans les chiffres de la locale. */
|
|
1532
|
+
private readonly deuxChiffres;
|
|
1533
|
+
/** La duree du bloc minuteur (« 01:30 »). */
|
|
1534
|
+
protected readonly dureeAffichee: import("@angular/core").Signal<string>;
|
|
1535
|
+
protected readonly jauge: import("@angular/core").Signal<number>;
|
|
1536
|
+
protected readonly maximum: number;
|
|
1537
|
+
protected readonly phrase: import("@angular/core").Signal<string>;
|
|
1538
|
+
/**
|
|
1539
|
+
* Le seuil que la derniere valeur vient de franchir, ou `null` : la valeur precedente vit dans
|
|
1540
|
+
* le signal lie, plus dans la fermeture d'un effet. A l'ouverture, rien n'est franchi : le
|
|
1541
|
+
* dialogue d'alerte est deja lu avec sa description.
|
|
1542
|
+
*/
|
|
1543
|
+
private readonly franchi;
|
|
1544
|
+
constructor();
|
|
1545
|
+
protected rester(): void;
|
|
1546
|
+
protected deconnecter(): void;
|
|
1547
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StIdleWarningPanel, never>;
|
|
1548
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StIdleWarningPanel, "st-idle-warning-panel", never, {}, {}, never, never, true, never>;
|
|
1549
|
+
}
|
|
1550
|
+
/**
|
|
1551
|
+
* Cote du declencheur ou la bulle se pose d'abord : `haut` (defaut), `bas`, ou a cote dans le
|
|
1552
|
+
* sens d'ecriture (`debut`, `fin`). Le cote oppose sert de repli quand la place manque ; le cote
|
|
1553
|
+
* REEL est pose en `data-cote` sur la bulle, qui y oriente sa fleche.
|
|
1554
|
+
*/
|
|
1555
|
+
export type PositionDInfobulle = 'haut' | 'bas' | 'debut' | 'fin';
|
|
618
1556
|
/**
|
|
619
1557
|
* Infobulle : un complement de texte, au survol ET au focus.
|
|
620
1558
|
*
|
|
@@ -635,117 +1573,568 @@ type PositionDInfobulle = 'haut' | 'bas';
|
|
|
635
1573
|
* vers un element absent au moment ou le focus arrive : le lecteur d'ecran,
|
|
636
1574
|
* qui calcule la description a cet instant, ne lirait rien.
|
|
637
1575
|
*
|
|
1576
|
+
* ⚠️ **Un hote FOCALISABLE.** Sans focus, la bulle n'existe pas au clavier : un `<span stTooltip>`
|
|
1577
|
+
* ou un `<button disabled>` avertit en developpement. Une action indisponible s'ecrit
|
|
1578
|
+
* `indisponible` (`aria-disabled`, D39) : elle reste focalisable, et sa bulle s'ouvre.
|
|
1579
|
+
*
|
|
638
1580
|
* ⚠️ **Jamais d'information exclusive, jamais de contenu interactif.** Sur un
|
|
639
1581
|
* ecran tactile, il n'y a ni survol ni focus visible : l'infobulle n'existe pas.
|
|
640
1582
|
* Ce qu'elle dit doit pouvoir manquer. Un lien ou un bouton dedans serait
|
|
641
1583
|
* inatteignable — c'est un `st-popover` qu'il faut alors.
|
|
1584
|
+
*
|
|
1585
|
+
* Rythme (03 §3.4, P8) : au survol, `rythme.delai.survol` avant d'apparaitre —
|
|
1586
|
+
* balayer une barre d'outils ne fait pas clignoter chaque bulle — ; au depart du
|
|
1587
|
+
* pointeur, `rythme.delai.grace` pour rejoindre la bulle. Au focus, sans delai.
|
|
1588
|
+
* Apparition et disparition en fondu seul : une bulle qui se deplacerait
|
|
1589
|
+
* de 4 px ne se verrait pas bouger, seulement trembler.
|
|
642
1590
|
*/
|
|
643
|
-
declare class StTooltip {
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
1591
|
+
export declare class StTooltip {
|
|
1592
|
+
private readonly element;
|
|
1593
|
+
private readonly couche;
|
|
1594
|
+
private readonly descripteur;
|
|
1595
|
+
private readonly visibles;
|
|
1596
|
+
readonly stTooltip: import("@angular/core").InputSignal<string>;
|
|
1597
|
+
readonly positionDInfobulle: import("@angular/core").InputSignal<PositionDInfobulle>;
|
|
1598
|
+
/** Icone decorative optionnelle, avant le texte de la bulle (planche 5 : `badge-coche`). */
|
|
1599
|
+
readonly iconeDInfobulle: import("@angular/core").InputSignal<"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" | "code-qr" | "code-qr-scanner" | "coffre-fort" | "colonnes" | "connexion" | "contraste" | "copie" | "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" | "iban" | "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" | null>;
|
|
1600
|
+
private minuterie;
|
|
1601
|
+
private description;
|
|
1602
|
+
constructor();
|
|
1603
|
+
protected auSurvol(): void;
|
|
1604
|
+
protected auDepartDuPointeur(): void;
|
|
1605
|
+
/** L'hote garde le focus, ou le pointeur est encore sur l'hote ou sur la bulle elle-meme. */
|
|
1606
|
+
private encoreRequise;
|
|
1607
|
+
/**
|
|
1608
|
+
* Perte de focus de l'hote : WCAG 1.4.13, persistante (revue E12, BASSE). Sans cette garde, Tab
|
|
1609
|
+
* hors de l'hote masquait la bulle meme si le pointeur la survolait encore (ou l'hote).
|
|
1610
|
+
*/
|
|
1611
|
+
protected auPerteDuFocus(): void;
|
|
1612
|
+
afficher(): void;
|
|
1613
|
+
masquer(): void;
|
|
1614
|
+
private programmer;
|
|
1615
|
+
private annulerLaMinuterie;
|
|
1616
|
+
private retirerLaDescription;
|
|
1617
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StTooltip, never>;
|
|
1618
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StTooltip, "[stTooltip]", never, {
|
|
1619
|
+
"stTooltip": {
|
|
1620
|
+
"alias": "stTooltip";
|
|
1621
|
+
"required": true;
|
|
1622
|
+
"isSignal": true;
|
|
1623
|
+
};
|
|
1624
|
+
"positionDInfobulle": {
|
|
1625
|
+
"alias": "positionDInfobulle";
|
|
1626
|
+
"required": false;
|
|
1627
|
+
"isSignal": true;
|
|
1628
|
+
};
|
|
1629
|
+
"iconeDInfobulle": {
|
|
1630
|
+
"alias": "iconeDInfobulle";
|
|
1631
|
+
"required": false;
|
|
1632
|
+
"isSignal": true;
|
|
1633
|
+
};
|
|
1634
|
+
}, {}, never, never, true, never>;
|
|
1635
|
+
}
|
|
666
1636
|
/**
|
|
667
1637
|
* Bulle visible d'une infobulle. Posee par `stTooltip`, jamais directement.
|
|
668
1638
|
*
|
|
1639
|
+
* Surface INVERSE du socle (planche 5, module 5.6) : rayon des surfaces, filet clair a 40 %,
|
|
1640
|
+
* texte centre en 12/16 moyen (D41 : 11 px est reserve aux capitales), icone decorative
|
|
1641
|
+
* optionnelle, et fleche carree de 12 px tournee vers le declencheur, orientee par le `data-cote`
|
|
1642
|
+
* que la couche pose (cote REEL, repli compris). Sans `data-cote` (bulle hors couche), pas de
|
|
1643
|
+
* fleche.
|
|
1644
|
+
*
|
|
669
1645
|
* ⚠️ Muette (`aria-hidden`) : le texte est deja lu comme DESCRIPTION du
|
|
670
1646
|
* declencheur, par un noeud persistant. L'exposer aussi ici le ferait lire deux
|
|
671
1647
|
* fois.
|
|
672
1648
|
*/
|
|
673
|
-
declare class StTooltipPanel {
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
1649
|
+
export declare class StTooltipPanel {
|
|
1650
|
+
readonly texte: import("@angular/core").InputSignal<string>;
|
|
1651
|
+
/** Icone decorative avant le texte (18 px, couleur du texte). */
|
|
1652
|
+
readonly icone: import("@angular/core").InputSignal<"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" | "code-qr" | "code-qr-scanner" | "coffre-fort" | "colonnes" | "connexion" | "contraste" | "copie" | "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" | "iban" | "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" | null>;
|
|
1653
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StTooltipPanel, never>;
|
|
1654
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StTooltipPanel, "st-tooltip-panel", never, {
|
|
1655
|
+
"texte": {
|
|
1656
|
+
"alias": "texte";
|
|
1657
|
+
"required": true;
|
|
1658
|
+
"isSignal": true;
|
|
1659
|
+
};
|
|
1660
|
+
"icone": {
|
|
1661
|
+
"alias": "icone";
|
|
1662
|
+
"required": false;
|
|
1663
|
+
"isSignal": true;
|
|
1664
|
+
};
|
|
1665
|
+
}, {}, never, never, true, never>;
|
|
677
1666
|
}
|
|
678
|
-
|
|
679
|
-
type AlignementDePopover = 'debut' | 'fin';
|
|
1667
|
+
export type AlignementDePopover = 'debut' | 'fin';
|
|
680
1668
|
/**
|
|
681
1669
|
* Couche NON modale attachee a un declencheur : filtres rapides, detail d'une
|
|
682
1670
|
* ligne, petit formulaire.
|
|
683
1671
|
*
|
|
684
1672
|
* ```html
|
|
685
1673
|
* <button stButton [stPopoverTrigger]="filtres">Filtres</button>
|
|
686
|
-
* <st-popover #filtres
|
|
1674
|
+
* <st-popover #filtres titre="Filtres des operations">…</st-popover>
|
|
687
1675
|
* ```
|
|
688
1676
|
*
|
|
689
1677
|
* Distinct de l'infobulle, qui ne contient que du texte, et du dialogue, qui
|
|
690
1678
|
* piege le focus et met la page en retrait.
|
|
691
1679
|
*
|
|
692
|
-
*
|
|
693
|
-
*
|
|
694
|
-
* avec ce qu'on fait : elle se ferme quand le focus part ailleurs que sur elle
|
|
695
|
-
* ou son declencheur.
|
|
1680
|
+
* Nom : `titre` (visible, relie par `aria-labelledby`) ou `etiquette` (`aria-label`, invisible).
|
|
1681
|
+
* L'un des deux est exige ; sans nom, la couche s'annonce « dialogue » et rien d'autre.
|
|
696
1682
|
*
|
|
697
|
-
*
|
|
698
|
-
*
|
|
699
|
-
*
|
|
1683
|
+
* Ce qu'elle tient (lot 232) :
|
|
1684
|
+
*
|
|
1685
|
+
* - a l'ouverture, le focus ENTRE : sur le premier arret de tabulation (`InteractivityChecker`,
|
|
1686
|
+
* un controle `aria-disabled="true"` passe son tour), sinon sur la couche elle-meme ;
|
|
1687
|
+
* - Echap ferme et rend le focus au declencheur ;
|
|
1688
|
+
* - Tab apres le dernier arret, ou Maj+Tab avant le premier, ferme : la couche vit en fin de
|
|
1689
|
+
* document, et la tabulation repart du DECLENCHEUR, dans l'ordre de la page ;
|
|
1690
|
+
* - un focus pose ailleurs (clic, script) ferme SANS le reprendre ; un clic exterieur aussi ;
|
|
1691
|
+
* - un second clic sur le declencheur ferme (garde de `CoucheAncree`) ;
|
|
1692
|
+
* - une navigation du routeur ABOUTIE ferme (`NavigationEnd`, apres les gardes) : plus de couche
|
|
1693
|
+
* fantome sur un ecran qui change ; un declencheur emporte hors de la vue par le defilement
|
|
1694
|
+
* ferme aussi.
|
|
1695
|
+
*
|
|
1696
|
+
* ⚠️ **Non modale, donc aucun piege** : la page reste utilisable autour, sans voile.
|
|
1697
|
+
*
|
|
1698
|
+
* `fermable` (lot 265) : un bouton « Fermer » visible dans l'en-tete, pour qui n'a ni Echap ni clic
|
|
1699
|
+
* exterieur evident (au toucher). `feuilleSousMd` : sous la rupture `md` de la fenetre, la couche
|
|
1700
|
+
* s'ouvre en feuille inferieure, pleine largeur au bas de l'ecran, toujours sans voile.
|
|
700
1701
|
*
|
|
701
1702
|
* Meme structure que `st-menu` : le declencheur DESIGNE la couche, et l'element
|
|
702
1703
|
* est DEPLACE dans la couche d'overlay a l'ouverture, avec ses liaisons et son
|
|
703
1704
|
* etat.
|
|
704
1705
|
*/
|
|
705
|
-
declare class StPopover {
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
1706
|
+
export declare class StPopover implements OnInit {
|
|
1707
|
+
private readonly element;
|
|
1708
|
+
private readonly couche;
|
|
1709
|
+
private readonly verificateur;
|
|
1710
|
+
private readonly defilements;
|
|
1711
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
1712
|
+
/** Nom accessible invisible (`aria-label`), quand la couche n'a pas de `titre`. */
|
|
1713
|
+
readonly etiquette: import("@angular/core").InputSignal<string | undefined>;
|
|
1714
|
+
/**
|
|
1715
|
+
* Titre visible, en `libelle` discret, qui NOMME la couche (`aria-labelledby`) : un paragraphe
|
|
1716
|
+
* et non un titre de section, pour ne pas casser la hierarchie de la page.
|
|
1717
|
+
*/
|
|
1718
|
+
readonly titre: import("@angular/core").InputSignal<string | null>;
|
|
1719
|
+
/** Identifiant(s) d'un texte qui DECRIT la couche (`aria-describedby`). */
|
|
1720
|
+
readonly descriptionDe: import("@angular/core").InputSignal<string | null>;
|
|
1721
|
+
readonly alignement: import("@angular/core").InputSignal<AlignementDePopover>;
|
|
1722
|
+
/** Un bouton « Fermer » visible dans l'en-tete (lot 265) ; il rend le focus au declencheur. */
|
|
1723
|
+
readonly fermable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1724
|
+
/**
|
|
1725
|
+
* Sous la rupture `md` de la FENETRE, une feuille inferieure (lot 265) plutot qu'une bulle
|
|
1726
|
+
* accrochee : decide a l'ouverture, par la largeur et non par le pointeur.
|
|
1727
|
+
*/
|
|
1728
|
+
readonly feuilleSousMd: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1729
|
+
protected readonly id: string;
|
|
1730
|
+
protected readonly idDuTitre: string;
|
|
1731
|
+
protected readonly titreAffiche: import("@angular/core").Signal<string | null>;
|
|
1732
|
+
private readonly ouvertInterne;
|
|
1733
|
+
readonly ouvert: import("@angular/core").Signal<boolean>;
|
|
1734
|
+
private declencheur;
|
|
1735
|
+
private defilement;
|
|
1736
|
+
private repli;
|
|
1737
|
+
/**
|
|
1738
|
+
* Dernier geste de la personne pendant l'ouverture (pointeur ou clavier), lu par le repli de la
|
|
1739
|
+
* perte de focus : un focus tombe sur le corps du document apres un CLIC n'est jamais repris.
|
|
1740
|
+
*/
|
|
1741
|
+
private dernierGeste;
|
|
1742
|
+
private ecouteDesGestes;
|
|
1743
|
+
constructor();
|
|
1744
|
+
ngOnInit(): void;
|
|
1745
|
+
/** Identifiant de la couche, que le declencheur pose en `aria-controls` avant meme l'ouverture. */
|
|
1746
|
+
identifiant(): string;
|
|
1747
|
+
basculerDepuis(declencheur: HTMLElement): void;
|
|
1748
|
+
ouvrirDepuis(declencheur: HTMLElement): void;
|
|
1749
|
+
/**
|
|
1750
|
+
* Ferme. Le focus est rendu au declencheur A LA DEMANDE (Echap), sans attendre le fondu, et
|
|
1751
|
+
* seulement s'il est encore dans la couche : un focus pose ailleurs n'est jamais repris.
|
|
1752
|
+
*/
|
|
1753
|
+
fermer(options?: {
|
|
1754
|
+
readonly rendreLeFocus?: boolean;
|
|
1755
|
+
}): void;
|
|
1756
|
+
/**
|
|
1757
|
+
* Revient a l'etat ferme, sans toucher a la couche : pour `fermer`, et quand le CDK a detache la
|
|
1758
|
+
* couche de lui-meme (`auDetachement`) — le declencheur ne dit plus « ouvert » pour une couche
|
|
1759
|
+
* partie.
|
|
1760
|
+
*/
|
|
1761
|
+
private oublierLOuverture;
|
|
1762
|
+
/**
|
|
1763
|
+
* Revue de la reprise (MOYENNE) : le CDK ne rapporte le clic exterieur qu'au `click`, alors que le
|
|
1764
|
+
* focus part vers le corps du document des le `mousedown`. Un clic tenu quelques millisecondes
|
|
1765
|
+
* sur une zone non focalisable laissait le repli de `aLaPerteDuFocus` fermer AVANT, en rendant le
|
|
1766
|
+
* focus au declencheur : un focus vole a un clic. Le dernier geste dit si la sortie vient du
|
|
1767
|
+
* pointeur ou du clavier. En capture sur le document, retire a la fermeture.
|
|
1768
|
+
*/
|
|
1769
|
+
private ecouterLesGestes;
|
|
1770
|
+
protected auClavier(evenement: KeyboardEvent): void;
|
|
1771
|
+
/**
|
|
1772
|
+
* Tab apres le dernier arret, Maj+Tab avant le premier : la couche est en FIN de document, et la
|
|
1773
|
+
* tabulation native sortait de la page (ou sautait au dernier element de la page). Le focus
|
|
1774
|
+
* repart du declencheur, rendu AVANT l'action par defaut : Tab va a l'element qui le SUIT dans
|
|
1775
|
+
* la page ; Maj+Tab s'arrete sur lui.
|
|
1776
|
+
*
|
|
1777
|
+
* Revue E12 (fidelite/comportement, MOYENNE) : le focus tombe sur l'HOTE (`tabindex=-1`) des
|
|
1778
|
+
* qu'un clic atterrit sur une zone non focalisable de la couche (titre, padding, texte) — ou
|
|
1779
|
+
* quand tous les arrets sont `aria-disabled` (D39 : ce sont quand meme des arrets, mais jamais le
|
|
1780
|
+
* focus initial). Un Tab depuis l'hote fermait alors la couche au lieu d'ENTRER dans ses
|
|
1781
|
+
* controles. On n'y ferme plus que sur Maj+Tab (symetrique du bord de debut) ou quand il n'y a
|
|
1782
|
+
* aucun arret ; un Tab simple y entre, sur le premier.
|
|
1783
|
+
*/
|
|
1784
|
+
private tabulation;
|
|
1785
|
+
/**
|
|
1786
|
+
* Vrai quand la tabulation native partie de `actif` s'arrete encore dans la couche : un arret
|
|
1787
|
+
* apres lui (Tab) ou avant lui (Maj+Tab) dans l'ordre du document, selon la regle des groupes
|
|
1788
|
+
* radio (`arretDepuis`). Faux au bord : la couche se ferme et la tabulation repart du declencheur.
|
|
1789
|
+
*/
|
|
1790
|
+
private arretVoisin;
|
|
1791
|
+
/**
|
|
1792
|
+
* Un focus pose HORS de la couche et hors du declencheur ferme, sans le reprendre.
|
|
1793
|
+
* `relatedTarget` d'abord ; vide (focus parti vers un element non focalisable, fenetre quittee),
|
|
1794
|
+
* l'element actif est lu apres la transition, en repli.
|
|
1795
|
+
*/
|
|
1796
|
+
protected aLaPerteDuFocus(evenement: FocusEvent): void;
|
|
1797
|
+
/**
|
|
1798
|
+
* Revue E12 (comportement, HAUTE) : un `st-menu` (ou toute autre couche) ouvert depuis un
|
|
1799
|
+
* controle du popover vit dans un AUTRE `.cdk-overlay-pane` ; le focus qui y part ne quitte pas
|
|
1800
|
+
* le popover. `CoucheAncree.contient` le sait par ORIGINE (le declencheur de la sous-couche est
|
|
1801
|
+
* dans notre panneau), et la sous-couche se ferme AVEC le popover, quel que soit le chemin
|
|
1802
|
+
* (Echap, defilement, navigation, detachement par le CDK).
|
|
1803
|
+
*/
|
|
1804
|
+
private fermerSiHors;
|
|
1805
|
+
/**
|
|
1806
|
+
* Arrets de tabulation de la couche, dans l'ordre du document. Le verificateur du CDK dit ce qui
|
|
1807
|
+
* est focalisable et tabulable ; la visibilite n'est pas exigee (un controle de la couche est
|
|
1808
|
+
* visible des qu'elle l'est, et jsdom ne mesure rien), un sous-arbre `hidden` ou `inert` est
|
|
1809
|
+
* ecarte. Un controle `aria-disabled="true"` reste un arret (D39), mais pas un focus initial.
|
|
1810
|
+
*
|
|
1811
|
+
* ⚠️ Revue E12 (fidelite, BASSE, REPORTEE) : `ignoreVisibility: true` compte aussi un controle
|
|
1812
|
+
* masque par `display: none` ailleurs qu'un `[hidden]`/`[inert]` (un `<details>` ferme, une
|
|
1813
|
+
* couche imbriquee fermee) comme un arret. Le corriger sans casser jsdom (qui ne mesure aucune
|
|
1814
|
+
* boite) demande un repli de visibilite injectable ; suit dans un lot dedie plutot qu'ici.
|
|
1815
|
+
*/
|
|
1816
|
+
private arrets;
|
|
1817
|
+
/**
|
|
1818
|
+
* Un declencheur que le defilement emporte hors de la vue ferme la couche : elle resterait
|
|
1819
|
+
* seule, accrochee a rien de visible.
|
|
1820
|
+
*
|
|
1821
|
+
* ⚠️ Revue E12 (fidelite, BASSE, REPORTEE) : `ScrollDispatcher.ancestorScrolled` n'entend que la
|
|
1822
|
+
* fenetre et les conteneurs enregistres `cdkScrollable` ; aucun composant du socle ne pose cette
|
|
1823
|
+
* directive aujourd'hui (corps de dialogue defilant, enveloppe de tableau), donc un popover ouvert
|
|
1824
|
+
* depuis l'un d'eux ne suit pas son declencheur au defilement. Ecouter `scroll` en capture sur le
|
|
1825
|
+
* document reglerait le cas general, mais change la gestion de l'abonnement ET son essai (jsdom ne
|
|
1826
|
+
* mesure aucune boite pour `horsDeVue`) : suit dans un lot dedie plutot qu'ici.
|
|
1827
|
+
*/
|
|
1828
|
+
private suivreLeDefilement;
|
|
1829
|
+
/** Vrai sous la rupture `md` ; sans `matchMedia` (rendu serveur, jsdom), jamais. */
|
|
1830
|
+
private fenetreEtroite;
|
|
1831
|
+
private horsDeVue;
|
|
1832
|
+
private oublierLeDefilement;
|
|
1833
|
+
private annulerLeRepli;
|
|
1834
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StPopover, never>;
|
|
1835
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StPopover, "st-popover", never, {
|
|
1836
|
+
"etiquette": {
|
|
1837
|
+
"alias": "etiquette";
|
|
1838
|
+
"required": false;
|
|
1839
|
+
"isSignal": true;
|
|
1840
|
+
};
|
|
1841
|
+
"titre": {
|
|
1842
|
+
"alias": "titre";
|
|
1843
|
+
"required": false;
|
|
1844
|
+
"isSignal": true;
|
|
1845
|
+
};
|
|
1846
|
+
"descriptionDe": {
|
|
1847
|
+
"alias": "descriptionDe";
|
|
1848
|
+
"required": false;
|
|
1849
|
+
"isSignal": true;
|
|
1850
|
+
};
|
|
1851
|
+
"alignement": {
|
|
1852
|
+
"alias": "alignement";
|
|
1853
|
+
"required": false;
|
|
1854
|
+
"isSignal": true;
|
|
1855
|
+
};
|
|
1856
|
+
"fermable": {
|
|
1857
|
+
"alias": "fermable";
|
|
1858
|
+
"required": false;
|
|
1859
|
+
"isSignal": true;
|
|
1860
|
+
};
|
|
1861
|
+
"feuilleSousMd": {
|
|
1862
|
+
"alias": "feuilleSousMd";
|
|
1863
|
+
"required": false;
|
|
1864
|
+
"isSignal": true;
|
|
1865
|
+
};
|
|
1866
|
+
}, {}, never, ["*"], true, never>;
|
|
1867
|
+
}
|
|
1868
|
+
/**
|
|
1869
|
+
* Declencheur d'un `st-popover`, symetrique de `[stMenuTrigger]` :
|
|
1870
|
+
*
|
|
1871
|
+
* ```html
|
|
1872
|
+
* <button stButton [stPopoverTrigger]="filtres" iconeApres="triangle-bas">Filtres</button>
|
|
1873
|
+
* <st-popover #filtres titre="Filtres des operations">…</st-popover>
|
|
1874
|
+
* ```
|
|
1875
|
+
*
|
|
1876
|
+
* Il porte `aria-haspopup="dialog"`, `aria-expanded`, `aria-controls` (l'identifiant de la
|
|
1877
|
+
* couche, meme fermee : le lien existe pour les technologies d'assistance avant l'ouverture) et
|
|
1878
|
+
* `data-ouvert` pour son etat enfonce. Le clic (Entree, Espace) bascule ; la fleche bas ouvre,
|
|
1879
|
+
* comme sur un declencheur de menu.
|
|
1880
|
+
*
|
|
1881
|
+
* ⚠️ `type="button"` est FORCE sur un `<button>` sans type : dans un formulaire, un declencheur
|
|
1882
|
+
* sans type est un bouton d'envoi, et ouvrir des filtres soumettait le formulaire. Pose une fois,
|
|
1883
|
+
* jamais par-dessus un type explicite (meme raison que `[stMenuTrigger]`).
|
|
1884
|
+
*/
|
|
1885
|
+
export declare class StPopoverTrigger {
|
|
1886
|
+
private readonly element;
|
|
1887
|
+
readonly stPopoverTrigger: import("@angular/core").InputSignal<StPopover>;
|
|
1888
|
+
constructor();
|
|
1889
|
+
/**
|
|
1890
|
+
* Revue E12 (fidelite, MOYENNE) : sans cette garde, la fleche bas ouvrait quand meme sur un
|
|
1891
|
+
* declencheur indisponible (`aria-disabled`, ou un `<button>` sans `stButton` dont la garde de
|
|
1892
|
+
* clic n'existe pas). `[stMenuTrigger]` la porte deja (`estIndisponible`) ; meme symetrie ici.
|
|
1893
|
+
*/
|
|
1894
|
+
private estIndisponible;
|
|
1895
|
+
protected basculer(): void;
|
|
1896
|
+
/** Fleche bas : ouvre (le focus entre dans la couche), comme `[stMenuTrigger]`. */
|
|
1897
|
+
protected auClavier(evenement: KeyboardEvent): void;
|
|
1898
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StPopoverTrigger, never>;
|
|
1899
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StPopoverTrigger, "[stPopoverTrigger]", never, {
|
|
1900
|
+
"stPopoverTrigger": {
|
|
1901
|
+
"alias": "stPopoverTrigger";
|
|
1902
|
+
"required": true;
|
|
1903
|
+
"isSignal": true;
|
|
1904
|
+
};
|
|
1905
|
+
}, {}, never, never, true, never>;
|
|
1906
|
+
}
|
|
1907
|
+
/**
|
|
1908
|
+
* Le fond du bouton « Confirmer » d'une confirmation legere : JAMAIS un danger. Une action
|
|
1909
|
+
* destructrice ou irreversible passe par `StDialog.confirmer` (le dialogue, ses recopies et son
|
|
1910
|
+
* nombre), pas par une bulle qu'un clic distrait accepte.
|
|
1911
|
+
*/
|
|
1912
|
+
export type VarianteDeConfirmationLegere = Extract<VarianteDeBouton, 'primaire' | 'secondaire' | 'tonale'>;
|
|
1913
|
+
/**
|
|
1914
|
+
* La confirmation legere (lot 265) : une question posee a cote du bouton, pour une action
|
|
1915
|
+
* REVERSIBLE qu'un « Annuler » de message ephemere ne saurait defaire (retirer un filtre
|
|
1916
|
+
* enregistre, abandonner un brouillon).
|
|
1917
|
+
*
|
|
1918
|
+
* ```html
|
|
1919
|
+
* <button stButton variante="discret" [stPopconfirm]="'Retirer ce filtre ?'"
|
|
1920
|
+
* libelleConfirmer="Retirer" (confirme)="retirer()">Retirer</button>
|
|
1921
|
+
* ```
|
|
1922
|
+
*
|
|
1923
|
+
* - Un `st-popover` non modal nomme par la question ; le focus va d'abord a « Annuler » (le geste
|
|
1924
|
+
* sur est le premier), Echap annule et rend le focus au declencheur.
|
|
1925
|
+
* - Jamais de variante danger (`VarianteDeConfirmationLegere`) : le destructeur passe par le
|
|
1926
|
+
* dialogue, `StDialog.confirmer`.
|
|
1927
|
+
* - `aria-haspopup="dialog"` et `aria-expanded` sur le declencheur ; `aria-controls` des la
|
|
1928
|
+
* premiere ouverture ; la fleche bas ouvre aussi, comme `[stPopoverTrigger]`.
|
|
1929
|
+
*/
|
|
1930
|
+
export declare class StPopconfirm {
|
|
1931
|
+
private readonly element;
|
|
1932
|
+
private readonly vue;
|
|
1933
|
+
/** La question, deja traduite (« Retirer ce filtre ? ») : elle nomme la couche. */
|
|
1934
|
+
readonly stPopconfirm: import("@angular/core").InputSignal<string>;
|
|
1935
|
+
readonly precision: import("@angular/core").InputSignal<string | null>;
|
|
1936
|
+
/** Defaut : « Confirmer ». */
|
|
1937
|
+
readonly libelleConfirmer: import("@angular/core").InputSignal<string | null>;
|
|
1938
|
+
/** Defaut : « Annuler ». */
|
|
1939
|
+
readonly libelleAnnuler: import("@angular/core").InputSignal<string | null>;
|
|
1940
|
+
readonly varianteDeConfirmation: import("@angular/core").InputSignal<VarianteDeConfirmationLegere>;
|
|
1941
|
+
readonly confirme: import("@angular/core").OutputEmitterRef<void>;
|
|
1942
|
+
readonly annule: import("@angular/core").OutputEmitterRef<void>;
|
|
1943
|
+
private readonly panneau;
|
|
1944
|
+
protected readonly ouvert: import("@angular/core").Signal<boolean>;
|
|
1945
|
+
protected readonly controle: import("@angular/core").WritableSignal<string | null>;
|
|
1946
|
+
constructor();
|
|
1947
|
+
protected basculer(): void;
|
|
1948
|
+
/** Fleche bas : ouvre (le focus entre dans la couche), comme `[stPopoverTrigger]`. */
|
|
1949
|
+
protected auClavier(evenement: KeyboardEvent): void;
|
|
1950
|
+
private estIndisponible;
|
|
1951
|
+
/** Le panneau, cree a la premiere ouverture, a cote du declencheur. */
|
|
1952
|
+
private creerLePanneau;
|
|
1953
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StPopconfirm, never>;
|
|
1954
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StPopconfirm, "[stPopconfirm]", never, {
|
|
1955
|
+
"stPopconfirm": {
|
|
1956
|
+
"alias": "stPopconfirm";
|
|
1957
|
+
"required": true;
|
|
1958
|
+
"isSignal": true;
|
|
1959
|
+
};
|
|
1960
|
+
"precision": {
|
|
1961
|
+
"alias": "precision";
|
|
1962
|
+
"required": false;
|
|
1963
|
+
"isSignal": true;
|
|
1964
|
+
};
|
|
1965
|
+
"libelleConfirmer": {
|
|
1966
|
+
"alias": "libelleConfirmer";
|
|
1967
|
+
"required": false;
|
|
1968
|
+
"isSignal": true;
|
|
1969
|
+
};
|
|
1970
|
+
"libelleAnnuler": {
|
|
1971
|
+
"alias": "libelleAnnuler";
|
|
1972
|
+
"required": false;
|
|
1973
|
+
"isSignal": true;
|
|
1974
|
+
};
|
|
1975
|
+
"varianteDeConfirmation": {
|
|
1976
|
+
"alias": "varianteDeConfirmation";
|
|
1977
|
+
"required": false;
|
|
1978
|
+
"isSignal": true;
|
|
1979
|
+
};
|
|
1980
|
+
}, {
|
|
1981
|
+
"confirme": "confirme";
|
|
1982
|
+
"annule": "annule";
|
|
1983
|
+
}, never, never, true, never>;
|
|
1984
|
+
}
|
|
1985
|
+
/**
|
|
1986
|
+
* L'aide contextuelle (lot 265) : un bouton « ? » qui ouvre une couche d'explication, pour un
|
|
1987
|
+
* terme (BIC, TAEG, plafond glissant) que l'aide courte d'un champ ne suffit pas a dire.
|
|
1988
|
+
*
|
|
1989
|
+
* ```html
|
|
1990
|
+
* <st-form-field libelle="BIC">
|
|
1991
|
+
* <st-help-button stAide sujet="BIC">
|
|
1992
|
+
* Le code d'identification de la banque du beneficiaire, 8 ou 11 caracteres.
|
|
1993
|
+
* </st-help-button>
|
|
1994
|
+
* <input stInput … />
|
|
1995
|
+
* </st-form-field>
|
|
1996
|
+
* ```
|
|
1997
|
+
*
|
|
1998
|
+
* - Un bouton natif (clavier, toucher) nomme « Aide : BIC » ; `aria-expanded` et `aria-controls`
|
|
1999
|
+
* par `[stPopoverTrigger]`. Jamais une infobulle : elle ne vit ni au toucher ni sans survol, et ne
|
|
2000
|
+
* porte que du texte court.
|
|
2001
|
+
* - La couche est un `st-popover` NON MODAL, nomme par son titre, decrit par son contenu, avec un
|
|
2002
|
+
* bouton « Fermer » visible ; Echap et « Fermer » rendent le focus au bouton (WCAG 1.4.13).
|
|
2003
|
+
* - Sous la rupture `md` de la fenetre, la meme couche s'ouvre en feuille inferieure.
|
|
2004
|
+
* - Une seule aide ouverte a la fois : ouvrir la suivante emporte le focus, et la precedente se
|
|
2005
|
+
* ferme avec lui.
|
|
2006
|
+
* - Le contenu n'est PAS relie au champ par `aria-describedby` : l'aide courte reste celle du
|
|
2007
|
+
* champ ; celle-ci est demandee.
|
|
2008
|
+
*/
|
|
2009
|
+
export declare class StHelpButton {
|
|
2010
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
2011
|
+
/** Ce que l'aide explique, deja traduit : il entre dans le nom du bouton (« Aide : BIC »). */
|
|
2012
|
+
readonly sujet: import("@angular/core").InputSignal<string>;
|
|
2013
|
+
/** Le titre de la couche, qui la nomme ; defaut : le sujet. */
|
|
2014
|
+
readonly titre: import("@angular/core").InputSignal<string | null>;
|
|
2015
|
+
readonly alignement: import("@angular/core").InputSignal<AlignementDePopover>;
|
|
2016
|
+
/** Emis a chaque ouverture : l'application peut mesurer l'usage de l'aide. */
|
|
2017
|
+
readonly ouverture: import("@angular/core").OutputEmitterRef<void>;
|
|
2018
|
+
protected readonly nom: import("@angular/core").Signal<string>;
|
|
2019
|
+
protected readonly titreAffiche: import("@angular/core").Signal<string>;
|
|
2020
|
+
protected readonly idDuContenu: string;
|
|
2021
|
+
private readonly couche;
|
|
2022
|
+
constructor();
|
|
2023
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StHelpButton, never>;
|
|
2024
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StHelpButton, "st-help-button", never, {
|
|
2025
|
+
"sujet": {
|
|
2026
|
+
"alias": "sujet";
|
|
2027
|
+
"required": true;
|
|
2028
|
+
"isSignal": true;
|
|
2029
|
+
};
|
|
2030
|
+
"titre": {
|
|
2031
|
+
"alias": "titre";
|
|
2032
|
+
"required": false;
|
|
2033
|
+
"isSignal": true;
|
|
2034
|
+
};
|
|
2035
|
+
"alignement": {
|
|
2036
|
+
"alias": "alignement";
|
|
2037
|
+
"required": false;
|
|
2038
|
+
"isSignal": true;
|
|
2039
|
+
};
|
|
2040
|
+
}, {
|
|
2041
|
+
"ouverture": "ouverture";
|
|
2042
|
+
}, never, ["*"], true, never>;
|
|
2043
|
+
}
|
|
2044
|
+
/**
|
|
2045
|
+
* Voile de chargement pose SUR un conteneur (greffe 228b, planche 9 « verre depoli ») : le
|
|
2046
|
+
* contenu reste en place, attenue et intouchable, une carte dit ce qui se passe.
|
|
2047
|
+
*
|
|
2048
|
+
* ```html
|
|
2049
|
+
* <st-loading-overlay [actif]="signature.isLoading()" titre="Signature en cours" icone="cadenas" flou>
|
|
2050
|
+
* <app-solde />
|
|
2051
|
+
* <div progression>…<st-progress [valeur]="68" etiquette="Chiffrement" /></div>
|
|
2052
|
+
* <div reassurance><st-icon nom="cercle-coche" /> Execution garantie sans doublon</div>
|
|
2053
|
+
* </st-loading-overlay>
|
|
2054
|
+
* ```
|
|
2055
|
+
*
|
|
2056
|
+
* Ce qu'il tient :
|
|
2057
|
+
*
|
|
2058
|
+
* - **le contenu est `inert` et `aria-busy`** tant que le voile est pose : ni clic, ni Tab, ni
|
|
2059
|
+
* lecteur d'ecran n'y entrent (le focus est IMPOSSIBLE sous le voile, pas seulement masque) ;
|
|
2060
|
+
* - **le focus ne se perd pas** : s'il etait dans le contenu a la pose, il passe sur la carte ; a
|
|
2061
|
+
* la levee, il revient ou il etait (si l'element existe encore et que personne ne l'a deplace) ;
|
|
2062
|
+
* - **l'annonce** passe par l'indicateur (`st-spinner`, region `status` qui dit le titre apres
|
|
2063
|
+
* `rythme.delai.annonce`) : la carte ne double pas l'annonce ;
|
|
2064
|
+
* - **le flou est opt-in** (`flou`, D25) et retombe sur un voile OPAQUE quand il ne peut pas
|
|
2065
|
+
* tenir : navigateur sans `backdrop-filter`, `prefers-reduced-transparency`, contraste force.
|
|
2066
|
+
* Jamais de filtre en transition : seule l'opacite du voile arrive en fondu.
|
|
2067
|
+
*
|
|
2068
|
+
* ⚠️ Rien de sensible dessous : un flou de 12 px se lit encore en partie (montants, noms). Un
|
|
2069
|
+
* contenu qui ne doit pas etre vu pendant l'attente ne se voile pas, il se retire.
|
|
2070
|
+
*
|
|
2071
|
+
* L'hote est le conteneur (`position: relative`) : sa mise en page (carte, colonne, hauteur)
|
|
2072
|
+
* appartient a l'appelant, qui la pose par une classe.
|
|
2073
|
+
*/
|
|
2074
|
+
export declare class StLoadingOverlay {
|
|
2075
|
+
private readonly document;
|
|
2076
|
+
private readonly injecteur;
|
|
2077
|
+
private readonly identifiants;
|
|
2078
|
+
private readonly hote;
|
|
2079
|
+
/**
|
|
2080
|
+
* Identifiants du titre et de la precision : la carte (`role="group"`) les cite en
|
|
2081
|
+
* `aria-labelledby`/`aria-describedby` pour porter un nom court et unique. Sans eux, la carte
|
|
2082
|
+
* focalisee (generic, tabindex=-1) tirait son nom de tout son contenu — titre, progression et
|
|
2083
|
+
* reassurance lus en double avec l'annonce polie du `st-spinner`.
|
|
2084
|
+
*/
|
|
2085
|
+
protected readonly idTitre: string;
|
|
2086
|
+
protected readonly idPrecision: string;
|
|
2087
|
+
/** Pose le voile. */
|
|
2088
|
+
readonly actif: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
2089
|
+
/** Ce qui se passe, en une phrase : titre de la carte et annonce de l'indicateur. */
|
|
2090
|
+
readonly titre: import("@angular/core").InputSignal<string>;
|
|
2091
|
+
/** Precision sous le titre (etape, duree attendue). */
|
|
2092
|
+
readonly sousTitre: import("@angular/core").InputSignal<string | null>;
|
|
2093
|
+
/** Glyphe immobile au centre de l'indicateur (le cadenas d'une operation scellee). */
|
|
2094
|
+
readonly icone: import("@angular/core").InputSignal<Icone | null>;
|
|
2095
|
+
/**
|
|
2096
|
+
* Floute le contenu sous le voile (verre depoli, D25). Opt-in : le voile simple suffit
|
|
2097
|
+
* partout ailleurs, et le flou coute a chaque image composee.
|
|
2098
|
+
*/
|
|
2099
|
+
readonly flou: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
2100
|
+
private readonly contenu;
|
|
2101
|
+
private readonly carte;
|
|
2102
|
+
/** L'element qui avait le focus dans le contenu a la pose du voile. */
|
|
2103
|
+
private focusAvantLeVoile;
|
|
2104
|
+
constructor();
|
|
2105
|
+
/**
|
|
2106
|
+
* ⚠️ Lu AVANT le rendu qui pose `inert` : apres, le navigateur a deja retire le focus du
|
|
2107
|
+
* contenu, et on ne saurait plus d'ou il venait.
|
|
2108
|
+
*/
|
|
2109
|
+
private aLaPose;
|
|
2110
|
+
private aLaLevee;
|
|
2111
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StLoadingOverlay, never>;
|
|
2112
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StLoadingOverlay, "st-loading-overlay", never, {
|
|
2113
|
+
"actif": {
|
|
2114
|
+
"alias": "actif";
|
|
2115
|
+
"required": false;
|
|
2116
|
+
"isSignal": true;
|
|
2117
|
+
};
|
|
2118
|
+
"titre": {
|
|
2119
|
+
"alias": "titre";
|
|
2120
|
+
"required": true;
|
|
2121
|
+
"isSignal": true;
|
|
2122
|
+
};
|
|
2123
|
+
"sousTitre": {
|
|
2124
|
+
"alias": "sousTitre";
|
|
2125
|
+
"required": false;
|
|
2126
|
+
"isSignal": true;
|
|
2127
|
+
};
|
|
2128
|
+
"icone": {
|
|
2129
|
+
"alias": "icone";
|
|
2130
|
+
"required": false;
|
|
2131
|
+
"isSignal": true;
|
|
2132
|
+
};
|
|
2133
|
+
"flou": {
|
|
2134
|
+
"alias": "flou";
|
|
2135
|
+
"required": false;
|
|
2136
|
+
"isSignal": true;
|
|
2137
|
+
};
|
|
2138
|
+
}, {}, never, ["*", "[progression]", "[reassurance]"], true, never>;
|
|
2139
|
+
}
|
|
2140
|
+
export { DIALOG_DATA as DONNEES_DE_DIALOGUE };
|