@dsivd/prestations-ng 19.0.8 → 19.1.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.
package/UPGRADING_V19.md CHANGED
@@ -67,6 +67,17 @@ And replace the old `AutoConfigureMockMvc` import, which is not recognized anymo
67
67
  If you use Spring/Hibernate dependencies in `pom.xml` (like `hibernate-jpamodelgen`), check the Spring Boot 4 migration
68
68
  guide to see if it has been replaced by another library: https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.0-Migration-Guide
69
69
 
70
+ ### LDAP
71
+
72
+ if you use ldap, you should replace `spring-ldap-core` by `spring-boot-starter-ldap` in your `pom.xml` to maintain the LDAP health indicator.
73
+
74
+ ```xml
75
+ <dependency>
76
+ <groupId>org.springframework.boot</groupId>
77
+ <artifactId>spring-boot-starter-ldap</artifactId>
78
+ </dependency>
79
+ ```
80
+
70
81
  ### Jackson migration
71
82
 
72
83
  With Spring Boot 4, Jackson 3 is now used instead of Jackson 2, so we need to replace the previous Jackson 2 classes.
@@ -917,7 +928,7 @@ rm karma.conf.js
917
928
  Then run the following command to migrate from jasmine to vitest:
918
929
 
919
930
  ```bash
920
- ng g @schematics/angular:refactor-jasmine-vitest
931
+ ng g @schematics/angular:refactor-jasmine-vitest --no-report
921
932
  ```
922
933
 
923
934
  Now you can run your tests with `npm test` and check that everything is up and running.
@@ -1449,3 +1460,8 @@ See [getImtPortailApplications](https://dsigit.etat-de-vaud.ch/outils/git/projec
1449
1460
  + 'node' : '22'
1450
1461
  ],
1451
1462
  ```
1463
+
1464
+ ## RENOVATE BOT
1465
+
1466
+ Enroll your project in Renovate bot to automatically update your dependencies.
1467
+ See [Mend Renovate CE](https://dgnsiwiki.etat-de-vaud.ch/outils/dgnsiwiki/x/7QFDgg) for more information.
Binary file
@@ -1336,6 +1336,7 @@ const DEFAULT_DICTIONARY = {
1336
1336
  'foehn-picture-upload.selection-not-validated-label': 'Merci de valider votre sélection',
1337
1337
  'foehn-picture-upload.delete-picture-label': 'Supprimer',
1338
1338
  'foehn-select.no-selection.label': '-',
1339
+ 'foehn-checkable-group.missing-value.warning': 'La valeur enregistrée « {value} » n’existe plus dans la liste des choix possibles.',
1339
1340
  'foehn-table.totalElements': '{total} éléments trouvés',
1340
1341
  'foehn-table.totalElements.1': '1 élément trouvé',
1341
1342
  'foehn-table.totalElements.0': 'Aucun résultat',
@@ -3951,17 +3952,18 @@ class GesdemConfirmationComponent {
3951
3952
  if (lastResponse) {
3952
3953
  this.reference.set(lastResponse.meta.reference);
3953
3954
  this.actionStatut.set(ActionStatut[lastResponse.meta.statut]);
3954
- this.urlPdf = this.baseUrlPdf() + this.reference();
3955
3955
  const currentAction = lastResponse.meta.currentAction;
3956
+ let fullReference = this.reference();
3956
3957
  if (!!currentAction) {
3957
- this.urlPdf += `-${currentAction}`;
3958
+ fullReference = `${this.reference()}-${currentAction}`;
3958
3959
  if (this.location.path().includes(`/${this.reference()}/`)) {
3959
3960
  const fullReferenceUrl = this.location
3960
3961
  .path()
3961
- .replace(this.reference(), `${this.reference()}-${currentAction}`);
3962
+ .replace(this.reference(), fullReference);
3962
3963
  this.location.replaceState(fullReferenceUrl);
3963
3964
  }
3964
3965
  }
3966
+ this.urlPdf = this.buildPdfRecapUrl(fullReference);
3965
3967
  const languageCode = lastResponse.form.language;
3966
3968
  this.dictionaryService.changeLanguage(languageCode);
3967
3969
  }
@@ -3998,6 +4000,13 @@ class GesdemConfirmationComponent {
3998
4000
  gotToTop() {
3999
4001
  window.scrollTo(0, 0);
4000
4002
  }
4003
+ buildPdfRecapUrl(fullReference) {
4004
+ const applicationKey = this.gesdemService.prefix;
4005
+ if (applicationKey) {
4006
+ return `api/document/${applicationKey}/pdf/${fullReference}`;
4007
+ }
4008
+ return this.baseUrlPdf() + fullReference;
4009
+ }
4001
4010
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.21", ngImport: i0, type: GesdemConfirmationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4002
4011
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.21", type: GesdemConfirmationComponent, isStandalone: true, selector: "gesdem-confirmation", inputs: { reference: { classPropertyName: "reference", publicName: "reference", isSignal: true, isRequired: false, transformFunction: null }, hasEmailSent: { classPropertyName: "hasEmailSent", publicName: "hasEmailSent", isSignal: true, isRequired: false, transformFunction: null }, showDownloadPdfRecapButton: { classPropertyName: "showDownloadPdfRecapButton", publicName: "showDownloadPdfRecapButton", isSignal: true, isRequired: false, transformFunction: null }, showLinkToMyDemandes: { classPropertyName: "showLinkToMyDemandes", publicName: "showLinkToMyDemandes", isSignal: true, isRequired: false, transformFunction: null }, demandeIsClosedOnTransmit: { classPropertyName: "demandeIsClosedOnTransmit", publicName: "demandeIsClosedOnTransmit", isSignal: true, isRequired: false, transformFunction: null }, actionStatut: { classPropertyName: "actionStatut", publicName: "actionStatut", isSignal: true, isRequired: false, transformFunction: null }, connectedConfirmationMessage: { classPropertyName: "connectedConfirmationMessage", publicName: "connectedConfirmationMessage", isSignal: true, isRequired: false, transformFunction: null }, connectedConfirmationMessageIfAbandoned: { classPropertyName: "connectedConfirmationMessageIfAbandoned", publicName: "connectedConfirmationMessageIfAbandoned", isSignal: true, isRequired: false, transformFunction: null }, downloadPdfRecapButtonText: { classPropertyName: "downloadPdfRecapButtonText", publicName: "downloadPdfRecapButtonText", isSignal: true, isRequired: false, transformFunction: null }, closeButtonText: { classPropertyName: "closeButtonText", publicName: "closeButtonText", isSignal: true, isRequired: false, transformFunction: null }, closeButtonConnectedText: { classPropertyName: "closeButtonConnectedText", publicName: "closeButtonConnectedText", isSignal: true, isRequired: false, transformFunction: null }, baseUrlPdf: { classPropertyName: "baseUrlPdf", publicName: "baseUrlPdf", isSignal: true, isRequired: false, transformFunction: null }, hideReference: { classPropertyName: "hideReference", publicName: "hideReference", isSignal: true, isRequired: false, transformFunction: null }, hideFeedbackNotificationOverride: { classPropertyName: "hideFeedbackNotificationOverride", publicName: "hideFeedbackNotificationOverride", isSignal: true, isRequired: false, transformFunction: null }, successLabelDicoKeyFirstStep: { classPropertyName: "successLabelDicoKeyFirstStep", publicName: "successLabelDicoKeyFirstStep", isSignal: true, isRequired: false, transformFunction: null }, successLabelDicoAdditionalSteps: { classPropertyName: "successLabelDicoAdditionalSteps", publicName: "successLabelDicoAdditionalSteps", isSignal: true, isRequired: false, transformFunction: null }, closeHref: { classPropertyName: "closeHref", publicName: "closeHref", isSignal: true, isRequired: false, transformFunction: null }, closeHrefConnected: { classPropertyName: "closeHrefConnected", publicName: "closeHrefConnected", isSignal: true, isRequired: false, transformFunction: null }, setPageTitle: { classPropertyName: "setPageTitle", publicName: "setPageTitle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { reference: "referenceChange", hasEmailSent: "hasEmailSentChange", showDownloadPdfRecapButton: "showDownloadPdfRecapButtonChange", showLinkToMyDemandes: "showLinkToMyDemandesChange", demandeIsClosedOnTransmit: "demandeIsClosedOnTransmitChange", actionStatut: "actionStatutChange", connectedConfirmationMessage: "connectedConfirmationMessageChange", connectedConfirmationMessageIfAbandoned: "connectedConfirmationMessageIfAbandonedChange", downloadPdfRecapButtonText: "downloadPdfRecapButtonTextChange", closeButtonText: "closeButtonTextChange", closeButtonConnectedText: "closeButtonConnectedTextChange", baseUrlPdf: "baseUrlPdfChange", hideReference: "hideReferenceChange", hideFeedbackNotificationOverride: "hideFeedbackNotificationOverrideChange", successLabelDicoKeyFirstStep: "successLabelDicoKeyFirstStepChange", successLabelDicoAdditionalSteps: "successLabelDicoAdditionalStepsChange" }, usesOnChanges: true, ngImport: i0, template: "@if (reference() && !isInProgress) {\n <div class=\"container mt-5\">\n <div\n [id]=\"'main-summary'\"\n class=\"alert text-center mb-2\"\n [class.alert-success]=\"isTransferred\"\n [class.alert-danger]=\"!isTransferred\"\n >\n <p class=\"h2\">\n {{\n isTransferred\n ? (successLabelDicoKey | fromDictionary)\n : ('gesdem-confirmation.abort-label' | fromDictionary)\n }}\n </p>\n @if (!hideReference()) {\n <dl>\n <dt class=\"fw-light\">\n {{\n 'gesdem-confirmation.reference-title.label'\n | fromDictionary\n }}\n </dt>\n <dd id=\"numDemande\" class=\"h4 d-block mt-3\">\n {{ reference() }}\n </dd>\n </dl>\n }\n @if (hasEmailSent() && !(isConnectedCyber | async)) {\n <p>\n {{ 'gesdem-confirmation.mail-sent.label' | fromDictionary }}\n </p>\n }\n </div>\n <span\n [innerHTML]=\"'gesdem-confirmation.extra-content' | fromDictionary\"\n ></span>\n <ng-content />\n @if ((isConnectedCyber | async) && hasConnectedContent()) {\n <div class=\"col-md-12 vd-highlight highlight-dark\">\n <span\n class=\"visually-hidden\"\n [innerHTML]=\"\n 'gesdem-confirmation.transmission-information.label'\n | fromDictionary\n \"\n ></span>\n <div class=\"row\">\n <div class=\"col-md-1\">\n <foehn-icon-info-circle class=\"h3\" />\n </div>\n <div class=\"col-md-11\">\n <p\n [innerHTML]=\"\n (isTransferred\n ? connectedConfirmationMessage()\n : connectedConfirmationMessageIfAbandoned()\n ) | fromDictionary\n \"\n ></p>\n @if (\n showLinkToMyDemandes() &&\n (demandeIsClosedOnTransmit() || isAbandoned)\n ) {\n <p id=\"linkToTreatedDemandes\">\n {{\n 'gesdem-confirmation.demand-detail-link.label'\n | fromDictionary\n }}\n <a\n href=\"/100002/demandes/{{ reference() }}\"\n [attr.aria-label]=\"\n 'gesdem-demand-detail'\n | fromDictionary\n : { reference: reference() }\n \"\n [innerHTML]=\"reference()\"\n ></a>\n .\n </p>\n }\n @if (\n showLinkToMyDemandes() &&\n !demandeIsClosedOnTransmit() &&\n !isAbandoned\n ) {\n <p id=\"linkToInProgressDemandes\">\n {{\n 'gesdem-confirmation.demand-processing-progress-link.label'\n | fromDictionary\n }}\n <a\n href=\"/100002/demandes/{{ reference() }}\"\n [attr.aria-label]=\"\n 'gesdem-demand-detail'\n | fromDictionary\n : { reference: reference() }\n \"\n [innerHTML]=\"reference()\"\n ></a>\n .\n </p>\n }\n </div>\n </div>\n </div>\n }\n <div class=\"col-md-12 list-unstyled d-md-flex p-0 mt-4\">\n <div class=\"ms-0 me-md-auto me-md-2 mb-2 mt-2\">\n @if (showDownloadPdfRecapButton()) {\n <a\n [href]=\"urlPdf\"\n (click)=\"logPdfDownloadedEvent()\"\n id=\"telechargerBtn\"\n class=\"btn btn-secondary w-100\"\n [attr.aria-label]=\"\n 'gesdem.download-pdf.button.title' | fromDictionary\n \"\n >\n {{ downloadPdfRecapButtonText() | fromDictionary }}\n </a>\n }\n </div>\n @if (\n !(isConnectedCyber | async) && closeLinkNotConnected | async;\n as link\n ) {\n <div class=\"me-0 ms-md-auto mb-2 mt-2\">\n <a\n [href]=\"link\"\n id=\"terminerBtn\"\n class=\"btn btn-primary w-100\"\n >\n {{ closeButtonText() | fromDictionary }}\n </a>\n </div>\n }\n @if (\n !!(isConnectedCyber | async) && closeLinkConnected | async;\n as link\n ) {\n <div class=\"me-0 ms-md-auto mb-2 mt-2\">\n <a\n [href]=\"link\"\n id=\"terminerConnectedBtn\"\n class=\"btn btn-primary w-100\"\n >\n {{ closeButtonConnectedText() | fromDictionary }}\n </a>\n </div>\n }\n </div>\n </div>\n}\n\n@if (!hideReference() && reference() && isInProgress) {\n <div class=\"container mt-5\">\n <div class=\"alert alert-info text-center mb-2\">\n <p\n class=\"h2\"\n [innerHTML]=\"\n 'gesdem-confirmation.demand-in-progress.title'\n | fromDictionary\n \"\n ></p>\n <dl>\n <dt class=\"fw-light\">\n {{\n 'gesdem-confirmation.reference-title.label'\n | fromDictionary\n }}\n </dt>\n <dd id=\"numDemandeEnCours\" class=\"h4 d-block mt-3\">\n {{ reference() }}\n </dd>\n </dl>\n </div>\n <div class=\"col-md-12 vd-highlight highlight-dark\">\n <div class=\"row\">\n <div class=\"col-md-1\">\n <foehn-icon-info-circle class=\"h3\" />\n </div>\n <div class=\"col-md-11\">\n <p>\n {{\n 'gesdem-confirmation.resume-my-demand.label'\n | fromDictionary\n }}\n </p>\n <p>\n <a [routerLink]=\"firstPageLink\">\n {{\n 'gesdem-confirmation.resume-my-demand.button'\n | fromDictionary\n }}\n </a>\n </p>\n </div>\n </div>\n </div>\n </div>\n}\n\n@if (!hideFeedbackNotificationOverride()) {\n <foehn-feedback-notification [id]=\"'feedbackNotification'\" />\n}\n", dependencies: [{ kind: "component", type: FoehnIconInfoCircleComponent, selector: "foehn-icon-info-circle" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: FoehnFeedbackNotificationComponent, selector: "foehn-feedback-notification" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: SdkDictionaryPipe, name: "fromDictionary" }] }); }
4003
4012
  }
@@ -5855,6 +5864,28 @@ class FoehnCheckableGroupComponent extends FoehnInputComponent {
5855
5864
  this.autocomplete = input('off', { ...(ngDevMode ? { debugName: "autocomplete" } : /* istanbul ignore next */ {}), transform: () => 'off' });
5856
5865
  this.defaultElementValue = input(...(ngDevMode ? [undefined, { debugName: "defaultElementValue" }] : /* istanbul ignore next */ []));
5857
5866
  this.elementsLoaded = output();
5867
+ /**
5868
+ * Values stored in the model that are no longer present in the list of
5869
+ * elements (e.g. a locality that has been removed from the reference data).
5870
+ * Used to warn the user that a previously saved value no longer exists.
5871
+ */
5872
+ this.missingModelValues = computed(() => {
5873
+ const elements = this.elements();
5874
+ const modelValue = this.model();
5875
+ // Elements not loaded yet, empty model, or detection disabled by a
5876
+ // subclass (e.g. autocomplete accepting custom / dynamic values):
5877
+ // nothing can be considered missing.
5878
+ if (!elements ||
5879
+ this.isEmpty(modelValue) ||
5880
+ !this.detectMissingModelValues()) {
5881
+ return [];
5882
+ }
5883
+ const modelValues = this.multiple()
5884
+ ? (modelValue ?? [])
5885
+ : [modelValue];
5886
+ return modelValues.filter((value) => !this.isEmpty(value) && !this.isValueInElements(value));
5887
+ }, ...(ngDevMode ? [{ debugName: "missingModelValues" }] : /* istanbul ignore next */ []));
5888
+ this.hasMissingModelValue = computed(() => this.missingModelValues().length > 0, ...(ngDevMode ? [{ debugName: "hasMissingModelValue" }] : /* istanbul ignore next */ []));
5858
5889
  this.httpClient = inject(HttpClient);
5859
5890
  this.multiple = signal(false, ...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
5860
5891
  this.ngZone = inject(NgZone);
@@ -5963,6 +5994,27 @@ class FoehnCheckableGroupComponent extends FoehnInputComponent {
5963
5994
  this.model.set(null);
5964
5995
  }
5965
5996
  }
5997
+ /**
5998
+ * Builds a human readable representation of a model value that is no longer
5999
+ * present in the list of elements.
6000
+ */
6001
+ getMissingValueLabel(value) {
6002
+ if (this.isEmpty(value)) {
6003
+ return '';
6004
+ }
6005
+ if (typeof value === 'object') {
6006
+ const label = this.getLabel(value);
6007
+ if (!this.isEmpty(label)) {
6008
+ return label;
6009
+ }
6010
+ const nestedValue = this.getValue(value);
6011
+ if (!this.isEmpty(nestedValue)) {
6012
+ return `${nestedValue}`;
6013
+ }
6014
+ return JSON.stringify(value);
6015
+ }
6016
+ return `${value}`;
6017
+ }
5966
6018
  isElementSelected(element) {
5967
6019
  const value = this.getValue(element);
5968
6020
  if (this.multiple()) {
@@ -5991,6 +6043,19 @@ class FoehnCheckableGroupComponent extends FoehnInputComponent {
5991
6043
  }
5992
6044
  throw new Error('findIndexInModel cannot be used when this.multiple() is false !');
5993
6045
  }
6046
+ isValueInElements(value) {
6047
+ const elements = this.elements() ?? [];
6048
+ return elements.some((element) => this.areValuesEquals(this.getValue(element), value));
6049
+ }
6050
+ /**
6051
+ * Whether values absent from the list of elements should be reported as
6052
+ * "missing". `true` by default (select, radio, checkbox). Overridden by
6053
+ * components where an absent value can be legitimate — e.g. an autocomplete
6054
+ * accepting custom values or fed by a dynamic suggestion list.
6055
+ */
6056
+ detectMissingModelValues() {
6057
+ return true;
6058
+ }
5994
6059
  areValuesEquals(value1, value2) {
5995
6060
  // Get an option way to compare the value from the model.
5996
6061
  // This allows us to properly use an object as the model rather
@@ -6158,7 +6223,7 @@ class FoehnSelectComponent extends FoehnCheckableGroupComponent {
6158
6223
  provide: FoehnInputComponent,
6159
6224
  useExisting: forwardRef(() => FoehnSelectComponent),
6160
6225
  },
6161
- ], usesInheritance: true, ngImport: i0, template: "<div\n class=\"form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <div class=\"d-flex justify-content-between\">\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 {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n }\n </label>\n }\n @if (!!helpModal()) {\n <foehn-help-modal\n class=\"removePaddingButton\"\n [modalContent]=\"helpModal()\"\n />\n }\n </div>\n\n <foehn-validation-alerts [component]=\"this\" />\n\n @if (!elements()) {\n <div>Chargement...</div>\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 <ng-content />\n\n @if (!multiple()) {\n <select\n [class.is-invalid]=\"\n hasErrorsToDisplay() || hasInheritErrorFromParent()\n \"\n class=\"form-select\"\n [name]=\"name() || label()\"\n [attr.id]=\"buildChildId()\"\n [disabled]=\"disabled()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required() || null\"\n [attr.autocomplete]=\"getAutoComplete()\"\n [ngModel]=\"model()\"\n (ngModelChange)=\"updateNgModel($event)\"\n [compareWith]=\"compareFn.bind(this)\"\n (change)=\"handleChange(model())\"\n #entryComponent\n ngDefaultControl\n >\n @if (showEmptyOption()) {\n <option [ngValue]=\"null\">\n <!-- empty option displayed even if required=true as long as there's no model to fix https://github.com/angular/angular/issues/14505 -->\n </option>\n }\n @if (!required()) {\n <option [ngValue]=\"null\">\n {{ noSelectionLabel() | fromDictionary }}\n </option>\n }\n @for (element of elements(); track getValue(element)) {\n <option\n [ngValue]=\"getValue(element)\"\n [attr.selected]=\"\n isElementSelected(element) ? 'selected' : null\n \"\n [disabled]=\"getDisabled(element)\"\n >\n {{ getLabel(element) }}\n </option>\n }\n </select>\n }\n @if (multiple()) {\n <select\n multiple\n [attr.aria-multiselectable]=\"true\"\n [class.is-invalid]=\"\n hasErrorsToDisplay() || hasInheritErrorFromParent()\n \"\n class=\"form-select\"\n [name]=\"name() || label()\"\n [attr.id]=\"buildChildId()\"\n [disabled]=\"disabled()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required() || null\"\n [ngModel]=\"model()\"\n (ngModelChange)=\"updateNgModel($event)\"\n [compareWith]=\"compareFn.bind(this)\"\n (change)=\"handleChange(model())\"\n #entryComponent\n ngDefaultControl\n >\n @for (element of elements(); track getValue(element)) {\n <option\n [ngValue]=\"getValue(element)\"\n [attr.selected]=\"\n isElementSelected(element) ? 'selected' : null\n \"\n [attr.aria-selected]=\"isElementSelected(element)\"\n [disabled]=\"getDisabled(element)\"\n >\n {{ getLabel(element) }}\n </option>\n }\n </select>\n }\n</div>\n", styles: [".form-group select{appearance:none}\n"], dependencies: [{ kind: "component", type: FoehnHelpModalComponent, selector: "foehn-help-modal", inputs: ["modalContent", "draggable", "hideable"] }, { kind: "component", type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.SelectMultipleControlValueAccessor, selector: "select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]", inputs: ["compareWith"] }, { 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: "pipe", type: SdkDictionaryPipe, name: "fromDictionary" }] }); }
6226
+ ], usesInheritance: true, ngImport: i0, template: "<div\n class=\"form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <div class=\"d-flex justify-content-between\">\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 {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n }\n </label>\n }\n @if (!!helpModal()) {\n <foehn-help-modal\n class=\"removePaddingButton\"\n [modalContent]=\"helpModal()\"\n />\n }\n </div>\n\n <foehn-validation-alerts [component]=\"this\" />\n\n @if (hasMissingModelValue()) {\n @for (missingValue of missingModelValues(); track $index) {\n <p\n class=\"alert alert-warning\"\n role=\"alert\"\n [attr.id]=\"buildId('MissingValue') + $index\"\n >\n {{\n 'foehn-checkable-group.missing-value.warning'\n | fromDictionary\n : { value: getMissingValueLabel(missingValue) }\n }}\n </p>\n }\n }\n\n @if (!elements()) {\n <div>Chargement...</div>\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 <ng-content />\n\n @if (!multiple()) {\n <select\n [class.is-invalid]=\"\n hasErrorsToDisplay() || hasInheritErrorFromParent()\n \"\n class=\"form-select\"\n [name]=\"name() || label()\"\n [attr.id]=\"buildChildId()\"\n [disabled]=\"disabled()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required() || null\"\n [attr.autocomplete]=\"getAutoComplete()\"\n [ngModel]=\"model()\"\n (ngModelChange)=\"updateNgModel($event)\"\n [compareWith]=\"compareFn.bind(this)\"\n (change)=\"handleChange(model())\"\n #entryComponent\n ngDefaultControl\n >\n @if (showEmptyOption()) {\n <option [ngValue]=\"null\">\n <!-- empty option displayed even if required=true as long as there's no model to fix https://github.com/angular/angular/issues/14505 -->\n </option>\n }\n @if (!required()) {\n <option [ngValue]=\"null\">\n {{ noSelectionLabel() | fromDictionary }}\n </option>\n }\n @for (element of elements(); track getValue(element)) {\n <option\n [ngValue]=\"getValue(element)\"\n [attr.selected]=\"\n isElementSelected(element) ? 'selected' : null\n \"\n [disabled]=\"getDisabled(element)\"\n >\n {{ getLabel(element) }}\n </option>\n }\n </select>\n }\n @if (multiple()) {\n <select\n multiple\n [attr.aria-multiselectable]=\"true\"\n [class.is-invalid]=\"\n hasErrorsToDisplay() || hasInheritErrorFromParent()\n \"\n class=\"form-select\"\n [name]=\"name() || label()\"\n [attr.id]=\"buildChildId()\"\n [disabled]=\"disabled()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required() || null\"\n [ngModel]=\"model()\"\n (ngModelChange)=\"updateNgModel($event)\"\n [compareWith]=\"compareFn.bind(this)\"\n (change)=\"handleChange(model())\"\n #entryComponent\n ngDefaultControl\n >\n @for (element of elements(); track getValue(element)) {\n <option\n [ngValue]=\"getValue(element)\"\n [attr.selected]=\"\n isElementSelected(element) ? 'selected' : null\n \"\n [attr.aria-selected]=\"isElementSelected(element)\"\n [disabled]=\"getDisabled(element)\"\n >\n {{ getLabel(element) }}\n </option>\n }\n </select>\n }\n</div>\n", styles: [".form-group select{appearance:none}\n"], dependencies: [{ kind: "component", type: FoehnHelpModalComponent, selector: "foehn-help-modal", inputs: ["modalContent", "draggable", "hideable"] }, { kind: "component", type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.SelectMultipleControlValueAccessor, selector: "select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]", inputs: ["compareWith"] }, { 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: "pipe", type: SdkDictionaryPipe, name: "fromDictionary" }] }); }
6162
6227
  }
6163
6228
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.21", ngImport: i0, type: FoehnSelectComponent, decorators: [{
6164
6229
  type: Component,
@@ -6172,7 +6237,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.21", ngImpo
6172
6237
  FoehnValidationAlertsComponent,
6173
6238
  FormsModule,
6174
6239
  SdkDictionaryPipe,
6175
- ], template: "<div\n class=\"form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <div class=\"d-flex justify-content-between\">\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 {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n }\n </label>\n }\n @if (!!helpModal()) {\n <foehn-help-modal\n class=\"removePaddingButton\"\n [modalContent]=\"helpModal()\"\n />\n }\n </div>\n\n <foehn-validation-alerts [component]=\"this\" />\n\n @if (!elements()) {\n <div>Chargement...</div>\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 <ng-content />\n\n @if (!multiple()) {\n <select\n [class.is-invalid]=\"\n hasErrorsToDisplay() || hasInheritErrorFromParent()\n \"\n class=\"form-select\"\n [name]=\"name() || label()\"\n [attr.id]=\"buildChildId()\"\n [disabled]=\"disabled()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required() || null\"\n [attr.autocomplete]=\"getAutoComplete()\"\n [ngModel]=\"model()\"\n (ngModelChange)=\"updateNgModel($event)\"\n [compareWith]=\"compareFn.bind(this)\"\n (change)=\"handleChange(model())\"\n #entryComponent\n ngDefaultControl\n >\n @if (showEmptyOption()) {\n <option [ngValue]=\"null\">\n <!-- empty option displayed even if required=true as long as there's no model to fix https://github.com/angular/angular/issues/14505 -->\n </option>\n }\n @if (!required()) {\n <option [ngValue]=\"null\">\n {{ noSelectionLabel() | fromDictionary }}\n </option>\n }\n @for (element of elements(); track getValue(element)) {\n <option\n [ngValue]=\"getValue(element)\"\n [attr.selected]=\"\n isElementSelected(element) ? 'selected' : null\n \"\n [disabled]=\"getDisabled(element)\"\n >\n {{ getLabel(element) }}\n </option>\n }\n </select>\n }\n @if (multiple()) {\n <select\n multiple\n [attr.aria-multiselectable]=\"true\"\n [class.is-invalid]=\"\n hasErrorsToDisplay() || hasInheritErrorFromParent()\n \"\n class=\"form-select\"\n [name]=\"name() || label()\"\n [attr.id]=\"buildChildId()\"\n [disabled]=\"disabled()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required() || null\"\n [ngModel]=\"model()\"\n (ngModelChange)=\"updateNgModel($event)\"\n [compareWith]=\"compareFn.bind(this)\"\n (change)=\"handleChange(model())\"\n #entryComponent\n ngDefaultControl\n >\n @for (element of elements(); track getValue(element)) {\n <option\n [ngValue]=\"getValue(element)\"\n [attr.selected]=\"\n isElementSelected(element) ? 'selected' : null\n \"\n [attr.aria-selected]=\"isElementSelected(element)\"\n [disabled]=\"getDisabled(element)\"\n >\n {{ getLabel(element) }}\n </option>\n }\n </select>\n }\n</div>\n", styles: [".form-group select{appearance:none}\n"] }]
6240
+ ], template: "<div\n class=\"form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <div class=\"d-flex justify-content-between\">\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 {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n }\n </label>\n }\n @if (!!helpModal()) {\n <foehn-help-modal\n class=\"removePaddingButton\"\n [modalContent]=\"helpModal()\"\n />\n }\n </div>\n\n <foehn-validation-alerts [component]=\"this\" />\n\n @if (hasMissingModelValue()) {\n @for (missingValue of missingModelValues(); track $index) {\n <p\n class=\"alert alert-warning\"\n role=\"alert\"\n [attr.id]=\"buildId('MissingValue') + $index\"\n >\n {{\n 'foehn-checkable-group.missing-value.warning'\n | fromDictionary\n : { value: getMissingValueLabel(missingValue) }\n }}\n </p>\n }\n }\n\n @if (!elements()) {\n <div>Chargement...</div>\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 <ng-content />\n\n @if (!multiple()) {\n <select\n [class.is-invalid]=\"\n hasErrorsToDisplay() || hasInheritErrorFromParent()\n \"\n class=\"form-select\"\n [name]=\"name() || label()\"\n [attr.id]=\"buildChildId()\"\n [disabled]=\"disabled()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required() || null\"\n [attr.autocomplete]=\"getAutoComplete()\"\n [ngModel]=\"model()\"\n (ngModelChange)=\"updateNgModel($event)\"\n [compareWith]=\"compareFn.bind(this)\"\n (change)=\"handleChange(model())\"\n #entryComponent\n ngDefaultControl\n >\n @if (showEmptyOption()) {\n <option [ngValue]=\"null\">\n <!-- empty option displayed even if required=true as long as there's no model to fix https://github.com/angular/angular/issues/14505 -->\n </option>\n }\n @if (!required()) {\n <option [ngValue]=\"null\">\n {{ noSelectionLabel() | fromDictionary }}\n </option>\n }\n @for (element of elements(); track getValue(element)) {\n <option\n [ngValue]=\"getValue(element)\"\n [attr.selected]=\"\n isElementSelected(element) ? 'selected' : null\n \"\n [disabled]=\"getDisabled(element)\"\n >\n {{ getLabel(element) }}\n </option>\n }\n </select>\n }\n @if (multiple()) {\n <select\n multiple\n [attr.aria-multiselectable]=\"true\"\n [class.is-invalid]=\"\n hasErrorsToDisplay() || hasInheritErrorFromParent()\n \"\n class=\"form-select\"\n [name]=\"name() || label()\"\n [attr.id]=\"buildChildId()\"\n [disabled]=\"disabled()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required() || null\"\n [ngModel]=\"model()\"\n (ngModelChange)=\"updateNgModel($event)\"\n [compareWith]=\"compareFn.bind(this)\"\n (change)=\"handleChange(model())\"\n #entryComponent\n ngDefaultControl\n >\n @for (element of elements(); track getValue(element)) {\n <option\n [ngValue]=\"getValue(element)\"\n [attr.selected]=\"\n isElementSelected(element) ? 'selected' : null\n \"\n [attr.aria-selected]=\"isElementSelected(element)\"\n [disabled]=\"getDisabled(element)\"\n >\n {{ getLabel(element) }}\n </option>\n }\n </select>\n }\n</div>\n", styles: [".form-group select{appearance:none}\n"] }]
6176
6241
  }], propDecorators: { multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], noSelectionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "noSelectionLabel", required: false }] }] } });
6177
6242
 
6178
6243
  class FoehnDropdownMenuComponent {
@@ -8119,6 +8184,9 @@ class FoehnAutocompleteComponent extends FoehnCheckableGroupComponent {
8119
8184
  });
8120
8185
  }
8121
8186
  }
8187
+ detectMissingModelValues() {
8188
+ return !this.allowCustomValue() && !this.isSuggestionListDynamic();
8189
+ }
8122
8190
  clearOnBlurTimeout() {
8123
8191
  if (this.currentBlurTimer) {
8124
8192
  clearTimeout(this.currentBlurTimer);
@@ -9013,7 +9081,7 @@ class FoehnCheckboxComponent extends FoehnCheckableGroupComponent {
9013
9081
  provide: FoehnInputComponent,
9014
9082
  useExisting: forwardRef(() => FoehnCheckboxComponent),
9015
9083
  },
9016
- ], usesInheritance: true, ngImport: i0, template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset class=\"form-group\" [attr.aria-describedby]=\"getDescribedBy()\">\n <div class=\"d-flex justify-content-between\">\n @if (!!label()) {\n <legend\n [class.visually-hidden]=\"isLabelSrOnly()\"\n [class.vd-p]=\"!isLabelSrOnly()\"\n >\n <span [innerHTML]=\"label()\"></span>\n @if (!required() && !hideNotRequiredExtraLabel()) {\n <span aria-hidden=\"true\">\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n }\n </legend>\n }\n @if (!!helpModal()) {\n <foehn-help-modal\n class=\"removePaddingButton\"\n [modalContent]=\"helpModal()\"\n />\n }\n </div>\n\n <foehn-validation-alerts [component]=\"this\" />\n\n @if (!elements()) {\n <div>Chargement...</div>\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 <ng-content />\n\n @for (\n elementsGroup of groupedElements;\n track $index;\n let groupIndex = $index\n ) {\n <div>\n <!-- TODO remove aria-hidden and make this accessible -->\n @if (!!elementsGroup.groupTitle) {\n <div\n class=\"pt-2 fw-bold\"\n [attr.id]=\"'checkGroup_' + groupIndex\"\n aria-hidden=\"true\"\n >\n {{ elementsGroup.groupTitle | fromDictionary }}\n </div>\n }\n @for (\n element of elementsGroup.elements;\n track getValue(element);\n let i = $index\n ) {\n <div\n [class.disabled]=\"getDisabled(element)\"\n class=\"form-check\"\n >\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [value]=\"getValue(element)\"\n [ngModel]=\"isElementSelected(element)\"\n (ngModelChange)=\"onCheck(element, $event)\"\n [name]=\"buildChildName('' + groupIndex + '_' + i)\"\n [attr.name]=\"\n buildChildName('' + groupIndex + '_' + i)\n \"\n [attr.id]=\"buildChildId() + groupIndex + '_' + i\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [disabled]=\"getDisabled(element)\"\n [attr.autocomplete]=\"getAutoComplete()\"\n (change)=\"handleChange(model())\"\n />\n <label\n class=\"form-check-label mb-0\"\n [for]=\"buildChildId() + groupIndex + '_' + i\"\n [innerHTML]=\"getLabel(element)\"\n ></label>\n </div>\n }\n </div>\n }\n </fieldset>\n</div>\n", dependencies: [{ kind: "component", type: FoehnHelpModalComponent, selector: "foehn-help-modal", inputs: ["modalContent", "draggable", "hideable"] }, { kind: "component", type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { 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: "pipe", type: SdkDictionaryPipe, name: "fromDictionary" }] }); }
9084
+ ], usesInheritance: true, ngImport: i0, template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset class=\"form-group\" [attr.aria-describedby]=\"getDescribedBy()\">\n <div class=\"d-flex justify-content-between\">\n @if (!!label()) {\n <legend\n [class.visually-hidden]=\"isLabelSrOnly()\"\n [class.vd-p]=\"!isLabelSrOnly()\"\n >\n <span [innerHTML]=\"label()\"></span>\n @if (!required() && !hideNotRequiredExtraLabel()) {\n <span aria-hidden=\"true\">\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n }\n </legend>\n }\n @if (!!helpModal()) {\n <foehn-help-modal\n class=\"removePaddingButton\"\n [modalContent]=\"helpModal()\"\n />\n }\n </div>\n\n <foehn-validation-alerts [component]=\"this\" />\n\n @if (hasMissingModelValue()) {\n @for (missingValue of missingModelValues(); track $index) {\n <p\n class=\"alert alert-warning\"\n role=\"alert\"\n [attr.id]=\"buildId('MissingValue') + $index\"\n >\n {{\n 'foehn-checkable-group.missing-value.warning'\n | fromDictionary\n : { value: getMissingValueLabel(missingValue) }\n }}\n </p>\n }\n }\n\n @if (!elements()) {\n <div>Chargement...</div>\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 <ng-content />\n\n @for (\n elementsGroup of groupedElements;\n track $index;\n let groupIndex = $index\n ) {\n <div>\n <!-- TODO remove aria-hidden and make this accessible -->\n @if (!!elementsGroup.groupTitle) {\n <div\n class=\"pt-2 fw-bold\"\n [attr.id]=\"'checkGroup_' + groupIndex\"\n aria-hidden=\"true\"\n >\n {{ elementsGroup.groupTitle | fromDictionary }}\n </div>\n }\n @for (\n element of elementsGroup.elements;\n track getValue(element);\n let i = $index\n ) {\n <div\n [class.disabled]=\"getDisabled(element)\"\n class=\"form-check\"\n >\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [value]=\"getValue(element)\"\n [ngModel]=\"isElementSelected(element)\"\n (ngModelChange)=\"onCheck(element, $event)\"\n [name]=\"buildChildName('' + groupIndex + '_' + i)\"\n [attr.name]=\"\n buildChildName('' + groupIndex + '_' + i)\n \"\n [attr.id]=\"buildChildId() + groupIndex + '_' + i\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [disabled]=\"getDisabled(element)\"\n [attr.autocomplete]=\"getAutoComplete()\"\n (change)=\"handleChange(model())\"\n />\n <label\n class=\"form-check-label mb-0\"\n [for]=\"buildChildId() + groupIndex + '_' + i\"\n [innerHTML]=\"getLabel(element)\"\n ></label>\n </div>\n }\n </div>\n }\n </fieldset>\n</div>\n", dependencies: [{ kind: "component", type: FoehnHelpModalComponent, selector: "foehn-help-modal", inputs: ["modalContent", "draggable", "hideable"] }, { kind: "component", type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { 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: "pipe", type: SdkDictionaryPipe, name: "fromDictionary" }] }); }
9017
9085
  }
9018
9086
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.21", ngImport: i0, type: FoehnCheckboxComponent, decorators: [{
9019
9087
  type: Component,
@@ -9027,7 +9095,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.21", ngImpo
9027
9095
  FoehnValidationAlertsComponent,
9028
9096
  FormsModule,
9029
9097
  SdkDictionaryPipe,
9030
- ], template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset class=\"form-group\" [attr.aria-describedby]=\"getDescribedBy()\">\n <div class=\"d-flex justify-content-between\">\n @if (!!label()) {\n <legend\n [class.visually-hidden]=\"isLabelSrOnly()\"\n [class.vd-p]=\"!isLabelSrOnly()\"\n >\n <span [innerHTML]=\"label()\"></span>\n @if (!required() && !hideNotRequiredExtraLabel()) {\n <span aria-hidden=\"true\">\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n }\n </legend>\n }\n @if (!!helpModal()) {\n <foehn-help-modal\n class=\"removePaddingButton\"\n [modalContent]=\"helpModal()\"\n />\n }\n </div>\n\n <foehn-validation-alerts [component]=\"this\" />\n\n @if (!elements()) {\n <div>Chargement...</div>\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 <ng-content />\n\n @for (\n elementsGroup of groupedElements;\n track $index;\n let groupIndex = $index\n ) {\n <div>\n <!-- TODO remove aria-hidden and make this accessible -->\n @if (!!elementsGroup.groupTitle) {\n <div\n class=\"pt-2 fw-bold\"\n [attr.id]=\"'checkGroup_' + groupIndex\"\n aria-hidden=\"true\"\n >\n {{ elementsGroup.groupTitle | fromDictionary }}\n </div>\n }\n @for (\n element of elementsGroup.elements;\n track getValue(element);\n let i = $index\n ) {\n <div\n [class.disabled]=\"getDisabled(element)\"\n class=\"form-check\"\n >\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [value]=\"getValue(element)\"\n [ngModel]=\"isElementSelected(element)\"\n (ngModelChange)=\"onCheck(element, $event)\"\n [name]=\"buildChildName('' + groupIndex + '_' + i)\"\n [attr.name]=\"\n buildChildName('' + groupIndex + '_' + i)\n \"\n [attr.id]=\"buildChildId() + groupIndex + '_' + i\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [disabled]=\"getDisabled(element)\"\n [attr.autocomplete]=\"getAutoComplete()\"\n (change)=\"handleChange(model())\"\n />\n <label\n class=\"form-check-label mb-0\"\n [for]=\"buildChildId() + groupIndex + '_' + i\"\n [innerHTML]=\"getLabel(element)\"\n ></label>\n </div>\n }\n </div>\n }\n </fieldset>\n</div>\n" }]
9098
+ ], template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset class=\"form-group\" [attr.aria-describedby]=\"getDescribedBy()\">\n <div class=\"d-flex justify-content-between\">\n @if (!!label()) {\n <legend\n [class.visually-hidden]=\"isLabelSrOnly()\"\n [class.vd-p]=\"!isLabelSrOnly()\"\n >\n <span [innerHTML]=\"label()\"></span>\n @if (!required() && !hideNotRequiredExtraLabel()) {\n <span aria-hidden=\"true\">\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n }\n </legend>\n }\n @if (!!helpModal()) {\n <foehn-help-modal\n class=\"removePaddingButton\"\n [modalContent]=\"helpModal()\"\n />\n }\n </div>\n\n <foehn-validation-alerts [component]=\"this\" />\n\n @if (hasMissingModelValue()) {\n @for (missingValue of missingModelValues(); track $index) {\n <p\n class=\"alert alert-warning\"\n role=\"alert\"\n [attr.id]=\"buildId('MissingValue') + $index\"\n >\n {{\n 'foehn-checkable-group.missing-value.warning'\n | fromDictionary\n : { value: getMissingValueLabel(missingValue) }\n }}\n </p>\n }\n }\n\n @if (!elements()) {\n <div>Chargement...</div>\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 <ng-content />\n\n @for (\n elementsGroup of groupedElements;\n track $index;\n let groupIndex = $index\n ) {\n <div>\n <!-- TODO remove aria-hidden and make this accessible -->\n @if (!!elementsGroup.groupTitle) {\n <div\n class=\"pt-2 fw-bold\"\n [attr.id]=\"'checkGroup_' + groupIndex\"\n aria-hidden=\"true\"\n >\n {{ elementsGroup.groupTitle | fromDictionary }}\n </div>\n }\n @for (\n element of elementsGroup.elements;\n track getValue(element);\n let i = $index\n ) {\n <div\n [class.disabled]=\"getDisabled(element)\"\n class=\"form-check\"\n >\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [value]=\"getValue(element)\"\n [ngModel]=\"isElementSelected(element)\"\n (ngModelChange)=\"onCheck(element, $event)\"\n [name]=\"buildChildName('' + groupIndex + '_' + i)\"\n [attr.name]=\"\n buildChildName('' + groupIndex + '_' + i)\n \"\n [attr.id]=\"buildChildId() + groupIndex + '_' + i\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [disabled]=\"getDisabled(element)\"\n [attr.autocomplete]=\"getAutoComplete()\"\n (change)=\"handleChange(model())\"\n />\n <label\n class=\"form-check-label mb-0\"\n [for]=\"buildChildId() + groupIndex + '_' + i\"\n [innerHTML]=\"getLabel(element)\"\n ></label>\n </div>\n }\n </div>\n }\n </fieldset>\n</div>\n" }]
9031
9099
  }] });
9032
9100
 
9033
9101
  class FoehnRadioComponent extends FoehnCheckableGroupComponent {
@@ -9097,7 +9165,7 @@ class FoehnRadioComponent extends FoehnCheckableGroupComponent {
9097
9165
  provide: FoehnInputComponent,
9098
9166
  useExisting: forwardRef(() => FoehnRadioComponent),
9099
9167
  },
9100
- ], usesInheritance: true, ngImport: i0, template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset class=\"form-group\" [attr.aria-describedby]=\"getDescribedBy()\">\n <div class=\"d-flex justify-content-between\">\n @if (!!label()) {\n <legend\n [class.visually-hidden]=\"isLabelSrOnly()\"\n [class.vd-p]=\"!isLabelSrOnly()\"\n >\n <span [innerHTML]=\"label()\"></span>\n @if (!required() && !hideNotRequiredExtraLabel()) {\n <span aria-hidden=\"true\">\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n }\n </legend>\n }\n @if (!!helpModal()) {\n <foehn-help-modal\n class=\"removePaddingButton\"\n [modalContent]=\"helpModal()\"\n />\n }\n </div>\n\n <foehn-validation-alerts [component]=\"this\" />\n\n @if (!elements()) {\n <div>Chargement...</div>\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 <ng-content />\n @for (\n elementsGroup of groupedElements;\n track $index;\n let groupIndex = $index\n ) {\n <div>\n <!-- TODO remove aria-hidden and make this accessible -->\n @if (!!elementsGroup.groupTitle) {\n <div\n class=\"pt-2 fw-bold\"\n [attr.id]=\"'checkGroup_' + groupIndex\"\n aria-hidden=\"true\"\n >\n {{ elementsGroup.groupTitle | fromDictionary }}\n </div>\n }\n @for (\n element of elementsGroup.elements;\n track getValueOrObject(element);\n let i = $index\n ) {\n <div\n [class.disabled]=\"getDisabled(element)\"\n class=\"form-check\"\n >\n <input\n class=\"form-check-input\"\n type=\"radio\"\n [value]=\"getValueOrObject(element)\"\n [ngModel]=\"inputValue\"\n (ngModelChange)=\"onCheck(element, $event)\"\n [name]=\"buildChildName()\"\n [attr.name]=\"buildChildName()\"\n [attr.id]=\"buildChildId() + groupIndex + '_' + i\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.disabled]=\"\n getDisabled(element) ? 'disabled' : null\n \"\n [attr.autocomplete]=\"getAutoComplete()\"\n (change)=\"handleChange(getValue(element))\"\n />\n <label\n class=\"form-check-label mb-0\"\n [for]=\"buildChildId() + groupIndex + '_' + i\"\n [innerHTML]=\"getLabel(element)\"\n ></label>\n </div>\n }\n </div>\n }\n </fieldset>\n</div>\n", dependencies: [{ kind: "component", type: FoehnHelpModalComponent, selector: "foehn-help-modal", inputs: ["modalContent", "draggable", "hideable"] }, { 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.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { 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: "pipe", type: SdkDictionaryPipe, name: "fromDictionary" }] }); }
9168
+ ], usesInheritance: true, ngImport: i0, template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset class=\"form-group\" [attr.aria-describedby]=\"getDescribedBy()\">\n <div class=\"d-flex justify-content-between\">\n @if (!!label()) {\n <legend\n [class.visually-hidden]=\"isLabelSrOnly()\"\n [class.vd-p]=\"!isLabelSrOnly()\"\n >\n <span [innerHTML]=\"label()\"></span>\n @if (!required() && !hideNotRequiredExtraLabel()) {\n <span aria-hidden=\"true\">\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n }\n </legend>\n }\n @if (!!helpModal()) {\n <foehn-help-modal\n class=\"removePaddingButton\"\n [modalContent]=\"helpModal()\"\n />\n }\n </div>\n\n <foehn-validation-alerts [component]=\"this\" />\n\n @if (hasMissingModelValue()) {\n @for (missingValue of missingModelValues(); track $index) {\n <p\n class=\"alert alert-warning\"\n role=\"alert\"\n [attr.id]=\"buildId('MissingValue') + $index\"\n >\n {{\n 'foehn-checkable-group.missing-value.warning'\n | fromDictionary\n : { value: getMissingValueLabel(missingValue) }\n }}\n </p>\n }\n }\n\n @if (!elements()) {\n <div>Chargement...</div>\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 <ng-content />\n @for (\n elementsGroup of groupedElements;\n track $index;\n let groupIndex = $index\n ) {\n <div>\n <!-- TODO remove aria-hidden and make this accessible -->\n @if (!!elementsGroup.groupTitle) {\n <div\n class=\"pt-2 fw-bold\"\n [attr.id]=\"'checkGroup_' + groupIndex\"\n aria-hidden=\"true\"\n >\n {{ elementsGroup.groupTitle | fromDictionary }}\n </div>\n }\n @for (\n element of elementsGroup.elements;\n track getValueOrObject(element);\n let i = $index\n ) {\n <div\n [class.disabled]=\"getDisabled(element)\"\n class=\"form-check\"\n >\n <input\n class=\"form-check-input\"\n type=\"radio\"\n [value]=\"getValueOrObject(element)\"\n [ngModel]=\"inputValue\"\n (ngModelChange)=\"onCheck(element, $event)\"\n [name]=\"buildChildName()\"\n [attr.name]=\"buildChildName()\"\n [attr.id]=\"buildChildId() + groupIndex + '_' + i\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.disabled]=\"\n getDisabled(element) ? 'disabled' : null\n \"\n [attr.autocomplete]=\"getAutoComplete()\"\n (change)=\"handleChange(getValue(element))\"\n />\n <label\n class=\"form-check-label mb-0\"\n [for]=\"buildChildId() + groupIndex + '_' + i\"\n [innerHTML]=\"getLabel(element)\"\n ></label>\n </div>\n }\n </div>\n }\n </fieldset>\n</div>\n", dependencies: [{ kind: "component", type: FoehnHelpModalComponent, selector: "foehn-help-modal", inputs: ["modalContent", "draggable", "hideable"] }, { 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.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { 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: "pipe", type: SdkDictionaryPipe, name: "fromDictionary" }] }); }
9101
9169
  }
9102
9170
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.21", ngImport: i0, type: FoehnRadioComponent, decorators: [{
9103
9171
  type: Component,
@@ -9111,7 +9179,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.21", ngImpo
9111
9179
  FoehnValidationAlertsComponent,
9112
9180
  FormsModule,
9113
9181
  SdkDictionaryPipe,
9114
- ], template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset class=\"form-group\" [attr.aria-describedby]=\"getDescribedBy()\">\n <div class=\"d-flex justify-content-between\">\n @if (!!label()) {\n <legend\n [class.visually-hidden]=\"isLabelSrOnly()\"\n [class.vd-p]=\"!isLabelSrOnly()\"\n >\n <span [innerHTML]=\"label()\"></span>\n @if (!required() && !hideNotRequiredExtraLabel()) {\n <span aria-hidden=\"true\">\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n }\n </legend>\n }\n @if (!!helpModal()) {\n <foehn-help-modal\n class=\"removePaddingButton\"\n [modalContent]=\"helpModal()\"\n />\n }\n </div>\n\n <foehn-validation-alerts [component]=\"this\" />\n\n @if (!elements()) {\n <div>Chargement...</div>\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 <ng-content />\n @for (\n elementsGroup of groupedElements;\n track $index;\n let groupIndex = $index\n ) {\n <div>\n <!-- TODO remove aria-hidden and make this accessible -->\n @if (!!elementsGroup.groupTitle) {\n <div\n class=\"pt-2 fw-bold\"\n [attr.id]=\"'checkGroup_' + groupIndex\"\n aria-hidden=\"true\"\n >\n {{ elementsGroup.groupTitle | fromDictionary }}\n </div>\n }\n @for (\n element of elementsGroup.elements;\n track getValueOrObject(element);\n let i = $index\n ) {\n <div\n [class.disabled]=\"getDisabled(element)\"\n class=\"form-check\"\n >\n <input\n class=\"form-check-input\"\n type=\"radio\"\n [value]=\"getValueOrObject(element)\"\n [ngModel]=\"inputValue\"\n (ngModelChange)=\"onCheck(element, $event)\"\n [name]=\"buildChildName()\"\n [attr.name]=\"buildChildName()\"\n [attr.id]=\"buildChildId() + groupIndex + '_' + i\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.disabled]=\"\n getDisabled(element) ? 'disabled' : null\n \"\n [attr.autocomplete]=\"getAutoComplete()\"\n (change)=\"handleChange(getValue(element))\"\n />\n <label\n class=\"form-check-label mb-0\"\n [for]=\"buildChildId() + groupIndex + '_' + i\"\n [innerHTML]=\"getLabel(element)\"\n ></label>\n </div>\n }\n </div>\n }\n </fieldset>\n</div>\n" }]
9182
+ ], template: "<div\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset class=\"form-group\" [attr.aria-describedby]=\"getDescribedBy()\">\n <div class=\"d-flex justify-content-between\">\n @if (!!label()) {\n <legend\n [class.visually-hidden]=\"isLabelSrOnly()\"\n [class.vd-p]=\"!isLabelSrOnly()\"\n >\n <span [innerHTML]=\"label()\"></span>\n @if (!required() && !hideNotRequiredExtraLabel()) {\n <span aria-hidden=\"true\">\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n }\n </legend>\n }\n @if (!!helpModal()) {\n <foehn-help-modal\n class=\"removePaddingButton\"\n [modalContent]=\"helpModal()\"\n />\n }\n </div>\n\n <foehn-validation-alerts [component]=\"this\" />\n\n @if (hasMissingModelValue()) {\n @for (missingValue of missingModelValues(); track $index) {\n <p\n class=\"alert alert-warning\"\n role=\"alert\"\n [attr.id]=\"buildId('MissingValue') + $index\"\n >\n {{\n 'foehn-checkable-group.missing-value.warning'\n | fromDictionary\n : { value: getMissingValueLabel(missingValue) }\n }}\n </p>\n }\n }\n\n @if (!elements()) {\n <div>Chargement...</div>\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 <ng-content />\n @for (\n elementsGroup of groupedElements;\n track $index;\n let groupIndex = $index\n ) {\n <div>\n <!-- TODO remove aria-hidden and make this accessible -->\n @if (!!elementsGroup.groupTitle) {\n <div\n class=\"pt-2 fw-bold\"\n [attr.id]=\"'checkGroup_' + groupIndex\"\n aria-hidden=\"true\"\n >\n {{ elementsGroup.groupTitle | fromDictionary }}\n </div>\n }\n @for (\n element of elementsGroup.elements;\n track getValueOrObject(element);\n let i = $index\n ) {\n <div\n [class.disabled]=\"getDisabled(element)\"\n class=\"form-check\"\n >\n <input\n class=\"form-check-input\"\n type=\"radio\"\n [value]=\"getValueOrObject(element)\"\n [ngModel]=\"inputValue\"\n (ngModelChange)=\"onCheck(element, $event)\"\n [name]=\"buildChildName()\"\n [attr.name]=\"buildChildName()\"\n [attr.id]=\"buildChildId() + groupIndex + '_' + i\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.disabled]=\"\n getDisabled(element) ? 'disabled' : null\n \"\n [attr.autocomplete]=\"getAutoComplete()\"\n (change)=\"handleChange(getValue(element))\"\n />\n <label\n class=\"form-check-label mb-0\"\n [for]=\"buildChildId() + groupIndex + '_' + i\"\n [innerHTML]=\"getLabel(element)\"\n ></label>\n </div>\n }\n </div>\n }\n </fieldset>\n</div>\n" }]
9115
9183
  }] });
9116
9184
 
9117
9185
  class FormSelectOption {
@@ -9373,7 +9441,7 @@ class FoehnMultiselectAutocompleteComponent extends FoehnAutocompleteComponent {
9373
9441
  provide: FoehnAutocompleteComponent,
9374
9442
  useExisting: forwardRef(() => FoehnMultiselectAutocompleteComponent),
9375
9443
  },
9376
- ], viewQueries: [{ propertyName: "autocompleteComponent", first: true, predicate: ["autocompleteComponent"], descendants: true, isSignal: true }, { propertyName: "alertMessageContainer", first: true, predicate: ["alertMessageContainer"], descendants: true, isSignal: true }, { propertyName: "selectedElemRef", predicate: ["selectedElemRef"], descendants: true, isSignal: true }, { propertyName: "defaultElemRef", predicate: ["defaultElemRef"], descendants: true, isSignal: true }, { propertyName: "defaultDeleteFocusArea", first: true, predicate: ["defaultDeleteFocusArea"], descendants: true, isSignal: true }], 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>\n <foehn-autocomplete\n #autocompleteComponent\n [name]=\"name()\"\n [label]=\"label()\"\n [elements]=\"elements()\"\n [elementsUrl]=\"elementsUrl()\"\n [elementValue]=\"elementValue()\"\n [elementLabel]=\"elementLabel()\"\n [elementSuggestionLabel]=\"elementSuggestionLabel()\"\n [elementValueIdentity]=\"elementValueIdentity()\"\n [elementDisabled]=\"elementDisabled()\"\n [elementGroup]=\"elementGroup()\"\n [allowCustomValue]=\"false\"\n [searchValueMinCharsCount]=\"searchValueMinCharsCount()\"\n [customValueModelGenerator]=\"customValueModelGenerator()\"\n [required]=\"required()\"\n [disabled]=\"disabled()\"\n (userInput)=\"addItem($event)\"\n [(model)]=\"autocompleteInputValue\"\n (elementsLoaded)=\"onAutocompleteElementsLoaded($event)\"\n [showErrorWhenDisabled]=\"showErrorWhenDisabled()\"\n [hideNotRequiredExtraLabel]=\"hideNotRequiredExtraLabel()\"\n [itemHeightInSuggestionListInPx]=\"itemHeightInSuggestionListInPx()\"\n [caseSensitiveSearch]=\"caseSensitiveSearch()\"\n [isLabelSrOnly]=\"isLabelSrOnly()\"\n [isSuggestionListDynamic]=\"isSuggestionListDynamic()\"\n >\n @if (!showEmptyListMessage) {\n <small\n [attr.id]=\"buildChildId('Help')\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"\n helpText()\n ? helpText()\n : ('foehn-multiselect-autocomplete.autocomplete.screen-reader.label'\n | fromDictionary)\n \"\n ></small>\n }\n\n <ng-content />\n\n <div\n [id]=\"buildChildId('AlertMessageContainer')\"\n role=\"status\"\n #alertMessageContainer\n >\n @if (showEmptyListMessage) {\n <p class=\"alert alert-info mb-0\" tabindex=\"0\">\n {{\n 'foehn-multiselect-autocomplete.autocomplete.empty-message'\n | fromDictionary\n }}\n </p>\n }\n </div>\n </foehn-autocomplete>\n\n <div class=\"selected-list-container pt-2\" tabindex=\"-1\">\n @if (hasDefaultDeleteFocusArea()) {\n <small\n class=\"form-text text-secondary my-0\"\n [tabindex]=\"0\"\n [innerHTML]=\"noElementsSelectedLabel() | fromDictionary\"\n #defaultDeleteFocusArea\n ></small>\n }\n\n <p\n [id]=\"buildChildId('srOnlyAnnouncements')\"\n class=\"visually-hidden\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {{ srAnnouncements }}\n </p>\n\n @if (!!model()?.length) {\n <fieldset\n class=\"mb-0\"\n [attr.aria-describedby]=\"buildChildId('Label')\"\n >\n <legend\n [id]=\"buildChildId('Legend')\"\n class=\"form-text text-secondary small mb-0\"\n [innerHTML]=\"selectedItemsListLegend() | fromDictionary\"\n ></legend>\n <div\n class=\"selected-list d-flex align-content-stretch flex-wrap\"\n >\n @for (\n element of model();\n track trackByFn(index);\n let index = $index\n ) {\n @if (!canBeDeleted(index)) {\n <span\n class=\"badge rounded-pill bg-secondary me-1 mb-1 py-2 px-3 d-flex align-items-center\"\n [tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-describedby]=\"buildChildId('Legend')\"\n #defaultElemRef\n >\n <span\n [innerHTML]=\"getBadgeLabel(element)\"\n ></span>\n <span class=\"visually-hidden\">\n {{\n 'foehn-multiselect-autocomplete.sr-default-selected-element'\n | fromDictionary\n }}\n </span>\n </span>\n }\n @if (canBeDeleted(index)) {\n <button\n type=\"button\"\n class=\"btn btn-primary badge rounded-pill me-1 mb-1 py-2 px-3 d-flex align-items-center\"\n [tabindex]=\"0\"\n [attr.aria-label]=\"\n getDeleteButtonAriaLabel(element)\n \"\n [attr.aria-describedby]=\"buildChildId('Legend')\"\n [title]=\"getDeleteButtonAriaLabel(element)\"\n (click)=\"removeItem(element, index)\"\n #selectedElemRef\n >\n <span\n [innerHTML]=\"getBadgeLabel(element)\"\n ></span>\n <foehn-icon-times\n aria-hidden=\"true\"\n class=\"ms-2\"\n [title]=\"getDeleteButtonAriaLabel(element)\"\n />\n </button>\n }\n }\n </div>\n </fieldset>\n }\n </div>\n</div>\n", styles: ["foehn-autocomplete p.alert:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem var(--vd-focus)}:host ::ng-deep foehn-autocomplete .form-group{margin-bottom:0!important}.selected-list-container .btn{text-transform:none}:host ::ng-deep .btn .svg-inline--fa,:host ::ng-deep .btn a{color:#fff!important}.selected-list-container span.rounded-pill:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem var(--vd-focus)}.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}:host ::ng-deep foehn-autocomplete div.vd-form-group-danger{border-left:0;padding-left:0}\n"], dependencies: [{ kind: "component", type: FoehnAutocompleteComponent, selector: "foehn-autocomplete", inputs: ["searchValueMinCharsCount", "allowCustomValue", "isSuggestionListDynamic", "customValueModelGenerator", "itemHeightInSuggestionListInPx", "elementSuggestionLabel", "caseSensitiveSearch"], outputs: ["userSearchInput"] }, { kind: "component", type: FoehnIconTimesComponent, selector: "foehn-icon-times" }, { kind: "pipe", type: SdkDictionaryPipe, name: "fromDictionary" }] }); }
9444
+ ], viewQueries: [{ propertyName: "autocompleteComponent", first: true, predicate: ["autocompleteComponent"], descendants: true, isSignal: true }, { propertyName: "alertMessageContainer", first: true, predicate: ["alertMessageContainer"], descendants: true, isSignal: true }, { propertyName: "selectedElemRef", predicate: ["selectedElemRef"], descendants: true, isSignal: true }, { propertyName: "defaultElemRef", predicate: ["defaultElemRef"], descendants: true, isSignal: true }, { propertyName: "defaultDeleteFocusArea", first: true, predicate: ["defaultDeleteFocusArea"], descendants: true, isSignal: true }], 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>\n <foehn-autocomplete\n #autocompleteComponent\n [name]=\"name()\"\n [label]=\"label()\"\n [elements]=\"elements()\"\n [elementsUrl]=\"elementsUrl()\"\n [elementValue]=\"elementValue()\"\n [elementLabel]=\"elementLabel()\"\n [elementSuggestionLabel]=\"elementSuggestionLabel()\"\n [elementValueIdentity]=\"elementValueIdentity()\"\n [elementDisabled]=\"elementDisabled()\"\n [elementGroup]=\"elementGroup()\"\n [allowCustomValue]=\"false\"\n [searchValueMinCharsCount]=\"searchValueMinCharsCount()\"\n [customValueModelGenerator]=\"customValueModelGenerator()\"\n [required]=\"required()\"\n [disabled]=\"disabled()\"\n (userInput)=\"addItem($event)\"\n [(model)]=\"autocompleteInputValue\"\n (elementsLoaded)=\"onAutocompleteElementsLoaded($event)\"\n [showErrorWhenDisabled]=\"showErrorWhenDisabled()\"\n [hideNotRequiredExtraLabel]=\"hideNotRequiredExtraLabel()\"\n [itemHeightInSuggestionListInPx]=\"itemHeightInSuggestionListInPx()\"\n [caseSensitiveSearch]=\"caseSensitiveSearch()\"\n [isLabelSrOnly]=\"isLabelSrOnly()\"\n [isSuggestionListDynamic]=\"isSuggestionListDynamic()\"\n >\n @if (!showEmptyListMessage) {\n <small\n [attr.id]=\"buildChildId('Help')\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"\n helpText()\n ? helpText()\n : ('foehn-multiselect-autocomplete.autocomplete.screen-reader.label'\n | fromDictionary)\n \"\n ></small>\n }\n\n <ng-content />\n\n <div\n [id]=\"buildChildId('AlertMessageContainer')\"\n role=\"status\"\n #alertMessageContainer\n >\n @if (showEmptyListMessage) {\n <p class=\"alert alert-info mb-0\" tabindex=\"0\">\n {{\n 'foehn-multiselect-autocomplete.autocomplete.empty-message'\n | fromDictionary\n }}\n </p>\n }\n </div>\n </foehn-autocomplete>\n\n <div class=\"selected-list-container pt-2\" tabindex=\"-1\">\n @if (hasDefaultDeleteFocusArea()) {\n <small\n class=\"form-text text-secondary my-0\"\n [tabindex]=\"0\"\n [innerHTML]=\"noElementsSelectedLabel() | fromDictionary\"\n #defaultDeleteFocusArea\n ></small>\n }\n\n <p\n [id]=\"buildChildId('srOnlyAnnouncements')\"\n class=\"visually-hidden\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {{ srAnnouncements }}\n </p>\n\n @if (!!model()?.length) {\n <fieldset\n class=\"mb-0\"\n [attr.aria-describedby]=\"buildChildId('Label')\"\n >\n <legend\n [id]=\"buildChildId('Legend')\"\n class=\"form-text text-secondary small mb-0\"\n [innerHTML]=\"selectedItemsListLegend() | fromDictionary\"\n ></legend>\n <div\n class=\"selected-list d-flex align-content-stretch flex-wrap\"\n >\n @for (\n element of model();\n track trackByFn(index);\n let index = $index\n ) {\n @if (!canBeDeleted(index)) {\n <span\n class=\"badge rounded-pill bg-secondary me-1 mb-1 py-2 px-3 d-flex align-items-center\"\n [tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-describedby]=\"buildChildId('Legend')\"\n #defaultElemRef\n >\n <span\n [innerHTML]=\"getBadgeLabel(element)\"\n ></span>\n <span class=\"visually-hidden\">\n {{\n 'foehn-multiselect-autocomplete.sr-default-selected-element'\n | fromDictionary\n }}\n </span>\n </span>\n }\n @if (canBeDeleted(index)) {\n <button\n type=\"button\"\n class=\"btn btn-primary badge rounded-pill me-1 mb-1 py-2 px-3 d-flex align-items-center\"\n [tabindex]=\"0\"\n [attr.aria-label]=\"\n getDeleteButtonAriaLabel(element)\n \"\n [attr.aria-describedby]=\"buildChildId('Legend')\"\n [title]=\"getDeleteButtonAriaLabel(element)\"\n (click)=\"removeItem(element, index)\"\n #selectedElemRef\n >\n <span\n [innerHTML]=\"getBadgeLabel(element)\"\n ></span>\n <foehn-icon-times\n aria-hidden=\"true\"\n class=\"ms-2\"\n [title]=\"getDeleteButtonAriaLabel(element)\"\n />\n </button>\n }\n }\n </div>\n </fieldset>\n }\n </div>\n\n @if (hasMissingModelValue()) {\n @for (missingValue of missingModelValues(); track $index) {\n <p\n class=\"alert alert-warning\"\n role=\"alert\"\n [attr.id]=\"buildId('MissingValue') + $index\"\n >\n {{\n 'foehn-checkable-group.missing-value.warning'\n | fromDictionary\n : { value: getMissingValueLabel(missingValue) }\n }}\n </p>\n }\n }\n</div>\n", styles: ["foehn-autocomplete p.alert:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem var(--vd-focus)}:host ::ng-deep foehn-autocomplete .form-group{margin-bottom:0!important}.selected-list-container .btn{text-transform:none}:host ::ng-deep .btn .svg-inline--fa,:host ::ng-deep .btn a{color:#fff!important}.selected-list-container span.rounded-pill:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem var(--vd-focus)}.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}:host ::ng-deep foehn-autocomplete div.vd-form-group-danger{border-left:0;padding-left:0}\n"], dependencies: [{ kind: "component", type: FoehnAutocompleteComponent, selector: "foehn-autocomplete", inputs: ["searchValueMinCharsCount", "allowCustomValue", "isSuggestionListDynamic", "customValueModelGenerator", "itemHeightInSuggestionListInPx", "elementSuggestionLabel", "caseSensitiveSearch"], outputs: ["userSearchInput"] }, { kind: "component", type: FoehnIconTimesComponent, selector: "foehn-icon-times" }, { kind: "pipe", type: SdkDictionaryPipe, name: "fromDictionary" }] }); }
9377
9445
  }
9378
9446
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.21", ngImport: i0, type: FoehnMultiselectAutocompleteComponent, decorators: [{
9379
9447
  type: Component,
@@ -9392,7 +9460,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.21", ngImpo
9392
9460
  SdkDictionaryPipe,
9393
9461
  ], host: {
9394
9462
  '[attr.name]': 'hostName',
9395
- }, template: "<div\n class=\"form-group container-box\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n>\n <foehn-autocomplete\n #autocompleteComponent\n [name]=\"name()\"\n [label]=\"label()\"\n [elements]=\"elements()\"\n [elementsUrl]=\"elementsUrl()\"\n [elementValue]=\"elementValue()\"\n [elementLabel]=\"elementLabel()\"\n [elementSuggestionLabel]=\"elementSuggestionLabel()\"\n [elementValueIdentity]=\"elementValueIdentity()\"\n [elementDisabled]=\"elementDisabled()\"\n [elementGroup]=\"elementGroup()\"\n [allowCustomValue]=\"false\"\n [searchValueMinCharsCount]=\"searchValueMinCharsCount()\"\n [customValueModelGenerator]=\"customValueModelGenerator()\"\n [required]=\"required()\"\n [disabled]=\"disabled()\"\n (userInput)=\"addItem($event)\"\n [(model)]=\"autocompleteInputValue\"\n (elementsLoaded)=\"onAutocompleteElementsLoaded($event)\"\n [showErrorWhenDisabled]=\"showErrorWhenDisabled()\"\n [hideNotRequiredExtraLabel]=\"hideNotRequiredExtraLabel()\"\n [itemHeightInSuggestionListInPx]=\"itemHeightInSuggestionListInPx()\"\n [caseSensitiveSearch]=\"caseSensitiveSearch()\"\n [isLabelSrOnly]=\"isLabelSrOnly()\"\n [isSuggestionListDynamic]=\"isSuggestionListDynamic()\"\n >\n @if (!showEmptyListMessage) {\n <small\n [attr.id]=\"buildChildId('Help')\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"\n helpText()\n ? helpText()\n : ('foehn-multiselect-autocomplete.autocomplete.screen-reader.label'\n | fromDictionary)\n \"\n ></small>\n }\n\n <ng-content />\n\n <div\n [id]=\"buildChildId('AlertMessageContainer')\"\n role=\"status\"\n #alertMessageContainer\n >\n @if (showEmptyListMessage) {\n <p class=\"alert alert-info mb-0\" tabindex=\"0\">\n {{\n 'foehn-multiselect-autocomplete.autocomplete.empty-message'\n | fromDictionary\n }}\n </p>\n }\n </div>\n </foehn-autocomplete>\n\n <div class=\"selected-list-container pt-2\" tabindex=\"-1\">\n @if (hasDefaultDeleteFocusArea()) {\n <small\n class=\"form-text text-secondary my-0\"\n [tabindex]=\"0\"\n [innerHTML]=\"noElementsSelectedLabel() | fromDictionary\"\n #defaultDeleteFocusArea\n ></small>\n }\n\n <p\n [id]=\"buildChildId('srOnlyAnnouncements')\"\n class=\"visually-hidden\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {{ srAnnouncements }}\n </p>\n\n @if (!!model()?.length) {\n <fieldset\n class=\"mb-0\"\n [attr.aria-describedby]=\"buildChildId('Label')\"\n >\n <legend\n [id]=\"buildChildId('Legend')\"\n class=\"form-text text-secondary small mb-0\"\n [innerHTML]=\"selectedItemsListLegend() | fromDictionary\"\n ></legend>\n <div\n class=\"selected-list d-flex align-content-stretch flex-wrap\"\n >\n @for (\n element of model();\n track trackByFn(index);\n let index = $index\n ) {\n @if (!canBeDeleted(index)) {\n <span\n class=\"badge rounded-pill bg-secondary me-1 mb-1 py-2 px-3 d-flex align-items-center\"\n [tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-describedby]=\"buildChildId('Legend')\"\n #defaultElemRef\n >\n <span\n [innerHTML]=\"getBadgeLabel(element)\"\n ></span>\n <span class=\"visually-hidden\">\n {{\n 'foehn-multiselect-autocomplete.sr-default-selected-element'\n | fromDictionary\n }}\n </span>\n </span>\n }\n @if (canBeDeleted(index)) {\n <button\n type=\"button\"\n class=\"btn btn-primary badge rounded-pill me-1 mb-1 py-2 px-3 d-flex align-items-center\"\n [tabindex]=\"0\"\n [attr.aria-label]=\"\n getDeleteButtonAriaLabel(element)\n \"\n [attr.aria-describedby]=\"buildChildId('Legend')\"\n [title]=\"getDeleteButtonAriaLabel(element)\"\n (click)=\"removeItem(element, index)\"\n #selectedElemRef\n >\n <span\n [innerHTML]=\"getBadgeLabel(element)\"\n ></span>\n <foehn-icon-times\n aria-hidden=\"true\"\n class=\"ms-2\"\n [title]=\"getDeleteButtonAriaLabel(element)\"\n />\n </button>\n }\n }\n </div>\n </fieldset>\n }\n </div>\n</div>\n", styles: ["foehn-autocomplete p.alert:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem var(--vd-focus)}:host ::ng-deep foehn-autocomplete .form-group{margin-bottom:0!important}.selected-list-container .btn{text-transform:none}:host ::ng-deep .btn .svg-inline--fa,:host ::ng-deep .btn a{color:#fff!important}.selected-list-container span.rounded-pill:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem var(--vd-focus)}.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}:host ::ng-deep foehn-autocomplete div.vd-form-group-danger{border-left:0;padding-left:0}\n"] }]
9463
+ }, template: "<div\n class=\"form-group container-box\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n>\n <foehn-autocomplete\n #autocompleteComponent\n [name]=\"name()\"\n [label]=\"label()\"\n [elements]=\"elements()\"\n [elementsUrl]=\"elementsUrl()\"\n [elementValue]=\"elementValue()\"\n [elementLabel]=\"elementLabel()\"\n [elementSuggestionLabel]=\"elementSuggestionLabel()\"\n [elementValueIdentity]=\"elementValueIdentity()\"\n [elementDisabled]=\"elementDisabled()\"\n [elementGroup]=\"elementGroup()\"\n [allowCustomValue]=\"false\"\n [searchValueMinCharsCount]=\"searchValueMinCharsCount()\"\n [customValueModelGenerator]=\"customValueModelGenerator()\"\n [required]=\"required()\"\n [disabled]=\"disabled()\"\n (userInput)=\"addItem($event)\"\n [(model)]=\"autocompleteInputValue\"\n (elementsLoaded)=\"onAutocompleteElementsLoaded($event)\"\n [showErrorWhenDisabled]=\"showErrorWhenDisabled()\"\n [hideNotRequiredExtraLabel]=\"hideNotRequiredExtraLabel()\"\n [itemHeightInSuggestionListInPx]=\"itemHeightInSuggestionListInPx()\"\n [caseSensitiveSearch]=\"caseSensitiveSearch()\"\n [isLabelSrOnly]=\"isLabelSrOnly()\"\n [isSuggestionListDynamic]=\"isSuggestionListDynamic()\"\n >\n @if (!showEmptyListMessage) {\n <small\n [attr.id]=\"buildChildId('Help')\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"\n helpText()\n ? helpText()\n : ('foehn-multiselect-autocomplete.autocomplete.screen-reader.label'\n | fromDictionary)\n \"\n ></small>\n }\n\n <ng-content />\n\n <div\n [id]=\"buildChildId('AlertMessageContainer')\"\n role=\"status\"\n #alertMessageContainer\n >\n @if (showEmptyListMessage) {\n <p class=\"alert alert-info mb-0\" tabindex=\"0\">\n {{\n 'foehn-multiselect-autocomplete.autocomplete.empty-message'\n | fromDictionary\n }}\n </p>\n }\n </div>\n </foehn-autocomplete>\n\n <div class=\"selected-list-container pt-2\" tabindex=\"-1\">\n @if (hasDefaultDeleteFocusArea()) {\n <small\n class=\"form-text text-secondary my-0\"\n [tabindex]=\"0\"\n [innerHTML]=\"noElementsSelectedLabel() | fromDictionary\"\n #defaultDeleteFocusArea\n ></small>\n }\n\n <p\n [id]=\"buildChildId('srOnlyAnnouncements')\"\n class=\"visually-hidden\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {{ srAnnouncements }}\n </p>\n\n @if (!!model()?.length) {\n <fieldset\n class=\"mb-0\"\n [attr.aria-describedby]=\"buildChildId('Label')\"\n >\n <legend\n [id]=\"buildChildId('Legend')\"\n class=\"form-text text-secondary small mb-0\"\n [innerHTML]=\"selectedItemsListLegend() | fromDictionary\"\n ></legend>\n <div\n class=\"selected-list d-flex align-content-stretch flex-wrap\"\n >\n @for (\n element of model();\n track trackByFn(index);\n let index = $index\n ) {\n @if (!canBeDeleted(index)) {\n <span\n class=\"badge rounded-pill bg-secondary me-1 mb-1 py-2 px-3 d-flex align-items-center\"\n [tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-describedby]=\"buildChildId('Legend')\"\n #defaultElemRef\n >\n <span\n [innerHTML]=\"getBadgeLabel(element)\"\n ></span>\n <span class=\"visually-hidden\">\n {{\n 'foehn-multiselect-autocomplete.sr-default-selected-element'\n | fromDictionary\n }}\n </span>\n </span>\n }\n @if (canBeDeleted(index)) {\n <button\n type=\"button\"\n class=\"btn btn-primary badge rounded-pill me-1 mb-1 py-2 px-3 d-flex align-items-center\"\n [tabindex]=\"0\"\n [attr.aria-label]=\"\n getDeleteButtonAriaLabel(element)\n \"\n [attr.aria-describedby]=\"buildChildId('Legend')\"\n [title]=\"getDeleteButtonAriaLabel(element)\"\n (click)=\"removeItem(element, index)\"\n #selectedElemRef\n >\n <span\n [innerHTML]=\"getBadgeLabel(element)\"\n ></span>\n <foehn-icon-times\n aria-hidden=\"true\"\n class=\"ms-2\"\n [title]=\"getDeleteButtonAriaLabel(element)\"\n />\n </button>\n }\n }\n </div>\n </fieldset>\n }\n </div>\n\n @if (hasMissingModelValue()) {\n @for (missingValue of missingModelValues(); track $index) {\n <p\n class=\"alert alert-warning\"\n role=\"alert\"\n [attr.id]=\"buildId('MissingValue') + $index\"\n >\n {{\n 'foehn-checkable-group.missing-value.warning'\n | fromDictionary\n : { value: getMissingValueLabel(missingValue) }\n }}\n </p>\n }\n }\n</div>\n", styles: ["foehn-autocomplete p.alert:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem var(--vd-focus)}:host ::ng-deep foehn-autocomplete .form-group{margin-bottom:0!important}.selected-list-container .btn{text-transform:none}:host ::ng-deep .btn .svg-inline--fa,:host ::ng-deep .btn a{color:#fff!important}.selected-list-container span.rounded-pill:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem var(--vd-focus)}.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}:host ::ng-deep foehn-autocomplete div.vd-form-group-danger{border-left:0;padding-left:0}\n"] }]
9396
9464
  }], propDecorators: { elementBadgeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "elementBadgeLabel", required: false }] }], selectedItemsListLegend: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedItemsListLegend", required: false }] }], noElementsSelectedLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "noElementsSelectedLabel", required: false }] }], excludeFromErrorSummary: [{ type: i0.Input, args: [{ isSignal: true, alias: "excludeFromErrorSummary", required: false }] }], defaultElementValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultElementValues", required: false }] }], autocompleteComponent: [{ type: i0.ViewChild, args: ['autocompleteComponent', { isSignal: true }] }], alertMessageContainer: [{ type: i0.ViewChild, args: ['alertMessageContainer', { isSignal: true }] }], selectedElemRef: [{ type: i0.ViewChildren, args: ['selectedElemRef', { isSignal: true }] }], defaultElemRef: [{ type: i0.ViewChildren, args: ['defaultElemRef', { isSignal: true }] }], defaultDeleteFocusArea: [{ type: i0.ViewChild, args: ['defaultDeleteFocusArea', { isSignal: true }] }] } });
9397
9465
 
9398
9466
  class FoehnInputEmailComponent extends FoehnInputStringComponent {
@@ -11583,6 +11651,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.21", ngImpo
11583
11651
  args: [{ name: 'formatIde' }]
11584
11652
  }] });
11585
11653
 
11654
+ class LineBreakAsHtmlPipe {
11655
+ transform(text) {
11656
+ if (!text?.length) {
11657
+ return '';
11658
+ }
11659
+ return text.replaceAll('\n', '<br/>');
11660
+ }
11661
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.21", ngImport: i0, type: LineBreakAsHtmlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
11662
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.21", ngImport: i0, type: LineBreakAsHtmlPipe, isStandalone: true, name: "lineBreakAsHtml" }); }
11663
+ }
11664
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.21", ngImport: i0, type: LineBreakAsHtmlPipe, decorators: [{
11665
+ type: Pipe,
11666
+ args: [{ name: 'lineBreakAsHtml' }]
11667
+ }] });
11668
+
11586
11669
  // TODO PRESTAKIT 17 : this class is called InfoReprise in prestations-be
11587
11670
  class RepriseInfo {
11588
11671
  }
@@ -15108,5 +15191,5 @@ class SdkLog {
15108
15191
  * Generated bundle index. Do not edit.
15109
15192
  */
15110
15193
 
15111
- 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, ComponentError, Configuration, Country, CurrencyHelper, CurrentWeek, DECIMALS_SEPARATOR, DEFAULT_INTERNATIONAL_AND_NO_SWISS, DEFAULT_INTERNATIONAL_AND_NO_SWISS_MOBILE, DEFAULT_INTERNATIONAL_AND_NO_SWISS_PHONE, DEFAULT_INTERNATIONAL_HELP_TEXT, DEFAULT_PREFIX, DEFAULT_SWISS_HELP_TEXT, DEFAULT_SWISS_MOBILE_PHONE_HELP_TEXT, DEFAULT_SWISS_PHONE_HELP_TEXT, 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, Locality, MonthYear, MultiUploadService, Municipality, NDCFormatterDirective, 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 };
15194
+ 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, ComponentError, Configuration, Country, CurrencyHelper, CurrentWeek, DECIMALS_SEPARATOR, DEFAULT_INTERNATIONAL_AND_NO_SWISS, DEFAULT_INTERNATIONAL_AND_NO_SWISS_MOBILE, DEFAULT_INTERNATIONAL_AND_NO_SWISS_PHONE, DEFAULT_INTERNATIONAL_HELP_TEXT, DEFAULT_PREFIX, DEFAULT_SWISS_HELP_TEXT, DEFAULT_SWISS_MOBILE_PHONE_HELP_TEXT, DEFAULT_SWISS_PHONE_HELP_TEXT, 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, 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 };
15112
15195
  //# sourceMappingURL=dsivd-prestations-ng.mjs.map