@starterlib/ui 0.7.2 → 0.9.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/LICENCES-TIERCES.md +236 -0
- package/README.md +163 -56
- package/assets/icones/catalogue.json +3296 -0
- package/assets/icones/sprite.svg +235 -35
- package/fesm2022/starterlib-ui-arbre.mjs +475 -0
- package/fesm2022/starterlib-ui-arbre.mjs.map +1 -0
- package/fesm2022/starterlib-ui-donnees.mjs +3561 -0
- package/fesm2022/starterlib-ui-donnees.mjs.map +1 -0
- package/fesm2022/starterlib-ui-formulaires.mjs +3186 -442
- package/fesm2022/starterlib-ui-formulaires.mjs.map +1 -1
- package/fesm2022/starterlib-ui-libelles-en.mjs +383 -0
- package/fesm2022/starterlib-ui-libelles-en.mjs.map +1 -0
- package/fesm2022/starterlib-ui-listes.mjs +5367 -0
- package/fesm2022/starterlib-ui-listes.mjs.map +1 -0
- package/fesm2022/starterlib-ui-messagerie.mjs +737 -0
- package/fesm2022/starterlib-ui-messagerie.mjs.map +1 -0
- package/fesm2022/starterlib-ui-navigation.mjs +509 -0
- package/fesm2022/starterlib-ui-navigation.mjs.map +1 -0
- package/fesm2022/starterlib-ui-onglets.mjs +371 -0
- package/fesm2022/starterlib-ui-onglets.mjs.map +1 -0
- package/fesm2022/starterlib-ui-parcours.mjs +2449 -0
- package/fesm2022/starterlib-ui-parcours.mjs.map +1 -0
- package/fesm2022/starterlib-ui-qr.mjs +907 -0
- package/fesm2022/starterlib-ui-qr.mjs.map +1 -0
- package/fesm2022/starterlib-ui-saisie.mjs +8609 -0
- package/fesm2022/starterlib-ui-saisie.mjs.map +1 -0
- package/fesm2022/starterlib-ui-selection.mjs +1341 -0
- package/fesm2022/starterlib-ui-selection.mjs.map +1 -0
- package/fesm2022/starterlib-ui-sens.mjs +59 -0
- package/fesm2022/starterlib-ui-sens.mjs.map +1 -0
- package/fesm2022/starterlib-ui-surfaces.mjs +5140 -1387
- package/fesm2022/starterlib-ui-surfaces.mjs.map +1 -1
- package/fesm2022/starterlib-ui.mjs +10729 -5689
- package/fesm2022/starterlib-ui.mjs.map +1 -1
- package/package.json +58 -17
- package/styles/amorce.css +69 -0
- package/styles/couches.css +178 -0
- package/types/starterlib-ui-arbre.d.ts +225 -0
- package/types/starterlib-ui-donnees.d.ts +1489 -0
- package/types/starterlib-ui-formulaires.d.ts +1174 -138
- package/types/starterlib-ui-libelles-en.d.ts +5 -0
- package/types/starterlib-ui-listes.d.ts +2487 -0
- package/types/starterlib-ui-messagerie.d.ts +317 -0
- package/types/starterlib-ui-navigation.d.ts +242 -0
- package/types/starterlib-ui-onglets.d.ts +212 -0
- package/types/starterlib-ui-parcours.d.ts +916 -0
- package/types/starterlib-ui-qr.d.ts +105 -0
- package/types/starterlib-ui-saisie.d.ts +3806 -0
- package/types/starterlib-ui-selection.d.ts +488 -0
- package/types/starterlib-ui-sens.d.ts +44 -0
- package/types/starterlib-ui-surfaces.d.ts +1899 -510
- package/types/starterlib-ui.d.ts +4731 -2678
- package/fesm2022/starterlib-ui-interactions.mjs +0 -598
- package/fesm2022/starterlib-ui-interactions.mjs.map +0 -1
- package/types/starterlib-ui-interactions.d.ts +0 -316
|
@@ -0,0 +1,1489 @@
|
|
|
1
|
+
import { AnnonceLocale, Icone, TailleDAvatar, TailleDIconeFixe, TonDAvatar } from "@starterlib/ui";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import { Montant, Ton, TonSemantique } from "@starterlib/util";
|
|
4
|
+
export type TypeMasque = 'iban' | 'carte' | 'telephone' | 'reference';
|
|
5
|
+
/**
|
|
6
|
+
* `ligne` : dans le flux d'une phrase ou d'une cellule. `tuile` : la tuile de la planche 2
|
|
7
|
+
* (libelle en surtitre, valeur en groupes, bouton a droite ; revelee, la valeur prend toute la
|
|
8
|
+
* largeur et le decompte se pose a cote du libelle).
|
|
9
|
+
*/
|
|
10
|
+
export type VarianteDeMasque = 'ligne' | 'tuile';
|
|
11
|
+
/** `sm` : 14 px, la valeur d'un seul tenant ; `lg` : 18 px 600, en groupes espaces (planche 2). */
|
|
12
|
+
export type TailleDeMasque = 'sm' | 'lg';
|
|
13
|
+
/** Un groupe de la valeur : quatre caracteres (ou une paire, un indicatif), masque ou lisible. */
|
|
14
|
+
interface Groupe {
|
|
15
|
+
readonly texte: string;
|
|
16
|
+
readonly points: boolean;
|
|
17
|
+
readonly extremite: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Identifiant sensible, masque par defaut.
|
|
21
|
+
*
|
|
22
|
+
* **La valeur complete n'a rien a faire dans le navigateur** hors de la voie autorisee :
|
|
23
|
+
* `valeur` accepte la forme DEJA MASQUEE par le serveur (« FR76 •••• •••• 0189 », voie
|
|
24
|
+
* nominale des listes). La revelation passe par `charger`, que l'appelant branche sur un appel
|
|
25
|
+
* serveur AUDITE ; la valeur complete n'arrive qu'a ce moment, ne vit que le temps de la
|
|
26
|
+
* revelation, et quitte le composant au remasquage. Sans `charger`, aucun bouton.
|
|
27
|
+
*
|
|
28
|
+
* ⚠️ Le bouton garde un NOM FIXE (« Afficher l'IBAN ») et bascule `aria-pressed` (APG) : un
|
|
29
|
+
* nom qui change sous le doigt fait croire a un autre bouton. La revelation est annoncee, le
|
|
30
|
+
* remasquage aussi, et l'echec d'un chargement laisse le masque et le dit.
|
|
31
|
+
*
|
|
32
|
+
* ⚠️ Remasquage a l'expiration (`rythme.tenue.revelation`, 30 s, bornee de 5 a 120 s), quand
|
|
33
|
+
* l'onglet est masque et quand la fenetre perd le focus : une valeur revelee puis oubliee a
|
|
34
|
+
* l'ecran est lisible par quiconque passe derriere. A l'impression, la valeur est TOUJOURS
|
|
35
|
+
* masquee.
|
|
36
|
+
*
|
|
37
|
+
* ⚠️ Une revelation appartient a UN enregistrement. Une autre `valeur`, une autre voie
|
|
38
|
+
* (`charger`) ou un autre `type` remet le composant au masque : le routeur reutilise le composant
|
|
39
|
+
* de `/comptes/1` a `/comptes/2`, un tri recycle une ligne, et l'IBAN revele du premier restait
|
|
40
|
+
* affiche et lu sous l'en-tete du second. Un chargement qui aboutit pour un enregistrement quitte
|
|
41
|
+
* (ou apres la destruction) est jete. `charger` doit donc etre une reference STABLE (un champ de
|
|
42
|
+
* la classe), jamais une fonction recreee a chaque detection.
|
|
43
|
+
*
|
|
44
|
+
* La valeur masquee porte un nom en toutes lettres (« IBAN se terminant par 2606 ») : plusieurs
|
|
45
|
+
* lecteurs d'ecran epellent une suite de puces caractere par caractere.
|
|
46
|
+
*
|
|
47
|
+
* ```html
|
|
48
|
+
* <st-masked [valeur]="compte.ibanMasque" [charger]="revelerLIban" variante="tuile" taille="lg"
|
|
49
|
+
* libelle="IBAN" afficherLeDecompte (revelation)="journaliser($event)" />
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare class StMasked {
|
|
53
|
+
private readonly libelles;
|
|
54
|
+
private readonly document;
|
|
55
|
+
/** La valeur, complete ou deja masquee par le serveur (« •••• 6467 »). */
|
|
56
|
+
readonly valeur: import("@angular/core").InputSignal<string>;
|
|
57
|
+
readonly type: import("@angular/core").InputSignal<TypeMasque>;
|
|
58
|
+
/**
|
|
59
|
+
* La voie autorisee de revelation : un appel serveur audite qui rend la valeur complete (une
|
|
60
|
+
* chaine si l'appelant la detient deja, pour la reveler sans attendre). Le bouton n'existe que
|
|
61
|
+
* si elle est fournie.
|
|
62
|
+
*/
|
|
63
|
+
readonly charger: import("@angular/core").InputSignal<(() => string | Promise<string>) | null>;
|
|
64
|
+
/** Remasquage automatique, borne de 5 a 120 s (defaut `rythme.tenue.revelation`, 30 s). */
|
|
65
|
+
readonly dureeDeRevelationEnSecondes: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
66
|
+
/** Surtitre visible de la tuile (« IBAN du compte courant »). */
|
|
67
|
+
readonly libelle: import("@angular/core").InputSignal<string | null>;
|
|
68
|
+
readonly variante: import("@angular/core").InputSignal<VarianteDeMasque>;
|
|
69
|
+
readonly taille: import("@angular/core").InputSignal<TailleDeMasque>;
|
|
70
|
+
/** Montre le decompte du remasquage (« Masque dans 27s ») pendant la revelation. */
|
|
71
|
+
readonly afficherLeDecompte: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
72
|
+
/** Nom FIXE du bouton. `null` : « Afficher l'IBAN », « Afficher le numero de carte »... */
|
|
73
|
+
readonly libelleAfficher: import("@angular/core").InputSignal<string | null>;
|
|
74
|
+
/** Revelation reussie : un EVENEMENT METIER, a journaliser. La valeur n'y figure jamais. */
|
|
75
|
+
readonly revelation: import("@angular/core").OutputEmitterRef<{
|
|
76
|
+
type: TypeMasque;
|
|
77
|
+
}>;
|
|
78
|
+
/** L'etat reel, en sortie seule : l'appelant ne peut pas reveler sans passer par la voie. */
|
|
79
|
+
readonly reveleChange: import("@angular/core").OutputEmitterRef<boolean>;
|
|
80
|
+
/**
|
|
81
|
+
* ⚠️ Par `AnnonceLocale`, et non par un signal pose directement. La 0.2.0
|
|
82
|
+
* reposait « Valeur masquee a nouveau » a l'identique : aucune mutation, donc
|
|
83
|
+
* une seconde remise en masque jamais annoncee.
|
|
84
|
+
*/
|
|
85
|
+
protected readonly annonce: AnnonceLocale;
|
|
86
|
+
/** Ce qui est montre ; un autre enregistrement en est un autre (egalite champ a champ). */
|
|
87
|
+
private readonly enregistrement;
|
|
88
|
+
/**
|
|
89
|
+
* ⚠️ Derives de l'enregistrement : a son changement, l'etat repart MASQUE et la valeur complete
|
|
90
|
+
* est oubliee, sans attendre un evenement. Un signal simple les gardait d'un enregistrement a
|
|
91
|
+
* l'autre (revue E8).
|
|
92
|
+
*/
|
|
93
|
+
private readonly etat;
|
|
94
|
+
private readonly valeurComplete;
|
|
95
|
+
private minuterie;
|
|
96
|
+
/** Numero de la demande en cours : le resultat d'une demande perimee est jete. */
|
|
97
|
+
private demande;
|
|
98
|
+
/** `reveleChange(true)` a ete emis sans son `false` : le remasquage le doit a l'appelant. */
|
|
99
|
+
private reveleSignale;
|
|
100
|
+
protected readonly revele: import("@angular/core").Signal<boolean>;
|
|
101
|
+
protected readonly enChargement: import("@angular/core").Signal<boolean>;
|
|
102
|
+
/** Une valeur qui contient des puces a ete masquee par le serveur : rien a reveler ici. */
|
|
103
|
+
private readonly dejaMasquee;
|
|
104
|
+
protected readonly revelationPossible: import("@angular/core").Signal<boolean>;
|
|
105
|
+
constructor();
|
|
106
|
+
protected readonly valeurMasquee: import("@angular/core").Signal<string>;
|
|
107
|
+
private readonly valeurLisible;
|
|
108
|
+
protected readonly valeurAffichee: import("@angular/core").Signal<string>;
|
|
109
|
+
/**
|
|
110
|
+
* La valeur en groupes (taille `lg`) : les blocs de l'ecriture, l'indicatif d'un telephone
|
|
111
|
+
* et son premier chiffre ensemble (« +33 6 •• •• •• 89 », planche 2). Revelee, la tete et
|
|
112
|
+
* la fin sont appuyees : c'est ce qu'on compare a son releve.
|
|
113
|
+
*/
|
|
114
|
+
protected readonly groupes: import("@angular/core").Signal<readonly Groupe[]>;
|
|
115
|
+
/**
|
|
116
|
+
* La fin lisible d'une valeur masquee : ce qui suit la derniere puce (« 89 » d'un telephone
|
|
117
|
+
* masque par paires), ou les quatre derniers caracteres d'une valeur complete. `quatreDerniers`
|
|
118
|
+
* le fait lui-meme depuis le lot 179.
|
|
119
|
+
*/
|
|
120
|
+
private readonly finLisible;
|
|
121
|
+
private readonly nature;
|
|
122
|
+
/**
|
|
123
|
+
* La nature et la tournure viennent du dictionnaire : l'ordre des mots change
|
|
124
|
+
* d'une langue a l'autre, « IBAN se terminant par 2606 » contre « IBAN ending
|
|
125
|
+
* in 2606 ». Une chaine a trous ne suffirait pas.
|
|
126
|
+
*/
|
|
127
|
+
protected readonly nomAccessible: import("@angular/core").Signal<string>;
|
|
128
|
+
protected readonly libelleDuBouton: import("@angular/core").Signal<string>;
|
|
129
|
+
protected basculer(): void;
|
|
130
|
+
private reveler;
|
|
131
|
+
private montrer;
|
|
132
|
+
private masquer;
|
|
133
|
+
/** L'enregistrement a change : l'ancienne revelation n'a plus de suite. */
|
|
134
|
+
private oublierLaRevelation;
|
|
135
|
+
private arreterLaMinuterie;
|
|
136
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StMasked, never>;
|
|
137
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StMasked, "st-masked", never, {
|
|
138
|
+
"valeur": {
|
|
139
|
+
"alias": "valeur";
|
|
140
|
+
"required": true;
|
|
141
|
+
"isSignal": true;
|
|
142
|
+
};
|
|
143
|
+
"type": {
|
|
144
|
+
"alias": "type";
|
|
145
|
+
"required": false;
|
|
146
|
+
"isSignal": true;
|
|
147
|
+
};
|
|
148
|
+
"charger": {
|
|
149
|
+
"alias": "charger";
|
|
150
|
+
"required": false;
|
|
151
|
+
"isSignal": true;
|
|
152
|
+
};
|
|
153
|
+
"dureeDeRevelationEnSecondes": {
|
|
154
|
+
"alias": "dureeDeRevelationEnSecondes";
|
|
155
|
+
"required": false;
|
|
156
|
+
"isSignal": true;
|
|
157
|
+
};
|
|
158
|
+
"libelle": {
|
|
159
|
+
"alias": "libelle";
|
|
160
|
+
"required": false;
|
|
161
|
+
"isSignal": true;
|
|
162
|
+
};
|
|
163
|
+
"variante": {
|
|
164
|
+
"alias": "variante";
|
|
165
|
+
"required": false;
|
|
166
|
+
"isSignal": true;
|
|
167
|
+
};
|
|
168
|
+
"taille": {
|
|
169
|
+
"alias": "taille";
|
|
170
|
+
"required": false;
|
|
171
|
+
"isSignal": true;
|
|
172
|
+
};
|
|
173
|
+
"afficherLeDecompte": {
|
|
174
|
+
"alias": "afficherLeDecompte";
|
|
175
|
+
"required": false;
|
|
176
|
+
"isSignal": true;
|
|
177
|
+
};
|
|
178
|
+
"libelleAfficher": {
|
|
179
|
+
"alias": "libelleAfficher";
|
|
180
|
+
"required": false;
|
|
181
|
+
"isSignal": true;
|
|
182
|
+
};
|
|
183
|
+
}, {
|
|
184
|
+
"revelation": "revelation";
|
|
185
|
+
"reveleChange": "reveleChange";
|
|
186
|
+
}, never, ["[fin]", "*"], true, never>;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Tailles de la planche 2 (D18) : `sm` 14, `md` le corps du texte en 500, `lg` 18/24, `xl`
|
|
190
|
+
* 20/28, `2xl` 24/32, `hero` 40/48. Au-dela de `md`, un montant est un chiffre cle : graisse
|
|
191
|
+
* 600 et approche negative de sa taille. Sans taille, le montant prend TOUTE la typographie
|
|
192
|
+
* de son contexte : la valeur d'un `st-stat`, une cellule, une phrase.
|
|
193
|
+
*/
|
|
194
|
+
export type TailleDeMontant = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'hero';
|
|
195
|
+
/**
|
|
196
|
+
* Couleur choisie par l'appelant : `discret` pour un solde nul ou clos, `primaire` pour la
|
|
197
|
+
* ligne choisie d'un tableau, `succes` et `danger` pour un statut de ligne (execute, rejete).
|
|
198
|
+
* ⚠️ Un statut, jamais un sens : un debit n'est pas une erreur (D30). Le sens d'une
|
|
199
|
+
* VARIATION se dit par `variation`, qui lit `positif` et `negatif`.
|
|
200
|
+
*/
|
|
201
|
+
export type TonDeMontant = Extract<Ton, 'neutre' | 'discret' | 'primaire' | 'succes' | 'danger'>;
|
|
202
|
+
/** `mono` : colonne de chasse fixe des tableaux (planche 4, D19). */
|
|
203
|
+
export type PoliceDeMontant = 'base' | 'mono';
|
|
204
|
+
/** `fin` : cellule numerique, les virgules s'alignent en colonne. */
|
|
205
|
+
export type AlignementDeMontant = 'debut' | 'fin';
|
|
206
|
+
/**
|
|
207
|
+
* Somme d'argent.
|
|
208
|
+
*
|
|
209
|
+
* Le montant entre sous forme d'unites mineures entieres : un nombre a virgule
|
|
210
|
+
* flottante ne represente pas exactement 0,10 EUR, et les erreurs s'accumulent.
|
|
211
|
+
* La conversion n'a lieu qu'a l'instant du rendu.
|
|
212
|
+
*
|
|
213
|
+
* ⚠️ Le signe negatif est TOUJOURS rendu en texte, par Intl, a la place que la
|
|
214
|
+
* locale lui donne, et en vrai signe moins (U+2212). La couleur ne fait que le
|
|
215
|
+
* renforcer : un daltonien, une impression en noir et blanc ou un theme a fort
|
|
216
|
+
* contraste ne doivent jamais transformer un debit en credit. Et parce que
|
|
217
|
+
* certains lecteurs d'ecran taisent U+2212 a leur niveau de ponctuation par
|
|
218
|
+
* defaut, un montant negatif se LIT « moins 1 250,00 € » : le texte visible est
|
|
219
|
+
* alors masque aux technologies d'assistance, dans ce seul cas.
|
|
220
|
+
*
|
|
221
|
+
* ⚠️ `masque` rend « ••••,•• € » et ne met la valeur NULLE PART dans le document :
|
|
222
|
+
* ni dans le texte, ni dans l'attribut `value`, ni dans un texte lu, ni son SIGNE (aucun
|
|
223
|
+
* `data-signe`, aucune couleur de variation : un credit en vert dirait qui est a decouvert).
|
|
224
|
+
* Une vue publique ou une mise en veille ne se contourne pas par l'inspecteur. Le `ton` de
|
|
225
|
+
* l'appelant reste : c'est un statut de ligne, pas un signe. Tout l'ecran se masque d'un geste
|
|
226
|
+
* par `ST_MONTANTS_MASQUES` (`st-privacy-toggle`, lot 256).
|
|
227
|
+
*
|
|
228
|
+
* ⚠️ La forme masquee a la MEME largeur quel que soit le montant (quatre points pour la partie
|
|
229
|
+
* entiere, chasse fixe) : une largeur qui suivrait le montant dirait son ordre de grandeur a qui
|
|
230
|
+
* regarde l'ecran (D136).
|
|
231
|
+
*
|
|
232
|
+
* ```html
|
|
233
|
+
* <st-money [valeur]="solde" taille="hero" />
|
|
234
|
+
* <st-money [valeur]="operation.montant" variation signeExplicite />
|
|
235
|
+
* ```
|
|
236
|
+
*/
|
|
237
|
+
export declare class StMoney {
|
|
238
|
+
private readonly locale;
|
|
239
|
+
private readonly libelles;
|
|
240
|
+
private readonly montantsMasques;
|
|
241
|
+
readonly valeur: import("@angular/core").InputSignal<Montant>;
|
|
242
|
+
readonly signeExplicite: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
243
|
+
readonly sansDevise: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
244
|
+
/** `null` : corps, graisse et interlettrage du texte qui entoure le montant. */
|
|
245
|
+
readonly taille: import("@angular/core").InputSignal<TailleDeMontant | null>;
|
|
246
|
+
/**
|
|
247
|
+
* Le montant est un CREDIT ou un DEBIT : il lit `--st-couleur-positif` ou
|
|
248
|
+
* `--st-couleur-negatif` (qui vaut l'encre du texte tant qu'une charte ne le change
|
|
249
|
+
* pas). Sans elle, un solde negatif reste dans l'encre du texte.
|
|
250
|
+
*/
|
|
251
|
+
readonly variation: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
252
|
+
/** `null` : l'encre du texte, ou celle de la variation. Prime sur la variation. */
|
|
253
|
+
readonly ton: import("@angular/core").InputSignal<TonDeMontant | null>;
|
|
254
|
+
readonly police: import("@angular/core").InputSignal<PoliceDeMontant>;
|
|
255
|
+
/** `null` : l'alignement du conteneur (une cellule numerique aligne deja a la fin). */
|
|
256
|
+
readonly alignement: import("@angular/core").InputSignal<AlignementDeMontant | null>;
|
|
257
|
+
/** Veille, vue publique : les chiffres ne sont pas rendus, seulement leur forme. */
|
|
258
|
+
readonly masque: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
259
|
+
/** Masque par l'entree, ou par l'ecran entier (`ST_MONTANTS_MASQUES`). */
|
|
260
|
+
protected readonly masqueLu: import("@angular/core").Signal<boolean>;
|
|
261
|
+
protected readonly signe: import("@angular/core").Signal<"negatif" | "positif" | "nul">;
|
|
262
|
+
private readonly options;
|
|
263
|
+
protected readonly texte: import("@angular/core").Signal<string>;
|
|
264
|
+
/**
|
|
265
|
+
* Valeur lisible par machine de `<data>` : unites mineures et code ISO de la devise
|
|
266
|
+
* (« -125000 EUR »). Ni arrondie, ni convertie : ce que l'API a transmis.
|
|
267
|
+
*/
|
|
268
|
+
protected readonly valeurMachine: import("@angular/core").Signal<string>;
|
|
269
|
+
/** « moins 1 250,00 € » : le montant absolu, precede du mot du dictionnaire. */
|
|
270
|
+
protected readonly texteLu: import("@angular/core").Signal<string>;
|
|
271
|
+
/**
|
|
272
|
+
* La FORME du montant sans ses chiffres : « ••••,•• € », « $••••.•• ». Separateur
|
|
273
|
+
* decimal et devise de la locale, une decimale masquee par decimale de la devise ;
|
|
274
|
+
* ni le signe ni l'ordre de grandeur (groupes) ne sont rendus, ils trahiraient la valeur.
|
|
275
|
+
*/
|
|
276
|
+
protected readonly texteMasque: import("@angular/core").Signal<string>;
|
|
277
|
+
protected readonly libelleMasque: import("@angular/core").Signal<string>;
|
|
278
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StMoney, never>;
|
|
279
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StMoney, "st-money", never, {
|
|
280
|
+
"valeur": {
|
|
281
|
+
"alias": "valeur";
|
|
282
|
+
"required": true;
|
|
283
|
+
"isSignal": true;
|
|
284
|
+
};
|
|
285
|
+
"signeExplicite": {
|
|
286
|
+
"alias": "signeExplicite";
|
|
287
|
+
"required": false;
|
|
288
|
+
"isSignal": true;
|
|
289
|
+
};
|
|
290
|
+
"sansDevise": {
|
|
291
|
+
"alias": "sansDevise";
|
|
292
|
+
"required": false;
|
|
293
|
+
"isSignal": true;
|
|
294
|
+
};
|
|
295
|
+
"taille": {
|
|
296
|
+
"alias": "taille";
|
|
297
|
+
"required": false;
|
|
298
|
+
"isSignal": true;
|
|
299
|
+
};
|
|
300
|
+
"variation": {
|
|
301
|
+
"alias": "variation";
|
|
302
|
+
"required": false;
|
|
303
|
+
"isSignal": true;
|
|
304
|
+
};
|
|
305
|
+
"ton": {
|
|
306
|
+
"alias": "ton";
|
|
307
|
+
"required": false;
|
|
308
|
+
"isSignal": true;
|
|
309
|
+
};
|
|
310
|
+
"police": {
|
|
311
|
+
"alias": "police";
|
|
312
|
+
"required": false;
|
|
313
|
+
"isSignal": true;
|
|
314
|
+
};
|
|
315
|
+
"alignement": {
|
|
316
|
+
"alias": "alignement";
|
|
317
|
+
"required": false;
|
|
318
|
+
"isSignal": true;
|
|
319
|
+
};
|
|
320
|
+
"masque": {
|
|
321
|
+
"alias": "masque";
|
|
322
|
+
"required": false;
|
|
323
|
+
"isSignal": true;
|
|
324
|
+
};
|
|
325
|
+
}, {}, never, never, true, never>;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* `court` 17/09/2026, `long` 17 septembre 2026, `moyen` 17 sept. 2026, 09:30 (planche 2),
|
|
329
|
+
* `date-heure` 17/09/2026 09:30, `heure` 09:30.
|
|
330
|
+
*/
|
|
331
|
+
export type FormatDeDate = 'court' | 'long' | 'moyen' | 'date-heure' | 'heure';
|
|
332
|
+
/**
|
|
333
|
+
* `valeur` : une date lue pour elle-meme (cellule, liste de description). `meta` : une date
|
|
334
|
+
* dans une phrase attenuee (« Echeance au 30/09/2026 », planche 2) — la date seule y est
|
|
335
|
+
* appuyee (600, encre du texte), et ses chiffres sont ceux du texte courant.
|
|
336
|
+
*/
|
|
337
|
+
export type VarianteDeDate = 'valeur' | 'meta';
|
|
338
|
+
/**
|
|
339
|
+
* Date rendue dans la locale et le fuseau de l'application.
|
|
340
|
+
*
|
|
341
|
+
* ⚠️ La locale et le fuseau sont EXPLICITES, jamais deduits de l'environnement
|
|
342
|
+
* d'execution. Un rendu serveur et un rendu navigateur qui ne s'accordent pas
|
|
343
|
+
* produisent deux textes differents, et l'hydratation casse. Le rendu serveur
|
|
344
|
+
* est ecarte en version 1, mais la compatibilite reste gardee a cout nul.
|
|
345
|
+
*
|
|
346
|
+
* ⚠️ Ce qui se lit est ce qui se voit : le texte n'est masque aux technologies
|
|
347
|
+
* d'assistance que si un equivalent est lu a sa place. Le format court se lit en
|
|
348
|
+
* toutes lettres (« 12/09/26 » est ambigu a l'oral, et l'ordre jour-mois n'est pas
|
|
349
|
+
* universel) ; les autres se lisent tels qu'affiches. Une date absente ou illisible
|
|
350
|
+
* rend « — », lu « Date inconnue », et non un hote vide.
|
|
351
|
+
*
|
|
352
|
+
* ⚠️ Une heure SANS decalage (« 2026-09-17T09:30 ») est une heure de mur : elle se
|
|
353
|
+
* lit dans le fuseau de rendu. `new Date()` la lisait dans le fuseau du NAVIGATEUR,
|
|
354
|
+
* puis la rendait dans celui de l'application : l'heure changeait en voyage.
|
|
355
|
+
*
|
|
356
|
+
* Chiffres : alignes (tabulaires) quand la date est une valeur chiffree (`court`,
|
|
357
|
+
* `date-heure`, `heure`), ceux du texte quand elle s'ecrit en mots (`long`, `moyen`)
|
|
358
|
+
* ou dans une phrase (`meta`) — la planche 2 les compose ainsi, et une colonne de
|
|
359
|
+
* dates ne s'ecrit pas en toutes lettres.
|
|
360
|
+
*/
|
|
361
|
+
export declare class StDate {
|
|
362
|
+
private readonly locale;
|
|
363
|
+
private readonly libelles;
|
|
364
|
+
private readonly fuseauParDefaut;
|
|
365
|
+
/** `null`, `''` ou une chaine illisible : « — », lu « Date inconnue ». */
|
|
366
|
+
readonly valeur: import("@angular/core").InputSignal<string | Date | null>;
|
|
367
|
+
readonly format: import("@angular/core").InputSignal<FormatDeDate>;
|
|
368
|
+
readonly fuseau: import("@angular/core").InputSignal<string | null>;
|
|
369
|
+
/**
|
|
370
|
+
* Affiche le fuseau apres l'heure, « (Europe/Paris) » (planche 2). A poser des que le
|
|
371
|
+
* fuseau differe de celui de l'application : une heure sans fuseau ment a qui voyage.
|
|
372
|
+
* Sans effet sur une date sans heure.
|
|
373
|
+
*/
|
|
374
|
+
readonly afficherLeFuseau: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
375
|
+
readonly variante: import("@angular/core").InputSignal<VarianteDeDate>;
|
|
376
|
+
/**
|
|
377
|
+
* Une DATE DE CALENDRIER (`2026-09-12`) n'est pas un instant : une date de
|
|
378
|
+
* naissance, une echeance ou un jour de valeur n'ont pas d'heure, et ne
|
|
379
|
+
* doivent pas changer de jour selon le fuseau de qui les regarde.
|
|
380
|
+
*
|
|
381
|
+
* ⚠️ Le piege est dans la norme : `new Date('2026-09-12')` vaut minuit UTC,
|
|
382
|
+
* donc le 11 septembre partout a l'ouest de Greenwich. Une echeance affichee
|
|
383
|
+
* la veille est un defaut que personne ne voit depuis l'Europe.
|
|
384
|
+
*/
|
|
385
|
+
private readonly estDateDeCalendrier;
|
|
386
|
+
/**
|
|
387
|
+
* Le fuseau de rendu. Pour une date de calendrier, c'est UTC : la valeur a
|
|
388
|
+
* ete construite a minuit UTC, la relire en UTC rend donc le jour ecrit.
|
|
389
|
+
*/
|
|
390
|
+
private readonly fuseauDeRendu;
|
|
391
|
+
private readonly date;
|
|
392
|
+
protected readonly estValide: import("@angular/core").Signal<boolean>;
|
|
393
|
+
constructor();
|
|
394
|
+
/**
|
|
395
|
+
* Une date de calendrier porte `2026-09-12`, sans heure ni decalage : c'est
|
|
396
|
+
* la forme que la norme HTML attend, et la seule qui ne mente pas.
|
|
397
|
+
*/
|
|
398
|
+
protected readonly iso: import("@angular/core").Signal<string | null>;
|
|
399
|
+
/** Une date sans heure ne peut pas en afficher une. */
|
|
400
|
+
private readonly optionsDeFormat;
|
|
401
|
+
protected readonly texte: import("@angular/core").Signal<string>;
|
|
402
|
+
/** « (Europe/Paris) » : le fuseau tel que l'application le nomme, apres l'heure. */
|
|
403
|
+
protected readonly fuseauAffiche: import("@angular/core").Signal<string | null>;
|
|
404
|
+
/** Forme longue du format court, lue par les technologies d'assistance a sa place. */
|
|
405
|
+
protected readonly texteAccessible: import("@angular/core").Signal<string | null>;
|
|
406
|
+
protected readonly dateInconnue: import("@angular/core").Signal<string>;
|
|
407
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StDate, never>;
|
|
408
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StDate, "st-date", never, {
|
|
409
|
+
"valeur": {
|
|
410
|
+
"alias": "valeur";
|
|
411
|
+
"required": true;
|
|
412
|
+
"isSignal": true;
|
|
413
|
+
};
|
|
414
|
+
"format": {
|
|
415
|
+
"alias": "format";
|
|
416
|
+
"required": false;
|
|
417
|
+
"isSignal": true;
|
|
418
|
+
};
|
|
419
|
+
"fuseau": {
|
|
420
|
+
"alias": "fuseau";
|
|
421
|
+
"required": false;
|
|
422
|
+
"isSignal": true;
|
|
423
|
+
};
|
|
424
|
+
"afficherLeFuseau": {
|
|
425
|
+
"alias": "afficherLeFuseau";
|
|
426
|
+
"required": false;
|
|
427
|
+
"isSignal": true;
|
|
428
|
+
};
|
|
429
|
+
"variante": {
|
|
430
|
+
"alias": "variante";
|
|
431
|
+
"required": false;
|
|
432
|
+
"isSignal": true;
|
|
433
|
+
};
|
|
434
|
+
}, {}, never, never, true, never>;
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* `neutre` : l'encre du texte (planche 2, « il y a 5 minutes ») ; `discret` : un horodatage
|
|
438
|
+
* secondaire ; `primaire` : ce qui vient d'arriver, appuye (« a l'instant », 600).
|
|
439
|
+
*/
|
|
440
|
+
export type TonDeTempsRelatif = Extract<Ton, 'neutre' | 'discret' | 'primaire'>;
|
|
441
|
+
/**
|
|
442
|
+
* Temps ecoule, exprime relativement (« il y a 5 minutes »).
|
|
443
|
+
*
|
|
444
|
+
* ⚠️ Ce composant ne doit JAMAIS etre place dans une region vivante : son texte
|
|
445
|
+
* se reecrit tout seul, et une region vivante le ferait annoncer en boucle.
|
|
446
|
+
* Son nom accessible porte la date absolue, qui elle ne bouge pas.
|
|
447
|
+
*
|
|
448
|
+
* `avecAbsolu` montre aussi la date absolue, « il y a 2 h (17 sept. 2026, 07:30) » : pour un
|
|
449
|
+
* journal d'audit, ou le relatif seul est ambigu. Le relatif passe alors a sa forme courte, et
|
|
450
|
+
* les deux se lisent tels qu'affiches — plus de texte masque qui dirait autre chose que l'ecran.
|
|
451
|
+
*
|
|
452
|
+
* La cadence de rafraichissement s'adapte : rafraichir chaque seconde une date
|
|
453
|
+
* vieille de trois jours reveille l'onglet pour rien. Et un onglet MASQUE ne
|
|
454
|
+
* rafraichit rien : le texte est recalcule a son retour.
|
|
455
|
+
*/
|
|
456
|
+
export declare class StRelativeTime {
|
|
457
|
+
private readonly locale;
|
|
458
|
+
private readonly libelles;
|
|
459
|
+
private readonly fuseau;
|
|
460
|
+
private readonly document;
|
|
461
|
+
readonly valeur: import("@angular/core").InputSignal<string | Date>;
|
|
462
|
+
readonly rafraichir: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
463
|
+
readonly ton: import("@angular/core").InputSignal<TonDeTempsRelatif>;
|
|
464
|
+
readonly avecAbsolu: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
465
|
+
/** Au-dela de ce nombre de jours, la date absolue est plus parlante. */
|
|
466
|
+
readonly seuilAbsoluEnJours: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
467
|
+
private readonly destruction;
|
|
468
|
+
private readonly maintenant;
|
|
469
|
+
constructor();
|
|
470
|
+
/**
|
|
471
|
+
* L'instant de la valeur. Une chaine se lit par `lireInstant`, comme dans `st-date` : `new Date`
|
|
472
|
+
* lisait une heure SANS decalage dans le fuseau du NAVIGATEUR, a quelques heures de celle de
|
|
473
|
+
* l'application (audit du 2026-09-27, A-4) ; une ecriture non ISO est illisible (`NaN`).
|
|
474
|
+
*/
|
|
475
|
+
private dateEnMillisecondes;
|
|
476
|
+
protected readonly estValide: import("@angular/core").Signal<boolean>;
|
|
477
|
+
protected readonly iso: import("@angular/core").Signal<string | null>;
|
|
478
|
+
protected readonly depasseLeSeuil: import("@angular/core").Signal<boolean>;
|
|
479
|
+
protected readonly texte: import("@angular/core").Signal<string>;
|
|
480
|
+
/** L'absolu visible (`avecAbsolu`), sauf quand le texte est deja une date absolue. */
|
|
481
|
+
protected readonly absoluVisible: import("@angular/core").Signal<string | null>;
|
|
482
|
+
/** Lu a la place du relatif quand l'absolu n'est pas a l'ecran : il ne bouge pas. */
|
|
483
|
+
protected readonly texteAccessible: import("@angular/core").Signal<string | null>;
|
|
484
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StRelativeTime, never>;
|
|
485
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StRelativeTime, "st-relative-time", never, {
|
|
486
|
+
"valeur": {
|
|
487
|
+
"alias": "valeur";
|
|
488
|
+
"required": true;
|
|
489
|
+
"isSignal": true;
|
|
490
|
+
};
|
|
491
|
+
"rafraichir": {
|
|
492
|
+
"alias": "rafraichir";
|
|
493
|
+
"required": false;
|
|
494
|
+
"isSignal": true;
|
|
495
|
+
};
|
|
496
|
+
"ton": {
|
|
497
|
+
"alias": "ton";
|
|
498
|
+
"required": false;
|
|
499
|
+
"isSignal": true;
|
|
500
|
+
};
|
|
501
|
+
"avecAbsolu": {
|
|
502
|
+
"alias": "avecAbsolu";
|
|
503
|
+
"required": false;
|
|
504
|
+
"isSignal": true;
|
|
505
|
+
};
|
|
506
|
+
"seuilAbsoluEnJours": {
|
|
507
|
+
"alias": "seuilAbsoluEnJours";
|
|
508
|
+
"required": false;
|
|
509
|
+
"isSignal": true;
|
|
510
|
+
};
|
|
511
|
+
}, {}, never, never, true, never>;
|
|
512
|
+
}
|
|
513
|
+
/** `primaire` : la valeur appuyee d'un indicateur (« 142 » operations en cours, planche 2). */
|
|
514
|
+
export type TonDeCompte = Extract<Ton, 'neutre' | 'discret' | 'primaire'>;
|
|
515
|
+
/** Unites simples d'Intl (`style: 'unit'`) : « 12 Mo », « 3 jours ». */
|
|
516
|
+
export type UniteDeCompte = 'byte' | 'kilobyte' | 'megabyte' | 'gigabyte' | 'terabyte' | 'percent' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year';
|
|
517
|
+
/**
|
|
518
|
+
* Nombre dans le flux du texte.
|
|
519
|
+
*
|
|
520
|
+
* Distinct de `st-badge`, qui est une pastille superposee a un autre element.
|
|
521
|
+
*
|
|
522
|
+
* ⚠️ Ce qui se lit est ce qui se voit : le nombre n'est masque aux technologies
|
|
523
|
+
* d'assistance que quand il est ABREGE (« 1,2 k »), et le nom accessible porte
|
|
524
|
+
* alors le nombre COMPLET — l'abreviation est une commodite visuelle, pas une perte
|
|
525
|
+
* d'information pour qui ecoute la page. Un nombre entier se lit tel qu'affiche (la
|
|
526
|
+
* 0.8 le masquait sans rien lire a sa place).
|
|
527
|
+
*
|
|
528
|
+
* Le corps et la graisse sont ceux du texte qui l'entoure : dans une phrase, dans la
|
|
529
|
+
* valeur d'un `st-stat` (32/40 600, planche 2), dans une cellule. `bigint` accepte : un
|
|
530
|
+
* compteur de base ne tient pas toujours dans un nombre a virgule flottante.
|
|
531
|
+
*/
|
|
532
|
+
export declare class StCount {
|
|
533
|
+
private readonly locale;
|
|
534
|
+
readonly valeur: import("@angular/core").InputSignal<number | bigint>;
|
|
535
|
+
readonly ton: import("@angular/core").InputSignal<TonDeCompte>;
|
|
536
|
+
/** Unite formatee par Intl (« 12 Mo ») ; une phrase (« 3 fichiers ») reste a l'appelant. */
|
|
537
|
+
readonly unite: import("@angular/core").InputSignal<UniteDeCompte | null>;
|
|
538
|
+
/** `null` : jamais d'abreviation (contexte comptable). */
|
|
539
|
+
readonly abregerAuDela: import("@angular/core").InputSignalWithTransform<number | null, unknown>;
|
|
540
|
+
private readonly absolu;
|
|
541
|
+
protected readonly estAbrege: import("@angular/core").Signal<boolean>;
|
|
542
|
+
private readonly optionsDUnite;
|
|
543
|
+
protected readonly texteComplet: import("@angular/core").Signal<string>;
|
|
544
|
+
protected readonly texte: import("@angular/core").Signal<string>;
|
|
545
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StCount, never>;
|
|
546
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StCount, "st-count", never, {
|
|
547
|
+
"valeur": {
|
|
548
|
+
"alias": "valeur";
|
|
549
|
+
"required": true;
|
|
550
|
+
"isSignal": true;
|
|
551
|
+
};
|
|
552
|
+
"ton": {
|
|
553
|
+
"alias": "ton";
|
|
554
|
+
"required": false;
|
|
555
|
+
"isSignal": true;
|
|
556
|
+
};
|
|
557
|
+
"unite": {
|
|
558
|
+
"alias": "unite";
|
|
559
|
+
"required": false;
|
|
560
|
+
"isSignal": true;
|
|
561
|
+
};
|
|
562
|
+
"abregerAuDela": {
|
|
563
|
+
"alias": "abregerAuDela";
|
|
564
|
+
"required": false;
|
|
565
|
+
"isSignal": true;
|
|
566
|
+
};
|
|
567
|
+
}, {}, never, never, true, never>;
|
|
568
|
+
}
|
|
569
|
+
/**
|
|
570
|
+
* `pourcentage` : la valeur EN POUR CENT, telle que l'API la donne (3.25 s'ecrit « 3,25 % » en
|
|
571
|
+
* francais, « 3.25% » en anglais) ; `unite` : avec son unite (« 12 mois », « 250 ko »).
|
|
572
|
+
*/
|
|
573
|
+
export type FormatDeNombre = 'decimal' | 'pourcentage' | 'unite';
|
|
574
|
+
/** Les unites d'Intl, sans `percent` : un pourcentage se dit par `format="pourcentage"`. */
|
|
575
|
+
export type UniteDeNombre = Exclude<UniteDeCompte, 'percent'>;
|
|
576
|
+
/** Decimales fixes (`2` : « 3,20 ») ou bornees (`{ min: 0, max: 2 }` : « 3 », « 3,2 », « 3,25 »). */
|
|
577
|
+
export type DecimalesDeNombre = number | {
|
|
578
|
+
readonly min: number;
|
|
579
|
+
readonly max: number;
|
|
580
|
+
};
|
|
581
|
+
/** Les tons de `st-money` : un statut choisi par l'appelant, jamais deduit du signe. */
|
|
582
|
+
export type TonDeNombre = Extract<Ton, 'neutre' | 'discret' | 'primaire' | 'succes' | 'danger'>;
|
|
583
|
+
/**
|
|
584
|
+
* Un nombre qui n'est ni un montant (`st-money`) ni un compte (`st-count`) : un taux, un TAEG, une
|
|
585
|
+
* quantite decimale, une grandeur avec son unite (lot 256).
|
|
586
|
+
*
|
|
587
|
+
* ```html
|
|
588
|
+
* <st-number [valeur]="3.25" format="pourcentage" />
|
|
589
|
+
* <st-number [valeur]="250" format="unite" unite="kilobyte" [decimales]="0" />
|
|
590
|
+
* ```
|
|
591
|
+
*
|
|
592
|
+
* Formate par Intl dans la locale COURANTE (`ST_LOCALE`) : il suit une bascule de langue sans
|
|
593
|
+
* rechargement ; jamais les tuyaux `number` et `percent` d'Angular, figes sur `LOCALE_ID`.
|
|
594
|
+
*
|
|
595
|
+
* ⚠️ **Ce qui se lit est ce qui se voit**, sauf une unite abregee et un signe moins : « 250 ko »
|
|
596
|
+
* s'affiche et « 250 kilooctets » se lit a sa place ; « −0,12 % », en vrai signe moins (U+2212,
|
|
597
|
+
* D30), se lit « moins 0,12 % », comme un montant. La valeur machine va dans `<data value>`.
|
|
598
|
+
* Jamais dans une region vivante.
|
|
599
|
+
*
|
|
600
|
+
* `variation` : le signe se RENFORCE par la couleur (`--st-couleur-positif`, `--st-couleur-negatif`),
|
|
601
|
+
* comme `st-money` ; `ton` prime, choisi par l'appelant (une baisse de marche en `danger`).
|
|
602
|
+
*/
|
|
603
|
+
export declare class StNumber {
|
|
604
|
+
private readonly locale;
|
|
605
|
+
private readonly libelles;
|
|
606
|
+
readonly valeur: import("@angular/core").InputSignal<number | bigint>;
|
|
607
|
+
readonly format: import("@angular/core").InputSignal<FormatDeNombre>;
|
|
608
|
+
readonly decimales: import("@angular/core").InputSignal<DecimalesDeNombre>;
|
|
609
|
+
/** L'unite de `format="unite"` ; sans elle, un nombre decimal. */
|
|
610
|
+
readonly unite: import("@angular/core").InputSignal<UniteDeNombre | null>;
|
|
611
|
+
/** « +0,25 % » : le signe d'une variation positive ; zero n'en porte pas. */
|
|
612
|
+
readonly signeExplicite: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
613
|
+
/** Une hausse ou une baisse : la couleur renforce le signe, deja ecrit. */
|
|
614
|
+
readonly variation: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
615
|
+
/** `null` : l'encre du texte, ou celle de la variation. */
|
|
616
|
+
readonly ton: import("@angular/core").InputSignal<TonDeNombre | null>;
|
|
617
|
+
/** Zero n'a pas de signe, pas meme « -0 ». */
|
|
618
|
+
private readonly lue;
|
|
619
|
+
protected readonly signe: import("@angular/core").Signal<"negatif" | "positif" | "nul">;
|
|
620
|
+
private readonly options;
|
|
621
|
+
protected readonly texte: import("@angular/core").Signal<string>;
|
|
622
|
+
/**
|
|
623
|
+
* Ce qui se lit a la place du texte : l'unite en toutes lettres, « moins » devant un nombre
|
|
624
|
+
* negatif ; `null` : le texte se lit tel qu'il se voit.
|
|
625
|
+
*/
|
|
626
|
+
protected readonly texteLu: import("@angular/core").Signal<string | null>;
|
|
627
|
+
/** La valeur telle que recue, pour `<data value>`. */
|
|
628
|
+
protected readonly valeurMachine: import("@angular/core").Signal<string>;
|
|
629
|
+
private formater;
|
|
630
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StNumber, never>;
|
|
631
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StNumber, "st-number", never, {
|
|
632
|
+
"valeur": {
|
|
633
|
+
"alias": "valeur";
|
|
634
|
+
"required": true;
|
|
635
|
+
"isSignal": true;
|
|
636
|
+
};
|
|
637
|
+
"format": {
|
|
638
|
+
"alias": "format";
|
|
639
|
+
"required": false;
|
|
640
|
+
"isSignal": true;
|
|
641
|
+
};
|
|
642
|
+
"decimales": {
|
|
643
|
+
"alias": "decimales";
|
|
644
|
+
"required": false;
|
|
645
|
+
"isSignal": true;
|
|
646
|
+
};
|
|
647
|
+
"unite": {
|
|
648
|
+
"alias": "unite";
|
|
649
|
+
"required": false;
|
|
650
|
+
"isSignal": true;
|
|
651
|
+
};
|
|
652
|
+
"signeExplicite": {
|
|
653
|
+
"alias": "signeExplicite";
|
|
654
|
+
"required": false;
|
|
655
|
+
"isSignal": true;
|
|
656
|
+
};
|
|
657
|
+
"variation": {
|
|
658
|
+
"alias": "variation";
|
|
659
|
+
"required": false;
|
|
660
|
+
"isSignal": true;
|
|
661
|
+
};
|
|
662
|
+
"ton": {
|
|
663
|
+
"alias": "ton";
|
|
664
|
+
"required": false;
|
|
665
|
+
"isSignal": true;
|
|
666
|
+
};
|
|
667
|
+
}, {}, never, never, true, never>;
|
|
668
|
+
}
|
|
669
|
+
/** Une duree en parties : « 25 ans », « 3 jours », « 1 heure et 30 minutes ». */
|
|
670
|
+
export interface PartiesDeDuree {
|
|
671
|
+
readonly annees?: number;
|
|
672
|
+
readonly mois?: number;
|
|
673
|
+
readonly semaines?: number;
|
|
674
|
+
readonly jours?: number;
|
|
675
|
+
readonly heures?: number;
|
|
676
|
+
readonly minutes?: number;
|
|
677
|
+
readonly secondes?: number;
|
|
678
|
+
}
|
|
679
|
+
/** `court` : « 1 h et 30 min », lu en toutes lettres ; `long` : « 1 heure et 30 minutes ». */
|
|
680
|
+
export type FormatDeDuree = 'court' | 'long';
|
|
681
|
+
/**
|
|
682
|
+
* Une duree affichee (lot 256) : le delai d'un traitement, la duree d'un pret, un temps passe.
|
|
683
|
+
*
|
|
684
|
+
* ```html
|
|
685
|
+
* <st-duration [secondes]="5400" /> <!-- « 1 h et 30 min » -->
|
|
686
|
+
* <st-duration [parties]="{ annees: 25 }" format="long" /> <!-- « 25 ans » -->
|
|
687
|
+
* ```
|
|
688
|
+
*
|
|
689
|
+
* `Intl.DurationFormat` dans la locale COURANTE (`ST_LOCALE`), et, sans lui, chaque unite par
|
|
690
|
+
* `Intl.NumberFormat` jointe par `Intl.ListFormat` : l'ordre, les abreviations et la conjonction
|
|
691
|
+
* suivent la langue, sans table maison.
|
|
692
|
+
*
|
|
693
|
+
* ⚠️ Le format court se LIT en toutes lettres : « 1 h 30 » est ambigu a l'oral. Une duree
|
|
694
|
+
* connue a la seconde porte sa valeur machine (`<time datetime="PT5400S">`).
|
|
695
|
+
*
|
|
696
|
+
* ⚠️ Jamais dans une region vivante : ce n'est pas un compte a rebours (`st-timer` en est un).
|
|
697
|
+
*/
|
|
698
|
+
export declare class StDuration {
|
|
699
|
+
private readonly locale;
|
|
700
|
+
/** Une duree en secondes, decomposee en jours, heures, minutes et secondes. */
|
|
701
|
+
readonly secondes: import("@angular/core").InputSignal<number | null>;
|
|
702
|
+
/** Une duree en parties (annees, mois...) ; ignoree quand `secondes` est donnee. */
|
|
703
|
+
readonly parties: import("@angular/core").InputSignal<PartiesDeDuree | null>;
|
|
704
|
+
readonly format: import("@angular/core").InputSignal<FormatDeDuree>;
|
|
705
|
+
/** Les secondes, entieres et positives ; `null` sans duree en secondes. */
|
|
706
|
+
private readonly totalEnSecondes;
|
|
707
|
+
private readonly partiesLues;
|
|
708
|
+
protected readonly texte: import("@angular/core").Signal<string>;
|
|
709
|
+
/** Le format court en toutes lettres, lu a sa place ; `null` en format long. */
|
|
710
|
+
protected readonly texteLu: import("@angular/core").Signal<string | null>;
|
|
711
|
+
/** `PT5400S` : la duree a la seconde, pour `<time datetime>` ; `null` quand elle est en parties. */
|
|
712
|
+
protected readonly valeurMachine: import("@angular/core").Signal<string | null>;
|
|
713
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StDuration, never>;
|
|
714
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StDuration, "st-duration", never, {
|
|
715
|
+
"secondes": {
|
|
716
|
+
"alias": "secondes";
|
|
717
|
+
"required": false;
|
|
718
|
+
"isSignal": true;
|
|
719
|
+
};
|
|
720
|
+
"parties": {
|
|
721
|
+
"alias": "parties";
|
|
722
|
+
"required": false;
|
|
723
|
+
"isSignal": true;
|
|
724
|
+
};
|
|
725
|
+
"format": {
|
|
726
|
+
"alias": "format";
|
|
727
|
+
"required": false;
|
|
728
|
+
"isSignal": true;
|
|
729
|
+
};
|
|
730
|
+
}, {}, never, never, true, never>;
|
|
731
|
+
}
|
|
732
|
+
export type SensDeTendance = 'hausse' | 'baisse' | 'stable';
|
|
733
|
+
/** La tendance d'un indicateur, decrite par l'appelant. Les textes sont deja traduits. */
|
|
734
|
+
export interface TendanceDeStat {
|
|
735
|
+
/** Le sens de la variation. Absent : un constat sans direction (« 14 prioritaires »). */
|
|
736
|
+
readonly sens?: SensDeTendance;
|
|
737
|
+
/** Ce qui s'affiche DANS la pastille : « +2,4 % ». Absent quand `montant` le dit. */
|
|
738
|
+
readonly texte?: string;
|
|
739
|
+
/**
|
|
740
|
+
* Une variation en argent (« +1 250,00 € ») : rendue par `st-money`, signe explicite, et
|
|
741
|
+
* masquee avec les montants de l'ecran (`ST_MONTANTS_MASQUES`, lot 256), ce qu'un texte ne
|
|
742
|
+
* serait pas.
|
|
743
|
+
*/
|
|
744
|
+
readonly montant?: Montant;
|
|
745
|
+
/** Ce qui la suit, hors pastille : « sur un mois glissant » (planche 2). */
|
|
746
|
+
readonly contexte?: string;
|
|
747
|
+
/**
|
|
748
|
+
* ⚠️ Choisi par l'appelant, et non deduit du sens : une hausse des frais est
|
|
749
|
+
* un `danger`, une hausse de l'epargne un `succes`. Le socle ne sait pas
|
|
750
|
+
* lequel des deux il affiche.
|
|
751
|
+
*/
|
|
752
|
+
readonly ton?: TonSemantique;
|
|
753
|
+
/** La forme, quand le sens ne la donne pas (`priorite-haute` d'un constat d'alerte). */
|
|
754
|
+
readonly icone?: Icone;
|
|
755
|
+
}
|
|
756
|
+
/**
|
|
757
|
+
* Indicateur chiffre : un libelle, une valeur, sa tendance et sa precision.
|
|
758
|
+
*
|
|
759
|
+
* ```html
|
|
760
|
+
* <st-stat libelle="Solde disponible" icone="banque" precision="Au 20 septembre 2026, 09:30"
|
|
761
|
+
* [tendance]="{ sens: 'hausse', texte: '+2,4 %', contexte: 'sur un mois', ton: 'succes' }">
|
|
762
|
+
* <st-money [valeur]="solde" />
|
|
763
|
+
* </st-stat>
|
|
764
|
+
* ```
|
|
765
|
+
*
|
|
766
|
+
* La valeur est PROJETEE : c'est `st-money`, `st-count` ou `st-date` qui la
|
|
767
|
+
* formate dans la langue courante, dans la composition du chiffre cle que la
|
|
768
|
+
* valeur lui transmet (32/40 600, planche 2).
|
|
769
|
+
*
|
|
770
|
+
* ⚠️ **La tendance se lit par un texte ET une forme, jamais par la couleur
|
|
771
|
+
* seule.** Le texte de l'appelant porte deja le signe ; l'icone porte le sens ;
|
|
772
|
+
* et un mot lisible par lecteur seulement (« en hausse », « en baisse »,
|
|
773
|
+
* « stable ») precede le texte, parce qu'un lecteur d'ecran ne lit pas un
|
|
774
|
+
* triangle.
|
|
775
|
+
*
|
|
776
|
+
* Le libelle vient AVANT la valeur dans le document, comme dans une phrase, et
|
|
777
|
+
* nomme le groupe (`role="group"`) : « Solde disponible, groupe ». A l'ecran, il
|
|
778
|
+
* se pose au-dessus, en micro-capitales. Un bouton d'aide se projette a cote de
|
|
779
|
+
* lui (`[aide]`), nomme « A propos de {libelle} » par le dictionnaire (`aProposDe`).
|
|
780
|
+
*/
|
|
781
|
+
export declare class StStat {
|
|
782
|
+
private readonly libelles;
|
|
783
|
+
private readonly element;
|
|
784
|
+
/** Texte visible, deja traduit. */
|
|
785
|
+
readonly libelle: import("@angular/core").InputSignal<string>;
|
|
786
|
+
/** Icone decorative a droite du libelle (planche 2). Sans effet a cote d'une aide projetee. */
|
|
787
|
+
readonly icone: import("@angular/core").InputSignal<Icone | null>;
|
|
788
|
+
readonly tendance: import("@angular/core").InputSignal<TendanceDeStat | null>;
|
|
789
|
+
/** Precision sous la valeur : la periode, la source. Jamais une information critique. */
|
|
790
|
+
readonly precision: import("@angular/core").InputSignal<string | null>;
|
|
791
|
+
protected readonly identifiantDuLibelle: string;
|
|
792
|
+
/** Le libelle et la valeur vont ensemble : un groupe, nomme par le libelle. */
|
|
793
|
+
private readonly role;
|
|
794
|
+
private readonly nommePar;
|
|
795
|
+
constructor();
|
|
796
|
+
protected readonly iconeDeTendance: import("@angular/core").Signal<Icone | null>;
|
|
797
|
+
/**
|
|
798
|
+
* Les triangles d'une variation ont de l'air dans leur boite : 16 px pour eux, a 2 px du
|
|
799
|
+
* texte, 14 px pour les formes pleines, a 4 px (planche 2).
|
|
800
|
+
*/
|
|
801
|
+
protected readonly tailleDeLIcone: import("@angular/core").Signal<TailleDIconeFixe>;
|
|
802
|
+
protected readonly tonDeTendance: import("@angular/core").Signal<TonSemantique>;
|
|
803
|
+
protected readonly sensLu: import("@angular/core").Signal<string | null>;
|
|
804
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StStat, never>;
|
|
805
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StStat, "st-stat", never, {
|
|
806
|
+
"libelle": {
|
|
807
|
+
"alias": "libelle";
|
|
808
|
+
"required": true;
|
|
809
|
+
"isSignal": true;
|
|
810
|
+
};
|
|
811
|
+
"icone": {
|
|
812
|
+
"alias": "icone";
|
|
813
|
+
"required": false;
|
|
814
|
+
"isSignal": true;
|
|
815
|
+
};
|
|
816
|
+
"tendance": {
|
|
817
|
+
"alias": "tendance";
|
|
818
|
+
"required": false;
|
|
819
|
+
"isSignal": true;
|
|
820
|
+
};
|
|
821
|
+
"precision": {
|
|
822
|
+
"alias": "precision";
|
|
823
|
+
"required": false;
|
|
824
|
+
"isSignal": true;
|
|
825
|
+
};
|
|
826
|
+
}, {}, never, ["[aide]", "*"], true, never>;
|
|
827
|
+
}
|
|
828
|
+
/**
|
|
829
|
+
* `ligne` : un montant qui compte (« Montant du virement ») ; `deduction` : retranche, toujours
|
|
830
|
+
* signe (« Remise −5,00 € ») ; `taux` : un texte (« 1 EUR = 1,08 USD, taux garanti 10 min ») ;
|
|
831
|
+
* `total` et `solde` : au pied du tableau, le total appuye, le solde apres operation discret.
|
|
832
|
+
*/
|
|
833
|
+
export type TypeDeLigneDeMontant = 'ligne' | 'deduction' | 'taux' | 'total' | 'solde';
|
|
834
|
+
/** Une ligne du recapitulatif. Les textes sont deja traduits. */
|
|
835
|
+
export interface LigneDeMontant {
|
|
836
|
+
readonly cle: string;
|
|
837
|
+
readonly libelle: string;
|
|
838
|
+
/** Le montant ; celui d'une `deduction` s'affiche retranche, quel que soit son signe. */
|
|
839
|
+
readonly montant?: Montant;
|
|
840
|
+
/** Le texte d'une ligne sans montant (`taux`). */
|
|
841
|
+
readonly texte?: string;
|
|
842
|
+
/** `ligne` par defaut. */
|
|
843
|
+
readonly type?: TypeDeLigneDeMontant;
|
|
844
|
+
/** Sous le libelle, en discret : une periode, une condition. */
|
|
845
|
+
readonly precision?: string;
|
|
846
|
+
}
|
|
847
|
+
interface LigneLue$1 extends LigneDeMontant {
|
|
848
|
+
readonly type: TypeDeLigneDeMontant;
|
|
849
|
+
readonly montantLu: Montant | null;
|
|
850
|
+
/** Le total a l'encre primaire, le solde en discret (planche 11). */
|
|
851
|
+
readonly ton: TonDeMontant | null;
|
|
852
|
+
}
|
|
853
|
+
/**
|
|
854
|
+
* Le recapitulatif chiffre d'une operation avant qu'on la confirme (lot 256) : montant, frais,
|
|
855
|
+
* taux, total debite, solde apres operation. La DSP2 exige les frais et le taux AVANT la
|
|
856
|
+
* confirmation ; des montants alignes dans des `div` ne disent pas la relation entre les lignes.
|
|
857
|
+
*
|
|
858
|
+
* ```html
|
|
859
|
+
* <st-amount-summary legende="Recapitulatif du virement" [lignes]="lignes" />
|
|
860
|
+
* ```
|
|
861
|
+
*
|
|
862
|
+
* ```ts
|
|
863
|
+
* const total = sommerMontants(montant, frais); // jamais en virgule flottante
|
|
864
|
+
* lignes = [
|
|
865
|
+
* { cle: 'montant', libelle: 'Montant', montant },
|
|
866
|
+
* { cle: 'frais', libelle: 'Frais', montant: frais },
|
|
867
|
+
* { cle: 'total', libelle: 'Total debite', montant: total, type: 'total' },
|
|
868
|
+
* ];
|
|
869
|
+
* ```
|
|
870
|
+
*
|
|
871
|
+
* ⚠️ **Un tableau natif**, legende en `caption` (masquable), libelles en en-tetes de ligne : la
|
|
872
|
+
* ligne se lit « Frais, 0,80 € ». Le total et le solde vont au pied (`tfoot`). Le composant ne
|
|
873
|
+
* calcule rien : l'appelant somme par `sommerMontants`, qui refuse les devises melees.
|
|
874
|
+
*
|
|
875
|
+
* Planche 11 : libelles discrets, montants en chasse fixe (leurs virgules s'alignent), total a
|
|
876
|
+
* l'encre primaire. Une deduction reste a l'encre du texte, signee : un debit n'est pas une erreur
|
|
877
|
+
* (D30).
|
|
878
|
+
*
|
|
879
|
+
* Les montants suivent `ST_MONTANTS_MASQUES` (`st-money`).
|
|
880
|
+
*/
|
|
881
|
+
export declare class StAmountSummary {
|
|
882
|
+
/** Le nom du tableau, en `caption`. */
|
|
883
|
+
readonly legende: import("@angular/core").InputSignal<string>;
|
|
884
|
+
/** La legende est lue sans etre vue : un titre de section la dit deja. */
|
|
885
|
+
readonly legendeMasquee: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
886
|
+
readonly lignes: import("@angular/core").InputSignal<readonly LigneDeMontant[]>;
|
|
887
|
+
/** La colonne est deja titree par sa devise. */
|
|
888
|
+
readonly sansDevise: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
889
|
+
private readonly lignesLues;
|
|
890
|
+
protected readonly corps: import("@angular/core").Signal<LigneLue$1[]>;
|
|
891
|
+
protected readonly pied: import("@angular/core").Signal<LigneLue$1[]>;
|
|
892
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StAmountSummary, never>;
|
|
893
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StAmountSummary, "st-amount-summary", never, {
|
|
894
|
+
"legende": {
|
|
895
|
+
"alias": "legende";
|
|
896
|
+
"required": true;
|
|
897
|
+
"isSignal": true;
|
|
898
|
+
};
|
|
899
|
+
"legendeMasquee": {
|
|
900
|
+
"alias": "legendeMasquee";
|
|
901
|
+
"required": false;
|
|
902
|
+
"isSignal": true;
|
|
903
|
+
};
|
|
904
|
+
"lignes": {
|
|
905
|
+
"alias": "lignes";
|
|
906
|
+
"required": true;
|
|
907
|
+
"isSignal": true;
|
|
908
|
+
};
|
|
909
|
+
"sansDevise": {
|
|
910
|
+
"alias": "sansDevise";
|
|
911
|
+
"required": false;
|
|
912
|
+
"isSignal": true;
|
|
913
|
+
};
|
|
914
|
+
}, {}, never, never, true, never>;
|
|
915
|
+
}
|
|
916
|
+
/**
|
|
917
|
+
* `barre` (planches 13-2 et 14) : libelle, valeur sur total, piste de 8 px ; `puce` (planche 16) :
|
|
918
|
+
* piste de 24 px a trois regions, marqueur de la valeur et trait du seuil ; `cellule` (planche 14) :
|
|
919
|
+
* la valeur sur son total et une piste de 6 px, a la taille d'une cellule, le libelle lu seulement.
|
|
920
|
+
*/
|
|
921
|
+
export type VarianteDeJauge = 'barre' | 'puce' | 'cellule';
|
|
922
|
+
/** Ce que dit le texte : ce qui est consomme, ce qui reste, ou la part. */
|
|
923
|
+
export type AffichageDeJauge = 'consomme' | 'reste' | 'pourcentage';
|
|
924
|
+
export type TonDeJauge = Extract<TonSemantique, 'primaire' | 'succes' | 'avertissement' | 'danger'>;
|
|
925
|
+
/** Les trois qualites d'une region de `<meter>` (HTML) : optimale, sous-optimale, pire. */
|
|
926
|
+
export type QualiteDeZone = 'optimale' | 'sous-optimale' | 'pire';
|
|
927
|
+
/** Une region de la piste, en part de la plage (0 a 1), et sa qualite. */
|
|
928
|
+
export interface ZoneDeJauge {
|
|
929
|
+
readonly debut: number;
|
|
930
|
+
readonly fin: number;
|
|
931
|
+
readonly qualite: QualiteDeZone;
|
|
932
|
+
}
|
|
933
|
+
/** Un morceau d'une phrase de valeur : du texte, la valeur, ou le total. */
|
|
934
|
+
interface MorceauDeValeur {
|
|
935
|
+
readonly nature: 'texte' | 'valeur' | 'total';
|
|
936
|
+
readonly texte: string;
|
|
937
|
+
}
|
|
938
|
+
/**
|
|
939
|
+
* Les regions de `<meter>` et leur qualite, selon la regle de HTML : l'optimum dans la region
|
|
940
|
+
* basse la rend optimale (la haute est la pire), dans la haute l'inverse, au milieu les deux bouts
|
|
941
|
+
* sont sous-optimaux. Sans `bas` ni `haut`, AUCUNE region : la jauge ne juge pas.
|
|
942
|
+
*/
|
|
943
|
+
export declare function zonesDeJauge(min: number, max: number, bas: number | null, haut: number | null, optimum: number | null): readonly ZoneDeJauge[];
|
|
944
|
+
/**
|
|
945
|
+
* Une jauge de NIVEAU (lot 257) : un plafond de carte consomme, un quota, un ratio sous son seuil.
|
|
946
|
+
* Pas une progression d'activite (`st-progress`, `progressbar`) : un `<meter>` natif, nomme par son
|
|
947
|
+
* libelle, et une valeur TOUJOURS dite en texte.
|
|
948
|
+
*
|
|
949
|
+
* ```html
|
|
950
|
+
* <!-- consomme, plafond, alerte : des unites mineures (bigint) venues de l'API -->
|
|
951
|
+
* <st-meter libelle="Plafond de paiement mensuel" [valeur]="consomme" [max]="plafond"
|
|
952
|
+
* devise="CHF" [haut]="alerte" [optimum]="0" precision="Reinitialise le 1er octobre" />
|
|
953
|
+
* ```
|
|
954
|
+
*
|
|
955
|
+
* - `devise` : les valeurs sont des UNITES MINEURES de cette devise (comme `Montant`), dites par
|
|
956
|
+
* `st-money` et masquees avec les montants de l'ecran (`ST_MONTANTS_MASQUES`) ; la piste reste,
|
|
957
|
+
* elle ne dit qu'une part.
|
|
958
|
+
* - Le ton suit les regions de `<meter>` (`bas`, `haut`, `optimum`) : optimale en primaire,
|
|
959
|
+
* sous-optimale en avertissement, pire en danger. Sans region, aucun ton deduit ; `ton` l'impose.
|
|
960
|
+
* - `[texte]` projete remplace la phrase du dictionnaire : une puce dit souvent sa valeur ET son
|
|
961
|
+
* seuil, dans les mots du metier (« Ratio post-choc : 128,4 % / minimum legal : 100 % »).
|
|
962
|
+
* - Le `<meter>` natif porte la semantique (nom, valeur, plage) ; le dessin est muet. Sous
|
|
963
|
+
* contraste force, la piste garde un filet et le niveau la couleur de selection du systeme.
|
|
964
|
+
*/
|
|
965
|
+
export declare class StMeter {
|
|
966
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
967
|
+
private readonly locale;
|
|
968
|
+
private readonly masques;
|
|
969
|
+
private readonly identifiants;
|
|
970
|
+
protected readonly idDuLibelle: string;
|
|
971
|
+
protected readonly idDeLaValeur: string;
|
|
972
|
+
readonly libelle: import("@angular/core").InputSignal<string>;
|
|
973
|
+
readonly valeur: import("@angular/core").InputSignal<number | bigint>;
|
|
974
|
+
readonly max: import("@angular/core").InputSignal<number | bigint>;
|
|
975
|
+
readonly min: import("@angular/core").InputSignal<number | bigint>;
|
|
976
|
+
/** Borne haute de la region basse de `<meter>` (`low`). */
|
|
977
|
+
readonly bas: import("@angular/core").InputSignal<number | bigint | null>;
|
|
978
|
+
/** Borne basse de la region haute (`high`). */
|
|
979
|
+
readonly haut: import("@angular/core").InputSignal<number | bigint | null>;
|
|
980
|
+
/** La valeur ideale (`optimum`) : elle dit laquelle des regions est la bonne. */
|
|
981
|
+
readonly optimum: import("@angular/core").InputSignal<number | bigint | null>;
|
|
982
|
+
/** Le trait d'un seuil a ne pas franchir (variante `puce`) : un minimum legal, un plafond. */
|
|
983
|
+
readonly seuil: import("@angular/core").InputSignal<number | bigint | null>;
|
|
984
|
+
/** Code ISO 4217 : les valeurs sont des unites mineures de cette devise. */
|
|
985
|
+
readonly devise: import("@angular/core").InputSignal<string | null>;
|
|
986
|
+
readonly affichage: import("@angular/core").InputSignal<AffichageDeJauge>;
|
|
987
|
+
/** Ce qui suit la jauge (« Reinitialise le 1er octobre »), deja traduit. */
|
|
988
|
+
readonly precision: import("@angular/core").InputSignal<string | null>;
|
|
989
|
+
readonly variante: import("@angular/core").InputSignal<VarianteDeJauge>;
|
|
990
|
+
/** Impose un ton ; `null` : celui des regions, s'il y en a. */
|
|
991
|
+
readonly ton: import("@angular/core").InputSignal<TonDeJauge | null>;
|
|
992
|
+
/** La part en pastille, a droite du libelle (planche 14). */
|
|
993
|
+
readonly partVisible: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
994
|
+
protected readonly nombres: import("@angular/core").Signal<{
|
|
995
|
+
min: number;
|
|
996
|
+
max: number;
|
|
997
|
+
valeur: number;
|
|
998
|
+
}>;
|
|
999
|
+
/** La part de la plage, de 0 a 1. */
|
|
1000
|
+
protected readonly part: import("@angular/core").Signal<number>;
|
|
1001
|
+
protected readonly zones: import("@angular/core").Signal<readonly ZoneDeJauge[]>;
|
|
1002
|
+
protected readonly tonLu: import("@angular/core").Signal<TonDeJauge>;
|
|
1003
|
+
protected readonly partDuSeuil: import("@angular/core").Signal<number | null>;
|
|
1004
|
+
protected readonly pourcentage: import("@angular/core").Signal<string>;
|
|
1005
|
+
protected readonly montant: import("@angular/core").Signal<Montant | null>;
|
|
1006
|
+
protected readonly total: import("@angular/core").Signal<Montant | null>;
|
|
1007
|
+
protected readonly reste: import("@angular/core").Signal<Montant | null>;
|
|
1008
|
+
protected readonly nombreDuReste: import("@angular/core").Signal<number>;
|
|
1009
|
+
/** Ce que dit le compteur quand les montants sont masques : ni le montant, ni son total. */
|
|
1010
|
+
protected readonly texteMasque: import("@angular/core").Signal<string | null>;
|
|
1011
|
+
protected readonly morceauxDuConsomme: import("@angular/core").Signal<readonly MorceauDeValeur[]>;
|
|
1012
|
+
protected readonly morceauxDuReste: import("@angular/core").Signal<readonly MorceauDeValeur[]>;
|
|
1013
|
+
private enMontant;
|
|
1014
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StMeter, never>;
|
|
1015
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StMeter, "st-meter", never, {
|
|
1016
|
+
"libelle": {
|
|
1017
|
+
"alias": "libelle";
|
|
1018
|
+
"required": true;
|
|
1019
|
+
"isSignal": true;
|
|
1020
|
+
};
|
|
1021
|
+
"valeur": {
|
|
1022
|
+
"alias": "valeur";
|
|
1023
|
+
"required": true;
|
|
1024
|
+
"isSignal": true;
|
|
1025
|
+
};
|
|
1026
|
+
"max": {
|
|
1027
|
+
"alias": "max";
|
|
1028
|
+
"required": true;
|
|
1029
|
+
"isSignal": true;
|
|
1030
|
+
};
|
|
1031
|
+
"min": {
|
|
1032
|
+
"alias": "min";
|
|
1033
|
+
"required": false;
|
|
1034
|
+
"isSignal": true;
|
|
1035
|
+
};
|
|
1036
|
+
"bas": {
|
|
1037
|
+
"alias": "bas";
|
|
1038
|
+
"required": false;
|
|
1039
|
+
"isSignal": true;
|
|
1040
|
+
};
|
|
1041
|
+
"haut": {
|
|
1042
|
+
"alias": "haut";
|
|
1043
|
+
"required": false;
|
|
1044
|
+
"isSignal": true;
|
|
1045
|
+
};
|
|
1046
|
+
"optimum": {
|
|
1047
|
+
"alias": "optimum";
|
|
1048
|
+
"required": false;
|
|
1049
|
+
"isSignal": true;
|
|
1050
|
+
};
|
|
1051
|
+
"seuil": {
|
|
1052
|
+
"alias": "seuil";
|
|
1053
|
+
"required": false;
|
|
1054
|
+
"isSignal": true;
|
|
1055
|
+
};
|
|
1056
|
+
"devise": {
|
|
1057
|
+
"alias": "devise";
|
|
1058
|
+
"required": false;
|
|
1059
|
+
"isSignal": true;
|
|
1060
|
+
};
|
|
1061
|
+
"affichage": {
|
|
1062
|
+
"alias": "affichage";
|
|
1063
|
+
"required": false;
|
|
1064
|
+
"isSignal": true;
|
|
1065
|
+
};
|
|
1066
|
+
"precision": {
|
|
1067
|
+
"alias": "precision";
|
|
1068
|
+
"required": false;
|
|
1069
|
+
"isSignal": true;
|
|
1070
|
+
};
|
|
1071
|
+
"variante": {
|
|
1072
|
+
"alias": "variante";
|
|
1073
|
+
"required": false;
|
|
1074
|
+
"isSignal": true;
|
|
1075
|
+
};
|
|
1076
|
+
"ton": {
|
|
1077
|
+
"alias": "ton";
|
|
1078
|
+
"required": false;
|
|
1079
|
+
"isSignal": true;
|
|
1080
|
+
};
|
|
1081
|
+
"partVisible": {
|
|
1082
|
+
"alias": "partVisible";
|
|
1083
|
+
"required": false;
|
|
1084
|
+
"isSignal": true;
|
|
1085
|
+
};
|
|
1086
|
+
}, {}, never, ["[texte]"], true, never>;
|
|
1087
|
+
}
|
|
1088
|
+
/** Ou en est une echeance : a temps, urgente (sous le seuil declare), depassee. */
|
|
1089
|
+
export type EtatDEcheance = 'a-temps' | 'urgente' | 'depassee';
|
|
1090
|
+
/**
|
|
1091
|
+
* Une echeance (lot 257) : un SLA de back-office, une reponse due, un justificatif qui expire, un
|
|
1092
|
+
* taux garanti. Le delai (« dans 2 h »), la date absolue, et l'etat en MOT et en forme.
|
|
1093
|
+
*
|
|
1094
|
+
* ```html
|
|
1095
|
+
* <st-deadline libelle="Reponse due" echeance="2026-10-15T17:00:00+02:00"
|
|
1096
|
+
* [seuilUrgentEnMinutes]="120" (depassee)="signaler()" />
|
|
1097
|
+
* ```
|
|
1098
|
+
*
|
|
1099
|
+
* - Urgente seulement sous un seuil DECLARE (`seuilUrgentEnMinutes`) : sans seuil, a temps ou
|
|
1100
|
+
* depassee, jamais une urgence deduite.
|
|
1101
|
+
* - Jamais dans une region vivante : un tableau de cinquante echeances n'annonce rien ; le
|
|
1102
|
+
* passage a « depassee » n'est pas annonce, l'application decide (`(depassee)`, emise une fois).
|
|
1103
|
+
* - L'etat se relit chaque minute, jamais quand l'onglet est masque (Page Visibility).
|
|
1104
|
+
*/
|
|
1105
|
+
export declare class StDeadline {
|
|
1106
|
+
private readonly document;
|
|
1107
|
+
private readonly fuseau;
|
|
1108
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
1109
|
+
/** L'instant ISO de l'echeance (avec son decalage), ou une `Date`. */
|
|
1110
|
+
readonly echeance: import("@angular/core").InputSignal<string | Date>;
|
|
1111
|
+
/** Ce qui echoit (« Reponse due »), deja traduit ; `null` : l'etat et le delai seuls. */
|
|
1112
|
+
readonly libelle: import("@angular/core").InputSignal<string | null>;
|
|
1113
|
+
/** Sous ce nombre de minutes restantes, l'echeance est urgente ; `null` : jamais. */
|
|
1114
|
+
readonly seuilUrgentEnMinutes: import("@angular/core").InputSignalWithTransform<number | null, unknown>;
|
|
1115
|
+
/** La date absolue a l'ecran ; sinon, elle se lit seulement (nom de `st-relative-time`). */
|
|
1116
|
+
readonly absoluVisible: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1117
|
+
/** L'echeance vient de passer : emise une fois, a la bascule, jamais au chargement deja passe. */
|
|
1118
|
+
readonly depassee: import("@angular/core").OutputEmitterRef<void>;
|
|
1119
|
+
private readonly maintenant;
|
|
1120
|
+
/**
|
|
1121
|
+
* L'instant de l'echeance, lu par `lireInstant` dans le fuseau de l'application : `Date.parse`
|
|
1122
|
+
* lisait une heure sans decalage dans celui du NAVIGATEUR, et une echeance depassee pouvait se
|
|
1123
|
+
* dire « a temps » (audit du 2026-09-27, A-4).
|
|
1124
|
+
*/
|
|
1125
|
+
protected readonly instant: import("@angular/core").Signal<number>;
|
|
1126
|
+
/** Le delai relatif recoit l'instant DEJA lu : les deux ne peuvent pas diverger. */
|
|
1127
|
+
protected readonly dateDeLEcheance: import("@angular/core").Signal<Date>;
|
|
1128
|
+
protected readonly etat: import("@angular/core").Signal<EtatDEcheance>;
|
|
1129
|
+
protected readonly icone: import("@angular/core").Signal<Icone>;
|
|
1130
|
+
protected readonly mot: import("@angular/core").Signal<string>;
|
|
1131
|
+
constructor();
|
|
1132
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StDeadline, never>;
|
|
1133
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StDeadline, "st-deadline", never, {
|
|
1134
|
+
"echeance": {
|
|
1135
|
+
"alias": "echeance";
|
|
1136
|
+
"required": true;
|
|
1137
|
+
"isSignal": true;
|
|
1138
|
+
};
|
|
1139
|
+
"libelle": {
|
|
1140
|
+
"alias": "libelle";
|
|
1141
|
+
"required": false;
|
|
1142
|
+
"isSignal": true;
|
|
1143
|
+
};
|
|
1144
|
+
"seuilUrgentEnMinutes": {
|
|
1145
|
+
"alias": "seuilUrgentEnMinutes";
|
|
1146
|
+
"required": false;
|
|
1147
|
+
"isSignal": true;
|
|
1148
|
+
};
|
|
1149
|
+
"absoluVisible": {
|
|
1150
|
+
"alias": "absoluVisible";
|
|
1151
|
+
"required": false;
|
|
1152
|
+
"isSignal": true;
|
|
1153
|
+
};
|
|
1154
|
+
}, {
|
|
1155
|
+
"depassee": "depassee";
|
|
1156
|
+
}, never, never, true, never>;
|
|
1157
|
+
}
|
|
1158
|
+
/** `sm` : un avatar de 24 px dans une ligne dense ; `md` (defaut) : 32 px (planche 14). */
|
|
1159
|
+
export type TailleDePersonne = 'sm' | 'md';
|
|
1160
|
+
/** `ligne` : l'avatar a gauche du nom ; `colonne` : au-dessus, pour une carte. */
|
|
1161
|
+
export type DispositionDePersonne = 'ligne' | 'colonne';
|
|
1162
|
+
/**
|
|
1163
|
+
* Une personne (lot 257) : l'agent assigne a un dossier, l'auteur d'une action d'audit, le
|
|
1164
|
+
* signataire d'un virement a plusieurs mains, un conseiller.
|
|
1165
|
+
*
|
|
1166
|
+
* ```html
|
|
1167
|
+
* <st-person nom="Adrian von Burg" precision="Direction generale • MAT-0081" [lien]="['/agents', 81]" />
|
|
1168
|
+
* ```
|
|
1169
|
+
*
|
|
1170
|
+
* - Le NOM est du texte ; l'avatar est decoratif (`nomAdjacent`), aucune couleur derivee du nom.
|
|
1171
|
+
* - Le lien, s'il existe, porte le nom seul : ni l'avatar ni la precision ne sont cliquables.
|
|
1172
|
+
* - `soi` : « (vous) » apres le nom, pour la personne connectee.
|
|
1173
|
+
*/
|
|
1174
|
+
export declare class StPerson {
|
|
1175
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
1176
|
+
readonly nom: import("@angular/core").InputSignal<string>;
|
|
1177
|
+
/** Le role, le service, le matricule : deja traduits. */
|
|
1178
|
+
readonly precision: import("@angular/core").InputSignal<string | null>;
|
|
1179
|
+
/**
|
|
1180
|
+
* Nom et precision sont des donnees (l'auteur d'un message, un titulaire) : sans commande de
|
|
1181
|
+
* direction, et isoles (`dir="auto"`) dans la ligne (audit du 2026-09-27, A-2).
|
|
1182
|
+
*/
|
|
1183
|
+
protected readonly nomAffiche: import("@angular/core").Signal<string>;
|
|
1184
|
+
protected readonly precisionAffichee: import("@angular/core").Signal<string | null>;
|
|
1185
|
+
readonly sourceImage: import("@angular/core").InputSignal<string | null>;
|
|
1186
|
+
/** La route de la fiche : le nom devient un lien, lui seul. */
|
|
1187
|
+
readonly lien: import("@angular/core").InputSignal<string | readonly unknown[] | null>;
|
|
1188
|
+
readonly taille: import("@angular/core").InputSignal<TailleDePersonne>;
|
|
1189
|
+
readonly disposition: import("@angular/core").InputSignal<DispositionDePersonne>;
|
|
1190
|
+
readonly ton: import("@angular/core").InputSignal<TonDAvatar>;
|
|
1191
|
+
readonly soi: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1192
|
+
protected readonly tailleDeLAvatar: import("@angular/core").Signal<"sm" | "xs">;
|
|
1193
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StPerson, never>;
|
|
1194
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StPerson, "st-person", never, {
|
|
1195
|
+
"nom": {
|
|
1196
|
+
"alias": "nom";
|
|
1197
|
+
"required": true;
|
|
1198
|
+
"isSignal": true;
|
|
1199
|
+
};
|
|
1200
|
+
"precision": {
|
|
1201
|
+
"alias": "precision";
|
|
1202
|
+
"required": false;
|
|
1203
|
+
"isSignal": true;
|
|
1204
|
+
};
|
|
1205
|
+
"sourceImage": {
|
|
1206
|
+
"alias": "sourceImage";
|
|
1207
|
+
"required": false;
|
|
1208
|
+
"isSignal": true;
|
|
1209
|
+
};
|
|
1210
|
+
"lien": {
|
|
1211
|
+
"alias": "lien";
|
|
1212
|
+
"required": false;
|
|
1213
|
+
"isSignal": true;
|
|
1214
|
+
};
|
|
1215
|
+
"taille": {
|
|
1216
|
+
"alias": "taille";
|
|
1217
|
+
"required": false;
|
|
1218
|
+
"isSignal": true;
|
|
1219
|
+
};
|
|
1220
|
+
"disposition": {
|
|
1221
|
+
"alias": "disposition";
|
|
1222
|
+
"required": false;
|
|
1223
|
+
"isSignal": true;
|
|
1224
|
+
};
|
|
1225
|
+
"ton": {
|
|
1226
|
+
"alias": "ton";
|
|
1227
|
+
"required": false;
|
|
1228
|
+
"isSignal": true;
|
|
1229
|
+
};
|
|
1230
|
+
"soi": {
|
|
1231
|
+
"alias": "soi";
|
|
1232
|
+
"required": false;
|
|
1233
|
+
"isSignal": true;
|
|
1234
|
+
};
|
|
1235
|
+
}, {}, never, never, true, never>;
|
|
1236
|
+
}
|
|
1237
|
+
/** Une personne de la pile : son nom (lu), sa photo s'il y en a une. */
|
|
1238
|
+
export interface PersonneDeGroupe {
|
|
1239
|
+
readonly nom: string;
|
|
1240
|
+
readonly sourceImage?: string | null;
|
|
1241
|
+
}
|
|
1242
|
+
/**
|
|
1243
|
+
* Une pile d'avatars (lot 257) : les conseillers d'un dossier, les valideurs d'une operation.
|
|
1244
|
+
*
|
|
1245
|
+
* ```html
|
|
1246
|
+
* <st-avatar-group etiquette="Valideurs" [personnes]="valideurs" [max]="4" (reste)="ouvrirLaListe()" />
|
|
1247
|
+
* ```
|
|
1248
|
+
*
|
|
1249
|
+
* - Une liste NOMMEE ; chaque avatar dit son nom (il n'est pas a cote : `nomAdjacent` faux).
|
|
1250
|
+
* - Au-dela de `max`, les `max - 1` premiers, puis « +3 » : un BOUTON nomme « 3 autres
|
|
1251
|
+
* personnes », qui emet `reste` ; la liste complete (un `st-popover`) appartient a l'appelant.
|
|
1252
|
+
* - Aucune couleur derivee du nom (garantie de `st-avatar`).
|
|
1253
|
+
*
|
|
1254
|
+
* Dans `ui/donnees` et non au tronc : la coquille ne peint qu'un avatar (D142).
|
|
1255
|
+
*/
|
|
1256
|
+
export declare class StAvatarGroup {
|
|
1257
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
1258
|
+
private readonly locale;
|
|
1259
|
+
readonly personnes: import("@angular/core").InputSignal<readonly PersonneDeGroupe[]>;
|
|
1260
|
+
/** Le nom de la liste (« Valideurs du virement »), deja traduit. */
|
|
1261
|
+
readonly etiquette: import("@angular/core").InputSignal<string>;
|
|
1262
|
+
readonly max: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
1263
|
+
readonly taille: import("@angular/core").InputSignal<TailleDAvatar>;
|
|
1264
|
+
/** « +3 » : la personne veut la liste complete. */
|
|
1265
|
+
readonly reste: import("@angular/core").OutputEmitterRef<void>;
|
|
1266
|
+
/** Les personnes montrees : toutes, ou `max - 1` et le bouton du reste. */
|
|
1267
|
+
protected readonly montrees: import("@angular/core").Signal<readonly PersonneDeGroupe[]>;
|
|
1268
|
+
protected readonly surplus: import("@angular/core").Signal<number>;
|
|
1269
|
+
/**
|
|
1270
|
+
* « +3 » dans la locale du socle, signe compris (`signDisplay`) : ecrit a la main, le nombre
|
|
1271
|
+
* restait en chiffres latins a cote d'une interface qui ne les emploie pas (audit UI du
|
|
1272
|
+
* 2026-09-27, D-27).
|
|
1273
|
+
*/
|
|
1274
|
+
protected readonly surplusAffiche: import("@angular/core").Signal<string>;
|
|
1275
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StAvatarGroup, never>;
|
|
1276
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StAvatarGroup, "st-avatar-group", never, {
|
|
1277
|
+
"personnes": {
|
|
1278
|
+
"alias": "personnes";
|
|
1279
|
+
"required": true;
|
|
1280
|
+
"isSignal": true;
|
|
1281
|
+
};
|
|
1282
|
+
"etiquette": {
|
|
1283
|
+
"alias": "etiquette";
|
|
1284
|
+
"required": true;
|
|
1285
|
+
"isSignal": true;
|
|
1286
|
+
};
|
|
1287
|
+
"max": {
|
|
1288
|
+
"alias": "max";
|
|
1289
|
+
"required": false;
|
|
1290
|
+
"isSignal": true;
|
|
1291
|
+
};
|
|
1292
|
+
"taille": {
|
|
1293
|
+
"alias": "taille";
|
|
1294
|
+
"required": false;
|
|
1295
|
+
"isSignal": true;
|
|
1296
|
+
};
|
|
1297
|
+
}, {
|
|
1298
|
+
"reste": "reste";
|
|
1299
|
+
}, never, never, true, never>;
|
|
1300
|
+
}
|
|
1301
|
+
/** `auto` : autant de colonnes de 14 rem que la largeur en tient ; sinon, le nombre vise. */
|
|
1302
|
+
export type ColonnesDIndicateurs = 'auto' | 2 | 3 | 4 | 6;
|
|
1303
|
+
/**
|
|
1304
|
+
* Un groupe d'indicateurs (lot 257) : les trois a six `st-stat` d'un tableau de bord, lus comme
|
|
1305
|
+
* une liste NOMMEE (« Indicateurs du jour, 4 elements »), chacun groupe nomme par son libelle.
|
|
1306
|
+
*
|
|
1307
|
+
* ```html
|
|
1308
|
+
* <st-stat-group etiquette="Indicateurs du jour" [colonnes]="4">
|
|
1309
|
+
* <li><st-stat libelle="Solde disponible">…</st-stat></li>
|
|
1310
|
+
* <li><st-stat libelle="Ordres en attente">…</st-stat></li>
|
|
1311
|
+
* </st-stat-group>
|
|
1312
|
+
* ```
|
|
1313
|
+
*
|
|
1314
|
+
* La grille suit la largeur de SON conteneur (requete de conteneur), pas celle de la fenetre :
|
|
1315
|
+
* une colonne a 320 px, deux des `sm`, le nombre vise des `lg` (six : deux, trois, puis six).
|
|
1316
|
+
* Les elements de liste sont ecrits par l'appelant : une projection ne sait pas envelopper.
|
|
1317
|
+
*/
|
|
1318
|
+
export declare class StStatGroup {
|
|
1319
|
+
/** Le nom de la liste, deja traduit. */
|
|
1320
|
+
readonly etiquette: import("@angular/core").InputSignal<string>;
|
|
1321
|
+
readonly colonnes: import("@angular/core").InputSignal<ColonnesDIndicateurs>;
|
|
1322
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StStatGroup, never>;
|
|
1323
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StStatGroup, "st-stat-group", never, {
|
|
1324
|
+
"etiquette": {
|
|
1325
|
+
"alias": "etiquette";
|
|
1326
|
+
"required": true;
|
|
1327
|
+
"isSignal": true;
|
|
1328
|
+
};
|
|
1329
|
+
"colonnes": {
|
|
1330
|
+
"alias": "colonnes";
|
|
1331
|
+
"required": false;
|
|
1332
|
+
"isSignal": true;
|
|
1333
|
+
};
|
|
1334
|
+
}, {}, never, ["*"], true, never>;
|
|
1335
|
+
}
|
|
1336
|
+
/** Une ligne : sa cle, son libelle deja traduit, sa valeur (unites mineures avec `devise`). */
|
|
1337
|
+
export interface LigneDeBarres {
|
|
1338
|
+
readonly cle: string;
|
|
1339
|
+
readonly libelle: string;
|
|
1340
|
+
readonly valeur: number | bigint;
|
|
1341
|
+
}
|
|
1342
|
+
/** Ce que disent les colonnes de chiffres : la valeur, la part du total, ou les deux. */
|
|
1343
|
+
export type AffichageDeBarres = 'valeur' | 'part' | 'les-deux';
|
|
1344
|
+
/** Une ligne prete a rendre : sa valeur, sa part du total, sa longueur de barre. */
|
|
1345
|
+
interface LigneLue {
|
|
1346
|
+
readonly cle: string;
|
|
1347
|
+
readonly libelle: string;
|
|
1348
|
+
readonly nombre: number;
|
|
1349
|
+
readonly montant: Montant | null;
|
|
1350
|
+
readonly part: string;
|
|
1351
|
+
readonly longueur: number;
|
|
1352
|
+
}
|
|
1353
|
+
/**
|
|
1354
|
+
* Une comparaison de categories (lot 257) : depenses du mois par categorie, volume par file, part
|
|
1355
|
+
* de chaque classe d'actifs. Un TABLEAU natif, lisible sans ses barres : libelle en en-tete de
|
|
1356
|
+
* ligne, valeur et part en cellules ; la barre, muette, est proportionnelle a la plus grande.
|
|
1357
|
+
*
|
|
1358
|
+
* ```html
|
|
1359
|
+
* <st-bar-list legende="Depenses de septembre" devise="EUR" [lignes]="depenses" [limite]="5" />
|
|
1360
|
+
* ```
|
|
1361
|
+
*
|
|
1362
|
+
* - `limite` : les N plus grandes, puis « Autres » qui regroupe le reste.
|
|
1363
|
+
* - Une seule encre (primaire) : aucune legende de couleur a apprendre. Aucune animation.
|
|
1364
|
+
* - Tout graphique a axe reste hors du socle : ce composant n'en trace pas.
|
|
1365
|
+
*/
|
|
1366
|
+
export declare class StBarList {
|
|
1367
|
+
protected readonly libelles: import("@angular/core").Signal<import("@starterlib/ui").LibellesUi>;
|
|
1368
|
+
private readonly locale;
|
|
1369
|
+
readonly lignes: import("@angular/core").InputSignal<readonly LigneDeBarres[]>;
|
|
1370
|
+
/** La legende du tableau, deja traduite. */
|
|
1371
|
+
readonly legende: import("@angular/core").InputSignal<string>;
|
|
1372
|
+
readonly legendeMasquee: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
1373
|
+
/** Code ISO 4217 : les valeurs sont des unites mineures de cette devise. */
|
|
1374
|
+
readonly devise: import("@angular/core").InputSignal<string | null>;
|
|
1375
|
+
readonly affichage: import("@angular/core").InputSignal<AffichageDeBarres>;
|
|
1376
|
+
/** Les N plus grandes lignes, puis « Autres » ; `null` : toutes, dans l'ordre donne. */
|
|
1377
|
+
readonly limite: import("@angular/core").InputSignal<number | null>;
|
|
1378
|
+
protected readonly lues: import("@angular/core").Signal<readonly LigneLue[]>;
|
|
1379
|
+
protected readonly avecValeur: import("@angular/core").Signal<boolean>;
|
|
1380
|
+
protected readonly avecPart: import("@angular/core").Signal<boolean>;
|
|
1381
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StBarList, never>;
|
|
1382
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StBarList, "st-bar-list", never, {
|
|
1383
|
+
"lignes": {
|
|
1384
|
+
"alias": "lignes";
|
|
1385
|
+
"required": true;
|
|
1386
|
+
"isSignal": true;
|
|
1387
|
+
};
|
|
1388
|
+
"legende": {
|
|
1389
|
+
"alias": "legende";
|
|
1390
|
+
"required": true;
|
|
1391
|
+
"isSignal": true;
|
|
1392
|
+
};
|
|
1393
|
+
"legendeMasquee": {
|
|
1394
|
+
"alias": "legendeMasquee";
|
|
1395
|
+
"required": false;
|
|
1396
|
+
"isSignal": true;
|
|
1397
|
+
};
|
|
1398
|
+
"devise": {
|
|
1399
|
+
"alias": "devise";
|
|
1400
|
+
"required": false;
|
|
1401
|
+
"isSignal": true;
|
|
1402
|
+
};
|
|
1403
|
+
"affichage": {
|
|
1404
|
+
"alias": "affichage";
|
|
1405
|
+
"required": false;
|
|
1406
|
+
"isSignal": true;
|
|
1407
|
+
};
|
|
1408
|
+
"limite": {
|
|
1409
|
+
"alias": "limite";
|
|
1410
|
+
"required": false;
|
|
1411
|
+
"isSignal": true;
|
|
1412
|
+
};
|
|
1413
|
+
}, {}, never, never, true, never>;
|
|
1414
|
+
}
|
|
1415
|
+
/** Une part : sa cle, son libelle deja traduit, sa valeur (unites mineures avec `devise`). */
|
|
1416
|
+
export interface PartDeRepartition {
|
|
1417
|
+
readonly cle: string;
|
|
1418
|
+
readonly libelle: string;
|
|
1419
|
+
readonly valeur: number | bigint;
|
|
1420
|
+
}
|
|
1421
|
+
/** `sous` : la legende sous la barre ; `masquee` : lue seulement (la barre reste muette). */
|
|
1422
|
+
export type LegendeDeRepartition = 'sous' | 'masquee';
|
|
1423
|
+
/** `fine` : 6 px (planche 14) ; `epaisse` : 16 px, ou les motifs se voient. */
|
|
1424
|
+
export type EpaisseurDeRepartition = 'fine' | 'epaisse';
|
|
1425
|
+
/** Une part prete a rendre : sa place dans la barre, sa serie (teinte et motif), sa part. */
|
|
1426
|
+
interface PartLue {
|
|
1427
|
+
readonly cle: string;
|
|
1428
|
+
readonly libelle: string;
|
|
1429
|
+
readonly nombre: number;
|
|
1430
|
+
readonly montant: Montant | null;
|
|
1431
|
+
readonly proportion: number;
|
|
1432
|
+
readonly part: string;
|
|
1433
|
+
readonly serie: number;
|
|
1434
|
+
}
|
|
1435
|
+
/**
|
|
1436
|
+
* Une repartition (lot 257) : la structure d'un portefeuille, les depenses par poste, la part de
|
|
1437
|
+
* chaque canal. Une barre segmentee et sa LEGENDE, qui est la donnee : une liste ordonnee, chaque
|
|
1438
|
+
* part avec sa valeur et son pourcentage ; la barre est muette.
|
|
1439
|
+
*
|
|
1440
|
+
* ```html
|
|
1441
|
+
* <st-repartition etiquette="Structure du portefeuille" devise="CHF" [parts]="classes" />
|
|
1442
|
+
* ```
|
|
1443
|
+
*
|
|
1444
|
+
* - Une serie par teinte du primaire et, des la seconde, par motif (hachures, points, croisillons)
|
|
1445
|
+
* et un filet de separation : la couleur n'est jamais seule, ni sous contraste force.
|
|
1446
|
+
* - Aucune animation, une seule serie par segment ; tout graphique a axe reste hors du socle.
|
|
1447
|
+
* - Une alternative tabulaire, quand il faut trier ou comparer : `st-data-table`.
|
|
1448
|
+
*/
|
|
1449
|
+
export declare class StRepartition {
|
|
1450
|
+
private readonly locale;
|
|
1451
|
+
readonly parts: import("@angular/core").InputSignal<readonly PartDeRepartition[]>;
|
|
1452
|
+
/** Le nom de la repartition (« Structure du portefeuille »), deja traduit. */
|
|
1453
|
+
readonly etiquette: import("@angular/core").InputSignal<string>;
|
|
1454
|
+
/** Code ISO 4217 : les valeurs sont des unites mineures de cette devise. */
|
|
1455
|
+
readonly devise: import("@angular/core").InputSignal<string | null>;
|
|
1456
|
+
readonly legende: import("@angular/core").InputSignal<LegendeDeRepartition>;
|
|
1457
|
+
readonly epaisseur: import("@angular/core").InputSignal<EpaisseurDeRepartition>;
|
|
1458
|
+
protected readonly lues: import("@angular/core").Signal<readonly PartLue[]>;
|
|
1459
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StRepartition, never>;
|
|
1460
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StRepartition, "st-repartition", never, {
|
|
1461
|
+
"parts": {
|
|
1462
|
+
"alias": "parts";
|
|
1463
|
+
"required": true;
|
|
1464
|
+
"isSignal": true;
|
|
1465
|
+
};
|
|
1466
|
+
"etiquette": {
|
|
1467
|
+
"alias": "etiquette";
|
|
1468
|
+
"required": true;
|
|
1469
|
+
"isSignal": true;
|
|
1470
|
+
};
|
|
1471
|
+
"devise": {
|
|
1472
|
+
"alias": "devise";
|
|
1473
|
+
"required": false;
|
|
1474
|
+
"isSignal": true;
|
|
1475
|
+
};
|
|
1476
|
+
"legende": {
|
|
1477
|
+
"alias": "legende";
|
|
1478
|
+
"required": false;
|
|
1479
|
+
"isSignal": true;
|
|
1480
|
+
};
|
|
1481
|
+
"epaisseur": {
|
|
1482
|
+
"alias": "epaisseur";
|
|
1483
|
+
"required": false;
|
|
1484
|
+
"isSignal": true;
|
|
1485
|
+
};
|
|
1486
|
+
}, {}, never, never, true, never>;
|
|
1487
|
+
}
|
|
1488
|
+
|
|
1489
|
+
export {};
|