@saipos/angular-shared 1.29.0 → 1.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,16 +18,30 @@ export declare class SelectComponent implements ControlValueAccessor, AfterViewI
18
18
  loading: boolean;
19
19
  typeahead: Subject<string>;
20
20
  typeToSearchText: string;
21
+ showSelectedQuantity: boolean;
22
+ singularLabel?: string;
23
+ pluralLabel?: string;
21
24
  private ngSelect;
22
25
  headerTemplate: TemplateRef<unknown>;
23
26
  optionTemplate: TemplateRef<unknown>;
24
27
  control: FormControl;
25
28
  private _items;
29
+ private previousValues;
30
+ private lastUpdate;
26
31
  get hostClass(): boolean;
27
32
  set items(value: unknown[] | null);
28
33
  get items(): unknown[];
29
34
  constructor(autoFocus?: string | null | undefined);
30
35
  ngAfterViewInit(): void;
36
+ selectAll(emit?: boolean): void;
37
+ unselectAll(emit?: boolean): void;
38
+ verifyStateItens(): void;
39
+ updateSelectedQuantityText(): void;
40
+ isSearching: boolean;
41
+ onSearch(event: {
42
+ term: string;
43
+ }): void;
44
+ onClear(): void;
31
45
  onBlur(): void;
32
46
  private _onTouched;
33
47
  writeValue(value: unknown): void;
@@ -40,5 +54,5 @@ export declare class SelectComponent implements ControlValueAccessor, AfterViewI
40
54
  close(): void;
41
55
  toggle(): void;
42
56
  static ɵfac: i0.ɵɵFactoryDeclaration<SelectComponent, [{ attribute: "autofocus"; }]>;
43
- static ɵcmp: i0.ɵɵComponentDeclaration<SelectComponent, "saipos-select", never, { "bindLabel": "bindLabel"; "bindValue": "bindValue"; "placeholder": "placeholder"; "dropdownPosition": "dropdownPosition"; "clearable": "clearable"; "selectOnTab": "selectOnTab"; "searchable": "searchable"; "notFoundText": "notFoundText"; "appendTo": "appendTo"; "multiple": "multiple"; "showCheckbox": "showCheckbox"; "loading": "loading"; "typeahead": "typeahead"; "typeToSearchText": "typeToSearchText"; "items": "items"; }, {}, ["headerTemplate", "optionTemplate"], never>;
57
+ static ɵcmp: i0.ɵɵComponentDeclaration<SelectComponent, "saipos-select", never, { "bindLabel": "bindLabel"; "bindValue": "bindValue"; "placeholder": "placeholder"; "dropdownPosition": "dropdownPosition"; "clearable": "clearable"; "selectOnTab": "selectOnTab"; "searchable": "searchable"; "notFoundText": "notFoundText"; "appendTo": "appendTo"; "multiple": "multiple"; "showCheckbox": "showCheckbox"; "loading": "loading"; "typeahead": "typeahead"; "typeToSearchText": "typeToSearchText"; "showSelectedQuantity": "showSelectedQuantity"; "singularLabel": "singularLabel"; "pluralLabel": "pluralLabel"; "items": "items"; }, {}, ["headerTemplate", "optionTemplate"], never>;
44
58
  }
@@ -23,8 +23,12 @@ export class SelectComponent {
23
23
  this.loading = false;
24
24
  this.typeahead = new Subject();
25
25
  this.typeToSearchText = 'Digite algo para buscar';
26
+ this.showSelectedQuantity = false;
26
27
  this.control = new FormControl();
27
28
  this._items = [];
29
+ this.previousValues = [];
30
+ this.lastUpdate = {};
31
+ this.isSearching = false;
28
32
  }
29
33
  get hostClass() {
30
34
  return true;
@@ -39,10 +43,100 @@ export class SelectComponent {
39
43
  return this._items;
40
44
  }
41
45
  ngAfterViewInit() {
46
+ if (this.showSelectedQuantity) {
47
+ this.verifyStateItens();
48
+ }
49
+ if (this.multiple && this.showSelectedQuantity) {
50
+ void Promise.resolve().then(() => {
51
+ const allItem = {
52
+ value: -1,
53
+ label: `Todos ${this.pluralLabel || 'itens'}`,
54
+ };
55
+ this._items = [allItem, ...this._items];
56
+ this.selectAll();
57
+ this.previousValues = [...this.control.value];
58
+ });
59
+ }
42
60
  if (this.autoFocus !== null && this.autoFocus !== undefined) {
43
61
  this.focus();
44
62
  }
45
63
  }
64
+ selectAll(emit = true) {
65
+ const allValues = [];
66
+ for (const item of this._items) {
67
+ allValues.push(item?.value);
68
+ }
69
+ this.control.setValue(allValues, { emitEvent: emit });
70
+ }
71
+ unselectAll(emit = true) {
72
+ this.control.setValue([], { emitEvent: emit });
73
+ }
74
+ verifyStateItens() {
75
+ this.control.valueChanges.subscribe((current) => {
76
+ const prev = this.previousValues;
77
+ const hasAllNow = current.includes(-1);
78
+ const hadAllBefore = prev.includes(-1);
79
+ const currentWithoutAll = current.filter(v => v !== -1);
80
+ const selectableValues = this._items
81
+ .filter((i) => typeof i === 'object' &&
82
+ i !== null &&
83
+ 'value' in i &&
84
+ typeof i.value === 'number' &&
85
+ i.value !== -1)
86
+ .map(i => i.value);
87
+ const allSelected = currentWithoutAll.length === selectableValues.length;
88
+ if (!hadAllBefore && hasAllNow) {
89
+ const newValue = [-1, ...selectableValues];
90
+ this.previousValues = [...newValue];
91
+ this.control.setValue(newValue, { emitEvent: false });
92
+ this.updateSelectedQuantityText();
93
+ return;
94
+ }
95
+ if (hadAllBefore && !hasAllNow) {
96
+ this.previousValues = [];
97
+ this.control.setValue([], { emitEvent: false });
98
+ this.updateSelectedQuantityText();
99
+ return;
100
+ }
101
+ if (allSelected && !hasAllNow) {
102
+ const newValue = [-1, ...currentWithoutAll];
103
+ this.previousValues = [...newValue];
104
+ this.control.setValue(newValue, { emitEvent: false });
105
+ this.updateSelectedQuantityText();
106
+ return;
107
+ }
108
+ if (hadAllBefore && hasAllNow && !allSelected) {
109
+ this.previousValues = [...currentWithoutAll];
110
+ this.control.setValue(currentWithoutAll, { emitEvent: false });
111
+ this.updateSelectedQuantityText();
112
+ return;
113
+ }
114
+ this.previousValues = [...current];
115
+ this.updateSelectedQuantityText();
116
+ });
117
+ }
118
+ updateSelectedQuantityText() {
119
+ const value = this.control?.value || [];
120
+ const selectedItems = value.filter(v => v !== -1);
121
+ const count = selectedItems.length;
122
+ const total = this._items.length - 1;
123
+ if (value.includes(-1) || count === total || count === 0) {
124
+ this.placeholder = `Todos ${this.pluralLabel || 'itens'} selecionados`;
125
+ return;
126
+ }
127
+ if (count === 1) {
128
+ this.placeholder = `1 ${this.singularLabel || 'item'} selecionado`;
129
+ return;
130
+ }
131
+ this.placeholder = `${count} ${this.pluralLabel || 'itens'} selecionados`;
132
+ return;
133
+ }
134
+ onSearch(event) {
135
+ this.isSearching = event.term.length > 0;
136
+ }
137
+ onClear() {
138
+ this.isSearching = false;
139
+ }
46
140
  onBlur() {
47
141
  this._onTouched();
48
142
  }
@@ -78,13 +172,13 @@ export class SelectComponent {
78
172
  }
79
173
  }
80
174
  SelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SelectComponent, deps: [{ token: 'autofocus', attribute: true }], target: i0.ɵɵFactoryTarget.Component });
81
- SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SelectComponent, selector: "saipos-select", inputs: { bindLabel: "bindLabel", bindValue: "bindValue", placeholder: "placeholder", dropdownPosition: "dropdownPosition", clearable: "clearable", selectOnTab: "selectOnTab", searchable: "searchable", notFoundText: "notFoundText", appendTo: "appendTo", multiple: "multiple", showCheckbox: "showCheckbox", loading: "loading", typeahead: "typeahead", typeToSearchText: "typeToSearchText", items: "items" }, host: { properties: { "class.saipos-select": "this.hostClass" } }, providers: [
175
+ SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SelectComponent, selector: "saipos-select", inputs: { bindLabel: "bindLabel", bindValue: "bindValue", placeholder: "placeholder", dropdownPosition: "dropdownPosition", clearable: "clearable", selectOnTab: "selectOnTab", searchable: "searchable", notFoundText: "notFoundText", appendTo: "appendTo", multiple: "multiple", showCheckbox: "showCheckbox", loading: "loading", typeahead: "typeahead", typeToSearchText: "typeToSearchText", showSelectedQuantity: "showSelectedQuantity", singularLabel: "singularLabel", pluralLabel: "pluralLabel", items: "items" }, host: { properties: { "class.saipos-select": "this.hostClass" } }, providers: [
82
176
  {
83
177
  provide: NG_VALUE_ACCESSOR,
84
178
  useExisting: forwardRef(() => SelectComponent),
85
179
  multi: true,
86
180
  },
87
- ], queries: [{ propertyName: "headerTemplate", first: true, predicate: SaiposSelectHeaderDirective, descendants: true, read: TemplateRef }, { propertyName: "optionTemplate", first: true, predicate: SaiposSelectOptionDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "ngSelect", first: true, predicate: ["select"], descendants: true }], ngImport: i0, template: "<ng-select\n #select\n [items]=\"items\"\n [searchable]=\"searchable\"\n [bindLabel]=\"bindLabel\"\n [bindValue]=\"bindValue\"\n [placeholder]=\"placeholder\"\n [dropdownPosition]=\"dropdownPosition\"\n [formControl]=\"control\"\n [clearable]=\"clearable\"\n [selectOnTab]=\"selectOnTab\"\n [notFoundText]=\"notFoundText\"\n [appendTo]=\"appendTo\"\n [multiple]=\"multiple\"\n [closeOnSelect]=\"!multiple\"\n [loading]=\"loading\"\n [typeahead]=\"typeahead\"\n [typeToSearchText]=\"typeToSearchText\"\n (blur)=\"onBlur()\"\n>\n <div *ngIf=\"headerTemplate\">\n <ng-template ng-header-tmp>\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"></ng-container>\n </ng-template>\n </div>\n\n <ng-template\n *ngIf=\"optionTemplate\"\n ng-option-tmp\n let-item=\"item\"\n let-item$=\"item$\"\n let-index=\"index\"\n let-searchTerm=\"searchTerm\"\n >\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{item: item, item$: item$, index: index, searchTerm: searchTerm}\"\n ></ng-container>\n </ng-template>\n\n <div *ngIf=\"!optionTemplate && multiple && showCheckbox\">\n <ng-template\n ng-option-tmp\n let-item=\"item\"\n let-item$=\"item$\"\n let-index=\"index\"\n >\n <div class=\"form-check\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [checked]=\"item$.selected\"\n [disabled]=\"item$.disabled\"\n />\n <label class=\"form-check-label ng-option-label\"\n >{{ item$.label }}</label\n >\n </div>\n </ng-template>\n </div>\n <ng-template ng-loadingspinner-tmp>\n <div class=\"lds-ellipsis\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n </ng-template>\n <ng-template ng-notfound-tmp let-searchTerm=\"searchTerm\">\n <div class=\"ng-option disabled\">Nada encontrado para \"{{searchTerm}}\"</div>\n </ng-template>\n <ng-template ng-loadingtext-tmp let-searchTerm=\"searchTerm\">\n <div class=\"ng-option disabled\">Buscando dados para \"{{searchTerm}}\"</div>\n </ng-template>\n</ng-select>\n", styles: [""], components: [{ type: i1.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }], directives: [{ type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { type: i1.NgLoadingSpinnerTemplateDirective, selector: "[ng-loadingspinner-tmp]" }, { type: i1.NgNotFoundTemplateDirective, selector: "[ng-notfound-tmp]" }, { type: i1.NgLoadingTextTemplateDirective, selector: "[ng-loadingtext-tmp]" }] });
181
+ ], queries: [{ propertyName: "headerTemplate", first: true, predicate: SaiposSelectHeaderDirective, descendants: true, read: TemplateRef }, { propertyName: "optionTemplate", first: true, predicate: SaiposSelectOptionDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "ngSelect", first: true, predicate: ["select"], descendants: true }], ngImport: i0, template: "<ng-select\n #select\n [items]=\"items\"\n [searchable]=\"searchable\"\n [bindLabel]=\"bindLabel\"\n [bindValue]=\"bindValue\"\n [placeholder]=\"placeholder\"\n [dropdownPosition]=\"dropdownPosition\"\n [formControl]=\"control\"\n [clearable]=\"clearable\"\n [selectOnTab]=\"selectOnTab\"\n [notFoundText]=\"notFoundText\"\n [appendTo]=\"appendTo\"\n [multiple]=\"multiple\"\n [closeOnSelect]=\"!multiple\"\n [loading]=\"loading\"\n [typeahead]=\"typeahead\"\n [typeToSearchText]=\"typeToSearchText\"\n (search)=\"onSearch($event)\"\n (clear)=\"onClear()\"\n (blur)=\"onBlur()\"\n>\n <div *ngIf=\"headerTemplate\">\n <ng-template ng-header-tmp>\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"></ng-container>\n </ng-template>\n </div>\n\n <ng-template\n *ngIf=\"optionTemplate\"\n ng-option-tmp\n let-item=\"item\"\n let-item$=\"item$\"\n let-index=\"index\"\n let-searchTerm=\"searchTerm\"\n >\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{item: item, item$: item$, index: index, searchTerm: searchTerm}\"\n ></ng-container>\n </ng-template>\n\n <div *ngIf=\"showSelectedQuantity && showCheckbox\">\n <ng-template ng-multi-label-tmp let-items=\"items\">\n <span class=\"label-text\" *ngIf=\"!isSearching\"> {{ placeholder }} </span>\n </ng-template>\n </div>\n\n <div *ngIf=\"!optionTemplate && multiple && showCheckbox\">\n <ng-template\n ng-option-tmp\n let-item=\"item\"\n let-item$=\"item$\"\n let-index=\"index\"\n >\n <div class=\"form-check\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [checked]=\"item$.selected\"\n [disabled]=\"item$.disabled\"\n />\n <label class=\"form-check-label ng-option-label\"\n >{{ item$.label }}</label\n >\n </div>\n </ng-template>\n </div>\n <ng-template ng-loadingspinner-tmp>\n <div class=\"lds-ellipsis\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n </ng-template>\n <ng-template ng-notfound-tmp let-searchTerm=\"searchTerm\">\n <div class=\"ng-option disabled\">Nada encontrado para \"{{searchTerm}}\"</div>\n </ng-template>\n <ng-template ng-loadingtext-tmp let-searchTerm=\"searchTerm\">\n <div class=\"ng-option disabled\">Buscando dados para \"{{searchTerm}}\"</div>\n </ng-template>\n</ng-select>\n", styles: [""], components: [{ type: i1.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }], directives: [{ type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { type: i1.NgMultiLabelTemplateDirective, selector: "[ng-multi-label-tmp]" }, { type: i1.NgLoadingSpinnerTemplateDirective, selector: "[ng-loadingspinner-tmp]" }, { type: i1.NgNotFoundTemplateDirective, selector: "[ng-notfound-tmp]" }, { type: i1.NgLoadingTextTemplateDirective, selector: "[ng-loadingtext-tmp]" }] });
88
182
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SelectComponent, decorators: [{
89
183
  type: Component,
90
184
  args: [{ selector: 'saipos-select', providers: [
@@ -93,7 +187,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
93
187
  useExisting: forwardRef(() => SelectComponent),
94
188
  multi: true,
95
189
  },
96
- ], template: "<ng-select\n #select\n [items]=\"items\"\n [searchable]=\"searchable\"\n [bindLabel]=\"bindLabel\"\n [bindValue]=\"bindValue\"\n [placeholder]=\"placeholder\"\n [dropdownPosition]=\"dropdownPosition\"\n [formControl]=\"control\"\n [clearable]=\"clearable\"\n [selectOnTab]=\"selectOnTab\"\n [notFoundText]=\"notFoundText\"\n [appendTo]=\"appendTo\"\n [multiple]=\"multiple\"\n [closeOnSelect]=\"!multiple\"\n [loading]=\"loading\"\n [typeahead]=\"typeahead\"\n [typeToSearchText]=\"typeToSearchText\"\n (blur)=\"onBlur()\"\n>\n <div *ngIf=\"headerTemplate\">\n <ng-template ng-header-tmp>\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"></ng-container>\n </ng-template>\n </div>\n\n <ng-template\n *ngIf=\"optionTemplate\"\n ng-option-tmp\n let-item=\"item\"\n let-item$=\"item$\"\n let-index=\"index\"\n let-searchTerm=\"searchTerm\"\n >\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{item: item, item$: item$, index: index, searchTerm: searchTerm}\"\n ></ng-container>\n </ng-template>\n\n <div *ngIf=\"!optionTemplate && multiple && showCheckbox\">\n <ng-template\n ng-option-tmp\n let-item=\"item\"\n let-item$=\"item$\"\n let-index=\"index\"\n >\n <div class=\"form-check\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [checked]=\"item$.selected\"\n [disabled]=\"item$.disabled\"\n />\n <label class=\"form-check-label ng-option-label\"\n >{{ item$.label }}</label\n >\n </div>\n </ng-template>\n </div>\n <ng-template ng-loadingspinner-tmp>\n <div class=\"lds-ellipsis\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n </ng-template>\n <ng-template ng-notfound-tmp let-searchTerm=\"searchTerm\">\n <div class=\"ng-option disabled\">Nada encontrado para \"{{searchTerm}}\"</div>\n </ng-template>\n <ng-template ng-loadingtext-tmp let-searchTerm=\"searchTerm\">\n <div class=\"ng-option disabled\">Buscando dados para \"{{searchTerm}}\"</div>\n </ng-template>\n</ng-select>\n", styles: [""] }]
190
+ ], template: "<ng-select\n #select\n [items]=\"items\"\n [searchable]=\"searchable\"\n [bindLabel]=\"bindLabel\"\n [bindValue]=\"bindValue\"\n [placeholder]=\"placeholder\"\n [dropdownPosition]=\"dropdownPosition\"\n [formControl]=\"control\"\n [clearable]=\"clearable\"\n [selectOnTab]=\"selectOnTab\"\n [notFoundText]=\"notFoundText\"\n [appendTo]=\"appendTo\"\n [multiple]=\"multiple\"\n [closeOnSelect]=\"!multiple\"\n [loading]=\"loading\"\n [typeahead]=\"typeahead\"\n [typeToSearchText]=\"typeToSearchText\"\n (search)=\"onSearch($event)\"\n (clear)=\"onClear()\"\n (blur)=\"onBlur()\"\n>\n <div *ngIf=\"headerTemplate\">\n <ng-template ng-header-tmp>\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"></ng-container>\n </ng-template>\n </div>\n\n <ng-template\n *ngIf=\"optionTemplate\"\n ng-option-tmp\n let-item=\"item\"\n let-item$=\"item$\"\n let-index=\"index\"\n let-searchTerm=\"searchTerm\"\n >\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{item: item, item$: item$, index: index, searchTerm: searchTerm}\"\n ></ng-container>\n </ng-template>\n\n <div *ngIf=\"showSelectedQuantity && showCheckbox\">\n <ng-template ng-multi-label-tmp let-items=\"items\">\n <span class=\"label-text\" *ngIf=\"!isSearching\"> {{ placeholder }} </span>\n </ng-template>\n </div>\n\n <div *ngIf=\"!optionTemplate && multiple && showCheckbox\">\n <ng-template\n ng-option-tmp\n let-item=\"item\"\n let-item$=\"item$\"\n let-index=\"index\"\n >\n <div class=\"form-check\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [checked]=\"item$.selected\"\n [disabled]=\"item$.disabled\"\n />\n <label class=\"form-check-label ng-option-label\"\n >{{ item$.label }}</label\n >\n </div>\n </ng-template>\n </div>\n <ng-template ng-loadingspinner-tmp>\n <div class=\"lds-ellipsis\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n </ng-template>\n <ng-template ng-notfound-tmp let-searchTerm=\"searchTerm\">\n <div class=\"ng-option disabled\">Nada encontrado para \"{{searchTerm}}\"</div>\n </ng-template>\n <ng-template ng-loadingtext-tmp let-searchTerm=\"searchTerm\">\n <div class=\"ng-option disabled\">Buscando dados para \"{{searchTerm}}\"</div>\n </ng-template>\n</ng-select>\n", styles: [""] }]
97
191
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
98
192
  type: Attribute,
99
193
  args: ['autofocus']
@@ -125,6 +219,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
125
219
  type: Input
126
220
  }], typeToSearchText: [{
127
221
  type: Input
222
+ }], showSelectedQuantity: [{
223
+ type: Input
224
+ }], singularLabel: [{
225
+ type: Input
226
+ }], pluralLabel: [{
227
+ type: Input
128
228
  }], ngSelect: [{
129
229
  type: ViewChild,
130
230
  args: ['select']
@@ -140,4 +240,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
140
240
  }], items: [{
141
241
  type: Input
142
242
  }] } });
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnJhcnkvc3JjL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9saWJyYXJ5L3NyYy9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUNMLFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUVMLFdBQVcsRUFDWCxpQkFBaUIsR0FDbEIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzlCLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsMkJBQTJCLEdBQzVCLE1BQU0sOEJBQThCLENBQUE7Ozs7O0FBY3JDLE1BQU0sT0FBTyxlQUFlO0lBNEMxQixZQUE0QyxTQUF5QjtRQUF6QixjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQTNDNUQsY0FBUyxHQUFHLEVBQUUsQ0FBQTtRQUNkLGNBQVMsR0FBRyxFQUFFLENBQUE7UUFDZCxnQkFBVyxHQUFHLFdBQVcsQ0FBQTtRQUN6QixxQkFBZ0IsR0FBOEIsTUFBTSxDQUFBO1FBQ3BELGNBQVMsR0FBRyxLQUFLLENBQUE7UUFDakIsZ0JBQVcsR0FBRyxLQUFLLENBQUE7UUFDbkIsZUFBVSxHQUFHLElBQUksQ0FBQTtRQUNqQixpQkFBWSxHQUFHLDBCQUEwQixDQUFBO1FBQ3pDLGFBQVEsR0FBRyxFQUFFLENBQUE7UUFDYixhQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ2hCLGlCQUFZLEdBQUcsSUFBSSxDQUFBO1FBQ25CLFlBQU8sR0FBRyxLQUFLLENBQUE7UUFDZixjQUFTLEdBQUcsSUFBSSxP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QUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUV1QixRQUFRO3NCQUFwQyxTQUFTO3VCQUFDLFFBQVE7Z0JBR25CLGNBQWM7c0JBRGIsWUFBWTt1QkFBQywyQkFBMkIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBSWhFLGNBQWM7c0JBRGIsWUFBWTt1QkFBQywyQkFBMkIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBTXhCLFNBQVM7c0JBQWhELFdBQVc7dUJBQUMscUJBQXFCO2dCQUs5QixLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBBdHRyaWJ1dGUsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUNvbnRyb2wsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxufSBmcm9tICdAYW5ndWxhci9mb3JtcydcbmltcG9ydCB7IE5nU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnQG5nLXNlbGVjdC9uZy1zZWxlY3QnXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7XG4gIFNhaXBvc1NlbGVjdEhlYWRlckRpcmVjdGl2ZSxcbiAgU2FpcG9zU2VsZWN0T3B0aW9uRGlyZWN0aXZlLFxufSBmcm9tICcuL3NlbGVjdC10ZW1wbGF0ZXMuZGlyZWN0aXZlJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzYWlwb3Mtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlbGVjdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIGJpbmRMYWJlbCA9ICcnXG4gIEBJbnB1dCgpIGJpbmRWYWx1ZSA9ICcnXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlbGVjaW9uZSdcbiAgQElucHV0KCkgZHJvcGRvd25Qb3NpdGlvbjogJ2F1dG8nIHwgJ3RvcCcgfCAnYm90dG9tJyA9ICdhdXRvJ1xuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZVxuICBASW5wdXQoKSBzZWxlY3RPblRhYiA9IGZhbHNlXG4gIEBJbnB1dCgpIHNlYXJjaGFibGUgPSB0cnVlXG4gIEBJbnB1dCgpIG5vdEZvdW5kVGV4dCA9ICdOZW5odW1hIG9ww6fDo28gZW5jb250cmFkYSdcbiAgQElucHV0KCkgYXBwZW5kVG8gPSAnJ1xuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlXG4gIEBJbnB1dCgpIHNob3dDaGVja2JveCA9IHRydWVcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlXG4gIEBJbnB1dCgpIHR5cGVhaGVhZCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKVxuICBASW5wdXQoKSB0eXBlVG9TZWFyY2hUZXh0ID0gJ0RpZ2l0ZSBhbGdvIHBhcmEgYnVzY2FyJ1xuXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdCcpIHByaXZhdGUgbmdTZWxlY3QhOiBOZ1NlbGVjdENvbXBvbmVudFxuXG4gIEBDb250ZW50Q2hpbGQoU2FpcG9zU2VsZWN0SGVhZGVyRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGhlYWRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8dW5rbm93bj5cblxuICBAQ29udGVudENoaWxkKFNhaXBvc1NlbGVjdE9wdGlvbkRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBvcHRpb25UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPHVua25vd24+XG5cbiAgY29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKVxuICBwcml2YXRlIF9pdGVtczogdW5rbm93bltdID0gW11cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNhaXBvcy1zZWxlY3QnKSBnZXQgaG9zdENsYXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgaXRlbXModmFsdWU6IHVua25vd25bXSB8IG51bGwpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHZhbHVlID0gW11cbiAgICB9XG5cbiAgICB0aGlzLl9pdGVtcyA9IHZhbHVlXG4gIH1cblxuICBnZXQgaXRlbXMoKTogdW5rbm93bltdIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXNcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKEBBdHRyaWJ1dGUoJ2F1dG9mb2N1cycpIHByaXZhdGUgYXV0b0ZvY3VzPzogbnVsbCB8IHN0cmluZykge31cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzICE9PSBudWxsICYmIHRoaXMuYXV0b0ZvY3VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZm9jdXMoKVxuICAgIH1cbiAgfVxuXG4gIG9uQmx1cigpIHtcbiAgICB0aGlzLl9vblRvdWNoZWQoKVxuICB9XG5cbiAgcHJpdmF0ZSBfb25Ub3VjaGVkKCkge1xuICAgIC8qIGVtcHR5ICovXG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSlcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICgpID0+IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShmbilcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm5cbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpc0Rpc2FibGVkID8gdGhpcy5jb250cm9sLmRpc2FibGUoKSA6IHRoaXMuY29udHJvbC5lbmFibGUoKVxuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgdGhpcy5uZ1NlbGVjdC5mb2N1cygpXG4gIH1cblxuICBibHVyKCkge1xuICAgIHRoaXMubmdTZWxlY3QuYmx1cigpXG4gIH1cblxuICBvcGVuKCkge1xuICAgIHRoaXMubmdTZWxlY3Qub3BlbigpXG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLm5nU2VsZWN0LmNsb3NlKClcbiAgfVxuXG4gIHRvZ2dsZSgpIHtcbiAgICB0aGlzLm5nU2VsZWN0LnRvZ2dsZSgpXG4gIH1cbn1cbiIsIjxuZy1zZWxlY3RcbiAgI3NlbGVjdFxuICBbaXRlbXNdPVwiaXRlbXNcIlxuICBbc2VhcmNoYWJsZV09XCJzZWFyY2hhYmxlXCJcbiAgW2JpbmRMYWJlbF09XCJiaW5kTGFiZWxcIlxuICBbYmluZFZhbHVlXT1cImJpbmRWYWx1ZVwiXG4gIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gIFtkcm9wZG93blBvc2l0aW9uXT1cImRyb3Bkb3duUG9zaXRpb25cIlxuICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gIFtjbGVhcmFibGVdPVwiY2xlYXJhYmxlXCJcbiAgW3NlbGVjdE9uVGFiXT1cInNlbGVjdE9uVGFiXCJcbiAgW25vdEZvdW5kVGV4dF09XCJub3RGb3VuZFRleHRcIlxuICBbYXBwZW5kVG9dPVwiYXBwZW5kVG9cIlxuICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICBbY2xvc2VPblNlbGVjdF09XCIhbXVsdGlwbGVcIlxuICBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgW3R5cGVhaGVhZF09XCJ0eXBlYWhlYWRcIlxuICBbdHlwZVRvU2VhcmNoVGV4dF09XCJ0eXBlVG9TZWFyY2hUZXh0XCJcbiAgKGJsdXIpPVwib25CbHVyKClcIlxuPlxuICA8ZGl2ICpuZ0lmPVwiaGVhZGVyVGVtcGxhdGVcIj5cbiAgICA8bmctdGVtcGxhdGUgbmctaGVhZGVyLXRtcD5cbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cblxuICA8bmctdGVtcGxhdGVcbiAgICAqbmdJZj1cIm9wdGlvblRlbXBsYXRlXCJcbiAgICBuZy1vcHRpb24tdG1wXG4gICAgbGV0LWl0ZW09XCJpdGVtXCJcbiAgICBsZXQtaXRlbSQ9XCJpdGVtJFwiXG4gICAgbGV0LWluZGV4PVwiaW5kZXhcIlxuICAgIGxldC1zZWFyY2hUZXJtPVwic2VhcmNoVGVybVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25UZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2l0ZW06IGl0ZW0sIGl0ZW0kOiBpdGVtJCwgaW5kZXg6IGluZGV4LCBzZWFyY2hUZXJtOiBzZWFyY2hUZXJtfVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxkaXYgKm5nSWY9XCIhb3B0aW9uVGVtcGxhdGUgJiYgbXVsdGlwbGUgJiYgc2hvd0NoZWNrYm94XCI+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICBuZy1vcHRpb24tdG1wXG4gICAgICBsZXQtaXRlbT1cIml0ZW1cIlxuICAgICAgbGV0LWl0ZW0kPVwiaXRlbSRcIlxuICAgICAgbGV0LWluZGV4PVwiaW5kZXhcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBbY2hlY2tlZF09XCJpdGVtJC5zZWxlY3RlZFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIml0ZW0kLmRpc2FibGVkXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBuZy1vcHRpb24tbGFiZWxcIlxuICAgICAgICAgID57eyBpdGVtJC5sYWJlbCB9fTwvbGFiZWxcbiAgICAgICAgPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSBuZy1sb2FkaW5nc3Bpbm5lci10bXA+XG4gICAgPGRpdiBjbGFzcz1cImxkcy1lbGxpcHNpc1wiPlxuICAgICAgPGRpdj48L2Rpdj5cbiAgICAgIDxkaXY+PC9kaXY+XG4gICAgICA8ZGl2PjwvZGl2PlxuICAgICAgPGRpdj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIG5nLW5vdGZvdW5kLXRtcCBsZXQtc2VhcmNoVGVybT1cInNlYXJjaFRlcm1cIj5cbiAgICA8ZGl2IGNsYXNzPVwibmctb3B0aW9uIGRpc2FibGVkXCI+TmFkYSBlbmNvbnRyYWRvIHBhcmEgXCJ7e3NlYXJjaFRlcm19fVwiPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBuZy1sb2FkaW5ndGV4dC10bXAgbGV0LXNlYXJjaFRlcm09XCJzZWFyY2hUZXJtXCI+XG4gICAgPGRpdiBjbGFzcz1cIm5nLW9wdGlvbiBkaXNhYmxlZFwiPkJ1c2NhbmRvIGRhZG9zIHBhcmEgXCJ7e3NlYXJjaFRlcm19fVwiPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLXNlbGVjdD5cbiJdfQ==
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnJhcnkvc3JjL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9saWJyYXJ5L3NyYy9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUNMLFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUVMLFdBQVcsRUFDWCxpQkFBaUIsR0FDbEIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzlCLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsMkJBQTJCLEdBQzVCLE1BQU0sOEJBQThCLENBQUE7Ozs7O0FBY3JDLE1BQU0sT0FBTyxlQUFlO0lBaUQxQixZQUE0QyxTQUF5QjtRQUF6QixjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQWhENUQsY0FBUyxHQUFHLEVBQUUsQ0FBQTtRQUNkLGNBQVMsR0FBRyxFQUFFLENBQUE7UUFDZCxnQkFBVyxHQUFHLFdBQVcsQ0FBQTtRQUN6QixxQkFBZ0IsR0FBOEIsTUFBTSxDQUFBO1FBQ3BELGNBQVMsR0FBRyxLQUFLLENBQUE7UUFDakIsZ0JBQVcsR0FBRyxLQUFLLENBQUE7UUFDbkIsZUFBVSxHQUFHLElBQUksQ0FBQTtRQUNqQixpQkFBWSxHQUFHLDBCQUEwQixDQUFBO1FBQ3pDLGFBQVEsR0FBRyxFQUFFLENBQUE7UUFDYixhQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ2hCLGlCQUFZLEdBQUcsSUFBSSxDQUFBO1FBQ25CLFlBQU8sR0FBRyxLQUFLLENBQUE7UUFDZixjQUFTLEdBQUcsSUFBSSxP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QVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUV1QixRQUFRO3NCQUFwQyxTQUFTO3VCQUFDLFFBQVE7Z0JBR25CLGNBQWM7c0JBRGIsWUFBWTt1QkFBQywyQkFBMkIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBSWhFLGNBQWM7c0JBRGIsWUFBWTt1QkFBQywyQkFBMkIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBUXhCLFNBQVM7c0JBQWhELFdBQVc7dUJBQUMscUJBQXFCO2dCQUs5QixLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBBdHRyaWJ1dGUsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUNvbnRyb2wsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxufSBmcm9tICdAYW5ndWxhci9mb3JtcydcbmltcG9ydCB7IE5nU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnQG5nLXNlbGVjdC9uZy1zZWxlY3QnXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7XG4gIFNhaXBvc1NlbGVjdEhlYWRlckRpcmVjdGl2ZSxcbiAgU2FpcG9zU2VsZWN0T3B0aW9uRGlyZWN0aXZlLFxufSBmcm9tICcuL3NlbGVjdC10ZW1wbGF0ZXMuZGlyZWN0aXZlJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzYWlwb3Mtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlbGVjdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIGJpbmRMYWJlbCA9ICcnXG4gIEBJbnB1dCgpIGJpbmRWYWx1ZSA9ICcnXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlbGVjaW9uZSdcbiAgQElucHV0KCkgZHJvcGRvd25Qb3NpdGlvbjogJ2F1dG8nIHwgJ3RvcCcgfCAnYm90dG9tJyA9ICdhdXRvJ1xuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZVxuICBASW5wdXQoKSBzZWxlY3RPblRhYiA9IGZhbHNlXG4gIEBJbnB1dCgpIHNlYXJjaGFibGUgPSB0cnVlXG4gIEBJbnB1dCgpIG5vdEZvdW5kVGV4dCA9ICdOZW5odW1hIG9ww6fDo28gZW5jb250cmFkYSdcbiAgQElucHV0KCkgYXBwZW5kVG8gPSAnJ1xuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlXG4gIEBJbnB1dCgpIHNob3dDaGVja2JveCA9IHRydWVcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlXG4gIEBJbnB1dCgpIHR5cGVhaGVhZCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKVxuICBASW5wdXQoKSB0eXBlVG9TZWFyY2hUZXh0ID0gJ0RpZ2l0ZSBhbGdvIHBhcmEgYnVzY2FyJ1xuICBASW5wdXQoKSBzaG93U2VsZWN0ZWRRdWFudGl0eSA9IGZhbHNlXG4gIEBJbnB1dCgpIHNpbmd1bGFyTGFiZWw/OiBzdHJpbmdcbiAgQElucHV0KCkgcGx1cmFsTGFiZWw/OiBzdHJpbmdcblxuICBAVmlld0NoaWxkKCdzZWxlY3QnKSBwcml2YXRlIG5nU2VsZWN0ITogTmdTZWxlY3RDb21wb25lbnRcblxuICBAQ29udGVudENoaWxkKFNhaXBvc1NlbGVjdEhlYWRlckRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBoZWFkZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPHVua25vd24+XG5cbiAgQENvbnRlbnRDaGlsZChTYWlwb3NTZWxlY3RPcHRpb25EaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgb3B0aW9uVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjx1bmtub3duPlxuXG4gIGNvbnRyb2w6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKClcbiAgcHJpdmF0ZSBfaXRlbXM6IHVua25vd25bXSA9IFtdXG4gIHByaXZhdGUgcHJldmlvdXNWYWx1ZXM6IG51bWJlcltdID0gW11cbiAgcHJpdmF0ZSBsYXN0VXBkYXRlOiB7IGFkZGVkPzogbnVtYmVyW107IHJlbW92ZWQ/OiBudW1iZXJbXSB9ID0ge31cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNhaXBvcy1zZWxlY3QnKSBnZXQgaG9zdENsYXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgaXRlbXModmFsdWU6IHVua25vd25bXSB8IG51bGwpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHZhbHVlID0gW11cbiAgICB9XG5cbiAgICB0aGlzLl9pdGVtcyA9IHZhbHVlXG4gIH1cblxuICBnZXQgaXRlbXMoKTogdW5rbm93bltdIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXNcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKEBBdHRyaWJ1dGUoJ2F1dG9mb2N1cycpIHByaXZhdGUgYXV0b0ZvY3VzPzogbnVsbCB8IHN0cmluZykge31cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2hvd1NlbGVjdGVkUXVhbnRpdHkpIHtcbiAgICAgIHRoaXMudmVyaWZ5U3RhdGVJdGVucygpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy5zaG93U2VsZWN0ZWRRdWFudGl0eSkge1xuICAgICAgdm9pZCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgY29uc3QgYWxsSXRlbSA9IHtcbiAgICAgICAgICB2YWx1ZTogLTEsXG4gICAgICAgICAgbGFiZWw6IGBUb2RvcyAke3RoaXMucGx1cmFsTGFiZWwgfHwgJ2l0ZW5zJ31gLFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faXRlbXMgPSBbYWxsSXRlbSwgLi4udGhpcy5faXRlbXNdXG4gICAgICAgIHRoaXMuc2VsZWN0QWxsKClcbiAgICAgICAgdGhpcy5wcmV2aW91c1ZhbHVlcyA9IFsuLi4odGhpcy5jb250cm9sLnZhbHVlIGFzIG51bWJlcltdKV1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzICE9PSBudWxsICYmIHRoaXMuYXV0b0ZvY3VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZm9jdXMoKVxuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEFsbChlbWl0ID0gdHJ1ZSk6IHZvaWQge1xuICAgIGNvbnN0IGFsbFZhbHVlczogdW5rbm93bltdID0gW11cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5faXRlbXMgYXMgeyB2YWx1ZTogdW5rbm93biB9W10pIHtcbiAgICAgIGFsbFZhbHVlcy5wdXNoKGl0ZW0/LnZhbHVlKVxuICAgIH1cbiAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUoYWxsVmFsdWVzLCB7IGVtaXRFdmVudDogZW1pdCB9KVxuICB9XG5cbiAgdW5zZWxlY3RBbGwoZW1pdCA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUoW10sIHsgZW1pdEV2ZW50OiBlbWl0IH0pXG4gIH1cblxuICB2ZXJpZnlTdGF0ZUl0ZW5zKCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChjdXJyZW50OiBudW1iZXJbXSkgPT4ge1xuICAgICAgY29uc3QgcHJldiA9IHRoaXMucHJldmlvdXNWYWx1ZXNcbiAgICAgIGNvbnN0IGhhc0FsbE5vdyA9IGN1cnJlbnQuaW5jbHVkZXMoLTEpXG4gICAgICBjb25zdCBoYWRBbGxCZWZvcmUgPSBwcmV2LmluY2x1ZGVzKC0xKVxuICAgICAgY29uc3QgY3VycmVudFdpdGhvdXRBbGwgPSBjdXJyZW50LmZpbHRlcih2ID0+IHYgIT09IC0xKVxuICAgICAgY29uc3Qgc2VsZWN0YWJsZVZhbHVlcyA9IHRoaXMuX2l0ZW1zXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGkpOiBpIGlzIHsgdmFsdWU6IG51bWJlciB9ID0+XG4gICAgICAgICAgICB0eXBlb2YgaSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIGkgIT09IG51bGwgJiZcbiAgICAgICAgICAgICd2YWx1ZScgaW4gaSAmJlxuICAgICAgICAgICAgdHlwZW9mIChpIGFzIHsgdmFsdWU/OiB1bmtub3duIH0pLnZhbHVlID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgKGkgYXMgeyB2YWx1ZTogbnVtYmVyIH0pLnZhbHVlICE9PSAtMVxuICAgICAgICApXG4gICAgICAgIC5tYXAoaSA9PiBpLnZhbHVlKVxuICAgICAgY29uc3QgYWxsU2VsZWN0ZWQgPSBjdXJyZW50V2l0aG91dEFsbC5sZW5ndGggPT09IHNlbGVjdGFibGVWYWx1ZXMubGVuZ3RoXG5cbiAgICAgIGlmICghaGFkQWxsQmVmb3JlICYmIGhhc0FsbE5vdykge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IFstMSwgLi4uc2VsZWN0YWJsZVZhbHVlc11cbiAgICAgICAgdGhpcy5wcmV2aW91c1ZhbHVlcyA9IFsuLi5uZXdWYWx1ZV1cbiAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKG5ld1ZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSlcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFF1YW50aXR5VGV4dCgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoaGFkQWxsQmVmb3JlICYmICFoYXNBbGxOb3cpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1ZhbHVlcyA9IFtdXG4gICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShbXSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRRdWFudGl0eVRleHQoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGFsbFNlbGVjdGVkICYmICFoYXNBbGxOb3cpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBbLTEsIC4uLmN1cnJlbnRXaXRob3V0QWxsXVxuICAgICAgICB0aGlzLnByZXZpb3VzVmFsdWVzID0gWy4uLm5ld1ZhbHVlXVxuICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUobmV3VmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KVxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkUXVhbnRpdHlUZXh0KClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChoYWRBbGxCZWZvcmUgJiYgaGFzQWxsTm93ICYmICFhbGxTZWxlY3RlZCkge1xuICAgICAgICB0aGlzLnByZXZpb3VzVmFsdWVzID0gWy4uLmN1cnJlbnRXaXRob3V0QWxsXVxuICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUoY3VycmVudFdpdGhvdXRBbGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KVxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkUXVhbnRpdHlUZXh0KClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJldmlvdXNWYWx1ZXMgPSBbLi4uY3VycmVudF1cbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRRdWFudGl0eVRleHQoKVxuICAgIH0pXG4gIH1cblxuICB1cGRhdGVTZWxlY3RlZFF1YW50aXR5VGV4dCgpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9ICh0aGlzLmNvbnRyb2w/LnZhbHVlIGFzIG51bWJlcltdKSB8fCBbXVxuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB2YWx1ZS5maWx0ZXIodiA9PiB2ICE9PSAtMSlcbiAgICBjb25zdCBjb3VudCA9IHNlbGVjdGVkSXRlbXMubGVuZ3RoXG4gICAgY29uc3QgdG90YWwgPSB0aGlzLl9pdGVtcy5sZW5ndGggLSAxXG5cbiAgICBpZiAodmFsdWUuaW5jbHVkZXMoLTEpIHx8IGNvdW50ID09PSB0b3RhbCB8fCBjb3VudCA9PT0gMCkge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGBUb2RvcyAke3RoaXMucGx1cmFsTGFiZWwgfHwgJ2l0ZW5zJ30gc2VsZWNpb25hZG9zYFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gYDEgJHt0aGlzLnNpbmd1bGFyTGFiZWwgfHwgJ2l0ZW0nfSBzZWxlY2lvbmFkb2BcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMucGxhY2Vob2xkZXIgPSBgJHtjb3VudH0gJHt0aGlzLnBsdXJhbExhYmVsIHx8ICdpdGVucyd9IHNlbGVjaW9uYWRvc2BcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlzU2VhcmNoaW5nID0gZmFsc2VcblxuICBvblNlYXJjaChldmVudDogeyB0ZXJtOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIHRoaXMuaXNTZWFyY2hpbmcgPSBldmVudC50ZXJtLmxlbmd0aCA+IDBcbiAgfVxuXG4gIG9uQ2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5pc1NlYXJjaGluZyA9IGZhbHNlXG4gIH1cblxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5fb25Ub3VjaGVkKClcbiAgfVxuXG4gIHByaXZhdGUgX29uVG91Y2hlZCgpIHtcbiAgICAvKiBlbXB0eSAqL1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pXG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoKSA9PiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZm4pXG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuXG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaXNEaXNhYmxlZCA/IHRoaXMuY29udHJvbC5kaXNhYmxlKCkgOiB0aGlzLmNvbnRyb2wuZW5hYmxlKClcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIHRoaXMubmdTZWxlY3QuZm9jdXMoKVxuICB9XG5cbiAgYmx1cigpIHtcbiAgICB0aGlzLm5nU2VsZWN0LmJsdXIoKVxuICB9XG5cbiAgb3BlbigpIHtcbiAgICB0aGlzLm5nU2VsZWN0Lm9wZW4oKVxuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5uZ1NlbGVjdC5jbG9zZSgpXG4gIH1cblxuICB0b2dnbGUoKSB7XG4gICAgdGhpcy5uZ1NlbGVjdC50b2dnbGUoKVxuICB9XG59XG4iLCI8bmctc2VsZWN0XG4gICNzZWxlY3RcbiAgW2l0ZW1zXT1cIml0ZW1zXCJcbiAgW3NlYXJjaGFibGVdPVwic2VhcmNoYWJsZVwiXG4gIFtiaW5kTGFiZWxdPVwiYmluZExhYmVsXCJcbiAgW2JpbmRWYWx1ZV09XCJiaW5kVmFsdWVcIlxuICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICBbZHJvcGRvd25Qb3NpdGlvbl09XCJkcm9wZG93blBvc2l0aW9uXCJcbiAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICBbY2xlYXJhYmxlXT1cImNsZWFyYWJsZVwiXG4gIFtzZWxlY3RPblRhYl09XCJzZWxlY3RPblRhYlwiXG4gIFtub3RGb3VuZFRleHRdPVwibm90Rm91bmRUZXh0XCJcbiAgW2FwcGVuZFRvXT1cImFwcGVuZFRvXCJcbiAgW211bHRpcGxlXT1cIm11bHRpcGxlXCJcbiAgW2Nsb3NlT25TZWxlY3RdPVwiIW11bHRpcGxlXCJcbiAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gIFt0eXBlYWhlYWRdPVwidHlwZWFoZWFkXCJcbiAgW3R5cGVUb1NlYXJjaFRleHRdPVwidHlwZVRvU2VhcmNoVGV4dFwiXG4gIChzZWFyY2gpPVwib25TZWFyY2goJGV2ZW50KVwiXG4gIChjbGVhcik9XCJvbkNsZWFyKClcIlxuICAoYmx1cik9XCJvbkJsdXIoKVwiXG4+XG4gIDxkaXYgKm5nSWY9XCJoZWFkZXJUZW1wbGF0ZVwiPlxuICAgIDxuZy10ZW1wbGF0ZSBuZy1oZWFkZXItdG1wPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuXG4gIDxuZy10ZW1wbGF0ZVxuICAgICpuZ0lmPVwib3B0aW9uVGVtcGxhdGVcIlxuICAgIG5nLW9wdGlvbi10bXBcbiAgICBsZXQtaXRlbT1cIml0ZW1cIlxuICAgIGxldC1pdGVtJD1cIml0ZW0kXCJcbiAgICBsZXQtaW5kZXg9XCJpbmRleFwiXG4gICAgbGV0LXNlYXJjaFRlcm09XCJzZWFyY2hUZXJtXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvblRlbXBsYXRlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTogaXRlbSwgaXRlbSQ6IGl0ZW0kLCBpbmRleDogaW5kZXgsIHNlYXJjaFRlcm06IHNlYXJjaFRlcm19XCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPGRpdiAqbmdJZj1cInNob3dTZWxlY3RlZFF1YW50aXR5ICYmIHNob3dDaGVja2JveFwiPlxuICAgIDxuZy10ZW1wbGF0ZSBuZy1tdWx0aS1sYWJlbC10bXAgbGV0LWl0ZW1zPVwiaXRlbXNcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtdGV4dFwiICpuZ0lmPVwiIWlzU2VhcmNoaW5nXCI+IHt7IHBsYWNlaG9sZGVyIH19IDwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwiIW9wdGlvblRlbXBsYXRlICYmIG11bHRpcGxlICYmIHNob3dDaGVja2JveFwiPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgbmctb3B0aW9uLXRtcFxuICAgICAgbGV0LWl0ZW09XCJpdGVtXCJcbiAgICAgIGxldC1pdGVtJD1cIml0ZW0kXCJcbiAgICAgIGxldC1pbmRleD1cImluZGV4XCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgW2NoZWNrZWRdPVwiaXRlbSQuc2VsZWN0ZWRcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpdGVtJC5kaXNhYmxlZFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbmctb3B0aW9uLWxhYmVsXCJcbiAgICAgICAgICA+e3sgaXRlbSQubGFiZWwgfX08L2xhYmVsXG4gICAgICAgID5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgbmctbG9hZGluZ3NwaW5uZXItdG1wPlxuICAgIDxkaXYgY2xhc3M9XCJsZHMtZWxsaXBzaXNcIj5cbiAgICAgIDxkaXY+PC9kaXY+XG4gICAgICA8ZGl2PjwvZGl2PlxuICAgICAgPGRpdj48L2Rpdj5cbiAgICAgIDxkaXY+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBuZy1ub3Rmb3VuZC10bXAgbGV0LXNlYXJjaFRlcm09XCJzZWFyY2hUZXJtXCI+XG4gICAgPGRpdiBjbGFzcz1cIm5nLW9wdGlvbiBkaXNhYmxlZFwiPk5hZGEgZW5jb250cmFkbyBwYXJhIFwie3tzZWFyY2hUZXJtfX1cIjwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgbmctbG9hZGluZ3RleHQtdG1wIGxldC1zZWFyY2hUZXJtPVwic2VhcmNoVGVybVwiPlxuICAgIDxkaXYgY2xhc3M9XCJuZy1vcHRpb24gZGlzYWJsZWRcIj5CdXNjYW5kbyBkYWRvcyBwYXJhIFwie3tzZWFyY2hUZXJtfX1cIjwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy1zZWxlY3Q+XG4iXX0=
@@ -682,8 +682,12 @@ class SelectComponent {
682
682
  this.loading = false;
683
683
  this.typeahead = new Subject();
684
684
  this.typeToSearchText = 'Digite algo para buscar';
685
+ this.showSelectedQuantity = false;
685
686
  this.control = new FormControl();
686
687
  this._items = [];
688
+ this.previousValues = [];
689
+ this.lastUpdate = {};
690
+ this.isSearching = false;
687
691
  }
688
692
  get hostClass() {
689
693
  return true;
@@ -698,10 +702,101 @@ class SelectComponent {
698
702
  return this._items;
699
703
  }
700
704
  ngAfterViewInit() {
705
+ if (this.showSelectedQuantity) {
706
+ this.verifyStateItens();
707
+ }
708
+ if (this.multiple && this.showSelectedQuantity) {
709
+ void Promise.resolve().then(() => {
710
+ const allItem = {
711
+ value: -1,
712
+ label: `Todos ${this.pluralLabel || 'itens'}`,
713
+ };
714
+ this._items = [allItem, ...this._items];
715
+ this.selectAll();
716
+ this.previousValues = [...this.control.value];
717
+ });
718
+ }
701
719
  if (this.autoFocus !== null && this.autoFocus !== undefined) {
702
720
  this.focus();
703
721
  }
704
722
  }
723
+ selectAll(emit = true) {
724
+ const allValues = [];
725
+ for (const item of this._items) {
726
+ allValues.push(item === null || item === void 0 ? void 0 : item.value);
727
+ }
728
+ this.control.setValue(allValues, { emitEvent: emit });
729
+ }
730
+ unselectAll(emit = true) {
731
+ this.control.setValue([], { emitEvent: emit });
732
+ }
733
+ verifyStateItens() {
734
+ this.control.valueChanges.subscribe((current) => {
735
+ const prev = this.previousValues;
736
+ const hasAllNow = current.includes(-1);
737
+ const hadAllBefore = prev.includes(-1);
738
+ const currentWithoutAll = current.filter(v => v !== -1);
739
+ const selectableValues = this._items
740
+ .filter((i) => typeof i === 'object' &&
741
+ i !== null &&
742
+ 'value' in i &&
743
+ typeof i.value === 'number' &&
744
+ i.value !== -1)
745
+ .map(i => i.value);
746
+ const allSelected = currentWithoutAll.length === selectableValues.length;
747
+ if (!hadAllBefore && hasAllNow) {
748
+ const newValue = [-1, ...selectableValues];
749
+ this.previousValues = [...newValue];
750
+ this.control.setValue(newValue, { emitEvent: false });
751
+ this.updateSelectedQuantityText();
752
+ return;
753
+ }
754
+ if (hadAllBefore && !hasAllNow) {
755
+ this.previousValues = [];
756
+ this.control.setValue([], { emitEvent: false });
757
+ this.updateSelectedQuantityText();
758
+ return;
759
+ }
760
+ if (allSelected && !hasAllNow) {
761
+ const newValue = [-1, ...currentWithoutAll];
762
+ this.previousValues = [...newValue];
763
+ this.control.setValue(newValue, { emitEvent: false });
764
+ this.updateSelectedQuantityText();
765
+ return;
766
+ }
767
+ if (hadAllBefore && hasAllNow && !allSelected) {
768
+ this.previousValues = [...currentWithoutAll];
769
+ this.control.setValue(currentWithoutAll, { emitEvent: false });
770
+ this.updateSelectedQuantityText();
771
+ return;
772
+ }
773
+ this.previousValues = [...current];
774
+ this.updateSelectedQuantityText();
775
+ });
776
+ }
777
+ updateSelectedQuantityText() {
778
+ var _a;
779
+ const value = ((_a = this.control) === null || _a === void 0 ? void 0 : _a.value) || [];
780
+ const selectedItems = value.filter(v => v !== -1);
781
+ const count = selectedItems.length;
782
+ const total = this._items.length - 1;
783
+ if (value.includes(-1) || count === total || count === 0) {
784
+ this.placeholder = `Todos ${this.pluralLabel || 'itens'} selecionados`;
785
+ return;
786
+ }
787
+ if (count === 1) {
788
+ this.placeholder = `1 ${this.singularLabel || 'item'} selecionado`;
789
+ return;
790
+ }
791
+ this.placeholder = `${count} ${this.pluralLabel || 'itens'} selecionados`;
792
+ return;
793
+ }
794
+ onSearch(event) {
795
+ this.isSearching = event.term.length > 0;
796
+ }
797
+ onClear() {
798
+ this.isSearching = false;
799
+ }
705
800
  onBlur() {
706
801
  this._onTouched();
707
802
  }
@@ -737,13 +832,13 @@ class SelectComponent {
737
832
  }
738
833
  }
739
834
  SelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SelectComponent, deps: [{ token: 'autofocus', attribute: true }], target: i0.ɵɵFactoryTarget.Component });
740
- SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SelectComponent, selector: "saipos-select", inputs: { bindLabel: "bindLabel", bindValue: "bindValue", placeholder: "placeholder", dropdownPosition: "dropdownPosition", clearable: "clearable", selectOnTab: "selectOnTab", searchable: "searchable", notFoundText: "notFoundText", appendTo: "appendTo", multiple: "multiple", showCheckbox: "showCheckbox", loading: "loading", typeahead: "typeahead", typeToSearchText: "typeToSearchText", items: "items" }, host: { properties: { "class.saipos-select": "this.hostClass" } }, providers: [
835
+ SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SelectComponent, selector: "saipos-select", inputs: { bindLabel: "bindLabel", bindValue: "bindValue", placeholder: "placeholder", dropdownPosition: "dropdownPosition", clearable: "clearable", selectOnTab: "selectOnTab", searchable: "searchable", notFoundText: "notFoundText", appendTo: "appendTo", multiple: "multiple", showCheckbox: "showCheckbox", loading: "loading", typeahead: "typeahead", typeToSearchText: "typeToSearchText", showSelectedQuantity: "showSelectedQuantity", singularLabel: "singularLabel", pluralLabel: "pluralLabel", items: "items" }, host: { properties: { "class.saipos-select": "this.hostClass" } }, providers: [
741
836
  {
742
837
  provide: NG_VALUE_ACCESSOR,
743
838
  useExisting: forwardRef(() => SelectComponent),
744
839
  multi: true,
745
840
  },
746
- ], queries: [{ propertyName: "headerTemplate", first: true, predicate: SaiposSelectHeaderDirective, descendants: true, read: TemplateRef }, { propertyName: "optionTemplate", first: true, predicate: SaiposSelectOptionDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "ngSelect", first: true, predicate: ["select"], descendants: true }], ngImport: i0, template: "<ng-select\n #select\n [items]=\"items\"\n [searchable]=\"searchable\"\n [bindLabel]=\"bindLabel\"\n [bindValue]=\"bindValue\"\n [placeholder]=\"placeholder\"\n [dropdownPosition]=\"dropdownPosition\"\n [formControl]=\"control\"\n [clearable]=\"clearable\"\n [selectOnTab]=\"selectOnTab\"\n [notFoundText]=\"notFoundText\"\n [appendTo]=\"appendTo\"\n [multiple]=\"multiple\"\n [closeOnSelect]=\"!multiple\"\n [loading]=\"loading\"\n [typeahead]=\"typeahead\"\n [typeToSearchText]=\"typeToSearchText\"\n (blur)=\"onBlur()\"\n>\n <div *ngIf=\"headerTemplate\">\n <ng-template ng-header-tmp>\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"></ng-container>\n </ng-template>\n </div>\n\n <ng-template\n *ngIf=\"optionTemplate\"\n ng-option-tmp\n let-item=\"item\"\n let-item$=\"item$\"\n let-index=\"index\"\n let-searchTerm=\"searchTerm\"\n >\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{item: item, item$: item$, index: index, searchTerm: searchTerm}\"\n ></ng-container>\n </ng-template>\n\n <div *ngIf=\"!optionTemplate && multiple && showCheckbox\">\n <ng-template\n ng-option-tmp\n let-item=\"item\"\n let-item$=\"item$\"\n let-index=\"index\"\n >\n <div class=\"form-check\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [checked]=\"item$.selected\"\n [disabled]=\"item$.disabled\"\n />\n <label class=\"form-check-label ng-option-label\"\n >{{ item$.label }}</label\n >\n </div>\n </ng-template>\n </div>\n <ng-template ng-loadingspinner-tmp>\n <div class=\"lds-ellipsis\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n </ng-template>\n <ng-template ng-notfound-tmp let-searchTerm=\"searchTerm\">\n <div class=\"ng-option disabled\">Nada encontrado para \"{{searchTerm}}\"</div>\n </ng-template>\n <ng-template ng-loadingtext-tmp let-searchTerm=\"searchTerm\">\n <div class=\"ng-option disabled\">Buscando dados para \"{{searchTerm}}\"</div>\n </ng-template>\n</ng-select>\n", styles: [""], components: [{ type: i1$1.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }], directives: [{ type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1$1.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { type: i1$1.NgLoadingSpinnerTemplateDirective, selector: "[ng-loadingspinner-tmp]" }, { type: i1$1.NgNotFoundTemplateDirective, selector: "[ng-notfound-tmp]" }, { type: i1$1.NgLoadingTextTemplateDirective, selector: "[ng-loadingtext-tmp]" }] });
841
+ ], queries: [{ propertyName: "headerTemplate", first: true, predicate: SaiposSelectHeaderDirective, descendants: true, read: TemplateRef }, { propertyName: "optionTemplate", first: true, predicate: SaiposSelectOptionDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "ngSelect", first: true, predicate: ["select"], descendants: true }], ngImport: i0, template: "<ng-select\n #select\n [items]=\"items\"\n [searchable]=\"searchable\"\n [bindLabel]=\"bindLabel\"\n [bindValue]=\"bindValue\"\n [placeholder]=\"placeholder\"\n [dropdownPosition]=\"dropdownPosition\"\n [formControl]=\"control\"\n [clearable]=\"clearable\"\n [selectOnTab]=\"selectOnTab\"\n [notFoundText]=\"notFoundText\"\n [appendTo]=\"appendTo\"\n [multiple]=\"multiple\"\n [closeOnSelect]=\"!multiple\"\n [loading]=\"loading\"\n [typeahead]=\"typeahead\"\n [typeToSearchText]=\"typeToSearchText\"\n (search)=\"onSearch($event)\"\n (clear)=\"onClear()\"\n (blur)=\"onBlur()\"\n>\n <div *ngIf=\"headerTemplate\">\n <ng-template ng-header-tmp>\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"></ng-container>\n </ng-template>\n </div>\n\n <ng-template\n *ngIf=\"optionTemplate\"\n ng-option-tmp\n let-item=\"item\"\n let-item$=\"item$\"\n let-index=\"index\"\n let-searchTerm=\"searchTerm\"\n >\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{item: item, item$: item$, index: index, searchTerm: searchTerm}\"\n ></ng-container>\n </ng-template>\n\n <div *ngIf=\"showSelectedQuantity && showCheckbox\">\n <ng-template ng-multi-label-tmp let-items=\"items\">\n <span class=\"label-text\" *ngIf=\"!isSearching\"> {{ placeholder }} </span>\n </ng-template>\n </div>\n\n <div *ngIf=\"!optionTemplate && multiple && showCheckbox\">\n <ng-template\n ng-option-tmp\n let-item=\"item\"\n let-item$=\"item$\"\n let-index=\"index\"\n >\n <div class=\"form-check\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [checked]=\"item$.selected\"\n [disabled]=\"item$.disabled\"\n />\n <label class=\"form-check-label ng-option-label\"\n >{{ item$.label }}</label\n >\n </div>\n </ng-template>\n </div>\n <ng-template ng-loadingspinner-tmp>\n <div class=\"lds-ellipsis\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n </ng-template>\n <ng-template ng-notfound-tmp let-searchTerm=\"searchTerm\">\n <div class=\"ng-option disabled\">Nada encontrado para \"{{searchTerm}}\"</div>\n </ng-template>\n <ng-template ng-loadingtext-tmp let-searchTerm=\"searchTerm\">\n <div class=\"ng-option disabled\">Buscando dados para \"{{searchTerm}}\"</div>\n </ng-template>\n</ng-select>\n", styles: [""], components: [{ type: i1$1.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }], directives: [{ type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1$1.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { type: i1$1.NgMultiLabelTemplateDirective, selector: "[ng-multi-label-tmp]" }, { type: i1$1.NgLoadingSpinnerTemplateDirective, selector: "[ng-loadingspinner-tmp]" }, { type: i1$1.NgNotFoundTemplateDirective, selector: "[ng-notfound-tmp]" }, { type: i1$1.NgLoadingTextTemplateDirective, selector: "[ng-loadingtext-tmp]" }] });
747
842
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SelectComponent, decorators: [{
748
843
  type: Component,
749
844
  args: [{ selector: 'saipos-select', providers: [
@@ -752,7 +847,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
752
847
  useExisting: forwardRef(() => SelectComponent),
753
848
  multi: true,
754
849
  },
755
- ], template: "<ng-select\n #select\n [items]=\"items\"\n [searchable]=\"searchable\"\n [bindLabel]=\"bindLabel\"\n [bindValue]=\"bindValue\"\n [placeholder]=\"placeholder\"\n [dropdownPosition]=\"dropdownPosition\"\n [formControl]=\"control\"\n [clearable]=\"clearable\"\n [selectOnTab]=\"selectOnTab\"\n [notFoundText]=\"notFoundText\"\n [appendTo]=\"appendTo\"\n [multiple]=\"multiple\"\n [closeOnSelect]=\"!multiple\"\n [loading]=\"loading\"\n [typeahead]=\"typeahead\"\n [typeToSearchText]=\"typeToSearchText\"\n (blur)=\"onBlur()\"\n>\n <div *ngIf=\"headerTemplate\">\n <ng-template ng-header-tmp>\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"></ng-container>\n </ng-template>\n </div>\n\n <ng-template\n *ngIf=\"optionTemplate\"\n ng-option-tmp\n let-item=\"item\"\n let-item$=\"item$\"\n let-index=\"index\"\n let-searchTerm=\"searchTerm\"\n >\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{item: item, item$: item$, index: index, searchTerm: searchTerm}\"\n ></ng-container>\n </ng-template>\n\n <div *ngIf=\"!optionTemplate && multiple && showCheckbox\">\n <ng-template\n ng-option-tmp\n let-item=\"item\"\n let-item$=\"item$\"\n let-index=\"index\"\n >\n <div class=\"form-check\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [checked]=\"item$.selected\"\n [disabled]=\"item$.disabled\"\n />\n <label class=\"form-check-label ng-option-label\"\n >{{ item$.label }}</label\n >\n </div>\n </ng-template>\n </div>\n <ng-template ng-loadingspinner-tmp>\n <div class=\"lds-ellipsis\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n </ng-template>\n <ng-template ng-notfound-tmp let-searchTerm=\"searchTerm\">\n <div class=\"ng-option disabled\">Nada encontrado para \"{{searchTerm}}\"</div>\n </ng-template>\n <ng-template ng-loadingtext-tmp let-searchTerm=\"searchTerm\">\n <div class=\"ng-option disabled\">Buscando dados para \"{{searchTerm}}\"</div>\n </ng-template>\n</ng-select>\n", styles: [""] }]
850
+ ], template: "<ng-select\n #select\n [items]=\"items\"\n [searchable]=\"searchable\"\n [bindLabel]=\"bindLabel\"\n [bindValue]=\"bindValue\"\n [placeholder]=\"placeholder\"\n [dropdownPosition]=\"dropdownPosition\"\n [formControl]=\"control\"\n [clearable]=\"clearable\"\n [selectOnTab]=\"selectOnTab\"\n [notFoundText]=\"notFoundText\"\n [appendTo]=\"appendTo\"\n [multiple]=\"multiple\"\n [closeOnSelect]=\"!multiple\"\n [loading]=\"loading\"\n [typeahead]=\"typeahead\"\n [typeToSearchText]=\"typeToSearchText\"\n (search)=\"onSearch($event)\"\n (clear)=\"onClear()\"\n (blur)=\"onBlur()\"\n>\n <div *ngIf=\"headerTemplate\">\n <ng-template ng-header-tmp>\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"></ng-container>\n </ng-template>\n </div>\n\n <ng-template\n *ngIf=\"optionTemplate\"\n ng-option-tmp\n let-item=\"item\"\n let-item$=\"item$\"\n let-index=\"index\"\n let-searchTerm=\"searchTerm\"\n >\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{item: item, item$: item$, index: index, searchTerm: searchTerm}\"\n ></ng-container>\n </ng-template>\n\n <div *ngIf=\"showSelectedQuantity && showCheckbox\">\n <ng-template ng-multi-label-tmp let-items=\"items\">\n <span class=\"label-text\" *ngIf=\"!isSearching\"> {{ placeholder }} </span>\n </ng-template>\n </div>\n\n <div *ngIf=\"!optionTemplate && multiple && showCheckbox\">\n <ng-template\n ng-option-tmp\n let-item=\"item\"\n let-item$=\"item$\"\n let-index=\"index\"\n >\n <div class=\"form-check\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [checked]=\"item$.selected\"\n [disabled]=\"item$.disabled\"\n />\n <label class=\"form-check-label ng-option-label\"\n >{{ item$.label }}</label\n >\n </div>\n </ng-template>\n </div>\n <ng-template ng-loadingspinner-tmp>\n <div class=\"lds-ellipsis\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n </ng-template>\n <ng-template ng-notfound-tmp let-searchTerm=\"searchTerm\">\n <div class=\"ng-option disabled\">Nada encontrado para \"{{searchTerm}}\"</div>\n </ng-template>\n <ng-template ng-loadingtext-tmp let-searchTerm=\"searchTerm\">\n <div class=\"ng-option disabled\">Buscando dados para \"{{searchTerm}}\"</div>\n </ng-template>\n</ng-select>\n", styles: [""] }]
756
851
  }], ctorParameters: function () {
757
852
  return [{ type: undefined, decorators: [{
758
853
  type: Attribute,
@@ -786,6 +881,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
786
881
  type: Input
787
882
  }], typeToSearchText: [{
788
883
  type: Input
884
+ }], showSelectedQuantity: [{
885
+ type: Input
886
+ }], singularLabel: [{
887
+ type: Input
888
+ }], pluralLabel: [{
889
+ type: Input
789
890
  }], ngSelect: [{
790
891
  type: ViewChild,
791
892
  args: ['select']