@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,17 +1,24 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
|
|
1
|
+
import { AnnonceLocale, CatalogueDuPointDEntree, Icone, LibellesUi, NiveauDeTitre, NomDIcone } from "@starterlib/ui";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import { InjectionToken, Provider, Signal, TemplateRef } from "@angular/core";
|
|
4
|
+
import { DateIso, EtatDeDocument, Ton, sansCommandesDeDirection } from "@starterlib/util";
|
|
6
5
|
/**
|
|
7
6
|
* `pages` : page precedente et suivante, pour un tableau.
|
|
8
7
|
* `suite` : « Afficher plus », pour une liste qui s'allonge.
|
|
9
8
|
*/
|
|
10
|
-
type ModeDePagination = 'pages' | 'suite';
|
|
9
|
+
export type ModeDePagination = 'pages' | 'suite';
|
|
11
10
|
/** Ce qui peut recevoir le focus apres un changement de page. */
|
|
12
|
-
interface Focalisable {
|
|
13
|
-
|
|
11
|
+
export interface Focalisable {
|
|
12
|
+
focus(options?: FocusOptions): void;
|
|
13
|
+
/**
|
|
14
|
+
* Facultatif : la cible dit la page AVEC ce qu'elle montre, en une annonce (« Page 2 : 20 lignes
|
|
15
|
+
* affichees » de `st-data-table`) ; la pagination ne la dit plus elle-meme (audit UI du
|
|
16
|
+
* 2026-09-27, D-17).
|
|
17
|
+
*/
|
|
18
|
+
annoncerLaPage?(page: string): void;
|
|
14
19
|
}
|
|
20
|
+
/** Le bouton dont le clic a lance le chargement en cours. */
|
|
21
|
+
type SensDePage = 'precedente' | 'suivante';
|
|
15
22
|
/**
|
|
16
23
|
* Pagination d'une liste par curseur.
|
|
17
24
|
*
|
|
@@ -29,55 +36,158 @@ interface Focalisable {
|
|
|
29
36
|
* ```
|
|
30
37
|
*
|
|
31
38
|
* ⚠️ **Ni total, ni numeros cliquables** : le backend ne compte pas et ne va que
|
|
32
|
-
* vers l'avant (audit de la vague 4, V4-2).
|
|
33
|
-
* serait invente.
|
|
39
|
+
* vers l'avant (audit de la vague 4, V4-2). La page courante se montre dans son carre
|
|
40
|
+
* (planche 4) et se lit « Page 3 » ; « page 3 sur 12 » serait invente (EA-17).
|
|
34
41
|
*
|
|
35
|
-
* ⚠️ **Boutons indisponibles, jamais desactives** : sur la derniere page, «
|
|
36
|
-
*
|
|
37
|
-
*
|
|
42
|
+
* ⚠️ **Boutons indisponibles, jamais desactives** : sur la derniere page, « Suivant »
|
|
43
|
+
* garde le focus qu'il avait. Desactive, il le perdrait, et le lecteur d'ecran
|
|
44
|
+
* retomberait sur le debut du document.
|
|
38
45
|
*
|
|
39
46
|
* ⚠️ **Apres un changement de page, le focus va a la `cible`** — la legende du
|
|
40
47
|
* tableau — et « Page 2 » s'annonce (UX-13). Sans cela, la personne au clavier
|
|
41
|
-
* reste en bas, sur «
|
|
42
|
-
*
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
48
|
+
* reste en bas, sur « Suivant », sans savoir que le contenu au-dessus a change. Une cible qui
|
|
49
|
+
* sait dire la page (`annoncerLaPage`, `st-data-table`) la dit a la fin du chargement AVEC ses
|
|
50
|
+
* lignes : « Page 2 : 20 lignes affichees », une voix pour un geste (audit UI du 2026-09-27, D-17).
|
|
51
|
+
*
|
|
52
|
+
* ⚠️ **Le bouton clique porte le chargement** (D-12) : « Precedent » tourne quand c'est lui qui
|
|
53
|
+
* l'a lance, et l'autre bouton attend, indisponible. Un rechargement venu d'ailleurs (un filtre,
|
|
54
|
+
* un tri) ne fait tourner aucun des deux.
|
|
55
|
+
*
|
|
56
|
+
* ⚠️ **Rien a montrer, aucun repere** : en mode `suite`, sans suite ni choix de taille, l'hote
|
|
57
|
+
* est `hidden` — un repere de navigation vide s'enumere et ne mene a rien (A1162). Apres une
|
|
58
|
+
* page au moins, « Fin de la liste. » le remplace.
|
|
59
|
+
*/
|
|
60
|
+
export declare class StPagination {
|
|
61
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
62
|
+
private readonly locale;
|
|
63
|
+
private readonly injecteur;
|
|
64
|
+
readonly mode: import("@angular/core").InputSignal<ModeDePagination>;
|
|
65
|
+
/** A partir de 1. */
|
|
66
|
+
readonly numero: import("@angular/core").InputSignal<number>;
|
|
67
|
+
readonly precedenteDisponible: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
68
|
+
readonly suivanteDisponible: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
69
|
+
readonly chargement: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
70
|
+
/** Nom de la navigation, quand une page en porte plusieurs. */
|
|
71
|
+
readonly etiquette: import("@angular/core").InputSignal<string | null>;
|
|
72
|
+
/** Tailles proposees ; vide, pas de choix. Plafonnees par `TAILLE_DE_PAGE_MAXIMALE`. */
|
|
73
|
+
readonly taillesDePage: import("@angular/core").InputSignal<readonly number[]>;
|
|
74
|
+
/** Bornee de 1 a `TAILLE_DE_PAGE_MAXIMALE` : une taille hors bornes est ramenee et remontee. */
|
|
75
|
+
readonly taille: import("@angular/core").ModelSignal<number>;
|
|
76
|
+
/**
|
|
77
|
+
* Mode `suite` : nombre d'elements que la derniere suite a ajoutes, annonce a la fin du
|
|
78
|
+
* chargement (« 20 elements de plus »). Sans effet quand la `cible` est une `st-list` : elle
|
|
79
|
+
* compte et annonce elle-meme ce qui est arrive (une seule annonce, jamais deux).
|
|
80
|
+
*/
|
|
81
|
+
readonly nombreAjoute: import("@angular/core").InputSignal<number | null>;
|
|
82
|
+
/** Recoit le focus apres un changement de page. */
|
|
83
|
+
readonly cible: import("@angular/core").InputSignal<Focalisable | (() => Focalisable | null) | null>;
|
|
84
|
+
readonly precedente: import("@angular/core").OutputEmitterRef<void>;
|
|
85
|
+
readonly suivante: import("@angular/core").OutputEmitterRef<void>;
|
|
86
|
+
protected readonly annonce: AnnonceLocale;
|
|
87
|
+
/**
|
|
88
|
+
* Le sens du dernier clic, le temps de SON chargement : c'est le bouton clique qui tourne, et non
|
|
89
|
+
* toujours « Suivant » (audit UI du 2026-09-27, D-12).
|
|
90
|
+
*/
|
|
91
|
+
private readonly sensDemande;
|
|
92
|
+
/** Le bouton qui charge ; `null` : aucun chargement, ou un rechargement venu d'ailleurs. */
|
|
93
|
+
protected readonly enChargement: import("@angular/core").Signal<SensDePage | null>;
|
|
94
|
+
/** Chaque bouton attend, indisponible, sans sa page ou pendant le chargement d'un autre. */
|
|
95
|
+
protected readonly precedenteBloquee: import("@angular/core").Signal<boolean>;
|
|
96
|
+
protected readonly suivanteBloquee: import("@angular/core").Signal<boolean>;
|
|
97
|
+
/** Le numero et les tailles, ecrits dans la locale du socle (audit UI du 2026-09-27, D-27). */
|
|
98
|
+
protected readonly nombres: import("@angular/core").Signal<Intl.NumberFormat>;
|
|
99
|
+
protected readonly tailleBornee: import("@angular/core").Signal<number>;
|
|
100
|
+
/** Les tailles proposees, et la taille courante a sa place si l'appelant l'a omise. */
|
|
101
|
+
protected readonly tailles: import("@angular/core").Signal<number[]>;
|
|
102
|
+
protected readonly etiquetteLue: import("@angular/core").Signal<string>;
|
|
103
|
+
protected readonly finDeListe: import("@angular/core").Signal<boolean>;
|
|
104
|
+
protected readonly vide: import("@angular/core").Signal<boolean>;
|
|
105
|
+
constructor();
|
|
106
|
+
/** Le bouton clique porte le chargement qu'il demande (D-12). */
|
|
107
|
+
protected demander(sens: SensDePage): void;
|
|
108
|
+
protected surTaille(evenement: Event): void;
|
|
109
|
+
private cibleResolue;
|
|
110
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StPagination, never>;
|
|
111
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StPagination, "st-pagination", never, {
|
|
112
|
+
"mode": {
|
|
113
|
+
"alias": "mode";
|
|
114
|
+
"required": false;
|
|
115
|
+
"isSignal": true;
|
|
116
|
+
};
|
|
117
|
+
"numero": {
|
|
118
|
+
"alias": "numero";
|
|
119
|
+
"required": false;
|
|
120
|
+
"isSignal": true;
|
|
121
|
+
};
|
|
122
|
+
"precedenteDisponible": {
|
|
123
|
+
"alias": "precedenteDisponible";
|
|
124
|
+
"required": false;
|
|
125
|
+
"isSignal": true;
|
|
126
|
+
};
|
|
127
|
+
"suivanteDisponible": {
|
|
128
|
+
"alias": "suivanteDisponible";
|
|
129
|
+
"required": false;
|
|
130
|
+
"isSignal": true;
|
|
131
|
+
};
|
|
132
|
+
"chargement": {
|
|
133
|
+
"alias": "chargement";
|
|
134
|
+
"required": false;
|
|
135
|
+
"isSignal": true;
|
|
136
|
+
};
|
|
137
|
+
"etiquette": {
|
|
138
|
+
"alias": "etiquette";
|
|
139
|
+
"required": false;
|
|
140
|
+
"isSignal": true;
|
|
141
|
+
};
|
|
142
|
+
"taillesDePage": {
|
|
143
|
+
"alias": "taillesDePage";
|
|
144
|
+
"required": false;
|
|
145
|
+
"isSignal": true;
|
|
146
|
+
};
|
|
147
|
+
"taille": {
|
|
148
|
+
"alias": "taille";
|
|
149
|
+
"required": false;
|
|
150
|
+
"isSignal": true;
|
|
151
|
+
};
|
|
152
|
+
"nombreAjoute": {
|
|
153
|
+
"alias": "nombreAjoute";
|
|
154
|
+
"required": false;
|
|
155
|
+
"isSignal": true;
|
|
156
|
+
};
|
|
157
|
+
"cible": {
|
|
158
|
+
"alias": "cible";
|
|
159
|
+
"required": false;
|
|
160
|
+
"isSignal": true;
|
|
161
|
+
};
|
|
162
|
+
}, {
|
|
163
|
+
"taille": "tailleChange";
|
|
164
|
+
"precedente": "precedente";
|
|
165
|
+
"suivante": "suivante";
|
|
166
|
+
}, never, never, true, never>;
|
|
69
167
|
}
|
|
70
|
-
|
|
168
|
+
/** Une ligne rendue : l'element, sa cle de suivi UNIQUE, et son gabarit riche s'il en a un. */
|
|
169
|
+
interface LigneDeDescription<E extends ElementDeDescription> {
|
|
170
|
+
readonly element: E;
|
|
171
|
+
readonly cle: string;
|
|
172
|
+
readonly gabarit: TemplateRef<ContexteDeDescription> | null;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Relie chaque element a son gabarit par sa cle (`cle`, a defaut le terme).
|
|
176
|
+
*
|
|
177
|
+
* Deux termes identiques sans `cle` : le suivi par cle et le gabarit riche se confondraient. Le
|
|
178
|
+
* second est rendu, sous une cle rendue unique, et signale en developpement.
|
|
179
|
+
*/
|
|
180
|
+
declare function lignesDeDescription<E extends ElementDeDescription>(elements: readonly E[], gabarits: ReadonlyMap<string, TemplateRef<ContexteDeDescription>>, composant: string): LigneDeDescription<E>[];
|
|
71
181
|
/** Une paire terme et valeur. `description` nulle : « Non renseigne ». */
|
|
72
|
-
interface ElementDeDescription {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
182
|
+
export interface ElementDeDescription {
|
|
183
|
+
/** Relie l'element a un gabarit `stDescription`. Par defaut : le terme. */
|
|
184
|
+
readonly cle?: string;
|
|
185
|
+
readonly terme: string;
|
|
186
|
+
readonly description: string | null;
|
|
77
187
|
}
|
|
78
188
|
/** Contexte d'un gabarit de description. */
|
|
79
|
-
interface ContexteDeDescription {
|
|
80
|
-
|
|
189
|
+
export interface ContexteDeDescription {
|
|
190
|
+
readonly $implicit: ElementDeDescription;
|
|
81
191
|
}
|
|
82
192
|
/**
|
|
83
193
|
* Valeur riche d'un element : montant, date, valeur masquee.
|
|
@@ -88,12 +198,18 @@ interface ContexteDeDescription {
|
|
|
88
198
|
* </ng-template>
|
|
89
199
|
* ```
|
|
90
200
|
*/
|
|
91
|
-
declare class StDescription {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
201
|
+
export declare class StDescription {
|
|
202
|
+
readonly cle: import("@angular/core").InputSignal<string>;
|
|
203
|
+
readonly gabarit: TemplateRef<ContexteDeDescription>;
|
|
204
|
+
static ngTemplateContextGuard(_directive: StDescription, _contexte: unknown): _contexte is ContexteDeDescription;
|
|
205
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StDescription, never>;
|
|
206
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StDescription, "ng-template[stDescription]", never, {
|
|
207
|
+
"cle": {
|
|
208
|
+
"alias": "stDescription";
|
|
209
|
+
"required": true;
|
|
210
|
+
"isSignal": true;
|
|
211
|
+
};
|
|
212
|
+
}, {}, never, never, true, never>;
|
|
97
213
|
}
|
|
98
214
|
/**
|
|
99
215
|
* Liste de descriptions : les proprietes d'un objet, sur une page de detail.
|
|
@@ -115,26 +231,37 @@ declare class StDescription {
|
|
|
115
231
|
* ⚠️ **Une valeur absente se dit** : « — » a l'ecran, « Non renseigne » au lecteur
|
|
116
232
|
* d'ecran. Une cellule vide ne distingue pas « aucun » de « pas encore charge ».
|
|
117
233
|
*
|
|
118
|
-
* En colonnes quand la place le permet
|
|
119
|
-
* du CONTENEUR, pas de l'ecran — la meme
|
|
120
|
-
* aussi sur un grand ecran (UX-18).
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
234
|
+
* En colonnes quand la place le permet (30 rem de conteneur : terme sur 3 colonnes de 12,
|
|
235
|
+
* planche 4), empile en dessous : la largeur est celle du CONTENEUR, pas de l'ecran — la meme
|
|
236
|
+
* liste dans une carte etroite s'empile aussi sur un grand ecran (UX-18).
|
|
237
|
+
*
|
|
238
|
+
* `track` par la cle STABLE de l'element (`cle`, a defaut le terme) : deux termes identiques
|
|
239
|
+
* exigent une `cle` (avertissement de developpement).
|
|
240
|
+
*/
|
|
241
|
+
export declare class StDescriptionList {
|
|
242
|
+
/**
|
|
243
|
+
* Un texte de donnees : sans commande de direction, et isole par son element (`dir="auto"` ou
|
|
244
|
+
* `<bdi>`), il ne reordonne ni lui-meme ni ce qui l'entoure (audit du 2026-09-26, S-1 ; audit
|
|
245
|
+
* etendu du 2026-09-27, A-2).
|
|
246
|
+
*/
|
|
247
|
+
protected readonly affichable: typeof sansCommandesDeDirection;
|
|
248
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
249
|
+
readonly elements: import("@angular/core").InputSignal<readonly ElementDeDescription[]>;
|
|
250
|
+
private readonly gabarits;
|
|
251
|
+
protected readonly lignes: import("@angular/core").Signal<LigneDeDescription<ElementDeDescription>[]>;
|
|
252
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StDescriptionList, never>;
|
|
253
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StDescriptionList, "st-description-list", never, {
|
|
254
|
+
"elements": {
|
|
255
|
+
"alias": "elements";
|
|
256
|
+
"required": true;
|
|
257
|
+
"isSignal": true;
|
|
258
|
+
};
|
|
259
|
+
}, {}, ["gabarits"], never, true, never>;
|
|
132
260
|
}
|
|
133
|
-
|
|
134
261
|
/** Contexte d'un gabarit d'element de liste. */
|
|
135
|
-
interface ContexteDElementDeListe<T> {
|
|
136
|
-
|
|
137
|
-
|
|
262
|
+
export interface ContexteDElementDeListe<T> {
|
|
263
|
+
readonly $implicit: T;
|
|
264
|
+
readonly indice: number;
|
|
138
265
|
}
|
|
139
266
|
/**
|
|
140
267
|
* Rendu d'un element, type par `[stElementDeListeDe]` :
|
|
@@ -145,13 +272,44 @@ interface ContexteDElementDeListe<T> {
|
|
|
145
272
|
* </ng-template>
|
|
146
273
|
* ```
|
|
147
274
|
*/
|
|
148
|
-
declare class StElementDeListe<T> {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
275
|
+
export declare class StElementDeListe<T> {
|
|
276
|
+
/** Sert seulement au typage du contexte ; nom de l'attribut, d'ou l'absence d'alias. */
|
|
277
|
+
readonly stElementDeListeDe: import("@angular/core").InputSignal<readonly T[] | null | undefined>;
|
|
278
|
+
readonly gabarit: TemplateRef<ContexteDElementDeListe<T>>;
|
|
279
|
+
static ngTemplateContextGuard<T>(_directive: StElementDeListe<T>, _contexte: unknown): _contexte is ContexteDElementDeListe<T>;
|
|
280
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StElementDeListe<any>, never>;
|
|
281
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StElementDeListe<any>, "ng-template[stElementDeListe]", never, {
|
|
282
|
+
"stElementDeListeDe": {
|
|
283
|
+
"alias": "stElementDeListeDe";
|
|
284
|
+
"required": false;
|
|
285
|
+
"isSignal": true;
|
|
286
|
+
};
|
|
287
|
+
}, {}, never, never, true, never>;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Etat vide riche (icone, action) : remplace le texte de `texteVide`.
|
|
291
|
+
*
|
|
292
|
+
* ```html
|
|
293
|
+
* <ng-template stListeVide><st-empty titre="Aucune notification." icone="boite-de-reception" /></ng-template>
|
|
294
|
+
* ```
|
|
295
|
+
*/
|
|
296
|
+
export declare class StListeVide {
|
|
297
|
+
readonly gabarit: TemplateRef<unknown>;
|
|
298
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StListeVide, never>;
|
|
299
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StListeVide, "ng-template[stListeVide]", never, {}, {}, never, never, true, never>;
|
|
300
|
+
}
|
|
301
|
+
/** Un element rendu : sa valeur, son rang et son identifiant (la valeur de `cle`). */
|
|
302
|
+
interface LigneDeListe<T> {
|
|
303
|
+
readonly valeur: T;
|
|
304
|
+
readonly indice: number;
|
|
305
|
+
readonly identifiant: string;
|
|
306
|
+
}
|
|
307
|
+
/** Un groupe d'elements qui se suivent (`groupePar`) : son titre, et ses elements dans l'ordre. */
|
|
308
|
+
interface GroupeDeListe<T> {
|
|
309
|
+
readonly cle: string;
|
|
310
|
+
readonly identifiant: string;
|
|
311
|
+
readonly libelle: string;
|
|
312
|
+
readonly lignes: readonly LigneDeListe<T>[];
|
|
155
313
|
}
|
|
156
314
|
/**
|
|
157
315
|
* Liste d'objets : expeditions, notifications, documents. La forme mobile d'un
|
|
@@ -168,38 +326,251 @@ declare class StElementDeListe<T> {
|
|
|
168
326
|
* nom, s'ouvre dans un onglet, et laisse les autres boutons de l'element
|
|
169
327
|
* atteignables.
|
|
170
328
|
*
|
|
171
|
-
* ⚠️ **`focus()` va au premier element AJOUTE** depuis le dernier affichage
|
|
172
|
-
* « Afficher plus », la lecture reprend la ou
|
|
173
|
-
* tete. Apres un filtre, la liste raccourcit, et le focus va
|
|
329
|
+
* ⚠️ **`focus()` va au premier element AJOUTE** depuis le dernier affichage, et dit combien
|
|
330
|
+
* sont arrives (« 20 elements ajoutes ») : apres « Afficher plus », la lecture reprend la ou
|
|
331
|
+
* la liste s'est allongee, et non en tete. Apres un filtre, la liste raccourcit, et le focus va
|
|
332
|
+
* au premier element. Rien d'arrive depuis le dernier `focus()` (derniere suite vide) : le dernier
|
|
333
|
+
* element, au plus pres du bouton quitte, et non la tete de liste. L'anneau suit le clavier (`:focus-visible`) : apres un clic souris sur
|
|
334
|
+
* « Afficher plus », il ne s'allume pas.
|
|
335
|
+
*
|
|
336
|
+
* ⚠️ **Un objet se rend par un gabarit `stElementDeListe`.** Sans gabarit, la valeur de `cle`
|
|
337
|
+
* s'affiche et une erreur de developpement le signale : l'interpolation d'un objet rendait
|
|
338
|
+
* « [object Object] » (A1167).
|
|
339
|
+
*
|
|
340
|
+
* `groupePar` range les elements sous des titres (« Aujourd'hui », « Hier », lot 258) : une liste
|
|
341
|
+
* par groupe, nommee par son titre, dans la liste ; les elements d'un groupe se SUIVENT (l'application
|
|
342
|
+
* trie), et un titre qui revient plus loin ouvre un nouveau groupe. `focus()` suit l'ordre des
|
|
343
|
+
* elements a travers les groupes.
|
|
344
|
+
*
|
|
345
|
+
* Lignes de la densite du tableau (D29 : 52 / 44 / 36, texte 16 / 14 / 12) et memes
|
|
346
|
+
* capillaires ; `cartes` pose les elements en cartes espacees (planche 10, D51).
|
|
174
347
|
*
|
|
175
348
|
* `track` par la cle : un rafraichissement garde le focus sur le bon element.
|
|
176
349
|
*/
|
|
177
|
-
declare class StList<T> {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
350
|
+
export declare class StList<T> {
|
|
351
|
+
private readonly element;
|
|
352
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
353
|
+
readonly elements: import("@angular/core").InputSignal<readonly T[]>;
|
|
354
|
+
/** Propriete qui identifie un element. */
|
|
355
|
+
readonly cle: import("@angular/core").InputSignal<keyof T & string>;
|
|
356
|
+
/** Nom de la liste, lu a l'entree. */
|
|
357
|
+
readonly etiquette: import("@angular/core").InputSignal<string | null>;
|
|
358
|
+
/** `ol` quand l'ordre a un sens : etapes, classement. */
|
|
359
|
+
readonly ordonnee: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
360
|
+
/** Contenu en cours de remplacement : `aria-busy`. Sans element, un squelette. */
|
|
361
|
+
readonly chargement: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
362
|
+
/** Nombre d'elements du squelette du premier chargement. */
|
|
363
|
+
readonly lignesAttendues: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
364
|
+
/** Texte de la liste vide. Par defaut : « Aucun element. » ; `stListeVide` le remplace. */
|
|
365
|
+
readonly texteVide: import("@angular/core").InputSignal<string | null>;
|
|
366
|
+
/** Elements en cartes espacees, sans capillaires (planche 10). */
|
|
367
|
+
readonly cartes: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
368
|
+
/** Le titre du groupe d'un element (« Aujourd'hui ») ; `null` : aucun groupe. */
|
|
369
|
+
readonly groupePar: import("@angular/core").InputSignal<((element: T) => string) | null>;
|
|
370
|
+
protected readonly gabarit: import("@angular/core").Signal<StElementDeListe<any> | undefined>;
|
|
371
|
+
protected readonly gabaritVide: import("@angular/core").Signal<StListeVide | undefined>;
|
|
372
|
+
protected readonly annonce: AnnonceLocale;
|
|
373
|
+
private readonly identifiantDeListe;
|
|
374
|
+
/** Indice vise par le prochain `focus()` ; `null` : rien n'a change depuis le precedent. */
|
|
375
|
+
private indiceDuPremierAjout;
|
|
376
|
+
private nombreAjoute;
|
|
377
|
+
private repliSignale;
|
|
378
|
+
protected readonly lignes: import("@angular/core").Signal<readonly LigneDeListe<T>[]>;
|
|
379
|
+
/**
|
|
380
|
+
* Les groupes, par suite d'elements de meme titre ; `null` sans `groupePar`. Le titre est un texte
|
|
381
|
+
* de l'application : sans commande de direction, et isole par le gabarit.
|
|
382
|
+
*/
|
|
383
|
+
protected readonly groupes: import("@angular/core").Signal<readonly GroupeDeListe<T>[] | null>;
|
|
384
|
+
protected readonly squelette: import("@angular/core").Signal<boolean>;
|
|
385
|
+
protected readonly vide: import("@angular/core").Signal<boolean>;
|
|
386
|
+
protected readonly texteVideLu: import("@angular/core").Signal<string>;
|
|
387
|
+
constructor();
|
|
388
|
+
/**
|
|
389
|
+
* Focus sur le premier element ajoute, sur le premier apres un remplacement, sur le dernier si
|
|
390
|
+
* rien n'a change depuis le precedent appel ; un ajout s'annonce.
|
|
391
|
+
*/
|
|
392
|
+
focus(options?: FocusOptions): void;
|
|
393
|
+
/**
|
|
394
|
+
* Repli sans gabarit : lisible, et signale une fois en developpement. Une donnee : sans commande
|
|
395
|
+
* de direction, et isolee par le gabarit (`<bdi>`, audit UI du 2026-09-27, D-5).
|
|
396
|
+
*/
|
|
397
|
+
protected texteDe(valeur: T): string;
|
|
398
|
+
private texteBrutDe;
|
|
399
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StList<any>, never>;
|
|
400
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StList<any>, "st-list", never, {
|
|
401
|
+
"elements": {
|
|
402
|
+
"alias": "elements";
|
|
403
|
+
"required": true;
|
|
404
|
+
"isSignal": true;
|
|
405
|
+
};
|
|
406
|
+
"cle": {
|
|
407
|
+
"alias": "cle";
|
|
408
|
+
"required": true;
|
|
409
|
+
"isSignal": true;
|
|
410
|
+
};
|
|
411
|
+
"etiquette": {
|
|
412
|
+
"alias": "etiquette";
|
|
413
|
+
"required": false;
|
|
414
|
+
"isSignal": true;
|
|
415
|
+
};
|
|
416
|
+
"ordonnee": {
|
|
417
|
+
"alias": "ordonnee";
|
|
418
|
+
"required": false;
|
|
419
|
+
"isSignal": true;
|
|
420
|
+
};
|
|
421
|
+
"chargement": {
|
|
422
|
+
"alias": "chargement";
|
|
423
|
+
"required": false;
|
|
424
|
+
"isSignal": true;
|
|
425
|
+
};
|
|
426
|
+
"lignesAttendues": {
|
|
427
|
+
"alias": "lignesAttendues";
|
|
428
|
+
"required": false;
|
|
429
|
+
"isSignal": true;
|
|
430
|
+
};
|
|
431
|
+
"texteVide": {
|
|
432
|
+
"alias": "texteVide";
|
|
433
|
+
"required": false;
|
|
434
|
+
"isSignal": true;
|
|
435
|
+
};
|
|
436
|
+
"cartes": {
|
|
437
|
+
"alias": "cartes";
|
|
438
|
+
"required": false;
|
|
439
|
+
"isSignal": true;
|
|
440
|
+
};
|
|
441
|
+
"groupePar": {
|
|
442
|
+
"alias": "groupePar";
|
|
443
|
+
"required": false;
|
|
444
|
+
"isSignal": true;
|
|
445
|
+
};
|
|
446
|
+
}, {}, ["gabarit", "gabaritVide"], never, true, never>;
|
|
200
447
|
}
|
|
201
|
-
|
|
202
|
-
|
|
448
|
+
/**
|
|
449
|
+
* Anatomie d'un element de liste : `[stAvant]` (avatar, tuile d'icone), le titre et sa
|
|
450
|
+
* precision, ce qui les suit (pastille de statut), puis `[stApres]` (montant) au bord de fin, et
|
|
451
|
+
* `[stActions]` hors de tout lien.
|
|
452
|
+
*
|
|
453
|
+
* ```html
|
|
454
|
+
* <st-list-item carte chevron titre="Banque Epsilon SA" meta="28.09.2026 · RTGS" [lien]="['/ordres', 12]">
|
|
455
|
+
* <st-avatar stAvant nom="Banque Epsilon SA" taille="lg" ton="information" />
|
|
456
|
+
* <st-tag libelle="En attente 2FA" ton="information" />
|
|
457
|
+
* <span stApres>…</span>
|
|
458
|
+
* </st-list-item>
|
|
459
|
+
* ```
|
|
460
|
+
*
|
|
461
|
+
* ⚠️ **Jamais tronque** (H10, EA-25) : titre et precision passent a la ligne. Un nom de
|
|
462
|
+
* contrepartie coupe (« Banque Eps… ») ne se distingue plus de son voisin.
|
|
463
|
+
*
|
|
464
|
+
* ⚠️ **Un seul lien par ligne** (UX-3, lot 258) : `lien` fait de la ligne un lien du routeur qui
|
|
465
|
+
* enveloppe titre, precision, suite et fin (son nom les dit tous, dans l'ordre), et dont la zone
|
|
466
|
+
* couvre tout l'element ; la case et `[stActions]` restent HORS du lien, au-dessus de sa zone. Rien
|
|
467
|
+
* d'interactif dans ce qu'il enveloppe. Sans `lien`, `[stTitre]` remplace le titre texte par le
|
|
468
|
+
* lien de l'application. Le chevron ne fait que le dire, il n'est pas une commande.
|
|
469
|
+
*
|
|
470
|
+
* ⚠️ **Non lu** (`nonLu`) : un point au debut de la ligne ET un mot masque avant le titre (« Non
|
|
471
|
+
* lu »), jamais la seule couleur ; sous contraste force, le point prend `Highlight`.
|
|
472
|
+
*
|
|
473
|
+
* `selectionnable` pose une case native avant la ligne, nommee « Selectionner <titre> »
|
|
474
|
+
* (`selectionne`, modele) ; `carte` : la liste en cartes de la planche 10 (D51), fond
|
|
475
|
+
* `surfaceConteneurBas`, 16 px ; `choisi` : le marqueur de 3 px de l'element ouvert a cote
|
|
476
|
+
* (`aria-current`). Un element mesure 44 px au moins (cible au doigt).
|
|
477
|
+
*/
|
|
478
|
+
export declare class StListItem {
|
|
479
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
480
|
+
private readonly catalogue;
|
|
481
|
+
/** Titre texte ; `[stTitre]` projete le remplace (un lien). */
|
|
482
|
+
readonly titre: import("@angular/core").InputSignal<string | null>;
|
|
483
|
+
/** Precision sous le titre : date, reference, canal. */
|
|
484
|
+
readonly meta: import("@angular/core").InputSignal<string | null>;
|
|
485
|
+
readonly carte: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
486
|
+
/** L'element ouvert a cote de la liste (maitre et detail). */
|
|
487
|
+
readonly choisi: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
488
|
+
/** Chevron de fin : l'element mene a son detail (par son lien). */
|
|
489
|
+
readonly chevron: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
490
|
+
/** La route du detail : toute la ligne devient UN lien (hors case et `[stActions]`). */
|
|
491
|
+
readonly lien: import("@angular/core").InputSignal<string | readonly unknown[] | null>;
|
|
492
|
+
/** Un element non lu : un point et un mot masque, avant le titre. */
|
|
493
|
+
readonly nonLu: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
494
|
+
/** Une case avant la ligne, nommee par le titre (« Selectionner <titre> »). */
|
|
495
|
+
readonly selectionnable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
496
|
+
readonly selectionne: import("@angular/core").ModelSignal<boolean>;
|
|
497
|
+
/**
|
|
498
|
+
* Titre et precision sont des donnees (un nom de contrepartie, une reference) : sans commande de
|
|
499
|
+
* direction, et isoles (`<bdi>`, `dir="auto"`), ils ne reordonnent ni eux-memes ni la ligne
|
|
500
|
+
* (audit UI du 2026-09-27, D-5).
|
|
501
|
+
*/
|
|
502
|
+
protected readonly titreAffiche: import("@angular/core").Signal<string>;
|
|
503
|
+
protected readonly metaAffichee: import("@angular/core").Signal<string>;
|
|
504
|
+
/** Le mot masque d'un element non lu, et la langue de son repli (D-29). */
|
|
505
|
+
protected readonly motNonLu: import("@angular/core").Signal<string>;
|
|
506
|
+
protected readonly langue: import("@angular/core").Signal<string | null>;
|
|
507
|
+
/** « Selectionner Banque Epsilon SA » : le texte du tronc, suivi du titre. */
|
|
508
|
+
protected readonly nomDeLaCase: import("@angular/core").Signal<string>;
|
|
509
|
+
constructor();
|
|
510
|
+
protected basculer(evenement: Event): void;
|
|
511
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StListItem, never>;
|
|
512
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StListItem, "st-list-item", never, {
|
|
513
|
+
"titre": {
|
|
514
|
+
"alias": "titre";
|
|
515
|
+
"required": false;
|
|
516
|
+
"isSignal": true;
|
|
517
|
+
};
|
|
518
|
+
"meta": {
|
|
519
|
+
"alias": "meta";
|
|
520
|
+
"required": false;
|
|
521
|
+
"isSignal": true;
|
|
522
|
+
};
|
|
523
|
+
"carte": {
|
|
524
|
+
"alias": "carte";
|
|
525
|
+
"required": false;
|
|
526
|
+
"isSignal": true;
|
|
527
|
+
};
|
|
528
|
+
"choisi": {
|
|
529
|
+
"alias": "choisi";
|
|
530
|
+
"required": false;
|
|
531
|
+
"isSignal": true;
|
|
532
|
+
};
|
|
533
|
+
"chevron": {
|
|
534
|
+
"alias": "chevron";
|
|
535
|
+
"required": false;
|
|
536
|
+
"isSignal": true;
|
|
537
|
+
};
|
|
538
|
+
"lien": {
|
|
539
|
+
"alias": "lien";
|
|
540
|
+
"required": false;
|
|
541
|
+
"isSignal": true;
|
|
542
|
+
};
|
|
543
|
+
"nonLu": {
|
|
544
|
+
"alias": "nonLu";
|
|
545
|
+
"required": false;
|
|
546
|
+
"isSignal": true;
|
|
547
|
+
};
|
|
548
|
+
"selectionnable": {
|
|
549
|
+
"alias": "selectionnable";
|
|
550
|
+
"required": false;
|
|
551
|
+
"isSignal": true;
|
|
552
|
+
};
|
|
553
|
+
"selectionne": {
|
|
554
|
+
"alias": "selectionne";
|
|
555
|
+
"required": false;
|
|
556
|
+
"isSignal": true;
|
|
557
|
+
};
|
|
558
|
+
}, {
|
|
559
|
+
"selectionne": "selectionneChange";
|
|
560
|
+
}, never, ["[stActions]", "[stAvant]", "[stTitre]", "*", "[stApres]"], true, never>;
|
|
561
|
+
}
|
|
562
|
+
export type SensDeTri = 'croissant' | 'decroissant';
|
|
563
|
+
/**
|
|
564
|
+
* Etat suivant d'un cycle de tri.
|
|
565
|
+
*
|
|
566
|
+
* `ternaire` (par defaut) : non trie -> croissant -> decroissant -> non trie. Sans le
|
|
567
|
+
* troisieme etat (`ternaire` a faux) : non trie -> croissant -> decroissant -> croissant,
|
|
568
|
+
* jamais de retour au non-trie apres le premier clic.
|
|
569
|
+
*
|
|
570
|
+
* Fonction PURE, exportee pour qu'un futur consommateur (`st-list`, lot 226) partage le
|
|
571
|
+
* meme cycle sans le recopier.
|
|
572
|
+
*/
|
|
573
|
+
export declare function prochainSensOuNul(actuel: SensDeTri | null, ternaire?: boolean): SensDeTri | null;
|
|
203
574
|
/**
|
|
204
575
|
* Bouton de tri d'une colonne, pose DANS l'en-tete : `<th><button stSortHeader>`.
|
|
205
576
|
*
|
|
@@ -211,37 +582,102 @@ type SensDeTri = 'croissant' | 'decroissant';
|
|
|
211
582
|
* contrat actuel ne le fait pas (audit de la vague 4, V4-3). Trier la page
|
|
212
583
|
* affichee ferait croire a un tri de toute la liste.
|
|
213
584
|
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
585
|
+
* **Cible = toute la cellule** : le bouton REMPLIT son `th`, dans le flux, en
|
|
586
|
+
* s'etendant sur le rembourrage en ligne de la cellule (marges negatives egales a
|
|
587
|
+
* ce rembourrage) et a la hauteur de commande du mode. Survol et appui portent donc
|
|
588
|
+
* sur la cellule entiere, comme la reference (planche 4, D49), jamais sur le seul
|
|
589
|
+
* texte.
|
|
590
|
+
*
|
|
591
|
+
* **Tri ternaire par defaut** (`ternaire`, D29 avenant) : `prochainSensOuNul`
|
|
592
|
+
* calcule le prochain etat et le rend par `sensDemande` ; l'appelant (ici
|
|
593
|
+
* `st-data-table`) decide seul ce que ce prochain etat signifie (modele, aria-sort,
|
|
594
|
+
* annonce) — le bouton ne connait ni le tri courant de la page, ni son libelle.
|
|
595
|
+
*
|
|
596
|
+
* La colonne triee montre une fleche (`fleche-haut`, `fleche-bas`) ; une colonne non
|
|
597
|
+
* triee montre deux chevrons, pour se signaler triable sans attendre le survol.
|
|
598
|
+
* L'icone est decorative, l'etat est lu par `aria-sort` du `th`.
|
|
216
599
|
*/
|
|
217
|
-
declare class StSortHeader {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
600
|
+
export declare class StSortHeader {
|
|
601
|
+
readonly sens: import("@angular/core").InputSignal<SensDeTri | null>;
|
|
602
|
+
/** `fin` pour aligner le libelle et le chevron a la fin de la cellule (colonnes numeriques). */
|
|
603
|
+
readonly alignement: import("@angular/core").InputSignal<"debut" | "fin">;
|
|
604
|
+
/** Troisieme etat (non trie) atteignable par un clic de plus. Vrai par defaut (D29 avenant). */
|
|
605
|
+
readonly ternaire: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
606
|
+
/**
|
|
607
|
+
* Prochain etat DEMANDE par la personne ; l'appelant applique et annonce.
|
|
608
|
+
* ⚠️ Volontairement pas `sensChange` : ce n'est PAS un miroir de `sens` (le composant ne
|
|
609
|
+
* connait pas le tri en cours de la page), donc pas un candidat a `model()`.
|
|
610
|
+
*/
|
|
611
|
+
readonly sensDemande: import("@angular/core").OutputEmitterRef<SensDeTri | null>;
|
|
612
|
+
protected readonly icone: import("@angular/core").Signal<"code" | "menu" | "accessibilite" | "appareils" | "arborescence" | "asterisque" | "badge-coche" | "banque" | "batiment" | "bifurcation" | "billets" | "billets-envoi" | "billets-pile" | "boite" | "boite-de-reception" | "bouclier" | "bouclier-alerte" | "bouclier-coche" | "bouclier-coeur" | "bouclier-croix" | "bouclier-moitie" | "bouclier-recherche" | "bouclier-utilisateur" | "boussole" | "bouton-curseur" | "bulle-question" | "cadenas" | "cadenas-horloge" | "cadenas-ouvert" | "cadre-pied" | "cadre-texte" | "calendrier" | "calendrier-evenement" | "calendrier-horloge" | "calendrier-jour" | "calques" | "carte-bancaire" | "carte-bancaire-barre" | "carte-bancaire-cadenas" | "carte-contact" | "carte-identite" | "cartes-empilees" | "case-cochee" | "casse" | "cercle" | "cercle-alerte" | "cercle-chevron-bas" | "cercle-coche" | "cercle-coche-ouvert" | "cercle-croix" | "cercle-info" | "cercle-moins" | "cercle-plus" | "cercle-question" | "certificat" | "chandelier" | "chargement" | "cheque" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "chevrons-droite" | "chevrons-haut-bas" | "cle" | "cloche" | "cloche-sonnerie" | "coche" | "code-qr" | "code-qr-scanner" | "coffre-fort" | "colonnes" | "connexion" | "contraste" | "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-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">;
|
|
613
|
+
protected basculer(): void;
|
|
614
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StSortHeader, never>;
|
|
615
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StSortHeader, "button[stSortHeader]", never, {
|
|
616
|
+
"sens": {
|
|
617
|
+
"alias": "sens";
|
|
618
|
+
"required": false;
|
|
619
|
+
"isSignal": true;
|
|
620
|
+
};
|
|
621
|
+
"alignement": {
|
|
622
|
+
"alias": "alignement";
|
|
623
|
+
"required": false;
|
|
624
|
+
"isSignal": true;
|
|
625
|
+
};
|
|
626
|
+
"ternaire": {
|
|
627
|
+
"alias": "ternaire";
|
|
628
|
+
"required": false;
|
|
629
|
+
"isSignal": true;
|
|
630
|
+
};
|
|
631
|
+
}, {
|
|
632
|
+
"sensDemande": "sensDemande";
|
|
633
|
+
}, never, ["*"], true, never>;
|
|
222
634
|
}
|
|
223
|
-
|
|
224
635
|
/** Une colonne, decrite en donnees. */
|
|
225
|
-
interface ColonneDeTableau {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
636
|
+
export interface ColonneDeTableau {
|
|
637
|
+
/** Identifie la colonne ; par defaut, la propriete affichee. */
|
|
638
|
+
readonly cle: string;
|
|
639
|
+
readonly libelle: string;
|
|
640
|
+
/** `fin` pour les nombres et les montants (UX-4). */
|
|
641
|
+
readonly alignement?: 'debut' | 'fin';
|
|
642
|
+
/**
|
|
643
|
+
* Seulement si le SERVEUR trie sur cette colonne (V4-3) : le tableau emet `tri`, il ne
|
|
644
|
+
* reordonne rien. Trier la page affichee a cote d'un tableau est refuse par le lint du depot
|
|
645
|
+
* de la librairie (`triLocalInterdit`, constat A1194) ; une SPA n'en herite qu'a la
|
|
646
|
+
* publication de `@starterlib/eslint-config` (S06).
|
|
647
|
+
*/
|
|
648
|
+
readonly triable?: boolean;
|
|
649
|
+
/** Libelle lu mais non affiche : colonne d'actions. Jamais vide. */
|
|
650
|
+
readonly libelleMasque?: boolean;
|
|
651
|
+
/** Largeur suggeree, en `ch` (chiffres) ou en `%` du tableau. Sans unite : ignoree. */
|
|
652
|
+
readonly largeur?: string;
|
|
653
|
+
/**
|
|
654
|
+
* Le libelle d'en-tete peut passer a la ligne. Par defaut, un en-tete tient sur une ligne
|
|
655
|
+
* (il fixe alors la largeur minimale de sa colonne) ; une colonne de texte libre le laisse
|
|
656
|
+
* se replier sur deux lignes, comme « Tiers beneficiaire & IBAN » de la planche 4.
|
|
657
|
+
*/
|
|
658
|
+
readonly retourALaLigne?: boolean;
|
|
659
|
+
}
|
|
660
|
+
export interface TriDeTableau {
|
|
661
|
+
readonly cle: string;
|
|
662
|
+
readonly sens: SensDeTri;
|
|
663
|
+
}
|
|
664
|
+
/**
|
|
665
|
+
* Ton d'une ligne (planche 4 : ecriture rejetee) : `danger` pose le papier `dangerDiscret` a
|
|
666
|
+
* 40 % sous la ligne. Le texte de la ligne reste l'affaire des gabarits de cellule, et le ton ne
|
|
667
|
+
* dit rien seul : le statut de la ligne l'ecrit en toutes lettres (WCAG 1.4.1).
|
|
668
|
+
*/
|
|
669
|
+
export type TonDeLigne = Extract<Ton, 'danger'>;
|
|
670
|
+
/** Ce que le tableau vide dit : rien du tout, ou rien pour ces filtres (UX-12). */
|
|
671
|
+
export type RaisonDuVide = 'aucune-donnee' | 'aucun-resultat';
|
|
672
|
+
/**
|
|
673
|
+
* Densite d'un tableau : un MODE du socle (D10, D29), le meme que celui de la page.
|
|
674
|
+
* Donnee, elle fait du tableau un ilot de densite ; absente, il suit la page.
|
|
675
|
+
*/
|
|
676
|
+
export type DensiteDeTableau = 'confortable' | 'dense' | 'compacte';
|
|
241
677
|
/** Contexte d'un gabarit de cellule. */
|
|
242
|
-
interface ContexteDeCellule<T> {
|
|
243
|
-
|
|
244
|
-
|
|
678
|
+
export interface ContexteDeCellule<T> {
|
|
679
|
+
readonly $implicit: T;
|
|
680
|
+
readonly colonne: ColonneDeTableau;
|
|
245
681
|
}
|
|
246
682
|
/**
|
|
247
683
|
* Rendu d'une cellule, type par `[stCelluleDe]` :
|
|
@@ -252,20 +688,31 @@ interface ContexteDeCellule<T> {
|
|
|
252
688
|
* </ng-template>
|
|
253
689
|
* ```
|
|
254
690
|
*/
|
|
255
|
-
declare class StCellule<T> {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
691
|
+
export declare class StCellule<T> {
|
|
692
|
+
readonly cle: import("@angular/core").InputSignal<string>;
|
|
693
|
+
/** Sert seulement au typage du contexte ; nom de l'attribut, d'ou l'absence d'alias. */
|
|
694
|
+
readonly stCelluleDe: import("@angular/core").InputSignal<readonly T[] | null | undefined>;
|
|
695
|
+
readonly gabarit: TemplateRef<ContexteDeCellule<T>>;
|
|
696
|
+
static ngTemplateContextGuard<T>(_directive: StCellule<T>, _contexte: unknown): _contexte is ContexteDeCellule<T>;
|
|
697
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StCellule<any>, never>;
|
|
698
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StCellule<any>, "ng-template[stCellule]", never, {
|
|
699
|
+
"cle": {
|
|
700
|
+
"alias": "stCellule";
|
|
701
|
+
"required": true;
|
|
702
|
+
"isSignal": true;
|
|
703
|
+
};
|
|
704
|
+
"stCelluleDe": {
|
|
705
|
+
"alias": "stCelluleDe";
|
|
706
|
+
"required": false;
|
|
707
|
+
"isSignal": true;
|
|
708
|
+
};
|
|
709
|
+
}, {}, never, never, true, never>;
|
|
263
710
|
}
|
|
264
711
|
/** Contenu du tableau vide : un `st-empty`, avec son action. */
|
|
265
|
-
declare class StTableauVide {
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
712
|
+
export declare class StTableauVide {
|
|
713
|
+
readonly gabarit: TemplateRef<unknown>;
|
|
714
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StTableauVide, never>;
|
|
715
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StTableauVide, "ng-template[stTableauVide]", never, {}, {}, never, never, true, never>;
|
|
269
716
|
}
|
|
270
717
|
/**
|
|
271
718
|
* Tableau de donnees, sur un `<table>` NATIF.
|
|
@@ -299,134 +746,1742 @@ declare class StTableauVide {
|
|
|
299
746
|
* - Export, actions de masse : zone `stActionsDeTableau`, et le SERVEUR fait le
|
|
300
747
|
* travail (V4-5, SEC-4, SEC-5).
|
|
301
748
|
*/
|
|
302
|
-
declare class StDataTable<T> {
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
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
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
749
|
+
export declare class StDataTable<T> {
|
|
750
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
751
|
+
private readonly locale;
|
|
752
|
+
readonly legende: import("@angular/core").InputSignal<string>;
|
|
753
|
+
/** Lue mais non affichee, quand un titre visible nomme deja le tableau. */
|
|
754
|
+
readonly legendeMasquee: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
755
|
+
readonly colonnes: import("@angular/core").InputSignal<readonly ColonneDeTableau[]>;
|
|
756
|
+
readonly lignes: import("@angular/core").InputSignal<readonly T[]>;
|
|
757
|
+
/** Propriete qui identifie une ligne. Jamais l'indice (FE-1). */
|
|
758
|
+
readonly cle: import("@angular/core").InputSignal<keyof T & string>;
|
|
759
|
+
/** Colonne lue comme en-tete de chaque ligne. Par defaut : la premiere. */
|
|
760
|
+
readonly enTeteDeLigne: import("@angular/core").InputSignal<string | null>;
|
|
761
|
+
readonly premiereColonneFigee: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
762
|
+
/** Hauteur maximale, `32rem` : l'en-tete se fige, le corps defile. */
|
|
763
|
+
readonly hauteurMax: import("@angular/core").InputSignal<string | null>;
|
|
764
|
+
/** Ton de chaque ligne, lu dans la ligne ; `null` : aucun. */
|
|
765
|
+
readonly tonDeLigne: import("@angular/core").InputSignal<((ligne: T) => TonDeLigne | null) | null>;
|
|
766
|
+
/**
|
|
767
|
+
* Ligne qu'on peut choisir (planche 4 : une ecriture rejetee ne l'est pas) ; `null` : toutes.
|
|
768
|
+
* Une ligne exclue a une case DESACTIVEE (etat lu, raison dite par la ligne elle-meme), et
|
|
769
|
+
* n'entre ni dans « tout choisir » ni dans une plage Maj+clic.
|
|
770
|
+
*/
|
|
771
|
+
readonly ligneChoisissable: import("@angular/core").InputSignal<((ligne: T) => boolean) | null>;
|
|
772
|
+
/** `undefined` (par defaut) : la densite de la page. Donnee : un ilot de densite. */
|
|
773
|
+
readonly densite: import("@angular/core").InputSignal<DensiteDeTableau | undefined>;
|
|
774
|
+
readonly chargement: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
775
|
+
/**
|
|
776
|
+
* La fin d'un rechargement s'annonce (« 20 lignes affichees », UX-11) ; vrai par defaut. Faux
|
|
777
|
+
* quand un voisin dit deja le resultat du meme geste : une `st-filter-bar` qui porte
|
|
778
|
+
* `nombreDeResultats` et `chargement` dit « Filtre … retire : 12 resultats », et le tableau le
|
|
779
|
+
* redirait (audit UI du 2026-09-27, D-17). Une `st-pagination` n'en a pas besoin : elle dit sa
|
|
780
|
+
* page AVEC ces lignes, en une annonce (`annoncerLaPage`).
|
|
781
|
+
*/
|
|
782
|
+
readonly annonceDeRechargement: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
783
|
+
readonly selectionnable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
784
|
+
readonly selection: import("@angular/core").ModelSignal<readonly string[]>;
|
|
785
|
+
readonly tri: import("@angular/core").ModelSignal<TriDeTableau | null>;
|
|
786
|
+
/** Troisieme etat du tri (non trie) atteignable en reclicquant. Vrai par defaut (D29 avenant). */
|
|
787
|
+
readonly triTernaire: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
788
|
+
/** Texte du tableau vide, sans gabarit `stTableauVide`. Prime sur le texte par defaut de `raisonDuVide`. */
|
|
789
|
+
readonly texteVide: import("@angular/core").InputSignal<string | null>;
|
|
790
|
+
/** Rien du tout, ou rien pour les filtres actifs (UX-12) : deux textes, une action differente. */
|
|
791
|
+
readonly raisonDuVide: import("@angular/core").InputSignal<RaisonDuVide>;
|
|
792
|
+
/** Emis quand la personne demande l'effacement depuis le tableau vide `aucun-resultat`. */
|
|
793
|
+
readonly effacement: import("@angular/core").OutputEmitterRef<void>;
|
|
794
|
+
/** Lignes de squelette au premier chargement ; a lier a la taille de page. Plafond 25. */
|
|
795
|
+
readonly lignesAttendues: import("@angular/core").InputSignal<number>;
|
|
796
|
+
private readonly gabarits;
|
|
797
|
+
protected readonly gabaritVide: import("@angular/core").Signal<StTableauVide | undefined>;
|
|
798
|
+
private readonly zone;
|
|
799
|
+
/** Les `st-selection-bar` rattachees : tant qu'il y en a une, le resume visible est a elle. */
|
|
800
|
+
private readonly barresRattachees;
|
|
801
|
+
protected readonly resumeCede: import("@angular/core").Signal<boolean>;
|
|
802
|
+
/** Case « tout » : cible du focus rendu par `deselectionnerTout` (le bouton disparait). */
|
|
803
|
+
private readonly caseTout;
|
|
804
|
+
private readonly legendeDuTableau;
|
|
805
|
+
protected readonly annonce: AnnonceLocale;
|
|
806
|
+
protected readonly deborde: import("@angular/core").WritableSignal<boolean>;
|
|
807
|
+
/** Du contenu cache avant le bord de debut (ou de fin) de la zone : son ombre se montre. */
|
|
808
|
+
protected readonly ombreDebut: import("@angular/core").WritableSignal<boolean>;
|
|
809
|
+
protected readonly ombreFin: import("@angular/core").WritableSignal<boolean>;
|
|
810
|
+
protected readonly largeurFigee: import("@angular/core").WritableSignal<number>;
|
|
811
|
+
/** Largeur REELLE de la colonne des cases : le decalage de la colonne figee qui la suit. */
|
|
812
|
+
protected readonly decalageFigee: import("@angular/core").WritableSignal<number | null>;
|
|
813
|
+
/** Derniere ligne cochee au clavier ou a la souris : point de depart d'un Maj+clic. */
|
|
814
|
+
private derniereLigneChoisie;
|
|
815
|
+
/** Vu au dernier passage de l'effet de chargement, pour ne detecter QUE la transition. */
|
|
816
|
+
private chargementPrecedent;
|
|
817
|
+
protected readonly identifiants: {
|
|
818
|
+
readonly legende: `${string}-legende`;
|
|
819
|
+
readonly selection: `${string}-selection`;
|
|
820
|
+
readonly aideSelection: `${string}-aide-selection`;
|
|
821
|
+
readonly deborde: `${string}-deborde`;
|
|
822
|
+
};
|
|
823
|
+
protected readonly cleDEnTete: import("@angular/core").Signal<string>;
|
|
824
|
+
protected readonly cellules: import("@angular/core").Signal<{
|
|
825
|
+
colonne: ColonneDeTableau;
|
|
826
|
+
gabarit: TemplateRef<ContexteDeCellule<any>> | null;
|
|
827
|
+
enTete: boolean;
|
|
828
|
+
}[]>;
|
|
829
|
+
/** Les nombres sans gabarit, dans la locale du socle (`ST_LOCALE`), comme `st-number`. */
|
|
830
|
+
private readonly nombres;
|
|
831
|
+
protected readonly rangees: import("@angular/core").Signal<{
|
|
832
|
+
valeur: T;
|
|
833
|
+
identifiant: string;
|
|
834
|
+
nom: string | null;
|
|
835
|
+
choisie: boolean;
|
|
836
|
+
ton: "danger" | null;
|
|
837
|
+
choisissable: boolean;
|
|
838
|
+
}[]>;
|
|
839
|
+
/** `lignesAttendues`, borne a `PLAFOND_DE_SQUELETTE` : un squelette trop long pese plus qu'il n'aide. */
|
|
840
|
+
protected readonly nombreDeLignesDeSquelette: import("@angular/core").Signal<number>;
|
|
841
|
+
protected readonly squelette: import("@angular/core").Signal<number[]>;
|
|
842
|
+
protected readonly nombreDeColonnes: import("@angular/core").Signal<number>;
|
|
843
|
+
protected readonly colonnesDeSquelette: import("@angular/core").Signal<number[]>;
|
|
844
|
+
/** Les lignes qu'une case peut choisir : « tout » et les plages ne visent qu'elles. */
|
|
845
|
+
protected readonly rangeesChoisissables: import("@angular/core").Signal<{
|
|
846
|
+
valeur: T;
|
|
847
|
+
identifiant: string;
|
|
848
|
+
nom: string | null;
|
|
849
|
+
choisie: boolean;
|
|
850
|
+
ton: "danger" | null;
|
|
851
|
+
choisissable: boolean;
|
|
852
|
+
}[]>;
|
|
853
|
+
protected readonly toutesChoisies: import("@angular/core").Signal<boolean>;
|
|
854
|
+
protected readonly quelquesChoisies: import("@angular/core").Signal<boolean>;
|
|
855
|
+
constructor();
|
|
856
|
+
/** Amene le focus sur le tableau : sa legende est lue (UX-13). */
|
|
857
|
+
focus(options?: FocusOptions): void;
|
|
858
|
+
/**
|
|
859
|
+
* La page que `st-pagination` vient d'amener, dite AVEC les lignes affichees, en UNE annonce :
|
|
860
|
+
* « Page 2 : 20 lignes affichees » (contrat `Focalisable`, audit UI du 2026-09-27, D-17). Elle
|
|
861
|
+
* remplace l'annonce de fin de rechargement du meme geste, posee dans la meme region ; sans
|
|
862
|
+
* `annonceDeRechargement`, la page seule.
|
|
863
|
+
*/
|
|
864
|
+
annoncerLaPage(page: string): void;
|
|
865
|
+
protected sensDe(colonne: ColonneDeTableau): SensDeTri | null;
|
|
866
|
+
protected ariaSort(colonne: ColonneDeTableau): string | null;
|
|
867
|
+
/**
|
|
868
|
+
* `sens` est le prochain etat DEJA CALCULE par `stSortHeader` (`prochainSensOuNul`, ternaire
|
|
869
|
+
* ou non selon `triTernaire`) : ce composant applique et annonce, il ne recalcule rien.
|
|
870
|
+
*/
|
|
871
|
+
protected trier(colonne: ColonneDeTableau, sens: SensDeTri | null): void;
|
|
872
|
+
protected basculerTout(): void;
|
|
873
|
+
/**
|
|
874
|
+
* Porte le focus a la legende du tableau (lot 260) : apres « Annuler la selection » de
|
|
875
|
+
* `st-selection-bar`, la barre disparait avec la selection, et le focus reste dans le tableau au
|
|
876
|
+
* lieu de tomber au corps de la page (WCAG 2.4.3).
|
|
877
|
+
*
|
|
878
|
+
* Masquee (`legendeMasquee`), la legende n'a pas de boite ou montrer un anneau : le focus y
|
|
879
|
+
* deviendrait invisible. Il va alors a la zone, nommee par elle et qui porte son anneau force
|
|
880
|
+
* (audit UI du 2026-09-27, D-23).
|
|
881
|
+
*/
|
|
882
|
+
focaliserLaLegende(): void;
|
|
883
|
+
/**
|
|
884
|
+
* Une `st-selection-bar` se rattache (contrat `TableauDeSelection`, relecture du lot 260) : le
|
|
885
|
+
* tableau lui CEDE son resume visible, le compte et « Tout deselectionner », que la barre montre
|
|
886
|
+
* et remplace par « Annuler la selection » ; sa region de statut reste, masquee a l'oeil, et
|
|
887
|
+
* parle seule. Rend la fonction qui detache la barre.
|
|
888
|
+
*/
|
|
889
|
+
rattacherUneBarre(): () => void;
|
|
890
|
+
/**
|
|
891
|
+
* Deselectionne toute la page, sans la cocher (bouton « Tout deselectionner » de la barre).
|
|
892
|
+
* Le bouton disparait avec la selection (`@if (selection().length > 0)`) : sans ce renvoi,
|
|
893
|
+
* le focus retomberait sur `body` au clavier (WCAG 2.4.3). La case « tout » reste dans le
|
|
894
|
+
* DOM (elle porte aussi l'aide Maj+clic) : c'est une cible de repli sure.
|
|
895
|
+
*/
|
|
896
|
+
protected deselectionnerTout(): void;
|
|
897
|
+
/**
|
|
898
|
+
* Maj+clic etend la selection a la plage entre la derniere ligne cochee et celle-ci
|
|
899
|
+
* (aide donnee par `aria-describedby` sur la case « tout », UX de la vague 4).
|
|
900
|
+
*
|
|
901
|
+
* ⚠️ `evenement.preventDefault()` : sans lui, le navigateur bascule DEJA `checked` avant que
|
|
902
|
+
* ce gestionnaire ne s'execute. Quand l'extension de plage laisse une case DEJA cochee cochee
|
|
903
|
+
* (`true` -> `true`), la valeur liee ne change pas et Angular ne reecrit donc pas la propriete
|
|
904
|
+
* DOM — la case reste decochee par le natif seul, en contradiction avec le modele et
|
|
905
|
+
* `role=status` (WCAG 4.1.2). En empechant le natif d'agir, `[checked]` reste la SEULE source
|
|
906
|
+
* de verite : Angular ecrit la propriete a chaque fois que la valeur change reellement.
|
|
907
|
+
*/
|
|
908
|
+
protected basculer(identifiant: string, evenement?: Pick<MouseEvent, 'shiftKey' | 'preventDefault'>): void;
|
|
909
|
+
/**
|
|
910
|
+
* Texte affiche d'une cellule sans gabarit : booleen et nombre localises (UX de la vague 4,
|
|
911
|
+
* A1161), un objet ou une `Date` n'a pas de rendu par defaut sense — erreur de DEVELOPPEMENT
|
|
912
|
+
* (le gabarit `stCellule` manque), et en production un texte qui le dit plutot qu'un silence.
|
|
913
|
+
*/
|
|
914
|
+
protected texteDe(ligne: T, colonne: ColonneDeTableau): string | null;
|
|
915
|
+
/** Le compte des lignes rendues (UX-11) : « 20 lignes affichees », ou « Aucun resultat ». */
|
|
916
|
+
private texteDesLignes;
|
|
917
|
+
/**
|
|
918
|
+
* Le texte d'une valeur SIMPLE, celui de sa cellule : une chaine sans commande de direction (un
|
|
919
|
+
* libelle d'operation vient souvent d'un tiers, audit A-2), un booleen dit par le dictionnaire,
|
|
920
|
+
* un nombre dans la locale du socle — `ST_LOCALE`, comme `st-number`, et non la langue du
|
|
921
|
+
* dictionnaire (audit UI du 2026-09-27, D-27). `null` : absente, ou un objet.
|
|
922
|
+
*/
|
|
923
|
+
private texteSimple;
|
|
924
|
+
/** Vrai quand `texteDe` rend `null` a cause d'un objet, pas d'une valeur simplement absente. */
|
|
925
|
+
protected estIllisible(ligne: T, colonne: ColonneDeTableau): boolean;
|
|
926
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StDataTable<any>, never>;
|
|
927
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StDataTable<any>, "st-data-table", never, {
|
|
928
|
+
"legende": {
|
|
929
|
+
"alias": "legende";
|
|
930
|
+
"required": true;
|
|
931
|
+
"isSignal": true;
|
|
932
|
+
};
|
|
933
|
+
"legendeMasquee": {
|
|
934
|
+
"alias": "legendeMasquee";
|
|
935
|
+
"required": false;
|
|
936
|
+
"isSignal": true;
|
|
937
|
+
};
|
|
938
|
+
"colonnes": {
|
|
939
|
+
"alias": "colonnes";
|
|
940
|
+
"required": true;
|
|
941
|
+
"isSignal": true;
|
|
942
|
+
};
|
|
943
|
+
"lignes": {
|
|
944
|
+
"alias": "lignes";
|
|
945
|
+
"required": true;
|
|
946
|
+
"isSignal": true;
|
|
947
|
+
};
|
|
948
|
+
"cle": {
|
|
949
|
+
"alias": "cle";
|
|
950
|
+
"required": true;
|
|
951
|
+
"isSignal": true;
|
|
952
|
+
};
|
|
953
|
+
"enTeteDeLigne": {
|
|
954
|
+
"alias": "enTeteDeLigne";
|
|
955
|
+
"required": false;
|
|
956
|
+
"isSignal": true;
|
|
957
|
+
};
|
|
958
|
+
"premiereColonneFigee": {
|
|
959
|
+
"alias": "premiereColonneFigee";
|
|
960
|
+
"required": false;
|
|
961
|
+
"isSignal": true;
|
|
962
|
+
};
|
|
963
|
+
"hauteurMax": {
|
|
964
|
+
"alias": "hauteurMax";
|
|
965
|
+
"required": false;
|
|
966
|
+
"isSignal": true;
|
|
967
|
+
};
|
|
968
|
+
"tonDeLigne": {
|
|
969
|
+
"alias": "tonDeLigne";
|
|
970
|
+
"required": false;
|
|
971
|
+
"isSignal": true;
|
|
972
|
+
};
|
|
973
|
+
"ligneChoisissable": {
|
|
974
|
+
"alias": "ligneChoisissable";
|
|
975
|
+
"required": false;
|
|
976
|
+
"isSignal": true;
|
|
977
|
+
};
|
|
978
|
+
"densite": {
|
|
979
|
+
"alias": "densite";
|
|
980
|
+
"required": false;
|
|
981
|
+
"isSignal": true;
|
|
982
|
+
};
|
|
983
|
+
"chargement": {
|
|
984
|
+
"alias": "chargement";
|
|
985
|
+
"required": false;
|
|
986
|
+
"isSignal": true;
|
|
987
|
+
};
|
|
988
|
+
"annonceDeRechargement": {
|
|
989
|
+
"alias": "annonceDeRechargement";
|
|
990
|
+
"required": false;
|
|
991
|
+
"isSignal": true;
|
|
992
|
+
};
|
|
993
|
+
"selectionnable": {
|
|
994
|
+
"alias": "selectionnable";
|
|
995
|
+
"required": false;
|
|
996
|
+
"isSignal": true;
|
|
997
|
+
};
|
|
998
|
+
"selection": {
|
|
999
|
+
"alias": "selection";
|
|
1000
|
+
"required": false;
|
|
1001
|
+
"isSignal": true;
|
|
1002
|
+
};
|
|
1003
|
+
"tri": {
|
|
1004
|
+
"alias": "tri";
|
|
1005
|
+
"required": false;
|
|
1006
|
+
"isSignal": true;
|
|
1007
|
+
};
|
|
1008
|
+
"triTernaire": {
|
|
1009
|
+
"alias": "triTernaire";
|
|
1010
|
+
"required": false;
|
|
1011
|
+
"isSignal": true;
|
|
1012
|
+
};
|
|
1013
|
+
"texteVide": {
|
|
1014
|
+
"alias": "texteVide";
|
|
1015
|
+
"required": false;
|
|
1016
|
+
"isSignal": true;
|
|
1017
|
+
};
|
|
1018
|
+
"raisonDuVide": {
|
|
1019
|
+
"alias": "raisonDuVide";
|
|
1020
|
+
"required": false;
|
|
1021
|
+
"isSignal": true;
|
|
1022
|
+
};
|
|
1023
|
+
"lignesAttendues": {
|
|
1024
|
+
"alias": "lignesAttendues";
|
|
1025
|
+
"required": false;
|
|
1026
|
+
"isSignal": true;
|
|
1027
|
+
};
|
|
1028
|
+
}, {
|
|
1029
|
+
"selection": "selectionChange";
|
|
1030
|
+
"tri": "triChange";
|
|
1031
|
+
"effacement": "effacement";
|
|
1032
|
+
}, ["gabarits", "gabaritVide"], ["[stActionsDeTableau]"], true, never>;
|
|
1033
|
+
}
|
|
1034
|
+
/**
|
|
1035
|
+
* Ce que la barre attend d'un tableau : y rendre le focus, et s'y rattacher pour qu'il lui cede
|
|
1036
|
+
* son resume visible. `st-data-table` le fournit ; un contrat plutot que la classe, qu'un tableau
|
|
1037
|
+
* type (`StDataTable<T>`) ne pourrait pas remplir.
|
|
1038
|
+
*/
|
|
1039
|
+
export interface TableauDeSelection {
|
|
1040
|
+
focaliserLaLegende(): void;
|
|
1041
|
+
/** Le tableau masque son compte visible et son « Tout deselectionner » ; rend le detachement. */
|
|
1042
|
+
rattacherUneBarre(): () => void;
|
|
1043
|
+
}
|
|
1044
|
+
/**
|
|
1045
|
+
* La barre des actions de masse (lot 260, absorbe `st-bulk-actions`) : elle n'existe que tant
|
|
1046
|
+
* qu'une ligne est choisie, dit le compte, offre « Tout selectionner (N) » et « Annuler la
|
|
1047
|
+
* selection », et porte les actions de l'application.
|
|
1048
|
+
*
|
|
1049
|
+
* ```html
|
|
1050
|
+
* <st-selection-bar [selection]="choisis()" [total]="total()" [tableau]="tableau"
|
|
1051
|
+
* [nommer]="nommer" (toutSelectionner)="toutChoisir()" (annulation)="choisis.set([])">
|
|
1052
|
+
* <button principales stButton type="button" (click)="signer()">
|
|
1053
|
+
* {{ barre.libelleDeConfirmation('Signer') }}
|
|
1054
|
+
* </button>
|
|
1055
|
+
* </st-selection-bar>
|
|
1056
|
+
* ```
|
|
1057
|
+
*
|
|
1058
|
+
* - UNE seule region de statut : avec un `tableau`, c'est la sienne qui annonce le compte ; la
|
|
1059
|
+
* barre le montre, et le tableau lui cede son resume visible (compte et « Tout deselectionner »).
|
|
1060
|
+
* Sans tableau, la barre porte la region, presente vide des le depart.
|
|
1061
|
+
* - Les actions sont nommees avec le nombre, et une confirmation destructrice le dit dans son titre
|
|
1062
|
+
* (SEC-4 de la vague 4) : `libelleDeConfirmation('Supprimer')` rend « Supprimer 3 virements ».
|
|
1063
|
+
* Le serveur verifie chaque identifiant ; l'intercepteur pose la cle d'idempotence.
|
|
1064
|
+
* - « Annuler la selection » rend le focus a la legende du tableau (a sa zone quand la legende est
|
|
1065
|
+
* masquee, audit UI du 2026-09-27, D-23) : la barre disparait avec la selection, et le focus ne
|
|
1066
|
+
* tombe pas au corps de la page.
|
|
1067
|
+
* - Sous `md` (sa largeur), les actions `[secondaires]` laissent la place a `[plus]`, un
|
|
1068
|
+
* `st-menu` fourni par l'application (`ui/listes` n'importe pas `surfaces`) ; sans `[plus]`,
|
|
1069
|
+
* elles restent visibles, repliees a la ligne : aucune action ne disparait.
|
|
1070
|
+
* - Collee (sticky, jamais fixed) en haut de sa zone de defilement.
|
|
1071
|
+
*/
|
|
1072
|
+
export declare class StSelectionBar {
|
|
1073
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
1074
|
+
/** Les cles choisies ; vide : la barre ne se montre pas. */
|
|
1075
|
+
readonly selection: import("@angular/core").InputSignal<readonly string[]>;
|
|
1076
|
+
/** Le compte en texte (« 3 virements selectionnes ») ; defaut : « 3 lignes selectionnees ». */
|
|
1077
|
+
readonly texteDuCompte: import("@angular/core").InputSignal<((nombre: number) => string) | null>;
|
|
1078
|
+
/** Ce que la selection designe, avec son nombre (« 3 virements »), pour les actions. */
|
|
1079
|
+
readonly nommer: import("@angular/core").InputSignal<((nombre: number) => string) | null>;
|
|
1080
|
+
/** Le total que la personne peut choisir, pour « Tout selectionner (N) » ; `null` : inconnu. */
|
|
1081
|
+
readonly total: import("@angular/core").InputSignal<number | null>;
|
|
1082
|
+
/** Le tableau dont la legende recoit le focus a l'annulation, et dont la region parle. */
|
|
1083
|
+
readonly tableau: import("@angular/core").InputSignal<TableauDeSelection | null>;
|
|
1084
|
+
readonly collee: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1085
|
+
readonly toutSelectionner: import("@angular/core").OutputEmitterRef<void>;
|
|
1086
|
+
readonly annulation: import("@angular/core").OutputEmitterRef<void>;
|
|
1087
|
+
protected readonly nombre: import("@angular/core").Signal<number>;
|
|
1088
|
+
protected readonly compte: import("@angular/core").Signal<string>;
|
|
1089
|
+
protected readonly toutChoisir: import("@angular/core").Signal<string | null>;
|
|
1090
|
+
/**
|
|
1091
|
+
* Le nom d'une action sur la selection, et le titre de sa confirmation : le verbe, puis ce qu'il
|
|
1092
|
+
* vise AVEC son nombre (« Supprimer 3 virements »). SEC-4 : une confirmation de masse dit le
|
|
1093
|
+
* nombre.
|
|
1094
|
+
*/
|
|
1095
|
+
libelleDeConfirmation(verbe: string): string;
|
|
1096
|
+
constructor();
|
|
1097
|
+
protected annuler(): void;
|
|
1098
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StSelectionBar, never>;
|
|
1099
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StSelectionBar, "st-selection-bar", never, {
|
|
1100
|
+
"selection": {
|
|
1101
|
+
"alias": "selection";
|
|
1102
|
+
"required": true;
|
|
1103
|
+
"isSignal": true;
|
|
1104
|
+
};
|
|
1105
|
+
"texteDuCompte": {
|
|
1106
|
+
"alias": "texteDuCompte";
|
|
1107
|
+
"required": false;
|
|
1108
|
+
"isSignal": true;
|
|
1109
|
+
};
|
|
1110
|
+
"nommer": {
|
|
1111
|
+
"alias": "nommer";
|
|
1112
|
+
"required": false;
|
|
1113
|
+
"isSignal": true;
|
|
1114
|
+
};
|
|
1115
|
+
"total": {
|
|
1116
|
+
"alias": "total";
|
|
1117
|
+
"required": false;
|
|
1118
|
+
"isSignal": true;
|
|
1119
|
+
};
|
|
1120
|
+
"tableau": {
|
|
1121
|
+
"alias": "tableau";
|
|
1122
|
+
"required": false;
|
|
1123
|
+
"isSignal": true;
|
|
1124
|
+
};
|
|
1125
|
+
"collee": {
|
|
1126
|
+
"alias": "collee";
|
|
1127
|
+
"required": false;
|
|
1128
|
+
"isSignal": true;
|
|
1129
|
+
};
|
|
1130
|
+
}, {
|
|
1131
|
+
"toutSelectionner": "toutSelectionner";
|
|
1132
|
+
"annulation": "annulation";
|
|
1133
|
+
}, never, ["[principales]", "[secondaires]", "[plus]"], true, never>;
|
|
1134
|
+
}
|
|
1135
|
+
/**
|
|
1136
|
+
* Ou en est un export : `repos` (rien de demande), `preparation` (le service fabrique le
|
|
1137
|
+
* fichier), `pret` (un lien le telecharge), `refuse` (le refus est projete, `[refus]`).
|
|
1138
|
+
*/
|
|
1139
|
+
export type EtatDExport = 'repos' | 'preparation' | 'pret' | 'refuse';
|
|
1140
|
+
/** Ce que le service a produit : ou le telecharger, en quel format, de quelle taille. */
|
|
1141
|
+
export interface ResultatDExport {
|
|
1142
|
+
/** L'adresse du fichier, sur l'origine du BFF : un lien ordinaire, la session le porte. */
|
|
1143
|
+
readonly url: string;
|
|
1144
|
+
/** Le format lisible (« CSV », « PDF »). */
|
|
1145
|
+
readonly format: string;
|
|
1146
|
+
/** En octets ; `null` : inconnue. */
|
|
1147
|
+
readonly taille: number | null;
|
|
1148
|
+
/** Le service a atteint son plafond : l'export ne porte pas tout. */
|
|
1149
|
+
readonly tronque: boolean;
|
|
1150
|
+
/** Les lignes exportees, et le total quand le service le connait. */
|
|
1151
|
+
readonly lignes: number;
|
|
1152
|
+
readonly total: number | null;
|
|
1153
|
+
}
|
|
1154
|
+
/**
|
|
1155
|
+
* Le declenchement d'un export (lot 260) : l'export est SERVEUR (audite, plafonne, drapeau
|
|
1156
|
+
* `tronque` ; V4-5, SEC-5). Le composant ne fabrique aucun fichier : il declenche, puis rend
|
|
1157
|
+
* compte.
|
|
1158
|
+
*
|
|
1159
|
+
* ```html
|
|
1160
|
+
* <st-export-action [etat]="export.etat()" [resultat]="export.resultat()" (demande)="exporter()">
|
|
1161
|
+
* <st-refusal refus [erreur]="export.erreur()!" [message]="messageDuRefus()" />
|
|
1162
|
+
* </st-export-action>
|
|
1163
|
+
* ```
|
|
1164
|
+
*
|
|
1165
|
+
* - `preparation` : le bouton porte `aria-busy`, indisponible, et le dit.
|
|
1166
|
+
* - `pret` : un lien explicite, « Telecharger l'export, CSV, 84 Ko », qui recoit le focus a son
|
|
1167
|
+
* arrivee ; « Export pret » s'annonce poliment ; la troncature se dit en mots et en nombres.
|
|
1168
|
+
* - `refuse` : le refus projete (`st-refusal`), jamais un toast.
|
|
1169
|
+
*/
|
|
1170
|
+
export declare class StExportAction {
|
|
1171
|
+
private readonly injecteur;
|
|
1172
|
+
private readonly document;
|
|
1173
|
+
private readonly hote;
|
|
1174
|
+
/** La troncature decrit le lien pret (audit du 2026-09-27, D-22). */
|
|
1175
|
+
protected readonly identifiantDeLaTroncature: string;
|
|
1176
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
1177
|
+
private readonly locale;
|
|
1178
|
+
protected readonly annonce: AnnonceLocale;
|
|
1179
|
+
readonly etat: import("@angular/core").InputSignal<EtatDExport>;
|
|
1180
|
+
readonly resultat: import("@angular/core").InputSignal<ResultatDExport | null>;
|
|
1181
|
+
/** Le libelle du bouton ; defaut : « Exporter ». */
|
|
1182
|
+
readonly libelle: import("@angular/core").InputSignal<string | null>;
|
|
1183
|
+
/** La personne demande l'export : l'application appelle le service. */
|
|
1184
|
+
readonly demande: import("@angular/core").OutputEmitterRef<void>;
|
|
1185
|
+
/** Le lien pret : l'element, et non le composant `stLink` que le repere designerait. */
|
|
1186
|
+
private readonly lien;
|
|
1187
|
+
protected readonly libelleDuBouton: import("@angular/core").Signal<string>;
|
|
1188
|
+
/**
|
|
1189
|
+
* L'adresse du lien pret, si elle reste sur l'origine de la page (audit du 2026-09-27, A-9) :
|
|
1190
|
+
* sinon aucun lien n'est pose, et le developpement le dit.
|
|
1191
|
+
*/
|
|
1192
|
+
protected readonly adresse: import("@angular/core").Signal<string | null>;
|
|
1193
|
+
protected readonly nomDuLien: import("@angular/core").Signal<string>;
|
|
1194
|
+
protected readonly troncature: import("@angular/core").Signal<string | null>;
|
|
1195
|
+
constructor();
|
|
1196
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StExportAction, never>;
|
|
1197
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StExportAction, "st-export-action", never, {
|
|
1198
|
+
"etat": {
|
|
1199
|
+
"alias": "etat";
|
|
1200
|
+
"required": false;
|
|
1201
|
+
"isSignal": true;
|
|
1202
|
+
};
|
|
1203
|
+
"resultat": {
|
|
1204
|
+
"alias": "resultat";
|
|
1205
|
+
"required": false;
|
|
1206
|
+
"isSignal": true;
|
|
1207
|
+
};
|
|
1208
|
+
"libelle": {
|
|
1209
|
+
"alias": "libelle";
|
|
1210
|
+
"required": false;
|
|
1211
|
+
"isSignal": true;
|
|
1212
|
+
};
|
|
1213
|
+
}, {
|
|
1214
|
+
"demande": "demande";
|
|
1215
|
+
}, never, ["[refus]"], true, never>;
|
|
361
1216
|
}
|
|
362
|
-
|
|
363
1217
|
/**
|
|
364
1218
|
* Filtre actif, retirable : « Statut : Expediee ✕ ».
|
|
365
1219
|
*
|
|
366
1220
|
* ```html
|
|
367
1221
|
* <button stFilterChip libelle="Statut : Expediee" (click)="retirer('statut')"></button>
|
|
1222
|
+
* <button stFilterChip libelle="Devise : CHF (Impose)" verrouille></button>
|
|
368
1223
|
* ```
|
|
369
1224
|
*
|
|
370
1225
|
* ⚠️ **Toute la puce est le bouton**, et son nom CONTIENT le texte visible —
|
|
371
1226
|
* « Retirer le filtre Statut : Expediee » (WCAG 2.5.3) : une commande vocale
|
|
372
|
-
* « cliquer Statut » l'atteint.
|
|
373
|
-
* une cible de quelques pixels sans nom.
|
|
1227
|
+
* « cliquer Statut » l'atteint. La croix est DESSINEE dans la puce (planche 4) :
|
|
1228
|
+
* une croix seule, a cote d'un texte inerte, serait une cible de quelques pixels sans nom.
|
|
1229
|
+
*
|
|
1230
|
+
* ⚠️ **Verrouillee : `aria-disabled`, jamais `disabled`.** Un filtre impose par le contexte
|
|
1231
|
+
* (devise du compte, perimetre du role) se lit et se focalise, mais ne se retire pas : cadenas
|
|
1232
|
+
* a la place de la croix, nom « Devise : CHF, filtre verrouille », et ses clics sont AVALES
|
|
1233
|
+
* avant tout ecouteur de l'appelant (aucune sortie). Retire du parcours, il disparaitrait
|
|
1234
|
+
* pour qui navigue au clavier sans que la liste des filtres ne dise pourquoi.
|
|
1235
|
+
*
|
|
1236
|
+
* 36 px au pointeur fin (planche 4), 44 au doigt.
|
|
374
1237
|
*/
|
|
375
|
-
declare class StFilterChip {
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
1238
|
+
export declare class StFilterChip {
|
|
1239
|
+
private readonly libelles;
|
|
1240
|
+
readonly libelle: import("@angular/core").InputSignal<string>;
|
|
1241
|
+
/** Valeur a chasse fixe (compte, reference) : tout le libelle en mono, chiffres alignes. */
|
|
1242
|
+
readonly mono: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1243
|
+
/** Filtre impose : lu, focalisable, jamais retire. */
|
|
1244
|
+
readonly verrouille: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1245
|
+
/**
|
|
1246
|
+
* Le libelle compose par l'application porte une donnee (un nom, un IBAN) : sans commande de
|
|
1247
|
+
* direction, a l'ecran (isole, `dir="auto"`) comme dans le nom (audit UI du 2026-09-27, D-5).
|
|
1248
|
+
*/
|
|
1249
|
+
protected readonly libelleAffiche: import("@angular/core").Signal<string>;
|
|
1250
|
+
protected readonly nom: import("@angular/core").Signal<string>;
|
|
1251
|
+
constructor();
|
|
1252
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StFilterChip, never>;
|
|
1253
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StFilterChip, "button[stFilterChip]", never, {
|
|
1254
|
+
"libelle": {
|
|
1255
|
+
"alias": "libelle";
|
|
1256
|
+
"required": true;
|
|
1257
|
+
"isSignal": true;
|
|
1258
|
+
};
|
|
1259
|
+
"mono": {
|
|
1260
|
+
"alias": "mono";
|
|
1261
|
+
"required": false;
|
|
1262
|
+
"isSignal": true;
|
|
1263
|
+
};
|
|
1264
|
+
"verrouille": {
|
|
1265
|
+
"alias": "verrouille";
|
|
1266
|
+
"required": false;
|
|
1267
|
+
"isSignal": true;
|
|
1268
|
+
};
|
|
1269
|
+
}, {}, never, never, true, never>;
|
|
381
1270
|
}
|
|
382
|
-
|
|
383
1271
|
/** Un filtre en vigueur, tel qu'il se lit : « Statut : Expediee ». */
|
|
384
|
-
interface FiltreActif {
|
|
385
|
-
|
|
386
|
-
|
|
1272
|
+
export interface FiltreActif {
|
|
1273
|
+
readonly cle: string;
|
|
1274
|
+
readonly libelle: string;
|
|
1275
|
+
/** Filtre impose par le contexte : cadenas, jamais retire (ni par sa puce, ni par l'effacement). */
|
|
1276
|
+
readonly verrouille?: boolean;
|
|
1277
|
+
/** Valeur a chasse fixe (compte, reference). */
|
|
1278
|
+
readonly mono?: boolean;
|
|
387
1279
|
}
|
|
388
1280
|
/**
|
|
389
|
-
*
|
|
1281
|
+
* `immediat` : les filtres s'appliquent au changement, par l'application ; Entree n'envoie rien.
|
|
1282
|
+
* `soumission` : les champs texte attendent ; Entree et « Appliquer les filtres » emettent
|
|
1283
|
+
* `application`.
|
|
1284
|
+
*/
|
|
1285
|
+
export type ModeDeFiltrage = 'immediat' | 'soumission';
|
|
1286
|
+
/**
|
|
1287
|
+
* Barre de filtres : un en-tete (titre, nombre de resultats, « Effacer les filtres »), les
|
|
1288
|
+
* champs, puis les filtres en vigueur, retirables (planche 4, module 4.1).
|
|
390
1289
|
*
|
|
391
1290
|
* ```html
|
|
392
|
-
* <st-filter-bar
|
|
1291
|
+
* <st-filter-bar
|
|
1292
|
+
* etiquette="Criteres de recherche"
|
|
1293
|
+
* [filtresActifs]="actifs()"
|
|
1294
|
+
* [nombreDeResultats]="page.value()?.content.length ?? null"
|
|
1295
|
+
* (retrait)="retirer($event)"
|
|
1296
|
+
* (effacement)="effacer()"
|
|
1297
|
+
* >
|
|
393
1298
|
* <st-select libelle="Statut" [options]="statuts" [(value)]="statut" />
|
|
394
1299
|
* </st-filter-bar>
|
|
395
1300
|
* ```
|
|
396
1301
|
*
|
|
397
|
-
* Un formulaire NOMME : repere « Filtres » dans la liste des reperes du lecteur
|
|
398
|
-
* d'ecran. Pas un repere `search` : un `st-search-field` pose dedans en porte deja
|
|
399
|
-
*
|
|
400
|
-
*
|
|
401
|
-
* ⚠️ **
|
|
402
|
-
*
|
|
403
|
-
*
|
|
404
|
-
*
|
|
405
|
-
*
|
|
406
|
-
*
|
|
407
|
-
*
|
|
408
|
-
*
|
|
409
|
-
*
|
|
410
|
-
* la
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
1302
|
+
* Un formulaire NOMME par son titre : repere « Filtres » dans la liste des reperes du lecteur
|
|
1303
|
+
* d'ecran. Pas un repere `search` : un `st-search-field` pose dedans en porte deja un, et deux
|
|
1304
|
+
* reperes imbriques se liraient en double.
|
|
1305
|
+
*
|
|
1306
|
+
* ⚠️ **Le focus suit le retrait REEL.** `filtresActifs` appartient a l'application : la barre
|
|
1307
|
+
* emet `retrait(cle)` et attend que la cle ait quitte la liste (rechargement de la page de
|
|
1308
|
+
* resultats compris) avant de rendre le focus a la puce suivante, sinon a la precedente, sinon au
|
|
1309
|
+
* titre (A1160). Focaliser des le rendu suivant visait la puce encore presente, puis le document
|
|
1310
|
+
* quand elle disparaissait. « Effacer les filtres » le rend au titre, un mot lu (UX-14). Si la
|
|
1311
|
+
* personne est allee ailleurs pendant l'attente (un champ, pour taper), le focus y reste : il n'est
|
|
1312
|
+
* rendu que s'il a ete perdu avec la puce, ou s'il est encore sur ce qui a demande le retrait.
|
|
1313
|
+
*
|
|
1314
|
+
* ⚠️ **Un geste, une voix** (audit UI du 2026-09-27, D-17). Le retrait d'une puce, ou l'effacement,
|
|
1315
|
+
* se dit quand ses resultats sont la, AVEC leur nombre : « Filtre Pays : France retire :
|
|
1316
|
+
* 12 resultats », une annonce et non trois. Jusqu'au rendu de ce nombre, sa region se tait
|
|
1317
|
+
* (`aria-busy`). Le nombre n'entre dans la phrase que si la barre a vu le rechargement
|
|
1318
|
+
* (`chargement`) ou le nombre changer : lier les deux. Un `st-data-table` sous la barre prend alors
|
|
1319
|
+
* `[annonceDeRechargement]="false"` : ses « 12 lignes affichees » rediraient le meme resultat.
|
|
1320
|
+
*
|
|
1321
|
+
* ⚠️ **Dans l'adresse, des valeurs d'enumeration seulement** (SEC-2) : un texte cherche, un
|
|
1322
|
+
* nom, un IBAN n'y vont pas. Le composant ne touche pas a l'adresse ; la regle est pour
|
|
1323
|
+
* l'application qui le ferait.
|
|
1324
|
+
*/
|
|
1325
|
+
export declare class StFilterBar {
|
|
1326
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
1327
|
+
private readonly injecteur;
|
|
1328
|
+
private readonly document;
|
|
1329
|
+
/** Titre visible et nom du formulaire. Par defaut : « Filtres ». */
|
|
1330
|
+
readonly etiquette: import("@angular/core").InputSignal<string | null>;
|
|
1331
|
+
/** Precision sous le titre. */
|
|
1332
|
+
readonly description: import("@angular/core").InputSignal<string | null>;
|
|
1333
|
+
readonly filtresActifs: import("@angular/core").InputSignal<readonly FiltreActif[]>;
|
|
1334
|
+
readonly mode: import("@angular/core").InputSignal<ModeDeFiltrage>;
|
|
1335
|
+
/** Resultats de la recherche en cours, dits la ou la question se pose. `null` : non affiche. */
|
|
1336
|
+
readonly nombreDeResultats: import("@angular/core").InputSignal<number | null>;
|
|
1337
|
+
/** Resultats en cours de rechargement : `aria-busy`, les puces restent lisibles. */
|
|
1338
|
+
readonly chargement: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1339
|
+
readonly retrait: import("@angular/core").OutputEmitterRef<string>;
|
|
1340
|
+
readonly effacement: import("@angular/core").OutputEmitterRef<void>;
|
|
1341
|
+
/** Mode `soumission` : Entree dans un champ, ou « Appliquer les filtres ». */
|
|
1342
|
+
readonly application: import("@angular/core").OutputEmitterRef<void>;
|
|
1343
|
+
protected readonly annonce: AnnonceLocale;
|
|
1344
|
+
private readonly identifiant;
|
|
1345
|
+
protected readonly identifiantTitre: string;
|
|
1346
|
+
protected readonly identifiantActifs: string;
|
|
1347
|
+
private readonly titre;
|
|
1348
|
+
private readonly puces;
|
|
1349
|
+
protected readonly etiquetteLue: import("@angular/core").Signal<string>;
|
|
1350
|
+
protected readonly effacables: import("@angular/core").Signal<boolean>;
|
|
1351
|
+
protected readonly texteDesResultats: import("@angular/core").Signal<string | null>;
|
|
1352
|
+
private enAttente;
|
|
1353
|
+
private geste;
|
|
1354
|
+
/** La levee differee de `resultatsEnAttente`, qu'un nouveau geste annule. */
|
|
1355
|
+
private levee;
|
|
1356
|
+
/** Du geste au rendu de ses resultats : la region du nombre se tait (`aria-busy`, D-17). */
|
|
1357
|
+
protected readonly resultatsEnAttente: import("@angular/core").WritableSignal<boolean>;
|
|
1358
|
+
constructor();
|
|
1359
|
+
protected retirer(filtre: FiltreActif, indice: number): void;
|
|
1360
|
+
protected effacer(): void;
|
|
1361
|
+
/** La confirmation du geste attend ses resultats pour se dire avec eux (D-17). */
|
|
1362
|
+
private attendreLesResultats;
|
|
1363
|
+
protected soumettre(evenement: Event): void;
|
|
1364
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StFilterBar, never>;
|
|
1365
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StFilterBar, "st-filter-bar", never, {
|
|
1366
|
+
"etiquette": {
|
|
1367
|
+
"alias": "etiquette";
|
|
1368
|
+
"required": false;
|
|
1369
|
+
"isSignal": true;
|
|
1370
|
+
};
|
|
1371
|
+
"description": {
|
|
1372
|
+
"alias": "description";
|
|
1373
|
+
"required": false;
|
|
1374
|
+
"isSignal": true;
|
|
1375
|
+
};
|
|
1376
|
+
"filtresActifs": {
|
|
1377
|
+
"alias": "filtresActifs";
|
|
1378
|
+
"required": false;
|
|
1379
|
+
"isSignal": true;
|
|
1380
|
+
};
|
|
1381
|
+
"mode": {
|
|
1382
|
+
"alias": "mode";
|
|
1383
|
+
"required": false;
|
|
1384
|
+
"isSignal": true;
|
|
1385
|
+
};
|
|
1386
|
+
"nombreDeResultats": {
|
|
1387
|
+
"alias": "nombreDeResultats";
|
|
1388
|
+
"required": false;
|
|
1389
|
+
"isSignal": true;
|
|
1390
|
+
};
|
|
1391
|
+
"chargement": {
|
|
1392
|
+
"alias": "chargement";
|
|
1393
|
+
"required": false;
|
|
1394
|
+
"isSignal": true;
|
|
1395
|
+
};
|
|
1396
|
+
}, {
|
|
1397
|
+
"retrait": "retrait";
|
|
1398
|
+
"effacement": "effacement";
|
|
1399
|
+
"application": "application";
|
|
1400
|
+
}, never, ["*"], true, never>;
|
|
1401
|
+
}
|
|
1402
|
+
/**
|
|
1403
|
+
* Ce qu'un `st-accordion` offre aux `st-disclosure` qu'il projette. Interne au point d'entree : il
|
|
1404
|
+
* n'est pas exporte, et une section hors d'un accordeon ne le trouve pas.
|
|
1405
|
+
*
|
|
1406
|
+
* Des fonctions, fournies par l'accordeon a ses seules sections : la section lit le nom du groupe
|
|
1407
|
+
* exclusif et signale sa bascule, sans que l'accordeon expose rien de plus que son API (D85).
|
|
1408
|
+
*/
|
|
1409
|
+
interface ContexteDAccordeon {
|
|
1410
|
+
/** Nom natif du groupe exclusif (`details[name]`, D86), ou `null`. */
|
|
1411
|
+
nomDuGroupe(): string | null;
|
|
1412
|
+
/** Une section vient de basculer (evenement `toggle`) : l'accordeon met son modele a jour. */
|
|
1413
|
+
sectionBasculee(section: StDisclosure): void;
|
|
1414
|
+
}
|
|
1415
|
+
declare const CONTEXTE_D_ACCORDEON: InjectionToken<ContexteDAccordeon>;
|
|
1416
|
+
/**
|
|
1417
|
+
* Section repliable, sur `details` et `summary` natifs (lot 246, ADR 0005 D83 a D87).
|
|
1418
|
+
*
|
|
1419
|
+
* ```html
|
|
1420
|
+
* <st-disclosure libelle="Justificatifs acceptes" resume="3 documents" [niveauDuTitre]="3">
|
|
1421
|
+
* <st-list ... />
|
|
1422
|
+
* </st-disclosure>
|
|
1423
|
+
* ```
|
|
1424
|
+
*
|
|
1425
|
+
* ⚠️ **Le navigateur porte l'etat.** `summary` est un bouton natif : son etat deplie est annonce,
|
|
1426
|
+
* Entree et Espace le basculent, et la recherche dans la page ouvre une section fermee qui contient
|
|
1427
|
+
* le texte cherche (D87). Aucun ARIA n'est ecrit, sauf pour une section indisponible (D84).
|
|
1428
|
+
*
|
|
1429
|
+
* ⚠️ **Le libelle ne change jamais avec l'etat** (« Afficher » puis « Masquer » est l'anti-patron
|
|
1430
|
+
* refuse pour `st-code`) : le chevron tourne, et le lecteur d'ecran dit « replie » ou « deplie ».
|
|
1431
|
+
*
|
|
1432
|
+
* `ouvert` suit l'evenement `toggle` : il dit ce que l'utilisateur voit, qu'il ait clique, tape
|
|
1433
|
+
* au clavier ou cherche dans la page. L'appelant peut aussi l'ecrire.
|
|
1434
|
+
*
|
|
1435
|
+
* ⚠️ **Le titre est DANS le `summary`, et non autour d'un bouton** (patron APG « titre > bouton »
|
|
1436
|
+
* ecarte, audit UI du 2026-09-27, D-32). HTML l'admet (le contenu d'un `summary` peut commencer
|
|
1437
|
+
* par un titre), mais le `summary` est expose en bouton, dont les enfants sont presentationnels
|
|
1438
|
+
* pour une partie des lecteurs d'ecran : selon le couple navigateur et lecteur, le titre peut
|
|
1439
|
+
* manquer a la navigation par titres. Le patron APG le garantirait, au prix de ce que porte le
|
|
1440
|
+
* natif (D83 a D87) : l'etat deplie dit sans ARIA, la recherche dans la page qui ouvre une section
|
|
1441
|
+
* fermee, le groupe exclusif par `name`, l'impression par `::details-content`. Un changement de
|
|
1442
|
+
* structure, a trancher par ADR sur une mesure au banc (lecteurs d'ecran reels), et non un
|
|
1443
|
+
* correctif.
|
|
1444
|
+
*
|
|
1445
|
+
* A l'impression, la section s'ouvre, puis reprend son etat (D87) : un releve imprime ne cache
|
|
1446
|
+
* rien. Aucune animation de hauteur (03 §3.10) : seul le chevron tourne.
|
|
1447
|
+
*/
|
|
1448
|
+
export declare class StDisclosure {
|
|
1449
|
+
protected readonly accordeon: ContexteDAccordeon | null;
|
|
1450
|
+
private readonly details;
|
|
1451
|
+
/** Texte visible du declencheur, identique ouvert et ferme. */
|
|
1452
|
+
readonly libelle: import("@angular/core").InputSignal<string>;
|
|
1453
|
+
/** Precision lue apres le libelle (« 3 documents ») ; facultative. */
|
|
1454
|
+
readonly resume: import("@angular/core").InputSignal<string | null>;
|
|
1455
|
+
/** La section est depliee. Suit l'evenement `toggle` ; l'appelant peut l'ecrire. */
|
|
1456
|
+
readonly ouvert: import("@angular/core").ModelSignal<boolean>;
|
|
1457
|
+
/**
|
|
1458
|
+
* Niveau du titre qui porte le libelle, pour une page de contenu (FAQ, conditions) : la section
|
|
1459
|
+
* entre dans le plan de la page. `null` : aucun titre. ⚠️ Titre pose DANS le `summary` : voir la
|
|
1460
|
+
* limite dite plus haut (D-32).
|
|
1461
|
+
*/
|
|
1462
|
+
readonly niveauDuTitre: import("@angular/core").InputSignal<NiveauDeTitre | null>;
|
|
1463
|
+
/**
|
|
1464
|
+
* La section existe mais ne s'ouvre pas encore. Son declencheur reste focalisable et dit
|
|
1465
|
+
* pourquoi (`raisonIndisponible`, reliee par `aria-describedby`), comme un bouton indisponible
|
|
1466
|
+
* (D39, D84).
|
|
1467
|
+
*/
|
|
1468
|
+
readonly indisponible: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1469
|
+
readonly raisonIndisponible: import("@angular/core").InputSignal<string | null>;
|
|
1470
|
+
/** Cle de la section dans un `st-accordion` (son modele `ouverts`). */
|
|
1471
|
+
readonly valeur: import("@angular/core").InputSignal<string | null>;
|
|
1472
|
+
protected readonly identifiantDeRaison: string;
|
|
1473
|
+
protected readonly raisonLue: import("@angular/core").Signal<string | null>;
|
|
1474
|
+
/** Etat d'avant l'impression, le temps qu'elle dure. */
|
|
1475
|
+
private avantLImpression;
|
|
1476
|
+
/** Le navigateur a bascule la section : le modele dit ce qui est montre. */
|
|
1477
|
+
protected basculee(): void;
|
|
1478
|
+
/** Une section indisponible ne s'ouvre ni au clic, ni a Entree, ni a Espace. */
|
|
1479
|
+
protected activation(evenement: Event): void;
|
|
1480
|
+
/**
|
|
1481
|
+
* D87 : tout s'imprime ouvert. Le `name` d'un groupe exclusif est retire le temps de
|
|
1482
|
+
* l'impression : sans cela, ouvrir une section fermerait les autres.
|
|
1483
|
+
*/
|
|
1484
|
+
protected ouvrirPourLImpression(): void;
|
|
1485
|
+
protected restaurerApresLImpression(): void;
|
|
1486
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StDisclosure, never>;
|
|
1487
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StDisclosure, "st-disclosure", never, {
|
|
1488
|
+
"libelle": {
|
|
1489
|
+
"alias": "libelle";
|
|
1490
|
+
"required": true;
|
|
1491
|
+
"isSignal": true;
|
|
1492
|
+
};
|
|
1493
|
+
"resume": {
|
|
1494
|
+
"alias": "resume";
|
|
1495
|
+
"required": false;
|
|
1496
|
+
"isSignal": true;
|
|
1497
|
+
};
|
|
1498
|
+
"ouvert": {
|
|
1499
|
+
"alias": "ouvert";
|
|
1500
|
+
"required": false;
|
|
1501
|
+
"isSignal": true;
|
|
1502
|
+
};
|
|
1503
|
+
"niveauDuTitre": {
|
|
1504
|
+
"alias": "niveauDuTitre";
|
|
1505
|
+
"required": false;
|
|
1506
|
+
"isSignal": true;
|
|
1507
|
+
};
|
|
1508
|
+
"indisponible": {
|
|
1509
|
+
"alias": "indisponible";
|
|
1510
|
+
"required": false;
|
|
1511
|
+
"isSignal": true;
|
|
1512
|
+
};
|
|
1513
|
+
"raisonIndisponible": {
|
|
1514
|
+
"alias": "raisonIndisponible";
|
|
1515
|
+
"required": false;
|
|
1516
|
+
"isSignal": true;
|
|
1517
|
+
};
|
|
1518
|
+
"valeur": {
|
|
1519
|
+
"alias": "valeur";
|
|
1520
|
+
"required": false;
|
|
1521
|
+
"isSignal": true;
|
|
1522
|
+
};
|
|
1523
|
+
}, {
|
|
1524
|
+
"ouvert": "ouvertChange";
|
|
1525
|
+
}, never, ["*"], true, never>;
|
|
1526
|
+
}
|
|
1527
|
+
/**
|
|
1528
|
+
* Groupe de sections repliables : des `st-disclosure` projetees, un filet entre elles (lot 246,
|
|
1529
|
+
* ADR 0005 D83 a D87).
|
|
1530
|
+
*
|
|
1531
|
+
* ```html
|
|
1532
|
+
* <st-accordion toutAfficher [(ouverts)]="sections">
|
|
1533
|
+
* <st-disclosure valeur="frais" libelle="Frais" [niveauDuTitre]="3">...</st-disclosure>
|
|
1534
|
+
* <st-disclosure valeur="plafonds" libelle="Plafonds" [niveauDuTitre]="3">...</st-disclosure>
|
|
1535
|
+
* </st-accordion>
|
|
1536
|
+
* ```
|
|
1537
|
+
*
|
|
1538
|
+
* `ouverts` : les `valeur` des sections ouvertes. Vide au depart, il prend l'etat des sections
|
|
1539
|
+
* (leur `ouvert`) ; fourni, il l'impose. Il suit ensuite chaque bascule, et l'appelant peut
|
|
1540
|
+
* l'ecrire (un lien profond vers une section).
|
|
1541
|
+
*
|
|
1542
|
+
* `exclusif` : une seule section ouverte a la fois, par le `name` natif des `details` ; la ou le
|
|
1543
|
+
* navigateur ne le connait pas (Firefox 129, plancher du socle), l'accordeon ferme lui-meme les
|
|
1544
|
+
* autres (D86).
|
|
1545
|
+
*
|
|
1546
|
+
* `toutAfficher` : un bouton « Tout afficher » au libelle STABLE, dont `aria-expanded` dit si tout
|
|
1547
|
+
* est ouvert ; il ouvre tout, ou replie tout quand tout est deja ouvert (D84). Jamais rendu dans
|
|
1548
|
+
* un accordeon exclusif, qui ne peut pas tout ouvrir.
|
|
1549
|
+
*/
|
|
1550
|
+
export declare class StAccordion {
|
|
1551
|
+
private readonly fenetre;
|
|
1552
|
+
private readonly nomNatif;
|
|
1553
|
+
/** Une seule section ouverte a la fois. */
|
|
1554
|
+
readonly exclusif: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1555
|
+
/** Un bouton « Tout afficher » avant les sections (sans effet si `exclusif`). */
|
|
1556
|
+
readonly toutAfficher: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1557
|
+
/** Les `valeur` des sections ouvertes, dans l'ordre des sections. */
|
|
1558
|
+
readonly ouverts: import("@angular/core").ModelSignal<readonly string[]>;
|
|
1559
|
+
protected readonly sections: import("@angular/core").Signal<readonly StDisclosure[]>;
|
|
1560
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
1561
|
+
/**
|
|
1562
|
+
* Le `name` natif des `details` (D86). La prise en charge se lit sur le prototype : Firefox 129
|
|
1563
|
+
* ignore l'attribut, et l'accordeon referme alors lui-meme.
|
|
1564
|
+
*/
|
|
1565
|
+
private readonly nomPrisEnCharge;
|
|
1566
|
+
protected readonly boutonToutAfficher: import("@angular/core").Signal<boolean>;
|
|
1567
|
+
protected readonly toutEstOuvert: import("@angular/core").Signal<boolean>;
|
|
1568
|
+
/** Ce que l'accordeon a lui-meme ecrit dans `ouverts` : ce n'est pas une demande de l'appelant. */
|
|
1569
|
+
private derniereEcriture;
|
|
1570
|
+
constructor();
|
|
1571
|
+
private sectionBasculee;
|
|
1572
|
+
/** Ouvre tout, ou replie tout quand tout est deja ouvert ; le libelle ne change pas. */
|
|
1573
|
+
protected basculerTout(): void;
|
|
1574
|
+
private clesOuvertes;
|
|
1575
|
+
private ecrire;
|
|
1576
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StAccordion, never>;
|
|
1577
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StAccordion, "st-accordion", never, {
|
|
1578
|
+
"exclusif": {
|
|
1579
|
+
"alias": "exclusif";
|
|
1580
|
+
"required": false;
|
|
1581
|
+
"isSignal": true;
|
|
1582
|
+
};
|
|
1583
|
+
"toutAfficher": {
|
|
1584
|
+
"alias": "toutAfficher";
|
|
1585
|
+
"required": false;
|
|
1586
|
+
"isSignal": true;
|
|
1587
|
+
};
|
|
1588
|
+
"ouverts": {
|
|
1589
|
+
"alias": "ouverts";
|
|
1590
|
+
"required": false;
|
|
1591
|
+
"isSignal": true;
|
|
1592
|
+
};
|
|
1593
|
+
}, {
|
|
1594
|
+
"ouverts": "ouvertsChange";
|
|
1595
|
+
}, ["sections"], ["*"], true, never>;
|
|
1596
|
+
}
|
|
1597
|
+
/**
|
|
1598
|
+
* Un fichier stocke, a telecharger : releve, contrat, justificatif.
|
|
1599
|
+
*
|
|
1600
|
+
* ```html
|
|
1601
|
+
* <st-attachment nom="Releve de septembre 2026" type="PDF" [taille]="240000" [lien]="adresse" />
|
|
1602
|
+
* <st-attachment nom="Contrat" type="PDF" [taille]="512000" (telechargement)="telecharger()" />
|
|
1603
|
+
* ```
|
|
1604
|
+
*
|
|
1605
|
+
* ⚠️ **Le nom du lien dit le fichier** (WCAG 2.4.4) : « Releve de septembre 2026 (PDF, 240 ko) »,
|
|
1606
|
+
* a l'ecran comme au lecteur d'ecran — jamais « Telecharger » seul. Le type est un libelle clair
|
|
1607
|
+
* donne par l'application (« PDF »), jamais un type MIME.
|
|
1608
|
+
*
|
|
1609
|
+
* ⚠️ **Un lien si l'adresse est connue, sinon un bouton.** `lien` rend un `a[download]` ; sans
|
|
1610
|
+
* lien, un bouton emet `telechargement` : l'application demande alors une adresse de lecture
|
|
1611
|
+
* COURTE, a chaque clic (SEC-4), et l'ouvre. `nouvelOnglet` ouvre un PDF que le navigateur
|
|
1612
|
+
* affiche, au lieu de le telecharger, et le dit (« nouvelle fenetre »).
|
|
1613
|
+
*
|
|
1614
|
+
* ⚠️ **Le nom s'affiche sans commandes de direction** (`nomAffichable`) et dans un ilot de gauche
|
|
1615
|
+
* a droite : `facture\u202efdp.exe` ne se presente pas en PDF. Aucun apercu, aucun HTML du nom.
|
|
1616
|
+
*/
|
|
1617
|
+
export declare class StAttachment {
|
|
1618
|
+
private readonly document;
|
|
1619
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
1620
|
+
private readonly locale;
|
|
1621
|
+
readonly nom: import("@angular/core").InputSignal<string>;
|
|
1622
|
+
/** Le type en clair : « PDF », « CSV », jamais `application/pdf`. */
|
|
1623
|
+
readonly type: import("@angular/core").InputSignal<string>;
|
|
1624
|
+
/** Le poids en octets ; `null` s'il n'est pas connu (et il n'est alors pas dit). */
|
|
1625
|
+
readonly taille: import("@angular/core").InputSignal<number | null>;
|
|
1626
|
+
/** L'adresse du fichier ; `null` : un bouton, et `telechargement`. */
|
|
1627
|
+
readonly lien: import("@angular/core").InputSignal<string | null>;
|
|
1628
|
+
/** Le jour d'ajout, dit apres le nom ; une date qui n'existe pas n'est pas dite. */
|
|
1629
|
+
readonly date: import("@angular/core").InputSignal<string | null>;
|
|
1630
|
+
/** Ouvrir dans un nouvel onglet plutot que telecharger (un PDF que le navigateur affiche). */
|
|
1631
|
+
readonly nouvelOnglet: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1632
|
+
/**
|
|
1633
|
+
* L'application demande l'adresse du fichier (apres `telechargement`) : le bouton le dit
|
|
1634
|
+
* (`aria-busy`, un anneau) et ne repart pas sur un second clic (audit du 2026-09-26, U-3).
|
|
1635
|
+
*/
|
|
1636
|
+
readonly enAttente: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1637
|
+
/** Sans `lien` : l'application demande l'adresse du fichier, puis l'ouvre. */
|
|
1638
|
+
readonly telechargement: import("@angular/core").OutputEmitterRef<void>;
|
|
1639
|
+
protected demander(): void;
|
|
1640
|
+
protected readonly nomAffiche: import("@angular/core").Signal<string>;
|
|
1641
|
+
protected readonly precision: import("@angular/core").Signal<string>;
|
|
1642
|
+
protected readonly icone: import("@angular/core").Signal<"code" | "menu" | "accessibilite" | "appareils" | "arborescence" | "asterisque" | "badge-coche" | "banque" | "batiment" | "bifurcation" | "billets" | "billets-envoi" | "billets-pile" | "boite" | "boite-de-reception" | "bouclier" | "bouclier-alerte" | "bouclier-coche" | "bouclier-coeur" | "bouclier-croix" | "bouclier-moitie" | "bouclier-recherche" | "bouclier-utilisateur" | "boussole" | "bouton-curseur" | "bulle-question" | "cadenas" | "cadenas-horloge" | "cadenas-ouvert" | "cadre-pied" | "cadre-texte" | "calendrier" | "calendrier-evenement" | "calendrier-horloge" | "calendrier-jour" | "calques" | "carte-bancaire" | "carte-bancaire-barre" | "carte-bancaire-cadenas" | "carte-contact" | "carte-identite" | "cartes-empilees" | "case-cochee" | "casse" | "cercle" | "cercle-alerte" | "cercle-chevron-bas" | "cercle-coche" | "cercle-coche-ouvert" | "cercle-croix" | "cercle-info" | "cercle-moins" | "cercle-plus" | "cercle-question" | "certificat" | "chandelier" | "chargement" | "cheque" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "chevrons-droite" | "chevrons-haut-bas" | "cle" | "cloche" | "cloche-sonnerie" | "coche" | "code-qr" | "code-qr-scanner" | "coffre-fort" | "colonnes" | "connexion" | "contraste" | "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-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">;
|
|
1643
|
+
/** `2026-02-30` a la forme d'une date : lue telle quelle, elle s'afficherait « 2 mars 2026 ». */
|
|
1644
|
+
protected readonly dateAffichee: import("@angular/core").Signal<string | null>;
|
|
1645
|
+
/**
|
|
1646
|
+
* Le lien pose : seulement s'il reste sur l'origine de la page (`http(s)`, ou `blob:` de la page).
|
|
1647
|
+
* Sinon le document se telecharge par le bouton, qui emet `telechargement` (audit du 2026-09-27,
|
|
1648
|
+
* A-9) : un `data:` ou une autre origine ne se pose jamais sous le nom de confiance du fichier.
|
|
1649
|
+
*/
|
|
1650
|
+
protected readonly lienSur: import("@angular/core").Signal<string | null>;
|
|
1651
|
+
constructor();
|
|
1652
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StAttachment, never>;
|
|
1653
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StAttachment, "st-attachment", never, {
|
|
1654
|
+
"nom": {
|
|
1655
|
+
"alias": "nom";
|
|
1656
|
+
"required": true;
|
|
1657
|
+
"isSignal": true;
|
|
1658
|
+
};
|
|
1659
|
+
"type": {
|
|
1660
|
+
"alias": "type";
|
|
1661
|
+
"required": true;
|
|
1662
|
+
"isSignal": true;
|
|
1663
|
+
};
|
|
1664
|
+
"taille": {
|
|
1665
|
+
"alias": "taille";
|
|
1666
|
+
"required": false;
|
|
1667
|
+
"isSignal": true;
|
|
1668
|
+
};
|
|
1669
|
+
"lien": {
|
|
1670
|
+
"alias": "lien";
|
|
1671
|
+
"required": false;
|
|
1672
|
+
"isSignal": true;
|
|
1673
|
+
};
|
|
1674
|
+
"date": {
|
|
1675
|
+
"alias": "date";
|
|
1676
|
+
"required": false;
|
|
1677
|
+
"isSignal": true;
|
|
1678
|
+
};
|
|
1679
|
+
"nouvelOnglet": {
|
|
1680
|
+
"alias": "nouvelOnglet";
|
|
1681
|
+
"required": false;
|
|
1682
|
+
"isSignal": true;
|
|
1683
|
+
};
|
|
1684
|
+
"enAttente": {
|
|
1685
|
+
"alias": "enAttente";
|
|
1686
|
+
"required": false;
|
|
1687
|
+
"isSignal": true;
|
|
1688
|
+
};
|
|
1689
|
+
}, {
|
|
1690
|
+
"telechargement": "telechargement";
|
|
1691
|
+
}, never, never, true, never>;
|
|
1692
|
+
}
|
|
1693
|
+
/** Un document stocke, tel qu'une liste le montre : l'application le decrit, rien n'est lu. */
|
|
1694
|
+
export interface DocumentAffiche {
|
|
1695
|
+
/** Identifiant stable : suivi de la ligne, et valeur des sorties. */
|
|
1696
|
+
readonly cle: string;
|
|
1697
|
+
readonly nom: string;
|
|
1698
|
+
/** Le type en clair : « PDF », jamais `application/pdf`. */
|
|
1699
|
+
readonly type: string;
|
|
1700
|
+
readonly etat: EtatDeDocument;
|
|
1701
|
+
/** Le poids en octets. */
|
|
1702
|
+
readonly taille?: number | null;
|
|
1703
|
+
/** Le jour d'ajout. */
|
|
1704
|
+
readonly ajouteLe?: DateIso | null;
|
|
1705
|
+
/** Une adresse directe ; sans elle, `telechargement` emet la cle. */
|
|
1706
|
+
readonly lien?: string | null;
|
|
1707
|
+
/** L'adresse est demandee (apres `telechargement`) : le document le dit, et attend. */
|
|
1708
|
+
readonly enAttente?: boolean;
|
|
1709
|
+
/** Une precision d'usage (« Pour le dossier de pret »). */
|
|
1710
|
+
readonly description?: string | null;
|
|
1711
|
+
/** Le motif d'un refus, dit sous le nom. */
|
|
1712
|
+
readonly raison?: string | null;
|
|
1713
|
+
}
|
|
1714
|
+
type ActionDeDocument = 'voir' | 'deposer' | 'remplacer' | 'supprimer';
|
|
1715
|
+
/**
|
|
1716
|
+
* Documents stockes : releves, justificatifs deposes, pieces d'une reclamation, exports prets.
|
|
1717
|
+
*
|
|
1718
|
+
* ```html
|
|
1719
|
+
* <st-document-list etiquette="Justificatifs du dossier" [documents]="justificatifs()"
|
|
1720
|
+
* remplacable supprimable (telechargement)="ouvrir($event)" (depot)="deposer($event)" />
|
|
1721
|
+
* ```
|
|
1722
|
+
*
|
|
1723
|
+
* ⚠️ **Seul un document sain ou expire se telecharge.** Un document en analyse, refuse (infecte
|
|
1724
|
+
* compris) ou supprime n'a PAS de lien : il n'est pas « desactive », il est absent (CP-7). L'etat se
|
|
1725
|
+
* dit en texte et par une forme d'icone, jamais par la seule couleur.
|
|
1726
|
+
*
|
|
1727
|
+
* ⚠️ **Chaque action nomme son document** : texte court visible (« Remplacer »), nom accessible
|
|
1728
|
+
* « Remplacer <document> » ; cinq boutons « Supprimer » identiques seraient un defaut (WCAG
|
|
1729
|
+
* 2.4.6). Une suppression se confirme par l'application, avec le nom du document
|
|
1730
|
+
* (`st-confirm-dialog`) : la liste ne fait qu'emettre.
|
|
1731
|
+
*
|
|
1732
|
+
* ⚠️ **Le focus ne tombe jamais au corps de la page** (audit UI du 2026-09-27, D-25) : quand un
|
|
1733
|
+
* changement de `documents` retire ce qui avait le focus (« Deposer » d'un document passe en
|
|
1734
|
+
* analyse, « Supprimer » d'un document parti), il revient a la ligne de ce document, sinon a celle
|
|
1735
|
+
* qui a pris sa place — la garde de `st-file-upload`. Chaque changement d'etat se dit, nom compris
|
|
1736
|
+
* (« RIB : Analyse en cours ») ; l'etat de depart, non.
|
|
1737
|
+
*
|
|
1738
|
+
* Le lien et son nom explicite viennent de `st-attachment`. Aucune adresse n'est demandee ici : sans
|
|
1739
|
+
* `lien`, `telechargement` emet la cle, et l'application obtient une adresse COURTE (SEC-4).
|
|
1740
|
+
* `apercevable` ajoute « Voir » a un document sain ou expire : `apercu` emet sa cle, et
|
|
1741
|
+
* l'application l'affiche (une adresse courte, son propre lecteur) ; aucun lecteur ici (lot 258).
|
|
1742
|
+
*/
|
|
1743
|
+
export declare class StDocumentList {
|
|
1744
|
+
/**
|
|
1745
|
+
* Un texte de donnees : sans commande de direction, et isole par son element (`dir="auto"` ou
|
|
1746
|
+
* `<bdi>`), il ne reordonne ni lui-meme ni ce qui l'entoure (audit du 2026-09-26, S-1 ; audit
|
|
1747
|
+
* etendu du 2026-09-27, A-2).
|
|
1748
|
+
*/
|
|
1749
|
+
protected readonly affichable: typeof sansCommandesDeDirection;
|
|
1750
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
1751
|
+
private readonly locale;
|
|
1752
|
+
private readonly element;
|
|
1753
|
+
private readonly document;
|
|
1754
|
+
private readonly injecteur;
|
|
1755
|
+
readonly documents: import("@angular/core").InputSignal<readonly DocumentAffiche[]>;
|
|
1756
|
+
/** Le nom de la liste (« Justificatifs du dossier »), lu en tete. */
|
|
1757
|
+
readonly etiquette: import("@angular/core").InputSignal<string>;
|
|
1758
|
+
/** Un document depose, hors analyse, se remplace. */
|
|
1759
|
+
readonly remplacable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1760
|
+
/** Un document depose se supprime (l'application confirme). */
|
|
1761
|
+
readonly supprimable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1762
|
+
/** Un document a fournir se depose. */
|
|
1763
|
+
readonly deposable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1764
|
+
/** Un document sain ou expire se voit (« Voir <document> ») : `apercu` emet sa cle. */
|
|
1765
|
+
readonly apercevable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1766
|
+
readonly telechargement: import("@angular/core").OutputEmitterRef<string>;
|
|
1767
|
+
readonly depot: import("@angular/core").OutputEmitterRef<string>;
|
|
1768
|
+
readonly remplacement: import("@angular/core").OutputEmitterRef<string>;
|
|
1769
|
+
readonly suppression: import("@angular/core").OutputEmitterRef<string>;
|
|
1770
|
+
/** L'application affiche le document (adresse courte, SEC-4) : la cle. */
|
|
1771
|
+
readonly apercu: import("@angular/core").OutputEmitterRef<string>;
|
|
1772
|
+
private readonly catalogue;
|
|
1773
|
+
protected readonly annonce: AnnonceLocale;
|
|
1774
|
+
protected readonly lignes: import("@angular/core").Signal<{
|
|
1775
|
+
cle: string;
|
|
1776
|
+
document: DocumentAffiche;
|
|
1777
|
+
nom: string;
|
|
1778
|
+
iconeDuFichier: "code" | "menu" | "accessibilite" | "appareils" | "arborescence" | "asterisque" | "badge-coche" | "banque" | "batiment" | "bifurcation" | "billets" | "billets-envoi" | "billets-pile" | "boite" | "boite-de-reception" | "bouclier" | "bouclier-alerte" | "bouclier-coche" | "bouclier-coeur" | "bouclier-croix" | "bouclier-moitie" | "bouclier-recherche" | "bouclier-utilisateur" | "boussole" | "bouton-curseur" | "bulle-question" | "cadenas" | "cadenas-horloge" | "cadenas-ouvert" | "cadre-pied" | "cadre-texte" | "calendrier" | "calendrier-evenement" | "calendrier-horloge" | "calendrier-jour" | "calques" | "carte-bancaire" | "carte-bancaire-barre" | "carte-bancaire-cadenas" | "carte-contact" | "carte-identite" | "cartes-empilees" | "case-cochee" | "casse" | "cercle" | "cercle-alerte" | "cercle-chevron-bas" | "cercle-coche" | "cercle-coche-ouvert" | "cercle-croix" | "cercle-info" | "cercle-moins" | "cercle-plus" | "cercle-question" | "certificat" | "chandelier" | "chargement" | "cheque" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "chevrons-droite" | "chevrons-haut-bas" | "cle" | "cloche" | "cloche-sonnerie" | "coche" | "code-qr" | "code-qr-scanner" | "coffre-fort" | "colonnes" | "connexion" | "contraste" | "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-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";
|
|
1779
|
+
telechargeable: boolean;
|
|
1780
|
+
ton: import("@starterlib/util").TonSemantique;
|
|
1781
|
+
icone: "horloge" | null;
|
|
1782
|
+
actions: ActionDeDocument[];
|
|
1783
|
+
}[]>;
|
|
1784
|
+
constructor();
|
|
1785
|
+
protected texteDe(action: ActionDeDocument): string;
|
|
1786
|
+
/**
|
|
1787
|
+
* « Supprimer RIB » : le texte visible, suivi du nom du document. Le nom commence par le texte
|
|
1788
|
+
* visible (WCAG 2.5.3) : une commande vocale « Supprimer » atteint le bouton.
|
|
1789
|
+
*/
|
|
1790
|
+
protected nomDeLAction(action: ActionDeDocument, nom: string): string;
|
|
1791
|
+
protected agir(action: ActionDeDocument, cle: string): void;
|
|
1792
|
+
/**
|
|
1793
|
+
* Le focus est dans une ligne quand les documents changent : si le rendu retire ce qui l'avait,
|
|
1794
|
+
* il revient a la meme ligne, sinon a celle qui a pris sa place (la ligne « liste vide »
|
|
1795
|
+
* comprise). Le focus parti ailleurs entre-temps n'est jamais repris.
|
|
1796
|
+
*/
|
|
1797
|
+
private garderLeFocus;
|
|
1798
|
+
/**
|
|
1799
|
+
* Chaque document dont l'etat change se dit, avec son nom (« RIB : Analyse en cours ») ;
|
|
1800
|
+
* plusieurs a la fois, en UNE annonce jointe dans la langue (`Intl.ListFormat`), et non la
|
|
1801
|
+
* derniere seule.
|
|
1802
|
+
*/
|
|
1803
|
+
private annoncerLesEtats;
|
|
1804
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StDocumentList, never>;
|
|
1805
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StDocumentList, "st-document-list", never, {
|
|
1806
|
+
"documents": {
|
|
1807
|
+
"alias": "documents";
|
|
1808
|
+
"required": true;
|
|
1809
|
+
"isSignal": true;
|
|
1810
|
+
};
|
|
1811
|
+
"etiquette": {
|
|
1812
|
+
"alias": "etiquette";
|
|
1813
|
+
"required": true;
|
|
1814
|
+
"isSignal": true;
|
|
1815
|
+
};
|
|
1816
|
+
"remplacable": {
|
|
1817
|
+
"alias": "remplacable";
|
|
1818
|
+
"required": false;
|
|
1819
|
+
"isSignal": true;
|
|
1820
|
+
};
|
|
1821
|
+
"supprimable": {
|
|
1822
|
+
"alias": "supprimable";
|
|
1823
|
+
"required": false;
|
|
1824
|
+
"isSignal": true;
|
|
1825
|
+
};
|
|
1826
|
+
"deposable": {
|
|
1827
|
+
"alias": "deposable";
|
|
1828
|
+
"required": false;
|
|
1829
|
+
"isSignal": true;
|
|
1830
|
+
};
|
|
1831
|
+
"apercevable": {
|
|
1832
|
+
"alias": "apercevable";
|
|
1833
|
+
"required": false;
|
|
1834
|
+
"isSignal": true;
|
|
1835
|
+
};
|
|
1836
|
+
}, {
|
|
1837
|
+
"telechargement": "telechargement";
|
|
1838
|
+
"depot": "depot";
|
|
1839
|
+
"remplacement": "remplacement";
|
|
1840
|
+
"suppression": "suppression";
|
|
1841
|
+
"apercu": "apercu";
|
|
1842
|
+
}, never, never, true, never>;
|
|
1843
|
+
}
|
|
1844
|
+
/** Une ligne a verifier : le terme, sa valeur, et ou la modifier. */
|
|
1845
|
+
export interface ElementDeVerification extends ElementDeDescription {
|
|
1846
|
+
/**
|
|
1847
|
+
* Une valeur attendue : `description` nulle, elle se dit « A renseigner », en mots et par une
|
|
1848
|
+
* icone, meme quand un gabarit rend la valeur riche.
|
|
1849
|
+
*/
|
|
1850
|
+
readonly obligatoire?: boolean;
|
|
1851
|
+
/**
|
|
1852
|
+
* La route de l'etape ou de la page qui modifie la valeur (`'/virement/montant'`). Sans lien,
|
|
1853
|
+
* « Modifier » est un bouton qui emet `modification` : un parcours a une seule route change
|
|
1854
|
+
* d'etape sans naviguer.
|
|
1855
|
+
*/
|
|
1856
|
+
readonly lien?: string | null;
|
|
1857
|
+
/** Le champ vise dans cette page : on revient AU champ, pas en haut de l'etape. */
|
|
1858
|
+
readonly fragment?: string | null;
|
|
1859
|
+
/** `false` : une valeur qui ne se modifie pas ici ; la ligne n'a aucune action. */
|
|
1860
|
+
readonly modifiable?: boolean;
|
|
1861
|
+
}
|
|
1862
|
+
/**
|
|
1863
|
+
* Liste de verification : l'etape « Verifier » d'un virement, le recapitulatif d'un dossier avant
|
|
1864
|
+
* envoi, la page « Vos informations » d'un profil. Chaque ligne dit un terme, sa valeur, et mene a
|
|
1865
|
+
* l'endroit qui la modifie.
|
|
1866
|
+
*
|
|
1867
|
+
* ```html
|
|
1868
|
+
* <st-review-list [elements]="[
|
|
1869
|
+
* { cle: 'beneficiaire', terme: 'Beneficiaire', description: nom(), lien: '/virement/qui' },
|
|
1870
|
+
* { cle: 'montant', terme: 'Montant', description: montantEnTexte(), obligatoire: true },
|
|
1871
|
+
* ]" (modification)="allerA($event)">
|
|
1872
|
+
* <ng-template stDescription="montant"><st-money [valeur]="montant()" /></ng-template>
|
|
1873
|
+
* </st-review-list>
|
|
1874
|
+
* ```
|
|
1875
|
+
*
|
|
1876
|
+
* ⚠️ **Chaque « Modifier » nomme son terme** : texte visible « Modifier », nom accessible
|
|
1877
|
+
* « Modifier Montant ». Cinq « Modifier » identiques seraient un defaut (WCAG 2.4.6), et le nom
|
|
1878
|
+
* commence par le texte visible (WCAG 2.5.3) : une commande vocale « Modifier » l'atteint.
|
|
1879
|
+
*
|
|
1880
|
+
* ⚠️ **Une valeur obligatoire manquante se dit** : « A renseigner », en mots et par une icone,
|
|
1881
|
+
* jamais par la seule couleur. Une valeur facultative absente se dit comme dans
|
|
1882
|
+
* `st-description-list`, dont la liste reprend le `dl` et la disposition de conteneur.
|
|
1883
|
+
*
|
|
1884
|
+
* Une valeur riche (montant, IBAN masque) passe par le gabarit `stDescription`. Un element
|
|
1885
|
+
* `obligatoire` garde sa valeur en texte dans `description` : nulle, elle dit l'absence, gabarit
|
|
1886
|
+
* ou non.
|
|
1887
|
+
*/
|
|
1888
|
+
/**
|
|
1889
|
+
* Une ligne de la revue : celle de la liste de description, et ce que la revue y ajoute (la valeur
|
|
1890
|
+
* obligatoire manquante, le nom de l'action « Modifier <terme> »). Annotee, elle garde au rapport
|
|
1891
|
+
* d'API le nom de son contexte (audit du 2026-09-27, Q-11).
|
|
1892
|
+
*/
|
|
1893
|
+
interface LigneDeRevue extends LigneDeDescription<ElementDeVerification> {
|
|
1894
|
+
readonly manquant: boolean;
|
|
1895
|
+
readonly nomDeLAction: string;
|
|
1896
|
+
}
|
|
1897
|
+
export declare class StReviewList {
|
|
1898
|
+
/**
|
|
1899
|
+
* Une valeur est une donnee : sans commande de direction, et ISOLEE (`<bdi>`) pour qu'un montant
|
|
1900
|
+
* ou un nom ne se lise pas a l'envers de droite a gauche (audit du 2026-09-26, S-1 et U-1).
|
|
1901
|
+
*/
|
|
1902
|
+
protected readonly affichable: typeof sansCommandesDeDirection;
|
|
1903
|
+
protected readonly libelles: Signal<import("@starterlib/ui").LibellesUi>;
|
|
1904
|
+
readonly elements: import("@angular/core").InputSignal<readonly ElementDeVerification[]>;
|
|
1905
|
+
/** La cle (a defaut le terme) d'une ligne sans `lien` dont « Modifier » est active. */
|
|
1906
|
+
readonly modification: import("@angular/core").OutputEmitterRef<string>;
|
|
1907
|
+
private readonly gabarits;
|
|
1908
|
+
protected readonly lignes: Signal<readonly LigneDeRevue[]>;
|
|
1909
|
+
protected modifier(element: ElementDeVerification): void;
|
|
1910
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StReviewList, never>;
|
|
1911
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StReviewList, "st-review-list", never, {
|
|
1912
|
+
"elements": {
|
|
1913
|
+
"alias": "elements";
|
|
1914
|
+
"required": true;
|
|
1915
|
+
"isSignal": true;
|
|
1916
|
+
};
|
|
1917
|
+
}, {
|
|
1918
|
+
"modification": "modification";
|
|
1919
|
+
}, ["gabarits"], never, true, never>;
|
|
1920
|
+
}
|
|
1921
|
+
/** Contexte du gabarit d'acteur : l'acteur de l'evenement, et l'evenement lui-meme. */
|
|
1922
|
+
export interface ContexteDActeur {
|
|
1923
|
+
/**
|
|
1924
|
+
* L'acteur, son nom sans commande de direction ; `precision` et `sourceImage` a `null` quand
|
|
1925
|
+
* l'evenement ne les donne pas.
|
|
1926
|
+
*/
|
|
1927
|
+
readonly $implicit: Required<ActeurDEvenement>;
|
|
1928
|
+
readonly evenement: EvenementDeChronologie;
|
|
1929
|
+
}
|
|
1930
|
+
/**
|
|
1931
|
+
* L'acteur d'un evenement rendu par l'application : une personne (`st-person`, dans
|
|
1932
|
+
* `@starterlib/ui/donnees`, que `@starterlib/ui/listes` n'importe pas), a la place du nom dans la
|
|
1933
|
+
* phrase « par … » du dictionnaire. Un gabarit pour toute la chronologie ; un evenement sans acteur
|
|
1934
|
+
* ne l'appelle pas.
|
|
1935
|
+
*
|
|
1936
|
+
* ```html
|
|
1937
|
+
* <st-timeline etiquette="Journal du dossier" [evenements]="journal()">
|
|
1938
|
+
* <ng-template stActeurDEvenement let-acteur>
|
|
1939
|
+
* <st-person taille="sm" [nom]="acteur.nom" [sourceImage]="acteur.sourceImage" />
|
|
1940
|
+
* </ng-template>
|
|
1941
|
+
* </st-timeline>
|
|
1942
|
+
* ```
|
|
1943
|
+
*
|
|
1944
|
+
* Le nom reste du texte, l'avatar decoratif : c'est la regle de `st-person`.
|
|
1945
|
+
*/
|
|
1946
|
+
export declare class StActeurDEvenement {
|
|
1947
|
+
readonly gabarit: TemplateRef<ContexteDActeur>;
|
|
1948
|
+
static ngTemplateContextGuard(_directive: StActeurDEvenement, _contexte: unknown): _contexte is ContexteDActeur;
|
|
1949
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StActeurDEvenement, never>;
|
|
1950
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StActeurDEvenement, "ng-template[stActeurDEvenement]", never, {}, {}, never, never, true, never>;
|
|
1951
|
+
}
|
|
1952
|
+
/** Contexte d'un gabarit de detail. */
|
|
1953
|
+
export interface ContexteDEvenement {
|
|
1954
|
+
readonly $implicit: EvenementDeChronologie;
|
|
1955
|
+
}
|
|
1956
|
+
/**
|
|
1957
|
+
* Detail riche d'un evenement : un avant et apres, une piece jointe, un montant.
|
|
1958
|
+
*
|
|
1959
|
+
* ```html
|
|
1960
|
+
* <ng-template stDetailDEvenement="plafond" let-evenement>
|
|
1961
|
+
* <st-attachment nom="Avenant" type="PDF" [taille]="84000" [lien]="avenant()" />
|
|
1962
|
+
* </ng-template>
|
|
1963
|
+
* ```
|
|
1964
|
+
*/
|
|
1965
|
+
export declare class StDetailDEvenement {
|
|
1966
|
+
readonly cle: import("@angular/core").InputSignal<string>;
|
|
1967
|
+
readonly gabarit: TemplateRef<ContexteDEvenement>;
|
|
1968
|
+
static ngTemplateContextGuard(_directive: StDetailDEvenement, _contexte: unknown): _contexte is ContexteDEvenement;
|
|
1969
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StDetailDEvenement, never>;
|
|
1970
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StDetailDEvenement, "ng-template[stDetailDEvenement]", never, {
|
|
1971
|
+
"cle": {
|
|
1972
|
+
"alias": "stDetailDEvenement";
|
|
1973
|
+
"required": true;
|
|
1974
|
+
"isSignal": true;
|
|
1975
|
+
};
|
|
1976
|
+
}, {}, never, never, true, never>;
|
|
1977
|
+
}
|
|
1978
|
+
/** Le ton d'un evenement : un mot lu avant son titre, et la forme de son repere. */
|
|
1979
|
+
export type TonDEvenement = Extract<Ton, 'neutre' | 'information' | 'succes' | 'avertissement' | 'danger'>;
|
|
1980
|
+
export type OrdreDeChronologie = 'recent-d-abord' | 'ancien-d-abord';
|
|
1981
|
+
/**
|
|
1982
|
+
* Qui a agi, quand la chronologie en sait plus que le nom : sa precision (role, service) et sa
|
|
1983
|
+
* photo, que le gabarit `stActeurDEvenement` passe a `st-person`. Sans gabarit, le nom seul.
|
|
1984
|
+
*/
|
|
1985
|
+
export interface ActeurDEvenement {
|
|
1986
|
+
readonly nom: string;
|
|
1987
|
+
/** Le role, le service, le matricule : deja traduits. */
|
|
1988
|
+
readonly precision?: string | null;
|
|
1989
|
+
readonly sourceImage?: string | null;
|
|
1990
|
+
}
|
|
1991
|
+
/** Un evenement date : ce qui est arrive, quand, et qui l'a fait. */
|
|
1992
|
+
export interface EvenementDeChronologie {
|
|
1993
|
+
/** Identifiant stable : suivi de la ligne, et cle du gabarit `stDetailDEvenement`. */
|
|
1994
|
+
readonly cle: string;
|
|
1995
|
+
/**
|
|
1996
|
+
* Un instant ISO 8601 (`2026-09-17T07:30:00Z`). Sans decalage, une heure de mur lue dans le
|
|
1997
|
+
* fuseau de l'application ; un jour seul (`2026-09-17`) s'affiche sans heure.
|
|
1998
|
+
*/
|
|
1999
|
+
readonly instant: string;
|
|
2000
|
+
readonly titre: string;
|
|
2001
|
+
readonly ton?: TonDEvenement;
|
|
2002
|
+
/** Une forme plus precise que celle du ton : `horloge` pour une attente. */
|
|
2003
|
+
readonly icone?: Icone | null;
|
|
2004
|
+
/** Qui a agi : un nom affiche, un service ; ou une personne, pour `stActeurDEvenement`. */
|
|
2005
|
+
readonly acteur?: string | ActeurDEvenement | null;
|
|
2006
|
+
/** Une precision en texte ; un detail riche passe par le gabarit `stDetailDEvenement`. */
|
|
2007
|
+
readonly description?: string | null;
|
|
2008
|
+
}
|
|
2009
|
+
/** L'acteur d'une ligne, autour du trou de la phrase du dictionnaire (« par … »). */
|
|
2010
|
+
interface ActeurDeLigne {
|
|
2011
|
+
readonly avant: string;
|
|
2012
|
+
readonly apres: string;
|
|
2013
|
+
readonly personne: Required<ActeurDEvenement>;
|
|
2014
|
+
}
|
|
2015
|
+
/**
|
|
2016
|
+
* Une ligne rendue : l'evenement, son instant lu, sa date ecrite, son ton, son gabarit riche et son
|
|
2017
|
+
* acteur autour du trou de la phrase. Annotee, elle garde au rapport d'API le nom de son contexte
|
|
2018
|
+
* (audit du 2026-09-27, Q-11).
|
|
2019
|
+
*/
|
|
2020
|
+
interface LigneDeChronologie {
|
|
2021
|
+
readonly evenement: EvenementDeChronologie;
|
|
2022
|
+
readonly instant: number | null;
|
|
2023
|
+
readonly iso: string | null;
|
|
2024
|
+
/** La date et l'heure (« 17 sept. 2026, 09:30 »), ou le jour seul. */
|
|
2025
|
+
readonly date: string | null;
|
|
2026
|
+
/** L'heure seule (« 09:30 »), affichee sous l'en-tete de son jour ; `null` pour un jour seul. */
|
|
2027
|
+
readonly heure: string | null;
|
|
2028
|
+
/** La cle du jour de l'evenement dans le fuseau de l'application (`AAAA-MM-JJ`). */
|
|
2029
|
+
readonly jour: string;
|
|
2030
|
+
readonly ton: TonDEvenement;
|
|
2031
|
+
readonly icone: Icone;
|
|
2032
|
+
readonly prefixe: string | null;
|
|
2033
|
+
readonly gabarit: TemplateRef<ContexteDEvenement> | null;
|
|
2034
|
+
readonly acteur: ActeurDeLigne | null;
|
|
2035
|
+
}
|
|
2036
|
+
/** Un jour de la chronologie (`groupesParJour`) : son en-tete, et ses evenements dans l'ordre. */
|
|
2037
|
+
interface GroupeDeChronologie {
|
|
2038
|
+
readonly cle: string;
|
|
2039
|
+
readonly identifiant: string;
|
|
2040
|
+
/** Le jour ecrit (« jeudi 17 septembre 2026 ») ; « Date inconnue » pour les illisibles. */
|
|
2041
|
+
readonly libelle: string;
|
|
2042
|
+
readonly iso: string | null;
|
|
2043
|
+
readonly lignes: readonly LigneDeChronologie[];
|
|
2044
|
+
}
|
|
2045
|
+
/**
|
|
2046
|
+
* Chronologie : le suivi d'une reclamation, le cycle d'un virement, l'historique d'un dossier,
|
|
2047
|
+
* un journal d'audit. Chaque evenement dit ce qui est arrive, quand, et qui l'a fait.
|
|
2048
|
+
*
|
|
2049
|
+
* ```html
|
|
2050
|
+
* <st-timeline etiquette="Historique du virement" [evenements]="historique()" [niveauDuTitre]="3" />
|
|
2051
|
+
* ```
|
|
2052
|
+
*
|
|
2053
|
+
* ⚠️ **Une liste ordonnee, triee par le composant** (CP-13) : `ordre` dit le sens, le plus recent
|
|
2054
|
+
* d'abord par defaut, et le nom de la liste le dit apres l'etiquette. L'instant ABSOLU est affiche et lu, dans le fuseau de l'application
|
|
2055
|
+
* (« 17 sept. 2026, 09:30 ») : un relatif seul (« il y a 2 h ») ne dit pas quand, et un journal
|
|
2056
|
+
* d'audit doit le dire. Un instant illisible se dit « Date inconnue », en fin de liste.
|
|
2057
|
+
* `relatif` ajoute le relatif en COMPLEMENT, a l'oeil seulement (« (il y a 2 h) ») : muet pour
|
|
2058
|
+
* les lecteurs d'ecran, qui lisent l'absolu, et tu au-dela de sept jours.
|
|
2059
|
+
*
|
|
2060
|
+
* ⚠️ **Le ton se lit** (CP-14) : un mot masque ouvre le titre (« Succes : ») et le repere change
|
|
2061
|
+
* de FORME d'un ton a l'autre, jamais de seule couleur. Le repere et le trait qui relie les
|
|
2062
|
+
* evenements sont decoratifs ; le trait est une bordure, qui reste visible sous `forced-colors`.
|
|
2063
|
+
*
|
|
2064
|
+
* `groupesParJour` range les evenements sous l'en-tete de leur jour, dans le fuseau de
|
|
2065
|
+
* l'application : une liste par jour, nommee par sa date, dans la liste de la chronologie ; sous
|
|
2066
|
+
* son jour, l'evenement n'affiche que l'heure, et lit toujours sa date. `compact` pose le titre et
|
|
2067
|
+
* l'instant sur une ligne, pour un journal de back-office.
|
|
2068
|
+
*
|
|
2069
|
+
* ⚠️ **`focus()` va au premier evenement AJOUTE** depuis le dernier affichage (« Afficher plus »,
|
|
2070
|
+
* `st-pagination` en mode `suite`), la ou il se range dans l'ordre ; au premier apres un
|
|
2071
|
+
* remplacement ; au dernier si rien n'est arrive. Aucune annonce : la pagination dit le nombre.
|
|
2072
|
+
*
|
|
2073
|
+
* Aucune region vivante : un nouvel evenement s'annonce, s'il le faut, par l'application. Un
|
|
2074
|
+
* titre n'entre dans le plan de la page que sur demande (`niveauDuTitre`) : un journal de
|
|
2075
|
+
* cinquante lignes n'y met pas cinquante titres.
|
|
2076
|
+
*/
|
|
2077
|
+
export declare class StTimeline {
|
|
2078
|
+
/**
|
|
2079
|
+
* Titre, acteur et description sont des donnees : sans commandes de direction, et isoles, pour
|
|
2080
|
+
* qu'un nom ne reordonne pas la ligne qui l'entoure (audit du 2026-09-26, S-1).
|
|
2081
|
+
*/
|
|
2082
|
+
protected readonly affichable: typeof sansCommandesDeDirection;
|
|
2083
|
+
protected readonly libelles: Signal<LibellesUi>;
|
|
2084
|
+
private readonly locale;
|
|
2085
|
+
private readonly fuseau;
|
|
2086
|
+
private readonly element;
|
|
2087
|
+
private readonly document;
|
|
2088
|
+
private readonly identifiant;
|
|
2089
|
+
private readonly catalogue;
|
|
2090
|
+
readonly evenements: import("@angular/core").InputSignal<readonly EvenementDeChronologie[]>;
|
|
2091
|
+
/** Le nom de la liste (« Historique du virement »). */
|
|
2092
|
+
readonly etiquette: import("@angular/core").InputSignal<string>;
|
|
2093
|
+
readonly ordre: import("@angular/core").InputSignal<OrdreDeChronologie>;
|
|
2094
|
+
/** Le niveau des titres d'evenement dans le plan de la page ; `null` : aucun titre. */
|
|
2095
|
+
readonly niveauDuTitre: import("@angular/core").InputSignal<NiveauDeTitre | null>;
|
|
2096
|
+
/** Le relatif en complement de l'absolu (« (il y a 2 h) »), a l'oeil seulement. */
|
|
2097
|
+
readonly relatif: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
2098
|
+
/** Les evenements sous l'en-tete de leur jour. */
|
|
2099
|
+
readonly groupesParJour: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
2100
|
+
/** Titre et instant sur une ligne, reperes de 16 px : un journal de back-office. */
|
|
2101
|
+
readonly compact: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
2102
|
+
/** Evenements en cours de chargement : `aria-busy` ; sans evenement, une silhouette. */
|
|
2103
|
+
readonly chargement: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
2104
|
+
/** Nombre d'evenements de la silhouette du premier chargement. */
|
|
2105
|
+
readonly lignesAttendues: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
2106
|
+
/**
|
|
2107
|
+
* Le nom de la liste : l'etiquette, puis l'ordre (« Historique du virement, du plus recent au
|
|
2108
|
+
* plus ancien ») ; un lecteur d'ecran ne devine pas qu'une liste est antichronologique.
|
|
2109
|
+
*/
|
|
2110
|
+
protected readonly nom: Signal<string>;
|
|
2111
|
+
private readonly gabarits;
|
|
2112
|
+
protected readonly gabaritDActeur: Signal<StActeurDEvenement | undefined>;
|
|
2113
|
+
/** L'heure de reference du relatif, avancee chaque minute tant que la page est visible. */
|
|
2114
|
+
private readonly maintenant;
|
|
2115
|
+
private readonly rendu;
|
|
2116
|
+
/** La cle de l'evenement vise par le prochain `focus()` ; `null` : le dernier. */
|
|
2117
|
+
private cibleDuFocus;
|
|
2118
|
+
private clesAffichees;
|
|
2119
|
+
protected readonly lignes: Signal<readonly LigneDeChronologie[]>;
|
|
2120
|
+
/**
|
|
2121
|
+
* Les jours, dans l'ordre de leur premier evenement ; chacun ses evenements, dans l'ordre. Un
|
|
2122
|
+
* jour seul (`2026-09-17`) rejoint le jour de meme date, ou qu'il se range.
|
|
2123
|
+
*/
|
|
2124
|
+
protected readonly groupes: Signal<readonly GroupeDeChronologie[]>;
|
|
2125
|
+
/** Le relatif de chaque evenement (`relatif`) : « a l'instant », puis minutes, heures, jours. */
|
|
2126
|
+
protected readonly relatifs: Signal<ReadonlyMap<string, string>>;
|
|
2127
|
+
protected readonly squelette: Signal<boolean>;
|
|
2128
|
+
protected readonly rangsAttendus: Signal<number[]>;
|
|
2129
|
+
constructor();
|
|
2130
|
+
/**
|
|
2131
|
+
* Focus sur le premier evenement ajoute depuis le dernier affichage, sur le premier apres un
|
|
2132
|
+
* remplacement, sur le dernier si rien n'est arrive. Aucune annonce : la lecture reprend la ou
|
|
2133
|
+
* la chronologie s'est allongee, et la pagination dit le nombre.
|
|
2134
|
+
*/
|
|
2135
|
+
focus(options?: FocusOptions): void;
|
|
2136
|
+
/** Le contexte du gabarit d'acteur d'une ligne. */
|
|
2137
|
+
protected contexteDActeur(ligne: LigneDeChronologie, acteur: ActeurDeLigne): ContexteDActeur;
|
|
2138
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StTimeline, never>;
|
|
2139
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StTimeline, "st-timeline", never, {
|
|
2140
|
+
"evenements": {
|
|
2141
|
+
"alias": "evenements";
|
|
2142
|
+
"required": true;
|
|
2143
|
+
"isSignal": true;
|
|
2144
|
+
};
|
|
2145
|
+
"etiquette": {
|
|
2146
|
+
"alias": "etiquette";
|
|
2147
|
+
"required": true;
|
|
2148
|
+
"isSignal": true;
|
|
2149
|
+
};
|
|
2150
|
+
"ordre": {
|
|
2151
|
+
"alias": "ordre";
|
|
2152
|
+
"required": false;
|
|
2153
|
+
"isSignal": true;
|
|
2154
|
+
};
|
|
2155
|
+
"niveauDuTitre": {
|
|
2156
|
+
"alias": "niveauDuTitre";
|
|
2157
|
+
"required": false;
|
|
2158
|
+
"isSignal": true;
|
|
2159
|
+
};
|
|
2160
|
+
"relatif": {
|
|
2161
|
+
"alias": "relatif";
|
|
2162
|
+
"required": false;
|
|
2163
|
+
"isSignal": true;
|
|
2164
|
+
};
|
|
2165
|
+
"groupesParJour": {
|
|
2166
|
+
"alias": "groupesParJour";
|
|
2167
|
+
"required": false;
|
|
2168
|
+
"isSignal": true;
|
|
2169
|
+
};
|
|
2170
|
+
"compact": {
|
|
2171
|
+
"alias": "compact";
|
|
2172
|
+
"required": false;
|
|
2173
|
+
"isSignal": true;
|
|
2174
|
+
};
|
|
2175
|
+
"chargement": {
|
|
2176
|
+
"alias": "chargement";
|
|
2177
|
+
"required": false;
|
|
2178
|
+
"isSignal": true;
|
|
2179
|
+
};
|
|
2180
|
+
"lignesAttendues": {
|
|
2181
|
+
"alias": "lignesAttendues";
|
|
2182
|
+
"required": false;
|
|
2183
|
+
"isSignal": true;
|
|
2184
|
+
};
|
|
2185
|
+
}, {}, ["gabarits", "gabaritDActeur"], never, true, never>;
|
|
2186
|
+
}
|
|
2187
|
+
/**
|
|
2188
|
+
* Ce que `st-value-change` et `st-change-list` partagent (lot 259), interne a
|
|
2189
|
+
* `@starterlib/ui/listes` : la lecture d'une valeur et les mots masques qui l'ouvrent.
|
|
2190
|
+
*/
|
|
2191
|
+
/**
|
|
2192
|
+
* Une valeur de changement telle qu'elle se rend : son texte sans commande de direction, ou `null`
|
|
2193
|
+
* quand elle manque (absente, vide ou faite de blancs).
|
|
2194
|
+
*/
|
|
2195
|
+
declare function valeurDeChangement(valeur: string | null | undefined): string | null;
|
|
2196
|
+
/** Les mots masques qui ouvrent chaque valeur, et la langue de leur repli (D-29). */
|
|
2197
|
+
interface MotsDeChangement {
|
|
2198
|
+
readonly avant: string;
|
|
2199
|
+
readonly apres: string;
|
|
2200
|
+
readonly langue: string | null;
|
|
2201
|
+
}
|
|
2202
|
+
/**
|
|
2203
|
+
* Les mots masques « Avant : » et « Apres : » : les mots du catalogue des listes, la ponctuation
|
|
2204
|
+
* du tronc (`libelleDeChamp`), et l'espace qui les separe de la valeur lue a leur suite. A appeler
|
|
2205
|
+
* dans un contexte d'injection.
|
|
2206
|
+
*/
|
|
2207
|
+
declare function motsDeChangement(): Signal<MotsDeChangement>;
|
|
2208
|
+
/** Une phrase du dictionnaire coupee autour de sa donnee : le texte avant, et celui d'apres. */
|
|
2209
|
+
interface PhraseAutourDuTrou {
|
|
2210
|
+
readonly avant: string;
|
|
2211
|
+
readonly apres: string;
|
|
2212
|
+
}
|
|
2213
|
+
/**
|
|
2214
|
+
* « par Marie Dupont », « Plafond : », coupes autour de la donnee : la phrase garde l'ordre des
|
|
2215
|
+
* mots de sa langue, et la donnee s'isole dans son propre `<bdi>`. Isolee avec toute la phrase, la
|
|
2216
|
+
* donnee y restait un texte ouvert : un nom de droite a gauche entrainait les signes et les
|
|
2217
|
+
* chiffres qui le suivent (audit UI du 2026-09-27, D-4). Ni cle nouvelle au dictionnaire, ni
|
|
2218
|
+
* isolats FSI et PDI glisses dans le texte (ecartes pour les messages, A-3). Interne a
|
|
2219
|
+
* `@starterlib/ui/listes`.
|
|
2220
|
+
*/
|
|
2221
|
+
declare function autourDuTrou(phrase: (trou: string) => string): PhraseAutourDuTrou;
|
|
2222
|
+
/** Le cote d'un changement : l'ancienne valeur ou la nouvelle. */
|
|
2223
|
+
export type CoteDeChangement = 'avant' | 'apres';
|
|
2224
|
+
/** Contexte d'un gabarit de valeur : la valeur en texte, son cote et la cle de son changement. */
|
|
2225
|
+
export interface ContexteDeValeurDeChangement {
|
|
2226
|
+
readonly $implicit: string;
|
|
2227
|
+
readonly cote: CoteDeChangement;
|
|
2228
|
+
/** La cle du changement (`st-change-list`) ; vide dans `st-value-change`. */
|
|
2229
|
+
readonly cle: string;
|
|
2230
|
+
}
|
|
2231
|
+
/**
|
|
2232
|
+
* Valeur riche d'un changement : un montant (`st-money`), une date (`st-date`), un etat
|
|
2233
|
+
* (`st-status-pill`), une valeur sensible (`st-masked`). Le gabarit recoit la valeur NON VIDE ; une
|
|
2234
|
+
* valeur absente se dit « Non renseigne » sans lui.
|
|
2235
|
+
*
|
|
2236
|
+
* Dans `st-change-list`, `stValeurDeChangement="plafond"` rend la valeur du changement de cle
|
|
2237
|
+
* `plafond`, et un gabarit sans cle rend toutes les autres ; dans `st-value-change`, la cle est
|
|
2238
|
+
* omise.
|
|
2239
|
+
*
|
|
2240
|
+
* ```html
|
|
2241
|
+
* <!-- enEuros = (centimes: string) => montant(BigInt(centimes), 'EUR') -->
|
|
2242
|
+
* <ng-template stValeurDeChangement="plafond" let-valeur>
|
|
2243
|
+
* <st-money [valeur]="enEuros(valeur)" />
|
|
2244
|
+
* </ng-template>
|
|
2245
|
+
* ```
|
|
2246
|
+
*
|
|
2247
|
+
* ⚠️ Un gabarit plutot qu'une projection : le composant sait qu'une valeur MANQUE, et la dit ;
|
|
2248
|
+
* une projection ne le lui dirait pas. Et `@starterlib/ui/listes` n'importe pas
|
|
2249
|
+
* `@starterlib/ui/donnees` (ADR web 0003) : `st-money` et `st-masked` y entrent par l'application.
|
|
2250
|
+
*/
|
|
2251
|
+
export declare class StValeurDeChangement {
|
|
2252
|
+
/** La cle du changement rendu ; vide : toute valeur qui n'a pas de gabarit propre. */
|
|
2253
|
+
readonly cle: import("@angular/core").InputSignal<string>;
|
|
2254
|
+
readonly gabarit: TemplateRef<ContexteDeValeurDeChangement>;
|
|
2255
|
+
static ngTemplateContextGuard(_directive: StValeurDeChangement, _contexte: unknown): _contexte is ContexteDeValeurDeChangement;
|
|
2256
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StValeurDeChangement, never>;
|
|
2257
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StValeurDeChangement, "ng-template[stValeurDeChangement]", never, {
|
|
2258
|
+
"cle": {
|
|
2259
|
+
"alias": "stValeurDeChangement";
|
|
2260
|
+
"required": false;
|
|
2261
|
+
"isSignal": true;
|
|
2262
|
+
};
|
|
2263
|
+
}, {}, never, never, true, never>;
|
|
2264
|
+
}
|
|
2265
|
+
/** Le terme d'un changement, une donnee, et la phrase du tronc autour (« Plafond mensuel : »). */
|
|
2266
|
+
interface TermeDeChangement extends PhraseAutourDuTrou {
|
|
2267
|
+
readonly nom: string;
|
|
2268
|
+
}
|
|
2269
|
+
/**
|
|
2270
|
+
* Un changement de valeur : « Plafond mensuel : 2 000 € → 3 000 € ». Le journal d'audit, la revue
|
|
2271
|
+
* d'une demande de modification (ancienne adresse, nouvelle adresse), la validation a quatre yeux
|
|
2272
|
+
* d'un seul champ ; plusieurs champs passent par `st-change-list`.
|
|
2273
|
+
*
|
|
2274
|
+
* ```html
|
|
2275
|
+
* <st-value-change terme="Plafond mensuel" avant="2 000 €" apres="3 000 €" />
|
|
2276
|
+
* ```
|
|
2277
|
+
*
|
|
2278
|
+
* ⚠️ **`<del>` et `<ins>`, doubles d'un mot masque** : l'ancienne valeur est barree, la nouvelle en
|
|
2279
|
+
* graisse moyenne ; chacune s'ouvre sur « Avant : » ou « Apres : », lus meme par les lecteurs
|
|
2280
|
+
* d'ecran qui taisent `del` et `ins`. La valeur barree garde l'encre discrete (4,5:1) : c'est du
|
|
2281
|
+
* contenu, pas un etat desactive.
|
|
2282
|
+
*
|
|
2283
|
+
* ⚠️ **Une valeur absente se dit** « Non renseigne » (un tiret a l'oeil, comme dans les listes du
|
|
2284
|
+
* socle), hors de `del` et `ins` : rien n'a ete barre ni insere. La fleche est decorative, et se
|
|
2285
|
+
* retourne de droite a gauche ; elle ne quitte jamais la nouvelle valeur a la coupure de ligne.
|
|
2286
|
+
*
|
|
2287
|
+
* Une valeur riche (montant, date, valeur masquee) passe par un gabarit `stValeurDeChangement`.
|
|
2288
|
+
*/
|
|
2289
|
+
export declare class StValueChange {
|
|
2290
|
+
protected readonly libelles: Signal<import("@starterlib/ui").LibellesUi>;
|
|
2291
|
+
protected readonly mots: Signal<MotsDeChangement>;
|
|
2292
|
+
/** Ce qui change (« Plafond mensuel ») ; sans terme, les deux valeurs seules (dans un `dd`). */
|
|
2293
|
+
readonly terme: import("@angular/core").InputSignal<string | null>;
|
|
2294
|
+
/** L'ancienne valeur, en texte ; `null` ou vide : aucune (« Non renseigne »). */
|
|
2295
|
+
readonly avant: import("@angular/core").InputSignal<string | null>;
|
|
2296
|
+
/** La nouvelle valeur, en texte ; `null` ou vide : aucune (« Non renseigne »). */
|
|
2297
|
+
readonly apres: import("@angular/core").InputSignal<string | null>;
|
|
2298
|
+
protected readonly gabarit: Signal<StValeurDeChangement | undefined>;
|
|
2299
|
+
protected readonly valeurAvant: Signal<string | null>;
|
|
2300
|
+
protected readonly valeurApres: Signal<string | null>;
|
|
2301
|
+
/** Le terme, une donnee, isole dans la phrase du tronc (« Plafond mensuel : »). */
|
|
2302
|
+
protected readonly phraseDuTerme: Signal<TermeDeChangement | null>;
|
|
2303
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StValueChange, never>;
|
|
2304
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StValueChange, "st-value-change", never, {
|
|
2305
|
+
"terme": {
|
|
2306
|
+
"alias": "terme";
|
|
2307
|
+
"required": false;
|
|
2308
|
+
"isSignal": true;
|
|
2309
|
+
};
|
|
2310
|
+
"avant": {
|
|
2311
|
+
"alias": "avant";
|
|
2312
|
+
"required": false;
|
|
2313
|
+
"isSignal": true;
|
|
2314
|
+
};
|
|
2315
|
+
"apres": {
|
|
2316
|
+
"alias": "apres";
|
|
2317
|
+
"required": false;
|
|
2318
|
+
"isSignal": true;
|
|
2319
|
+
};
|
|
2320
|
+
}, {}, ["gabarit"], never, true, never>;
|
|
2321
|
+
}
|
|
2322
|
+
/**
|
|
2323
|
+
* Les libelles propres a `@starterlib/ui/listes` (lot 259) : le catalogue par point d'entree (AD-10,
|
|
2324
|
+
* D147), apres ceux de la messagerie, des formulaires et de l'arbre ; le tronc n'a plus de marge
|
|
2325
|
+
* (D141). La langue suit celle du dictionnaire du tronc. Les libelles des listes livrees avant ce
|
|
2326
|
+
* lot restent au tronc jusqu'a la cloture du train (lot 268).
|
|
2327
|
+
*/
|
|
2328
|
+
export interface LibellesListes {
|
|
2329
|
+
/** En-tete de la colonne des champs d'une liste de changements (`st-change-list`). */
|
|
2330
|
+
readonly champ: string;
|
|
2331
|
+
/**
|
|
2332
|
+
* L'ancienne et la nouvelle valeur : en-tetes de `st-change-list`, et mots masques qui ouvrent
|
|
2333
|
+
* chaque valeur (« Avant : »), la ponctuation venant du tronc (`libelleDeChamp`).
|
|
2334
|
+
*/
|
|
2335
|
+
readonly avant: string;
|
|
2336
|
+
readonly apres: string;
|
|
2337
|
+
/** La nature d'un changement, dite en mot a cote de son icone. */
|
|
2338
|
+
readonly ajoute: string;
|
|
2339
|
+
readonly modifie: string;
|
|
2340
|
+
readonly supprime: string;
|
|
2341
|
+
readonly inchange: string;
|
|
2342
|
+
/**
|
|
2343
|
+
* Le bouton qui montre les champs inchanges : leur nombre, et le meme deja ecrit a la locale
|
|
2344
|
+
* (« 3 »). Son nom ne change pas quand il est enfonce (APG, bouton bascule).
|
|
2345
|
+
*/
|
|
2346
|
+
readonly afficherLesChampsInchanges: (nombre: number, enChiffres: string) => string;
|
|
2347
|
+
/** Une liste de changements ou rien n'a change. */
|
|
2348
|
+
readonly aucuneModification: string;
|
|
2349
|
+
/**
|
|
2350
|
+
* Le nom d'une chronologie (`st-timeline`) : l'etiquette de l'application, puis son ordre, lu a
|
|
2351
|
+
* l'entree de la liste (« Historique du virement, du plus recent au plus ancien »).
|
|
2352
|
+
*/
|
|
2353
|
+
readonly chronologieNommee: (etiquette: string, recentDAbord: boolean) => string;
|
|
2354
|
+
/**
|
|
2355
|
+
* L'action qui affiche un document (`st-document-list`, `apercevable`) : texte court visible, le
|
|
2356
|
+
* nom accessible y ajoute le document (« Voir RIB », D127).
|
|
2357
|
+
*/
|
|
2358
|
+
readonly voir: string;
|
|
2359
|
+
/** Le mot masque d'un element non lu (`st-list-item`), lu avant son titre. */
|
|
2360
|
+
readonly nonLu: string;
|
|
2361
|
+
}
|
|
2362
|
+
export declare const LIBELLES_LISTES_FR: LibellesListes;
|
|
2363
|
+
export declare const LIBELLES_LISTES_EN: LibellesListes;
|
|
2364
|
+
/**
|
|
2365
|
+
* Les catalogues des listes par langue (sous-etiquette primaire : `fr`, `en`). Une application qui
|
|
2366
|
+
* ajoute une langue au dictionnaire du tronc ajoute la sienne ici, par
|
|
2367
|
+
* `fournirLibellesListes({ de: ... })`.
|
|
2368
|
+
*/
|
|
2369
|
+
export declare const ST_LIBELLES_LISTES: InjectionToken<Readonly<Record<string, LibellesListes>>>;
|
|
2370
|
+
/** Ajoute (ou remplace) des catalogues des listes, par langue. */
|
|
2371
|
+
export declare function fournirLibellesListes(catalogues: Readonly<Record<string, LibellesListes>>): Provider;
|
|
2372
|
+
/**
|
|
2373
|
+
* Le catalogue de la langue du dictionnaire du tronc ; le francais quand la langue n'en a pas, un
|
|
2374
|
+
* repli signale en developpement (audit du 2026-09-27, D-29). A appeler dans un contexte
|
|
2375
|
+
* d'injection.
|
|
2376
|
+
*/
|
|
2377
|
+
export declare function libellesDesListes(): Signal<LibellesListes>;
|
|
2378
|
+
/**
|
|
2379
|
+
* Le catalogue des listes ET la langue de son repli (`catalogueDuPointDEntree`) : `lang` de ce
|
|
2380
|
+
* qu'il ecrit seul (audit du 2026-09-27, D-29). A appeler dans un contexte d'injection.
|
|
2381
|
+
*/
|
|
2382
|
+
export declare function catalogueDesListes(): Signal<CatalogueDuPointDEntree<LibellesListes>>;
|
|
2383
|
+
/** Ce qui est arrive a un champ : `ajoute` (rien avant), `supprime` (rien apres). */
|
|
2384
|
+
export type NatureDeChangement = 'ajoute' | 'modifie' | 'supprime' | 'inchange';
|
|
2385
|
+
/** Un champ d'une demande de modification : son ancienne valeur et la nouvelle, en texte. */
|
|
2386
|
+
export interface Changement {
|
|
2387
|
+
/** Identifiant stable : suivi de la ligne, et cle du gabarit `stValeurDeChangement`. */
|
|
2388
|
+
readonly cle: string;
|
|
2389
|
+
/** Le nom du champ (« Plafond mensuel »), deja traduit. */
|
|
2390
|
+
readonly libelle: string;
|
|
2391
|
+
/** L'ancienne valeur ; `null` ou vide : aucune. */
|
|
2392
|
+
readonly avant: string | null;
|
|
2393
|
+
/** La nouvelle valeur ; `null` ou vide : aucune. */
|
|
2394
|
+
readonly apres: string | null;
|
|
2395
|
+
/**
|
|
2396
|
+
* La nature, quand les valeurs ne peuvent pas la dire : deux formes MASQUEES par le serveur
|
|
2397
|
+
* (« FR76 •••• 0189 ») peuvent etre egales pour deux IBAN differents. Sans elle, deduite des
|
|
2398
|
+
* valeurs.
|
|
2399
|
+
*/
|
|
2400
|
+
readonly nature?: NatureDeChangement;
|
|
2401
|
+
}
|
|
2402
|
+
/** Une ligne rendue : son changement, sa nature, ses valeurs lues et son gabarit. */
|
|
2403
|
+
interface LigneDeChangement {
|
|
2404
|
+
readonly changement: Changement;
|
|
2405
|
+
readonly nature: NatureDeChangement;
|
|
2406
|
+
readonly libelle: string;
|
|
2407
|
+
readonly avant: string | null;
|
|
2408
|
+
readonly apres: string | null;
|
|
2409
|
+
/** L'ancienne valeur est-elle barree (`del`), la nouvelle inseree (`ins`) ? */
|
|
2410
|
+
readonly barree: boolean;
|
|
2411
|
+
readonly inseree: boolean;
|
|
2412
|
+
readonly icone: NomDIcone;
|
|
2413
|
+
readonly mot: string;
|
|
2414
|
+
readonly gabarit: TemplateRef<ContexteDeValeurDeChangement> | null;
|
|
2415
|
+
}
|
|
2416
|
+
/**
|
|
2417
|
+
* Les changements d'une demande de modification, champ par champ : ce que le valideur voit AVANT
|
|
2418
|
+
* d'approuver (validation a quatre yeux : plafond, adresse, beneficiaire, mandat), ce qu'un journal
|
|
2419
|
+
* d'audit garde d'une operation.
|
|
2420
|
+
*
|
|
2421
|
+
* ```html
|
|
2422
|
+
* <st-change-list legende="Modifications du bénéficiaire" [changements]="changements()">
|
|
2423
|
+
* <ng-template stValeurDeChangement="iban" let-valeur>
|
|
2424
|
+
* <st-masked type="iban" [valeur]="valeur" [charger]="reveler" />
|
|
2425
|
+
* </ng-template>
|
|
2426
|
+
* </st-change-list>
|
|
2427
|
+
* ```
|
|
2428
|
+
*
|
|
2429
|
+
* ⚠️ **Un tableau natif** : la legende en `caption`, les en-tetes « Champ », « Avant », « Apres »,
|
|
2430
|
+
* le champ en en-tete de ligne ; sous la rupture `sm` du conteneur, chaque ligne s'empile (le
|
|
2431
|
+
* champ, puis l'ancienne valeur, une fleche et la nouvelle), sans mot coupe en lettres.
|
|
2432
|
+
*
|
|
2433
|
+
* ⚠️ **La nature se lit** : un mot et une icone sous le champ (« Modifie », crayon ; « Ajoute »,
|
|
2434
|
+
* plus ; « Supprime », corbeille), jamais une couleur seule ; l'ancienne valeur est barree
|
|
2435
|
+
* (`del`), la nouvelle inseree (`ins`), et chacune s'ouvre sur un mot masque (« Avant : »).
|
|
2436
|
+
*
|
|
2437
|
+
* ⚠️ **Les champs inchanges sont masques par defaut** : un bouton bascule, au nom fixe et
|
|
2438
|
+
* `aria-pressed`, les montre (`afficherInchanges`). Le valideur voit d'abord ce qui change.
|
|
2439
|
+
*
|
|
2440
|
+
* ⚠️ **Une valeur sensible arrive masquee** du serveur et passe par un gabarit qui compose
|
|
2441
|
+
* `st-masked` (`@starterlib/ui/donnees`, que ce point d'entree n'importe pas) ; sa revelation
|
|
2442
|
+
* reste la voie auditee de `st-masked`. Deux formes masquees egales ne prouvent rien : le serveur
|
|
2443
|
+
* dit alors la `nature`.
|
|
2444
|
+
*/
|
|
2445
|
+
export declare class StChangeList {
|
|
2446
|
+
protected readonly libelles: Signal<import("@starterlib/ui").LibellesUi>;
|
|
2447
|
+
private readonly locale;
|
|
2448
|
+
private readonly catalogue;
|
|
2449
|
+
protected readonly mots: Signal<MotsDeChangement>;
|
|
2450
|
+
protected readonly textes: Signal<LibellesListes>;
|
|
2451
|
+
/** `lang` de ce que le catalogue ecrit seul, quand il retombe sur le francais (D-29). */
|
|
2452
|
+
protected readonly langue: Signal<string | null>;
|
|
2453
|
+
protected readonly identifiant: string;
|
|
2454
|
+
readonly changements: import("@angular/core").InputSignal<readonly Changement[]>;
|
|
2455
|
+
/** Le nom du tableau, en legende (« Modifications du beneficiaire »). */
|
|
2456
|
+
readonly legende: import("@angular/core").InputSignal<string>;
|
|
2457
|
+
/** Les champs inchanges se montrent ; le bouton bascule le change. */
|
|
2458
|
+
readonly afficherInchanges: import("@angular/core").ModelSignal<boolean>;
|
|
2459
|
+
private readonly gabarits;
|
|
2460
|
+
protected readonly lignes: Signal<readonly LigneDeChangement[]>;
|
|
2461
|
+
protected readonly nombreDInchanges: Signal<number>;
|
|
2462
|
+
protected readonly lignesVisibles: Signal<readonly LigneDeChangement[]>;
|
|
2463
|
+
protected readonly texteDeLaBascule: Signal<string>;
|
|
2464
|
+
protected basculer(): void;
|
|
2465
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StChangeList, never>;
|
|
2466
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StChangeList, "st-change-list", never, {
|
|
2467
|
+
"changements": {
|
|
2468
|
+
"alias": "changements";
|
|
2469
|
+
"required": true;
|
|
2470
|
+
"isSignal": true;
|
|
2471
|
+
};
|
|
2472
|
+
"legende": {
|
|
2473
|
+
"alias": "legende";
|
|
2474
|
+
"required": true;
|
|
2475
|
+
"isSignal": true;
|
|
2476
|
+
};
|
|
2477
|
+
"afficherInchanges": {
|
|
2478
|
+
"alias": "afficherInchanges";
|
|
2479
|
+
"required": false;
|
|
2480
|
+
"isSignal": true;
|
|
2481
|
+
};
|
|
2482
|
+
}, {
|
|
2483
|
+
"afficherInchanges": "afficherInchangesChange";
|
|
2484
|
+
}, ["gabarits"], never, true, never>;
|
|
429
2485
|
}
|
|
430
2486
|
|
|
431
|
-
export {
|
|
432
|
-
export type { ColonneDeTableau, ContexteDElementDeListe, ContexteDeCellule, ContexteDeDescription, DensiteDeTableau, ElementDeDescription, FiltreActif, Focalisable, ModeDePagination, SensDeTri, TriDeTableau };
|
|
2487
|
+
export {};
|