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