@starterlib/ui 0.2.0 → 0.4.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.
@@ -0,0 +1,446 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, model, input, signal, computed, ChangeDetectionStrategy, Component, ElementRef, Injector, viewChild, afterNextRender } from '@angular/core';
3
+ import { transformedValue } from '@angular/forms/signals';
4
+ import { ContratDeChamp, ST_LIBELLES, ST_LOCALE, fusionnerErreurs, StFormField, StControleDeChamp, StCalendar, motifLocal, exempleDeDate, StIconButton, messageDErreur, StFieldset } from '@starterlib/ui';
5
+ import { lireMontant, decimalesDe, formaterMontant, montant, lireDate, formaterDateSaisie } from '@starterlib/util';
6
+
7
+ /**
8
+ * Montant, en UNITES MINEURES : `123456n` pour 1 234,56 EUR.
9
+ *
10
+ * ```html
11
+ * <st-amount-field libelle="Montant du virement" devise="EUR" [formField]="virement.montant" />
12
+ * ```
13
+ *
14
+ * ⚠️ **Jamais un nombre a virgule flottante** (SEC-8) : le modele est un `bigint`,
15
+ * lu chiffre par chiffre par `lireMontant`. `0,1 + 0,2` ne fait pas `0,3`, et
16
+ * 1 234,56 EUR ne doit pas devenir 1 234,5599999.
17
+ *
18
+ * ⚠️ **Un texte ambigu est refuse, jamais devine.** « 1.250 » en francais serait
19
+ * mille deux cent cinquante ou un virgule vingt-cinq : le champ dit l'erreur et
20
+ * garde le texte, plutot que d'envoyer un montant mille fois trop grand. Une
21
+ * saisie illisible laisse le MODELE inchange et rend le formulaire invalide, par
22
+ * `transformedValue` : il ne part pas avec l'ancien montant.
23
+ *
24
+ * Le groupement « 1 234,56 » s'applique a la sortie du champ, jamais pendant la
25
+ * frappe. `type="text"` et `inputmode="decimal"` : `type="number"` accepte
26
+ * « 1e5 », change la valeur a la molette, et ignore la virgule selon le navigateur.
27
+ *
28
+ * Les bornes — montant minimal, plafond — sont des regles du schema, en unites
29
+ * mineures ; le serveur les revalide (SEC-5).
30
+ */
31
+ class StAmountField extends ContratDeChamp {
32
+ libelles = inject(ST_LIBELLES);
33
+ locale = inject(ST_LOCALE);
34
+ value = model(null, /* @ts-ignore */
35
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
36
+ /** Code ISO 4217. Fixe l'echelle : 2 decimales en euros, 0 en yens. */
37
+ devise = input.required(/* @ts-ignore */
38
+ ...(ngDevMode ? [{ debugName: "devise" }] : /* istanbul ignore next */ []));
39
+ /** `transaction-amount` pour un paiement. */
40
+ autocomplete = input(null, /* @ts-ignore */
41
+ ...(ngDevMode ? [{ debugName: "autocomplete" }] : /* istanbul ignore next */ []));
42
+ /**
43
+ * Quitte au moins une fois. Relie a un formulaire, `touched` le dit ; employe
44
+ * seul, rien ne le dirait, et une saisie illisible ne s'afficherait jamais.
45
+ */
46
+ quitte = signal(false, /* @ts-ignore */
47
+ ...(ngDevMode ? [{ debugName: "quitte" }] : /* istanbul ignore next */ []));
48
+ saisie = transformedValue(this.value, {
49
+ parse: (texte) => {
50
+ if (texte.trim() === '')
51
+ return { value: null };
52
+ const devise = this.devise();
53
+ const lecture = lireMontant(texte, devise, this.locale());
54
+ if (lecture.lu)
55
+ return { value: lecture.unitesMineures };
56
+ return {
57
+ error: lecture.raison === 'decimales'
58
+ ? { kind: 'decimales', decimales: decimalesDe(devise) }
59
+ : { kind: 'montant', devise },
60
+ };
61
+ },
62
+ format: (valeur) => this.formater(valeur),
63
+ });
64
+ erreursAffichees = computed(() => fusionnerErreurs(this.errors(), this.saisie.parseErrors()), /* @ts-ignore */
65
+ ...(ngDevMode ? [{ debugName: "erreursAffichees" }] : /* istanbul ignore next */ []));
66
+ /** Symbole affiche a cote du champ ; le nom de la devise, lui, est lu. */
67
+ symbole = computed(() => new Intl.NumberFormat(this.locale(), { style: 'currency', currency: this.devise() })
68
+ .formatToParts(0)
69
+ .find((partie) => partie.type === 'currency')?.value ?? this.devise(), /* @ts-ignore */
70
+ ...(ngDevMode ? [{ debugName: "symbole" }] : /* istanbul ignore next */ []));
71
+ deviseLue = computed(() => {
72
+ const nom = new Intl.DisplayNames(this.locale(), { type: 'currency' }).of(this.devise()) ?? this.devise();
73
+ return this.libelles().deviseDuMontant(nom);
74
+ }, /* @ts-ignore */
75
+ ...(ngDevMode ? [{ debugName: "deviseLue" }] : /* istanbul ignore next */ []));
76
+ surSaisie(evenement) {
77
+ this.saisie.set(this.texteSaisi(evenement));
78
+ }
79
+ aLaSortie() {
80
+ // Regroupe « 1234,5 » en « 1 234,50 » ; un texte illisible reste tel quel,
81
+ // pour etre corrige et non retape.
82
+ if (this.saisie.parseErrors().length === 0)
83
+ this.saisie.set(this.formater(this.value()));
84
+ this.quitte.set(true);
85
+ this.touch.emit();
86
+ }
87
+ formater(valeur) {
88
+ if (valeur === null)
89
+ return '';
90
+ return formaterMontant(montant(valeur, this.devise()), {
91
+ locale: this.locale(),
92
+ sansDevise: true,
93
+ });
94
+ }
95
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: StAmountField, deps: null, target: i0.ɵɵFactoryTarget.Component });
96
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: StAmountField, isStandalone: true, selector: "st-amount-field", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, devise: { classPropertyName: "devise", publicName: "devise", isSignal: true, isRequired: true, transformFunction: null }, autocomplete: { classPropertyName: "autocomplete", publicName: "autocomplete", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { classAttribute: "st-amount-field" }, usesInheritance: true, ngImport: i0, template: "<st-form-field\n [libelle]=\"libelle()\"\n [aide]=\"aide()\"\n [complement]=\"deviseLue()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n>\n <div class=\"st-amount-field__ligne\">\n <input\n #champ\n class=\"st-amount-field__champ\"\n stControleDeChamp\n type=\"text\"\n inputmode=\"decimal\"\n spellcheck=\"false\"\n [attr.autocomplete]=\"autocomplete()\"\n [value]=\"saisie()\"\n [attr.name]=\"name() || null\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly()\"\n (input)=\"surSaisie($event)\"\n (blur)=\"aLaSortie()\"\n />\n <span class=\"st-amount-field__devise\" aria-hidden=\"true\">{{ symbole() }}</span>\n </div>\n</st-form-field>\n", styles: [".st-vh{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}:host([hidden]){display:none!important}:host{display:block}.st-amount-field__ligne{display:flex;gap:var(--st-espacement-2);align-items:center}.st-amount-field__champ:focus-visible{outline:2px solid var(--st-couleur-anneau-focus);outline-offset:2px}.st-amount-field__champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-cible-tactile-min);padding:var(--st-espacement-2) var(--st-espacement-3);font:inherit;color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:1px solid var(--st-couleur-bordure-forte);border-radius:var(--st-rayon-sm)}.st-amount-field__champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 1px var(--st-couleur-danger)}.st-amount-field__champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface-enfoncee)}.st-amount-field__champ:read-only:not(:disabled){background:var(--st-couleur-surface-enfoncee)}.st-amount-field__champ{max-inline-size:16rem;font-variant-numeric:tabular-nums;text-align:end}.st-amount-field__devise{color:var(--st-couleur-texte-discret)}\n"], dependencies: [{ kind: "component", type: StFormField, selector: "st-form-field", inputs: ["libelle", "aide", "complement", "erreurs", "afficherErreurs", "obligatoire", "disposition", "libelleMasque"] }, { kind: "directive", type: StControleDeChamp, selector: "[stControleDeChamp]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
97
+ }
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: StAmountField, decorators: [{
99
+ type: Component,
100
+ args: [{ selector: 'st-amount-field', changeDetection: ChangeDetectionStrategy.OnPush, imports: [StFormField, StControleDeChamp], host: { class: 'st-amount-field' }, template: "<st-form-field\n [libelle]=\"libelle()\"\n [aide]=\"aide()\"\n [complement]=\"deviseLue()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n>\n <div class=\"st-amount-field__ligne\">\n <input\n #champ\n class=\"st-amount-field__champ\"\n stControleDeChamp\n type=\"text\"\n inputmode=\"decimal\"\n spellcheck=\"false\"\n [attr.autocomplete]=\"autocomplete()\"\n [value]=\"saisie()\"\n [attr.name]=\"name() || null\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly()\"\n (input)=\"surSaisie($event)\"\n (blur)=\"aLaSortie()\"\n />\n <span class=\"st-amount-field__devise\" aria-hidden=\"true\">{{ symbole() }}</span>\n </div>\n</st-form-field>\n", styles: [".st-vh{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}:host([hidden]){display:none!important}:host{display:block}.st-amount-field__ligne{display:flex;gap:var(--st-espacement-2);align-items:center}.st-amount-field__champ:focus-visible{outline:2px solid var(--st-couleur-anneau-focus);outline-offset:2px}.st-amount-field__champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-cible-tactile-min);padding:var(--st-espacement-2) var(--st-espacement-3);font:inherit;color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:1px solid var(--st-couleur-bordure-forte);border-radius:var(--st-rayon-sm)}.st-amount-field__champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 1px var(--st-couleur-danger)}.st-amount-field__champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface-enfoncee)}.st-amount-field__champ:read-only:not(:disabled){background:var(--st-couleur-surface-enfoncee)}.st-amount-field__champ{max-inline-size:16rem;font-variant-numeric:tabular-nums;text-align:end}.st-amount-field__devise{color:var(--st-couleur-texte-discret)}\n"] }]
101
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], devise: [{ type: i0.Input, args: [{ isSignal: true, alias: "devise", required: true }] }], autocomplete: [{ type: i0.Input, args: [{ isSignal: true, alias: "autocomplete", required: false }] }] } });
102
+
103
+ let compteur$1 = 0;
104
+ /**
105
+ * Date calendaire : un champ texte, et un calendrier pour qui prefere choisir.
106
+ *
107
+ * ```html
108
+ * <st-date-field libelle="Date de naissance" autocomplete="bday" [dateMax]="aujourdHui"
109
+ * [formField]="profil.naissance" />
110
+ * <!-- schema : validate(chemin.naissance, ({ value }) => erreurDate(value(), { max: aujourdHui })) -->
111
+ * ```
112
+ *
113
+ * Le modele est une date ISO — `2026-09-17` — ou `null`, jamais un objet `Date` :
114
+ * une date calendaire n'a ni heure ni fuseau.
115
+ *
116
+ * ⚠️ **Un champ texte d'abord** (decision D7 de l'audit de la vague 3). Le champ
117
+ * natif `type="date"` affiche son format dans la langue du NAVIGATEUR : il ne
118
+ * bascule pas quand l'application change de langue. Ici, le format attendu —
119
+ * `jj/mm/aaaa` ou `mm/dd/yyyy` — suit la langue courante, et il est dit en aide.
120
+ *
121
+ * ⚠️ **Le calendrier est une aide, pas la seule voie** : une date de naissance
122
+ * se tape plus vite qu'elle ne se cherche mois par mois. Il s'ouvre sous le champ,
123
+ * dans le flux de la page : pas de surcouche a positionner, rien de rogne dans
124
+ * un dialogue, et le CDK n'entre pas dans les formulaires.
125
+ *
126
+ * Une date illisible ou inexistante — « 31/02/2026 » — garde le texte, laisse le
127
+ * modele inchange et rend le formulaire invalide.
128
+ */
129
+ class StDateField extends ContratDeChamp {
130
+ libelles = inject(ST_LIBELLES);
131
+ locale = inject(ST_LOCALE);
132
+ element = inject(ElementRef);
133
+ injecteur = inject(Injector);
134
+ value = model(null, /* @ts-ignore */
135
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
136
+ /** Bornes du calendrier. Les memes que celles du schema : voir `erreurDate`. */
137
+ dateMin = input(null, /* @ts-ignore */
138
+ ...(ngDevMode ? [{ debugName: "dateMin" }] : /* istanbul ignore next */ []));
139
+ dateMax = input(null, /* @ts-ignore */
140
+ ...(ngDevMode ? [{ debugName: "dateMax" }] : /* istanbul ignore next */ []));
141
+ /** `bday` pour une date de naissance. */
142
+ autocomplete = input(null, /* @ts-ignore */
143
+ ...(ngDevMode ? [{ debugName: "autocomplete" }] : /* istanbul ignore next */ []));
144
+ ouvert = signal(false, /* @ts-ignore */
145
+ ...(ngDevMode ? [{ debugName: "ouvert" }] : /* istanbul ignore next */ []));
146
+ identifiantCalendrier = `st-date-${(compteur$1 += 1).toString()}-calendrier`;
147
+ calendrier = viewChild(StCalendar, /* @ts-ignore */
148
+ ...(ngDevMode ? [{ debugName: "calendrier" }] : /* istanbul ignore next */ []));
149
+ // `read` : sur un bouton qui porte le composant `stIconButton`, la reference
150
+ // rendrait le composant, et non l'element a focaliser.
151
+ bouton = viewChild('bouton', { ...(ngDevMode ? { debugName: "bouton" } : /* istanbul ignore next */ {}), read: ElementRef });
152
+ /**
153
+ * Quitte au moins une fois. Relie a un formulaire, `touched` le dit ; employe
154
+ * seul, rien ne le dirait, et une saisie illisible ne s'afficherait jamais.
155
+ */
156
+ quitte = signal(false, /* @ts-ignore */
157
+ ...(ngDevMode ? [{ debugName: "quitte" }] : /* istanbul ignore next */ []));
158
+ saisie = transformedValue(this.value, {
159
+ parse: (texte) => {
160
+ if (texte.trim() === '')
161
+ return { value: null };
162
+ const date = lireDate(texte, this.locale());
163
+ return date === null ? { error: { kind: 'date' } } : { value: date };
164
+ },
165
+ format: (valeur) => this.formater(valeur),
166
+ });
167
+ aideLue = computed(() => {
168
+ const libelles = this.libelles();
169
+ const locale = this.locale();
170
+ const format = libelles.formatDeDate(motifLocal(libelles, locale), exempleDeDate(locale));
171
+ const aide = this.aide();
172
+ return aide === null ? format : `${aide} ${format}`;
173
+ }, /* @ts-ignore */
174
+ ...(ngDevMode ? [{ debugName: "aideLue" }] : /* istanbul ignore next */ []));
175
+ erreursAffichees = computed(() => fusionnerErreurs(this.errors(), this.saisie.parseErrors()), /* @ts-ignore */
176
+ ...(ngDevMode ? [{ debugName: "erreursAffichees" }] : /* istanbul ignore next */ []));
177
+ surSaisie(evenement) {
178
+ this.saisie.set(this.texteSaisi(evenement));
179
+ }
180
+ aLaSortieDuChamp() {
181
+ // « 7/9/2026 » devient « 07/09/2026 » ; un texte illisible reste a corriger.
182
+ if (this.saisie.parseErrors().length === 0)
183
+ this.saisie.set(this.formater(this.value()));
184
+ }
185
+ basculer() {
186
+ if (this.ouvert()) {
187
+ this.fermer(false);
188
+ return;
189
+ }
190
+ this.ouvert.set(true);
191
+ afterNextRender(() => {
192
+ this.calendrier()?.focus();
193
+ }, { injector: this.injecteur });
194
+ }
195
+ choisir(date) {
196
+ this.value.set(date);
197
+ this.fermer(false);
198
+ // Retour au champ : la date choisie s'y relit, et se corrige au clavier.
199
+ afterNextRender(() => {
200
+ this.focus();
201
+ }, { injector: this.injecteur });
202
+ }
203
+ /** Echap rend le focus au bouton qui a ouvert le calendrier. */
204
+ fermer(rendreLeFocus) {
205
+ this.ouvert.set(false);
206
+ if (!rendreLeFocus)
207
+ return;
208
+ afterNextRender(() => {
209
+ this.bouton()?.nativeElement.focus();
210
+ }, { injector: this.injecteur });
211
+ }
212
+ aLaSortieDuComposant(evenement) {
213
+ const suivant = evenement.relatedTarget;
214
+ if (suivant !== null && this.element.nativeElement.contains(suivant))
215
+ return;
216
+ this.ouvert.set(false);
217
+ this.quitte.set(true);
218
+ this.touch.emit();
219
+ }
220
+ formater(valeur) {
221
+ return valeur === null ? '' : formaterDateSaisie(valeur, this.locale());
222
+ }
223
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: StDateField, deps: null, target: i0.ɵɵFactoryTarget.Component });
224
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: StDateField, isStandalone: true, selector: "st-date-field", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, dateMin: { classPropertyName: "dateMin", publicName: "dateMin", isSignal: true, isRequired: false, transformFunction: null }, dateMax: { classPropertyName: "dateMax", publicName: "dateMax", isSignal: true, isRequired: false, transformFunction: null }, autocomplete: { classPropertyName: "autocomplete", publicName: "autocomplete", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { listeners: { "focusout": "aLaSortieDuComposant($event)" }, classAttribute: "st-date-field" }, viewQueries: [{ propertyName: "calendrier", first: true, predicate: StCalendar, descendants: true, isSignal: true }, { propertyName: "bouton", first: true, predicate: ["bouton"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<st-form-field\n [libelle]=\"libelle()\"\n [aide]=\"aideLue()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n>\n <div class=\"st-date-field__ligne\">\n <input\n #champ\n class=\"st-date-field__champ\"\n stControleDeChamp\n type=\"text\"\n spellcheck=\"false\"\n [attr.autocomplete]=\"autocomplete()\"\n [value]=\"saisie()\"\n [attr.name]=\"name() || null\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly()\"\n (input)=\"surSaisie($event)\"\n (blur)=\"aLaSortieDuChamp()\"\n />\n <!-- eslint-disable-next-line @angular-eslint/template/elements-content --\n Le contenu vient du gabarit de stIconButton, et l'etiquette est requise. -->\n <button\n #bouton\n stIconButton\n type=\"button\"\n icone=\"calendrier\"\n [etiquette]=\"libelles().choisirDansLeCalendrier(libelle())\"\n [attr.aria-expanded]=\"ouvert()\"\n [attr.aria-controls]=\"ouvert() ? identifiantCalendrier : null\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"basculer()\"\n ></button>\n </div>\n @if (ouvert()) {\n <st-calendar\n class=\"st-date-field__calendrier\"\n [id]=\"identifiantCalendrier\"\n [selection]=\"value()\"\n [dateMin]=\"dateMin()\"\n [dateMax]=\"dateMax()\"\n (choix)=\"choisir($event)\"\n (fermeture)=\"fermer(true)\"\n />\n }\n</st-form-field>\n", styles: [".st-vh{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}:host([hidden]){display:none!important}:host{display:block}.st-date-field__ligne{display:flex;gap:var(--st-espacement-1);align-items:center}.st-date-field__champ:focus-visible{outline:2px solid var(--st-couleur-anneau-focus);outline-offset:2px}.st-date-field__champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-cible-tactile-min);padding:var(--st-espacement-2) var(--st-espacement-3);font:inherit;color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:1px solid var(--st-couleur-bordure-forte);border-radius:var(--st-rayon-sm)}.st-date-field__champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 1px var(--st-couleur-danger)}.st-date-field__champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface-enfoncee)}.st-date-field__champ:read-only:not(:disabled){background:var(--st-couleur-surface-enfoncee)}.st-date-field__champ{max-inline-size:12rem;font-variant-numeric:tabular-nums}.st-date-field__calendrier{margin-block-start:var(--st-espacement-2)}\n"], dependencies: [{ kind: "component", type: StFormField, selector: "st-form-field", inputs: ["libelle", "aide", "complement", "erreurs", "afficherErreurs", "obligatoire", "disposition", "libelleMasque"] }, { kind: "directive", type: StControleDeChamp, selector: "[stControleDeChamp]" }, { kind: "component", type: StIconButton, selector: "button[stIconButton]", inputs: ["icone", "etiquette", "variante", "taille", "enfonce"] }, { kind: "component", type: StCalendar, selector: "st-calendar", inputs: ["selection", "dateMin", "dateMax", "plage"], outputs: ["choix", "fermeture"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
225
+ }
226
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: StDateField, decorators: [{
227
+ type: Component,
228
+ args: [{ selector: 'st-date-field', changeDetection: ChangeDetectionStrategy.OnPush, imports: [StFormField, StControleDeChamp, StIconButton, StCalendar], host: {
229
+ class: 'st-date-field',
230
+ '(focusout)': 'aLaSortieDuComposant($event)',
231
+ }, template: "<st-form-field\n [libelle]=\"libelle()\"\n [aide]=\"aideLue()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n>\n <div class=\"st-date-field__ligne\">\n <input\n #champ\n class=\"st-date-field__champ\"\n stControleDeChamp\n type=\"text\"\n spellcheck=\"false\"\n [attr.autocomplete]=\"autocomplete()\"\n [value]=\"saisie()\"\n [attr.name]=\"name() || null\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly()\"\n (input)=\"surSaisie($event)\"\n (blur)=\"aLaSortieDuChamp()\"\n />\n <!-- eslint-disable-next-line @angular-eslint/template/elements-content --\n Le contenu vient du gabarit de stIconButton, et l'etiquette est requise. -->\n <button\n #bouton\n stIconButton\n type=\"button\"\n icone=\"calendrier\"\n [etiquette]=\"libelles().choisirDansLeCalendrier(libelle())\"\n [attr.aria-expanded]=\"ouvert()\"\n [attr.aria-controls]=\"ouvert() ? identifiantCalendrier : null\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"basculer()\"\n ></button>\n </div>\n @if (ouvert()) {\n <st-calendar\n class=\"st-date-field__calendrier\"\n [id]=\"identifiantCalendrier\"\n [selection]=\"value()\"\n [dateMin]=\"dateMin()\"\n [dateMax]=\"dateMax()\"\n (choix)=\"choisir($event)\"\n (fermeture)=\"fermer(true)\"\n />\n }\n</st-form-field>\n", styles: [".st-vh{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}:host([hidden]){display:none!important}:host{display:block}.st-date-field__ligne{display:flex;gap:var(--st-espacement-1);align-items:center}.st-date-field__champ:focus-visible{outline:2px solid var(--st-couleur-anneau-focus);outline-offset:2px}.st-date-field__champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-cible-tactile-min);padding:var(--st-espacement-2) var(--st-espacement-3);font:inherit;color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:1px solid var(--st-couleur-bordure-forte);border-radius:var(--st-rayon-sm)}.st-date-field__champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 1px var(--st-couleur-danger)}.st-date-field__champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface-enfoncee)}.st-date-field__champ:read-only:not(:disabled){background:var(--st-couleur-surface-enfoncee)}.st-date-field__champ{max-inline-size:12rem;font-variant-numeric:tabular-nums}.st-date-field__calendrier{margin-block-start:var(--st-espacement-2)}\n"] }]
232
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], dateMin: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateMin", required: false }] }], dateMax: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateMax", required: false }] }], autocomplete: [{ type: i0.Input, args: [{ isSignal: true, alias: "autocomplete", required: false }] }], calendrier: [{ type: i0.ViewChild, args: [i0.forwardRef(() => StCalendar), { isSignal: true }] }], bouton: [{ type: i0.ViewChild, args: ['bouton', { ...{
233
+ read: ElementRef,
234
+ }, isSignal: true }] }] } });
235
+
236
+ let compteur = 0;
237
+ /**
238
+ * Plage de dates : un debut, une fin, dans un groupe nomme par sa question.
239
+ *
240
+ * ```html
241
+ * <st-date-range libelle="Periode du sejour" [formField]="reservation.sejour" />
242
+ * <!-- schema : validate(chemin.sejour, ({ value }) => erreurPlageDeDates(value())) -->
243
+ * ```
244
+ *
245
+ * Deux champs texte etiquetes — « Date de debut », « Date de fin » — dans un
246
+ * `fieldset` dont la legende est le `libelle` : chacun se lit avec la question.
247
+ * Chaque champ a son calendrier ; celui de la fin s'ouvre au mois du debut et
248
+ * refuse les jours qui le precedent.
249
+ *
250
+ * ⚠️ **Une erreur dit QUELLE date corriger** : « Date de fin : saisissez une date
251
+ * qui existe… ». Sans le nom de la partie, deux messages identiques ne disent pas
252
+ * lequel des champs est faux. L'erreur de lecture marque aussi son champ
253
+ * `aria-invalid`, et lui seul.
254
+ *
255
+ * L'obligation d'une borne est une regle du schema : `required` ne sait pas ce
256
+ * qu'est une plage « vide ».
257
+ */
258
+ class StDateRange extends ContratDeChamp {
259
+ libelles = inject(ST_LIBELLES);
260
+ locale = inject(ST_LOCALE);
261
+ element = inject(ElementRef);
262
+ injecteur = inject(Injector);
263
+ value = model({ debut: null, fin: null }, /* @ts-ignore */
264
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
265
+ dateMin = input(null, /* @ts-ignore */
266
+ ...(ngDevMode ? [{ debugName: "dateMin" }] : /* istanbul ignore next */ []));
267
+ dateMax = input(null, /* @ts-ignore */
268
+ ...(ngDevMode ? [{ debugName: "dateMax" }] : /* istanbul ignore next */ []));
269
+ /** Etiquettes des deux champs. Par defaut : « Date de debut », « Date de fin ». */
270
+ libelleDebut = input(null, /* @ts-ignore */
271
+ ...(ngDevMode ? [{ debugName: "libelleDebut" }] : /* istanbul ignore next */ []));
272
+ libelleFin = input(null, /* @ts-ignore */
273
+ ...(ngDevMode ? [{ debugName: "libelleFin" }] : /* istanbul ignore next */ []));
274
+ parties = ['debut', 'fin'];
275
+ ouvert = signal(null, /* @ts-ignore */
276
+ ...(ngDevMode ? [{ debugName: "ouvert" }] : /* istanbul ignore next */ []));
277
+ identifiants = (() => {
278
+ const base = `st-plage-${(compteur += 1).toString()}`;
279
+ return {
280
+ debut: `${base}-debut`,
281
+ fin: `${base}-fin`,
282
+ calendrier: `${base}-calendrier`,
283
+ };
284
+ })();
285
+ calendrier = viewChild(StCalendar, /* @ts-ignore */
286
+ ...(ngDevMode ? [{ debugName: "calendrier" }] : /* istanbul ignore next */ []));
287
+ /**
288
+ * Quitte au moins une fois. Relie a un formulaire, `touched` le dit ; employe
289
+ * seul, rien ne le dirait, et une saisie illisible ne s'afficherait jamais.
290
+ */
291
+ quitte = signal(false, /* @ts-ignore */
292
+ ...(ngDevMode ? [{ debugName: "quitte" }] : /* istanbul ignore next */ []));
293
+ saisie = transformedValue(this.value, {
294
+ parse: (brut) => {
295
+ const debut = this.lirePartie(brut.debut);
296
+ const fin = this.lirePartie(brut.fin);
297
+ const erreurs = [];
298
+ if (debut === undefined)
299
+ erreurs.push({ kind: 'date', partie: 'debut' });
300
+ if (fin === undefined)
301
+ erreurs.push({ kind: 'date', partie: 'fin' });
302
+ if (debut === undefined || fin === undefined)
303
+ return { error: erreurs };
304
+ return { value: { debut, fin } };
305
+ },
306
+ format: (plage) => ({ debut: this.formater(plage.debut), fin: this.formater(plage.fin) }),
307
+ });
308
+ etiquettes = computed(() => ({
309
+ debut: this.libelleDebut() ?? this.libelles().dateDeDebut,
310
+ fin: this.libelleFin() ?? this.libelles().dateDeFin,
311
+ }), /* @ts-ignore */
312
+ ...(ngDevMode ? [{ debugName: "etiquettes" }] : /* istanbul ignore next */ []));
313
+ aideLue = computed(() => {
314
+ const libelles = this.libelles();
315
+ const locale = this.locale();
316
+ const format = libelles.formatDeDate(motifLocal(libelles, locale), exempleDeDate(locale));
317
+ const aide = this.aide();
318
+ return aide === null ? format : `${aide} ${format}`;
319
+ }, /* @ts-ignore */
320
+ ...(ngDevMode ? [{ debugName: "aideLue" }] : /* istanbul ignore next */ []));
321
+ /** Chaque erreur prefixee de sa partie, dans la langue courante. */
322
+ erreursAffichees = computed(() => {
323
+ const libelles = this.libelles();
324
+ const locale = this.locale();
325
+ const etiquettes = this.etiquettes();
326
+ return fusionnerErreurs(this.errors(), this.saisie.parseErrors()).map((erreur) => {
327
+ const partie = this.partieDe(erreur);
328
+ if (partie === null)
329
+ return erreur;
330
+ return {
331
+ kind: erreur.kind,
332
+ message: `${etiquettes[partie]}\u00a0: ${messageDErreur(erreur, libelles, locale)}`,
333
+ };
334
+ });
335
+ }, /* @ts-ignore */
336
+ ...(ngDevMode ? [{ debugName: "erreursAffichees" }] : /* istanbul ignore next */ []));
337
+ invalide = computed(() => {
338
+ const erreurs = this.touched() || this.quitte()
339
+ ? fusionnerErreurs(this.errors(), this.saisie.parseErrors())
340
+ : [];
341
+ return {
342
+ debut: erreurs.some((erreur) => this.partieDe(erreur) === 'debut'),
343
+ fin: erreurs.some((erreur) => this.partieDe(erreur) === 'fin'),
344
+ };
345
+ }, /* @ts-ignore */
346
+ ...(ngDevMode ? [{ debugName: "invalide" }] : /* istanbul ignore next */ []));
347
+ surSaisie(partie, evenement) {
348
+ this.saisie.set({ ...this.saisie(), [partie]: this.texteSaisi(evenement) });
349
+ }
350
+ aLaSortieDuChamp() {
351
+ if (this.saisie.parseErrors().length === 0) {
352
+ const plage = this.value();
353
+ this.saisie.set({ debut: this.formater(plage.debut), fin: this.formater(plage.fin) });
354
+ }
355
+ }
356
+ basculer(partie) {
357
+ if (this.ouvert() === partie) {
358
+ this.ouvert.set(null);
359
+ return;
360
+ }
361
+ this.ouvert.set(partie);
362
+ afterNextRender(() => {
363
+ this.calendrier()?.focus();
364
+ }, { injector: this.injecteur });
365
+ }
366
+ bornes(partie) {
367
+ const plage = this.value();
368
+ return partie === 'debut'
369
+ ? { min: this.dateMin(), max: plage.fin ?? this.dateMax() }
370
+ : { min: plage.debut ?? this.dateMin(), max: this.dateMax() };
371
+ }
372
+ choisir(partie, date) {
373
+ this.value.set({ ...this.value(), [partie]: date });
374
+ this.fermer(partie);
375
+ }
376
+ fermer(partie) {
377
+ this.ouvert.set(null);
378
+ afterNextRender(() => {
379
+ this.element.nativeElement
380
+ .querySelector(`#${this.identifiants[partie]}`)
381
+ ?.focus();
382
+ }, { injector: this.injecteur });
383
+ }
384
+ aLaSortieDuComposant(evenement) {
385
+ const suivant = evenement.relatedTarget;
386
+ if (suivant !== null && this.element.nativeElement.contains(suivant))
387
+ return;
388
+ this.ouvert.set(null);
389
+ this.quitte.set(true);
390
+ this.touch.emit();
391
+ }
392
+ /** `null` : vide. `undefined` : illisible. */
393
+ lirePartie(texte) {
394
+ if (texte.trim() === '')
395
+ return null;
396
+ return lireDate(texte, this.locale()) ?? undefined;
397
+ }
398
+ formater(valeur) {
399
+ return valeur === null ? '' : formaterDateSaisie(valeur, this.locale());
400
+ }
401
+ /** La partie visee : celle d'une erreur de lecture, la fin pour une plage inversee. */
402
+ partieDe(erreur) {
403
+ const partie = erreur.partie;
404
+ if (partie === 'debut' || partie === 'fin')
405
+ return partie;
406
+ return erreur.kind === 'plageDeDates' ? 'fin' : null;
407
+ }
408
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: StDateRange, deps: null, target: i0.ɵɵFactoryTarget.Component });
409
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: StDateRange, isStandalone: true, selector: "st-date-range", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, dateMin: { classPropertyName: "dateMin", publicName: "dateMin", isSignal: true, isRequired: false, transformFunction: null }, dateMax: { classPropertyName: "dateMax", publicName: "dateMax", isSignal: true, isRequired: false, transformFunction: null }, libelleDebut: { classPropertyName: "libelleDebut", publicName: "libelleDebut", isSignal: true, isRequired: false, transformFunction: null }, libelleFin: { classPropertyName: "libelleFin", publicName: "libelleFin", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { listeners: { "focusout": "aLaSortieDuComposant($event)" }, classAttribute: "st-date-range" }, viewQueries: [{ propertyName: "calendrier", first: true, predicate: StCalendar, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<st-fieldset\n [legende]=\"libelle()\"\n [aide]=\"aideLue()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n>\n <div class=\"st-date-range__parties\">\n @for (partie of parties; track partie) {\n <div class=\"st-date-range__partie\">\n <label class=\"st-date-range__libelle\" [for]=\"identifiants[partie]\">\n {{ etiquettes()[partie] }}\n </label>\n <div class=\"st-date-range__ligne\">\n <input\n #champ\n class=\"st-date-range__champ\"\n type=\"text\"\n spellcheck=\"false\"\n [attr.data-libelle]=\"etiquettes()[partie]\"\n [id]=\"identifiants[partie]\"\n [value]=\"saisie()[partie]\"\n [attr.name]=\"name() ? name() + '-' + partie : null\"\n [attr.aria-invalid]=\"invalide()[partie] ? 'true' : null\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly()\"\n (input)=\"surSaisie(partie, $event)\"\n (blur)=\"aLaSortieDuChamp()\"\n />\n <!-- eslint-disable-next-line @angular-eslint/template/elements-content --\n Le contenu vient du gabarit de stIconButton, et l'etiquette est requise. -->\n <button\n stIconButton\n type=\"button\"\n icone=\"calendrier\"\n [etiquette]=\"libelles().choisirDansLeCalendrier(etiquettes()[partie])\"\n [attr.aria-expanded]=\"ouvert() === partie\"\n [attr.aria-controls]=\"ouvert() === partie ? identifiants.calendrier : null\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"basculer(partie)\"\n ></button>\n </div>\n </div>\n }\n </div>\n @if (ouvert(); as partie) {\n <st-calendar\n class=\"st-date-range__calendrier\"\n [id]=\"identifiants.calendrier\"\n [selection]=\"value()[partie]\"\n [plage]=\"value()\"\n [dateMin]=\"bornes(partie).min\"\n [dateMax]=\"bornes(partie).max\"\n (choix)=\"choisir(partie, $event)\"\n (fermeture)=\"fermer(partie)\"\n />\n }\n</st-fieldset>\n", styles: [".st-vh{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}:host([hidden]){display:none!important}:host{display:block}.st-date-range__parties{display:flex;flex-wrap:wrap;gap:var(--st-espacement-3) var(--st-espacement-5)}.st-date-range__libelle{display:block;margin-block-end:var(--st-espacement-1);font-weight:var(--st-graisse-semi)}.st-date-range__ligne{display:flex;gap:var(--st-espacement-1);align-items:center}.st-date-range__champ:focus-visible{outline:2px solid var(--st-couleur-anneau-focus);outline-offset:2px}.st-date-range__champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-cible-tactile-min);padding:var(--st-espacement-2) var(--st-espacement-3);font:inherit;color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:1px solid var(--st-couleur-bordure-forte);border-radius:var(--st-rayon-sm)}.st-date-range__champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 1px var(--st-couleur-danger)}.st-date-range__champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface-enfoncee)}.st-date-range__champ:read-only:not(:disabled){background:var(--st-couleur-surface-enfoncee)}.st-date-range__champ{max-inline-size:12rem;font-variant-numeric:tabular-nums}.st-date-range__calendrier{margin-block-start:var(--st-espacement-3)}\n"], dependencies: [{ kind: "component", type: StFieldset, selector: "st-fieldset", inputs: ["legende", "aide", "erreurs", "afficherErreurs", "obligatoire"] }, { kind: "component", type: StIconButton, selector: "button[stIconButton]", inputs: ["icone", "etiquette", "variante", "taille", "enfonce"] }, { kind: "component", type: StCalendar, selector: "st-calendar", inputs: ["selection", "dateMin", "dateMax", "plage"], outputs: ["choix", "fermeture"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
410
+ }
411
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: StDateRange, decorators: [{
412
+ type: Component,
413
+ args: [{ selector: 'st-date-range', changeDetection: ChangeDetectionStrategy.OnPush, imports: [StFieldset, StIconButton, StCalendar], host: {
414
+ class: 'st-date-range',
415
+ '(focusout)': 'aLaSortieDuComposant($event)',
416
+ }, template: "<st-fieldset\n [legende]=\"libelle()\"\n [aide]=\"aideLue()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n>\n <div class=\"st-date-range__parties\">\n @for (partie of parties; track partie) {\n <div class=\"st-date-range__partie\">\n <label class=\"st-date-range__libelle\" [for]=\"identifiants[partie]\">\n {{ etiquettes()[partie] }}\n </label>\n <div class=\"st-date-range__ligne\">\n <input\n #champ\n class=\"st-date-range__champ\"\n type=\"text\"\n spellcheck=\"false\"\n [attr.data-libelle]=\"etiquettes()[partie]\"\n [id]=\"identifiants[partie]\"\n [value]=\"saisie()[partie]\"\n [attr.name]=\"name() ? name() + '-' + partie : null\"\n [attr.aria-invalid]=\"invalide()[partie] ? 'true' : null\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly()\"\n (input)=\"surSaisie(partie, $event)\"\n (blur)=\"aLaSortieDuChamp()\"\n />\n <!-- eslint-disable-next-line @angular-eslint/template/elements-content --\n Le contenu vient du gabarit de stIconButton, et l'etiquette est requise. -->\n <button\n stIconButton\n type=\"button\"\n icone=\"calendrier\"\n [etiquette]=\"libelles().choisirDansLeCalendrier(etiquettes()[partie])\"\n [attr.aria-expanded]=\"ouvert() === partie\"\n [attr.aria-controls]=\"ouvert() === partie ? identifiants.calendrier : null\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"basculer(partie)\"\n ></button>\n </div>\n </div>\n }\n </div>\n @if (ouvert(); as partie) {\n <st-calendar\n class=\"st-date-range__calendrier\"\n [id]=\"identifiants.calendrier\"\n [selection]=\"value()[partie]\"\n [plage]=\"value()\"\n [dateMin]=\"bornes(partie).min\"\n [dateMax]=\"bornes(partie).max\"\n (choix)=\"choisir(partie, $event)\"\n (fermeture)=\"fermer(partie)\"\n />\n }\n</st-fieldset>\n", styles: [".st-vh{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}:host([hidden]){display:none!important}:host{display:block}.st-date-range__parties{display:flex;flex-wrap:wrap;gap:var(--st-espacement-3) var(--st-espacement-5)}.st-date-range__libelle{display:block;margin-block-end:var(--st-espacement-1);font-weight:var(--st-graisse-semi)}.st-date-range__ligne{display:flex;gap:var(--st-espacement-1);align-items:center}.st-date-range__champ:focus-visible{outline:2px solid var(--st-couleur-anneau-focus);outline-offset:2px}.st-date-range__champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-cible-tactile-min);padding:var(--st-espacement-2) var(--st-espacement-3);font:inherit;color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:1px solid var(--st-couleur-bordure-forte);border-radius:var(--st-rayon-sm)}.st-date-range__champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 1px var(--st-couleur-danger)}.st-date-range__champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface-enfoncee)}.st-date-range__champ:read-only:not(:disabled){background:var(--st-couleur-surface-enfoncee)}.st-date-range__champ{max-inline-size:12rem;font-variant-numeric:tabular-nums}.st-date-range__calendrier{margin-block-start:var(--st-espacement-3)}\n"] }]
417
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], dateMin: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateMin", required: false }] }], dateMax: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateMax", required: false }] }], libelleDebut: [{ type: i0.Input, args: [{ isSignal: true, alias: "libelleDebut", required: false }] }], libelleFin: [{ type: i0.Input, args: [{ isSignal: true, alias: "libelleFin", required: false }] }], calendrier: [{ type: i0.ViewChild, args: [i0.forwardRef(() => StCalendar), { isSignal: true }] }] } });
418
+
419
+ /**
420
+ * @starterlib/ui/formulaires — les champs qui LISENT leur saisie : montant, date,
421
+ * plage de dates.
422
+ *
423
+ * ⚠️ Un point d'entree separe pour une raison de dependance (ADR 0003). « 12,5,3 »
424
+ * n'est aucun montant, « 31/02/2026 » aucune date : le formulaire doit le savoir,
425
+ * sans quoi il envoie l'ancienne valeur en croyant la nouvelle. Signal Forms le
426
+ * permet par `transformedValue`, qui est du CODE d'`@angular/forms` — la ou le
427
+ * tronc n'importe que des types. Laisse dans le tronc, `@angular/forms` deviendrait
428
+ * obligatoire pour toute application qui affiche un bouton.
429
+ *
430
+ * Rien ici n'importe le CDK ni Aria : le calendrier vient du tronc, et une
431
+ * application qui saisit un montant ne charge pas de quoi ouvrir une liste.
432
+ *
433
+ * ⚠️ En federation, ce point d'entree se partage SEPAREMENT : c'est un
434
+ * specificateur de module distinct.
435
+ *
436
+ * ```ts
437
+ * import { StAmountField, StDateField } from '@starterlib/ui/formulaires';
438
+ * ```
439
+ */
440
+
441
+ /**
442
+ * Generated bundle index. Do not edit.
443
+ */
444
+
445
+ export { StAmountField, StDateField, StDateRange };
446
+ //# sourceMappingURL=starterlib-ui-formulaires.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starterlib-ui-formulaires.mjs","sources":["../../../../packages/ui/formulaires/src/lib/montant/st-amount-field.ts","../../../../packages/ui/formulaires/src/lib/montant/st-amount-field.html","../../../../packages/ui/formulaires/src/lib/dates/st-date-field.ts","../../../../packages/ui/formulaires/src/lib/dates/st-date-field.html","../../../../packages/ui/formulaires/src/lib/dates/st-date-range.ts","../../../../packages/ui/formulaires/src/lib/dates/st-date-range.html","../../../../packages/ui/formulaires/src/public-api.ts","../../../../packages/ui/formulaires/src/starterlib-ui-formulaires.ts"],"names":["compteur"],"mappings":"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"}