@starterlib/ui 0.7.2 → 0.8.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 +95 -42
- package/fesm2022/starterlib-ui-arbre.mjs +82 -0
- package/fesm2022/starterlib-ui-arbre.mjs.map +1 -0
- package/fesm2022/starterlib-ui-donnees.mjs +532 -0
- package/fesm2022/starterlib-ui-donnees.mjs.map +1 -0
- package/fesm2022/starterlib-ui-formulaires.mjs +2 -1
- package/fesm2022/starterlib-ui-formulaires.mjs.map +1 -1
- package/fesm2022/starterlib-ui-interactions.mjs +34 -589
- package/fesm2022/starterlib-ui-interactions.mjs.map +1 -1
- package/fesm2022/starterlib-ui-libelles-en.mjs +142 -0
- package/fesm2022/starterlib-ui-libelles-en.mjs.map +1 -0
- package/fesm2022/starterlib-ui-listes.mjs +671 -0
- package/fesm2022/starterlib-ui-listes.mjs.map +1 -0
- package/fesm2022/starterlib-ui-navigation.mjs +246 -0
- package/fesm2022/starterlib-ui-navigation.mjs.map +1 -0
- package/fesm2022/starterlib-ui-onglets.mjs +137 -0
- package/fesm2022/starterlib-ui-onglets.mjs.map +1 -0
- package/fesm2022/starterlib-ui-saisie.mjs +1632 -0
- package/fesm2022/starterlib-ui-saisie.mjs.map +1 -0
- package/fesm2022/starterlib-ui-selection.mjs +269 -0
- package/fesm2022/starterlib-ui-selection.mjs.map +1 -0
- package/fesm2022/starterlib-ui.mjs +105 -2931
- package/fesm2022/starterlib-ui.mjs.map +1 -1
- package/package.json +35 -3
- package/types/starterlib-ui-arbre.d.ts +51 -0
- package/types/starterlib-ui-donnees.d.ts +228 -0
- package/types/starterlib-ui-formulaires.d.ts +5 -4
- package/types/starterlib-ui-interactions.d.ts +4 -316
- package/types/starterlib-ui-libelles-en.d.ts +25 -0
- package/types/starterlib-ui-listes.d.ts +432 -0
- package/types/starterlib-ui-navigation.d.ts +104 -0
- package/types/starterlib-ui-onglets.d.ts +89 -0
- package/types/starterlib-ui-saisie.d.ts +924 -0
- package/types/starterlib-ui-selection.d.ts +112 -0
- package/types/starterlib-ui.d.ts +9 -1575
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@starterlib/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
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.1.0",
|
|
26
26
|
"@angular/cdk": "^22.1.0",
|
|
27
27
|
"@angular/aria": "^22.1.0",
|
|
28
|
-
"@starterlib/tokens": "^0.
|
|
29
|
-
"@starterlib/util": "^0.
|
|
28
|
+
"@starterlib/tokens": "^0.8.0",
|
|
29
|
+
"@starterlib/util": "^0.8.0"
|
|
30
30
|
},
|
|
31
31
|
"peerDependenciesMeta": {
|
|
32
32
|
"@angular/cdk": {
|
|
@@ -49,6 +49,14 @@
|
|
|
49
49
|
"types": "./types/starterlib-ui.d.ts",
|
|
50
50
|
"default": "./fesm2022/starterlib-ui.mjs"
|
|
51
51
|
},
|
|
52
|
+
"./arbre": {
|
|
53
|
+
"types": "./types/starterlib-ui-arbre.d.ts",
|
|
54
|
+
"default": "./fesm2022/starterlib-ui-arbre.mjs"
|
|
55
|
+
},
|
|
56
|
+
"./donnees": {
|
|
57
|
+
"types": "./types/starterlib-ui-donnees.d.ts",
|
|
58
|
+
"default": "./fesm2022/starterlib-ui-donnees.mjs"
|
|
59
|
+
},
|
|
52
60
|
"./formulaires": {
|
|
53
61
|
"types": "./types/starterlib-ui-formulaires.d.ts",
|
|
54
62
|
"default": "./fesm2022/starterlib-ui-formulaires.mjs"
|
|
@@ -57,6 +65,30 @@
|
|
|
57
65
|
"types": "./types/starterlib-ui-interactions.d.ts",
|
|
58
66
|
"default": "./fesm2022/starterlib-ui-interactions.mjs"
|
|
59
67
|
},
|
|
68
|
+
"./libelles-en": {
|
|
69
|
+
"types": "./types/starterlib-ui-libelles-en.d.ts",
|
|
70
|
+
"default": "./fesm2022/starterlib-ui-libelles-en.mjs"
|
|
71
|
+
},
|
|
72
|
+
"./listes": {
|
|
73
|
+
"types": "./types/starterlib-ui-listes.d.ts",
|
|
74
|
+
"default": "./fesm2022/starterlib-ui-listes.mjs"
|
|
75
|
+
},
|
|
76
|
+
"./navigation": {
|
|
77
|
+
"types": "./types/starterlib-ui-navigation.d.ts",
|
|
78
|
+
"default": "./fesm2022/starterlib-ui-navigation.mjs"
|
|
79
|
+
},
|
|
80
|
+
"./onglets": {
|
|
81
|
+
"types": "./types/starterlib-ui-onglets.d.ts",
|
|
82
|
+
"default": "./fesm2022/starterlib-ui-onglets.mjs"
|
|
83
|
+
},
|
|
84
|
+
"./saisie": {
|
|
85
|
+
"types": "./types/starterlib-ui-saisie.d.ts",
|
|
86
|
+
"default": "./fesm2022/starterlib-ui-saisie.mjs"
|
|
87
|
+
},
|
|
88
|
+
"./selection": {
|
|
89
|
+
"types": "./types/starterlib-ui-selection.d.ts",
|
|
90
|
+
"default": "./fesm2022/starterlib-ui-selection.mjs"
|
|
91
|
+
},
|
|
60
92
|
"./surfaces": {
|
|
61
93
|
"types": "./types/starterlib-ui-surfaces.d.ts",
|
|
62
94
|
"default": "./fesm2022/starterlib-ui-surfaces.mjs"
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
|
|
3
|
+
/** Un noeud, decrit en donnees. */
|
|
4
|
+
interface NoeudDArbre {
|
|
5
|
+
/** Identifiant stable : il porte la selection et le depliage. */
|
|
6
|
+
readonly valeur: string;
|
|
7
|
+
readonly libelle: string;
|
|
8
|
+
readonly enfants?: readonly NoeudDArbre[];
|
|
9
|
+
readonly desactive?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Arbre de donnees hierarchiques, sur `@angular/aria/tree` : dossiers, plan
|
|
13
|
+
* comptable, organisation.
|
|
14
|
+
*
|
|
15
|
+
* ```html
|
|
16
|
+
* <st-tree etiquette="Plan comptable" [noeuds]="comptes" [(selection)]="compte" [(deplies)]="ouverts" />
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* ⚠️ **Jamais pour la navigation du site** (UX-17) : une navigation est une liste
|
|
20
|
+
* de liens, que le lecteur d'ecran liste et parcourt comme telle. Un arbre se
|
|
21
|
+
* parcourt aux fleches, un element a la fois, et ses elements ne sont pas des
|
|
22
|
+
* liens. Le mode « navigation » de la primitive n'est donc pas expose.
|
|
23
|
+
*
|
|
24
|
+
* ⚠️ **Les noeuds sont rendus par le composant, a partir de donnees** (FE-6) : la
|
|
25
|
+
* primitive relie un element a son arbre par injection, et un contenu projete
|
|
26
|
+
* garde l'injecteur de l'endroit ou il est ecrit — lecon de `st-menu`.
|
|
27
|
+
*
|
|
28
|
+
* Clavier de la primitive : fleches haut et bas entre les elements visibles,
|
|
29
|
+
* droite pour deplier ou entrer, gauche pour replier ou remonter, Debut et Fin,
|
|
30
|
+
* recherche a la frappe ; Espace ou Entree choisit. Selection et depliage sont des
|
|
31
|
+
* listes de VALEURS, lisibles et restaurables par l'application.
|
|
32
|
+
*/
|
|
33
|
+
declare class StTree {
|
|
34
|
+
/** Nom de l'arbre, lu a l'entree. Obligatoire. */
|
|
35
|
+
readonly etiquette: _angular_core.InputSignal<string>;
|
|
36
|
+
readonly noeuds: _angular_core.InputSignal<readonly NoeudDArbre[]>;
|
|
37
|
+
readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
38
|
+
readonly selection: _angular_core.ModelSignal<readonly string[]>;
|
|
39
|
+
readonly deplies: _angular_core.ModelSignal<readonly string[]>;
|
|
40
|
+
/** La primitive attend un tableau modifiable ; le modele est en lecture seule. */
|
|
41
|
+
protected readonly valeursChoisies: _angular_core.Signal<string[]>;
|
|
42
|
+
private readonly ensembleDeplie;
|
|
43
|
+
protected estDeplie(noeud: NoeudDArbre): boolean;
|
|
44
|
+
protected surDepliage(noeud: NoeudDArbre, deplie: boolean): void;
|
|
45
|
+
protected surSelection(valeurs: readonly string[]): void;
|
|
46
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StTree, never>;
|
|
47
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StTree, "st-tree", never, { "etiquette": { "alias": "etiquette"; "required": true; "isSignal": true; }; "noeuds": { "alias": "noeuds"; "required": true; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "deplies": { "alias": "deplies"; "required": false; "isSignal": true; }; }, { "selection": "selectionChange"; "deplies": "depliesChange"; }, never, never, true, never>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export { StTree };
|
|
51
|
+
export type { NoeudDArbre };
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { AnnonceLocale } from '@starterlib/ui';
|
|
3
|
+
import { Montant, TonSemantique } from '@starterlib/util';
|
|
4
|
+
|
|
5
|
+
type TypeMasque = 'iban' | 'carte' | 'telephone';
|
|
6
|
+
/**
|
|
7
|
+
* Identifiant sensible, masque par defaut.
|
|
8
|
+
*
|
|
9
|
+
* ⚠️ La valeur masquee porte un `aria-label` en toutes lettres (« IBAN se
|
|
10
|
+
* terminant par 2606 ») : plusieurs lecteurs d'ecran epellent une suite de
|
|
11
|
+
* puces caractere par caractere, ce qui est a la fois illisible et interminable.
|
|
12
|
+
*
|
|
13
|
+
* La revelation est un EVENEMENT METIER : elle se journalise cote appelant par
|
|
14
|
+
* la sortie `revelation`. La valeur revelee, elle, ne part jamais dans un
|
|
15
|
+
* journal.
|
|
16
|
+
*/
|
|
17
|
+
declare class StMasked {
|
|
18
|
+
private readonly libelles;
|
|
19
|
+
readonly valeur: _angular_core.InputSignal<string>;
|
|
20
|
+
readonly type: _angular_core.InputSignal<TypeMasque>;
|
|
21
|
+
readonly revele: _angular_core.ModelSignal<boolean>;
|
|
22
|
+
readonly revelationAutorisee: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
23
|
+
readonly dureeDeRevelationEnSecondes: _angular_core.InputSignal<number>;
|
|
24
|
+
/** `null` : les textes viennent du dictionnaire de l'application. */
|
|
25
|
+
readonly libelleAfficher: _angular_core.InputSignal<string | null>;
|
|
26
|
+
readonly libelleMasquer: _angular_core.InputSignal<string | null>;
|
|
27
|
+
readonly revelation: _angular_core.OutputEmitterRef<{
|
|
28
|
+
type: TypeMasque;
|
|
29
|
+
}>;
|
|
30
|
+
/**
|
|
31
|
+
* ⚠️ Par `AnnonceLocale`, et non par un signal pose directement. La 0.2.0
|
|
32
|
+
* reposait « Valeur masquee a nouveau » a l'identique : aucune mutation, donc
|
|
33
|
+
* une seconde remise en masque jamais annoncee.
|
|
34
|
+
*/
|
|
35
|
+
protected readonly annonce: AnnonceLocale;
|
|
36
|
+
private minuterie;
|
|
37
|
+
constructor();
|
|
38
|
+
protected readonly valeurMasquee: _angular_core.Signal<string>;
|
|
39
|
+
protected readonly valeurAffichee: _angular_core.Signal<string>;
|
|
40
|
+
/**
|
|
41
|
+
* La nature et la tournure viennent du dictionnaire : l'ordre des mots change
|
|
42
|
+
* d'une langue a l'autre, « IBAN se terminant par 2606 » contre « IBAN ending
|
|
43
|
+
* in 2606 ». Une chaine a trous ne suffirait pas.
|
|
44
|
+
*/
|
|
45
|
+
protected readonly nomAccessible: _angular_core.Signal<string>;
|
|
46
|
+
protected readonly libelleDuBouton: _angular_core.Signal<string>;
|
|
47
|
+
private valeurLisible;
|
|
48
|
+
protected basculer(): void;
|
|
49
|
+
private masquer;
|
|
50
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StMasked, never>;
|
|
51
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StMasked, "st-masked", never, { "valeur": { "alias": "valeur"; "required": true; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "revele": { "alias": "revele"; "required": false; "isSignal": true; }; "revelationAutorisee": { "alias": "revelationAutorisee"; "required": false; "isSignal": true; }; "dureeDeRevelationEnSecondes": { "alias": "dureeDeRevelationEnSecondes"; "required": false; "isSignal": true; }; "libelleAfficher": { "alias": "libelleAfficher"; "required": false; "isSignal": true; }; "libelleMasquer": { "alias": "libelleMasquer"; "required": false; "isSignal": true; }; }, { "revele": "reveleChange"; "revelation": "revelation"; }, never, never, true, never>;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Somme d'argent.
|
|
56
|
+
*
|
|
57
|
+
* Le montant entre sous forme d'unites mineures entieres : un nombre a virgule
|
|
58
|
+
* flottante ne represente pas exactement 0,10 EUR, et les erreurs s'accumulent.
|
|
59
|
+
* La conversion n'a lieu qu'a l'instant du rendu.
|
|
60
|
+
*
|
|
61
|
+
* ⚠️ Le signe negatif est TOUJOURS rendu en texte. La couleur ne fait que le
|
|
62
|
+
* renforcer : un daltonien, une impression en noir et blanc ou un theme a fort
|
|
63
|
+
* contraste ne doivent jamais transformer un debit en credit.
|
|
64
|
+
*/
|
|
65
|
+
declare class StMoney {
|
|
66
|
+
private readonly locale;
|
|
67
|
+
readonly valeur: _angular_core.InputSignal<Montant>;
|
|
68
|
+
readonly signeExplicite: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
69
|
+
readonly sansDevise: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
70
|
+
readonly taille: _angular_core.InputSignal<"sm" | "md" | "lg" | "xl">;
|
|
71
|
+
protected readonly signe: _angular_core.Signal<"negatif" | "positif" | "nul">;
|
|
72
|
+
protected readonly texte: _angular_core.Signal<string>;
|
|
73
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StMoney, never>;
|
|
74
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StMoney, "st-money", never, { "valeur": { "alias": "valeur"; "required": true; "isSignal": true; }; "signeExplicite": { "alias": "signeExplicite"; "required": false; "isSignal": true; }; "sansDevise": { "alias": "sansDevise"; "required": false; "isSignal": true; }; "taille": { "alias": "taille"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
type FormatDeDate = 'court' | 'long' | 'date-heure' | 'heure';
|
|
78
|
+
/**
|
|
79
|
+
* Date rendue dans la locale et le fuseau de l'application.
|
|
80
|
+
*
|
|
81
|
+
* ⚠️ La locale et le fuseau sont EXPLICITES, jamais deduits de l'environnement
|
|
82
|
+
* d'execution. Un rendu serveur et un rendu navigateur qui ne s'accordent pas
|
|
83
|
+
* produisent deux textes differents, et l'hydratation casse. Le rendu serveur
|
|
84
|
+
* est ecarte en version 1, mais la compatibilite reste gardee a cout nul.
|
|
85
|
+
*
|
|
86
|
+
* Le format court garde un nom accessible en toutes lettres : « 12/09/26 » est
|
|
87
|
+
* ambigu a l'oral, et l'ordre jour-mois n'est pas universel.
|
|
88
|
+
*/
|
|
89
|
+
declare class StDate {
|
|
90
|
+
private readonly locale;
|
|
91
|
+
private readonly fuseauParDefaut;
|
|
92
|
+
readonly valeur: _angular_core.InputSignal<string | Date>;
|
|
93
|
+
readonly format: _angular_core.InputSignal<FormatDeDate>;
|
|
94
|
+
readonly fuseau: _angular_core.InputSignal<string | null>;
|
|
95
|
+
/**
|
|
96
|
+
* Une DATE DE CALENDRIER (`2026-09-12`) n'est pas un instant : une date de
|
|
97
|
+
* naissance, une echeance ou un jour de valeur n'ont pas d'heure, et ne
|
|
98
|
+
* doivent pas changer de jour selon le fuseau de qui les regarde.
|
|
99
|
+
*
|
|
100
|
+
* ⚠️ Le piege est dans la norme : `new Date('2026-09-12')` vaut minuit UTC,
|
|
101
|
+
* donc le 11 septembre partout a l'ouest de Greenwich. Une echeance affichee
|
|
102
|
+
* la veille est un defaut que personne ne voit depuis l'Europe.
|
|
103
|
+
*/
|
|
104
|
+
private readonly estDateDeCalendrier;
|
|
105
|
+
private readonly date;
|
|
106
|
+
protected readonly estValide: _angular_core.Signal<boolean>;
|
|
107
|
+
/**
|
|
108
|
+
* Le fuseau de rendu. Pour une date de calendrier, c'est UTC : la valeur a
|
|
109
|
+
* ete construite a minuit UTC, la relire en UTC rend donc le jour ecrit.
|
|
110
|
+
*/
|
|
111
|
+
private readonly fuseauDeRendu;
|
|
112
|
+
/**
|
|
113
|
+
* Une date de calendrier porte `2026-09-12`, sans heure ni decalage : c'est
|
|
114
|
+
* la forme que la norme HTML attend, et la seule qui ne mente pas.
|
|
115
|
+
*/
|
|
116
|
+
protected readonly iso: _angular_core.Signal<string | null>;
|
|
117
|
+
/** Une date sans heure ne peut pas en afficher une. */
|
|
118
|
+
private readonly optionsDeFormat;
|
|
119
|
+
protected readonly texte: _angular_core.Signal<string>;
|
|
120
|
+
/** Forme longue, lue par les technologies d'assistance. */
|
|
121
|
+
protected readonly texteAccessible: _angular_core.Signal<string | null>;
|
|
122
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StDate, never>;
|
|
123
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StDate, "st-date", never, { "valeur": { "alias": "valeur"; "required": true; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "fuseau": { "alias": "fuseau"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Temps ecoule, exprime relativement (« il y a 5 minutes »).
|
|
128
|
+
*
|
|
129
|
+
* ⚠️ Ce composant ne doit JAMAIS etre place dans une region vivante : son texte
|
|
130
|
+
* se reecrit tout seul, et une region vivante le ferait annoncer en boucle.
|
|
131
|
+
* Son nom accessible porte la date absolue, qui elle ne bouge pas.
|
|
132
|
+
*
|
|
133
|
+
* La cadence de rafraichissement s'adapte : rafraichir chaque seconde une date
|
|
134
|
+
* vieille de trois jours reveille l'onglet pour rien.
|
|
135
|
+
*/
|
|
136
|
+
declare class StRelativeTime {
|
|
137
|
+
private readonly locale;
|
|
138
|
+
private readonly libelles;
|
|
139
|
+
private readonly fuseau;
|
|
140
|
+
readonly valeur: _angular_core.InputSignal<string | Date>;
|
|
141
|
+
readonly rafraichir: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
142
|
+
/** Au-dela de ce nombre de jours, la date absolue est plus parlante. */
|
|
143
|
+
readonly seuilAbsoluEnJours: _angular_core.InputSignal<number>;
|
|
144
|
+
private readonly destruction;
|
|
145
|
+
private readonly maintenant;
|
|
146
|
+
constructor();
|
|
147
|
+
private dateEnMillisecondes;
|
|
148
|
+
protected readonly estValide: _angular_core.Signal<boolean>;
|
|
149
|
+
protected readonly iso: _angular_core.Signal<string | null>;
|
|
150
|
+
protected readonly depasseLeSeuil: _angular_core.Signal<boolean>;
|
|
151
|
+
protected readonly texte: _angular_core.Signal<string>;
|
|
152
|
+
protected readonly texteAccessible: _angular_core.Signal<string>;
|
|
153
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StRelativeTime, never>;
|
|
154
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StRelativeTime, "st-relative-time", never, { "valeur": { "alias": "valeur"; "required": true; "isSignal": true; }; "rafraichir": { "alias": "rafraichir"; "required": false; "isSignal": true; }; "seuilAbsoluEnJours": { "alias": "seuilAbsoluEnJours"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Nombre dans le flux du texte.
|
|
159
|
+
*
|
|
160
|
+
* Distinct de `st-badge`, qui est une pastille superposee a un autre element.
|
|
161
|
+
*
|
|
162
|
+
* ⚠️ Quand la valeur est abregee (« 1,2 k »), le nom accessible porte le nombre
|
|
163
|
+
* COMPLET : l'abreviation est une commodite visuelle, pas une perte
|
|
164
|
+
* d'information pour qui ecoute la page.
|
|
165
|
+
*/
|
|
166
|
+
declare class StCount {
|
|
167
|
+
private readonly locale;
|
|
168
|
+
readonly valeur: _angular_core.InputSignal<number>;
|
|
169
|
+
readonly ton: _angular_core.InputSignal<"neutre" | "discret">;
|
|
170
|
+
/** `null` : jamais d'abreviation. */
|
|
171
|
+
readonly abregerAuDela: _angular_core.InputSignal<number | null>;
|
|
172
|
+
protected readonly estAbrege: _angular_core.Signal<boolean>;
|
|
173
|
+
protected readonly texteComplet: _angular_core.Signal<string>;
|
|
174
|
+
protected readonly texte: _angular_core.Signal<string>;
|
|
175
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StCount, never>;
|
|
176
|
+
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>;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
type SensDeTendance = 'hausse' | 'baisse' | 'stable';
|
|
180
|
+
/** La tendance d'un indicateur, decrite par l'appelant. Le texte est deja traduit. */
|
|
181
|
+
interface TendanceDeStat {
|
|
182
|
+
readonly sens: SensDeTendance;
|
|
183
|
+
/** Ce qui s'affiche a cote de la fleche : « +2,4 % sur un mois ». */
|
|
184
|
+
readonly texte: string;
|
|
185
|
+
/**
|
|
186
|
+
* ⚠️ Choisi par l'appelant, et non deduit du sens : une hausse des frais est
|
|
187
|
+
* un `danger`, une hausse de l'epargne un `succes`. Le socle ne sait pas
|
|
188
|
+
* lequel des deux il affiche.
|
|
189
|
+
*/
|
|
190
|
+
readonly ton?: TonSemantique;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Indicateur chiffre : un libelle, une valeur, et sa tendance.
|
|
194
|
+
*
|
|
195
|
+
* ```html
|
|
196
|
+
* <st-stat libelle="Solde disponible" [tendance]="{ sens: 'hausse', texte: '+2,4 % sur un mois', ton: 'succes' }">
|
|
197
|
+
* <st-money [valeur]="solde" />
|
|
198
|
+
* </st-stat>
|
|
199
|
+
* ```
|
|
200
|
+
*
|
|
201
|
+
* La valeur est PROJETEE : c'est `st-money`, `st-count` ou `st-date` qui la
|
|
202
|
+
* formate dans la langue courante, et le socle n'a pas a redire comment.
|
|
203
|
+
*
|
|
204
|
+
* ⚠️ **La tendance se lit par un texte ET une icone, jamais par la couleur
|
|
205
|
+
* seule.** Le texte de l'appelant porte deja le signe ; l'icone porte le sens ;
|
|
206
|
+
* et un mot lisible par lecteur seulement — « en hausse », « en baisse »,
|
|
207
|
+
* « stable » — precede le texte, parce qu'un lecteur d'ecran ne lit pas un
|
|
208
|
+
* chevron.
|
|
209
|
+
*
|
|
210
|
+
* Le libelle vient AVANT la valeur dans le document, comme dans une phrase :
|
|
211
|
+
* « Solde disponible, 1 234,50 € ». A l'ecran, il se pose au-dessus, en petit.
|
|
212
|
+
*/
|
|
213
|
+
declare class StStat {
|
|
214
|
+
private readonly libelles;
|
|
215
|
+
/** Texte visible, deja traduit. */
|
|
216
|
+
readonly libelle: _angular_core.InputSignal<string>;
|
|
217
|
+
readonly tendance: _angular_core.InputSignal<TendanceDeStat | null>;
|
|
218
|
+
/** Precision sous la valeur : la periode, la source. Jamais une information critique. */
|
|
219
|
+
readonly precision: _angular_core.InputSignal<string | null>;
|
|
220
|
+
protected readonly icone: _angular_core.Signal<"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" | null>;
|
|
221
|
+
protected readonly tonDeTendance: _angular_core.Signal<TonSemantique>;
|
|
222
|
+
protected readonly sensLu: _angular_core.Signal<string>;
|
|
223
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StStat, never>;
|
|
224
|
+
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>;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
export { StCount, StDate, StMasked, StMoney, StRelativeTime, StStat };
|
|
228
|
+
export type { FormatDeDate, SensDeTendance, TendanceDeStat, TypeMasque };
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import { ContratDeChamp, ErreurAffichable } from '@starterlib/ui';
|
|
1
|
+
import * as _starterlib_ui_saisie from '@starterlib/ui/saisie';
|
|
2
|
+
import { ContratDeChamp, ErreurAffichable } from '@starterlib/ui/saisie';
|
|
3
3
|
import * as _angular_forms_signals from '@angular/forms/signals';
|
|
4
4
|
import { FormValueControl } from '@angular/forms/signals';
|
|
5
5
|
import * as _angular_core from '@angular/core';
|
|
6
|
+
import * as _starterlib_ui from '@starterlib/ui';
|
|
6
7
|
import { DateIso, PlageDeDates } from '@starterlib/util';
|
|
7
8
|
|
|
8
9
|
/**
|
|
@@ -43,7 +44,7 @@ declare class StAmountField extends ContratDeChamp implements FormValueControl<b
|
|
|
43
44
|
*/
|
|
44
45
|
protected readonly quitte: _angular_core.WritableSignal<boolean>;
|
|
45
46
|
protected readonly saisie: _angular_forms_signals.TransformedValueSignal<string>;
|
|
46
|
-
protected readonly erreursAffichees: _angular_core.Signal<readonly
|
|
47
|
+
protected readonly erreursAffichees: _angular_core.Signal<readonly _starterlib_ui_saisie.ErreurAffichable[]>;
|
|
47
48
|
/** Symbole affiche a cote du champ ; le nom de la devise, lui, est lu. */
|
|
48
49
|
protected readonly symbole: _angular_core.Signal<string>;
|
|
49
50
|
protected readonly deviseLue: _angular_core.Signal<string>;
|
|
@@ -101,7 +102,7 @@ declare class StDateField extends ContratDeChamp implements FormValueControl<Dat
|
|
|
101
102
|
protected readonly quitte: _angular_core.WritableSignal<boolean>;
|
|
102
103
|
protected readonly saisie: _angular_forms_signals.TransformedValueSignal<string>;
|
|
103
104
|
protected readonly aideLue: _angular_core.Signal<string>;
|
|
104
|
-
protected readonly erreursAffichees: _angular_core.Signal<readonly
|
|
105
|
+
protected readonly erreursAffichees: _angular_core.Signal<readonly _starterlib_ui_saisie.ErreurAffichable[]>;
|
|
105
106
|
protected surSaisie(evenement: Event): void;
|
|
106
107
|
protected aLaSortieDuChamp(): void;
|
|
107
108
|
protected basculer(): void;
|