@dsivd/prestations-ng 19.2.0-beta.7 → 19.2.0-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -8,6 +8,28 @@
8
8
 
9
9
  ## [19.2.0] - should be aligned with prestations-be 19.2.x
10
10
 
11
+ ### Added
12
+
13
+ - [foehn-bo-multi-upload.component.ts](projects/prestations-ng/src/foehn-upload/foehn-bo-multi-upload/foehn-bo-multi-upload.component.ts)
14
+ - New `localUpload` input. When set to `true`, selected files are kept purely local
15
+ (as `DocumentReferenceWithFile`, no `uploadUrl()` call) so they can be cancelled before
16
+ being sent. Files show up immediately in the list with a "pending" indicator (dictionary
17
+ key `foehn-uploader.pending-label`, French default provided) since they're not uploaded
18
+ yet. It is your responsibility to upload/delete them at save time,
19
+ e.g. via the new
20
+ [document-changes.helper.ts](projects/prestations-ng/src/foehn-upload/document-changes.helper.ts)
21
+ (`splitDocumentChanges`) which computes `filesToAdd`/`documentsToDelete` from the model.
22
+ - The default (direct upload) mode is unchanged.
23
+ - New `maxFileSizeInMo` input: a client-side, per-file size limit that doesn't depend on
24
+ the `fileMaxSizeInBytesByFormKey` server configuration (useful for consumers that don't
25
+ expose that config yet). Uses the new dictionary key
26
+ `foehn-uploader.file-too-big-error-message` (params: `filename`, `maxSizeInMo`), which
27
+ ships with a French default in
28
+ [default-dictionary.ts](projects/prestations-ng/src/sdk-dictionary/default-dictionary.ts)
29
+ like the rest of `foehn-uploader.*` — override it project-side only if you need to.
30
+ - New `chooseButtonStyleModifier` input, appended to the choose button's CSS classes
31
+ (e.g. `btn-sm`), mirroring the same input already available on other uploaders.
32
+
11
33
  ### Changed
12
34
 
13
35
  Library now runs as strict mode, which may cause some errors to appear in your project after updating.
package/CONTRIBUTING.md CHANGED
@@ -94,9 +94,10 @@ This project uses a set of scripts to lint and format the code, along with pre-c
94
94
 
95
95
  Important scripts are :
96
96
 
97
- - `npm run lint` : run ESLint and Prettier on all files
97
+ - `npm run lint` : run ESLint and Prettier on all files, and check the types of the TypeScript files compiled by no
98
+ build (`lint:types`: `cypress/`, which Cypress only transpiles, and the configuration files of `tsconfig.config.json`)
98
99
  - `npm run format`: run ESLint and Prettier on all files and fix errors automatically
99
- - `npm run validate`: clean and run all tests
100
+ - `npm run validate`: clean, lint and run all tests
100
101
 
101
102
  **Husky** is used as a pre-commit hook to automatically output linting and formatting errors for staged files before committing.
102
103
  In the end, this utilitary calls `npm run lint-staged` which you can also call yourself of course. To have this pre-commit hook,
@@ -1340,6 +1340,8 @@ const DEFAULT_DICTIONARY = {
1340
1340
  'foehn-uploader.delete-error-message': 'Une erreur est survenue lors de la suppression de votre document',
1341
1341
  'foehn-uploader.delete-readonly-error-message': 'Un document en lecture seule ne peut pas être supprimé',
1342
1342
  'foehn-uploader.unknown-error-message': 'Impossible de transmettre le fichier',
1343
+ 'foehn-uploader.pending-label': "en attente d'envoi",
1344
+ 'foehn-uploader.file-too-big-error-message': 'Votre pièce jointe {filename} a une taille supérieure ou égale à la limite autorisée : {maxSizeInMo} Mo',
1343
1345
  'foehn-picture-upload.choose-button-label': 'Choisissez une photo',
1344
1346
  'foehn-picture-upload.loading-label': 'Chargement...',
1345
1347
  'foehn-picture-upload.invalid-file-type': 'Le type de votre pièce jointe {filename} ne figure pas parmi ceux qui sont autorisés : "{acceptFormats}"',
@@ -13598,6 +13600,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImpo
13598
13600
  }]
13599
13601
  }], ctorParameters: () => [], propDecorators: { showUploadButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showUploadButton", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], hideGlobalInfos: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideGlobalInfos", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: false }] }], overrideAcceptedExtensions: [{ type: i0.Input, args: [{ isSignal: true, alias: "overrideAcceptedExtensions", required: false }] }], overrideMaxFileNameLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "overrideMaxFileNameLength", required: false }] }], overrideIllegalCharacters: [{ type: i0.Input, args: [{ isSignal: true, alias: "overrideIllegalCharacters", required: false }] }], showDeleteConfirmationMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "showDeleteConfirmationMessage", required: false }] }], maxSimultaneousSelectedFiles: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxSimultaneousSelectedFiles", required: false }] }], maxFilesCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxFilesCount", required: false }] }], maxFilesSizeInMo: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxFilesSizeInMo", required: false }] }], dragAndDrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragAndDrop", required: false }] }], shouldDisplayFileSavedConfirmation: [{ type: i0.Input, args: [{ isSignal: true, alias: "shouldDisplayFileSavedConfirmation", required: false }] }], chooseButtonLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "chooseButtonLabel", required: false }] }], chooseButtonLabelMultiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "chooseButtonLabelMultiple", required: false }] }], dropZoneLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "dropZoneLabel", required: false }] }], dropZoneLabelMultiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "dropZoneLabelMultiple", required: false }] }], deleteConfirmationMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "deleteConfirmationMessage", required: false }] }] } });
13600
13602
 
13603
+ /**
13604
+ * Computes what needs to be uploaded/deleted server-side by comparing a document list
13605
+ * currently held in a "local upload" model (mixing already persisted `DocumentReference`
13606
+ * and pending `DocumentReferenceWithFile`) against the list as it was originally loaded.
13607
+ */
13608
+ function splitDocumentChanges(current, original) {
13609
+ const filesToAdd = (current ?? [])
13610
+ .filter((doc) => doc instanceof DocumentReferenceWithFile)
13611
+ .map((doc) => doc.file)
13612
+ .filter((file) => !!file);
13613
+ const currentReferences = new Set((current ?? [])
13614
+ .map((doc) => doc.reference)
13615
+ .filter((reference) => !!reference));
13616
+ const documentsToDelete = (original ?? []).filter((doc) => !!doc.reference && !currentReferences.has(doc.reference));
13617
+ return { filesToAdd, documentsToDelete };
13618
+ }
13619
+
13601
13620
  class UploadProgressService extends AbstractUploadProgressService {
13602
13621
  _analysisProgressSubject = new BehaviorSubject(false);
13603
13622
  _uploadProgressSubject = new BehaviorSubject(null);
@@ -14282,14 +14301,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImpo
14282
14301
  }]
14283
14302
  }], ctorParameters: () => [] });
14284
14303
 
14304
+ const BYTES_IN_MO = 1024 * 1024;
14285
14305
  class FoehnBoMultiUploadComponent extends AbstractFoehnUploaderComponent {
14286
14306
  uploadUrl = input(...(ngDevMode ? [undefined, { debugName: "uploadUrl" }] : /* istanbul ignore next */ []));
14287
14307
  deleteUrl = input(...(ngDevMode ? [undefined, { debugName: "deleteUrl" }] : /* istanbul ignore next */ []));
14288
14308
  downloadUrl = input(...(ngDevMode ? [undefined, { debugName: "downloadUrl" }] : /* istanbul ignore next */ []));
14289
14309
  optionalLabelKey = input('foehn-input.optional', ...(ngDevMode ? [{ debugName: "optionalLabelKey" }] : /* istanbul ignore next */ []));
14310
+ localUpload = input(false, ...(ngDevMode ? [{ debugName: "localUpload" }] : /* istanbul ignore next */ []));
14311
+ maxFileSizeInMo = input(...(ngDevMode ? [undefined, { debugName: "maxFileSizeInMo" }] : /* istanbul ignore next */ []));
14312
+ chooseButtonStyleModifier = input(...(ngDevMode ? [undefined, { debugName: "chooseButtonStyleModifier" }] : /* istanbul ignore next */ []));
14290
14313
  documentDeleted = output();
14291
14314
  boMultiUploadService = inject(BoMultiUploadService);
14292
14315
  pageUploadLimitService = inject(PageUploadLimitService);
14316
+ blobUrls = new Map();
14317
+ localSequence = 0;
14293
14318
  get addedFiles() {
14294
14319
  return this.model()?.filter((e) => !e.readonly) ?? [];
14295
14320
  }
@@ -14337,6 +14362,23 @@ class FoehnBoMultiUploadComponent extends AbstractFoehnUploaderComponent {
14337
14362
  }
14338
14363
  ngOnDestroy() {
14339
14364
  this.pageUploadLimitService.unregisterUploader(this);
14365
+ this.blobUrls.forEach((url) => URL.revokeObjectURL(url));
14366
+ this.blobUrls.clear();
14367
+ }
14368
+ isPending(document) {
14369
+ return document instanceof DocumentReferenceWithFile;
14370
+ }
14371
+ getDocumentDownloadUrl(document) {
14372
+ if (document instanceof DocumentReferenceWithFile) {
14373
+ const file = document.file;
14374
+ if (file) {
14375
+ if (!this.blobUrls.has(file)) {
14376
+ this.blobUrls.set(file, URL.createObjectURL(file));
14377
+ }
14378
+ return this.blobUrls.get(file) ?? '';
14379
+ }
14380
+ }
14381
+ return this.boMultiUploadService.getDownloadUrl(this.downloadUrl(), document);
14340
14382
  }
14341
14383
  getTotalFilesSize() {
14342
14384
  return (this.model()
@@ -14377,6 +14419,13 @@ class FoehnBoMultiUploadComponent extends AbstractFoehnUploaderComponent {
14377
14419
  }
14378
14420
  }
14379
14421
  }
14422
+ removeFileOnConfirmation(document) {
14423
+ if (this.localUpload()) {
14424
+ this.removeDocumentLocally(document);
14425
+ return;
14426
+ }
14427
+ super.removeFileOnConfirmation(document);
14428
+ }
14380
14429
  populateFileItemList(fileList) {
14381
14430
  let files = Array.from(fileList);
14382
14431
  if (!files.length ||
@@ -14393,13 +14442,79 @@ class FoehnBoMultiUploadComponent extends AbstractFoehnUploaderComponent {
14393
14442
  if (filesErrors.length) {
14394
14443
  return;
14395
14444
  }
14445
+ const tooBigErrors = this.tooBigErrors(files);
14446
+ if (tooBigErrors.length) {
14447
+ this.refreshErrors([tooBigErrors, true]);
14448
+ return;
14449
+ }
14396
14450
  // Initialize model if empty
14397
14451
  if (!this.model()?.length) {
14398
14452
  this.model.set([]);
14399
14453
  }
14454
+ if (this.localUpload()) {
14455
+ // The files stay purely local: no HTTP call is made, the consuming project is
14456
+ // responsible for uploading them at save time (see splitDocumentChanges()).
14457
+ this.addFilesLocally(files);
14458
+ return;
14459
+ }
14400
14460
  // we send files to server
14401
14461
  this.uploadFilesSubject.next(files);
14402
14462
  }
14463
+ tooBigErrors(files) {
14464
+ const maxFileSizeInMo = this.maxFileSizeInMo();
14465
+ if (!maxFileSizeInMo) {
14466
+ return [];
14467
+ }
14468
+ return files
14469
+ .filter((file) => file.size > maxFileSizeInMo * BYTES_IN_MO)
14470
+ .map((file, index) => ({
14471
+ name: this.name(),
14472
+ code: `FILE_TOO_BIG_${index}`,
14473
+ message: this.dictionaryService.getKeySync('foehn-uploader.file-too-big-error-message', {
14474
+ filename: getSafeFileNameForErrorMessage(file.name),
14475
+ maxSizeInMo: `${maxFileSizeInMo}`,
14476
+ }),
14477
+ }));
14478
+ }
14479
+ addFilesLocally(files) {
14480
+ const pendingDocuments = files.map((file) => this.toPendingDocument(file));
14481
+ this.model.update((current) => [
14482
+ ...(current ?? []),
14483
+ ...pendingDocuments,
14484
+ ]);
14485
+ this.markAsDirty();
14486
+ this.triggerUserInput(this.model());
14487
+ }
14488
+ toPendingDocument(file) {
14489
+ const document = new DocumentReferenceWithFile();
14490
+ document.reference = '';
14491
+ document.key = `${this.key() ?? this.name()}_local_${this.localSequence++}`;
14492
+ document.label = this.label();
14493
+ document.filename = file.name;
14494
+ document.mimeType = file.type;
14495
+ document.fileSize = file.size;
14496
+ document.file = file;
14497
+ return document;
14498
+ }
14499
+ removeDocumentLocally(document) {
14500
+ const current = this.model() ?? [];
14501
+ if (!current.includes(document)) {
14502
+ return;
14503
+ }
14504
+ this.model.set(current.filter((candidate) => candidate !== document));
14505
+ if (document instanceof DocumentReferenceWithFile && document.file) {
14506
+ this.revokeBlobUrl(document.file);
14507
+ }
14508
+ this.markAsDirty();
14509
+ this.triggerUserInput(this.model());
14510
+ }
14511
+ revokeBlobUrl(file) {
14512
+ const blobUrl = this.blobUrls.get(file);
14513
+ if (blobUrl) {
14514
+ URL.revokeObjectURL(blobUrl);
14515
+ this.blobUrls.delete(file);
14516
+ }
14517
+ }
14403
14518
  displayResultFromServer(documents, errors) {
14404
14519
  this.displayErrorsFromServer(errors);
14405
14520
  this.model.set([...(this.model() ?? []), ...(documents || [])]);
@@ -14437,7 +14552,7 @@ class FoehnBoMultiUploadComponent extends AbstractFoehnUploaderComponent {
14437
14552
  return files.slice(0, 1);
14438
14553
  }
14439
14554
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: FoehnBoMultiUploadComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
14440
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.23", type: FoehnBoMultiUploadComponent, isStandalone: true, selector: "foehn-bo-multi-upload", inputs: { uploadUrl: { classPropertyName: "uploadUrl", publicName: "uploadUrl", isSignal: true, isRequired: false, transformFunction: null }, deleteUrl: { classPropertyName: "deleteUrl", publicName: "deleteUrl", isSignal: true, isRequired: false, transformFunction: null }, downloadUrl: { classPropertyName: "downloadUrl", publicName: "downloadUrl", isSignal: true, isRequired: false, transformFunction: null }, optionalLabelKey: { classPropertyName: "optionalLabelKey", publicName: "optionalLabelKey", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { documentDeleted: "documentDeleted" }, providers: [
14555
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.23", type: FoehnBoMultiUploadComponent, isStandalone: true, selector: "foehn-bo-multi-upload", inputs: { uploadUrl: { classPropertyName: "uploadUrl", publicName: "uploadUrl", isSignal: true, isRequired: false, transformFunction: null }, deleteUrl: { classPropertyName: "deleteUrl", publicName: "deleteUrl", isSignal: true, isRequired: false, transformFunction: null }, downloadUrl: { classPropertyName: "downloadUrl", publicName: "downloadUrl", isSignal: true, isRequired: false, transformFunction: null }, optionalLabelKey: { classPropertyName: "optionalLabelKey", publicName: "optionalLabelKey", isSignal: true, isRequired: false, transformFunction: null }, localUpload: { classPropertyName: "localUpload", publicName: "localUpload", isSignal: true, isRequired: false, transformFunction: null }, maxFileSizeInMo: { classPropertyName: "maxFileSizeInMo", publicName: "maxFileSizeInMo", isSignal: true, isRequired: false, transformFunction: null }, chooseButtonStyleModifier: { classPropertyName: "chooseButtonStyleModifier", publicName: "chooseButtonStyleModifier", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { documentDeleted: "documentDeleted" }, providers: [
14441
14556
  {
14442
14557
  provide: FoehnInputComponent,
14443
14558
  useExisting: forwardRef(() => FoehnBoMultiUploadComponent),
@@ -14448,7 +14563,7 @@ class FoehnBoMultiUploadComponent extends AbstractFoehnUploaderComponent {
14448
14563
  provide: AbstractUploadProgressService,
14449
14564
  useExisting: UploadProgressService,
14450
14565
  },
14451
- ], usesInheritance: true, ngImport: i0, template: "<div\n class=\"form-group container-box\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [class.drop-zone-highlight]=\"showDropZone\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n (drop)=\"onDrop($event)\"\n (dragenter)=\"onDragenter($event)\"\n (dragleave)=\"onDragleave($event)\"\n (dragover)=\"onDragover($event)\"\n #fallBackTrigger\n>\n @if (!!label()) {\n <label\n [class]=\"\n 'form-label ' +\n (isLabelSrOnly()\n ? 'visually-hidden'\n : (labelStyleModifier() ?? ''))\n \"\n [attr.for]=\"buildChildId()\"\n >\n <span [innerHTML]=\"label()\"></span>\n @if (!required() && !hideNotRequiredExtraLabel()) {\n <span aria-hidden=\"true\">\n {{ optionalLabelKey() | fromDictionary }}\n </span>\n }\n </label>\n }\n\n <foehn-validation-alerts\n [component]=\"this\"\n [shouldErrorsBeLive]=\"hasLiveUploadErrors()\"\n />\n\n @if (helpText()) {\n <small\n [attr.id]=\"buildChildId('Help')\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText()\"\n ></small>\n }\n\n <!-- PRESTAKIT-309: Fake input with NgModel to be registered into Form controls -->\n <input type=\"hidden\" [name]=\"name() || label() || ''\" [ngModel]=\"model()\" />\n\n <ng-content />\n\n @for (document of model(); track trackByDocument($index, document)) {\n <div class=\"file file-uploaded\">\n <!-- prettier-ignore -->\n <a [href]=\"boMultiUploadService.getDownloadUrl(downloadUrl(), document)\" target=\"_blank\">{{ document.filename }}</a>\n <span class=\"ms-1 me-1\">\n ({{ toMegaOctets(document.fileSize ?? 0) }}\n <abbr\n [title]=\"\n 'foehn-uploader.abbr-megaoctet-title' | fromDictionary\n \"\n >\n {{ 'foehn-uploader.abbr-megaoctet' | fromDictionary }}\n </abbr>\n )\n </span>\n @if (!readonly() && !document.readonly) {\n <button\n [disabled]=\"disabled()\"\n type=\"button\"\n class=\"btn btn-link icon-button delete-uploaded\"\n (click)=\"removeFile(document)\"\n >\n <foehn-icon-times\n [title]=\"\n 'foehn-uploader.delete-icon-title'\n | fromDictionary: { docName: document.filename }\n \"\n />\n </button>\n }\n </div>\n }\n\n @if (showGlobalInfos(model())) {\n <small\n class=\"form-text text-secondary uploaded-global-info\"\n [innerHTML]=\"getGlobalInfos(model())\"\n ></small>\n }\n\n @if (canAddMoreFiles()) {\n <input\n class=\"form-control actual-input\"\n type=\"file\"\n [name]=\"name() || label()\"\n [multiple]=\"multiple()\"\n [attr.accept]=\"\n overrideAcceptedExtensions()\n ? overrideAcceptedExtensions()\n : uploaderHelper.accept\n ? uploaderHelper.accept\n : null\n \"\n (change)=\"onFileChange($event)\"\n #inputFile\n />\n\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n [disabled]=\"disabled()\"\n [class.visually-hidden]=\"!showUploadButton()\"\n [attr.id]=\"buildChildId()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-describedby]=\"buildId('ErrorsContainer')\"\n (click)=\"inputFile.click()\"\n #entryComponent\n >\n {{\n multiple()\n ? resolvedChooseButtonLabelMultiple()\n : resolvedChooseButtonLabel()\n }}\n </button>\n\n @if (dragAndDrop() && !disabled()) {\n <div\n aria-hidden=\"true\"\n class=\"dropfile\"\n [class.dropfile-border-transparent]=\"showDropZone\"\n (click)=\"inputFile.click()\"\n >\n {{\n multiple()\n ? resolvedDropZoneLabelMultiple()\n : resolvedDropZoneLabel()\n }}\n </div>\n }\n }\n\n <foehn-upload-progress-bar\n [progressBarTriggerHtmlElement]=\"\n inputElement()?.nativeElement || fallBackTrigger\n \"\n />\n</div>\n", styles: [".dropfile{width:300px;border:3px dashed #bbb;text-align:center;margin-top:10px;cursor:pointer;padding:15px 3px}.dropfile-border-transparent{border-color:#fff}.actual-input{display:none}.file-list{margin-top:20px}.icon-button{border:0}.icon-button:hover{cursor:pointer}:host ::ng-deep .svg-inline--fa{color:#000!important}.drop-zone-highlight{outline:3px dashed #bbb}.container-box{border:1px solid #ededed;background-color:#fbfbfb;padding:.5rem}.container-box.vd-form-group-danger{border-left:5px solid var(--vd-danger);padding-left:1rem}\n"], dependencies: [{ kind: "component", type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FoehnIconTimesComponent, selector: "foehn-icon-times" }, { kind: "component", type: FoehnUploadProgressBarComponent, selector: "foehn-upload-progress-bar", inputs: ["progressBarTriggerHtmlElement"] }, { kind: "pipe", type: SdkDictionaryPipe, name: "fromDictionary" }] });
14566
+ ], usesInheritance: true, ngImport: i0, template: "<div\n class=\"form-group container-box\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [class.drop-zone-highlight]=\"showDropZone\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n (drop)=\"onDrop($event)\"\n (dragenter)=\"onDragenter($event)\"\n (dragleave)=\"onDragleave($event)\"\n (dragover)=\"onDragover($event)\"\n #fallBackTrigger\n>\n @if (!!label()) {\n <label\n [class]=\"\n 'form-label ' +\n (isLabelSrOnly()\n ? 'visually-hidden'\n : (labelStyleModifier() ?? ''))\n \"\n [attr.for]=\"buildChildId()\"\n >\n <span [innerHTML]=\"label()\"></span>\n @if (!required() && !hideNotRequiredExtraLabel()) {\n <span aria-hidden=\"true\">\n {{ optionalLabelKey() | fromDictionary }}\n </span>\n }\n </label>\n }\n\n <foehn-validation-alerts\n [component]=\"this\"\n [shouldErrorsBeLive]=\"hasLiveUploadErrors()\"\n />\n\n @if (helpText()) {\n <small\n [attr.id]=\"buildChildId('Help')\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText()\"\n ></small>\n }\n\n <!-- PRESTAKIT-309: Fake input with NgModel to be registered into Form controls -->\n <input type=\"hidden\" [name]=\"name() || label() || ''\" [ngModel]=\"model()\" />\n\n <ng-content />\n\n @for (document of model(); track trackByDocument($index, document)) {\n <div class=\"file file-uploaded\">\n <!-- prettier-ignore -->\n <a [href]=\"getDocumentDownloadUrl(document)\" target=\"_blank\">{{ document.filename }}</a>\n <span class=\"ms-1 me-1\">\n ({{ toMegaOctets(document.fileSize ?? 0) }}\n <abbr\n [title]=\"\n 'foehn-uploader.abbr-megaoctet-title' | fromDictionary\n \"\n >\n {{ 'foehn-uploader.abbr-megaoctet' | fromDictionary }}\n </abbr>\n )\n </span>\n @if (isPending(document)) {\n <span class=\"fst-italic text-secondary\">\n ({{ 'foehn-uploader.pending-label' | fromDictionary }})\n </span>\n }\n @if (!readonly() && !document.readonly) {\n <button\n [disabled]=\"disabled()\"\n type=\"button\"\n class=\"btn btn-link icon-button delete-uploaded\"\n (click)=\"removeFile(document)\"\n >\n <foehn-icon-times\n [title]=\"\n 'foehn-uploader.delete-icon-title'\n | fromDictionary: { docName: document.filename }\n \"\n />\n </button>\n }\n </div>\n }\n\n @if (showGlobalInfos(model())) {\n <small\n class=\"form-text text-secondary uploaded-global-info\"\n [innerHTML]=\"getGlobalInfos(model())\"\n ></small>\n }\n\n @if (canAddMoreFiles()) {\n <input\n class=\"form-control actual-input\"\n type=\"file\"\n [name]=\"name() || label()\"\n [multiple]=\"multiple()\"\n [attr.accept]=\"\n overrideAcceptedExtensions()\n ? overrideAcceptedExtensions()\n : uploaderHelper.accept\n ? uploaderHelper.accept\n : null\n \"\n (change)=\"onFileChange($event)\"\n #inputFile\n />\n\n <button\n type=\"button\"\n [class]=\"'btn btn-primary ' + (chooseButtonStyleModifier() ?? '')\"\n [disabled]=\"disabled()\"\n [class.visually-hidden]=\"!showUploadButton()\"\n [attr.id]=\"buildChildId()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-describedby]=\"buildId('ErrorsContainer')\"\n (click)=\"inputFile.click()\"\n #entryComponent\n >\n {{\n multiple()\n ? resolvedChooseButtonLabelMultiple()\n : resolvedChooseButtonLabel()\n }}\n </button>\n\n @if (dragAndDrop() && !disabled()) {\n <div\n aria-hidden=\"true\"\n class=\"dropfile\"\n [class.dropfile-border-transparent]=\"showDropZone\"\n (click)=\"inputFile.click()\"\n >\n {{\n multiple()\n ? resolvedDropZoneLabelMultiple()\n : resolvedDropZoneLabel()\n }}\n </div>\n }\n }\n\n <foehn-upload-progress-bar\n [progressBarTriggerHtmlElement]=\"\n inputElement()?.nativeElement || fallBackTrigger\n \"\n />\n</div>\n", styles: [".dropfile{width:300px;border:3px dashed #bbb;text-align:center;margin-top:10px;cursor:pointer;padding:15px 3px}.dropfile-border-transparent{border-color:#fff}.actual-input{display:none}.file-list{margin-top:20px}.icon-button{border:0}.icon-button:hover{cursor:pointer}:host ::ng-deep .svg-inline--fa{color:#000!important}.drop-zone-highlight{outline:3px dashed #bbb}.container-box{border:1px solid #ededed;background-color:#fbfbfb;padding:.5rem}.container-box.vd-form-group-danger{border-left:5px solid var(--vd-danger);padding-left:1rem}\n"], dependencies: [{ kind: "component", type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FoehnIconTimesComponent, selector: "foehn-icon-times" }, { kind: "component", type: FoehnUploadProgressBarComponent, selector: "foehn-upload-progress-bar", inputs: ["progressBarTriggerHtmlElement"] }, { kind: "pipe", type: SdkDictionaryPipe, name: "fromDictionary" }] });
14452
14567
  }
14453
14568
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: FoehnBoMultiUploadComponent, decorators: [{
14454
14569
  type: Component,
@@ -14469,8 +14584,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImpo
14469
14584
  FoehnIconTimesComponent,
14470
14585
  FoehnUploadProgressBarComponent,
14471
14586
  SdkDictionaryPipe,
14472
- ], template: "<div\n class=\"form-group container-box\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [class.drop-zone-highlight]=\"showDropZone\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n (drop)=\"onDrop($event)\"\n (dragenter)=\"onDragenter($event)\"\n (dragleave)=\"onDragleave($event)\"\n (dragover)=\"onDragover($event)\"\n #fallBackTrigger\n>\n @if (!!label()) {\n <label\n [class]=\"\n 'form-label ' +\n (isLabelSrOnly()\n ? 'visually-hidden'\n : (labelStyleModifier() ?? ''))\n \"\n [attr.for]=\"buildChildId()\"\n >\n <span [innerHTML]=\"label()\"></span>\n @if (!required() && !hideNotRequiredExtraLabel()) {\n <span aria-hidden=\"true\">\n {{ optionalLabelKey() | fromDictionary }}\n </span>\n }\n </label>\n }\n\n <foehn-validation-alerts\n [component]=\"this\"\n [shouldErrorsBeLive]=\"hasLiveUploadErrors()\"\n />\n\n @if (helpText()) {\n <small\n [attr.id]=\"buildChildId('Help')\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText()\"\n ></small>\n }\n\n <!-- PRESTAKIT-309: Fake input with NgModel to be registered into Form controls -->\n <input type=\"hidden\" [name]=\"name() || label() || ''\" [ngModel]=\"model()\" />\n\n <ng-content />\n\n @for (document of model(); track trackByDocument($index, document)) {\n <div class=\"file file-uploaded\">\n <!-- prettier-ignore -->\n <a [href]=\"boMultiUploadService.getDownloadUrl(downloadUrl(), document)\" target=\"_blank\">{{ document.filename }}</a>\n <span class=\"ms-1 me-1\">\n ({{ toMegaOctets(document.fileSize ?? 0) }}\n <abbr\n [title]=\"\n 'foehn-uploader.abbr-megaoctet-title' | fromDictionary\n \"\n >\n {{ 'foehn-uploader.abbr-megaoctet' | fromDictionary }}\n </abbr>\n )\n </span>\n @if (!readonly() && !document.readonly) {\n <button\n [disabled]=\"disabled()\"\n type=\"button\"\n class=\"btn btn-link icon-button delete-uploaded\"\n (click)=\"removeFile(document)\"\n >\n <foehn-icon-times\n [title]=\"\n 'foehn-uploader.delete-icon-title'\n | fromDictionary: { docName: document.filename }\n \"\n />\n </button>\n }\n </div>\n }\n\n @if (showGlobalInfos(model())) {\n <small\n class=\"form-text text-secondary uploaded-global-info\"\n [innerHTML]=\"getGlobalInfos(model())\"\n ></small>\n }\n\n @if (canAddMoreFiles()) {\n <input\n class=\"form-control actual-input\"\n type=\"file\"\n [name]=\"name() || label()\"\n [multiple]=\"multiple()\"\n [attr.accept]=\"\n overrideAcceptedExtensions()\n ? overrideAcceptedExtensions()\n : uploaderHelper.accept\n ? uploaderHelper.accept\n : null\n \"\n (change)=\"onFileChange($event)\"\n #inputFile\n />\n\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n [disabled]=\"disabled()\"\n [class.visually-hidden]=\"!showUploadButton()\"\n [attr.id]=\"buildChildId()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-describedby]=\"buildId('ErrorsContainer')\"\n (click)=\"inputFile.click()\"\n #entryComponent\n >\n {{\n multiple()\n ? resolvedChooseButtonLabelMultiple()\n : resolvedChooseButtonLabel()\n }}\n </button>\n\n @if (dragAndDrop() && !disabled()) {\n <div\n aria-hidden=\"true\"\n class=\"dropfile\"\n [class.dropfile-border-transparent]=\"showDropZone\"\n (click)=\"inputFile.click()\"\n >\n {{\n multiple()\n ? resolvedDropZoneLabelMultiple()\n : resolvedDropZoneLabel()\n }}\n </div>\n }\n }\n\n <foehn-upload-progress-bar\n [progressBarTriggerHtmlElement]=\"\n inputElement()?.nativeElement || fallBackTrigger\n \"\n />\n</div>\n", styles: [".dropfile{width:300px;border:3px dashed #bbb;text-align:center;margin-top:10px;cursor:pointer;padding:15px 3px}.dropfile-border-transparent{border-color:#fff}.actual-input{display:none}.file-list{margin-top:20px}.icon-button{border:0}.icon-button:hover{cursor:pointer}:host ::ng-deep .svg-inline--fa{color:#000!important}.drop-zone-highlight{outline:3px dashed #bbb}.container-box{border:1px solid #ededed;background-color:#fbfbfb;padding:.5rem}.container-box.vd-form-group-danger{border-left:5px solid var(--vd-danger);padding-left:1rem}\n"] }]
14473
- }], propDecorators: { uploadUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "uploadUrl", required: false }] }], deleteUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "deleteUrl", required: false }] }], downloadUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "downloadUrl", required: false }] }], optionalLabelKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionalLabelKey", required: false }] }], documentDeleted: [{ type: i0.Output, args: ["documentDeleted"] }] } });
14587
+ ], template: "<div\n class=\"form-group container-box\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [class.drop-zone-highlight]=\"showDropZone\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n (drop)=\"onDrop($event)\"\n (dragenter)=\"onDragenter($event)\"\n (dragleave)=\"onDragleave($event)\"\n (dragover)=\"onDragover($event)\"\n #fallBackTrigger\n>\n @if (!!label()) {\n <label\n [class]=\"\n 'form-label ' +\n (isLabelSrOnly()\n ? 'visually-hidden'\n : (labelStyleModifier() ?? ''))\n \"\n [attr.for]=\"buildChildId()\"\n >\n <span [innerHTML]=\"label()\"></span>\n @if (!required() && !hideNotRequiredExtraLabel()) {\n <span aria-hidden=\"true\">\n {{ optionalLabelKey() | fromDictionary }}\n </span>\n }\n </label>\n }\n\n <foehn-validation-alerts\n [component]=\"this\"\n [shouldErrorsBeLive]=\"hasLiveUploadErrors()\"\n />\n\n @if (helpText()) {\n <small\n [attr.id]=\"buildChildId('Help')\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText()\"\n ></small>\n }\n\n <!-- PRESTAKIT-309: Fake input with NgModel to be registered into Form controls -->\n <input type=\"hidden\" [name]=\"name() || label() || ''\" [ngModel]=\"model()\" />\n\n <ng-content />\n\n @for (document of model(); track trackByDocument($index, document)) {\n <div class=\"file file-uploaded\">\n <!-- prettier-ignore -->\n <a [href]=\"getDocumentDownloadUrl(document)\" target=\"_blank\">{{ document.filename }}</a>\n <span class=\"ms-1 me-1\">\n ({{ toMegaOctets(document.fileSize ?? 0) }}\n <abbr\n [title]=\"\n 'foehn-uploader.abbr-megaoctet-title' | fromDictionary\n \"\n >\n {{ 'foehn-uploader.abbr-megaoctet' | fromDictionary }}\n </abbr>\n )\n </span>\n @if (isPending(document)) {\n <span class=\"fst-italic text-secondary\">\n ({{ 'foehn-uploader.pending-label' | fromDictionary }})\n </span>\n }\n @if (!readonly() && !document.readonly) {\n <button\n [disabled]=\"disabled()\"\n type=\"button\"\n class=\"btn btn-link icon-button delete-uploaded\"\n (click)=\"removeFile(document)\"\n >\n <foehn-icon-times\n [title]=\"\n 'foehn-uploader.delete-icon-title'\n | fromDictionary: { docName: document.filename }\n \"\n />\n </button>\n }\n </div>\n }\n\n @if (showGlobalInfos(model())) {\n <small\n class=\"form-text text-secondary uploaded-global-info\"\n [innerHTML]=\"getGlobalInfos(model())\"\n ></small>\n }\n\n @if (canAddMoreFiles()) {\n <input\n class=\"form-control actual-input\"\n type=\"file\"\n [name]=\"name() || label()\"\n [multiple]=\"multiple()\"\n [attr.accept]=\"\n overrideAcceptedExtensions()\n ? overrideAcceptedExtensions()\n : uploaderHelper.accept\n ? uploaderHelper.accept\n : null\n \"\n (change)=\"onFileChange($event)\"\n #inputFile\n />\n\n <button\n type=\"button\"\n [class]=\"'btn btn-primary ' + (chooseButtonStyleModifier() ?? '')\"\n [disabled]=\"disabled()\"\n [class.visually-hidden]=\"!showUploadButton()\"\n [attr.id]=\"buildChildId()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-describedby]=\"buildId('ErrorsContainer')\"\n (click)=\"inputFile.click()\"\n #entryComponent\n >\n {{\n multiple()\n ? resolvedChooseButtonLabelMultiple()\n : resolvedChooseButtonLabel()\n }}\n </button>\n\n @if (dragAndDrop() && !disabled()) {\n <div\n aria-hidden=\"true\"\n class=\"dropfile\"\n [class.dropfile-border-transparent]=\"showDropZone\"\n (click)=\"inputFile.click()\"\n >\n {{\n multiple()\n ? resolvedDropZoneLabelMultiple()\n : resolvedDropZoneLabel()\n }}\n </div>\n }\n }\n\n <foehn-upload-progress-bar\n [progressBarTriggerHtmlElement]=\"\n inputElement()?.nativeElement || fallBackTrigger\n \"\n />\n</div>\n", styles: [".dropfile{width:300px;border:3px dashed #bbb;text-align:center;margin-top:10px;cursor:pointer;padding:15px 3px}.dropfile-border-transparent{border-color:#fff}.actual-input{display:none}.file-list{margin-top:20px}.icon-button{border:0}.icon-button:hover{cursor:pointer}:host ::ng-deep .svg-inline--fa{color:#000!important}.drop-zone-highlight{outline:3px dashed #bbb}.container-box{border:1px solid #ededed;background-color:#fbfbfb;padding:.5rem}.container-box.vd-form-group-danger{border-left:5px solid var(--vd-danger);padding-left:1rem}\n"] }]
14588
+ }], propDecorators: { uploadUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "uploadUrl", required: false }] }], deleteUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "deleteUrl", required: false }] }], downloadUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "downloadUrl", required: false }] }], optionalLabelKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionalLabelKey", required: false }] }], localUpload: [{ type: i0.Input, args: [{ isSignal: true, alias: "localUpload", required: false }] }], maxFileSizeInMo: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxFileSizeInMo", required: false }] }], chooseButtonStyleModifier: [{ type: i0.Input, args: [{ isSignal: true, alias: "chooseButtonStyleModifier", required: false }] }], documentDeleted: [{ type: i0.Output, args: ["documentDeleted"] }] } });
14474
14589
 
14475
14590
  class FoehnPictureUploadComponent extends FoehnInputComponent {
14476
14591
  key = input(...(ngDevMode ? [undefined, { debugName: "key" }] : /* istanbul ignore next */ []));
@@ -16000,5 +16115,5 @@ class SdkLog {
16000
16115
  * Generated bundle index. Do not edit.
16001
16116
  */
16002
16117
 
16003
- export { APP_INFO_API_URL, AbstractFoehnUploaderComponent, AbstractListDetailPageComponent, AbstractMenuPageComponent, AbstractPageComponent, AbstractPageFromMenuComponent, ActionStatut, Address, AddressTypeLight, ApplicationInfo, ApplicationInfoService, BAD_PARAMS_HELP_TEXT, BoDocumentError, BoDocumentsWithErrors, BoMultiUploadService, Breadcrumb, BreadcrumbEventService, BreadcrumbItem, CAPTCHA_ERROR_NAME, CURRENCY_REGEXP, Calendar, Canton, Captcha, ChunkLoadErrorHandler, Configuration, Country, CurrencyHelper, CurrentWeek, DECIMALS_SEPARATOR, DEFAULT_INTERNATIONAL_FIX_AND_MOBILE, DEFAULT_INTERNATIONAL_FIX_ONLY, DEFAULT_INTERNATIONAL_MOBILE_ONLY, DEFAULT_PREFIX, DEFAULT_SWISS_FIX_AND_MOBILE, DEFAULT_SWISS_FIX_ONLY, DEFAULT_SWISS_MOBILE_ONLY, DICTIONARY_BASE_URL, DateHelper, DatePickerHelper, DatePickerNavigationHelper, DayMonth, DaySlots, DemandeExpirationService, DemandeHelper, DisplayCurrencyPipe, DisplayDatePipe, District, Document, DocumentError, DocumentReference, DocumentReferenceWithFile, DocumentsWithErrors, DropdownMenuGroup, DropdownMenuItem, EPaymentService, EtapeInfo, FEEDBACK_USAGERS_LOCAL_STORAGE_PREFIX, FORM_SUPPORT_CYBER_TITLE_FALLBACK, FocusedDay, FoehnAbbrComponent, FoehnAgendaComponent, FoehnAgendaNavigationComponent, FoehnAgendaTimeslotPanelComponent, FoehnAutocompleteComponent, FoehnBoMultiUploadComponent, FoehnBooleanCheckboxComponent, FoehnBooleanRadioComponent, FoehnBreadcrumbComponent, FoehnCheckableGroupComponent, FoehnCheckboxComponent, FoehnConfirmModalComponent, FoehnConfirmModalContent, FoehnConfirmModalService, FoehnDateComponent, FoehnDatePickerButtonComponent, FoehnDatePickerComponent, FoehnDateTimeComponent, FoehnDecisionElectroniqueComponent, FoehnDisplayAddressComponent, FoehnDropdownMenuComponent, FoehnErrorPillComponent, FoehnFeedbackNotificationComponent, FoehnFormComponent, FoehnGlobalUploadProgressBarComponent, FoehnHeaderComponent, FoehnHelpModalComponent, FoehnIconCalendarComponent, FoehnIconCheckComponent, FoehnIconCheckSquareOComponent, FoehnIconChevronDownComponent, FoehnIconChevronLeftComponent, FoehnIconChevronRightComponent, FoehnIconChevronUpComponent, FoehnIconClockComponent, FoehnIconCommentDotsComponent, FoehnIconEditComponent, FoehnIconExternalLinkAltComponent, FoehnIconFilePdfComponent, FoehnIconInfoCircleComponent, FoehnIconLockComponent, FoehnIconMapMarkerComponent, FoehnIconMinusCircleComponent, FoehnIconPencilComponent, FoehnIconPlusCircleComponent, FoehnIconPlusSquareComponent, FoehnIconSearchComponent, FoehnIconTimesComponent, FoehnIconTrashAltComponent, FoehnIconUnlockAltComponent, FoehnIconUserComponent, FoehnInputAddressComponent, FoehnInputComponent, FoehnInputEmailComponent, FoehnInputForeignLocalityComponent, FoehnInputForeignStreetComponent, FoehnInputHiddenComponent, FoehnInputNav13Component, FoehnInputNumberComponent, FoehnInputPasswordComponent, FoehnInputPhoneComponent, FoehnInputPrefixedTextComponent, FoehnInputStringComponent, FoehnInputTextComponent, FoehnInputTextareaComponent, FoehnListComponent, FoehnListItem, FoehnListSummaryComponent, FoehnMenuItemComponent, FoehnMenuItemTransmitComponent, FoehnModalComponent, FoehnMultiUploadComponent, FoehnMultiselectAutocompleteComponent, FoehnNavigationComponent, FoehnNavigationService, FoehnNotfoundComponent, FoehnPageComponent, FoehnPageCounterComponent, FoehnPageExpirationTimerComponent, FoehnPageModalComponent, FoehnPageService, FoehnPictureUploadComponent, FoehnRadioComponent, FoehnRecapSectionComponent, FoehnRemainingAlertsSummaryComponent, FoehnSelectComponent, FoehnSimpleNavigationComponent, FoehnSkipLinkComponent, FoehnStatusProgressBarComponent, FoehnTableColumnConfiguration, FoehnTableComponent, FoehnTablePageChangeEvent, FoehnTimeComponent, FoehnTransmitWaitingModalComponent, FoehnTransmitWaitingModalService, FoehnUploadProgressBarComponent, FoehnUserConnectedAsComponent, FoehnValidationAlertSummaryComponent, FoehnValidationAlertsComponent, FooterLink, FormMetadata, FormPostResponse, FormSelectOption, FormatAvsPipe, FormatIdePipe, GESDEM_MAX_DATA_LENGTH, GesdemActionRecoveryLoginComponent, GesdemActionRecoveryRegistrationComponent, GesdemConfirmationComponent, GesdemErrorComponent, GesdemEventService, GesdemHandlerService, GesdemStatutUtils, GlobalUploadProgressService, GrowlBrokerService, GrowlMessage, GrowlType, HTTP_LOADER_FILTERED_URL, I18nForm, IAM_ACV_OIDC_REDIRECT_LOCATION_REGEX, IAM_ACV_REDIRECT_LOCATION_REGEX, IbanFormatterDirective, IdeFormatterDirective, IntervalHelper, LineBreakAsHtmlPipe, Locality, MonthYear, MultiUploadService, Municipality, NDCFormatterDirective, NEVER_CONNECTED, NavigationDirection, NumberCurrencyFormatterDirective, OIDC_ENABLED, ObjectHelper, PORTAIL_BASE_URL_INT, PORTAIL_BASE_URL_PROD, PORTAIL_BASE_URL_VAL, PageChangeEvent, PageUploadLimitService, PaginationWeek, PendingFiles, PendingPaymentComponent, PendingUploadService, PlaceOfOrigin, Portail, PostalLocality, Preferences, RECAPTCHA_API_URL, RecaptchaService, RedirectComponent, RegisterNgModelService, RowElement, SESSION_INFO_API_URL, SWISS_ISO_ID, ScrollHelper, SdkDictionaryPipe, SdkDictionaryService, SdkEpaymentComponent, SdkEvent, SdkEventType, SdkEventsLoggerService, SdkLog, SdkLogLevel, SdkLogsService, SdkRecaptchaComponent, SdkStatisticsService, SelectedSlot, Session, SessionInfo, SessionInfoData, SessionInfoWithApplicationService, Street, StreetNumber, StringHelper, THOUSANDS_SEPARATOR, TRANSMIT_WAITING_MODAL_DELAY_IN_MILLISECONDS, TableSort, UploadProgress, UploadProgressService, UploaderHelper, ValidationHandlerService, formatDecimalCurrency, formatNonDecimalCurrency, formatNumberAsGiven, gesdemLoaderGuard, providePrestationsNgCore, replaceAll };
16118
+ export { APP_INFO_API_URL, AbstractFoehnUploaderComponent, AbstractListDetailPageComponent, AbstractMenuPageComponent, AbstractPageComponent, AbstractPageFromMenuComponent, ActionStatut, Address, AddressTypeLight, ApplicationInfo, ApplicationInfoService, BAD_PARAMS_HELP_TEXT, BoDocumentError, BoDocumentsWithErrors, BoMultiUploadService, Breadcrumb, BreadcrumbEventService, BreadcrumbItem, CAPTCHA_ERROR_NAME, CURRENCY_REGEXP, Calendar, Canton, Captcha, ChunkLoadErrorHandler, Configuration, Country, CurrencyHelper, CurrentWeek, DECIMALS_SEPARATOR, DEFAULT_INTERNATIONAL_FIX_AND_MOBILE, DEFAULT_INTERNATIONAL_FIX_ONLY, DEFAULT_INTERNATIONAL_MOBILE_ONLY, DEFAULT_PREFIX, DEFAULT_SWISS_FIX_AND_MOBILE, DEFAULT_SWISS_FIX_ONLY, DEFAULT_SWISS_MOBILE_ONLY, DICTIONARY_BASE_URL, DateHelper, DatePickerHelper, DatePickerNavigationHelper, DayMonth, DaySlots, DemandeExpirationService, DemandeHelper, DisplayCurrencyPipe, DisplayDatePipe, District, Document, DocumentError, DocumentReference, DocumentReferenceWithFile, DocumentsWithErrors, DropdownMenuGroup, DropdownMenuItem, EPaymentService, EtapeInfo, FEEDBACK_USAGERS_LOCAL_STORAGE_PREFIX, FORM_SUPPORT_CYBER_TITLE_FALLBACK, FocusedDay, FoehnAbbrComponent, FoehnAgendaComponent, FoehnAgendaNavigationComponent, FoehnAgendaTimeslotPanelComponent, FoehnAutocompleteComponent, FoehnBoMultiUploadComponent, FoehnBooleanCheckboxComponent, FoehnBooleanRadioComponent, FoehnBreadcrumbComponent, FoehnCheckableGroupComponent, FoehnCheckboxComponent, FoehnConfirmModalComponent, FoehnConfirmModalContent, FoehnConfirmModalService, FoehnDateComponent, FoehnDatePickerButtonComponent, FoehnDatePickerComponent, FoehnDateTimeComponent, FoehnDecisionElectroniqueComponent, FoehnDisplayAddressComponent, FoehnDropdownMenuComponent, FoehnErrorPillComponent, FoehnFeedbackNotificationComponent, FoehnFormComponent, FoehnGlobalUploadProgressBarComponent, FoehnHeaderComponent, FoehnHelpModalComponent, FoehnIconCalendarComponent, FoehnIconCheckComponent, FoehnIconCheckSquareOComponent, FoehnIconChevronDownComponent, FoehnIconChevronLeftComponent, FoehnIconChevronRightComponent, FoehnIconChevronUpComponent, FoehnIconClockComponent, FoehnIconCommentDotsComponent, FoehnIconEditComponent, FoehnIconExternalLinkAltComponent, FoehnIconFilePdfComponent, FoehnIconInfoCircleComponent, FoehnIconLockComponent, FoehnIconMapMarkerComponent, FoehnIconMinusCircleComponent, FoehnIconPencilComponent, FoehnIconPlusCircleComponent, FoehnIconPlusSquareComponent, FoehnIconSearchComponent, FoehnIconTimesComponent, FoehnIconTrashAltComponent, FoehnIconUnlockAltComponent, FoehnIconUserComponent, FoehnInputAddressComponent, FoehnInputComponent, FoehnInputEmailComponent, FoehnInputForeignLocalityComponent, FoehnInputForeignStreetComponent, FoehnInputHiddenComponent, FoehnInputNav13Component, FoehnInputNumberComponent, FoehnInputPasswordComponent, FoehnInputPhoneComponent, FoehnInputPrefixedTextComponent, FoehnInputStringComponent, FoehnInputTextComponent, FoehnInputTextareaComponent, FoehnListComponent, FoehnListItem, FoehnListSummaryComponent, FoehnMenuItemComponent, FoehnMenuItemTransmitComponent, FoehnModalComponent, FoehnMultiUploadComponent, FoehnMultiselectAutocompleteComponent, FoehnNavigationComponent, FoehnNavigationService, FoehnNotfoundComponent, FoehnPageComponent, FoehnPageCounterComponent, FoehnPageExpirationTimerComponent, FoehnPageModalComponent, FoehnPageService, FoehnPictureUploadComponent, FoehnRadioComponent, FoehnRecapSectionComponent, FoehnRemainingAlertsSummaryComponent, FoehnSelectComponent, FoehnSimpleNavigationComponent, FoehnSkipLinkComponent, FoehnStatusProgressBarComponent, FoehnTableColumnConfiguration, FoehnTableComponent, FoehnTablePageChangeEvent, FoehnTimeComponent, FoehnTransmitWaitingModalComponent, FoehnTransmitWaitingModalService, FoehnUploadProgressBarComponent, FoehnUserConnectedAsComponent, FoehnValidationAlertSummaryComponent, FoehnValidationAlertsComponent, FooterLink, FormMetadata, FormPostResponse, FormSelectOption, FormatAvsPipe, FormatIdePipe, GESDEM_MAX_DATA_LENGTH, GesdemActionRecoveryLoginComponent, GesdemActionRecoveryRegistrationComponent, GesdemConfirmationComponent, GesdemErrorComponent, GesdemEventService, GesdemHandlerService, GesdemStatutUtils, GlobalUploadProgressService, GrowlBrokerService, GrowlMessage, GrowlType, HTTP_LOADER_FILTERED_URL, I18nForm, IAM_ACV_OIDC_REDIRECT_LOCATION_REGEX, IAM_ACV_REDIRECT_LOCATION_REGEX, IbanFormatterDirective, IdeFormatterDirective, IntervalHelper, LineBreakAsHtmlPipe, Locality, MonthYear, MultiUploadService, Municipality, NDCFormatterDirective, NEVER_CONNECTED, NavigationDirection, NumberCurrencyFormatterDirective, OIDC_ENABLED, ObjectHelper, PORTAIL_BASE_URL_INT, PORTAIL_BASE_URL_PROD, PORTAIL_BASE_URL_VAL, PageChangeEvent, PageUploadLimitService, PaginationWeek, PendingFiles, PendingPaymentComponent, PendingUploadService, PlaceOfOrigin, Portail, PostalLocality, Preferences, RECAPTCHA_API_URL, RecaptchaService, RedirectComponent, RegisterNgModelService, RowElement, SESSION_INFO_API_URL, SWISS_ISO_ID, ScrollHelper, SdkDictionaryPipe, SdkDictionaryService, SdkEpaymentComponent, SdkEvent, SdkEventType, SdkEventsLoggerService, SdkLog, SdkLogLevel, SdkLogsService, SdkRecaptchaComponent, SdkStatisticsService, SelectedSlot, Session, SessionInfo, SessionInfoData, SessionInfoWithApplicationService, Street, StreetNumber, StringHelper, THOUSANDS_SEPARATOR, TRANSMIT_WAITING_MODAL_DELAY_IN_MILLISECONDS, TableSort, UploadProgress, UploadProgressService, UploaderHelper, ValidationHandlerService, formatDecimalCurrency, formatNonDecimalCurrency, formatNumberAsGiven, gesdemLoaderGuard, getSafeFileNameForErrorMessage, providePrestationsNgCore, replaceAll, splitDocumentChanges };
16004
16119
  //# sourceMappingURL=dsivd-prestations-ng.mjs.map