@gravitee/ui-particles-angular 7.37.4 → 7.37.5-fix-badge-f144f39

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.
@@ -41,18 +41,18 @@ export class GioFormTagsInputComponent {
41
41
  */
42
42
  this.useAutocompleteOptionValueOnly = false;
43
43
  this._tagInput = null;
44
+ this.displayValueCache = {};
44
45
  this._value = null;
45
- // From ControlValueAccessor interface
46
+ // From MatFormFieldControl interface
46
47
  this.stateChanges = new Subject();
47
- // From ControlValueAccessor interface
48
+ // From MatFormFieldControl interface
48
49
  this.id = `gio-form-tags-input-${GioFormTagsInputComponent.nextId++}`;
49
50
  this._placeholder = '';
50
- // From ControlValueAccessor interface
51
+ // From MatFormFieldControl interface
51
52
  this.focused = false;
52
53
  this._required = false;
53
54
  this._disabled = false;
54
- this.displayValueCache = {};
55
- // From ControlValueAccessor interface
55
+ // From MatFormFieldControl interface
56
56
  this.describedBy = '';
57
57
  // Replace the provider from above with this.
58
58
  if (this.ngControl != null) {
@@ -90,7 +90,7 @@ export class GioFormTagsInputComponent {
90
90
  this._tagInput = v;
91
91
  this.initAutocomplete();
92
92
  }
93
- // From ControlValueAccessor interface
93
+ // From MatFormFieldControl interface
94
94
  get value() {
95
95
  return this._value;
96
96
  }
@@ -99,7 +99,7 @@ export class GioFormTagsInputComponent {
99
99
  this._onChange(_tags);
100
100
  this.stateChanges.next();
101
101
  }
102
- // From ControlValueAccessor interface
102
+ // From MatFormFieldControl interface
103
103
  get placeholder() {
104
104
  return this._placeholder;
105
105
  }
@@ -107,15 +107,15 @@ export class GioFormTagsInputComponent {
107
107
  this._placeholder = plh;
108
108
  this.stateChanges.next();
109
109
  }
110
- // From ControlValueAccessor interface
110
+ // From MatFormFieldControl interface
111
111
  get empty() {
112
112
  return isEmpty(this.value) && isEmpty(this._tagInput?.nativeElement?.value);
113
113
  }
114
- // From ControlValueAccessor interface
114
+ // From MatFormFieldControl interface
115
115
  get shouldLabelFloat() {
116
116
  return this.focused || !this.empty;
117
117
  }
118
- // From ControlValueAccessor interface
118
+ // From MatFormFieldControl interface
119
119
  get required() {
120
120
  return this._required;
121
121
  }
@@ -123,7 +123,7 @@ export class GioFormTagsInputComponent {
123
123
  this._required = coerceBooleanProperty(req);
124
124
  this.stateChanges.next();
125
125
  }
126
- // From ControlValueAccessor interface
126
+ // From MatFormFieldControl interface
127
127
  get disabled() {
128
128
  return this._disabled || (this.ngControl && this.ngControl.disabled === true);
129
129
  }
@@ -131,7 +131,7 @@ export class GioFormTagsInputComponent {
131
131
  this._disabled = coerceBooleanProperty(dis);
132
132
  this.stateChanges.next();
133
133
  }
134
- // From ControlValueAccessor interface
134
+ // From MatFormFieldControl interface
135
135
  get errorState() {
136
136
  return (this.touched &&
137
137
  // if required check if is empty
@@ -150,6 +150,10 @@ export class GioFormTagsInputComponent {
150
150
  this.stateChanges.complete();
151
151
  this.fm.stopMonitoring(this.elRef.nativeElement);
152
152
  }
153
+ // From ControlValueAccess interface
154
+ setDisabledState(isDisabled) {
155
+ this.disabled = isDisabled;
156
+ }
153
157
  // From ControlValueAccessor interface
154
158
  writeValue(value) {
155
159
  this._value = value;
@@ -165,7 +169,7 @@ export class GioFormTagsInputComponent {
165
169
  setDescribedByIds(ids) {
166
170
  this.describedBy = ids.join(' ');
167
171
  }
168
- // From ControlValueAccessor interface
172
+ // From MatFormFieldControl interface
169
173
  // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
170
174
  onContainerClick(_event) { }
171
175
  addChipToFormControl(event) {
@@ -230,7 +234,7 @@ GioFormTagsInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
230
234
  provide: MatFormFieldControl,
231
235
  useExisting: GioFormTagsInputComponent,
232
236
  },
233
- ], viewQueries: [{ propertyName: "tagInput", first: true, predicate: ["tagInput"], descendants: true }], ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<mat-chip-list #tagChipList [attr.aria-label]=\"ariaLabel\" multiple [disabled]=\"disabled\">\n <mat-chip *ngFor=\"let tag of value\" [selectable]=\"false\" [removable]=\"!disabled\" (removed)=\"removeChipToFormControl(tag)\">\n {{ _displayValueWith ? (_displayValueWith(tag) | async) : tag }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n <input\n *ngIf=\"!disabled\"\n #tagInput\n [matAutocompleteDisabled]=\"!_autocompleteOptions\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\"\n [matChipInputFor]=\"tagChipList\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"onMatChipTokenEnd()\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onAutocompleteSelect($event)\">\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions$ | async\" [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n </mat-autocomplete>\n</mat-chip-list>\n", styles: [""], components: [{ type: i3.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i3.MatChipRemove, selector: "[matChipRemove]" }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i3.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }], pipes: { "async": i7.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
237
+ ], viewQueries: [{ propertyName: "tagInput", first: true, predicate: ["tagInput"], descendants: true }], ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<mat-chip-list #tagChipList [attr.aria-label]=\"ariaLabel\" multiple [disabled]=\"disabled\">\n <mat-chip\n *ngFor=\"let tag of value\"\n [selectable]=\"false\"\n [removable]=\"!disabled\"\n (removed)=\"removeChipToFormControl(tag)\"\n [disabled]=\"disabled\"\n >\n {{ _displayValueWith ? (_displayValueWith(tag) | async) : tag }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n <input\n *ngIf=\"!disabled\"\n #tagInput\n [matAutocompleteDisabled]=\"!_autocompleteOptions || disabled\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\"\n [matChipInputFor]=\"tagChipList\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"onMatChipTokenEnd()\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onAutocompleteSelect($event)\">\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions$ | async\" [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n </mat-autocomplete>\n</mat-chip-list>\n", styles: [""], components: [{ type: i3.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i3.MatChipRemove, selector: "[matChipRemove]" }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i3.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }], pipes: { "async": i7.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
234
238
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioFormTagsInputComponent, decorators: [{
235
239
  type: Component,
236
240
  args: [{ selector: 'gio-form-tags-input', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
@@ -238,7 +242,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
238
242
  provide: MatFormFieldControl,
239
243
  useExisting: GioFormTagsInputComponent,
240
244
  },
241
- ], template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<mat-chip-list #tagChipList [attr.aria-label]=\"ariaLabel\" multiple [disabled]=\"disabled\">\n <mat-chip *ngFor=\"let tag of value\" [selectable]=\"false\" [removable]=\"!disabled\" (removed)=\"removeChipToFormControl(tag)\">\n {{ _displayValueWith ? (_displayValueWith(tag) | async) : tag }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n <input\n *ngIf=\"!disabled\"\n #tagInput\n [matAutocompleteDisabled]=\"!_autocompleteOptions\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\"\n [matChipInputFor]=\"tagChipList\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"onMatChipTokenEnd()\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onAutocompleteSelect($event)\">\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions$ | async\" [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n </mat-autocomplete>\n</mat-chip-list>\n", styles: [""] }]
245
+ ], template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<mat-chip-list #tagChipList [attr.aria-label]=\"ariaLabel\" multiple [disabled]=\"disabled\">\n <mat-chip\n *ngFor=\"let tag of value\"\n [selectable]=\"false\"\n [removable]=\"!disabled\"\n (removed)=\"removeChipToFormControl(tag)\"\n [disabled]=\"disabled\"\n >\n {{ _displayValueWith ? (_displayValueWith(tag) | async) : tag }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n <input\n *ngIf=\"!disabled\"\n #tagInput\n [matAutocompleteDisabled]=\"!_autocompleteOptions || disabled\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\"\n [matChipInputFor]=\"tagChipList\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"onMatChipTokenEnd()\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onAutocompleteSelect($event)\">\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions$ | async\" [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n </mat-autocomplete>\n</mat-chip-list>\n", styles: [""] }]
242
246
  }], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
243
247
  type: Optional
244
248
  }, {
@@ -287,4 +291,4 @@ const sanitizeAutocompleteOptions = (options) => {
287
291
  return { value: option, label: option };
288
292
  });
289
293
  };
290
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLXRhZ3MtaW5wdXQvZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLXRhZ3MtaW5wdXQvZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBR1QsV0FBVyxFQUNYLEtBQUssRUFFTCxRQUFRLEVBQ1IsSUFBSSxFQUNKLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxTQUFTLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztBQW9CdEYsTUFBTSxPQUFPLHlCQUF5QjtJQXFLcEM7SUFDRSxzQ0FBc0M7SUFDRixTQUFvQixFQUN2QyxLQUFpQixFQUNqQixFQUFnQixFQUN6QixpQkFBb0M7UUFIUixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3ZDLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsT0FBRSxHQUFGLEVBQUUsQ0FBYztRQUN6QixzQkFBaUIsR0FBakIs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RSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDMUMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tZW1iZXItYWNjZXNzaWJpbGl0eVxuXG5pbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgU2VsZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IHR5cGUgVGFncyA9IEFycmF5PHN0cmluZz47XG5cbmV4cG9ydCB0eXBlIEF1dG9jb21wbGV0ZU9wdGlvbnMgPSAoc3RyaW5nIHwgeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0pW107XG5cbmV4cG9ydCB0eXBlIERpc3BsYXlWYWx1ZVdpdGhGbiA9ICh2YWx1ZTogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dpby1mb3JtLXRhZ3MtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dpby1mb3JtLXRhZ3MtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1hdEZvcm1GaWVsZENvbnRyb2wsXG4gICAgICB1c2VFeGlzdGluZzogR2lvRm9ybVRhZ3NJbnB1dENvbXBvbmVudCxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBHaW9Gb3JtVGFnc0lucHV0Q29tcG9uZW50IGltcGxlbWVudHMgTWF0Rm9ybUZpZWxkQ29udHJvbDxUYWdzPiwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIERvQ2hlY2ssIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgc3RhdGljIG5leHRJZCA9IDA7XG5cbiAgcHVibGljIF9vbkNoYW5nZTogKF90YWdzOiBUYWdzIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+ICh7fSk7XG5cbiAgcHVibGljIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiAoe30pO1xuICBwcml2YXRlIHRvdWNoZWQgPSBmYWxzZTtcblxuICBASW5wdXQoJ2FyaWEtbGFiZWwnKVxuICBwdWJsaWMgYXJpYUxhYmVsID0gJyc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGFkZE9uQmx1ciA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIGNhbGxlZCBlYWNoIHRpbWUgYSB0YWcgaXMgYWRkZWQsIGl0IGNhbiBiZSB1c2VkIHRvIGhvb2sgaW5zaWRlIHRoZVxuICAgKiBhZGRpdGlvbiBwcm9jZXNzIHRvLCBmb3IgaW5zdGFuY2UsIGhhdmUgY3VzdG9tIHZhbGlkYXRpb24gaW4gdGhlIGNvbXBvbmVudHNcbiAgICogdXNpbmcgYGdpby1mb3JtLXRhZ3MtaW5wdXRgLlxuICAgKlxuICAgKiBQYXJhbWV0ZXJzIGFyZTpcbiAgICogLSBgdGFnYDogVGhlIHZhbHVlIG9mIHRoZSB0YWcgdG8gYWRkXG4gICAqIC0gYHZhbGlkYXRpb25DYmA6IFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdmFsaWRhdGlvbiBpcyBkb25lLiBJZlxuICAgKiBjYWxsZWQgd2l0aCBgdHJ1ZWAgaXQgd2lsbCBhZGQgdGhlIHRhZywgb3RoZXJ3aXNlIGl0IHdpbGwganVzdCBpZ25vcmUgaXRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0YWdWYWxpZGF0aW9uSG9vazogKCh0YWc6IHN0cmluZywgdmFsaWRhdGlvbkNiOiAoc2hvdWxkQWRkVGFnOiBib29sZWFuKSA9PiB2b2lkKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGF1dG9jb21wbGV0ZU9wdGlvbnModjogQXV0b2NvbXBsZXRlT3B0aW9ucyB8ICgoc2VhcmNoOiBzdHJpbmcpID0+IE9ic2VydmFibGU8QXV0b2NvbXBsZXRlT3B0aW9ucz4pIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHY7XG4gICAgdGhpcy5pbml0QXV0b2NvbXBsZXRlKCk7XG4gIH1cbiAgcHVibGljIF9hdXRvY29tcGxldGVPcHRpb25zPzogQXV0b2NvbXBsZXRlT3B0aW9ucyB8ICgoc2VhcmNoOiBzdHJpbmcpID0+IE9ic2VydmFibGU8QXV0b2NvbXBsZXRlT3B0aW9ucz4pO1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxhYmVsIG9mIGFuIG9wdGlvbiB2YWx1ZS5cbiAgICogVG8gdXNlIHdpdGggYXV0b2NvbXBsZXRlT3B0aW9ucyBsYWJlbCAmIHZhbHVlIG1vZGUuXG4gICAqIEZ1bmN0aW9uIGNhbGxlZCBlYWNoIHRpbWUgYSB0YWcgbmVlZHMgdG8gYmUgZGlzcGxheWVkIGlkIGRlZmluZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc3BsYXlWYWx1ZVdpdGgoZGlzcGxheVZhbHVlV2l0aDogRGlzcGxheVZhbHVlV2l0aEZuKSB7XG4gICAgdGhpcy5fZGlzcGxheVZhbHVlV2l0aCA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAodGhpcy5kaXNwbGF5VmFsdWVDYWNoZVt2YWx1ZV0pIHtcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuZGlzcGxheVZhbHVlQ2FjaGVbdmFsdWVdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkaXNwbGF5VmFsdWVXaXRoKHZhbHVlKS5waXBlKFxuICAgICAgICB0YXAobGFiZWwgPT4ge1xuICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlQ2FjaGVbdmFsdWVdID0gbGFiZWw7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIHRvIGZvcmNlIHRoZSBjaGlwIHRvIGJlIHBhcnQgb2YgdGhlIGF1dG9jb21wbGV0ZSBvcHRpb25zLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHVzZUF1dG9jb21wbGV0ZU9wdGlvblZhbHVlT25seSA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ3RhZ0lucHV0JylcbiAgcHVibGljIHNldCB0YWdJbnB1dCh2OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+IHwgbnVsbCkge1xuICAgIHRoaXMuX3RhZ0lucHV0ID0gdjtcbiAgICB0aGlzLmluaXRBdXRvY29tcGxldGUoKTtcbiAgfVxuICBwcml2YXRlIF90YWdJbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PiB8IG51bGwgPSBudWxsO1xuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogVGFncyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgdmFsdWUoX3RhZ3M6IFRhZ3MgfCBudWxsKSB7XG4gICAgdGhpcy5fdmFsdWUgPSBfdGFncztcbiAgICB0aGlzLl9vbkNoYW5nZShfdGFncyk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWU6IFRhZ3MgfCBudWxsID0gbnVsbDtcblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBASG9zdEJpbmRpbmcoJ2lkJylcbiAgcHVibGljIGlkID0gYGdpby1mb3JtLXRhZ3MtaW5wdXQtJHtHaW9Gb3JtVGFnc0lucHV0Q29tcG9uZW50Lm5leHRJZCsrfWA7XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcGxhY2Vob2xkZXIocGxoOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHBsaDtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIF9wbGFjZWhvbGRlciA9ICcnO1xuXG4gIHB1YmxpYyBhdXRvY29tcGxldGVGaWx0ZXJlZE9wdGlvbnMkPzogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W10+O1xuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyBmb2N1c2VkID0gZmFsc2U7XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIGdldCBlbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNFbXB0eSh0aGlzLnZhbHVlKSAmJiBpc0VtcHR5KHRoaXMuX3RhZ0lucHV0Py5uYXRpdmVFbGVtZW50Py52YWx1ZSk7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZsb2F0aW5nJylcbiAgcHVibGljIGdldCBzaG91bGRMYWJlbEZsb2F0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZvY3VzZWQgfHwgIXRoaXMuZW1wdHk7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmVxdWlyZWQocmVxOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkocmVxKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkIHx8ICh0aGlzLm5nQ29udHJvbCAmJiB0aGlzLm5nQ29udHJvbC5kaXNhYmxlZCA9PT0gdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IGRpc2FibGVkKGRpczogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KGRpcyk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgX2Rpc3BsYXlWYWx1ZVdpdGg/OiAodmFsdWU6IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIHByaXZhdGUgZGlzcGxheVZhbHVlQ2FjaGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgZ2V0IGVycm9yU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudG91Y2hlZCAmJlxuICAgICAgLy8gaWYgcmVxdWlyZWQgY2hlY2sgaWYgaXMgZW1wdHlcbiAgICAgICgodGhpcy5yZXF1aXJlZCAmJiB0aGlzLmVtcHR5KSB8fFxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHRvdWNoZWQgY29udHJvbCBjaGVjayBpZiB0aGVyZSBpcyBhbiBlcnJvclxuICAgICAgICAodGhpcy5uZ0NvbnRyb2wgJiYgdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCA9PT0gdHJ1ZSAmJiAhIXRoaXMubmdDb250cm9sLmVycm9ycykpXG4gICAgKTtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyBjb250cm9sVHlwZT86IHN0cmluZztcblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgYXV0b2ZpbGxlZD86IGJvb2xlYW47XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIHVzZXJBcmlhRGVzY3JpYmVkQnk/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyByZWFkb25seSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm06IEZvY3VzTW9uaXRvcixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gICAgLy8gUmVwbGFjZSB0aGUgcHJvdmlkZXIgZnJvbSBhYm92ZSB3aXRoIHRoaXMuXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcbiAgICAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIGFjY2Vzc29yIGRpcmVjdGx5IChpbnN0ZWFkIG9mIHVzaW5nXG4gICAgICAvLyB0aGUgcHJvdmlkZXJzKSB0byBhdm9pZCBydW5uaW5nIGludG8gYSBjaXJjdWxhciBpbXBvcnQuXG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG5cbiAgICBmbS5tb25pdG9yKGVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRydWUpLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgdGhpcy5mb2N1c2VkID0gISFvcmlnaW47XG4gICAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIC8vIHN5bmMgY29udHJvbCB0b3VjaGVkIHdpdGggbG9jYWwgdG91Y2hlZFxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsICYmIHRoaXMudG91Y2hlZCAhPT0gdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy50b3VjaGVkID0gdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCA9PT0gdHJ1ZTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcbiAgICB0aGlzLmZtLnN0b3BNb25pdG9yaW5nKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh0YWdzOiBUYWdzIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JylcbiAgcHVibGljIGRlc2NyaWJlZEJ5ID0gJyc7XG5cbiAgcHVibGljIHNldERlc2NyaWJlZEJ5SWRzKGlkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLmRlc2NyaWJlZEJ5ID0gaWRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBwdWJsaWMgb25Db250YWluZXJDbGljayhfZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHt9XG5cbiAgcHVibGljIGFkZENoaXBUb0Zvcm1Db250cm9sKGV2ZW50OiB7IHZhbHVlOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5fdGFnSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgdGFnVG9BZGQgPSAoZXZlbnQudmFsdWUgPz8gJycpLnRyaW0oKTtcblxuICAgIGlmIChpc0VtcHR5KHRhZ1RvQWRkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgdGFnIG9ubHkgaWYgc2hvdWxkQWRkVGFnIGluIHZhbGlkYXRpb25DYiByZXR1cm4gdHJ1ZVxuICAgIC8vIFNldCBkZWZhdWx0IGNhbGxiYWNrIGlmIG5vdCBkZWZpbmVkXG4gICAgY29uc3QgdGFnVmFsaWRhdGlvbkhvb2sgPSB0aGlzLnRhZ1ZhbGlkYXRpb25Ib29rID8/ICgoXywgdmFsaWRhdGlvbkNiKSA9PiB2YWxpZGF0aW9uQ2IodHJ1ZSkpO1xuXG4gICAgY29uc3QgdmFsaWRhdGlvbkNiID0gKHNob3VsZEFkZFRhZzogYm9vbGVhbikgPT4ge1xuICAgICAgLy8gQWRkIG5ldyBUYWcgaW4gZm9ybSBjb250cm9sXG4gICAgICBpZiAoc2hvdWxkQWRkVGFnKSB7XG4gICAgICAgIC8vIERlbGV0ZSBUYWcgaWYgYWxyZWFkeSBleGlzdGluZ1xuICAgICAgICBjb25zdCBmb3JtQ29udHJvbFZhbHVlID0gWy4uLih0aGlzLnZhbHVlID8/IFtdKV0uZmlsdGVyKHYgPT4gdiAhPT0gdGFnVG9BZGQpO1xuXG4gICAgICAgIHRoaXMudmFsdWUgPSBbLi4uZm9ybUNvbnRyb2xWYWx1ZSwgdGFnVG9BZGRdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBSZXNldCB0aGUgaW5wdXQgdmFsdWVcbiAgICBpZiAoaW5wdXQpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgdGFnVmFsaWRhdGlvbkhvb2sodGFnVG9BZGQsIHZhbGlkYXRpb25DYik7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQ2hpcFRvRm9ybUNvbnRyb2wodGFnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gWy4uLih0aGlzLnZhbHVlID8/IFtdKV0uZmlsdGVyKHYgPT4gdiAhPT0gdGFnKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkF1dG9jb21wbGV0ZVNlbGVjdChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuYWRkQ2hpcFRvRm9ybUNvbnRyb2woeyB2YWx1ZTogZXZlbnQub3B0aW9uLnZhbHVlIH0pO1xuICB9XG5cbiAgcHVibGljIG9uTWF0Q2hpcFRva2VuRW5kKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnVzZUF1dG9jb21wbGV0ZU9wdGlvblZhbHVlT25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBHaXZlIHByaW9yaXR5IHRvIHRoZSBgb25BdXRvY29tcGxldGVTZWxlY3RgIHdoZW4gdmFsaWRhdGluZyB3aXRoIHRoZSBibHVyIGV2ZW50XG4gICAgdGhpcy5hZGRDaGlwVG9Gb3JtQ29udHJvbCh7IHZhbHVlOiB0aGlzLl90YWdJbnB1dD8ubmF0aXZlRWxlbWVudC52YWx1ZSA/PyAnJyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEF1dG9jb21wbGV0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fYXV0b2NvbXBsZXRlT3B0aW9ucyAmJiB0aGlzLl90YWdJbnB1dD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVGaWx0ZXJlZE9wdGlvbnMkID0gZnJvbUV2ZW50KHRoaXMuX3RhZ0lucHV0Lm5hdGl2ZUVsZW1lbnQsICdrZXl1cCcpLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChbXSBhcyBzdHJpbmdbXSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9hdXRvY29tcGxldGVPcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlT3B0aW9ucyh0aGlzLl90YWdJbnB1dD8ubmF0aXZlRWxlbWVudC52YWx1ZSA/PyAnJykucGlwZShcbiAgICAgICAgICAgICAgbWFwKG9wdGlvbnMgPT4gc2FuaXRpemVBdXRvY29tcGxldGVPcHRpb25zKG9wdGlvbnMpKSxcbiAgICAgICAgICAgICAgLy8gQWRkIG9wdGlvbnMgdG8gZGlzcGxheVZhbHVlQ2FjaGUgdG8gYXZvaWQgY2FsbCBvbiBzZWxlY3RcbiAgICAgICAgICAgICAgdGFwKG9wdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWVDYWNoZVtvcHRpb24udmFsdWVdID0gb3B0aW9uLmxhYmVsO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvZihkZWZhdWx0QXV0b2NvbXBsZXRlRmlsdGVyKHRoaXMuX2F1dG9jb21wbGV0ZU9wdGlvbnMgPz8gW10sIHRoaXMuX3RhZ0lucHV0Py5uYXRpdmVFbGVtZW50LnZhbHVlID8/ICcnKSk7XG4gICAgICAgIH0pLFxuXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICApO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGRlZmF1bHRBdXRvY29tcGxldGVGaWx0ZXIgPSAoXG4gIG9wdGlvbnM6IEF1dG9jb21wbGV0ZU9wdGlvbnMsXG4gIHNlYXJjaDogc3RyaW5nLFxuKToge1xuICB2YWx1ZTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xufVtdID0+IHtcbiAgcmV0dXJuIHNhbml0aXplQXV0b2NvbXBsZXRlT3B0aW9ucyhvcHRpb25zKS5maWx0ZXIoXG4gICAgZGVmYXVsdEhlYWRlciA9PlxuICAgICAgZGVmYXVsdEhlYWRlci5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKChzZWFyY2ggPz8gJycpLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICBkZWZhdWx0SGVhZGVyLnZhbHVlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoKHNlYXJjaCA/PyAnJykudG9Mb3dlckNhc2UoKSksXG4gICk7XG59O1xuXG5jb25zdCBzYW5pdGl6ZUF1dG9jb21wbGV0ZU9wdGlvbnMgPSAoXG4gIG9wdGlvbnM6IEF1dG9jb21wbGV0ZU9wdGlvbnMsXG4pOiB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG59W10gPT4ge1xuICByZXR1cm4gb3B0aW9ucy5tYXAob3B0aW9uID0+IHtcbiAgICBpZiAob3B0aW9uICYmIHR5cGVvZiBvcHRpb24gIT09ICdzdHJpbmcnICYmICd2YWx1ZScgaW4gb3B0aW9uICYmICdsYWJlbCcgaW4gb3B0aW9uKSB7XG4gICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cbiAgICByZXR1cm4geyB2YWx1ZTogb3B0aW9uLCBsYWJlbDogb3B0aW9uIH07XG4gIH0pO1xufTtcbiIsIjwhLS1cblxuICAgIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbi0tPlxuPG1hdC1jaGlwLWxpc3QgI3RhZ0NoaXBMaXN0IFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCIgbXVsdGlwbGUgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgdGFnIG9mIHZhbHVlXCIgW3NlbGVjdGFibGVdPVwiZmFsc2VcIiBbcmVtb3ZhYmxlXT1cIiFkaXNhYmxlZFwiIChyZW1vdmVkKT1cInJlbW92ZUNoaXBUb0Zvcm1Db250cm9sKHRhZylcIj5cbiAgICB7eyBfZGlzcGxheVZhbHVlV2l0aCA/IChfZGlzcGxheVZhbHVlV2l0aCh0YWcpIHwgYXN5bmMpIDogdGFnIH19XG4gICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmU+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgPC9tYXQtY2hpcD5cbiAgPGlucHV0XG4gICAgKm5nSWY9XCIhZGlzYWJsZWRcIlxuICAgICN0YWdJbnB1dFxuICAgIFttYXRBdXRvY29tcGxldGVEaXNhYmxlZF09XCIhX2F1dG9jb21wbGV0ZU9wdGlvbnNcIlxuICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICBbbWF0Q2hpcElucHV0Rm9yXT1cInRhZ0NoaXBMaXN0XCJcbiAgICBbbWF0Q2hpcElucHV0QWRkT25CbHVyXT1cImFkZE9uQmx1clwiXG4gICAgKG1hdENoaXBJbnB1dFRva2VuRW5kKT1cIm9uTWF0Q2hpcFRva2VuRW5kKClcIlxuICAvPlxuICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJvbkF1dG9jb21wbGV0ZVNlbGVjdCgkZXZlbnQpXCI+XG4gICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBhdXRvY29tcGxldGVGaWx0ZXJlZE9wdGlvbnMkIHwgYXN5bmNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XG4gICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICA8L21hdC1vcHRpb24+XG4gIDwvbWF0LWF1dG9jb21wbGV0ZT5cbjwvbWF0LWNoaXAtbGlzdD5cbiJdfQ==
294
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLXRhZ3MtaW5wdXQvZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLXRhZ3MtaW5wdXQvZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBR1QsV0FBVyxFQUNYLEtBQUssRUFFTCxRQUFRLEVBQ1IsSUFBSSxFQUNKLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxTQUFTLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztBQW9CdEYsTUFBTSxPQUFPLHlCQUF5QjtJQXFLcEM7SUFDRSxzQ0FBc0M7SUFDRixTQUFvQixFQUN2QyxLQUFpQixFQUNqQixFQUFnQixFQUN6QixpQkFBb0M7UUFIUixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3ZDLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsT0FBRSxHQUFGLEVBQUUsQ0FBYztRQUN6QixzQkFBaUIsR0FBakIs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QUksT0FBTyxJQUFJLE1BQU0sRUFBRTtZQUNsRixPQUFPLE1BQU0sQ0FBQztTQUNmO1FBQ0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzFDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbWVtYmVyLWFjY2Vzc2liaWxpdHlcblxuaW1wb3J0IHsgRm9jdXNNb25pdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBEb0NoZWNrLFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIFNlbGYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCB0eXBlIFRhZ3MgPSBBcnJheTxzdHJpbmc+O1xuXG5leHBvcnQgdHlwZSBBdXRvY29tcGxldGVPcHRpb25zID0gKHN0cmluZyB8IHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9KVtdO1xuXG5leHBvcnQgdHlwZSBEaXNwbGF5VmFsdWVXaXRoRm4gPSAodmFsdWU6IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnaW8tZm9ybS10YWdzLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dpby1mb3JtLXRhZ3MtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9naW8tZm9ybS10YWdzLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLFxuICAgICAgdXNlRXhpc3Rpbmc6IEdpb0Zvcm1UYWdzSW5wdXRDb21wb25lbnQsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgR2lvRm9ybVRhZ3NJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE1hdEZvcm1GaWVsZENvbnRyb2w8VGFncz4sIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBEb0NoZWNrLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHN0YXRpYyBuZXh0SWQgPSAwO1xuXG4gIHB1YmxpYyBfb25DaGFuZ2U6IChfdGFnczogVGFncyB8IG51bGwpID0+IHZvaWQgPSAoKSA9PiAoe30pO1xuXG4gIHB1YmxpYyBfb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4gKHt9KTtcbiAgcHJpdmF0ZSB0b3VjaGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCdhcmlhLWxhYmVsJylcbiAgcHVibGljIGFyaWFMYWJlbCA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhZGRPbkJsdXIgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiBjYWxsZWQgZWFjaCB0aW1lIGEgdGFnIGlzIGFkZGVkLCBpdCBjYW4gYmUgdXNlZCB0byBob29rIGluc2lkZSB0aGVcbiAgICogYWRkaXRpb24gcHJvY2VzcyB0bywgZm9yIGluc3RhbmNlLCBoYXZlIGN1c3RvbSB2YWxpZGF0aW9uIGluIHRoZSBjb21wb25lbnRzXG4gICAqIHVzaW5nIGBnaW8tZm9ybS10YWdzLWlucHV0YC5cbiAgICpcbiAgICogUGFyYW1ldGVycyBhcmU6XG4gICAqIC0gYHRhZ2A6IFRoZSB2YWx1ZSBvZiB0aGUgdGFnIHRvIGFkZFxuICAgKiAtIGB2YWxpZGF0aW9uQ2JgOiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHZhbGlkYXRpb24gaXMgZG9uZS4gSWZcbiAgICogY2FsbGVkIHdpdGggYHRydWVgIGl0IHdpbGwgYWRkIHRoZSB0YWcsIG90aGVyd2lzZSBpdCB3aWxsIGp1c3QgaWdub3JlIGl0XG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgdGFnVmFsaWRhdGlvbkhvb2s6ICgodGFnOiBzdHJpbmcsIHZhbGlkYXRpb25DYjogKHNob3VsZEFkZFRhZzogYm9vbGVhbikgPT4gdm9pZCkgPT4gdm9pZCkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhdXRvY29tcGxldGVPcHRpb25zKHY6IEF1dG9jb21wbGV0ZU9wdGlvbnMgfCAoKHNlYXJjaDogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPEF1dG9jb21wbGV0ZU9wdGlvbnM+KSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2F1dG9jb21wbGV0ZU9wdGlvbnMgPSB2O1xuICAgIHRoaXMuaW5pdEF1dG9jb21wbGV0ZSgpO1xuICB9XG4gIHB1YmxpYyBfYXV0b2NvbXBsZXRlT3B0aW9ucz86IEF1dG9jb21wbGV0ZU9wdGlvbnMgfCAoKHNlYXJjaDogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPEF1dG9jb21wbGV0ZU9wdGlvbnM+KTtcblxuICAvKipcbiAgICogR2V0IHRoZSBsYWJlbCBvZiBhbiBvcHRpb24gdmFsdWUuXG4gICAqIFRvIHVzZSB3aXRoIGF1dG9jb21wbGV0ZU9wdGlvbnMgbGFiZWwgJiB2YWx1ZSBtb2RlLlxuICAgKiBGdW5jdGlvbiBjYWxsZWQgZWFjaCB0aW1lIGEgdGFnIG5lZWRzIHRvIGJlIGRpc3BsYXllZCBpZCBkZWZpbmVkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNwbGF5VmFsdWVXaXRoKGRpc3BsYXlWYWx1ZVdpdGg6IERpc3BsYXlWYWx1ZVdpdGhGbikge1xuICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZVdpdGggPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHRoaXMuZGlzcGxheVZhbHVlQ2FjaGVbdmFsdWVdKSB7XG4gICAgICAgIHJldHVybiBvZih0aGlzLmRpc3BsYXlWYWx1ZUNhY2hlW3ZhbHVlXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGlzcGxheVZhbHVlV2l0aCh2YWx1ZSkucGlwZShcbiAgICAgICAgdGFwKGxhYmVsID0+IHtcbiAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZUNhY2hlW3ZhbHVlXSA9IGxhYmVsO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byBmb3JjZSB0aGUgY2hpcCB0byBiZSBwYXJ0IG9mIHRoZSBhdXRvY29tcGxldGUgb3B0aW9ucy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB1c2VBdXRvY29tcGxldGVPcHRpb25WYWx1ZU9ubHkgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCd0YWdJbnB1dCcpXG4gIHB1YmxpYyBzZXQgdGFnSW5wdXQodjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PiB8IG51bGwpIHtcbiAgICB0aGlzLl90YWdJbnB1dCA9IHY7XG4gICAgdGhpcy5pbml0QXV0b2NvbXBsZXRlKCk7XG4gIH1cbiAgcHJpdmF0ZSBfdGFnSW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4gfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgYXV0b2NvbXBsZXRlRmlsdGVyZWRPcHRpb25zJD86IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPltdPjtcblxuICBwdWJsaWMgX2Rpc3BsYXlWYWx1ZVdpdGg/OiAodmFsdWU6IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIHByaXZhdGUgZGlzcGxheVZhbHVlQ2FjaGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAvLyBGcm9tIE1hdEZvcm1GaWVsZENvbnRyb2wgaW50ZXJmYWNlXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogVGFncyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgdmFsdWUoX3RhZ3M6IFRhZ3MgfCBudWxsKSB7XG4gICAgdGhpcy5fdmFsdWUgPSBfdGFncztcbiAgICB0aGlzLl9vbkNoYW5nZShfdGFncyk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWU6IFRhZ3MgfCBudWxsID0gbnVsbDtcblxuICAvLyBGcm9tIE1hdEZvcm1GaWVsZENvbnRyb2wgaW50ZXJmYWNlXG4gIHB1YmxpYyBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgQEhvc3RCaW5kaW5nKCdpZCcpXG4gIHB1YmxpYyBpZCA9IGBnaW8tZm9ybS10YWdzLWlucHV0LSR7R2lvRm9ybVRhZ3NJbnB1dENvbXBvbmVudC5uZXh0SWQrK31gO1xuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcGxhY2Vob2xkZXIocGxoOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHBsaDtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIF9wbGFjZWhvbGRlciA9ICcnO1xuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgcHVibGljIGZvY3VzZWQgPSBmYWxzZTtcblxuICAvLyBGcm9tIE1hdEZvcm1GaWVsZENvbnRyb2wgaW50ZXJmYWNlXG4gIHB1YmxpYyBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzRW1wdHkodGhpcy52YWx1ZSkgJiYgaXNFbXB0eSh0aGlzLl90YWdJbnB1dD8ubmF0aXZlRWxlbWVudD8udmFsdWUpO1xuICB9XG5cbiAgLy8gRnJvbSBNYXRGb3JtRmllbGRDb250cm9sIGludGVyZmFjZVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZsb2F0aW5nJylcbiAgcHVibGljIGdldCBzaG91bGRMYWJlbEZsb2F0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZvY3VzZWQgfHwgIXRoaXMuZW1wdHk7XG4gIH1cblxuICAvLyBGcm9tIE1hdEZvcm1GaWVsZENvbnRyb2wgaW50ZXJmYWNlXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICB9XG5cbiAgcHVibGljIHNldCByZXF1aXJlZChyZXE6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShyZXEpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG5cbiAgLy8gRnJvbSBNYXRGb3JtRmllbGRDb250cm9sIGludGVyZmFjZVxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZCB8fCAodGhpcy5uZ0NvbnRyb2wgJiYgdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQgPT09IHRydWUpO1xuICB9XG5cbiAgcHVibGljIHNldCBkaXNhYmxlZChkaXM6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShkaXMpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgLy8gRnJvbSBNYXRGb3JtRmllbGRDb250cm9sIGludGVyZmFjZVxuICBwdWJsaWMgZ2V0IGVycm9yU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudG91Y2hlZCAmJlxuICAgICAgLy8gaWYgcmVxdWlyZWQgY2hlY2sgaWYgaXMgZW1wdHlcbiAgICAgICgodGhpcy5yZXF1aXJlZCAmJiB0aGlzLmVtcHR5KSB8fFxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHRvdWNoZWQgY29udHJvbCBjaGVjayBpZiB0aGVyZSBpcyBhbiBlcnJvclxuICAgICAgICAodGhpcy5uZ0NvbnRyb2wgJiYgdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCA9PT0gdHJ1ZSAmJiAhIXRoaXMubmdDb250cm9sLmVycm9ycykpXG4gICAgKTtcbiAgfVxuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgcHVibGljIGNvbnRyb2xUeXBlPzogc3RyaW5nO1xuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgcHVibGljIGF1dG9maWxsZWQ/OiBib29sZWFuO1xuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgcHVibGljIHVzZXJBcmlhRGVzY3JpYmVkQnk/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyByZWFkb25seSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm06IEZvY3VzTW9uaXRvcixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gICAgLy8gUmVwbGFjZSB0aGUgcHJvdmlkZXIgZnJvbSBhYm92ZSB3aXRoIHRoaXMuXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcbiAgICAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIGFjY2Vzc29yIGRpcmVjdGx5IChpbnN0ZWFkIG9mIHVzaW5nXG4gICAgICAvLyB0aGUgcHJvdmlkZXJzKSB0byBhdm9pZCBydW5uaW5nIGludG8gYSBjaXJjdWxhciBpbXBvcnQuXG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG5cbiAgICBmbS5tb25pdG9yKGVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRydWUpLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgdGhpcy5mb2N1c2VkID0gISFvcmlnaW47XG4gICAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIC8vIHN5bmMgY29udHJvbCB0b3VjaGVkIHdpdGggbG9jYWwgdG91Y2hlZFxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsICYmIHRoaXMudG91Y2hlZCAhPT0gdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy50b3VjaGVkID0gdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCA9PT0gdHJ1ZTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcbiAgICB0aGlzLmZtLnN0b3BNb25pdG9yaW5nKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2VzcyBpbnRlcmZhY2VcbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodGFnczogVGFncyB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gIH1cblxuICAvLyBGcm9tIE1hdEZvcm1GaWVsZENvbnRyb2wgaW50ZXJmYWNlXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JylcbiAgcHVibGljIGRlc2NyaWJlZEJ5ID0gJyc7XG5cbiAgcHVibGljIHNldERlc2NyaWJlZEJ5SWRzKGlkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLmRlc2NyaWJlZEJ5ID0gaWRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHB1YmxpYyBvbkNvbnRhaW5lckNsaWNrKF9ldmVudDogTW91c2VFdmVudCk6IHZvaWQge31cblxuICBwdWJsaWMgYWRkQ2hpcFRvRm9ybUNvbnRyb2woZXZlbnQ6IHsgdmFsdWU6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLl90YWdJbnB1dD8ubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCB0YWdUb0FkZCA9IChldmVudC52YWx1ZSA/PyAnJykudHJpbSgpO1xuXG4gICAgaWYgKGlzRW1wdHkodGFnVG9BZGQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSB0YWcgb25seSBpZiBzaG91bGRBZGRUYWcgaW4gdmFsaWRhdGlvbkNiIHJldHVybiB0cnVlXG4gICAgLy8gU2V0IGRlZmF1bHQgY2FsbGJhY2sgaWYgbm90IGRlZmluZWRcbiAgICBjb25zdCB0YWdWYWxpZGF0aW9uSG9vayA9IHRoaXMudGFnVmFsaWRhdGlvbkhvb2sgPz8gKChfLCB2YWxpZGF0aW9uQ2IpID0+IHZhbGlkYXRpb25DYih0cnVlKSk7XG5cbiAgICBjb25zdCB2YWxpZGF0aW9uQ2IgPSAoc2hvdWxkQWRkVGFnOiBib29sZWFuKSA9PiB7XG4gICAgICAvLyBBZGQgbmV3IFRhZyBpbiBmb3JtIGNvbnRyb2xcbiAgICAgIGlmIChzaG91bGRBZGRUYWcpIHtcbiAgICAgICAgLy8gRGVsZXRlIFRhZyBpZiBhbHJlYWR5IGV4aXN0aW5nXG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sVmFsdWUgPSBbLi4uKHRoaXMudmFsdWUgPz8gW10pXS5maWx0ZXIodiA9PiB2ICE9PSB0YWdUb0FkZCk7XG5cbiAgICAgICAgdGhpcy52YWx1ZSA9IFsuLi5mb3JtQ29udHJvbFZhbHVlLCB0YWdUb0FkZF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIFJlc2V0IHRoZSBpbnB1dCB2YWx1ZVxuICAgIGlmIChpbnB1dCkge1xuICAgICAgaW5wdXQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICB0YWdWYWxpZGF0aW9uSG9vayh0YWdUb0FkZCwgdmFsaWRhdGlvbkNiKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVDaGlwVG9Gb3JtQ29udHJvbCh0YWc6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBbLi4uKHRoaXMudmFsdWUgPz8gW10pXS5maWx0ZXIodiA9PiB2ICE9PSB0YWcpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIG9uQXV0b2NvbXBsZXRlU2VsZWN0KGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5hZGRDaGlwVG9Gb3JtQ29udHJvbCh7IHZhbHVlOiBldmVudC5vcHRpb24udmFsdWUgfSk7XG4gIH1cblxuICBwdWJsaWMgb25NYXRDaGlwVG9rZW5FbmQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudXNlQXV0b2NvbXBsZXRlT3B0aW9uVmFsdWVPbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEdpdmUgcHJpb3JpdHkgdG8gdGhlIGBvbkF1dG9jb21wbGV0ZVNlbGVjdGAgd2hlbiB2YWxpZGF0aW5nIHdpdGggdGhlIGJsdXIgZXZlbnRcbiAgICB0aGlzLmFkZENoaXBUb0Zvcm1Db250cm9sKHsgdmFsdWU6IHRoaXMuX3RhZ0lucHV0Py5uYXRpdmVFbGVtZW50LnZhbHVlID8/ICcnIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0QXV0b2NvbXBsZXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9hdXRvY29tcGxldGVPcHRpb25zICYmIHRoaXMuX3RhZ0lucHV0Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUZpbHRlcmVkT3B0aW9ucyQgPSBmcm9tRXZlbnQodGhpcy5fdGFnSW5wdXQubmF0aXZlRWxlbWVudCwgJ2tleXVwJykucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKFtdIGFzIHN0cmluZ1tdKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2F1dG9jb21wbGV0ZU9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdXRvY29tcGxldGVPcHRpb25zKHRoaXMuX3RhZ0lucHV0Py5uYXRpdmVFbGVtZW50LnZhbHVlID8/ICcnKS5waXBlKFxuICAgICAgICAgICAgICBtYXAob3B0aW9ucyA9PiBzYW5pdGl6ZUF1dG9jb21wbGV0ZU9wdGlvbnMob3B0aW9ucykpLFxuICAgICAgICAgICAgICAvLyBBZGQgb3B0aW9ucyB0byBkaXNwbGF5VmFsdWVDYWNoZSB0byBhdm9pZCBjYWxsIG9uIHNlbGVjdFxuICAgICAgICAgICAgICB0YXAob3B0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZUNhY2hlW29wdGlvbi52YWx1ZV0gPSBvcHRpb24ubGFiZWw7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG9mKGRlZmF1bHRBdXRvY29tcGxldGVGaWx0ZXIodGhpcy5fYXV0b2NvbXBsZXRlT3B0aW9ucyA/PyBbXSwgdGhpcy5fdGFnSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPz8gJycpKTtcbiAgICAgICAgfSksXG5cbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZGVmYXVsdEF1dG9jb21wbGV0ZUZpbHRlciA9IChcbiAgb3B0aW9uczogQXV0b2NvbXBsZXRlT3B0aW9ucyxcbiAgc2VhcmNoOiBzdHJpbmcsXG4pOiB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG59W10gPT4ge1xuICByZXR1cm4gc2FuaXRpemVBdXRvY29tcGxldGVPcHRpb25zKG9wdGlvbnMpLmZpbHRlcihcbiAgICBkZWZhdWx0SGVhZGVyID0+XG4gICAgICBkZWZhdWx0SGVhZGVyLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoKHNlYXJjaCA/PyAnJykudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIGRlZmF1bHRIZWFkZXIudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygoc2VhcmNoID8/ICcnKS50b0xvd2VyQ2FzZSgpKSxcbiAgKTtcbn07XG5cbmNvbnN0IHNhbml0aXplQXV0b2NvbXBsZXRlT3B0aW9ucyA9IChcbiAgb3B0aW9uczogQXV0b2NvbXBsZXRlT3B0aW9ucyxcbik6IHtcbiAgdmFsdWU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbn1bXSA9PiB7XG4gIHJldHVybiBvcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgIGlmIChvcHRpb24gJiYgdHlwZW9mIG9wdGlvbiAhPT0gJ3N0cmluZycgJiYgJ3ZhbHVlJyBpbiBvcHRpb24gJiYgJ2xhYmVsJyBpbiBvcHRpb24pIHtcbiAgICAgIHJldHVybiBvcHRpb247XG4gICAgfVxuICAgIHJldHVybiB7IHZhbHVlOiBvcHRpb24sIGxhYmVsOiBvcHRpb24gfTtcbiAgfSk7XG59O1xuIiwiPCEtLVxuXG4gICAgQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cblxuLS0+XG48bWF0LWNoaXAtbGlzdCAjdGFnQ2hpcExpc3QgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIiBtdWx0aXBsZSBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgPG1hdC1jaGlwXG4gICAgKm5nRm9yPVwibGV0IHRhZyBvZiB2YWx1ZVwiXG4gICAgW3NlbGVjdGFibGVdPVwiZmFsc2VcIlxuICAgIFtyZW1vdmFibGVdPVwiIWRpc2FibGVkXCJcbiAgICAocmVtb3ZlZCk9XCJyZW1vdmVDaGlwVG9Gb3JtQ29udHJvbCh0YWcpXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICA+XG4gICAge3sgX2Rpc3BsYXlWYWx1ZVdpdGggPyAoX2Rpc3BsYXlWYWx1ZVdpdGgodGFnKSB8IGFzeW5jKSA6IHRhZyB9fVxuICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlPmNhbmNlbDwvbWF0LWljb24+XG4gIDwvbWF0LWNoaXA+XG4gIDxpbnB1dFxuICAgICpuZ0lmPVwiIWRpc2FibGVkXCJcbiAgICAjdGFnSW5wdXRcbiAgICBbbWF0QXV0b2NvbXBsZXRlRGlzYWJsZWRdPVwiIV9hdXRvY29tcGxldGVPcHRpb25zIHx8IGRpc2FibGVkXCJcbiAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgW21hdENoaXBJbnB1dEZvcl09XCJ0YWdDaGlwTGlzdFwiXG4gICAgW21hdENoaXBJbnB1dEFkZE9uQmx1cl09XCJhZGRPbkJsdXJcIlxuICAgIChtYXRDaGlwSW5wdXRUb2tlbkVuZCk9XCJvbk1hdENoaXBUb2tlbkVuZCgpXCJcbiAgLz5cbiAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwib25BdXRvY29tcGxldGVTZWxlY3QoJGV2ZW50KVwiPlxuICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgYXV0b2NvbXBsZXRlRmlsdGVyZWRPcHRpb25zJCB8IGFzeW5jXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxuICAgICAge3sgb3B0aW9uLmxhYmVsIH19XG4gICAgPC9tYXQtb3B0aW9uPlxuICA8L21hdC1hdXRvY29tcGxldGU+XG48L21hdC1jaGlwLWxpc3Q+XG4iXX0=
@@ -15,11 +15,12 @@
15
15
  */
16
16
  import { ComponentHarness, HarnessPredicate, parallel, TestKey } from '@angular/cdk/testing';
17
17
  import { MatAutocompleteHarness } from '@angular/material/autocomplete/testing';
18
- import { MatChipListHarness } from '@angular/material/chips/testing';
18
+ import { MatChipHarness, MatChipListHarness } from '@angular/material/chips/testing';
19
19
  export class GioFormTagsInputHarness extends ComponentHarness {
20
20
  constructor() {
21
21
  super(...arguments);
22
22
  this.getMatChipListHarness = this.locatorFor(MatChipListHarness);
23
+ this.getMatChipsHarness = this.locatorForAll(MatChipHarness);
23
24
  }
24
25
  /**
25
26
  * Gets a `HarnessPredicate` that can be used to search for a `GioFormColorInputHarness` that meets
@@ -33,7 +34,10 @@ export class GioFormTagsInputHarness extends ComponentHarness {
33
34
  }
34
35
  async isDisabled() {
35
36
  const matChipList = await this.getMatChipListHarness();
36
- return matChipList.isDisabled();
37
+ const matChips = await this.getMatChipsHarness();
38
+ const chipListDisabled = await matChipList.isDisabled();
39
+ const chipsDisabled = await parallel(() => matChips.map(async (matChip) => await matChip.isDisabled()));
40
+ return chipListDisabled && chipsDisabled.every(chipDisabled => chipDisabled);
37
41
  }
38
42
  async getTags() {
39
43
  const matChipList = await this.getMatChipListHarness();
@@ -64,4 +68,4 @@ export class GioFormTagsInputHarness extends ComponentHarness {
64
68
  }
65
69
  }
66
70
  GioFormTagsInputHarness.hostSelector = 'gio-form-tags-input';
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tdGFncy1pbnB1dC5oYXJuZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcGFydGljbGVzLWFuZ3VsYXIvc3JjL2xpYi9naW8tZm9ybS10YWdzLWlucHV0L2dpby1mb3JtLXRhZ3MtaW5wdXQuaGFybmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSXJFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxnQkFBZ0I7SUFBN0Q7O1FBY1ksMEJBQXFCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBeUN4RSxDQUFDO0lBcERDOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBMEMsRUFBRTtRQUM3RCxPQUFPLElBQUksZ0JBQWdCLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUlNLEtBQUssQ0FBQyxVQUFVO1FBQ3JCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDdkQsT0FBTyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFdkQsTUFBTSxLQUFLLEdBQUcsTUFBTSxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFM0MsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBVyxFQUFFLGVBQWlDLE9BQU8sQ0FBQyxLQUFLO1FBQzdFLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFdkQsTUFBTSxTQUFTLEdBQUcsTUFBTSxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0MsTUFBTSxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksWUFBWSxLQUFLLE1BQU0sRUFBRTtZQUMzQixNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN4QjthQUFNO1lBQ0wsTUFBTSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFXO1FBQ2hDLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFdkQsTUFBTSxLQUFLLEdBQUcsTUFBTSxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDeEQsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDWixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFTSxLQUFLLENBQUMseUJBQXlCO1FBQ3BDLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDO1FBRXZGLE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQzs7QUFyRGEsb0NBQVksR0FBRyxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEJhc2VIYXJuZXNzRmlsdGVycywgQ29tcG9uZW50SGFybmVzcywgSGFybmVzc1ByZWRpY2F0ZSwgcGFyYWxsZWwsIFRlc3RLZXkgfSBmcm9tICdAYW5ndWxhci9jZGsvdGVzdGluZyc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVIYXJuZXNzIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL3Rlc3RpbmcnO1xuaW1wb3J0IHsgTWF0Q2hpcExpc3RIYXJuZXNzIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMvdGVzdGluZyc7XG5cbmV4cG9ydCB0eXBlIEdpb0Zvcm1UYWdzSW5wdXRIYXJuZXNzRmlsdGVycyA9IEJhc2VIYXJuZXNzRmlsdGVycztcblxuZXhwb3J0IGNsYXNzIEdpb0Zvcm1UYWdzSW5wdXRIYXJuZXNzIGV4dGVuZHMgQ29tcG9uZW50SGFybmVzcyB7XG4gIHB1YmxpYyBzdGF0aWMgaG9zdFNlbGVjdG9yID0gJ2dpby1mb3JtLXRhZ3MtaW5wdXQnO1xuXG4gIC8qKlxuICAgKiBHZXRzIGEgYEhhcm5lc3NQcmVkaWNhdGVgIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBhIGBHaW9Gb3JtQ29sb3JJbnB1dEhhcm5lc3NgIHRoYXQgbWVldHNcbiAgICogY2VydGFpbiBjcml0ZXJpYS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgZmlsdGVyaW5nIHdoaWNoIGlucHV0IGluc3RhbmNlcyBhcmUgY29uc2lkZXJlZCBhIG1hdGNoLlxuICAgKiBAcmV0dXJuIGEgYEhhcm5lc3NQcmVkaWNhdGVgIGNvbmZpZ3VyZWQgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgd2l0aChvcHRpb25zOiBHaW9Gb3JtVGFnc0lucHV0SGFybmVzc0ZpbHRlcnMgPSB7fSk6IEhhcm5lc3NQcmVkaWNhdGU8R2lvRm9ybVRhZ3NJbnB1dEhhcm5lc3M+IHtcbiAgICByZXR1cm4gbmV3IEhhcm5lc3NQcmVkaWNhdGUoR2lvRm9ybVRhZ3NJbnB1dEhhcm5lc3MsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldE1hdENoaXBMaXN0SGFybmVzcyA9IHRoaXMubG9jYXRvckZvcihNYXRDaGlwTGlzdEhhcm5lc3MpO1xuXG4gIHB1YmxpYyBhc3luYyBpc0Rpc2FibGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IG1hdENoaXBMaXN0ID0gYXdhaXQgdGhpcy5nZXRNYXRDaGlwTGlzdEhhcm5lc3MoKTtcbiAgICByZXR1cm4gbWF0Q2hpcExpc3QuaXNEaXNhYmxlZCgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFRhZ3MoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IG1hdENoaXBMaXN0ID0gYXdhaXQgdGhpcy5nZXRNYXRDaGlwTGlzdEhhcm5lc3MoKTtcblxuICAgIGNvbnN0IGNoaXBzID0gYXdhaXQgbWF0Q2hpcExpc3QuZ2V0Q2hpcHMoKTtcblxuICAgIHJldHVybiBwYXJhbGxlbCgoKSA9PiBjaGlwcy5tYXAoYXN5bmMgY2hpcCA9PiBhd2FpdCBjaGlwLmdldFRleHQoKSkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZFRhZyh0YWc6IHN0cmluZywgc2VwYXJhdG9yS2V5OiBUZXN0S2V5IHwgJ2JsdXInID0gVGVzdEtleS5FTlRFUik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1hdENoaXBMaXN0ID0gYXdhaXQgdGhpcy5nZXRNYXRDaGlwTGlzdEhhcm5lc3MoKTtcblxuICAgIGNvbnN0IGNoaXBJbnB1dCA9IGF3YWl0IG1hdENoaXBMaXN0LmdldElucHV0KCk7XG4gICAgYXdhaXQgY2hpcElucHV0LnNldFZhbHVlKHRhZyk7XG4gICAgaWYgKHNlcGFyYXRvcktleSA9PT0gJ2JsdXInKSB7XG4gICAgICBhd2FpdCBjaGlwSW5wdXQuYmx1cigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBjaGlwSW5wdXQuc2VuZFNlcGFyYXRvcktleShzZXBhcmF0b3JLZXkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZW1vdmVUYWcodGFnOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtYXRDaGlwTGlzdCA9IGF3YWl0IHRoaXMuZ2V0TWF0Q2hpcExpc3RIYXJuZXNzKCk7XG5cbiAgICBjb25zdCBjaGlwcyA9IGF3YWl0IG1hdENoaXBMaXN0LmdldENoaXBzKHsgdGV4dDogdGFnIH0pO1xuICAgIGlmIChjaGlwc1swXSkge1xuICAgICAgYXdhaXQgY2hpcHNbMF0ucmVtb3ZlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE1hdEF1dG9jb21wbGV0ZUhhcm5lc3MoKTogUHJvbWlzZTxNYXRBdXRvY29tcGxldGVIYXJuZXNzIHwgbnVsbD4ge1xuICAgIGNvbnN0IG1hdEF1dG9jb21wbGV0ZUhhcm5lc3MgPSBhd2FpdCB0aGlzLmxvY2F0b3JGb3JPcHRpb25hbChNYXRBdXRvY29tcGxldGVIYXJuZXNzKSgpO1xuXG4gICAgcmV0dXJuIG1hdEF1dG9jb21wbGV0ZUhhcm5lc3M7XG4gIH1cbn1cbiJdfQ==
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tdGFncy1pbnB1dC5oYXJuZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcGFydGljbGVzLWFuZ3VsYXIvc3JjL2xpYi9naW8tZm9ybS10YWdzLWlucHV0L2dpby1mb3JtLXRhZ3MtaW5wdXQuaGFybmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUlyRixNQUFNLE9BQU8sdUJBQXdCLFNBQVEsZ0JBQWdCO0lBQTdEOztRQWNZLDBCQUFxQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM1RCx1QkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBOENwRSxDQUFDO0lBMURDOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBMEMsRUFBRTtRQUM3RCxPQUFPLElBQUksZ0JBQWdCLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUtNLEtBQUssQ0FBQyxVQUFVO1FBQ3JCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDdkQsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUVqRCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3hELE1BQU0sYUFBYSxHQUFHLE1BQU0sUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFLENBQUMsTUFBTSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXRHLE9BQU8sZ0JBQWdCLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTztRQUNsQixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRXZELE1BQU0sS0FBSyxHQUFHLE1BQU0sV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTNDLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLElBQUksRUFBQyxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQVcsRUFBRSxlQUFpQyxPQUFPLENBQUMsS0FBSztRQUM3RSxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRXZELE1BQU0sU0FBUyxHQUFHLE1BQU0sV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9DLE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLFlBQVksS0FBSyxNQUFNLEVBQUU7WUFDM0IsTUFBTSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDeEI7YUFBTTtZQUNMLE1BQU0sU0FBUyxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBVztRQUNoQyxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRXZELE1BQU0sS0FBSyxHQUFHLE1BQU0sV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ1osTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLHlCQUF5QjtRQUNwQyxNQUFNLHNCQUFzQixHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztRQUV2RixPQUFPLHNCQUFzQixDQUFDO0lBQ2hDLENBQUM7O0FBM0RhLG9DQUFZLEdBQUcscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBCYXNlSGFybmVzc0ZpbHRlcnMsIENvbXBvbmVudEhhcm5lc3MsIEhhcm5lc3NQcmVkaWNhdGUsIHBhcmFsbGVsLCBUZXN0S2V5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlSGFybmVzcyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZS90ZXN0aW5nJztcbmltcG9ydCB7IE1hdENoaXBIYXJuZXNzLCBNYXRDaGlwTGlzdEhhcm5lc3MgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcy90ZXN0aW5nJztcblxuZXhwb3J0IHR5cGUgR2lvRm9ybVRhZ3NJbnB1dEhhcm5lc3NGaWx0ZXJzID0gQmFzZUhhcm5lc3NGaWx0ZXJzO1xuXG5leHBvcnQgY2xhc3MgR2lvRm9ybVRhZ3NJbnB1dEhhcm5lc3MgZXh0ZW5kcyBDb21wb25lbnRIYXJuZXNzIHtcbiAgcHVibGljIHN0YXRpYyBob3N0U2VsZWN0b3IgPSAnZ2lvLWZvcm0tdGFncy1pbnB1dCc7XG5cbiAgLyoqXG4gICAqIEdldHMgYSBgSGFybmVzc1ByZWRpY2F0ZWAgdGhhdCBjYW4gYmUgdXNlZCB0byBzZWFyY2ggZm9yIGEgYEdpb0Zvcm1Db2xvcklucHV0SGFybmVzc2AgdGhhdCBtZWV0c1xuICAgKiBjZXJ0YWluIGNyaXRlcmlhLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBmaWx0ZXJpbmcgd2hpY2ggaW5wdXQgaW5zdGFuY2VzIGFyZSBjb25zaWRlcmVkIGEgbWF0Y2guXG4gICAqIEByZXR1cm4gYSBgSGFybmVzc1ByZWRpY2F0ZWAgY29uZmlndXJlZCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB3aXRoKG9wdGlvbnM6IEdpb0Zvcm1UYWdzSW5wdXRIYXJuZXNzRmlsdGVycyA9IHt9KTogSGFybmVzc1ByZWRpY2F0ZTxHaW9Gb3JtVGFnc0lucHV0SGFybmVzcz4ge1xuICAgIHJldHVybiBuZXcgSGFybmVzc1ByZWRpY2F0ZShHaW9Gb3JtVGFnc0lucHV0SGFybmVzcywgb3B0aW9ucyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TWF0Q2hpcExpc3RIYXJuZXNzID0gdGhpcy5sb2NhdG9yRm9yKE1hdENoaXBMaXN0SGFybmVzcyk7XG4gIHByb3RlY3RlZCBnZXRNYXRDaGlwc0hhcm5lc3MgPSB0aGlzLmxvY2F0b3JGb3JBbGwoTWF0Q2hpcEhhcm5lc3MpO1xuXG4gIHB1YmxpYyBhc3luYyBpc0Rpc2FibGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IG1hdENoaXBMaXN0ID0gYXdhaXQgdGhpcy5nZXRNYXRDaGlwTGlzdEhhcm5lc3MoKTtcbiAgICBjb25zdCBtYXRDaGlwcyA9IGF3YWl0IHRoaXMuZ2V0TWF0Q2hpcHNIYXJuZXNzKCk7XG5cbiAgICBjb25zdCBjaGlwTGlzdERpc2FibGVkID0gYXdhaXQgbWF0Q2hpcExpc3QuaXNEaXNhYmxlZCgpO1xuICAgIGNvbnN0IGNoaXBzRGlzYWJsZWQgPSBhd2FpdCBwYXJhbGxlbCgoKSA9PiBtYXRDaGlwcy5tYXAoYXN5bmMgbWF0Q2hpcCA9PiBhd2FpdCBtYXRDaGlwLmlzRGlzYWJsZWQoKSkpO1xuXG4gICAgcmV0dXJuIGNoaXBMaXN0RGlzYWJsZWQgJiYgY2hpcHNEaXNhYmxlZC5ldmVyeShjaGlwRGlzYWJsZWQgPT4gY2hpcERpc2FibGVkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUYWdzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCBtYXRDaGlwTGlzdCA9IGF3YWl0IHRoaXMuZ2V0TWF0Q2hpcExpc3RIYXJuZXNzKCk7XG5cbiAgICBjb25zdCBjaGlwcyA9IGF3YWl0IG1hdENoaXBMaXN0LmdldENoaXBzKCk7XG5cbiAgICByZXR1cm4gcGFyYWxsZWwoKCkgPT4gY2hpcHMubWFwKGFzeW5jIGNoaXAgPT4gYXdhaXQgY2hpcC5nZXRUZXh0KCkpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRUYWcodGFnOiBzdHJpbmcsIHNlcGFyYXRvcktleTogVGVzdEtleSB8ICdibHVyJyA9IFRlc3RLZXkuRU5URVIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtYXRDaGlwTGlzdCA9IGF3YWl0IHRoaXMuZ2V0TWF0Q2hpcExpc3RIYXJuZXNzKCk7XG5cbiAgICBjb25zdCBjaGlwSW5wdXQgPSBhd2FpdCBtYXRDaGlwTGlzdC5nZXRJbnB1dCgpO1xuICAgIGF3YWl0IGNoaXBJbnB1dC5zZXRWYWx1ZSh0YWcpO1xuICAgIGlmIChzZXBhcmF0b3JLZXkgPT09ICdibHVyJykge1xuICAgICAgYXdhaXQgY2hpcElucHV0LmJsdXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgY2hpcElucHV0LnNlbmRTZXBhcmF0b3JLZXkoc2VwYXJhdG9yS2V5KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVtb3ZlVGFnKHRhZzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWF0Q2hpcExpc3QgPSBhd2FpdCB0aGlzLmdldE1hdENoaXBMaXN0SGFybmVzcygpO1xuXG4gICAgY29uc3QgY2hpcHMgPSBhd2FpdCBtYXRDaGlwTGlzdC5nZXRDaGlwcyh7IHRleHQ6IHRhZyB9KTtcbiAgICBpZiAoY2hpcHNbMF0pIHtcbiAgICAgIGF3YWl0IGNoaXBzWzBdLnJlbW92ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRNYXRBdXRvY29tcGxldGVIYXJuZXNzKCk6IFByb21pc2U8TWF0QXV0b2NvbXBsZXRlSGFybmVzcyB8IG51bGw+IHtcbiAgICBjb25zdCBtYXRBdXRvY29tcGxldGVIYXJuZXNzID0gYXdhaXQgdGhpcy5sb2NhdG9yRm9yT3B0aW9uYWwoTWF0QXV0b2NvbXBsZXRlSGFybmVzcykoKTtcblxuICAgIHJldHVybiBtYXRBdXRvY29tcGxldGVIYXJuZXNzO1xuICB9XG59XG4iXX0=
@@ -35,7 +35,7 @@ import { MatInputModule } from '@angular/material/input';
35
35
  import * as i2$2 from '@angular/material/select';
36
36
  import { MatSelectModule } from '@angular/material/select';
37
37
  import { MatAutocompleteHarness } from '@angular/material/autocomplete/testing';
38
- import { MatChipListHarness } from '@angular/material/chips/testing';
38
+ import { MatChipListHarness, MatChipHarness } from '@angular/material/chips/testing';
39
39
  import * as i1$3 from '@angular/material/dialog';
40
40
  import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
41
41
  import { MatButtonHarness } from '@angular/material/button/testing';
@@ -550,18 +550,18 @@ class GioFormTagsInputComponent {
550
550
  */
551
551
  this.useAutocompleteOptionValueOnly = false;
552
552
  this._tagInput = null;
553
+ this.displayValueCache = {};
553
554
  this._value = null;
554
- // From ControlValueAccessor interface
555
+ // From MatFormFieldControl interface
555
556
  this.stateChanges = new Subject();
556
- // From ControlValueAccessor interface
557
+ // From MatFormFieldControl interface
557
558
  this.id = `gio-form-tags-input-${GioFormTagsInputComponent.nextId++}`;
558
559
  this._placeholder = '';
559
- // From ControlValueAccessor interface
560
+ // From MatFormFieldControl interface
560
561
  this.focused = false;
561
562
  this._required = false;
562
563
  this._disabled = false;
563
- this.displayValueCache = {};
564
- // From ControlValueAccessor interface
564
+ // From MatFormFieldControl interface
565
565
  this.describedBy = '';
566
566
  // Replace the provider from above with this.
567
567
  if (this.ngControl != null) {
@@ -599,7 +599,7 @@ class GioFormTagsInputComponent {
599
599
  this._tagInput = v;
600
600
  this.initAutocomplete();
601
601
  }
602
- // From ControlValueAccessor interface
602
+ // From MatFormFieldControl interface
603
603
  get value() {
604
604
  return this._value;
605
605
  }
@@ -608,7 +608,7 @@ class GioFormTagsInputComponent {
608
608
  this._onChange(_tags);
609
609
  this.stateChanges.next();
610
610
  }
611
- // From ControlValueAccessor interface
611
+ // From MatFormFieldControl interface
612
612
  get placeholder() {
613
613
  return this._placeholder;
614
614
  }
@@ -616,16 +616,16 @@ class GioFormTagsInputComponent {
616
616
  this._placeholder = plh;
617
617
  this.stateChanges.next();
618
618
  }
619
- // From ControlValueAccessor interface
619
+ // From MatFormFieldControl interface
620
620
  get empty() {
621
621
  var _a, _b;
622
622
  return isEmpty(this.value) && isEmpty((_b = (_a = this._tagInput) === null || _a === void 0 ? void 0 : _a.nativeElement) === null || _b === void 0 ? void 0 : _b.value);
623
623
  }
624
- // From ControlValueAccessor interface
624
+ // From MatFormFieldControl interface
625
625
  get shouldLabelFloat() {
626
626
  return this.focused || !this.empty;
627
627
  }
628
- // From ControlValueAccessor interface
628
+ // From MatFormFieldControl interface
629
629
  get required() {
630
630
  return this._required;
631
631
  }
@@ -633,7 +633,7 @@ class GioFormTagsInputComponent {
633
633
  this._required = coerceBooleanProperty(req);
634
634
  this.stateChanges.next();
635
635
  }
636
- // From ControlValueAccessor interface
636
+ // From MatFormFieldControl interface
637
637
  get disabled() {
638
638
  return this._disabled || (this.ngControl && this.ngControl.disabled === true);
639
639
  }
@@ -641,7 +641,7 @@ class GioFormTagsInputComponent {
641
641
  this._disabled = coerceBooleanProperty(dis);
642
642
  this.stateChanges.next();
643
643
  }
644
- // From ControlValueAccessor interface
644
+ // From MatFormFieldControl interface
645
645
  get errorState() {
646
646
  return (this.touched &&
647
647
  // if required check if is empty
@@ -660,6 +660,10 @@ class GioFormTagsInputComponent {
660
660
  this.stateChanges.complete();
661
661
  this.fm.stopMonitoring(this.elRef.nativeElement);
662
662
  }
663
+ // From ControlValueAccess interface
664
+ setDisabledState(isDisabled) {
665
+ this.disabled = isDisabled;
666
+ }
663
667
  // From ControlValueAccessor interface
664
668
  writeValue(value) {
665
669
  this._value = value;
@@ -675,7 +679,7 @@ class GioFormTagsInputComponent {
675
679
  setDescribedByIds(ids) {
676
680
  this.describedBy = ids.join(' ');
677
681
  }
678
- // From ControlValueAccessor interface
682
+ // From MatFormFieldControl interface
679
683
  // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
680
684
  onContainerClick(_event) { }
681
685
  addChipToFormControl(event) {
@@ -746,7 +750,7 @@ GioFormTagsInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
746
750
  provide: MatFormFieldControl,
747
751
  useExisting: GioFormTagsInputComponent,
748
752
  },
749
- ], viewQueries: [{ propertyName: "tagInput", first: true, predicate: ["tagInput"], descendants: true }], ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<mat-chip-list #tagChipList [attr.aria-label]=\"ariaLabel\" multiple [disabled]=\"disabled\">\n <mat-chip *ngFor=\"let tag of value\" [selectable]=\"false\" [removable]=\"!disabled\" (removed)=\"removeChipToFormControl(tag)\">\n {{ _displayValueWith ? (_displayValueWith(tag) | async) : tag }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n <input\n *ngIf=\"!disabled\"\n #tagInput\n [matAutocompleteDisabled]=\"!_autocompleteOptions\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\"\n [matChipInputFor]=\"tagChipList\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"onMatChipTokenEnd()\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onAutocompleteSelect($event)\">\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions$ | async\" [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n </mat-autocomplete>\n</mat-chip-list>\n", styles: [""], components: [{ type: i3$2.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i2$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3$2.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i3$2.MatChipRemove, selector: "[matChipRemove]" }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i3$2.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }], pipes: { "async": i2.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
753
+ ], viewQueries: [{ propertyName: "tagInput", first: true, predicate: ["tagInput"], descendants: true }], ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<mat-chip-list #tagChipList [attr.aria-label]=\"ariaLabel\" multiple [disabled]=\"disabled\">\n <mat-chip\n *ngFor=\"let tag of value\"\n [selectable]=\"false\"\n [removable]=\"!disabled\"\n (removed)=\"removeChipToFormControl(tag)\"\n [disabled]=\"disabled\"\n >\n {{ _displayValueWith ? (_displayValueWith(tag) | async) : tag }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n <input\n *ngIf=\"!disabled\"\n #tagInput\n [matAutocompleteDisabled]=\"!_autocompleteOptions || disabled\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\"\n [matChipInputFor]=\"tagChipList\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"onMatChipTokenEnd()\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onAutocompleteSelect($event)\">\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions$ | async\" [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n </mat-autocomplete>\n</mat-chip-list>\n", styles: [""], components: [{ type: i3$2.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i2$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3$2.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i3$2.MatChipRemove, selector: "[matChipRemove]" }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i3$2.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }], pipes: { "async": i2.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
750
754
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioFormTagsInputComponent, decorators: [{
751
755
  type: Component,
752
756
  args: [{ selector: 'gio-form-tags-input', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
@@ -754,7 +758,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
754
758
  provide: MatFormFieldControl,
755
759
  useExisting: GioFormTagsInputComponent,
756
760
  },
757
- ], template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<mat-chip-list #tagChipList [attr.aria-label]=\"ariaLabel\" multiple [disabled]=\"disabled\">\n <mat-chip *ngFor=\"let tag of value\" [selectable]=\"false\" [removable]=\"!disabled\" (removed)=\"removeChipToFormControl(tag)\">\n {{ _displayValueWith ? (_displayValueWith(tag) | async) : tag }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n <input\n *ngIf=\"!disabled\"\n #tagInput\n [matAutocompleteDisabled]=\"!_autocompleteOptions\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\"\n [matChipInputFor]=\"tagChipList\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"onMatChipTokenEnd()\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onAutocompleteSelect($event)\">\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions$ | async\" [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n </mat-autocomplete>\n</mat-chip-list>\n", styles: [""] }]
761
+ ], template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<mat-chip-list #tagChipList [attr.aria-label]=\"ariaLabel\" multiple [disabled]=\"disabled\">\n <mat-chip\n *ngFor=\"let tag of value\"\n [selectable]=\"false\"\n [removable]=\"!disabled\"\n (removed)=\"removeChipToFormControl(tag)\"\n [disabled]=\"disabled\"\n >\n {{ _displayValueWith ? (_displayValueWith(tag) | async) : tag }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n <input\n *ngIf=\"!disabled\"\n #tagInput\n [matAutocompleteDisabled]=\"!_autocompleteOptions || disabled\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\"\n [matChipInputFor]=\"tagChipList\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"onMatChipTokenEnd()\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onAutocompleteSelect($event)\">\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions$ | async\" [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n </mat-autocomplete>\n</mat-chip-list>\n", styles: [""] }]
758
762
  }], ctorParameters: function () {
759
763
  return [{ type: i7.NgControl, decorators: [{
760
764
  type: Optional
@@ -839,6 +843,7 @@ class GioFormTagsInputHarness extends ComponentHarness {
839
843
  constructor() {
840
844
  super(...arguments);
841
845
  this.getMatChipListHarness = this.locatorFor(MatChipListHarness);
846
+ this.getMatChipsHarness = this.locatorForAll(MatChipHarness);
842
847
  }
843
848
  /**
844
849
  * Gets a `HarnessPredicate` that can be used to search for a `GioFormColorInputHarness` that meets
@@ -853,7 +858,10 @@ class GioFormTagsInputHarness extends ComponentHarness {
853
858
  isDisabled() {
854
859
  return __awaiter(this, void 0, void 0, function* () {
855
860
  const matChipList = yield this.getMatChipListHarness();
856
- return matChipList.isDisabled();
861
+ const matChips = yield this.getMatChipsHarness();
862
+ const chipListDisabled = yield matChipList.isDisabled();
863
+ const chipsDisabled = yield parallel(() => matChips.map((matChip) => __awaiter(this, void 0, void 0, function* () { return yield matChip.isDisabled(); })));
864
+ return chipListDisabled && chipsDisabled.every(chipDisabled => chipDisabled);
857
865
  });
858
866
  }
859
867
  getTags() {