@symphony-talent/component-library 4.134.0 → 4.136.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -26,29 +26,8 @@ export class InputChipsComponent {
26
26
  ],
27
27
  asyncValidators: this.asyncValidators
28
28
  }));
29
- this.form.valueChanges.subscribe(sc => {
30
- if (this.form.controls[this.controlName].status === 'INVALID') {
31
- for (const errorMessageKey in this.errorMessages) {
32
- if (this.form.controls[this.controlName].errors.hasOwnProperty(errorMessageKey)) {
33
- const lastTag = this.form.controls[this.controlName].value;
34
- lastTag[lastTag.length - 1].hasError = true;
35
- this.validationMessage = this.errorMessages[errorMessageKey];
36
- }
37
- }
38
- this.canAddTag = false;
39
- }
40
- else {
41
- this.canAddTag = true;
42
- }
43
- });
44
29
  }
45
30
  onAdd(event) {
46
- // if form control has at least 1 error do not let user add new item
47
- if (this.form.controls[this.controlErrorCount].value > 1) {
48
- let chips = this.form.controls[this.controlName].value;
49
- chips = chips.filter(chip => chip.value !== event.value);
50
- this.form.controls[this.controlName].patchValue(chips);
51
- }
52
31
  this.form.controls[this.controlName].updateValueAndValidity();
53
32
  }
54
33
  onRemove(event) {
@@ -74,7 +53,7 @@ export class InputChipsComponent {
74
53
  }
75
54
  }
76
55
  InputChipsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: InputChipsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
77
- InputChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: InputChipsComponent, selector: "symphony-input-chips", inputs: { chips: "chips", autocompleteList: "autocompleteList", validators: "validators", asyncValidators: "asyncValidators", errorMessages: "errorMessages", controlName: "controlName", form: "form", label: "label", isDisabled: "isDisabled" }, ngImport: i0, template: "<div [formGroup]=\"form\">\n <label for=\"item\" *ngIf=\"label\" class=\"input-label\">{{ label }} </label>\n <tag-input\n #input\n class=\"sfx-chips\"\n [formControlName]=\"controlName\"\n [asyncValidators]=\"asyncValidators\"\n [errorMessages]=\"errorMessages\"\n [addOnBlur]=\"true\"\n [@.disabled]=\"isDisabled\"\n (onAdd)=\"onAdd($event)\"\n (onRemove)=\"onRemove($event)\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n <span>\n <symphony-chip\n [chipLabel]=\"item.display\"\n [hasError]=\"item.hasError\"\n [hasClose]=\"true\"\n (removeChip)=\"input.removeItem(item, index)\"\n >\n </symphony-chip>\n </span>\n </ng-template>\n\n <div class=\"error-message\">{{ validationMessage }}</div>\n <tag-input-dropdown\n [showDropdownIfEmpty]=\"true\"\n [autocompleteItems]=\"autocompleteList\"\n [appendToBody]=\"false\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n {{ item.display }}\n </ng-template>\n </tag-input-dropdown>\n </tag-input>\n <input type=\"hidden\" [formControlName]=\"controlErrorCount\" value=\"0\" />\n</div>\n", styles: [".sfx .input-label{display:block;font-family:neuzeit_groteskbold,sans-serif;margin-bottom:.27rem;line-height:25px}.sfx .sfx-chips .ng2-tag-input{border-bottom:0;min-height:auto;border:1px solid #d0d0d0;border-radius:4px;padding:4px 0 0 4px;max-height:110px;height:100%;overflow-y:auto}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar{width:10px}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-track{box-shadow:inset 0 0 2px transparent;border-radius:30px}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:30px;border-right:2px white solid;background-clip:padding-box}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-thumb:hover{cursor:pointer}.sfx .sfx-chips .ng2-tag-input.ng2-tag-input--focused,.sfx .sfx-chips .ng2-tag-input.ng2-tag-input--invalid{border-bottom:1px solid #d0d0d0}.sfx .sfx-chips .ng2-tag-input__text-input{padding:0;height:30px;font-family:neuzeit_groteskregular,sans-serif}.sfx .sfx-chips .ng2-tag-input__text-input::-moz-placeholder{text-indent:-9999px}.sfx .sfx-chips .ng2-tag-input__text-input:-ms-input-placeholder{text-indent:-9999px}.sfx .sfx-chips .ng2-tag-input__text-input::placeholder{text-indent:-9999px}.sfx .sfx-chips tag,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active{font-family:neuzeit_groteskregular,sans-serif;line-height:inherit;background:none;margin:0 0 5px;padding:0;height:auto}.sfx .sfx-chips tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):focus,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active:not(.readonly):not(.tag--editing):focus{background:none;color:#fff;cursor:default;box-shadow:none}.sfx .sfx-chips .error-message{color:#f0001e;font-size:14px}.sfx .sfx-chips .ng2-dropdown-menu{position:relative!important;width:100%;display:block;top:0!important;left:0!important;margin-top:0;border:1px solid #d0d0d0;border-width:0 1px 1px 1px;box-shadow:0 10px 10px rgba(0,0,0,.2);max-height:260px;padding-top:0}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar{width:10px}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-track{box-shadow:inset 0 0 2px transparent;border-radius:30px}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:30px;border-right:2px white solid;background-clip:padding-box}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-thumb:hover{cursor:pointer}.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item{font-family:neuzeit_groteskbold;letter-spacing:normal;max-height:40px;line-height:35px}.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item--selected,.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item--selected:active{background:#000;color:#fff}\n"], components: [{ type: i1.TagInputComponent, selector: "tag-input", inputs: ["separatorKeys", "separatorKeyCodes", "placeholder", "secondaryPlaceholder", "maxItems", "validators", "asyncValidators", "onlyFromAutocomplete", "errorMessages", "theme", "onTextChangeDebounce", "inputId", "inputClass", "clearOnBlur", "hideForm", "addOnBlur", "addOnPaste", "pasteSplitPattern", "blinkIfDupe", "removable", "editable", "allowDupes", "modelAsStrings", "trimTags", "ripple", "tabindex", "disable", "dragZone", "onRemoving", "onAdding", "animationDuration", "inputText"], outputs: ["onAdd", "onRemove", "onSelect", "onFocus", "onBlur", "onTextChange", "onPaste", "onValidationError", "onTagEdited", "inputTextChange"] }, { type: i2.ChipComponent, selector: "symphony-chip", inputs: ["chipLabel", "hasClose", "hasError"], outputs: ["removeChip"] }, { type: i1.TagInputDropdown, selector: "tag-input-dropdown", inputs: ["offset", "focusFirstElement", "showDropdownIfEmpty", "minimumTextLength", "limitItemsTo", "displayBy", "identifyBy", "matchingFn", "appendToBody", "keepOpen", "dynamicUpdate", "zIndex", "autocompleteItems", "autocompleteObservable"] }], directives: [{ type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }], encapsulation: i0.ViewEncapsulation.None });
56
+ InputChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: InputChipsComponent, selector: "symphony-input-chips", inputs: { chips: "chips", autocompleteList: "autocompleteList", validators: "validators", asyncValidators: "asyncValidators", errorMessages: "errorMessages", controlName: "controlName", form: "form", label: "label", isDisabled: "isDisabled", validationMessage: "validationMessage" }, ngImport: i0, template: "<div [formGroup]=\"form\">\n <label for=\"item\" *ngIf=\"label\" class=\"input-label\">{{ label }} </label>\n <tag-input\n #input\n class=\"sfx-chips\"\n [formControlName]=\"controlName\"\n [asyncValidators]=\"asyncValidators\"\n [errorMessages]=\"errorMessages\"\n [addOnBlur]=\"true\"\n [@.disabled]=\"isDisabled\"\n (onAdd)=\"onAdd($event)\"\n (onRemove)=\"onRemove($event)\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n <span>\n <symphony-chip\n [chipLabel]=\"item.display\"\n [hasError]=\"item.hasError\"\n [hasClose]=\"true\"\n (removeChip)=\"input.removeItem(item, index)\"\n >\n </symphony-chip>\n </span>\n </ng-template>\n\n <div class=\"error-message\">{{ validationMessage }}</div>\n <tag-input-dropdown\n [showDropdownIfEmpty]=\"true\"\n [autocompleteItems]=\"autocompleteList\"\n [appendToBody]=\"false\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n {{ item.display }}\n </ng-template>\n </tag-input-dropdown>\n </tag-input>\n <input type=\"hidden\" [formControlName]=\"controlErrorCount\" value=\"0\" />\n</div>\n", styles: [".sfx .input-label{display:block;font-family:neuzeit_groteskbold,sans-serif;margin-bottom:.27rem;line-height:25px}.sfx .sfx-chips .ng2-tag-input{border-bottom:0;min-height:auto;border:1px solid #d0d0d0;border-radius:4px;padding:4px 0 0 4px;max-height:110px;height:100%;overflow-y:auto}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar{width:10px}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-track{box-shadow:inset 0 0 2px transparent;border-radius:30px}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:30px;border-right:2px white solid;background-clip:padding-box}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-thumb:hover{cursor:pointer}.sfx .sfx-chips .ng2-tag-input.ng2-tag-input--focused,.sfx .sfx-chips .ng2-tag-input.ng2-tag-input--invalid{border-bottom:1px solid #d0d0d0}.sfx .sfx-chips .ng2-tag-input__text-input{padding:0;height:30px;font-family:neuzeit_groteskregular,sans-serif}.sfx .sfx-chips .ng2-tag-input__text-input::-moz-placeholder{text-indent:-9999px}.sfx .sfx-chips .ng2-tag-input__text-input:-ms-input-placeholder{text-indent:-9999px}.sfx .sfx-chips .ng2-tag-input__text-input::placeholder{text-indent:-9999px}.sfx .sfx-chips tag,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active{font-family:neuzeit_groteskregular,sans-serif;line-height:inherit;background:none;margin:0 0 5px;padding:0;height:auto}.sfx .sfx-chips tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):focus,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active:not(.readonly):not(.tag--editing):focus{background:none;color:#fff;cursor:default;box-shadow:none}.sfx .sfx-chips .error-message{color:#f0001e;font-size:14px}.sfx .sfx-chips .ng2-dropdown-menu{position:relative!important;width:100%;display:block;top:0!important;left:0!important;margin-top:0;border:1px solid #d0d0d0;border-width:0 1px 1px 1px;box-shadow:0 10px 10px rgba(0,0,0,.2);max-height:260px;padding-top:0}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar{width:10px}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-track{box-shadow:inset 0 0 2px transparent;border-radius:30px}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:30px;border-right:2px white solid;background-clip:padding-box}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-thumb:hover{cursor:pointer}.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item{font-family:neuzeit_groteskbold;letter-spacing:normal;max-height:40px;line-height:35px}.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item--selected,.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item--selected:active{background:#000;color:#fff}\n"], components: [{ type: i1.TagInputComponent, selector: "tag-input", inputs: ["separatorKeys", "separatorKeyCodes", "placeholder", "secondaryPlaceholder", "maxItems", "validators", "asyncValidators", "onlyFromAutocomplete", "errorMessages", "theme", "onTextChangeDebounce", "inputId", "inputClass", "clearOnBlur", "hideForm", "addOnBlur", "addOnPaste", "pasteSplitPattern", "blinkIfDupe", "removable", "editable", "allowDupes", "modelAsStrings", "trimTags", "ripple", "tabindex", "disable", "dragZone", "onRemoving", "onAdding", "animationDuration", "inputText"], outputs: ["onAdd", "onRemove", "onSelect", "onFocus", "onBlur", "onTextChange", "onPaste", "onValidationError", "onTagEdited", "inputTextChange"] }, { type: i2.ChipComponent, selector: "symphony-chip", inputs: ["chipLabel", "hasClose", "hasError"], outputs: ["removeChip"] }, { type: i1.TagInputDropdown, selector: "tag-input-dropdown", inputs: ["offset", "focusFirstElement", "showDropdownIfEmpty", "minimumTextLength", "limitItemsTo", "displayBy", "identifyBy", "matchingFn", "appendToBody", "keepOpen", "dynamicUpdate", "zIndex", "autocompleteItems", "autocompleteObservable"] }], directives: [{ type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }], encapsulation: i0.ViewEncapsulation.None });
78
57
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: InputChipsComponent, decorators: [{
79
58
  type: Component,
80
59
  args: [{ selector: 'symphony-input-chips', encapsulation: ViewEncapsulation.None, template: "<div [formGroup]=\"form\">\n <label for=\"item\" *ngIf=\"label\" class=\"input-label\">{{ label }} </label>\n <tag-input\n #input\n class=\"sfx-chips\"\n [formControlName]=\"controlName\"\n [asyncValidators]=\"asyncValidators\"\n [errorMessages]=\"errorMessages\"\n [addOnBlur]=\"true\"\n [@.disabled]=\"isDisabled\"\n (onAdd)=\"onAdd($event)\"\n (onRemove)=\"onRemove($event)\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n <span>\n <symphony-chip\n [chipLabel]=\"item.display\"\n [hasError]=\"item.hasError\"\n [hasClose]=\"true\"\n (removeChip)=\"input.removeItem(item, index)\"\n >\n </symphony-chip>\n </span>\n </ng-template>\n\n <div class=\"error-message\">{{ validationMessage }}</div>\n <tag-input-dropdown\n [showDropdownIfEmpty]=\"true\"\n [autocompleteItems]=\"autocompleteList\"\n [appendToBody]=\"false\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n {{ item.display }}\n </ng-template>\n </tag-input-dropdown>\n </tag-input>\n <input type=\"hidden\" [formControlName]=\"controlErrorCount\" value=\"0\" />\n</div>\n", styles: [".sfx .input-label{display:block;font-family:neuzeit_groteskbold,sans-serif;margin-bottom:.27rem;line-height:25px}.sfx .sfx-chips .ng2-tag-input{border-bottom:0;min-height:auto;border:1px solid #d0d0d0;border-radius:4px;padding:4px 0 0 4px;max-height:110px;height:100%;overflow-y:auto}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar{width:10px}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-track{box-shadow:inset 0 0 2px transparent;border-radius:30px}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:30px;border-right:2px white solid;background-clip:padding-box}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-thumb:hover{cursor:pointer}.sfx .sfx-chips .ng2-tag-input.ng2-tag-input--focused,.sfx .sfx-chips .ng2-tag-input.ng2-tag-input--invalid{border-bottom:1px solid #d0d0d0}.sfx .sfx-chips .ng2-tag-input__text-input{padding:0;height:30px;font-family:neuzeit_groteskregular,sans-serif}.sfx .sfx-chips .ng2-tag-input__text-input::-moz-placeholder{text-indent:-9999px}.sfx .sfx-chips .ng2-tag-input__text-input:-ms-input-placeholder{text-indent:-9999px}.sfx .sfx-chips .ng2-tag-input__text-input::placeholder{text-indent:-9999px}.sfx .sfx-chips tag,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active{font-family:neuzeit_groteskregular,sans-serif;line-height:inherit;background:none;margin:0 0 5px;padding:0;height:auto}.sfx .sfx-chips tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):focus,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active:not(.readonly):not(.tag--editing):focus{background:none;color:#fff;cursor:default;box-shadow:none}.sfx .sfx-chips .error-message{color:#f0001e;font-size:14px}.sfx .sfx-chips .ng2-dropdown-menu{position:relative!important;width:100%;display:block;top:0!important;left:0!important;margin-top:0;border:1px solid #d0d0d0;border-width:0 1px 1px 1px;box-shadow:0 10px 10px rgba(0,0,0,.2);max-height:260px;padding-top:0}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar{width:10px}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-track{box-shadow:inset 0 0 2px transparent;border-radius:30px}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:30px;border-right:2px white solid;background-clip:padding-box}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-thumb:hover{cursor:pointer}.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item{font-family:neuzeit_groteskbold;letter-spacing:normal;max-height:40px;line-height:35px}.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item--selected,.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item--selected:active{background:#000;color:#fff}\n"] }]
@@ -96,6 +75,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImpor
96
75
  type: Input
97
76
  }], isDisabled: [{
98
77
  type: Input
78
+ }], validationMessage: [{
79
+ type: Input
99
80
  }] } });
100
81
  export class EmailValidator {
101
82
  static createValidator(form, controlErrorCount) {
@@ -113,4 +94,4 @@ export class EmailValidator {
113
94
  };
114
95
  }
115
96
  }
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9hdG9tcy9pbnB1dC1jaGlwcy9pbnB1dC1jaGlwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2F0b21zL2lucHV0LWNoaXBzL2lucHV0LWNoaXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTVFLE9BQU8sRUFBRSxZQUFZLElBQUksVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUlMLFdBQVcsRUFFWixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFReEIsTUFBTSxPQUFPLG1CQUFtQjtJQWdCOUI7UUFKTyxjQUFTLEdBQVksSUFBSSxDQUFDO1FBQzFCLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFJNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNqQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDbEI7SUFDSCxDQUFDO0lBRU0sU0FBUztRQUNkLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQztRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FDbEIsSUFBSSxDQUFDLFdBQVcs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QUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDO1lBRW5ELE1BQU0sTUFBTSxHQUFXLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRTlDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDeEMsVUFBVSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7b0JBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7aUJBQzFCO2FBQ0Y7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElucHV0Q2hpcHNNb2RlbCB9IGZyb20gJy4vaW5wdXQtY2hpcHMubW9kZWwnO1xuaW1wb3J0IHsgZW1haWxQYXR0ZXJuIGFzIGVtYWlsUmVnZXggfSBmcm9tICcuL2lucHV0LWNoaXBzLm1vZGVsJztcbmltcG9ydCB7XG4gIEFzeW5jVmFsaWRhdG9yRm4sXG4gIFZhbGlkYXRvckZuLFxuICBGb3JtR3JvdXAsXG4gIEZvcm1Db250cm9sLFxuICBBYnN0cmFjdENvbnRyb2xcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzeW1waG9ueS1pbnB1dC1jaGlwcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1jaGlwcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lucHV0LWNoaXBzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRDaGlwc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNoaXBzOiBJbnB1dENoaXBzTW9kZWxbXTtcbiAgQElucHV0KCkgYXV0b2NvbXBsZXRlTGlzdDogSW5wdXRDaGlwc01vZGVsW107XG4gIEBJbnB1dCgpIHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW107XG4gIEBJbnB1dCgpIGFzeW5jVmFsaWRhdG9yczogQXN5bmNWYWxpZGF0b3JGbltdO1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2VzOiBhbnk7XG4gIEBJbnB1dCgpIGNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcbiAgQElucHV0KCkgaXNEaXNhYmxlZDogYm9vbGVhbjtcblxuICBwdWJsaWMgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZztcbiAgcHVibGljIGNhbkFkZFRhZzogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBlcnJvckNvdW50OiBudW1iZXIgPSAwO1xuICBwdWJsaWMgY29udHJvbEVycm9yQ291bnQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNhbkFkZFRhZyA9IHRydWU7XG4gIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybSAmJiB0aGlzLmNvbnRyb2xOYW1lKSB7XG4gICAgICB0aGlzLnNldHVwRm9ybSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXR1cEZvcm0oKSB7XG4gICAgdGhpcy5jb250cm9sRXJyb3JDb3VudCA9IHRoaXMuY29udHJvbE5hbWUgKyAnRXJyb3JDb3VudCc7XG4gICAgdGhpcy5mb3JtLmFkZENvbnRyb2wodGhpcy5jb250cm9sRXJyb3JDb3VudCwgbmV3IEZvcm1Db250cm9sKDApKTtcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbChcbiAgICAgIHRoaXMuY29udHJvbE5hbWUsXG4gICAgICBuZXcgRm9ybUNvbnRyb2wodGhpcy5jaGlwcywge1xuICAgICAgICB2YWxpZGF0b3JzOiBbXG4gICAgICAgICAgRW1haWxWYWxpZGF0b3IuY3JlYXRlVmFsaWRhdG9yKHRoaXMuZm9ybSwgdGhpcy5jb250cm9sRXJyb3JDb3VudClcbiAgICAgICAgXSxcbiAgICAgICAgYXN5bmNWYWxpZGF0b3JzOiB0aGlzLmFzeW5jVmFsaWRhdG9yc1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoc2MgPT4ge1xuICAgICAgaWYgKHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmNvbnRyb2xOYW1lXS5zdGF0dXMgPT09ICdJTlZBTElEJykge1xuICAgICAgICBmb3IgKGNvbnN0IGVycm9yTWVzc2FnZUtleSBpbiB0aGlzLmVycm9yTWVzc2FnZXMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5jb250cm9sTmFtZV0uZXJyb3JzLmhhc093blByb3BlcnR5KFxuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RUYWcgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5jb250cm9sTmFtZV0udmFsdWU7XG4gICAgICAgICAgICBsYXN0VGFnW2xhc3RUYWcubGVuZ3RoIC0gMV0uaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9IHRoaXMuZXJyb3JNZXNzYWdlc1tlcnJvck1lc3NhZ2VLZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbkFkZFRhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYW5BZGRUYWcgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uQWRkKGV2ZW50KSB7XG4gICAgLy8gaWYgZm9ybSBjb250cm9sIGhhcyBhdCBsZWFzdCAxIGVycm9yIGRvIG5vdCBsZXQgdXNlciBhZGQgbmV3IGl0ZW1cbiAgICBpZiAodGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMuY29udHJvbEVycm9yQ291bnRdLnZhbHVlID4gMSkge1xuICAgICAgbGV0IGNoaXBzID0gdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMuY29udHJvbE5hbWVdLnZhbHVlO1xuICAgICAgY2hpcHMgPSBjaGlwcy5maWx0ZXIoY2hpcCA9PiBjaGlwLnZhbHVlICE9PSBldmVudC52YWx1ZSk7XG4gICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5jb250cm9sTmFtZV0ucGF0Y2hWYWx1ZShjaGlwcyk7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMuY29udHJvbE5hbWVdLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlbW92ZShldmVudCkge1xuICAgIGxldCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUVtYWlsKHRoaXMuZm9ybSk7XG5cbiAgICBpZiAoaXNWYWxpZCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMuY29udHJvbEVycm9yQ291bnRdLnNldFZhbHVlKDApO1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xuICAgIH1cbiAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5jb250cm9sTmFtZV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUVtYWlsKGZvcm06IEZvcm1Hcm91cCkge1xuICAgIGxldCBlcnJvckNvdW50ID0gZm9ybS5nZXQodGhpcy5jb250cm9sRXJyb3JDb3VudCkudmFsdWU7XG4gICAgbGV0IGNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5jb250cm9sTmFtZV07XG5cbiAgICBjb25zdCBSRUdFWFA6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoZW1haWxSZWdleCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyb2wudmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghUkVHRVhQLnRlc3QoY29udHJvbC52YWx1ZVtpXS52YWx1ZSkpIHtcbiAgICAgICAgZXJyb3JDb3VudCA9IGVycm9yQ291bnQgKyAxO1xuICAgICAgICBmb3JtLmdldCh0aGlzLmNvbnRyb2xFcnJvckNvdW50KS5wYXRjaFZhbHVlKGVycm9yQ291bnQpO1xuICAgICAgICByZXR1cm4geyBwYXR0ZXJuOiB0cnVlIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVtYWlsVmFsaWRhdG9yIHtcbiAgc3RhdGljIGNyZWF0ZVZhbGlkYXRvcihmb3JtOiBGb3JtR3JvdXAsIGNvbnRyb2xFcnJvckNvdW50OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgbGV0IGVycm9yQ291bnQgPSBmb3JtLmdldChjb250cm9sRXJyb3JDb3VudCkudmFsdWU7XG5cbiAgICAgIGNvbnN0IFJFR0VYUDogUmVnRXhwID0gbmV3IFJlZ0V4cChlbWFpbFJlZ2V4KTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250cm9sLnZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghUkVHRVhQLnRlc3QoY29udHJvbC52YWx1ZVtpXS52YWx1ZSkpIHtcbiAgICAgICAgICBlcnJvckNvdW50ID0gZXJyb3JDb3VudCArIDE7XG4gICAgICAgICAgZm9ybS5nZXQoY29udHJvbEVycm9yQ291bnQpLnBhdGNoVmFsdWUoZXJyb3JDb3VudCk7XG4gICAgICAgICAgcmV0dXJuIHsgcGF0dGVybjogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG59XG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICA8bGFiZWwgZm9yPVwiaXRlbVwiICpuZ0lmPVwibGFiZWxcIiBjbGFzcz1cImlucHV0LWxhYmVsXCI+e3sgbGFiZWwgfX0gPC9sYWJlbD5cbiAgPHRhZy1pbnB1dFxuICAgICNpbnB1dFxuICAgIGNsYXNzPVwic2Z4LWNoaXBzXCJcbiAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2xOYW1lXCJcbiAgICBbYXN5bmNWYWxpZGF0b3JzXT1cImFzeW5jVmFsaWRhdG9yc1wiXG4gICAgW2Vycm9yTWVzc2FnZXNdPVwiZXJyb3JNZXNzYWdlc1wiXG4gICAgW2FkZE9uQmx1cl09XCJ0cnVlXCJcbiAgICBbQC5kaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcbiAgICAob25BZGQpPVwib25BZGQoJGV2ZW50KVwiXG4gICAgKG9uUmVtb3ZlKT1cIm9uUmVtb3ZlKCRldmVudClcIlxuICA+XG4gICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCI+XG4gICAgICA8c3Bhbj5cbiAgICAgICAgPHN5bXBob255LWNoaXBcbiAgICAgICAgICBbY2hpcExhYmVsXT1cIml0ZW0uZGlzcGxheVwiXG4gICAgICAgICAgW2hhc0Vycm9yXT1cIml0ZW0uaGFzRXJyb3JcIlxuICAgICAgICAgIFtoYXNDbG9zZV09XCJ0cnVlXCJcbiAgICAgICAgICAocmVtb3ZlQ2hpcCk9XCJpbnB1dC5yZW1vdmVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9zeW1waG9ueS1jaGlwPlxuICAgICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPnt7IHZhbGlkYXRpb25NZXNzYWdlIH19PC9kaXY+XG4gICAgPHRhZy1pbnB1dC1kcm9wZG93blxuICAgICAgW3Nob3dEcm9wZG93bklmRW1wdHldPVwidHJ1ZVwiXG4gICAgICBbYXV0b2NvbXBsZXRlSXRlbXNdPVwiYXV0b2NvbXBsZXRlTGlzdFwiXG4gICAgICBbYXBwZW5kVG9Cb2R5XT1cImZhbHNlXCJcbiAgICA+XG4gICAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWluZGV4PVwiaW5kZXhcIj5cbiAgICAgICAge3sgaXRlbS5kaXNwbGF5IH19XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvdGFnLWlucHV0LWRyb3Bkb3duPlxuICA8L3RhZy1pbnB1dD5cbiAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2xFcnJvckNvdW50XCIgdmFsdWU9XCIwXCIgLz5cbjwvZGl2PlxuIl19
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9hdG9tcy9pbnB1dC1jaGlwcy9pbnB1dC1jaGlwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2F0b21zL2lucHV0LWNoaXBzL2lucHV0LWNoaXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTVFLE9BQU8sRUFBRSxZQUFZLElBQUksVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUlMLFdBQVcsRUFFWixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFReEIsTUFBTSxPQUFPLG1CQUFtQjtJQWdCOUI7UUFKTyxjQUFTLEdBQVksSUFBSSxDQUFDO1FBQzFCLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFJNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNqQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDbEI7SUFDSCxDQUFDO0lBRU0sU0FBUztRQUNkLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQztRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FDbEIsSUFBSSxDQUFDLFdBQVcs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LEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDeEMsVUFBVSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7b0JBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7aUJBQzFCO2FBQ0Y7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElucHV0Q2hpcHNNb2RlbCB9IGZyb20gJy4vaW5wdXQtY2hpcHMubW9kZWwnO1xuaW1wb3J0IHsgZW1haWxQYXR0ZXJuIGFzIGVtYWlsUmVnZXggfSBmcm9tICcuL2lucHV0LWNoaXBzLm1vZGVsJztcbmltcG9ydCB7XG4gIEFzeW5jVmFsaWRhdG9yRm4sXG4gIFZhbGlkYXRvckZuLFxuICBGb3JtR3JvdXAsXG4gIEZvcm1Db250cm9sLFxuICBBYnN0cmFjdENvbnRyb2xcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzeW1waG9ueS1pbnB1dC1jaGlwcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1jaGlwcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lucHV0LWNoaXBzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRDaGlwc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNoaXBzOiBJbnB1dENoaXBzTW9kZWxbXTtcbiAgQElucHV0KCkgYXV0b2NvbXBsZXRlTGlzdDogSW5wdXRDaGlwc01vZGVsW107XG4gIEBJbnB1dCgpIHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW107XG4gIEBJbnB1dCgpIGFzeW5jVmFsaWRhdG9yczogQXN5bmNWYWxpZGF0b3JGbltdO1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2VzOiBhbnk7XG4gIEBJbnB1dCgpIGNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcbiAgQElucHV0KCkgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZztcblxuICBwdWJsaWMgY2FuQWRkVGFnOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGVycm9yQ291bnQ6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBjb250cm9sRXJyb3JDb3VudDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2FuQWRkVGFnID0gdHJ1ZTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtICYmIHRoaXMuY29udHJvbE5hbWUpIHtcbiAgICAgIHRoaXMuc2V0dXBGb3JtKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldHVwRm9ybSgpIHtcbiAgICB0aGlzLmNvbnRyb2xFcnJvckNvdW50ID0gdGhpcy5jb250cm9sTmFtZSArICdFcnJvckNvdW50JztcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCh0aGlzLmNvbnRyb2xFcnJvckNvdW50LCBuZXcgRm9ybUNvbnRyb2woMCkpO1xuICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKFxuICAgICAgdGhpcy5jb250cm9sTmFtZSxcbiAgICAgIG5ldyBGb3JtQ29udHJvbCh0aGlzLmNoaXBzLCB7XG4gICAgICAgIHZhbGlkYXRvcnM6IFtcbiAgICAgICAgICBFbWFpbFZhbGlkYXRvci5jcmVhdGVWYWxpZGF0b3IodGhpcy5mb3JtLCB0aGlzLmNvbnRyb2xFcnJvckNvdW50KVxuICAgICAgICBdLFxuICAgICAgICBhc3luY1ZhbGlkYXRvcnM6IHRoaXMuYXN5bmNWYWxpZGF0b3JzXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25BZGQoZXZlbnQpIHtcbiAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5jb250cm9sTmFtZV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgcHVibGljIG9uUmVtb3ZlKGV2ZW50KSB7XG4gICAgbGV0IGlzVmFsaWQgPSB0aGlzLnZhbGlkYXRlRW1haWwodGhpcy5mb3JtKTtcblxuICAgIGlmIChpc1ZhbGlkID09PSBudWxsKSB7XG4gICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5jb250cm9sRXJyb3JDb3VudF0uc2V0VmFsdWUoMCk7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gICAgfVxuICAgIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmNvbnRyb2xOYW1lXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlRW1haWwoZm9ybTogRm9ybUdyb3VwKSB7XG4gICAgbGV0IGVycm9yQ291bnQgPSBmb3JtLmdldCh0aGlzLmNvbnRyb2xFcnJvckNvdW50KS52YWx1ZTtcbiAgICBsZXQgY29udHJvbCA9IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmNvbnRyb2xOYW1lXTtcblxuICAgIGNvbnN0IFJFR0VYUDogUmVnRXhwID0gbmV3IFJlZ0V4cChlbWFpbFJlZ2V4KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udHJvbC52YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFSRUdFWFAudGVzdChjb250cm9sLnZhbHVlW2ldLnZhbHVlKSkge1xuICAgICAgICBlcnJvckNvdW50ID0gZXJyb3JDb3VudCArIDE7XG4gICAgICAgIGZvcm0uZ2V0KHRoaXMuY29udHJvbEVycm9yQ291bnQpLnBhdGNoVmFsdWUoZXJyb3JDb3VudCk7XG4gICAgICAgIHJldHVybiB7IHBhdHRlcm46IHRydWUgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRW1haWxWYWxpZGF0b3Ige1xuICBzdGF0aWMgY3JlYXRlVmFsaWRhdG9yKGZvcm06IEZvcm1Hcm91cCwgY29udHJvbEVycm9yQ291bnQ6IHN0cmluZykge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICBsZXQgZXJyb3JDb3VudCA9IGZvcm0uZ2V0KGNvbnRyb2xFcnJvckNvdW50KS52YWx1ZTtcblxuICAgICAgY29uc3QgUkVHRVhQOiBSZWdFeHAgPSBuZXcgUmVnRXhwKGVtYWlsUmVnZXgpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyb2wudmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFSRUdFWFAudGVzdChjb250cm9sLnZhbHVlW2ldLnZhbHVlKSkge1xuICAgICAgICAgIGVycm9yQ291bnQgPSBlcnJvckNvdW50ICsgMTtcbiAgICAgICAgICBmb3JtLmdldChjb250cm9sRXJyb3JDb3VudCkucGF0Y2hWYWx1ZShlcnJvckNvdW50KTtcbiAgICAgICAgICByZXR1cm4geyBwYXR0ZXJuOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cbn1cbiIsIjxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gIDxsYWJlbCBmb3I9XCJpdGVtXCIgKm5nSWY9XCJsYWJlbFwiIGNsYXNzPVwiaW5wdXQtbGFiZWxcIj57eyBsYWJlbCB9fSA8L2xhYmVsPlxuICA8dGFnLWlucHV0XG4gICAgI2lucHV0XG4gICAgY2xhc3M9XCJzZngtY2hpcHNcIlxuICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbE5hbWVcIlxuICAgIFthc3luY1ZhbGlkYXRvcnNdPVwiYXN5bmNWYWxpZGF0b3JzXCJcbiAgICBbZXJyb3JNZXNzYWdlc109XCJlcnJvck1lc3NhZ2VzXCJcbiAgICBbYWRkT25CbHVyXT1cInRydWVcIlxuICAgIFtALmRpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxuICAgIChvbkFkZCk9XCJvbkFkZCgkZXZlbnQpXCJcbiAgICAob25SZW1vdmUpPVwib25SZW1vdmUoJGV2ZW50KVwiXG4gID5cbiAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWluZGV4PVwiaW5kZXhcIj5cbiAgICAgIDxzcGFuPlxuICAgICAgICA8c3ltcGhvbnktY2hpcFxuICAgICAgICAgIFtjaGlwTGFiZWxdPVwiaXRlbS5kaXNwbGF5XCJcbiAgICAgICAgICBbaGFzRXJyb3JdPVwiaXRlbS5oYXNFcnJvclwiXG4gICAgICAgICAgW2hhc0Nsb3NlXT1cInRydWVcIlxuICAgICAgICAgIChyZW1vdmVDaGlwKT1cImlucHV0LnJlbW92ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgPlxuICAgICAgICA8L3N5bXBob255LWNoaXA+XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+e3sgdmFsaWRhdGlvbk1lc3NhZ2UgfX08L2Rpdj5cbiAgICA8dGFnLWlucHV0LWRyb3Bkb3duXG4gICAgICBbc2hvd0Ryb3Bkb3duSWZFbXB0eV09XCJ0cnVlXCJcbiAgICAgIFthdXRvY29tcGxldGVJdGVtc109XCJhdXRvY29tcGxldGVMaXN0XCJcbiAgICAgIFthcHBlbmRUb0JvZHldPVwiZmFsc2VcIlxuICAgID5cbiAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxuICAgICAgICB7eyBpdGVtLmRpc3BsYXkgfX1cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC90YWctaW5wdXQtZHJvcGRvd24+XG4gIDwvdGFnLWlucHV0PlxuICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbEVycm9yQ291bnRcIiB2YWx1ZT1cIjBcIiAvPlxuPC9kaXY+XG4iXX0=
@@ -26,29 +26,8 @@ export class InputChipsComponent {
26
26
  ],
27
27
  asyncValidators: this.asyncValidators
28
28
  }));
29
- this.form.valueChanges.subscribe(sc => {
30
- if (this.form.controls[this.controlName].status === 'INVALID') {
31
- for (const errorMessageKey in this.errorMessages) {
32
- if (this.form.controls[this.controlName].errors.hasOwnProperty(errorMessageKey)) {
33
- const lastTag = this.form.controls[this.controlName].value;
34
- lastTag[lastTag.length - 1].hasError = true;
35
- this.validationMessage = this.errorMessages[errorMessageKey];
36
- }
37
- }
38
- this.canAddTag = false;
39
- }
40
- else {
41
- this.canAddTag = true;
42
- }
43
- });
44
29
  }
45
30
  onAdd(event) {
46
- // if form control has at least 1 error do not let user add new item
47
- if (this.form.controls[this.controlErrorCount].value > 1) {
48
- let chips = this.form.controls[this.controlName].value;
49
- chips = chips.filter(chip => chip.value !== event.value);
50
- this.form.controls[this.controlName].patchValue(chips);
51
- }
52
31
  this.form.controls[this.controlName].updateValueAndValidity();
53
32
  }
54
33
  onRemove(event) {
@@ -74,7 +53,7 @@ export class InputChipsComponent {
74
53
  }
75
54
  }
76
55
  InputChipsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: InputChipsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
77
- InputChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: InputChipsComponent, selector: "symphony-input-chips", inputs: { chips: "chips", autocompleteList: "autocompleteList", validators: "validators", asyncValidators: "asyncValidators", errorMessages: "errorMessages", controlName: "controlName", form: "form", label: "label", isDisabled: "isDisabled" }, ngImport: i0, template: "<div [formGroup]=\"form\">\n <label for=\"item\" *ngIf=\"label\" class=\"input-label\">{{ label }} </label>\n <tag-input\n #input\n class=\"sfx-chips\"\n [formControlName]=\"controlName\"\n [asyncValidators]=\"asyncValidators\"\n [errorMessages]=\"errorMessages\"\n [addOnBlur]=\"true\"\n [@.disabled]=\"isDisabled\"\n (onAdd)=\"onAdd($event)\"\n (onRemove)=\"onRemove($event)\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n <span>\n <symphony-chip\n [chipLabel]=\"item.display\"\n [hasError]=\"item.hasError\"\n [hasClose]=\"true\"\n (removeChip)=\"input.removeItem(item, index)\"\n >\n </symphony-chip>\n </span>\n </ng-template>\n\n <div class=\"error-message\">{{ validationMessage }}</div>\n <tag-input-dropdown\n [showDropdownIfEmpty]=\"true\"\n [autocompleteItems]=\"autocompleteList\"\n [appendToBody]=\"false\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n {{ item.display }}\n </ng-template>\n </tag-input-dropdown>\n </tag-input>\n <input type=\"hidden\" [formControlName]=\"controlErrorCount\" value=\"0\" />\n</div>\n", styles: [".sfx .input-label{display:block;font-family:neuzeit_groteskbold,sans-serif;margin-bottom:.27rem;line-height:25px}.sfx .sfx-chips .ng2-tag-input{border-bottom:0;min-height:auto;border:1px solid #d0d0d0;border-radius:4px;padding:4px 0 0 4px;max-height:110px;height:100%;overflow-y:auto}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar{width:10px}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-track{box-shadow:inset 0 0 2px transparent;border-radius:30px}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:30px;border-right:2px white solid;background-clip:padding-box}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-thumb:hover{cursor:pointer}.sfx .sfx-chips .ng2-tag-input.ng2-tag-input--focused,.sfx .sfx-chips .ng2-tag-input.ng2-tag-input--invalid{border-bottom:1px solid #d0d0d0}.sfx .sfx-chips .ng2-tag-input__text-input{padding:0;height:30px;font-family:neuzeit_groteskregular,sans-serif}.sfx .sfx-chips .ng2-tag-input__text-input::-moz-placeholder{text-indent:-9999px}.sfx .sfx-chips .ng2-tag-input__text-input:-ms-input-placeholder{text-indent:-9999px}.sfx .sfx-chips .ng2-tag-input__text-input::placeholder{text-indent:-9999px}.sfx .sfx-chips tag,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active{font-family:neuzeit_groteskregular,sans-serif;line-height:inherit;background:none;margin:0 0 5px;padding:0;height:auto}.sfx .sfx-chips tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):focus,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active:not(.readonly):not(.tag--editing):focus{background:none;color:#fff;cursor:default;box-shadow:none}.sfx .sfx-chips .error-message{color:#f0001e;font-size:14px}.sfx .sfx-chips .ng2-dropdown-menu{position:relative!important;width:100%;display:block;top:0!important;left:0!important;margin-top:0;border:1px solid #d0d0d0;border-width:0 1px 1px 1px;box-shadow:0 10px 10px rgba(0,0,0,.2);max-height:260px;padding-top:0}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar{width:10px}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-track{box-shadow:inset 0 0 2px transparent;border-radius:30px}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:30px;border-right:2px white solid;background-clip:padding-box}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-thumb:hover{cursor:pointer}.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item{font-family:neuzeit_groteskbold;letter-spacing:normal;max-height:40px;line-height:35px}.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item--selected,.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item--selected:active{background:#000;color:#fff}\n"], components: [{ type: i1.TagInputComponent, selector: "tag-input", inputs: ["separatorKeys", "separatorKeyCodes", "placeholder", "secondaryPlaceholder", "maxItems", "validators", "asyncValidators", "onlyFromAutocomplete", "errorMessages", "theme", "onTextChangeDebounce", "inputId", "inputClass", "clearOnBlur", "hideForm", "addOnBlur", "addOnPaste", "pasteSplitPattern", "blinkIfDupe", "removable", "editable", "allowDupes", "modelAsStrings", "trimTags", "ripple", "tabindex", "disable", "dragZone", "onRemoving", "onAdding", "animationDuration", "inputText"], outputs: ["onAdd", "onRemove", "onSelect", "onFocus", "onBlur", "onTextChange", "onPaste", "onValidationError", "onTagEdited", "inputTextChange"] }, { type: i2.ChipComponent, selector: "symphony-chip", inputs: ["chipLabel", "hasClose", "hasError"], outputs: ["removeChip"] }, { type: i1.TagInputDropdown, selector: "tag-input-dropdown", inputs: ["offset", "focusFirstElement", "showDropdownIfEmpty", "minimumTextLength", "limitItemsTo", "displayBy", "identifyBy", "matchingFn", "appendToBody", "keepOpen", "dynamicUpdate", "zIndex", "autocompleteItems", "autocompleteObservable"] }], directives: [{ type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }], encapsulation: i0.ViewEncapsulation.None });
56
+ InputChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: InputChipsComponent, selector: "symphony-input-chips", inputs: { chips: "chips", autocompleteList: "autocompleteList", validators: "validators", asyncValidators: "asyncValidators", errorMessages: "errorMessages", controlName: "controlName", form: "form", label: "label", isDisabled: "isDisabled", validationMessage: "validationMessage" }, ngImport: i0, template: "<div [formGroup]=\"form\">\n <label for=\"item\" *ngIf=\"label\" class=\"input-label\">{{ label }} </label>\n <tag-input\n #input\n class=\"sfx-chips\"\n [formControlName]=\"controlName\"\n [asyncValidators]=\"asyncValidators\"\n [errorMessages]=\"errorMessages\"\n [addOnBlur]=\"true\"\n [@.disabled]=\"isDisabled\"\n (onAdd)=\"onAdd($event)\"\n (onRemove)=\"onRemove($event)\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n <span>\n <symphony-chip\n [chipLabel]=\"item.display\"\n [hasError]=\"item.hasError\"\n [hasClose]=\"true\"\n (removeChip)=\"input.removeItem(item, index)\"\n >\n </symphony-chip>\n </span>\n </ng-template>\n\n <div class=\"error-message\">{{ validationMessage }}</div>\n <tag-input-dropdown\n [showDropdownIfEmpty]=\"true\"\n [autocompleteItems]=\"autocompleteList\"\n [appendToBody]=\"false\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n {{ item.display }}\n </ng-template>\n </tag-input-dropdown>\n </tag-input>\n <input type=\"hidden\" [formControlName]=\"controlErrorCount\" value=\"0\" />\n</div>\n", styles: [".sfx .input-label{display:block;font-family:neuzeit_groteskbold,sans-serif;margin-bottom:.27rem;line-height:25px}.sfx .sfx-chips .ng2-tag-input{border-bottom:0;min-height:auto;border:1px solid #d0d0d0;border-radius:4px;padding:4px 0 0 4px;max-height:110px;height:100%;overflow-y:auto}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar{width:10px}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-track{box-shadow:inset 0 0 2px transparent;border-radius:30px}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:30px;border-right:2px white solid;background-clip:padding-box}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-thumb:hover{cursor:pointer}.sfx .sfx-chips .ng2-tag-input.ng2-tag-input--focused,.sfx .sfx-chips .ng2-tag-input.ng2-tag-input--invalid{border-bottom:1px solid #d0d0d0}.sfx .sfx-chips .ng2-tag-input__text-input{padding:0;height:30px;font-family:neuzeit_groteskregular,sans-serif}.sfx .sfx-chips .ng2-tag-input__text-input::-moz-placeholder{text-indent:-9999px}.sfx .sfx-chips .ng2-tag-input__text-input:-ms-input-placeholder{text-indent:-9999px}.sfx .sfx-chips .ng2-tag-input__text-input::placeholder{text-indent:-9999px}.sfx .sfx-chips tag,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active{font-family:neuzeit_groteskregular,sans-serif;line-height:inherit;background:none;margin:0 0 5px;padding:0;height:auto}.sfx .sfx-chips tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):focus,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active:not(.readonly):not(.tag--editing):focus{background:none;color:#fff;cursor:default;box-shadow:none}.sfx .sfx-chips .error-message{color:#f0001e;font-size:14px}.sfx .sfx-chips .ng2-dropdown-menu{position:relative!important;width:100%;display:block;top:0!important;left:0!important;margin-top:0;border:1px solid #d0d0d0;border-width:0 1px 1px 1px;box-shadow:0 10px 10px rgba(0,0,0,.2);max-height:260px;padding-top:0}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar{width:10px}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-track{box-shadow:inset 0 0 2px transparent;border-radius:30px}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:30px;border-right:2px white solid;background-clip:padding-box}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-thumb:hover{cursor:pointer}.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item{font-family:neuzeit_groteskbold;letter-spacing:normal;max-height:40px;line-height:35px}.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item--selected,.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item--selected:active{background:#000;color:#fff}\n"], components: [{ type: i1.TagInputComponent, selector: "tag-input", inputs: ["separatorKeys", "separatorKeyCodes", "placeholder", "secondaryPlaceholder", "maxItems", "validators", "asyncValidators", "onlyFromAutocomplete", "errorMessages", "theme", "onTextChangeDebounce", "inputId", "inputClass", "clearOnBlur", "hideForm", "addOnBlur", "addOnPaste", "pasteSplitPattern", "blinkIfDupe", "removable", "editable", "allowDupes", "modelAsStrings", "trimTags", "ripple", "tabindex", "disable", "dragZone", "onRemoving", "onAdding", "animationDuration", "inputText"], outputs: ["onAdd", "onRemove", "onSelect", "onFocus", "onBlur", "onTextChange", "onPaste", "onValidationError", "onTagEdited", "inputTextChange"] }, { type: i2.ChipComponent, selector: "symphony-chip", inputs: ["chipLabel", "hasClose", "hasError"], outputs: ["removeChip"] }, { type: i1.TagInputDropdown, selector: "tag-input-dropdown", inputs: ["offset", "focusFirstElement", "showDropdownIfEmpty", "minimumTextLength", "limitItemsTo", "displayBy", "identifyBy", "matchingFn", "appendToBody", "keepOpen", "dynamicUpdate", "zIndex", "autocompleteItems", "autocompleteObservable"] }], directives: [{ type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }], encapsulation: i0.ViewEncapsulation.None });
78
57
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: InputChipsComponent, decorators: [{
79
58
  type: Component,
80
59
  args: [{ selector: 'symphony-input-chips', encapsulation: ViewEncapsulation.None, template: "<div [formGroup]=\"form\">\n <label for=\"item\" *ngIf=\"label\" class=\"input-label\">{{ label }} </label>\n <tag-input\n #input\n class=\"sfx-chips\"\n [formControlName]=\"controlName\"\n [asyncValidators]=\"asyncValidators\"\n [errorMessages]=\"errorMessages\"\n [addOnBlur]=\"true\"\n [@.disabled]=\"isDisabled\"\n (onAdd)=\"onAdd($event)\"\n (onRemove)=\"onRemove($event)\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n <span>\n <symphony-chip\n [chipLabel]=\"item.display\"\n [hasError]=\"item.hasError\"\n [hasClose]=\"true\"\n (removeChip)=\"input.removeItem(item, index)\"\n >\n </symphony-chip>\n </span>\n </ng-template>\n\n <div class=\"error-message\">{{ validationMessage }}</div>\n <tag-input-dropdown\n [showDropdownIfEmpty]=\"true\"\n [autocompleteItems]=\"autocompleteList\"\n [appendToBody]=\"false\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n {{ item.display }}\n </ng-template>\n </tag-input-dropdown>\n </tag-input>\n <input type=\"hidden\" [formControlName]=\"controlErrorCount\" value=\"0\" />\n</div>\n", styles: [".sfx .input-label{display:block;font-family:neuzeit_groteskbold,sans-serif;margin-bottom:.27rem;line-height:25px}.sfx .sfx-chips .ng2-tag-input{border-bottom:0;min-height:auto;border:1px solid #d0d0d0;border-radius:4px;padding:4px 0 0 4px;max-height:110px;height:100%;overflow-y:auto}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar{width:10px}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-track{box-shadow:inset 0 0 2px transparent;border-radius:30px}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:30px;border-right:2px white solid;background-clip:padding-box}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-thumb:hover{cursor:pointer}.sfx .sfx-chips .ng2-tag-input.ng2-tag-input--focused,.sfx .sfx-chips .ng2-tag-input.ng2-tag-input--invalid{border-bottom:1px solid #d0d0d0}.sfx .sfx-chips .ng2-tag-input__text-input{padding:0;height:30px;font-family:neuzeit_groteskregular,sans-serif}.sfx .sfx-chips .ng2-tag-input__text-input::-moz-placeholder{text-indent:-9999px}.sfx .sfx-chips .ng2-tag-input__text-input:-ms-input-placeholder{text-indent:-9999px}.sfx .sfx-chips .ng2-tag-input__text-input::placeholder{text-indent:-9999px}.sfx .sfx-chips tag,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active{font-family:neuzeit_groteskregular,sans-serif;line-height:inherit;background:none;margin:0 0 5px;padding:0;height:auto}.sfx .sfx-chips tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):focus,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active:not(.readonly):not(.tag--editing):focus{background:none;color:#fff;cursor:default;box-shadow:none}.sfx .sfx-chips .error-message{color:#f0001e;font-size:14px}.sfx .sfx-chips .ng2-dropdown-menu{position:relative!important;width:100%;display:block;top:0!important;left:0!important;margin-top:0;border:1px solid #d0d0d0;border-width:0 1px 1px 1px;box-shadow:0 10px 10px rgba(0,0,0,.2);max-height:260px;padding-top:0}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar{width:10px}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-track{box-shadow:inset 0 0 2px transparent;border-radius:30px}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:30px;border-right:2px white solid;background-clip:padding-box}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-thumb:hover{cursor:pointer}.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item{font-family:neuzeit_groteskbold;letter-spacing:normal;max-height:40px;line-height:35px}.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item--selected,.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item--selected:active{background:#000;color:#fff}\n"] }]
@@ -96,6 +75,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImpor
96
75
  type: Input
97
76
  }], isDisabled: [{
98
77
  type: Input
78
+ }], validationMessage: [{
79
+ type: Input
99
80
  }] } });
100
81
  export class EmailValidator {
101
82
  static createValidator(form, controlErrorCount) {
@@ -113,4 +94,4 @@ export class EmailValidator {
113
94
  };
114
95
  }
115
96
  }
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9hdG9tcy9pbnB1dC1jaGlwcy9pbnB1dC1jaGlwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2F0b21zL2lucHV0LWNoaXBzL2lucHV0LWNoaXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTVFLE9BQU8sRUFBRSxZQUFZLElBQUksVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUlMLFdBQVcsRUFFWixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFReEIsTUFBTSxPQUFPLG1CQUFtQjtJQWdCOUI7UUFKTyxjQUFTLEdBQVksSUFBSSxDQUFDO1FBQzFCLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFJNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNqQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDbEI7SUFDSCxDQUFDO0lBRU0sU0FBUztRQUNkLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQztRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FDbEIsSUFB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R0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDO1lBRW5ELE1BQU0sTUFBTSxHQUFXLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRTlDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDeEMsVUFBVSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7b0JBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7aUJBQzFCO2FBQ0Y7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElucHV0Q2hpcHNNb2RlbCB9IGZyb20gJy4vaW5wdXQtY2hpcHMubW9kZWwnO1xuaW1wb3J0IHsgZW1haWxQYXR0ZXJuIGFzIGVtYWlsUmVnZXggfSBmcm9tICcuL2lucHV0LWNoaXBzLm1vZGVsJztcbmltcG9ydCB7XG4gIEFzeW5jVmFsaWRhdG9yRm4sXG4gIFZhbGlkYXRvckZuLFxuICBGb3JtR3JvdXAsXG4gIEZvcm1Db250cm9sLFxuICBBYnN0cmFjdENvbnRyb2xcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzeW1waG9ueS1pbnB1dC1jaGlwcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1jaGlwcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lucHV0LWNoaXBzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRDaGlwc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNoaXBzOiBJbnB1dENoaXBzTW9kZWxbXTtcbiAgQElucHV0KCkgYXV0b2NvbXBsZXRlTGlzdDogSW5wdXRDaGlwc01vZGVsW107XG4gIEBJbnB1dCgpIHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW107XG4gIEBJbnB1dCgpIGFzeW5jVmFsaWRhdG9yczogQXN5bmNWYWxpZGF0b3JGbltdO1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2VzOiBhbnk7XG4gIEBJbnB1dCgpIGNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcbiAgQElucHV0KCkgaXNEaXNhYmxlZDogYm9vbGVhbjtcblxuICBwdWJsaWMgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZztcbiAgcHVibGljIGNhbkFkZFRhZzogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBlcnJvckNvdW50OiBudW1iZXIgPSAwO1xuICBwdWJsaWMgY29udHJvbEVycm9yQ291bnQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNhbkFkZFRhZyA9IHRydWU7XG4gIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybSAmJiB0aGlzLmNvbnRyb2xOYW1lKSB7XG4gICAgICB0aGlzLnNldHVwRm9ybSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXR1cEZvcm0oKSB7XG4gICAgdGhpcy5jb250cm9sRXJyb3JDb3VudCA9IHRoaXMuY29udHJvbE5hbWUgKyAnRXJyb3JDb3VudCc7XG4gICAgdGhpcy5mb3JtLmFkZENvbnRyb2wodGhpcy5jb250cm9sRXJyb3JDb3VudCwgbmV3IEZvcm1Db250cm9sKDApKTtcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbChcbiAgICAgIHRoaXMuY29udHJvbE5hbWUsXG4gICAgICBuZXcgRm9ybUNvbnRyb2wodGhpcy5jaGlwcywge1xuICAgICAgICB2YWxpZGF0b3JzOiBbXG4gICAgICAgICAgRW1haWxWYWxpZGF0b3IuY3JlYXRlVmFsaWRhdG9yKHRoaXMuZm9ybSwgdGhpcy5jb250cm9sRXJyb3JDb3VudClcbiAgICAgICAgXSxcbiAgICAgICAgYXN5bmNWYWxpZGF0b3JzOiB0aGlzLmFzeW5jVmFsaWRhdG9yc1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoc2MgPT4ge1xuICAgICAgaWYgKHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmNvbnRyb2xOYW1lXS5zdGF0dXMgPT09ICdJTlZBTElEJykge1xuICAgICAgICBmb3IgKGNvbnN0IGVycm9yTWVzc2FnZUtleSBpbiB0aGlzLmVycm9yTWVzc2FnZXMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5jb250cm9sTmFtZV0uZXJyb3JzLmhhc093blByb3BlcnR5KFxuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RUYWcgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5jb250cm9sTmFtZV0udmFsdWU7XG4gICAgICAgICAgICBsYXN0VGFnW2xhc3RUYWcubGVuZ3RoIC0gMV0uaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9IHRoaXMuZXJyb3JNZXNzYWdlc1tlcnJvck1lc3NhZ2VLZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbkFkZFRhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYW5BZGRUYWcgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uQWRkKGV2ZW50KSB7XG4gICAgLy8gaWYgZm9ybSBjb250cm9sIGhhcyBhdCBsZWFzdCAxIGVycm9yIGRvIG5vdCBsZXQgdXNlciBhZGQgbmV3IGl0ZW1cbiAgICBpZiAodGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMuY29udHJvbEVycm9yQ291bnRdLnZhbHVlID4gMSkge1xuICAgICAgbGV0IGNoaXBzID0gdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMuY29udHJvbE5hbWVdLnZhbHVlO1xuICAgICAgY2hpcHMgPSBjaGlwcy5maWx0ZXIoY2hpcCA9PiBjaGlwLnZhbHVlICE9PSBldmVudC52YWx1ZSk7XG4gICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5jb250cm9sTmFtZV0ucGF0Y2hWYWx1ZShjaGlwcyk7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMuY29udHJvbE5hbWVdLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlbW92ZShldmVudCkge1xuICAgIGxldCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUVtYWlsKHRoaXMuZm9ybSk7XG5cbiAgICBpZiAoaXNWYWxpZCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMuY29udHJvbEVycm9yQ291bnRdLnNldFZhbHVlKDApO1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xuICAgIH1cbiAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5jb250cm9sTmFtZV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUVtYWlsKGZvcm06IEZvcm1Hcm91cCkge1xuICAgIGxldCBlcnJvckNvdW50ID0gZm9ybS5nZXQodGhpcy5jb250cm9sRXJyb3JDb3VudCkudmFsdWU7XG4gICAgbGV0IGNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5jb250cm9sTmFtZV07XG5cbiAgICBjb25zdCBSRUdFWFA6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoZW1haWxSZWdleCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyb2wudmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghUkVHRVhQLnRlc3QoY29udHJvbC52YWx1ZVtpXS52YWx1ZSkpIHtcbiAgICAgICAgZXJyb3JDb3VudCA9IGVycm9yQ291bnQgKyAxO1xuICAgICAgICBmb3JtLmdldCh0aGlzLmNvbnRyb2xFcnJvckNvdW50KS5wYXRjaFZhbHVlKGVycm9yQ291bnQpO1xuICAgICAgICByZXR1cm4geyBwYXR0ZXJuOiB0cnVlIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVtYWlsVmFsaWRhdG9yIHtcbiAgc3RhdGljIGNyZWF0ZVZhbGlkYXRvcihmb3JtOiBGb3JtR3JvdXAsIGNvbnRyb2xFcnJvckNvdW50OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgbGV0IGVycm9yQ291bnQgPSBmb3JtLmdldChjb250cm9sRXJyb3JDb3VudCkudmFsdWU7XG5cbiAgICAgIGNvbnN0IFJFR0VYUDogUmVnRXhwID0gbmV3IFJlZ0V4cChlbWFpbFJlZ2V4KTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250cm9sLnZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghUkVHRVhQLnRlc3QoY29udHJvbC52YWx1ZVtpXS52YWx1ZSkpIHtcbiAgICAgICAgICBlcnJvckNvdW50ID0gZXJyb3JDb3VudCArIDE7XG4gICAgICAgICAgZm9ybS5nZXQoY29udHJvbEVycm9yQ291bnQpLnBhdGNoVmFsdWUoZXJyb3JDb3VudCk7XG4gICAgICAgICAgcmV0dXJuIHsgcGF0dGVybjogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG59XG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICA8bGFiZWwgZm9yPVwiaXRlbVwiICpuZ0lmPVwibGFiZWxcIiBjbGFzcz1cImlucHV0LWxhYmVsXCI+e3sgbGFiZWwgfX0gPC9sYWJlbD5cbiAgPHRhZy1pbnB1dFxuICAgICNpbnB1dFxuICAgIGNsYXNzPVwic2Z4LWNoaXBzXCJcbiAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2xOYW1lXCJcbiAgICBbYXN5bmNWYWxpZGF0b3JzXT1cImFzeW5jVmFsaWRhdG9yc1wiXG4gICAgW2Vycm9yTWVzc2FnZXNdPVwiZXJyb3JNZXNzYWdlc1wiXG4gICAgW2FkZE9uQmx1cl09XCJ0cnVlXCJcbiAgICBbQC5kaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcbiAgICAob25BZGQpPVwib25BZGQoJGV2ZW50KVwiXG4gICAgKG9uUmVtb3ZlKT1cIm9uUmVtb3ZlKCRldmVudClcIlxuICA+XG4gICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCI+XG4gICAgICA8c3Bhbj5cbiAgICAgICAgPHN5bXBob255LWNoaXBcbiAgICAgICAgICBbY2hpcExhYmVsXT1cIml0ZW0uZGlzcGxheVwiXG4gICAgICAgICAgW2hhc0Vycm9yXT1cIml0ZW0uaGFzRXJyb3JcIlxuICAgICAgICAgIFtoYXNDbG9zZV09XCJ0cnVlXCJcbiAgICAgICAgICAocmVtb3ZlQ2hpcCk9XCJpbnB1dC5yZW1vdmVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9zeW1waG9ueS1jaGlwPlxuICAgICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPnt7IHZhbGlkYXRpb25NZXNzYWdlIH19PC9kaXY+XG4gICAgPHRhZy1pbnB1dC1kcm9wZG93blxuICAgICAgW3Nob3dEcm9wZG93bklmRW1wdHldPVwidHJ1ZVwiXG4gICAgICBbYXV0b2NvbXBsZXRlSXRlbXNdPVwiYXV0b2NvbXBsZXRlTGlzdFwiXG4gICAgICBbYXBwZW5kVG9Cb2R5XT1cImZhbHNlXCJcbiAgICA+XG4gICAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWluZGV4PVwiaW5kZXhcIj5cbiAgICAgICAge3sgaXRlbS5kaXNwbGF5IH19XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvdGFnLWlucHV0LWRyb3Bkb3duPlxuICA8L3RhZy1pbnB1dD5cbiAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2xFcnJvckNvdW50XCIgdmFsdWU9XCIwXCIgLz5cbjwvZGl2PlxuIl19
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9hdG9tcy9pbnB1dC1jaGlwcy9pbnB1dC1jaGlwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2F0b21zL2lucHV0LWNoaXBzL2lucHV0LWNoaXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTVFLE9BQU8sRUFBRSxZQUFZLElBQUksVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUlMLFdBQVcsRUFFWixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFReEIsTUFBTSxPQUFPLG1CQUFtQjtJQWdCOUI7UUFKTyxjQUFTLEdBQVksSUFBSSxDQUFDO1FBQzFCLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFJNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNqQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDbEI7SUFDSCxDQUFDO0lBRU0sU0FBUztRQUNkLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQztRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FDbEIsSUFB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QyxDQUFDO1lBRTlDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDeEMsVUFBVSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7b0JBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7aUJBQzFCO2FBQ0Y7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElucHV0Q2hpcHNNb2RlbCB9IGZyb20gJy4vaW5wdXQtY2hpcHMubW9kZWwnO1xuaW1wb3J0IHsgZW1haWxQYXR0ZXJuIGFzIGVtYWlsUmVnZXggfSBmcm9tICcuL2lucHV0LWNoaXBzLm1vZGVsJztcbmltcG9ydCB7XG4gIEFzeW5jVmFsaWRhdG9yRm4sXG4gIFZhbGlkYXRvckZuLFxuICBGb3JtR3JvdXAsXG4gIEZvcm1Db250cm9sLFxuICBBYnN0cmFjdENvbnRyb2xcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzeW1waG9ueS1pbnB1dC1jaGlwcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1jaGlwcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lucHV0LWNoaXBzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRDaGlwc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNoaXBzOiBJbnB1dENoaXBzTW9kZWxbXTtcbiAgQElucHV0KCkgYXV0b2NvbXBsZXRlTGlzdDogSW5wdXRDaGlwc01vZGVsW107XG4gIEBJbnB1dCgpIHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW107XG4gIEBJbnB1dCgpIGFzeW5jVmFsaWRhdG9yczogQXN5bmNWYWxpZGF0b3JGbltdO1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2VzOiBhbnk7XG4gIEBJbnB1dCgpIGNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcbiAgQElucHV0KCkgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZztcblxuICBwdWJsaWMgY2FuQWRkVGFnOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGVycm9yQ291bnQ6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBjb250cm9sRXJyb3JDb3VudDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2FuQWRkVGFnID0gdHJ1ZTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtICYmIHRoaXMuY29udHJvbE5hbWUpIHtcbiAgICAgIHRoaXMuc2V0dXBGb3JtKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldHVwRm9ybSgpIHtcbiAgICB0aGlzLmNvbnRyb2xFcnJvckNvdW50ID0gdGhpcy5jb250cm9sTmFtZSArICdFcnJvckNvdW50JztcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCh0aGlzLmNvbnRyb2xFcnJvckNvdW50LCBuZXcgRm9ybUNvbnRyb2woMCkpO1xuICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKFxuICAgICAgdGhpcy5jb250cm9sTmFtZSxcbiAgICAgIG5ldyBGb3JtQ29udHJvbCh0aGlzLmNoaXBzLCB7XG4gICAgICAgIHZhbGlkYXRvcnM6IFtcbiAgICAgICAgICBFbWFpbFZhbGlkYXRvci5jcmVhdGVWYWxpZGF0b3IodGhpcy5mb3JtLCB0aGlzLmNvbnRyb2xFcnJvckNvdW50KVxuICAgICAgICBdLFxuICAgICAgICBhc3luY1ZhbGlkYXRvcnM6IHRoaXMuYXN5bmNWYWxpZGF0b3JzXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25BZGQoZXZlbnQpIHtcbiAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5jb250cm9sTmFtZV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgcHVibGljIG9uUmVtb3ZlKGV2ZW50KSB7XG4gICAgbGV0IGlzVmFsaWQgPSB0aGlzLnZhbGlkYXRlRW1haWwodGhpcy5mb3JtKTtcblxuICAgIGlmIChpc1ZhbGlkID09PSBudWxsKSB7XG4gICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5jb250cm9sRXJyb3JDb3VudF0uc2V0VmFsdWUoMCk7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gICAgfVxuICAgIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmNvbnRyb2xOYW1lXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlRW1haWwoZm9ybTogRm9ybUdyb3VwKSB7XG4gICAgbGV0IGVycm9yQ291bnQgPSBmb3JtLmdldCh0aGlzLmNvbnRyb2xFcnJvckNvdW50KS52YWx1ZTtcbiAgICBsZXQgY29udHJvbCA9IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmNvbnRyb2xOYW1lXTtcblxuICAgIGNvbnN0IFJFR0VYUDogUmVnRXhwID0gbmV3IFJlZ0V4cChlbWFpbFJlZ2V4KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udHJvbC52YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFSRUdFWFAudGVzdChjb250cm9sLnZhbHVlW2ldLnZhbHVlKSkge1xuICAgICAgICBlcnJvckNvdW50ID0gZXJyb3JDb3VudCArIDE7XG4gICAgICAgIGZvcm0uZ2V0KHRoaXMuY29udHJvbEVycm9yQ291bnQpLnBhdGNoVmFsdWUoZXJyb3JDb3VudCk7XG4gICAgICAgIHJldHVybiB7IHBhdHRlcm46IHRydWUgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRW1haWxWYWxpZGF0b3Ige1xuICBzdGF0aWMgY3JlYXRlVmFsaWRhdG9yKGZvcm06IEZvcm1Hcm91cCwgY29udHJvbEVycm9yQ291bnQ6IHN0cmluZykge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICBsZXQgZXJyb3JDb3VudCA9IGZvcm0uZ2V0KGNvbnRyb2xFcnJvckNvdW50KS52YWx1ZTtcblxuICAgICAgY29uc3QgUkVHRVhQOiBSZWdFeHAgPSBuZXcgUmVnRXhwKGVtYWlsUmVnZXgpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyb2wudmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFSRUdFWFAudGVzdChjb250cm9sLnZhbHVlW2ldLnZhbHVlKSkge1xuICAgICAgICAgIGVycm9yQ291bnQgPSBlcnJvckNvdW50ICsgMTtcbiAgICAgICAgICBmb3JtLmdldChjb250cm9sRXJyb3JDb3VudCkucGF0Y2hWYWx1ZShlcnJvckNvdW50KTtcbiAgICAgICAgICByZXR1cm4geyBwYXR0ZXJuOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cbn1cbiIsIjxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gIDxsYWJlbCBmb3I9XCJpdGVtXCIgKm5nSWY9XCJsYWJlbFwiIGNsYXNzPVwiaW5wdXQtbGFiZWxcIj57eyBsYWJlbCB9fSA8L2xhYmVsPlxuICA8dGFnLWlucHV0XG4gICAgI2lucHV0XG4gICAgY2xhc3M9XCJzZngtY2hpcHNcIlxuICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbE5hbWVcIlxuICAgIFthc3luY1ZhbGlkYXRvcnNdPVwiYXN5bmNWYWxpZGF0b3JzXCJcbiAgICBbZXJyb3JNZXNzYWdlc109XCJlcnJvck1lc3NhZ2VzXCJcbiAgICBbYWRkT25CbHVyXT1cInRydWVcIlxuICAgIFtALmRpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxuICAgIChvbkFkZCk9XCJvbkFkZCgkZXZlbnQpXCJcbiAgICAob25SZW1vdmUpPVwib25SZW1vdmUoJGV2ZW50KVwiXG4gID5cbiAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWluZGV4PVwiaW5kZXhcIj5cbiAgICAgIDxzcGFuPlxuICAgICAgICA8c3ltcGhvbnktY2hpcFxuICAgICAgICAgIFtjaGlwTGFiZWxdPVwiaXRlbS5kaXNwbGF5XCJcbiAgICAgICAgICBbaGFzRXJyb3JdPVwiaXRlbS5oYXNFcnJvclwiXG4gICAgICAgICAgW2hhc0Nsb3NlXT1cInRydWVcIlxuICAgICAgICAgIChyZW1vdmVDaGlwKT1cImlucHV0LnJlbW92ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgPlxuICAgICAgICA8L3N5bXBob255LWNoaXA+XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+e3sgdmFsaWRhdGlvbk1lc3NhZ2UgfX08L2Rpdj5cbiAgICA8dGFnLWlucHV0LWRyb3Bkb3duXG4gICAgICBbc2hvd0Ryb3Bkb3duSWZFbXB0eV09XCJ0cnVlXCJcbiAgICAgIFthdXRvY29tcGxldGVJdGVtc109XCJhdXRvY29tcGxldGVMaXN0XCJcbiAgICAgIFthcHBlbmRUb0JvZHldPVwiZmFsc2VcIlxuICAgID5cbiAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxuICAgICAgICB7eyBpdGVtLmRpc3BsYXkgfX1cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC90YWctaW5wdXQtZHJvcGRvd24+XG4gIDwvdGFnLWlucHV0PlxuICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbEVycm9yQ291bnRcIiB2YWx1ZT1cIjBcIiAvPlxuPC9kaXY+XG4iXX0=
@@ -1834,29 +1834,8 @@ class InputChipsComponent {
1834
1834
  ],
1835
1835
  asyncValidators: this.asyncValidators
1836
1836
  }));
1837
- this.form.valueChanges.subscribe(sc => {
1838
- if (this.form.controls[this.controlName].status === 'INVALID') {
1839
- for (const errorMessageKey in this.errorMessages) {
1840
- if (this.form.controls[this.controlName].errors.hasOwnProperty(errorMessageKey)) {
1841
- const lastTag = this.form.controls[this.controlName].value;
1842
- lastTag[lastTag.length - 1].hasError = true;
1843
- this.validationMessage = this.errorMessages[errorMessageKey];
1844
- }
1845
- }
1846
- this.canAddTag = false;
1847
- }
1848
- else {
1849
- this.canAddTag = true;
1850
- }
1851
- });
1852
1837
  }
1853
1838
  onAdd(event) {
1854
- // if form control has at least 1 error do not let user add new item
1855
- if (this.form.controls[this.controlErrorCount].value > 1) {
1856
- let chips = this.form.controls[this.controlName].value;
1857
- chips = chips.filter(chip => chip.value !== event.value);
1858
- this.form.controls[this.controlName].patchValue(chips);
1859
- }
1860
1839
  this.form.controls[this.controlName].updateValueAndValidity();
1861
1840
  }
1862
1841
  onRemove(event) {
@@ -1882,7 +1861,7 @@ class InputChipsComponent {
1882
1861
  }
1883
1862
  }
1884
1863
  InputChipsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: InputChipsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1885
- InputChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: InputChipsComponent, selector: "symphony-input-chips", inputs: { chips: "chips", autocompleteList: "autocompleteList", validators: "validators", asyncValidators: "asyncValidators", errorMessages: "errorMessages", controlName: "controlName", form: "form", label: "label", isDisabled: "isDisabled" }, ngImport: i0, template: "<div [formGroup]=\"form\">\n <label for=\"item\" *ngIf=\"label\" class=\"input-label\">{{ label }} </label>\n <tag-input\n #input\n class=\"sfx-chips\"\n [formControlName]=\"controlName\"\n [asyncValidators]=\"asyncValidators\"\n [errorMessages]=\"errorMessages\"\n [addOnBlur]=\"true\"\n [@.disabled]=\"isDisabled\"\n (onAdd)=\"onAdd($event)\"\n (onRemove)=\"onRemove($event)\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n <span>\n <symphony-chip\n [chipLabel]=\"item.display\"\n [hasError]=\"item.hasError\"\n [hasClose]=\"true\"\n (removeChip)=\"input.removeItem(item, index)\"\n >\n </symphony-chip>\n </span>\n </ng-template>\n\n <div class=\"error-message\">{{ validationMessage }}</div>\n <tag-input-dropdown\n [showDropdownIfEmpty]=\"true\"\n [autocompleteItems]=\"autocompleteList\"\n [appendToBody]=\"false\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n {{ item.display }}\n </ng-template>\n </tag-input-dropdown>\n </tag-input>\n <input type=\"hidden\" [formControlName]=\"controlErrorCount\" value=\"0\" />\n</div>\n", styles: [".sfx .input-label{display:block;font-family:neuzeit_groteskbold,sans-serif;margin-bottom:.27rem;line-height:25px}.sfx .sfx-chips .ng2-tag-input{border-bottom:0;min-height:auto;border:1px solid #d0d0d0;border-radius:4px;padding:4px 0 0 4px;max-height:110px;height:100%;overflow-y:auto}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar{width:10px}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-track{box-shadow:inset 0 0 2px transparent;border-radius:30px}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:30px;border-right:2px white solid;background-clip:padding-box}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-thumb:hover{cursor:pointer}.sfx .sfx-chips .ng2-tag-input.ng2-tag-input--focused,.sfx .sfx-chips .ng2-tag-input.ng2-tag-input--invalid{border-bottom:1px solid #d0d0d0}.sfx .sfx-chips .ng2-tag-input__text-input{padding:0;height:30px;font-family:neuzeit_groteskregular,sans-serif}.sfx .sfx-chips .ng2-tag-input__text-input::-moz-placeholder{text-indent:-9999px}.sfx .sfx-chips .ng2-tag-input__text-input:-ms-input-placeholder{text-indent:-9999px}.sfx .sfx-chips .ng2-tag-input__text-input::placeholder{text-indent:-9999px}.sfx .sfx-chips tag,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active{font-family:neuzeit_groteskregular,sans-serif;line-height:inherit;background:none;margin:0 0 5px;padding:0;height:auto}.sfx .sfx-chips tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):focus,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active:not(.readonly):not(.tag--editing):focus{background:none;color:#fff;cursor:default;box-shadow:none}.sfx .sfx-chips .error-message{color:#f0001e;font-size:14px}.sfx .sfx-chips .ng2-dropdown-menu{position:relative!important;width:100%;display:block;top:0!important;left:0!important;margin-top:0;border:1px solid #d0d0d0;border-width:0 1px 1px 1px;box-shadow:0 10px 10px rgba(0,0,0,.2);max-height:260px;padding-top:0}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar{width:10px}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-track{box-shadow:inset 0 0 2px transparent;border-radius:30px}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:30px;border-right:2px white solid;background-clip:padding-box}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-thumb:hover{cursor:pointer}.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item{font-family:neuzeit_groteskbold;letter-spacing:normal;max-height:40px;line-height:35px}.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item--selected,.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item--selected:active{background:#000;color:#fff}\n"], components: [{ type: i1$4.TagInputComponent, selector: "tag-input", inputs: ["separatorKeys", "separatorKeyCodes", "placeholder", "secondaryPlaceholder", "maxItems", "validators", "asyncValidators", "onlyFromAutocomplete", "errorMessages", "theme", "onTextChangeDebounce", "inputId", "inputClass", "clearOnBlur", "hideForm", "addOnBlur", "addOnPaste", "pasteSplitPattern", "blinkIfDupe", "removable", "editable", "allowDupes", "modelAsStrings", "trimTags", "ripple", "tabindex", "disable", "dragZone", "onRemoving", "onAdding", "animationDuration", "inputText"], outputs: ["onAdd", "onRemove", "onSelect", "onFocus", "onBlur", "onTextChange", "onPaste", "onValidationError", "onTagEdited", "inputTextChange"] }, { type: ChipComponent, selector: "symphony-chip", inputs: ["chipLabel", "hasClose", "hasError"], outputs: ["removeChip"] }, { type: i1$4.TagInputDropdown, selector: "tag-input-dropdown", inputs: ["offset", "focusFirstElement", "showDropdownIfEmpty", "minimumTextLength", "limitItemsTo", "displayBy", "identifyBy", "matchingFn", "appendToBody", "keepOpen", "dynamicUpdate", "zIndex", "autocompleteItems", "autocompleteObservable"] }], directives: [{ type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }], encapsulation: i0.ViewEncapsulation.None });
1864
+ InputChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: InputChipsComponent, selector: "symphony-input-chips", inputs: { chips: "chips", autocompleteList: "autocompleteList", validators: "validators", asyncValidators: "asyncValidators", errorMessages: "errorMessages", controlName: "controlName", form: "form", label: "label", isDisabled: "isDisabled", validationMessage: "validationMessage" }, ngImport: i0, template: "<div [formGroup]=\"form\">\n <label for=\"item\" *ngIf=\"label\" class=\"input-label\">{{ label }} </label>\n <tag-input\n #input\n class=\"sfx-chips\"\n [formControlName]=\"controlName\"\n [asyncValidators]=\"asyncValidators\"\n [errorMessages]=\"errorMessages\"\n [addOnBlur]=\"true\"\n [@.disabled]=\"isDisabled\"\n (onAdd)=\"onAdd($event)\"\n (onRemove)=\"onRemove($event)\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n <span>\n <symphony-chip\n [chipLabel]=\"item.display\"\n [hasError]=\"item.hasError\"\n [hasClose]=\"true\"\n (removeChip)=\"input.removeItem(item, index)\"\n >\n </symphony-chip>\n </span>\n </ng-template>\n\n <div class=\"error-message\">{{ validationMessage }}</div>\n <tag-input-dropdown\n [showDropdownIfEmpty]=\"true\"\n [autocompleteItems]=\"autocompleteList\"\n [appendToBody]=\"false\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n {{ item.display }}\n </ng-template>\n </tag-input-dropdown>\n </tag-input>\n <input type=\"hidden\" [formControlName]=\"controlErrorCount\" value=\"0\" />\n</div>\n", styles: [".sfx .input-label{display:block;font-family:neuzeit_groteskbold,sans-serif;margin-bottom:.27rem;line-height:25px}.sfx .sfx-chips .ng2-tag-input{border-bottom:0;min-height:auto;border:1px solid #d0d0d0;border-radius:4px;padding:4px 0 0 4px;max-height:110px;height:100%;overflow-y:auto}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar{width:10px}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-track{box-shadow:inset 0 0 2px transparent;border-radius:30px}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:30px;border-right:2px white solid;background-clip:padding-box}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-thumb:hover{cursor:pointer}.sfx .sfx-chips .ng2-tag-input.ng2-tag-input--focused,.sfx .sfx-chips .ng2-tag-input.ng2-tag-input--invalid{border-bottom:1px solid #d0d0d0}.sfx .sfx-chips .ng2-tag-input__text-input{padding:0;height:30px;font-family:neuzeit_groteskregular,sans-serif}.sfx .sfx-chips .ng2-tag-input__text-input::-moz-placeholder{text-indent:-9999px}.sfx .sfx-chips .ng2-tag-input__text-input:-ms-input-placeholder{text-indent:-9999px}.sfx .sfx-chips .ng2-tag-input__text-input::placeholder{text-indent:-9999px}.sfx .sfx-chips tag,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active{font-family:neuzeit_groteskregular,sans-serif;line-height:inherit;background:none;margin:0 0 5px;padding:0;height:auto}.sfx .sfx-chips tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):focus,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active:not(.readonly):not(.tag--editing):focus{background:none;color:#fff;cursor:default;box-shadow:none}.sfx .sfx-chips .error-message{color:#f0001e;font-size:14px}.sfx .sfx-chips .ng2-dropdown-menu{position:relative!important;width:100%;display:block;top:0!important;left:0!important;margin-top:0;border:1px solid #d0d0d0;border-width:0 1px 1px 1px;box-shadow:0 10px 10px rgba(0,0,0,.2);max-height:260px;padding-top:0}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar{width:10px}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-track{box-shadow:inset 0 0 2px transparent;border-radius:30px}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:30px;border-right:2px white solid;background-clip:padding-box}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-thumb:hover{cursor:pointer}.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item{font-family:neuzeit_groteskbold;letter-spacing:normal;max-height:40px;line-height:35px}.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item--selected,.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item--selected:active{background:#000;color:#fff}\n"], components: [{ type: i1$4.TagInputComponent, selector: "tag-input", inputs: ["separatorKeys", "separatorKeyCodes", "placeholder", "secondaryPlaceholder", "maxItems", "validators", "asyncValidators", "onlyFromAutocomplete", "errorMessages", "theme", "onTextChangeDebounce", "inputId", "inputClass", "clearOnBlur", "hideForm", "addOnBlur", "addOnPaste", "pasteSplitPattern", "blinkIfDupe", "removable", "editable", "allowDupes", "modelAsStrings", "trimTags", "ripple", "tabindex", "disable", "dragZone", "onRemoving", "onAdding", "animationDuration", "inputText"], outputs: ["onAdd", "onRemove", "onSelect", "onFocus", "onBlur", "onTextChange", "onPaste", "onValidationError", "onTagEdited", "inputTextChange"] }, { type: ChipComponent, selector: "symphony-chip", inputs: ["chipLabel", "hasClose", "hasError"], outputs: ["removeChip"] }, { type: i1$4.TagInputDropdown, selector: "tag-input-dropdown", inputs: ["offset", "focusFirstElement", "showDropdownIfEmpty", "minimumTextLength", "limitItemsTo", "displayBy", "identifyBy", "matchingFn", "appendToBody", "keepOpen", "dynamicUpdate", "zIndex", "autocompleteItems", "autocompleteObservable"] }], directives: [{ type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }], encapsulation: i0.ViewEncapsulation.None });
1886
1865
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: InputChipsComponent, decorators: [{
1887
1866
  type: Component,
1888
1867
  args: [{ selector: 'symphony-input-chips', encapsulation: ViewEncapsulation.None, template: "<div [formGroup]=\"form\">\n <label for=\"item\" *ngIf=\"label\" class=\"input-label\">{{ label }} </label>\n <tag-input\n #input\n class=\"sfx-chips\"\n [formControlName]=\"controlName\"\n [asyncValidators]=\"asyncValidators\"\n [errorMessages]=\"errorMessages\"\n [addOnBlur]=\"true\"\n [@.disabled]=\"isDisabled\"\n (onAdd)=\"onAdd($event)\"\n (onRemove)=\"onRemove($event)\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n <span>\n <symphony-chip\n [chipLabel]=\"item.display\"\n [hasError]=\"item.hasError\"\n [hasClose]=\"true\"\n (removeChip)=\"input.removeItem(item, index)\"\n >\n </symphony-chip>\n </span>\n </ng-template>\n\n <div class=\"error-message\">{{ validationMessage }}</div>\n <tag-input-dropdown\n [showDropdownIfEmpty]=\"true\"\n [autocompleteItems]=\"autocompleteList\"\n [appendToBody]=\"false\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n {{ item.display }}\n </ng-template>\n </tag-input-dropdown>\n </tag-input>\n <input type=\"hidden\" [formControlName]=\"controlErrorCount\" value=\"0\" />\n</div>\n", styles: [".sfx .input-label{display:block;font-family:neuzeit_groteskbold,sans-serif;margin-bottom:.27rem;line-height:25px}.sfx .sfx-chips .ng2-tag-input{border-bottom:0;min-height:auto;border:1px solid #d0d0d0;border-radius:4px;padding:4px 0 0 4px;max-height:110px;height:100%;overflow-y:auto}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar{width:10px}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-track{box-shadow:inset 0 0 2px transparent;border-radius:30px}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:30px;border-right:2px white solid;background-clip:padding-box}.sfx .sfx-chips .ng2-tag-input::-webkit-scrollbar-thumb:hover{cursor:pointer}.sfx .sfx-chips .ng2-tag-input.ng2-tag-input--focused,.sfx .sfx-chips .ng2-tag-input.ng2-tag-input--invalid{border-bottom:1px solid #d0d0d0}.sfx .sfx-chips .ng2-tag-input__text-input{padding:0;height:30px;font-family:neuzeit_groteskregular,sans-serif}.sfx .sfx-chips .ng2-tag-input__text-input::-moz-placeholder{text-indent:-9999px}.sfx .sfx-chips .ng2-tag-input__text-input:-ms-input-placeholder{text-indent:-9999px}.sfx .sfx-chips .ng2-tag-input__text-input::placeholder{text-indent:-9999px}.sfx .sfx-chips tag,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active{font-family:neuzeit_groteskregular,sans-serif;line-height:inherit;background:none;margin:0 0 5px;padding:0;height:auto}.sfx .sfx-chips tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):focus,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,.sfx .sfx-chips tag:not(.readonly):not(.tag--editing):active:not(.readonly):not(.tag--editing):focus{background:none;color:#fff;cursor:default;box-shadow:none}.sfx .sfx-chips .error-message{color:#f0001e;font-size:14px}.sfx .sfx-chips .ng2-dropdown-menu{position:relative!important;width:100%;display:block;top:0!important;left:0!important;margin-top:0;border:1px solid #d0d0d0;border-width:0 1px 1px 1px;box-shadow:0 10px 10px rgba(0,0,0,.2);max-height:260px;padding-top:0}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar{width:10px}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-track{box-shadow:inset 0 0 2px transparent;border-radius:30px}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-thumb{background:#d4d4d4;border-radius:30px;border-right:2px white solid;background-clip:padding-box}.sfx .sfx-chips .ng2-dropdown-menu::-webkit-scrollbar-thumb:hover{cursor:pointer}.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item{font-family:neuzeit_groteskbold;letter-spacing:normal;max-height:40px;line-height:35px}.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item--selected,.sfx .sfx-chips .ng2-dropdown-menu .ng2-menu-item--selected:active{background:#000;color:#fff}\n"] }]
@@ -1904,6 +1883,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImpor
1904
1883
  type: Input
1905
1884
  }], isDisabled: [{
1906
1885
  type: Input
1886
+ }], validationMessage: [{
1887
+ type: Input
1907
1888
  }] } });
1908
1889
  class EmailValidator {
1909
1890
  static createValidator(form, controlErrorCount) {