@starterlib/ui 0.9.1 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -32
- package/assets/icones/catalogue.json +1 -1
- package/fesm2022/starterlib-ui-donnees.mjs +200 -3
- package/fesm2022/starterlib-ui-donnees.mjs.map +1 -1
- package/fesm2022/starterlib-ui-etats.mjs +1158 -0
- package/fesm2022/starterlib-ui-etats.mjs.map +1 -0
- package/fesm2022/starterlib-ui-formulaires.mjs +3 -2
- package/fesm2022/starterlib-ui-formulaires.mjs.map +1 -1
- package/fesm2022/starterlib-ui-indicateurs.mjs +1013 -0
- package/fesm2022/starterlib-ui-indicateurs.mjs.map +1 -0
- package/fesm2022/starterlib-ui-libelles-en.mjs.map +1 -1
- package/fesm2022/starterlib-ui-listes.mjs +5 -2
- package/fesm2022/starterlib-ui-listes.mjs.map +1 -1
- package/fesm2022/starterlib-ui-messagerie.mjs +2 -2
- package/fesm2022/starterlib-ui-messagerie.mjs.map +1 -1
- package/fesm2022/starterlib-ui-mise-en-page.mjs +892 -0
- package/fesm2022/starterlib-ui-mise-en-page.mjs.map +1 -0
- package/fesm2022/starterlib-ui-parcours.mjs +222 -4
- package/fesm2022/starterlib-ui-parcours.mjs.map +1 -1
- package/fesm2022/starterlib-ui-saisie.mjs +131 -3
- package/fesm2022/starterlib-ui-saisie.mjs.map +1 -1
- package/fesm2022/starterlib-ui-surfaces.mjs +2 -1
- package/fesm2022/starterlib-ui-surfaces.mjs.map +1 -1
- package/fesm2022/starterlib-ui.mjs +3526 -7105
- package/fesm2022/starterlib-ui.mjs.map +1 -1
- package/package.json +15 -3
- package/types/starterlib-ui-donnees.d.ts +95 -1
- package/types/starterlib-ui-etats.d.ts +486 -0
- package/types/starterlib-ui-formulaires.d.ts +1 -1
- package/types/starterlib-ui-indicateurs.d.ts +463 -0
- package/types/starterlib-ui-listes.d.ts +2 -1
- package/types/starterlib-ui-mise-en-page.d.ts +355 -0
- package/types/starterlib-ui-parcours.d.ts +123 -3
- package/types/starterlib-ui-saisie.d.ts +72 -2
- package/types/starterlib-ui-selection.d.ts +3 -2
- package/types/starterlib-ui.d.ts +36 -1604
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
import { Ton, TonSemantique } from "@starterlib/util";
|
|
2
|
+
import { AnnonceLocale, Icone, TailleDIcone } from "@starterlib/ui";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import { InjectionToken } from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* ⚠️ `primaire` et non « info » : les deux designaient deja la meme couleur
|
|
7
|
+
* d'accent, et rien ne distinguait un statut « info » d'un statut « primaire »
|
|
8
|
+
* ailleurs dans le socle.
|
|
9
|
+
*/
|
|
10
|
+
export type TonDeStatut = TonSemantique;
|
|
11
|
+
/**
|
|
12
|
+
* `md` (defaut) : 24 px, libelle de 11 px, icone de 16 px au trait (planche 2 de Claude Design).
|
|
13
|
+
* `sm` : 18 px, icone de 14 px PLEINE, pour les tableaux denses (a cette taille, un trait ne
|
|
14
|
+
* se lit plus).
|
|
15
|
+
*/
|
|
16
|
+
export type TailleDePastille = 'md' | 'sm';
|
|
17
|
+
/**
|
|
18
|
+
* `icone` (defaut) : la forme du statut devant le libelle. `point` : un point fixe de 8 px,
|
|
19
|
+
* reserve au TEMOIN DE LIAISON (« Passerelle active ») ; un statut metier garde sa forme.
|
|
20
|
+
*/
|
|
21
|
+
export type VarianteDePastille = 'icone' | 'point';
|
|
22
|
+
/**
|
|
23
|
+
* `capitales` (defaut) : le libelle en capitales de 11 px, a l'interlettrage du micro-libelle
|
|
24
|
+
* (forme de la planche 4, DESIGN.md « label-sm uppercase »). `phrase` : la casse du texte, en
|
|
25
|
+
* 12/16 — 11 px est reserve aux micro-libelles en capitales (ADR 0005 D18, D38).
|
|
26
|
+
*/
|
|
27
|
+
export type CasseDePastille = 'phrase' | 'capitales';
|
|
28
|
+
/**
|
|
29
|
+
* Pastille de statut.
|
|
30
|
+
*
|
|
31
|
+
* ⚠️ Le libelle est OBLIGATOIRE, et l'icone differe par sa FORME d'un ton a l'autre (coche,
|
|
32
|
+
* horloge, croix, cercle) : un statut porte par la seule couleur est illisible pour une personne
|
|
33
|
+
* daltonienne, a l'impression, et sous un theme a fort contraste. Sans icone fournie, la forme
|
|
34
|
+
* vient du ton (lot 206) : un appelant ne peut plus l'oublier.
|
|
35
|
+
*
|
|
36
|
+
* ⚠️ Aucun role ARIA, malgre le nom du composant : `role="status"` en ferait
|
|
37
|
+
* une region vivante, et une liste de vingt lignes ferait annoncer vingt
|
|
38
|
+
* statuts a chaque rendu.
|
|
39
|
+
*
|
|
40
|
+
* Rendu de reference : la forme de la planche 4 (icone du ton, filet du ton a 20 %, capitales)
|
|
41
|
+
* a la taille de la planche 2 (24 px, libelle 11/600, icone de 16 au trait), ADR web/starter 0005
|
|
42
|
+
* D23. Les capitales sont le DEFAUT (revue E8) : un libelle de 11 px en casse de phrase est
|
|
43
|
+
* refuse par D18 ; la casse de phrase passe a 12/16.
|
|
44
|
+
*/
|
|
45
|
+
export declare class StStatusPill {
|
|
46
|
+
/** Code machine du statut : sert aux tests et aux selecteurs, jamais a l'affichage. */
|
|
47
|
+
readonly statut: import("@angular/core").InputSignal<string>;
|
|
48
|
+
/** Texte deja traduit par l'appelant : le socle ne traduit rien. */
|
|
49
|
+
readonly libelle: import("@angular/core").InputSignal<string>;
|
|
50
|
+
/**
|
|
51
|
+
* `null` : la forme du ton (neutre `cercle`, information et primaire `cercle-info`, succes
|
|
52
|
+
* `cercle-coche`, avertissement `triangle-alerte`, danger `cercle-croix`). Fournie, une forme
|
|
53
|
+
* plus precise : `horloge` (en attente), `octogone-alerte` (bloque), `interdit` (opposition).
|
|
54
|
+
*/
|
|
55
|
+
readonly icone: import("@angular/core").InputSignal<Icone | null>;
|
|
56
|
+
readonly ton: import("@angular/core").InputSignal<TonSemantique>;
|
|
57
|
+
readonly taille: import("@angular/core").InputSignal<TailleDePastille>;
|
|
58
|
+
readonly variante: import("@angular/core").InputSignal<VarianteDePastille>;
|
|
59
|
+
readonly casse: import("@angular/core").InputSignal<CasseDePastille>;
|
|
60
|
+
/**
|
|
61
|
+
* L'icone dessinee : celle de l'appelant, ou la forme du ton. En `sm`, le jumeau PLEIN des
|
|
62
|
+
* qu'il existe (a 14 px, un contour ne se lit plus) ; en `md`, le trait, sauf si l'appelant
|
|
63
|
+
* demande lui-meme le plein (`{ nom, variante: 'plein' }`).
|
|
64
|
+
*/
|
|
65
|
+
protected readonly iconeDessinee: import("@angular/core").Signal<Icone>;
|
|
66
|
+
protected readonly tailleDIcone: import("@angular/core").Signal<TailleDIcone>;
|
|
67
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StStatusPill, never>;
|
|
68
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StStatusPill, "st-status-pill", never, {
|
|
69
|
+
"statut": {
|
|
70
|
+
"alias": "statut";
|
|
71
|
+
"required": true;
|
|
72
|
+
"isSignal": true;
|
|
73
|
+
};
|
|
74
|
+
"libelle": {
|
|
75
|
+
"alias": "libelle";
|
|
76
|
+
"required": true;
|
|
77
|
+
"isSignal": true;
|
|
78
|
+
};
|
|
79
|
+
"icone": {
|
|
80
|
+
"alias": "icone";
|
|
81
|
+
"required": false;
|
|
82
|
+
"isSignal": true;
|
|
83
|
+
};
|
|
84
|
+
"ton": {
|
|
85
|
+
"alias": "ton";
|
|
86
|
+
"required": false;
|
|
87
|
+
"isSignal": true;
|
|
88
|
+
};
|
|
89
|
+
"taille": {
|
|
90
|
+
"alias": "taille";
|
|
91
|
+
"required": false;
|
|
92
|
+
"isSignal": true;
|
|
93
|
+
};
|
|
94
|
+
"variante": {
|
|
95
|
+
"alias": "variante";
|
|
96
|
+
"required": false;
|
|
97
|
+
"isSignal": true;
|
|
98
|
+
};
|
|
99
|
+
"casse": {
|
|
100
|
+
"alias": "casse";
|
|
101
|
+
"required": false;
|
|
102
|
+
"isSignal": true;
|
|
103
|
+
};
|
|
104
|
+
}, {}, never, never, true, never>;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Ou le badge se pose sur son porteur :
|
|
108
|
+
* - `haut-fin` (defaut) : centre sur le coin superieur de fin (droit en francais), a 6 px du bord ;
|
|
109
|
+
* - `haut-debut` : le coin superieur de debut ;
|
|
110
|
+
* - `en-ligne` : dans le flux, apres le libelle (entree de navigation, onglet).
|
|
111
|
+
*/
|
|
112
|
+
export type PositionDeBadge = 'haut-fin' | 'haut-debut' | 'en-ligne';
|
|
113
|
+
/**
|
|
114
|
+
* Porteur d'un `st-badge` : la cloche, l'entree de navigation, l'onglet qui compte.
|
|
115
|
+
*
|
|
116
|
+
* ```html
|
|
117
|
+
* <span stBadgeAncre etiquetteDuCompte=", 3 non lues">
|
|
118
|
+
* <st-icon nom="cloche" /> Notifications
|
|
119
|
+
* <st-badge [valeur]="3" />
|
|
120
|
+
* </span>
|
|
121
|
+
* ```
|
|
122
|
+
*
|
|
123
|
+
* ⚠️ Elle remplace la classe `st-badge-ancre` que la 0.8.0 exigeait et qu'aucune feuille ne
|
|
124
|
+
* definissait (A1099) : le badge restait dans le flux, loin de son porteur.
|
|
125
|
+
*
|
|
126
|
+
* Le badge est pose en ABSOLU dans son porteur : il apparait, grandit de « 3 » a « 99+ » et
|
|
127
|
+
* disparait sans jamais deplacer le porteur ni la page (aucun decalage de mise en page). Un seul
|
|
128
|
+
* decalage pour tous les badges : leur CENTRE a 6 px du coin, quelle que soit leur largeur.
|
|
129
|
+
*
|
|
130
|
+
* ⚠️ Le badge est MUET (un « 5 » flottant n'apprend rien) : le compte se dit par
|
|
131
|
+
* `etiquetteDuCompte`, texte masque rendu DANS le porteur, donc dans son nom accessible
|
|
132
|
+
* (« Notifications, 3 non lues »). Un porteur nomme par `aria-label` (un `stIconButton`) ignore
|
|
133
|
+
* son contenu : le compte va alors dans son `etiquette`.
|
|
134
|
+
*/
|
|
135
|
+
export declare class StBadgeAncre {
|
|
136
|
+
/** La position du badge ; l'attribut nu vaut `haut-fin`. */
|
|
137
|
+
readonly position: import("@angular/core").InputSignalWithTransform<PositionDeBadge, "" | PositionDeBadge>;
|
|
138
|
+
/** Texte lu du compte (« , 3 non lues »), deja traduit par l'appelant ; `null` : aucun. */
|
|
139
|
+
readonly etiquetteDuCompte: import("@angular/core").InputSignal<string | null>;
|
|
140
|
+
constructor();
|
|
141
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StBadgeAncre, never>;
|
|
142
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<StBadgeAncre, "[stBadgeAncre]", never, {
|
|
143
|
+
"position": {
|
|
144
|
+
"alias": "stBadgeAncre";
|
|
145
|
+
"required": false;
|
|
146
|
+
"isSignal": true;
|
|
147
|
+
};
|
|
148
|
+
"etiquetteDuCompte": {
|
|
149
|
+
"alias": "etiquetteDuCompte";
|
|
150
|
+
"required": false;
|
|
151
|
+
"isSignal": true;
|
|
152
|
+
};
|
|
153
|
+
}, {}, never, never, true, never>;
|
|
154
|
+
}
|
|
155
|
+
export type TonDeBadge = TonSemantique;
|
|
156
|
+
/**
|
|
157
|
+
* Pastille de comptage superposee a un autre element (planche 2 de Claude Design, lot 206) :
|
|
158
|
+
* disque de 20 px, gelule qui s'allonge sans changer de hauteur, « 99+ » au-dela du plafond,
|
|
159
|
+
* point de 10 px a lisere de surface.
|
|
160
|
+
*
|
|
161
|
+
* ⚠️ Le chiffre est TOUJOURS muet. Un « 5 » flottant, lu hors contexte,
|
|
162
|
+
* n'apprend rien. Le compte doit entrer dans le nom accessible de l'element
|
|
163
|
+
* porteur : « Notifications, 5 non lues », par `etiquetteDuCompte` de l'ancre
|
|
164
|
+
* (`[stBadgeAncre]`) ou compose par l'appelant.
|
|
165
|
+
*
|
|
166
|
+
* Pose dans un porteur `[stBadgeAncre]`, il s'y superpose ; seul, il reste dans le flux.
|
|
167
|
+
*/
|
|
168
|
+
export declare class StBadge {
|
|
169
|
+
protected readonly ancre: StBadgeAncre | null;
|
|
170
|
+
readonly valeur: import("@angular/core").InputSignal<string | number | null>;
|
|
171
|
+
readonly max: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
172
|
+
readonly ton: import("@angular/core").InputSignal<TonSemantique>;
|
|
173
|
+
/** Point seul, sans chiffre : signale une nouveaute sans la quantifier. */
|
|
174
|
+
readonly point: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
175
|
+
protected readonly texte: import("@angular/core").Signal<string>;
|
|
176
|
+
/** Rien a montrer : ni chiffre, ni point. La place reste reservee, rien ne saute. */
|
|
177
|
+
protected readonly vide: import("@angular/core").Signal<boolean>;
|
|
178
|
+
protected readonly etiquetteDuCompte: import("@angular/core").Signal<string | null>;
|
|
179
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StBadge, never>;
|
|
180
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StBadge, "st-badge", never, {
|
|
181
|
+
"valeur": {
|
|
182
|
+
"alias": "valeur";
|
|
183
|
+
"required": false;
|
|
184
|
+
"isSignal": true;
|
|
185
|
+
};
|
|
186
|
+
"max": {
|
|
187
|
+
"alias": "max";
|
|
188
|
+
"required": false;
|
|
189
|
+
"isSignal": true;
|
|
190
|
+
};
|
|
191
|
+
"ton": {
|
|
192
|
+
"alias": "ton";
|
|
193
|
+
"required": false;
|
|
194
|
+
"isSignal": true;
|
|
195
|
+
};
|
|
196
|
+
"point": {
|
|
197
|
+
"alias": "point";
|
|
198
|
+
"required": false;
|
|
199
|
+
"isSignal": true;
|
|
200
|
+
};
|
|
201
|
+
}, {}, never, never, true, never>;
|
|
202
|
+
}
|
|
203
|
+
/** Le ton de l'etiquette : papier teinte du ton (`discrete`) ou aplat (`pleine`). */
|
|
204
|
+
export type TonDEtiquette = Exclude<Ton, 'discret' | 'inverse'>;
|
|
205
|
+
/**
|
|
206
|
+
* `md` (defaut) : 22 px, 4 x 10 de marge (planches 10 a 12) ; `sm` : 18 px, 2 x 8 (planches 2,
|
|
207
|
+
* 6 et 8), pour une puce de code ou une legende. Le retrait n'existe qu'en `md`.
|
|
208
|
+
*/
|
|
209
|
+
export type TailleDEtiquette = 'md' | 'sm';
|
|
210
|
+
/**
|
|
211
|
+
* `discrete` : texte du ton sur son papier teinte ; `pleine` : texte clair sur l'aplat du ton ;
|
|
212
|
+
* `attenuee` : le papier attenue de la marque, plus soutenu que le discret (surtitre en pastille
|
|
213
|
+
* d'un en-tete, planche 2 ; ADR 0005 D44). Seul le ton `primaire` a un papier attenue : un autre
|
|
214
|
+
* ton garde son papier discret.
|
|
215
|
+
*/
|
|
216
|
+
export type VarianteDEtiquette = 'discrete' | 'pleine' | 'attenuee';
|
|
217
|
+
/** `mono` : une puce de code ou de reference, en JetBrains Mono (planches 2, 3 et 9). */
|
|
218
|
+
export type PoliceDEtiquette = 'texte' | 'mono';
|
|
219
|
+
/**
|
|
220
|
+
* `phrase` (defaut) : la casse du texte (une reference de code ne se met pas en capitales), en
|
|
221
|
+
* 12/16 ; `capitales` : le micro-libelle de 11 px. 11 px est reserve aux capitales (ADR 0005 D18,
|
|
222
|
+
* D38 ; revue E8).
|
|
223
|
+
*/
|
|
224
|
+
export type CasseDEtiquette = 'phrase' | 'capitales';
|
|
225
|
+
/**
|
|
226
|
+
* Etiquette : une puce non interactive (categorie, reference, legende), eventuellement
|
|
227
|
+
* retirable dans un formulaire. Un filtre actif est un `st-filter-chip`.
|
|
228
|
+
*
|
|
229
|
+
* Rendu de reference : les puces des planches 2 a 16 de Claude Design (lot 206) — libelle
|
|
230
|
+
* 11/600 au micro-interlettrage en capitales, 12/16 en casse de phrase (D18), coins de 4 px (la
|
|
231
|
+
* pilule de quelques planches est un ecart assume), point ou icone de tete, police mono.
|
|
232
|
+
*
|
|
233
|
+
* ⚠️ Le retrait DEPLACE LE FOCUS. Sans cela, le bouton disparait sous le doigt de
|
|
234
|
+
* l'utilisateur clavier, le focus retombe sur le corps du document, et la navigation repart du
|
|
235
|
+
* haut de la page. C'est l'un des defauts d'accessibilite les plus frequents des listes
|
|
236
|
+
* d'etiquettes. Le focus va au bouton de retrait de la prochaine etiquette RETIRABLE, puis de la
|
|
237
|
+
* precedente, jamais a un autre bouton de la page ; a defaut, au groupe, ou au premier ancetre
|
|
238
|
+
* focalisable par script. Seul le MOMENT change avec le groupe (D80) : la liste de
|
|
239
|
+
* `[stGroupeDEtiquettes]` le pose avant l'emission ; `st-tag-group`, dont l'application tient les
|
|
240
|
+
* elements, apres leur retrait reel.
|
|
241
|
+
*
|
|
242
|
+
* ⚠️ Le role `listitem` n'est pose que dans la liste de `[stGroupeDEtiquettes]`, et PARTAGE : hors
|
|
243
|
+
* groupe, le role que l'appelant a ecrit (`<st-tag role="listitem">` dans sa propre liste) reste
|
|
244
|
+
* (revue E8 ; une liaison d'hote l'effacait). Dans le `li` de `st-tag-group`, aucun.
|
|
245
|
+
*/
|
|
246
|
+
export declare class StTag {
|
|
247
|
+
private readonly element;
|
|
248
|
+
private readonly libelles;
|
|
249
|
+
private readonly groupe;
|
|
250
|
+
/** Le role du groupe, sauf role ecrit par l'appelant ; hors groupe, le sien. */
|
|
251
|
+
private readonly role;
|
|
252
|
+
readonly libelle: import("@angular/core").InputSignal<string>;
|
|
253
|
+
readonly supprimable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
254
|
+
readonly ton: import("@angular/core").InputSignal<TonDEtiquette>;
|
|
255
|
+
readonly taille: import("@angular/core").InputSignal<TailleDEtiquette>;
|
|
256
|
+
readonly variante: import("@angular/core").InputSignal<VarianteDEtiquette>;
|
|
257
|
+
readonly police: import("@angular/core").InputSignal<PoliceDEtiquette>;
|
|
258
|
+
readonly casse: import("@angular/core").InputSignal<CasseDEtiquette>;
|
|
259
|
+
/** Un point de 6 px a l'encre du ton, devant le libelle (planches 2, 11 et 12). */
|
|
260
|
+
readonly point: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
261
|
+
/** Une icone de tete, decorative : le libelle porte le sens. */
|
|
262
|
+
readonly iconeAvant: import("@angular/core").InputSignal<Icone | null>;
|
|
263
|
+
readonly supprime: import("@angular/core").OutputEmitterRef<void>;
|
|
264
|
+
constructor();
|
|
265
|
+
/** Le retrait n'existe qu'en `md` : a 18 px, sa cible tomberait sous 24 px. */
|
|
266
|
+
protected readonly retirable: import("@angular/core").Signal<boolean>;
|
|
267
|
+
/**
|
|
268
|
+
* Le nom du bouton de retrait : `LibellesUi.retirerLEtiquette(libelle)`, qui laisse la langue
|
|
269
|
+
* ordonner les mots (« Paris retire » contre « Remove Paris »).
|
|
270
|
+
*/
|
|
271
|
+
protected readonly libelleDeSuppression: import("@angular/core").Signal<string>;
|
|
272
|
+
/**
|
|
273
|
+
* Le libelle est souvent une donnee (une ville, un courriel) : sans commande de direction, et
|
|
274
|
+
* isole (`<bdi>`), il ne reordonne ni l'etiquette ni ce qui l'entoure (audit du 2026-09-26, S-1).
|
|
275
|
+
*/
|
|
276
|
+
protected readonly libelleAffiche: import("@angular/core").Signal<string>;
|
|
277
|
+
protected auRetrait(): void;
|
|
278
|
+
/**
|
|
279
|
+
* `Suppr` et `Retour arriere` sur le bouton retirent aussi l'etiquette (APG) : la touche que
|
|
280
|
+
* l'on presse naturellement pour effacer une valeur.
|
|
281
|
+
*/
|
|
282
|
+
protected auClavier(evenement: Event): void;
|
|
283
|
+
/**
|
|
284
|
+
* Le bouton de retrait de la prochaine etiquette soeur RETIRABLE (une puce sans retrait, ou un
|
|
285
|
+
* autre element, est sautee), a defaut de la precedente. Seules les etiquettes soeurs comptent :
|
|
286
|
+
* un autre bouton voisin n'est pas la suite de la liste.
|
|
287
|
+
*/
|
|
288
|
+
private voisineRetirable;
|
|
289
|
+
/** Hors groupe, a defaut de voisine : le premier ancetre focalisable par script. */
|
|
290
|
+
private ancetreFocalisable;
|
|
291
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StTag, never>;
|
|
292
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StTag, "st-tag", never, {
|
|
293
|
+
"libelle": {
|
|
294
|
+
"alias": "libelle";
|
|
295
|
+
"required": true;
|
|
296
|
+
"isSignal": true;
|
|
297
|
+
};
|
|
298
|
+
"supprimable": {
|
|
299
|
+
"alias": "supprimable";
|
|
300
|
+
"required": false;
|
|
301
|
+
"isSignal": true;
|
|
302
|
+
};
|
|
303
|
+
"ton": {
|
|
304
|
+
"alias": "ton";
|
|
305
|
+
"required": false;
|
|
306
|
+
"isSignal": true;
|
|
307
|
+
};
|
|
308
|
+
"taille": {
|
|
309
|
+
"alias": "taille";
|
|
310
|
+
"required": false;
|
|
311
|
+
"isSignal": true;
|
|
312
|
+
};
|
|
313
|
+
"variante": {
|
|
314
|
+
"alias": "variante";
|
|
315
|
+
"required": false;
|
|
316
|
+
"isSignal": true;
|
|
317
|
+
};
|
|
318
|
+
"police": {
|
|
319
|
+
"alias": "police";
|
|
320
|
+
"required": false;
|
|
321
|
+
"isSignal": true;
|
|
322
|
+
};
|
|
323
|
+
"casse": {
|
|
324
|
+
"alias": "casse";
|
|
325
|
+
"required": false;
|
|
326
|
+
"isSignal": true;
|
|
327
|
+
};
|
|
328
|
+
"point": {
|
|
329
|
+
"alias": "point";
|
|
330
|
+
"required": false;
|
|
331
|
+
"isSignal": true;
|
|
332
|
+
};
|
|
333
|
+
"iconeAvant": {
|
|
334
|
+
"alias": "iconeAvant";
|
|
335
|
+
"required": false;
|
|
336
|
+
"isSignal": true;
|
|
337
|
+
};
|
|
338
|
+
}, {
|
|
339
|
+
"supprime": "supprime";
|
|
340
|
+
}, never, never, true, never>;
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Groupe d'etiquettes retirables : une liste (`role="list"`, chaque `st-tag` en `listitem`) et
|
|
344
|
+
* UNE region polie qui dit ce qui vient d'etre retire (« Paris retire »).
|
|
345
|
+
*
|
|
346
|
+
* ```html
|
|
347
|
+
* <div stGroupeDEtiquettes etiquette="Villes choisies">
|
|
348
|
+
* @for (ville of villes(); track ville) {
|
|
349
|
+
* <st-tag [libelle]="ville" supprimable (supprime)="retirer(ville)" />
|
|
350
|
+
* }
|
|
351
|
+
* </div>
|
|
352
|
+
* ```
|
|
353
|
+
*
|
|
354
|
+
* ⚠️ La region vit dans le GROUPE, et non dans l'etiquette : l'etiquette retiree quitte le
|
|
355
|
+
* document avant que son annonce n'arrive (`rythme.delai.annonce`), et une region detruite ne
|
|
356
|
+
* dit plus rien. Elle est hors de la liste : une liste ne contient que ses elements.
|
|
357
|
+
*
|
|
358
|
+
* ⚠️ La liste est focalisable par script (`tabindex="-1"`, hors de l'ordre de tabulation) : la
|
|
359
|
+
* DERNIERE etiquette retiree y pose le focus, qui sinon retombait sur le corps du document.
|
|
360
|
+
*
|
|
361
|
+
* Les etiquettes projetees recoivent ces crochets par un jeton (D80, partage avec `st-tag-group`) :
|
|
362
|
+
* chacune y est un `listitem`, et son retrait pose le focus et s'annonce AVANT son emission.
|
|
363
|
+
* Des etiquettes decrites en donnees, que l'application retire elle-meme, vont dans
|
|
364
|
+
* `st-tag-group`.
|
|
365
|
+
*/
|
|
366
|
+
export declare class StGroupeDEtiquettes {
|
|
367
|
+
private readonly libelles;
|
|
368
|
+
/** Nom de la liste, lu en y entrant (« Villes choisies ») ; `null` : aucun. */
|
|
369
|
+
readonly etiquette: import("@angular/core").InputSignal<string | null>;
|
|
370
|
+
protected readonly annonce: AnnonceLocale;
|
|
371
|
+
private readonly liste;
|
|
372
|
+
/** Appele par une etiquette du groupe au moment ou elle est retiree. */
|
|
373
|
+
annoncerLeRetrait(libelle: string): void;
|
|
374
|
+
/** Appele par une etiquette retiree qui n'a plus de voisine retirable ou poser le focus. */
|
|
375
|
+
recevoirLeFocus(): void;
|
|
376
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StGroupeDEtiquettes, never>;
|
|
377
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StGroupeDEtiquettes, "[stGroupeDEtiquettes]", never, {
|
|
378
|
+
"etiquette": {
|
|
379
|
+
"alias": "etiquette";
|
|
380
|
+
"required": false;
|
|
381
|
+
"isSignal": true;
|
|
382
|
+
};
|
|
383
|
+
}, {}, never, ["*"], true, never>;
|
|
384
|
+
}
|
|
385
|
+
/** Une etiquette du groupe, decrite en donnees. */
|
|
386
|
+
export interface EtiquetteDeGroupe {
|
|
387
|
+
/** Cle stable et unique dans le groupe : c'est elle que `supprime` emet. */
|
|
388
|
+
readonly valeur: string;
|
|
389
|
+
readonly libelle: string;
|
|
390
|
+
readonly ton?: TonDEtiquette;
|
|
391
|
+
/** Offre le bouton de retrait, nomme par `retirerLEtiquette` (« Retirer Paris »). */
|
|
392
|
+
readonly supprimable?: boolean;
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Le champ qui contient un `st-tag-group` (`st-tag-input`) : le groupe annonce ses retraits dans
|
|
396
|
+
* la region du champ, la seule du champ (D81), et rend le focus au champ quand plus aucune
|
|
397
|
+
* etiquette retirable ne reste.
|
|
398
|
+
*/
|
|
399
|
+
export interface ChampAEtiquettes {
|
|
400
|
+
annoncer(message: string): void;
|
|
401
|
+
recevoirLeFocus(): void;
|
|
402
|
+
}
|
|
403
|
+
export declare const ST_CHAMP_A_ETIQUETTES: InjectionToken<ChampAEtiquettes>;
|
|
404
|
+
/**
|
|
405
|
+
* Groupe d'etiquettes decrites en donnees : une liste nommee, `ul > li > st-tag` (lot 252, ADR
|
|
406
|
+
* 0005 D80).
|
|
407
|
+
*
|
|
408
|
+
* ```html
|
|
409
|
+
* <st-tag-group etiquette="Villes choisies" [elements]="villes()" (supprime)="retirer($event)" />
|
|
410
|
+
* ```
|
|
411
|
+
*
|
|
412
|
+
* La liste est nommee SANS compte : le lecteur d'ecran dit deja le nombre d'elements en y
|
|
413
|
+
* entrant. Des etiquettes projetees vont dans `[stGroupeDEtiquettes]`.
|
|
414
|
+
*
|
|
415
|
+
* ⚠️ **Le focus suit le retrait REEL.** `elements` appartient a l'application : le groupe emet
|
|
416
|
+
* `supprime(valeur)` et attend que la valeur ait quitte la liste (apres un aller-retour serveur
|
|
417
|
+
* compris) pour rendre le focus a l'etiquette retirable suivante, sinon a la precedente, sinon a
|
|
418
|
+
* la liste (focalisable par script) — ou au champ qui contient le groupe. Focaliser a la demande
|
|
419
|
+
* visait une etiquette encore presente, puis le document quand elle disparaissait (A1160). Un
|
|
420
|
+
* focus parti ailleurs pendant l'attente n'est jamais repris. L'annonce (« Paris retire ») part
|
|
421
|
+
* au meme moment : elle dit ce qui a quitte la liste, et non ce qui a ete demande.
|
|
422
|
+
*/
|
|
423
|
+
export declare class StTagGroup {
|
|
424
|
+
private readonly libelles;
|
|
425
|
+
private readonly document;
|
|
426
|
+
private readonly injecteur;
|
|
427
|
+
protected readonly champ: ChampAEtiquettes | null;
|
|
428
|
+
/** Nom de la liste, lu en y entrant (« Villes choisies »). */
|
|
429
|
+
readonly etiquette: import("@angular/core").InputSignal<string>;
|
|
430
|
+
/** Les etiquettes, dans l'ordre. */
|
|
431
|
+
readonly elements: import("@angular/core").InputSignal<readonly EtiquetteDeGroupe[]>;
|
|
432
|
+
/** La `valeur` de l'etiquette dont la personne demande le retrait. */
|
|
433
|
+
readonly supprime: import("@angular/core").OutputEmitterRef<string>;
|
|
434
|
+
protected readonly annonce: AnnonceLocale;
|
|
435
|
+
private readonly liste;
|
|
436
|
+
private enAttente;
|
|
437
|
+
constructor();
|
|
438
|
+
protected retirer(element: EtiquetteDeGroupe, indice: number): void;
|
|
439
|
+
private annoncer;
|
|
440
|
+
/**
|
|
441
|
+
* Seulement si le focus a ete perdu avec l'etiquette, ou s'il est encore sur ce qui a demande le
|
|
442
|
+
* retrait : la touche suivante (Espace, Entree) activerait sinon la voisine et retirerait une
|
|
443
|
+
* seconde etiquette.
|
|
444
|
+
*/
|
|
445
|
+
private rendreLeFocus;
|
|
446
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StTagGroup, never>;
|
|
447
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StTagGroup, "st-tag-group", never, {
|
|
448
|
+
"etiquette": {
|
|
449
|
+
"alias": "etiquette";
|
|
450
|
+
"required": true;
|
|
451
|
+
"isSignal": true;
|
|
452
|
+
};
|
|
453
|
+
"elements": {
|
|
454
|
+
"alias": "elements";
|
|
455
|
+
"required": false;
|
|
456
|
+
"isSignal": true;
|
|
457
|
+
};
|
|
458
|
+
}, {
|
|
459
|
+
"supprime": "supprime";
|
|
460
|
+
}, never, never, true, never>;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
export {};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { AnnonceLocale, CatalogueDuPointDEntree, Icone, LibellesUi, NiveauDeTitre, NomDIcone } from "@starterlib/ui";
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
import { InjectionToken, Provider, Signal, TemplateRef } from "@angular/core";
|
|
4
|
-
import {
|
|
4
|
+
import { Ton, sansCommandesDeDirection } from "@starterlib/util";
|
|
5
|
+
import { DateIso, EtatDeDocument } from "@starterlib/util/valeurs";
|
|
5
6
|
/**
|
|
6
7
|
* `pages` : page precedente et suivante, pour un tableau.
|
|
7
8
|
* `suite` : « Afficher plus », pour une liste qui s'allonge.
|