@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.
Files changed (55) hide show
  1. package/LICENCES-TIERCES.md +236 -0
  2. package/README.md +163 -56
  3. package/assets/icones/catalogue.json +3296 -0
  4. package/assets/icones/sprite.svg +235 -35
  5. package/fesm2022/starterlib-ui-arbre.mjs +475 -0
  6. package/fesm2022/starterlib-ui-arbre.mjs.map +1 -0
  7. package/fesm2022/starterlib-ui-donnees.mjs +3561 -0
  8. package/fesm2022/starterlib-ui-donnees.mjs.map +1 -0
  9. package/fesm2022/starterlib-ui-formulaires.mjs +3186 -442
  10. package/fesm2022/starterlib-ui-formulaires.mjs.map +1 -1
  11. package/fesm2022/starterlib-ui-libelles-en.mjs +383 -0
  12. package/fesm2022/starterlib-ui-libelles-en.mjs.map +1 -0
  13. package/fesm2022/starterlib-ui-listes.mjs +5367 -0
  14. package/fesm2022/starterlib-ui-listes.mjs.map +1 -0
  15. package/fesm2022/starterlib-ui-messagerie.mjs +737 -0
  16. package/fesm2022/starterlib-ui-messagerie.mjs.map +1 -0
  17. package/fesm2022/starterlib-ui-navigation.mjs +509 -0
  18. package/fesm2022/starterlib-ui-navigation.mjs.map +1 -0
  19. package/fesm2022/starterlib-ui-onglets.mjs +371 -0
  20. package/fesm2022/starterlib-ui-onglets.mjs.map +1 -0
  21. package/fesm2022/starterlib-ui-parcours.mjs +2449 -0
  22. package/fesm2022/starterlib-ui-parcours.mjs.map +1 -0
  23. package/fesm2022/starterlib-ui-qr.mjs +907 -0
  24. package/fesm2022/starterlib-ui-qr.mjs.map +1 -0
  25. package/fesm2022/starterlib-ui-saisie.mjs +8609 -0
  26. package/fesm2022/starterlib-ui-saisie.mjs.map +1 -0
  27. package/fesm2022/starterlib-ui-selection.mjs +1341 -0
  28. package/fesm2022/starterlib-ui-selection.mjs.map +1 -0
  29. package/fesm2022/starterlib-ui-sens.mjs +59 -0
  30. package/fesm2022/starterlib-ui-sens.mjs.map +1 -0
  31. package/fesm2022/starterlib-ui-surfaces.mjs +5140 -1387
  32. package/fesm2022/starterlib-ui-surfaces.mjs.map +1 -1
  33. package/fesm2022/starterlib-ui.mjs +10729 -5689
  34. package/fesm2022/starterlib-ui.mjs.map +1 -1
  35. package/package.json +58 -17
  36. package/styles/amorce.css +69 -0
  37. package/styles/couches.css +178 -0
  38. package/types/starterlib-ui-arbre.d.ts +225 -0
  39. package/types/starterlib-ui-donnees.d.ts +1489 -0
  40. package/types/starterlib-ui-formulaires.d.ts +1174 -138
  41. package/types/starterlib-ui-libelles-en.d.ts +5 -0
  42. package/types/starterlib-ui-listes.d.ts +2487 -0
  43. package/types/starterlib-ui-messagerie.d.ts +317 -0
  44. package/types/starterlib-ui-navigation.d.ts +242 -0
  45. package/types/starterlib-ui-onglets.d.ts +212 -0
  46. package/types/starterlib-ui-parcours.d.ts +916 -0
  47. package/types/starterlib-ui-qr.d.ts +105 -0
  48. package/types/starterlib-ui-saisie.d.ts +3806 -0
  49. package/types/starterlib-ui-selection.d.ts +488 -0
  50. package/types/starterlib-ui-sens.d.ts +44 -0
  51. package/types/starterlib-ui-surfaces.d.ts +1899 -510
  52. package/types/starterlib-ui.d.ts +4731 -2678
  53. package/fesm2022/starterlib-ui-interactions.mjs +0 -598
  54. package/fesm2022/starterlib-ui-interactions.mjs.map +0 -1
  55. package/types/starterlib-ui-interactions.d.ts +0 -316
@@ -1,446 +1,3190 @@
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-commande-hauteur, 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-commande-rayon, var(--st-rayon-md))}.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 });
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, DOCUMENT, DestroyRef, Directive, ElementRef, InjectionToken, Injector, afterNextRender, booleanAttribute, computed, effect, inject, input, isDevMode, linkedSignal, model, numberAttribute, output, signal, untracked, viewChild, viewChildren } from "@angular/core";
3
+ import { submit, transformedValue } from "@angular/forms/signals";
4
+ import { ContratDeChamp, ContratDeChampABornes, ControleDeSaisie, ST_ETAT_D_ENVOI, StCalendar, StControleDeChamp, StFieldset, StFormField, StRadioGroup, StSelect, erreurTelephone, exempleDeDate, fusionnerErreurs, messageDErreur, motifDHeureLocal, motifLocal } from "@starterlib/ui/saisie";
5
+ import { AnnonceLocale, ST_LIBELLES, ST_LOCALE, StIcon, StIconButton, StIdentifiants, StText, catalogueDuPointDEntree } from "@starterlib/ui";
6
+ import { decimalesDe, decrireRecurrence, estHeureIso, exempleDHeure, formaterDateSaisie, formaterHeureSaisie, formaterMontant, formaterNombre, heureSurDouze, lireDate, lireHeure, lireMontant, lireNombre, montant, nomDuFuseau, normaliserTelephone } from "@starterlib/util";
7
+ import { NgTemplateOutlet } from "@angular/common";
8
+ var StForm = class StForm {
9
+ destruction = inject(DestroyRef);
10
+ stForm = input.required(...ngDevMode ? [{ debugName: "stForm" }] : /* istanbul ignore next */ []);
11
+ envoyerAvec = input(null, ...ngDevMode ? [{ debugName: "envoyerAvec" }] : /* istanbul ignore next */ []);
12
+ envoi = output();
13
+ tentatives = signal(0, ...ngDevMode ? [{ debugName: "tentatives" }] : /* istanbul ignore next */ []);
14
+ envoiEnCours = signal(false, ...ngDevMode ? [{ debugName: "envoiEnCours" }] : /* istanbul ignore next */ []);
15
+ tentative = this.tentatives.asReadonly();
16
+ enCours = computed(() => this.envoiEnCours() || this.stForm()().submitting(), ...ngDevMode ? [{ debugName: "enCours" }] : /* istanbul ignore next */ []);
17
+ recapitulatif = computed(() => this.tentatives() > 0 && !this.enCours() ? this.stForm()().errorSummary() : [], ...ngDevMode ? [{ debugName: "recapitulatif" }] : /* istanbul ignore next */ []);
18
+ async surEnvoi(evenement) {
19
+ evenement.preventDefault();
20
+ if (this.enCours()) return;
21
+ this.tentatives.update((nombre) => nombre + 1);
22
+ this.envoiEnCours.set(true);
23
+ const formulaire = this.stForm();
24
+ const envoyer = this.envoyerAvec();
25
+ let envoyee = formulaire().value();
26
+ try {
27
+ if (!await submit(formulaire, { action: (champ) => {
28
+ envoyee = champ().value();
29
+ return envoyer === null ? Promise.resolve(void 0) : envoyer(champ);
30
+ } }) || this.destruction.destroyed) return;
31
+ formulaire().reset();
32
+ this.tentatives.set(0);
33
+ } finally {
34
+ this.envoiEnCours.set(false);
35
+ }
36
+ this.envoi.emit(envoyee);
37
+ }
38
+ static ɵfac = i0.ɵɵngDeclareFactory({
39
+ minVersion: "12.0.0",
40
+ version: "22.2.0",
41
+ ngImport: i0,
42
+ type: StForm,
43
+ deps: [],
44
+ target: i0.ɵɵFactoryTarget.Directive
45
+ });
46
+ static ɵdir = i0.ɵɵngDeclareDirective({
47
+ minVersion: "17.1.0",
48
+ version: "22.2.0",
49
+ type: StForm,
50
+ isStandalone: true,
51
+ selector: "form[stForm]",
52
+ inputs: {
53
+ stForm: {
54
+ classPropertyName: "stForm",
55
+ publicName: "stForm",
56
+ isSignal: true,
57
+ isRequired: true,
58
+ transformFunction: null
59
+ },
60
+ envoyerAvec: {
61
+ classPropertyName: "envoyerAvec",
62
+ publicName: "envoyerAvec",
63
+ isSignal: true,
64
+ isRequired: false,
65
+ transformFunction: null
66
+ }
67
+ },
68
+ outputs: { envoi: "envoi" },
69
+ host: {
70
+ attributes: { "novalidate": "" },
71
+ listeners: { "submit": "surEnvoi($event)" },
72
+ properties: { "attr.aria-busy": "enCours() ? \"true\" : null" }
73
+ },
74
+ providers: [{
75
+ provide: ST_ETAT_D_ENVOI,
76
+ useExisting: StForm
77
+ }],
78
+ exportAs: ["stForm"],
79
+ ngImport: i0
80
+ });
81
+ };
82
+ i0.ɵɵngDeclareClassMetadata({
83
+ minVersion: "12.0.0",
84
+ version: "22.2.0",
85
+ ngImport: i0,
86
+ type: StForm,
87
+ decorators: [{
88
+ type: Directive,
89
+ args: [{
90
+ selector: "form[stForm]",
91
+ exportAs: "stForm",
92
+ providers: [{
93
+ provide: ST_ETAT_D_ENVOI,
94
+ useExisting: StForm
95
+ }],
96
+ host: {
97
+ novalidate: "",
98
+ "[attr.aria-busy]": "enCours() ? \"true\" : null",
99
+ "(submit)": "surEnvoi($event)"
100
+ }
101
+ }]
102
+ }],
103
+ propDecorators: {
104
+ stForm: [{
105
+ type: i0.Input,
106
+ args: [{
107
+ isSignal: true,
108
+ alias: "stForm",
109
+ required: true
110
+ }]
111
+ }],
112
+ envoyerAvec: [{
113
+ type: i0.Input,
114
+ args: [{
115
+ isSignal: true,
116
+ alias: "envoyerAvec",
117
+ required: false
118
+ }]
119
+ }],
120
+ envoi: [{
121
+ type: i0.Output,
122
+ args: ["envoi"]
123
+ }]
124
+ }
125
+ });
126
+ const CODE_DE_DEVISE = /^[A-Za-z]{3}$/;
127
+ var StAmountField = class StAmountField extends ContratDeChamp {
128
+ libelles = inject(ST_LIBELLES);
129
+ locale = inject(ST_LOCALE);
130
+ annonce = new AnnonceLocale(inject(DestroyRef));
131
+ idDevise = `${inject(StIdentifiants).prochain("st-amount-field")}-devise`;
132
+ value = model(null, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
133
+ devise = input.required(...ngDevMode ? [{ debugName: "devise" }] : /* istanbul ignore next */ []);
134
+ autocomplete = input(null, ...ngDevMode ? [{ debugName: "autocomplete" }] : /* istanbul ignore next */ []);
135
+ complement = input(null, ...ngDevMode ? [{ debugName: "complement" }] : /* istanbul ignore next */ []);
136
+ pleineLargeur = input(false, {
137
+ ...ngDevMode ? { debugName: "pleineLargeur" } : /* istanbul ignore next */ {},
138
+ transform: booleanAttribute
139
+ });
140
+ decritPar = input([], ...ngDevMode ? [{ debugName: "decritPar" }] : /* istanbul ignore next */ []);
141
+ quitte = signal(false, ...ngDevMode ? [{ debugName: "quitte" }] : /* istanbul ignore next */ []);
142
+ avertie = false;
143
+ deviseSure = computed(() => {
144
+ const code = this.devise().trim();
145
+ if (CODE_DE_DEVISE.test(code)) return code.toUpperCase();
146
+ if (isDevMode() && !this.avertie && code !== "") {
147
+ this.avertie = true;
148
+ console.warn(`[st-amount-field] "${code}" : code ISO 4217 de trois lettres attendu.`);
149
+ }
150
+ return null;
151
+ }, ...ngDevMode ? [{ debugName: "deviseSure" }] : /* istanbul ignore next */ []);
152
+ saisie = transformedValue(this.value, {
153
+ parse: (texte) => {
154
+ const devise = this.deviseSure();
155
+ if (texte.trim() === "" || devise === null) return { value: null };
156
+ const lecture = lireMontant(texte, devise, this.locale());
157
+ if (lecture.lu) return { value: lecture.unitesMineures };
158
+ return {
159
+ value: null,
160
+ error: lecture.raison === "decimales" ? {
161
+ kind: "decimales",
162
+ decimales: decimalesDe(devise)
163
+ } : {
164
+ kind: "montant",
165
+ devise
166
+ }
167
+ };
168
+ },
169
+ format: (valeur) => this.formater(valeur)
170
+ });
171
+ lectureInvalide = computed(() => this.saisie.parseErrors().length > 0, ...ngDevMode ? [{ debugName: "lectureInvalide" }] : /* istanbul ignore next */ []);
172
+ erreursAffichees = computed(() => fusionnerErreurs(this.errors().map((erreur) => this.borneEnDevise(erreur)), this.saisie.parseErrors()), ...ngDevMode ? [{ debugName: "erreursAffichees" }] : /* istanbul ignore next */ []);
173
+ parties = computed(() => {
174
+ const devise = this.deviseSure();
175
+ if (devise === null) return null;
176
+ try {
177
+ const parties = new Intl.NumberFormat(this.locale(), {
178
+ style: "currency",
179
+ currency: devise
180
+ }).formatToParts(1);
181
+ const symbole = parties.find((partie) => partie.type === "currency")?.value ?? devise;
182
+ const rangDuSymbole = parties.findIndex((partie) => partie.type === "currency");
183
+ const rangDuNombre = parties.findIndex((partie) => partie.type === "integer");
184
+ return {
185
+ symbole,
186
+ avant: rangDuSymbole >= 0 && rangDuSymbole < rangDuNombre
187
+ };
188
+ } catch {
189
+ return {
190
+ symbole: devise,
191
+ avant: false
192
+ };
193
+ }
194
+ }, ...ngDevMode ? [{ debugName: "parties" }] : /* istanbul ignore next */ []);
195
+ symbole = computed(() => this.parties()?.symbole ?? "", ...ngDevMode ? [{ debugName: "symbole" }] : /* istanbul ignore next */ []);
196
+ symboleAvant = computed(() => this.parties()?.avant ?? false, ...ngDevMode ? [{ debugName: "symboleAvant" }] : /* istanbul ignore next */ []);
197
+ deviseLue = computed(() => {
198
+ const devise = this.deviseSure();
199
+ if (devise === null) return null;
200
+ let nom = devise;
201
+ try {
202
+ nom = new Intl.DisplayNames(this.locale(), { type: "currency" }).of(devise) ?? devise;
203
+ } catch {}
204
+ return this.libelles().deviseDuMontant(nom);
205
+ }, ...ngDevMode ? [{ debugName: "deviseLue" }] : /* istanbul ignore next */ []);
206
+ descriptionsDuControle = computed(() => [...this.decritPar(), ...this.deviseLue() === null ? [] : [this.idDevise]], ...ngDevMode ? [{ debugName: "descriptionsDuControle" }] : /* istanbul ignore next */ []);
207
+ constructor() {
208
+ super();
209
+ let precedente;
210
+ effect(() => {
211
+ const devise = this.deviseSure();
212
+ untracked(() => {
213
+ const premiere = precedente === void 0;
214
+ const changee = devise !== precedente;
215
+ precedente = devise;
216
+ if (premiere || !changee || devise === null) return;
217
+ const texte = this.saisie();
218
+ if (texte.trim() !== "") this.saisie.set(texte);
219
+ else if (this.value() !== null) this.saisie.set(this.formater(this.value()));
220
+ });
221
+ });
222
+ }
223
+ surPressionDuCadre(evenement) {
224
+ if (evenement.button !== 0 || evenement.target instanceof HTMLInputElement) return;
225
+ evenement.preventDefault();
226
+ this.focus();
227
+ }
228
+ surSaisie(evenement) {
229
+ this.saisie.set(this.texteSaisi(evenement));
230
+ }
231
+ aLaSortie() {
232
+ if (this.saisie.parseErrors().length === 0) {
233
+ const tape = this.saisie();
234
+ const groupe = this.formater(this.value());
235
+ this.saisie.set(groupe);
236
+ const devise = this.deviseSure();
237
+ const valeur = this.value();
238
+ if (groupe !== tape.trim() && valeur !== null && devise !== null) {
239
+ const lu = formaterMontant(montant(valeur, devise), { locale: this.locale() });
240
+ this.annonce.annoncer(this.libelles().libelleEtMessage(this.libelle(), lu));
241
+ }
242
+ }
243
+ this.quitte.set(true);
244
+ this.touch.emit();
245
+ }
246
+ borneEnDevise(erreur) {
247
+ const devise = this.deviseSure();
248
+ if (devise === null || (erreur.message?.trim() ?? "") !== "") return erreur;
249
+ const borne = erreur[erreur.kind === "min" ? "min" : "max"];
250
+ if (erreur.kind !== "min" && erreur.kind !== "max" || typeof borne !== "bigint") return erreur;
251
+ const texte = formaterMontant(montant(borne, devise), { locale: this.locale() });
252
+ const libelles = this.libelles();
253
+ return {
254
+ ...erreur,
255
+ message: erreur.kind === "min" ? libelles.valeurMinimale(texte) : libelles.valeurMaximale(texte)
256
+ };
257
+ }
258
+ formater(valeur) {
259
+ const devise = untracked(this.deviseSure);
260
+ if (valeur === null || devise === null) return "";
261
+ return formaterMontant(montant(valeur, devise), {
262
+ locale: this.locale(),
263
+ sansDevise: true
264
+ }).replace(/\u202f/g, "\xA0");
265
+ }
266
+ static ɵfac = i0.ɵɵngDeclareFactory({
267
+ minVersion: "12.0.0",
268
+ version: "22.2.0",
269
+ ngImport: i0,
270
+ type: StAmountField,
271
+ deps: [],
272
+ target: i0.ɵɵFactoryTarget.Component
273
+ });
274
+ static ɵcmp = i0.ɵɵngDeclareComponent({
275
+ minVersion: "17.0.0",
276
+ version: "22.2.0",
277
+ type: StAmountField,
278
+ isStandalone: true,
279
+ selector: "st-amount-field",
280
+ inputs: {
281
+ value: {
282
+ classPropertyName: "value",
283
+ publicName: "value",
284
+ isSignal: true,
285
+ isRequired: false,
286
+ transformFunction: null
287
+ },
288
+ devise: {
289
+ classPropertyName: "devise",
290
+ publicName: "devise",
291
+ isSignal: true,
292
+ isRequired: true,
293
+ transformFunction: null
294
+ },
295
+ autocomplete: {
296
+ classPropertyName: "autocomplete",
297
+ publicName: "autocomplete",
298
+ isSignal: true,
299
+ isRequired: false,
300
+ transformFunction: null
301
+ },
302
+ complement: {
303
+ classPropertyName: "complement",
304
+ publicName: "complement",
305
+ isSignal: true,
306
+ isRequired: false,
307
+ transformFunction: null
308
+ },
309
+ pleineLargeur: {
310
+ classPropertyName: "pleineLargeur",
311
+ publicName: "pleineLargeur",
312
+ isSignal: true,
313
+ isRequired: false,
314
+ transformFunction: null
315
+ },
316
+ decritPar: {
317
+ classPropertyName: "decritPar",
318
+ publicName: "decritPar",
319
+ isSignal: true,
320
+ isRequired: false,
321
+ transformFunction: null
322
+ }
323
+ },
324
+ outputs: { value: "valueChange" },
325
+ host: {
326
+ properties: { "attr.data-pleine-largeur": "pleineLargeur() ? '' : null" },
327
+ classAttribute: "st-amount-field"
328
+ },
329
+ usesInheritance: true,
330
+ ngImport: i0,
331
+ template: "<st-form-field\n [libelle]=\"libelle()\"\n [aide]=\"aideEtRaisons()\"\n [complement]=\"complement()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n [descriptionsDuControle]=\"descriptionsDuControle()\"\n>\n <ng-content select=\"[stMeta]\" ngProjectAs=\"[stMeta]\" />\n <ng-content select=\"[stAide]\" ngProjectAs=\"[stAide]\" />\n <ng-content select=\"[stIndication]\" ngProjectAs=\"[stIndication]\" />\n <!-- Le cadre est UN champ : un clic sur le bloc de devise donne le focus a la zone de frappe,\n comme un clic sur l'etiquette. Au clavier, le champ se rejoint par tabulation. -->\n <div class=\"st-amount-field__cadre\" (mousedown)=\"surPressionDuCadre($event)\">\n @if (symboleAvant() && symbole() !== '') {\n <span class=\"st-amount-field__devise\" aria-hidden=\"true\">{{ symbole() }}</span>\n }\n <input\n #champ\n class=\"st-amount-field__champ\"\n stControleDeChamp\n type=\"text\"\n inputmode=\"decimal\"\n spellcheck=\"false\"\n dir=\"ltr\"\n [attr.autocomplete]=\"autocomplete()\"\n [value]=\"saisie()\"\n [attr.name]=\"name() || null\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly() || deviseSure() === null\"\n [attr.aria-busy]=\"deviseSure() === null ? 'true' : null\"\n (input)=\"surSaisie($event)\"\n (blur)=\"aLaSortie()\"\n />\n @if (!symboleAvant() && symbole() !== '') {\n <span class=\"st-amount-field__devise\" aria-hidden=\"true\">{{ symbole() }}</span>\n }\n </div>\n</st-form-field>\n@if (deviseLue(); as nom) {\n <span class=\"st-vh\" [id]=\"idDevise\">{{ nom }}</span>\n}\n<span class=\"st-vh\" aria-live=\"polite\">{{ annonce.texte() }}</span>\n",
332
+ 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;max-inline-size:var(--st-largeur-champ-lg)}:host([data-pleine-largeur]){max-inline-size:none}.st-amount-field__cadre:has(>.st-amount-field__champ:focus-visible){outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-amount-field__cadre{box-sizing:border-box;block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut));color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-bordure-forte);border-radius:var(--st-commande-rayon, var(--st-rayon-md))}.st-amount-field__cadre>.st-amount-field__champ{margin-block:calc(-1 * var(--st-epaisseur-fine));background:transparent;border:0;border-radius:0;box-shadow:none;outline:none}@media(hover:hover){.st-amount-field__cadre:hover:not(:has(>.st-amount-field__champ:is(:disabled,:focus,[aria-invalid=true]))){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-amount-field__cadre:has(>.st-amount-field__champ:focus-visible){border-color:var(--st-couleur-primaire)}.st-amount-field__cadre:has(>.st-amount-field__champ[aria-invalid=true]){border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-amount-field__cadre:has(>.st-amount-field__champ[aria-invalid=true]):has(>.st-amount-field__champ:focus-visible){outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-amount-field__cadre:has(>.st-amount-field__champ:disabled){color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface);border-color:var(--st-couleur-bordure)}.st-amount-field__cadre:has(>.st-amount-field__champ:is(input,textarea):read-only:not(:disabled)),.st-amount-field__cadre:has(>.st-amount-field__champ[aria-readonly=true]:not(:disabled)){background:var(--st-couleur-surface-enfoncee)}.st-amount-field__cadre{display:flex;align-items:stretch;overflow:hidden}.st-amount-field__champ:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-amount-field__champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-amount-field__champ:is(input,select){block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-amount-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( (var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var(--st-interligne-sm)) / 2 - var(--st-epaisseur-fine) ) ) );padding-block:var(--_remplissage-bloc);padding-inline:var(--st-espacement-3-5);font-family:inherit;font-size:var(--st-taille-sm);font-weight:var(--st-graisse-normale);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-bordure-forte);border-radius:var(--st-commande-rayon, var(--st-rayon-md))}@media(pointer:coarse){.st-amount-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( ( var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var( --st-interligne-md ) ) / 2 - var(--st-epaisseur-fine) ) ) );font-size:var(--st-taille-md);line-height:var(--st-interligne-md)}}.st-amount-field__champ::placeholder{color:var(--st-couleur-texte-attenue);opacity:1}@media(hover:hover){.st-amount-field__champ:hover:not(:disabled,:focus,[aria-invalid=true]){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-amount-field__champ:focus-visible{border-color:var(--st-couleur-primaire)}.st-amount-field__champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-amount-field__champ[aria-invalid=true]:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-amount-field__champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface);border-color:var(--st-couleur-bordure)}.st-amount-field__champ:disabled::placeholder{color:var(--st-couleur-texte-desactive)}.st-amount-field__champ:is(input,textarea):read-only:not(:disabled),.st-amount-field__champ[aria-readonly=true]:not(:disabled){font-weight:var(--st-graisse-moyenne);background:var(--st-couleur-surface-enfoncee)}.st-amount-field__champ{flex:1 1 auto;min-inline-size:0;font-family:var(--st-police-mono);font-size:var(--st-taille-lg);font-weight:var(--st-graisse-semi);font-variant-numeric:var(--st-chiffres-references);line-height:var(--st-interligne-lg);text-align:end;unicode-bidi:isolate}@media(pointer:coarse){.st-amount-field__champ{font-size:var(--st-taille-lg);line-height:var(--st-interligne-lg)}}.st-amount-field__devise{display:flex;flex:none;align-items:center;justify-content:center;padding-inline:var(--st-espacement-4);font-family:var(--st-police-mono);font-size:var(--st-taille-sm);font-weight:var(--st-graisse-grasse);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte);cursor:text;background:var(--st-couleur-surface-enfoncee);border-inline-start:var(--st-epaisseur-fine) solid var(--st-couleur-surface-active)}.st-amount-field__devise:first-child{border-inline-start:0;border-inline-end:var(--st-epaisseur-fine) solid var(--st-couleur-surface-active)}.st-amount-field__cadre:has(>.st-amount-field__champ[aria-invalid=true])>.st-amount-field__champ{color:var(--st-couleur-danger)}.st-amount-field__cadre:has(>.st-amount-field__champ[aria-invalid=true])>.st-amount-field__devise{color:var(--st-couleur-danger);background:var(--st-couleur-danger-discret);border-color:color-mix(in srgb,var(--st-couleur-danger) 30%,transparent)}.st-amount-field__cadre:has(>.st-amount-field__champ:disabled)>.st-amount-field__devise{color:var(--st-couleur-texte-desactive);cursor:inherit}@media print{.st-amount-field__cadre{box-shadow:none}}.st-amount-field__cadre>.st-amount-field__champ:is(input):read-only{background:transparent}\n"],
333
+ dependencies: [{
334
+ kind: "component",
335
+ type: StFormField,
336
+ selector: "st-form-field",
337
+ inputs: [
338
+ "libelle",
339
+ "complement",
340
+ "disposition",
341
+ "presentation",
342
+ "libelleMasque",
343
+ "descriptionsDuControle"
344
+ ]
345
+ }, {
346
+ kind: "directive",
347
+ type: StControleDeChamp,
348
+ selector: "[stControleDeChamp]"
349
+ }],
350
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
351
+ });
352
+ };
353
+ i0.ɵɵngDeclareClassMetadata({
354
+ minVersion: "12.0.0",
355
+ version: "22.2.0",
356
+ ngImport: i0,
357
+ type: StAmountField,
358
+ decorators: [{
359
+ type: Component,
360
+ args: [{
361
+ selector: "st-amount-field",
362
+ changeDetection: ChangeDetectionStrategy.OnPush,
363
+ imports: [StFormField, StControleDeChamp],
364
+ host: {
365
+ class: "st-amount-field",
366
+ "[attr.data-pleine-largeur]": "pleineLargeur() ? '' : null"
367
+ },
368
+ template: "<st-form-field\n [libelle]=\"libelle()\"\n [aide]=\"aideEtRaisons()\"\n [complement]=\"complement()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n [descriptionsDuControle]=\"descriptionsDuControle()\"\n>\n <ng-content select=\"[stMeta]\" ngProjectAs=\"[stMeta]\" />\n <ng-content select=\"[stAide]\" ngProjectAs=\"[stAide]\" />\n <ng-content select=\"[stIndication]\" ngProjectAs=\"[stIndication]\" />\n <!-- Le cadre est UN champ : un clic sur le bloc de devise donne le focus a la zone de frappe,\n comme un clic sur l'etiquette. Au clavier, le champ se rejoint par tabulation. -->\n <div class=\"st-amount-field__cadre\" (mousedown)=\"surPressionDuCadre($event)\">\n @if (symboleAvant() && symbole() !== '') {\n <span class=\"st-amount-field__devise\" aria-hidden=\"true\">{{ symbole() }}</span>\n }\n <input\n #champ\n class=\"st-amount-field__champ\"\n stControleDeChamp\n type=\"text\"\n inputmode=\"decimal\"\n spellcheck=\"false\"\n dir=\"ltr\"\n [attr.autocomplete]=\"autocomplete()\"\n [value]=\"saisie()\"\n [attr.name]=\"name() || null\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly() || deviseSure() === null\"\n [attr.aria-busy]=\"deviseSure() === null ? 'true' : null\"\n (input)=\"surSaisie($event)\"\n (blur)=\"aLaSortie()\"\n />\n @if (!symboleAvant() && symbole() !== '') {\n <span class=\"st-amount-field__devise\" aria-hidden=\"true\">{{ symbole() }}</span>\n }\n </div>\n</st-form-field>\n@if (deviseLue(); as nom) {\n <span class=\"st-vh\" [id]=\"idDevise\">{{ nom }}</span>\n}\n<span class=\"st-vh\" aria-live=\"polite\">{{ annonce.texte() }}</span>\n",
369
+ 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;max-inline-size:var(--st-largeur-champ-lg)}:host([data-pleine-largeur]){max-inline-size:none}.st-amount-field__cadre:has(>.st-amount-field__champ:focus-visible){outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-amount-field__cadre{box-sizing:border-box;block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut));color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-bordure-forte);border-radius:var(--st-commande-rayon, var(--st-rayon-md))}.st-amount-field__cadre>.st-amount-field__champ{margin-block:calc(-1 * var(--st-epaisseur-fine));background:transparent;border:0;border-radius:0;box-shadow:none;outline:none}@media(hover:hover){.st-amount-field__cadre:hover:not(:has(>.st-amount-field__champ:is(:disabled,:focus,[aria-invalid=true]))){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-amount-field__cadre:has(>.st-amount-field__champ:focus-visible){border-color:var(--st-couleur-primaire)}.st-amount-field__cadre:has(>.st-amount-field__champ[aria-invalid=true]){border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-amount-field__cadre:has(>.st-amount-field__champ[aria-invalid=true]):has(>.st-amount-field__champ:focus-visible){outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-amount-field__cadre:has(>.st-amount-field__champ:disabled){color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface);border-color:var(--st-couleur-bordure)}.st-amount-field__cadre:has(>.st-amount-field__champ:is(input,textarea):read-only:not(:disabled)),.st-amount-field__cadre:has(>.st-amount-field__champ[aria-readonly=true]:not(:disabled)){background:var(--st-couleur-surface-enfoncee)}.st-amount-field__cadre{display:flex;align-items:stretch;overflow:hidden}.st-amount-field__champ:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-amount-field__champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-amount-field__champ:is(input,select){block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-amount-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( (var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var(--st-interligne-sm)) / 2 - var(--st-epaisseur-fine) ) ) );padding-block:var(--_remplissage-bloc);padding-inline:var(--st-espacement-3-5);font-family:inherit;font-size:var(--st-taille-sm);font-weight:var(--st-graisse-normale);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-bordure-forte);border-radius:var(--st-commande-rayon, var(--st-rayon-md))}@media(pointer:coarse){.st-amount-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( ( var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var( --st-interligne-md ) ) / 2 - var(--st-epaisseur-fine) ) ) );font-size:var(--st-taille-md);line-height:var(--st-interligne-md)}}.st-amount-field__champ::placeholder{color:var(--st-couleur-texte-attenue);opacity:1}@media(hover:hover){.st-amount-field__champ:hover:not(:disabled,:focus,[aria-invalid=true]){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-amount-field__champ:focus-visible{border-color:var(--st-couleur-primaire)}.st-amount-field__champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-amount-field__champ[aria-invalid=true]:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-amount-field__champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface);border-color:var(--st-couleur-bordure)}.st-amount-field__champ:disabled::placeholder{color:var(--st-couleur-texte-desactive)}.st-amount-field__champ:is(input,textarea):read-only:not(:disabled),.st-amount-field__champ[aria-readonly=true]:not(:disabled){font-weight:var(--st-graisse-moyenne);background:var(--st-couleur-surface-enfoncee)}.st-amount-field__champ{flex:1 1 auto;min-inline-size:0;font-family:var(--st-police-mono);font-size:var(--st-taille-lg);font-weight:var(--st-graisse-semi);font-variant-numeric:var(--st-chiffres-references);line-height:var(--st-interligne-lg);text-align:end;unicode-bidi:isolate}@media(pointer:coarse){.st-amount-field__champ{font-size:var(--st-taille-lg);line-height:var(--st-interligne-lg)}}.st-amount-field__devise{display:flex;flex:none;align-items:center;justify-content:center;padding-inline:var(--st-espacement-4);font-family:var(--st-police-mono);font-size:var(--st-taille-sm);font-weight:var(--st-graisse-grasse);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte);cursor:text;background:var(--st-couleur-surface-enfoncee);border-inline-start:var(--st-epaisseur-fine) solid var(--st-couleur-surface-active)}.st-amount-field__devise:first-child{border-inline-start:0;border-inline-end:var(--st-epaisseur-fine) solid var(--st-couleur-surface-active)}.st-amount-field__cadre:has(>.st-amount-field__champ[aria-invalid=true])>.st-amount-field__champ{color:var(--st-couleur-danger)}.st-amount-field__cadre:has(>.st-amount-field__champ[aria-invalid=true])>.st-amount-field__devise{color:var(--st-couleur-danger);background:var(--st-couleur-danger-discret);border-color:color-mix(in srgb,var(--st-couleur-danger) 30%,transparent)}.st-amount-field__cadre:has(>.st-amount-field__champ:disabled)>.st-amount-field__devise{color:var(--st-couleur-texte-desactive);cursor:inherit}@media print{.st-amount-field__cadre{box-shadow:none}}.st-amount-field__cadre>.st-amount-field__champ:is(input):read-only{background:transparent}\n"]
370
+ }]
371
+ }],
372
+ ctorParameters: () => [],
373
+ propDecorators: {
374
+ value: [{
375
+ type: i0.Input,
376
+ args: [{
377
+ isSignal: true,
378
+ alias: "value",
379
+ required: false
380
+ }]
381
+ }, {
382
+ type: i0.Output,
383
+ args: ["valueChange"]
384
+ }],
385
+ devise: [{
386
+ type: i0.Input,
387
+ args: [{
388
+ isSignal: true,
389
+ alias: "devise",
390
+ required: true
391
+ }]
392
+ }],
393
+ autocomplete: [{
394
+ type: i0.Input,
395
+ args: [{
396
+ isSignal: true,
397
+ alias: "autocomplete",
398
+ required: false
399
+ }]
400
+ }],
401
+ complement: [{
402
+ type: i0.Input,
403
+ args: [{
404
+ isSignal: true,
405
+ alias: "complement",
406
+ required: false
407
+ }]
408
+ }],
409
+ pleineLargeur: [{
410
+ type: i0.Input,
411
+ args: [{
412
+ isSignal: true,
413
+ alias: "pleineLargeur",
414
+ required: false
415
+ }]
416
+ }],
417
+ decritPar: [{
418
+ type: i0.Input,
419
+ args: [{
420
+ isSignal: true,
421
+ alias: "decritPar",
422
+ required: false
423
+ }]
424
+ }]
425
+ }
426
+ });
427
+ const LIBELLES_FORMULAIRES_FR = {
428
+ montantMinimal: "Montant minimal",
429
+ montantMaximal: "Montant maximal",
430
+ frequence: "Fréquence",
431
+ frequences: {
432
+ quotidienne: "Tous les jours",
433
+ hebdomadaire: "Toutes les semaines",
434
+ mensuelle: "Tous les mois",
435
+ annuelle: "Tous les ans"
436
+ },
437
+ intervalle: "Répéter tous les",
438
+ unitesDIntervalle: {
439
+ quotidienne: "jours",
440
+ hebdomadaire: "semaines",
441
+ mensuelle: "mois",
442
+ annuelle: "ans"
443
+ },
444
+ jourDuMois: "Jour du mois",
445
+ jourDeLaPremiereEcheance: "Le jour de la première échéance",
446
+ regleDeFinDeMois: "Un 29, 30 ou 31 : les mois plus courts, l’échéance tombe le dernier jour du mois.",
447
+ premiereEcheance: "Première échéance le",
448
+ fin: "Fin",
449
+ finJamais: "Jusqu’à nouvel ordre",
450
+ finALaDate: "À une date",
451
+ finApresNombre: "Après un nombre d’échéances",
452
+ derniereEcheance: "Dernière échéance le",
453
+ nombreDEcheances: "Nombre d’échéances",
454
+ recapitulatif: "Récapitulatif"
455
+ };
456
+ const LIBELLES_FORMULAIRES_EN = {
457
+ montantMinimal: "Minimum amount",
458
+ montantMaximal: "Maximum amount",
459
+ frequence: "Frequency",
460
+ frequences: {
461
+ quotidienne: "Every day",
462
+ hebdomadaire: "Every week",
463
+ mensuelle: "Every month",
464
+ annuelle: "Every year"
465
+ },
466
+ intervalle: "Repeat every",
467
+ unitesDIntervalle: {
468
+ quotidienne: "days",
469
+ hebdomadaire: "weeks",
470
+ mensuelle: "months",
471
+ annuelle: "years"
472
+ },
473
+ jourDuMois: "Day of the month",
474
+ jourDeLaPremiereEcheance: "The day of the first occurrence",
475
+ regleDeFinDeMois: "The 29th, 30th or 31st: in shorter months, the occurrence falls on the last day.",
476
+ premiereEcheance: "First occurrence on",
477
+ fin: "End",
478
+ finJamais: "Until further notice",
479
+ finALaDate: "On a date",
480
+ finApresNombre: "After a number of occurrences",
481
+ derniereEcheance: "Last occurrence on",
482
+ nombreDEcheances: "Number of occurrences",
483
+ recapitulatif: "Summary"
484
+ };
485
+ const ST_LIBELLES_FORMULAIRES = new InjectionToken("ST_LIBELLES_FORMULAIRES", {
486
+ providedIn: "root",
487
+ factory: () => ({
488
+ fr: LIBELLES_FORMULAIRES_FR,
489
+ en: LIBELLES_FORMULAIRES_EN
490
+ })
491
+ });
492
+ function fournirLibellesFormulaires(catalogues) {
493
+ return {
494
+ provide: ST_LIBELLES_FORMULAIRES,
495
+ useValue: {
496
+ fr: LIBELLES_FORMULAIRES_FR,
497
+ en: LIBELLES_FORMULAIRES_EN,
498
+ ...catalogues
499
+ }
500
+ };
97
501
  }
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-commande-hauteur, 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-commande-rayon, var(--st-rayon-md))}.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-commande-hauteur, 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-commande-rayon, var(--st-rayon-md))}.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 });
502
+ function libellesDesFormulaires() {
503
+ const catalogue = catalogueDesFormulaires();
504
+ return computed(() => catalogue().libelles);
225
505
  }
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-commande-hauteur, 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-commande-rayon, var(--st-rayon-md))}.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-commande-hauteur, 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-commande-rayon, var(--st-rayon-md))}.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 });
506
+ function catalogueDesFormulaires() {
507
+ return catalogueDuPointDEntree("@starterlib/ui/formulaires", inject(ST_LIBELLES_FORMULAIRES), LIBELLES_FORMULAIRES_FR, "fournirLibellesFormulaires");
410
508
  }
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-commande-hauteur, 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-commande-rayon, var(--st-rayon-md))}.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
- */
509
+ function erreurPlageDeMontants(plage) {
510
+ const { min, max } = plage;
511
+ if (min === null || max === null) return null;
512
+ return max < min ? { kind: "plageDeMontants" } : null;
513
+ }
514
+ var StAmountRange = class StAmountRange extends ContratDeChamp {
515
+ libellesDesChamps = libellesDesFormulaires();
516
+ value = model({
517
+ min: null,
518
+ max: null
519
+ }, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
520
+ devise = input.required(...ngDevMode ? [{ debugName: "devise" }] : /* istanbul ignore next */ []);
521
+ etiquettes = input(null, ...ngDevMode ? [{ debugName: "etiquettes" }] : /* istanbul ignore next */ []);
522
+ fieldset = viewChild(StFieldset, ...ngDevMode ? [{ debugName: "fieldset" }] : /* istanbul ignore next */ []);
523
+ champs = viewChildren(StAmountField, ...ngDevMode ? [{ debugName: "champs" }] : /* istanbul ignore next */ []);
524
+ quitte = signal(false, ...ngDevMode ? [{ debugName: "quitte" }] : /* istanbul ignore next */ []);
525
+ etiquettesLues = computed(() => {
526
+ const libelles = this.libellesDesChamps();
527
+ return this.etiquettes() ?? {
528
+ min: libelles.montantMinimal,
529
+ max: libelles.montantMaximal
530
+ };
531
+ }, ...ngDevMode ? [{ debugName: "etiquettesLues" }] : /* istanbul ignore next */ []);
532
+ erreursDuMaximum = computed(() => this.errors().filter((erreur) => erreur.kind === "plageDeMontants"), ...ngDevMode ? [{ debugName: "erreursDuMaximum" }] : /* istanbul ignore next */ []);
533
+ erreursDuGroupe = computed(() => this.errors().filter((erreur) => erreur.kind !== "plageDeMontants"), ...ngDevMode ? [{ debugName: "erreursDuGroupe" }] : /* istanbul ignore next */ []);
534
+ decritPar = computed(() => {
535
+ const fieldset = this.fieldset();
536
+ return fieldset !== void 0 && this.aideEtRaisons() !== null ? [fieldset.identifiants.aide] : [];
537
+ }, ...ngDevMode ? [{ debugName: "decritPar" }] : /* istanbul ignore next */ []);
538
+ changer(partie, montant) {
539
+ this.value.set({
540
+ ...this.value(),
541
+ [partie]: montant
542
+ });
543
+ }
544
+ quitter() {
545
+ this.quitte.set(true);
546
+ this.touch.emit();
547
+ }
548
+ focus(options) {
549
+ const [minimum, maximum] = this.champs();
550
+ if (this.erreursDuMaximum().length > 0) {
551
+ maximum?.focus(options);
552
+ return;
553
+ }
554
+ (this.champs().find((champ) => champ.lectureInvalide()) ?? minimum)?.focus(options);
555
+ }
556
+ static ɵfac = i0.ɵɵngDeclareFactory({
557
+ minVersion: "12.0.0",
558
+ version: "22.2.0",
559
+ ngImport: i0,
560
+ type: StAmountRange,
561
+ deps: null,
562
+ target: i0.ɵɵFactoryTarget.Component
563
+ });
564
+ static ɵcmp = i0.ɵɵngDeclareComponent({
565
+ minVersion: "17.2.0",
566
+ version: "22.2.0",
567
+ type: StAmountRange,
568
+ isStandalone: true,
569
+ selector: "st-amount-range",
570
+ inputs: {
571
+ value: {
572
+ classPropertyName: "value",
573
+ publicName: "value",
574
+ isSignal: true,
575
+ isRequired: false,
576
+ transformFunction: null
577
+ },
578
+ devise: {
579
+ classPropertyName: "devise",
580
+ publicName: "devise",
581
+ isSignal: true,
582
+ isRequired: true,
583
+ transformFunction: null
584
+ },
585
+ etiquettes: {
586
+ classPropertyName: "etiquettes",
587
+ publicName: "etiquettes",
588
+ isSignal: true,
589
+ isRequired: false,
590
+ transformFunction: null
591
+ }
592
+ },
593
+ outputs: { value: "valueChange" },
594
+ host: { classAttribute: "st-amount-range" },
595
+ viewQueries: [{
596
+ propertyName: "fieldset",
597
+ first: true,
598
+ predicate: StFieldset,
599
+ descendants: true,
600
+ isSignal: true
601
+ }, {
602
+ propertyName: "champs",
603
+ predicate: StAmountField,
604
+ descendants: true,
605
+ isSignal: true
606
+ }],
607
+ usesInheritance: true,
608
+ ngImport: i0,
609
+ template: "<st-fieldset\n [legende]=\"libelle()\"\n [aide]=\"aideEtRaisons()\"\n [erreurs]=\"erreursDuGroupe()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n [disabled]=\"disabled()\"\n>\n <div class=\"st-amount-range__parties\">\n <st-amount-field\n class=\"st-amount-range__partie\"\n [libelle]=\"etiquettesLues().min\"\n [devise]=\"devise()\"\n [value]=\"value().min\"\n [decritPar]=\"decritPar()\"\n [touched]=\"touched() || quitte()\"\n [readonly]=\"readonly()\"\n [name]=\"name() ? name() + '-min' : ''\"\n (valueChange)=\"changer('min', $event)\"\n (touch)=\"quitter()\"\n />\n <st-amount-field\n class=\"st-amount-range__partie\"\n [libelle]=\"etiquettesLues().max\"\n [devise]=\"devise()\"\n [value]=\"value().max\"\n [errors]=\"erreursDuMaximum()\"\n [decritPar]=\"decritPar()\"\n [touched]=\"touched() || quitte()\"\n [readonly]=\"readonly()\"\n [name]=\"name() ? name() + '-max' : ''\"\n (valueChange)=\"changer('max', $event)\"\n (touch)=\"quitter()\"\n />\n </div>\n</st-fieldset>\n",
610
+ 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;min-inline-size:0;container-type:inline-size}.st-amount-range__parties{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--st-espacement-4)}@container (min-width: 30rem){.st-amount-range__parties{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}}\n"],
611
+ dependencies: [{
612
+ kind: "component",
613
+ type: StAmountField,
614
+ selector: "st-amount-field",
615
+ inputs: [
616
+ "value",
617
+ "devise",
618
+ "autocomplete",
619
+ "complement",
620
+ "pleineLargeur",
621
+ "decritPar"
622
+ ],
623
+ outputs: ["valueChange"]
624
+ }, {
625
+ kind: "component",
626
+ type: StFieldset,
627
+ selector: "st-fieldset",
628
+ inputs: [
629
+ "legende",
630
+ "contenu",
631
+ "disposition",
632
+ "toutesLesErreurs",
633
+ "choixExclusif",
634
+ "readonly",
635
+ "disabled",
636
+ "hidden",
637
+ "decritPar"
638
+ ]
639
+ }],
640
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
641
+ });
642
+ };
643
+ i0.ɵɵngDeclareClassMetadata({
644
+ minVersion: "12.0.0",
645
+ version: "22.2.0",
646
+ ngImport: i0,
647
+ type: StAmountRange,
648
+ decorators: [{
649
+ type: Component,
650
+ args: [{
651
+ selector: "st-amount-range",
652
+ changeDetection: ChangeDetectionStrategy.OnPush,
653
+ imports: [StAmountField, StFieldset],
654
+ host: { class: "st-amount-range" },
655
+ template: "<st-fieldset\n [legende]=\"libelle()\"\n [aide]=\"aideEtRaisons()\"\n [erreurs]=\"erreursDuGroupe()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n [disabled]=\"disabled()\"\n>\n <div class=\"st-amount-range__parties\">\n <st-amount-field\n class=\"st-amount-range__partie\"\n [libelle]=\"etiquettesLues().min\"\n [devise]=\"devise()\"\n [value]=\"value().min\"\n [decritPar]=\"decritPar()\"\n [touched]=\"touched() || quitte()\"\n [readonly]=\"readonly()\"\n [name]=\"name() ? name() + '-min' : ''\"\n (valueChange)=\"changer('min', $event)\"\n (touch)=\"quitter()\"\n />\n <st-amount-field\n class=\"st-amount-range__partie\"\n [libelle]=\"etiquettesLues().max\"\n [devise]=\"devise()\"\n [value]=\"value().max\"\n [errors]=\"erreursDuMaximum()\"\n [decritPar]=\"decritPar()\"\n [touched]=\"touched() || quitte()\"\n [readonly]=\"readonly()\"\n [name]=\"name() ? name() + '-max' : ''\"\n (valueChange)=\"changer('max', $event)\"\n (touch)=\"quitter()\"\n />\n </div>\n</st-fieldset>\n",
656
+ 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;min-inline-size:0;container-type:inline-size}.st-amount-range__parties{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--st-espacement-4)}@container (min-width: 30rem){.st-amount-range__parties{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}}\n"]
657
+ }]
658
+ }],
659
+ propDecorators: {
660
+ value: [{
661
+ type: i0.Input,
662
+ args: [{
663
+ isSignal: true,
664
+ alias: "value",
665
+ required: false
666
+ }]
667
+ }, {
668
+ type: i0.Output,
669
+ args: ["valueChange"]
670
+ }],
671
+ devise: [{
672
+ type: i0.Input,
673
+ args: [{
674
+ isSignal: true,
675
+ alias: "devise",
676
+ required: true
677
+ }]
678
+ }],
679
+ etiquettes: [{
680
+ type: i0.Input,
681
+ args: [{
682
+ isSignal: true,
683
+ alias: "etiquettes",
684
+ required: false
685
+ }]
686
+ }],
687
+ fieldset: [{
688
+ type: i0.ViewChild,
689
+ args: [i0.forwardRef(() => StFieldset), { isSignal: true }]
690
+ }],
691
+ champs: [{
692
+ type: i0.ViewChildren,
693
+ args: [i0.forwardRef(() => StAmountField), { isSignal: true }]
694
+ }]
695
+ }
696
+ });
697
+ const MARGE = 8;
698
+ const ECART = 4;
699
+ var StCoucheAncree = class StCoucheAncree {
700
+ stCoucheAncree = input.required(...ngDevMode ? [{ debugName: "stCoucheAncree" }] : /* istanbul ignore next */ []);
701
+ element = inject(ElementRef).nativeElement;
702
+ fenetre = inject(DOCUMENT).defaultView;
703
+ observateur = null;
704
+ placer = () => {
705
+ const ancre = this.stCoucheAncree();
706
+ if (ancre === null || this.fenetre === null || !this.element.matches(":popover-open")) return;
707
+ const largeurUtile = this.element.ownerDocument.documentElement.clientWidth;
708
+ const hauteurUtile = this.fenetre.innerHeight;
709
+ this.element.style.setProperty("max-inline-size", `${String(largeurUtile - 2 * MARGE)}px`);
710
+ const a = ancre.getBoundingClientRect();
711
+ const bloc = this.element.getBoundingClientRect();
712
+ const debut = this.fenetre.getComputedStyle(ancre).direction === "rtl" ? a.right - bloc.width : a.left;
713
+ const gauche = Math.min(Math.max(MARGE, debut), largeurUtile - bloc.width - MARGE);
714
+ const dessous = a.bottom + ECART;
715
+ const dessus = a.top - ECART - bloc.height;
716
+ const auDessus = dessous + bloc.height > hauteurUtile - MARGE && dessus >= MARGE;
717
+ this.element.style.setProperty("left", `${String(Math.max(MARGE, gauche))}px`);
718
+ this.element.style.setProperty("top", `${String(auDessus ? dessus : dessous)}px`);
719
+ this.element.dataset["cote"] = auDessus ? "haut" : "bas";
720
+ };
721
+ constructor() {
722
+ const pris = typeof this.element.showPopover === "function";
723
+ if (pris) this.element.setAttribute("popover", "manual");
724
+ afterNextRender(() => {
725
+ if (!pris) return;
726
+ this.element.showPopover();
727
+ this.placer();
728
+ this.fenetre?.addEventListener("scroll", this.placer, {
729
+ capture: true,
730
+ passive: true
731
+ });
732
+ this.fenetre?.addEventListener("resize", this.placer, { passive: true });
733
+ const Observateur = this.fenetre?.ResizeObserver;
734
+ if (Observateur !== void 0) {
735
+ this.observateur = new Observateur(this.placer);
736
+ this.observateur.observe(this.element);
737
+ }
738
+ });
739
+ inject(DestroyRef).onDestroy(() => {
740
+ this.observateur?.disconnect();
741
+ this.fenetre?.removeEventListener("scroll", this.placer, { capture: true });
742
+ this.fenetre?.removeEventListener("resize", this.placer);
743
+ });
744
+ }
745
+ static ɵfac = i0.ɵɵngDeclareFactory({
746
+ minVersion: "12.0.0",
747
+ version: "22.2.0",
748
+ ngImport: i0,
749
+ type: StCoucheAncree,
750
+ deps: [],
751
+ target: i0.ɵɵFactoryTarget.Directive
752
+ });
753
+ static ɵdir = i0.ɵɵngDeclareDirective({
754
+ minVersion: "17.1.0",
755
+ version: "22.2.0",
756
+ type: StCoucheAncree,
757
+ isStandalone: true,
758
+ selector: "[stCoucheAncree]",
759
+ inputs: { stCoucheAncree: {
760
+ classPropertyName: "stCoucheAncree",
761
+ publicName: "stCoucheAncree",
762
+ isSignal: true,
763
+ isRequired: true,
764
+ transformFunction: null
765
+ } },
766
+ host: { classAttribute: "st-couche-ancree" },
767
+ ngImport: i0
768
+ });
769
+ };
770
+ i0.ɵɵngDeclareClassMetadata({
771
+ minVersion: "12.0.0",
772
+ version: "22.2.0",
773
+ ngImport: i0,
774
+ type: StCoucheAncree,
775
+ decorators: [{
776
+ type: Directive,
777
+ args: [{
778
+ selector: "[stCoucheAncree]",
779
+ host: { class: "st-couche-ancree" }
780
+ }]
781
+ }],
782
+ ctorParameters: () => [],
783
+ propDecorators: { stCoucheAncree: [{
784
+ type: i0.Input,
785
+ args: [{
786
+ isSignal: true,
787
+ alias: "stCoucheAncree",
788
+ required: true
789
+ }]
790
+ }] }
791
+ });
792
+ var SortieDuComposant = class {
793
+ hote;
794
+ sortir;
795
+ appui = false;
796
+ enAttente = null;
797
+ retirerLesEcouteurs = null;
798
+ minuterie;
799
+ constructor(hote, sortir) {
800
+ this.hote = hote;
801
+ this.sortir = sortir;
802
+ inject(DestroyRef).onDestroy(() => {
803
+ this.retirerLesEcouteurs?.();
804
+ clearTimeout(this.minuterie);
805
+ });
806
+ }
807
+ surPointeur() {
808
+ if (this.appui) return;
809
+ this.appui = true;
810
+ const document = this.hote.ownerDocument;
811
+ const relache = () => {
812
+ this.retirerLesEcouteurs?.();
813
+ this.minuterie = setTimeout(() => {
814
+ this.appui = false;
815
+ this.trancher();
816
+ });
817
+ };
818
+ this.retirerLesEcouteurs = () => {
819
+ document.removeEventListener("pointerup", relache, true);
820
+ document.removeEventListener("pointercancel", relache, true);
821
+ this.retirerLesEcouteurs = null;
822
+ };
823
+ document.addEventListener("pointerup", relache, true);
824
+ document.addEventListener("pointercancel", relache, true);
825
+ }
826
+ surFocusout(evenement) {
827
+ const suivant = evenement.relatedTarget;
828
+ if (suivant !== null && this.hote.contains(suivant)) return;
829
+ if (suivant !== null && !this.appui) {
830
+ this.enAttente = null;
831
+ this.sortir();
832
+ return;
833
+ }
834
+ this.enAttente = evenement.target;
835
+ if (!this.appui) queueMicrotask(() => {
836
+ this.trancher();
837
+ });
838
+ }
839
+ trancher() {
840
+ const cible = this.enAttente;
841
+ if (cible === null || this.appui) return;
842
+ this.enAttente = null;
843
+ if (cible instanceof Node && !cible.isConnected) return;
844
+ const actif = this.hote.ownerDocument.activeElement;
845
+ if (actif !== null && this.hote.contains(actif)) return;
846
+ this.sortir();
847
+ }
848
+ };
849
+ function texteDesBornes$1(libelles, locale, min, max) {
850
+ if (min !== null && max !== null) return libelles.entreLeEtLe(formaterDateSaisie(min, locale), formaterDateSaisie(max, locale));
851
+ if (min !== null) return libelles.dateTropTot(formaterDateSaisie(min, locale));
852
+ if (max !== null) return libelles.dateTropTard(formaterDateSaisie(max, locale));
853
+ return null;
854
+ }
855
+ var StRaccourcisDeDates = class StRaccourcisDeDates {
856
+ titre = input.required(...ngDevMode ? [{ debugName: "titre" }] : /* istanbul ignore next */ []);
857
+ disposition = input("liste", ...ngDevMode ? [{ debugName: "disposition" }] : /* istanbul ignore next */ []);
858
+ raccourcis = input.required(...ngDevMode ? [{ debugName: "raccourcis" }] : /* istanbul ignore next */ []);
859
+ desactive = input(false, {
860
+ ...ngDevMode ? { debugName: "desactive" } : /* istanbul ignore next */ {},
861
+ transform: booleanAttribute
862
+ });
863
+ choix = output();
864
+ idDuTitre = `${inject(StIdentifiants).prochain("st-raccourcis")}-titre`;
865
+ static ɵfac = i0.ɵɵngDeclareFactory({
866
+ minVersion: "12.0.0",
867
+ version: "22.2.0",
868
+ ngImport: i0,
869
+ type: StRaccourcisDeDates,
870
+ deps: [],
871
+ target: i0.ɵɵFactoryTarget.Component
872
+ });
873
+ static ɵcmp = i0.ɵɵngDeclareComponent({
874
+ minVersion: "17.0.0",
875
+ version: "22.2.0",
876
+ type: StRaccourcisDeDates,
877
+ isStandalone: true,
878
+ selector: "st-raccourcis-de-dates",
879
+ inputs: {
880
+ titre: {
881
+ classPropertyName: "titre",
882
+ publicName: "titre",
883
+ isSignal: true,
884
+ isRequired: true,
885
+ transformFunction: null
886
+ },
887
+ disposition: {
888
+ classPropertyName: "disposition",
889
+ publicName: "disposition",
890
+ isSignal: true,
891
+ isRequired: false,
892
+ transformFunction: null
893
+ },
894
+ raccourcis: {
895
+ classPropertyName: "raccourcis",
896
+ publicName: "raccourcis",
897
+ isSignal: true,
898
+ isRequired: true,
899
+ transformFunction: null
900
+ },
901
+ desactive: {
902
+ classPropertyName: "desactive",
903
+ publicName: "desactive",
904
+ isSignal: true,
905
+ isRequired: false,
906
+ transformFunction: null
907
+ }
908
+ },
909
+ outputs: { choix: "choix" },
910
+ host: {
911
+ properties: { "attr.data-disposition": "disposition()" },
912
+ classAttribute: "st-raccourcis-de-dates"
913
+ },
914
+ ngImport: i0,
915
+ template: "<p class=\"st-raccourcis-de-dates__titre\" [id]=\"idDuTitre\">{{ titre() }}</p>\n<div class=\"st-raccourcis-de-dates__boutons\" role=\"group\" [attr.aria-labelledby]=\"idDuTitre\">\n @for (raccourci of raccourcis(); track raccourci.cle) {\n <button\n class=\"st-raccourcis-de-dates__bouton\"\n type=\"button\"\n [attr.aria-pressed]=\"raccourci.choisi ? 'true' : 'false'\"\n [disabled]=\"desactive()\"\n (click)=\"choix.emit(raccourci.cle)\"\n >\n <span class=\"st-raccourcis-de-dates__libelle\">{{ raccourci.libelle }}</span>\n @if (raccourci.choisi) {\n <st-icon class=\"st-raccourcis-de-dates__coche\" nom=\"coche\" taille=\"16\" />\n } @else if (raccourci.precision) {\n <span class=\"st-raccourcis-de-dates__precision\" aria-hidden=\"true\">{{\n raccourci.precision\n }}</span>\n }\n </button>\n }\n</div>\n",
916
+ 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-raccourcis-de-dates__titre{margin:0 0 var(--st-espacement-2);color:var(--st-couleur-texte-discret);font-size:var(--st-taille-2xs);line-height:var(--st-interligne-2xs);font-weight:var(--st-graisse-semi);letter-spacing:var(--st-interlettrage-capitales);text-transform:uppercase}.st-raccourcis-de-dates__boutons{display:flex;flex-direction:column;gap:var(--st-espacement-2)}:host([data-disposition=grille]) .st-raccourcis-de-dates__boutons{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.st-raccourcis-de-dates__bouton:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-raccourcis-de-dates__bouton{box-sizing:border-box;display:flex;gap:var(--st-espacement-1);align-items:center;justify-content:space-between;min-inline-size:0;padding:var(--st-espacement-2-5) var(--st-espacement-3-5);font-family:inherit;font-size:var(--st-taille-xs);font-weight:var(--st-graisse-moyenne);line-height:var(--st-interligne-xs);color:var(--st-couleur-texte);text-align:start;cursor:pointer;background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-surface-active);border-radius:var(--st-rayon-md)}@media(hover:hover){.st-raccourcis-de-dates__bouton:hover:not(:disabled,[aria-pressed=true]){background:var(--st-couleur-surface-survol);border-color:var(--st-couleur-bordure-forte);transition:background-color var(--st-duree-rapide) var(--st-courbe-standard),border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-raccourcis-de-dates__bouton[aria-pressed=true]{font-weight:var(--st-graisse-grasse);color:var(--st-couleur-texte-primaire);border-color:var(--st-couleur-primaire);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-primaire)}.st-raccourcis-de-dates__bouton[aria-pressed=true]:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-primaire)}.st-raccourcis-de-dates__bouton:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed}@media(forced-colors:active){.st-raccourcis-de-dates__bouton{border-color:ButtonText}.st-raccourcis-de-dates__bouton[aria-pressed=true]{border-color:Highlight;outline:var(--st-epaisseur-fine) solid Highlight;outline-offset:calc(-2 * var(--st-epaisseur-fine))}}@media print{.st-raccourcis-de-dates__bouton{background:none}.st-raccourcis-de-dates__bouton[aria-pressed=true]{color:var(--st-couleur-texte);border-color:var(--st-couleur-texte);box-shadow:none;outline:var(--st-epaisseur-fine) solid var(--st-couleur-texte);outline-offset:calc(-2 * var(--st-epaisseur-fine))}}:host([data-disposition=grille]) .st-raccourcis-de-dates__bouton{padding:var(--st-espacement-2) var(--st-espacement-3)}@media(pointer:coarse){.st-raccourcis-de-dates__bouton{min-block-size:var(--st-hauteur-commande-xl)}}.st-raccourcis-de-dates__libelle{min-inline-size:0;overflow-wrap:anywhere}.st-raccourcis-de-dates__precision{flex:none;font-family:var(--st-police-mono);font-size:var(--st-taille-2xs);line-height:var(--st-interligne-2xs);color:var(--st-couleur-texte-discret)}.st-raccourcis-de-dates__coche{flex:none}\n"],
917
+ dependencies: [{
918
+ kind: "component",
919
+ type: StIcon,
920
+ selector: "st-icon",
921
+ inputs: [
922
+ "icone",
923
+ "nom",
924
+ "variante",
925
+ "sprite",
926
+ "nomMetier",
927
+ "taille",
928
+ "ton",
929
+ "etiquette",
930
+ "miroir"
931
+ ]
932
+ }],
933
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
934
+ });
935
+ };
936
+ i0.ɵɵngDeclareClassMetadata({
937
+ minVersion: "12.0.0",
938
+ version: "22.2.0",
939
+ ngImport: i0,
940
+ type: StRaccourcisDeDates,
941
+ decorators: [{
942
+ type: Component,
943
+ args: [{
944
+ selector: "st-raccourcis-de-dates",
945
+ changeDetection: ChangeDetectionStrategy.OnPush,
946
+ imports: [StIcon],
947
+ host: {
948
+ class: "st-raccourcis-de-dates",
949
+ "[attr.data-disposition]": "disposition()"
950
+ },
951
+ template: "<p class=\"st-raccourcis-de-dates__titre\" [id]=\"idDuTitre\">{{ titre() }}</p>\n<div class=\"st-raccourcis-de-dates__boutons\" role=\"group\" [attr.aria-labelledby]=\"idDuTitre\">\n @for (raccourci of raccourcis(); track raccourci.cle) {\n <button\n class=\"st-raccourcis-de-dates__bouton\"\n type=\"button\"\n [attr.aria-pressed]=\"raccourci.choisi ? 'true' : 'false'\"\n [disabled]=\"desactive()\"\n (click)=\"choix.emit(raccourci.cle)\"\n >\n <span class=\"st-raccourcis-de-dates__libelle\">{{ raccourci.libelle }}</span>\n @if (raccourci.choisi) {\n <st-icon class=\"st-raccourcis-de-dates__coche\" nom=\"coche\" taille=\"16\" />\n } @else if (raccourci.precision) {\n <span class=\"st-raccourcis-de-dates__precision\" aria-hidden=\"true\">{{\n raccourci.precision\n }}</span>\n }\n </button>\n }\n</div>\n",
952
+ 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-raccourcis-de-dates__titre{margin:0 0 var(--st-espacement-2);color:var(--st-couleur-texte-discret);font-size:var(--st-taille-2xs);line-height:var(--st-interligne-2xs);font-weight:var(--st-graisse-semi);letter-spacing:var(--st-interlettrage-capitales);text-transform:uppercase}.st-raccourcis-de-dates__boutons{display:flex;flex-direction:column;gap:var(--st-espacement-2)}:host([data-disposition=grille]) .st-raccourcis-de-dates__boutons{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.st-raccourcis-de-dates__bouton:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-raccourcis-de-dates__bouton{box-sizing:border-box;display:flex;gap:var(--st-espacement-1);align-items:center;justify-content:space-between;min-inline-size:0;padding:var(--st-espacement-2-5) var(--st-espacement-3-5);font-family:inherit;font-size:var(--st-taille-xs);font-weight:var(--st-graisse-moyenne);line-height:var(--st-interligne-xs);color:var(--st-couleur-texte);text-align:start;cursor:pointer;background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-surface-active);border-radius:var(--st-rayon-md)}@media(hover:hover){.st-raccourcis-de-dates__bouton:hover:not(:disabled,[aria-pressed=true]){background:var(--st-couleur-surface-survol);border-color:var(--st-couleur-bordure-forte);transition:background-color var(--st-duree-rapide) var(--st-courbe-standard),border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-raccourcis-de-dates__bouton[aria-pressed=true]{font-weight:var(--st-graisse-grasse);color:var(--st-couleur-texte-primaire);border-color:var(--st-couleur-primaire);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-primaire)}.st-raccourcis-de-dates__bouton[aria-pressed=true]:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-primaire)}.st-raccourcis-de-dates__bouton:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed}@media(forced-colors:active){.st-raccourcis-de-dates__bouton{border-color:ButtonText}.st-raccourcis-de-dates__bouton[aria-pressed=true]{border-color:Highlight;outline:var(--st-epaisseur-fine) solid Highlight;outline-offset:calc(-2 * var(--st-epaisseur-fine))}}@media print{.st-raccourcis-de-dates__bouton{background:none}.st-raccourcis-de-dates__bouton[aria-pressed=true]{color:var(--st-couleur-texte);border-color:var(--st-couleur-texte);box-shadow:none;outline:var(--st-epaisseur-fine) solid var(--st-couleur-texte);outline-offset:calc(-2 * var(--st-epaisseur-fine))}}:host([data-disposition=grille]) .st-raccourcis-de-dates__bouton{padding:var(--st-espacement-2) var(--st-espacement-3)}@media(pointer:coarse){.st-raccourcis-de-dates__bouton{min-block-size:var(--st-hauteur-commande-xl)}}.st-raccourcis-de-dates__libelle{min-inline-size:0;overflow-wrap:anywhere}.st-raccourcis-de-dates__precision{flex:none;font-family:var(--st-police-mono);font-size:var(--st-taille-2xs);line-height:var(--st-interligne-2xs);color:var(--st-couleur-texte-discret)}.st-raccourcis-de-dates__coche{flex:none}\n"]
953
+ }]
954
+ }],
955
+ propDecorators: {
956
+ titre: [{
957
+ type: i0.Input,
958
+ args: [{
959
+ isSignal: true,
960
+ alias: "titre",
961
+ required: true
962
+ }]
963
+ }],
964
+ disposition: [{
965
+ type: i0.Input,
966
+ args: [{
967
+ isSignal: true,
968
+ alias: "disposition",
969
+ required: false
970
+ }]
971
+ }],
972
+ raccourcis: [{
973
+ type: i0.Input,
974
+ args: [{
975
+ isSignal: true,
976
+ alias: "raccourcis",
977
+ required: true
978
+ }]
979
+ }],
980
+ desactive: [{
981
+ type: i0.Input,
982
+ args: [{
983
+ isSignal: true,
984
+ alias: "desactive",
985
+ required: false
986
+ }]
987
+ }],
988
+ choix: [{
989
+ type: i0.Output,
990
+ args: ["choix"]
991
+ }]
992
+ }
993
+ });
994
+ var StDateField = class StDateField extends ContratDeChamp {
995
+ libelles = inject(ST_LIBELLES);
996
+ locale = inject(ST_LOCALE);
997
+ element = inject(ElementRef);
998
+ injecteur = inject(Injector);
999
+ value = model(null, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
1000
+ dateMin = input(null, ...ngDevMode ? [{ debugName: "dateMin" }] : /* istanbul ignore next */ []);
1001
+ dateMax = input(null, ...ngDevMode ? [{ debugName: "dateMax" }] : /* istanbul ignore next */ []);
1002
+ autocomplete = input(null, ...ngDevMode ? [{ debugName: "autocomplete" }] : /* istanbul ignore next */ []);
1003
+ annees = input(null, ...ngDevMode ? [{ debugName: "annees" }] : /* istanbul ignore next */ []);
1004
+ raccourcis = input([], ...ngDevMode ? [{ debugName: "raccourcis" }] : /* istanbul ignore next */ []);
1005
+ dispositionDesRaccourcis = input("liste", ...ngDevMode ? [{ debugName: "dispositionDesRaccourcis" }] : /* istanbul ignore next */ []);
1006
+ titreDesRaccourcis = input(null, ...ngDevMode ? [{ debugName: "titreDesRaccourcis" }] : /* istanbul ignore next */ []);
1007
+ raccourcisAffiches = computed(() => {
1008
+ const date = this.value();
1009
+ return this.raccourcis().map((raccourci) => ({
1010
+ cle: raccourci.cle,
1011
+ libelle: raccourci.libelle,
1012
+ precision: raccourci.precision ?? null,
1013
+ choisi: raccourci.date === date
1014
+ }));
1015
+ }, ...ngDevMode ? [{ debugName: "raccourcisAffiches" }] : /* istanbul ignore next */ []);
1016
+ titreDesRaccourcisLu = computed(() => this.titreDesRaccourcis() ?? this.libelles().datesPredefinies, ...ngDevMode ? [{ debugName: "titreDesRaccourcisLu" }] : /* istanbul ignore next */ []);
1017
+ choisirUnRaccourci(cle) {
1018
+ const raccourci = this.raccourcis().find((un) => un.cle === cle);
1019
+ if (raccourci !== void 0) this.value.set(raccourci.date);
1020
+ }
1021
+ ouvert = signal(false, ...ngDevMode ? [{ debugName: "ouvert" }] : /* istanbul ignore next */ []);
1022
+ identifiantCalendrier = `${inject(StIdentifiants).prochain("st-date")}-calendrier`;
1023
+ calendrier = viewChild(StCalendar, ...ngDevMode ? [{ debugName: "calendrier" }] : /* istanbul ignore next */ []);
1024
+ bouton = viewChild("bouton", {
1025
+ ...ngDevMode ? { debugName: "bouton" } : /* istanbul ignore next */ {},
1026
+ read: ElementRef
1027
+ });
1028
+ quitte = signal(false, ...ngDevMode ? [{ debugName: "quitte" }] : /* istanbul ignore next */ []);
1029
+ saisie = transformedValue(this.value, {
1030
+ parse: (texte) => {
1031
+ if (texte.trim() === "") return { value: null };
1032
+ const date = lireDate(texte, this.locale());
1033
+ return date === null ? {
1034
+ value: null,
1035
+ error: { kind: "date" }
1036
+ } : { value: date };
1037
+ },
1038
+ format: (valeur) => this.formater(valeur)
1039
+ });
1040
+ lectureInvalide = computed(() => this.saisie.parseErrors().length > 0, ...ngDevMode ? [{ debugName: "lectureInvalide" }] : /* istanbul ignore next */ []);
1041
+ aideLue = computed(() => {
1042
+ const libelles = this.libelles();
1043
+ const locale = this.locale();
1044
+ const format = libelles.formatDeDate(motifLocal(libelles, locale), exempleDeDate(locale));
1045
+ const bornes = texteDesBornes$1(libelles, locale, this.dateMin(), this.dateMax());
1046
+ return [
1047
+ this.aideEtRaisons(),
1048
+ format,
1049
+ bornes
1050
+ ].filter((texte) => texte !== null).join(" ");
1051
+ }, ...ngDevMode ? [{ debugName: "aideLue" }] : /* istanbul ignore next */ []);
1052
+ sortie = new SortieDuComposant(this.element.nativeElement, () => {
1053
+ this.ouvert.set(false);
1054
+ this.quitte.set(true);
1055
+ this.touch.emit();
1056
+ });
1057
+ erreursAffichees = computed(() => fusionnerErreurs(this.errors(), this.saisie.parseErrors()), ...ngDevMode ? [{ debugName: "erreursAffichees" }] : /* istanbul ignore next */ []);
1058
+ surSaisie(evenement) {
1059
+ this.saisie.set(this.texteSaisi(evenement));
1060
+ }
1061
+ surToucheDuChamp(evenement) {
1062
+ if (evenement.key !== "ArrowDown" || !evenement.altKey || this.ouvert()) return;
1063
+ evenement.preventDefault();
1064
+ this.basculer();
1065
+ }
1066
+ surEchap(evenement) {
1067
+ if (!this.ouvert()) return;
1068
+ evenement.preventDefault();
1069
+ evenement.stopPropagation();
1070
+ this.fermer(true);
1071
+ }
1072
+ aLaSortieDuChamp() {
1073
+ if (this.saisie.parseErrors().length === 0) this.saisie.set(this.formater(this.value()));
1074
+ }
1075
+ basculer() {
1076
+ if (this.ouvert()) {
1077
+ this.fermer(true);
1078
+ return;
1079
+ }
1080
+ this.ouvert.set(true);
1081
+ afterNextRender(() => {
1082
+ this.calendrier()?.focus();
1083
+ }, { injector: this.injecteur });
1084
+ }
1085
+ choisir(date) {
1086
+ this.value.set(date);
1087
+ this.fermer(false);
1088
+ afterNextRender(() => {
1089
+ this.focus();
1090
+ }, { injector: this.injecteur });
1091
+ }
1092
+ fermer(rendreLeFocus) {
1093
+ this.ouvert.set(false);
1094
+ if (!rendreLeFocus) return;
1095
+ afterNextRender(() => {
1096
+ this.bouton()?.nativeElement.focus();
1097
+ }, { injector: this.injecteur });
1098
+ }
1099
+ formater(valeur) {
1100
+ return valeur === null ? "" : formaterDateSaisie(valeur, this.locale());
1101
+ }
1102
+ static ɵfac = i0.ɵɵngDeclareFactory({
1103
+ minVersion: "12.0.0",
1104
+ version: "22.2.0",
1105
+ ngImport: i0,
1106
+ type: StDateField,
1107
+ deps: null,
1108
+ target: i0.ɵɵFactoryTarget.Component
1109
+ });
1110
+ static ɵcmp = i0.ɵɵngDeclareComponent({
1111
+ minVersion: "17.0.0",
1112
+ version: "22.2.0",
1113
+ type: StDateField,
1114
+ isStandalone: true,
1115
+ selector: "st-date-field",
1116
+ inputs: {
1117
+ value: {
1118
+ classPropertyName: "value",
1119
+ publicName: "value",
1120
+ isSignal: true,
1121
+ isRequired: false,
1122
+ transformFunction: null
1123
+ },
1124
+ dateMin: {
1125
+ classPropertyName: "dateMin",
1126
+ publicName: "dateMin",
1127
+ isSignal: true,
1128
+ isRequired: false,
1129
+ transformFunction: null
1130
+ },
1131
+ dateMax: {
1132
+ classPropertyName: "dateMax",
1133
+ publicName: "dateMax",
1134
+ isSignal: true,
1135
+ isRequired: false,
1136
+ transformFunction: null
1137
+ },
1138
+ autocomplete: {
1139
+ classPropertyName: "autocomplete",
1140
+ publicName: "autocomplete",
1141
+ isSignal: true,
1142
+ isRequired: false,
1143
+ transformFunction: null
1144
+ },
1145
+ annees: {
1146
+ classPropertyName: "annees",
1147
+ publicName: "annees",
1148
+ isSignal: true,
1149
+ isRequired: false,
1150
+ transformFunction: null
1151
+ },
1152
+ raccourcis: {
1153
+ classPropertyName: "raccourcis",
1154
+ publicName: "raccourcis",
1155
+ isSignal: true,
1156
+ isRequired: false,
1157
+ transformFunction: null
1158
+ },
1159
+ dispositionDesRaccourcis: {
1160
+ classPropertyName: "dispositionDesRaccourcis",
1161
+ publicName: "dispositionDesRaccourcis",
1162
+ isSignal: true,
1163
+ isRequired: false,
1164
+ transformFunction: null
1165
+ },
1166
+ titreDesRaccourcis: {
1167
+ classPropertyName: "titreDesRaccourcis",
1168
+ publicName: "titreDesRaccourcis",
1169
+ isSignal: true,
1170
+ isRequired: false,
1171
+ transformFunction: null
1172
+ }
1173
+ },
1174
+ outputs: { value: "valueChange" },
1175
+ host: {
1176
+ listeners: {
1177
+ "focusout": "sortie.surFocusout($event)",
1178
+ "pointerdown": "sortie.surPointeur()",
1179
+ "keydown.escape": "surEchap($event)"
1180
+ },
1181
+ classAttribute: "st-date-field"
1182
+ },
1183
+ viewQueries: [{
1184
+ propertyName: "calendrier",
1185
+ first: true,
1186
+ predicate: StCalendar,
1187
+ descendants: true,
1188
+ isSignal: true
1189
+ }, {
1190
+ propertyName: "bouton",
1191
+ first: true,
1192
+ predicate: ["bouton"],
1193
+ descendants: true,
1194
+ read: ElementRef,
1195
+ isSignal: true
1196
+ }],
1197
+ usesInheritance: true,
1198
+ ngImport: i0,
1199
+ template: "<st-form-field\n [libelle]=\"libelle()\"\n [aide]=\"aideLue()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n>\n <div #ligne class=\"st-date-field__ligne\">\n <input\n #champ\n class=\"st-date-field__champ\"\n stControleDeChamp\n type=\"text\"\n inputmode=\"numeric\"\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 (keydown)=\"surToucheDuChamp($event)\"\n (blur)=\"aLaSortieDuChamp()\"\n />\n <button\n #bouton\n class=\"st-date-field__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 (mousedown)=\"$event.preventDefault()\"\n (click)=\"basculer()\"\n ></button>\n </div>\n @if (raccourcis().length > 0) {\n <st-raccourcis-de-dates\n class=\"st-date-field__raccourcis\"\n [titre]=\"titreDesRaccourcisLu()\"\n [disposition]=\"dispositionDesRaccourcis()\"\n [raccourcis]=\"raccourcisAffiches()\"\n [desactive]=\"disabled() || readonly()\"\n (choix)=\"choisirUnRaccourci($event)\"\n />\n }\n <!-- Le calendrier flotte sous le champ, dans la couche superieure (D132) : rien ne descend,\n rien ne bouge autour, comme la liste d'un select. -->\n @if (ouvert()) {\n <div class=\"st-date-field__couche\" [stCoucheAncree]=\"ligne\">\n <st-calendar\n class=\"st-date-field__calendrier\"\n [id]=\"identifiantCalendrier\"\n fermable\n [selection]=\"value()\"\n [dateMin]=\"dateMin()\"\n [dateMax]=\"dateMax()\"\n [annees]=\"annees()\"\n (choix)=\"choisir($event)\"\n (fermeture)=\"fermer(true)\"\n />\n </div>\n }\n</st-form-field>\n",
1200
+ 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{position:relative;max-inline-size:calc(var(--st-largeur-champ-sm) + var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)))}.st-date-field__champ:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-date-field__champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-date-field__champ:is(input,select){block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-date-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( (var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var(--st-interligne-sm)) / 2 - var(--st-epaisseur-fine) ) ) );padding-block:var(--_remplissage-bloc);padding-inline:var(--st-espacement-3-5);font-family:inherit;font-size:var(--st-taille-sm);font-weight:var(--st-graisse-normale);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-bordure-forte);border-radius:var(--st-commande-rayon, var(--st-rayon-md))}@media(pointer:coarse){.st-date-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( ( var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var( --st-interligne-md ) ) / 2 - var(--st-epaisseur-fine) ) ) );font-size:var(--st-taille-md);line-height:var(--st-interligne-md)}}.st-date-field__champ::placeholder{color:var(--st-couleur-texte-attenue);opacity:1}@media(hover:hover){.st-date-field__champ:hover:not(:disabled,:focus,[aria-invalid=true]){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-date-field__champ:focus-visible{border-color:var(--st-couleur-primaire)}.st-date-field__champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-date-field__champ[aria-invalid=true]:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-date-field__champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface);border-color:var(--st-couleur-bordure)}.st-date-field__champ:disabled::placeholder{color:var(--st-couleur-texte-desactive)}.st-date-field__champ:is(input,textarea):read-only:not(:disabled),.st-date-field__champ[aria-readonly=true]:not(:disabled){font-weight:var(--st-graisse-moyenne);background:var(--st-couleur-surface-enfoncee)}.st-date-field__champ{padding-inline-end:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut));font-family:var(--st-police-mono);font-weight:var(--st-graisse-semi);font-variant-numeric:var(--st-chiffres-alignes)}.st-date-field__bouton{position:absolute;inset-block:0;inset-inline-end:0;inline-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut));block-size:auto}@supports selector(:popover-open){.st-date-field__couche[popover]{position:fixed;inset:auto;padding:0;margin:0;overflow:visible;color:inherit;background:transparent;border:0}}.st-date-field__couche:popover-open{border-radius:var(--st-rayon-lg);box-shadow:var(--st-ombre-surelevee);transition:opacity var(--st-duree-normale) linear,translate var(--st-duree-normale) var(--st-courbe-entrant)}@starting-style{.st-date-field__couche:popover-open{opacity:0;translate:0 calc(-1 * var(--st-deplacement-court))}}@supports not selector(:popover-open){.st-date-field__couche{margin-block-start:var(--st-espacement-2)}}.st-date-field__raccourcis{margin-block-start:var(--st-espacement-3)}\n"],
1201
+ dependencies: [
1202
+ {
1203
+ kind: "component",
1204
+ type: StFormField,
1205
+ selector: "st-form-field",
1206
+ inputs: [
1207
+ "libelle",
1208
+ "complement",
1209
+ "disposition",
1210
+ "presentation",
1211
+ "libelleMasque",
1212
+ "descriptionsDuControle"
1213
+ ]
1214
+ },
1215
+ {
1216
+ kind: "directive",
1217
+ type: StControleDeChamp,
1218
+ selector: "[stControleDeChamp]"
1219
+ },
1220
+ {
1221
+ kind: "component",
1222
+ type: StIconButton,
1223
+ selector: "button[stIconButton]",
1224
+ inputs: [
1225
+ "icone",
1226
+ "etiquette",
1227
+ "variante",
1228
+ "taille",
1229
+ "tailleDuGlyphe",
1230
+ "enfonce",
1231
+ "iconeEnfoncee",
1232
+ "chargement",
1233
+ "indisponible",
1234
+ "raisonIndisponible"
1235
+ ]
1236
+ },
1237
+ {
1238
+ kind: "component",
1239
+ type: StCalendar,
1240
+ selector: "st-calendar",
1241
+ inputs: [
1242
+ "selection",
1243
+ "dateMin",
1244
+ "dateMax",
1245
+ "plage",
1246
+ "rejet",
1247
+ "annees",
1248
+ "pleineLargeur",
1249
+ "fermable"
1250
+ ],
1251
+ outputs: ["choix", "fermeture"]
1252
+ },
1253
+ {
1254
+ kind: "component",
1255
+ type: StRaccourcisDeDates,
1256
+ selector: "st-raccourcis-de-dates",
1257
+ inputs: [
1258
+ "titre",
1259
+ "disposition",
1260
+ "raccourcis",
1261
+ "desactive"
1262
+ ],
1263
+ outputs: ["choix"]
1264
+ },
1265
+ {
1266
+ kind: "directive",
1267
+ type: StCoucheAncree,
1268
+ selector: "[stCoucheAncree]",
1269
+ inputs: ["stCoucheAncree"]
1270
+ }
1271
+ ],
1272
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
1273
+ });
1274
+ };
1275
+ i0.ɵɵngDeclareClassMetadata({
1276
+ minVersion: "12.0.0",
1277
+ version: "22.2.0",
1278
+ ngImport: i0,
1279
+ type: StDateField,
1280
+ decorators: [{
1281
+ type: Component,
1282
+ args: [{
1283
+ selector: "st-date-field",
1284
+ changeDetection: ChangeDetectionStrategy.OnPush,
1285
+ imports: [
1286
+ StFormField,
1287
+ StControleDeChamp,
1288
+ StIconButton,
1289
+ StCalendar,
1290
+ StRaccourcisDeDates,
1291
+ StCoucheAncree
1292
+ ],
1293
+ host: {
1294
+ class: "st-date-field",
1295
+ "(focusout)": "sortie.surFocusout($event)",
1296
+ "(pointerdown)": "sortie.surPointeur()",
1297
+ "(keydown.escape)": "surEchap($event)"
1298
+ },
1299
+ template: "<st-form-field\n [libelle]=\"libelle()\"\n [aide]=\"aideLue()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n>\n <div #ligne class=\"st-date-field__ligne\">\n <input\n #champ\n class=\"st-date-field__champ\"\n stControleDeChamp\n type=\"text\"\n inputmode=\"numeric\"\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 (keydown)=\"surToucheDuChamp($event)\"\n (blur)=\"aLaSortieDuChamp()\"\n />\n <button\n #bouton\n class=\"st-date-field__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 (mousedown)=\"$event.preventDefault()\"\n (click)=\"basculer()\"\n ></button>\n </div>\n @if (raccourcis().length > 0) {\n <st-raccourcis-de-dates\n class=\"st-date-field__raccourcis\"\n [titre]=\"titreDesRaccourcisLu()\"\n [disposition]=\"dispositionDesRaccourcis()\"\n [raccourcis]=\"raccourcisAffiches()\"\n [desactive]=\"disabled() || readonly()\"\n (choix)=\"choisirUnRaccourci($event)\"\n />\n }\n <!-- Le calendrier flotte sous le champ, dans la couche superieure (D132) : rien ne descend,\n rien ne bouge autour, comme la liste d'un select. -->\n @if (ouvert()) {\n <div class=\"st-date-field__couche\" [stCoucheAncree]=\"ligne\">\n <st-calendar\n class=\"st-date-field__calendrier\"\n [id]=\"identifiantCalendrier\"\n fermable\n [selection]=\"value()\"\n [dateMin]=\"dateMin()\"\n [dateMax]=\"dateMax()\"\n [annees]=\"annees()\"\n (choix)=\"choisir($event)\"\n (fermeture)=\"fermer(true)\"\n />\n </div>\n }\n</st-form-field>\n",
1300
+ 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{position:relative;max-inline-size:calc(var(--st-largeur-champ-sm) + var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)))}.st-date-field__champ:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-date-field__champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-date-field__champ:is(input,select){block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-date-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( (var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var(--st-interligne-sm)) / 2 - var(--st-epaisseur-fine) ) ) );padding-block:var(--_remplissage-bloc);padding-inline:var(--st-espacement-3-5);font-family:inherit;font-size:var(--st-taille-sm);font-weight:var(--st-graisse-normale);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-bordure-forte);border-radius:var(--st-commande-rayon, var(--st-rayon-md))}@media(pointer:coarse){.st-date-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( ( var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var( --st-interligne-md ) ) / 2 - var(--st-epaisseur-fine) ) ) );font-size:var(--st-taille-md);line-height:var(--st-interligne-md)}}.st-date-field__champ::placeholder{color:var(--st-couleur-texte-attenue);opacity:1}@media(hover:hover){.st-date-field__champ:hover:not(:disabled,:focus,[aria-invalid=true]){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-date-field__champ:focus-visible{border-color:var(--st-couleur-primaire)}.st-date-field__champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-date-field__champ[aria-invalid=true]:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-date-field__champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface);border-color:var(--st-couleur-bordure)}.st-date-field__champ:disabled::placeholder{color:var(--st-couleur-texte-desactive)}.st-date-field__champ:is(input,textarea):read-only:not(:disabled),.st-date-field__champ[aria-readonly=true]:not(:disabled){font-weight:var(--st-graisse-moyenne);background:var(--st-couleur-surface-enfoncee)}.st-date-field__champ{padding-inline-end:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut));font-family:var(--st-police-mono);font-weight:var(--st-graisse-semi);font-variant-numeric:var(--st-chiffres-alignes)}.st-date-field__bouton{position:absolute;inset-block:0;inset-inline-end:0;inline-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut));block-size:auto}@supports selector(:popover-open){.st-date-field__couche[popover]{position:fixed;inset:auto;padding:0;margin:0;overflow:visible;color:inherit;background:transparent;border:0}}.st-date-field__couche:popover-open{border-radius:var(--st-rayon-lg);box-shadow:var(--st-ombre-surelevee);transition:opacity var(--st-duree-normale) linear,translate var(--st-duree-normale) var(--st-courbe-entrant)}@starting-style{.st-date-field__couche:popover-open{opacity:0;translate:0 calc(-1 * var(--st-deplacement-court))}}@supports not selector(:popover-open){.st-date-field__couche{margin-block-start:var(--st-espacement-2)}}.st-date-field__raccourcis{margin-block-start:var(--st-espacement-3)}\n"]
1301
+ }]
1302
+ }],
1303
+ propDecorators: {
1304
+ value: [{
1305
+ type: i0.Input,
1306
+ args: [{
1307
+ isSignal: true,
1308
+ alias: "value",
1309
+ required: false
1310
+ }]
1311
+ }, {
1312
+ type: i0.Output,
1313
+ args: ["valueChange"]
1314
+ }],
1315
+ dateMin: [{
1316
+ type: i0.Input,
1317
+ args: [{
1318
+ isSignal: true,
1319
+ alias: "dateMin",
1320
+ required: false
1321
+ }]
1322
+ }],
1323
+ dateMax: [{
1324
+ type: i0.Input,
1325
+ args: [{
1326
+ isSignal: true,
1327
+ alias: "dateMax",
1328
+ required: false
1329
+ }]
1330
+ }],
1331
+ autocomplete: [{
1332
+ type: i0.Input,
1333
+ args: [{
1334
+ isSignal: true,
1335
+ alias: "autocomplete",
1336
+ required: false
1337
+ }]
1338
+ }],
1339
+ annees: [{
1340
+ type: i0.Input,
1341
+ args: [{
1342
+ isSignal: true,
1343
+ alias: "annees",
1344
+ required: false
1345
+ }]
1346
+ }],
1347
+ raccourcis: [{
1348
+ type: i0.Input,
1349
+ args: [{
1350
+ isSignal: true,
1351
+ alias: "raccourcis",
1352
+ required: false
1353
+ }]
1354
+ }],
1355
+ dispositionDesRaccourcis: [{
1356
+ type: i0.Input,
1357
+ args: [{
1358
+ isSignal: true,
1359
+ alias: "dispositionDesRaccourcis",
1360
+ required: false
1361
+ }]
1362
+ }],
1363
+ titreDesRaccourcis: [{
1364
+ type: i0.Input,
1365
+ args: [{
1366
+ isSignal: true,
1367
+ alias: "titreDesRaccourcis",
1368
+ required: false
1369
+ }]
1370
+ }],
1371
+ calendrier: [{
1372
+ type: i0.ViewChild,
1373
+ args: [i0.forwardRef(() => StCalendar), { isSignal: true }]
1374
+ }],
1375
+ bouton: [{
1376
+ type: i0.ViewChild,
1377
+ args: ["bouton", {
1378
+ read: ElementRef,
1379
+ isSignal: true
1380
+ }]
1381
+ }]
1382
+ }
1383
+ });
1384
+ var StDateRange = class StDateRange extends ContratDeChamp {
1385
+ libelles = inject(ST_LIBELLES);
1386
+ locale = inject(ST_LOCALE);
1387
+ element = inject(ElementRef);
1388
+ injecteur = inject(Injector);
1389
+ value = model({
1390
+ debut: null,
1391
+ fin: null
1392
+ }, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
1393
+ dateMin = input(null, ...ngDevMode ? [{ debugName: "dateMin" }] : /* istanbul ignore next */ []);
1394
+ dateMax = input(null, ...ngDevMode ? [{ debugName: "dateMax" }] : /* istanbul ignore next */ []);
1395
+ libelleDebut = input(null, ...ngDevMode ? [{ debugName: "libelleDebut" }] : /* istanbul ignore next */ []);
1396
+ libelleFin = input(null, ...ngDevMode ? [{ debugName: "libelleFin" }] : /* istanbul ignore next */ []);
1397
+ annees = input(null, ...ngDevMode ? [{ debugName: "annees" }] : /* istanbul ignore next */ []);
1398
+ raccourcis = input([], ...ngDevMode ? [{ debugName: "raccourcis" }] : /* istanbul ignore next */ []);
1399
+ dispositionDesRaccourcis = input("liste", ...ngDevMode ? [{ debugName: "dispositionDesRaccourcis" }] : /* istanbul ignore next */ []);
1400
+ titreDesRaccourcis = input(null, ...ngDevMode ? [{ debugName: "titreDesRaccourcis" }] : /* istanbul ignore next */ []);
1401
+ variante = input("complete", ...ngDevMode ? [{ debugName: "variante" }] : /* istanbul ignore next */ []);
1402
+ presentation = input("libelle", ...ngDevMode ? [{ debugName: "presentation" }] : /* istanbul ignore next */ []);
1403
+ parties = ["debut", "fin"];
1404
+ ouvert = signal(null, ...ngDevMode ? [{ debugName: "ouvert" }] : /* istanbul ignore next */ []);
1405
+ deploye = signal(false, ...ngDevMode ? [{ debugName: "deploye" }] : /* istanbul ignore next */ []);
1406
+ identifiants = (() => {
1407
+ const base = inject(StIdentifiants).prochain("st-plage");
1408
+ return {
1409
+ debut: `${base}-debut`,
1410
+ fin: `${base}-fin`,
1411
+ boutons: {
1412
+ debut: `${base}-bouton-debut`,
1413
+ fin: `${base}-bouton-fin`
1414
+ },
1415
+ calendrier: `${base}-calendrier`,
1416
+ resume: `${base}-resume`,
1417
+ libelleDuResume: `${base}-resume-libelle`,
1418
+ valeurDuResume: `${base}-resume-valeur`,
1419
+ detail: `${base}-detail`
1420
+ };
1421
+ })();
1422
+ calendrier = viewChild(StCalendar, ...ngDevMode ? [{ debugName: "calendrier" }] : /* istanbul ignore next */ []);
1423
+ fieldset = viewChild(StFieldset, ...ngDevMode ? [{ debugName: "fieldset" }] : /* istanbul ignore next */ []);
1424
+ lignes = viewChildren("ligne", ...ngDevMode ? [{ debugName: "lignes" }] : /* istanbul ignore next */ []);
1425
+ quitte = signal(false, ...ngDevMode ? [{ debugName: "quitte" }] : /* istanbul ignore next */ []);
1426
+ saisie = transformedValue(this.value, {
1427
+ parse: (brut) => {
1428
+ const debut = this.lirePartie(brut.debut);
1429
+ const fin = this.lirePartie(brut.fin);
1430
+ const erreurs = [];
1431
+ if (debut === void 0) erreurs.push({
1432
+ kind: "date",
1433
+ partie: "debut"
1434
+ });
1435
+ if (fin === void 0) erreurs.push({
1436
+ kind: "date",
1437
+ partie: "fin"
1438
+ });
1439
+ const value = {
1440
+ debut: debut ?? null,
1441
+ fin: fin ?? null
1442
+ };
1443
+ return erreurs.length === 0 ? { value } : {
1444
+ value,
1445
+ error: erreurs
1446
+ };
1447
+ },
1448
+ format: (plage) => ({
1449
+ debut: this.formater(plage.debut),
1450
+ fin: this.formater(plage.fin)
1451
+ })
1452
+ });
1453
+ lectureInvalide = computed(() => this.saisie.parseErrors().length > 0, ...ngDevMode ? [{ debugName: "lectureInvalide" }] : /* istanbul ignore next */ []);
1454
+ etiquettes = computed(() => ({
1455
+ debut: this.libelleDebut() ?? this.libelles().dateDeDebut,
1456
+ fin: this.libelleFin() ?? this.libelles().dateDeFin
1457
+ }), ...ngDevMode ? [{ debugName: "etiquettes" }] : /* istanbul ignore next */ []);
1458
+ aideLue = computed(() => {
1459
+ const libelles = this.libelles();
1460
+ const locale = this.locale();
1461
+ const format = libelles.formatDeDate(motifLocal(libelles, locale), exempleDeDate(locale));
1462
+ const bornes = texteDesBornes$1(libelles, locale, this.dateMin(), this.dateMax());
1463
+ return [
1464
+ this.aideEtRaisons(),
1465
+ format,
1466
+ bornes
1467
+ ].filter((texte) => texte !== null).join(" ");
1468
+ }, ...ngDevMode ? [{ debugName: "aideLue" }] : /* istanbul ignore next */ []);
1469
+ raccourcisAffiches = computed(() => {
1470
+ const { debut, fin } = this.value();
1471
+ return this.raccourcis().map((raccourci) => ({
1472
+ cle: raccourci.cle,
1473
+ libelle: raccourci.libelle,
1474
+ precision: raccourci.precision ?? null,
1475
+ choisi: raccourci.plage.debut === debut && raccourci.plage.fin === fin
1476
+ }));
1477
+ }, ...ngDevMode ? [{ debugName: "raccourcisAffiches" }] : /* istanbul ignore next */ []);
1478
+ titreDesRaccourcisLu = computed(() => this.titreDesRaccourcis() ?? this.libelles().periodesPredefinies, ...ngDevMode ? [{ debugName: "titreDesRaccourcisLu" }] : /* istanbul ignore next */ []);
1479
+ periodeLue = computed(() => {
1480
+ const { debut, fin } = this.value();
1481
+ const libelles = this.libelles();
1482
+ const locale = this.locale();
1483
+ const format = new Intl.DateTimeFormat(locale, {
1484
+ day: "numeric",
1485
+ month: "short",
1486
+ year: "numeric",
1487
+ timeZone: "UTC"
1488
+ });
1489
+ const instant = (iso) => /* @__PURE__ */ new Date(`${iso}T00:00:00Z`);
1490
+ if (debut !== null && fin !== null) return format.formatRange(instant(debut), instant(fin));
1491
+ if (debut !== null) return libelles.aPartirDu(format.format(instant(debut)));
1492
+ if (fin !== null) return libelles.jusquAu(format.format(instant(fin)));
1493
+ return libelles.choisirUnePeriode;
1494
+ }, ...ngDevMode ? [{ debugName: "periodeLue" }] : /* istanbul ignore next */ []);
1495
+ periodeChoisie = computed(() => this.value().debut !== null || this.value().fin !== null, ...ngDevMode ? [{ debugName: "periodeChoisie" }] : /* istanbul ignore next */ []);
1496
+ sortie = new SortieDuComposant(this.element.nativeElement, () => {
1497
+ this.ouvert.set(null);
1498
+ this.deploye.set(false);
1499
+ this.quitte.set(true);
1500
+ this.touch.emit();
1501
+ });
1502
+ erreursAffichees = computed(() => {
1503
+ const libelles = this.libelles();
1504
+ const locale = this.locale();
1505
+ const etiquettes = this.etiquettes();
1506
+ return fusionnerErreurs(this.errors(), this.saisie.parseErrors()).map((erreur) => {
1507
+ const partie = this.partieDe(erreur);
1508
+ if (partie === null) return erreur;
1509
+ return {
1510
+ kind: erreur.kind,
1511
+ message: libelles.libelleEtMessage(etiquettes[partie], messageDErreur(erreur, libelles, locale))
1512
+ };
1513
+ });
1514
+ }, ...ngDevMode ? [{ debugName: "erreursAffichees" }] : /* istanbul ignore next */ []);
1515
+ enErreur = computed(() => {
1516
+ const parties = fusionnerErreurs(this.errors(), this.saisie.parseErrors()).map((erreur) => this.partieDe(erreur));
1517
+ const duGroupe = parties.includes(null);
1518
+ return {
1519
+ debut: duGroupe || parties.includes("debut"),
1520
+ fin: duGroupe || parties.includes("fin")
1521
+ };
1522
+ }, ...ngDevMode ? [{ debugName: "enErreur" }] : /* istanbul ignore next */ []);
1523
+ invalide = computed(() => {
1524
+ const affichees = this.touched() || this.quitte();
1525
+ const enErreur = this.enErreur();
1526
+ return {
1527
+ debut: affichees && enErreur.debut,
1528
+ fin: affichees && enErreur.fin
1529
+ };
1530
+ }, ...ngDevMode ? [{ debugName: "invalide" }] : /* istanbul ignore next */ []);
1531
+ descriptions = computed(() => {
1532
+ const groupe = this.fieldset();
1533
+ const invalide = this.invalide();
1534
+ const aide = groupe?.identifiants.aide ?? null;
1535
+ const erreur = groupe?.identifiants.erreur ?? null;
1536
+ const de = (partie) => [aide, invalide[partie] ? erreur : null].filter((id) => id !== null).join(" ") || null;
1537
+ return {
1538
+ debut: de("debut"),
1539
+ fin: de("fin"),
1540
+ erreur
1541
+ };
1542
+ }, ...ngDevMode ? [{ debugName: "descriptions" }] : /* istanbul ignore next */ []);
1543
+ choisirUnRaccourci(cle) {
1544
+ const raccourci = this.raccourcis().find((un) => un.cle === cle);
1545
+ if (raccourci === void 0) return;
1546
+ this.value.set({
1547
+ debut: raccourci.plage.debut,
1548
+ fin: raccourci.plage.fin
1549
+ });
1550
+ }
1551
+ basculerLeResume() {
1552
+ if (this.deploye()) {
1553
+ this.deploye.set(false);
1554
+ this.ouvert.set(null);
1555
+ return;
1556
+ }
1557
+ this.deploye.set(true);
1558
+ afterNextRender(() => {
1559
+ this.element.nativeElement.querySelector(".st-date-range__panneau button, .st-date-range__panneau input")?.focus();
1560
+ }, { injector: this.injecteur });
1561
+ }
1562
+ ancreDe(partie) {
1563
+ return this.lignes()[partie === "debut" ? 0 : 1]?.nativeElement ?? null;
1564
+ }
1565
+ surSaisie(partie, evenement) {
1566
+ this.saisie.set({
1567
+ ...this.saisie(),
1568
+ [partie]: this.texteSaisi(evenement)
1569
+ });
1570
+ }
1571
+ surToucheDuChamp(partie, evenement) {
1572
+ if (evenement.key !== "ArrowDown" || !evenement.altKey || this.ouvert() === partie) return;
1573
+ evenement.preventDefault();
1574
+ this.basculer(partie);
1575
+ }
1576
+ surEchap(evenement) {
1577
+ const partie = this.ouvert();
1578
+ if (partie !== null) {
1579
+ evenement.preventDefault();
1580
+ evenement.stopPropagation();
1581
+ this.fermer(partie, true);
1582
+ return;
1583
+ }
1584
+ if (!this.deploye()) return;
1585
+ evenement.preventDefault();
1586
+ evenement.stopPropagation();
1587
+ this.deploye.set(false);
1588
+ afterNextRender(() => {
1589
+ this.element.nativeElement.querySelector(`#${this.identifiants.resume}`)?.focus();
1590
+ }, { injector: this.injecteur });
1591
+ }
1592
+ aLaSortieDuChamp() {
1593
+ if (this.saisie.parseErrors().length === 0) {
1594
+ const plage = this.value();
1595
+ this.saisie.set({
1596
+ debut: this.formater(plage.debut),
1597
+ fin: this.formater(plage.fin)
1598
+ });
1599
+ }
1600
+ }
1601
+ basculer(partie) {
1602
+ if (this.ouvert() === partie) {
1603
+ this.fermer(partie, true);
1604
+ return;
1605
+ }
1606
+ this.ouvert.set(partie);
1607
+ afterNextRender(() => {
1608
+ this.calendrier()?.focus();
1609
+ }, { injector: this.injecteur });
1610
+ }
1611
+ bornes(partie) {
1612
+ const plage = this.value();
1613
+ return partie === "debut" ? {
1614
+ min: this.dateMin(),
1615
+ max: plage.fin ?? this.dateMax()
1616
+ } : {
1617
+ min: plage.debut ?? this.dateMin(),
1618
+ max: this.dateMax()
1619
+ };
1620
+ }
1621
+ choisir(partie, date) {
1622
+ this.value.set({
1623
+ ...this.value(),
1624
+ [partie]: date
1625
+ });
1626
+ this.fermer(partie);
1627
+ }
1628
+ fermer(partie, versLeBouton = false) {
1629
+ this.ouvert.set(null);
1630
+ const cible = versLeBouton ? this.identifiants.boutons[partie] : this.identifiants[partie];
1631
+ afterNextRender(() => {
1632
+ this.element.nativeElement.querySelector(`#${cible}`)?.focus();
1633
+ }, { injector: this.injecteur });
1634
+ }
1635
+ focus(options) {
1636
+ if (this.variante() === "resume" && !this.deploye()) {
1637
+ this.element.nativeElement.querySelector(`#${this.identifiants.resume}`)?.focus(options);
1638
+ return;
1639
+ }
1640
+ const partie = !this.enErreur().debut && this.enErreur().fin ? "fin" : "debut";
1641
+ this.element.nativeElement.querySelector(`#${this.identifiants[partie]}`)?.focus(options);
1642
+ }
1643
+ lirePartie(texte) {
1644
+ if (texte.trim() === "") return null;
1645
+ return lireDate(texte, this.locale()) ?? void 0;
1646
+ }
1647
+ formater(valeur) {
1648
+ return valeur === null ? "" : formaterDateSaisie(valeur, this.locale());
1649
+ }
1650
+ partieDe(erreur) {
1651
+ const partie = erreur.partie;
1652
+ if (partie === "debut" || partie === "fin") return partie;
1653
+ return erreur.kind === "plageDeDates" ? "fin" : null;
1654
+ }
1655
+ static ɵfac = i0.ɵɵngDeclareFactory({
1656
+ minVersion: "12.0.0",
1657
+ version: "22.2.0",
1658
+ ngImport: i0,
1659
+ type: StDateRange,
1660
+ deps: null,
1661
+ target: i0.ɵɵFactoryTarget.Component
1662
+ });
1663
+ static ɵcmp = i0.ɵɵngDeclareComponent({
1664
+ minVersion: "17.0.0",
1665
+ version: "22.2.0",
1666
+ type: StDateRange,
1667
+ isStandalone: true,
1668
+ selector: "st-date-range",
1669
+ inputs: {
1670
+ value: {
1671
+ classPropertyName: "value",
1672
+ publicName: "value",
1673
+ isSignal: true,
1674
+ isRequired: false,
1675
+ transformFunction: null
1676
+ },
1677
+ dateMin: {
1678
+ classPropertyName: "dateMin",
1679
+ publicName: "dateMin",
1680
+ isSignal: true,
1681
+ isRequired: false,
1682
+ transformFunction: null
1683
+ },
1684
+ dateMax: {
1685
+ classPropertyName: "dateMax",
1686
+ publicName: "dateMax",
1687
+ isSignal: true,
1688
+ isRequired: false,
1689
+ transformFunction: null
1690
+ },
1691
+ libelleDebut: {
1692
+ classPropertyName: "libelleDebut",
1693
+ publicName: "libelleDebut",
1694
+ isSignal: true,
1695
+ isRequired: false,
1696
+ transformFunction: null
1697
+ },
1698
+ libelleFin: {
1699
+ classPropertyName: "libelleFin",
1700
+ publicName: "libelleFin",
1701
+ isSignal: true,
1702
+ isRequired: false,
1703
+ transformFunction: null
1704
+ },
1705
+ annees: {
1706
+ classPropertyName: "annees",
1707
+ publicName: "annees",
1708
+ isSignal: true,
1709
+ isRequired: false,
1710
+ transformFunction: null
1711
+ },
1712
+ raccourcis: {
1713
+ classPropertyName: "raccourcis",
1714
+ publicName: "raccourcis",
1715
+ isSignal: true,
1716
+ isRequired: false,
1717
+ transformFunction: null
1718
+ },
1719
+ dispositionDesRaccourcis: {
1720
+ classPropertyName: "dispositionDesRaccourcis",
1721
+ publicName: "dispositionDesRaccourcis",
1722
+ isSignal: true,
1723
+ isRequired: false,
1724
+ transformFunction: null
1725
+ },
1726
+ titreDesRaccourcis: {
1727
+ classPropertyName: "titreDesRaccourcis",
1728
+ publicName: "titreDesRaccourcis",
1729
+ isSignal: true,
1730
+ isRequired: false,
1731
+ transformFunction: null
1732
+ },
1733
+ variante: {
1734
+ classPropertyName: "variante",
1735
+ publicName: "variante",
1736
+ isSignal: true,
1737
+ isRequired: false,
1738
+ transformFunction: null
1739
+ },
1740
+ presentation: {
1741
+ classPropertyName: "presentation",
1742
+ publicName: "presentation",
1743
+ isSignal: true,
1744
+ isRequired: false,
1745
+ transformFunction: null
1746
+ }
1747
+ },
1748
+ outputs: { value: "valueChange" },
1749
+ host: {
1750
+ listeners: {
1751
+ "focusout": "sortie.surFocusout($event)",
1752
+ "pointerdown": "sortie.surPointeur()",
1753
+ "keydown.escape": "surEchap($event)"
1754
+ },
1755
+ classAttribute: "st-date-range"
1756
+ },
1757
+ viewQueries: [
1758
+ {
1759
+ propertyName: "calendrier",
1760
+ first: true,
1761
+ predicate: StCalendar,
1762
+ descendants: true,
1763
+ isSignal: true
1764
+ },
1765
+ {
1766
+ propertyName: "fieldset",
1767
+ first: true,
1768
+ predicate: StFieldset,
1769
+ descendants: true,
1770
+ isSignal: true
1771
+ },
1772
+ {
1773
+ propertyName: "lignes",
1774
+ predicate: ["ligne"],
1775
+ descendants: true,
1776
+ isSignal: true
1777
+ }
1778
+ ],
1779
+ usesInheritance: true,
1780
+ ngImport: i0,
1781
+ template: "<!-- Variante resume (planche 4, barre de filtres) : un bouton-champ qui dit la periode et ouvre, en\n couche flottante sous lui (D132), le panneau des champs (motif « disclosure » : aria-expanded,\n aria-controls). Nomme par l'etiquette puis par la periode : « Periode comptable 1–30 sept. 2026 ». -->\n@if (variante() === 'resume') {\n <div class=\"st-date-range__resume\" [attr.data-presentation]=\"presentation()\">\n <span class=\"st-date-range__libelle-du-resume\" [id]=\"identifiants.libelleDuResume\">\n {{ libelle() }}\n </span>\n <button\n #boutonChamp\n class=\"st-date-range__bouton-champ\"\n type=\"button\"\n [id]=\"identifiants.resume\"\n [attr.aria-labelledby]=\"identifiants.libelleDuResume + ' ' + identifiants.valeurDuResume\"\n [attr.aria-expanded]=\"deploye() ? 'true' : 'false'\"\n [attr.aria-controls]=\"identifiants.detail\"\n [attr.aria-invalid]=\"invalide().debut || invalide().fin ? 'true' : null\"\n [disabled]=\"disabled()\"\n (click)=\"basculerLeResume()\"\n >\n <st-icon class=\"st-date-range__icone-du-resume\" nom=\"calendrier\" taille=\"20\" />\n <!-- Sens du texte lu dans la periode elle-meme : « 1–30 sept. 2026 » ne se renverse pas dans\n une page de droite a gauche. -->\n <span\n class=\"st-date-range__valeur-du-resume\"\n dir=\"auto\"\n [id]=\"identifiants.valeurDuResume\"\n [attr.data-vide]=\"periodeChoisie() ? null : ''\"\n >{{ periodeLue() }}</span\n >\n </button>\n </div>\n @if (deploye()) {\n <div class=\"st-date-range__panneau\" [stCoucheAncree]=\"boutonChamp\">\n <ng-container *ngTemplateOutlet=\"champs\" />\n </div>\n }\n} @else {\n <ng-container *ngTemplateOutlet=\"champs\" />\n}\n\n<ng-template #champs>\n <st-fieldset\n [id]=\"identifiants.detail\"\n [legende]=\"libelle()\"\n [aide]=\"aideLue()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n >\n @if (raccourcis().length > 0) {\n <st-raccourcis-de-dates\n class=\"st-date-range__raccourcis\"\n [titre]=\"titreDesRaccourcisLu()\"\n [disposition]=\"dispositionDesRaccourcis()\"\n [raccourcis]=\"raccourcisAffiches()\"\n [desactive]=\"disabled() || readonly()\"\n (choix)=\"choisirUnRaccourci($event)\"\n />\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 #ligne class=\"st-date-range__ligne\">\n <input\n #champ\n class=\"st-date-range__champ\"\n type=\"text\"\n inputmode=\"numeric\"\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 [attr.aria-describedby]=\"descriptions()[partie]\"\n [attr.aria-errormessage]=\"invalide()[partie] ? descriptions().erreur : null\"\n [attr.aria-required]=\"required() ? 'true' : null\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly()\"\n (input)=\"surSaisie(partie, $event)\"\n (keydown)=\"surToucheDuChamp(partie, $event)\"\n (blur)=\"aLaSortieDuChamp()\"\n />\n <button\n class=\"st-date-range__bouton\"\n stIconButton\n type=\"button\"\n icone=\"calendrier\"\n [id]=\"identifiants.boutons[partie]\"\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 (mousedown)=\"$event.preventDefault()\"\n (click)=\"basculer(partie)\"\n ></button>\n </div>\n </div>\n }\n </div>\n <!-- Le calendrier de la partie ouverte flotte sous sa ligne, dans la couche superieure (D132) :\n rien ne descend, rien ne bouge autour, comme la liste d'un select. -->\n @if (ouvert(); as partie) {\n <div class=\"st-date-range__couche\" [stCoucheAncree]=\"ancreDe(partie)\">\n <st-calendar\n class=\"st-date-range__calendrier\"\n [id]=\"identifiants.calendrier\"\n fermable\n [selection]=\"value()[partie]\"\n [plage]=\"value()\"\n [dateMin]=\"bornes(partie).min\"\n [dateMax]=\"bornes(partie).max\"\n [annees]=\"annees()\"\n (choix)=\"choisir(partie, $event)\"\n (fermeture)=\"fermer(partie, true)\"\n />\n </div>\n }\n </st-fieldset>\n</ng-template>\n",
1782
+ 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{position:relative;inline-size:calc(var(--st-largeur-champ-sm) + var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)));max-inline-size:100%}.st-date-range__champ:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-date-range__champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-date-range__champ:is(input,select){block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-date-range__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( (var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var(--st-interligne-sm)) / 2 - var(--st-epaisseur-fine) ) ) );padding-block:var(--_remplissage-bloc);padding-inline:var(--st-espacement-3-5);font-family:inherit;font-size:var(--st-taille-sm);font-weight:var(--st-graisse-normale);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-bordure-forte);border-radius:var(--st-commande-rayon, var(--st-rayon-md))}@media(pointer:coarse){.st-date-range__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( ( var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var( --st-interligne-md ) ) / 2 - var(--st-epaisseur-fine) ) ) );font-size:var(--st-taille-md);line-height:var(--st-interligne-md)}}.st-date-range__champ::placeholder{color:var(--st-couleur-texte-attenue);opacity:1}@media(hover:hover){.st-date-range__champ:hover:not(:disabled,:focus,[aria-invalid=true]){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-date-range__champ:focus-visible{border-color:var(--st-couleur-primaire)}.st-date-range__champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-date-range__champ[aria-invalid=true]:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-date-range__champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface);border-color:var(--st-couleur-bordure)}.st-date-range__champ:disabled::placeholder{color:var(--st-couleur-texte-desactive)}.st-date-range__champ:is(input,textarea):read-only:not(:disabled),.st-date-range__champ[aria-readonly=true]:not(:disabled){font-weight:var(--st-graisse-moyenne);background:var(--st-couleur-surface-enfoncee)}.st-date-range__champ{padding-inline-end:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut));font-family:var(--st-police-mono);font-weight:var(--st-graisse-semi);font-variant-numeric:var(--st-chiffres-alignes)}.st-date-range__bouton{position:absolute;inset-block:0;inset-inline-end:0;inline-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut));block-size:auto}@supports selector(:popover-open){.st-date-range__couche[popover]{position:fixed;inset:auto;padding:0;margin:0;overflow:visible;color:inherit;background:transparent;border:0}}.st-date-range__couche:popover-open{border-radius:var(--st-rayon-lg);box-shadow:var(--st-ombre-surelevee);transition:opacity var(--st-duree-normale) linear,translate var(--st-duree-normale) var(--st-courbe-entrant)}@starting-style{.st-date-range__couche:popover-open{opacity:0;translate:0 calc(-1 * var(--st-deplacement-court))}}@supports not selector(:popover-open){.st-date-range__couche{margin-block-start:var(--st-espacement-3)}}@supports selector(:popover-open){.st-date-range__panneau[popover]{position:fixed;inset:auto;padding:0;margin:0;overflow:visible;color:inherit;background:transparent;border:0}}.st-date-range__panneau:popover-open{border-radius:var(--st-rayon-lg);box-shadow:var(--st-ombre-surelevee);transition:opacity var(--st-duree-normale) linear,translate var(--st-duree-normale) var(--st-courbe-entrant)}@starting-style{.st-date-range__panneau:popover-open{opacity:0;translate:0 calc(-1 * var(--st-deplacement-court))}}.st-date-range__panneau,.st-date-range__panneau[popover]{box-sizing:border-box;inline-size:max-content;max-inline-size:min(40rem,100vw - 2 * var(--st-espacement-2));padding:var(--st-espacement-4);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-surface-active);border-radius:var(--st-rayon-lg)}@supports not selector(:popover-open){.st-date-range__panneau{margin-block-start:var(--st-espacement-3)}}.st-date-range__raccourcis{margin-block-end:var(--st-espacement-4)}.st-date-range__resume{display:flex;flex-direction:column;gap:var(--st-espacement-1)}.st-date-range__libelle-du-resume{font-size:var(--st-taille-sm);font-weight:var(--st-graisse-moyenne);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte)}.st-date-range__resume[data-presentation=micro-capitales] .st-date-range__libelle-du-resume{color:var(--st-couleur-texte-discret);font-size:var(--st-taille-2xs);line-height:var(--st-interligne-2xs);font-weight:var(--st-graisse-semi);letter-spacing:var(--st-interlettrage-capitales);text-transform:uppercase}.st-date-range__bouton-champ:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-date-range__bouton-champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-date-range__bouton-champ:is(input,select){block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-date-range__bouton-champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( (var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var(--st-interligne-sm)) / 2 - var(--st-epaisseur-fine) ) ) );padding-block:var(--_remplissage-bloc);padding-inline:var(--st-espacement-3-5);font-family:inherit;font-size:var(--st-taille-sm);font-weight:var(--st-graisse-normale);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-bordure-forte);border-radius:var(--st-commande-rayon, var(--st-rayon-md))}@media(pointer:coarse){.st-date-range__bouton-champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( ( var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var( --st-interligne-md ) ) / 2 - var(--st-epaisseur-fine) ) ) );font-size:var(--st-taille-md);line-height:var(--st-interligne-md)}}.st-date-range__bouton-champ::placeholder{color:var(--st-couleur-texte-attenue);opacity:1}@media(hover:hover){.st-date-range__bouton-champ:hover:not(:disabled,:focus,[aria-invalid=true]){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-date-range__bouton-champ:focus-visible{border-color:var(--st-couleur-primaire)}.st-date-range__bouton-champ[aria-invalid=true]:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-date-range__bouton-champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface);border-color:var(--st-couleur-bordure)}.st-date-range__bouton-champ:disabled::placeholder{color:var(--st-couleur-texte-desactive)}.st-date-range__bouton-champ:is(input,textarea):read-only:not(:disabled),.st-date-range__bouton-champ[aria-readonly=true]:not(:disabled){font-weight:var(--st-graisse-moyenne);background:var(--st-couleur-surface-enfoncee)}.st-date-range__bouton-champ{display:flex;gap:var(--st-espacement-2);align-items:center;justify-content:flex-start;text-align:start;cursor:pointer}@media(hover:hover){.st-date-range__bouton-champ:hover:not(:disabled,:focus-visible){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-date-range__bouton-champ[aria-expanded=true]{border-color:var(--st-couleur-primaire)}.st-date-range__bouton-champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-date-range__bouton-champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed}.st-date-range__valeur-du-resume{min-inline-size:0;overflow-wrap:anywhere;font-variant-numeric:var(--st-chiffres-alignes)}.st-date-range__valeur-du-resume[data-vide]{color:var(--st-couleur-texte-attenue)}.st-date-range__icone-du-resume{flex:none;color:var(--st-couleur-texte-discret)}\n"],
1783
+ dependencies: [
1784
+ {
1785
+ kind: "component",
1786
+ type: StFieldset,
1787
+ selector: "st-fieldset",
1788
+ inputs: [
1789
+ "legende",
1790
+ "contenu",
1791
+ "disposition",
1792
+ "toutesLesErreurs",
1793
+ "choixExclusif",
1794
+ "readonly",
1795
+ "disabled",
1796
+ "hidden",
1797
+ "decritPar"
1798
+ ]
1799
+ },
1800
+ {
1801
+ kind: "component",
1802
+ type: StIconButton,
1803
+ selector: "button[stIconButton]",
1804
+ inputs: [
1805
+ "icone",
1806
+ "etiquette",
1807
+ "variante",
1808
+ "taille",
1809
+ "tailleDuGlyphe",
1810
+ "enfonce",
1811
+ "iconeEnfoncee",
1812
+ "chargement",
1813
+ "indisponible",
1814
+ "raisonIndisponible"
1815
+ ]
1816
+ },
1817
+ {
1818
+ kind: "component",
1819
+ type: StCalendar,
1820
+ selector: "st-calendar",
1821
+ inputs: [
1822
+ "selection",
1823
+ "dateMin",
1824
+ "dateMax",
1825
+ "plage",
1826
+ "rejet",
1827
+ "annees",
1828
+ "pleineLargeur",
1829
+ "fermable"
1830
+ ],
1831
+ outputs: ["choix", "fermeture"]
1832
+ },
1833
+ {
1834
+ kind: "component",
1835
+ type: StIcon,
1836
+ selector: "st-icon",
1837
+ inputs: [
1838
+ "icone",
1839
+ "nom",
1840
+ "variante",
1841
+ "sprite",
1842
+ "nomMetier",
1843
+ "taille",
1844
+ "ton",
1845
+ "etiquette",
1846
+ "miroir"
1847
+ ]
1848
+ },
1849
+ {
1850
+ kind: "component",
1851
+ type: StRaccourcisDeDates,
1852
+ selector: "st-raccourcis-de-dates",
1853
+ inputs: [
1854
+ "titre",
1855
+ "disposition",
1856
+ "raccourcis",
1857
+ "desactive"
1858
+ ],
1859
+ outputs: ["choix"]
1860
+ },
1861
+ {
1862
+ kind: "directive",
1863
+ type: StCoucheAncree,
1864
+ selector: "[stCoucheAncree]",
1865
+ inputs: ["stCoucheAncree"]
1866
+ },
1867
+ {
1868
+ kind: "directive",
1869
+ type: NgTemplateOutlet,
1870
+ selector: "[ngTemplateOutlet]",
1871
+ inputs: [
1872
+ "ngTemplateOutletContext",
1873
+ "ngTemplateOutlet",
1874
+ "ngTemplateOutletInjector"
1875
+ ]
1876
+ }
1877
+ ],
1878
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
1879
+ });
1880
+ };
1881
+ i0.ɵɵngDeclareClassMetadata({
1882
+ minVersion: "12.0.0",
1883
+ version: "22.2.0",
1884
+ ngImport: i0,
1885
+ type: StDateRange,
1886
+ decorators: [{
1887
+ type: Component,
1888
+ args: [{
1889
+ selector: "st-date-range",
1890
+ changeDetection: ChangeDetectionStrategy.OnPush,
1891
+ imports: [
1892
+ StFieldset,
1893
+ StIconButton,
1894
+ StCalendar,
1895
+ StIcon,
1896
+ StRaccourcisDeDates,
1897
+ StCoucheAncree,
1898
+ NgTemplateOutlet
1899
+ ],
1900
+ host: {
1901
+ class: "st-date-range",
1902
+ "(focusout)": "sortie.surFocusout($event)",
1903
+ "(pointerdown)": "sortie.surPointeur()",
1904
+ "(keydown.escape)": "surEchap($event)"
1905
+ },
1906
+ template: "<!-- Variante resume (planche 4, barre de filtres) : un bouton-champ qui dit la periode et ouvre, en\n couche flottante sous lui (D132), le panneau des champs (motif « disclosure » : aria-expanded,\n aria-controls). Nomme par l'etiquette puis par la periode : « Periode comptable 1–30 sept. 2026 ». -->\n@if (variante() === 'resume') {\n <div class=\"st-date-range__resume\" [attr.data-presentation]=\"presentation()\">\n <span class=\"st-date-range__libelle-du-resume\" [id]=\"identifiants.libelleDuResume\">\n {{ libelle() }}\n </span>\n <button\n #boutonChamp\n class=\"st-date-range__bouton-champ\"\n type=\"button\"\n [id]=\"identifiants.resume\"\n [attr.aria-labelledby]=\"identifiants.libelleDuResume + ' ' + identifiants.valeurDuResume\"\n [attr.aria-expanded]=\"deploye() ? 'true' : 'false'\"\n [attr.aria-controls]=\"identifiants.detail\"\n [attr.aria-invalid]=\"invalide().debut || invalide().fin ? 'true' : null\"\n [disabled]=\"disabled()\"\n (click)=\"basculerLeResume()\"\n >\n <st-icon class=\"st-date-range__icone-du-resume\" nom=\"calendrier\" taille=\"20\" />\n <!-- Sens du texte lu dans la periode elle-meme : « 1–30 sept. 2026 » ne se renverse pas dans\n une page de droite a gauche. -->\n <span\n class=\"st-date-range__valeur-du-resume\"\n dir=\"auto\"\n [id]=\"identifiants.valeurDuResume\"\n [attr.data-vide]=\"periodeChoisie() ? null : ''\"\n >{{ periodeLue() }}</span\n >\n </button>\n </div>\n @if (deploye()) {\n <div class=\"st-date-range__panneau\" [stCoucheAncree]=\"boutonChamp\">\n <ng-container *ngTemplateOutlet=\"champs\" />\n </div>\n }\n} @else {\n <ng-container *ngTemplateOutlet=\"champs\" />\n}\n\n<ng-template #champs>\n <st-fieldset\n [id]=\"identifiants.detail\"\n [legende]=\"libelle()\"\n [aide]=\"aideLue()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n >\n @if (raccourcis().length > 0) {\n <st-raccourcis-de-dates\n class=\"st-date-range__raccourcis\"\n [titre]=\"titreDesRaccourcisLu()\"\n [disposition]=\"dispositionDesRaccourcis()\"\n [raccourcis]=\"raccourcisAffiches()\"\n [desactive]=\"disabled() || readonly()\"\n (choix)=\"choisirUnRaccourci($event)\"\n />\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 #ligne class=\"st-date-range__ligne\">\n <input\n #champ\n class=\"st-date-range__champ\"\n type=\"text\"\n inputmode=\"numeric\"\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 [attr.aria-describedby]=\"descriptions()[partie]\"\n [attr.aria-errormessage]=\"invalide()[partie] ? descriptions().erreur : null\"\n [attr.aria-required]=\"required() ? 'true' : null\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly()\"\n (input)=\"surSaisie(partie, $event)\"\n (keydown)=\"surToucheDuChamp(partie, $event)\"\n (blur)=\"aLaSortieDuChamp()\"\n />\n <button\n class=\"st-date-range__bouton\"\n stIconButton\n type=\"button\"\n icone=\"calendrier\"\n [id]=\"identifiants.boutons[partie]\"\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 (mousedown)=\"$event.preventDefault()\"\n (click)=\"basculer(partie)\"\n ></button>\n </div>\n </div>\n }\n </div>\n <!-- Le calendrier de la partie ouverte flotte sous sa ligne, dans la couche superieure (D132) :\n rien ne descend, rien ne bouge autour, comme la liste d'un select. -->\n @if (ouvert(); as partie) {\n <div class=\"st-date-range__couche\" [stCoucheAncree]=\"ancreDe(partie)\">\n <st-calendar\n class=\"st-date-range__calendrier\"\n [id]=\"identifiants.calendrier\"\n fermable\n [selection]=\"value()[partie]\"\n [plage]=\"value()\"\n [dateMin]=\"bornes(partie).min\"\n [dateMax]=\"bornes(partie).max\"\n [annees]=\"annees()\"\n (choix)=\"choisir(partie, $event)\"\n (fermeture)=\"fermer(partie, true)\"\n />\n </div>\n }\n </st-fieldset>\n</ng-template>\n",
1907
+ 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{position:relative;inline-size:calc(var(--st-largeur-champ-sm) + var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)));max-inline-size:100%}.st-date-range__champ:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-date-range__champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-date-range__champ:is(input,select){block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-date-range__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( (var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var(--st-interligne-sm)) / 2 - var(--st-epaisseur-fine) ) ) );padding-block:var(--_remplissage-bloc);padding-inline:var(--st-espacement-3-5);font-family:inherit;font-size:var(--st-taille-sm);font-weight:var(--st-graisse-normale);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-bordure-forte);border-radius:var(--st-commande-rayon, var(--st-rayon-md))}@media(pointer:coarse){.st-date-range__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( ( var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var( --st-interligne-md ) ) / 2 - var(--st-epaisseur-fine) ) ) );font-size:var(--st-taille-md);line-height:var(--st-interligne-md)}}.st-date-range__champ::placeholder{color:var(--st-couleur-texte-attenue);opacity:1}@media(hover:hover){.st-date-range__champ:hover:not(:disabled,:focus,[aria-invalid=true]){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-date-range__champ:focus-visible{border-color:var(--st-couleur-primaire)}.st-date-range__champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-date-range__champ[aria-invalid=true]:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-date-range__champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface);border-color:var(--st-couleur-bordure)}.st-date-range__champ:disabled::placeholder{color:var(--st-couleur-texte-desactive)}.st-date-range__champ:is(input,textarea):read-only:not(:disabled),.st-date-range__champ[aria-readonly=true]:not(:disabled){font-weight:var(--st-graisse-moyenne);background:var(--st-couleur-surface-enfoncee)}.st-date-range__champ{padding-inline-end:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut));font-family:var(--st-police-mono);font-weight:var(--st-graisse-semi);font-variant-numeric:var(--st-chiffres-alignes)}.st-date-range__bouton{position:absolute;inset-block:0;inset-inline-end:0;inline-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut));block-size:auto}@supports selector(:popover-open){.st-date-range__couche[popover]{position:fixed;inset:auto;padding:0;margin:0;overflow:visible;color:inherit;background:transparent;border:0}}.st-date-range__couche:popover-open{border-radius:var(--st-rayon-lg);box-shadow:var(--st-ombre-surelevee);transition:opacity var(--st-duree-normale) linear,translate var(--st-duree-normale) var(--st-courbe-entrant)}@starting-style{.st-date-range__couche:popover-open{opacity:0;translate:0 calc(-1 * var(--st-deplacement-court))}}@supports not selector(:popover-open){.st-date-range__couche{margin-block-start:var(--st-espacement-3)}}@supports selector(:popover-open){.st-date-range__panneau[popover]{position:fixed;inset:auto;padding:0;margin:0;overflow:visible;color:inherit;background:transparent;border:0}}.st-date-range__panneau:popover-open{border-radius:var(--st-rayon-lg);box-shadow:var(--st-ombre-surelevee);transition:opacity var(--st-duree-normale) linear,translate var(--st-duree-normale) var(--st-courbe-entrant)}@starting-style{.st-date-range__panneau:popover-open{opacity:0;translate:0 calc(-1 * var(--st-deplacement-court))}}.st-date-range__panneau,.st-date-range__panneau[popover]{box-sizing:border-box;inline-size:max-content;max-inline-size:min(40rem,100vw - 2 * var(--st-espacement-2));padding:var(--st-espacement-4);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-surface-active);border-radius:var(--st-rayon-lg)}@supports not selector(:popover-open){.st-date-range__panneau{margin-block-start:var(--st-espacement-3)}}.st-date-range__raccourcis{margin-block-end:var(--st-espacement-4)}.st-date-range__resume{display:flex;flex-direction:column;gap:var(--st-espacement-1)}.st-date-range__libelle-du-resume{font-size:var(--st-taille-sm);font-weight:var(--st-graisse-moyenne);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte)}.st-date-range__resume[data-presentation=micro-capitales] .st-date-range__libelle-du-resume{color:var(--st-couleur-texte-discret);font-size:var(--st-taille-2xs);line-height:var(--st-interligne-2xs);font-weight:var(--st-graisse-semi);letter-spacing:var(--st-interlettrage-capitales);text-transform:uppercase}.st-date-range__bouton-champ:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-date-range__bouton-champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-date-range__bouton-champ:is(input,select){block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-date-range__bouton-champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( (var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var(--st-interligne-sm)) / 2 - var(--st-epaisseur-fine) ) ) );padding-block:var(--_remplissage-bloc);padding-inline:var(--st-espacement-3-5);font-family:inherit;font-size:var(--st-taille-sm);font-weight:var(--st-graisse-normale);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-bordure-forte);border-radius:var(--st-commande-rayon, var(--st-rayon-md))}@media(pointer:coarse){.st-date-range__bouton-champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( ( var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var( --st-interligne-md ) ) / 2 - var(--st-epaisseur-fine) ) ) );font-size:var(--st-taille-md);line-height:var(--st-interligne-md)}}.st-date-range__bouton-champ::placeholder{color:var(--st-couleur-texte-attenue);opacity:1}@media(hover:hover){.st-date-range__bouton-champ:hover:not(:disabled,:focus,[aria-invalid=true]){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-date-range__bouton-champ:focus-visible{border-color:var(--st-couleur-primaire)}.st-date-range__bouton-champ[aria-invalid=true]:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-date-range__bouton-champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface);border-color:var(--st-couleur-bordure)}.st-date-range__bouton-champ:disabled::placeholder{color:var(--st-couleur-texte-desactive)}.st-date-range__bouton-champ:is(input,textarea):read-only:not(:disabled),.st-date-range__bouton-champ[aria-readonly=true]:not(:disabled){font-weight:var(--st-graisse-moyenne);background:var(--st-couleur-surface-enfoncee)}.st-date-range__bouton-champ{display:flex;gap:var(--st-espacement-2);align-items:center;justify-content:flex-start;text-align:start;cursor:pointer}@media(hover:hover){.st-date-range__bouton-champ:hover:not(:disabled,:focus-visible){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-date-range__bouton-champ[aria-expanded=true]{border-color:var(--st-couleur-primaire)}.st-date-range__bouton-champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-date-range__bouton-champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed}.st-date-range__valeur-du-resume{min-inline-size:0;overflow-wrap:anywhere;font-variant-numeric:var(--st-chiffres-alignes)}.st-date-range__valeur-du-resume[data-vide]{color:var(--st-couleur-texte-attenue)}.st-date-range__icone-du-resume{flex:none;color:var(--st-couleur-texte-discret)}\n"]
1908
+ }]
1909
+ }],
1910
+ propDecorators: {
1911
+ value: [{
1912
+ type: i0.Input,
1913
+ args: [{
1914
+ isSignal: true,
1915
+ alias: "value",
1916
+ required: false
1917
+ }]
1918
+ }, {
1919
+ type: i0.Output,
1920
+ args: ["valueChange"]
1921
+ }],
1922
+ dateMin: [{
1923
+ type: i0.Input,
1924
+ args: [{
1925
+ isSignal: true,
1926
+ alias: "dateMin",
1927
+ required: false
1928
+ }]
1929
+ }],
1930
+ dateMax: [{
1931
+ type: i0.Input,
1932
+ args: [{
1933
+ isSignal: true,
1934
+ alias: "dateMax",
1935
+ required: false
1936
+ }]
1937
+ }],
1938
+ libelleDebut: [{
1939
+ type: i0.Input,
1940
+ args: [{
1941
+ isSignal: true,
1942
+ alias: "libelleDebut",
1943
+ required: false
1944
+ }]
1945
+ }],
1946
+ libelleFin: [{
1947
+ type: i0.Input,
1948
+ args: [{
1949
+ isSignal: true,
1950
+ alias: "libelleFin",
1951
+ required: false
1952
+ }]
1953
+ }],
1954
+ annees: [{
1955
+ type: i0.Input,
1956
+ args: [{
1957
+ isSignal: true,
1958
+ alias: "annees",
1959
+ required: false
1960
+ }]
1961
+ }],
1962
+ raccourcis: [{
1963
+ type: i0.Input,
1964
+ args: [{
1965
+ isSignal: true,
1966
+ alias: "raccourcis",
1967
+ required: false
1968
+ }]
1969
+ }],
1970
+ dispositionDesRaccourcis: [{
1971
+ type: i0.Input,
1972
+ args: [{
1973
+ isSignal: true,
1974
+ alias: "dispositionDesRaccourcis",
1975
+ required: false
1976
+ }]
1977
+ }],
1978
+ titreDesRaccourcis: [{
1979
+ type: i0.Input,
1980
+ args: [{
1981
+ isSignal: true,
1982
+ alias: "titreDesRaccourcis",
1983
+ required: false
1984
+ }]
1985
+ }],
1986
+ variante: [{
1987
+ type: i0.Input,
1988
+ args: [{
1989
+ isSignal: true,
1990
+ alias: "variante",
1991
+ required: false
1992
+ }]
1993
+ }],
1994
+ presentation: [{
1995
+ type: i0.Input,
1996
+ args: [{
1997
+ isSignal: true,
1998
+ alias: "presentation",
1999
+ required: false
2000
+ }]
2001
+ }],
2002
+ calendrier: [{
2003
+ type: i0.ViewChild,
2004
+ args: [i0.forwardRef(() => StCalendar), { isSignal: true }]
2005
+ }],
2006
+ fieldset: [{
2007
+ type: i0.ViewChild,
2008
+ args: [i0.forwardRef(() => StFieldset), { isSignal: true }]
2009
+ }],
2010
+ lignes: [{
2011
+ type: i0.ViewChildren,
2012
+ args: ["ligne", { isSignal: true }]
2013
+ }]
2014
+ }
2015
+ });
2016
+ const borneLisible = (heure) => heure !== null && estHeureIso(heure) ? heure : null;
2017
+ function texteDesBornes(libelles, locale, borneMin, borneMax) {
2018
+ const min = borneLisible(borneMin);
2019
+ const max = borneLisible(borneMax);
2020
+ const ecrire = (heure) => formaterHeureSaisie(heure, locale);
2021
+ if (min !== null && max !== null) return libelles.entreHeures(ecrire(min), ecrire(max));
2022
+ if (min !== null) return libelles.heureTropTot(ecrire(min));
2023
+ if (max !== null) return libelles.heureTropTard(ecrire(max));
2024
+ return null;
2025
+ }
2026
+ var StTimeField = class StTimeField extends ContratDeChamp {
2027
+ libelles = inject(ST_LIBELLES);
2028
+ locale = inject(ST_LOCALE);
2029
+ value = model(null, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
2030
+ heureMin = input(null, ...ngDevMode ? [{ debugName: "heureMin" }] : /* istanbul ignore next */ []);
2031
+ heureMax = input(null, ...ngDevMode ? [{ debugName: "heureMax" }] : /* istanbul ignore next */ []);
2032
+ secondes = input(false, {
2033
+ ...ngDevMode ? { debugName: "secondes" } : /* istanbul ignore next */ {},
2034
+ transform: booleanAttribute
2035
+ });
2036
+ fuseau = input(null, ...ngDevMode ? [{ debugName: "fuseau" }] : /* istanbul ignore next */ []);
2037
+ autocomplete = input(null, ...ngDevMode ? [{ debugName: "autocomplete" }] : /* istanbul ignore next */ []);
2038
+ quitte = signal(false, ...ngDevMode ? [{ debugName: "quitte" }] : /* istanbul ignore next */ []);
2039
+ saisie = transformedValue(this.value, {
2040
+ parse: (texte) => {
2041
+ if (texte.trim() === "") return { value: null };
2042
+ const secondes = this.secondes();
2043
+ const heure = lireHeure(texte, this.locale(), { secondes });
2044
+ return heure === null ? {
2045
+ value: null,
2046
+ error: {
2047
+ kind: "heure",
2048
+ secondes
2049
+ }
2050
+ } : { value: heure };
2051
+ },
2052
+ format: (valeur) => this.formater(valeur)
2053
+ });
2054
+ lectureInvalide = computed(() => this.saisie.parseErrors().length > 0, ...ngDevMode ? [{ debugName: "lectureInvalide" }] : /* istanbul ignore next */ []);
2055
+ clavier = computed(() => heureSurDouze(this.locale()) ? "text" : "numeric", ...ngDevMode ? [{ debugName: "clavier" }] : /* istanbul ignore next */ []);
2056
+ instantDuNomDeFuseau = Date.now();
2057
+ aideLue = computed(() => {
2058
+ const libelles = this.libelles();
2059
+ const locale = this.locale();
2060
+ const secondes = this.secondes();
2061
+ const format = libelles.formatDeDate(motifDHeureLocal(libelles, locale, secondes), exempleDHeure(locale, secondes));
2062
+ const bornes = texteDesBornes(libelles, locale, this.heureMin(), this.heureMax());
2063
+ const fuseau = this.fuseau();
2064
+ const zone = fuseau === null ? null : libelles.fuseauHoraire(nomDuFuseau(fuseau, locale, this.instantDuNomDeFuseau));
2065
+ return [
2066
+ this.aideEtRaisons(),
2067
+ format,
2068
+ bornes,
2069
+ zone
2070
+ ].filter((texte) => texte !== null).join(" ");
2071
+ }, ...ngDevMode ? [{ debugName: "aideLue" }] : /* istanbul ignore next */ []);
2072
+ constructor() {
2073
+ super();
2074
+ effect(() => {
2075
+ if (!isDevMode()) return;
2076
+ for (const borne of [this.heureMin(), this.heureMax()]) {
2077
+ if (borne === null || estHeureIso(borne)) continue;
2078
+ console.warn(`[st-time-field] Borne illisible ("${borne}") : elle n'est pas dite dans l'aide. Transmettre une heure HH:MM.`);
2079
+ }
2080
+ });
2081
+ }
2082
+ erreursAffichees = computed(() => fusionnerErreurs(this.errors(), this.saisie.parseErrors()), ...ngDevMode ? [{ debugName: "erreursAffichees" }] : /* istanbul ignore next */ []);
2083
+ surSaisie(evenement) {
2084
+ this.saisie.set(this.texteSaisi(evenement));
2085
+ }
2086
+ aLaSortieDuChamp() {
2087
+ if (this.saisie.parseErrors().length === 0) this.saisie.set(this.formater(this.value()));
2088
+ this.quitte.set(true);
2089
+ this.touch.emit();
2090
+ }
2091
+ formater(valeur) {
2092
+ return valeur === null || !estHeureIso(valeur) ? "" : formaterHeureSaisie(valeur, this.locale());
2093
+ }
2094
+ static ɵfac = i0.ɵɵngDeclareFactory({
2095
+ minVersion: "12.0.0",
2096
+ version: "22.2.0",
2097
+ ngImport: i0,
2098
+ type: StTimeField,
2099
+ deps: [],
2100
+ target: i0.ɵɵFactoryTarget.Component
2101
+ });
2102
+ static ɵcmp = i0.ɵɵngDeclareComponent({
2103
+ minVersion: "17.1.0",
2104
+ version: "22.2.0",
2105
+ type: StTimeField,
2106
+ isStandalone: true,
2107
+ selector: "st-time-field",
2108
+ inputs: {
2109
+ value: {
2110
+ classPropertyName: "value",
2111
+ publicName: "value",
2112
+ isSignal: true,
2113
+ isRequired: false,
2114
+ transformFunction: null
2115
+ },
2116
+ heureMin: {
2117
+ classPropertyName: "heureMin",
2118
+ publicName: "heureMin",
2119
+ isSignal: true,
2120
+ isRequired: false,
2121
+ transformFunction: null
2122
+ },
2123
+ heureMax: {
2124
+ classPropertyName: "heureMax",
2125
+ publicName: "heureMax",
2126
+ isSignal: true,
2127
+ isRequired: false,
2128
+ transformFunction: null
2129
+ },
2130
+ secondes: {
2131
+ classPropertyName: "secondes",
2132
+ publicName: "secondes",
2133
+ isSignal: true,
2134
+ isRequired: false,
2135
+ transformFunction: null
2136
+ },
2137
+ fuseau: {
2138
+ classPropertyName: "fuseau",
2139
+ publicName: "fuseau",
2140
+ isSignal: true,
2141
+ isRequired: false,
2142
+ transformFunction: null
2143
+ },
2144
+ autocomplete: {
2145
+ classPropertyName: "autocomplete",
2146
+ publicName: "autocomplete",
2147
+ isSignal: true,
2148
+ isRequired: false,
2149
+ transformFunction: null
2150
+ }
2151
+ },
2152
+ outputs: { value: "valueChange" },
2153
+ host: { classAttribute: "st-time-field" },
2154
+ usesInheritance: true,
2155
+ ngImport: i0,
2156
+ template: "<st-form-field\n [libelle]=\"libelle()\"\n [aide]=\"aideLue()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n>\n <input\n class=\"st-time-field__champ\"\n stControleDeChamp\n type=\"text\"\n spellcheck=\"false\"\n [attr.inputmode]=\"clavier()\"\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</st-form-field>\n",
2157
+ 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-time-field__champ:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-time-field__champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-time-field__champ:is(input,select){block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-time-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( (var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var(--st-interligne-sm)) / 2 - var(--st-epaisseur-fine) ) ) );padding-block:var(--_remplissage-bloc);padding-inline:var(--st-espacement-3-5);font-family:inherit;font-size:var(--st-taille-sm);font-weight:var(--st-graisse-normale);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-bordure-forte);border-radius:var(--st-commande-rayon, var(--st-rayon-md))}@media(pointer:coarse){.st-time-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( ( var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var( --st-interligne-md ) ) / 2 - var(--st-epaisseur-fine) ) ) );font-size:var(--st-taille-md);line-height:var(--st-interligne-md)}}.st-time-field__champ::placeholder{color:var(--st-couleur-texte-attenue);opacity:1}@media(hover:hover){.st-time-field__champ:hover:not(:disabled,:focus,[aria-invalid=true]){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-time-field__champ:focus-visible{border-color:var(--st-couleur-primaire)}.st-time-field__champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-time-field__champ[aria-invalid=true]:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-time-field__champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface);border-color:var(--st-couleur-bordure)}.st-time-field__champ:disabled::placeholder{color:var(--st-couleur-texte-desactive)}.st-time-field__champ:is(input,textarea):read-only:not(:disabled),.st-time-field__champ[aria-readonly=true]:not(:disabled){font-weight:var(--st-graisse-moyenne);background:var(--st-couleur-surface-enfoncee)}.st-time-field__champ{max-inline-size:var(--st-largeur-champ-sm);font-variant-numeric:var(--st-chiffres-alignes)}\n"],
2158
+ dependencies: [{
2159
+ kind: "component",
2160
+ type: StFormField,
2161
+ selector: "st-form-field",
2162
+ inputs: [
2163
+ "libelle",
2164
+ "complement",
2165
+ "disposition",
2166
+ "presentation",
2167
+ "libelleMasque",
2168
+ "descriptionsDuControle"
2169
+ ]
2170
+ }, {
2171
+ kind: "directive",
2172
+ type: StControleDeChamp,
2173
+ selector: "[stControleDeChamp]"
2174
+ }],
2175
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
2176
+ });
2177
+ };
2178
+ i0.ɵɵngDeclareClassMetadata({
2179
+ minVersion: "12.0.0",
2180
+ version: "22.2.0",
2181
+ ngImport: i0,
2182
+ type: StTimeField,
2183
+ decorators: [{
2184
+ type: Component,
2185
+ args: [{
2186
+ selector: "st-time-field",
2187
+ changeDetection: ChangeDetectionStrategy.OnPush,
2188
+ imports: [StFormField, StControleDeChamp],
2189
+ host: { class: "st-time-field" },
2190
+ template: "<st-form-field\n [libelle]=\"libelle()\"\n [aide]=\"aideLue()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n>\n <input\n class=\"st-time-field__champ\"\n stControleDeChamp\n type=\"text\"\n spellcheck=\"false\"\n [attr.inputmode]=\"clavier()\"\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</st-form-field>\n",
2191
+ 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-time-field__champ:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-time-field__champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-time-field__champ:is(input,select){block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-time-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( (var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var(--st-interligne-sm)) / 2 - var(--st-epaisseur-fine) ) ) );padding-block:var(--_remplissage-bloc);padding-inline:var(--st-espacement-3-5);font-family:inherit;font-size:var(--st-taille-sm);font-weight:var(--st-graisse-normale);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-bordure-forte);border-radius:var(--st-commande-rayon, var(--st-rayon-md))}@media(pointer:coarse){.st-time-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( ( var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var( --st-interligne-md ) ) / 2 - var(--st-epaisseur-fine) ) ) );font-size:var(--st-taille-md);line-height:var(--st-interligne-md)}}.st-time-field__champ::placeholder{color:var(--st-couleur-texte-attenue);opacity:1}@media(hover:hover){.st-time-field__champ:hover:not(:disabled,:focus,[aria-invalid=true]){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-time-field__champ:focus-visible{border-color:var(--st-couleur-primaire)}.st-time-field__champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-time-field__champ[aria-invalid=true]:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-time-field__champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface);border-color:var(--st-couleur-bordure)}.st-time-field__champ:disabled::placeholder{color:var(--st-couleur-texte-desactive)}.st-time-field__champ:is(input,textarea):read-only:not(:disabled),.st-time-field__champ[aria-readonly=true]:not(:disabled){font-weight:var(--st-graisse-moyenne);background:var(--st-couleur-surface-enfoncee)}.st-time-field__champ{max-inline-size:var(--st-largeur-champ-sm);font-variant-numeric:var(--st-chiffres-alignes)}\n"]
2192
+ }]
2193
+ }],
2194
+ ctorParameters: () => [],
2195
+ propDecorators: {
2196
+ value: [{
2197
+ type: i0.Input,
2198
+ args: [{
2199
+ isSignal: true,
2200
+ alias: "value",
2201
+ required: false
2202
+ }]
2203
+ }, {
2204
+ type: i0.Output,
2205
+ args: ["valueChange"]
2206
+ }],
2207
+ heureMin: [{
2208
+ type: i0.Input,
2209
+ args: [{
2210
+ isSignal: true,
2211
+ alias: "heureMin",
2212
+ required: false
2213
+ }]
2214
+ }],
2215
+ heureMax: [{
2216
+ type: i0.Input,
2217
+ args: [{
2218
+ isSignal: true,
2219
+ alias: "heureMax",
2220
+ required: false
2221
+ }]
2222
+ }],
2223
+ secondes: [{
2224
+ type: i0.Input,
2225
+ args: [{
2226
+ isSignal: true,
2227
+ alias: "secondes",
2228
+ required: false
2229
+ }]
2230
+ }],
2231
+ fuseau: [{
2232
+ type: i0.Input,
2233
+ args: [{
2234
+ isSignal: true,
2235
+ alias: "fuseau",
2236
+ required: false
2237
+ }]
2238
+ }],
2239
+ autocomplete: [{
2240
+ type: i0.Input,
2241
+ args: [{
2242
+ isSignal: true,
2243
+ alias: "autocomplete",
2244
+ required: false
2245
+ }]
2246
+ }]
2247
+ }
2248
+ });
2249
+ function pasOuNull(valeur) {
2250
+ if (valeur === null || valeur === void 0 || valeur === "") return null;
2251
+ const pas = numberAttribute(valeur, NaN);
2252
+ return Number.isFinite(pas) && pas > 0 ? pas : null;
2253
+ }
2254
+ function decimalesDuPas(pas) {
2255
+ const texte = String(pas);
2256
+ const exposant = /e-(\d+)$/.exec(texte);
2257
+ if (exposant !== null) return Number(exposant[1]);
2258
+ return (texte.split(".")[1] ?? "").length;
2259
+ }
2260
+ function bornerEtArrondir(valeur, decimales, bas, haut) {
2261
+ let resultat = Number(valeur.toFixed(decimales));
2262
+ if (bas !== void 0 && resultat < bas) resultat = bas;
2263
+ if (haut !== void 0 && resultat > haut) resultat = haut;
2264
+ return resultat;
2265
+ }
2266
+ const TOUCHES_DU_PAS = {
2267
+ ArrowUp: 1,
2268
+ ArrowDown: -1,
2269
+ PageUp: 10,
2270
+ PageDown: -10
2271
+ };
2272
+ var StNumberField = class StNumberField extends ContratDeChampABornes {
2273
+ libelles = inject(ST_LIBELLES);
2274
+ locale = inject(ST_LOCALE);
2275
+ idUnite = `${inject(StIdentifiants).prochain("st-number-field")}-unite`;
2276
+ value = model(null, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
2277
+ decimales = input(0, {
2278
+ ...ngDevMode ? { debugName: "decimales" } : /* istanbul ignore next */ {},
2279
+ transform: numberAttribute
2280
+ });
2281
+ pas = input(null, {
2282
+ ...ngDevMode ? { debugName: "pas" } : /* istanbul ignore next */ {},
2283
+ transform: pasOuNull
2284
+ });
2285
+ unite = input(null, ...ngDevMode ? [{ debugName: "unite" }] : /* istanbul ignore next */ []);
2286
+ quitte = signal(false, ...ngDevMode ? [{ debugName: "quitte" }] : /* istanbul ignore next */ []);
2287
+ averti = false;
2288
+ decimalesAdmises = computed(() => {
2289
+ const decimales = Math.max(0, Math.trunc(this.decimales()));
2290
+ const pas = this.pas();
2291
+ if (isDevMode() && !this.averti && pas !== null && decimalesDuPas(pas) > decimales) {
2292
+ this.averti = true;
2293
+ console.warn(`[st-number-field] pas ${String(pas)} plus fin que ${String(decimales)} decimale(s).`);
2294
+ }
2295
+ return decimales;
2296
+ }, ...ngDevMode ? [{ debugName: "decimalesAdmises" }] : /* istanbul ignore next */ []);
2297
+ saisie = transformedValue(this.value, {
2298
+ parse: (texte) => {
2299
+ if (texte.trim() === "") return { value: null };
2300
+ const decimales = this.decimalesAdmises();
2301
+ const lecture = lireNombre(texte, this.locale(), decimales);
2302
+ if (lecture.lu) return { value: lecture.valeur };
2303
+ if (lecture.raison === "illisible") return {
2304
+ value: null,
2305
+ error: {
2306
+ kind: "nombre",
2307
+ decimales
2308
+ }
2309
+ };
2310
+ return {
2311
+ value: null,
2312
+ error: decimales === 0 ? { kind: "entier" } : {
2313
+ kind: "decimales",
2314
+ decimales
2315
+ }
2316
+ };
2317
+ },
2318
+ format: (valeur) => this.formater(valeur)
2319
+ });
2320
+ lectureInvalide = computed(() => this.saisie.parseErrors().length > 0, ...ngDevMode ? [{ debugName: "lectureInvalide" }] : /* istanbul ignore next */ []);
2321
+ erreursAffichees = computed(() => fusionnerErreurs(this.errors(), this.saisie.parseErrors()), ...ngDevMode ? [{ debugName: "erreursAffichees" }] : /* istanbul ignore next */ []);
2322
+ modifiable = computed(() => !this.disabled() && !this.readonly(), ...ngDevMode ? [{ debugName: "modifiable" }] : /* istanbul ignore next */ []);
2323
+ peutDiminuer = computed(() => {
2324
+ const valeur = this.value();
2325
+ const bas = this.min();
2326
+ return this.modifiable() && (valeur === null || bas === void 0 || valeur > bas);
2327
+ }, ...ngDevMode ? [{ debugName: "peutDiminuer" }] : /* istanbul ignore next */ []);
2328
+ peutAugmenter = computed(() => {
2329
+ const valeur = this.value();
2330
+ const haut = this.max();
2331
+ return this.modifiable() && (valeur === null || haut === void 0 || valeur < haut);
2332
+ }, ...ngDevMode ? [{ debugName: "peutAugmenter" }] : /* istanbul ignore next */ []);
2333
+ valeurLue = computed(() => {
2334
+ const valeur = this.value();
2335
+ if (valeur === null) return null;
2336
+ const texte = formaterNombre(valeur, this.locale(), this.decimalesAdmises());
2337
+ const unite = this.unite()?.trim() ?? "";
2338
+ return unite === "" ? texte : `${texte} ${unite}`;
2339
+ }, ...ngDevMode ? [{ debugName: "valeurLue" }] : /* istanbul ignore next */ []);
2340
+ uniteLue = computed(() => {
2341
+ const unite = this.unite()?.trim() ?? "";
2342
+ return unite === "" ? null : this.libelles().uniteDuNombre(unite);
2343
+ }, ...ngDevMode ? [{ debugName: "uniteLue" }] : /* istanbul ignore next */ []);
2344
+ descriptionsDuControle = computed(() => this.uniteLue() === null ? [] : [this.idUnite], ...ngDevMode ? [{ debugName: "descriptionsDuControle" }] : /* istanbul ignore next */ []);
2345
+ surPressionDuCadre(evenement) {
2346
+ const cible = evenement.target;
2347
+ if (evenement.button !== 0 || !(cible instanceof Element)) return;
2348
+ if (cible.closest("input, button") !== null) return;
2349
+ evenement.preventDefault();
2350
+ this.focus();
2351
+ }
2352
+ surSaisie(evenement) {
2353
+ this.saisie.set(this.texteSaisi(evenement));
2354
+ }
2355
+ surTouche(evenement) {
2356
+ if (this.pas() === null || !this.modifiable() || evenement.altKey || evenement.ctrlKey) return;
2357
+ const pas = TOUCHES_DU_PAS[evenement.key];
2358
+ if (pas !== void 0) {
2359
+ evenement.preventDefault();
2360
+ this.avancer(pas);
2361
+ return;
2362
+ }
2363
+ const borne = evenement.key === "Home" ? this.min() : evenement.key === "End" ? this.max() : void 0;
2364
+ if (borne !== void 0) {
2365
+ evenement.preventDefault();
2366
+ this.poser(borne);
2367
+ }
2368
+ }
2369
+ avancer(nombreDePas) {
2370
+ const pas = this.pas();
2371
+ if (pas === null || !this.modifiable()) return;
2372
+ const actuelle = this.value();
2373
+ this.poser(actuelle === null ? this.min() ?? 0 : actuelle + nombreDePas * pas);
2374
+ }
2375
+ aLaSortie() {
2376
+ if (this.saisie.parseErrors().length === 0) this.saisie.set(this.formater(this.value()));
2377
+ this.quitte.set(true);
2378
+ this.touch.emit();
2379
+ }
2380
+ poser(valeur) {
2381
+ const bornee = bornerEtArrondir(valeur, this.decimalesAdmises(), this.min(), this.max());
2382
+ this.saisie.set(this.formater(bornee));
2383
+ }
2384
+ formater(valeur) {
2385
+ if (valeur === null) return "";
2386
+ return formaterNombre(valeur, untracked(this.locale), untracked(this.decimalesAdmises)).replace(/\s/g, String.fromCharCode(160));
2387
+ }
2388
+ static ɵfac = i0.ɵɵngDeclareFactory({
2389
+ minVersion: "12.0.0",
2390
+ version: "22.2.0",
2391
+ ngImport: i0,
2392
+ type: StNumberField,
2393
+ deps: null,
2394
+ target: i0.ɵɵFactoryTarget.Component
2395
+ });
2396
+ static ɵcmp = i0.ɵɵngDeclareComponent({
2397
+ minVersion: "17.0.0",
2398
+ version: "22.2.0",
2399
+ type: StNumberField,
2400
+ isStandalone: true,
2401
+ selector: "st-number-field",
2402
+ inputs: {
2403
+ value: {
2404
+ classPropertyName: "value",
2405
+ publicName: "value",
2406
+ isSignal: true,
2407
+ isRequired: false,
2408
+ transformFunction: null
2409
+ },
2410
+ decimales: {
2411
+ classPropertyName: "decimales",
2412
+ publicName: "decimales",
2413
+ isSignal: true,
2414
+ isRequired: false,
2415
+ transformFunction: null
2416
+ },
2417
+ pas: {
2418
+ classPropertyName: "pas",
2419
+ publicName: "pas",
2420
+ isSignal: true,
2421
+ isRequired: false,
2422
+ transformFunction: null
2423
+ },
2424
+ unite: {
2425
+ classPropertyName: "unite",
2426
+ publicName: "unite",
2427
+ isSignal: true,
2428
+ isRequired: false,
2429
+ transformFunction: null
2430
+ }
2431
+ },
2432
+ outputs: { value: "valueChange" },
2433
+ host: {
2434
+ properties: { "attr.data-pas": "pas() === null ? null : \"\"" },
2435
+ classAttribute: "st-number-field"
2436
+ },
2437
+ usesInheritance: true,
2438
+ ngImport: i0,
2439
+ template: "<st-form-field\n [libelle]=\"libelle()\"\n [aide]=\"aideEtRaisons()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n [descriptionsDuControle]=\"descriptionsDuControle()\"\n>\n <ng-content select=\"[stMeta]\" ngProjectAs=\"[stMeta]\" />\n <ng-content select=\"[stAide]\" ngProjectAs=\"[stAide]\" />\n <ng-content select=\"[stIndication]\" ngProjectAs=\"[stIndication]\" />\n <!-- Le cadre est UN champ : un clic sur l'unite donne le focus a la zone de frappe. Avec un pas,\n les boutons - et + sont dans le cadre, a sa fin ; ils ne prennent pas le focus (les fleches\n font le meme travail au clavier). -->\n <div class=\"st-number-field__cadre\" (mousedown)=\"surPressionDuCadre($event)\">\n <input\n #champ\n class=\"st-number-field__champ\"\n stControleDeChamp\n type=\"text\"\n spellcheck=\"false\"\n dir=\"ltr\"\n [attr.inputmode]=\"decimalesAdmises() > 0 ? 'decimal' : 'numeric'\"\n [attr.role]=\"pas() === null ? null : 'spinbutton'\"\n [attr.aria-valuenow]=\"pas() === null ? null : value()\"\n [attr.aria-valuemin]=\"pas() === null ? null : (min() ?? null)\"\n [attr.aria-valuemax]=\"pas() === null ? null : (max() ?? null)\"\n [attr.aria-valuetext]=\"pas() === null ? null : valeurLue()\"\n [value]=\"saisie()\"\n [attr.name]=\"name() || null\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly()\"\n (input)=\"surSaisie($event)\"\n (keydown)=\"surTouche($event)\"\n (blur)=\"aLaSortie()\"\n />\n @if (unite(); as texte) {\n <span class=\"st-number-field__unite\" aria-hidden=\"true\">{{ texte }}</span>\n }\n @if (pas() !== null) {\n <span class=\"st-number-field__boutons\">\n <button\n stIconButton\n type=\"button\"\n icone=\"moins\"\n tabindex=\"-1\"\n [etiquette]=\"libelles().diminuer(libelle())\"\n [disabled]=\"!peutDiminuer()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"avancer(-1)\"\n ></button>\n <button\n stIconButton\n type=\"button\"\n icone=\"plus\"\n tabindex=\"-1\"\n [etiquette]=\"libelles().augmenter(libelle())\"\n [disabled]=\"!peutAugmenter()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"avancer(1)\"\n ></button>\n </span>\n }\n </div>\n</st-form-field>\n@if (uniteLue(); as texte) {\n <span class=\"st-vh\" [id]=\"idUnite\">{{ texte }}</span>\n}\n",
2440
+ 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;max-inline-size:var(--st-largeur-champ-md)}:host([data-pas]){max-inline-size:var(--st-largeur-champ-lg)}.st-number-field__cadre:has(>.st-number-field__champ:focus-visible){outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-number-field__cadre{box-sizing:border-box;block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut));color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-bordure-forte);border-radius:var(--st-commande-rayon, var(--st-rayon-md))}.st-number-field__cadre>.st-number-field__champ{margin-block:calc(-1 * var(--st-epaisseur-fine));background:transparent;border:0;border-radius:0;box-shadow:none;outline:none}@media(hover:hover){.st-number-field__cadre:hover:not(:has(>.st-number-field__champ:is(:disabled,:focus,[aria-invalid=true]))){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-number-field__cadre:has(>.st-number-field__champ:focus-visible){border-color:var(--st-couleur-primaire)}.st-number-field__cadre:has(>.st-number-field__champ[aria-invalid=true]){border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-number-field__cadre:has(>.st-number-field__champ[aria-invalid=true]):has(>.st-number-field__champ:focus-visible){outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-number-field__cadre:has(>.st-number-field__champ:disabled){color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface);border-color:var(--st-couleur-bordure)}.st-number-field__cadre:has(>.st-number-field__champ:is(input,textarea):read-only:not(:disabled)),.st-number-field__cadre:has(>.st-number-field__champ[aria-readonly=true]:not(:disabled)){background:var(--st-couleur-surface-enfoncee)}.st-number-field__cadre{display:flex;align-items:stretch;overflow:hidden}.st-number-field__champ:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-number-field__champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-number-field__champ:is(input,select){block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-number-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( (var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var(--st-interligne-sm)) / 2 - var(--st-epaisseur-fine) ) ) );padding-block:var(--_remplissage-bloc);padding-inline:var(--st-espacement-3-5);font-family:inherit;font-size:var(--st-taille-sm);font-weight:var(--st-graisse-normale);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-bordure-forte);border-radius:var(--st-commande-rayon, var(--st-rayon-md))}@media(pointer:coarse){.st-number-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( ( var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var( --st-interligne-md ) ) / 2 - var(--st-epaisseur-fine) ) ) );font-size:var(--st-taille-md);line-height:var(--st-interligne-md)}}.st-number-field__champ::placeholder{color:var(--st-couleur-texte-attenue);opacity:1}@media(hover:hover){.st-number-field__champ:hover:not(:disabled,:focus,[aria-invalid=true]){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-number-field__champ:focus-visible{border-color:var(--st-couleur-primaire)}.st-number-field__champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-number-field__champ[aria-invalid=true]:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-number-field__champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface);border-color:var(--st-couleur-bordure)}.st-number-field__champ:disabled::placeholder{color:var(--st-couleur-texte-desactive)}.st-number-field__champ:is(input,textarea):read-only:not(:disabled),.st-number-field__champ[aria-readonly=true]:not(:disabled){font-weight:var(--st-graisse-moyenne);background:var(--st-couleur-surface-enfoncee)}.st-number-field__champ{flex:1 1 auto;min-inline-size:0;font-variant-numeric:var(--st-chiffres-alignes);unicode-bidi:isolate}.st-number-field__cadre:has(>.st-number-field__unite)>.st-number-field__champ{padding-inline-end:var(--st-espacement-2)}.st-number-field__unite{display:flex;flex:none;align-items:center;padding-inline-end:var(--st-espacement-3-5);font-size:var(--st-taille-sm);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte-discret);cursor:text}.st-number-field__boutons{display:flex;flex:none}.st-number-field__boutons>button{align-self:stretch;inline-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut));block-size:auto;border-inline-start:var(--st-epaisseur-fine) solid var(--st-couleur-surface-active);border-radius:0}.st-number-field__cadre:has(>.st-number-field__champ:disabled)>.st-number-field__unite{color:var(--st-couleur-texte-desactive);cursor:inherit}@media(forced-colors:active){.st-number-field__boutons>button{border-inline-start-color:ButtonText}}\n"],
2441
+ dependencies: [
2442
+ {
2443
+ kind: "component",
2444
+ type: StFormField,
2445
+ selector: "st-form-field",
2446
+ inputs: [
2447
+ "libelle",
2448
+ "complement",
2449
+ "disposition",
2450
+ "presentation",
2451
+ "libelleMasque",
2452
+ "descriptionsDuControle"
2453
+ ]
2454
+ },
2455
+ {
2456
+ kind: "directive",
2457
+ type: StControleDeChamp,
2458
+ selector: "[stControleDeChamp]"
2459
+ },
2460
+ {
2461
+ kind: "component",
2462
+ type: StIconButton,
2463
+ selector: "button[stIconButton]",
2464
+ inputs: [
2465
+ "icone",
2466
+ "etiquette",
2467
+ "variante",
2468
+ "taille",
2469
+ "tailleDuGlyphe",
2470
+ "enfonce",
2471
+ "iconeEnfoncee",
2472
+ "chargement",
2473
+ "indisponible",
2474
+ "raisonIndisponible"
2475
+ ]
2476
+ }
2477
+ ],
2478
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
2479
+ });
2480
+ };
2481
+ i0.ɵɵngDeclareClassMetadata({
2482
+ minVersion: "12.0.0",
2483
+ version: "22.2.0",
2484
+ ngImport: i0,
2485
+ type: StNumberField,
2486
+ decorators: [{
2487
+ type: Component,
2488
+ args: [{
2489
+ selector: "st-number-field",
2490
+ changeDetection: ChangeDetectionStrategy.OnPush,
2491
+ imports: [
2492
+ StFormField,
2493
+ StControleDeChamp,
2494
+ StIconButton
2495
+ ],
2496
+ host: {
2497
+ class: "st-number-field",
2498
+ "[attr.data-pas]": "pas() === null ? null : \"\""
2499
+ },
2500
+ template: "<st-form-field\n [libelle]=\"libelle()\"\n [aide]=\"aideEtRaisons()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n [descriptionsDuControle]=\"descriptionsDuControle()\"\n>\n <ng-content select=\"[stMeta]\" ngProjectAs=\"[stMeta]\" />\n <ng-content select=\"[stAide]\" ngProjectAs=\"[stAide]\" />\n <ng-content select=\"[stIndication]\" ngProjectAs=\"[stIndication]\" />\n <!-- Le cadre est UN champ : un clic sur l'unite donne le focus a la zone de frappe. Avec un pas,\n les boutons - et + sont dans le cadre, a sa fin ; ils ne prennent pas le focus (les fleches\n font le meme travail au clavier). -->\n <div class=\"st-number-field__cadre\" (mousedown)=\"surPressionDuCadre($event)\">\n <input\n #champ\n class=\"st-number-field__champ\"\n stControleDeChamp\n type=\"text\"\n spellcheck=\"false\"\n dir=\"ltr\"\n [attr.inputmode]=\"decimalesAdmises() > 0 ? 'decimal' : 'numeric'\"\n [attr.role]=\"pas() === null ? null : 'spinbutton'\"\n [attr.aria-valuenow]=\"pas() === null ? null : value()\"\n [attr.aria-valuemin]=\"pas() === null ? null : (min() ?? null)\"\n [attr.aria-valuemax]=\"pas() === null ? null : (max() ?? null)\"\n [attr.aria-valuetext]=\"pas() === null ? null : valeurLue()\"\n [value]=\"saisie()\"\n [attr.name]=\"name() || null\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonly()\"\n (input)=\"surSaisie($event)\"\n (keydown)=\"surTouche($event)\"\n (blur)=\"aLaSortie()\"\n />\n @if (unite(); as texte) {\n <span class=\"st-number-field__unite\" aria-hidden=\"true\">{{ texte }}</span>\n }\n @if (pas() !== null) {\n <span class=\"st-number-field__boutons\">\n <button\n stIconButton\n type=\"button\"\n icone=\"moins\"\n tabindex=\"-1\"\n [etiquette]=\"libelles().diminuer(libelle())\"\n [disabled]=\"!peutDiminuer()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"avancer(-1)\"\n ></button>\n <button\n stIconButton\n type=\"button\"\n icone=\"plus\"\n tabindex=\"-1\"\n [etiquette]=\"libelles().augmenter(libelle())\"\n [disabled]=\"!peutAugmenter()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"avancer(1)\"\n ></button>\n </span>\n }\n </div>\n</st-form-field>\n@if (uniteLue(); as texte) {\n <span class=\"st-vh\" [id]=\"idUnite\">{{ texte }}</span>\n}\n",
2501
+ 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;max-inline-size:var(--st-largeur-champ-md)}:host([data-pas]){max-inline-size:var(--st-largeur-champ-lg)}.st-number-field__cadre:has(>.st-number-field__champ:focus-visible){outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-number-field__cadre{box-sizing:border-box;block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut));color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-bordure-forte);border-radius:var(--st-commande-rayon, var(--st-rayon-md))}.st-number-field__cadre>.st-number-field__champ{margin-block:calc(-1 * var(--st-epaisseur-fine));background:transparent;border:0;border-radius:0;box-shadow:none;outline:none}@media(hover:hover){.st-number-field__cadre:hover:not(:has(>.st-number-field__champ:is(:disabled,:focus,[aria-invalid=true]))){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-number-field__cadre:has(>.st-number-field__champ:focus-visible){border-color:var(--st-couleur-primaire)}.st-number-field__cadre:has(>.st-number-field__champ[aria-invalid=true]){border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-number-field__cadre:has(>.st-number-field__champ[aria-invalid=true]):has(>.st-number-field__champ:focus-visible){outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-number-field__cadre:has(>.st-number-field__champ:disabled){color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface);border-color:var(--st-couleur-bordure)}.st-number-field__cadre:has(>.st-number-field__champ:is(input,textarea):read-only:not(:disabled)),.st-number-field__cadre:has(>.st-number-field__champ[aria-readonly=true]:not(:disabled)){background:var(--st-couleur-surface-enfoncee)}.st-number-field__cadre{display:flex;align-items:stretch;overflow:hidden}.st-number-field__champ:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-number-field__champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-number-field__champ:is(input,select){block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-number-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( (var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var(--st-interligne-sm)) / 2 - var(--st-epaisseur-fine) ) ) );padding-block:var(--_remplissage-bloc);padding-inline:var(--st-espacement-3-5);font-family:inherit;font-size:var(--st-taille-sm);font-weight:var(--st-graisse-normale);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-bordure-forte);border-radius:var(--st-commande-rayon, var(--st-rayon-md))}@media(pointer:coarse){.st-number-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( ( var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var( --st-interligne-md ) ) / 2 - var(--st-epaisseur-fine) ) ) );font-size:var(--st-taille-md);line-height:var(--st-interligne-md)}}.st-number-field__champ::placeholder{color:var(--st-couleur-texte-attenue);opacity:1}@media(hover:hover){.st-number-field__champ:hover:not(:disabled,:focus,[aria-invalid=true]){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-number-field__champ:focus-visible{border-color:var(--st-couleur-primaire)}.st-number-field__champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-number-field__champ[aria-invalid=true]:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-number-field__champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface);border-color:var(--st-couleur-bordure)}.st-number-field__champ:disabled::placeholder{color:var(--st-couleur-texte-desactive)}.st-number-field__champ:is(input,textarea):read-only:not(:disabled),.st-number-field__champ[aria-readonly=true]:not(:disabled){font-weight:var(--st-graisse-moyenne);background:var(--st-couleur-surface-enfoncee)}.st-number-field__champ{flex:1 1 auto;min-inline-size:0;font-variant-numeric:var(--st-chiffres-alignes);unicode-bidi:isolate}.st-number-field__cadre:has(>.st-number-field__unite)>.st-number-field__champ{padding-inline-end:var(--st-espacement-2)}.st-number-field__unite{display:flex;flex:none;align-items:center;padding-inline-end:var(--st-espacement-3-5);font-size:var(--st-taille-sm);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte-discret);cursor:text}.st-number-field__boutons{display:flex;flex:none}.st-number-field__boutons>button{align-self:stretch;inline-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut));block-size:auto;border-inline-start:var(--st-epaisseur-fine) solid var(--st-couleur-surface-active);border-radius:0}.st-number-field__cadre:has(>.st-number-field__champ:disabled)>.st-number-field__unite{color:var(--st-couleur-texte-desactive);cursor:inherit}@media(forced-colors:active){.st-number-field__boutons>button{border-inline-start-color:ButtonText}}\n"]
2502
+ }]
2503
+ }],
2504
+ propDecorators: {
2505
+ value: [{
2506
+ type: i0.Input,
2507
+ args: [{
2508
+ isSignal: true,
2509
+ alias: "value",
2510
+ required: false
2511
+ }]
2512
+ }, {
2513
+ type: i0.Output,
2514
+ args: ["valueChange"]
2515
+ }],
2516
+ decimales: [{
2517
+ type: i0.Input,
2518
+ args: [{
2519
+ isSignal: true,
2520
+ alias: "decimales",
2521
+ required: false
2522
+ }]
2523
+ }],
2524
+ pas: [{
2525
+ type: i0.Input,
2526
+ args: [{
2527
+ isSignal: true,
2528
+ alias: "pas",
2529
+ required: false
2530
+ }]
2531
+ }],
2532
+ unite: [{
2533
+ type: i0.Input,
2534
+ args: [{
2535
+ isSignal: true,
2536
+ alias: "unite",
2537
+ required: false
2538
+ }]
2539
+ }]
2540
+ }
2541
+ });
2542
+ const INSECABLE = String.fromCharCode(160);
2543
+ var StRangeSlider = class StRangeSlider extends ContratDeChampABornes {
2544
+ libelles = inject(ST_LIBELLES);
2545
+ locale = inject(ST_LOCALE);
2546
+ value = model(null, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
2547
+ pas = input(1, {
2548
+ ...ngDevMode ? { debugName: "pas" } : /* istanbul ignore next */ {},
2549
+ transform: numberAttribute
2550
+ });
2551
+ unite = input(null, ...ngDevMode ? [{ debugName: "unite" }] : /* istanbul ignore next */ []);
2552
+ avecChamp = input(false, {
2553
+ ...ngDevMode ? { debugName: "avecChamp" } : /* istanbul ignore next */ {},
2554
+ transform: booleanAttribute
2555
+ });
2556
+ formaterValeur = input(null, ...ngDevMode ? [{ debugName: "formaterValeur" }] : /* istanbul ignore next */ []);
2557
+ quitte = signal(false, ...ngDevMode ? [{ debugName: "quitte" }] : /* istanbul ignore next */ []);
2558
+ enveloppe = viewChild.required(StFormField, ...ngDevMode ? [{ debugName: "enveloppe" }] : /* istanbul ignore next */ []);
2559
+ idDuCurseur = computed(() => this.enveloppe().identifiants.controle, ...ngDevMode ? [{ debugName: "idDuCurseur" }] : /* istanbul ignore next */ []);
2560
+ bas = computed(() => this.min() ?? 0, ...ngDevMode ? [{ debugName: "bas" }] : /* istanbul ignore next */ []);
2561
+ haut = computed(() => Math.max(this.max() ?? 100, this.bas()), ...ngDevMode ? [{ debugName: "haut" }] : /* istanbul ignore next */ []);
2562
+ pasSur = computed(() => this.pas() > 0 ? this.pas() : 1, ...ngDevMode ? [{ debugName: "pasSur" }] : /* istanbul ignore next */ []);
2563
+ decimales = computed(() => decimalesDuPas(this.pasSur()), ...ngDevMode ? [{ debugName: "decimales" }] : /* istanbul ignore next */ []);
2564
+ partRemplie = computed(() => {
2565
+ const valeur = this.value();
2566
+ const etendue = this.haut() - this.bas();
2567
+ if (valeur === null || etendue <= 0) return "0%";
2568
+ const part = Math.min(100, Math.max(0, (valeur - this.bas()) / etendue * 100));
2569
+ return `${String(part)}%`;
2570
+ }, ...ngDevMode ? [{ debugName: "partRemplie" }] : /* istanbul ignore next */ []);
2571
+ valeurLue = computed(() => {
2572
+ const valeur = this.value();
2573
+ return valeur === null ? "" : this.ecrire(valeur);
2574
+ }, ...ngDevMode ? [{ debugName: "valeurLue" }] : /* istanbul ignore next */ []);
2575
+ erreursAffichees = computed(() => fusionnerErreurs(this.errors(), []), ...ngDevMode ? [{ debugName: "erreursAffichees" }] : /* istanbul ignore next */ []);
2576
+ ecrire(valeur) {
2577
+ const formater = this.formaterValeur();
2578
+ if (formater !== null) return formater(valeur);
2579
+ const texte = formaterNombre(valeur, this.locale(), this.decimales());
2580
+ const unite = this.unite()?.trim() ?? "";
2581
+ return unite === "" ? texte : `${texte}${INSECABLE}${unite}`;
2582
+ }
2583
+ surCurseur(evenement) {
2584
+ const curseur = evenement.target;
2585
+ if (this.readonly()) {
2586
+ curseur.value = String(this.value() ?? this.bas());
2587
+ return;
2588
+ }
2589
+ this.value.set(bornerEtArrondir(Number(curseur.value), this.decimales(), this.bas(), this.haut()));
2590
+ }
2591
+ depuisLeChamp(valeur) {
2592
+ this.value.set(valeur);
2593
+ }
2594
+ aLaSortie() {
2595
+ this.quitte.set(true);
2596
+ this.touch.emit();
2597
+ }
2598
+ static ɵfac = i0.ɵɵngDeclareFactory({
2599
+ minVersion: "12.0.0",
2600
+ version: "22.2.0",
2601
+ ngImport: i0,
2602
+ type: StRangeSlider,
2603
+ deps: null,
2604
+ target: i0.ɵɵFactoryTarget.Component
2605
+ });
2606
+ static ɵcmp = i0.ɵɵngDeclareComponent({
2607
+ minVersion: "17.0.0",
2608
+ version: "22.2.0",
2609
+ type: StRangeSlider,
2610
+ isStandalone: true,
2611
+ selector: "st-range-slider",
2612
+ inputs: {
2613
+ value: {
2614
+ classPropertyName: "value",
2615
+ publicName: "value",
2616
+ isSignal: true,
2617
+ isRequired: false,
2618
+ transformFunction: null
2619
+ },
2620
+ pas: {
2621
+ classPropertyName: "pas",
2622
+ publicName: "pas",
2623
+ isSignal: true,
2624
+ isRequired: false,
2625
+ transformFunction: null
2626
+ },
2627
+ unite: {
2628
+ classPropertyName: "unite",
2629
+ publicName: "unite",
2630
+ isSignal: true,
2631
+ isRequired: false,
2632
+ transformFunction: null
2633
+ },
2634
+ avecChamp: {
2635
+ classPropertyName: "avecChamp",
2636
+ publicName: "avecChamp",
2637
+ isSignal: true,
2638
+ isRequired: false,
2639
+ transformFunction: null
2640
+ },
2641
+ formaterValeur: {
2642
+ classPropertyName: "formaterValeur",
2643
+ publicName: "formaterValeur",
2644
+ isSignal: true,
2645
+ isRequired: false,
2646
+ transformFunction: null
2647
+ }
2648
+ },
2649
+ outputs: { value: "valueChange" },
2650
+ host: { classAttribute: "st-range-slider" },
2651
+ viewQueries: [{
2652
+ propertyName: "enveloppe",
2653
+ first: true,
2654
+ predicate: StFormField,
2655
+ descendants: true,
2656
+ isSignal: true
2657
+ }],
2658
+ usesInheritance: true,
2659
+ ngImport: i0,
2660
+ template: "<st-form-field\n [libelle]=\"libelle()\"\n [aide]=\"aideEtRaisons()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n>\n <ng-content select=\"[stMeta]\" ngProjectAs=\"[stMeta]\" />\n <ng-content select=\"[stAide]\" ngProjectAs=\"[stAide]\" />\n <ng-content select=\"[stIndication]\" ngProjectAs=\"[stIndication]\" />\n <div class=\"st-range-slider__ligne\">\n <input\n #champ\n class=\"st-range-slider__curseur\"\n stControleDeChamp\n type=\"range\"\n [min]=\"bas()\"\n [max]=\"haut()\"\n [step]=\"pasSur()\"\n [value]=\"value() ?? bas()\"\n [style.--_part]=\"partRemplie()\"\n [attr.aria-valuetext]=\"valeurLue() || null\"\n [attr.aria-readonly]=\"readonly() ? 'true' : null\"\n [attr.name]=\"name() || null\"\n [disabled]=\"disabled()\"\n (input)=\"surCurseur($event)\"\n (blur)=\"aLaSortie()\"\n />\n <!-- La valeur, toujours lisible ; relie au curseur, sans region vivante (le curseur la dit). -->\n <output class=\"st-range-slider__valeur\" dir=\"auto\" aria-live=\"off\" [attr.for]=\"idDuCurseur()\">{{\n valeurLue()\n }}</output>\n </div>\n <!-- Le sens du texte vient de la valeur : « 1 500 € » ne se renverse pas en ecriture inverse. -->\n <div class=\"st-range-slider__bornes\" aria-hidden=\"true\">\n <span dir=\"auto\">{{ ecrire(bas()) }}</span>\n <span dir=\"auto\">{{ ecrire(haut()) }}</span>\n </div>\n</st-form-field>\n@if (avecChamp()) {\n <st-number-field\n class=\"st-range-slider__champ\"\n [libelle]=\"libelles().champJumeau(libelle())\"\n [decimales]=\"decimales()\"\n [unite]=\"unite()\"\n [min]=\"bas()\"\n [max]=\"haut()\"\n [value]=\"value()\"\n (valueChange)=\"depuisLeChamp($event)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (touch)=\"aLaSortie()\"\n />\n}\n",
2661
+ 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-range-slider__ligne{display:flex;gap:var(--st-espacement-3);align-items:center}.st-range-slider__curseur:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-range-slider__curseur{--_piste: var(--st-couleur-surface-active);--_rempli: var(--st-couleur-primaire);flex:1 1 auto;min-inline-size:0;block-size:var(--st-cible-tactile-min);margin:0;color:var(--st-couleur-texte);cursor:pointer;background:transparent;border-radius:var(--st-rayon-sm);appearance:none}.st-range-slider__curseur::-webkit-slider-runnable-track{block-size:var(--st-espacement-1);background:linear-gradient(to right,var(--_rempli) var(--_part, 0%),var(--_piste) var(--_part, 0%));border-radius:var(--st-rayon-pleine)}.st-range-slider__curseur::-moz-range-track{block-size:var(--st-espacement-1);background:var(--_piste);border-radius:var(--st-rayon-pleine)}.st-range-slider__curseur::-moz-range-progress{block-size:var(--st-espacement-1);background:var(--_rempli);border-radius:var(--st-rayon-pleine)}.st-range-slider__curseur::-webkit-slider-thumb{inline-size:var(--st-espacement-5);block-size:var(--st-espacement-5);margin-block-start:calc((var(--st-espacement-1) - var(--st-espacement-5)) / 2);background:var(--_rempli);border:var(--st-epaisseur-moyenne) solid var(--st-couleur-surface);border-radius:var(--st-rayon-pleine);box-shadow:var(--st-ombre-repos);appearance:none}.st-range-slider__curseur::-moz-range-thumb{inline-size:var(--st-espacement-5);block-size:var(--st-espacement-5);background:var(--_rempli);border:var(--st-epaisseur-moyenne) solid var(--st-couleur-surface);border-radius:var(--st-rayon-pleine);box-shadow:var(--st-ombre-repos)}.st-range-slider__curseur:disabled{--_rempli: var(--st-couleur-texte-desactive);cursor:not-allowed}.st-range-slider__curseur:dir(rtl)::-webkit-slider-runnable-track{background:linear-gradient(to left,var(--_rempli) var(--_part, 0%),var(--_piste) var(--_part, 0%))}@media(forced-colors:active){.st-range-slider__curseur::-webkit-slider-runnable-track{background:Canvas;border:var(--st-epaisseur-fine) solid CanvasText}.st-range-slider__curseur::-webkit-slider-thumb{background:Highlight;border-color:Canvas}}.st-range-slider__valeur{flex:none;min-inline-size:4ch;font-size:var(--st-taille-sm);font-weight:var(--st-graisse-semi);font-variant-numeric:var(--st-chiffres-alignes);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte);text-align:end}.st-range-slider__bornes{display:flex;justify-content:space-between;font-size:var(--st-taille-xs);font-variant-numeric:var(--st-chiffres-alignes);line-height:var(--st-interligne-xs);color:var(--st-couleur-texte-discret)}.st-range-slider__champ{margin-block-start:var(--st-espacement-3)}\n"],
2662
+ dependencies: [
2663
+ {
2664
+ kind: "component",
2665
+ type: StFormField,
2666
+ selector: "st-form-field",
2667
+ inputs: [
2668
+ "libelle",
2669
+ "complement",
2670
+ "disposition",
2671
+ "presentation",
2672
+ "libelleMasque",
2673
+ "descriptionsDuControle"
2674
+ ]
2675
+ },
2676
+ {
2677
+ kind: "directive",
2678
+ type: StControleDeChamp,
2679
+ selector: "[stControleDeChamp]"
2680
+ },
2681
+ {
2682
+ kind: "component",
2683
+ type: StNumberField,
2684
+ selector: "st-number-field",
2685
+ inputs: [
2686
+ "value",
2687
+ "decimales",
2688
+ "pas",
2689
+ "unite"
2690
+ ],
2691
+ outputs: ["valueChange"]
2692
+ }
2693
+ ],
2694
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
2695
+ });
2696
+ };
2697
+ i0.ɵɵngDeclareClassMetadata({
2698
+ minVersion: "12.0.0",
2699
+ version: "22.2.0",
2700
+ ngImport: i0,
2701
+ type: StRangeSlider,
2702
+ decorators: [{
2703
+ type: Component,
2704
+ args: [{
2705
+ selector: "st-range-slider",
2706
+ changeDetection: ChangeDetectionStrategy.OnPush,
2707
+ imports: [
2708
+ StFormField,
2709
+ StControleDeChamp,
2710
+ StNumberField
2711
+ ],
2712
+ host: { class: "st-range-slider" },
2713
+ template: "<st-form-field\n [libelle]=\"libelle()\"\n [aide]=\"aideEtRaisons()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n>\n <ng-content select=\"[stMeta]\" ngProjectAs=\"[stMeta]\" />\n <ng-content select=\"[stAide]\" ngProjectAs=\"[stAide]\" />\n <ng-content select=\"[stIndication]\" ngProjectAs=\"[stIndication]\" />\n <div class=\"st-range-slider__ligne\">\n <input\n #champ\n class=\"st-range-slider__curseur\"\n stControleDeChamp\n type=\"range\"\n [min]=\"bas()\"\n [max]=\"haut()\"\n [step]=\"pasSur()\"\n [value]=\"value() ?? bas()\"\n [style.--_part]=\"partRemplie()\"\n [attr.aria-valuetext]=\"valeurLue() || null\"\n [attr.aria-readonly]=\"readonly() ? 'true' : null\"\n [attr.name]=\"name() || null\"\n [disabled]=\"disabled()\"\n (input)=\"surCurseur($event)\"\n (blur)=\"aLaSortie()\"\n />\n <!-- La valeur, toujours lisible ; relie au curseur, sans region vivante (le curseur la dit). -->\n <output class=\"st-range-slider__valeur\" dir=\"auto\" aria-live=\"off\" [attr.for]=\"idDuCurseur()\">{{\n valeurLue()\n }}</output>\n </div>\n <!-- Le sens du texte vient de la valeur : « 1 500 € » ne se renverse pas en ecriture inverse. -->\n <div class=\"st-range-slider__bornes\" aria-hidden=\"true\">\n <span dir=\"auto\">{{ ecrire(bas()) }}</span>\n <span dir=\"auto\">{{ ecrire(haut()) }}</span>\n </div>\n</st-form-field>\n@if (avecChamp()) {\n <st-number-field\n class=\"st-range-slider__champ\"\n [libelle]=\"libelles().champJumeau(libelle())\"\n [decimales]=\"decimales()\"\n [unite]=\"unite()\"\n [min]=\"bas()\"\n [max]=\"haut()\"\n [value]=\"value()\"\n (valueChange)=\"depuisLeChamp($event)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (touch)=\"aLaSortie()\"\n />\n}\n",
2714
+ 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-range-slider__ligne{display:flex;gap:var(--st-espacement-3);align-items:center}.st-range-slider__curseur:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-range-slider__curseur{--_piste: var(--st-couleur-surface-active);--_rempli: var(--st-couleur-primaire);flex:1 1 auto;min-inline-size:0;block-size:var(--st-cible-tactile-min);margin:0;color:var(--st-couleur-texte);cursor:pointer;background:transparent;border-radius:var(--st-rayon-sm);appearance:none}.st-range-slider__curseur::-webkit-slider-runnable-track{block-size:var(--st-espacement-1);background:linear-gradient(to right,var(--_rempli) var(--_part, 0%),var(--_piste) var(--_part, 0%));border-radius:var(--st-rayon-pleine)}.st-range-slider__curseur::-moz-range-track{block-size:var(--st-espacement-1);background:var(--_piste);border-radius:var(--st-rayon-pleine)}.st-range-slider__curseur::-moz-range-progress{block-size:var(--st-espacement-1);background:var(--_rempli);border-radius:var(--st-rayon-pleine)}.st-range-slider__curseur::-webkit-slider-thumb{inline-size:var(--st-espacement-5);block-size:var(--st-espacement-5);margin-block-start:calc((var(--st-espacement-1) - var(--st-espacement-5)) / 2);background:var(--_rempli);border:var(--st-epaisseur-moyenne) solid var(--st-couleur-surface);border-radius:var(--st-rayon-pleine);box-shadow:var(--st-ombre-repos);appearance:none}.st-range-slider__curseur::-moz-range-thumb{inline-size:var(--st-espacement-5);block-size:var(--st-espacement-5);background:var(--_rempli);border:var(--st-epaisseur-moyenne) solid var(--st-couleur-surface);border-radius:var(--st-rayon-pleine);box-shadow:var(--st-ombre-repos)}.st-range-slider__curseur:disabled{--_rempli: var(--st-couleur-texte-desactive);cursor:not-allowed}.st-range-slider__curseur:dir(rtl)::-webkit-slider-runnable-track{background:linear-gradient(to left,var(--_rempli) var(--_part, 0%),var(--_piste) var(--_part, 0%))}@media(forced-colors:active){.st-range-slider__curseur::-webkit-slider-runnable-track{background:Canvas;border:var(--st-epaisseur-fine) solid CanvasText}.st-range-slider__curseur::-webkit-slider-thumb{background:Highlight;border-color:Canvas}}.st-range-slider__valeur{flex:none;min-inline-size:4ch;font-size:var(--st-taille-sm);font-weight:var(--st-graisse-semi);font-variant-numeric:var(--st-chiffres-alignes);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte);text-align:end}.st-range-slider__bornes{display:flex;justify-content:space-between;font-size:var(--st-taille-xs);font-variant-numeric:var(--st-chiffres-alignes);line-height:var(--st-interligne-xs);color:var(--st-couleur-texte-discret)}.st-range-slider__champ{margin-block-start:var(--st-espacement-3)}\n"]
2715
+ }]
2716
+ }],
2717
+ propDecorators: {
2718
+ value: [{
2719
+ type: i0.Input,
2720
+ args: [{
2721
+ isSignal: true,
2722
+ alias: "value",
2723
+ required: false
2724
+ }]
2725
+ }, {
2726
+ type: i0.Output,
2727
+ args: ["valueChange"]
2728
+ }],
2729
+ pas: [{
2730
+ type: i0.Input,
2731
+ args: [{
2732
+ isSignal: true,
2733
+ alias: "pas",
2734
+ required: false
2735
+ }]
2736
+ }],
2737
+ unite: [{
2738
+ type: i0.Input,
2739
+ args: [{
2740
+ isSignal: true,
2741
+ alias: "unite",
2742
+ required: false
2743
+ }]
2744
+ }],
2745
+ avecChamp: [{
2746
+ type: i0.Input,
2747
+ args: [{
2748
+ isSignal: true,
2749
+ alias: "avecChamp",
2750
+ required: false
2751
+ }]
2752
+ }],
2753
+ formaterValeur: [{
2754
+ type: i0.Input,
2755
+ args: [{
2756
+ isSignal: true,
2757
+ alias: "formaterValeur",
2758
+ required: false
2759
+ }]
2760
+ }],
2761
+ enveloppe: [{
2762
+ type: i0.ViewChild,
2763
+ args: [i0.forwardRef(() => StFormField), { isSignal: true }]
2764
+ }]
2765
+ }
2766
+ });
2767
+ var StPhoneField = class StPhoneField extends ControleDeSaisie {
2768
+ libelles = inject(ST_LIBELLES);
2769
+ autocomplete = input("tel", ...ngDevMode ? [{ debugName: "autocomplete" }] : /* istanbul ignore next */ []);
2770
+ quitte = signal(false, ...ngDevMode ? [{ debugName: "quitte" }] : /* istanbul ignore next */ []);
2771
+ aideLue = computed(() => this.aideEtRaisons() ?? this.libelles().exempleDeTelephone, ...ngDevMode ? [{ debugName: "aideLue" }] : /* istanbul ignore next */ []);
2772
+ saisie = transformedValue(this.value, {
2773
+ parse: (texte) => {
2774
+ const forme = erreurTelephone(texte);
2775
+ return forme === null ? { value: normaliserTelephone(texte) } : {
2776
+ value: normaliserTelephone(texte),
2777
+ error: { kind: forme.kind }
2778
+ };
2779
+ },
2780
+ format: (valeur) => valeur
2781
+ });
2782
+ erreursAffichees = computed(() => fusionnerErreurs(this.errors(), this.saisie.parseErrors()), ...ngDevMode ? [{ debugName: "erreursAffichees" }] : /* istanbul ignore next */ []);
2783
+ afficherErreurs = computed(() => this.touched() || this.quitte(), ...ngDevMode ? [{ debugName: "afficherErreurs" }] : /* istanbul ignore next */ []);
2784
+ surSaisie(evenement) {
2785
+ this.saisie.set(this.texteSaisi(evenement));
2786
+ }
2787
+ aLaSortie() {
2788
+ this.quitte.set(true);
2789
+ this.touch.emit();
2790
+ }
2791
+ static ɵfac = i0.ɵɵngDeclareFactory({
2792
+ minVersion: "12.0.0",
2793
+ version: "22.2.0",
2794
+ ngImport: i0,
2795
+ type: StPhoneField,
2796
+ deps: null,
2797
+ target: i0.ɵɵFactoryTarget.Component
2798
+ });
2799
+ static ɵcmp = i0.ɵɵngDeclareComponent({
2800
+ minVersion: "17.1.0",
2801
+ version: "22.2.0",
2802
+ type: StPhoneField,
2803
+ isStandalone: true,
2804
+ selector: "st-phone-field",
2805
+ inputs: { autocomplete: {
2806
+ classPropertyName: "autocomplete",
2807
+ publicName: "autocomplete",
2808
+ isSignal: true,
2809
+ isRequired: false,
2810
+ transformFunction: null
2811
+ } },
2812
+ host: { classAttribute: "st-phone-field" },
2813
+ usesInheritance: true,
2814
+ ngImport: i0,
2815
+ template: "<st-form-field\n [libelle]=\"libelle()\"\n [aide]=\"aideLue()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"afficherErreurs()\"\n [obligatoire]=\"required()\"\n>\n <ng-content select=\"[stMeta]\" ngProjectAs=\"[stMeta]\" />\n <ng-content select=\"[stAide]\" ngProjectAs=\"[stAide]\" />\n <ng-content select=\"[stIndication]\" ngProjectAs=\"[stIndication]\" />\n <input\n #champ\n class=\"st-phone-field__champ\"\n stControleDeChamp\n type=\"tel\"\n dir=\"ltr\"\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</st-form-field>\n",
2816
+ 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-phone-field__champ:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-phone-field__champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-phone-field__champ:is(input,select){block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-phone-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( (var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var(--st-interligne-sm)) / 2 - var(--st-epaisseur-fine) ) ) );padding-block:var(--_remplissage-bloc);padding-inline:var(--st-espacement-3-5);font-family:inherit;font-size:var(--st-taille-sm);font-weight:var(--st-graisse-normale);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-bordure-forte);border-radius:var(--st-commande-rayon, var(--st-rayon-md))}@media(pointer:coarse){.st-phone-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( ( var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var( --st-interligne-md ) ) / 2 - var(--st-epaisseur-fine) ) ) );font-size:var(--st-taille-md);line-height:var(--st-interligne-md)}}.st-phone-field__champ::placeholder{color:var(--st-couleur-texte-attenue);opacity:1}@media(hover:hover){.st-phone-field__champ:hover:not(:disabled,:focus,[aria-invalid=true]){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-phone-field__champ:focus-visible{border-color:var(--st-couleur-primaire)}.st-phone-field__champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-phone-field__champ[aria-invalid=true]:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-phone-field__champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface);border-color:var(--st-couleur-bordure)}.st-phone-field__champ:disabled::placeholder{color:var(--st-couleur-texte-desactive)}.st-phone-field__champ:is(input,textarea):read-only:not(:disabled),.st-phone-field__champ[aria-readonly=true]:not(:disabled){font-weight:var(--st-graisse-moyenne);background:var(--st-couleur-surface-enfoncee)}.st-phone-field__champ{max-inline-size:var(--st-largeur-champ-lg);font-variant-numeric:var(--st-chiffres-references);text-align:start;unicode-bidi:isolate}\n"],
2817
+ dependencies: [{
2818
+ kind: "component",
2819
+ type: StFormField,
2820
+ selector: "st-form-field",
2821
+ inputs: [
2822
+ "libelle",
2823
+ "complement",
2824
+ "disposition",
2825
+ "presentation",
2826
+ "libelleMasque",
2827
+ "descriptionsDuControle"
2828
+ ]
2829
+ }, {
2830
+ kind: "directive",
2831
+ type: StControleDeChamp,
2832
+ selector: "[stControleDeChamp]"
2833
+ }],
2834
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
2835
+ });
2836
+ };
2837
+ i0.ɵɵngDeclareClassMetadata({
2838
+ minVersion: "12.0.0",
2839
+ version: "22.2.0",
2840
+ ngImport: i0,
2841
+ type: StPhoneField,
2842
+ decorators: [{
2843
+ type: Component,
2844
+ args: [{
2845
+ selector: "st-phone-field",
2846
+ changeDetection: ChangeDetectionStrategy.OnPush,
2847
+ imports: [StFormField, StControleDeChamp],
2848
+ host: { class: "st-phone-field" },
2849
+ template: "<st-form-field\n [libelle]=\"libelle()\"\n [aide]=\"aideLue()\"\n [erreurs]=\"erreursAffichees()\"\n [afficherErreurs]=\"afficherErreurs()\"\n [obligatoire]=\"required()\"\n>\n <ng-content select=\"[stMeta]\" ngProjectAs=\"[stMeta]\" />\n <ng-content select=\"[stAide]\" ngProjectAs=\"[stAide]\" />\n <ng-content select=\"[stIndication]\" ngProjectAs=\"[stIndication]\" />\n <input\n #champ\n class=\"st-phone-field__champ\"\n stControleDeChamp\n type=\"tel\"\n dir=\"ltr\"\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</st-form-field>\n",
2850
+ 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-phone-field__champ:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus)}.st-phone-field__champ{box-sizing:border-box;inline-size:100%;min-block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-phone-field__champ:is(input,select){block-size:var(--st-commande-hauteur, var(--st-hauteur-commande-defaut))}.st-phone-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( (var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var(--st-interligne-sm)) / 2 - var(--st-epaisseur-fine) ) ) );padding-block:var(--_remplissage-bloc);padding-inline:var(--st-espacement-3-5);font-family:inherit;font-size:var(--st-taille-sm);font-weight:var(--st-graisse-normale);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte);background:var(--st-couleur-surface);border:var(--st-epaisseur-fine) solid var(--st-couleur-bordure-forte);border-radius:var(--st-commande-rayon, var(--st-rayon-md))}@media(pointer:coarse){.st-phone-field__champ{--_remplissage-bloc: max( var(--st-espacement-demi), min( var(--st-espacement-2), calc( ( var(--st-commande-hauteur, var(--st-hauteur-commande-defaut)) - var( --st-interligne-md ) ) / 2 - var(--st-epaisseur-fine) ) ) );font-size:var(--st-taille-md);line-height:var(--st-interligne-md)}}.st-phone-field__champ::placeholder{color:var(--st-couleur-texte-attenue);opacity:1}@media(hover:hover){.st-phone-field__champ:hover:not(:disabled,:focus,[aria-invalid=true]){border-color:var(--st-couleur-texte-discret);transition:border-color var(--st-duree-rapide) var(--st-courbe-standard)}}.st-phone-field__champ:focus-visible{border-color:var(--st-couleur-primaire)}.st-phone-field__champ[aria-invalid=true]{border-color:var(--st-couleur-danger);box-shadow:inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-phone-field__champ[aria-invalid=true]:focus-visible{outline:var(--st-focus-epaisseur) solid var(--st-couleur-anneau-focus);outline-offset:var(--st-focus-decalage);box-shadow:0 0 0 var(--st-focus-lisere) var(--st-couleur-lisere-focus),inset 0 0 0 var(--st-epaisseur-fine) var(--st-couleur-danger)}.st-phone-field__champ:disabled{color:var(--st-couleur-texte-desactive);cursor:not-allowed;background:var(--st-couleur-surface);border-color:var(--st-couleur-bordure)}.st-phone-field__champ:disabled::placeholder{color:var(--st-couleur-texte-desactive)}.st-phone-field__champ:is(input,textarea):read-only:not(:disabled),.st-phone-field__champ[aria-readonly=true]:not(:disabled){font-weight:var(--st-graisse-moyenne);background:var(--st-couleur-surface-enfoncee)}.st-phone-field__champ{max-inline-size:var(--st-largeur-champ-lg);font-variant-numeric:var(--st-chiffres-references);text-align:start;unicode-bidi:isolate}\n"]
2851
+ }]
2852
+ }],
2853
+ propDecorators: { autocomplete: [{
2854
+ type: i0.Input,
2855
+ args: [{
2856
+ isSignal: true,
2857
+ alias: "autocomplete",
2858
+ required: false
2859
+ }]
2860
+ }] }
2861
+ });
2862
+ const PAR_DEFAUT = {
2863
+ frequence: "mensuelle",
2864
+ intervalle: 1,
2865
+ jourDuMois: null,
2866
+ debut: null,
2867
+ fin: "jamais",
2868
+ jusquau: null,
2869
+ nombre: null
2870
+ };
2871
+ const FREQUENCES = [
2872
+ "quotidienne",
2873
+ "hebdomadaire",
2874
+ "mensuelle",
2875
+ "annuelle"
2876
+ ];
2877
+ function brouillonDe(recurrence) {
2878
+ const jusquau = recurrence.jusquau ?? null;
2879
+ const nombre = recurrence.nombre ?? null;
2880
+ return {
2881
+ frequence: recurrence.frequence,
2882
+ intervalle: recurrence.intervalle ?? 1,
2883
+ jourDuMois: recurrence.jourDuMois ?? null,
2884
+ debut: recurrence.debut,
2885
+ fin: jusquau !== null ? "date" : nombre !== null ? "nombre" : "jamais",
2886
+ jusquau,
2887
+ nombre
2888
+ };
2889
+ }
2890
+ function recurrenceDe(brouillon) {
2891
+ if (brouillon.debut === null) return null;
2892
+ const mensuelle = brouillon.frequence === "mensuelle" || brouillon.frequence === "annuelle";
2893
+ return {
2894
+ frequence: brouillon.frequence,
2895
+ intervalle: Math.max(1, brouillon.intervalle ?? 1),
2896
+ debut: brouillon.debut,
2897
+ ...mensuelle && brouillon.jourDuMois !== null ? { jourDuMois: brouillon.jourDuMois } : {},
2898
+ ...brouillon.fin === "date" && brouillon.jusquau !== null ? { jusquau: brouillon.jusquau } : {},
2899
+ ...brouillon.fin === "nombre" && brouillon.nombre !== null ? { nombre: brouillon.nombre } : {}
2900
+ };
2901
+ }
2902
+ function memeRecurrence(a, b) {
2903
+ if (a === null || b === null) return a === b;
2904
+ return a.frequence === b.frequence && (a.intervalle ?? 1) === (b.intervalle ?? 1) && (a.jourDuMois ?? null) === (b.jourDuMois ?? null) && a.debut === b.debut && (a.jusquau ?? null) === (b.jusquau ?? null) && (a.nombre ?? null) === (b.nombre ?? null);
2905
+ }
2906
+ var StRecurrenceField = class StRecurrenceField extends ContratDeChamp {
2907
+ locale = inject(ST_LOCALE);
2908
+ catalogue = catalogueDesFormulaires();
2909
+ libellesDesChamps = computed(() => this.catalogue().libelles, ...ngDevMode ? [{ debugName: "libellesDesChamps" }] : /* istanbul ignore next */ []);
2910
+ langueDeRepli = computed(() => this.catalogue().langueDeRepli, ...ngDevMode ? [{ debugName: "langueDeRepli" }] : /* istanbul ignore next */ []);
2911
+ value = model(null, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
2912
+ dateMin = input(null, ...ngDevMode ? [{ debugName: "dateMin" }] : /* istanbul ignore next */ []);
2913
+ frequenceChamp = viewChild(StSelect, ...ngDevMode ? [{ debugName: "frequenceChamp" }] : /* istanbul ignore next */ []);
2914
+ debutChamp = viewChild("debut", ...ngDevMode ? [{ debugName: "debutChamp" }] : /* istanbul ignore next */ []);
2915
+ idDuRecapitulatif = inject(StIdentifiants).prochain("st-recurrence");
2916
+ quitte = signal(false, ...ngDevMode ? [{ debugName: "quitte" }] : /* istanbul ignore next */ []);
2917
+ brouillon = linkedSignal({
2918
+ ...ngDevMode ? { debugName: "brouillon" } : /* istanbul ignore next */ {},
2919
+ source: this.value,
2920
+ computation: (recurrence, precedent) => {
2921
+ if (precedent !== void 0 && memeRecurrence(recurrenceDe(precedent.value), recurrence)) return precedent.value;
2922
+ return recurrence === null ? precedent?.value ?? PAR_DEFAUT : brouillonDe(recurrence);
2923
+ }
2924
+ });
2925
+ optionsDeFrequence = computed(() => FREQUENCES.map((frequence) => ({
2926
+ valeur: frequence,
2927
+ libelle: this.libellesDesChamps().frequences[frequence]
2928
+ })), ...ngDevMode ? [{ debugName: "optionsDeFrequence" }] : /* istanbul ignore next */ []);
2929
+ optionsDeJour = computed(() => Array.from({ length: 31 }, (_, rang) => ({
2930
+ valeur: String(rang + 1),
2931
+ libelle: String(rang + 1)
2932
+ })), ...ngDevMode ? [{ debugName: "optionsDeJour" }] : /* istanbul ignore next */ []);
2933
+ optionsDeFin = computed(() => {
2934
+ const libelles = this.libellesDesChamps();
2935
+ return [
2936
+ {
2937
+ valeur: "jamais",
2938
+ libelle: libelles.finJamais
2939
+ },
2940
+ {
2941
+ valeur: "date",
2942
+ libelle: libelles.finALaDate
2943
+ },
2944
+ {
2945
+ valeur: "nombre",
2946
+ libelle: libelles.finApresNombre
2947
+ }
2948
+ ];
2949
+ }, ...ngDevMode ? [{ debugName: "optionsDeFin" }] : /* istanbul ignore next */ []);
2950
+ avecJourDuMois = computed(() => {
2951
+ const frequence = this.brouillon().frequence;
2952
+ return frequence === "mensuelle" || frequence === "annuelle";
2953
+ }, ...ngDevMode ? [{ debugName: "avecJourDuMois" }] : /* istanbul ignore next */ []);
2954
+ jourChoisi = computed(() => {
2955
+ const jour = this.brouillon().jourDuMois;
2956
+ return jour === null ? "" : String(jour);
2957
+ }, ...ngDevMode ? [{ debugName: "jourChoisi" }] : /* istanbul ignore next */ []);
2958
+ unite = computed(() => this.libellesDesChamps().unitesDIntervalle[this.brouillon().frequence], ...ngDevMode ? [{ debugName: "unite" }] : /* istanbul ignore next */ []);
2959
+ recapitulatif = computed(() => {
2960
+ const recurrence = this.value();
2961
+ return recurrence === null ? null : decrireRecurrence(recurrence, this.locale());
2962
+ }, ...ngDevMode ? [{ debugName: "recapitulatif" }] : /* istanbul ignore next */ []);
2963
+ decritPar = computed(() => this.recapitulatif() === null ? [] : [this.idDuRecapitulatif], ...ngDevMode ? [{ debugName: "decritPar" }] : /* istanbul ignore next */ []);
2964
+ modifier(partie) {
2965
+ const brouillon = {
2966
+ ...this.brouillon(),
2967
+ ...partie
2968
+ };
2969
+ this.brouillon.set(brouillon);
2970
+ this.value.set(recurrenceDe(brouillon));
2971
+ }
2972
+ choisirLaFrequence(valeur) {
2973
+ if (FREQUENCES.includes(valeur)) this.modifier({ frequence: valeur });
2974
+ }
2975
+ choisirLeJour(valeur) {
2976
+ this.modifier({ jourDuMois: valeur === "" ? null : Number(valeur) });
2977
+ }
2978
+ choisirLaFin(valeur) {
2979
+ if (valeur === "jamais" || valeur === "date" || valeur === "nombre") this.modifier({ fin: valeur });
2980
+ }
2981
+ quitter() {
2982
+ this.quitte.set(true);
2983
+ this.touch.emit();
2984
+ }
2985
+ focus(options) {
2986
+ if (this.brouillon().debut === null) this.debutChamp()?.focus(options);
2987
+ else this.frequenceChamp()?.focus(options);
2988
+ }
2989
+ static ɵfac = i0.ɵɵngDeclareFactory({
2990
+ minVersion: "12.0.0",
2991
+ version: "22.2.0",
2992
+ ngImport: i0,
2993
+ type: StRecurrenceField,
2994
+ deps: null,
2995
+ target: i0.ɵɵFactoryTarget.Component
2996
+ });
2997
+ static ɵcmp = i0.ɵɵngDeclareComponent({
2998
+ minVersion: "17.0.0",
2999
+ version: "22.2.0",
3000
+ type: StRecurrenceField,
3001
+ isStandalone: true,
3002
+ selector: "st-recurrence-field",
3003
+ inputs: {
3004
+ value: {
3005
+ classPropertyName: "value",
3006
+ publicName: "value",
3007
+ isSignal: true,
3008
+ isRequired: false,
3009
+ transformFunction: null
3010
+ },
3011
+ dateMin: {
3012
+ classPropertyName: "dateMin",
3013
+ publicName: "dateMin",
3014
+ isSignal: true,
3015
+ isRequired: false,
3016
+ transformFunction: null
3017
+ }
3018
+ },
3019
+ outputs: { value: "valueChange" },
3020
+ host: { classAttribute: "st-recurrence-field" },
3021
+ viewQueries: [{
3022
+ propertyName: "frequenceChamp",
3023
+ first: true,
3024
+ predicate: StSelect,
3025
+ descendants: true,
3026
+ isSignal: true
3027
+ }, {
3028
+ propertyName: "debutChamp",
3029
+ first: true,
3030
+ predicate: ["debut"],
3031
+ descendants: true,
3032
+ isSignal: true
3033
+ }],
3034
+ usesInheritance: true,
3035
+ ngImport: i0,
3036
+ template: "<st-fieldset\n [legende]=\"libelle()\"\n [aide]=\"aideEtRaisons()\"\n [erreurs]=\"errors()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n [disabled]=\"disabled()\"\n [decritPar]=\"decritPar()\"\n>\n <div class=\"st-recurrence-field__lignes\">\n <div class=\"st-recurrence-field__ligne\">\n <st-select\n [libelle]=\"libellesDesChamps().frequence\"\n [options]=\"optionsDeFrequence()\"\n [value]=\"brouillon().frequence\"\n [readonly]=\"readonly()\"\n (valueChange)=\"choisirLaFrequence($event)\"\n (touch)=\"quitter()\"\n />\n <st-number-field\n [libelle]=\"libellesDesChamps().intervalle\"\n [unite]=\"unite()\"\n [min]=\"1\"\n [value]=\"brouillon().intervalle\"\n [readonly]=\"readonly()\"\n (valueChange)=\"modifier({ intervalle: $event })\"\n (touch)=\"quitter()\"\n />\n </div>\n\n <!-- Le jour du mois et la premiere echeance vont par deux, comme la frequence et l'intervalle. -->\n <div class=\"st-recurrence-field__ligne\">\n @if (avecJourDuMois()) {\n <!-- La regle des 29, 30 et 31 est l'aide du champ : elle se lit avant tout choix. Tout son\n texte vient du catalogue (les jours sont des chiffres) : son `lang` au repli (D-29). -->\n <st-select\n [attr.lang]=\"langueDeRepli()\"\n [libelle]=\"libellesDesChamps().jourDuMois\"\n [aide]=\"libellesDesChamps().regleDeFinDeMois\"\n [texteVide]=\"libellesDesChamps().jourDeLaPremiereEcheance\"\n [options]=\"optionsDeJour()\"\n [value]=\"jourChoisi()\"\n [readonly]=\"readonly()\"\n (valueChange)=\"choisirLeJour($event)\"\n (touch)=\"quitter()\"\n />\n }\n\n <st-date-field\n #debut\n [libelle]=\"libellesDesChamps().premiereEcheance\"\n [dateMin]=\"dateMin()\"\n [required]=\"required()\"\n [value]=\"brouillon().debut\"\n [readonly]=\"readonly()\"\n (valueChange)=\"modifier({ debut: $event })\"\n (touch)=\"quitter()\"\n />\n </div>\n\n <st-radio-group\n [attr.lang]=\"langueDeRepli()\"\n [legende]=\"libellesDesChamps().fin\"\n [options]=\"optionsDeFin()\"\n [value]=\"brouillon().fin\"\n [readonly]=\"readonly()\"\n (valueChange)=\"choisirLaFin($event)\"\n />\n @switch (brouillon().fin) {\n @case ('date') {\n <st-date-field\n [libelle]=\"libellesDesChamps().derniereEcheance\"\n [dateMin]=\"brouillon().debut ?? dateMin()\"\n [value]=\"brouillon().jusquau\"\n [readonly]=\"readonly()\"\n (valueChange)=\"modifier({ jusquau: $event })\"\n (touch)=\"quitter()\"\n />\n }\n @case ('nombre') {\n <st-number-field\n [libelle]=\"libellesDesChamps().nombreDEcheances\"\n [min]=\"1\"\n [value]=\"brouillon().nombre\"\n [readonly]=\"readonly()\"\n (valueChange)=\"modifier({ nombre: $event })\"\n (touch)=\"quitter()\"\n />\n }\n }\n\n <!-- Le recapitulatif DECRIT le groupe, sans region vivante : il ne s'annonce pas a chaque\n choix, il se lit en entrant dans le groupe. -->\n @if (recapitulatif(); as texte) {\n <div class=\"st-recurrence-field__recapitulatif\">\n <st-text variante=\"legende\" graisse=\"semi\" [attr.lang]=\"langueDeRepli()\">{{\n libellesDesChamps().recapitulatif\n }}</st-text>\n <st-text [attr.id]=\"idDuRecapitulatif\">{{ texte }}</st-text>\n </div>\n }\n </div>\n</st-fieldset>\n",
3037
+ 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;min-inline-size:0;container-type:inline-size}.st-recurrence-field__lignes{display:flex;flex-direction:column;gap:var(--st-espacement-4)}.st-recurrence-field__ligne{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--st-espacement-4)}@container (min-width: 30rem){.st-recurrence-field__ligne{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}}.st-recurrence-field__recapitulatif{display:flex;flex-direction:column;gap:var(--st-espacement-1);padding:var(--st-espacement-3) var(--st-espacement-4);background:var(--st-couleur-surface-conteneur-bas);border-radius:var(--st-rayon-md)}@media(forced-colors:active){.st-recurrence-field__recapitulatif{border:var(--st-epaisseur-fine) solid CanvasText}}\n"],
3038
+ dependencies: [
3039
+ {
3040
+ kind: "component",
3041
+ type: StDateField,
3042
+ selector: "st-date-field",
3043
+ inputs: [
3044
+ "value",
3045
+ "dateMin",
3046
+ "dateMax",
3047
+ "autocomplete",
3048
+ "annees",
3049
+ "raccourcis",
3050
+ "dispositionDesRaccourcis",
3051
+ "titreDesRaccourcis"
3052
+ ],
3053
+ outputs: ["valueChange"]
3054
+ },
3055
+ {
3056
+ kind: "component",
3057
+ type: StFieldset,
3058
+ selector: "st-fieldset",
3059
+ inputs: [
3060
+ "legende",
3061
+ "contenu",
3062
+ "disposition",
3063
+ "toutesLesErreurs",
3064
+ "choixExclusif",
3065
+ "readonly",
3066
+ "disabled",
3067
+ "hidden",
3068
+ "decritPar"
3069
+ ]
3070
+ },
3071
+ {
3072
+ kind: "component",
3073
+ type: StNumberField,
3074
+ selector: "st-number-field",
3075
+ inputs: [
3076
+ "value",
3077
+ "decimales",
3078
+ "pas",
3079
+ "unite"
3080
+ ],
3081
+ outputs: ["valueChange"]
3082
+ },
3083
+ {
3084
+ kind: "component",
3085
+ type: StRadioGroup,
3086
+ selector: "st-radio-group",
3087
+ inputs: [
3088
+ "legende",
3089
+ "aide",
3090
+ "options",
3091
+ "disposition",
3092
+ "value",
3093
+ "errors",
3094
+ "touched",
3095
+ "dirty",
3096
+ "pending",
3097
+ "disabled",
3098
+ "disabledReasons",
3099
+ "readonly",
3100
+ "required",
3101
+ "hidden",
3102
+ "name"
3103
+ ],
3104
+ outputs: ["valueChange", "touch"]
3105
+ },
3106
+ {
3107
+ kind: "component",
3108
+ type: StSelect,
3109
+ selector: "st-select",
3110
+ inputs: [
3111
+ "options",
3112
+ "texteVide",
3113
+ "autocomplete",
3114
+ "icone",
3115
+ "presentation",
3116
+ "variante"
3117
+ ]
3118
+ },
3119
+ {
3120
+ kind: "component",
3121
+ type: StText,
3122
+ selector: "st-text",
3123
+ inputs: [
3124
+ "variante",
3125
+ "graisse",
3126
+ "enLigne",
3127
+ "tronquerA",
3128
+ "revelable"
3129
+ ]
3130
+ }
3131
+ ],
3132
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
3133
+ });
3134
+ };
3135
+ i0.ɵɵngDeclareClassMetadata({
3136
+ minVersion: "12.0.0",
3137
+ version: "22.2.0",
3138
+ ngImport: i0,
3139
+ type: StRecurrenceField,
3140
+ decorators: [{
3141
+ type: Component,
3142
+ args: [{
3143
+ selector: "st-recurrence-field",
3144
+ changeDetection: ChangeDetectionStrategy.OnPush,
3145
+ imports: [
3146
+ StDateField,
3147
+ StFieldset,
3148
+ StNumberField,
3149
+ StRadioGroup,
3150
+ StSelect,
3151
+ StText
3152
+ ],
3153
+ host: { class: "st-recurrence-field" },
3154
+ template: "<st-fieldset\n [legende]=\"libelle()\"\n [aide]=\"aideEtRaisons()\"\n [erreurs]=\"errors()\"\n [afficherErreurs]=\"touched() || quitte()\"\n [obligatoire]=\"required()\"\n [disabled]=\"disabled()\"\n [decritPar]=\"decritPar()\"\n>\n <div class=\"st-recurrence-field__lignes\">\n <div class=\"st-recurrence-field__ligne\">\n <st-select\n [libelle]=\"libellesDesChamps().frequence\"\n [options]=\"optionsDeFrequence()\"\n [value]=\"brouillon().frequence\"\n [readonly]=\"readonly()\"\n (valueChange)=\"choisirLaFrequence($event)\"\n (touch)=\"quitter()\"\n />\n <st-number-field\n [libelle]=\"libellesDesChamps().intervalle\"\n [unite]=\"unite()\"\n [min]=\"1\"\n [value]=\"brouillon().intervalle\"\n [readonly]=\"readonly()\"\n (valueChange)=\"modifier({ intervalle: $event })\"\n (touch)=\"quitter()\"\n />\n </div>\n\n <!-- Le jour du mois et la premiere echeance vont par deux, comme la frequence et l'intervalle. -->\n <div class=\"st-recurrence-field__ligne\">\n @if (avecJourDuMois()) {\n <!-- La regle des 29, 30 et 31 est l'aide du champ : elle se lit avant tout choix. Tout son\n texte vient du catalogue (les jours sont des chiffres) : son `lang` au repli (D-29). -->\n <st-select\n [attr.lang]=\"langueDeRepli()\"\n [libelle]=\"libellesDesChamps().jourDuMois\"\n [aide]=\"libellesDesChamps().regleDeFinDeMois\"\n [texteVide]=\"libellesDesChamps().jourDeLaPremiereEcheance\"\n [options]=\"optionsDeJour()\"\n [value]=\"jourChoisi()\"\n [readonly]=\"readonly()\"\n (valueChange)=\"choisirLeJour($event)\"\n (touch)=\"quitter()\"\n />\n }\n\n <st-date-field\n #debut\n [libelle]=\"libellesDesChamps().premiereEcheance\"\n [dateMin]=\"dateMin()\"\n [required]=\"required()\"\n [value]=\"brouillon().debut\"\n [readonly]=\"readonly()\"\n (valueChange)=\"modifier({ debut: $event })\"\n (touch)=\"quitter()\"\n />\n </div>\n\n <st-radio-group\n [attr.lang]=\"langueDeRepli()\"\n [legende]=\"libellesDesChamps().fin\"\n [options]=\"optionsDeFin()\"\n [value]=\"brouillon().fin\"\n [readonly]=\"readonly()\"\n (valueChange)=\"choisirLaFin($event)\"\n />\n @switch (brouillon().fin) {\n @case ('date') {\n <st-date-field\n [libelle]=\"libellesDesChamps().derniereEcheance\"\n [dateMin]=\"brouillon().debut ?? dateMin()\"\n [value]=\"brouillon().jusquau\"\n [readonly]=\"readonly()\"\n (valueChange)=\"modifier({ jusquau: $event })\"\n (touch)=\"quitter()\"\n />\n }\n @case ('nombre') {\n <st-number-field\n [libelle]=\"libellesDesChamps().nombreDEcheances\"\n [min]=\"1\"\n [value]=\"brouillon().nombre\"\n [readonly]=\"readonly()\"\n (valueChange)=\"modifier({ nombre: $event })\"\n (touch)=\"quitter()\"\n />\n }\n }\n\n <!-- Le recapitulatif DECRIT le groupe, sans region vivante : il ne s'annonce pas a chaque\n choix, il se lit en entrant dans le groupe. -->\n @if (recapitulatif(); as texte) {\n <div class=\"st-recurrence-field__recapitulatif\">\n <st-text variante=\"legende\" graisse=\"semi\" [attr.lang]=\"langueDeRepli()\">{{\n libellesDesChamps().recapitulatif\n }}</st-text>\n <st-text [attr.id]=\"idDuRecapitulatif\">{{ texte }}</st-text>\n </div>\n }\n </div>\n</st-fieldset>\n",
3155
+ 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;min-inline-size:0;container-type:inline-size}.st-recurrence-field__lignes{display:flex;flex-direction:column;gap:var(--st-espacement-4)}.st-recurrence-field__ligne{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--st-espacement-4)}@container (min-width: 30rem){.st-recurrence-field__ligne{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}}.st-recurrence-field__recapitulatif{display:flex;flex-direction:column;gap:var(--st-espacement-1);padding:var(--st-espacement-3) var(--st-espacement-4);background:var(--st-couleur-surface-conteneur-bas);border-radius:var(--st-rayon-md)}@media(forced-colors:active){.st-recurrence-field__recapitulatif{border:var(--st-epaisseur-fine) solid CanvasText}}\n"]
3156
+ }]
3157
+ }],
3158
+ propDecorators: {
3159
+ value: [{
3160
+ type: i0.Input,
3161
+ args: [{
3162
+ isSignal: true,
3163
+ alias: "value",
3164
+ required: false
3165
+ }]
3166
+ }, {
3167
+ type: i0.Output,
3168
+ args: ["valueChange"]
3169
+ }],
3170
+ dateMin: [{
3171
+ type: i0.Input,
3172
+ args: [{
3173
+ isSignal: true,
3174
+ alias: "dateMin",
3175
+ required: false
3176
+ }]
3177
+ }],
3178
+ frequenceChamp: [{
3179
+ type: i0.ViewChild,
3180
+ args: [i0.forwardRef(() => StSelect), { isSignal: true }]
3181
+ }],
3182
+ debutChamp: [{
3183
+ type: i0.ViewChild,
3184
+ args: ["debut", { isSignal: true }]
3185
+ }]
3186
+ }
3187
+ });
3188
+ export { LIBELLES_FORMULAIRES_EN, LIBELLES_FORMULAIRES_FR, ST_LIBELLES_FORMULAIRES, StAmountField, StAmountRange, StDateField, StDateRange, StForm, StNumberField, StPhoneField, StRangeSlider, StRecurrenceField, StTimeField, catalogueDesFormulaires, erreurPlageDeMontants, fournirLibellesFormulaires, libellesDesFormulaires };
444
3189
 
445
- export { StAmountField, StDateField, StDateRange };
446
- //# sourceMappingURL=starterlib-ui-formulaires.mjs.map
3190
+ //# sourceMappingURL=starterlib-ui-formulaires.mjs.map