@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
@@ -0,0 +1,2449 @@
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, InjectionToken, Injector, afterNextRender, booleanAttribute, computed, effect, inject, input, isDevMode, linkedSignal, model, numberAttribute, output, signal, untracked, viewChild } from "@angular/core";
3
+ import { AnnonceLocale, ICONES_DE_TON, REGION_VIVANTE_PARENTE, ST_LIBELLES, StBanner, StButton, StCode, StCopyButton, StFormActions, StHeading, StIcon, StIdentifiants, StInlineMessage, StLink, StPageTitle, StSpinner, StStatusPill, StStepper, StTimer } from "@starterlib/ui";
4
+ import { estUneErreurRejouable, sansCommandesDeDirection, varianteDErreur } from "@starterlib/util";
5
+ import { StDate } from "@starterlib/ui/donnees";
6
+ import { DOCUMENT, NgTemplateOutlet } from "@angular/common";
7
+ import { RouterLink } from "@angular/router";
8
+ import { StCheckbox, StInput, StOtpField, erreurCode } from "@starterlib/ui/saisie";
9
+ var StRefusal = class StRefusal {
10
+ injecteur = inject(Injector);
11
+ libelles = inject(ST_LIBELLES);
12
+ erreur = input.required(...ngDevMode ? [{ debugName: "erreur" }] : /* istanbul ignore next */ []);
13
+ message = input.required(...ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []);
14
+ titre = input(null, ...ngDevMode ? [{ debugName: "titre" }] : /* istanbul ignore next */ []);
15
+ codeInconnu = input(false, {
16
+ ...ngDevMode ? { debugName: "codeInconnu" } : /* istanbul ignore next */ {},
17
+ transform: booleanAttribute
18
+ });
19
+ rejeuEnCours = input(false, {
20
+ ...ngDevMode ? { debugName: "rejeuEnCours" } : /* istanbul ignore next */ {},
21
+ transform: booleanAttribute
22
+ });
23
+ rechargementEnCours = input(false, {
24
+ ...ngDevMode ? { debugName: "rechargementEnCours" } : /* istanbul ignore next */ {},
25
+ transform: booleanAttribute
26
+ });
27
+ rejeu = output();
28
+ rechargement = output();
29
+ attenteTerminee = output();
30
+ banniere = viewChild.required(StBanner, {
31
+ ...ngDevMode ? { debugName: "banniere" } : /* istanbul ignore next */ {},
32
+ read: ElementRef
33
+ });
34
+ decompte = viewChild(StTimer, ...ngDevMode ? [{ debugName: "decompte" }] : /* istanbul ignore next */ []);
35
+ variante = computed(() => {
36
+ const erreur = this.erreur();
37
+ return varianteDErreur(erreur.status, erreur.code, erreur.horsLigne);
38
+ }, ...ngDevMode ? [{ debugName: "variante" }] : /* istanbul ignore next */ []);
39
+ rejouableSelonLaTable = computed(() => estUneErreurRejouable(this.variante(), this.erreur().status), ...ngDevMode ? [{ debugName: "rejouableSelonLaTable" }] : /* istanbul ignore next */ []);
40
+ ton = computed(() => this.rejouableSelonLaTable() || this.variante() === "conflit" ? "avertissement" : "danger", ...ngDevMode ? [{ debugName: "ton" }] : /* istanbul ignore next */ []);
41
+ titreLu = computed(() => this.titre() ?? (this.variante() === "hors-ligne" ? this.libelles().horsConnexion : null), ...ngDevMode ? [{ debugName: "titreLu" }] : /* istanbul ignore next */ []);
42
+ attente = computed(() => {
43
+ const secondes = this.erreur().reessayerDans;
44
+ return this.variante() === "limite" && secondes !== null && secondes > 0 ? secondes : null;
45
+ }, ...ngDevMode ? [{ debugName: "attente" }] : /* istanbul ignore next */ []);
46
+ attenteFinie = linkedSignal({
47
+ ...ngDevMode ? { debugName: "attenteFinie" } : /* istanbul ignore next */ {},
48
+ source: this.erreur,
49
+ computation: () => false
50
+ });
51
+ rejouable = computed(() => this.rejouableSelonLaTable() && (this.variante() !== "limite" || this.attente() !== null), ...ngDevMode ? [{ debugName: "rejouable" }] : /* istanbul ignore next */ []);
52
+ enAttente = computed(() => this.attente() !== null && !this.attenteFinie(), ...ngDevMode ? [{ debugName: "enAttente" }] : /* istanbul ignore next */ []);
53
+ raisonDuRejeu = computed(() => this.enAttente() ? this.decompte()?.phrase() ?? null : null, ...ngDevMode ? [{ debugName: "raisonDuRejeu" }] : /* istanbul ignore next */ []);
54
+ constructor() {
55
+ effect(() => {
56
+ this.erreur();
57
+ afterNextRender(() => {
58
+ this.banniere().nativeElement.focus();
59
+ }, { injector: this.injecteur });
60
+ });
61
+ }
62
+ finDeLAttente() {
63
+ this.attenteFinie.set(true);
64
+ this.attenteTerminee.emit();
65
+ }
66
+ static ɵfac = i0.ɵɵngDeclareFactory({
67
+ minVersion: "12.0.0",
68
+ version: "22.2.0",
69
+ ngImport: i0,
70
+ type: StRefusal,
71
+ deps: [],
72
+ target: i0.ɵɵFactoryTarget.Component
73
+ });
74
+ static ɵcmp = i0.ɵɵngDeclareComponent({
75
+ minVersion: "17.0.0",
76
+ version: "22.2.0",
77
+ type: StRefusal,
78
+ isStandalone: true,
79
+ selector: "st-refusal",
80
+ inputs: {
81
+ erreur: {
82
+ classPropertyName: "erreur",
83
+ publicName: "erreur",
84
+ isSignal: true,
85
+ isRequired: true,
86
+ transformFunction: null
87
+ },
88
+ message: {
89
+ classPropertyName: "message",
90
+ publicName: "message",
91
+ isSignal: true,
92
+ isRequired: true,
93
+ transformFunction: null
94
+ },
95
+ titre: {
96
+ classPropertyName: "titre",
97
+ publicName: "titre",
98
+ isSignal: true,
99
+ isRequired: false,
100
+ transformFunction: null
101
+ },
102
+ codeInconnu: {
103
+ classPropertyName: "codeInconnu",
104
+ publicName: "codeInconnu",
105
+ isSignal: true,
106
+ isRequired: false,
107
+ transformFunction: null
108
+ },
109
+ rejeuEnCours: {
110
+ classPropertyName: "rejeuEnCours",
111
+ publicName: "rejeuEnCours",
112
+ isSignal: true,
113
+ isRequired: false,
114
+ transformFunction: null
115
+ },
116
+ rechargementEnCours: {
117
+ classPropertyName: "rechargementEnCours",
118
+ publicName: "rechargementEnCours",
119
+ isSignal: true,
120
+ isRequired: false,
121
+ transformFunction: null
122
+ }
123
+ },
124
+ outputs: {
125
+ rejeu: "rejeu",
126
+ rechargement: "rechargement",
127
+ attenteTerminee: "attenteTerminee"
128
+ },
129
+ host: {
130
+ properties: { "attr.data-variante": "variante()" },
131
+ classAttribute: "st-refusal"
132
+ },
133
+ viewQueries: [{
134
+ propertyName: "banniere",
135
+ first: true,
136
+ predicate: StBanner,
137
+ descendants: true,
138
+ read: ElementRef,
139
+ isSignal: true
140
+ }, {
141
+ propertyName: "decompte",
142
+ first: true,
143
+ predicate: StTimer,
144
+ descendants: true,
145
+ isSignal: true
146
+ }],
147
+ ngImport: i0,
148
+ template: "<!-- Sans alert ni status (REGION_VIVANTE_PARENTE, D-18) : le focus seul la fait lire, une fois. -->\n<st-banner tabindex=\"-1\" [ton]=\"ton()\" [titre]=\"titreLu()\" [message]=\"message()\">\n @if (attente(); as secondes) {\n <st-timer [secondes]=\"secondes\" (termine)=\"finDeLAttente()\" />\n }\n <div class=\"st-refusal__actions\">\n <!-- `chargement` : la requete relancee attend, et un second clic est avale (D-7). -->\n @if (variante() === 'conflit') {\n <button\n stButton\n type=\"button\"\n taille=\"sm\"\n iconeAvant=\"rafraichir\"\n [chargement]=\"rechargementEnCours()\"\n (click)=\"rechargement.emit()\"\n >\n {{ libelles().recharger }}\n </button>\n } @else if (rejouable()) {\n <button\n stButton\n type=\"button\"\n taille=\"sm\"\n iconeAvant=\"rafraichir\"\n [chargement]=\"rejeuEnCours()\"\n [indisponible]=\"enAttente()\"\n [raisonIndisponible]=\"raisonDuRejeu()\"\n (click)=\"rejeu.emit()\"\n >\n {{ libelles().reessayer }}\n </button>\n }\n <ng-content select=\"[actions]\" />\n </div>\n @if (codeInconnu()) {\n <div class=\"st-refusal__technique\">\n <div class=\"st-refusal__fait\">\n <!-- Vue ici, lue par st-code, qui la dit avant la valeur : une seule lecture. -->\n <span class=\"st-refusal__etiquette\" aria-hidden=\"true\">{{ libelles().codeTechnique }}</span>\n <st-code [valeur]=\"erreur().code\" [etiquette]=\"libelles().codeTechnique\" />\n </div>\n @if (erreur().traceId; as trace) {\n <div class=\"st-refusal__fait\">\n <span class=\"st-refusal__etiquette\" aria-hidden=\"true\">{{\n libelles().identifiantDeTrace\n }}</span>\n <st-code [valeur]=\"trace\" [etiquette]=\"libelles().identifiantDeTrace\" />\n </div>\n }\n </div>\n }\n</st-banner>\n",
149
+ 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-banner:focus{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-refusal__actions{display:flex;flex-wrap:wrap;gap:var(--st-espacement-2);align-items:center;margin-block-start:var(--st-espacement-2)}.st-refusal__actions:empty{display:none}.st-refusal__technique{display:flex;flex-wrap:wrap;gap:var(--st-espacement-2) var(--st-espacement-4);margin-block-start:var(--st-espacement-2)}.st-refusal__fait{display:grid;gap:var(--st-espacement-1);justify-items:start}.st-refusal__etiquette{font-size:var(--st-taille-xs);font-weight:var(--st-graisse-semi);line-height:var(--st-interligne-xs);text-transform:uppercase;letter-spacing:var(--st-interlettrage-capitales)}\n"],
150
+ dependencies: [
151
+ {
152
+ kind: "component",
153
+ type: StBanner,
154
+ selector: "st-banner",
155
+ inputs: [
156
+ "ton",
157
+ "message",
158
+ "titre",
159
+ "forme",
160
+ "identifiant",
161
+ "fermable",
162
+ "libelleFermeture"
163
+ ],
164
+ outputs: ["ferme"]
165
+ },
166
+ {
167
+ kind: "component",
168
+ type: StButton,
169
+ selector: "button[stButton]",
170
+ inputs: [
171
+ "variante",
172
+ "taille",
173
+ "pleineLargeur",
174
+ "iconeAvant",
175
+ "iconeApres",
176
+ "chargement",
177
+ "indisponible",
178
+ "raisonIndisponible"
179
+ ]
180
+ },
181
+ {
182
+ kind: "component",
183
+ type: StCode,
184
+ selector: "st-code",
185
+ inputs: [
186
+ "valeur",
187
+ "copiable",
188
+ "etiquette",
189
+ "libelleCopier",
190
+ "messageDeConfirmation"
191
+ ],
192
+ outputs: ["copie"]
193
+ },
194
+ {
195
+ kind: "component",
196
+ type: StTimer,
197
+ selector: "st-timer",
198
+ inputs: [
199
+ "secondes",
200
+ "echeance",
201
+ "nature",
202
+ "variante",
203
+ "avecIcone"
204
+ ],
205
+ outputs: ["termine"]
206
+ }
207
+ ],
208
+ viewProviders: [{
209
+ provide: REGION_VIVANTE_PARENTE,
210
+ useValue: true
211
+ }],
212
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
213
+ });
214
+ };
215
+ i0.ɵɵngDeclareClassMetadata({
216
+ minVersion: "12.0.0",
217
+ version: "22.2.0",
218
+ ngImport: i0,
219
+ type: StRefusal,
220
+ decorators: [{
221
+ type: Component,
222
+ args: [{
223
+ selector: "st-refusal",
224
+ changeDetection: ChangeDetectionStrategy.OnPush,
225
+ imports: [
226
+ StBanner,
227
+ StButton,
228
+ StCode,
229
+ StTimer
230
+ ],
231
+ viewProviders: [{
232
+ provide: REGION_VIVANTE_PARENTE,
233
+ useValue: true
234
+ }],
235
+ host: {
236
+ class: "st-refusal",
237
+ "[attr.data-variante]": "variante()"
238
+ },
239
+ template: "<!-- Sans alert ni status (REGION_VIVANTE_PARENTE, D-18) : le focus seul la fait lire, une fois. -->\n<st-banner tabindex=\"-1\" [ton]=\"ton()\" [titre]=\"titreLu()\" [message]=\"message()\">\n @if (attente(); as secondes) {\n <st-timer [secondes]=\"secondes\" (termine)=\"finDeLAttente()\" />\n }\n <div class=\"st-refusal__actions\">\n <!-- `chargement` : la requete relancee attend, et un second clic est avale (D-7). -->\n @if (variante() === 'conflit') {\n <button\n stButton\n type=\"button\"\n taille=\"sm\"\n iconeAvant=\"rafraichir\"\n [chargement]=\"rechargementEnCours()\"\n (click)=\"rechargement.emit()\"\n >\n {{ libelles().recharger }}\n </button>\n } @else if (rejouable()) {\n <button\n stButton\n type=\"button\"\n taille=\"sm\"\n iconeAvant=\"rafraichir\"\n [chargement]=\"rejeuEnCours()\"\n [indisponible]=\"enAttente()\"\n [raisonIndisponible]=\"raisonDuRejeu()\"\n (click)=\"rejeu.emit()\"\n >\n {{ libelles().reessayer }}\n </button>\n }\n <ng-content select=\"[actions]\" />\n </div>\n @if (codeInconnu()) {\n <div class=\"st-refusal__technique\">\n <div class=\"st-refusal__fait\">\n <!-- Vue ici, lue par st-code, qui la dit avant la valeur : une seule lecture. -->\n <span class=\"st-refusal__etiquette\" aria-hidden=\"true\">{{ libelles().codeTechnique }}</span>\n <st-code [valeur]=\"erreur().code\" [etiquette]=\"libelles().codeTechnique\" />\n </div>\n @if (erreur().traceId; as trace) {\n <div class=\"st-refusal__fait\">\n <span class=\"st-refusal__etiquette\" aria-hidden=\"true\">{{\n libelles().identifiantDeTrace\n }}</span>\n <st-code [valeur]=\"trace\" [etiquette]=\"libelles().identifiantDeTrace\" />\n </div>\n }\n </div>\n }\n</st-banner>\n",
240
+ 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-banner:focus{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-refusal__actions{display:flex;flex-wrap:wrap;gap:var(--st-espacement-2);align-items:center;margin-block-start:var(--st-espacement-2)}.st-refusal__actions:empty{display:none}.st-refusal__technique{display:flex;flex-wrap:wrap;gap:var(--st-espacement-2) var(--st-espacement-4);margin-block-start:var(--st-espacement-2)}.st-refusal__fait{display:grid;gap:var(--st-espacement-1);justify-items:start}.st-refusal__etiquette{font-size:var(--st-taille-xs);font-weight:var(--st-graisse-semi);line-height:var(--st-interligne-xs);text-transform:uppercase;letter-spacing:var(--st-interlettrage-capitales)}\n"]
241
+ }]
242
+ }],
243
+ ctorParameters: () => [],
244
+ propDecorators: {
245
+ erreur: [{
246
+ type: i0.Input,
247
+ args: [{
248
+ isSignal: true,
249
+ alias: "erreur",
250
+ required: true
251
+ }]
252
+ }],
253
+ message: [{
254
+ type: i0.Input,
255
+ args: [{
256
+ isSignal: true,
257
+ alias: "message",
258
+ required: true
259
+ }]
260
+ }],
261
+ titre: [{
262
+ type: i0.Input,
263
+ args: [{
264
+ isSignal: true,
265
+ alias: "titre",
266
+ required: false
267
+ }]
268
+ }],
269
+ codeInconnu: [{
270
+ type: i0.Input,
271
+ args: [{
272
+ isSignal: true,
273
+ alias: "codeInconnu",
274
+ required: false
275
+ }]
276
+ }],
277
+ rejeuEnCours: [{
278
+ type: i0.Input,
279
+ args: [{
280
+ isSignal: true,
281
+ alias: "rejeuEnCours",
282
+ required: false
283
+ }]
284
+ }],
285
+ rechargementEnCours: [{
286
+ type: i0.Input,
287
+ args: [{
288
+ isSignal: true,
289
+ alias: "rechargementEnCours",
290
+ required: false
291
+ }]
292
+ }],
293
+ rejeu: [{
294
+ type: i0.Output,
295
+ args: ["rejeu"]
296
+ }],
297
+ rechargement: [{
298
+ type: i0.Output,
299
+ args: ["rechargement"]
300
+ }],
301
+ attenteTerminee: [{
302
+ type: i0.Output,
303
+ args: ["attenteTerminee"]
304
+ }],
305
+ banniere: [{
306
+ type: i0.ViewChild,
307
+ args: [i0.forwardRef(() => StBanner), {
308
+ read: ElementRef,
309
+ isSignal: true
310
+ }]
311
+ }],
312
+ decompte: [{
313
+ type: i0.ViewChild,
314
+ args: [i0.forwardRef(() => StTimer), { isSignal: true }]
315
+ }]
316
+ }
317
+ });
318
+ const TONS = {
319
+ succes: "succes",
320
+ attente: "information",
321
+ echec: "danger",
322
+ partiel: "avertissement"
323
+ };
324
+ var StOutcome = class StOutcome {
325
+ libelles = inject(ST_LIBELLES);
326
+ issue = input.required(...ngDevMode ? [{ debugName: "issue" }] : /* istanbul ignore next */ []);
327
+ titre = input.required(...ngDevMode ? [{ debugName: "titre" }] : /* istanbul ignore next */ []);
328
+ precision = input(null, ...ngDevMode ? [{ debugName: "precision" }] : /* istanbul ignore next */ []);
329
+ reference = input(null, ...ngDevMode ? [{ debugName: "reference" }] : /* istanbul ignore next */ []);
330
+ etiquetteDeReference = input(null, ...ngDevMode ? [{ debugName: "etiquetteDeReference" }] : /* istanbul ignore next */ []);
331
+ horodatage = input(null, ...ngDevMode ? [{ debugName: "horodatage" }] : /* istanbul ignore next */ []);
332
+ etiquetteDHorodatage = input(null, ...ngDevMode ? [{ debugName: "etiquetteDHorodatage" }] : /* istanbul ignore next */ []);
333
+ niveauDuTitre = input(1, ...ngDevMode ? [{ debugName: "niveauDuTitre" }] : /* istanbul ignore next */ []);
334
+ disposition = input("page", ...ngDevMode ? [{ debugName: "disposition" }] : /* istanbul ignore next */ []);
335
+ ton = computed(() => TONS[this.issue()], ...ngDevMode ? [{ debugName: "ton" }] : /* istanbul ignore next */ []);
336
+ icone = computed(() => this.issue() === "attente" ? "horloge" : ICONES_DE_TON[this.ton()], ...ngDevMode ? [{ debugName: "icone" }] : /* istanbul ignore next */ []);
337
+ mot = computed(() => {
338
+ const libelles = this.libelles();
339
+ switch (this.ton()) {
340
+ case "succes": return libelles.tonSucces;
341
+ case "danger": return libelles.tonDanger;
342
+ case "avertissement": return libelles.tonAvertissement;
343
+ default: return libelles.tonInformation;
344
+ }
345
+ }, ...ngDevMode ? [{ debugName: "mot" }] : /* istanbul ignore next */ []);
346
+ etiquetteDeReferenceLue = computed(() => this.etiquetteDeReference() ?? this.libelles().referenceDeLOperation, ...ngDevMode ? [{ debugName: "etiquetteDeReferenceLue" }] : /* istanbul ignore next */ []);
347
+ static ɵfac = i0.ɵɵngDeclareFactory({
348
+ minVersion: "12.0.0",
349
+ version: "22.2.0",
350
+ ngImport: i0,
351
+ type: StOutcome,
352
+ deps: [],
353
+ target: i0.ɵɵFactoryTarget.Component
354
+ });
355
+ static ɵcmp = i0.ɵɵngDeclareComponent({
356
+ minVersion: "17.0.0",
357
+ version: "22.2.0",
358
+ type: StOutcome,
359
+ isStandalone: true,
360
+ selector: "st-outcome",
361
+ inputs: {
362
+ issue: {
363
+ classPropertyName: "issue",
364
+ publicName: "issue",
365
+ isSignal: true,
366
+ isRequired: true,
367
+ transformFunction: null
368
+ },
369
+ titre: {
370
+ classPropertyName: "titre",
371
+ publicName: "titre",
372
+ isSignal: true,
373
+ isRequired: true,
374
+ transformFunction: null
375
+ },
376
+ precision: {
377
+ classPropertyName: "precision",
378
+ publicName: "precision",
379
+ isSignal: true,
380
+ isRequired: false,
381
+ transformFunction: null
382
+ },
383
+ reference: {
384
+ classPropertyName: "reference",
385
+ publicName: "reference",
386
+ isSignal: true,
387
+ isRequired: false,
388
+ transformFunction: null
389
+ },
390
+ etiquetteDeReference: {
391
+ classPropertyName: "etiquetteDeReference",
392
+ publicName: "etiquetteDeReference",
393
+ isSignal: true,
394
+ isRequired: false,
395
+ transformFunction: null
396
+ },
397
+ horodatage: {
398
+ classPropertyName: "horodatage",
399
+ publicName: "horodatage",
400
+ isSignal: true,
401
+ isRequired: false,
402
+ transformFunction: null
403
+ },
404
+ etiquetteDHorodatage: {
405
+ classPropertyName: "etiquetteDHorodatage",
406
+ publicName: "etiquetteDHorodatage",
407
+ isSignal: true,
408
+ isRequired: false,
409
+ transformFunction: null
410
+ },
411
+ niveauDuTitre: {
412
+ classPropertyName: "niveauDuTitre",
413
+ publicName: "niveauDuTitre",
414
+ isSignal: true,
415
+ isRequired: false,
416
+ transformFunction: null
417
+ },
418
+ disposition: {
419
+ classPropertyName: "disposition",
420
+ publicName: "disposition",
421
+ isSignal: true,
422
+ isRequired: false,
423
+ transformFunction: null
424
+ }
425
+ },
426
+ host: {
427
+ properties: {
428
+ "attr.data-issue": "issue()",
429
+ "attr.data-disposition": "disposition()"
430
+ },
431
+ classAttribute: "st-outcome"
432
+ },
433
+ ngImport: i0,
434
+ template: "<div class=\"st-outcome__entete\">\n <st-icon\n class=\"st-outcome__icone\"\n [nom]=\"icone()\"\n variante=\"plein\"\n [ton]=\"ton()\"\n [taille]=\"disposition() === 'page' ? '48' : '20'\"\n />\n @switch (niveauDuTitre()) {\n @case (1) {\n <h1 stHeading class=\"st-outcome__titre\" [taille]=\"disposition() === 'page' ? '2xl' : 'sm'\">\n <span class=\"st-vh\">{{ mot() }}</span\n >{{ titre() }}\n </h1>\n }\n @case (2) {\n <h2 stHeading class=\"st-outcome__titre\" [taille]=\"disposition() === 'page' ? '2xl' : 'sm'\">\n <span class=\"st-vh\">{{ mot() }}</span\n >{{ titre() }}\n </h2>\n }\n @case (3) {\n <h3 stHeading class=\"st-outcome__titre\" [taille]=\"disposition() === 'page' ? '2xl' : 'sm'\">\n <span class=\"st-vh\">{{ mot() }}</span\n >{{ titre() }}\n </h3>\n }\n @default {\n <h4 stHeading class=\"st-outcome__titre\" [taille]=\"disposition() === 'page' ? '2xl' : 'sm'\">\n <span class=\"st-vh\">{{ mot() }}</span\n >{{ titre() }}\n </h4>\n }\n }\n <span class=\"st-outcome__etiquette\"><ng-content select=\"[etiquette]\" /></span>\n</div>\n\n@if (precision(); as texte) {\n <p class=\"st-outcome__precision\">{{ texte }}</p>\n}\n\n@if (reference() !== null || horodatage() !== null) {\n <div class=\"st-outcome__faits\">\n @if (reference(); as valeur) {\n <div class=\"st-outcome__fait\">\n <!-- Vue ici, lue par st-code, qui la dit avant la valeur : une seule lecture. -->\n <span class=\"st-outcome__etiquette-de-fait\" aria-hidden=\"true\">{{\n etiquetteDeReferenceLue()\n }}</span>\n <st-code [valeur]=\"valeur\" [etiquette]=\"etiquetteDeReferenceLue()\" />\n </div>\n }\n @if (horodatage(); as instant) {\n <div class=\"st-outcome__fait\">\n @if (etiquetteDHorodatage(); as etiquette) {\n <span class=\"st-outcome__etiquette-de-fait\">{{ etiquette }}</span>\n }\n <st-date class=\"st-outcome__instant\" [valeur]=\"instant\" format=\"date-heure\" />\n </div>\n }\n <span class=\"st-outcome__medaillon\"><ng-content select=\"[medaillon]\" /></span>\n </div>\n}\n\n<ng-content select=\"[recapitulatif]\" />\n<ng-content select=\"[suite]\" />\n<div class=\"st-outcome__actions\"><ng-content select=\"[actions]\" /></div>\n",
435
+ 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:grid;gap:var(--st-espacement-4);justify-items:start}.st-outcome__entete{display:grid;gap:var(--st-espacement-3);justify-items:start}.st-outcome__titre{margin:0}.st-outcome__precision{max-inline-size:var(--st-largeur-normale);margin:0;color:var(--st-couleur-texte-discret)}.st-outcome__faits{display:flex;flex-wrap:wrap;gap:var(--st-espacement-3) var(--st-espacement-6);align-items:center}.st-outcome__fait{display:grid;gap:var(--st-espacement-1);justify-items:start}.st-outcome__etiquette-de-fait{font-size:var(--st-taille-xs);font-weight:var(--st-graisse-semi);line-height:var(--st-interligne-xs);color:var(--st-couleur-texte-discret);text-transform:uppercase;letter-spacing:var(--st-interlettrage-capitales)}.st-outcome__instant{font-weight:var(--st-graisse-semi)}.st-outcome__actions{display:flex;flex-wrap:wrap;gap:var(--st-espacement-3);align-items:center}.st-outcome__actions:empty{display:none}:host ::ng-deep .st-outcome__actions>[actions]{display:flex;flex-wrap:wrap;gap:var(--st-espacement-3);align-items:center}.st-outcome__etiquette:empty,.st-outcome__medaillon:empty{display:none}:host([data-disposition=compacte]){gap:var(--st-espacement-2);justify-items:stretch;padding:var(--st-espacement-4);background:var(--st-couleur-surface-conteneur-bas);border-radius:var(--st-rayon-lg)}:host([data-disposition=compacte]) .st-outcome__entete{display:flex;gap:var(--st-espacement-1-5);align-items:center}:host([data-disposition=compacte]) .st-outcome__titre{flex:1;font-weight:var(--st-graisse-semi)}:host([data-disposition=compacte]) .st-outcome__faits{justify-content:space-between}:host([data-disposition=compacte][data-issue=succes]) .st-outcome__titre{color:var(--st-couleur-succes)}:host([data-disposition=compacte][data-issue=echec]) .st-outcome__titre{color:var(--st-couleur-danger)}@media(forced-colors:active){:host([data-disposition=compacte]){border:var(--st-epaisseur-fine) solid CanvasText}}\n"],
436
+ dependencies: [
437
+ {
438
+ kind: "component",
439
+ type: StCode,
440
+ selector: "st-code",
441
+ inputs: [
442
+ "valeur",
443
+ "copiable",
444
+ "etiquette",
445
+ "libelleCopier",
446
+ "messageDeConfirmation"
447
+ ],
448
+ outputs: ["copie"]
449
+ },
450
+ {
451
+ kind: "component",
452
+ type: StDate,
453
+ selector: "st-date",
454
+ inputs: [
455
+ "valeur",
456
+ "format",
457
+ "fuseau",
458
+ "afficherLeFuseau",
459
+ "variante"
460
+ ]
461
+ },
462
+ {
463
+ kind: "component",
464
+ type: StHeading,
465
+ selector: "h1[stHeading], h2[stHeading], h3[stHeading], h4[stHeading], h5[stHeading], h6[stHeading]",
466
+ inputs: [
467
+ "taille",
468
+ "serre",
469
+ "identifiant"
470
+ ]
471
+ },
472
+ {
473
+ kind: "component",
474
+ type: StIcon,
475
+ selector: "st-icon",
476
+ inputs: [
477
+ "icone",
478
+ "nom",
479
+ "variante",
480
+ "sprite",
481
+ "nomMetier",
482
+ "taille",
483
+ "ton",
484
+ "etiquette",
485
+ "miroir"
486
+ ]
487
+ }
488
+ ],
489
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
490
+ });
491
+ };
492
+ i0.ɵɵngDeclareClassMetadata({
493
+ minVersion: "12.0.0",
494
+ version: "22.2.0",
495
+ ngImport: i0,
496
+ type: StOutcome,
497
+ decorators: [{
498
+ type: Component,
499
+ args: [{
500
+ selector: "st-outcome",
501
+ changeDetection: ChangeDetectionStrategy.OnPush,
502
+ imports: [
503
+ StCode,
504
+ StDate,
505
+ StHeading,
506
+ StIcon
507
+ ],
508
+ host: {
509
+ class: "st-outcome",
510
+ "[attr.data-issue]": "issue()",
511
+ "[attr.data-disposition]": "disposition()"
512
+ },
513
+ template: "<div class=\"st-outcome__entete\">\n <st-icon\n class=\"st-outcome__icone\"\n [nom]=\"icone()\"\n variante=\"plein\"\n [ton]=\"ton()\"\n [taille]=\"disposition() === 'page' ? '48' : '20'\"\n />\n @switch (niveauDuTitre()) {\n @case (1) {\n <h1 stHeading class=\"st-outcome__titre\" [taille]=\"disposition() === 'page' ? '2xl' : 'sm'\">\n <span class=\"st-vh\">{{ mot() }}</span\n >{{ titre() }}\n </h1>\n }\n @case (2) {\n <h2 stHeading class=\"st-outcome__titre\" [taille]=\"disposition() === 'page' ? '2xl' : 'sm'\">\n <span class=\"st-vh\">{{ mot() }}</span\n >{{ titre() }}\n </h2>\n }\n @case (3) {\n <h3 stHeading class=\"st-outcome__titre\" [taille]=\"disposition() === 'page' ? '2xl' : 'sm'\">\n <span class=\"st-vh\">{{ mot() }}</span\n >{{ titre() }}\n </h3>\n }\n @default {\n <h4 stHeading class=\"st-outcome__titre\" [taille]=\"disposition() === 'page' ? '2xl' : 'sm'\">\n <span class=\"st-vh\">{{ mot() }}</span\n >{{ titre() }}\n </h4>\n }\n }\n <span class=\"st-outcome__etiquette\"><ng-content select=\"[etiquette]\" /></span>\n</div>\n\n@if (precision(); as texte) {\n <p class=\"st-outcome__precision\">{{ texte }}</p>\n}\n\n@if (reference() !== null || horodatage() !== null) {\n <div class=\"st-outcome__faits\">\n @if (reference(); as valeur) {\n <div class=\"st-outcome__fait\">\n <!-- Vue ici, lue par st-code, qui la dit avant la valeur : une seule lecture. -->\n <span class=\"st-outcome__etiquette-de-fait\" aria-hidden=\"true\">{{\n etiquetteDeReferenceLue()\n }}</span>\n <st-code [valeur]=\"valeur\" [etiquette]=\"etiquetteDeReferenceLue()\" />\n </div>\n }\n @if (horodatage(); as instant) {\n <div class=\"st-outcome__fait\">\n @if (etiquetteDHorodatage(); as etiquette) {\n <span class=\"st-outcome__etiquette-de-fait\">{{ etiquette }}</span>\n }\n <st-date class=\"st-outcome__instant\" [valeur]=\"instant\" format=\"date-heure\" />\n </div>\n }\n <span class=\"st-outcome__medaillon\"><ng-content select=\"[medaillon]\" /></span>\n </div>\n}\n\n<ng-content select=\"[recapitulatif]\" />\n<ng-content select=\"[suite]\" />\n<div class=\"st-outcome__actions\"><ng-content select=\"[actions]\" /></div>\n",
514
+ 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:grid;gap:var(--st-espacement-4);justify-items:start}.st-outcome__entete{display:grid;gap:var(--st-espacement-3);justify-items:start}.st-outcome__titre{margin:0}.st-outcome__precision{max-inline-size:var(--st-largeur-normale);margin:0;color:var(--st-couleur-texte-discret)}.st-outcome__faits{display:flex;flex-wrap:wrap;gap:var(--st-espacement-3) var(--st-espacement-6);align-items:center}.st-outcome__fait{display:grid;gap:var(--st-espacement-1);justify-items:start}.st-outcome__etiquette-de-fait{font-size:var(--st-taille-xs);font-weight:var(--st-graisse-semi);line-height:var(--st-interligne-xs);color:var(--st-couleur-texte-discret);text-transform:uppercase;letter-spacing:var(--st-interlettrage-capitales)}.st-outcome__instant{font-weight:var(--st-graisse-semi)}.st-outcome__actions{display:flex;flex-wrap:wrap;gap:var(--st-espacement-3);align-items:center}.st-outcome__actions:empty{display:none}:host ::ng-deep .st-outcome__actions>[actions]{display:flex;flex-wrap:wrap;gap:var(--st-espacement-3);align-items:center}.st-outcome__etiquette:empty,.st-outcome__medaillon:empty{display:none}:host([data-disposition=compacte]){gap:var(--st-espacement-2);justify-items:stretch;padding:var(--st-espacement-4);background:var(--st-couleur-surface-conteneur-bas);border-radius:var(--st-rayon-lg)}:host([data-disposition=compacte]) .st-outcome__entete{display:flex;gap:var(--st-espacement-1-5);align-items:center}:host([data-disposition=compacte]) .st-outcome__titre{flex:1;font-weight:var(--st-graisse-semi)}:host([data-disposition=compacte]) .st-outcome__faits{justify-content:space-between}:host([data-disposition=compacte][data-issue=succes]) .st-outcome__titre{color:var(--st-couleur-succes)}:host([data-disposition=compacte][data-issue=echec]) .st-outcome__titre{color:var(--st-couleur-danger)}@media(forced-colors:active){:host([data-disposition=compacte]){border:var(--st-epaisseur-fine) solid CanvasText}}\n"]
515
+ }]
516
+ }],
517
+ propDecorators: {
518
+ issue: [{
519
+ type: i0.Input,
520
+ args: [{
521
+ isSignal: true,
522
+ alias: "issue",
523
+ required: true
524
+ }]
525
+ }],
526
+ titre: [{
527
+ type: i0.Input,
528
+ args: [{
529
+ isSignal: true,
530
+ alias: "titre",
531
+ required: true
532
+ }]
533
+ }],
534
+ precision: [{
535
+ type: i0.Input,
536
+ args: [{
537
+ isSignal: true,
538
+ alias: "precision",
539
+ required: false
540
+ }]
541
+ }],
542
+ reference: [{
543
+ type: i0.Input,
544
+ args: [{
545
+ isSignal: true,
546
+ alias: "reference",
547
+ required: false
548
+ }]
549
+ }],
550
+ etiquetteDeReference: [{
551
+ type: i0.Input,
552
+ args: [{
553
+ isSignal: true,
554
+ alias: "etiquetteDeReference",
555
+ required: false
556
+ }]
557
+ }],
558
+ horodatage: [{
559
+ type: i0.Input,
560
+ args: [{
561
+ isSignal: true,
562
+ alias: "horodatage",
563
+ required: false
564
+ }]
565
+ }],
566
+ etiquetteDHorodatage: [{
567
+ type: i0.Input,
568
+ args: [{
569
+ isSignal: true,
570
+ alias: "etiquetteDHorodatage",
571
+ required: false
572
+ }]
573
+ }],
574
+ niveauDuTitre: [{
575
+ type: i0.Input,
576
+ args: [{
577
+ isSignal: true,
578
+ alias: "niveauDuTitre",
579
+ required: false
580
+ }]
581
+ }],
582
+ disposition: [{
583
+ type: i0.Input,
584
+ args: [{
585
+ isSignal: true,
586
+ alias: "disposition",
587
+ required: false
588
+ }]
589
+ }]
590
+ }
591
+ });
592
+ const PROFILS = {
593
+ "a-faire": {
594
+ ton: "neutre",
595
+ icone: "cercle"
596
+ },
597
+ "en-cours": {
598
+ ton: "information",
599
+ icone: "horloge"
600
+ },
601
+ terminee: {
602
+ ton: "succes",
603
+ icone: "cercle-coche"
604
+ },
605
+ refusee: {
606
+ ton: "danger",
607
+ icone: "cercle-croix"
608
+ },
609
+ bloquee: {
610
+ ton: "neutre",
611
+ icone: "cadenas"
612
+ }
613
+ };
614
+ var StTaskList = class StTaskList {
615
+ libelles = inject(ST_LIBELLES);
616
+ identifiants = inject(StIdentifiants);
617
+ taches = input.required(...ngDevMode ? [{ debugName: "taches" }] : /* istanbul ignore next */ []);
618
+ etiquette = input.required(...ngDevMode ? [{ debugName: "etiquette" }] : /* istanbul ignore next */ []);
619
+ sections = input(null, ...ngDevMode ? [{ debugName: "sections" }] : /* istanbul ignore next */ []);
620
+ niveauDuTitre = input(2, ...ngDevMode ? [{ debugName: "niveauDuTitre" }] : /* istanbul ignore next */ []);
621
+ resume = input(true, {
622
+ ...ngDevMode ? { debugName: "resume" } : /* istanbul ignore next */ {},
623
+ transform: booleanAttribute
624
+ });
625
+ ouverture = output();
626
+ prefixe = this.identifiants.prochain("st-tache");
627
+ lues = computed(() => this.taches().map((tache, indice) => {
628
+ const profil = PROFILS[tache.statut];
629
+ const idDuStatut = `${this.prefixe}-${String(indice)}-statut`;
630
+ const idDeLaPrecision = (tache.statut === "bloquee" ? tache.raison : tache.precision) === void 0 ? null : `${this.prefixe}-${String(indice)}-precision`;
631
+ return {
632
+ ...tache,
633
+ ton: profil.ton,
634
+ icone: profil.icone,
635
+ idDuStatut,
636
+ idDeLaPrecision,
637
+ decritPar: idDeLaPrecision === null ? idDuStatut : `${idDuStatut} ${idDeLaPrecision}`
638
+ };
639
+ }), ...ngDevMode ? [{ debugName: "lues" }] : /* istanbul ignore next */ []);
640
+ groupes = computed(() => {
641
+ const sections = this.sections();
642
+ if (sections === null) return null;
643
+ const parCle = new Map(this.lues().map((tache) => [tache.cle, tache]));
644
+ return sections.map((section) => ({
645
+ titre: section.titre,
646
+ taches: section.cles.flatMap((cle) => {
647
+ const tache = parCle.get(cle);
648
+ return tache === void 0 ? [] : [tache];
649
+ })
650
+ }));
651
+ }, ...ngDevMode ? [{ debugName: "groupes" }] : /* istanbul ignore next */ []);
652
+ texteDuResume = computed(() => {
653
+ const taches = this.taches();
654
+ const faites = taches.filter((tache) => tache.statut === "terminee").length;
655
+ return this.libelles().tachesTerminees(faites, taches.length);
656
+ }, ...ngDevMode ? [{ debugName: "texteDuResume" }] : /* istanbul ignore next */ []);
657
+ idDuTitre = (indice) => `${this.prefixe}-section-${String(indice)}`;
658
+ static ɵfac = i0.ɵɵngDeclareFactory({
659
+ minVersion: "12.0.0",
660
+ version: "22.2.0",
661
+ ngImport: i0,
662
+ type: StTaskList,
663
+ deps: [],
664
+ target: i0.ɵɵFactoryTarget.Component
665
+ });
666
+ static ɵcmp = i0.ɵɵngDeclareComponent({
667
+ minVersion: "17.0.0",
668
+ version: "22.2.0",
669
+ type: StTaskList,
670
+ isStandalone: true,
671
+ selector: "st-task-list",
672
+ inputs: {
673
+ taches: {
674
+ classPropertyName: "taches",
675
+ publicName: "taches",
676
+ isSignal: true,
677
+ isRequired: true,
678
+ transformFunction: null
679
+ },
680
+ etiquette: {
681
+ classPropertyName: "etiquette",
682
+ publicName: "etiquette",
683
+ isSignal: true,
684
+ isRequired: true,
685
+ transformFunction: null
686
+ },
687
+ sections: {
688
+ classPropertyName: "sections",
689
+ publicName: "sections",
690
+ isSignal: true,
691
+ isRequired: false,
692
+ transformFunction: null
693
+ },
694
+ niveauDuTitre: {
695
+ classPropertyName: "niveauDuTitre",
696
+ publicName: "niveauDuTitre",
697
+ isSignal: true,
698
+ isRequired: false,
699
+ transformFunction: null
700
+ },
701
+ resume: {
702
+ classPropertyName: "resume",
703
+ publicName: "resume",
704
+ isSignal: true,
705
+ isRequired: false,
706
+ transformFunction: null
707
+ }
708
+ },
709
+ outputs: { ouverture: "ouverture" },
710
+ host: { classAttribute: "st-task-list" },
711
+ ngImport: i0,
712
+ template: "@if (resume()) {\n <p class=\"st-task-list__resume\">{{ texteDuResume() }}</p>\n}\n@if (groupes(); as groupes) {\n @for (groupe of groupes; track groupe.titre; let indice = $index) {\n <section class=\"st-task-list__section\" [attr.aria-labelledby]=\"idDuTitre(indice)\">\n @switch (niveauDuTitre()) {\n @case (2) {\n <h2 stHeading taille=\"md\" class=\"st-task-list__titre\" [id]=\"idDuTitre(indice)\">\n {{ groupe.titre }}\n </h2>\n }\n @case (3) {\n <h3 stHeading taille=\"md\" class=\"st-task-list__titre\" [id]=\"idDuTitre(indice)\">\n {{ groupe.titre }}\n </h3>\n }\n @default {\n <h4 stHeading taille=\"md\" class=\"st-task-list__titre\" [id]=\"idDuTitre(indice)\">\n {{ groupe.titre }}\n </h4>\n }\n }\n <!-- `role=\"list\"` : sans puces, Safari ne lit plus une liste comme une liste (D-1). -->\n <ul class=\"st-task-list__liste\" role=\"list\" [attr.aria-labelledby]=\"idDuTitre(indice)\">\n @for (tache of groupe.taches; track tache.cle) {\n <ng-container\n [ngTemplateOutlet]=\"rangee\"\n [ngTemplateOutletContext]=\"{ $implicit: tache }\"\n />\n }\n </ul>\n </section>\n }\n} @else {\n <!-- `role=\"list\"` : sans puces, Safari ne lit plus une liste comme une liste (D-1). -->\n <ul class=\"st-task-list__liste\" role=\"list\" [attr.aria-label]=\"etiquette()\">\n @for (tache of lues(); track tache.cle) {\n <ng-container [ngTemplateOutlet]=\"rangee\" [ngTemplateOutletContext]=\"{ $implicit: tache }\" />\n }\n </ul>\n}\n\n<ng-template #rangee let-tache>\n <li class=\"st-task-list__tache\" [attr.data-statut]=\"tache.statut\">\n <div class=\"st-task-list__textes\">\n @if (tache.statut === 'bloquee') {\n <span class=\"st-task-list__nom\">{{ tache.titre }}</span>\n } @else if (tache.lien) {\n <a\n stLink\n class=\"st-task-list__nom st-task-list__lien\"\n [routerLink]=\"tache.lien\"\n [attr.aria-describedby]=\"tache.decritPar\"\n >{{ tache.titre }}</a\n >\n } @else {\n <button\n type=\"button\"\n class=\"st-task-list__nom st-task-list__lien st-task-list__bouton\"\n [attr.aria-describedby]=\"tache.decritPar\"\n (click)=\"ouverture.emit(tache.cle)\"\n >\n {{ tache.titre }}\n </button>\n }\n @if (tache.idDeLaPrecision; as id) {\n <span class=\"st-task-list__precision\" [id]=\"id\">{{\n tache.statut === 'bloquee' ? tache.raison : tache.precision\n }}</span>\n }\n </div>\n <!-- Le statut sur la ligne du nom de la tache, pas au milieu de sa precision. -->\n <span class=\"st-task-list__statut\">\n <st-status-pill\n [id]=\"tache.idDuStatut\"\n [statut]=\"tache.statut\"\n [libelle]=\"tache.libelleDuStatut\"\n [ton]=\"tache.ton\"\n [icone]=\"tache.icone\"\n />\n </span>\n </li>\n</ng-template>\n",
713
+ 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:grid;gap:var(--st-espacement-4)}.st-task-list__resume{margin:0;color:var(--st-couleur-texte-discret)}.st-task-list__section{display:grid;gap:var(--st-espacement-2)}.st-task-list__titre{margin:0}.st-task-list__liste{margin:0;padding:0;list-style:none;border-block-start:var(--st-epaisseur-fine) solid var(--st-couleur-bordure)}.st-task-list__tache{display:flex;flex-wrap:wrap;gap:var(--st-espacement-2) var(--st-espacement-4);align-items:start;justify-content:space-between;padding-block:var(--st-espacement-2);border-block-end:var(--st-epaisseur-fine) solid var(--st-couleur-bordure)}.st-task-list__textes{display:grid;flex:1 1 16rem;min-inline-size:0}.st-task-list__lien{display:flex;align-items:center;min-block-size:var(--st-cible-tactile-min);font-weight:var(--st-graisse-semi)}.st-task-list__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-task-list__bouton{padding:0;font:inherit;font-weight:var(--st-graisse-semi);color:var(--st-couleur-texte-primaire);text-align:start;text-decoration:underline;text-decoration-thickness:var(--st-epaisseur-fine);text-decoration-skip-ink:auto;text-underline-offset:var(--st-espacement-demi);cursor:pointer;background:none;border:0;border-radius:var(--st-rayon-xs);transition:color var(--st-duree-rapide) var(--st-courbe-standard)}@media(hover:hover){.st-task-list__bouton:hover{color:var(--st-couleur-primaire-survol);text-decoration-thickness:var(--st-epaisseur-moyenne)}}.st-task-list__bouton:active{color:var(--st-couleur-primaire-actif)}@media(prefers-contrast:more){.st-task-list__bouton{text-decoration-thickness:var(--st-epaisseur-moyenne)}}.st-task-list__tache[data-statut=bloquee] .st-task-list__nom{display:flex;align-items:center;min-block-size:var(--st-cible-tactile-min);color:var(--st-couleur-texte-discret)}.st-task-list__precision{font-size:var(--st-taille-sm);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte-discret)}.st-task-list__statut{display:flex;flex:none;align-items:center;min-block-size:var(--st-cible-tactile-min)}\n"],
714
+ dependencies: [
715
+ {
716
+ kind: "directive",
717
+ type: NgTemplateOutlet,
718
+ selector: "[ngTemplateOutlet]",
719
+ inputs: [
720
+ "ngTemplateOutletContext",
721
+ "ngTemplateOutlet",
722
+ "ngTemplateOutletInjector"
723
+ ]
724
+ },
725
+ {
726
+ kind: "directive",
727
+ type: RouterLink,
728
+ selector: "[routerLink]",
729
+ inputs: [
730
+ "target",
731
+ "queryParams",
732
+ "fragment",
733
+ "queryParamsHandling",
734
+ "state",
735
+ "info",
736
+ "relativeTo",
737
+ "preserveFragment",
738
+ "skipLocationChange",
739
+ "replaceUrl",
740
+ "browserUrl",
741
+ "routerLink"
742
+ ]
743
+ },
744
+ {
745
+ kind: "component",
746
+ type: StHeading,
747
+ selector: "h1[stHeading], h2[stHeading], h3[stHeading], h4[stHeading], h5[stHeading], h6[stHeading]",
748
+ inputs: [
749
+ "taille",
750
+ "serre",
751
+ "identifiant"
752
+ ]
753
+ },
754
+ {
755
+ kind: "component",
756
+ type: StLink,
757
+ selector: "a[stLink]",
758
+ inputs: [
759
+ "variante",
760
+ "externe",
761
+ "mentionExterne",
762
+ "iconeAvant",
763
+ "iconeApres"
764
+ ]
765
+ },
766
+ {
767
+ kind: "component",
768
+ type: StStatusPill,
769
+ selector: "st-status-pill",
770
+ inputs: [
771
+ "statut",
772
+ "libelle",
773
+ "icone",
774
+ "ton",
775
+ "taille",
776
+ "variante",
777
+ "casse"
778
+ ]
779
+ }
780
+ ],
781
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
782
+ });
783
+ };
784
+ i0.ɵɵngDeclareClassMetadata({
785
+ minVersion: "12.0.0",
786
+ version: "22.2.0",
787
+ ngImport: i0,
788
+ type: StTaskList,
789
+ decorators: [{
790
+ type: Component,
791
+ args: [{
792
+ selector: "st-task-list",
793
+ changeDetection: ChangeDetectionStrategy.OnPush,
794
+ imports: [
795
+ NgTemplateOutlet,
796
+ RouterLink,
797
+ StHeading,
798
+ StLink,
799
+ StStatusPill
800
+ ],
801
+ host: { class: "st-task-list" },
802
+ template: "@if (resume()) {\n <p class=\"st-task-list__resume\">{{ texteDuResume() }}</p>\n}\n@if (groupes(); as groupes) {\n @for (groupe of groupes; track groupe.titre; let indice = $index) {\n <section class=\"st-task-list__section\" [attr.aria-labelledby]=\"idDuTitre(indice)\">\n @switch (niveauDuTitre()) {\n @case (2) {\n <h2 stHeading taille=\"md\" class=\"st-task-list__titre\" [id]=\"idDuTitre(indice)\">\n {{ groupe.titre }}\n </h2>\n }\n @case (3) {\n <h3 stHeading taille=\"md\" class=\"st-task-list__titre\" [id]=\"idDuTitre(indice)\">\n {{ groupe.titre }}\n </h3>\n }\n @default {\n <h4 stHeading taille=\"md\" class=\"st-task-list__titre\" [id]=\"idDuTitre(indice)\">\n {{ groupe.titre }}\n </h4>\n }\n }\n <!-- `role=\"list\"` : sans puces, Safari ne lit plus une liste comme une liste (D-1). -->\n <ul class=\"st-task-list__liste\" role=\"list\" [attr.aria-labelledby]=\"idDuTitre(indice)\">\n @for (tache of groupe.taches; track tache.cle) {\n <ng-container\n [ngTemplateOutlet]=\"rangee\"\n [ngTemplateOutletContext]=\"{ $implicit: tache }\"\n />\n }\n </ul>\n </section>\n }\n} @else {\n <!-- `role=\"list\"` : sans puces, Safari ne lit plus une liste comme une liste (D-1). -->\n <ul class=\"st-task-list__liste\" role=\"list\" [attr.aria-label]=\"etiquette()\">\n @for (tache of lues(); track tache.cle) {\n <ng-container [ngTemplateOutlet]=\"rangee\" [ngTemplateOutletContext]=\"{ $implicit: tache }\" />\n }\n </ul>\n}\n\n<ng-template #rangee let-tache>\n <li class=\"st-task-list__tache\" [attr.data-statut]=\"tache.statut\">\n <div class=\"st-task-list__textes\">\n @if (tache.statut === 'bloquee') {\n <span class=\"st-task-list__nom\">{{ tache.titre }}</span>\n } @else if (tache.lien) {\n <a\n stLink\n class=\"st-task-list__nom st-task-list__lien\"\n [routerLink]=\"tache.lien\"\n [attr.aria-describedby]=\"tache.decritPar\"\n >{{ tache.titre }}</a\n >\n } @else {\n <button\n type=\"button\"\n class=\"st-task-list__nom st-task-list__lien st-task-list__bouton\"\n [attr.aria-describedby]=\"tache.decritPar\"\n (click)=\"ouverture.emit(tache.cle)\"\n >\n {{ tache.titre }}\n </button>\n }\n @if (tache.idDeLaPrecision; as id) {\n <span class=\"st-task-list__precision\" [id]=\"id\">{{\n tache.statut === 'bloquee' ? tache.raison : tache.precision\n }}</span>\n }\n </div>\n <!-- Le statut sur la ligne du nom de la tache, pas au milieu de sa precision. -->\n <span class=\"st-task-list__statut\">\n <st-status-pill\n [id]=\"tache.idDuStatut\"\n [statut]=\"tache.statut\"\n [libelle]=\"tache.libelleDuStatut\"\n [ton]=\"tache.ton\"\n [icone]=\"tache.icone\"\n />\n </span>\n </li>\n</ng-template>\n",
803
+ 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:grid;gap:var(--st-espacement-4)}.st-task-list__resume{margin:0;color:var(--st-couleur-texte-discret)}.st-task-list__section{display:grid;gap:var(--st-espacement-2)}.st-task-list__titre{margin:0}.st-task-list__liste{margin:0;padding:0;list-style:none;border-block-start:var(--st-epaisseur-fine) solid var(--st-couleur-bordure)}.st-task-list__tache{display:flex;flex-wrap:wrap;gap:var(--st-espacement-2) var(--st-espacement-4);align-items:start;justify-content:space-between;padding-block:var(--st-espacement-2);border-block-end:var(--st-epaisseur-fine) solid var(--st-couleur-bordure)}.st-task-list__textes{display:grid;flex:1 1 16rem;min-inline-size:0}.st-task-list__lien{display:flex;align-items:center;min-block-size:var(--st-cible-tactile-min);font-weight:var(--st-graisse-semi)}.st-task-list__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-task-list__bouton{padding:0;font:inherit;font-weight:var(--st-graisse-semi);color:var(--st-couleur-texte-primaire);text-align:start;text-decoration:underline;text-decoration-thickness:var(--st-epaisseur-fine);text-decoration-skip-ink:auto;text-underline-offset:var(--st-espacement-demi);cursor:pointer;background:none;border:0;border-radius:var(--st-rayon-xs);transition:color var(--st-duree-rapide) var(--st-courbe-standard)}@media(hover:hover){.st-task-list__bouton:hover{color:var(--st-couleur-primaire-survol);text-decoration-thickness:var(--st-epaisseur-moyenne)}}.st-task-list__bouton:active{color:var(--st-couleur-primaire-actif)}@media(prefers-contrast:more){.st-task-list__bouton{text-decoration-thickness:var(--st-epaisseur-moyenne)}}.st-task-list__tache[data-statut=bloquee] .st-task-list__nom{display:flex;align-items:center;min-block-size:var(--st-cible-tactile-min);color:var(--st-couleur-texte-discret)}.st-task-list__precision{font-size:var(--st-taille-sm);line-height:var(--st-interligne-sm);color:var(--st-couleur-texte-discret)}.st-task-list__statut{display:flex;flex:none;align-items:center;min-block-size:var(--st-cible-tactile-min)}\n"]
804
+ }]
805
+ }],
806
+ propDecorators: {
807
+ taches: [{
808
+ type: i0.Input,
809
+ args: [{
810
+ isSignal: true,
811
+ alias: "taches",
812
+ required: true
813
+ }]
814
+ }],
815
+ etiquette: [{
816
+ type: i0.Input,
817
+ args: [{
818
+ isSignal: true,
819
+ alias: "etiquette",
820
+ required: true
821
+ }]
822
+ }],
823
+ sections: [{
824
+ type: i0.Input,
825
+ args: [{
826
+ isSignal: true,
827
+ alias: "sections",
828
+ required: false
829
+ }]
830
+ }],
831
+ niveauDuTitre: [{
832
+ type: i0.Input,
833
+ args: [{
834
+ isSignal: true,
835
+ alias: "niveauDuTitre",
836
+ required: false
837
+ }]
838
+ }],
839
+ resume: [{
840
+ type: i0.Input,
841
+ args: [{
842
+ isSignal: true,
843
+ alias: "resume",
844
+ required: false
845
+ }]
846
+ }],
847
+ ouverture: [{
848
+ type: i0.Output,
849
+ args: ["ouverture"]
850
+ }]
851
+ }
852
+ });
853
+ const ST_ASSISTANT = new InjectionToken("ST_ASSISTANT");
854
+ var StWizard = class StWizard {
855
+ etapes = input.required(...ngDevMode ? [{ debugName: "etapes" }] : /* istanbul ignore next */ []);
856
+ etape = input.required(...ngDevMode ? [{ debugName: "etape" }] : /* istanbul ignore next */ []);
857
+ libelle = input(null, ...ngDevMode ? [{ debugName: "libelle" }] : /* istanbul ignore next */ []);
858
+ etiquette = input(null, ...ngDevMode ? [{ debugName: "etiquette" }] : /* istanbul ignore next */ []);
859
+ orientation = input("horizontale", ...ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []);
860
+ retourVers = input(null, ...ngDevMode ? [{ debugName: "retourVers" }] : /* istanbul ignore next */ []);
861
+ retour = output();
862
+ total = computed(() => this.etapes().length, ...ngDevMode ? [{ debugName: "total" }] : /* istanbul ignore next */ []);
863
+ numero = computed(() => {
864
+ const etape = Math.trunc(Number.isFinite(this.etape()) ? this.etape() : 0);
865
+ return Math.min(this.total(), Math.max(0, etape)) + 1;
866
+ }, ...ngDevMode ? [{ debugName: "numero" }] : /* istanbul ignore next */ []);
867
+ retourPossible = computed(() => this.retourVers() !== null || this.numero() > 1, ...ngDevMode ? [{ debugName: "retourPossible" }] : /* istanbul ignore next */ []);
868
+ demanderLeRetour() {
869
+ this.retour.emit();
870
+ }
871
+ static ɵfac = i0.ɵɵngDeclareFactory({
872
+ minVersion: "12.0.0",
873
+ version: "22.2.0",
874
+ ngImport: i0,
875
+ type: StWizard,
876
+ deps: [],
877
+ target: i0.ɵɵFactoryTarget.Component
878
+ });
879
+ static ɵcmp = i0.ɵɵngDeclareComponent({
880
+ minVersion: "17.1.0",
881
+ version: "22.2.0",
882
+ type: StWizard,
883
+ isStandalone: true,
884
+ selector: "st-wizard",
885
+ inputs: {
886
+ etapes: {
887
+ classPropertyName: "etapes",
888
+ publicName: "etapes",
889
+ isSignal: true,
890
+ isRequired: true,
891
+ transformFunction: null
892
+ },
893
+ etape: {
894
+ classPropertyName: "etape",
895
+ publicName: "etape",
896
+ isSignal: true,
897
+ isRequired: true,
898
+ transformFunction: null
899
+ },
900
+ libelle: {
901
+ classPropertyName: "libelle",
902
+ publicName: "libelle",
903
+ isSignal: true,
904
+ isRequired: false,
905
+ transformFunction: null
906
+ },
907
+ etiquette: {
908
+ classPropertyName: "etiquette",
909
+ publicName: "etiquette",
910
+ isSignal: true,
911
+ isRequired: false,
912
+ transformFunction: null
913
+ },
914
+ orientation: {
915
+ classPropertyName: "orientation",
916
+ publicName: "orientation",
917
+ isSignal: true,
918
+ isRequired: false,
919
+ transformFunction: null
920
+ },
921
+ retourVers: {
922
+ classPropertyName: "retourVers",
923
+ publicName: "retourVers",
924
+ isSignal: true,
925
+ isRequired: false,
926
+ transformFunction: null
927
+ }
928
+ },
929
+ outputs: { retour: "retour" },
930
+ host: { classAttribute: "st-wizard" },
931
+ providers: [{
932
+ provide: ST_ASSISTANT,
933
+ useExisting: StWizard
934
+ }],
935
+ ngImport: i0,
936
+ template: "<st-stepper\n class=\"st-wizard__etapes\"\n [etapes]=\"etapes()\"\n [etape]=\"etape()\"\n [libelle]=\"libelle()\"\n [etiquette]=\"etiquette()\"\n [orientation]=\"orientation()\"\n/>\n<div class=\"st-wizard__etape\"><ng-content /></div>\n",
937
+ 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:grid;gap:var(--st-espacement-6);container-type:inline-size}.st-wizard__etape{min-inline-size:0}\n"],
938
+ dependencies: [{
939
+ kind: "component",
940
+ type: StStepper,
941
+ selector: "st-stepper",
942
+ inputs: [
943
+ "etapes",
944
+ "etape",
945
+ "etiquette",
946
+ "libelle",
947
+ "compacte",
948
+ "orientation"
949
+ ]
950
+ }],
951
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
952
+ });
953
+ };
954
+ i0.ɵɵngDeclareClassMetadata({
955
+ minVersion: "12.0.0",
956
+ version: "22.2.0",
957
+ ngImport: i0,
958
+ type: StWizard,
959
+ decorators: [{
960
+ type: Component,
961
+ args: [{
962
+ selector: "st-wizard",
963
+ changeDetection: ChangeDetectionStrategy.OnPush,
964
+ imports: [StStepper],
965
+ providers: [{
966
+ provide: ST_ASSISTANT,
967
+ useExisting: StWizard
968
+ }],
969
+ host: { class: "st-wizard" },
970
+ template: "<st-stepper\n class=\"st-wizard__etapes\"\n [etapes]=\"etapes()\"\n [etape]=\"etape()\"\n [libelle]=\"libelle()\"\n [etiquette]=\"etiquette()\"\n [orientation]=\"orientation()\"\n/>\n<div class=\"st-wizard__etape\"><ng-content /></div>\n",
971
+ 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:grid;gap:var(--st-espacement-6);container-type:inline-size}.st-wizard__etape{min-inline-size:0}\n"]
972
+ }]
973
+ }],
974
+ propDecorators: {
975
+ etapes: [{
976
+ type: i0.Input,
977
+ args: [{
978
+ isSignal: true,
979
+ alias: "etapes",
980
+ required: true
981
+ }]
982
+ }],
983
+ etape: [{
984
+ type: i0.Input,
985
+ args: [{
986
+ isSignal: true,
987
+ alias: "etape",
988
+ required: true
989
+ }]
990
+ }],
991
+ libelle: [{
992
+ type: i0.Input,
993
+ args: [{
994
+ isSignal: true,
995
+ alias: "libelle",
996
+ required: false
997
+ }]
998
+ }],
999
+ etiquette: [{
1000
+ type: i0.Input,
1001
+ args: [{
1002
+ isSignal: true,
1003
+ alias: "etiquette",
1004
+ required: false
1005
+ }]
1006
+ }],
1007
+ orientation: [{
1008
+ type: i0.Input,
1009
+ args: [{
1010
+ isSignal: true,
1011
+ alias: "orientation",
1012
+ required: false
1013
+ }]
1014
+ }],
1015
+ retourVers: [{
1016
+ type: i0.Input,
1017
+ args: [{
1018
+ isSignal: true,
1019
+ alias: "retourVers",
1020
+ required: false
1021
+ }]
1022
+ }],
1023
+ retour: [{
1024
+ type: i0.Output,
1025
+ args: ["retour"]
1026
+ }]
1027
+ }
1028
+ });
1029
+ var StWizardStep = class StWizardStep {
1030
+ assistant = inject(ST_ASSISTANT, { optional: true });
1031
+ element = inject(ElementRef).nativeElement;
1032
+ libelles = inject(ST_LIBELLES);
1033
+ titre = input.required(...ngDevMode ? [{ debugName: "titre" }] : /* istanbul ignore next */ []);
1034
+ niveauDuTitre = input(1, ...ngDevMode ? [{ debugName: "niveauDuTitre" }] : /* istanbul ignore next */ []);
1035
+ derniere = input(false, {
1036
+ ...ngDevMode ? { debugName: "derniere" } : /* istanbul ignore next */ {},
1037
+ transform: booleanAttribute
1038
+ });
1039
+ avertissement = input(null, ...ngDevMode ? [{ debugName: "avertissement" }] : /* istanbul ignore next */ []);
1040
+ libelleContinuer = input(null, ...ngDevMode ? [{ debugName: "libelleContinuer" }] : /* istanbul ignore next */ []);
1041
+ chargement = input(false, {
1042
+ ...ngDevMode ? { debugName: "chargement" } : /* istanbul ignore next */ {},
1043
+ transform: booleanAttribute
1044
+ });
1045
+ indisponible = input(false, {
1046
+ ...ngDevMode ? { debugName: "indisponible" } : /* istanbul ignore next */ {},
1047
+ transform: booleanAttribute
1048
+ });
1049
+ dispositionDesActions = input("pied", ...ngDevMode ? [{ debugName: "dispositionDesActions" }] : /* istanbul ignore next */ []);
1050
+ titreLu = computed(() => {
1051
+ const assistant = this.assistant;
1052
+ if (assistant === null) return this.titre();
1053
+ return this.libelles().etapeSur(assistant.numero(), assistant.total(), this.titre());
1054
+ }, ...ngDevMode ? [{ debugName: "titreLu" }] : /* istanbul ignore next */ []);
1055
+ compte = computed(() => {
1056
+ const assistant = this.assistant;
1057
+ return assistant === null ? null : this.libelles().etapeSurTotal(assistant.numero(), assistant.total());
1058
+ }, ...ngDevMode ? [{ debugName: "compte" }] : /* istanbul ignore next */ []);
1059
+ retourVers = computed(() => this.assistant?.retourVers() ?? null, ...ngDevMode ? [{ debugName: "retourVers" }] : /* istanbul ignore next */ []);
1060
+ orientation = computed(() => this.assistant?.orientation() ?? null, ...ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []);
1061
+ retourPossible = computed(() => this.assistant?.retourPossible() ?? false, ...ngDevMode ? [{ debugName: "retourPossible" }] : /* istanbul ignore next */ []);
1062
+ libelleDeLAction = computed(() => this.derniere() ? this.libelles().confirmer : this.libelleContinuer() ?? this.libelles().continuer, ...ngDevMode ? [{ debugName: "libelleDeLAction" }] : /* istanbul ignore next */ []);
1063
+ avecAvertissement = computed(() => this.derniere() && this.avertissement() !== null, ...ngDevMode ? [{ debugName: "avecAvertissement" }] : /* istanbul ignore next */ []);
1064
+ idDeLAvertissement = inject(StIdentifiants).prochain("st-etape-avertissement");
1065
+ constructor() {
1066
+ let averti = false;
1067
+ effect(() => {
1068
+ if (!isDevMode() || averti || !this.derniere() || this.avertissement() !== null) return;
1069
+ averti = true;
1070
+ console.warn("[st-wizard-step] derniere etape sans avertissement : dire ce qui ne pourra plus etre annule avant de confirmer (WCAG 3.3.4).");
1071
+ });
1072
+ afterNextRender(() => {
1073
+ if (!isDevMode()) return;
1074
+ const principales = this.element.querySelectorAll("st-form-actions [data-variante=\"primaire\"]").length;
1075
+ if (principales > 1) console.warn(`[st-wizard-step] ${String(principales)} actions principales : une seule par etape.`);
1076
+ });
1077
+ }
1078
+ retourner() {
1079
+ this.assistant?.demanderLeRetour();
1080
+ }
1081
+ static ɵfac = i0.ɵɵngDeclareFactory({
1082
+ minVersion: "12.0.0",
1083
+ version: "22.2.0",
1084
+ ngImport: i0,
1085
+ type: StWizardStep,
1086
+ deps: [],
1087
+ target: i0.ɵɵFactoryTarget.Component
1088
+ });
1089
+ static ɵcmp = i0.ɵɵngDeclareComponent({
1090
+ minVersion: "17.0.0",
1091
+ version: "22.2.0",
1092
+ type: StWizardStep,
1093
+ isStandalone: true,
1094
+ selector: "st-wizard-step",
1095
+ inputs: {
1096
+ titre: {
1097
+ classPropertyName: "titre",
1098
+ publicName: "titre",
1099
+ isSignal: true,
1100
+ isRequired: true,
1101
+ transformFunction: null
1102
+ },
1103
+ niveauDuTitre: {
1104
+ classPropertyName: "niveauDuTitre",
1105
+ publicName: "niveauDuTitre",
1106
+ isSignal: true,
1107
+ isRequired: false,
1108
+ transformFunction: null
1109
+ },
1110
+ derniere: {
1111
+ classPropertyName: "derniere",
1112
+ publicName: "derniere",
1113
+ isSignal: true,
1114
+ isRequired: false,
1115
+ transformFunction: null
1116
+ },
1117
+ avertissement: {
1118
+ classPropertyName: "avertissement",
1119
+ publicName: "avertissement",
1120
+ isSignal: true,
1121
+ isRequired: false,
1122
+ transformFunction: null
1123
+ },
1124
+ libelleContinuer: {
1125
+ classPropertyName: "libelleContinuer",
1126
+ publicName: "libelleContinuer",
1127
+ isSignal: true,
1128
+ isRequired: false,
1129
+ transformFunction: null
1130
+ },
1131
+ chargement: {
1132
+ classPropertyName: "chargement",
1133
+ publicName: "chargement",
1134
+ isSignal: true,
1135
+ isRequired: false,
1136
+ transformFunction: null
1137
+ },
1138
+ indisponible: {
1139
+ classPropertyName: "indisponible",
1140
+ publicName: "indisponible",
1141
+ isSignal: true,
1142
+ isRequired: false,
1143
+ transformFunction: null
1144
+ },
1145
+ dispositionDesActions: {
1146
+ classPropertyName: "dispositionDesActions",
1147
+ publicName: "dispositionDesActions",
1148
+ isSignal: true,
1149
+ isRequired: false,
1150
+ transformFunction: null
1151
+ }
1152
+ },
1153
+ host: {
1154
+ properties: { "attr.data-orientation": "orientation()" },
1155
+ classAttribute: "st-wizard-step"
1156
+ },
1157
+ ngImport: i0,
1158
+ template: "<st-page-title class=\"st-wizard-step__titre\" taille=\"2xl\" [niveau]=\"niveauDuTitre()\">\n @if (compte(); as texte) {\n <!-- Lu : « Etape 2 sur 3 : Montant » ; vu : le compte en surtitre, le nom dessous. -->\n <span class=\"st-wizard-step__compte\" aria-hidden=\"true\">{{ texte }}</span>\n <span class=\"st-vh\">{{ titreLu() }}</span>\n <span aria-hidden=\"true\">{{ titre() }}</span>\n } @else {\n {{ titre() }}\n }\n</st-page-title>\n\n<div class=\"st-wizard-step__contenu\"><ng-content /></div>\n<ng-content select=\"[avantActions]\" />\n\n@if (avecAvertissement()) {\n <st-inline-message\n class=\"st-wizard-step__avertissement\"\n ton=\"avertissement\"\n [identifiant]=\"idDeLAvertissement\"\n >{{ avertissement() }}</st-inline-message\n >\n}\n\n<st-form-actions [disposition]=\"dispositionDesActions()\">\n @if (retourPossible()) {\n @if (retourVers(); as route) {\n <a debut stLink class=\"st-wizard-step__retour\" [routerLink]=\"route\">{{\n libelles().retour\n }}</a>\n } @else {\n <button debut stButton type=\"button\" (click)=\"retourner()\">\n {{ libelles().retour }}\n </button>\n }\n }\n <ng-content select=\"[actions]\" />\n <!-- L'avertissement decrit « Confirmer » : qui tabule droit sur le bouton l'entend (D-33). -->\n <button\n stButton\n type=\"submit\"\n variante=\"primaire\"\n [chargement]=\"chargement()\"\n [indisponible]=\"indisponible()\"\n [attr.aria-describedby]=\"avecAvertissement() ? idDeLAvertissement : null\"\n >\n {{ libelleDeLAction() }}\n </button>\n</st-form-actions>\n",
1159
+ 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:grid;gap:var(--st-espacement-6)}.st-wizard-step__compte{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;display:block;margin-block-end:var(--st-espacement-1);color:var(--st-couleur-texte-discret)}:host([data-orientation=horizontale]) .st-wizard-step__compte{display:none}@container (min-width: 48rem){:host([data-orientation=horizontale]) .st-wizard-step__compte{display:block}}.st-wizard-step__contenu{display:grid;gap:var(--st-espacement-4);min-inline-size:0}.st-wizard-step__retour{display:inline-flex;align-items:center;min-block-size:var(--st-cible-tactile-min)}\n"],
1160
+ dependencies: [
1161
+ {
1162
+ kind: "directive",
1163
+ type: RouterLink,
1164
+ selector: "[routerLink]",
1165
+ inputs: [
1166
+ "target",
1167
+ "queryParams",
1168
+ "fragment",
1169
+ "queryParamsHandling",
1170
+ "state",
1171
+ "info",
1172
+ "relativeTo",
1173
+ "preserveFragment",
1174
+ "skipLocationChange",
1175
+ "replaceUrl",
1176
+ "browserUrl",
1177
+ "routerLink"
1178
+ ]
1179
+ },
1180
+ {
1181
+ kind: "component",
1182
+ type: StButton,
1183
+ selector: "button[stButton]",
1184
+ inputs: [
1185
+ "variante",
1186
+ "taille",
1187
+ "pleineLargeur",
1188
+ "iconeAvant",
1189
+ "iconeApres",
1190
+ "chargement",
1191
+ "indisponible",
1192
+ "raisonIndisponible"
1193
+ ]
1194
+ },
1195
+ {
1196
+ kind: "component",
1197
+ type: StFormActions,
1198
+ selector: "st-form-actions",
1199
+ inputs: ["disposition"]
1200
+ },
1201
+ {
1202
+ kind: "component",
1203
+ type: StInlineMessage,
1204
+ selector: "st-inline-message",
1205
+ inputs: [
1206
+ "ton",
1207
+ "identifiant",
1208
+ "annonce",
1209
+ "encadre",
1210
+ "icone"
1211
+ ]
1212
+ },
1213
+ {
1214
+ kind: "component",
1215
+ type: StLink,
1216
+ selector: "a[stLink]",
1217
+ inputs: [
1218
+ "variante",
1219
+ "externe",
1220
+ "mentionExterne",
1221
+ "iconeAvant",
1222
+ "iconeApres"
1223
+ ]
1224
+ },
1225
+ {
1226
+ kind: "component",
1227
+ type: StPageTitle,
1228
+ selector: "st-page-title",
1229
+ inputs: [
1230
+ "precision",
1231
+ "identifiant",
1232
+ "niveau",
1233
+ "taille"
1234
+ ]
1235
+ }
1236
+ ],
1237
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
1238
+ });
1239
+ };
1240
+ i0.ɵɵngDeclareClassMetadata({
1241
+ minVersion: "12.0.0",
1242
+ version: "22.2.0",
1243
+ ngImport: i0,
1244
+ type: StWizardStep,
1245
+ decorators: [{
1246
+ type: Component,
1247
+ args: [{
1248
+ selector: "st-wizard-step",
1249
+ changeDetection: ChangeDetectionStrategy.OnPush,
1250
+ imports: [
1251
+ RouterLink,
1252
+ StButton,
1253
+ StFormActions,
1254
+ StInlineMessage,
1255
+ StLink,
1256
+ StPageTitle
1257
+ ],
1258
+ host: {
1259
+ class: "st-wizard-step",
1260
+ "[attr.data-orientation]": "orientation()"
1261
+ },
1262
+ template: "<st-page-title class=\"st-wizard-step__titre\" taille=\"2xl\" [niveau]=\"niveauDuTitre()\">\n @if (compte(); as texte) {\n <!-- Lu : « Etape 2 sur 3 : Montant » ; vu : le compte en surtitre, le nom dessous. -->\n <span class=\"st-wizard-step__compte\" aria-hidden=\"true\">{{ texte }}</span>\n <span class=\"st-vh\">{{ titreLu() }}</span>\n <span aria-hidden=\"true\">{{ titre() }}</span>\n } @else {\n {{ titre() }}\n }\n</st-page-title>\n\n<div class=\"st-wizard-step__contenu\"><ng-content /></div>\n<ng-content select=\"[avantActions]\" />\n\n@if (avecAvertissement()) {\n <st-inline-message\n class=\"st-wizard-step__avertissement\"\n ton=\"avertissement\"\n [identifiant]=\"idDeLAvertissement\"\n >{{ avertissement() }}</st-inline-message\n >\n}\n\n<st-form-actions [disposition]=\"dispositionDesActions()\">\n @if (retourPossible()) {\n @if (retourVers(); as route) {\n <a debut stLink class=\"st-wizard-step__retour\" [routerLink]=\"route\">{{\n libelles().retour\n }}</a>\n } @else {\n <button debut stButton type=\"button\" (click)=\"retourner()\">\n {{ libelles().retour }}\n </button>\n }\n }\n <ng-content select=\"[actions]\" />\n <!-- L'avertissement decrit « Confirmer » : qui tabule droit sur le bouton l'entend (D-33). -->\n <button\n stButton\n type=\"submit\"\n variante=\"primaire\"\n [chargement]=\"chargement()\"\n [indisponible]=\"indisponible()\"\n [attr.aria-describedby]=\"avecAvertissement() ? idDeLAvertissement : null\"\n >\n {{ libelleDeLAction() }}\n </button>\n</st-form-actions>\n",
1263
+ 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:grid;gap:var(--st-espacement-6)}.st-wizard-step__compte{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;display:block;margin-block-end:var(--st-espacement-1);color:var(--st-couleur-texte-discret)}:host([data-orientation=horizontale]) .st-wizard-step__compte{display:none}@container (min-width: 48rem){:host([data-orientation=horizontale]) .st-wizard-step__compte{display:block}}.st-wizard-step__contenu{display:grid;gap:var(--st-espacement-4);min-inline-size:0}.st-wizard-step__retour{display:inline-flex;align-items:center;min-block-size:var(--st-cible-tactile-min)}\n"]
1264
+ }]
1265
+ }],
1266
+ ctorParameters: () => [],
1267
+ propDecorators: {
1268
+ titre: [{
1269
+ type: i0.Input,
1270
+ args: [{
1271
+ isSignal: true,
1272
+ alias: "titre",
1273
+ required: true
1274
+ }]
1275
+ }],
1276
+ niveauDuTitre: [{
1277
+ type: i0.Input,
1278
+ args: [{
1279
+ isSignal: true,
1280
+ alias: "niveauDuTitre",
1281
+ required: false
1282
+ }]
1283
+ }],
1284
+ derniere: [{
1285
+ type: i0.Input,
1286
+ args: [{
1287
+ isSignal: true,
1288
+ alias: "derniere",
1289
+ required: false
1290
+ }]
1291
+ }],
1292
+ avertissement: [{
1293
+ type: i0.Input,
1294
+ args: [{
1295
+ isSignal: true,
1296
+ alias: "avertissement",
1297
+ required: false
1298
+ }]
1299
+ }],
1300
+ libelleContinuer: [{
1301
+ type: i0.Input,
1302
+ args: [{
1303
+ isSignal: true,
1304
+ alias: "libelleContinuer",
1305
+ required: false
1306
+ }]
1307
+ }],
1308
+ chargement: [{
1309
+ type: i0.Input,
1310
+ args: [{
1311
+ isSignal: true,
1312
+ alias: "chargement",
1313
+ required: false
1314
+ }]
1315
+ }],
1316
+ indisponible: [{
1317
+ type: i0.Input,
1318
+ args: [{
1319
+ isSignal: true,
1320
+ alias: "indisponible",
1321
+ required: false
1322
+ }]
1323
+ }],
1324
+ dispositionDesActions: [{
1325
+ type: i0.Input,
1326
+ args: [{
1327
+ isSignal: true,
1328
+ alias: "dispositionDesActions",
1329
+ required: false
1330
+ }]
1331
+ }]
1332
+ }
1333
+ });
1334
+ function echeance(secondes) {
1335
+ return secondes !== null && secondes > 0 ? Date.now() + secondes * 1e3 : null;
1336
+ }
1337
+ const DELAI_DE_RENVOI_PAR_DEFAUT = 30;
1338
+ var StChallenge = class StChallenge {
1339
+ injecteur = inject(Injector);
1340
+ hote = inject(ElementRef);
1341
+ libelles = inject(ST_LIBELLES);
1342
+ annonce = new AnnonceLocale(inject(DestroyRef));
1343
+ identifiants = inject(StIdentifiants);
1344
+ idDuTitre = this.identifiants.prochain("st-ceremonie");
1345
+ idDeLOperation = this.identifiants.prochain("st-ceremonie-operation");
1346
+ idDesMoyens = this.identifiants.prochain("st-ceremonie-moyens");
1347
+ idDesTentatives = this.identifiants.prochain("st-ceremonie-tentatives");
1348
+ titre = input(null, ...ngDevMode ? [{ debugName: "titre" }] : /* istanbul ignore next */ []);
1349
+ niveauDuTitre = input(2, ...ngDevMode ? [{ debugName: "niveauDuTitre" }] : /* istanbul ignore next */ []);
1350
+ description = input(null, ...ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []);
1351
+ moyen = model("code", ...ngDevMode ? [{ debugName: "moyen" }] : /* istanbul ignore next */ []);
1352
+ autresMoyens = input([], ...ngDevMode ? [{ debugName: "autresMoyens" }] : /* istanbul ignore next */ []);
1353
+ ceremonie = input(null, ...ngDevMode ? [{ debugName: "ceremonie" }] : /* istanbul ignore next */ []);
1354
+ longueurDuCode = input(6, {
1355
+ ...ngDevMode ? { debugName: "longueurDuCode" } : /* istanbul ignore next */ {},
1356
+ transform: numberAttribute
1357
+ });
1358
+ libelleDuCode = input(null, ...ngDevMode ? [{ debugName: "libelleDuCode" }] : /* istanbul ignore next */ []);
1359
+ aideDuCode = input(null, ...ngDevMode ? [{ debugName: "aideDuCode" }] : /* istanbul ignore next */ []);
1360
+ renvoyable = input(false, {
1361
+ ...ngDevMode ? { debugName: "renvoyable" } : /* istanbul ignore next */ {},
1362
+ transform: booleanAttribute
1363
+ });
1364
+ renvoiDans = input(null, ...ngDevMode ? [{ debugName: "renvoiDans" }] : /* istanbul ignore next */ []);
1365
+ renvoiEnCours = input(false, {
1366
+ ...ngDevMode ? { debugName: "renvoiEnCours" } : /* istanbul ignore next */ {},
1367
+ transform: booleanAttribute
1368
+ });
1369
+ expireDans = input(null, ...ngDevMode ? [{ debugName: "expireDans" }] : /* istanbul ignore next */ []);
1370
+ chargement = input(false, {
1371
+ ...ngDevMode ? { debugName: "chargement" } : /* istanbul ignore next */ {},
1372
+ transform: booleanAttribute
1373
+ });
1374
+ proposerAppareilDeConfiance = input(false, {
1375
+ ...ngDevMode ? { debugName: "proposerAppareilDeConfiance" } : /* istanbul ignore next */ {},
1376
+ transform: booleanAttribute
1377
+ });
1378
+ appareilDeConfiance = model(false, ...ngDevMode ? [{ debugName: "appareilDeConfiance" }] : /* istanbul ignore next */ []);
1379
+ annulable = input(false, {
1380
+ ...ngDevMode ? { debugName: "annulable" } : /* istanbul ignore next */ {},
1381
+ transform: booleanAttribute
1382
+ });
1383
+ libelleDAnnulation = input(null, ...ngDevMode ? [{ debugName: "libelleDAnnulation" }] : /* istanbul ignore next */ []);
1384
+ libelleDeLAction = input(null, ...ngDevMode ? [{ debugName: "libelleDeLAction" }] : /* istanbul ignore next */ []);
1385
+ code = model("", ...ngDevMode ? [{ debugName: "code" }] : /* istanbul ignore next */ []);
1386
+ focusALArrivee = input(true, {
1387
+ ...ngDevMode ? { debugName: "focusALArrivee" } : /* istanbul ignore next */ {},
1388
+ transform: booleanAttribute
1389
+ });
1390
+ envoi = output();
1391
+ renvoi = output();
1392
+ annulation = output();
1393
+ expiration = output();
1394
+ champDuCode = viewChild(StOtpField, ...ngDevMode ? [{ debugName: "champDuCode" }] : /* istanbul ignore next */ []);
1395
+ champDeSecours = viewChild(StInput, ...ngDevMode ? [{ debugName: "champDeSecours" }] : /* istanbul ignore next */ []);
1396
+ operation = viewChild("operation", ...ngDevMode ? [{ debugName: "operation" }] : /* istanbul ignore next */ []);
1397
+ lecture = linkedSignal({
1398
+ ...ngDevMode ? { debugName: "lecture" } : /* istanbul ignore next */ {},
1399
+ source: () => ({
1400
+ moyen: this.moyen(),
1401
+ ceremonie: this.ceremonie()
1402
+ }),
1403
+ computation: (source, precedent) => precedent !== void 0 && precedent.source.moyen !== source.moyen && precedent.source.ceremonie === source.ceremonie ? null : source.ceremonie
1404
+ });
1405
+ etat = linkedSignal(() => this.lecture()?.etat ?? (this.moyen() === "appareil" ? "attente" : "saisie"), ...ngDevMode ? [{ debugName: "etat" }] : /* istanbul ignore next */ []);
1406
+ bloque = computed(() => this.etat() === "bloque", ...ngDevMode ? [{ debugName: "bloque" }] : /* istanbul ignore next */ []);
1407
+ expiree = computed(() => this.etat() === "expire", ...ngDevMode ? [{ debugName: "expiree" }] : /* istanbul ignore next */ []);
1408
+ horsService = computed(() => this.bloque() || this.expiree(), ...ngDevMode ? [{ debugName: "horsService" }] : /* istanbul ignore next */ []);
1409
+ avecCode = computed(() => this.moyen() === "code", ...ngDevMode ? [{ debugName: "avecCode" }] : /* istanbul ignore next */ []);
1410
+ tentativesRestantes = computed(() => this.etat() === "refuse" ? this.lecture()?.tentativesRestantes ?? null : null, ...ngDevMode ? [{ debugName: "tentativesRestantes" }] : /* istanbul ignore next */ []);
1411
+ descriptionsDuChamp = computed(() => this.tentativesRestantes() ? [this.idDesTentatives] : [], ...ngDevMode ? [{ debugName: "descriptionsDuChamp" }] : /* istanbul ignore next */ []);
1412
+ attenteDuBlocage = computed(() => {
1413
+ const secondes = this.lecture()?.reessayerDans ?? null;
1414
+ return this.bloque() && secondes !== null && secondes > 0 ? secondes : null;
1415
+ }, ...ngDevMode ? [{ debugName: "attenteDuBlocage" }] : /* istanbul ignore next */ []);
1416
+ libelleDuChamp = computed(() => this.libelleDuCode() ?? (this.avecCode() ? this.libelles().codeDeVerification : this.libelles().codeDeSecours), ...ngDevMode ? [{ debugName: "libelleDuChamp" }] : /* istanbul ignore next */ []);
1417
+ libelleDuBouton = computed(() => this.libelleDeLAction() ?? this.libelles().confirmer, ...ngDevMode ? [{ debugName: "libelleDuBouton" }] : /* istanbul ignore next */ []);
1418
+ delaiDeRenvoi = computed(() => this.renvoiDans() ?? (this.renvoyable() && this.avecCode() ? DELAI_DE_RENVOI_PAR_DEFAUT : null), ...ngDevMode ? [{ debugName: "delaiDeRenvoi" }] : /* istanbul ignore next */ []);
1419
+ finDuDelaiDeRenvoi = linkedSignal({
1420
+ ...ngDevMode ? { debugName: "finDuDelaiDeRenvoi" } : /* istanbul ignore next */ {},
1421
+ source: this.delaiDeRenvoi,
1422
+ computation: (secondes) => echeance(secondes)
1423
+ });
1424
+ renvoiEnAttente = computed(() => this.finDuDelaiDeRenvoi() !== null, ...ngDevMode ? [{ debugName: "renvoiEnAttente" }] : /* istanbul ignore next */ []);
1425
+ finDeValidite = linkedSignal({
1426
+ ...ngDevMode ? { debugName: "finDeValidite" } : /* istanbul ignore next */ {},
1427
+ source: this.expireDans,
1428
+ computation: (secondes) => echeance(secondes)
1429
+ });
1430
+ decompteDuRenvoi = viewChild("decompteDuRenvoi", ...ngDevMode ? [{ debugName: "decompteDuRenvoi" }] : /* istanbul ignore next */ []);
1431
+ raisonDuRenvoi = computed(() => this.renvoiEnAttente() ? this.decompteDuRenvoi()?.phrase() ?? null : null, ...ngDevMode ? [{ debugName: "raisonDuRenvoi" }] : /* istanbul ignore next */ []);
1432
+ moyensOuverts = signal(false, ...ngDevMode ? [{ debugName: "moyensOuverts" }] : /* istanbul ignore next */ []);
1433
+ autres = computed(() => this.autresMoyens().filter((moyen) => moyen !== this.moyen()), ...ngDevMode ? [{ debugName: "autres" }] : /* istanbul ignore next */ []);
1434
+ tente = linkedSignal({
1435
+ ...ngDevMode ? { debugName: "tente" } : /* istanbul ignore next */ {},
1436
+ source: this.moyen,
1437
+ computation: () => false
1438
+ });
1439
+ codeAuRefus = signal(null, ...ngDevMode ? [{ debugName: "codeAuRefus" }] : /* istanbul ignore next */ []);
1440
+ erreurs = computed(() => {
1441
+ const code = this.code();
1442
+ if (this.etat() === "refuse" && code === this.codeAuRefus()) return [{
1443
+ kind: "code-refuse",
1444
+ message: this.libelles().codeRefuse
1445
+ }];
1446
+ if (!this.tente()) return [];
1447
+ if (code.trim() === "") return [{ kind: "required" }];
1448
+ const forme = this.avecCode() ? erreurCode(code, this.longueurDuCode()) : null;
1449
+ return forme === null ? [] : [forme];
1450
+ }, ...ngDevMode ? [{ debugName: "erreurs" }] : /* istanbul ignore next */ []);
1451
+ erreursVisibles = computed(() => this.erreurs().length > 0, ...ngDevMode ? [{ debugName: "erreursVisibles" }] : /* istanbul ignore next */ []);
1452
+ avecOperation = signal(false, ...ngDevMode ? [{ debugName: "avecOperation" }] : /* istanbul ignore next */ []);
1453
+ constructor() {
1454
+ afterNextRender(() => {
1455
+ this.avecOperation.set((this.operation()?.nativeElement.childElementCount ?? 0) > 0);
1456
+ if (isDevMode() && this.hote.nativeElement.parentElement?.closest("form") !== null) console.warn("st-challenge : le composant porte son propre formulaire ; ne le placez pas dans un <form>.");
1457
+ const avecChamp = this.moyen() === "code" || this.moyen() === "secours";
1458
+ if (this.focusALArrivee() && avecChamp) this.focaliserLeChamp(false);
1459
+ });
1460
+ effect(() => {
1461
+ const lecture = this.lecture();
1462
+ if (lecture === null) return;
1463
+ untracked(() => {
1464
+ if (lecture.etat !== "refuse") return;
1465
+ this.codeAuRefus.set(this.code());
1466
+ afterNextRender(() => {
1467
+ const annonce = this.annonceDuRefus(lecture.tentativesRestantes);
1468
+ if (annonce !== null) this.annonce.annoncer(annonce);
1469
+ this.focaliserLeChamp(true);
1470
+ }, { injector: this.injecteur });
1471
+ });
1472
+ });
1473
+ }
1474
+ annonceDuRefus(restantes) {
1475
+ const libelles = this.libelles();
1476
+ const saisie = this.saisieDuCode();
1477
+ if (saisie === null) {
1478
+ if (this.moyen() === "appareil") return libelles.demandeRefusee;
1479
+ return this.moyen() === "passkey" ? libelles.cleRefusee : null;
1480
+ }
1481
+ if (saisie.ownerDocument.activeElement !== saisie) return null;
1482
+ return restantes === null ? libelles.codeRefuse : `${libelles.codeRefuse} ${libelles.tentativesRestantes(restantes)}`;
1483
+ }
1484
+ surEnvoi(evenement) {
1485
+ evenement.preventDefault();
1486
+ if (this.chargement() || this.horsService()) return;
1487
+ this.tente.set(true);
1488
+ if (this.erreursVisibles()) {
1489
+ this.focaliserLeChamp(false);
1490
+ return;
1491
+ }
1492
+ this.envoi.emit({
1493
+ moyen: this.moyen(),
1494
+ code: this.code()
1495
+ });
1496
+ }
1497
+ utiliserLaCle() {
1498
+ if (this.chargement() || this.horsService()) return;
1499
+ this.envoi.emit({
1500
+ moyen: "passkey",
1501
+ code: ""
1502
+ });
1503
+ }
1504
+ renvoyer() {
1505
+ if (this.renvoiEnCours()) return;
1506
+ if (this.renvoiEnAttente() && !this.expiree()) return;
1507
+ this.finDuDelaiDeRenvoi.set(echeance(this.delaiDeRenvoi()));
1508
+ this.finDeValidite.set(echeance(this.expireDans()));
1509
+ this.etat.set(this.moyen() === "appareil" ? "attente" : "saisie");
1510
+ this.renvoi.emit();
1511
+ if (this.moyen() === "code") this.annonce.annoncer(this.libelles().nouveauCodeDemande);
1512
+ }
1513
+ choisir(moyen) {
1514
+ this.moyensOuverts.set(false);
1515
+ this.code.set("");
1516
+ this.moyen.set(moyen);
1517
+ afterNextRender(() => {
1518
+ if (moyen === "code" || moyen === "secours") {
1519
+ this.focaliserLeChamp(false);
1520
+ return;
1521
+ }
1522
+ this.hote.nativeElement.querySelector(".st-challenge__cible")?.focus();
1523
+ }, { injector: this.injecteur });
1524
+ }
1525
+ finDuRenvoi() {
1526
+ this.finDuDelaiDeRenvoi.set(null);
1527
+ }
1528
+ finDeLaDemande() {
1529
+ this.etat.set("expire");
1530
+ this.expiration.emit();
1531
+ }
1532
+ finDuBlocage() {
1533
+ this.code.set("");
1534
+ this.etat.set("saisie");
1535
+ }
1536
+ focaliserLeChamp(selectionner) {
1537
+ (this.champDuCode() ?? this.champDeSecours())?.focus();
1538
+ if (!selectionner) return;
1539
+ this.saisieDuCode()?.select();
1540
+ }
1541
+ saisieDuCode() {
1542
+ return this.hote.nativeElement.querySelector(".st-challenge__champ input");
1543
+ }
1544
+ static ɵfac = i0.ɵɵngDeclareFactory({
1545
+ minVersion: "12.0.0",
1546
+ version: "22.2.0",
1547
+ ngImport: i0,
1548
+ type: StChallenge,
1549
+ deps: [],
1550
+ target: i0.ɵɵFactoryTarget.Component
1551
+ });
1552
+ static ɵcmp = i0.ɵɵngDeclareComponent({
1553
+ minVersion: "17.0.0",
1554
+ version: "22.2.0",
1555
+ type: StChallenge,
1556
+ isStandalone: true,
1557
+ selector: "st-challenge",
1558
+ inputs: {
1559
+ titre: {
1560
+ classPropertyName: "titre",
1561
+ publicName: "titre",
1562
+ isSignal: true,
1563
+ isRequired: false,
1564
+ transformFunction: null
1565
+ },
1566
+ niveauDuTitre: {
1567
+ classPropertyName: "niveauDuTitre",
1568
+ publicName: "niveauDuTitre",
1569
+ isSignal: true,
1570
+ isRequired: false,
1571
+ transformFunction: null
1572
+ },
1573
+ description: {
1574
+ classPropertyName: "description",
1575
+ publicName: "description",
1576
+ isSignal: true,
1577
+ isRequired: false,
1578
+ transformFunction: null
1579
+ },
1580
+ moyen: {
1581
+ classPropertyName: "moyen",
1582
+ publicName: "moyen",
1583
+ isSignal: true,
1584
+ isRequired: false,
1585
+ transformFunction: null
1586
+ },
1587
+ autresMoyens: {
1588
+ classPropertyName: "autresMoyens",
1589
+ publicName: "autresMoyens",
1590
+ isSignal: true,
1591
+ isRequired: false,
1592
+ transformFunction: null
1593
+ },
1594
+ ceremonie: {
1595
+ classPropertyName: "ceremonie",
1596
+ publicName: "ceremonie",
1597
+ isSignal: true,
1598
+ isRequired: false,
1599
+ transformFunction: null
1600
+ },
1601
+ longueurDuCode: {
1602
+ classPropertyName: "longueurDuCode",
1603
+ publicName: "longueurDuCode",
1604
+ isSignal: true,
1605
+ isRequired: false,
1606
+ transformFunction: null
1607
+ },
1608
+ libelleDuCode: {
1609
+ classPropertyName: "libelleDuCode",
1610
+ publicName: "libelleDuCode",
1611
+ isSignal: true,
1612
+ isRequired: false,
1613
+ transformFunction: null
1614
+ },
1615
+ aideDuCode: {
1616
+ classPropertyName: "aideDuCode",
1617
+ publicName: "aideDuCode",
1618
+ isSignal: true,
1619
+ isRequired: false,
1620
+ transformFunction: null
1621
+ },
1622
+ renvoyable: {
1623
+ classPropertyName: "renvoyable",
1624
+ publicName: "renvoyable",
1625
+ isSignal: true,
1626
+ isRequired: false,
1627
+ transformFunction: null
1628
+ },
1629
+ renvoiDans: {
1630
+ classPropertyName: "renvoiDans",
1631
+ publicName: "renvoiDans",
1632
+ isSignal: true,
1633
+ isRequired: false,
1634
+ transformFunction: null
1635
+ },
1636
+ renvoiEnCours: {
1637
+ classPropertyName: "renvoiEnCours",
1638
+ publicName: "renvoiEnCours",
1639
+ isSignal: true,
1640
+ isRequired: false,
1641
+ transformFunction: null
1642
+ },
1643
+ expireDans: {
1644
+ classPropertyName: "expireDans",
1645
+ publicName: "expireDans",
1646
+ isSignal: true,
1647
+ isRequired: false,
1648
+ transformFunction: null
1649
+ },
1650
+ chargement: {
1651
+ classPropertyName: "chargement",
1652
+ publicName: "chargement",
1653
+ isSignal: true,
1654
+ isRequired: false,
1655
+ transformFunction: null
1656
+ },
1657
+ proposerAppareilDeConfiance: {
1658
+ classPropertyName: "proposerAppareilDeConfiance",
1659
+ publicName: "proposerAppareilDeConfiance",
1660
+ isSignal: true,
1661
+ isRequired: false,
1662
+ transformFunction: null
1663
+ },
1664
+ appareilDeConfiance: {
1665
+ classPropertyName: "appareilDeConfiance",
1666
+ publicName: "appareilDeConfiance",
1667
+ isSignal: true,
1668
+ isRequired: false,
1669
+ transformFunction: null
1670
+ },
1671
+ annulable: {
1672
+ classPropertyName: "annulable",
1673
+ publicName: "annulable",
1674
+ isSignal: true,
1675
+ isRequired: false,
1676
+ transformFunction: null
1677
+ },
1678
+ libelleDAnnulation: {
1679
+ classPropertyName: "libelleDAnnulation",
1680
+ publicName: "libelleDAnnulation",
1681
+ isSignal: true,
1682
+ isRequired: false,
1683
+ transformFunction: null
1684
+ },
1685
+ libelleDeLAction: {
1686
+ classPropertyName: "libelleDeLAction",
1687
+ publicName: "libelleDeLAction",
1688
+ isSignal: true,
1689
+ isRequired: false,
1690
+ transformFunction: null
1691
+ },
1692
+ code: {
1693
+ classPropertyName: "code",
1694
+ publicName: "code",
1695
+ isSignal: true,
1696
+ isRequired: false,
1697
+ transformFunction: null
1698
+ },
1699
+ focusALArrivee: {
1700
+ classPropertyName: "focusALArrivee",
1701
+ publicName: "focusALArrivee",
1702
+ isSignal: true,
1703
+ isRequired: false,
1704
+ transformFunction: null
1705
+ }
1706
+ },
1707
+ outputs: {
1708
+ moyen: "moyenChange",
1709
+ appareilDeConfiance: "appareilDeConfianceChange",
1710
+ code: "codeChange",
1711
+ envoi: "envoi",
1712
+ renvoi: "renvoi",
1713
+ annulation: "annulation",
1714
+ expiration: "expiration"
1715
+ },
1716
+ host: {
1717
+ properties: {
1718
+ "attr.role": "titre() === null ? null : \"group\"",
1719
+ "attr.aria-labelledby": "titre() === null ? null : idDuTitre",
1720
+ "attr.aria-describedby": "avecOperation() ? idDeLOperation : null",
1721
+ "attr.data-moyen": "moyen()",
1722
+ "attr.data-etat": "etat()"
1723
+ },
1724
+ classAttribute: "st-challenge"
1725
+ },
1726
+ viewQueries: [
1727
+ {
1728
+ propertyName: "champDuCode",
1729
+ first: true,
1730
+ predicate: StOtpField,
1731
+ descendants: true,
1732
+ isSignal: true
1733
+ },
1734
+ {
1735
+ propertyName: "champDeSecours",
1736
+ first: true,
1737
+ predicate: StInput,
1738
+ descendants: true,
1739
+ isSignal: true
1740
+ },
1741
+ {
1742
+ propertyName: "operation",
1743
+ first: true,
1744
+ predicate: ["operation"],
1745
+ descendants: true,
1746
+ isSignal: true
1747
+ },
1748
+ {
1749
+ propertyName: "decompteDuRenvoi",
1750
+ first: true,
1751
+ predicate: ["decompteDuRenvoi"],
1752
+ descendants: true,
1753
+ isSignal: true
1754
+ }
1755
+ ],
1756
+ ngImport: i0,
1757
+ template: "@if (titre(); as texte) {\n @switch (niveauDuTitre()) {\n @case (1) {\n <h1 stHeading taille=\"lg\" class=\"st-challenge__titre\" [id]=\"idDuTitre\">{{ texte }}</h1>\n }\n @case (3) {\n <h3 stHeading taille=\"lg\" class=\"st-challenge__titre\" [id]=\"idDuTitre\">{{ texte }}</h3>\n }\n @case (4) {\n <h4 stHeading taille=\"lg\" class=\"st-challenge__titre\" [id]=\"idDuTitre\">{{ texte }}</h4>\n }\n @default {\n <h2 stHeading taille=\"lg\" class=\"st-challenge__titre\" [id]=\"idDuTitre\">{{ texte }}</h2>\n }\n }\n}\n@if (description(); as texte) {\n <p class=\"st-challenge__description\">{{ texte }}</p>\n}\n\n<!-- Ce que l'on confirme (DSP2, lien dynamique) : lu avant le champ, il decrit le groupe. -->\n<div #operation class=\"st-challenge__operation\" [id]=\"idDeLOperation\">\n <ng-content select=\"[operation]\" />\n</div>\n\n<span class=\"st-vh\" aria-live=\"polite\">{{ annonce.texte() }}</span>\n\n@if (bloque()) {\n <!-- Le ton danger rend la banniere en alert : le blocage s'annonce a son arrivee. -->\n <st-banner class=\"st-challenge__blocage\" ton=\"danger\" [message]=\"libelles().tropDeTentatives\">\n @if (attenteDuBlocage(); as secondes) {\n <st-timer nature=\"reessai\" [secondes]=\"secondes\" (termine)=\"finDuBlocage()\" />\n }\n </st-banner>\n}\n\n@switch (moyen()) {\n @case ('appareil') {\n <div class=\"st-challenge__appareil\">\n @if (etat() === 'attente') {\n <!-- L'indicateur s'annonce une fois (sa region, texte compris, reste lue) ; la phrase\n visible le double pour les yeux seulement. Le decompte ne dit que sa fin. -->\n <p class=\"st-challenge__attente\">\n <st-spinner taille=\"sm\" [etiquette]=\"libelles().enAttenteDeValidation\" />\n <span aria-hidden=\"true\">{{ libelles().enAttenteDeValidation }}</span>\n </p>\n }\n @if (etat() === 'refuse') {\n <st-inline-message ton=\"danger\">{{ libelles().demandeRefusee }}</st-inline-message>\n }\n @if (finDeValidite(); as fin) {\n <st-timer\n nature=\"expiration\"\n avecIcone\n [secondes]=\"expireDans() ?? 0\"\n [echeance]=\"fin\"\n (termine)=\"finDeLaDemande()\"\n />\n }\n <!-- En attente, un recours discret ; expiree ou refusee, la nouvelle demande est l'action. -->\n <button\n stButton\n class=\"st-challenge__cible\"\n type=\"button\"\n [variante]=\"etat() === 'attente' ? 'discret' : 'secondaire'\"\n [chargement]=\"renvoiEnCours()\"\n [indisponible]=\"bloque()\"\n (click)=\"renvoyer()\"\n >\n {{ etat() === 'attente' ? libelles().demandeNonRecue : libelles().nouvelleDemande }}\n </button>\n </div>\n }\n @case ('passkey') {\n @if (etat() === 'refuse') {\n <st-inline-message ton=\"danger\">{{ libelles().cleRefusee }}</st-inline-message>\n }\n <button\n stButton\n class=\"st-challenge__cible st-challenge__cle\"\n variante=\"primaire\"\n type=\"button\"\n iconeAvant=\"cle\"\n [chargement]=\"chargement()\"\n [indisponible]=\"horsService()\"\n (click)=\"utiliserLaCle()\"\n >\n {{ libelles().moyenDeCeremonie('passkey') }}\n </button>\n }\n @default {\n <form class=\"st-challenge__formulaire\" novalidate (submit)=\"surEnvoi($event)\">\n @if (avecCode()) {\n <st-otp-field\n class=\"st-challenge__champ\"\n [libelle]=\"libelleDuChamp()\"\n [aide]=\"aideDuCode()\"\n [longueur]=\"longueurDuCode()\"\n [decritPar]=\"descriptionsDuChamp()\"\n [(value)]=\"code\"\n [errors]=\"erreurs()\"\n [touched]=\"erreursVisibles()\"\n [disabled]=\"horsService()\"\n >\n @if (renvoyable()) {\n <!-- Le renvoi attend son delai (30 s sans `renvoiDans`) puis la requete partie :\n deux clics ne font jamais partir deux codes (D-9). -->\n <span stRenvoi class=\"st-challenge__renvoi\">\n <button\n stButton\n variante=\"discret\"\n type=\"button\"\n iconeAvant=\"rotation-arriere\"\n [chargement]=\"renvoiEnCours()\"\n [indisponible]=\"renvoiEnAttente() || bloque()\"\n [raisonIndisponible]=\"raisonDuRenvoi()\"\n (click)=\"renvoyer()\"\n >\n {{ libelles().renvoyerLeCode }}\n </button>\n @if (finDuDelaiDeRenvoi(); as fin) {\n <st-timer\n #decompteDuRenvoi\n nature=\"renvoi\"\n [secondes]=\"delaiDeRenvoi() ?? 0\"\n [echeance]=\"fin\"\n (termine)=\"finDuRenvoi()\"\n />\n }\n </span>\n }\n </st-otp-field>\n @if (finDeValidite(); as fin) {\n <st-timer\n nature=\"expiration\"\n avecIcone\n [secondes]=\"expireDans() ?? 0\"\n [echeance]=\"fin\"\n (termine)=\"finDeLaDemande()\"\n />\n }\n } @else {\n <st-input\n class=\"st-challenge__champ\"\n autocomplete=\"off\"\n chiffres=\"reference\"\n [libelle]=\"libelleDuChamp()\"\n [aide]=\"aideDuCode() ?? libelles().aideDuCodeDeSecours\"\n [decritPar]=\"descriptionsDuChamp()\"\n [(value)]=\"code\"\n [errors]=\"erreurs()\"\n [touched]=\"erreursVisibles()\"\n [disabled]=\"horsService()\"\n />\n }\n\n <!-- Les essais restants decrivent le champ (`descriptionsDuChamp`, D-20) : le focus amene au\n champ les lit avec l'erreur. -->\n @if (tentativesRestantes(); as restantes) {\n <st-inline-message ton=\"avertissement\" [identifiant]=\"idDesTentatives\">{{\n libelles().tentativesRestantes(restantes)\n }}</st-inline-message>\n }\n\n @if (proposerAppareilDeConfiance()) {\n <st-checkbox\n [libelle]=\"libelles().faireConfianceACetAppareil\"\n [aide]=\"libelles().aideDeLAppareilDeConfiance\"\n [(checked)]=\"appareilDeConfiance\"\n />\n }\n\n <!-- L'ordre du document est l'ordre visuel : l'annulation, puis la seule action principale. -->\n <st-form-actions class=\"st-challenge__actions\" disposition=\"pied\">\n @if (annulable()) {\n <button debut stButton type=\"button\" (click)=\"annulation.emit()\">\n {{ libelleDAnnulation() ?? libelles().annuler }}\n </button>\n }\n <button\n stButton\n variante=\"primaire\"\n type=\"submit\"\n [chargement]=\"chargement()\"\n [indisponible]=\"horsService()\"\n >\n {{ libelleDuBouton() }}\n </button>\n </st-form-actions>\n </form>\n }\n}\n\n@if (annulable() && (moyen() === 'appareil' || moyen() === 'passkey')) {\n <st-form-actions class=\"st-challenge__actions\" disposition=\"pied\">\n <button debut stButton type=\"button\" (click)=\"annulation.emit()\">\n {{ libelleDAnnulation() ?? libelles().annuler }}\n </button>\n </st-form-actions>\n}\n\n@if (autres().length > 0) {\n <div class=\"st-challenge__moyens\">\n <button\n stButton\n variante=\"discret\"\n type=\"button\"\n [attr.aria-expanded]=\"moyensOuverts()\"\n [attr.aria-controls]=\"idDesMoyens\"\n (click)=\"moyensOuverts.set(!moyensOuverts())\"\n >\n {{ libelles().utiliserUnAutreMoyen }}\n </button>\n <!-- `role=\"list\"` : sans puces, Safari ne lit plus une liste comme une liste (D-1). -->\n <ul\n class=\"st-challenge__liste-des-moyens\"\n role=\"list\"\n [id]=\"idDesMoyens\"\n [hidden]=\"!moyensOuverts()\"\n >\n @for (autre of autres(); track autre) {\n <li>\n <button stButton variante=\"discret\" type=\"button\" (click)=\"choisir(autre)\">\n {{ libelles().moyenDeCeremonie(autre) }}\n </button>\n </li>\n }\n </ul>\n </div>\n}\n",
1758
+ 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:grid;gap:var(--st-espacement-5);min-inline-size:0}.st-challenge__titre,.st-challenge__description{margin:0}.st-challenge__titre+.st-challenge__description{margin-block-start:calc(var(--st-espacement-3) - var(--st-espacement-5))}.st-challenge__description{color:var(--st-couleur-texte-discret)}.st-challenge__operation:empty{display:none}.st-challenge__formulaire,.st-challenge__appareil{display:grid;gap:var(--st-espacement-4);justify-items:start;min-inline-size:0}.st-challenge__champ{justify-self:stretch}.st-challenge__renvoi{display:grid;gap:var(--st-espacement-1);justify-items:start}.st-challenge__attente{display:inline-flex;gap:var(--st-espacement-2);align-items:center;margin:0;font-weight:var(--st-graisse-semi)}.st-challenge__actions,.st-challenge__cle{justify-self:stretch}@media(min-width:30rem){.st-challenge__cle{justify-self:start}}.st-challenge__moyens{display:grid;gap:var(--st-espacement-1);justify-items:start}.st-challenge__liste-des-moyens{display:grid;gap:var(--st-espacement-1);padding:0;padding-inline-start:var(--st-espacement-4);margin:0;list-style:none;border-inline-start:var(--st-epaisseur-fine) solid var(--st-couleur-bordure)}.st-challenge__liste-des-moyens[hidden]{display:none}\n"],
1759
+ dependencies: [
1760
+ {
1761
+ kind: "component",
1762
+ type: StBanner,
1763
+ selector: "st-banner",
1764
+ inputs: [
1765
+ "ton",
1766
+ "message",
1767
+ "titre",
1768
+ "forme",
1769
+ "identifiant",
1770
+ "fermable",
1771
+ "libelleFermeture"
1772
+ ],
1773
+ outputs: ["ferme"]
1774
+ },
1775
+ {
1776
+ kind: "component",
1777
+ type: StButton,
1778
+ selector: "button[stButton]",
1779
+ inputs: [
1780
+ "variante",
1781
+ "taille",
1782
+ "pleineLargeur",
1783
+ "iconeAvant",
1784
+ "iconeApres",
1785
+ "chargement",
1786
+ "indisponible",
1787
+ "raisonIndisponible"
1788
+ ]
1789
+ },
1790
+ {
1791
+ kind: "component",
1792
+ type: StCheckbox,
1793
+ selector: "st-checkbox",
1794
+ inputs: ["indetermine", "aideDEtat"],
1795
+ outputs: ["indetermineChange"]
1796
+ },
1797
+ {
1798
+ kind: "component",
1799
+ type: StFormActions,
1800
+ selector: "st-form-actions",
1801
+ inputs: ["disposition"]
1802
+ },
1803
+ {
1804
+ kind: "component",
1805
+ type: StHeading,
1806
+ selector: "h1[stHeading], h2[stHeading], h3[stHeading], h4[stHeading], h5[stHeading], h6[stHeading]",
1807
+ inputs: [
1808
+ "taille",
1809
+ "serre",
1810
+ "identifiant"
1811
+ ]
1812
+ },
1813
+ {
1814
+ kind: "component",
1815
+ type: StInlineMessage,
1816
+ selector: "st-inline-message",
1817
+ inputs: [
1818
+ "ton",
1819
+ "identifiant",
1820
+ "annonce",
1821
+ "encadre",
1822
+ "icone"
1823
+ ]
1824
+ },
1825
+ {
1826
+ kind: "component",
1827
+ type: StInput,
1828
+ selector: "st-input",
1829
+ inputs: [
1830
+ "type",
1831
+ "autocomplete",
1832
+ "inputmode",
1833
+ "icone",
1834
+ "chiffres",
1835
+ "presentation",
1836
+ "decritPar",
1837
+ "suggestions"
1838
+ ]
1839
+ },
1840
+ {
1841
+ kind: "component",
1842
+ type: StOtpField,
1843
+ selector: "st-otp-field",
1844
+ inputs: ["longueur", "decritPar"]
1845
+ },
1846
+ {
1847
+ kind: "component",
1848
+ type: StSpinner,
1849
+ selector: "st-spinner",
1850
+ inputs: [
1851
+ "taille",
1852
+ "ton",
1853
+ "etiquette",
1854
+ "icone"
1855
+ ]
1856
+ },
1857
+ {
1858
+ kind: "component",
1859
+ type: StTimer,
1860
+ selector: "st-timer",
1861
+ inputs: [
1862
+ "secondes",
1863
+ "echeance",
1864
+ "nature",
1865
+ "variante",
1866
+ "avecIcone"
1867
+ ],
1868
+ outputs: ["termine"]
1869
+ }
1870
+ ],
1871
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
1872
+ });
1873
+ };
1874
+ i0.ɵɵngDeclareClassMetadata({
1875
+ minVersion: "12.0.0",
1876
+ version: "22.2.0",
1877
+ ngImport: i0,
1878
+ type: StChallenge,
1879
+ decorators: [{
1880
+ type: Component,
1881
+ args: [{
1882
+ selector: "st-challenge",
1883
+ changeDetection: ChangeDetectionStrategy.OnPush,
1884
+ imports: [
1885
+ StBanner,
1886
+ StButton,
1887
+ StCheckbox,
1888
+ StFormActions,
1889
+ StHeading,
1890
+ StInlineMessage,
1891
+ StInput,
1892
+ StOtpField,
1893
+ StSpinner,
1894
+ StTimer
1895
+ ],
1896
+ host: {
1897
+ class: "st-challenge",
1898
+ "[attr.role]": "titre() === null ? null : \"group\"",
1899
+ "[attr.aria-labelledby]": "titre() === null ? null : idDuTitre",
1900
+ "[attr.aria-describedby]": "avecOperation() ? idDeLOperation : null",
1901
+ "[attr.data-moyen]": "moyen()",
1902
+ "[attr.data-etat]": "etat()"
1903
+ },
1904
+ template: "@if (titre(); as texte) {\n @switch (niveauDuTitre()) {\n @case (1) {\n <h1 stHeading taille=\"lg\" class=\"st-challenge__titre\" [id]=\"idDuTitre\">{{ texte }}</h1>\n }\n @case (3) {\n <h3 stHeading taille=\"lg\" class=\"st-challenge__titre\" [id]=\"idDuTitre\">{{ texte }}</h3>\n }\n @case (4) {\n <h4 stHeading taille=\"lg\" class=\"st-challenge__titre\" [id]=\"idDuTitre\">{{ texte }}</h4>\n }\n @default {\n <h2 stHeading taille=\"lg\" class=\"st-challenge__titre\" [id]=\"idDuTitre\">{{ texte }}</h2>\n }\n }\n}\n@if (description(); as texte) {\n <p class=\"st-challenge__description\">{{ texte }}</p>\n}\n\n<!-- Ce que l'on confirme (DSP2, lien dynamique) : lu avant le champ, il decrit le groupe. -->\n<div #operation class=\"st-challenge__operation\" [id]=\"idDeLOperation\">\n <ng-content select=\"[operation]\" />\n</div>\n\n<span class=\"st-vh\" aria-live=\"polite\">{{ annonce.texte() }}</span>\n\n@if (bloque()) {\n <!-- Le ton danger rend la banniere en alert : le blocage s'annonce a son arrivee. -->\n <st-banner class=\"st-challenge__blocage\" ton=\"danger\" [message]=\"libelles().tropDeTentatives\">\n @if (attenteDuBlocage(); as secondes) {\n <st-timer nature=\"reessai\" [secondes]=\"secondes\" (termine)=\"finDuBlocage()\" />\n }\n </st-banner>\n}\n\n@switch (moyen()) {\n @case ('appareil') {\n <div class=\"st-challenge__appareil\">\n @if (etat() === 'attente') {\n <!-- L'indicateur s'annonce une fois (sa region, texte compris, reste lue) ; la phrase\n visible le double pour les yeux seulement. Le decompte ne dit que sa fin. -->\n <p class=\"st-challenge__attente\">\n <st-spinner taille=\"sm\" [etiquette]=\"libelles().enAttenteDeValidation\" />\n <span aria-hidden=\"true\">{{ libelles().enAttenteDeValidation }}</span>\n </p>\n }\n @if (etat() === 'refuse') {\n <st-inline-message ton=\"danger\">{{ libelles().demandeRefusee }}</st-inline-message>\n }\n @if (finDeValidite(); as fin) {\n <st-timer\n nature=\"expiration\"\n avecIcone\n [secondes]=\"expireDans() ?? 0\"\n [echeance]=\"fin\"\n (termine)=\"finDeLaDemande()\"\n />\n }\n <!-- En attente, un recours discret ; expiree ou refusee, la nouvelle demande est l'action. -->\n <button\n stButton\n class=\"st-challenge__cible\"\n type=\"button\"\n [variante]=\"etat() === 'attente' ? 'discret' : 'secondaire'\"\n [chargement]=\"renvoiEnCours()\"\n [indisponible]=\"bloque()\"\n (click)=\"renvoyer()\"\n >\n {{ etat() === 'attente' ? libelles().demandeNonRecue : libelles().nouvelleDemande }}\n </button>\n </div>\n }\n @case ('passkey') {\n @if (etat() === 'refuse') {\n <st-inline-message ton=\"danger\">{{ libelles().cleRefusee }}</st-inline-message>\n }\n <button\n stButton\n class=\"st-challenge__cible st-challenge__cle\"\n variante=\"primaire\"\n type=\"button\"\n iconeAvant=\"cle\"\n [chargement]=\"chargement()\"\n [indisponible]=\"horsService()\"\n (click)=\"utiliserLaCle()\"\n >\n {{ libelles().moyenDeCeremonie('passkey') }}\n </button>\n }\n @default {\n <form class=\"st-challenge__formulaire\" novalidate (submit)=\"surEnvoi($event)\">\n @if (avecCode()) {\n <st-otp-field\n class=\"st-challenge__champ\"\n [libelle]=\"libelleDuChamp()\"\n [aide]=\"aideDuCode()\"\n [longueur]=\"longueurDuCode()\"\n [decritPar]=\"descriptionsDuChamp()\"\n [(value)]=\"code\"\n [errors]=\"erreurs()\"\n [touched]=\"erreursVisibles()\"\n [disabled]=\"horsService()\"\n >\n @if (renvoyable()) {\n <!-- Le renvoi attend son delai (30 s sans `renvoiDans`) puis la requete partie :\n deux clics ne font jamais partir deux codes (D-9). -->\n <span stRenvoi class=\"st-challenge__renvoi\">\n <button\n stButton\n variante=\"discret\"\n type=\"button\"\n iconeAvant=\"rotation-arriere\"\n [chargement]=\"renvoiEnCours()\"\n [indisponible]=\"renvoiEnAttente() || bloque()\"\n [raisonIndisponible]=\"raisonDuRenvoi()\"\n (click)=\"renvoyer()\"\n >\n {{ libelles().renvoyerLeCode }}\n </button>\n @if (finDuDelaiDeRenvoi(); as fin) {\n <st-timer\n #decompteDuRenvoi\n nature=\"renvoi\"\n [secondes]=\"delaiDeRenvoi() ?? 0\"\n [echeance]=\"fin\"\n (termine)=\"finDuRenvoi()\"\n />\n }\n </span>\n }\n </st-otp-field>\n @if (finDeValidite(); as fin) {\n <st-timer\n nature=\"expiration\"\n avecIcone\n [secondes]=\"expireDans() ?? 0\"\n [echeance]=\"fin\"\n (termine)=\"finDeLaDemande()\"\n />\n }\n } @else {\n <st-input\n class=\"st-challenge__champ\"\n autocomplete=\"off\"\n chiffres=\"reference\"\n [libelle]=\"libelleDuChamp()\"\n [aide]=\"aideDuCode() ?? libelles().aideDuCodeDeSecours\"\n [decritPar]=\"descriptionsDuChamp()\"\n [(value)]=\"code\"\n [errors]=\"erreurs()\"\n [touched]=\"erreursVisibles()\"\n [disabled]=\"horsService()\"\n />\n }\n\n <!-- Les essais restants decrivent le champ (`descriptionsDuChamp`, D-20) : le focus amene au\n champ les lit avec l'erreur. -->\n @if (tentativesRestantes(); as restantes) {\n <st-inline-message ton=\"avertissement\" [identifiant]=\"idDesTentatives\">{{\n libelles().tentativesRestantes(restantes)\n }}</st-inline-message>\n }\n\n @if (proposerAppareilDeConfiance()) {\n <st-checkbox\n [libelle]=\"libelles().faireConfianceACetAppareil\"\n [aide]=\"libelles().aideDeLAppareilDeConfiance\"\n [(checked)]=\"appareilDeConfiance\"\n />\n }\n\n <!-- L'ordre du document est l'ordre visuel : l'annulation, puis la seule action principale. -->\n <st-form-actions class=\"st-challenge__actions\" disposition=\"pied\">\n @if (annulable()) {\n <button debut stButton type=\"button\" (click)=\"annulation.emit()\">\n {{ libelleDAnnulation() ?? libelles().annuler }}\n </button>\n }\n <button\n stButton\n variante=\"primaire\"\n type=\"submit\"\n [chargement]=\"chargement()\"\n [indisponible]=\"horsService()\"\n >\n {{ libelleDuBouton() }}\n </button>\n </st-form-actions>\n </form>\n }\n}\n\n@if (annulable() && (moyen() === 'appareil' || moyen() === 'passkey')) {\n <st-form-actions class=\"st-challenge__actions\" disposition=\"pied\">\n <button debut stButton type=\"button\" (click)=\"annulation.emit()\">\n {{ libelleDAnnulation() ?? libelles().annuler }}\n </button>\n </st-form-actions>\n}\n\n@if (autres().length > 0) {\n <div class=\"st-challenge__moyens\">\n <button\n stButton\n variante=\"discret\"\n type=\"button\"\n [attr.aria-expanded]=\"moyensOuverts()\"\n [attr.aria-controls]=\"idDesMoyens\"\n (click)=\"moyensOuverts.set(!moyensOuverts())\"\n >\n {{ libelles().utiliserUnAutreMoyen }}\n </button>\n <!-- `role=\"list\"` : sans puces, Safari ne lit plus une liste comme une liste (D-1). -->\n <ul\n class=\"st-challenge__liste-des-moyens\"\n role=\"list\"\n [id]=\"idDesMoyens\"\n [hidden]=\"!moyensOuverts()\"\n >\n @for (autre of autres(); track autre) {\n <li>\n <button stButton variante=\"discret\" type=\"button\" (click)=\"choisir(autre)\">\n {{ libelles().moyenDeCeremonie(autre) }}\n </button>\n </li>\n }\n </ul>\n </div>\n}\n",
1905
+ 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:grid;gap:var(--st-espacement-5);min-inline-size:0}.st-challenge__titre,.st-challenge__description{margin:0}.st-challenge__titre+.st-challenge__description{margin-block-start:calc(var(--st-espacement-3) - var(--st-espacement-5))}.st-challenge__description{color:var(--st-couleur-texte-discret)}.st-challenge__operation:empty{display:none}.st-challenge__formulaire,.st-challenge__appareil{display:grid;gap:var(--st-espacement-4);justify-items:start;min-inline-size:0}.st-challenge__champ{justify-self:stretch}.st-challenge__renvoi{display:grid;gap:var(--st-espacement-1);justify-items:start}.st-challenge__attente{display:inline-flex;gap:var(--st-espacement-2);align-items:center;margin:0;font-weight:var(--st-graisse-semi)}.st-challenge__actions,.st-challenge__cle{justify-self:stretch}@media(min-width:30rem){.st-challenge__cle{justify-self:start}}.st-challenge__moyens{display:grid;gap:var(--st-espacement-1);justify-items:start}.st-challenge__liste-des-moyens{display:grid;gap:var(--st-espacement-1);padding:0;padding-inline-start:var(--st-espacement-4);margin:0;list-style:none;border-inline-start:var(--st-epaisseur-fine) solid var(--st-couleur-bordure)}.st-challenge__liste-des-moyens[hidden]{display:none}\n"]
1906
+ }]
1907
+ }],
1908
+ ctorParameters: () => [],
1909
+ propDecorators: {
1910
+ titre: [{
1911
+ type: i0.Input,
1912
+ args: [{
1913
+ isSignal: true,
1914
+ alias: "titre",
1915
+ required: false
1916
+ }]
1917
+ }],
1918
+ niveauDuTitre: [{
1919
+ type: i0.Input,
1920
+ args: [{
1921
+ isSignal: true,
1922
+ alias: "niveauDuTitre",
1923
+ required: false
1924
+ }]
1925
+ }],
1926
+ description: [{
1927
+ type: i0.Input,
1928
+ args: [{
1929
+ isSignal: true,
1930
+ alias: "description",
1931
+ required: false
1932
+ }]
1933
+ }],
1934
+ moyen: [{
1935
+ type: i0.Input,
1936
+ args: [{
1937
+ isSignal: true,
1938
+ alias: "moyen",
1939
+ required: false
1940
+ }]
1941
+ }, {
1942
+ type: i0.Output,
1943
+ args: ["moyenChange"]
1944
+ }],
1945
+ autresMoyens: [{
1946
+ type: i0.Input,
1947
+ args: [{
1948
+ isSignal: true,
1949
+ alias: "autresMoyens",
1950
+ required: false
1951
+ }]
1952
+ }],
1953
+ ceremonie: [{
1954
+ type: i0.Input,
1955
+ args: [{
1956
+ isSignal: true,
1957
+ alias: "ceremonie",
1958
+ required: false
1959
+ }]
1960
+ }],
1961
+ longueurDuCode: [{
1962
+ type: i0.Input,
1963
+ args: [{
1964
+ isSignal: true,
1965
+ alias: "longueurDuCode",
1966
+ required: false
1967
+ }]
1968
+ }],
1969
+ libelleDuCode: [{
1970
+ type: i0.Input,
1971
+ args: [{
1972
+ isSignal: true,
1973
+ alias: "libelleDuCode",
1974
+ required: false
1975
+ }]
1976
+ }],
1977
+ aideDuCode: [{
1978
+ type: i0.Input,
1979
+ args: [{
1980
+ isSignal: true,
1981
+ alias: "aideDuCode",
1982
+ required: false
1983
+ }]
1984
+ }],
1985
+ renvoyable: [{
1986
+ type: i0.Input,
1987
+ args: [{
1988
+ isSignal: true,
1989
+ alias: "renvoyable",
1990
+ required: false
1991
+ }]
1992
+ }],
1993
+ renvoiDans: [{
1994
+ type: i0.Input,
1995
+ args: [{
1996
+ isSignal: true,
1997
+ alias: "renvoiDans",
1998
+ required: false
1999
+ }]
2000
+ }],
2001
+ renvoiEnCours: [{
2002
+ type: i0.Input,
2003
+ args: [{
2004
+ isSignal: true,
2005
+ alias: "renvoiEnCours",
2006
+ required: false
2007
+ }]
2008
+ }],
2009
+ expireDans: [{
2010
+ type: i0.Input,
2011
+ args: [{
2012
+ isSignal: true,
2013
+ alias: "expireDans",
2014
+ required: false
2015
+ }]
2016
+ }],
2017
+ chargement: [{
2018
+ type: i0.Input,
2019
+ args: [{
2020
+ isSignal: true,
2021
+ alias: "chargement",
2022
+ required: false
2023
+ }]
2024
+ }],
2025
+ proposerAppareilDeConfiance: [{
2026
+ type: i0.Input,
2027
+ args: [{
2028
+ isSignal: true,
2029
+ alias: "proposerAppareilDeConfiance",
2030
+ required: false
2031
+ }]
2032
+ }],
2033
+ appareilDeConfiance: [{
2034
+ type: i0.Input,
2035
+ args: [{
2036
+ isSignal: true,
2037
+ alias: "appareilDeConfiance",
2038
+ required: false
2039
+ }]
2040
+ }, {
2041
+ type: i0.Output,
2042
+ args: ["appareilDeConfianceChange"]
2043
+ }],
2044
+ annulable: [{
2045
+ type: i0.Input,
2046
+ args: [{
2047
+ isSignal: true,
2048
+ alias: "annulable",
2049
+ required: false
2050
+ }]
2051
+ }],
2052
+ libelleDAnnulation: [{
2053
+ type: i0.Input,
2054
+ args: [{
2055
+ isSignal: true,
2056
+ alias: "libelleDAnnulation",
2057
+ required: false
2058
+ }]
2059
+ }],
2060
+ libelleDeLAction: [{
2061
+ type: i0.Input,
2062
+ args: [{
2063
+ isSignal: true,
2064
+ alias: "libelleDeLAction",
2065
+ required: false
2066
+ }]
2067
+ }],
2068
+ code: [{
2069
+ type: i0.Input,
2070
+ args: [{
2071
+ isSignal: true,
2072
+ alias: "code",
2073
+ required: false
2074
+ }]
2075
+ }, {
2076
+ type: i0.Output,
2077
+ args: ["codeChange"]
2078
+ }],
2079
+ focusALArrivee: [{
2080
+ type: i0.Input,
2081
+ args: [{
2082
+ isSignal: true,
2083
+ alias: "focusALArrivee",
2084
+ required: false
2085
+ }]
2086
+ }],
2087
+ envoi: [{
2088
+ type: i0.Output,
2089
+ args: ["envoi"]
2090
+ }],
2091
+ renvoi: [{
2092
+ type: i0.Output,
2093
+ args: ["renvoi"]
2094
+ }],
2095
+ annulation: [{
2096
+ type: i0.Output,
2097
+ args: ["annulation"]
2098
+ }],
2099
+ expiration: [{
2100
+ type: i0.Output,
2101
+ args: ["expiration"]
2102
+ }],
2103
+ champDuCode: [{
2104
+ type: i0.ViewChild,
2105
+ args: [i0.forwardRef(() => StOtpField), { isSignal: true }]
2106
+ }],
2107
+ champDeSecours: [{
2108
+ type: i0.ViewChild,
2109
+ args: [i0.forwardRef(() => StInput), { isSignal: true }]
2110
+ }],
2111
+ operation: [{
2112
+ type: i0.ViewChild,
2113
+ args: ["operation", { isSignal: true }]
2114
+ }],
2115
+ decompteDuRenvoi: [{
2116
+ type: i0.ViewChild,
2117
+ args: ["decompteDuRenvoi", { isSignal: true }]
2118
+ }]
2119
+ }
2120
+ });
2121
+ const IMPRESSION_EXCLUSIVE = "data-st-impression-exclusive";
2122
+ const DELAI_AVANT_REVOCATION = 4e4;
2123
+ var StRecoveryCodes = class StRecoveryCodes {
2124
+ document = inject(DOCUMENT);
2125
+ destruction = inject(DestroyRef);
2126
+ libelles = inject(ST_LIBELLES);
2127
+ annonce = new AnnonceLocale(this.destruction);
2128
+ codes = input([], ...ngDevMode ? [{ debugName: "codes" }] : /* istanbul ignore next */ []);
2129
+ restants = input(null, ...ngDevMode ? [{ debugName: "restants" }] : /* istanbul ignore next */ []);
2130
+ regenerationEnCours = input(false, {
2131
+ ...ngDevMode ? { debugName: "regenerationEnCours" } : /* istanbul ignore next */ {},
2132
+ transform: booleanAttribute
2133
+ });
2134
+ enTeteDuFichier = input(null, ...ngDevMode ? [{ debugName: "enTeteDuFichier" }] : /* istanbul ignore next */ []);
2135
+ nomDuFichier = input("codes-de-secours.txt", ...ngDevMode ? [{ debugName: "nomDuFichier" }] : /* istanbul ignore next */ []);
2136
+ libelleDeLAction = input(null, ...ngDevMode ? [{ debugName: "libelleDeLAction" }] : /* istanbul ignore next */ []);
2137
+ confirme = model(false, ...ngDevMode ? [{ debugName: "confirme" }] : /* istanbul ignore next */ []);
2138
+ confirmation = output();
2139
+ copie = output();
2140
+ telechargement = output();
2141
+ impression = output();
2142
+ regeneration = output();
2143
+ tousLesCodes = computed(() => this.codes().join("\n"), ...ngDevMode ? [{ debugName: "tousLesCodes" }] : /* istanbul ignore next */ []);
2144
+ raisonDeLAttente = computed(() => this.libelles().cocherPourContinuer(this.libelles().codesEnregistres), ...ngDevMode ? [{ debugName: "raisonDeLAttente" }] : /* istanbul ignore next */ []);
2145
+ tonDuCompteur = computed(() => {
2146
+ const restants = this.restants() ?? 0;
2147
+ return restants === 0 ? "danger" : restants <= 2 ? "avertissement" : "neutre";
2148
+ }, ...ngDevMode ? [{ debugName: "tonDuCompteur" }] : /* istanbul ignore next */ []);
2149
+ constructor() {
2150
+ this.destruction.onDestroy(() => {
2151
+ this.document.documentElement.removeAttribute(IMPRESSION_EXCLUSIVE);
2152
+ });
2153
+ }
2154
+ copier() {
2155
+ this.copie.emit();
2156
+ }
2157
+ regenerer() {
2158
+ if (this.regenerationEnCours()) return;
2159
+ this.regeneration.emit();
2160
+ }
2161
+ telecharger() {
2162
+ const enTete = this.enTeteDuFichier();
2163
+ const texte = `${enTete === null ? "" : `${enTete}\n\n`}${this.tousLesCodes()}\n`;
2164
+ const adresse = URL.createObjectURL(new Blob([texte], { type: "text/plain;charset=utf-8" }));
2165
+ const lien = this.document.createElement("a");
2166
+ lien.href = adresse;
2167
+ lien.download = this.nomDuFichier();
2168
+ lien.click();
2169
+ setTimeout(() => {
2170
+ URL.revokeObjectURL(adresse);
2171
+ }, DELAI_AVANT_REVOCATION);
2172
+ this.annonce.annoncer(this.libelles().fichierTelecharge(sansCommandesDeDirection(this.nomDuFichier())));
2173
+ this.telechargement.emit();
2174
+ }
2175
+ imprimer() {
2176
+ const racine = this.document.documentElement;
2177
+ const vue = this.document.defaultView;
2178
+ racine.setAttribute(IMPRESSION_EXCLUSIVE, "");
2179
+ vue?.addEventListener("afterprint", () => {
2180
+ racine.removeAttribute(IMPRESSION_EXCLUSIVE);
2181
+ }, { once: true });
2182
+ this.impression.emit();
2183
+ vue?.print();
2184
+ }
2185
+ confirmer() {
2186
+ if (this.confirme()) this.confirmation.emit();
2187
+ }
2188
+ static ɵfac = i0.ɵɵngDeclareFactory({
2189
+ minVersion: "12.0.0",
2190
+ version: "22.2.0",
2191
+ ngImport: i0,
2192
+ type: StRecoveryCodes,
2193
+ deps: [],
2194
+ target: i0.ɵɵFactoryTarget.Component
2195
+ });
2196
+ static ɵcmp = i0.ɵɵngDeclareComponent({
2197
+ minVersion: "17.0.0",
2198
+ version: "22.2.0",
2199
+ type: StRecoveryCodes,
2200
+ isStandalone: true,
2201
+ selector: "st-recovery-codes",
2202
+ inputs: {
2203
+ codes: {
2204
+ classPropertyName: "codes",
2205
+ publicName: "codes",
2206
+ isSignal: true,
2207
+ isRequired: false,
2208
+ transformFunction: null
2209
+ },
2210
+ restants: {
2211
+ classPropertyName: "restants",
2212
+ publicName: "restants",
2213
+ isSignal: true,
2214
+ isRequired: false,
2215
+ transformFunction: null
2216
+ },
2217
+ regenerationEnCours: {
2218
+ classPropertyName: "regenerationEnCours",
2219
+ publicName: "regenerationEnCours",
2220
+ isSignal: true,
2221
+ isRequired: false,
2222
+ transformFunction: null
2223
+ },
2224
+ enTeteDuFichier: {
2225
+ classPropertyName: "enTeteDuFichier",
2226
+ publicName: "enTeteDuFichier",
2227
+ isSignal: true,
2228
+ isRequired: false,
2229
+ transformFunction: null
2230
+ },
2231
+ nomDuFichier: {
2232
+ classPropertyName: "nomDuFichier",
2233
+ publicName: "nomDuFichier",
2234
+ isSignal: true,
2235
+ isRequired: false,
2236
+ transformFunction: null
2237
+ },
2238
+ libelleDeLAction: {
2239
+ classPropertyName: "libelleDeLAction",
2240
+ publicName: "libelleDeLAction",
2241
+ isSignal: true,
2242
+ isRequired: false,
2243
+ transformFunction: null
2244
+ },
2245
+ confirme: {
2246
+ classPropertyName: "confirme",
2247
+ publicName: "confirme",
2248
+ isSignal: true,
2249
+ isRequired: false,
2250
+ transformFunction: null
2251
+ }
2252
+ },
2253
+ outputs: {
2254
+ confirme: "confirmeChange",
2255
+ confirmation: "confirmation",
2256
+ copie: "copie",
2257
+ telechargement: "telechargement",
2258
+ impression: "impression",
2259
+ regeneration: "regeneration"
2260
+ },
2261
+ host: { classAttribute: "st-recovery-codes" },
2262
+ ngImport: i0,
2263
+ template: "@if (restants() !== null) {\n <!-- Le compteur : ce qui reste, et le moyen d'en obtenir d'autres. -->\n <div class=\"st-recovery-codes__compteur\" [attr.data-ton]=\"tonDuCompteur()\">\n <p class=\"st-recovery-codes__restants\">{{ libelles().codesRestants(restants() ?? 0) }}</p>\n <!-- La regeneration attend et avale les clics : deux clics feraient deux jeux (D-8). -->\n <button stButton type=\"button\" [chargement]=\"regenerationEnCours()\" (click)=\"regenerer()\">\n {{ libelles().genererDeNouveauxCodes }}\n </button>\n </div>\n} @else {\n <st-banner ton=\"avertissement\" [message]=\"libelles().codesAUsageUnique\" />\n\n <!-- La seule region imprimee quand on demande l'impression (feuille des jetons). -->\n <ol class=\"st-recovery-codes__liste\" data-st-imprimable>\n @for (code of codes(); track $index; let rang = $index) {\n <li class=\"st-recovery-codes__code\">\n <!-- Le rang dans la phrase de la langue, et non colle a un libelle (D-26). -->\n <st-code\n [valeur]=\"code\"\n [etiquette]=\"libelles().codeDeSecoursNumero(rang + 1)\"\n (copie)=\"copier()\"\n />\n </li>\n }\n </ol>\n\n <div class=\"st-recovery-codes__outils\">\n <st-copy-button\n variante=\"secondaire\"\n [valeur]=\"tousLesCodes()\"\n [libelle]=\"libelles().copierTousLesCodes\"\n (copie)=\"copier()\"\n />\n <button stButton type=\"button\" iconeAvant=\"telecharger\" (click)=\"telecharger()\">\n {{ libelles().telecharger }}\n </button>\n <button stButton type=\"button\" iconeAvant=\"imprimer\" (click)=\"imprimer()\">\n {{ libelles().imprimer }}\n </button>\n </div>\n\n <st-checkbox [libelle]=\"libelles().codesEnregistres\" [(checked)]=\"confirme\" />\n\n <st-form-actions class=\"st-recovery-codes__actions\" disposition=\"pied\">\n <button\n stButton\n variante=\"primaire\"\n type=\"button\"\n [indisponible]=\"!confirme()\"\n [raisonIndisponible]=\"raisonDeLAttente()\"\n (click)=\"confirmer()\"\n >\n {{ libelleDeLAction() ?? libelles().continuer }}\n </button>\n </st-form-actions>\n}\n<!-- Nee vide, hors des deux branches : observee avant que le telechargement ne s'y dise (D-8). -->\n<span class=\"st-vh\" aria-live=\"polite\">{{ annonce.texte() }}</span>\n",
2264
+ 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:grid;gap:var(--st-espacement-5);min-inline-size:0}.st-recovery-codes__liste{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,13rem),1fr));gap:var(--st-espacement-2) var(--st-espacement-6);padding:0;padding-inline-start:var(--st-espacement-6);margin:0;font-variant-numeric:var(--st-chiffres-alignes);list-style:decimal}.st-recovery-codes__code{display:list-item;min-inline-size:0}.st-recovery-codes__code::marker{color:var(--st-couleur-texte-discret)}.st-recovery-codes__outils{display:flex;flex-wrap:wrap;gap:var(--st-espacement-2)}.st-recovery-codes__actions{justify-self:stretch}.st-recovery-codes__compteur{display:flex;flex-wrap:wrap;gap:var(--st-espacement-3) var(--st-espacement-4);align-items:center;justify-content:space-between}.st-recovery-codes__restants{margin:0;font-weight:var(--st-graisse-semi)}.st-recovery-codes__compteur[data-ton=danger] .st-recovery-codes__restants{color:var(--st-couleur-danger)}@media print{.st-recovery-codes__liste{grid-template-columns:repeat(2,minmax(0,1fr))}}\n"],
2265
+ dependencies: [
2266
+ {
2267
+ kind: "component",
2268
+ type: StBanner,
2269
+ selector: "st-banner",
2270
+ inputs: [
2271
+ "ton",
2272
+ "message",
2273
+ "titre",
2274
+ "forme",
2275
+ "identifiant",
2276
+ "fermable",
2277
+ "libelleFermeture"
2278
+ ],
2279
+ outputs: ["ferme"]
2280
+ },
2281
+ {
2282
+ kind: "component",
2283
+ type: StButton,
2284
+ selector: "button[stButton]",
2285
+ inputs: [
2286
+ "variante",
2287
+ "taille",
2288
+ "pleineLargeur",
2289
+ "iconeAvant",
2290
+ "iconeApres",
2291
+ "chargement",
2292
+ "indisponible",
2293
+ "raisonIndisponible"
2294
+ ]
2295
+ },
2296
+ {
2297
+ kind: "component",
2298
+ type: StCheckbox,
2299
+ selector: "st-checkbox",
2300
+ inputs: ["indetermine", "aideDEtat"],
2301
+ outputs: ["indetermineChange"]
2302
+ },
2303
+ {
2304
+ kind: "component",
2305
+ type: StCode,
2306
+ selector: "st-code",
2307
+ inputs: [
2308
+ "valeur",
2309
+ "copiable",
2310
+ "etiquette",
2311
+ "libelleCopier",
2312
+ "messageDeConfirmation"
2313
+ ],
2314
+ outputs: ["copie"]
2315
+ },
2316
+ {
2317
+ kind: "component",
2318
+ type: StCopyButton,
2319
+ selector: "st-copy-button",
2320
+ inputs: [
2321
+ "valeur",
2322
+ "libelle",
2323
+ "iconeSeule",
2324
+ "messageDeConfirmation",
2325
+ "variante",
2326
+ "taille",
2327
+ "tailleDuGlyphe"
2328
+ ],
2329
+ outputs: ["copie"]
2330
+ },
2331
+ {
2332
+ kind: "component",
2333
+ type: StFormActions,
2334
+ selector: "st-form-actions",
2335
+ inputs: ["disposition"]
2336
+ }
2337
+ ],
2338
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
2339
+ });
2340
+ };
2341
+ i0.ɵɵngDeclareClassMetadata({
2342
+ minVersion: "12.0.0",
2343
+ version: "22.2.0",
2344
+ ngImport: i0,
2345
+ type: StRecoveryCodes,
2346
+ decorators: [{
2347
+ type: Component,
2348
+ args: [{
2349
+ selector: "st-recovery-codes",
2350
+ changeDetection: ChangeDetectionStrategy.OnPush,
2351
+ imports: [
2352
+ StBanner,
2353
+ StButton,
2354
+ StCheckbox,
2355
+ StCode,
2356
+ StCopyButton,
2357
+ StFormActions
2358
+ ],
2359
+ host: { class: "st-recovery-codes" },
2360
+ template: "@if (restants() !== null) {\n <!-- Le compteur : ce qui reste, et le moyen d'en obtenir d'autres. -->\n <div class=\"st-recovery-codes__compteur\" [attr.data-ton]=\"tonDuCompteur()\">\n <p class=\"st-recovery-codes__restants\">{{ libelles().codesRestants(restants() ?? 0) }}</p>\n <!-- La regeneration attend et avale les clics : deux clics feraient deux jeux (D-8). -->\n <button stButton type=\"button\" [chargement]=\"regenerationEnCours()\" (click)=\"regenerer()\">\n {{ libelles().genererDeNouveauxCodes }}\n </button>\n </div>\n} @else {\n <st-banner ton=\"avertissement\" [message]=\"libelles().codesAUsageUnique\" />\n\n <!-- La seule region imprimee quand on demande l'impression (feuille des jetons). -->\n <ol class=\"st-recovery-codes__liste\" data-st-imprimable>\n @for (code of codes(); track $index; let rang = $index) {\n <li class=\"st-recovery-codes__code\">\n <!-- Le rang dans la phrase de la langue, et non colle a un libelle (D-26). -->\n <st-code\n [valeur]=\"code\"\n [etiquette]=\"libelles().codeDeSecoursNumero(rang + 1)\"\n (copie)=\"copier()\"\n />\n </li>\n }\n </ol>\n\n <div class=\"st-recovery-codes__outils\">\n <st-copy-button\n variante=\"secondaire\"\n [valeur]=\"tousLesCodes()\"\n [libelle]=\"libelles().copierTousLesCodes\"\n (copie)=\"copier()\"\n />\n <button stButton type=\"button\" iconeAvant=\"telecharger\" (click)=\"telecharger()\">\n {{ libelles().telecharger }}\n </button>\n <button stButton type=\"button\" iconeAvant=\"imprimer\" (click)=\"imprimer()\">\n {{ libelles().imprimer }}\n </button>\n </div>\n\n <st-checkbox [libelle]=\"libelles().codesEnregistres\" [(checked)]=\"confirme\" />\n\n <st-form-actions class=\"st-recovery-codes__actions\" disposition=\"pied\">\n <button\n stButton\n variante=\"primaire\"\n type=\"button\"\n [indisponible]=\"!confirme()\"\n [raisonIndisponible]=\"raisonDeLAttente()\"\n (click)=\"confirmer()\"\n >\n {{ libelleDeLAction() ?? libelles().continuer }}\n </button>\n </st-form-actions>\n}\n<!-- Nee vide, hors des deux branches : observee avant que le telechargement ne s'y dise (D-8). -->\n<span class=\"st-vh\" aria-live=\"polite\">{{ annonce.texte() }}</span>\n",
2361
+ 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:grid;gap:var(--st-espacement-5);min-inline-size:0}.st-recovery-codes__liste{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,13rem),1fr));gap:var(--st-espacement-2) var(--st-espacement-6);padding:0;padding-inline-start:var(--st-espacement-6);margin:0;font-variant-numeric:var(--st-chiffres-alignes);list-style:decimal}.st-recovery-codes__code{display:list-item;min-inline-size:0}.st-recovery-codes__code::marker{color:var(--st-couleur-texte-discret)}.st-recovery-codes__outils{display:flex;flex-wrap:wrap;gap:var(--st-espacement-2)}.st-recovery-codes__actions{justify-self:stretch}.st-recovery-codes__compteur{display:flex;flex-wrap:wrap;gap:var(--st-espacement-3) var(--st-espacement-4);align-items:center;justify-content:space-between}.st-recovery-codes__restants{margin:0;font-weight:var(--st-graisse-semi)}.st-recovery-codes__compteur[data-ton=danger] .st-recovery-codes__restants{color:var(--st-couleur-danger)}@media print{.st-recovery-codes__liste{grid-template-columns:repeat(2,minmax(0,1fr))}}\n"]
2362
+ }]
2363
+ }],
2364
+ ctorParameters: () => [],
2365
+ propDecorators: {
2366
+ codes: [{
2367
+ type: i0.Input,
2368
+ args: [{
2369
+ isSignal: true,
2370
+ alias: "codes",
2371
+ required: false
2372
+ }]
2373
+ }],
2374
+ restants: [{
2375
+ type: i0.Input,
2376
+ args: [{
2377
+ isSignal: true,
2378
+ alias: "restants",
2379
+ required: false
2380
+ }]
2381
+ }],
2382
+ regenerationEnCours: [{
2383
+ type: i0.Input,
2384
+ args: [{
2385
+ isSignal: true,
2386
+ alias: "regenerationEnCours",
2387
+ required: false
2388
+ }]
2389
+ }],
2390
+ enTeteDuFichier: [{
2391
+ type: i0.Input,
2392
+ args: [{
2393
+ isSignal: true,
2394
+ alias: "enTeteDuFichier",
2395
+ required: false
2396
+ }]
2397
+ }],
2398
+ nomDuFichier: [{
2399
+ type: i0.Input,
2400
+ args: [{
2401
+ isSignal: true,
2402
+ alias: "nomDuFichier",
2403
+ required: false
2404
+ }]
2405
+ }],
2406
+ libelleDeLAction: [{
2407
+ type: i0.Input,
2408
+ args: [{
2409
+ isSignal: true,
2410
+ alias: "libelleDeLAction",
2411
+ required: false
2412
+ }]
2413
+ }],
2414
+ confirme: [{
2415
+ type: i0.Input,
2416
+ args: [{
2417
+ isSignal: true,
2418
+ alias: "confirme",
2419
+ required: false
2420
+ }]
2421
+ }, {
2422
+ type: i0.Output,
2423
+ args: ["confirmeChange"]
2424
+ }],
2425
+ confirmation: [{
2426
+ type: i0.Output,
2427
+ args: ["confirmation"]
2428
+ }],
2429
+ copie: [{
2430
+ type: i0.Output,
2431
+ args: ["copie"]
2432
+ }],
2433
+ telechargement: [{
2434
+ type: i0.Output,
2435
+ args: ["telechargement"]
2436
+ }],
2437
+ impression: [{
2438
+ type: i0.Output,
2439
+ args: ["impression"]
2440
+ }],
2441
+ regeneration: [{
2442
+ type: i0.Output,
2443
+ args: ["regeneration"]
2444
+ }]
2445
+ }
2446
+ });
2447
+ export { StChallenge, StOutcome, StRecoveryCodes, StRefusal, StTaskList, StWizard, StWizardStep };
2448
+
2449
+ //# sourceMappingURL=starterlib-ui-parcours.mjs.map