@starterlib/ui 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -8
- package/assets/icones/sprite.svg +6 -5
- package/fesm2022/starterlib-ui-formulaires.mjs +6 -6
- package/fesm2022/starterlib-ui-formulaires.mjs.map +1 -1
- package/fesm2022/starterlib-ui-interactions.mjs +63 -6
- package/fesm2022/starterlib-ui-interactions.mjs.map +1 -1
- package/fesm2022/starterlib-ui-surfaces.mjs +4 -4
- package/fesm2022/starterlib-ui-surfaces.mjs.map +1 -1
- package/fesm2022/starterlib-ui.mjs +792 -61
- package/fesm2022/starterlib-ui.mjs.map +1 -1
- package/package.json +3 -3
- package/types/starterlib-ui-interactions.d.ts +49 -2
- package/types/starterlib-ui-surfaces.d.ts +1 -1
- package/types/starterlib-ui.d.ts +493 -14
package/types/starterlib-ui.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { InjectionToken, Signal, Provider, DestroyRef,
|
|
2
|
+
import { InjectionToken, Signal, Provider, DestroyRef, TemplateRef, Resource } from '@angular/core';
|
|
3
3
|
import { Ton, Montant, TonSemantique, DateIso, PlageDeDates, DescriptionDeFichier, ChoixDeTheme, Langue, EtatDeBloc } from '@starterlib/util';
|
|
4
4
|
export { ETATS_DE_BLOC, EtatDeBloc } from '@starterlib/util';
|
|
5
5
|
import { ValidationError, FormValueControl, FormCheckboxControl } from '@angular/forms/signals';
|
|
@@ -118,6 +118,30 @@ interface LibellesUi {
|
|
|
118
118
|
readonly tropDeFichiers: (nombre: number) => string;
|
|
119
119
|
readonly typesAcceptes: (types: string) => string;
|
|
120
120
|
readonly tailleMaximale: (taille: string) => string;
|
|
121
|
+
readonly televersementDe: (fichier: string) => string;
|
|
122
|
+
readonly annulerLeTeleversement: (fichier: string) => string;
|
|
123
|
+
readonly fichierDepose: (fichier: string) => string;
|
|
124
|
+
readonly fichierRefuse: (fichier: string) => string;
|
|
125
|
+
/** Listes et tableaux */
|
|
126
|
+
readonly pagination: string;
|
|
127
|
+
readonly pagePrecedente: string;
|
|
128
|
+
readonly pageSuivante: string;
|
|
129
|
+
readonly pageNumero: (numero: number) => string;
|
|
130
|
+
readonly afficherPlus: string;
|
|
131
|
+
readonly lignesParPage: string;
|
|
132
|
+
readonly selectionnerLaPage: (nombre: number) => string;
|
|
133
|
+
readonly selectionnerLaLigne: (ligne: string) => string;
|
|
134
|
+
readonly lignesSelectionnees: (nombre: number) => string;
|
|
135
|
+
readonly trieCroissant: (colonne: string) => string;
|
|
136
|
+
readonly trieDecroissant: (colonne: string) => string;
|
|
137
|
+
readonly tableauVide: string;
|
|
138
|
+
readonly nonRenseigne: string;
|
|
139
|
+
readonly filtres: string;
|
|
140
|
+
readonly filtresActifs: string;
|
|
141
|
+
readonly retirerLeFiltre: (filtre: string) => string;
|
|
142
|
+
readonly effacerLesFiltres: string;
|
|
143
|
+
readonly filtreRetire: (filtre: string) => string;
|
|
144
|
+
readonly filtresEffaces: string;
|
|
121
145
|
/** Dialogues */
|
|
122
146
|
readonly confirmer: string;
|
|
123
147
|
readonly annuler: string;
|
|
@@ -301,12 +325,13 @@ type TonDIcone = Exclude<Ton, 'inverse'>;
|
|
|
301
325
|
*/
|
|
302
326
|
declare class StIcon {
|
|
303
327
|
private readonly cheminDuSprite;
|
|
304
|
-
readonly nom: _angular_core.InputSignal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "triangle-alerte" | "utilisateur">;
|
|
328
|
+
readonly nom: _angular_core.InputSignal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "tri" | "triangle-alerte" | "utilisateur">;
|
|
305
329
|
readonly taille: _angular_core.InputSignal<TailleDIcone>;
|
|
306
330
|
readonly ton: _angular_core.InputSignal<TonDIcone>;
|
|
307
331
|
/** `null` : l'icone est decorative et reste muette pour les lecteurs. */
|
|
308
332
|
readonly etiquette: _angular_core.InputSignal<string | null>;
|
|
309
333
|
protected readonly estDecorative: _angular_core.Signal<boolean>;
|
|
334
|
+
protected readonly directionnelle: _angular_core.Signal<boolean>;
|
|
310
335
|
protected readonly reference: _angular_core.Signal<string>;
|
|
311
336
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StIcon, never>;
|
|
312
337
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StIcon, "st-icon", never, { "nom": { "alias": "nom"; "required": true; "isSignal": true; }; "taille": { "alias": "taille"; "required": false; "isSignal": true; }; "ton": { "alias": "ton"; "required": false; "isSignal": true; }; "etiquette": { "alias": "etiquette"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
@@ -320,7 +345,7 @@ declare class StIcon {
|
|
|
320
345
|
* reference `use` vers un identifiant absent ne rend RIEN, sans erreur, et le
|
|
321
346
|
* defaut passe la revue.
|
|
322
347
|
*/
|
|
323
|
-
declare const NOMS_DICONE: readonly ["boite-vide", "calendrier", "cercle", "cercle-coche", "cercle-croix", "cercle-info", "chevron-bas", "chevron-droite", "chevron-gauche", "chevron-haut", "coche", "copie", "corbeille", "croix", "fichier", "hors-ligne", "lien-externe", "menu", "oeil", "oeil-barre", "plus", "rafraichir", "recherche", "serveur", "televerser", "triangle-alerte", "utilisateur"];
|
|
348
|
+
declare const NOMS_DICONE: readonly ["boite-vide", "calendrier", "cercle", "cercle-coche", "cercle-croix", "cercle-info", "chevron-bas", "chevron-droite", "chevron-gauche", "chevron-haut", "coche", "copie", "corbeille", "croix", "fichier", "hors-ligne", "lien-externe", "menu", "oeil", "oeil-barre", "plus", "rafraichir", "recherche", "serveur", "televerser", "tri", "triangle-alerte", "utilisateur"];
|
|
324
349
|
type NomDIcone = (typeof NOMS_DICONE)[number];
|
|
325
350
|
|
|
326
351
|
type VarianteDeTexte = 'corps' | 'corps-sm' | 'discret' | 'legende' | 'mono';
|
|
@@ -477,8 +502,8 @@ declare class StButton {
|
|
|
477
502
|
readonly variante: _angular_core.InputSignal<VarianteDeBouton>;
|
|
478
503
|
readonly taille: _angular_core.InputSignal<TailleDeBouton>;
|
|
479
504
|
readonly pleineLargeur: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
480
|
-
readonly iconeAvant: _angular_core.InputSignal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "triangle-alerte" | "utilisateur" | null>;
|
|
481
|
-
readonly iconeApres: _angular_core.InputSignal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "triangle-alerte" | "utilisateur" | null>;
|
|
505
|
+
readonly iconeAvant: _angular_core.InputSignal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "tri" | "triangle-alerte" | "utilisateur" | null>;
|
|
506
|
+
readonly iconeApres: _angular_core.InputSignal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "tri" | "triangle-alerte" | "utilisateur" | null>;
|
|
482
507
|
/**
|
|
483
508
|
* Action en cours. Tant qu'il vaut vrai, les clics sont avales : c'est le
|
|
484
509
|
* mecanisme d'anti double soumission. L'appelant doit le lever DES la
|
|
@@ -516,7 +541,7 @@ type VarianteDeBoutonIcone = Extract<VarianteDeBouton, 'discret' | 'secondaire'
|
|
|
516
541
|
* de facon fiable.
|
|
517
542
|
*/
|
|
518
543
|
declare class StIconButton {
|
|
519
|
-
readonly icone: _angular_core.InputSignal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "triangle-alerte" | "utilisateur">;
|
|
544
|
+
readonly icone: _angular_core.InputSignal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "tri" | "triangle-alerte" | "utilisateur">;
|
|
520
545
|
/** Nom accessible du controle. Sans lui, l'icone ne dit rien. */
|
|
521
546
|
readonly etiquette: _angular_core.InputSignal<string>;
|
|
522
547
|
readonly variante: _angular_core.InputSignal<VarianteDeBoutonIcone>;
|
|
@@ -808,7 +833,7 @@ declare class StStatusPill {
|
|
|
808
833
|
readonly statut: _angular_core.InputSignal<string>;
|
|
809
834
|
/** Texte deja traduit par l'appelant : le socle ne traduit rien. */
|
|
810
835
|
readonly libelle: _angular_core.InputSignal<string>;
|
|
811
|
-
readonly icone: _angular_core.InputSignal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "triangle-alerte" | "utilisateur">;
|
|
836
|
+
readonly icone: _angular_core.InputSignal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "tri" | "triangle-alerte" | "utilisateur">;
|
|
812
837
|
readonly ton: _angular_core.InputSignal<TonSemantique>;
|
|
813
838
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StStatusPill, never>;
|
|
814
839
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StStatusPill, "st-status-pill", never, { "statut": { "alias": "statut"; "required": true; "isSignal": true; }; "libelle": { "alias": "libelle"; "required": true; "isSignal": true; }; "icone": { "alias": "icone"; "required": true; "isSignal": true; }; "ton": { "alias": "ton"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
@@ -901,7 +926,7 @@ declare class StAvatar {
|
|
|
901
926
|
declare class StEmpty {
|
|
902
927
|
readonly titre: _angular_core.InputSignal<string>;
|
|
903
928
|
readonly description: _angular_core.InputSignal<string | null>;
|
|
904
|
-
readonly icone: _angular_core.InputSignal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "triangle-alerte" | "utilisateur">;
|
|
929
|
+
readonly icone: _angular_core.InputSignal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "tri" | "triangle-alerte" | "utilisateur">;
|
|
905
930
|
readonly niveauDuTitre: _angular_core.InputSignal<NiveauDeTitre>;
|
|
906
931
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StEmpty, never>;
|
|
907
932
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StEmpty, "st-empty", never, { "titre": { "alias": "titre"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "icone": { "alias": "icone"; "required": false; "isSignal": true; }; "niveauDuTitre": { "alias": "niveauDuTitre"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
@@ -939,7 +964,7 @@ declare class StError {
|
|
|
939
964
|
protected readonly libelleRejeuLu: _angular_core.Signal<string>;
|
|
940
965
|
protected readonly etiquetteDeTraceLue: _angular_core.Signal<string>;
|
|
941
966
|
protected readonly etiquetteDuCode: _angular_core.Signal<string>;
|
|
942
|
-
protected readonly icone: _angular_core.Signal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "triangle-alerte" | "utilisateur">;
|
|
967
|
+
protected readonly icone: _angular_core.Signal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "tri" | "triangle-alerte" | "utilisateur">;
|
|
943
968
|
protected readonly sAnnonce: _angular_core.Signal<boolean>;
|
|
944
969
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StError, never>;
|
|
945
970
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StError, "st-error", never, { "variante": { "alias": "variante"; "required": false; "isSignal": true; }; "code": { "alias": "code"; "required": true; "isSignal": true; }; "titre": { "alias": "titre"; "required": true; "isSignal": true; }; "message": { "alias": "message"; "required": true; "isSignal": true; }; "traceId": { "alias": "traceId"; "required": false; "isSignal": true; }; "niveauDuTitre": { "alias": "niveauDuTitre"; "required": false; "isSignal": true; }; "rejouable": { "alias": "rejouable"; "required": false; "isSignal": true; }; "rejeuEnCours": { "alias": "rejeuEnCours"; "required": false; "isSignal": true; }; "libelleRejeu": { "alias": "libelleRejeu"; "required": false; "isSignal": true; }; "etiquetteDeTrace": { "alias": "etiquetteDeTrace"; "required": false; "isSignal": true; }; }, { "rejeu": "rejeu"; }, never, never, true, never>;
|
|
@@ -1267,7 +1292,7 @@ declare class StBanner {
|
|
|
1267
1292
|
/** `null` : le texte vient du dictionnaire de l'application. */
|
|
1268
1293
|
readonly libelleFermeture: _angular_core.InputSignal<string | null>;
|
|
1269
1294
|
readonly ferme: _angular_core.OutputEmitterRef<void>;
|
|
1270
|
-
protected readonly icone: _angular_core.Signal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "triangle-alerte" | "utilisateur">;
|
|
1295
|
+
protected readonly icone: _angular_core.Signal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "tri" | "triangle-alerte" | "utilisateur">;
|
|
1271
1296
|
protected readonly libelleFermetureLu: _angular_core.Signal<string>;
|
|
1272
1297
|
protected readonly roleLu: _angular_core.Signal<"status" | "alert" | null>;
|
|
1273
1298
|
/**
|
|
@@ -1313,7 +1338,7 @@ declare class StInlineMessage {
|
|
|
1313
1338
|
readonly ton: _angular_core.InputSignal<TonSemantique>;
|
|
1314
1339
|
/** Cible d'un `aria-describedby` pose par le champ decrit. */
|
|
1315
1340
|
readonly identifiant: _angular_core.InputSignal<string | null>;
|
|
1316
|
-
protected readonly icone: _angular_core.Signal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "triangle-alerte" | "utilisateur">;
|
|
1341
|
+
protected readonly icone: _angular_core.Signal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "tri" | "triangle-alerte" | "utilisateur">;
|
|
1317
1342
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StInlineMessage, never>;
|
|
1318
1343
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StInlineMessage, "st-inline-message", never, { "ton": { "alias": "ton"; "required": false; "isSignal": true; }; "identifiant": { "alias": "identifiant"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1319
1344
|
}
|
|
@@ -2147,6 +2172,22 @@ declare class StCalendar {
|
|
|
2147
2172
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StCalendar, "st-calendar", never, { "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "dateMin": { "alias": "dateMin"; "required": false; "isSignal": true; }; "dateMax": { "alias": "dateMax"; "required": false; "isSignal": true; }; "plage": { "alias": "plage"; "required": false; "isSignal": true; }; }, { "choix": "choix"; "fermeture": "fermeture"; }, never, never, true, never>;
|
|
2148
2173
|
}
|
|
2149
2174
|
|
|
2175
|
+
/**
|
|
2176
|
+
* Cle d'un fichier choisi : deux choix du meme fichier ne l'ajoutent pas deux
|
|
2177
|
+
* fois, et l'application s'en sert pour dire ou en est chaque televersement.
|
|
2178
|
+
*/
|
|
2179
|
+
declare function cleDeFichier(fichier: File): string;
|
|
2180
|
+
/**
|
|
2181
|
+
* Ou en est un fichier, vu de l'application. `message` dit POURQUOI un fichier
|
|
2182
|
+
* est refuse — « antivirus indisponible » et « type refuse » n'appellent pas la
|
|
2183
|
+
* meme suite (UX-3 de la 0.6.0).
|
|
2184
|
+
*/
|
|
2185
|
+
interface EtatDeTeleversementAffiche {
|
|
2186
|
+
readonly etape: 'en-cours' | 'depose' | 'refuse';
|
|
2187
|
+
/** 0 a 100, pendant l'envoi. */
|
|
2188
|
+
readonly progression?: number;
|
|
2189
|
+
readonly message?: string;
|
|
2190
|
+
}
|
|
2150
2191
|
/**
|
|
2151
2192
|
* Choix de fichiers, sur un `input type="file"` natif.
|
|
2152
2193
|
*
|
|
@@ -2175,6 +2216,11 @@ declare class StCalendar {
|
|
|
2175
2216
|
* Chaque changement de la liste s'annonce : « 2 fichiers choisis ». Un fichier
|
|
2176
2217
|
* retire rend le focus au bouton de retrait suivant, ou au choix de fichiers : le
|
|
2177
2218
|
* focus ne tombe jamais sur le document.
|
|
2219
|
+
*
|
|
2220
|
+
* ⚠️ **Il ne televerse pas.** `etats` dit ou en est chaque fichier, et le bouton
|
|
2221
|
+
* de la ligne devient « Annuler » pendant l'envoi : le trajet — declaration, depot
|
|
2222
|
+
* pre-signe, confirmation antivirus — vit dans `StTeleversement`
|
|
2223
|
+
* (`@starterlib/core`), seul a parler au reseau.
|
|
2178
2224
|
*/
|
|
2179
2225
|
declare class StFileUpload extends ContratDeChamp implements FormValueControl<readonly File[]> {
|
|
2180
2226
|
protected readonly libelles: _angular_core.Signal<_starterlib_ui.LibellesUi>;
|
|
@@ -2187,6 +2233,11 @@ declare class StFileUpload extends ContratDeChamp implements FormValueControl<re
|
|
|
2187
2233
|
readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
2188
2234
|
/** En octets. Affiche en aide ; la verification est dans le schema. */
|
|
2189
2235
|
readonly tailleMax: _angular_core.InputSignal<number | null>;
|
|
2236
|
+
/**
|
|
2237
|
+
* Ou en est chaque fichier, par `cleDeFichier`. Le composant AFFICHE ce trajet,
|
|
2238
|
+
* il ne le fait pas : `StTeleversement` de `@starterlib/core` s'en charge.
|
|
2239
|
+
*/
|
|
2240
|
+
readonly etats: _angular_core.InputSignal<ReadonlyMap<string, EtatDeTeleversementAffiche> | null>;
|
|
2190
2241
|
protected readonly annonce: AnnonceLocale;
|
|
2191
2242
|
protected readonly survol: _angular_core.WritableSignal<boolean>;
|
|
2192
2243
|
protected readonly aideLue: _angular_core.Signal<string | null>;
|
|
@@ -2194,15 +2245,443 @@ declare class StFileUpload extends ContratDeChamp implements FormValueControl<re
|
|
|
2194
2245
|
fichier: File;
|
|
2195
2246
|
cle: string;
|
|
2196
2247
|
taille: string;
|
|
2248
|
+
etat: EtatDeTeleversementAffiche | null;
|
|
2197
2249
|
}[]>;
|
|
2198
2250
|
protected surChoix(evenement: Event): void;
|
|
2199
2251
|
protected surSurvol(evenement: DragEvent): void;
|
|
2200
2252
|
protected surDepot(evenement: DragEvent): void;
|
|
2253
|
+
/** Emis quand la personne interrompt un envoi : c'est l'application qui annule. */
|
|
2254
|
+
readonly annulation: _angular_core.OutputEmitterRef<File>;
|
|
2201
2255
|
protected retirer(indice: number): void;
|
|
2202
2256
|
protected aLaSortie(evenement: FocusEvent): void;
|
|
2203
2257
|
private ajouter;
|
|
2204
2258
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StFileUpload, never>;
|
|
2205
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StFileUpload, "st-file-upload", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "tailleMax": { "alias": "tailleMax"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
|
|
2259
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StFileUpload, "st-file-upload", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "tailleMax": { "alias": "tailleMax"; "required": false; "isSignal": true; }; "etats": { "alias": "etats"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "annulation": "annulation"; }, never, never, true, never>;
|
|
2260
|
+
}
|
|
2261
|
+
|
|
2262
|
+
/**
|
|
2263
|
+
* `pages` : page precedente et suivante, pour un tableau.
|
|
2264
|
+
* `suite` : « Afficher plus », pour une liste qui s'allonge.
|
|
2265
|
+
*/
|
|
2266
|
+
type ModeDePagination = 'pages' | 'suite';
|
|
2267
|
+
/** Ce qui peut recevoir le focus apres un changement de page. */
|
|
2268
|
+
interface Focalisable {
|
|
2269
|
+
focus(options?: FocusOptions): void;
|
|
2270
|
+
}
|
|
2271
|
+
/**
|
|
2272
|
+
* Pagination d'une liste par curseur.
|
|
2273
|
+
*
|
|
2274
|
+
* ```html
|
|
2275
|
+
* <st-data-table #tableau … />
|
|
2276
|
+
* <st-pagination
|
|
2277
|
+
* [numero]="navigation.numeroDePage()"
|
|
2278
|
+
* [precedenteDisponible]="navigation.precedenteDisponible()"
|
|
2279
|
+
* [suivanteDisponible]="page.value()?.hasMore ?? false"
|
|
2280
|
+
* [chargement]="page.isLoading()"
|
|
2281
|
+
* [cible]="tableau"
|
|
2282
|
+
* (precedente)="navigation.precedente()"
|
|
2283
|
+
* (suivante)="navigation.suivante(page.value())"
|
|
2284
|
+
* />
|
|
2285
|
+
* ```
|
|
2286
|
+
*
|
|
2287
|
+
* ⚠️ **Ni total, ni numeros cliquables** : le backend ne compte pas et ne va que
|
|
2288
|
+
* vers l'avant (audit de la vague 4, V4-2). « Page 3 » se dit ; « page 3 sur 12 »
|
|
2289
|
+
* serait invente.
|
|
2290
|
+
*
|
|
2291
|
+
* ⚠️ **Boutons indisponibles, jamais desactives** : sur la derniere page, « Page
|
|
2292
|
+
* suivante » garde le focus qu'il avait. Desactive, il le perdrait, et le lecteur
|
|
2293
|
+
* d'ecran retomberait sur le debut du document.
|
|
2294
|
+
*
|
|
2295
|
+
* ⚠️ **Apres un changement de page, le focus va a la `cible`** — la legende du
|
|
2296
|
+
* tableau — et « Page 2 » s'annonce (UX-13). Sans cela, la personne au clavier
|
|
2297
|
+
* reste en bas, sur « Page suivante », sans savoir que le contenu au-dessus a
|
|
2298
|
+
* change.
|
|
2299
|
+
*/
|
|
2300
|
+
declare class StPagination {
|
|
2301
|
+
protected readonly libelles: _angular_core.Signal<_starterlib_ui.LibellesUi>;
|
|
2302
|
+
private readonly injecteur;
|
|
2303
|
+
readonly mode: _angular_core.InputSignal<ModeDePagination>;
|
|
2304
|
+
/** A partir de 1. */
|
|
2305
|
+
readonly numero: _angular_core.InputSignal<number>;
|
|
2306
|
+
readonly precedenteDisponible: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
2307
|
+
readonly suivanteDisponible: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
2308
|
+
readonly chargement: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
2309
|
+
/** Nom de la navigation, quand une page en porte plusieurs. */
|
|
2310
|
+
readonly etiquette: _angular_core.InputSignal<string | null>;
|
|
2311
|
+
/** Tailles proposees ; vide, pas de choix. Plafonnees a 100. */
|
|
2312
|
+
readonly taillesDePage: _angular_core.InputSignal<readonly number[]>;
|
|
2313
|
+
readonly taille: _angular_core.ModelSignal<number>;
|
|
2314
|
+
/** Recoit le focus apres un changement de page. */
|
|
2315
|
+
readonly cible: _angular_core.InputSignal<Focalisable | (() => Focalisable | null) | null>;
|
|
2316
|
+
readonly precedente: _angular_core.OutputEmitterRef<void>;
|
|
2317
|
+
readonly suivante: _angular_core.OutputEmitterRef<void>;
|
|
2318
|
+
protected readonly annonce: AnnonceLocale;
|
|
2319
|
+
protected readonly tailles: _angular_core.Signal<number[]>;
|
|
2320
|
+
protected readonly etiquetteLue: _angular_core.Signal<string>;
|
|
2321
|
+
constructor();
|
|
2322
|
+
protected surTaille(evenement: Event): void;
|
|
2323
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StPagination, never>;
|
|
2324
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StPagination, "st-pagination", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "numero": { "alias": "numero"; "required": false; "isSignal": true; }; "precedenteDisponible": { "alias": "precedenteDisponible"; "required": false; "isSignal": true; }; "suivanteDisponible": { "alias": "suivanteDisponible"; "required": false; "isSignal": true; }; "chargement": { "alias": "chargement"; "required": false; "isSignal": true; }; "etiquette": { "alias": "etiquette"; "required": false; "isSignal": true; }; "taillesDePage": { "alias": "taillesDePage"; "required": false; "isSignal": true; }; "taille": { "alias": "taille"; "required": false; "isSignal": true; }; "cible": { "alias": "cible"; "required": false; "isSignal": true; }; }, { "taille": "tailleChange"; "precedente": "precedente"; "suivante": "suivante"; }, never, never, true, never>;
|
|
2325
|
+
}
|
|
2326
|
+
|
|
2327
|
+
/** Une paire terme et valeur. `description` nulle : « Non renseigne ». */
|
|
2328
|
+
interface ElementDeDescription {
|
|
2329
|
+
/** Relie l'element a un gabarit `stDescription`. Par defaut : le terme. */
|
|
2330
|
+
readonly cle?: string;
|
|
2331
|
+
readonly terme: string;
|
|
2332
|
+
readonly description: string | null;
|
|
2333
|
+
}
|
|
2334
|
+
/** Contexte d'un gabarit de description. */
|
|
2335
|
+
interface ContexteDeDescription {
|
|
2336
|
+
readonly $implicit: ElementDeDescription;
|
|
2337
|
+
}
|
|
2338
|
+
/**
|
|
2339
|
+
* Valeur riche d'un element : montant, date, valeur masquee.
|
|
2340
|
+
*
|
|
2341
|
+
* ```html
|
|
2342
|
+
* <ng-template stDescription="iban" let-element>
|
|
2343
|
+
* <st-masked nature="iban" [valeur]="compte().iban" />
|
|
2344
|
+
* </ng-template>
|
|
2345
|
+
* ```
|
|
2346
|
+
*/
|
|
2347
|
+
declare class StDescription {
|
|
2348
|
+
readonly cle: _angular_core.InputSignal<string>;
|
|
2349
|
+
readonly gabarit: TemplateRef<ContexteDeDescription>;
|
|
2350
|
+
static ngTemplateContextGuard(_directive: StDescription, _contexte: unknown): _contexte is ContexteDeDescription;
|
|
2351
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StDescription, never>;
|
|
2352
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StDescription, "ng-template[stDescription]", never, { "cle": { "alias": "stDescription"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2353
|
+
}
|
|
2354
|
+
/**
|
|
2355
|
+
* Liste de descriptions : les proprietes d'un objet, sur une page de detail.
|
|
2356
|
+
*
|
|
2357
|
+
* ```html
|
|
2358
|
+
* <st-description-list [elements]="[
|
|
2359
|
+
* { terme: 'Reference', description: commande().reference },
|
|
2360
|
+
* { cle: 'montant', terme: 'Montant', description: null },
|
|
2361
|
+
* ]">
|
|
2362
|
+
* <ng-template stDescription="montant"><st-money [valeur]="commande().montant" /></ng-template>
|
|
2363
|
+
* </st-description-list>
|
|
2364
|
+
* ```
|
|
2365
|
+
*
|
|
2366
|
+
* ⚠️ **Un vrai `dl`, rendu par le composant.** Le lecteur d'ecran annonce « liste de
|
|
2367
|
+
* descriptions, 4 elements » et lit chaque terme avec sa valeur. Ecrits par
|
|
2368
|
+
* l'application et projetes, `dt` et `dd` echapperaient aux styles du composant,
|
|
2369
|
+
* et un `div` mal place rendrait la liste invalide.
|
|
2370
|
+
*
|
|
2371
|
+
* ⚠️ **Une valeur absente se dit** : « — » a l'ecran, « Non renseigne » au lecteur
|
|
2372
|
+
* d'ecran. Une cellule vide ne distingue pas « aucun » de « pas encore charge ».
|
|
2373
|
+
*
|
|
2374
|
+
* En colonnes quand la place le permet, empile en dessous : la largeur est celle
|
|
2375
|
+
* du CONTENEUR, pas de l'ecran — la meme liste dans une carte etroite s'empile
|
|
2376
|
+
* aussi sur un grand ecran (UX-18).
|
|
2377
|
+
*/
|
|
2378
|
+
declare class StDescriptionList {
|
|
2379
|
+
protected readonly libelles: _angular_core.Signal<_starterlib_ui.LibellesUi>;
|
|
2380
|
+
readonly elements: _angular_core.InputSignal<readonly ElementDeDescription[]>;
|
|
2381
|
+
private readonly gabarits;
|
|
2382
|
+
protected readonly lignes: _angular_core.Signal<{
|
|
2383
|
+
element: ElementDeDescription;
|
|
2384
|
+
gabarit: TemplateRef<ContexteDeDescription> | null;
|
|
2385
|
+
}[]>;
|
|
2386
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StDescriptionList, never>;
|
|
2387
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StDescriptionList, "st-description-list", never, { "elements": { "alias": "elements"; "required": true; "isSignal": true; }; }, {}, ["gabarits"], never, true, never>;
|
|
2388
|
+
}
|
|
2389
|
+
|
|
2390
|
+
/** Contexte d'un gabarit d'element de liste. */
|
|
2391
|
+
interface ContexteDElementDeListe<T> {
|
|
2392
|
+
readonly $implicit: T;
|
|
2393
|
+
readonly indice: number;
|
|
2394
|
+
}
|
|
2395
|
+
/**
|
|
2396
|
+
* Rendu d'un element, type par `[stElementDeListeDe]` :
|
|
2397
|
+
*
|
|
2398
|
+
* ```html
|
|
2399
|
+
* <ng-template stElementDeListe [stElementDeListeDe]="expeditions()" let-expedition>
|
|
2400
|
+
* <a [routerLink]="['/expeditions', expedition.id]">{{ expedition.reference }}</a>
|
|
2401
|
+
* </ng-template>
|
|
2402
|
+
* ```
|
|
2403
|
+
*/
|
|
2404
|
+
declare class StElementDeListe<T> {
|
|
2405
|
+
/** Sert seulement au typage du contexte ; nom de l'attribut, d'ou l'absence d'alias. */
|
|
2406
|
+
readonly stElementDeListeDe: _angular_core.InputSignal<readonly T[] | null | undefined>;
|
|
2407
|
+
readonly gabarit: TemplateRef<ContexteDElementDeListe<T>>;
|
|
2408
|
+
static ngTemplateContextGuard<T>(_directive: StElementDeListe<T>, _contexte: unknown): _contexte is ContexteDElementDeListe<T>;
|
|
2409
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StElementDeListe<any>, never>;
|
|
2410
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StElementDeListe<any>, "ng-template[stElementDeListe]", never, { "stElementDeListeDe": { "alias": "stElementDeListeDe"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2411
|
+
}
|
|
2412
|
+
/**
|
|
2413
|
+
* Liste d'objets : expeditions, notifications, documents. La forme mobile d'un
|
|
2414
|
+
* tableau (UX-5).
|
|
2415
|
+
*
|
|
2416
|
+
* ```html
|
|
2417
|
+
* <st-list #liste etiquette="Mes expeditions" [elements]="expeditions()" cle="id">
|
|
2418
|
+
* <ng-template stElementDeListe [stElementDeListeDe]="expeditions()" let-expedition>…</ng-template>
|
|
2419
|
+
* </st-list>
|
|
2420
|
+
* <st-pagination mode="suite" [cible]="liste" … />
|
|
2421
|
+
* ```
|
|
2422
|
+
*
|
|
2423
|
+
* ⚠️ **Un lien DANS l'element, jamais un element cliquable** (UX-3) : le lien a un
|
|
2424
|
+
* nom, s'ouvre dans un onglet, et laisse les autres boutons de l'element
|
|
2425
|
+
* atteignables.
|
|
2426
|
+
*
|
|
2427
|
+
* ⚠️ **`focus()` va au premier element AJOUTE** depuis le dernier affichage : apres
|
|
2428
|
+
* « Afficher plus », la lecture reprend la ou la liste s'est allongee, et non en
|
|
2429
|
+
* tete. Apres un filtre, la liste raccourcit, et le focus va au premier element.
|
|
2430
|
+
*
|
|
2431
|
+
* `track` par la cle : un rafraichissement garde le focus sur le bon element.
|
|
2432
|
+
*/
|
|
2433
|
+
declare class StList<T> {
|
|
2434
|
+
private readonly element;
|
|
2435
|
+
readonly elements: _angular_core.InputSignal<readonly T[]>;
|
|
2436
|
+
/** Propriete qui identifie un element. */
|
|
2437
|
+
readonly cle: _angular_core.InputSignal<keyof T & string>;
|
|
2438
|
+
/** Nom de la liste, lu a l'entree. */
|
|
2439
|
+
readonly etiquette: _angular_core.InputSignal<string | null>;
|
|
2440
|
+
/** `ol` quand l'ordre a un sens : etapes, classement. */
|
|
2441
|
+
readonly ordonnee: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
2442
|
+
/** Contenu en cours de remplacement : `aria-busy`. */
|
|
2443
|
+
readonly chargement: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
2444
|
+
protected readonly gabarit: _angular_core.Signal<StElementDeListe<any> | undefined>;
|
|
2445
|
+
private indiceDuPremierAjout;
|
|
2446
|
+
protected readonly lignes: _angular_core.Signal<{
|
|
2447
|
+
valeur: T;
|
|
2448
|
+
indice: number;
|
|
2449
|
+
identifiant: string;
|
|
2450
|
+
}[]>;
|
|
2451
|
+
constructor();
|
|
2452
|
+
/** Focus sur le premier element ajoute, ou sur le premier. */
|
|
2453
|
+
focus(options?: FocusOptions): void;
|
|
2454
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StList<any>, never>;
|
|
2455
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StList<any>, "st-list", never, { "elements": { "alias": "elements"; "required": true; "isSignal": true; }; "cle": { "alias": "cle"; "required": true; "isSignal": true; }; "etiquette": { "alias": "etiquette"; "required": false; "isSignal": true; }; "ordonnee": { "alias": "ordonnee"; "required": false; "isSignal": true; }; "chargement": { "alias": "chargement"; "required": false; "isSignal": true; }; }, {}, ["gabarit"], never, true, never>;
|
|
2456
|
+
}
|
|
2457
|
+
|
|
2458
|
+
type SensDeTri = 'croissant' | 'decroissant';
|
|
2459
|
+
/**
|
|
2460
|
+
* Bouton de tri d'une colonne, pose DANS l'en-tete : `<th><button stSortHeader>`.
|
|
2461
|
+
*
|
|
2462
|
+
* ⚠️ **Le bouton, pas l'en-tete cliquable** : un `th` n'est ni focalisable ni
|
|
2463
|
+
* annonce comme actionnable. Et l'etat se porte par `aria-sort` sur le `th`, que
|
|
2464
|
+
* `st-data-table` pose sur la SEULE colonne triee (FE-3).
|
|
2465
|
+
*
|
|
2466
|
+
* ⚠️ **Ne trie rien.** Il dit l'intention ; c'est le serveur qui trie, et le
|
|
2467
|
+
* contrat actuel ne le fait pas (audit de la vague 4, V4-3). Trier la page
|
|
2468
|
+
* affichee ferait croire a un tri de toute la liste.
|
|
2469
|
+
*
|
|
2470
|
+
* Une colonne non triee montre deux chevrons, pour se signaler triable sans
|
|
2471
|
+
* attendre le survol ; l'icone est decorative, l'etat est lu par `aria-sort`.
|
|
2472
|
+
*/
|
|
2473
|
+
declare class StSortHeader {
|
|
2474
|
+
readonly sens: _angular_core.InputSignal<SensDeTri | null>;
|
|
2475
|
+
protected readonly icone: _angular_core.Signal<"copie" | "boite-vide" | "calendrier" | "cercle" | "cercle-coche" | "cercle-croix" | "cercle-info" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "coche" | "corbeille" | "croix" | "fichier" | "hors-ligne" | "lien-externe" | "menu" | "oeil" | "oeil-barre" | "plus" | "rafraichir" | "recherche" | "serveur" | "televerser" | "tri" | "triangle-alerte" | "utilisateur">;
|
|
2476
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StSortHeader, never>;
|
|
2477
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StSortHeader, "button[stSortHeader]", never, { "sens": { "alias": "sens"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
2478
|
+
}
|
|
2479
|
+
|
|
2480
|
+
/** Une colonne, decrite en donnees. */
|
|
2481
|
+
interface ColonneDeTableau {
|
|
2482
|
+
/** Identifie la colonne ; par defaut, la propriete affichee. */
|
|
2483
|
+
readonly cle: string;
|
|
2484
|
+
readonly libelle: string;
|
|
2485
|
+
/** `fin` pour les nombres et les montants (UX-4). */
|
|
2486
|
+
readonly alignement?: 'debut' | 'fin';
|
|
2487
|
+
/** Seulement si le SERVEUR trie sur cette colonne (V4-3). */
|
|
2488
|
+
readonly triable?: boolean;
|
|
2489
|
+
/** Libelle lu mais non affiche : colonne d'actions. Jamais vide. */
|
|
2490
|
+
readonly libelleMasque?: boolean;
|
|
2491
|
+
}
|
|
2492
|
+
interface TriDeTableau {
|
|
2493
|
+
readonly cle: string;
|
|
2494
|
+
readonly sens: SensDeTri;
|
|
2495
|
+
}
|
|
2496
|
+
type DensiteDeTableau = 'confortable' | 'compacte';
|
|
2497
|
+
/** Contexte d'un gabarit de cellule. */
|
|
2498
|
+
interface ContexteDeCellule<T> {
|
|
2499
|
+
readonly $implicit: T;
|
|
2500
|
+
readonly colonne: ColonneDeTableau;
|
|
2501
|
+
}
|
|
2502
|
+
/**
|
|
2503
|
+
* Rendu d'une cellule, type par `[stCelluleDe]` :
|
|
2504
|
+
*
|
|
2505
|
+
* ```html
|
|
2506
|
+
* <ng-template stCellule="montant" [stCelluleDe]="lignes()" let-ligne>
|
|
2507
|
+
* <st-money [valeur]="ligne.montant" />
|
|
2508
|
+
* </ng-template>
|
|
2509
|
+
* ```
|
|
2510
|
+
*/
|
|
2511
|
+
declare class StCellule<T> {
|
|
2512
|
+
readonly cle: _angular_core.InputSignal<string>;
|
|
2513
|
+
/** Sert seulement au typage du contexte ; nom de l'attribut, d'ou l'absence d'alias. */
|
|
2514
|
+
readonly stCelluleDe: _angular_core.InputSignal<readonly T[] | null | undefined>;
|
|
2515
|
+
readonly gabarit: TemplateRef<ContexteDeCellule<T>>;
|
|
2516
|
+
static ngTemplateContextGuard<T>(_directive: StCellule<T>, _contexte: unknown): _contexte is ContexteDeCellule<T>;
|
|
2517
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StCellule<any>, never>;
|
|
2518
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StCellule<any>, "ng-template[stCellule]", never, { "cle": { "alias": "stCellule"; "required": true; "isSignal": true; }; "stCelluleDe": { "alias": "stCelluleDe"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2519
|
+
}
|
|
2520
|
+
/** Contenu du tableau vide : un `st-empty`, avec son action. */
|
|
2521
|
+
declare class StTableauVide {
|
|
2522
|
+
readonly gabarit: TemplateRef<unknown>;
|
|
2523
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StTableauVide, never>;
|
|
2524
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StTableauVide, "ng-template[stTableauVide]", never, {}, {}, never, never, true, never>;
|
|
2525
|
+
}
|
|
2526
|
+
/**
|
|
2527
|
+
* Tableau de donnees, sur un `<table>` NATIF.
|
|
2528
|
+
*
|
|
2529
|
+
* ```html
|
|
2530
|
+
* <st-data-table #tableau legende="Expeditions" [colonnes]="colonnes" [lignes]="lignes()"
|
|
2531
|
+
* cle="id" selectionnable [(selection)]="choisies" [chargement]="page.isLoading()">
|
|
2532
|
+
* <ng-template stCellule="reference" [stCelluleDe]="lignes()" let-ligne>
|
|
2533
|
+
* <a [routerLink]="['/expeditions', ligne.id]">{{ ligne.reference }}</a>
|
|
2534
|
+
* </ng-template>
|
|
2535
|
+
* <button stButton stActionsDeTableau (click)="exporter()">Exporter</button>
|
|
2536
|
+
* </st-data-table>
|
|
2537
|
+
* ```
|
|
2538
|
+
*
|
|
2539
|
+
* ⚠️ **Un tableau, pas une grille** (audit de la vague 4, V4-1). Le lecteur d'ecran
|
|
2540
|
+
* sait parcourir un `<table>` de cellule en cellule ; une grille ARIA remplacerait
|
|
2541
|
+
* ce parcours par les fleches, et rendrait les liens des cellules plus durs a
|
|
2542
|
+
* atteindre. Ni Material, ni `CdkTable` : pas de pair dans le tronc.
|
|
2543
|
+
*
|
|
2544
|
+
* - **Legende obligatoire** (UX-1), et une colonne d'en-tete de ligne — la premiere
|
|
2545
|
+
* par defaut — pour que chaque cellule se lise avec sa ligne (UX-2).
|
|
2546
|
+
* - **Zone de defilement nommee** : focalisable quand le tableau deborde (UX-6),
|
|
2547
|
+
* colonne figee sans masquer le focus (UX-7), en-tete fige seulement avec
|
|
2548
|
+
* `hauteurMax` (UX-8).
|
|
2549
|
+
* - **Selection de la PAGE, par cle** (V4-4) : elle ne garde que les lignes encore
|
|
2550
|
+
* affichees, et se vide donc au changement de page.
|
|
2551
|
+
* - **Tri PILOTE** : le tableau dit la demande et l'annonce, il ne reordonne
|
|
2552
|
+
* jamais les lignes (V4-3).
|
|
2553
|
+
* - **Chargement** : squelette au premier, lignes gardees et `aria-busy` ensuite
|
|
2554
|
+
* (UX-11).
|
|
2555
|
+
* - Export, actions de masse : zone `stActionsDeTableau`, et le SERVEUR fait le
|
|
2556
|
+
* travail (V4-5, SEC-4, SEC-5).
|
|
2557
|
+
*/
|
|
2558
|
+
declare class StDataTable<T> {
|
|
2559
|
+
protected readonly libelles: _angular_core.Signal<_starterlib_ui.LibellesUi>;
|
|
2560
|
+
readonly legende: _angular_core.InputSignal<string>;
|
|
2561
|
+
/** Lue mais non affichee, quand un titre visible nomme deja le tableau. */
|
|
2562
|
+
readonly legendeMasquee: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
2563
|
+
readonly colonnes: _angular_core.InputSignal<readonly ColonneDeTableau[]>;
|
|
2564
|
+
readonly lignes: _angular_core.InputSignal<readonly T[]>;
|
|
2565
|
+
/** Propriete qui identifie une ligne. Jamais l'indice (FE-1). */
|
|
2566
|
+
readonly cle: _angular_core.InputSignal<keyof T & string>;
|
|
2567
|
+
/** Colonne lue comme en-tete de chaque ligne. Par defaut : la premiere. */
|
|
2568
|
+
readonly enTeteDeLigne: _angular_core.InputSignal<string | null>;
|
|
2569
|
+
readonly premiereColonneFigee: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
2570
|
+
/** Hauteur maximale, `32rem` : l'en-tete se fige, le corps defile. */
|
|
2571
|
+
readonly hauteurMax: _angular_core.InputSignal<string | null>;
|
|
2572
|
+
readonly densite: _angular_core.InputSignal<DensiteDeTableau>;
|
|
2573
|
+
readonly chargement: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
2574
|
+
readonly selectionnable: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
2575
|
+
readonly selection: _angular_core.ModelSignal<readonly string[]>;
|
|
2576
|
+
readonly tri: _angular_core.ModelSignal<TriDeTableau | null>;
|
|
2577
|
+
/** Texte du tableau vide, sans gabarit `stTableauVide`. */
|
|
2578
|
+
readonly texteVide: _angular_core.InputSignal<string | null>;
|
|
2579
|
+
private readonly gabarits;
|
|
2580
|
+
protected readonly gabaritVide: _angular_core.Signal<StTableauVide | undefined>;
|
|
2581
|
+
private readonly zone;
|
|
2582
|
+
protected readonly annonce: AnnonceLocale;
|
|
2583
|
+
protected readonly deborde: _angular_core.WritableSignal<boolean>;
|
|
2584
|
+
protected readonly largeurFigee: _angular_core.WritableSignal<number>;
|
|
2585
|
+
protected readonly identifiants: {
|
|
2586
|
+
readonly legende: `${string}-legende`;
|
|
2587
|
+
readonly selection: `${string}-selection`;
|
|
2588
|
+
};
|
|
2589
|
+
protected readonly cleDEnTete: _angular_core.Signal<string>;
|
|
2590
|
+
protected readonly cellules: _angular_core.Signal<{
|
|
2591
|
+
colonne: ColonneDeTableau;
|
|
2592
|
+
gabarit: TemplateRef<ContexteDeCellule<any>> | null;
|
|
2593
|
+
enTete: boolean;
|
|
2594
|
+
}[]>;
|
|
2595
|
+
protected readonly rangees: _angular_core.Signal<{
|
|
2596
|
+
valeur: T;
|
|
2597
|
+
identifiant: string;
|
|
2598
|
+
nom: string | null;
|
|
2599
|
+
choisie: boolean;
|
|
2600
|
+
}[]>;
|
|
2601
|
+
protected readonly squelette: _angular_core.Signal<number[]>;
|
|
2602
|
+
protected readonly nombreDeColonnes: _angular_core.Signal<number>;
|
|
2603
|
+
protected readonly colonnesDeSquelette: _angular_core.Signal<number[]>;
|
|
2604
|
+
protected readonly toutesChoisies: _angular_core.Signal<boolean>;
|
|
2605
|
+
protected readonly quelquesChoisies: _angular_core.Signal<boolean>;
|
|
2606
|
+
constructor();
|
|
2607
|
+
/** Amene le focus sur le tableau : sa legende est lue (UX-13). */
|
|
2608
|
+
focus(options?: FocusOptions): void;
|
|
2609
|
+
protected sensDe(colonne: ColonneDeTableau): SensDeTri | null;
|
|
2610
|
+
protected ariaSort(colonne: ColonneDeTableau): string | null;
|
|
2611
|
+
protected trier(colonne: ColonneDeTableau): void;
|
|
2612
|
+
protected basculerTout(): void;
|
|
2613
|
+
protected basculer(identifiant: string): void;
|
|
2614
|
+
protected texteDe(ligne: T, colonne: ColonneDeTableau): string | null;
|
|
2615
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StDataTable<any>, never>;
|
|
2616
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StDataTable<any>, "st-data-table", never, { "legende": { "alias": "legende"; "required": true; "isSignal": true; }; "legendeMasquee": { "alias": "legendeMasquee"; "required": false; "isSignal": true; }; "colonnes": { "alias": "colonnes"; "required": true; "isSignal": true; }; "lignes": { "alias": "lignes"; "required": true; "isSignal": true; }; "cle": { "alias": "cle"; "required": true; "isSignal": true; }; "enTeteDeLigne": { "alias": "enTeteDeLigne"; "required": false; "isSignal": true; }; "premiereColonneFigee": { "alias": "premiereColonneFigee"; "required": false; "isSignal": true; }; "hauteurMax": { "alias": "hauteurMax"; "required": false; "isSignal": true; }; "densite": { "alias": "densite"; "required": false; "isSignal": true; }; "chargement": { "alias": "chargement"; "required": false; "isSignal": true; }; "selectionnable": { "alias": "selectionnable"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "tri": { "alias": "tri"; "required": false; "isSignal": true; }; "texteVide": { "alias": "texteVide"; "required": false; "isSignal": true; }; }, { "selection": "selectionChange"; "tri": "triChange"; }, ["gabarits", "gabaritVide"], ["[stActionsDeTableau]"], true, never>;
|
|
2617
|
+
}
|
|
2618
|
+
|
|
2619
|
+
/**
|
|
2620
|
+
* Filtre actif, retirable : « Statut : Expediee ✕ ».
|
|
2621
|
+
*
|
|
2622
|
+
* ```html
|
|
2623
|
+
* <button stFilterChip libelle="Statut : Expediee" (click)="retirer('statut')"></button>
|
|
2624
|
+
* ```
|
|
2625
|
+
*
|
|
2626
|
+
* ⚠️ **Toute la puce est le bouton**, et son nom CONTIENT le texte visible —
|
|
2627
|
+
* « Retirer le filtre Statut : Expediee » (WCAG 2.5.3) : une commande vocale
|
|
2628
|
+
* « cliquer Statut » l'atteint. Une croix seule, a cote d'un texte inerte, serait
|
|
2629
|
+
* une cible de quelques pixels sans nom.
|
|
2630
|
+
*/
|
|
2631
|
+
declare class StFilterChip {
|
|
2632
|
+
private readonly libelles;
|
|
2633
|
+
readonly libelle: _angular_core.InputSignal<string>;
|
|
2634
|
+
protected readonly nom: _angular_core.Signal<string>;
|
|
2635
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StFilterChip, never>;
|
|
2636
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StFilterChip, "button[stFilterChip]", never, { "libelle": { "alias": "libelle"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2637
|
+
}
|
|
2638
|
+
|
|
2639
|
+
/** Un filtre en vigueur, tel qu'il se lit : « Statut : Expediee ». */
|
|
2640
|
+
interface FiltreActif {
|
|
2641
|
+
readonly cle: string;
|
|
2642
|
+
readonly libelle: string;
|
|
2643
|
+
}
|
|
2644
|
+
/**
|
|
2645
|
+
* Barre de filtres : les champs, puis les filtres en vigueur, retirables.
|
|
2646
|
+
*
|
|
2647
|
+
* ```html
|
|
2648
|
+
* <st-filter-bar [filtresActifs]="actifs()" (retrait)="retirer($event)" (effacement)="effacer()">
|
|
2649
|
+
* <st-select libelle="Statut" [options]="statuts" [(value)]="statut" />
|
|
2650
|
+
* </st-filter-bar>
|
|
2651
|
+
* ```
|
|
2652
|
+
*
|
|
2653
|
+
* Un formulaire NOMME : repere « Filtres » dans la liste des reperes du lecteur
|
|
2654
|
+
* d'ecran. Pas un repere `search` : un `st-search-field` pose dedans en porte deja
|
|
2655
|
+
* un, et deux reperes imbriques se liraient en double.
|
|
2656
|
+
*
|
|
2657
|
+
* ⚠️ **Les filtres s'appliquent au changement**, par l'application : Entree dans
|
|
2658
|
+
* un champ n'envoie rien, et ne recharge pas la page.
|
|
2659
|
+
*
|
|
2660
|
+
* ⚠️ **Retirer un filtre rend le focus a la puce suivante**, sinon a la
|
|
2661
|
+
* precedente, sinon au formulaire ; « Effacer les filtres » le rend au formulaire
|
|
2662
|
+
* (UX-14). Le focus ne tombe jamais sur le document, et le retrait s'annonce.
|
|
2663
|
+
*
|
|
2664
|
+
* ⚠️ **Dans l'adresse, des valeurs d'enumeration seulement** (SEC-2) : un texte
|
|
2665
|
+
* cherche, un nom, un IBAN n'y vont pas. Le composant ne touche pas a l'adresse ;
|
|
2666
|
+
* la regle est pour l'application qui le ferait.
|
|
2667
|
+
*/
|
|
2668
|
+
declare class StFilterBar {
|
|
2669
|
+
protected readonly libelles: _angular_core.Signal<_starterlib_ui.LibellesUi>;
|
|
2670
|
+
private readonly element;
|
|
2671
|
+
private readonly injecteur;
|
|
2672
|
+
/** Nom du formulaire. Par defaut : « Filtres ». */
|
|
2673
|
+
readonly etiquette: _angular_core.InputSignal<string | null>;
|
|
2674
|
+
readonly filtresActifs: _angular_core.InputSignal<readonly FiltreActif[]>;
|
|
2675
|
+
readonly retrait: _angular_core.OutputEmitterRef<string>;
|
|
2676
|
+
readonly effacement: _angular_core.OutputEmitterRef<void>;
|
|
2677
|
+
protected readonly annonce: AnnonceLocale;
|
|
2678
|
+
protected readonly identifiantActifs: string;
|
|
2679
|
+
protected readonly etiquetteLue: _angular_core.Signal<string>;
|
|
2680
|
+
protected retirer(filtre: FiltreActif, indice: number): void;
|
|
2681
|
+
protected effacer(): void;
|
|
2682
|
+
private apresLeRendu;
|
|
2683
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StFilterBar, never>;
|
|
2684
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StFilterBar, "st-filter-bar", never, { "etiquette": { "alias": "etiquette"; "required": false; "isSignal": true; }; "filtresActifs": { "alias": "filtresActifs"; "required": false; "isSignal": true; }; }, { "retrait": "retrait"; "effacement": "effacement"; }, never, ["*"], true, never>;
|
|
2206
2685
|
}
|
|
2207
2686
|
|
|
2208
2687
|
/**
|
|
@@ -2536,5 +3015,5 @@ declare class StChargement {
|
|
|
2536
3015
|
/** Toutes les directives de gabarit, a importer d'un coup. */
|
|
2537
3016
|
declare const GABARITS_D_ETAT: readonly [typeof StSucces, typeof StErreur, typeof StVide, typeof StHorsLigne, typeof StChargement];
|
|
2538
3017
|
|
|
2539
|
-
export { AnnonceLocale, CHEMIN_DU_SPRITE, ContratDeChamp, ControleDeSaisie, FUSEAU_PAR_DEFAUT, GABARITS_D_ETAT, IDENTIFIANT_DU_CONTENU_PRINCIPAL, LIBELLES_EN, LIBELLES_FR, NOMS_DICONE, REGION_VIVANTE_PARENTE, ST_LIBELLES, ST_LOCALE, StAppShell, StAvatar, StBadge, StBanner, StBreadcrumb, StButton, StButtonGroup, StCalendar, StCard, StChargement, StCheckbox, StCode, StControleDeChamp, StCopyButton, StCount, StDate, StDivider, StEmpty, StErreur, StError, StErrorSummary, StFieldset, StFileUpload, StFormField, StHeader, StHeading, StHorsLigne, StIbanField, StIcon, StIconButton, StInlineMessage, StInput, StLangSwitch, StLink, StLogo, StMasked, StMoney, StOfflineBanner, StOtpField, StPageTitle, StPasswordField, StPhoneField, StProgress, StRadioGroup, StRelativeTime, StSearchField, StSection, StSelect, StSkeleton, StSkipLink, StSpinner, StState, StStatusPill, StSucces, StSwitch, StTag, StText, StTextarea, StThemeToggle, StTimer, StVide, copierDansLePressePapiers, erreurDate, erreurIban, erreurPlageDeDates, erreurTelephone, erreursDeFichiers, exempleDeDate, filtrerOptions, formaterDuree, fournirCheminDuSprite, fusionnerErreurs, messageDErreur, motifLocal, normaliserPourRecherche, pressePapiersDisponible, provideStarterUi };
|
|
2540
|
-
export type { BornesDeDate, ConfigurationUi, DispositionDeChamp, ElementDeSaisie, ErreurAffichable, FormatDeDate, GraisseDeTexte, IssueDeCopie, LibellesUi, MaillonDeFil, NiveauDeTitre, NomDIcone, OptionDeListe, OptionRadio, OrientationDeSeparateur, ReglesDeFichiers, ReliefDeCarte, RembourrageDeCarte, RemplissageDeTelephone, TailleDIcone, TailleDeBouton, TailleDeSpinner, TailleDeTitre, TonDIcone, TonDeBadge, TonDeBanniere, TonDeMessage, TonDeProgression, TonDeSpinner, TonDeStatut, TypeDeSaisie, TypeMasque, UsageDuMotDePasse, VarianteDErreur, VarianteDeBouton, VarianteDeBoutonIcone, VarianteDeLien, VarianteDeSquelette, VarianteDeTexte };
|
|
3018
|
+
export { AnnonceLocale, CHEMIN_DU_SPRITE, ContratDeChamp, ControleDeSaisie, FUSEAU_PAR_DEFAUT, GABARITS_D_ETAT, IDENTIFIANT_DU_CONTENU_PRINCIPAL, LIBELLES_EN, LIBELLES_FR, NOMS_DICONE, REGION_VIVANTE_PARENTE, ST_LIBELLES, ST_LOCALE, StAppShell, StAvatar, StBadge, StBanner, StBreadcrumb, StButton, StButtonGroup, StCalendar, StCard, StCellule, StChargement, StCheckbox, StCode, StControleDeChamp, StCopyButton, StCount, StDataTable, StDate, StDescription, StDescriptionList, StDivider, StElementDeListe, StEmpty, StErreur, StError, StErrorSummary, StFieldset, StFileUpload, StFilterBar, StFilterChip, StFormField, StHeader, StHeading, StHorsLigne, StIbanField, StIcon, StIconButton, StInlineMessage, StInput, StLangSwitch, StLink, StList, StLogo, StMasked, StMoney, StOfflineBanner, StOtpField, StPageTitle, StPagination, StPasswordField, StPhoneField, StProgress, StRadioGroup, StRelativeTime, StSearchField, StSection, StSelect, StSkeleton, StSkipLink, StSortHeader, StSpinner, StState, StStatusPill, StSucces, StSwitch, StTableauVide, StTag, StText, StTextarea, StThemeToggle, StTimer, StVide, cleDeFichier, copierDansLePressePapiers, erreurDate, erreurIban, erreurPlageDeDates, erreurTelephone, erreursDeFichiers, exempleDeDate, filtrerOptions, formaterDuree, fournirCheminDuSprite, fusionnerErreurs, messageDErreur, motifLocal, normaliserPourRecherche, pressePapiersDisponible, provideStarterUi };
|
|
3019
|
+
export type { BornesDeDate, ColonneDeTableau, ConfigurationUi, ContexteDElementDeListe, ContexteDeCellule, ContexteDeDescription, DensiteDeTableau, DispositionDeChamp, ElementDeDescription, ElementDeSaisie, ErreurAffichable, EtatDeTeleversementAffiche, FiltreActif, Focalisable, FormatDeDate, GraisseDeTexte, IssueDeCopie, LibellesUi, MaillonDeFil, ModeDePagination, NiveauDeTitre, NomDIcone, OptionDeListe, OptionRadio, OrientationDeSeparateur, ReglesDeFichiers, ReliefDeCarte, RembourrageDeCarte, RemplissageDeTelephone, SensDeTri, TailleDIcone, TailleDeBouton, TailleDeSpinner, TailleDeTitre, TonDIcone, TonDeBadge, TonDeBanniere, TonDeMessage, TonDeProgression, TonDeSpinner, TonDeStatut, TriDeTableau, TypeDeSaisie, TypeMasque, UsageDuMotDePasse, VarianteDErreur, VarianteDeBouton, VarianteDeBoutonIcone, VarianteDeLien, VarianteDeSquelette, VarianteDeTexte };
|