ngx-vector-components 4.41.0 → 4.41.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.41.1] (19/10/2022)
4
+
5
+ ### Bugfix
6
+
7
+ - Adding search action in `SELECT-BUTTON` filter
8
+
3
9
  ## [4.41.0] (15/10/2022)
4
10
 
5
11
  ### Feature
@@ -181,10 +181,10 @@ export class FiltersComponent {
181
181
  }
182
182
  }
183
183
  FiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: FiltersComponent, deps: [{ token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
184
- FiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: FiltersComponent, selector: "vector-filters", inputs: { fields: "fields" }, outputs: { onSearch: "onSearch", formBuilded: "formBuilded" }, ngImport: i0, template: "<div class=\"grid filter-container\" [ngClass]=\"{ 'display-none': hideFilters }\" [formGroup]=\"formGroup\">\r\n <div *ngFor=\"let field of fields | notHidden\" class=\"field col-12 sm:col-8 {{ getGridClass(field) }}\">\r\n <label>{{ field.label }}</label>\r\n <vector-text-field\r\n *ngIf=\"isTextFieldType(field)\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [mask]=\"field.mask\"\r\n [label]=\"field.placeholder\"\r\n [isRequired]=\"field.required\"\r\n [numeric]=\"field.type === fieldTypes.NUMBER\"\r\n ></vector-text-field>\r\n <vector-dropdown-field\r\n *ngIf=\"[fieldTypes.DYNAMIC_DROPDOWN, fieldTypes.DROPDOWN].includes(field.type)\"\r\n [dynamicFilters]=\"field.filterTypes\"\r\n [options]=\"field.options || []\"\r\n [service]=\"field.service\"\r\n [isRequired]=\"field.required\"\r\n [minLengthToService]=\"field.minLengthToService || 0\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [paged]=\"false\"\r\n [dependencies]=\"getFieldDependencies(field)\"\r\n [initialLoad]=\"!!field.defaultValue\"\r\n ></vector-dropdown-field>\r\n <vector-currency-field\r\n *ngIf=\"field.type === fieldTypes.CURRENCY\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [outlined]=\"true\"\r\n ></vector-currency-field>\r\n <vector-calendar-field\r\n *ngIf=\"field.type === fieldTypes.DATE\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n <vector-select-button-field\r\n *ngIf=\"field.type === fieldTypes.SELECT_BUTTON\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options\"\r\n >\r\n </vector-select-button-field>\r\n <div *ngIf=\"field.type === fieldTypes.DATE_RANGE\" class=\"range-date-container\">\r\n <vector-calendar-field\r\n [control]=\"formGroup.get(field.name + '.startDate')\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n At\u00E9\r\n <vector-calendar-field\r\n [control]=\"formGroup.get(field.name + '.endDate')\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n </div>\r\n <vector-multiselect-field\r\n *ngIf=\"field.type === fieldTypes.MULTISELECT\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options || []\"\r\n >\r\n </vector-multiselect-field>\r\n </div>\r\n <div class=\"search-button sm:col-4\">\r\n <vector-button\r\n label=\"Pesquisar\"\r\n (click)=\"search()\"\r\n [disabled]=\"!formGroup.valid\"\r\n style=\"float: right; width: 150px\"\r\n ></vector-button>\r\n </div>\r\n</div>\r\n", styles: [".filter-container{align-items:center}.filter-container .field{display:flex;flex-direction:column}.filter-container .search-button{flex:1;padding-right:7px}@media (min-width: 768px){.filter-container .search-button{padding-top:36px}}.filter-container .range-date-container{display:flex;align-items:center;gap:10px}.display-none{display:none!important}\n"], components: [{ type: i2.TextFieldComponent, selector: "vector-text-field", inputs: ["isRequired", "label", "maxlength", "isPassword", "numeric", "decimal", "onlyText", "alphaNumeric", "mask", "autoClear", "rightIcon", "centered", "enableDocumentTypeChoice", "hiddenErrorMessage", "control"], outputs: ["blurEvent", "enterKeyPress", "focusEvent", "onDocumentTypeChange"] }, { type: i3.DropdownFieldComponent, selector: "vector-dropdown-field", inputs: ["options", "isRequired", "control", "label", "service", "paged", "buttonAction", "dependencies", "hiddenErrorMessage", "dynamicFilters", "minLengthToService", "initialLoad"], outputs: ["onFocus", "onChange"] }, { type: i4.CurrencyFieldComponent, selector: "vector-currency-field", inputs: ["minValue", "maxValue", "placeholder", "numberOfDecimals", "control", "outlined", "rounded", "label", "isBankingField", "inputClassName", "disabled"] }, { type: i5.CalendarComponent, selector: "vector-calendar-field", inputs: ["isRequired", "control", "label", "showCalendarOnFocus", "min", "max", "disabledDates", "disabled", "defaultDate", "hiddenErrorMessage"] }, { type: i6.SelectButtonFieldComponent, selector: "vector-select-button-field", inputs: ["options", "control"] }, { type: i7.MultiselectFieldComponent, selector: "vector-multiselect-field", inputs: ["isRequired", "control", "label", "options"], outputs: ["onChange"] }, { type: i8.ButtonComponent, selector: "vector-button", inputs: ["disabled", "label", "type", "leftIcon", "rightIcon", "noShadow", "style"], outputs: ["onClick"] }], directives: [{ type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "notHidden": i11.NotHiddenPipe } });
184
+ FiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: FiltersComponent, selector: "vector-filters", inputs: { fields: "fields" }, outputs: { onSearch: "onSearch", formBuilded: "formBuilded" }, ngImport: i0, template: "<div class=\"grid filter-container\" [ngClass]=\"{ 'display-none': hideFilters }\" [formGroup]=\"formGroup\">\r\n <div *ngFor=\"let field of fields | notHidden\" class=\"field col-12 sm:col-8 {{ getGridClass(field) }}\">\r\n <label>{{ field.label }}</label>\r\n <vector-text-field\r\n *ngIf=\"isTextFieldType(field)\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [mask]=\"field.mask\"\r\n [label]=\"field.placeholder\"\r\n [isRequired]=\"field.required\"\r\n [numeric]=\"field.type === fieldTypes.NUMBER\"\r\n ></vector-text-field>\r\n <vector-dropdown-field\r\n *ngIf=\"[fieldTypes.DYNAMIC_DROPDOWN, fieldTypes.DROPDOWN].includes(field.type)\"\r\n [dynamicFilters]=\"field.filterTypes\"\r\n [options]=\"field.options || []\"\r\n [service]=\"field.service\"\r\n [isRequired]=\"field.required\"\r\n [minLengthToService]=\"field.minLengthToService || 0\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [paged]=\"false\"\r\n [dependencies]=\"getFieldDependencies(field)\"\r\n [initialLoad]=\"!!field.defaultValue\"\r\n ></vector-dropdown-field>\r\n <vector-currency-field\r\n *ngIf=\"field.type === fieldTypes.CURRENCY\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [outlined]=\"true\"\r\n ></vector-currency-field>\r\n <vector-calendar-field\r\n *ngIf=\"field.type === fieldTypes.DATE\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n <vector-select-button-field\r\n *ngIf=\"field.type === fieldTypes.SELECT_BUTTON\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options\"\r\n (click)=\"search()\"\r\n >\r\n </vector-select-button-field>\r\n <div *ngIf=\"field.type === fieldTypes.DATE_RANGE\" class=\"range-date-container\">\r\n <vector-calendar-field\r\n [control]=\"formGroup.get(field.name + '.startDate')\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n At\u00E9\r\n <vector-calendar-field\r\n [control]=\"formGroup.get(field.name + '.endDate')\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n </div>\r\n <vector-multiselect-field\r\n *ngIf=\"field.type === fieldTypes.MULTISELECT\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options || []\"\r\n >\r\n </vector-multiselect-field>\r\n </div>\r\n <div class=\"search-button sm:col-4\">\r\n <vector-button\r\n label=\"Pesquisar\"\r\n (click)=\"search()\"\r\n [disabled]=\"!formGroup.valid\"\r\n style=\"float: right; width: 150px\"\r\n ></vector-button>\r\n </div>\r\n</div>\r\n", styles: [".filter-container{align-items:center}.filter-container .field{display:flex;flex-direction:column}.filter-container .search-button{flex:1;padding-right:7px}@media (min-width: 768px){.filter-container .search-button{padding-top:36px}}.filter-container .range-date-container{display:flex;align-items:center;gap:10px}.display-none{display:none!important}\n"], components: [{ type: i2.TextFieldComponent, selector: "vector-text-field", inputs: ["isRequired", "label", "maxlength", "isPassword", "numeric", "decimal", "onlyText", "alphaNumeric", "mask", "autoClear", "rightIcon", "centered", "enableDocumentTypeChoice", "hiddenErrorMessage", "control"], outputs: ["blurEvent", "enterKeyPress", "focusEvent", "onDocumentTypeChange"] }, { type: i3.DropdownFieldComponent, selector: "vector-dropdown-field", inputs: ["options", "isRequired", "control", "label", "service", "paged", "buttonAction", "dependencies", "hiddenErrorMessage", "dynamicFilters", "minLengthToService", "initialLoad"], outputs: ["onFocus", "onChange"] }, { type: i4.CurrencyFieldComponent, selector: "vector-currency-field", inputs: ["minValue", "maxValue", "placeholder", "numberOfDecimals", "control", "outlined", "rounded", "label", "isBankingField", "inputClassName", "disabled"] }, { type: i5.CalendarComponent, selector: "vector-calendar-field", inputs: ["isRequired", "control", "label", "showCalendarOnFocus", "min", "max", "disabledDates", "disabled", "defaultDate", "hiddenErrorMessage"] }, { type: i6.SelectButtonFieldComponent, selector: "vector-select-button-field", inputs: ["options", "control"] }, { type: i7.MultiselectFieldComponent, selector: "vector-multiselect-field", inputs: ["isRequired", "control", "label", "options"], outputs: ["onChange"] }, { type: i8.ButtonComponent, selector: "vector-button", inputs: ["disabled", "label", "type", "leftIcon", "rightIcon", "noShadow", "style"], outputs: ["onClick"] }], directives: [{ type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "notHidden": i11.NotHiddenPipe } });
185
185
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: FiltersComponent, decorators: [{
186
186
  type: Component,
187
- args: [{ selector: 'vector-filters', template: "<div class=\"grid filter-container\" [ngClass]=\"{ 'display-none': hideFilters }\" [formGroup]=\"formGroup\">\r\n <div *ngFor=\"let field of fields | notHidden\" class=\"field col-12 sm:col-8 {{ getGridClass(field) }}\">\r\n <label>{{ field.label }}</label>\r\n <vector-text-field\r\n *ngIf=\"isTextFieldType(field)\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [mask]=\"field.mask\"\r\n [label]=\"field.placeholder\"\r\n [isRequired]=\"field.required\"\r\n [numeric]=\"field.type === fieldTypes.NUMBER\"\r\n ></vector-text-field>\r\n <vector-dropdown-field\r\n *ngIf=\"[fieldTypes.DYNAMIC_DROPDOWN, fieldTypes.DROPDOWN].includes(field.type)\"\r\n [dynamicFilters]=\"field.filterTypes\"\r\n [options]=\"field.options || []\"\r\n [service]=\"field.service\"\r\n [isRequired]=\"field.required\"\r\n [minLengthToService]=\"field.minLengthToService || 0\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [paged]=\"false\"\r\n [dependencies]=\"getFieldDependencies(field)\"\r\n [initialLoad]=\"!!field.defaultValue\"\r\n ></vector-dropdown-field>\r\n <vector-currency-field\r\n *ngIf=\"field.type === fieldTypes.CURRENCY\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [outlined]=\"true\"\r\n ></vector-currency-field>\r\n <vector-calendar-field\r\n *ngIf=\"field.type === fieldTypes.DATE\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n <vector-select-button-field\r\n *ngIf=\"field.type === fieldTypes.SELECT_BUTTON\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options\"\r\n >\r\n </vector-select-button-field>\r\n <div *ngIf=\"field.type === fieldTypes.DATE_RANGE\" class=\"range-date-container\">\r\n <vector-calendar-field\r\n [control]=\"formGroup.get(field.name + '.startDate')\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n At\u00E9\r\n <vector-calendar-field\r\n [control]=\"formGroup.get(field.name + '.endDate')\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n </div>\r\n <vector-multiselect-field\r\n *ngIf=\"field.type === fieldTypes.MULTISELECT\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options || []\"\r\n >\r\n </vector-multiselect-field>\r\n </div>\r\n <div class=\"search-button sm:col-4\">\r\n <vector-button\r\n label=\"Pesquisar\"\r\n (click)=\"search()\"\r\n [disabled]=\"!formGroup.valid\"\r\n style=\"float: right; width: 150px\"\r\n ></vector-button>\r\n </div>\r\n</div>\r\n", styles: [".filter-container{align-items:center}.filter-container .field{display:flex;flex-direction:column}.filter-container .search-button{flex:1;padding-right:7px}@media (min-width: 768px){.filter-container .search-button{padding-top:36px}}.filter-container .range-date-container{display:flex;align-items:center;gap:10px}.display-none{display:none!important}\n"] }]
187
+ args: [{ selector: 'vector-filters', template: "<div class=\"grid filter-container\" [ngClass]=\"{ 'display-none': hideFilters }\" [formGroup]=\"formGroup\">\r\n <div *ngFor=\"let field of fields | notHidden\" class=\"field col-12 sm:col-8 {{ getGridClass(field) }}\">\r\n <label>{{ field.label }}</label>\r\n <vector-text-field\r\n *ngIf=\"isTextFieldType(field)\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [mask]=\"field.mask\"\r\n [label]=\"field.placeholder\"\r\n [isRequired]=\"field.required\"\r\n [numeric]=\"field.type === fieldTypes.NUMBER\"\r\n ></vector-text-field>\r\n <vector-dropdown-field\r\n *ngIf=\"[fieldTypes.DYNAMIC_DROPDOWN, fieldTypes.DROPDOWN].includes(field.type)\"\r\n [dynamicFilters]=\"field.filterTypes\"\r\n [options]=\"field.options || []\"\r\n [service]=\"field.service\"\r\n [isRequired]=\"field.required\"\r\n [minLengthToService]=\"field.minLengthToService || 0\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [paged]=\"false\"\r\n [dependencies]=\"getFieldDependencies(field)\"\r\n [initialLoad]=\"!!field.defaultValue\"\r\n ></vector-dropdown-field>\r\n <vector-currency-field\r\n *ngIf=\"field.type === fieldTypes.CURRENCY\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [outlined]=\"true\"\r\n ></vector-currency-field>\r\n <vector-calendar-field\r\n *ngIf=\"field.type === fieldTypes.DATE\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n <vector-select-button-field\r\n *ngIf=\"field.type === fieldTypes.SELECT_BUTTON\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options\"\r\n (click)=\"search()\"\r\n >\r\n </vector-select-button-field>\r\n <div *ngIf=\"field.type === fieldTypes.DATE_RANGE\" class=\"range-date-container\">\r\n <vector-calendar-field\r\n [control]=\"formGroup.get(field.name + '.startDate')\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n At\u00E9\r\n <vector-calendar-field\r\n [control]=\"formGroup.get(field.name + '.endDate')\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n </div>\r\n <vector-multiselect-field\r\n *ngIf=\"field.type === fieldTypes.MULTISELECT\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options || []\"\r\n >\r\n </vector-multiselect-field>\r\n </div>\r\n <div class=\"search-button sm:col-4\">\r\n <vector-button\r\n label=\"Pesquisar\"\r\n (click)=\"search()\"\r\n [disabled]=\"!formGroup.valid\"\r\n style=\"float: right; width: 150px\"\r\n ></vector-button>\r\n </div>\r\n</div>\r\n", styles: [".filter-container{align-items:center}.filter-container .field{display:flex;flex-direction:column}.filter-container .search-button{flex:1;padding-right:7px}@media (min-width: 768px){.filter-container .search-button{padding-top:36px}}.filter-container .range-date-container{display:flex;align-items:center;gap:10px}.display-none{display:none!important}\n"] }]
188
188
  }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }]; }, propDecorators: { fields: [{
189
189
  type: Input
190
190
  }], onSearch: [{
@@ -192,4 +192,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
192
192
  }], formBuilded: [{
193
193
  type: Output
194
194
  }] } });
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmVjdG9yLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpZWxkcy9maWx0ZXJzL2ZpbHRlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZlY3Rvci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9maWVsZHMvZmlsdGVycy9maWx0ZXJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFlLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQUU1RCxNQUFNLENBQU4sSUFBWSxTQVVYO0FBVkQsV0FBWSxTQUFTO0lBQ25CLGlEQUFRLENBQUE7SUFDUix5Q0FBSSxDQUFBO0lBQ0oseUNBQUksQ0FBQTtJQUNKLDZDQUFNLENBQUE7SUFDTixpREFBUSxDQUFBO0lBQ1IsaUVBQWdCLENBQUE7SUFDaEIsMkRBQWEsQ0FBQTtJQUNiLHFEQUFVLENBQUE7SUFDVix1REFBVyxDQUFBO0FBQ2IsQ0FBQyxFQVZXLFNBQVMsS0FBVCxTQUFTLFFBVXBCO0FBNkJELE1BQU0sT0FBTyxnQkFBZ0I7SUEyRTNCLFlBQW9CLGNBQThCO1FBQTlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWpCM0MsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFbkMsZ0JBQVcsR0FB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QyxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQ25CLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUN4RDtRQUNELElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNiLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM1QztRQUNELElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNiLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM1QztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7OzZHQW5MVSxnQkFBZ0I7aUdBQWhCLGdCQUFnQixtSkMvQzdCLGcwRkFxRUE7MkZEdEJhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxnQkFBZ0I7cUdBTWYsTUFBTTtzQkFEaEIsS0FBSztnQkF5REMsUUFBUTtzQkFEZCxNQUFNO2dCQUdBLFdBQVc7c0JBRGpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQmFzZURyb3Bkb3duIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBPYmplY3RVdGlsLCBWYWxpZGF0aW9uVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcclxuXHJcbmV4cG9ydCBlbnVtIEZpZWxkVHlwZSB7XHJcbiAgRFJPUERPV04sXHJcbiAgVEVYVCxcclxuICBEQVRFLFxyXG4gIE5VTUJFUixcclxuICBDVVJSRU5DWSxcclxuICBEWU5BTUlDX0RST1BET1dOLFxyXG4gIFNFTEVDVF9CVVRUT04sXHJcbiAgREFURV9SQU5HRSxcclxuICBNVUxUSVNFTEVDVCxcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRmlsdGVyRmllbGQgPSB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHR5cGU6IEZpZWxkVHlwZTtcclxuICBtaW5MZW5ndGg/OiBudW1iZXI7XHJcbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xyXG4gIG1pbj86IG51bWJlcjtcclxuICBtYXg/OiBudW1iZXI7XHJcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xyXG4gIHJlYWRvbmx5PzogYm9vbGVhbjtcclxuICBsYWJlbD86IHN0cmluZztcclxuICBtYXNrPzogc3RyaW5nO1xyXG4gIG9wdGlvbnM/OiBMaXN0SXRlbVtdO1xyXG4gIGZpbHRlclR5cGVzPzogTGlzdEl0ZW1bXTtcclxuICBzZXJ2aWNlPzogQmFzZURyb3Bkb3duO1xyXG4gIGRlZmF1bHRWYWx1ZT86IGFueTtcclxuICBwbGFjZWhvbGRlcj86IHN0cmluZztcclxuICBoaWRkZW4/OiBib29sZWFuO1xyXG4gIGRlcGVuZGVuY2llcz86IHN0cmluZ1tdO1xyXG4gIHNpemU/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnIHwgJ2xhcmdlc3QnIHwgJ2Z1bGwnO1xyXG4gIG1pbkxlbmd0aFRvU2VydmljZT86IG51bWJlcjtcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndmVjdG9yLWZpbHRlcnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXJzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXJzLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBmaWVsZHMoX2ZpZWxkczogRmlsdGVyRmllbGRbXSkge1xyXG4gICAgdGhpcy5fZmllbGRzID0gX2ZpZWxkcztcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gICAgdGhpcy5maWVsZHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZmllbGRzU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cclxuICAgIHRoaXMuZmllbGRzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gRmllbGRUeXBlLkRBVEVfUkFOR0UpIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgZmllbGQubmFtZSxcclxuICAgICAgICAgIG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICBzdGFydERhdGU6IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiBmaWVsZC5kZWZhdWx0VmFsdWU/LnN0YXJ0RGF0ZSwgZGlzYWJsZWQ6IGZpZWxkLnJlYWRvbmx5IH0sIFtcclxuICAgICAgICAgICAgICAuLi50aGlzLmJ1aWxkVmFsaWRhdG9ycyhmaWVsZCksXHJcbiAgICAgICAgICAgICAgVmFsaWRhdGlvblV0aWwubG93ZXJUaGFuT3JFcXVhbFRvKCdlbmREYXRlJyksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICBlbmREYXRlOiBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogZmllbGQuZGVmYXVsdFZhbHVlPy5lbmREYXRlLCBkaXNhYmxlZDogZmllbGQucmVhZG9ubHkgfSwgW1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMuYnVpbGRWYWxpZGF0b3JzKGZpZWxkKSxcclxuICAgICAgICAgICAgICBWYWxpZGF0aW9uVXRpbC5ncmVhdGVyVGhhbk9yRXF1YWxUbygnc3RhcnREYXRlJyksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBmaWVsZC5uYW1lLFxyXG4gICAgICAgICAgbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IGZpZWxkLmRlZmF1bHRWYWx1ZSwgZGlzYWJsZWQ6IGZpZWxkLnJlYWRvbmx5IH0sIHRoaXMuYnVpbGRWYWxpZGF0b3JzKGZpZWxkKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZpZWxkc1xyXG4gICAgICA/LmZpbHRlcigoZmllbGQpID0+IGZpZWxkLmRlcGVuZGVuY2llcylcclxuICAgICAgLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgZmllbGQuZGVwZW5kZW5jaWVzPy5mb3JFYWNoKChkZXBlbmRlbmN5KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkc1N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChkZXBlbmRlbmN5KT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LnJlc2V0KCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnBhdGNoRm9ybUZyb21RdWVyeVBhcmFtcyh7IC4uLnRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2ZpZWxkcz8ubGVuZ3RoICYmIHRoaXMuZm9ybUdyb3VwLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvcm1CdWlsZGVkLmVtaXQoKTtcclxuXHJcbiAgICB0aGlzLmZpZWxkc1N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChxdWVyeVBhcmFtcykgPT4ge1xyXG4gICAgICAgIHRoaXMucGF0Y2hGb3JtRnJvbVF1ZXJ5UGFyYW1zKHsgLi4ucXVlcnlQYXJhbXMgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgb25TZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZm9ybUJ1aWxkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIHB1YmxpYyBnZXQgZmllbGRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWVsZFR5cGVzID0gRmllbGRUeXBlO1xyXG4gIHB1YmxpYyBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBwcml2YXRlIF9maWVsZHM6IEZpbHRlckZpZWxkW10gPSBbXTtcclxuICBwcml2YXRlIGZpZWxkc1N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgZ2V0IGhpZGVGaWx0ZXJzKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmZpZWxkcz8uZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5oaWRkZW4pLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5maWVsZHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWFyY2goKSB7XHJcbiAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcclxuICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSB0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgICBPYmplY3Qua2V5cyhmaWx0ZXJWYWx1ZSkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKGZpbHRlclZhbHVlW2tleV0/Lmhhc093blByb3BlcnR5KCdjb2RlJykpIHtcclxuICAgICAgICAgIGZpbHRlclZhbHVlW2tleV0gPSBmaWx0ZXJWYWx1ZVtrZXldLmNvZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc1ZhbGlkKGZpbHRlclZhbHVlW2tleV0pKSB7XHJcbiAgICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSB0aGlzLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQubmFtZSA9PT0ga2V5KT8udHlwZSB8fCBGaWVsZFR5cGUuVEVYVDtcclxuICAgICAgICAgIGZpbHRlclZhbHVlW2tleV0gPSBbRmllbGRUeXBlLkRST1BET1dOLCBGaWVsZFR5cGUuTlVNQkVSXS5pbmNsdWRlcyhmaWVsZFR5cGUpID8gLTEgOiAnJztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLm9uU2VhcmNoLmVtaXQoZmlsdGVyVmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzVGV4dEZpZWxkVHlwZShmaWVsZDogRmlsdGVyRmllbGQpIHtcclxuICAgIHJldHVybiBbRmllbGRUeXBlLlRFWFQsIEZpZWxkVHlwZS5OVU1CRVJdLmluY2x1ZGVzKGZpZWxkLnR5cGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZpZWxkRGVwZW5kZW5jaWVzKGZpZWxkOiBGaWx0ZXJGaWVsZCkge1xyXG4gICAgaWYgKCFmaWVsZC5kZXBlbmRlbmNpZXMpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHJldHVybiBmaWVsZC5kZXBlbmRlbmNpZXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XHJcbiAgICAgIGxldCBkZXBWYWx1ZTogYW55ID0gdGhpcy5mb3JtR3JvdXAuZ2V0KGN1cnIpPy52YWx1ZT8uY29kZTtcclxuICAgICAgaWYgKCFPYmplY3RVdGlsLmlzVmFsaWQoZGVwVmFsdWUpKSB7XHJcbiAgICAgICAgZGVwVmFsdWUgPSAtMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLnByZXYsXHJcbiAgICAgICAgW2N1cnJdOiBkZXBWYWx1ZSxcclxuICAgICAgfTtcclxuICAgIH0sIHt9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRHcmlkQ2xhc3MoZmllbGQ6IEZpbHRlckZpZWxkKSB7XHJcbiAgICBzd2l0Y2ggKGZpZWxkLnNpemUpIHtcclxuICAgICAgY2FzZSAnc21hbGwnOlxyXG4gICAgICAgIHJldHVybiAnbWQ6Y29sLTEnO1xyXG4gICAgICBjYXNlICdtZWRpdW0nOlxyXG4gICAgICAgIHJldHVybiAnbWQ6Y29sLTMnO1xyXG4gICAgICBjYXNlICdsYXJnZSc6XHJcbiAgICAgICAgcmV0dXJuICdtZDpjb2wtNCc7XHJcbiAgICAgIGNhc2UgJ2xhcmdlc3QnOlxyXG4gICAgICAgIHJldHVybiAnbWQ6Y29sLTgnO1xyXG4gICAgICBjYXNlICdmdWxsJzpcclxuICAgICAgICByZXR1cm4gJ21kOmNvbC0xMic7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICdtZDpjb2wtNCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhdGNoRm9ybUZyb21RdWVyeVBhcmFtcyhxdWVyeVBhcmFtczogYW55KSB7XHJcbiAgICBpZiAoT2JqZWN0LmtleXMocXVlcnlQYXJhbXMpLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgIGlmIChxdWVyeVBhcmFtcy5oYXNPd25Qcm9wZXJ0eShmaWVsZC5uYW1lKSkge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXNbZmllbGQubmFtZV0gPSBxdWVyeVBhcmFtc1tmaWVsZC5uYW1lXVxyXG4gICAgICAgICAgICAgID8gSlNPTi5wYXJzZShxdWVyeVBhcmFtc1tmaWVsZC5uYW1lXSlcclxuICAgICAgICAgICAgICA6IHF1ZXJ5UGFyYW1zW2ZpZWxkLm5hbWVdO1xyXG4gICAgICAgICAgfSBjYXRjaCAoXykge31cclxuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSBGaWVsZFR5cGUuREFURV9SQU5HRSkge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtc1tmaWVsZC5uYW1lXSA9IHtcclxuICAgICAgICAgICAgICBzdGFydERhdGU6IHF1ZXJ5UGFyYW1zW2ZpZWxkLm5hbWVdLnN0YXJ0RGF0ZSA/IG5ldyBEYXRlKHF1ZXJ5UGFyYW1zW2ZpZWxkLm5hbWVdLnN0YXJ0RGF0ZSkgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgZW5kRGF0ZTogcXVlcnlQYXJhbXNbZmllbGQubmFtZV0uZW5kRGF0ZSA/IG5ldyBEYXRlKHF1ZXJ5UGFyYW1zW2ZpZWxkLm5hbWVdLmVuZERhdGUpIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEZpZWxkVHlwZS5EQVRFKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zW2ZpZWxkLm5hbWVdID0gcXVlcnlQYXJhbXNbZmllbGQubmFtZV0gPyBuZXcgRGF0ZShxdWVyeVBhcmFtc1tmaWVsZC5uYW1lXSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShxdWVyeVBhcmFtcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkVmFsaWRhdG9ycyhmaWVsZDogRmlsdGVyRmllbGQpOiBWYWxpZGF0b3JGbltdIHtcclxuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBbXTtcclxuICAgIGlmIChmaWVsZC5yZXF1aXJlZCkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcbiAgICBpZiAoZmllbGQubWluTGVuZ3RoKSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aChmaWVsZC5taW5MZW5ndGgpKTtcclxuICAgIH1cclxuICAgIGlmIChmaWVsZC5tYXhMZW5ndGgpIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKGZpZWxkLm1heExlbmd0aCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGZpZWxkLm1pbikge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW4oZmllbGQubWluKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoZmllbGQubWF4KSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heChmaWVsZC5tYXgpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZGF0b3JzO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZ3JpZCBmaWx0ZXItY29udGFpbmVyXCIgW25nQ2xhc3NdPVwieyAnZGlzcGxheS1ub25lJzogaGlkZUZpbHRlcnMgfVwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XHJcbiAgPGRpdiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGRzIHwgbm90SGlkZGVuXCIgY2xhc3M9XCJmaWVsZCBjb2wtMTIgc206Y29sLTgge3sgZ2V0R3JpZENsYXNzKGZpZWxkKSB9fVwiPlxyXG4gICAgPGxhYmVsPnt7IGZpZWxkLmxhYmVsIH19PC9sYWJlbD5cclxuICAgIDx2ZWN0b3ItdGV4dC1maWVsZFxyXG4gICAgICAqbmdJZj1cImlzVGV4dEZpZWxkVHlwZShmaWVsZClcIlxyXG4gICAgICBbY29udHJvbF09XCJmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpXCJcclxuICAgICAgW21hc2tdPVwiZmllbGQubWFza1wiXHJcbiAgICAgIFtsYWJlbF09XCJmaWVsZC5wbGFjZWhvbGRlclwiXHJcbiAgICAgIFtpc1JlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCJcclxuICAgICAgW251bWVyaWNdPVwiZmllbGQudHlwZSA9PT0gZmllbGRUeXBlcy5OVU1CRVJcIlxyXG4gICAgPjwvdmVjdG9yLXRleHQtZmllbGQ+XHJcbiAgICA8dmVjdG9yLWRyb3Bkb3duLWZpZWxkXHJcbiAgICAgICpuZ0lmPVwiW2ZpZWxkVHlwZXMuRFlOQU1JQ19EUk9QRE9XTiwgZmllbGRUeXBlcy5EUk9QRE9XTl0uaW5jbHVkZXMoZmllbGQudHlwZSlcIlxyXG4gICAgICBbZHluYW1pY0ZpbHRlcnNdPVwiZmllbGQuZmlsdGVyVHlwZXNcIlxyXG4gICAgICBbb3B0aW9uc109XCJmaWVsZC5vcHRpb25zIHx8IFtdXCJcclxuICAgICAgW3NlcnZpY2VdPVwiZmllbGQuc2VydmljZVwiXHJcbiAgICAgIFtpc1JlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCJcclxuICAgICAgW21pbkxlbmd0aFRvU2VydmljZV09XCJmaWVsZC5taW5MZW5ndGhUb1NlcnZpY2UgfHwgMFwiXHJcbiAgICAgIFtjb250cm9sXT1cImZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSlcIlxyXG4gICAgICBbcGFnZWRdPVwiZmFsc2VcIlxyXG4gICAgICBbZGVwZW5kZW5jaWVzXT1cImdldEZpZWxkRGVwZW5kZW5jaWVzKGZpZWxkKVwiXHJcbiAgICAgIFtpbml0aWFsTG9hZF09XCIhIWZpZWxkLmRlZmF1bHRWYWx1ZVwiXHJcbiAgICA+PC92ZWN0b3ItZHJvcGRvd24tZmllbGQ+XHJcbiAgICA8dmVjdG9yLWN1cnJlbmN5LWZpZWxkXHJcbiAgICAgICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gZmllbGRUeXBlcy5DVVJSRU5DWVwiXHJcbiAgICAgIFtjb250cm9sXT1cImZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSlcIlxyXG4gICAgICBbb3V0bGluZWRdPVwidHJ1ZVwiXHJcbiAgICA+PC92ZWN0b3ItY3VycmVuY3ktZmllbGQ+XHJcbiAgICA8dmVjdG9yLWNhbGVuZGFyLWZpZWxkXHJcbiAgICAgICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gZmllbGRUeXBlcy5EQVRFXCJcclxuICAgICAgW2NvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKVwiXHJcbiAgICAgIFtpc1JlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCJcclxuICAgICAgW2xhYmVsXT1cImZpZWxkLnBsYWNlaG9sZGVyIHx8ICcnXCJcclxuICAgID48L3ZlY3Rvci1jYWxlbmRhci1maWVsZD5cclxuICAgIDx2ZWN0b3Itc2VsZWN0LWJ1dHRvbi1maWVsZFxyXG4gICAgICAqbmdJZj1cImZpZWxkLnR5cGUgPT09IGZpZWxkVHlwZXMuU0VMRUNUX0JVVFRPTlwiXHJcbiAgICAgIFtjb250cm9sXT1cImZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSlcIlxyXG4gICAgICBbb3B0aW9uc109XCJmaWVsZC5vcHRpb25zXCJcclxuICAgID5cclxuICAgIDwvdmVjdG9yLXNlbGVjdC1idXR0b24tZmllbGQ+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gZmllbGRUeXBlcy5EQVRFX1JBTkdFXCIgY2xhc3M9XCJyYW5nZS1kYXRlLWNvbnRhaW5lclwiPlxyXG4gICAgICA8dmVjdG9yLWNhbGVuZGFyLWZpZWxkXHJcbiAgICAgICAgW2NvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lICsgJy5zdGFydERhdGUnKVwiXHJcbiAgICAgICAgW2lzUmVxdWlyZWRdPVwiZmllbGQucmVxdWlyZWRcIlxyXG4gICAgICAgIFtsYWJlbF09XCJmaWVsZC5wbGFjZWhvbGRlciB8fCAnJ1wiXHJcbiAgICAgID48L3ZlY3Rvci1jYWxlbmRhci1maWVsZD5cclxuICAgICAgQXTDqVxyXG4gICAgICA8dmVjdG9yLWNhbGVuZGFyLWZpZWxkXHJcbiAgICAgICAgW2NvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lICsgJy5lbmREYXRlJylcIlxyXG4gICAgICAgIFtpc1JlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCJcclxuICAgICAgICBbbGFiZWxdPVwiZmllbGQucGxhY2Vob2xkZXIgfHwgJydcIlxyXG4gICAgICA+PC92ZWN0b3ItY2FsZW5kYXItZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDx2ZWN0b3ItbXVsdGlzZWxlY3QtZmllbGRcclxuICAgICAgKm5nSWY9XCJmaWVsZC50eXBlID09PSBmaWVsZFR5cGVzLk1VTFRJU0VMRUNUXCJcclxuICAgICAgW2NvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKVwiXHJcbiAgICAgIFtvcHRpb25zXT1cImZpZWxkLm9wdGlvbnMgfHwgW11cIlxyXG4gICAgPlxyXG4gICAgPC92ZWN0b3ItbXVsdGlzZWxlY3QtZmllbGQ+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInNlYXJjaC1idXR0b24gc206Y29sLTRcIj5cclxuICAgIDx2ZWN0b3ItYnV0dG9uXHJcbiAgICAgIGxhYmVsPVwiUGVzcXVpc2FyXCJcclxuICAgICAgKGNsaWNrKT1cInNlYXJjaCgpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIiFmb3JtR3JvdXAudmFsaWRcIlxyXG4gICAgICBzdHlsZT1cImZsb2F0OiByaWdodDsgd2lkdGg6IDE1MHB4XCJcclxuICAgID48L3ZlY3Rvci1idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmVjdG9yLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpZWxkcy9maWx0ZXJzL2ZpbHRlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZlY3Rvci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9maWVsZHMvZmlsdGVycy9maWx0ZXJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFlLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQUU1RCxNQUFNLENBQU4sSUFBWSxTQVVYO0FBVkQsV0FBWSxTQUFTO0lBQ25CLGlEQUFRLENBQUE7SUFDUix5Q0FBSSxDQUFBO0lBQ0oseUNBQUksQ0FBQTtJQUNKLDZDQUFNLENBQUE7SUFDTixpREFBUSxDQUFBO0lBQ1IsaUVBQWdCLENBQUE7SUFDaEIsMkRBQWEsQ0FBQTtJQUNiLHFEQUFVLENBQUE7SUFDVix1REFBVyxDQUFBO0FBQ2IsQ0FBQyxFQVZXLFNBQVMsS0FBVCxTQUFTLFFBVXBCO0FBNkJELE1BQU0sT0FBTyxnQkFBZ0I7SUEyRTNCLFlBQW9CLGNBQThCO1FBQTlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWpCM0MsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFbkMsZ0JBQVcsR0FB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QyxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQ25CLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUN4RDtRQUNELElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNiLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM1QztRQUNELElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNiLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM1QztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7OzZHQW5MVSxnQkFBZ0I7aUdBQWhCLGdCQUFnQixtSkMvQzdCLDgxRkFzRUE7MkZEdkJhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxnQkFBZ0I7cUdBTWYsTUFBTTtzQkFEaEIsS0FBSztnQkF5REMsUUFBUTtzQkFEZCxNQUFNO2dCQUdBLFdBQVc7c0JBRGpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQmFzZURyb3Bkb3duIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBPYmplY3RVdGlsLCBWYWxpZGF0aW9uVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcclxuXHJcbmV4cG9ydCBlbnVtIEZpZWxkVHlwZSB7XHJcbiAgRFJPUERPV04sXHJcbiAgVEVYVCxcclxuICBEQVRFLFxyXG4gIE5VTUJFUixcclxuICBDVVJSRU5DWSxcclxuICBEWU5BTUlDX0RST1BET1dOLFxyXG4gIFNFTEVDVF9CVVRUT04sXHJcbiAgREFURV9SQU5HRSxcclxuICBNVUxUSVNFTEVDVCxcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRmlsdGVyRmllbGQgPSB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHR5cGU6IEZpZWxkVHlwZTtcclxuICBtaW5MZW5ndGg/OiBudW1iZXI7XHJcbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xyXG4gIG1pbj86IG51bWJlcjtcclxuICBtYXg/OiBudW1iZXI7XHJcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xyXG4gIHJlYWRvbmx5PzogYm9vbGVhbjtcclxuICBsYWJlbD86IHN0cmluZztcclxuICBtYXNrPzogc3RyaW5nO1xyXG4gIG9wdGlvbnM/OiBMaXN0SXRlbVtdO1xyXG4gIGZpbHRlclR5cGVzPzogTGlzdEl0ZW1bXTtcclxuICBzZXJ2aWNlPzogQmFzZURyb3Bkb3duO1xyXG4gIGRlZmF1bHRWYWx1ZT86IGFueTtcclxuICBwbGFjZWhvbGRlcj86IHN0cmluZztcclxuICBoaWRkZW4/OiBib29sZWFuO1xyXG4gIGRlcGVuZGVuY2llcz86IHN0cmluZ1tdO1xyXG4gIHNpemU/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnIHwgJ2xhcmdlc3QnIHwgJ2Z1bGwnO1xyXG4gIG1pbkxlbmd0aFRvU2VydmljZT86IG51bWJlcjtcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndmVjdG9yLWZpbHRlcnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXJzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXJzLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBmaWVsZHMoX2ZpZWxkczogRmlsdGVyRmllbGRbXSkge1xyXG4gICAgdGhpcy5fZmllbGRzID0gX2ZpZWxkcztcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gICAgdGhpcy5maWVsZHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZmllbGRzU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cclxuICAgIHRoaXMuZmllbGRzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gRmllbGRUeXBlLkRBVEVfUkFOR0UpIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgZmllbGQubmFtZSxcclxuICAgICAgICAgIG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICBzdGFydERhdGU6IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiBmaWVsZC5kZWZhdWx0VmFsdWU/LnN0YXJ0RGF0ZSwgZGlzYWJsZWQ6IGZpZWxkLnJlYWRvbmx5IH0sIFtcclxuICAgICAgICAgICAgICAuLi50aGlzLmJ1aWxkVmFsaWRhdG9ycyhmaWVsZCksXHJcbiAgICAgICAgICAgICAgVmFsaWRhdGlvblV0aWwubG93ZXJUaGFuT3JFcXVhbFRvKCdlbmREYXRlJyksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICBlbmREYXRlOiBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogZmllbGQuZGVmYXVsdFZhbHVlPy5lbmREYXRlLCBkaXNhYmxlZDogZmllbGQucmVhZG9ubHkgfSwgW1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMuYnVpbGRWYWxpZGF0b3JzKGZpZWxkKSxcclxuICAgICAgICAgICAgICBWYWxpZGF0aW9uVXRpbC5ncmVhdGVyVGhhbk9yRXF1YWxUbygnc3RhcnREYXRlJyksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgICBmaWVsZC5uYW1lLFxyXG4gICAgICAgICAgbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IGZpZWxkLmRlZmF1bHRWYWx1ZSwgZGlzYWJsZWQ6IGZpZWxkLnJlYWRvbmx5IH0sIHRoaXMuYnVpbGRWYWxpZGF0b3JzKGZpZWxkKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZpZWxkc1xyXG4gICAgICA/LmZpbHRlcigoZmllbGQpID0+IGZpZWxkLmRlcGVuZGVuY2llcylcclxuICAgICAgLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgZmllbGQuZGVwZW5kZW5jaWVzPy5mb3JFYWNoKChkZXBlbmRlbmN5KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkc1N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChkZXBlbmRlbmN5KT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LnJlc2V0KCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnBhdGNoRm9ybUZyb21RdWVyeVBhcmFtcyh7IC4uLnRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2ZpZWxkcz8ubGVuZ3RoICYmIHRoaXMuZm9ybUdyb3VwLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvcm1CdWlsZGVkLmVtaXQoKTtcclxuXHJcbiAgICB0aGlzLmZpZWxkc1N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChxdWVyeVBhcmFtcykgPT4ge1xyXG4gICAgICAgIHRoaXMucGF0Y2hGb3JtRnJvbVF1ZXJ5UGFyYW1zKHsgLi4ucXVlcnlQYXJhbXMgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgb25TZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZm9ybUJ1aWxkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIHB1YmxpYyBnZXQgZmllbGRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWVsZFR5cGVzID0gRmllbGRUeXBlO1xyXG4gIHB1YmxpYyBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBwcml2YXRlIF9maWVsZHM6IEZpbHRlckZpZWxkW10gPSBbXTtcclxuICBwcml2YXRlIGZpZWxkc1N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgZ2V0IGhpZGVGaWx0ZXJzKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmZpZWxkcz8uZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5oaWRkZW4pLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5maWVsZHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWFyY2goKSB7XHJcbiAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcclxuICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSB0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgICBPYmplY3Qua2V5cyhmaWx0ZXJWYWx1ZSkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKGZpbHRlclZhbHVlW2tleV0/Lmhhc093blByb3BlcnR5KCdjb2RlJykpIHtcclxuICAgICAgICAgIGZpbHRlclZhbHVlW2tleV0gPSBmaWx0ZXJWYWx1ZVtrZXldLmNvZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc1ZhbGlkKGZpbHRlclZhbHVlW2tleV0pKSB7XHJcbiAgICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSB0aGlzLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQubmFtZSA9PT0ga2V5KT8udHlwZSB8fCBGaWVsZFR5cGUuVEVYVDtcclxuICAgICAgICAgIGZpbHRlclZhbHVlW2tleV0gPSBbRmllbGRUeXBlLkRST1BET1dOLCBGaWVsZFR5cGUuTlVNQkVSXS5pbmNsdWRlcyhmaWVsZFR5cGUpID8gLTEgOiAnJztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLm9uU2VhcmNoLmVtaXQoZmlsdGVyVmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzVGV4dEZpZWxkVHlwZShmaWVsZDogRmlsdGVyRmllbGQpIHtcclxuICAgIHJldHVybiBbRmllbGRUeXBlLlRFWFQsIEZpZWxkVHlwZS5OVU1CRVJdLmluY2x1ZGVzKGZpZWxkLnR5cGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZpZWxkRGVwZW5kZW5jaWVzKGZpZWxkOiBGaWx0ZXJGaWVsZCkge1xyXG4gICAgaWYgKCFmaWVsZC5kZXBlbmRlbmNpZXMpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHJldHVybiBmaWVsZC5kZXBlbmRlbmNpZXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XHJcbiAgICAgIGxldCBkZXBWYWx1ZTogYW55ID0gdGhpcy5mb3JtR3JvdXAuZ2V0KGN1cnIpPy52YWx1ZT8uY29kZTtcclxuICAgICAgaWYgKCFPYmplY3RVdGlsLmlzVmFsaWQoZGVwVmFsdWUpKSB7XHJcbiAgICAgICAgZGVwVmFsdWUgPSAtMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLnByZXYsXHJcbiAgICAgICAgW2N1cnJdOiBkZXBWYWx1ZSxcclxuICAgICAgfTtcclxuICAgIH0sIHt9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRHcmlkQ2xhc3MoZmllbGQ6IEZpbHRlckZpZWxkKSB7XHJcbiAgICBzd2l0Y2ggKGZpZWxkLnNpemUpIHtcclxuICAgICAgY2FzZSAnc21hbGwnOlxyXG4gICAgICAgIHJldHVybiAnbWQ6Y29sLTEnO1xyXG4gICAgICBjYXNlICdtZWRpdW0nOlxyXG4gICAgICAgIHJldHVybiAnbWQ6Y29sLTMnO1xyXG4gICAgICBjYXNlICdsYXJnZSc6XHJcbiAgICAgICAgcmV0dXJuICdtZDpjb2wtNCc7XHJcbiAgICAgIGNhc2UgJ2xhcmdlc3QnOlxyXG4gICAgICAgIHJldHVybiAnbWQ6Y29sLTgnO1xyXG4gICAgICBjYXNlICdmdWxsJzpcclxuICAgICAgICByZXR1cm4gJ21kOmNvbC0xMic7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICdtZDpjb2wtNCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhdGNoRm9ybUZyb21RdWVyeVBhcmFtcyhxdWVyeVBhcmFtczogYW55KSB7XHJcbiAgICBpZiAoT2JqZWN0LmtleXMocXVlcnlQYXJhbXMpLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgIGlmIChxdWVyeVBhcmFtcy5oYXNPd25Qcm9wZXJ0eShmaWVsZC5uYW1lKSkge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXNbZmllbGQubmFtZV0gPSBxdWVyeVBhcmFtc1tmaWVsZC5uYW1lXVxyXG4gICAgICAgICAgICAgID8gSlNPTi5wYXJzZShxdWVyeVBhcmFtc1tmaWVsZC5uYW1lXSlcclxuICAgICAgICAgICAgICA6IHF1ZXJ5UGFyYW1zW2ZpZWxkLm5hbWVdO1xyXG4gICAgICAgICAgfSBjYXRjaCAoXykge31cclxuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSBGaWVsZFR5cGUuREFURV9SQU5HRSkge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtc1tmaWVsZC5uYW1lXSA9IHtcclxuICAgICAgICAgICAgICBzdGFydERhdGU6IHF1ZXJ5UGFyYW1zW2ZpZWxkLm5hbWVdLnN0YXJ0RGF0ZSA/IG5ldyBEYXRlKHF1ZXJ5UGFyYW1zW2ZpZWxkLm5hbWVdLnN0YXJ0RGF0ZSkgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgZW5kRGF0ZTogcXVlcnlQYXJhbXNbZmllbGQubmFtZV0uZW5kRGF0ZSA/IG5ldyBEYXRlKHF1ZXJ5UGFyYW1zW2ZpZWxkLm5hbWVdLmVuZERhdGUpIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEZpZWxkVHlwZS5EQVRFKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zW2ZpZWxkLm5hbWVdID0gcXVlcnlQYXJhbXNbZmllbGQubmFtZV0gPyBuZXcgRGF0ZShxdWVyeVBhcmFtc1tmaWVsZC5uYW1lXSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShxdWVyeVBhcmFtcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkVmFsaWRhdG9ycyhmaWVsZDogRmlsdGVyRmllbGQpOiBWYWxpZGF0b3JGbltdIHtcclxuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBbXTtcclxuICAgIGlmIChmaWVsZC5yZXF1aXJlZCkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcbiAgICBpZiAoZmllbGQubWluTGVuZ3RoKSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aChmaWVsZC5taW5MZW5ndGgpKTtcclxuICAgIH1cclxuICAgIGlmIChmaWVsZC5tYXhMZW5ndGgpIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKGZpZWxkLm1heExlbmd0aCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGZpZWxkLm1pbikge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW4oZmllbGQubWluKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoZmllbGQubWF4KSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heChmaWVsZC5tYXgpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZGF0b3JzO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZ3JpZCBmaWx0ZXItY29udGFpbmVyXCIgW25nQ2xhc3NdPVwieyAnZGlzcGxheS1ub25lJzogaGlkZUZpbHRlcnMgfVwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XHJcbiAgPGRpdiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGRzIHwgbm90SGlkZGVuXCIgY2xhc3M9XCJmaWVsZCBjb2wtMTIgc206Y29sLTgge3sgZ2V0R3JpZENsYXNzKGZpZWxkKSB9fVwiPlxyXG4gICAgPGxhYmVsPnt7IGZpZWxkLmxhYmVsIH19PC9sYWJlbD5cclxuICAgIDx2ZWN0b3ItdGV4dC1maWVsZFxyXG4gICAgICAqbmdJZj1cImlzVGV4dEZpZWxkVHlwZShmaWVsZClcIlxyXG4gICAgICBbY29udHJvbF09XCJmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpXCJcclxuICAgICAgW21hc2tdPVwiZmllbGQubWFza1wiXHJcbiAgICAgIFtsYWJlbF09XCJmaWVsZC5wbGFjZWhvbGRlclwiXHJcbiAgICAgIFtpc1JlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCJcclxuICAgICAgW251bWVyaWNdPVwiZmllbGQudHlwZSA9PT0gZmllbGRUeXBlcy5OVU1CRVJcIlxyXG4gICAgPjwvdmVjdG9yLXRleHQtZmllbGQ+XHJcbiAgICA8dmVjdG9yLWRyb3Bkb3duLWZpZWxkXHJcbiAgICAgICpuZ0lmPVwiW2ZpZWxkVHlwZXMuRFlOQU1JQ19EUk9QRE9XTiwgZmllbGRUeXBlcy5EUk9QRE9XTl0uaW5jbHVkZXMoZmllbGQudHlwZSlcIlxyXG4gICAgICBbZHluYW1pY0ZpbHRlcnNdPVwiZmllbGQuZmlsdGVyVHlwZXNcIlxyXG4gICAgICBbb3B0aW9uc109XCJmaWVsZC5vcHRpb25zIHx8IFtdXCJcclxuICAgICAgW3NlcnZpY2VdPVwiZmllbGQuc2VydmljZVwiXHJcbiAgICAgIFtpc1JlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCJcclxuICAgICAgW21pbkxlbmd0aFRvU2VydmljZV09XCJmaWVsZC5taW5MZW5ndGhUb1NlcnZpY2UgfHwgMFwiXHJcbiAgICAgIFtjb250cm9sXT1cImZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSlcIlxyXG4gICAgICBbcGFnZWRdPVwiZmFsc2VcIlxyXG4gICAgICBbZGVwZW5kZW5jaWVzXT1cImdldEZpZWxkRGVwZW5kZW5jaWVzKGZpZWxkKVwiXHJcbiAgICAgIFtpbml0aWFsTG9hZF09XCIhIWZpZWxkLmRlZmF1bHRWYWx1ZVwiXHJcbiAgICA+PC92ZWN0b3ItZHJvcGRvd24tZmllbGQ+XHJcbiAgICA8dmVjdG9yLWN1cnJlbmN5LWZpZWxkXHJcbiAgICAgICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gZmllbGRUeXBlcy5DVVJSRU5DWVwiXHJcbiAgICAgIFtjb250cm9sXT1cImZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSlcIlxyXG4gICAgICBbb3V0bGluZWRdPVwidHJ1ZVwiXHJcbiAgICA+PC92ZWN0b3ItY3VycmVuY3ktZmllbGQ+XHJcbiAgICA8dmVjdG9yLWNhbGVuZGFyLWZpZWxkXHJcbiAgICAgICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gZmllbGRUeXBlcy5EQVRFXCJcclxuICAgICAgW2NvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKVwiXHJcbiAgICAgIFtpc1JlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCJcclxuICAgICAgW2xhYmVsXT1cImZpZWxkLnBsYWNlaG9sZGVyIHx8ICcnXCJcclxuICAgID48L3ZlY3Rvci1jYWxlbmRhci1maWVsZD5cclxuICAgIDx2ZWN0b3Itc2VsZWN0LWJ1dHRvbi1maWVsZFxyXG4gICAgICAqbmdJZj1cImZpZWxkLnR5cGUgPT09IGZpZWxkVHlwZXMuU0VMRUNUX0JVVFRPTlwiXHJcbiAgICAgIFtjb250cm9sXT1cImZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSlcIlxyXG4gICAgICBbb3B0aW9uc109XCJmaWVsZC5vcHRpb25zXCJcclxuICAgICAgKGNsaWNrKT1cInNlYXJjaCgpXCJcclxuICAgID5cclxuICAgIDwvdmVjdG9yLXNlbGVjdC1idXR0b24tZmllbGQ+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gZmllbGRUeXBlcy5EQVRFX1JBTkdFXCIgY2xhc3M9XCJyYW5nZS1kYXRlLWNvbnRhaW5lclwiPlxyXG4gICAgICA8dmVjdG9yLWNhbGVuZGFyLWZpZWxkXHJcbiAgICAgICAgW2NvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lICsgJy5zdGFydERhdGUnKVwiXHJcbiAgICAgICAgW2lzUmVxdWlyZWRdPVwiZmllbGQucmVxdWlyZWRcIlxyXG4gICAgICAgIFtsYWJlbF09XCJmaWVsZC5wbGFjZWhvbGRlciB8fCAnJ1wiXHJcbiAgICAgID48L3ZlY3Rvci1jYWxlbmRhci1maWVsZD5cclxuICAgICAgQXTDqVxyXG4gICAgICA8dmVjdG9yLWNhbGVuZGFyLWZpZWxkXHJcbiAgICAgICAgW2NvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lICsgJy5lbmREYXRlJylcIlxyXG4gICAgICAgIFtpc1JlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCJcclxuICAgICAgICBbbGFiZWxdPVwiZmllbGQucGxhY2Vob2xkZXIgfHwgJydcIlxyXG4gICAgICA+PC92ZWN0b3ItY2FsZW5kYXItZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDx2ZWN0b3ItbXVsdGlzZWxlY3QtZmllbGRcclxuICAgICAgKm5nSWY9XCJmaWVsZC50eXBlID09PSBmaWVsZFR5cGVzLk1VTFRJU0VMRUNUXCJcclxuICAgICAgW2NvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKVwiXHJcbiAgICAgIFtvcHRpb25zXT1cImZpZWxkLm9wdGlvbnMgfHwgW11cIlxyXG4gICAgPlxyXG4gICAgPC92ZWN0b3ItbXVsdGlzZWxlY3QtZmllbGQ+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInNlYXJjaC1idXR0b24gc206Y29sLTRcIj5cclxuICAgIDx2ZWN0b3ItYnV0dG9uXHJcbiAgICAgIGxhYmVsPVwiUGVzcXVpc2FyXCJcclxuICAgICAgKGNsaWNrKT1cInNlYXJjaCgpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIiFmb3JtR3JvdXAudmFsaWRcIlxyXG4gICAgICBzdHlsZT1cImZsb2F0OiByaWdodDsgd2lkdGg6IDE1MHB4XCJcclxuICAgID48L3ZlY3Rvci1idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -2540,10 +2540,10 @@ class FiltersComponent {
2540
2540
  }
2541
2541
  }
2542
2542
  FiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: FiltersComponent, deps: [{ token: i2$1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
2543
- FiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: FiltersComponent, selector: "vector-filters", inputs: { fields: "fields" }, outputs: { onSearch: "onSearch", formBuilded: "formBuilded" }, ngImport: i0, template: "<div class=\"grid filter-container\" [ngClass]=\"{ 'display-none': hideFilters }\" [formGroup]=\"formGroup\">\r\n <div *ngFor=\"let field of fields | notHidden\" class=\"field col-12 sm:col-8 {{ getGridClass(field) }}\">\r\n <label>{{ field.label }}</label>\r\n <vector-text-field\r\n *ngIf=\"isTextFieldType(field)\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [mask]=\"field.mask\"\r\n [label]=\"field.placeholder\"\r\n [isRequired]=\"field.required\"\r\n [numeric]=\"field.type === fieldTypes.NUMBER\"\r\n ></vector-text-field>\r\n <vector-dropdown-field\r\n *ngIf=\"[fieldTypes.DYNAMIC_DROPDOWN, fieldTypes.DROPDOWN].includes(field.type)\"\r\n [dynamicFilters]=\"field.filterTypes\"\r\n [options]=\"field.options || []\"\r\n [service]=\"field.service\"\r\n [isRequired]=\"field.required\"\r\n [minLengthToService]=\"field.minLengthToService || 0\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [paged]=\"false\"\r\n [dependencies]=\"getFieldDependencies(field)\"\r\n [initialLoad]=\"!!field.defaultValue\"\r\n ></vector-dropdown-field>\r\n <vector-currency-field\r\n *ngIf=\"field.type === fieldTypes.CURRENCY\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [outlined]=\"true\"\r\n ></vector-currency-field>\r\n <vector-calendar-field\r\n *ngIf=\"field.type === fieldTypes.DATE\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n <vector-select-button-field\r\n *ngIf=\"field.type === fieldTypes.SELECT_BUTTON\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options\"\r\n >\r\n </vector-select-button-field>\r\n <div *ngIf=\"field.type === fieldTypes.DATE_RANGE\" class=\"range-date-container\">\r\n <vector-calendar-field\r\n [control]=\"formGroup.get(field.name + '.startDate')\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n At\u00E9\r\n <vector-calendar-field\r\n [control]=\"formGroup.get(field.name + '.endDate')\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n </div>\r\n <vector-multiselect-field\r\n *ngIf=\"field.type === fieldTypes.MULTISELECT\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options || []\"\r\n >\r\n </vector-multiselect-field>\r\n </div>\r\n <div class=\"search-button sm:col-4\">\r\n <vector-button\r\n label=\"Pesquisar\"\r\n (click)=\"search()\"\r\n [disabled]=\"!formGroup.valid\"\r\n style=\"float: right; width: 150px\"\r\n ></vector-button>\r\n </div>\r\n</div>\r\n", styles: [".filter-container{align-items:center}.filter-container .field{display:flex;flex-direction:column}.filter-container .search-button{flex:1;padding-right:7px}@media (min-width: 768px){.filter-container .search-button{padding-top:36px}}.filter-container .range-date-container{display:flex;align-items:center;gap:10px}.display-none{display:none!important}\n"], components: [{ type: TextFieldComponent, selector: "vector-text-field", inputs: ["isRequired", "label", "maxlength", "isPassword", "numeric", "decimal", "onlyText", "alphaNumeric", "mask", "autoClear", "rightIcon", "centered", "enableDocumentTypeChoice", "hiddenErrorMessage", "control"], outputs: ["blurEvent", "enterKeyPress", "focusEvent", "onDocumentTypeChange"] }, { type: DropdownFieldComponent, selector: "vector-dropdown-field", inputs: ["options", "isRequired", "control", "label", "service", "paged", "buttonAction", "dependencies", "hiddenErrorMessage", "dynamicFilters", "minLengthToService", "initialLoad"], outputs: ["onFocus", "onChange"] }, { type: CurrencyFieldComponent, selector: "vector-currency-field", inputs: ["minValue", "maxValue", "placeholder", "numberOfDecimals", "control", "outlined", "rounded", "label", "isBankingField", "inputClassName", "disabled"] }, { type: CalendarComponent, selector: "vector-calendar-field", inputs: ["isRequired", "control", "label", "showCalendarOnFocus", "min", "max", "disabledDates", "disabled", "defaultDate", "hiddenErrorMessage"] }, { type: SelectButtonFieldComponent, selector: "vector-select-button-field", inputs: ["options", "control"] }, { type: MultiselectFieldComponent, selector: "vector-multiselect-field", inputs: ["isRequired", "control", "label", "options"], outputs: ["onChange"] }, { type: ButtonComponent, selector: "vector-button", inputs: ["disabled", "label", "type", "leftIcon", "rightIcon", "noShadow", "style"], outputs: ["onClick"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "notHidden": NotHiddenPipe } });
2543
+ FiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: FiltersComponent, selector: "vector-filters", inputs: { fields: "fields" }, outputs: { onSearch: "onSearch", formBuilded: "formBuilded" }, ngImport: i0, template: "<div class=\"grid filter-container\" [ngClass]=\"{ 'display-none': hideFilters }\" [formGroup]=\"formGroup\">\r\n <div *ngFor=\"let field of fields | notHidden\" class=\"field col-12 sm:col-8 {{ getGridClass(field) }}\">\r\n <label>{{ field.label }}</label>\r\n <vector-text-field\r\n *ngIf=\"isTextFieldType(field)\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [mask]=\"field.mask\"\r\n [label]=\"field.placeholder\"\r\n [isRequired]=\"field.required\"\r\n [numeric]=\"field.type === fieldTypes.NUMBER\"\r\n ></vector-text-field>\r\n <vector-dropdown-field\r\n *ngIf=\"[fieldTypes.DYNAMIC_DROPDOWN, fieldTypes.DROPDOWN].includes(field.type)\"\r\n [dynamicFilters]=\"field.filterTypes\"\r\n [options]=\"field.options || []\"\r\n [service]=\"field.service\"\r\n [isRequired]=\"field.required\"\r\n [minLengthToService]=\"field.minLengthToService || 0\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [paged]=\"false\"\r\n [dependencies]=\"getFieldDependencies(field)\"\r\n [initialLoad]=\"!!field.defaultValue\"\r\n ></vector-dropdown-field>\r\n <vector-currency-field\r\n *ngIf=\"field.type === fieldTypes.CURRENCY\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [outlined]=\"true\"\r\n ></vector-currency-field>\r\n <vector-calendar-field\r\n *ngIf=\"field.type === fieldTypes.DATE\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n <vector-select-button-field\r\n *ngIf=\"field.type === fieldTypes.SELECT_BUTTON\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options\"\r\n (click)=\"search()\"\r\n >\r\n </vector-select-button-field>\r\n <div *ngIf=\"field.type === fieldTypes.DATE_RANGE\" class=\"range-date-container\">\r\n <vector-calendar-field\r\n [control]=\"formGroup.get(field.name + '.startDate')\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n At\u00E9\r\n <vector-calendar-field\r\n [control]=\"formGroup.get(field.name + '.endDate')\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n </div>\r\n <vector-multiselect-field\r\n *ngIf=\"field.type === fieldTypes.MULTISELECT\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options || []\"\r\n >\r\n </vector-multiselect-field>\r\n </div>\r\n <div class=\"search-button sm:col-4\">\r\n <vector-button\r\n label=\"Pesquisar\"\r\n (click)=\"search()\"\r\n [disabled]=\"!formGroup.valid\"\r\n style=\"float: right; width: 150px\"\r\n ></vector-button>\r\n </div>\r\n</div>\r\n", styles: [".filter-container{align-items:center}.filter-container .field{display:flex;flex-direction:column}.filter-container .search-button{flex:1;padding-right:7px}@media (min-width: 768px){.filter-container .search-button{padding-top:36px}}.filter-container .range-date-container{display:flex;align-items:center;gap:10px}.display-none{display:none!important}\n"], components: [{ type: TextFieldComponent, selector: "vector-text-field", inputs: ["isRequired", "label", "maxlength", "isPassword", "numeric", "decimal", "onlyText", "alphaNumeric", "mask", "autoClear", "rightIcon", "centered", "enableDocumentTypeChoice", "hiddenErrorMessage", "control"], outputs: ["blurEvent", "enterKeyPress", "focusEvent", "onDocumentTypeChange"] }, { type: DropdownFieldComponent, selector: "vector-dropdown-field", inputs: ["options", "isRequired", "control", "label", "service", "paged", "buttonAction", "dependencies", "hiddenErrorMessage", "dynamicFilters", "minLengthToService", "initialLoad"], outputs: ["onFocus", "onChange"] }, { type: CurrencyFieldComponent, selector: "vector-currency-field", inputs: ["minValue", "maxValue", "placeholder", "numberOfDecimals", "control", "outlined", "rounded", "label", "isBankingField", "inputClassName", "disabled"] }, { type: CalendarComponent, selector: "vector-calendar-field", inputs: ["isRequired", "control", "label", "showCalendarOnFocus", "min", "max", "disabledDates", "disabled", "defaultDate", "hiddenErrorMessage"] }, { type: SelectButtonFieldComponent, selector: "vector-select-button-field", inputs: ["options", "control"] }, { type: MultiselectFieldComponent, selector: "vector-multiselect-field", inputs: ["isRequired", "control", "label", "options"], outputs: ["onChange"] }, { type: ButtonComponent, selector: "vector-button", inputs: ["disabled", "label", "type", "leftIcon", "rightIcon", "noShadow", "style"], outputs: ["onClick"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "notHidden": NotHiddenPipe } });
2544
2544
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: FiltersComponent, decorators: [{
2545
2545
  type: Component,
2546
- args: [{ selector: 'vector-filters', template: "<div class=\"grid filter-container\" [ngClass]=\"{ 'display-none': hideFilters }\" [formGroup]=\"formGroup\">\r\n <div *ngFor=\"let field of fields | notHidden\" class=\"field col-12 sm:col-8 {{ getGridClass(field) }}\">\r\n <label>{{ field.label }}</label>\r\n <vector-text-field\r\n *ngIf=\"isTextFieldType(field)\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [mask]=\"field.mask\"\r\n [label]=\"field.placeholder\"\r\n [isRequired]=\"field.required\"\r\n [numeric]=\"field.type === fieldTypes.NUMBER\"\r\n ></vector-text-field>\r\n <vector-dropdown-field\r\n *ngIf=\"[fieldTypes.DYNAMIC_DROPDOWN, fieldTypes.DROPDOWN].includes(field.type)\"\r\n [dynamicFilters]=\"field.filterTypes\"\r\n [options]=\"field.options || []\"\r\n [service]=\"field.service\"\r\n [isRequired]=\"field.required\"\r\n [minLengthToService]=\"field.minLengthToService || 0\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [paged]=\"false\"\r\n [dependencies]=\"getFieldDependencies(field)\"\r\n [initialLoad]=\"!!field.defaultValue\"\r\n ></vector-dropdown-field>\r\n <vector-currency-field\r\n *ngIf=\"field.type === fieldTypes.CURRENCY\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [outlined]=\"true\"\r\n ></vector-currency-field>\r\n <vector-calendar-field\r\n *ngIf=\"field.type === fieldTypes.DATE\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n <vector-select-button-field\r\n *ngIf=\"field.type === fieldTypes.SELECT_BUTTON\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options\"\r\n >\r\n </vector-select-button-field>\r\n <div *ngIf=\"field.type === fieldTypes.DATE_RANGE\" class=\"range-date-container\">\r\n <vector-calendar-field\r\n [control]=\"formGroup.get(field.name + '.startDate')\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n At\u00E9\r\n <vector-calendar-field\r\n [control]=\"formGroup.get(field.name + '.endDate')\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n </div>\r\n <vector-multiselect-field\r\n *ngIf=\"field.type === fieldTypes.MULTISELECT\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options || []\"\r\n >\r\n </vector-multiselect-field>\r\n </div>\r\n <div class=\"search-button sm:col-4\">\r\n <vector-button\r\n label=\"Pesquisar\"\r\n (click)=\"search()\"\r\n [disabled]=\"!formGroup.valid\"\r\n style=\"float: right; width: 150px\"\r\n ></vector-button>\r\n </div>\r\n</div>\r\n", styles: [".filter-container{align-items:center}.filter-container .field{display:flex;flex-direction:column}.filter-container .search-button{flex:1;padding-right:7px}@media (min-width: 768px){.filter-container .search-button{padding-top:36px}}.filter-container .range-date-container{display:flex;align-items:center;gap:10px}.display-none{display:none!important}\n"] }]
2546
+ args: [{ selector: 'vector-filters', template: "<div class=\"grid filter-container\" [ngClass]=\"{ 'display-none': hideFilters }\" [formGroup]=\"formGroup\">\r\n <div *ngFor=\"let field of fields | notHidden\" class=\"field col-12 sm:col-8 {{ getGridClass(field) }}\">\r\n <label>{{ field.label }}</label>\r\n <vector-text-field\r\n *ngIf=\"isTextFieldType(field)\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [mask]=\"field.mask\"\r\n [label]=\"field.placeholder\"\r\n [isRequired]=\"field.required\"\r\n [numeric]=\"field.type === fieldTypes.NUMBER\"\r\n ></vector-text-field>\r\n <vector-dropdown-field\r\n *ngIf=\"[fieldTypes.DYNAMIC_DROPDOWN, fieldTypes.DROPDOWN].includes(field.type)\"\r\n [dynamicFilters]=\"field.filterTypes\"\r\n [options]=\"field.options || []\"\r\n [service]=\"field.service\"\r\n [isRequired]=\"field.required\"\r\n [minLengthToService]=\"field.minLengthToService || 0\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [paged]=\"false\"\r\n [dependencies]=\"getFieldDependencies(field)\"\r\n [initialLoad]=\"!!field.defaultValue\"\r\n ></vector-dropdown-field>\r\n <vector-currency-field\r\n *ngIf=\"field.type === fieldTypes.CURRENCY\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [outlined]=\"true\"\r\n ></vector-currency-field>\r\n <vector-calendar-field\r\n *ngIf=\"field.type === fieldTypes.DATE\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n <vector-select-button-field\r\n *ngIf=\"field.type === fieldTypes.SELECT_BUTTON\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options\"\r\n (click)=\"search()\"\r\n >\r\n </vector-select-button-field>\r\n <div *ngIf=\"field.type === fieldTypes.DATE_RANGE\" class=\"range-date-container\">\r\n <vector-calendar-field\r\n [control]=\"formGroup.get(field.name + '.startDate')\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n At\u00E9\r\n <vector-calendar-field\r\n [control]=\"formGroup.get(field.name + '.endDate')\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n </div>\r\n <vector-multiselect-field\r\n *ngIf=\"field.type === fieldTypes.MULTISELECT\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options || []\"\r\n >\r\n </vector-multiselect-field>\r\n </div>\r\n <div class=\"search-button sm:col-4\">\r\n <vector-button\r\n label=\"Pesquisar\"\r\n (click)=\"search()\"\r\n [disabled]=\"!formGroup.valid\"\r\n style=\"float: right; width: 150px\"\r\n ></vector-button>\r\n </div>\r\n</div>\r\n", styles: [".filter-container{align-items:center}.filter-container .field{display:flex;flex-direction:column}.filter-container .search-button{flex:1;padding-right:7px}@media (min-width: 768px){.filter-container .search-button{padding-top:36px}}.filter-container .range-date-container{display:flex;align-items:center;gap:10px}.display-none{display:none!important}\n"] }]
2547
2547
  }], ctorParameters: function () { return [{ type: i2$1.ActivatedRoute }]; }, propDecorators: { fields: [{
2548
2548
  type: Input
2549
2549
  }], onSearch: [{