@dsivd/prestations-ng 14.5.21 → 14.5.23-beta2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/CHANGELOG.md +7 -2
  2. package/bundles/dsivd-prestations-ng.umd.js +463 -103
  3. package/bundles/dsivd-prestations-ng.umd.js.map +1 -1
  4. package/dsivd-prestations-ng-v14.5.23-beta2.tgz +0 -0
  5. package/esm2015/foehn-checkables/foehn-checkable-group.component.js +11 -3
  6. package/esm2015/foehn-date-picker/foehn-date-picker.component.js +2 -2
  7. package/esm2015/foehn-input/foehn-input-email.component.js +2 -2
  8. package/esm2015/foehn-input/foehn-input-hidden.component.js +2 -2
  9. package/esm2015/foehn-input/foehn-input-number.component.js +2 -2
  10. package/esm2015/foehn-input/foehn-input-password.component.js +2 -2
  11. package/esm2015/foehn-input/foehn-input-phone.component.js +2 -2
  12. package/esm2015/foehn-input/foehn-input-text.component.js +2 -2
  13. package/esm2015/foehn-multiselect-autocomplete/foehn-multiselect-autocomplete.component.js +287 -0
  14. package/esm2015/foehn-multiselect-autocomplete/foehn-multiselect-autocomplete.module.js +42 -0
  15. package/esm2015/foehn-upload/foehn-picture-upload/foehn-picture-upload.component.js +2 -2
  16. package/esm2015/index.js +4 -1
  17. package/esm2015/sdk-dictionary/default-dictionary.js +12 -2
  18. package/esm2015/sdk-recaptcha/grecaptcha/grecaptcha.component.js +2 -2
  19. package/fesm2015/dsivd-prestations-ng.js +427 -101
  20. package/fesm2015/dsivd-prestations-ng.js.map +1 -1
  21. package/foehn-checkables/foehn-checkable-group.component.d.ts +3 -2
  22. package/foehn-multiselect-autocomplete/foehn-multiselect-autocomplete.component.d.ts +47 -0
  23. package/foehn-multiselect-autocomplete/foehn-multiselect-autocomplete.module.d.ts +13 -0
  24. package/index.d.ts +2 -0
  25. package/package.json +1 -1
  26. package/sdk-recaptcha/grecaptcha/grecaptcha.component.d.ts +1 -1
  27. package/dsivd-prestations-ng-v14.5.21.tgz +0 -0
@@ -1928,7 +1928,17 @@
1928
1928
  'foehn-status-progress-bar.step2': 'Vérification',
1929
1929
  'foehn-status-progress-bar.step2.srOnly': 'Etape 2 sur 3, Vérification',
1930
1930
  'foehn-status-progress-bar.step3': 'Confirmation',
1931
- 'foehn-status-progress-bar.step3.srOnly': 'Etape 3 sur 3, Confirmation, demande transmise'
1931
+ 'foehn-status-progress-bar.step3.srOnly': 'Etape 3 sur 3, Confirmation, demande transmise',
1932
+ 'foehn-multiselect-autocomplete.selected.delete': 'Supprimer {elementLabel}',
1933
+ 'foehn-multiselect-autocomplete.selected.delete.aria-label': 'Supprimer {elementLabel} de la liste intitulée: {componentLabel}',
1934
+ 'foehn-multiselect-autocomplete.selected.screen-reader.default-value': 'Élément sélectionné par défaut non supprimable :',
1935
+ 'foehn-multiselect-autocomplete.selected.screen-reader.selected-value': 'Élément sélectionné:',
1936
+ 'foehn-multiselect-autocomplete.list-of-selected-items': 'Liste des éléments sélectionnés:',
1937
+ 'foehn-multiselect-autocomplete.list-of-selected-items.screen-reader.helper': 'En mode application, Utilisez les flèches ' +
1938
+ 'gauche et droite pour naviguer dans la liste.',
1939
+ 'foehn-multiselect-autocomplete.autocomplete.empty-message': 'Tous les éléments de la liste de proposition ont déjà été ajoutés.',
1940
+ 'foehn-multiselect-autocomplete.autocomplete.screen-reader.label': 'Sélectionner un élément dans la liste de recherche' +
1941
+ ' ci-dessous pour l\'ajouter à votre sélection.'
1932
1942
  };
1933
1943
 
1934
1944
  var DICTIONARY_BASE_URL = 'api/dictionary';
@@ -3861,7 +3871,7 @@
3861
3871
  useExisting: i0.forwardRef(function () { return FoehnInputTextComponent; }),
3862
3872
  multi: true
3863
3873
  }
3864
- ], usesInheritance: true, ngImport: i0__namespace, template: "<div\n class=\"form-group clearable-input-form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <label\n [attr.for]=\"buildChildId()\"\n *ngIf=\"label && type !== 'hidden'\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText && type !== 'hidden'\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <input\n [class.is-invalid]=\"hasErrorsToDisplay() || hasInheritErrorFromParent()\"\n [class.clearable-input]=\"displayClearButton() | async\"\n class=\"form-control\"\n [name]=\"name || label\"\n [attr.maxlength]=\"getMaxLength()\"\n [attr.autocomplete]=\"getAutoComplete()\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.type]=\"type\"\n [attr.pattern]=\"pattern\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.id]=\"buildChildId()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required || null\"\n [ngModel]=\"model\"\n (paste)=\"onPaste($event)\"\n (ngModelChange)=\"updateNgModel($event)\"\n (input)=\"handleChange(entryComponent.value)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n #entryComponent\n />\n\n <button\n type=\"button\"\n [id]=\"buildChildId() + 'ClearButton'\"\n *ngIf=\"displayClearButton() | async\"\n class=\"clearable-input-clear-button btn\"\n (click)=\"onClear()\"\n >\n <foehn-icon-times\n class=\"clearable-input-clear-button-icon\"\n title=\"R\u00E9initialiser le champs\"\n ></foehn-icon-times>\n </button>\n</div>\n", styles: ["input::-ms-clear{display:none}input.clearable-input{padding-right:30px}.clearable-input-form-group{position:relative}.clearable-input-clear-button{position:absolute;bottom:4px;right:4px;height:30px;width:30px;background:none;border:none}.clearable-input-clear-button-icon{top:4px;right:8px;position:absolute}:host ::ng-deep .clearable-input-clear-button.btn .svg-inline--fa{color:#595959!important}:host ::ng-deep .clearable-input-clear-button.btn:hover .svg-inline--fa{color:#000!important}.chars-remaining{color:#757575;font-size:.9rem}.char-count-exceeded{color:#c21f39}:host ::ng-deep .sameLine-list{display:inline;list-style:none;padding:0}:host ::ng-deep .sameLine-list li{display:inline;padding:3px}\n"], components: [{ type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: FoehnIconTimesComponent, selector: "foehn-icon-times" }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4__namespace.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4__namespace.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "fromDictionary": SdkDictionaryPipe, "async": i3__namespace.AsyncPipe } });
3874
+ ], usesInheritance: true, ngImport: i0__namespace, template: "<div\n class=\"form-group clearable-input-form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <label\n [attr.id]=\"buildChildId() + 'Label'\"\n [attr.for]=\"buildChildId()\"\n *ngIf=\"label && type !== 'hidden'\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText && type !== 'hidden'\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <input\n [class.is-invalid]=\"hasErrorsToDisplay() || hasInheritErrorFromParent()\"\n [class.clearable-input]=\"displayClearButton() | async\"\n class=\"form-control\"\n [name]=\"name || label\"\n [attr.maxlength]=\"getMaxLength()\"\n [attr.autocomplete]=\"getAutoComplete()\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.type]=\"type\"\n [attr.pattern]=\"pattern\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.id]=\"buildChildId()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required || null\"\n [ngModel]=\"model\"\n (paste)=\"onPaste($event)\"\n (ngModelChange)=\"updateNgModel($event)\"\n (input)=\"handleChange(entryComponent.value)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n #entryComponent\n />\n\n <button\n type=\"button\"\n [id]=\"buildChildId() + 'ClearButton'\"\n *ngIf=\"displayClearButton() | async\"\n class=\"clearable-input-clear-button btn\"\n (click)=\"onClear()\"\n >\n <foehn-icon-times\n class=\"clearable-input-clear-button-icon\"\n title=\"R\u00E9initialiser le champs\"\n ></foehn-icon-times>\n </button>\n</div>\n", styles: ["input::-ms-clear{display:none}input.clearable-input{padding-right:30px}.clearable-input-form-group{position:relative}.clearable-input-clear-button{position:absolute;bottom:4px;right:4px;height:30px;width:30px;background:none;border:none}.clearable-input-clear-button-icon{top:4px;right:8px;position:absolute}:host ::ng-deep .clearable-input-clear-button.btn .svg-inline--fa{color:#595959!important}:host ::ng-deep .clearable-input-clear-button.btn:hover .svg-inline--fa{color:#000!important}.chars-remaining{color:#757575;font-size:.9rem}.char-count-exceeded{color:#c21f39}:host ::ng-deep .sameLine-list{display:inline;list-style:none;padding:0}:host ::ng-deep .sameLine-list li{display:inline;padding:3px}\n"], components: [{ type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: FoehnIconTimesComponent, selector: "foehn-icon-times" }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4__namespace.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4__namespace.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "fromDictionary": SdkDictionaryPipe, "async": i3__namespace.AsyncPipe } });
3865
3875
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnInputTextComponent, decorators: [{
3866
3876
  type: i0.Component,
3867
3877
  args: [{
@@ -4526,6 +4536,98 @@
4526
4536
  return FormSelectOptionGroup;
4527
4537
  }());
4528
4538
 
4539
+ /* eslint-disable @typescript-eslint/no-explicit-any,@typescript-eslint/explicit-module-boundary-types */
4540
+ var ObjectHelper = /** @class */ (function () {
4541
+ function ObjectHelper() {
4542
+ }
4543
+ /**
4544
+ * Angular uses object identity to select option. It's possible for the identities of items to change while the data does not.
4545
+ * This can happen, for example, if the items are produced from an RPC to the server, and that RPC is re-run.
4546
+ * Even if the data hasn't changed, the second response will produce objects with different identities.
4547
+ * (see: https://angular.io/api/forms/SelectControlValueAccessor#customizing-option-selection)
4548
+ *
4549
+ * @param value1 as first value to compare to
4550
+ * @param value2 as value to be compared to
4551
+ * @returns boolean
4552
+ */
4553
+ ObjectHelper.isEqual = function (value1, value2) {
4554
+ if (value1 &&
4555
+ value2 &&
4556
+ typeof value1 === 'object' &&
4557
+ typeof value2 === 'object') {
4558
+ var matches_1 = function (obj, source) { return Object.keys(source).length === Object.keys(obj).length &&
4559
+ Object.keys(source).every(function (key) {
4560
+ if (obj.hasOwnProperty(key)) {
4561
+ if (obj[key] &&
4562
+ source[key] &&
4563
+ typeof obj[key] === 'object' &&
4564
+ typeof source[key] === 'object') {
4565
+ return matches_1(obj[key], source[key]);
4566
+ }
4567
+ return obj[key] === source[key];
4568
+ }
4569
+ return false;
4570
+ }); };
4571
+ return matches_1(value1, value2);
4572
+ }
4573
+ return value1 === value2;
4574
+ };
4575
+ ObjectHelper.hasAnyValue = function (value) {
4576
+ // do not simplify with an inline variable result due to compilation error
4577
+ var result = Object.keys(value).some(function (key) {
4578
+ if (value[key] && typeof value[key] === 'object') {
4579
+ return ObjectHelper.hasAnyValue(value[key]);
4580
+ }
4581
+ return !!value[key];
4582
+ });
4583
+ return result;
4584
+ };
4585
+ ObjectHelper.isEmpty = function (value) {
4586
+ return !ObjectHelper.hasAnyValue(value);
4587
+ };
4588
+ /**
4589
+ * Deep copy is a true copy for nested objects
4590
+ * Often, shallow copy is good enough and you will not need a deep copy.
4591
+ * A shallow copy means the first level is copied, deeper levels are referenced.
4592
+ *
4593
+ * Examples of shallow copy :
4594
+ * const shallowClone = { ...nestedObject };
4595
+ * const shallowClone = Object.assign({}, nestedObject);
4596
+ *
4597
+ * @param obj is the object to copied
4598
+ * @returns obj
4599
+ */
4600
+ ObjectHelper.deepCopy = function (obj) {
4601
+ if (!obj || typeof obj !== 'object') {
4602
+ return obj;
4603
+ }
4604
+ var copy;
4605
+ if (obj instanceof Date) {
4606
+ copy = new Date();
4607
+ copy.setTime(obj.getTime());
4608
+ return copy;
4609
+ }
4610
+ if (obj instanceof Array) {
4611
+ copy = [];
4612
+ for (var i = 0, len = obj.length; i < len; i++) {
4613
+ copy[i] = ObjectHelper.deepCopy(obj[i]);
4614
+ }
4615
+ return copy;
4616
+ }
4617
+ if (obj instanceof Object) {
4618
+ copy = {};
4619
+ for (var attr in obj) {
4620
+ if (obj.hasOwnProperty(attr)) {
4621
+ copy[attr] = ObjectHelper.deepCopy(obj[attr]);
4622
+ }
4623
+ }
4624
+ return copy;
4625
+ }
4626
+ throw new Error('Unable to copy obj! Type not supported.');
4627
+ };
4628
+ return ObjectHelper;
4629
+ }());
4630
+
4529
4631
  var FoehnCheckableGroupComponent = /** @class */ (function (_super) {
4530
4632
  __extends(FoehnCheckableGroupComponent, _super);
4531
4633
  function FoehnCheckableGroupComponent(ngZone) {
@@ -4543,6 +4645,7 @@
4543
4645
  _this.elementLabel = 'label';
4544
4646
  _this.elementDisabled = 'disabled';
4545
4647
  _this.allElementDisabled = false;
4648
+ _this.elementsLoaded = new i0.EventEmitter();
4546
4649
  _this.multiple = false;
4547
4650
  _this._onInitSubject = new rxjs.Subject();
4548
4651
  _this.httpClient = ServiceLocator.injector.get(i1.HttpClient);
@@ -4601,6 +4704,7 @@
4601
4704
  };
4602
4705
  FoehnCheckableGroupComponent.prototype.setElements = function (elements) {
4603
4706
  this.elements = elements;
4707
+ this.elementsLoaded.next(elements);
4604
4708
  this.onElementsRetrieved();
4605
4709
  };
4606
4710
  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
@@ -4806,6 +4910,9 @@
4806
4910
  // Hack to refresh the display value
4807
4911
  this.updateNgModel(this.model_);
4808
4912
  }
4913
+ else if (change && !ObjectHelper.isEqual(change.currentValue, change.previousValue)) {
4914
+ this.elementsLoaded.next(change.currentValue);
4915
+ }
4809
4916
  };
4810
4917
  FoehnCheckableGroupComponent.prototype.onElementsUrlChange = function (change) {
4811
4918
  if (change && !change.firstChange) {
@@ -4815,7 +4922,7 @@
4815
4922
  return FoehnCheckableGroupComponent;
4816
4923
  }(FoehnInputComponent));
4817
4924
  FoehnCheckableGroupComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnCheckableGroupComponent, deps: [{ token: i0__namespace.NgZone }], target: i0__namespace.ɵɵFactoryTarget.Directive });
4818
- FoehnCheckableGroupComponent.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.4", type: FoehnCheckableGroupComponent, inputs: { elements: "elements", elementsUrl: "elementsUrl", elementValue: "elementValue", elementLabel: "elementLabel", elementValueIdentity: "elementValueIdentity", elementDisabled: "elementDisabled", allElementDisabled: "allElementDisabled", elementGroup: "elementGroup", defaultElementValue: "defaultElementValue" }, usesInheritance: true, usesOnChanges: true, ngImport: i0__namespace });
4925
+ FoehnCheckableGroupComponent.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.4", type: FoehnCheckableGroupComponent, inputs: { elements: "elements", elementsUrl: "elementsUrl", elementValue: "elementValue", elementLabel: "elementLabel", elementValueIdentity: "elementValueIdentity", elementDisabled: "elementDisabled", allElementDisabled: "allElementDisabled", elementGroup: "elementGroup", defaultElementValue: "defaultElementValue" }, outputs: { elementsLoaded: "elementsLoaded" }, usesInheritance: true, usesOnChanges: true, ngImport: i0__namespace });
4819
4926
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnCheckableGroupComponent, decorators: [{
4820
4927
  type: i0.Directive
4821
4928
  }], ctorParameters: function () { return [{ type: i0__namespace.NgZone }]; }, propDecorators: { elements: [{
@@ -4834,102 +4941,12 @@
4834
4941
  type: i0.Input
4835
4942
  }], elementGroup: [{
4836
4943
  type: i0.Input
4944
+ }], elementsLoaded: [{
4945
+ type: i0.Output
4837
4946
  }], defaultElementValue: [{
4838
4947
  type: i0.Input
4839
4948
  }] } });
4840
4949
 
4841
- /* eslint-disable @typescript-eslint/no-explicit-any,@typescript-eslint/explicit-module-boundary-types */
4842
- var ObjectHelper = /** @class */ (function () {
4843
- function ObjectHelper() {
4844
- }
4845
- /**
4846
- * Angular uses object identity to select option. It's possible for the identities of items to change while the data does not.
4847
- * This can happen, for example, if the items are produced from an RPC to the server, and that RPC is re-run.
4848
- * Even if the data hasn't changed, the second response will produce objects with different identities.
4849
- * (see: https://angular.io/api/forms/SelectControlValueAccessor#customizing-option-selection)
4850
- *
4851
- * @param value1 as first value to compare to
4852
- * @param value2 as value to be compared to
4853
- * @returns boolean
4854
- */
4855
- ObjectHelper.isEqual = function (value1, value2) {
4856
- if (value1 &&
4857
- value2 &&
4858
- typeof value1 === 'object' &&
4859
- typeof value2 === 'object') {
4860
- var matches_1 = function (obj, source) { return Object.keys(source).length === Object.keys(obj).length &&
4861
- Object.keys(source).every(function (key) {
4862
- if (obj.hasOwnProperty(key)) {
4863
- if (obj[key] &&
4864
- source[key] &&
4865
- typeof obj[key] === 'object' &&
4866
- typeof source[key] === 'object') {
4867
- return matches_1(obj[key], source[key]);
4868
- }
4869
- return obj[key] === source[key];
4870
- }
4871
- return false;
4872
- }); };
4873
- return matches_1(value1, value2);
4874
- }
4875
- return value1 === value2;
4876
- };
4877
- ObjectHelper.hasAnyValue = function (value) {
4878
- // do not simplify with an inline variable result due to compilation error
4879
- var result = Object.keys(value).some(function (key) {
4880
- if (value[key] && typeof value[key] === 'object') {
4881
- return ObjectHelper.hasAnyValue(value[key]);
4882
- }
4883
- return !!value[key];
4884
- });
4885
- return result;
4886
- };
4887
- ObjectHelper.isEmpty = function (value) {
4888
- return !ObjectHelper.hasAnyValue(value);
4889
- };
4890
- /**
4891
- * Deep copy is a true copy for nested objects
4892
- * Often, shallow copy is good enough and you will not need a deep copy.
4893
- * A shallow copy means the first level is copied, deeper levels are referenced.
4894
- *
4895
- * Examples of shallow copy :
4896
- * const shallowClone = { ...nestedObject };
4897
- * const shallowClone = Object.assign({}, nestedObject);
4898
- *
4899
- * @param obj is the object to copied
4900
- * @returns obj
4901
- */
4902
- ObjectHelper.deepCopy = function (obj) {
4903
- if (!obj || typeof obj !== 'object') {
4904
- return obj;
4905
- }
4906
- var copy;
4907
- if (obj instanceof Date) {
4908
- copy = new Date();
4909
- copy.setTime(obj.getTime());
4910
- return copy;
4911
- }
4912
- if (obj instanceof Array) {
4913
- copy = [];
4914
- for (var i = 0, len = obj.length; i < len; i++) {
4915
- copy[i] = ObjectHelper.deepCopy(obj[i]);
4916
- }
4917
- return copy;
4918
- }
4919
- if (obj instanceof Object) {
4920
- copy = {};
4921
- for (var attr in obj) {
4922
- if (obj.hasOwnProperty(attr)) {
4923
- copy[attr] = ObjectHelper.deepCopy(obj[attr]);
4924
- }
4925
- }
4926
- return copy;
4927
- }
4928
- throw new Error('Unable to copy obj! Type not supported.');
4929
- };
4930
- return ObjectHelper;
4931
- }());
4932
-
4933
4950
  var FoehnSelectComponent = /** @class */ (function (_super) {
4934
4951
  __extends(FoehnSelectComponent, _super);
4935
4952
  function FoehnSelectComponent(zone) {
@@ -7673,7 +7690,7 @@
7673
7690
  useExisting: i0.forwardRef(function () { return FoehnInputNumberComponent; }),
7674
7691
  multi: true
7675
7692
  }
7676
- ], usesInheritance: true, ngImport: i0__namespace, template: "<div\n class=\"form-group clearable-input-form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <label\n [attr.for]=\"buildChildId()\"\n *ngIf=\"label && type !== 'hidden'\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText && type !== 'hidden'\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <input\n [class.is-invalid]=\"hasErrorsToDisplay() || hasInheritErrorFromParent()\"\n [class.clearable-input]=\"displayClearButton() | async\"\n class=\"form-control\"\n [name]=\"name || label\"\n [attr.maxlength]=\"getMaxLength()\"\n [attr.autocomplete]=\"getAutoComplete()\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.type]=\"type\"\n [attr.pattern]=\"pattern\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.id]=\"buildChildId()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required || null\"\n [ngModel]=\"model\"\n (paste)=\"onPaste($event)\"\n (ngModelChange)=\"updateNgModel($event)\"\n (input)=\"handleChange(entryComponent.value)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n #entryComponent\n />\n\n <button\n type=\"button\"\n [id]=\"buildChildId() + 'ClearButton'\"\n *ngIf=\"displayClearButton() | async\"\n class=\"clearable-input-clear-button btn\"\n (click)=\"onClear()\"\n >\n <foehn-icon-times\n class=\"clearable-input-clear-button-icon\"\n title=\"R\u00E9initialiser le champs\"\n ></foehn-icon-times>\n </button>\n</div>\n", styles: ["input::-ms-clear{display:none}input.clearable-input{padding-right:30px}.clearable-input-form-group{position:relative}.clearable-input-clear-button{position:absolute;bottom:4px;right:4px;height:30px;width:30px;background:none;border:none}.clearable-input-clear-button-icon{top:4px;right:8px;position:absolute}:host ::ng-deep .clearable-input-clear-button.btn .svg-inline--fa{color:#595959!important}:host ::ng-deep .clearable-input-clear-button.btn:hover .svg-inline--fa{color:#000!important}.chars-remaining{color:#757575;font-size:.9rem}.char-count-exceeded{color:#c21f39}:host ::ng-deep .sameLine-list{display:inline;list-style:none;padding:0}:host ::ng-deep .sameLine-list li{display:inline;padding:3px}\n"], components: [{ type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: FoehnIconTimesComponent, selector: "foehn-icon-times" }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4__namespace.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4__namespace.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "fromDictionary": SdkDictionaryPipe, "async": i3__namespace.AsyncPipe } });
7693
+ ], usesInheritance: true, ngImport: i0__namespace, template: "<div\n class=\"form-group clearable-input-form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <label\n [attr.id]=\"buildChildId() + 'Label'\"\n [attr.for]=\"buildChildId()\"\n *ngIf=\"label && type !== 'hidden'\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText && type !== 'hidden'\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <input\n [class.is-invalid]=\"hasErrorsToDisplay() || hasInheritErrorFromParent()\"\n [class.clearable-input]=\"displayClearButton() | async\"\n class=\"form-control\"\n [name]=\"name || label\"\n [attr.maxlength]=\"getMaxLength()\"\n [attr.autocomplete]=\"getAutoComplete()\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.type]=\"type\"\n [attr.pattern]=\"pattern\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.id]=\"buildChildId()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required || null\"\n [ngModel]=\"model\"\n (paste)=\"onPaste($event)\"\n (ngModelChange)=\"updateNgModel($event)\"\n (input)=\"handleChange(entryComponent.value)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n #entryComponent\n />\n\n <button\n type=\"button\"\n [id]=\"buildChildId() + 'ClearButton'\"\n *ngIf=\"displayClearButton() | async\"\n class=\"clearable-input-clear-button btn\"\n (click)=\"onClear()\"\n >\n <foehn-icon-times\n class=\"clearable-input-clear-button-icon\"\n title=\"R\u00E9initialiser le champs\"\n ></foehn-icon-times>\n </button>\n</div>\n", styles: ["input::-ms-clear{display:none}input.clearable-input{padding-right:30px}.clearable-input-form-group{position:relative}.clearable-input-clear-button{position:absolute;bottom:4px;right:4px;height:30px;width:30px;background:none;border:none}.clearable-input-clear-button-icon{top:4px;right:8px;position:absolute}:host ::ng-deep .clearable-input-clear-button.btn .svg-inline--fa{color:#595959!important}:host ::ng-deep .clearable-input-clear-button.btn:hover .svg-inline--fa{color:#000!important}.chars-remaining{color:#757575;font-size:.9rem}.char-count-exceeded{color:#c21f39}:host ::ng-deep .sameLine-list{display:inline;list-style:none;padding:0}:host ::ng-deep .sameLine-list li{display:inline;padding:3px}\n"], components: [{ type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: FoehnIconTimesComponent, selector: "foehn-icon-times" }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4__namespace.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4__namespace.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "fromDictionary": SdkDictionaryPipe, "async": i3__namespace.AsyncPipe } });
7677
7694
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnInputNumberComponent, decorators: [{
7678
7695
  type: i0.Component,
7679
7696
  args: [{
@@ -7730,7 +7747,7 @@
7730
7747
  useExisting: i0.forwardRef(function () { return FoehnInputEmailComponent; }),
7731
7748
  multi: true
7732
7749
  }
7733
- ], usesInheritance: true, ngImport: i0__namespace, template: "<div\n class=\"form-group clearable-input-form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <label\n [attr.for]=\"buildChildId()\"\n *ngIf=\"label && type !== 'hidden'\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText && type !== 'hidden'\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <input\n [class.is-invalid]=\"hasErrorsToDisplay() || hasInheritErrorFromParent()\"\n [class.clearable-input]=\"displayClearButton() | async\"\n class=\"form-control\"\n [name]=\"name || label\"\n [attr.maxlength]=\"getMaxLength()\"\n [attr.autocomplete]=\"getAutoComplete()\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.type]=\"type\"\n [attr.pattern]=\"pattern\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.id]=\"buildChildId()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required || null\"\n [ngModel]=\"model\"\n (paste)=\"onPaste($event)\"\n (ngModelChange)=\"updateNgModel($event)\"\n (input)=\"handleChange(entryComponent.value)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n #entryComponent\n />\n\n <button\n type=\"button\"\n [id]=\"buildChildId() + 'ClearButton'\"\n *ngIf=\"displayClearButton() | async\"\n class=\"clearable-input-clear-button btn\"\n (click)=\"onClear()\"\n >\n <foehn-icon-times\n class=\"clearable-input-clear-button-icon\"\n title=\"R\u00E9initialiser le champs\"\n ></foehn-icon-times>\n </button>\n</div>\n", styles: ["input::-ms-clear{display:none}input.clearable-input{padding-right:30px}.clearable-input-form-group{position:relative}.clearable-input-clear-button{position:absolute;bottom:4px;right:4px;height:30px;width:30px;background:none;border:none}.clearable-input-clear-button-icon{top:4px;right:8px;position:absolute}:host ::ng-deep .clearable-input-clear-button.btn .svg-inline--fa{color:#595959!important}:host ::ng-deep .clearable-input-clear-button.btn:hover .svg-inline--fa{color:#000!important}.chars-remaining{color:#757575;font-size:.9rem}.char-count-exceeded{color:#c21f39}:host ::ng-deep .sameLine-list{display:inline;list-style:none;padding:0}:host ::ng-deep .sameLine-list li{display:inline;padding:3px}\n"], components: [{ type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: FoehnIconTimesComponent, selector: "foehn-icon-times" }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4__namespace.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4__namespace.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "fromDictionary": SdkDictionaryPipe, "async": i3__namespace.AsyncPipe } });
7750
+ ], usesInheritance: true, ngImport: i0__namespace, template: "<div\n class=\"form-group clearable-input-form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <label\n [attr.id]=\"buildChildId() + 'Label'\"\n [attr.for]=\"buildChildId()\"\n *ngIf=\"label && type !== 'hidden'\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText && type !== 'hidden'\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <input\n [class.is-invalid]=\"hasErrorsToDisplay() || hasInheritErrorFromParent()\"\n [class.clearable-input]=\"displayClearButton() | async\"\n class=\"form-control\"\n [name]=\"name || label\"\n [attr.maxlength]=\"getMaxLength()\"\n [attr.autocomplete]=\"getAutoComplete()\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.type]=\"type\"\n [attr.pattern]=\"pattern\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.id]=\"buildChildId()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required || null\"\n [ngModel]=\"model\"\n (paste)=\"onPaste($event)\"\n (ngModelChange)=\"updateNgModel($event)\"\n (input)=\"handleChange(entryComponent.value)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n #entryComponent\n />\n\n <button\n type=\"button\"\n [id]=\"buildChildId() + 'ClearButton'\"\n *ngIf=\"displayClearButton() | async\"\n class=\"clearable-input-clear-button btn\"\n (click)=\"onClear()\"\n >\n <foehn-icon-times\n class=\"clearable-input-clear-button-icon\"\n title=\"R\u00E9initialiser le champs\"\n ></foehn-icon-times>\n </button>\n</div>\n", styles: ["input::-ms-clear{display:none}input.clearable-input{padding-right:30px}.clearable-input-form-group{position:relative}.clearable-input-clear-button{position:absolute;bottom:4px;right:4px;height:30px;width:30px;background:none;border:none}.clearable-input-clear-button-icon{top:4px;right:8px;position:absolute}:host ::ng-deep .clearable-input-clear-button.btn .svg-inline--fa{color:#595959!important}:host ::ng-deep .clearable-input-clear-button.btn:hover .svg-inline--fa{color:#000!important}.chars-remaining{color:#757575;font-size:.9rem}.char-count-exceeded{color:#c21f39}:host ::ng-deep .sameLine-list{display:inline;list-style:none;padding:0}:host ::ng-deep .sameLine-list li{display:inline;padding:3px}\n"], components: [{ type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: FoehnIconTimesComponent, selector: "foehn-icon-times" }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4__namespace.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4__namespace.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "fromDictionary": SdkDictionaryPipe, "async": i3__namespace.AsyncPipe } });
7734
7751
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnInputEmailComponent, decorators: [{
7735
7752
  type: i0.Component,
7736
7753
  args: [{
@@ -7781,7 +7798,7 @@
7781
7798
  useExisting: i0.forwardRef(function () { return FoehnInputHiddenComponent; }),
7782
7799
  multi: true
7783
7800
  }
7784
- ], usesInheritance: true, ngImport: i0__namespace, template: "<div\n class=\"form-group clearable-input-form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <label\n [attr.for]=\"buildChildId()\"\n *ngIf=\"label && type !== 'hidden'\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText && type !== 'hidden'\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <input\n [class.is-invalid]=\"hasErrorsToDisplay() || hasInheritErrorFromParent()\"\n [class.clearable-input]=\"displayClearButton() | async\"\n class=\"form-control\"\n [name]=\"name || label\"\n [attr.maxlength]=\"getMaxLength()\"\n [attr.autocomplete]=\"getAutoComplete()\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.type]=\"type\"\n [attr.pattern]=\"pattern\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.id]=\"buildChildId()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required || null\"\n [ngModel]=\"model\"\n (paste)=\"onPaste($event)\"\n (ngModelChange)=\"updateNgModel($event)\"\n (input)=\"handleChange(entryComponent.value)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n #entryComponent\n />\n\n <button\n type=\"button\"\n [id]=\"buildChildId() + 'ClearButton'\"\n *ngIf=\"displayClearButton() | async\"\n class=\"clearable-input-clear-button btn\"\n (click)=\"onClear()\"\n >\n <foehn-icon-times\n class=\"clearable-input-clear-button-icon\"\n title=\"R\u00E9initialiser le champs\"\n ></foehn-icon-times>\n </button>\n</div>\n", components: [{ type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: FoehnIconTimesComponent, selector: "foehn-icon-times" }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4__namespace.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4__namespace.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "fromDictionary": SdkDictionaryPipe, "async": i3__namespace.AsyncPipe } });
7801
+ ], usesInheritance: true, ngImport: i0__namespace, template: "<div\n class=\"form-group clearable-input-form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <label\n [attr.id]=\"buildChildId() + 'Label'\"\n [attr.for]=\"buildChildId()\"\n *ngIf=\"label && type !== 'hidden'\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText && type !== 'hidden'\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <input\n [class.is-invalid]=\"hasErrorsToDisplay() || hasInheritErrorFromParent()\"\n [class.clearable-input]=\"displayClearButton() | async\"\n class=\"form-control\"\n [name]=\"name || label\"\n [attr.maxlength]=\"getMaxLength()\"\n [attr.autocomplete]=\"getAutoComplete()\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.type]=\"type\"\n [attr.pattern]=\"pattern\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.id]=\"buildChildId()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required || null\"\n [ngModel]=\"model\"\n (paste)=\"onPaste($event)\"\n (ngModelChange)=\"updateNgModel($event)\"\n (input)=\"handleChange(entryComponent.value)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n #entryComponent\n />\n\n <button\n type=\"button\"\n [id]=\"buildChildId() + 'ClearButton'\"\n *ngIf=\"displayClearButton() | async\"\n class=\"clearable-input-clear-button btn\"\n (click)=\"onClear()\"\n >\n <foehn-icon-times\n class=\"clearable-input-clear-button-icon\"\n title=\"R\u00E9initialiser le champs\"\n ></foehn-icon-times>\n </button>\n</div>\n", components: [{ type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: FoehnIconTimesComponent, selector: "foehn-icon-times" }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4__namespace.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4__namespace.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "fromDictionary": SdkDictionaryPipe, "async": i3__namespace.AsyncPipe } });
7785
7802
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnInputHiddenComponent, decorators: [{
7786
7803
  type: i0.Component,
7787
7804
  args: [{
@@ -7829,7 +7846,7 @@
7829
7846
  useExisting: i0.forwardRef(function () { return FoehnInputPasswordComponent; }),
7830
7847
  multi: true
7831
7848
  }
7832
- ], usesInheritance: true, ngImport: i0__namespace, template: "<div\n class=\"form-group clearable-input-form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <label\n [attr.for]=\"buildChildId()\"\n *ngIf=\"label && type !== 'hidden'\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText && type !== 'hidden'\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <input\n [class.is-invalid]=\"hasErrorsToDisplay() || hasInheritErrorFromParent()\"\n [class.clearable-input]=\"displayClearButton() | async\"\n class=\"form-control\"\n [name]=\"name || label\"\n [attr.maxlength]=\"getMaxLength()\"\n [attr.autocomplete]=\"getAutoComplete()\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.type]=\"type\"\n [attr.pattern]=\"pattern\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.id]=\"buildChildId()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required || null\"\n [ngModel]=\"model\"\n (paste)=\"onPaste($event)\"\n (ngModelChange)=\"updateNgModel($event)\"\n (input)=\"handleChange(entryComponent.value)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n #entryComponent\n />\n\n <button\n type=\"button\"\n [id]=\"buildChildId() + 'ClearButton'\"\n *ngIf=\"displayClearButton() | async\"\n class=\"clearable-input-clear-button btn\"\n (click)=\"onClear()\"\n >\n <foehn-icon-times\n class=\"clearable-input-clear-button-icon\"\n title=\"R\u00E9initialiser le champs\"\n ></foehn-icon-times>\n </button>\n</div>\n", styles: ["input::-ms-clear{display:none}input.clearable-input{padding-right:30px}.clearable-input-form-group{position:relative}.clearable-input-clear-button{position:absolute;bottom:4px;right:4px;height:30px;width:30px;background:none;border:none}.clearable-input-clear-button-icon{top:4px;right:8px;position:absolute}:host ::ng-deep .clearable-input-clear-button.btn .svg-inline--fa{color:#595959!important}:host ::ng-deep .clearable-input-clear-button.btn:hover .svg-inline--fa{color:#000!important}.chars-remaining{color:#757575;font-size:.9rem}.char-count-exceeded{color:#c21f39}:host ::ng-deep .sameLine-list{display:inline;list-style:none;padding:0}:host ::ng-deep .sameLine-list li{display:inline;padding:3px}\n"], components: [{ type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: FoehnIconTimesComponent, selector: "foehn-icon-times" }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4__namespace.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4__namespace.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "fromDictionary": SdkDictionaryPipe, "async": i3__namespace.AsyncPipe } });
7849
+ ], usesInheritance: true, ngImport: i0__namespace, template: "<div\n class=\"form-group clearable-input-form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <label\n [attr.id]=\"buildChildId() + 'Label'\"\n [attr.for]=\"buildChildId()\"\n *ngIf=\"label && type !== 'hidden'\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText && type !== 'hidden'\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <input\n [class.is-invalid]=\"hasErrorsToDisplay() || hasInheritErrorFromParent()\"\n [class.clearable-input]=\"displayClearButton() | async\"\n class=\"form-control\"\n [name]=\"name || label\"\n [attr.maxlength]=\"getMaxLength()\"\n [attr.autocomplete]=\"getAutoComplete()\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.type]=\"type\"\n [attr.pattern]=\"pattern\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.id]=\"buildChildId()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required || null\"\n [ngModel]=\"model\"\n (paste)=\"onPaste($event)\"\n (ngModelChange)=\"updateNgModel($event)\"\n (input)=\"handleChange(entryComponent.value)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n #entryComponent\n />\n\n <button\n type=\"button\"\n [id]=\"buildChildId() + 'ClearButton'\"\n *ngIf=\"displayClearButton() | async\"\n class=\"clearable-input-clear-button btn\"\n (click)=\"onClear()\"\n >\n <foehn-icon-times\n class=\"clearable-input-clear-button-icon\"\n title=\"R\u00E9initialiser le champs\"\n ></foehn-icon-times>\n </button>\n</div>\n", styles: ["input::-ms-clear{display:none}input.clearable-input{padding-right:30px}.clearable-input-form-group{position:relative}.clearable-input-clear-button{position:absolute;bottom:4px;right:4px;height:30px;width:30px;background:none;border:none}.clearable-input-clear-button-icon{top:4px;right:8px;position:absolute}:host ::ng-deep .clearable-input-clear-button.btn .svg-inline--fa{color:#595959!important}:host ::ng-deep .clearable-input-clear-button.btn:hover .svg-inline--fa{color:#000!important}.chars-remaining{color:#757575;font-size:.9rem}.char-count-exceeded{color:#c21f39}:host ::ng-deep .sameLine-list{display:inline;list-style:none;padding:0}:host ::ng-deep .sameLine-list li{display:inline;padding:3px}\n"], components: [{ type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: FoehnIconTimesComponent, selector: "foehn-icon-times" }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4__namespace.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4__namespace.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "fromDictionary": SdkDictionaryPipe, "async": i3__namespace.AsyncPipe } });
7833
7850
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnInputPasswordComponent, decorators: [{
7834
7851
  type: i0.Component,
7835
7852
  args: [{
@@ -8176,7 +8193,7 @@
8176
8193
  useExisting: i0.forwardRef(function () { return FoehnInputPhoneComponent; }),
8177
8194
  multi: true
8178
8195
  }
8179
- ], usesInheritance: true, ngImport: i0__namespace, template: "<div\n class=\"form-group clearable-input-form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <label\n [attr.for]=\"buildChildId()\"\n *ngIf=\"label && type !== 'hidden'\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText && type !== 'hidden'\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <input\n [class.is-invalid]=\"hasErrorsToDisplay() || hasInheritErrorFromParent()\"\n [class.clearable-input]=\"displayClearButton() | async\"\n class=\"form-control\"\n [name]=\"name || label\"\n [attr.maxlength]=\"getMaxLength()\"\n [attr.autocomplete]=\"getAutoComplete()\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.type]=\"type\"\n [attr.pattern]=\"pattern\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.id]=\"buildChildId()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required || null\"\n [ngModel]=\"model\"\n (paste)=\"onPaste($event)\"\n (ngModelChange)=\"updateNgModel($event)\"\n (input)=\"handleChange(entryComponent.value)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n #entryComponent\n />\n\n <button\n type=\"button\"\n [id]=\"buildChildId() + 'ClearButton'\"\n *ngIf=\"displayClearButton() | async\"\n class=\"clearable-input-clear-button btn\"\n (click)=\"onClear()\"\n >\n <foehn-icon-times\n class=\"clearable-input-clear-button-icon\"\n title=\"R\u00E9initialiser le champs\"\n ></foehn-icon-times>\n </button>\n</div>\n", styles: ["input::-ms-clear{display:none}input.clearable-input{padding-right:30px}.clearable-input-form-group{position:relative}.clearable-input-clear-button{position:absolute;bottom:4px;right:4px;height:30px;width:30px;background:none;border:none}.clearable-input-clear-button-icon{top:4px;right:8px;position:absolute}:host ::ng-deep .clearable-input-clear-button.btn .svg-inline--fa{color:#595959!important}:host ::ng-deep .clearable-input-clear-button.btn:hover .svg-inline--fa{color:#000!important}.chars-remaining{color:#757575;font-size:.9rem}.char-count-exceeded{color:#c21f39}:host ::ng-deep .sameLine-list{display:inline;list-style:none;padding:0}:host ::ng-deep .sameLine-list li{display:inline;padding:3px}\n"], components: [{ type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: FoehnIconTimesComponent, selector: "foehn-icon-times" }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4__namespace.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4__namespace.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "fromDictionary": SdkDictionaryPipe, "async": i3__namespace.AsyncPipe } });
8196
+ ], usesInheritance: true, ngImport: i0__namespace, template: "<div\n class=\"form-group clearable-input-form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <label\n [attr.id]=\"buildChildId() + 'Label'\"\n [attr.for]=\"buildChildId()\"\n *ngIf=\"label && type !== 'hidden'\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText && type !== 'hidden'\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <input\n [class.is-invalid]=\"hasErrorsToDisplay() || hasInheritErrorFromParent()\"\n [class.clearable-input]=\"displayClearButton() | async\"\n class=\"form-control\"\n [name]=\"name || label\"\n [attr.maxlength]=\"getMaxLength()\"\n [attr.autocomplete]=\"getAutoComplete()\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.type]=\"type\"\n [attr.pattern]=\"pattern\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.id]=\"buildChildId()\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-required]=\"required || null\"\n [ngModel]=\"model\"\n (paste)=\"onPaste($event)\"\n (ngModelChange)=\"updateNgModel($event)\"\n (input)=\"handleChange(entryComponent.value)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n #entryComponent\n />\n\n <button\n type=\"button\"\n [id]=\"buildChildId() + 'ClearButton'\"\n *ngIf=\"displayClearButton() | async\"\n class=\"clearable-input-clear-button btn\"\n (click)=\"onClear()\"\n >\n <foehn-icon-times\n class=\"clearable-input-clear-button-icon\"\n title=\"R\u00E9initialiser le champs\"\n ></foehn-icon-times>\n </button>\n</div>\n", styles: ["input::-ms-clear{display:none}input.clearable-input{padding-right:30px}.clearable-input-form-group{position:relative}.clearable-input-clear-button{position:absolute;bottom:4px;right:4px;height:30px;width:30px;background:none;border:none}.clearable-input-clear-button-icon{top:4px;right:8px;position:absolute}:host ::ng-deep .clearable-input-clear-button.btn .svg-inline--fa{color:#595959!important}:host ::ng-deep .clearable-input-clear-button.btn:hover .svg-inline--fa{color:#000!important}.chars-remaining{color:#757575;font-size:.9rem}.char-count-exceeded{color:#c21f39}:host ::ng-deep .sameLine-list{display:inline;list-style:none;padding:0}:host ::ng-deep .sameLine-list li{display:inline;padding:3px}\n"], components: [{ type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: FoehnIconTimesComponent, selector: "foehn-icon-times" }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4__namespace.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4__namespace.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "fromDictionary": SdkDictionaryPipe, "async": i3__namespace.AsyncPipe } });
8180
8197
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnInputPhoneComponent, decorators: [{
8181
8198
  type: i0.Component,
8182
8199
  args: [{
@@ -8837,6 +8854,347 @@
8837
8854
  return FormSelectOption;
8838
8855
  }());
8839
8856
 
8857
+ var FoehnMultiselectAutocompleteComponent = /** @class */ (function (_super) {
8858
+ __extends(FoehnMultiselectAutocompleteComponent, _super);
8859
+ function FoehnMultiselectAutocompleteComponent(ngZone, dictionaryService) {
8860
+ var _this = _super.call(this, ngZone) || this;
8861
+ _this.dictionaryService = dictionaryService;
8862
+ _this.showEmptyListMessage = false;
8863
+ _this.keyboardNavigationAllowed = false;
8864
+ return _this;
8865
+ }
8866
+ Object.defineProperty(FoehnMultiselectAutocompleteComponent.prototype, "defaultElementValues", {
8867
+ get: function () {
8868
+ return this.defaultElementValues_;
8869
+ },
8870
+ set: function (items) {
8871
+ this.defaultElementValues_ = __spreadArray([], __read(items));
8872
+ if ((!this.model || !this.model.length) && items) {
8873
+ this.updateNgModel(items);
8874
+ }
8875
+ },
8876
+ enumerable: false,
8877
+ configurable: true
8878
+ });
8879
+ Object.defineProperty(FoehnMultiselectAutocompleteComponent.prototype, "defaultElementValue", {
8880
+ set: function (item) {
8881
+ this.defaultElementValues = [item];
8882
+ },
8883
+ enumerable: false,
8884
+ configurable: true
8885
+ });
8886
+ FoehnMultiselectAutocompleteComponent.prototype.handleKeyboardDownEvent = function (event) {
8887
+ if (this.keyboardNavigationAllowed) {
8888
+ this.onKeyDownSelectedInner(event);
8889
+ }
8890
+ };
8891
+ FoehnMultiselectAutocompleteComponent.prototype.updateMultiselectAutocomplete = function () {
8892
+ var validValue = this.getValidValue();
8893
+ if (typeof validValue !== 'undefined') {
8894
+ this.updateNgModel(validValue);
8895
+ }
8896
+ };
8897
+ FoehnMultiselectAutocompleteComponent.prototype.handleUserInput = function () {
8898
+ var validValue = this.getValidValue();
8899
+ if (typeof validValue !== 'undefined') {
8900
+ this.handleChange(validValue);
8901
+ }
8902
+ };
8903
+ FoehnMultiselectAutocompleteComponent.prototype.addItem = function (item) {
8904
+ if (!!item) {
8905
+ if (!this.model) {
8906
+ this.model = [];
8907
+ }
8908
+ var index = this.model.indexOf(item);
8909
+ if (index === -1) {
8910
+ this.model.push(item);
8911
+ this.updateMultiselectAutocomplete();
8912
+ this.handleUserInput();
8913
+ this.manageSuggestionListAndFocusAfterAddingAnItem();
8914
+ }
8915
+ }
8916
+ };
8917
+ FoehnMultiselectAutocompleteComponent.prototype.removeItem = function (item) {
8918
+ var index = this.model.indexOf(item);
8919
+ if (index > -1) {
8920
+ this.model.splice(index, 1);
8921
+ this.triggerUserInput(this.model);
8922
+ this.manageSuggestionListAndFocusAfterRemovingAnItem();
8923
+ }
8924
+ };
8925
+ FoehnMultiselectAutocompleteComponent.prototype.trackByFn = function (index) {
8926
+ return index;
8927
+ };
8928
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/explicit-module-boundary-types
8929
+ FoehnMultiselectAutocompleteComponent.prototype.getLabel = function (value) {
8930
+ var elem = this.findElementByModelItem(value);
8931
+ return _super.prototype.getLabel.call(this, elem);
8932
+ };
8933
+ FoehnMultiselectAutocompleteComponent.prototype.getSelectedElementTabIndex = function (index) {
8934
+ var _this = this;
8935
+ var firstIndexFocusable = 0;
8936
+ if (!!this.defaultElementValues) {
8937
+ firstIndexFocusable = this.model.findIndex(function (selected) { return !_this.defaultElementValues.includes(selected); });
8938
+ }
8939
+ if (index !== firstIndexFocusable) {
8940
+ return -1;
8941
+ }
8942
+ return 0;
8943
+ };
8944
+ FoehnMultiselectAutocompleteComponent.prototype.isSelectedItemFocusable = function (index) {
8945
+ return !this.disabled && !!this.defaultElementValues && this.defaultElementValues.includes(this.model[index]);
8946
+ };
8947
+ FoehnMultiselectAutocompleteComponent.prototype.canBeDeleted = function (index) {
8948
+ return !this.defaultElementValues || !this.defaultElementValues.includes(this.model[index]);
8949
+ };
8950
+ FoehnMultiselectAutocompleteComponent.prototype.onSelectedItemsFocusin = function () {
8951
+ this.keyboardNavigationAllowed = true;
8952
+ this.currentFocusedElem = document.activeElement;
8953
+ };
8954
+ FoehnMultiselectAutocompleteComponent.prototype.onSelectedItemsFocusout = function () {
8955
+ this.keyboardNavigationAllowed = false;
8956
+ };
8957
+ FoehnMultiselectAutocompleteComponent.prototype.onAutocompleteElementsLoaded = function (elements) {
8958
+ var _this = this;
8959
+ // Need to wait for childView to be loaded
8960
+ setTimeout(function () {
8961
+ if (!!_this.autocompleteComponent) {
8962
+ _this.autocompleteComponent.elements = _this.filterAutocompleteElements(elements);
8963
+ if (!_this.disabled && !_this.autocompleteComponent.elements.length) {
8964
+ _this.showAlertMessageAndHideAutocomplete();
8965
+ }
8966
+ }
8967
+ });
8968
+ };
8969
+ FoehnMultiselectAutocompleteComponent.prototype.getDeleteButtonAriaLabel = function (element) {
8970
+ return "" + this.dictionaryService.getKeySync('foehn-multiselect-autocomplete.selected.delete.aria-label', { elementLabel: this.getLabel(element), componentLabel: this.label });
8971
+ };
8972
+ FoehnMultiselectAutocompleteComponent.prototype.getSelectedListAriaLabel = function () {
8973
+ return this.label + ": " + this.dictionaryService.getKeySync('foehn-multiselect-autocomplete.list-of-selected-items');
8974
+ };
8975
+ FoehnMultiselectAutocompleteComponent.prototype.findElementByModelItem = function (item) {
8976
+ var _this = this;
8977
+ if (!!this.elements && !!this.elements.length) {
8978
+ var itemValue_1 = typeof item === 'string' ? item : this.getValue(item);
8979
+ var elem = this.elements.find(function (element) { return _this.getValue(element) === itemValue_1; });
8980
+ if (!!elem) {
8981
+ return elem;
8982
+ }
8983
+ }
8984
+ return item;
8985
+ };
8986
+ FoehnMultiselectAutocompleteComponent.prototype.getValidValue = function () {
8987
+ if (!this.model || !this.model.length) {
8988
+ if (this.model_ !== undefined) {
8989
+ return null;
8990
+ }
8991
+ return undefined;
8992
+ }
8993
+ return this.model;
8994
+ };
8995
+ FoehnMultiselectAutocompleteComponent.prototype.getFirstDeleteButtonToFocus = function () {
8996
+ var closeButtonsElemRefArray = __spreadArray([], __read(this.closeButtonsElemRef.toArray()));
8997
+ if (!!closeButtonsElemRefArray.length) {
8998
+ return closeButtonsElemRefArray[0].nativeElement;
8999
+ }
9000
+ return null;
9001
+ };
9002
+ FoehnMultiselectAutocompleteComponent.prototype.navigateSelectedList = function (offset) {
9003
+ var _this = this;
9004
+ if (!this.disabled) {
9005
+ var closeButtonsElemRefArray = this.getDefaultSelectedElements().concat(__spreadArray([], __read(this.closeButtonsElemRef.toArray())));
9006
+ if (!!closeButtonsElemRefArray.length) {
9007
+ var focusIndex = closeButtonsElemRefArray.findIndex(function (value) { return _this.currentFocusedElem === value.nativeElement; });
9008
+ var newIndex = focusIndex + offset;
9009
+ if (newIndex >= closeButtonsElemRefArray.length) {
9010
+ newIndex = 0;
9011
+ }
9012
+ if (newIndex < 0) {
9013
+ newIndex = closeButtonsElemRefArray.length - 1;
9014
+ }
9015
+ var elemRef = closeButtonsElemRefArray[newIndex];
9016
+ if (!!elemRef) {
9017
+ elemRef.nativeElement.focus();
9018
+ }
9019
+ }
9020
+ }
9021
+ };
9022
+ FoehnMultiselectAutocompleteComponent.prototype.getDefaultSelectedElements = function () {
9023
+ return __spreadArray([], __read(this.selectedElemRef.toArray())).filter(function (value) { return value.nativeElement.getAttribute('is-default') === 'true'; });
9024
+ };
9025
+ FoehnMultiselectAutocompleteComponent.prototype.onKeyDownSelectedInner = function (keyEvent) {
9026
+ // IE doesn't support keyEvent.code, and has different values
9027
+ // in keyEvent.key (Down instead of ArrowDown for instance), hence the multi-support.
9028
+ var ie11CompatibleCode = keyEvent.code || keyEvent.key;
9029
+ switch (ie11CompatibleCode) {
9030
+ case 'Right':
9031
+ case 'ArrowRight':
9032
+ this.navigateSelectedList(1);
9033
+ break;
9034
+ case 'Left':
9035
+ case 'ArrowLeft':
9036
+ this.navigateSelectedList(-1);
9037
+ break;
9038
+ default:
9039
+ return true;
9040
+ }
9041
+ keyEvent.preventDefault();
9042
+ keyEvent.stopPropagation();
9043
+ return false;
9044
+ };
9045
+ FoehnMultiselectAutocompleteComponent.prototype.filterAutocompleteElements = function (elements) {
9046
+ var _this = this;
9047
+ var filteredElements = ObjectHelper.deepCopy(elements);
9048
+ if (!!this.model && !!this.model.length) {
9049
+ this.model.forEach(function (selected) {
9050
+ var e_1, _a;
9051
+ try {
9052
+ for (var _b = __values(filteredElements.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
9053
+ var _d = __read(_c.value, 2), index = _d[0], value = _d[1];
9054
+ var elem = _this.findElementByModelItem(selected);
9055
+ if (ObjectHelper.isEqual(elem, value)) {
9056
+ filteredElements.splice(index, 1);
9057
+ break;
9058
+ }
9059
+ }
9060
+ }
9061
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
9062
+ finally {
9063
+ try {
9064
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
9065
+ }
9066
+ finally { if (e_1) throw e_1.error; }
9067
+ }
9068
+ });
9069
+ }
9070
+ return filteredElements;
9071
+ };
9072
+ FoehnMultiselectAutocompleteComponent.prototype.manageSuggestionListAndFocusAfterAddingAnItem = function () {
9073
+ var _this = this;
9074
+ // Highlight selected suggestion in input so screen reader knows there is still some text in input
9075
+ this.autocompleteComponent.inputElement.nativeElement.select();
9076
+ // Remove selected item from autocomplete suggestion list
9077
+ this.autocompleteComponent.elements = this.filterAutocompleteElements(this.elements);
9078
+ // Check if we still have suggestions to display
9079
+ if (!this.autocompleteComponent.elements.length) {
9080
+ this.showAlertMessageAndHideAutocomplete();
9081
+ // Need setTimeout to ensure alert message is on the DOM and can be focusable
9082
+ setTimeout(function () {
9083
+ var alertMessage = _this.alertMessageContainer.nativeElement.querySelector('p');
9084
+ if (alertMessage) {
9085
+ alertMessage.focus();
9086
+ }
9087
+ });
9088
+ }
9089
+ };
9090
+ FoehnMultiselectAutocompleteComponent.prototype.manageSuggestionListAndFocusAfterRemovingAnItem = function () {
9091
+ var _this = this;
9092
+ // Hide message saying no more suggestions to display
9093
+ this.showEmptyListMessage = false;
9094
+ // Manually show autocomplete because there is at least one suggestions to display
9095
+ this.autocompleteComponent.inputElement.nativeElement.hidden = false;
9096
+ // Add back selected item to autocomplete suggestion list
9097
+ this.autocompleteComponent.elements = this.filterAutocompleteElements(this.elements);
9098
+ // When deleting a selected item, check were to set focus back
9099
+ this.closeButtonsElemRef.changes.pipe(operators.first()).subscribe(function () {
9100
+ var buttonToFocus = _this.getFirstDeleteButtonToFocus();
9101
+ if (!!buttonToFocus) {
9102
+ buttonToFocus.focus();
9103
+ }
9104
+ else {
9105
+ _this.autocompleteComponent.setFocusOnInput();
9106
+ _this.autocompleteComponent.onInputFocus();
9107
+ }
9108
+ });
9109
+ };
9110
+ FoehnMultiselectAutocompleteComponent.prototype.showAlertMessageAndHideAutocomplete = function () {
9111
+ // Show a message to user indicating there is no more suggestions to display
9112
+ this.showEmptyListMessage = true;
9113
+ // Manually reset and hide autocomplete because there is no more suggestions to display
9114
+ this.autocompleteInputValue = null;
9115
+ this.autocompleteComponent.inputElement.nativeElement.hidden = true;
9116
+ };
9117
+ return FoehnMultiselectAutocompleteComponent;
9118
+ }(FoehnAutocompleteComponent));
9119
+ FoehnMultiselectAutocompleteComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnMultiselectAutocompleteComponent, deps: [{ token: i0__namespace.NgZone }, { token: SdkDictionaryService }], target: i0__namespace.ɵɵFactoryTarget.Component });
9120
+ FoehnMultiselectAutocompleteComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: FoehnMultiselectAutocompleteComponent, selector: "foehn-multiselect-autocomplete", inputs: { defaultElementValues: "defaultElementValues", defaultElementValue: "defaultElementValue" }, host: { listeners: { "keydown": "handleKeyboardDownEvent($event)" } }, providers: [
9121
+ {
9122
+ provide: FoehnInputComponent,
9123
+ useExisting: i0.forwardRef(function () { return FoehnMultiselectAutocompleteComponent; }),
9124
+ multi: true
9125
+ }
9126
+ ], viewQueries: [{ propertyName: "autocompleteComponent", first: true, predicate: ["autocompleteComponent"], descendants: true }, { propertyName: "alertMessageContainer", first: true, predicate: ["alertMessageContainer"], descendants: true }, { propertyName: "closeButtonsElemRef", predicate: ["closeButtonsElemRef"], descendants: true }, { propertyName: "selectedElemRef", predicate: ["selectedElemRef"], descendants: true }], usesInheritance: true, ngImport: i0__namespace, template: "<foehn-autocomplete\n #autocompleteComponent\n [name]=\"name\"\n [label]=\"label\"\n [elements]=\"elements\"\n [elementsUrl]=\"elementsUrl\"\n [elementValue]=\"elementValue\"\n [elementLabel]=\"elementLabel\"\n [elementValueIdentity]=\"elementValueIdentity\"\n [elementDisabled]=\"elementDisabled\"\n [allElementDisabled]=\"allElementDisabled\"\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>\n <div\n [attr.role]=\"!disabled ? 'application' : null\"\n (focusin)=\"onSelectedItemsFocusin()\"\n (focusout)=\"onSelectedItemsFocusout()\"\n [tabindex]=\"(!!model && !!model.length) ? 0 : -1\"\n class=\"selected-list-container\"\n >\n <div class=\"sr-only\">\n {{'foehn-multiselect-autocomplete.list-of-selected-items.screen-reader.helper' | fromDictionary}}\n </div>\n <ul\n [id]=\"buildChildId() + 'SelectedItemsList'\"\n class=\"list-unstyled mb-1 d-flex align-content-stretch flex-wrap\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n aria-orientation=\"horizontal\"\n [attr.aria-label]=\"getSelectedListAriaLabel()\"\n >\n <li\n *ngFor=\"let element of model; let index = index; trackBy: trackByFn\"\n class=\"badge badge-pill badge-secondary mr-1 mb-1 py-2 px-3 d-flex align-items-center\"\n [tabindex]=\"isSelectedItemFocusable(index) ? 0 : -1\"\n [attr.is-default]=\"!canBeDeleted(index)\"\n #selectedElemRef\n >\n <ng-container *ngIf=\"!disabled\">\n <span *ngIf=\"!canBeDeleted(index)\" class=\"sr-only\">{{ 'foehn-multiselect-autocomplete.selected.screen-reader.default-value' | fromDictionary }}</span>\n <span *ngIf=\"canBeDeleted(index)\" class=\"sr-only\">{{ 'foehn-multiselect-autocomplete.selected.screen-reader.selected-value' | fromDictionary }}</span>\n </ng-container>\n\n <span [innerHtml]=\"getLabel(element)\"></span>\n\n <button\n *ngIf=\"!disabled && canBeDeleted(index)\"\n type=\"button\"\n class=\"btn btn-link ml-2\"\n [tabindex]=\"getSelectedElementTabIndex(index)\"\n (click)=\"removeItem(element)\"\n [attr.aria-label]=\"getDeleteButtonAriaLabel(element)\"\n #closeButtonsElemRef\n >\n <foehn-icon-times\n title=\"{{ 'foehn-multiselect-autocomplete.selected.delete' | fromDictionary: {elementLabel: getLabel(element)} }}\"\n ></foehn-icon-times>\n </button>\n </li>\n </ul>\n </div>\n\n <small\n *ngIf=\"!showEmptyListMessage\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText ? helpText : 'foehn-multiselect-autocomplete.autocomplete.screen-reader.label' | fromDictionary\"\n ></small>\n\n <div\n [id]=\"buildChildId() + 'AlertMessageContainer'\"\n role=\"status\"\n tabindex=\"-1\"\n #alertMessageContainer\n >\n <p\n *ngIf=\"showEmptyListMessage\"\n class=\"alert alert-info\"\n tabindex=\"0\"\n >{{'foehn-multiselect-autocomplete.autocomplete.empty-message' | fromDictionary}}</p>\n </div>\n</foehn-autocomplete>\n", styles: [".selected-list-container button>.btn,.btn-link{line-height:inherit;padding:0}.selected-list-container li:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem #ffbf47}.selected-list-container:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem #ffbf47}foehn-autocomplete p.alert:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem #ffbf47}\n"], components: [{ type: FoehnAutocompleteComponent, selector: "foehn-autocomplete", inputs: ["searchValueMinCharsCount", "allowCustomValue", "customValueModelGenerator"] }, { type: FoehnIconTimesComponent, selector: "foehn-icon-times" }], directives: [{ type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "fromDictionary": SdkDictionaryPipe } });
9127
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnMultiselectAutocompleteComponent, decorators: [{
9128
+ type: i0.Component,
9129
+ args: [{
9130
+ selector: 'foehn-multiselect-autocomplete',
9131
+ templateUrl: './foehn-multiselect-autocomplete.component.html',
9132
+ styleUrls: ['./foehn-multiselect-autocomplete.component.css'],
9133
+ providers: [
9134
+ {
9135
+ provide: FoehnInputComponent,
9136
+ useExisting: i0.forwardRef(function () { return FoehnMultiselectAutocompleteComponent; }),
9137
+ multi: true
9138
+ }
9139
+ ]
9140
+ }]
9141
+ }], ctorParameters: function () { return [{ type: i0__namespace.NgZone }, { type: SdkDictionaryService }]; }, propDecorators: { autocompleteComponent: [{
9142
+ type: i0.ViewChild,
9143
+ args: ['autocompleteComponent']
9144
+ }], alertMessageContainer: [{
9145
+ type: i0.ViewChild,
9146
+ args: ['alertMessageContainer']
9147
+ }], closeButtonsElemRef: [{
9148
+ type: i0.ViewChildren,
9149
+ args: ['closeButtonsElemRef']
9150
+ }], selectedElemRef: [{
9151
+ type: i0.ViewChildren,
9152
+ args: ['selectedElemRef']
9153
+ }], defaultElementValues: [{
9154
+ type: i0.Input
9155
+ }], defaultElementValue: [{
9156
+ type: i0.Input
9157
+ }], handleKeyboardDownEvent: [{
9158
+ type: i0.HostListener,
9159
+ args: ['keydown', ['$event']]
9160
+ }] } });
9161
+
9162
+ var FoehnMultiselectAutocompleteModule = /** @class */ (function () {
9163
+ function FoehnMultiselectAutocompleteModule() {
9164
+ }
9165
+ return FoehnMultiselectAutocompleteModule;
9166
+ }());
9167
+ FoehnMultiselectAutocompleteModule.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnMultiselectAutocompleteModule, deps: [], target: i0__namespace.ɵɵFactoryTarget.NgModule });
9168
+ FoehnMultiselectAutocompleteModule.ɵmod = i0__namespace.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnMultiselectAutocompleteModule, declarations: [FoehnMultiselectAutocompleteComponent], imports: [FoehnAutocompleteModule,
9169
+ SdkDictionaryModule,
9170
+ FoehnValidationAlertsModule,
9171
+ i3.CommonModule,
9172
+ FoehnIconsModule,
9173
+ i4.FormsModule], exports: [FoehnMultiselectAutocompleteComponent] });
9174
+ FoehnMultiselectAutocompleteModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnMultiselectAutocompleteModule, imports: [[
9175
+ FoehnAutocompleteModule,
9176
+ SdkDictionaryModule,
9177
+ FoehnValidationAlertsModule,
9178
+ i3.CommonModule,
9179
+ FoehnIconsModule,
9180
+ i4.FormsModule
9181
+ ]] });
9182
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnMultiselectAutocompleteModule, decorators: [{
9183
+ type: i0.NgModule,
9184
+ args: [{
9185
+ imports: [
9186
+ FoehnAutocompleteModule,
9187
+ SdkDictionaryModule,
9188
+ FoehnValidationAlertsModule,
9189
+ i3.CommonModule,
9190
+ FoehnIconsModule,
9191
+ i4.FormsModule
9192
+ ],
9193
+ declarations: [FoehnMultiselectAutocompleteComponent],
9194
+ exports: [FoehnMultiselectAutocompleteComponent]
9195
+ }]
9196
+ }] });
9197
+
8840
9198
  var FoehnInputNav13Component = /** @class */ (function (_super) {
8841
9199
  __extends(FoehnInputNav13Component, _super);
8842
9200
  function FoehnInputNav13Component() {
@@ -10039,7 +10397,7 @@
10039
10397
  }]
10040
10398
  }] });
10041
10399
 
10042
- var RECAPTCHA_URL = 'https://www.google.com/recaptcha/api.js?onload=reCaptchaLoad&render=explicit';
10400
+ var RECAPTCHA_URL = 'https://www.recaptcha.net/recaptcha/api.js?onload=reCaptchaLoad&render=explicit';
10043
10401
  var SCRIPT_ID = 'prestations-ng-captcha-script';
10044
10402
  /**
10045
10403
  * Integration with Google Recaptcha.
@@ -11342,7 +11700,7 @@
11342
11700
  useExisting: i0.forwardRef(function () { return FoehnPictureUploadComponent; }),
11343
11701
  multi: true
11344
11702
  }
11345
- ], usesInheritance: true, ngImport: i0__namespace, template: "<div\n [attr.id]=\"buildId('Container')\"\n [class.has-danger]=\"hasErrors()\"\n [class.vd-form-group-danger]=\"hasErrors()\"\n class=\"form-group clearable-input-form-group\"\n tabindex=\"-1\"\n>\n <label\n [attr.for]=\"buildChildId()\"\n *ngIf=\"!!label\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <input type=\"hidden\" [name]=\"name || label\" [ngModel]=\"model\" />\n\n <ng-content></ng-content>\n\n <div *ngIf=\"hasPicture\" class=\"row\">\n <div class=\"col-md-6\">\n <img\n [id]=\"buildChildId('Picture')\"\n [attr.alt]=\"label\"\n [src]=\"getDownloadUrl()\"\n />\n </div>\n <div class=\"col-md-4\">\n <button\n type=\"button\"\n class=\"btn btn-danger w-100\"\n [attr.id]=\"buildChildId('DeleteButton')\"\n (click)=\"deleteFile()\"\n >\n {{\n 'foehn-picture-upload.delete-picture-label' | fromDictionary\n }}\n </button>\n </div>\n </div>\n\n <div *ngIf=\"!hasPicture && !croppedPictureAsBase64Url\">\n <input\n #inputFile\n type=\"file\"\n class=\"form-control-file d-none\"\n [attr.id]=\"name\"\n [attr.accept]=\"'.jpeg,.jpg,.png'\"\n [multiple]=\"false\"\n [name]=\"name\"\n (change)=\"onPictureSelection($event)\"\n />\n\n <button\n type=\"button\"\n class=\"btn btn-primary my-2\"\n [attr.id]=\"buildChildId('ChooseButton')\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-describedby]=\"buildId('ErrorsContainer')\"\n (click)=\"inputFile.click()\"\n [disabled]=\"loading\"\n >\n {{ 'foehn-picture-upload.choose-button-label' | fromDictionary }}\n </button>\n </div>\n\n <div *ngIf=\"loading\">\n {{ 'foehn-picture-upload.loading-label' | fromDictionary }}\n </div>\n\n <div *ngIf=\"!hasPicture\" class=\"row\">\n <div class=\"col-md-6\">\n <image-cropper\n [id]=\"buildChildId('Cropper')\"\n (cropperReady)=\"loading = false\"\n (imageCropped)=\"onImageCropped($event)\"\n (loadImageFailed)=\"onPictureSelectionFailed()\"\n [aspectRatio]=\"3 / 4\"\n [imageChangedEvent]=\"pictureToCrop\"\n [maintainAspectRatio]=\"true\"\n [resizeToWidth]=\"resizeToWidth\"\n [resizeToHeight]=\"resizeToHeight\"\n [onlyScaleDown]=\"true\"\n format=\"png\"\n ></image-cropper>\n </div>\n\n <div *ngIf=\"!hasPicture\" class=\"col-md-4\">\n <div class=\"row mb-3\">\n <button\n *ngIf=\"croppedPictureAsBase64Url\"\n type=\"button\"\n class=\"btn btn-primary w-100\"\n [attr.id]=\"buildChildId('SaveButton')\"\n (click)=\"savePicture()\"\n >\n {{\n 'foehn-picture-upload.validate-selection-label'\n | fromDictionary\n }}\n </button>\n </div>\n <div class=\"row\">\n <button\n *ngIf=\"croppedPictureAsBase64Url\"\n type=\"button\"\n class=\"btn btn-secondary w-100\"\n [attr.id]=\"buildChildId('CancelButton')\"\n (click)=\"resetPictureSelection()\"\n >\n {{\n 'foehn-picture-upload.cancel-selection-label'\n | fromDictionary\n }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", components: [{ type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: i5__namespace.ImageCropperComponent, selector: "image-cropper", inputs: ["format", "transform", "maintainAspectRatio", "aspectRatio", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "autoCrop", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "cropper", "alignImage", "disabled", "imageChangedEvent", "imageURL", "imageBase64", "imageFile"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "fromDictionary": SdkDictionaryPipe } });
11703
+ ], usesInheritance: true, ngImport: i0__namespace, template: "<div\n [attr.id]=\"buildId('Container')\"\n [class.has-danger]=\"hasErrors()\"\n [class.vd-form-group-danger]=\"hasErrors()\"\n class=\"form-group clearable-input-form-group\"\n tabindex=\"-1\"\n>\n <label\n [attr.for]=\"buildChildId()\"\n *ngIf=\"!!label\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <input type=\"hidden\" [name]=\"name || label\" [ngModel]=\"model\" />\n\n <ng-content></ng-content>\n\n <div *ngIf=\"hasPicture\" class=\"row\">\n <div class=\"col-md-6\">\n <img\n [id]=\"buildChildId('Picture')\"\n [attr.alt]=\"label\"\n [src]=\"getDownloadUrl()\"\n />\n </div>\n <div class=\"col-md-4\">\n <button\n type=\"button\"\n class=\"btn btn-danger w-100\"\n [attr.id]=\"buildChildId('DeleteButton')\"\n (click)=\"deleteFile()\"\n >\n {{\n 'foehn-picture-upload.delete-picture-label' | fromDictionary\n }}\n </button>\n </div>\n </div>\n\n <div *ngIf=\"!hasPicture && !croppedPictureAsBase64Url\">\n <input\n #inputFile\n type=\"file\"\n class=\"form-control-file d-none\"\n [attr.id]=\"name\"\n [attr.accept]=\"'.jpeg,.jpg,.png'\"\n [multiple]=\"false\"\n [name]=\"name\"\n (change)=\"onPictureSelection($event)\"\n />\n\n <button\n type=\"button\"\n class=\"btn btn-primary my-2\"\n [attr.id]=\"buildChildId('ChooseButton')\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-describedby]=\"buildId('ErrorsContainer')\"\n (click)=\"inputFile.click()\"\n [attr.disabled]=\"loading ? 'disabled' : null\"\n >\n {{ 'foehn-picture-upload.choose-button-label' | fromDictionary }}\n </button>\n </div>\n\n <div *ngIf=\"loading\">\n {{ 'foehn-picture-upload.loading-label' | fromDictionary }}\n </div>\n\n <div *ngIf=\"!hasPicture\" class=\"row\">\n <div class=\"col-md-6\">\n <image-cropper\n [id]=\"buildChildId('Cropper')\"\n (cropperReady)=\"loading = false\"\n (imageCropped)=\"onImageCropped($event)\"\n (loadImageFailed)=\"onPictureSelectionFailed()\"\n [aspectRatio]=\"3 / 4\"\n [imageChangedEvent]=\"pictureToCrop\"\n [maintainAspectRatio]=\"true\"\n [resizeToWidth]=\"resizeToWidth\"\n [resizeToHeight]=\"resizeToHeight\"\n [onlyScaleDown]=\"true\"\n format=\"png\"\n ></image-cropper>\n </div>\n\n <div *ngIf=\"!hasPicture\" class=\"col-md-4\">\n <div class=\"row mb-3\">\n <button\n *ngIf=\"croppedPictureAsBase64Url\"\n type=\"button\"\n class=\"btn btn-primary w-100\"\n [attr.id]=\"buildChildId('SaveButton')\"\n (click)=\"savePicture()\"\n >\n {{\n 'foehn-picture-upload.validate-selection-label'\n | fromDictionary\n }}\n </button>\n </div>\n <div class=\"row\">\n <button\n *ngIf=\"croppedPictureAsBase64Url\"\n type=\"button\"\n class=\"btn btn-secondary w-100\"\n [attr.id]=\"buildChildId('CancelButton')\"\n (click)=\"resetPictureSelection()\"\n >\n {{\n 'foehn-picture-upload.cancel-selection-label'\n | fromDictionary\n }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", components: [{ type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: i5__namespace.ImageCropperComponent, selector: "image-cropper", inputs: ["format", "transform", "maintainAspectRatio", "aspectRatio", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "autoCrop", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "cropper", "alignImage", "disabled", "imageChangedEvent", "imageURL", "imageBase64", "imageFile"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "fromDictionary": SdkDictionaryPipe } });
11346
11704
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnPictureUploadComponent, decorators: [{
11347
11705
  type: i0.Component,
11348
11706
  args: [{
@@ -12980,7 +13338,7 @@
12980
13338
  return FoehnDatePickerComponent;
12981
13339
  }());
12982
13340
  FoehnDatePickerComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnDatePickerComponent, deps: [{ token: SdkDictionaryService }, { token: i0__namespace.NgZone }], target: i0__namespace.ɵɵFactoryTarget.Component });
12983
- FoehnDatePickerComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: FoehnDatePickerComponent, selector: "foehn-date-picker", inputs: { minYear: "minYear", maxYear: "maxYear", datepickerTriggerHtmlElement: "datepickerTriggerHtmlElement", closeable: "closeable", isDatepickerVisible: "isDatepickerVisible", model: "model" }, outputs: { modelChange: "modelChange", userInput: "userInput", isDatepickerVisibleChange: "isDatepickerVisibleChange" }, host: { listeners: { "keyup": "handleKeyboardUpEvent($event)", "keydown": "handleKeyboardDownEvent($event)" } }, viewQueries: [{ propertyName: "daysButtonsElemRef", predicate: ["dayButtonElemRef"], descendants: true }], ngImport: i0__namespace, template: "<div\n id=\"datepicker_wrapper\"\n *ngIf=\"isDatepickerVisible\"\n [cdkTrapFocus]=\"!!datepickerTriggerHtmlElement\"\n tabindex=\"-1\"\n role=\"application\"\n [attr.aria-label]=\"\n 'foehn-date-picker.container.aria-label' | fromDictionary\n \"\n>\n <button\n *ngIf=\"closeable\"\n (click)=\"isDatepickerVisible = false\"\n type=\"button\"\n class=\"btn close\"\n [attr.aria-label]=\"\n 'foehn-date-picker.close-button.aria-label' | fromDictionary\n \"\n id=\"closeButton\"\n >\n <span aria-hidden=\"true\">&times;</span>\n </button>\n <div id=\"datepicker_header\" class=\"d-flex justify-content-between\">\n <button\n id=\"previous-month\"\n class=\"btn btn-link\"\n (click)=\"previousMonth()\"\n >\n <foehn-icon-chevron-left\n [title]=\"\n 'foehn-date-picker.previous-month-button.title'\n | fromDictionary\n \"\n ></foehn-icon-chevron-left>\n </button>\n <ng-container *ngIf=\"currentMonthYear | async as monthYear\">\n <span id=\"month-year-label\" aria-live=\"polite\" class=\"sr-only\">\n {{\n 'foehn-date-picker.screen-reader.actual-month-displayed'\n | fromDictionary\n }}\n {{ getMonthAsReadable(monthYear.month) }} {{ monthYear.year }}\n </span>\n <foehn-select\n id=\"month-input\"\n class=\"align-self-center\"\n [label]=\"\n 'foehn-date-picker.screen-reader.month-input.label'\n | fromDictionary\n \"\n [isLabelSrOnly]=\"true\"\n [elements]=\"monthListItem\"\n [model]=\"monthYear.month\"\n [required]=\"false\"\n (userInput)=\"userInputMonth($event)\"\n ></foehn-select>\n <foehn-select\n id=\"year-input\"\n class=\"align-self-center\"\n [label]=\"\n 'foehn-date-picker.screen-reader.year-input.label'\n | fromDictionary\n \"\n [isLabelSrOnly]=\"true\"\n [elements]=\"yearListItem\"\n [model]=\"monthYear.year\"\n [required]=\"false\"\n (userInput)=\"userInputYear($event)\"\n ></foehn-select>\n </ng-container>\n <button id=\"next-month\" class=\"btn btn-link\" (click)=\"nextMonth()\">\n <foehn-icon-chevron-right\n [title]=\"\n 'foehn-date-picker.next-month-button.title' | fromDictionary\n \"\n ></foehn-icon-chevron-right>\n </button>\n </div>\n <table\n id=\"datepicker_table\"\n role=\"grid\"\n (focusin)=\"onDaysFocusin()\"\n (focusout)=\"onDaysFocusout()\"\n >\n <thead role=\"presentation\" aria-hidden=\"true\">\n <tr role=\"row\">\n <th\n scope=\"col\"\n role=\"columnheader\"\n *ngFor=\"let weekday of weekDays\"\n >\n <foehn-abbr\n [text]=\"weekday.substr(0, 2)\"\n [title]=\"weekday\"\n ></foehn-abbr>\n </th>\n </tr>\n </thead>\n <tbody role=\"presentation\">\n <tr role=\"row\" *ngFor=\"let week of weeks; let indexRow = index\">\n <td\n role=\"gridcell\"\n *ngFor=\"let dayOfWeek of week; let indexColumn = index\"\n >\n <button\n class=\"btn w-100\"\n #dayButtonElemRef\n [id]=\"'day_' + indexRow + '_' + indexColumn\"\n [tabindex]=\"getDayTabIndex(dayOfWeek)\"\n [class.btn-info]=\"!isToday(dayOfWeek.date)\"\n [class.btn-secondary]=\"isToday(dayOfWeek.date)\"\n [class.btn-danger]=\"isSelected(dayOfWeek.date)\"\n [attr.aria-label]=\"\n weekDays[indexColumn] +\n ' ' +\n dayOfWeek.dateAsReadable\n \"\n [attr.data-is-today]=\"isToday(dayOfWeek.date)\"\n [attr.data-is-selected]=\"isSelected(dayOfWeek.date)\"\n [attr.data-row-index]=\"indexRow\"\n [attr.data-column-index]=\"indexColumn\"\n [attr.day-number]=\"dayOfWeek.dayOfMonth\"\n [disabled]=\"!dayOfWeek.isCurrentMonth\"\n (click)=\"handleUserInput(dayOfWeek.date)\"\n >\n {{ dayOfWeek.dayOfMonth }}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n", styles: [":host ::ng-deep .btn-link .svg-inline--fa{color:#000!important}#datepicker_header{margin-bottom:10px}#datepicker_wrapper{max-width:245px;padding:5px;border:1px solid #dfdfdf;background-color:#fff}#datepicker_wrapper .h4{margin-bottom:0}#datepicker_wrapper thead th{text-align:center;width:15%}#datepicker_wrapper .btn{padding:2px 4px}#datepicker_wrapper button.close{position:absolute;right:-14px;top:-18px;background-color:#fff;border:1px solid #dfdfdf;border-radius:50%;width:30px;height:30px;opacity:1}#datepicker_wrapper #month-input{width:50%;margin-right:5px}:host ::ng-deep foehn-select select.form-control{padding:0;margin:0;height:30px}:host ::ng-deep foehn-select .form-group{margin:0}\n"], components: [{ type: FoehnIconChevronLeftComponent, selector: "foehn-icon-chevron-left" }, { type: FoehnSelectComponent, selector: "foehn-select", inputs: ["multiple"] }, { type: FoehnIconChevronRightComponent, selector: "foehn-icon-chevron-right" }, { type: FoehnAbbrComponent, selector: "foehn-abbr", inputs: ["title", "text"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2__namespace.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "fromDictionary": SdkDictionaryPipe, "async": i3__namespace.AsyncPipe } });
13341
+ FoehnDatePickerComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: FoehnDatePickerComponent, selector: "foehn-date-picker", inputs: { minYear: "minYear", maxYear: "maxYear", datepickerTriggerHtmlElement: "datepickerTriggerHtmlElement", closeable: "closeable", isDatepickerVisible: "isDatepickerVisible", model: "model" }, outputs: { modelChange: "modelChange", userInput: "userInput", isDatepickerVisibleChange: "isDatepickerVisibleChange" }, host: { listeners: { "keyup": "handleKeyboardUpEvent($event)", "keydown": "handleKeyboardDownEvent($event)" } }, viewQueries: [{ propertyName: "daysButtonsElemRef", predicate: ["dayButtonElemRef"], descendants: true }], ngImport: i0__namespace, template: "<div\n id=\"datepicker_wrapper\"\n *ngIf=\"isDatepickerVisible\"\n [cdkTrapFocus]=\"!!datepickerTriggerHtmlElement\"\n tabindex=\"-1\"\n role=\"application\"\n [attr.aria-label]=\"\n 'foehn-date-picker.container.aria-label' | fromDictionary\n \"\n>\n <button\n *ngIf=\"closeable\"\n (click)=\"isDatepickerVisible = false\"\n type=\"button\"\n class=\"btn close\"\n [attr.aria-label]=\"\n 'foehn-date-picker.close-button.aria-label' | fromDictionary\n \"\n id=\"closeButton\"\n >\n <span aria-hidden=\"true\">&times;</span>\n </button>\n <div id=\"datepicker_header\" class=\"d-flex justify-content-between\">\n <button\n id=\"previous-month\"\n class=\"btn btn-link\"\n (click)=\"previousMonth()\"\n >\n <foehn-icon-chevron-left\n [title]=\"\n 'foehn-date-picker.previous-month-button.title'\n | fromDictionary\n \"\n ></foehn-icon-chevron-left>\n </button>\n <ng-container *ngIf=\"currentMonthYear | async as monthYear\">\n <span id=\"month-year-label\" aria-live=\"polite\" class=\"sr-only\">\n {{\n 'foehn-date-picker.screen-reader.actual-month-displayed'\n | fromDictionary\n }}\n {{ getMonthAsReadable(monthYear.month) }} {{ monthYear.year }}\n </span>\n <foehn-select\n id=\"month-input\"\n class=\"align-self-center\"\n [label]=\"\n 'foehn-date-picker.screen-reader.month-input.label'\n | fromDictionary\n \"\n [isLabelSrOnly]=\"true\"\n [elements]=\"monthListItem\"\n [model]=\"monthYear.month\"\n [required]=\"false\"\n (userInput)=\"userInputMonth($event)\"\n ></foehn-select>\n <foehn-select\n id=\"year-input\"\n class=\"align-self-center\"\n [label]=\"\n 'foehn-date-picker.screen-reader.year-input.label'\n | fromDictionary\n \"\n [isLabelSrOnly]=\"true\"\n [elements]=\"yearListItem\"\n [model]=\"monthYear.year\"\n [required]=\"false\"\n (userInput)=\"userInputYear($event)\"\n ></foehn-select>\n </ng-container>\n <button id=\"next-month\" class=\"btn btn-link\" (click)=\"nextMonth()\">\n <foehn-icon-chevron-right\n [title]=\"\n 'foehn-date-picker.next-month-button.title' | fromDictionary\n \"\n ></foehn-icon-chevron-right>\n </button>\n </div>\n <table\n id=\"datepicker_table\"\n role=\"grid\"\n (focusin)=\"onDaysFocusin()\"\n (focusout)=\"onDaysFocusout()\"\n >\n <thead role=\"presentation\" aria-hidden=\"true\">\n <tr role=\"row\">\n <th\n scope=\"col\"\n role=\"columnheader\"\n *ngFor=\"let weekday of weekDays\"\n >\n <foehn-abbr\n [text]=\"weekday.substr(0, 2)\"\n [title]=\"weekday\"\n ></foehn-abbr>\n </th>\n </tr>\n </thead>\n <tbody role=\"presentation\">\n <tr role=\"row\" *ngFor=\"let week of weeks; let indexRow = index\">\n <td\n role=\"gridcell\"\n *ngFor=\"let dayOfWeek of week; let indexColumn = index\"\n >\n <button\n class=\"btn w-100\"\n #dayButtonElemRef\n [id]=\"'day_' + indexRow + '_' + indexColumn\"\n [tabindex]=\"getDayTabIndex(dayOfWeek)\"\n [class.btn-info]=\"!isToday(dayOfWeek.date)\"\n [class.btn-secondary]=\"isToday(dayOfWeek.date)\"\n [class.btn-danger]=\"isSelected(dayOfWeek.date)\"\n [attr.aria-label]=\"\n weekDays[indexColumn] +\n ' ' +\n dayOfWeek.dateAsReadable\n \"\n [attr.data-is-today]=\"isToday(dayOfWeek.date)\"\n [attr.data-is-selected]=\"isSelected(dayOfWeek.date)\"\n [attr.data-row-index]=\"indexRow\"\n [attr.data-column-index]=\"indexColumn\"\n [attr.day-number]=\"dayOfWeek.dayOfMonth\"\n [attr.disabled]=\"!dayOfWeek.isCurrentMonth ? 'disabled' : null\"\n (click)=\"handleUserInput(dayOfWeek.date)\"\n >\n {{ dayOfWeek.dayOfMonth }}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n", styles: [":host ::ng-deep .btn-link .svg-inline--fa{color:#000!important}#datepicker_header{margin-bottom:10px}#datepicker_wrapper{max-width:245px;padding:5px;border:1px solid #dfdfdf;background-color:#fff}#datepicker_wrapper .h4{margin-bottom:0}#datepicker_wrapper thead th{text-align:center;width:15%}#datepicker_wrapper .btn{padding:2px 4px}#datepicker_wrapper button.close{position:absolute;right:-14px;top:-18px;background-color:#fff;border:1px solid #dfdfdf;border-radius:50%;width:30px;height:30px;opacity:1}#datepicker_wrapper #month-input{width:50%;margin-right:5px}:host ::ng-deep foehn-select select.form-control{padding:0;margin:0;height:30px}:host ::ng-deep foehn-select .form-group{margin:0}\n"], components: [{ type: FoehnIconChevronLeftComponent, selector: "foehn-icon-chevron-left" }, { type: FoehnSelectComponent, selector: "foehn-select", inputs: ["multiple"] }, { type: FoehnIconChevronRightComponent, selector: "foehn-icon-chevron-right" }, { type: FoehnAbbrComponent, selector: "foehn-abbr", inputs: ["title", "text"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2__namespace.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "fromDictionary": SdkDictionaryPipe, "async": i3__namespace.AsyncPipe } });
12984
13342
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnDatePickerComponent, decorators: [{
12985
13343
  type: i0.Component,
12986
13344
  args: [{
@@ -13371,6 +13729,8 @@
13371
13729
  exports.FoehnModalModule = FoehnModalModule;
13372
13730
  exports.FoehnMultiUploadComponent = FoehnMultiUploadComponent;
13373
13731
  exports.FoehnMultiUploadModule = FoehnMultiUploadModule;
13732
+ exports.FoehnMultiselectAutocompleteComponent = FoehnMultiselectAutocompleteComponent;
13733
+ exports.FoehnMultiselectAutocompleteModule = FoehnMultiselectAutocompleteModule;
13374
13734
  exports.FoehnNavigationComponent = FoehnNavigationComponent;
13375
13735
  exports.FoehnNavigationModule = FoehnNavigationModule;
13376
13736
  exports.FoehnNavigationService = FoehnNavigationService;