@starterlib/ui 0.9.1 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -32
- package/assets/icones/catalogue.json +1 -1
- package/fesm2022/starterlib-ui-donnees.mjs +200 -3
- package/fesm2022/starterlib-ui-donnees.mjs.map +1 -1
- package/fesm2022/starterlib-ui-etats.mjs +1158 -0
- package/fesm2022/starterlib-ui-etats.mjs.map +1 -0
- package/fesm2022/starterlib-ui-formulaires.mjs +3 -2
- package/fesm2022/starterlib-ui-formulaires.mjs.map +1 -1
- package/fesm2022/starterlib-ui-indicateurs.mjs +1013 -0
- package/fesm2022/starterlib-ui-indicateurs.mjs.map +1 -0
- package/fesm2022/starterlib-ui-libelles-en.mjs.map +1 -1
- package/fesm2022/starterlib-ui-listes.mjs +5 -2
- package/fesm2022/starterlib-ui-listes.mjs.map +1 -1
- package/fesm2022/starterlib-ui-messagerie.mjs +2 -2
- package/fesm2022/starterlib-ui-messagerie.mjs.map +1 -1
- package/fesm2022/starterlib-ui-mise-en-page.mjs +892 -0
- package/fesm2022/starterlib-ui-mise-en-page.mjs.map +1 -0
- package/fesm2022/starterlib-ui-parcours.mjs +222 -4
- package/fesm2022/starterlib-ui-parcours.mjs.map +1 -1
- package/fesm2022/starterlib-ui-saisie.mjs +131 -3
- package/fesm2022/starterlib-ui-saisie.mjs.map +1 -1
- package/fesm2022/starterlib-ui-surfaces.mjs +2 -1
- package/fesm2022/starterlib-ui-surfaces.mjs.map +1 -1
- package/fesm2022/starterlib-ui.mjs +3526 -7105
- package/fesm2022/starterlib-ui.mjs.map +1 -1
- package/package.json +15 -3
- package/types/starterlib-ui-donnees.d.ts +95 -1
- package/types/starterlib-ui-etats.d.ts +486 -0
- package/types/starterlib-ui-formulaires.d.ts +1 -1
- package/types/starterlib-ui-indicateurs.d.ts +463 -0
- package/types/starterlib-ui-listes.d.ts +2 -1
- package/types/starterlib-ui-mise-en-page.d.ts +355 -0
- package/types/starterlib-ui-parcours.d.ts +123 -3
- package/types/starterlib-ui-saisie.d.ts +72 -2
- package/types/starterlib-ui-selection.d.ts +3 -2
- package/types/starterlib-ui.d.ts +36 -1604
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@starterlib/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "Bibliotheque de composants st-* du socle frontal starter, sur CDK et Aria.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"@angular/forms": "^22.2.0",
|
|
26
26
|
"@angular/cdk": "^22.2.0",
|
|
27
27
|
"@angular/aria": "^22.2.0",
|
|
28
|
-
"@starterlib/tokens": "^0.
|
|
29
|
-
"@starterlib/util": "^0.
|
|
28
|
+
"@starterlib/tokens": "^0.10.0",
|
|
29
|
+
"@starterlib/util": "^0.10.0"
|
|
30
30
|
},
|
|
31
31
|
"peerDependenciesMeta": {
|
|
32
32
|
"@angular/cdk": {
|
|
@@ -57,10 +57,18 @@
|
|
|
57
57
|
"types": "./types/starterlib-ui-donnees.d.ts",
|
|
58
58
|
"default": "./fesm2022/starterlib-ui-donnees.mjs"
|
|
59
59
|
},
|
|
60
|
+
"./etats": {
|
|
61
|
+
"types": "./types/starterlib-ui-etats.d.ts",
|
|
62
|
+
"default": "./fesm2022/starterlib-ui-etats.mjs"
|
|
63
|
+
},
|
|
60
64
|
"./formulaires": {
|
|
61
65
|
"types": "./types/starterlib-ui-formulaires.d.ts",
|
|
62
66
|
"default": "./fesm2022/starterlib-ui-formulaires.mjs"
|
|
63
67
|
},
|
|
68
|
+
"./indicateurs": {
|
|
69
|
+
"types": "./types/starterlib-ui-indicateurs.d.ts",
|
|
70
|
+
"default": "./fesm2022/starterlib-ui-indicateurs.mjs"
|
|
71
|
+
},
|
|
64
72
|
"./libelles-en": {
|
|
65
73
|
"types": "./types/starterlib-ui-libelles-en.d.ts",
|
|
66
74
|
"default": "./fesm2022/starterlib-ui-libelles-en.mjs"
|
|
@@ -73,6 +81,10 @@
|
|
|
73
81
|
"types": "./types/starterlib-ui-messagerie.d.ts",
|
|
74
82
|
"default": "./fesm2022/starterlib-ui-messagerie.mjs"
|
|
75
83
|
},
|
|
84
|
+
"./mise-en-page": {
|
|
85
|
+
"types": "./types/starterlib-ui-mise-en-page.d.ts",
|
|
86
|
+
"default": "./fesm2022/starterlib-ui-mise-en-page.mjs"
|
|
87
|
+
},
|
|
76
88
|
"./navigation": {
|
|
77
89
|
"types": "./types/starterlib-ui-navigation.d.ts",
|
|
78
90
|
"default": "./fesm2022/starterlib-ui-navigation.mjs"
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AnnonceLocale, Icone, TailleDAvatar, TailleDIconeFixe, TonDAvatar } from "@starterlib/ui";
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
-
import {
|
|
3
|
+
import { Ton, TonSemantique } from "@starterlib/util";
|
|
4
|
+
import { Montant } from "@starterlib/util/valeurs";
|
|
4
5
|
export type TypeMasque = 'iban' | 'carte' | 'telephone' | 'reference';
|
|
5
6
|
/**
|
|
6
7
|
* `ligne` : dans le flux d'une phrase ou d'une cellule. `tuile` : la tuile de la planche 2
|
|
@@ -1485,5 +1486,98 @@ export declare class StRepartition {
|
|
|
1485
1486
|
};
|
|
1486
1487
|
}, {}, never, never, true, never>;
|
|
1487
1488
|
}
|
|
1489
|
+
/**
|
|
1490
|
+
* Valeur technique courte et copiable : identifiant de trace, reference
|
|
1491
|
+
* d'operation, code d'erreur. Jamais un secret.
|
|
1492
|
+
*
|
|
1493
|
+
* ⚠️ Le `<code>` est lu par TOUT LE MONDE, technologies d'assistance comprises, precede
|
|
1494
|
+
* de son etiquette (« Code : 7f3a-91c4 ») : la valeur se selectionne au curseur virtuel.
|
|
1495
|
+
* Avant 0.9, un `<code aria-hidden>` doublait une copie masquee, et le curseur virtuel ne
|
|
1496
|
+
* pouvait rien selectionner. `translate="no"` : une reference ne se traduit pas.
|
|
1497
|
+
*
|
|
1498
|
+
* ⚠️ Le bouton de copie porte un nom DISTINCT par valeur : « Copier : <etiquette> », ou
|
|
1499
|
+
* « Copier : <valeur> » sans etiquette. Deux valeurs techniques d'une page ne proposent plus
|
|
1500
|
+
* deux boutons « Copier » ; sans etiquette, « Copier : Code » se repetait a chaque valeur
|
|
1501
|
+
* (revue E7). La valeur est courte par contrat : le nom reste lisible a l'oral.
|
|
1502
|
+
*
|
|
1503
|
+
* ⚠️ La confirmation de copie passe par une petite region vivante interne, et
|
|
1504
|
+
* le NOM DU BOUTON NE CHANGE PAS. Le changer ferait annoncer un autre bouton que
|
|
1505
|
+
* celui que l'utilisateur a sous le doigt.
|
|
1506
|
+
*
|
|
1507
|
+
* ⚠️ Le retour se VOIT aussi (03 §3.20, MV-7) : l'icone passe a la coche, en
|
|
1508
|
+
* `succes`, pendant `rythme.tenue.confirmation`, d'un coup ; un refus laisse un
|
|
1509
|
+
* message visible sous la valeur jusqu'a la tentative suivante. Meme regle que
|
|
1510
|
+
* `st-copy-button`.
|
|
1511
|
+
*/
|
|
1512
|
+
export declare class StCode {
|
|
1513
|
+
private readonly document;
|
|
1514
|
+
private readonly libelles;
|
|
1515
|
+
readonly valeur: import("@angular/core").InputSignal<string>;
|
|
1516
|
+
readonly copiable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1517
|
+
/**
|
|
1518
|
+
* Nature de la valeur (« Identifiant de trace », « Reference de l'operation »), lue avant
|
|
1519
|
+
* elle. `null` : « Code », le mot generique du dictionnaire.
|
|
1520
|
+
*/
|
|
1521
|
+
readonly etiquette: import("@angular/core").InputSignal<string | null>;
|
|
1522
|
+
/**
|
|
1523
|
+
* Nom du bouton de copie. `null` : « Copier : <etiquette> » (« Copier : Code » sans etiquette).
|
|
1524
|
+
* Jamais la valeur : un secret (TOTP) devenait le nom du bouton, lu et journalise par les
|
|
1525
|
+
* technologies d'assistance (audit du 2026-09-27, A-11).
|
|
1526
|
+
*/
|
|
1527
|
+
readonly libelleCopier: import("@angular/core").InputSignal<string | null>;
|
|
1528
|
+
readonly messageDeConfirmation: import("@angular/core").InputSignal<string | null>;
|
|
1529
|
+
/**
|
|
1530
|
+
* La valeur telle qu'elle s'affiche ET se copie : sans commande de direction, ce qu'on voit est
|
|
1531
|
+
* ce qu'on colle (audit du 2026-09-27, A-2).
|
|
1532
|
+
*/
|
|
1533
|
+
protected readonly valeurAffichee: import("@angular/core").Signal<string>;
|
|
1534
|
+
protected readonly etiquetteLue: import("@angular/core").Signal<string>;
|
|
1535
|
+
protected readonly libelleCopierLu: import("@angular/core").Signal<string>;
|
|
1536
|
+
readonly copie: import("@angular/core").OutputEmitterRef<string>;
|
|
1537
|
+
protected readonly annonce: AnnonceLocale;
|
|
1538
|
+
protected readonly copieConfirmee: import("@angular/core").WritableSignal<boolean>;
|
|
1539
|
+
protected readonly copieRefusee: import("@angular/core").WritableSignal<boolean>;
|
|
1540
|
+
protected readonly iconeDeCopie: import("@angular/core").Signal<"iban" | "chargement" | "message" | "devise" | "cle" | "accessibilite" | "appareils" | "arborescence" | "asterisque" | "badge-coche" | "banque" | "batiment" | "bifurcation" | "billets" | "billets-envoi" | "billets-pile" | "boite" | "boite-de-reception" | "bouclier" | "bouclier-alerte" | "bouclier-coche" | "bouclier-coeur" | "bouclier-croix" | "bouclier-moitie" | "bouclier-recherche" | "bouclier-utilisateur" | "boussole" | "bouton-curseur" | "bulle-question" | "cadenas" | "cadenas-horloge" | "cadenas-ouvert" | "cadre-pied" | "cadre-texte" | "calendrier" | "calendrier-evenement" | "calendrier-horloge" | "calendrier-jour" | "calques" | "carte-bancaire" | "carte-bancaire-barre" | "carte-bancaire-cadenas" | "carte-contact" | "carte-identite" | "cartes-empilees" | "case-cochee" | "casse" | "cercle" | "cercle-alerte" | "cercle-chevron-bas" | "cercle-coche" | "cercle-coche-ouvert" | "cercle-croix" | "cercle-info" | "cercle-moins" | "cercle-plus" | "cercle-question" | "certificat" | "chandelier" | "cheque" | "chevron-bas" | "chevron-droite" | "chevron-gauche" | "chevron-haut" | "chevrons-droite" | "chevrons-haut-bas" | "cloche" | "cloche-sonnerie" | "coche" | "code" | "code-qr" | "code-qr-scanner" | "coffre-fort" | "colonnes" | "connexion" | "contraste" | "copie" | "corbeille" | "corbeille-croix" | "courriel" | "crayon" | "croix" | "curseur-clic" | "deconnexion" | "disposition" | "dollar" | "dossier" | "dossier-barre" | "dossier-ouvert" | "double-coche" | "echange" | "eclair" | "empreinte-digitale" | "enregistrer" | "entree" | "envoyer" | "epaisseur-de-trait" | "epingle" | "etoile" | "euro" | "fichier" | "fichier-image" | "fichier-pdf" | "fichier-texte" | "filtre" | "filtre-barre" | "filtre-lignes" | "fleche-bas" | "fleche-bas-gauche" | "fleche-bas-ligne" | "fleche-droite" | "fleche-gauche" | "fleche-haut" | "fleche-haut-droite" | "fleche-haut-ligne" | "fleche-large-haut" | "fleches-gauche-droite" | "flocon" | "flou" | "formes" | "globe" | "graphique-anneau" | "graphique-barres" | "graphique-barres-cadre" | "graphique-camembert" | "graphique-ligne" | "graphique-lignes" | "grille" | "grille-lignes" | "hexagone" | "historique" | "horloge" | "horloge-fleche" | "imprimer" | "interdit" | "jalons" | "jauge" | "lien" | "lien-externe" | "lignes" | "lignes-crayon" | "liste" | "liste-coche" | "liste-controle" | "liste-numerotee" | "luminosite" | "lune" | "maillet" | "maison" | "marque-page" | "menu" | "menu-ouvert" | "minuteur" | "mise-au-point" | "mise-en-page-image" | "moins" | "nuage-barre" | "nuage-televerser" | "octogone-alerte" | "oeil" | "oeil-barre" | "panneau-gauche" | "parametres" | "parapluie" | "parchemin" | "pieces" | "plus" | "pointeur" | "points" | "points-verticaux" | "portefeuille" | "portefeuille-cartes" | "presse-papiers-coche" | "presse-papiers-horloge" | "priorite-haute" | "rafraichir" | "recherche" | "recherche-barre" | "recherche-texte" | "rectangle-points" | "recu" | "redemarrer" | "reglages" | "regle" | "reseau-jauge" | "rotation-arriere" | "routeur" | "sablier" | "sablier-bas" | "sablier-haut" | "sac-argent" | "sans-contact" | "serveur" | "soleil" | "style-de-trait" | "synchro" | "synchro-probleme" | "tableau" | "tableau-de-bord" | "tableau-de-bord-plus" | "tablette" | "tabulation" | "telecharger" | "telephone-mobile" | "televerser" | "tendance-baisse" | "tendance-hausse" | "terminal" | "tirelire" | "triangle-alerte" | "triangle-bas" | "triangle-haut" | "trombone" | "utilisateur" | "utilisateur-crayon" | "utilisateurs" | "wifi" | "wifi-barre">;
|
|
1541
|
+
protected readonly messageDeRefus: import("@angular/core").Signal<string>;
|
|
1542
|
+
private minuterieDeConfirmation;
|
|
1543
|
+
constructor();
|
|
1544
|
+
/**
|
|
1545
|
+
* Le bouton n'apparait que si le navigateur sait copier. Sans presse-papiers,
|
|
1546
|
+
* un bouton qui ne fait rien vaut moins que la selection manuelle, que la
|
|
1547
|
+
* feuille garde possible (`user-select: all`).
|
|
1548
|
+
*/
|
|
1549
|
+
protected readonly copiePossible: import("@angular/core").Signal<boolean>;
|
|
1550
|
+
protected auClicDeCopie(): Promise<void>;
|
|
1551
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StCode, never>;
|
|
1552
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StCode, "st-code", never, {
|
|
1553
|
+
"valeur": {
|
|
1554
|
+
"alias": "valeur";
|
|
1555
|
+
"required": true;
|
|
1556
|
+
"isSignal": true;
|
|
1557
|
+
};
|
|
1558
|
+
"copiable": {
|
|
1559
|
+
"alias": "copiable";
|
|
1560
|
+
"required": false;
|
|
1561
|
+
"isSignal": true;
|
|
1562
|
+
};
|
|
1563
|
+
"etiquette": {
|
|
1564
|
+
"alias": "etiquette";
|
|
1565
|
+
"required": false;
|
|
1566
|
+
"isSignal": true;
|
|
1567
|
+
};
|
|
1568
|
+
"libelleCopier": {
|
|
1569
|
+
"alias": "libelleCopier";
|
|
1570
|
+
"required": false;
|
|
1571
|
+
"isSignal": true;
|
|
1572
|
+
};
|
|
1573
|
+
"messageDeConfirmation": {
|
|
1574
|
+
"alias": "messageDeConfirmation";
|
|
1575
|
+
"required": false;
|
|
1576
|
+
"isSignal": true;
|
|
1577
|
+
};
|
|
1578
|
+
}, {
|
|
1579
|
+
"copie": "copie";
|
|
1580
|
+
}, never, never, true, never>;
|
|
1581
|
+
}
|
|
1488
1582
|
|
|
1489
1583
|
export {};
|
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { InjectionToken, Resource, Signal, TemplateRef } from "@angular/core";
|
|
3
|
+
import { ErreurDeBloc } from "@starterlib/ui";
|
|
4
|
+
import { EtatDeBloc } from "@starterlib/util";
|
|
5
|
+
/**
|
|
6
|
+
* Les gabarits des cinq etats, declares DANS `<st-state>`.
|
|
7
|
+
*
|
|
8
|
+
* ⚠️ Pourquoi des directives de contenu plutot que des entrees `TemplateRef` :
|
|
9
|
+
* un `<ng-template>` declare a l'exterieur du composant appartient a
|
|
10
|
+
* l'injecteur de l'endroit ou il est ECRIT, pas de celui qui le rend. Les
|
|
11
|
+
* fournisseurs de `st-state` — dont `REGION_VIVANTE_PARENTE`, qui fait taire
|
|
12
|
+
* les annonces en double — ne l'atteignaient donc pas, et l'erreur etait
|
|
13
|
+
* annoncee deux fois. Passer par le contenu rend la declaration a l'exterieur
|
|
14
|
+
* impossible : le defaut ne peut plus revenir.
|
|
15
|
+
*/
|
|
16
|
+
export declare class StSucces<T> {
|
|
17
|
+
readonly gabarit: TemplateRef<{
|
|
18
|
+
$implicit: Exclude<T, undefined>;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* La ressource n'est lue nulle part : elle porte le TYPE de la valeur, pour
|
|
22
|
+
* que `let-valeur` soit type dans le gabarit au lieu d'etre `unknown`.
|
|
23
|
+
*/
|
|
24
|
+
readonly stSucces: import("@angular/core").InputSignal<Resource<T> | undefined>;
|
|
25
|
+
/**
|
|
26
|
+
* `Exclude<T, undefined>` : une ressource sans valeur initiale se type
|
|
27
|
+
* `T | undefined`, mais st-state ne rend ce gabarit QUE lorsqu'une valeur
|
|
28
|
+
* existe. Sans cela, chaque gabarit de succes devrait ecrire `page?.length`
|
|
29
|
+
* pour un cas qui ne se produit pas.
|
|
30
|
+
*/
|
|
31
|
+
static ngTemplateContextGuard<T>(_directive: StSucces<T>, _contexte: unknown): _contexte is {
|
|
32
|
+
$implicit: Exclude<T, undefined>;
|
|
33
|
+
};
|
|
34
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StSucces<any>, never>;
|
|
35
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StSucces<any>, "ng-template[stSucces]", never, {
|
|
36
|
+
"stSucces": {
|
|
37
|
+
"alias": "stSucces";
|
|
38
|
+
"required": false;
|
|
39
|
+
"isSignal": true;
|
|
40
|
+
};
|
|
41
|
+
}, {}, never, never, true, never>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Erreur. Le contexte porte l'erreur DECRITE (`decrireLErreur`) : code machine, variante,
|
|
45
|
+
* rejouabilite, trace ; l'erreur brute reste dans `cause`. Les applications cessent de recopier
|
|
46
|
+
* leur « code de » et leur « est-ce rejouable ».
|
|
47
|
+
*/
|
|
48
|
+
export declare class StErreur {
|
|
49
|
+
readonly gabarit: TemplateRef<{
|
|
50
|
+
$implicit: ErreurDeBloc;
|
|
51
|
+
}>;
|
|
52
|
+
static ngTemplateContextGuard(_directive: StErreur, _contexte: unknown): _contexte is {
|
|
53
|
+
$implicit: ErreurDeBloc;
|
|
54
|
+
};
|
|
55
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StErreur, never>;
|
|
56
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StErreur, "ng-template[stErreur]", never, {}, {}, never, never, true, never>;
|
|
57
|
+
}
|
|
58
|
+
export declare class StVide {
|
|
59
|
+
readonly gabarit: TemplateRef<void>;
|
|
60
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StVide, never>;
|
|
61
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StVide, "ng-template[stVide]", never, {}, {}, never, never, true, never>;
|
|
62
|
+
}
|
|
63
|
+
export declare class StHorsLigne {
|
|
64
|
+
readonly gabarit: TemplateRef<void>;
|
|
65
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StHorsLigne, never>;
|
|
66
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StHorsLigne, "ng-template[stHorsLigne]", never, {}, {}, never, never, true, never>;
|
|
67
|
+
}
|
|
68
|
+
/** Chargement sur mesure. Sans lui, `st-state` rend sa silhouette par defaut. */
|
|
69
|
+
export declare class StChargement {
|
|
70
|
+
readonly gabarit: TemplateRef<void>;
|
|
71
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StChargement, never>;
|
|
72
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StChargement, "ng-template[stChargement]", never, {}, {}, never, never, true, never>;
|
|
73
|
+
}
|
|
74
|
+
/** Toutes les directives de gabarit, a importer d'un coup. */
|
|
75
|
+
export declare const GABARITS_D_ETAT: readonly [typeof StSucces, typeof StErreur, typeof StVide, typeof StHorsLigne, typeof StChargement];
|
|
76
|
+
/**
|
|
77
|
+
* Les silhouettes de la planche 9 de Claude Design (typologie des squelettes, lot 207) :
|
|
78
|
+
* - `texte` (defaut) : des lignes de texte, la derniere a 60 % ;
|
|
79
|
+
* - `tableau` : rangee d'en-tete courte, puis des rangees de cellules (la troisieme en pastille) ;
|
|
80
|
+
* - `liste` : des rangees disque de 40 px, deux lignes et un montant, en option sous une rangee
|
|
81
|
+
* d'en-tete (`entete`, planche 2) ;
|
|
82
|
+
* - `carte` : en-tete, media 16/9 a pictogramme, pied ;
|
|
83
|
+
* - `formulaire` : des champs (libelle, champ de 44 px, aide sur un champ sur deux) ;
|
|
84
|
+
* - `indicateur` : le bloc d'un indicateur chiffre (libelle et pastille, valeur, deux lignes).
|
|
85
|
+
*/
|
|
86
|
+
export type VarianteDeSquelette = 'texte' | 'tableau' | 'liste' | 'carte' | 'formulaire' | 'indicateur';
|
|
87
|
+
/**
|
|
88
|
+
* Silhouette du contenu en cours de chargement.
|
|
89
|
+
*
|
|
90
|
+
* Entierement masque aux technologies d'assistance : c'est `stState` qui
|
|
91
|
+
* annonce le chargement, une fois. Un squelette annonce ligne par ligne
|
|
92
|
+
* noierait le lecteur d'ecran. Pose hors de `st-state`, son conteneur porte
|
|
93
|
+
* `aria-busy="true"` pendant le chargement (recette).
|
|
94
|
+
*
|
|
95
|
+
* Il doit reproduire la BOITE du contenu reel, sinon l'arrivee des donnees
|
|
96
|
+
* fait sauter la mise en page.
|
|
97
|
+
*/
|
|
98
|
+
export declare class StSkeleton {
|
|
99
|
+
readonly variante: import("@angular/core").InputSignal<VarianteDeSquelette>;
|
|
100
|
+
/** Lignes de texte, rangees de tableau ou de liste, champs de formulaire. */
|
|
101
|
+
readonly lignes: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
102
|
+
readonly colonnes: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
103
|
+
readonly anime: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
104
|
+
/**
|
|
105
|
+
* Pose la silhouette dans un creux (`surfaceConteneurBas`, 16 px de marge, coins de 8 px) :
|
|
106
|
+
* la planche 9 montre ainsi un bloc en attente au milieu d'une carte blanche.
|
|
107
|
+
*/
|
|
108
|
+
readonly puits: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
109
|
+
/**
|
|
110
|
+
* Une rangee d'en-tete au-dessus de la liste : deux blocs de 24 px aux deux bouts (le titre et
|
|
111
|
+
* l'action d'une liste, planche 2). Sans effet hors de la variante `liste`.
|
|
112
|
+
*/
|
|
113
|
+
readonly entete: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
114
|
+
protected readonly avecEntete: import("@angular/core").Signal<boolean>;
|
|
115
|
+
protected readonly enteteDeListe: readonly [32, 20];
|
|
116
|
+
protected readonly indicesDeLigne: import("@angular/core").Signal<number[]>;
|
|
117
|
+
protected readonly indicesDeColonne: import("@angular/core").Signal<number[]>;
|
|
118
|
+
/** Pas des titres de colonne. */
|
|
119
|
+
protected readonly enteteDeTableau: import("@angular/core").Signal<(24 | 32 | 20)[]>;
|
|
120
|
+
/** Pour chaque rangee, le pas de chaque cellule et si elle est une pastille. */
|
|
121
|
+
protected readonly rangeesDeTableau: import("@angular/core").Signal<{
|
|
122
|
+
pas: 24 | 32 | 20 | 28 | 48 | 16 | 40 | 36 | 14;
|
|
123
|
+
pastille: boolean;
|
|
124
|
+
}[][]>;
|
|
125
|
+
protected readonly rangeesDeListe: import("@angular/core").Signal<{
|
|
126
|
+
titre: 28 | 36 | 44;
|
|
127
|
+
sousTitre: 32 | 48 | 40;
|
|
128
|
+
montant: 24 | 20 | 28;
|
|
129
|
+
}[]>;
|
|
130
|
+
protected readonly champsDeFormulaire: import("@angular/core").Signal<{
|
|
131
|
+
libelle: 28 | 36;
|
|
132
|
+
aide: boolean;
|
|
133
|
+
}[]>;
|
|
134
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StSkeleton, never>;
|
|
135
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StSkeleton, "st-skeleton", never, {
|
|
136
|
+
"variante": {
|
|
137
|
+
"alias": "variante";
|
|
138
|
+
"required": false;
|
|
139
|
+
"isSignal": true;
|
|
140
|
+
};
|
|
141
|
+
"lignes": {
|
|
142
|
+
"alias": "lignes";
|
|
143
|
+
"required": false;
|
|
144
|
+
"isSignal": true;
|
|
145
|
+
};
|
|
146
|
+
"colonnes": {
|
|
147
|
+
"alias": "colonnes";
|
|
148
|
+
"required": false;
|
|
149
|
+
"isSignal": true;
|
|
150
|
+
};
|
|
151
|
+
"anime": {
|
|
152
|
+
"alias": "anime";
|
|
153
|
+
"required": false;
|
|
154
|
+
"isSignal": true;
|
|
155
|
+
};
|
|
156
|
+
"puits": {
|
|
157
|
+
"alias": "puits";
|
|
158
|
+
"required": false;
|
|
159
|
+
"isSignal": true;
|
|
160
|
+
};
|
|
161
|
+
"entete": {
|
|
162
|
+
"alias": "entete";
|
|
163
|
+
"required": false;
|
|
164
|
+
"isSignal": true;
|
|
165
|
+
};
|
|
166
|
+
}, {}, never, never, true, never>;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Presence du reseau, lue par `st-state` A L'INSTANT OU UNE ERREUR APPARAIT : une erreur survenue
|
|
170
|
+
* hors ligne se dit « hors ligne », pas « une erreur est survenue ». La lecture est figee avec
|
|
171
|
+
* l'erreur : une erreur deja affichee n'est jamais re-etiquetee quand la connectivite bascule.
|
|
172
|
+
*
|
|
173
|
+
* ⚠️ `ui` ne depend pas de `@starterlib/core` (ADR 0003) : c'est l'HOTE qui relie ce jeton a
|
|
174
|
+
* `StConnectivite` du noyau, qui fait d'un statut 0 la source d'autorite et se rouvre a la
|
|
175
|
+
* premiere reponse (lot 165) :
|
|
176
|
+
*
|
|
177
|
+
* ```ts
|
|
178
|
+
* { provide: ST_EN_LIGNE, useFactory: () => inject(StConnectivite).enLigne }
|
|
179
|
+
* ```
|
|
180
|
+
*
|
|
181
|
+
* ⚠️ Relie a `StConnectivite`, le jeton ne change le rendu d'AUCUNE reponse du serveur :
|
|
182
|
+
* l'intercepteur du noyau remet la connectivite en ligne sur toute reponse, avant que l'erreur
|
|
183
|
+
* n'atteigne la ressource. Seul le statut 0 fait alors autorite (predicat `estHorsLigne`). Le
|
|
184
|
+
* defaut, qui suit les evenements `online` / `offline` du navigateur, couvre en plus l'erreur
|
|
185
|
+
* rendue hors ligne sans reseau (un service worker qui repond a la place du serveur).
|
|
186
|
+
*/
|
|
187
|
+
export declare const ST_EN_LIGNE: InjectionToken<Signal<boolean>>;
|
|
188
|
+
/** Ce qu'un etat degrade rend quand l'appelant n'a pas fourni son gabarit. */
|
|
189
|
+
type GabaritParDefaut = 'vide' | 'erreur' | 'hors-ligne';
|
|
190
|
+
/**
|
|
191
|
+
* Impose les cinq etats a un bloc qui consomme l'API, et centralise leur
|
|
192
|
+
* annonce.
|
|
193
|
+
*
|
|
194
|
+
* Deux usages. Le plus courant passe la ressource, et l'etat s'en deduit :
|
|
195
|
+
*
|
|
196
|
+
* ```html
|
|
197
|
+
* <st-state [ressource]="operations">
|
|
198
|
+
* <ng-template [stSucces]="operations" let-page>…</ng-template>
|
|
199
|
+
* <ng-template stErreur let-erreur><st-error [code]="erreur.code" … /></ng-template>
|
|
200
|
+
* <ng-template stVide><st-empty … /></ng-template>
|
|
201
|
+
* </st-state>
|
|
202
|
+
* ```
|
|
203
|
+
*
|
|
204
|
+
* L'autre pose `[etat]` a la main, pour un bloc qui ne vient pas d'une
|
|
205
|
+
* ressource — une soumission de formulaire, par exemple.
|
|
206
|
+
*
|
|
207
|
+
* ⚠️ Un RECHARGEMENT garde le contenu affiche, sous une barre de 4 px en tete du bloc
|
|
208
|
+
* (planche 9). Revenir a la silhouette a chaque changement de filtre fait clignoter la
|
|
209
|
+
* page entiere et perd la position de lecture ; seul un chargement SANS valeur retenue
|
|
210
|
+
* (premier appel, ou rejeu apres une erreur) montre la silhouette — jamais l'etat vide.
|
|
211
|
+
*
|
|
212
|
+
* ⚠️ Anti-clignotement, a l'oeil ET a l'oreille : rien avant `rythme.delai.attente`, puis
|
|
213
|
+
* la silhouette au moins `rythme.tenue.affichageMinimal` ; « Chargement en cours » n'est
|
|
214
|
+
* dit que si la silhouette est montree. Un rechargement de plus de
|
|
215
|
+
* `rythme.tenue.rechargementAnnonce` s'annonce une fois (« Actualisation en cours »).
|
|
216
|
+
*
|
|
217
|
+
* ⚠️ L'hote ne porte PAS `role="status"`, contrairement a ce qu'on attendrait :
|
|
218
|
+
* un remplacement de contenu A L'INTERIEUR d'une region vivante fait relire
|
|
219
|
+
* tout le sous-arbre par le lecteur d'ecran a chaque bascule d'etat. Seule une
|
|
220
|
+
* petite zone masquee porte l'annonce, qui tient en quelques mots.
|
|
221
|
+
*
|
|
222
|
+
* ⚠️ `REGION_VIVANTE_PARENTE` ne vaut que pour les etats que st-state ANNONCE (chargement,
|
|
223
|
+
* erreur, vide, hors ligne) : il se tait en succes, et le contenu du gabarit `stSucces` se dit
|
|
224
|
+
* donc lui-meme — une erreur d'action y garde son `role="alert"`, une banniere hors ligne son
|
|
225
|
+
* `role="status"`. Fourni a tout le contenu, le jeton les faisait taire sans que personne ne
|
|
226
|
+
* parle a leur place (revue E8).
|
|
227
|
+
*
|
|
228
|
+
* ⚠️ Un gabarit d'etat degrade oublie rend le gabarit PAR DEFAUT du dictionnaire (« Aucun
|
|
229
|
+
* resultat », « Une erreur est survenue », « Hors connexion ») plutot qu'un bloc vide ; en
|
|
230
|
+
* developpement, un avertissement le signale.
|
|
231
|
+
*/
|
|
232
|
+
export declare class StState<T> {
|
|
233
|
+
private readonly libelles;
|
|
234
|
+
private readonly enLigne;
|
|
235
|
+
/** La ressource dont l'etat se deduit. */
|
|
236
|
+
readonly ressource: import("@angular/core").InputSignal<Resource<T> | null>;
|
|
237
|
+
/** Etat pose a la main. Il prime sur la ressource quand les deux existent. */
|
|
238
|
+
readonly etat: import("@angular/core").InputSignal<EtatDeBloc | null>;
|
|
239
|
+
/** Ce qui compte comme « vide » : par defaut, une collection sans element. */
|
|
240
|
+
readonly estVide: import("@angular/core").InputSignal<(valeur: T) => boolean>;
|
|
241
|
+
/**
|
|
242
|
+
* Ce qui compte comme une perte de reseau : par defaut, le statut 0. Une erreur APPARUE
|
|
243
|
+
* pendant que `ST_EN_LIGNE` disait hors ligne en est une aussi, quel que soit ce predicat.
|
|
244
|
+
*/
|
|
245
|
+
readonly estHorsLigne: import("@angular/core").InputSignal<(erreur: unknown) => boolean>;
|
|
246
|
+
/** Silhouette par defaut du chargement. `null` : un indicateur tournant. */
|
|
247
|
+
readonly squelette: import("@angular/core").InputSignal<VarianteDeSquelette | null>;
|
|
248
|
+
readonly lignesDeSquelette: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
249
|
+
/**
|
|
250
|
+
* Rien n'est montre avant ce delai, en millisecondes (`rythme.delai.attente`). Zero : la
|
|
251
|
+
* silhouette tout de suite, pour un bloc dont on SAIT qu'il sera long (un rapport).
|
|
252
|
+
*/
|
|
253
|
+
readonly delaiAvantSilhouette: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
254
|
+
/** `null` : les annonces viennent du dictionnaire de l'application. `succes` se tait. */
|
|
255
|
+
readonly annonces: import("@angular/core").InputSignal<Readonly<Partial<Record<EtatDeBloc, string>>> | null>;
|
|
256
|
+
/**
|
|
257
|
+
* Hauteur reservee au bloc, longueur CSS (`'12rem'`, `'240px'`) : la silhouette, puis le contenu,
|
|
258
|
+
* y tiennent sans pousser ce qui suit — aucun decalage de mise en page au passage du chargement
|
|
259
|
+
* au succes (CLS 0, lot 211). Un contenu plus haut agrandit le bloc. `null` : rien de reserve.
|
|
260
|
+
*/
|
|
261
|
+
readonly hauteurMinimale: import("@angular/core").InputSignal<string | null>;
|
|
262
|
+
private readonly gabaritSucces;
|
|
263
|
+
private readonly gabaritErreur;
|
|
264
|
+
private readonly gabaritVide;
|
|
265
|
+
private readonly gabaritHorsLigne;
|
|
266
|
+
private readonly gabaritChargement;
|
|
267
|
+
private readonly instantane;
|
|
268
|
+
/**
|
|
269
|
+
* La derniere valeur connue, gardee pendant qu'une autre se charge.
|
|
270
|
+
*
|
|
271
|
+
* ⚠️ Necessaire, et pas seulement confortable : un changement de PARAMETRE
|
|
272
|
+
* n'est pas un `reload`. Angular traite le premier comme une nouvelle
|
|
273
|
+
* requete — statut « loading », valeur videe. Sans cette memoire, changer un
|
|
274
|
+
* filtre ou tourner une page ferait donc disparaitre le tableau, clignoter la
|
|
275
|
+
* page, et perdre la position de lecture. Une erreur, elle, ne garde rien :
|
|
276
|
+
* afficher des donnees perimees sous un message d'erreur serait mentir.
|
|
277
|
+
*/
|
|
278
|
+
private readonly valeurRetenue;
|
|
279
|
+
/**
|
|
280
|
+
* La connectivite a l'instant de l'erreur, figee avec elle : recalculee seulement quand une
|
|
281
|
+
* NOUVELLE erreur apparait. Lue en direct, une bascule du reseau re-etiquetait une erreur deja
|
|
282
|
+
* affichee (un 409 devenait « Hors connexion »), et la region polie la re-annoncait.
|
|
283
|
+
*/
|
|
284
|
+
private readonly horsLigneALErreur;
|
|
285
|
+
/** Etat deduit de la ressource, valeur retenue comprise. */
|
|
286
|
+
private readonly etatDeLaRessource;
|
|
287
|
+
/**
|
|
288
|
+
* ⚠️ Un succes pose A LA MAIN sur une ressource qui n'a encore rien rendu passerait `undefined`
|
|
289
|
+
* au gabarit de succes, que son type promet defini (`let-page` : A1113) : c'est encore un
|
|
290
|
+
* chargement. Sans ressource, le succes pose a la main se rend tel quel.
|
|
291
|
+
*/
|
|
292
|
+
protected readonly etatEffectif: Signal<EtatDeBloc>;
|
|
293
|
+
/**
|
|
294
|
+
* Une valeur est affichee, et une autre arrive — par rappel explicite ou par
|
|
295
|
+
* changement de parametre.
|
|
296
|
+
*/
|
|
297
|
+
protected readonly enRechargement: Signal<boolean>;
|
|
298
|
+
/** Une ressource au repos (`idle`) n'attend rien : pas d'`aria-busy` perpetuel. */
|
|
299
|
+
protected readonly enAttente: Signal<boolean>;
|
|
300
|
+
/**
|
|
301
|
+
* La silhouette, une fois le delai anti-clignotement passe, et pour au moins la
|
|
302
|
+
* tenue minimale (`rythme.delai.attente`, `rythme.tenue.affichageMinimal`) : une
|
|
303
|
+
* reponse rapide n'a pas a clignoter, une reponse a 210 ms ne produit pas d'eclair.
|
|
304
|
+
* Le gabarit `stChargement` y est soumis aussi.
|
|
305
|
+
*/
|
|
306
|
+
private readonly chargementVisible;
|
|
307
|
+
/** Un rechargement long s'annonce, une fois, passe `rythme.tenue.rechargementAnnonce`. */
|
|
308
|
+
private readonly rechargementLong;
|
|
309
|
+
/**
|
|
310
|
+
* La silhouette, une fois le delai anti-clignotement passe, et TENUE :
|
|
311
|
+
* elle reste le temps de la tenue minimale meme si la reponse arrive avant.
|
|
312
|
+
* ⚠️ Sans condition sur l'etat : exiger aussi « encore en chargement » faisait
|
|
313
|
+
* partir la silhouette des la reponse, et une reponse a 230 ms la montrait 30 ms
|
|
314
|
+
* — l'eclair que la tenue doit eviter (revue E5).
|
|
315
|
+
*/
|
|
316
|
+
protected readonly montreLaSilhouette: Signal<boolean>;
|
|
317
|
+
/** Le gabarit `stChargement`, soumis au meme delai et a la meme tenue que la silhouette. */
|
|
318
|
+
protected readonly gabaritDeChargement: Signal<TemplateRef<void> | null>;
|
|
319
|
+
private readonly annoncesLues;
|
|
320
|
+
/**
|
|
321
|
+
* Ce qui se dit : l'etat, sauf le chargement tant que la silhouette n'est pas montree (une
|
|
322
|
+
* reponse a 100 ms ne dit rien), et « Actualisation en cours » pour un rechargement long.
|
|
323
|
+
*/
|
|
324
|
+
protected readonly annonce: Signal<string>;
|
|
325
|
+
/**
|
|
326
|
+
* L'injecteur du gabarit de succes : il masque `REGION_VIVANTE_PARENTE`, que les fournisseurs
|
|
327
|
+
* de st-state posent pour les etats qu'il annonce. Le gabarit est declare dans le contenu de
|
|
328
|
+
* st-state : sans ce masque, il voyait le jeton.
|
|
329
|
+
*/
|
|
330
|
+
private readonly injecteurDuSucces;
|
|
331
|
+
/** `null` : l'injecteur de declaration du gabarit, sous la region de st-state. */
|
|
332
|
+
protected readonly injecteurDuGabarit: Signal<import("@angular/core").DestroyableInjector | null>;
|
|
333
|
+
/** L'erreur de la ressource, decrite pour le gabarit (`let-erreur` : `ErreurDeBloc`). */
|
|
334
|
+
protected readonly erreurDecrite: Signal<ErreurDeBloc | null>;
|
|
335
|
+
/** Contexte passe au gabarit : la valeur en succes, l'erreur decrite en erreur. */
|
|
336
|
+
protected readonly contexte: Signal<{
|
|
337
|
+
$implicit: unknown;
|
|
338
|
+
}>;
|
|
339
|
+
/** Le gabarit de l'etat courant, ou `null` (silhouette, ou gabarit par defaut). */
|
|
340
|
+
protected readonly gabaritDeLEtat: Signal<TemplateRef<unknown> | null>;
|
|
341
|
+
/** L'etat degrade dont le gabarit manque, rendu par le gabarit du dictionnaire. */
|
|
342
|
+
protected readonly gabaritParDefaut: Signal<GabaritParDefaut | null>;
|
|
343
|
+
/** Les textes des gabarits par defaut : ceux du dictionnaire, jamais une phrase du serveur. */
|
|
344
|
+
protected readonly textesParDefaut: Signal<import("@starterlib/ui").LibellesUi>;
|
|
345
|
+
/**
|
|
346
|
+
* Ce qui est a l'ecran : la silhouette, ou le bloc de l'etat. Suivi pour le fondu
|
|
347
|
+
* d'arrivee, qui ne vaut qu'a la sortie d'un chargement MONTRE.
|
|
348
|
+
*/
|
|
349
|
+
private readonly affiche;
|
|
350
|
+
constructor();
|
|
351
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StState<any>, never>;
|
|
352
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StState<any>, "st-state", never, {
|
|
353
|
+
"ressource": {
|
|
354
|
+
"alias": "ressource";
|
|
355
|
+
"required": false;
|
|
356
|
+
"isSignal": true;
|
|
357
|
+
};
|
|
358
|
+
"etat": {
|
|
359
|
+
"alias": "etat";
|
|
360
|
+
"required": false;
|
|
361
|
+
"isSignal": true;
|
|
362
|
+
};
|
|
363
|
+
"estVide": {
|
|
364
|
+
"alias": "estVide";
|
|
365
|
+
"required": false;
|
|
366
|
+
"isSignal": true;
|
|
367
|
+
};
|
|
368
|
+
"estHorsLigne": {
|
|
369
|
+
"alias": "estHorsLigne";
|
|
370
|
+
"required": false;
|
|
371
|
+
"isSignal": true;
|
|
372
|
+
};
|
|
373
|
+
"squelette": {
|
|
374
|
+
"alias": "squelette";
|
|
375
|
+
"required": false;
|
|
376
|
+
"isSignal": true;
|
|
377
|
+
};
|
|
378
|
+
"lignesDeSquelette": {
|
|
379
|
+
"alias": "lignesDeSquelette";
|
|
380
|
+
"required": false;
|
|
381
|
+
"isSignal": true;
|
|
382
|
+
};
|
|
383
|
+
"delaiAvantSilhouette": {
|
|
384
|
+
"alias": "delaiAvantSilhouette";
|
|
385
|
+
"required": false;
|
|
386
|
+
"isSignal": true;
|
|
387
|
+
};
|
|
388
|
+
"annonces": {
|
|
389
|
+
"alias": "annonces";
|
|
390
|
+
"required": false;
|
|
391
|
+
"isSignal": true;
|
|
392
|
+
};
|
|
393
|
+
"hauteurMinimale": {
|
|
394
|
+
"alias": "hauteurMinimale";
|
|
395
|
+
"required": false;
|
|
396
|
+
"isSignal": true;
|
|
397
|
+
};
|
|
398
|
+
}, {}, ["gabaritSucces", "gabaritErreur", "gabaritVide", "gabaritHorsLigne", "gabaritChargement"], never, true, never>;
|
|
399
|
+
}
|
|
400
|
+
/** `clair` : surface a liseret primaire. `marque` : ilot sombre de la marque, a halo. */
|
|
401
|
+
export type VarianteDeDemarrage = 'clair' | 'marque';
|
|
402
|
+
/**
|
|
403
|
+
* Ecran de demarrage : ce qu'on voit pendant que l'application se charge, APRES l'amorce statique
|
|
404
|
+
* (`@starterlib/ui/styles/amorce.css`, peinte avant le JavaScript) et avant le premier ecran.
|
|
405
|
+
*
|
|
406
|
+
* ```html
|
|
407
|
+
* <st-splash-screen variante="marque" nom="Banque Exemple" sousTitre="Tresorerie"
|
|
408
|
+
* statut="Synchronisation des ordres" version="Version 0.9.0">
|
|
409
|
+
* <st-icon logo nom="banque" taille="28" />
|
|
410
|
+
* <span surtitre>PORTAIL</span>
|
|
411
|
+
* </st-splash-screen>
|
|
412
|
+
* ```
|
|
413
|
+
*
|
|
414
|
+
* ⚠️ **Aucune retention artificielle** (D25) : l'application le retire des qu'elle est prete. Un
|
|
415
|
+
* ecran de demarrage qui se montre « au moins deux secondes » fait attendre pour rien.
|
|
416
|
+
*
|
|
417
|
+
* ⚠️ **Le statut n'apparait qu'apres `rythme.delai.attente`** (200 ms) : un demarrage rapide ne
|
|
418
|
+
* fait pas clignoter une phrase qu'on n'a pas le temps de lire. Il est lu par une region
|
|
419
|
+
* `status`, presente VIDE des la creation ; sans `statut`, elle lit le libelle par defaut
|
|
420
|
+
* (`chargementEnCours`, masque) : l'attente est un message d'etat (WCAG 4.1.3). L'indicateur et
|
|
421
|
+
* la barre, eux, se taisent (une seule annonce).
|
|
422
|
+
*
|
|
423
|
+
* ⚠️ **Aucun `aria-busy` sur l'ecran** : un sous-arbre `busy` peut etre ignore par les lecteurs
|
|
424
|
+
* d'ecran jusqu'a son retour a `false`, et l'ecran est retire, jamais rendu « pret ». Il ferait
|
|
425
|
+
* taire la region meme qu'il contient.
|
|
426
|
+
*
|
|
427
|
+
* ⚠️ **La version est un texte public** : un numero de version, jamais un numero de construction,
|
|
428
|
+
* une adresse ou un detail d'infrastructure (EA-15).
|
|
429
|
+
*
|
|
430
|
+
* Emplacements : `[logo]` (tuile de 48 px), `[surtitre]` (ligne du haut, micro-libelle de 11 px
|
|
431
|
+
* mis en capitales par le composant, D18, D41), contenu libre sous le statut (une mention),
|
|
432
|
+
* `[pied]` apres la version (12/16 ; un micro-libelle projete y pose ses capitales lui-meme).
|
|
433
|
+
*/
|
|
434
|
+
export declare class StSplashScreen {
|
|
435
|
+
private readonly libelles;
|
|
436
|
+
readonly variante: import("@angular/core").InputSignal<VarianteDeDemarrage>;
|
|
437
|
+
/** Nom de l'application ou de l'etablissement. */
|
|
438
|
+
readonly nom: import("@angular/core").InputSignal<string>;
|
|
439
|
+
readonly sousTitre: import("@angular/core").InputSignal<string | null>;
|
|
440
|
+
/** Ce qui se passe (« Synchronisation des ordres ») ; montre apres `rythme.delai.attente`. */
|
|
441
|
+
readonly statut: import("@angular/core").InputSignal<string | null>;
|
|
442
|
+
/** Version publiee (« Version 0.9.0 »), jamais un numero de construction. */
|
|
443
|
+
readonly version: import("@angular/core").InputSignal<string | null>;
|
|
444
|
+
/**
|
|
445
|
+
* Delai avant le statut, en millisecondes : `rythme.delai.attente` par defaut. Zero le montre
|
|
446
|
+
* tout de suite (une vignette de galerie, un test).
|
|
447
|
+
*/
|
|
448
|
+
readonly delaiMs: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
449
|
+
protected readonly etiquetteLue: import("@angular/core").Signal<string>;
|
|
450
|
+
protected readonly statutVisible: import("@angular/core").Signal<boolean>;
|
|
451
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StSplashScreen, never>;
|
|
452
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StSplashScreen, "st-splash-screen", never, {
|
|
453
|
+
"variante": {
|
|
454
|
+
"alias": "variante";
|
|
455
|
+
"required": false;
|
|
456
|
+
"isSignal": true;
|
|
457
|
+
};
|
|
458
|
+
"nom": {
|
|
459
|
+
"alias": "nom";
|
|
460
|
+
"required": true;
|
|
461
|
+
"isSignal": true;
|
|
462
|
+
};
|
|
463
|
+
"sousTitre": {
|
|
464
|
+
"alias": "sousTitre";
|
|
465
|
+
"required": false;
|
|
466
|
+
"isSignal": true;
|
|
467
|
+
};
|
|
468
|
+
"statut": {
|
|
469
|
+
"alias": "statut";
|
|
470
|
+
"required": false;
|
|
471
|
+
"isSignal": true;
|
|
472
|
+
};
|
|
473
|
+
"version": {
|
|
474
|
+
"alias": "version";
|
|
475
|
+
"required": false;
|
|
476
|
+
"isSignal": true;
|
|
477
|
+
};
|
|
478
|
+
"delaiMs": {
|
|
479
|
+
"alias": "delaiMs";
|
|
480
|
+
"required": false;
|
|
481
|
+
"isSignal": true;
|
|
482
|
+
};
|
|
483
|
+
}, {}, never, ["[surtitre]", "[logo]", "*", "[pied]"], true, never>;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
export {};
|
|
@@ -3,7 +3,7 @@ import { AnneesDuCalendrier, ContratDeChamp, ContratDeChampABornes, ControleDeSa
|
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import { InjectionToken, Provider, Signal } from "@angular/core";
|
|
5
5
|
import { AnnonceLocale, CatalogueDuPointDEntree, LibellesUi } from "@starterlib/ui";
|
|
6
|
-
import { DateIso, FrequenceDeRecurrence, HeureIso, PlageDeDates, Recurrence } from "@starterlib/util";
|
|
6
|
+
import { DateIso, FrequenceDeRecurrence, HeureIso, PlageDeDates, Recurrence } from "@starterlib/util/valeurs";
|
|
7
7
|
/**
|
|
8
8
|
* L'envoi d'un formulaire valide. Il rend les refus du serveur, que Signal Forms place sous leur
|
|
9
9
|
* champ (`fieldTree`) et au recapitulatif, puis efface des que la valeur du champ change ; rien
|