@tetacom/ng-components 1.1.5 → 1.1.7

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.
@@ -16,6 +16,8 @@ import * as i8 from "../../icon/icon/icon.component";
16
16
  import * as i9 from "../../../directive/highlight/highlight.directive";
17
17
  import * as i10 from "../../input/text-field/text-field.component";
18
18
  import * as i11 from "../../../directive/let/let.directive";
19
+ import * as i12 from "../../../directive/scrollable/scrollable.directive";
20
+ import * as i13 from "../../../directive/scrollable/scrollable/scrollable.component";
19
21
  export class SelectComponent {
20
22
  _cdr;
21
23
  _elementRef;
@@ -210,7 +212,7 @@ export class SelectComponent {
210
212
  useExisting: forwardRef(() => SelectComponent),
211
213
  multi: true,
212
214
  },
213
- ], queries: [{ propertyName: "optionDirective", first: true, predicate: SelectOptionDirective, descendants: true, static: true }, { propertyName: "valueDirective", first: true, predicate: SelectValueDirective, descendants: true, static: true }], ngImport: i0, template: "<ng-container *tetaLet=\"locale | async as loc\">\n <teta-dropdown [align]=\"align\"\n [verticalAlign]=\"verticalAlign\"\n [autoClose]=\"autoClose\"\n [autoCloseIgnore]=\"autoCloseIgnore\"\n [(open)]=\"open\"\n [appendToBody]=\"appendToBody\"\n [disabled]=\"disabled\"\n [viewType]=\"viewType\"\n class=\"row row_auto\">\n <div tetaDropdownHead\n [class]=\"'row row_auto select-head select_'+viewType\"\n [class.select-head_invalid]=\"invalid\">\n <div class=\"row_auto flex align-center\">\n <teta-icon *ngIf=\"icon\" [name]=\"icon\" class=\"margin-right-1\"></teta-icon>\n <span class=\"placeholder\" *ngIf=\"(value == null || value?.length === 0)&&!multiple\">\n {{placeholder || loc.notSelected}}\n </span>\n <ng-container\n *ngTemplateOutlet=\"valueDirective ? valueDirective.template : valueDefault; context: {$implicit: value, value: value}\"></ng-container>\n </div>\n <teta-icon [name]=\"'arrowDownSmall'\"></teta-icon>\n </div>\n <div *ngIf=\"options?.length\" tetaDropdownContent class=\"select-body scrollable row_auto margin-h-2\"\n (click)=\"$event.preventDefault()\">\n <ng-container *ngIf=\"searchRef\">\n <div class=\"select-search\">\n <teta-text-field [ngModel]=\"searchText\"\n [class]=\"'select_'+viewType\"\n (ngModelChange)=\"search($event)\"\n [placeholder]=\"loc.search\"\n [leftIconName]=\"'search'\"></teta-text-field>\n </div>\n </ng-container>\n <ng-container *ngIf=\"visibleOptions?.length;else notFound \">\n <ng-container *ngIf=\"!multiple && allowNull\">\n <div [class]=\"'list-item list-item_interactive select_'+viewType\"\n (click)=\"clear()\">\n {{loc.notSelected}}\n </div>\n <div class=\"list-divider margin-bottom-0\"></div>\n </ng-container>\n <ng-container *ngIf=\"!virtual\">\n <div class=\"select-list\">\n <div [class]=\"'list-item list-item_interactive justify-content-between select_'+viewType\"\n *ngFor=\"let option of visibleOptions\"\n [class.select-list-item_active]=\"itemSelected(option) && multiple\"\n [class.select-list-item]=\"multiple\"\n (click)=\"clickOption(option, $event)\">\n\n <span [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </span>\n <teta-icon *ngIf=\"itemSelected(option) && multiple\" [name]=\"'tick'\" [palette]=\"'text'\"></teta-icon>\n </div>\n </div>\n </ng-container>\n <cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n [itemSize]=\"40\"\n minBufferPx=\"200\"\n maxBufferPx=\"600\">\n <div [class]=\"'select-list-item select-list-item_interactive justify-content-between select_'+viewType\"\n *cdkVirtualFor=\"let option of visibleOptions; templateCacheSize: 0;\"\n [class.select-list-item_active]=\"itemSelected(option)\"\n [tetaHighlight]=\"searchText\"\n (click)=\"clickOption(option, $event)\">\n <div [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </div>\n <teta-icon *ngIf=\"itemSelected(option)\" [name]=\"'tick'\" [palette]=\"'text'\"\n class=\"margin-left-2\"></teta-icon>\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-container>\n <div class=\"row row_auto select-chip-field flex-wrap\" *ngIf=\"multiple && value?.length\">\n <div *ngFor=\"let item of value\" class=\"tag\">\n {{getText(item)}}\n <teta-icon class=\"cursor-pointer\" [name]=\"'closeCircle'\" (click)=\"removeItemClick(item, $event)\"></teta-icon>\n </div>\n </div>\n\n </div>\n </teta-dropdown>\n <ng-template #notFound>\n <p\n class=\"padding-h-3 text-overflow-ellipsis overflow-hidden select-not-found-option\">{{notFoundText || loc.notFound}}</p>\n </ng-template>\n <ng-template #optionDefault let-option>\n {{getText(option)}}\n </ng-template>\n <ng-template #valueDefault let-value>\n <div class=\"row_auto overflow-hidden text-overflow-ellipsis\" *ngIf=\"multiple\">\n {{loc.selected + ' ' + value?.length}}\n </div>\n <ng-container *ngIf=\"!multiple\">\n <span class=\"row row_auto overflow-hidden text-overflow-ellipsis\">{{getText(value)}}</span>\n </ng-container>\n </ng-template>\n</ng-container>\n\n", styles: [""], dependencies: [{ kind: "component", type: i2.DropdownComponent, selector: "teta-dropdown", exportAs: ["dropdown"] }, { kind: "directive", type: i3.DropdownHeadDirective, selector: "[tetaDropdownHead]" }, { kind: "directive", type: i4.DropdownContentDirective, selector: "[tetaDropdownContent]" }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i6.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i6.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "directive", type: i9.HighlightDirective, selector: "[tetaHighlight]", inputs: ["tetaHighlight"] }, { kind: "component", type: i10.TextFieldComponent, selector: "teta-text-field", inputs: ["placeholder", "leftIconName", "disabled", "onlyNumber", "decimalPart", "invalid"] }, { kind: "directive", type: i11.LetDirective, selector: "[tetaLet]", inputs: ["tetaLet"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
215
+ ], queries: [{ propertyName: "optionDirective", first: true, predicate: SelectOptionDirective, descendants: true, static: true }, { propertyName: "valueDirective", first: true, predicate: SelectValueDirective, descendants: true, static: true }], ngImport: i0, template: "<ng-container *tetaLet=\"locale | async as loc\">\n <teta-dropdown [align]=\"align\"\n [verticalAlign]=\"verticalAlign\"\n [autoClose]=\"autoClose\"\n [autoCloseIgnore]=\"autoCloseIgnore\"\n [(open)]=\"open\"\n [appendToBody]=\"appendToBody\"\n [disabled]=\"disabled\"\n [viewType]=\"viewType\"\n class=\"row row_auto\">\n <div tetaDropdownHead\n [class]=\"'row row_auto select-head select_'+viewType\"\n [class.select-head_invalid]=\"invalid\">\n <div class=\"row_auto flex align-center\">\n <teta-icon *ngIf=\"icon\" [name]=\"icon\" class=\"margin-right-1\"></teta-icon>\n <span class=\"placeholder\" *ngIf=\"(value == null || value?.length === 0)&&!multiple\">\n {{placeholder || loc.notSelected}}\n </span>\n <ng-container\n *ngTemplateOutlet=\"valueDirective ? valueDirective.template : valueDefault; context: {$implicit: value, value: value}\"></ng-container>\n </div>\n <teta-icon [name]=\"'arrowDownSmall'\"></teta-icon>\n </div>\n <div *ngIf=\"options?.length\" tetaDropdownContent class=\"select-body row_auto\"\n (click)=\"$event.preventDefault()\">\n <ng-container *ngIf=\"searchRef\">\n <div class=\"select-search padding-h-2\">\n <teta-text-field [ngModel]=\"searchText\"\n [class]=\"'select_'+viewType\"\n (ngModelChange)=\"search($event)\"\n [placeholder]=\"loc.search\"\n [leftIconName]=\"'search'\"></teta-text-field>\n </div>\n </ng-container>\n <ng-container *ngIf=\"visibleOptions?.length;else notFound \">\n <ng-container *ngIf=\"!multiple && allowNull\">\n <div [class]=\"'margin-h-2 list-item list-item_interactive select_'+viewType\"\n (click)=\"clear()\">\n {{loc.notSelected}}\n </div>\n <div class=\"list-divider margin-bottom-0\"></div>\n </ng-container>\n <teta-scrollable *ngIf=\"virtual; else default\" class=\"column column_auto padding-h-2\">\n <cdk-virtual-scroll-viewport tetaScrollable\n [itemSize]=\"40\"\n minBufferPx=\"200\"\n maxBufferPx=\"600\">\n <div [class]=\"'select-list-item select-list-item_interactive justify-content-between select_'+viewType\"\n *cdkVirtualFor=\"let option of visibleOptions; templateCacheSize: 0;\"\n [class.select-list-item_active]=\"itemSelected(option)\"\n [tetaHighlight]=\"searchText\"\n (click)=\"clickOption(option, $event)\">\n <div [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </div>\n <teta-icon *ngIf=\"itemSelected(option)\" [name]=\"'tick'\" [palette]=\"'text'\"\n class=\"margin-left-2\"></teta-icon>\n </div>\n </cdk-virtual-scroll-viewport>\n </teta-scrollable>\n <ng-template #default>\n <teta-scrollable class=\"column column_auto padding-h-2\" [contentClass]=\"['column', 'column_auto']\">\n <div class=\"select-list\">\n <div [class]=\"'list-item list-item_interactive justify-content-between select_'+viewType\"\n *ngFor=\"let option of visibleOptions\"\n [class.select-list-item_active]=\"itemSelected(option) && multiple\"\n [class.select-list-item]=\"multiple\"\n (click)=\"clickOption(option, $event)\">\n <span [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </span>\n <teta-icon *ngIf=\"itemSelected(option) && multiple\" [name]=\"'tick'\" [palette]=\"'text'\"></teta-icon>\n </div>\n </div>\n </teta-scrollable>\n </ng-template>\n </ng-container>\n <div class=\"row row_auto select-chip-field flex-wrap\" *ngIf=\"multiple && value?.length\">\n <div *ngFor=\"let item of value\" class=\"tag\">\n {{getText(item)}}\n <teta-icon class=\"cursor-pointer\" [name]=\"'closeCircle'\" (click)=\"removeItemClick(item, $event)\"></teta-icon>\n </div>\n </div>\n </div>\n </teta-dropdown>\n <ng-template #notFound>\n <p\n class=\"padding-h-3 text-overflow-ellipsis overflow-hidden select-not-found-option\">{{notFoundText || loc.notFound}}</p>\n </ng-template>\n <ng-template #optionDefault let-option>\n {{getText(option)}}\n </ng-template>\n <ng-template #valueDefault let-value>\n <div class=\"row_auto overflow-hidden text-overflow-ellipsis\" *ngIf=\"multiple\">\n {{loc.selected + ' ' + value?.length}}\n </div>\n <ng-container *ngIf=\"!multiple\">\n <span class=\"row row_auto overflow-hidden text-overflow-ellipsis\">{{getText(value)}}</span>\n </ng-container>\n </ng-template>\n</ng-container>\n\n", styles: [""], dependencies: [{ kind: "component", type: i2.DropdownComponent, selector: "teta-dropdown", exportAs: ["dropdown"] }, { kind: "directive", type: i3.DropdownHeadDirective, selector: "[tetaDropdownHead]" }, { kind: "directive", type: i4.DropdownContentDirective, selector: "[tetaDropdownContent]" }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i6.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i6.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "directive", type: i9.HighlightDirective, selector: "[tetaHighlight]", inputs: ["tetaHighlight"] }, { kind: "component", type: i10.TextFieldComponent, selector: "teta-text-field", inputs: ["placeholder", "leftIconName", "disabled", "onlyNumber", "decimalPart", "invalid"] }, { kind: "directive", type: i11.LetDirective, selector: "[tetaLet]", inputs: ["tetaLet"] }, { kind: "directive", type: i12.ScrollableDirective, selector: "[tetaScrollable]" }, { kind: "component", type: i13.ScrollableComponent, selector: "teta-scrollable", inputs: ["direction", "showScrollbars", "contentClass"], outputs: ["scroll"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
214
216
  }
215
217
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SelectComponent, decorators: [{
216
218
  type: Component,
@@ -220,7 +222,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
220
222
  useExisting: forwardRef(() => SelectComponent),
221
223
  multi: true,
222
224
  },
223
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *tetaLet=\"locale | async as loc\">\n <teta-dropdown [align]=\"align\"\n [verticalAlign]=\"verticalAlign\"\n [autoClose]=\"autoClose\"\n [autoCloseIgnore]=\"autoCloseIgnore\"\n [(open)]=\"open\"\n [appendToBody]=\"appendToBody\"\n [disabled]=\"disabled\"\n [viewType]=\"viewType\"\n class=\"row row_auto\">\n <div tetaDropdownHead\n [class]=\"'row row_auto select-head select_'+viewType\"\n [class.select-head_invalid]=\"invalid\">\n <div class=\"row_auto flex align-center\">\n <teta-icon *ngIf=\"icon\" [name]=\"icon\" class=\"margin-right-1\"></teta-icon>\n <span class=\"placeholder\" *ngIf=\"(value == null || value?.length === 0)&&!multiple\">\n {{placeholder || loc.notSelected}}\n </span>\n <ng-container\n *ngTemplateOutlet=\"valueDirective ? valueDirective.template : valueDefault; context: {$implicit: value, value: value}\"></ng-container>\n </div>\n <teta-icon [name]=\"'arrowDownSmall'\"></teta-icon>\n </div>\n <div *ngIf=\"options?.length\" tetaDropdownContent class=\"select-body scrollable row_auto margin-h-2\"\n (click)=\"$event.preventDefault()\">\n <ng-container *ngIf=\"searchRef\">\n <div class=\"select-search\">\n <teta-text-field [ngModel]=\"searchText\"\n [class]=\"'select_'+viewType\"\n (ngModelChange)=\"search($event)\"\n [placeholder]=\"loc.search\"\n [leftIconName]=\"'search'\"></teta-text-field>\n </div>\n </ng-container>\n <ng-container *ngIf=\"visibleOptions?.length;else notFound \">\n <ng-container *ngIf=\"!multiple && allowNull\">\n <div [class]=\"'list-item list-item_interactive select_'+viewType\"\n (click)=\"clear()\">\n {{loc.notSelected}}\n </div>\n <div class=\"list-divider margin-bottom-0\"></div>\n </ng-container>\n <ng-container *ngIf=\"!virtual\">\n <div class=\"select-list\">\n <div [class]=\"'list-item list-item_interactive justify-content-between select_'+viewType\"\n *ngFor=\"let option of visibleOptions\"\n [class.select-list-item_active]=\"itemSelected(option) && multiple\"\n [class.select-list-item]=\"multiple\"\n (click)=\"clickOption(option, $event)\">\n\n <span [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </span>\n <teta-icon *ngIf=\"itemSelected(option) && multiple\" [name]=\"'tick'\" [palette]=\"'text'\"></teta-icon>\n </div>\n </div>\n </ng-container>\n <cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n [itemSize]=\"40\"\n minBufferPx=\"200\"\n maxBufferPx=\"600\">\n <div [class]=\"'select-list-item select-list-item_interactive justify-content-between select_'+viewType\"\n *cdkVirtualFor=\"let option of visibleOptions; templateCacheSize: 0;\"\n [class.select-list-item_active]=\"itemSelected(option)\"\n [tetaHighlight]=\"searchText\"\n (click)=\"clickOption(option, $event)\">\n <div [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </div>\n <teta-icon *ngIf=\"itemSelected(option)\" [name]=\"'tick'\" [palette]=\"'text'\"\n class=\"margin-left-2\"></teta-icon>\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-container>\n <div class=\"row row_auto select-chip-field flex-wrap\" *ngIf=\"multiple && value?.length\">\n <div *ngFor=\"let item of value\" class=\"tag\">\n {{getText(item)}}\n <teta-icon class=\"cursor-pointer\" [name]=\"'closeCircle'\" (click)=\"removeItemClick(item, $event)\"></teta-icon>\n </div>\n </div>\n\n </div>\n </teta-dropdown>\n <ng-template #notFound>\n <p\n class=\"padding-h-3 text-overflow-ellipsis overflow-hidden select-not-found-option\">{{notFoundText || loc.notFound}}</p>\n </ng-template>\n <ng-template #optionDefault let-option>\n {{getText(option)}}\n </ng-template>\n <ng-template #valueDefault let-value>\n <div class=\"row_auto overflow-hidden text-overflow-ellipsis\" *ngIf=\"multiple\">\n {{loc.selected + ' ' + value?.length}}\n </div>\n <ng-container *ngIf=\"!multiple\">\n <span class=\"row row_auto overflow-hidden text-overflow-ellipsis\">{{getText(value)}}</span>\n </ng-container>\n </ng-template>\n</ng-container>\n\n" }]
225
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *tetaLet=\"locale | async as loc\">\n <teta-dropdown [align]=\"align\"\n [verticalAlign]=\"verticalAlign\"\n [autoClose]=\"autoClose\"\n [autoCloseIgnore]=\"autoCloseIgnore\"\n [(open)]=\"open\"\n [appendToBody]=\"appendToBody\"\n [disabled]=\"disabled\"\n [viewType]=\"viewType\"\n class=\"row row_auto\">\n <div tetaDropdownHead\n [class]=\"'row row_auto select-head select_'+viewType\"\n [class.select-head_invalid]=\"invalid\">\n <div class=\"row_auto flex align-center\">\n <teta-icon *ngIf=\"icon\" [name]=\"icon\" class=\"margin-right-1\"></teta-icon>\n <span class=\"placeholder\" *ngIf=\"(value == null || value?.length === 0)&&!multiple\">\n {{placeholder || loc.notSelected}}\n </span>\n <ng-container\n *ngTemplateOutlet=\"valueDirective ? valueDirective.template : valueDefault; context: {$implicit: value, value: value}\"></ng-container>\n </div>\n <teta-icon [name]=\"'arrowDownSmall'\"></teta-icon>\n </div>\n <div *ngIf=\"options?.length\" tetaDropdownContent class=\"select-body row_auto\"\n (click)=\"$event.preventDefault()\">\n <ng-container *ngIf=\"searchRef\">\n <div class=\"select-search padding-h-2\">\n <teta-text-field [ngModel]=\"searchText\"\n [class]=\"'select_'+viewType\"\n (ngModelChange)=\"search($event)\"\n [placeholder]=\"loc.search\"\n [leftIconName]=\"'search'\"></teta-text-field>\n </div>\n </ng-container>\n <ng-container *ngIf=\"visibleOptions?.length;else notFound \">\n <ng-container *ngIf=\"!multiple && allowNull\">\n <div [class]=\"'margin-h-2 list-item list-item_interactive select_'+viewType\"\n (click)=\"clear()\">\n {{loc.notSelected}}\n </div>\n <div class=\"list-divider margin-bottom-0\"></div>\n </ng-container>\n <teta-scrollable *ngIf=\"virtual; else default\" class=\"column column_auto padding-h-2\">\n <cdk-virtual-scroll-viewport tetaScrollable\n [itemSize]=\"40\"\n minBufferPx=\"200\"\n maxBufferPx=\"600\">\n <div [class]=\"'select-list-item select-list-item_interactive justify-content-between select_'+viewType\"\n *cdkVirtualFor=\"let option of visibleOptions; templateCacheSize: 0;\"\n [class.select-list-item_active]=\"itemSelected(option)\"\n [tetaHighlight]=\"searchText\"\n (click)=\"clickOption(option, $event)\">\n <div [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </div>\n <teta-icon *ngIf=\"itemSelected(option)\" [name]=\"'tick'\" [palette]=\"'text'\"\n class=\"margin-left-2\"></teta-icon>\n </div>\n </cdk-virtual-scroll-viewport>\n </teta-scrollable>\n <ng-template #default>\n <teta-scrollable class=\"column column_auto padding-h-2\" [contentClass]=\"['column', 'column_auto']\">\n <div class=\"select-list\">\n <div [class]=\"'list-item list-item_interactive justify-content-between select_'+viewType\"\n *ngFor=\"let option of visibleOptions\"\n [class.select-list-item_active]=\"itemSelected(option) && multiple\"\n [class.select-list-item]=\"multiple\"\n (click)=\"clickOption(option, $event)\">\n <span [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </span>\n <teta-icon *ngIf=\"itemSelected(option) && multiple\" [name]=\"'tick'\" [palette]=\"'text'\"></teta-icon>\n </div>\n </div>\n </teta-scrollable>\n </ng-template>\n </ng-container>\n <div class=\"row row_auto select-chip-field flex-wrap\" *ngIf=\"multiple && value?.length\">\n <div *ngFor=\"let item of value\" class=\"tag\">\n {{getText(item)}}\n <teta-icon class=\"cursor-pointer\" [name]=\"'closeCircle'\" (click)=\"removeItemClick(item, $event)\"></teta-icon>\n </div>\n </div>\n </div>\n </teta-dropdown>\n <ng-template #notFound>\n <p\n class=\"padding-h-3 text-overflow-ellipsis overflow-hidden select-not-found-option\">{{notFoundText || loc.notFound}}</p>\n </ng-template>\n <ng-template #optionDefault let-option>\n {{getText(option)}}\n </ng-template>\n <ng-template #valueDefault let-value>\n <div class=\"row_auto overflow-hidden text-overflow-ellipsis\" *ngIf=\"multiple\">\n {{loc.selected + ' ' + value?.length}}\n </div>\n <ng-container *ngIf=\"!multiple\">\n <span class=\"row row_auto overflow-hidden text-overflow-ellipsis\">{{getText(value)}}</span>\n </ng-container>\n </ng-template>\n</ng-container>\n\n" }]
224
226
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.TetaConfigService }]; }, propDecorators: { multiple: [{
225
227
  type: HostBinding,
226
228
  args: ['class.select_multiple']
@@ -281,4 +283,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
281
283
  type: HostBinding,
282
284
  args: ['class.select_disabled']
283
285
  }] } });
284
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvc2VsZWN0L3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC9zZWxlY3Qvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBRVosVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEdBRU4sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUV2RSxPQUFPLEVBQXVCLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFtQi9ELE1BQU0sT0FBTyxlQUFlO0lBMEVoQjtJQUNBO0lBQ0E7SUF6RVYsUUFBUSxDQUFVO0lBRWxCLElBQWEsT0FBTyxDQUFDLE9BQWM7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3JGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDNUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFUSxPQUFPLENBQVU7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QkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFHTixlQUFlO3NCQURkLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUluRCxjQUFjO3NCQURiLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUdoQixJQUFJO3NCQUFyQyxXQUFXO3VCQUFDLG1CQUFtQjtnQkFFYyxXQUFXO3NCQUF4RCxXQUFXO3VCQUFDLGNBQWM7Z0JBR2YsUUFBUTtzQkFEbkIsV0FBVzt1QkFBQyxVQUFVO2dCQU1uQixVQUFVO3NCQURiLFdBQVc7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBbGlnbn0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2VudW0vYWxpZ24uZW51bSc7XG5pbXBvcnQge1ZlcnRpY2FsQWxpZ259IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9lbnVtL3ZlcnRpY2FsLWFsaWduLmVudW0nO1xuaW1wb3J0IHtBdXRvQ2xvc2VJZ25vcmVDYXNlfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvYXV0by1jbG9zZS1pZ25vcmUtY2FzZSc7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtTZWxlY3RPcHRpb25EaXJlY3RpdmV9IGZyb20gJy4uL3NlbGVjdC1vcHRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7U2VsZWN0VmFsdWVEaXJlY3RpdmV9IGZyb20gJy4uL3NlbGVjdC12YWx1ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtUZXRhQ29uZmlnU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL2xvY2FsZS90ZXRhLWNvbmZpZy5zZXJ2aWNlXCI7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge1RldGFMb2NhbGlzYXRpb259IGZyb20gXCIuLi8uLi8uLi9sb2NhbGUvdGV0YS1sb2NhbGlzYXRpb25cIjtcbmltcG9ydCB7dmlld1R5cGV9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vbW9kZWwvdmlldy10eXBlLm1vZGVsXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlbGVjdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2VsZWN0X211bHRpcGxlJylcbiAgQElucHV0KClcbiAgbXVsdGlwbGU6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgc2V0IG9wdGlvbnMob3B0aW9uczogYW55W10pIHtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgICBpZiAodGhpcy5faW50ZXJuYWxWYWx1ZSAhPT0gbnVsbCAmJiB0aGlzLl9pbnRlcm5hbFZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5vcHRpb25zKSB7XG4gICAgICB0aGlzLmdldFNlbGVjdGVkVmFsdWUodGhpcy5faW50ZXJuYWxWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICBASW5wdXQoKSBpbnZhbGlkOiBib29sZWFuO1xuICBASW5wdXQoKSBhbGlnbjogQWxpZ24gPSBBbGlnbi5taW5XaWR0aDtcbiAgQElucHV0KCkgdmVydGljYWxBbGlnbjogVmVydGljYWxBbGlnbiA9IFZlcnRpY2FsQWxpZ24uYXV0bztcbiAgQElucHV0KCkgYXV0b0Nsb3NlID0gdHJ1ZTtcbiAgQElucHV0KCkgYXV0b0Nsb3NlSWdub3JlOiBBcnJheTxBdXRvQ2xvc2VJZ25vcmVDYXNlPiA9IFsnaW5zaWRlJ107XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKSBpdGVtU2l6ZSA9IDMyO1xuICBASW5wdXQoKSB2aXJ0dWFsOiBib29sZWFuO1xuICBASW5wdXQoKSBpY29uOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFwcGVuZFRvQm9keTogYm9vbGVhbjtcbiAgQElucHV0KCkgYWxsb3dOdWxsID0gdHJ1ZTtcbiAgQElucHV0KCkgdmlld1R5cGU6IHZpZXdUeXBlID0gJ3JvdW5kZWQnO1xuICBASW5wdXQoKSBub3RGb3VuZFRleHQ6IHN0cmluZztcbiAgQElucHV0KCkgdmFsdWVSZWY6ICgoaXRlbTogYW55KSA9PiBhbnkpIHwgc3RyaW5nO1xuICBASW5wdXQoKSB0ZXh0UmVmOiAoKGl0ZW06IGFueSkgPT4gc3RyaW5nKSB8IHN0cmluZztcbiAgQElucHV0KCkgc2VhcmNoUmVmOiBzdHJpbmcgfCAoKGl0ZW06IGFueSkgPT4gc3RyaW5nKTtcblxuICBAQ29udGVudENoaWxkKFNlbGVjdE9wdGlvbkRpcmVjdGl2ZSwge3N0YXRpYzogdHJ1ZX0pXG4gIG9wdGlvbkRpcmVjdGl2ZTogU2VsZWN0T3B0aW9uRGlyZWN0aXZlO1xuXG4gIEBDb250ZW50Q2hpbGQoU2VsZWN0VmFsdWVEaXJlY3RpdmUsIHtzdGF0aWM6IHRydWV9KVxuICB2YWx1ZURpcmVjdGl2ZTogU2VsZWN0VmFsdWVEaXJlY3RpdmU7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZWxlY3Rfb3BlbicpIG9wZW4gPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNlbGVjdCcpIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0Q2xhc3MgPSB0cnVlO1xuXG4gIEBIb3N0QmluZGluZygndGFiaW5kZXgnKVxuICBwcml2YXRlIGdldCB0YWJpbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCA/IG51bGwgOiAwO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZWxlY3RfZGlzYWJsZWQnKVxuICBnZXQgaXNEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZDtcbiAgfVxuXG4gIHZhbHVlOiBhbnkgfCBhbnlbXTtcbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuICBsb2NhbGU6IE9ic2VydmFibGU8VGV0YUxvY2FsaXNhdGlvbj47XG5cbiAgZ2V0IHZpc2libGVPcHRpb25zKCk6IGFueVtdIHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoVGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucz8uZmlsdGVyKFxuICAgICAgKG9wdGlvbikgPT5cbiAgICAgICAgdGhpcy5nZXRTZWFyY2hTdHJpbmcob3B0aW9uKVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgLmluZGV4T2YodGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpID49IDBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfb3B0aW9uczogYW55IHwgYW55W107XG4gIHByaXZhdGUgX2ludGVybmFsVmFsdWU6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfY29uZmlnOiBUZXRhQ29uZmlnU2VydmljZVxuICApIHtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuX2NvbmZpZy5sb2NhbGVcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIGxldCB2YWw6IGFueTtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSA9PT0gdHJ1ZSkge1xuICAgICAgdmFsID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGNsaWNrT3B0aW9uKG9wdGlvbjogYW55LCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm11bHRpcGxlID09PSB0cnVlKSB7XG4gICAgICBpZiAoIXRoaXMudmFsdWU/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gW107XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52YWx1ZS5pbmRleE9mKG9wdGlvbikgPj0gMCkge1xuICAgICAgICB0aGlzLnJlbW92ZUl0ZW0ob3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBbLi4udGhpcy52YWx1ZSwgb3B0aW9uXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2ludGVybmFsVmFsdWUgPSB0aGlzLnZhbHVlLm1hcCgoXykgPT4gdGhpcy5nZXRWYWx1ZShfKSlcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5faW50ZXJuYWxWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSBvcHRpb247XG4gICAgICB0aGlzLl9pbnRlcm5hbFZhbHVlID0gdGhpcy5nZXRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5faW50ZXJuYWxWYWx1ZSk7XG4gICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBpdGVtU2VsZWN0ZWQob3B0aW9uOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWU/LmluZGV4T2Yob3B0aW9uKSA+PSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gb3B0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUl0ZW1DbGljayhvcHRpb246IGFueSwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnJlbW92ZUl0ZW0ob3B0aW9uKTtcbiAgICB0aGlzLl9pbnRlcm5hbFZhbHVlID0gdGhpcy52YWx1ZS5tYXAoKF8pID0+IHRoaXMuZ2V0VmFsdWUoXykpXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9pbnRlcm5hbFZhbHVlKTtcbiAgfVxuXG4gIHJlbW92ZUl0ZW0ob3B0aW9uOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5maWx0ZXIoKF8pID0+IF8gIT09IG9wdGlvbik7XG4gIH1cblxuICBzZWFyY2godGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gdGV4dDtcbiAgfVxuXG4gIGdldFRleHQob3B0aW9uOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmIChvcHRpb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBzd2l0Y2ggKHR5cGVvZiB0aGlzLnRleHRSZWYpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiBvcHRpb25bdGhpcy50ZXh0UmVmXTtcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dFJlZihvcHRpb24pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9XG4gIH1cblxuICBnZXRWYWx1ZShvcHRpb246IGFueSk6IGFueSB7XG4gICAgc3dpdGNoICh0eXBlb2YgdGhpcy52YWx1ZVJlZikge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIG9wdGlvblt0aGlzLnZhbHVlUmVmXTtcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVSZWYob3B0aW9uKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBvcHRpb247XG4gICAgfVxuICB9XG5cbiAgZ2V0U2VhcmNoU3RyaW5nKG9wdGlvbjogYW55KTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiB0aGlzLnNlYXJjaFJlZikge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIG9wdGlvblt0aGlzLnNlYXJjaFJlZl07XG4gICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaFJlZihvcHRpb24pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkgfCBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuX2ludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmdldFNlbGVjdGVkVmFsdWUodmFsdWUpXG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHtcbiAgfTtcblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIG9uVG91Y2hlZCA9ICgpID0+IHtcbiAgfTtcblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZFZhbHVlKHZhbHVlOiBhbnkgfCBhbnlbXSkge1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLnZhbHVlID1cbiAgICAgICAgdmFsdWUgJiYgdGhpcy5vcHRpb25zXG4gICAgICAgICAgPyB0aGlzLm9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgKG9wdGlvbikgPT4gdmFsdWUuaW5kZXhPZih0aGlzLmdldFZhbHVlKG9wdGlvbikpID4gLTFcbiAgICAgICAgICApXG4gICAgICAgICAgOiBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9XG4gICAgICAgIHRoaXMub3B0aW9ucyAmJlxuICAgICAgICB0aGlzLm9wdGlvbnM/LmZpbmQoKG9wdGlvbikgPT4gdGhpcy5nZXRWYWx1ZShvcHRpb24pID09PSB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyICp0ZXRhTGV0PVwibG9jYWxlIHwgYXN5bmMgYXMgbG9jXCI+XG4gIDx0ZXRhLWRyb3Bkb3duIFthbGlnbl09XCJhbGlnblwiXG4gICAgICAgICAgICAgICAgIFt2ZXJ0aWNhbEFsaWduXT1cInZlcnRpY2FsQWxpZ25cIlxuICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cImF1dG9DbG9zZVwiXG4gICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VJZ25vcmVdPVwiYXV0b0Nsb3NlSWdub3JlXCJcbiAgICAgICAgICAgICAgICAgWyhvcGVuKV09XCJvcGVuXCJcbiAgICAgICAgICAgICAgICAgW2FwcGVuZFRvQm9keV09XCJhcHBlbmRUb0JvZHlcIlxuICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICBbdmlld1R5cGVdPVwidmlld1R5cGVcIlxuICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdyByb3dfYXV0b1wiPlxuICAgIDxkaXYgdGV0YURyb3Bkb3duSGVhZFxuICAgICAgICAgW2NsYXNzXT1cIidyb3cgcm93X2F1dG8gc2VsZWN0LWhlYWQgc2VsZWN0Xycrdmlld1R5cGVcIlxuICAgICAgICAgW2NsYXNzLnNlbGVjdC1oZWFkX2ludmFsaWRdPVwiaW52YWxpZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvd19hdXRvIGZsZXggYWxpZ24tY2VudGVyXCI+XG4gICAgICAgIDx0ZXRhLWljb24gKm5nSWY9XCJpY29uXCIgW25hbWVdPVwiaWNvblwiIGNsYXNzPVwibWFyZ2luLXJpZ2h0LTFcIj48L3RldGEtaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwbGFjZWhvbGRlclwiICpuZ0lmPVwiKHZhbHVlID09IG51bGwgfHwgdmFsdWU/Lmxlbmd0aCA9PT0gMCkmJiFtdWx0aXBsZVwiPlxuICAgICAgICAgIHt7cGxhY2Vob2xkZXIgfHwgbG9jLm5vdFNlbGVjdGVkfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2YWx1ZURpcmVjdGl2ZSA/IHZhbHVlRGlyZWN0aXZlLnRlbXBsYXRlIDogdmFsdWVEZWZhdWx0OyBjb250ZXh0OiB7JGltcGxpY2l0OiB2YWx1ZSwgdmFsdWU6IHZhbHVlfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8dGV0YS1pY29uIFtuYW1lXT1cIidhcnJvd0Rvd25TbWFsbCdcIj48L3RldGEtaWNvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwib3B0aW9ucz8ubGVuZ3RoXCIgdGV0YURyb3Bkb3duQ29udGVudCBjbGFzcz1cInNlbGVjdC1ib2R5IHNjcm9sbGFibGUgcm93X2F1dG8gbWFyZ2luLWgtMlwiXG4gICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hSZWZcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC1zZWFyY2hcIj5cbiAgICAgICAgICA8dGV0YS10ZXh0LWZpZWxkIFtuZ01vZGVsXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIidzZWxlY3RfJyt2aWV3VHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibG9jLnNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbGVmdEljb25OYW1lXT1cIidzZWFyY2gnXCI+PC90ZXRhLXRleHQtZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmlzaWJsZU9wdGlvbnM/Lmxlbmd0aDtlbHNlIG5vdEZvdW5kIFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW11bHRpcGxlICYmIGFsbG93TnVsbFwiPlxuICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIidsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlIHNlbGVjdF8nK3ZpZXdUeXBlXCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhcigpXCI+XG4gICAgICAgICAgICB7e2xvYy5ub3RTZWxlY3RlZH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZGl2aWRlciBtYXJnaW4tYm90dG9tLTBcIj48L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdmlydHVhbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtbGlzdFwiPlxuICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ2xpc3QtaXRlbSBsaXN0LWl0ZW1faW50ZXJhY3RpdmUganVzdGlmeS1jb250ZW50LWJldHdlZW4gIHNlbGVjdF8nK3ZpZXdUeXBlXCJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiB2aXNpYmxlT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3QtbGlzdC1pdGVtX2FjdGl2ZV09XCJpdGVtU2VsZWN0ZWQob3B0aW9uKSAmJiBtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3QtbGlzdC1pdGVtXT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrT3B0aW9uKG9wdGlvbiwgJGV2ZW50KVwiPlxuXG4gICAgICAgIDxzcGFuIFt0ZXRhSGlnaGxpZ2h0XT1cInNlYXJjaFRleHRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm9wdGlvbkRpcmVjdGl2ZSA/IG9wdGlvbkRpcmVjdGl2ZS50ZW1wbGF0ZSA6IG9wdGlvbkRlZmF1bHQ7IGNvbnRleHQ6IHskaW1wbGljaXQ6IG9wdGlvbiwgb3B0aW9uOiBvcHRpb259XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHRldGEtaWNvbiAqbmdJZj1cIml0ZW1TZWxlY3RlZChvcHRpb24pICYmIG11bHRpcGxlXCIgW25hbWVdPVwiJ3RpY2snXCIgW3BhbGV0dGVdPVwiJ3RleHQnXCI+PC90ZXRhLWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgKm5nSWY9XCJ2aXJ0dWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbVNpemVdPVwiNDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkJ1ZmZlclB4PVwiMjAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCdWZmZXJQeD1cIjYwMFwiPlxuICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIidzZWxlY3QtbGlzdC1pdGVtIHNlbGVjdC1saXN0LWl0ZW1faW50ZXJhY3RpdmUganVzdGlmeS1jb250ZW50LWJldHdlZW4gc2VsZWN0Xycrdmlld1R5cGVcIlxuICAgICAgICAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgb3B0aW9uIG9mIHZpc2libGVPcHRpb25zOyB0ZW1wbGF0ZUNhY2hlU2l6ZTogMDtcIlxuICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdC1saXN0LWl0ZW1fYWN0aXZlXT1cIml0ZW1TZWxlY3RlZChvcHRpb24pXCJcbiAgICAgICAgICAgICAgIFt0ZXRhSGlnaGxpZ2h0XT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrT3B0aW9uKG9wdGlvbiwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgPGRpdiBbdGV0YUhpZ2hsaWdodF09XCJzZWFyY2hUZXh0XCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm9wdGlvbkRpcmVjdGl2ZSA/IG9wdGlvbkRpcmVjdGl2ZS50ZW1wbGF0ZSA6IG9wdGlvbkRlZmF1bHQ7IGNvbnRleHQ6IHskaW1wbGljaXQ6IG9wdGlvbiwgb3B0aW9uOiBvcHRpb259XCI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8dGV0YS1pY29uICpuZ0lmPVwiaXRlbVNlbGVjdGVkKG9wdGlvbilcIiBbbmFtZV09XCIndGljaydcIiBbcGFsZXR0ZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hcmdpbi1sZWZ0LTJcIj48L3RldGEtaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcm93X2F1dG8gc2VsZWN0LWNoaXAtZmllbGQgZmxleC13cmFwXCIgKm5nSWY9XCJtdWx0aXBsZSAmJiB2YWx1ZT8ubGVuZ3RoXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdmFsdWVcIiBjbGFzcz1cInRhZ1wiPlxuICAgICAgICAgIHt7Z2V0VGV4dChpdGVtKX19XG4gICAgICAgICAgPHRldGEtaWNvbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgW25hbWVdPVwiJ2Nsb3NlQ2lyY2xlJ1wiIChjbGljayk9XCJyZW1vdmVJdGVtQ2xpY2soaXRlbSwgJGV2ZW50KVwiPjwvdGV0YS1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG4gIDwvdGV0YS1kcm9wZG93bj5cbiAgPG5nLXRlbXBsYXRlICNub3RGb3VuZD5cbiAgICA8cFxuICAgICAgY2xhc3M9XCJwYWRkaW5nLWgtMyB0ZXh0LW92ZXJmbG93LWVsbGlwc2lzIG92ZXJmbG93LWhpZGRlbiBzZWxlY3Qtbm90LWZvdW5kLW9wdGlvblwiPnt7bm90Rm91bmRUZXh0IHx8IGxvYy5ub3RGb3VuZH19PC9wPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI29wdGlvbkRlZmF1bHQgbGV0LW9wdGlvbj5cbiAgICB7e2dldFRleHQob3B0aW9uKX19XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjdmFsdWVEZWZhdWx0IGxldC12YWx1ZT5cbiAgICA8ZGl2IGNsYXNzPVwicm93X2F1dG8gb3ZlcmZsb3ctaGlkZGVuIHRleHQtb3ZlcmZsb3ctZWxsaXBzaXNcIiAqbmdJZj1cIm11bHRpcGxlXCI+XG4gICAgICB7e2xvYy5zZWxlY3RlZCArICcgJyArIHZhbHVlPy5sZW5ndGh9fVxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbXVsdGlwbGVcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicm93IHJvd19hdXRvIG92ZXJmbG93LWhpZGRlbiB0ZXh0LW92ZXJmbG93LWVsbGlwc2lzXCI+e3tnZXRUZXh0KHZhbHVlKX19PC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy1jb250YWluZXI+XG5cbiJdfQ==
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvc2VsZWN0L3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC9zZWxlY3Qvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBRVosVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEdBRU4sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUV2RSxPQUFPLEVBQXVCLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQW1CL0QsTUFBTSxPQUFPLGVBQWU7SUEwRWhCO0lBQ0E7SUFDQTtJQXpFVixRQUFRLENBQVU7SUFFbEIsSUFBYSxPQUFPLENBQUMsT0FBYztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDckYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVRLE9BQU8sQ0FB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O2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdOLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxxQkFBcUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBSW5ELGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBR2hCLElBQUk7c0JBQXJDLFdBQVc7dUJBQUMsbUJBQW1CO2dCQUVjLFdBQVc7c0JBQXhELFdBQVc7dUJBQUMsY0FBYztnQkFHZixRQUFRO3NCQURuQixXQUFXO3VCQUFDLFVBQVU7Z0JBTW5CLFVBQVU7c0JBRGIsV0FBVzt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FsaWdufSBmcm9tICcuLi8uLi8uLi9jb21tb24vZW51bS9hbGlnbi5lbnVtJztcbmltcG9ydCB7VmVydGljYWxBbGlnbn0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2VudW0vdmVydGljYWwtYWxpZ24uZW51bSc7XG5pbXBvcnQge0F1dG9DbG9zZUlnbm9yZUNhc2V9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9hdXRvLWNsb3NlLWlnbm9yZS1jYXNlJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1NlbGVjdE9wdGlvbkRpcmVjdGl2ZX0gZnJvbSAnLi4vc2VsZWN0LW9wdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHtTZWxlY3RWYWx1ZURpcmVjdGl2ZX0gZnJvbSAnLi4vc2VsZWN0LXZhbHVlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1RldGFDb25maWdTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vbG9jYWxlL3RldGEtY29uZmlnLnNlcnZpY2VcIjtcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7VGV0YUxvY2FsaXNhdGlvbn0gZnJvbSBcIi4uLy4uLy4uL2xvY2FsZS90ZXRhLWxvY2FsaXNhdGlvblwiO1xuaW1wb3J0IHt2aWV3VHlwZX0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9tb2RlbC92aWV3LXR5cGUubW9kZWxcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGV0YS1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2VsZWN0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZWxlY3RfbXVsdGlwbGUnKVxuICBASW5wdXQoKVxuICBtdWx0aXBsZTogYm9vbGVhbjtcblxuICBASW5wdXQoKSBzZXQgb3B0aW9ucyhvcHRpb25zOiBhbnlbXSkge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgIGlmICh0aGlzLl9pbnRlcm5hbFZhbHVlICE9PSBudWxsICYmIHRoaXMuX2ludGVybmFsVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRWYWx1ZSh0aGlzLl9pbnRlcm5hbFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuXG4gIEBJbnB1dCgpIGludmFsaWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFsaWduOiBBbGlnbiA9IEFsaWduLm1pbldpZHRoO1xuICBASW5wdXQoKSB2ZXJ0aWNhbEFsaWduOiBWZXJ0aWNhbEFsaWduID0gVmVydGljYWxBbGlnbi5hdXRvO1xuICBASW5wdXQoKSBhdXRvQ2xvc2UgPSB0cnVlO1xuICBASW5wdXQoKSBhdXRvQ2xvc2VJZ25vcmU6IEFycmF5PEF1dG9DbG9zZUlnbm9yZUNhc2U+ID0gWydpbnNpZGUnXTtcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGl0ZW1TaXplID0gMzI7XG4gIEBJbnB1dCgpIHZpcnR1YWw6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGljb246IHN0cmluZztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgYXBwZW5kVG9Cb2R5OiBib29sZWFuO1xuICBASW5wdXQoKSBhbGxvd051bGwgPSB0cnVlO1xuICBASW5wdXQoKSB2aWV3VHlwZTogdmlld1R5cGUgPSAncm91bmRlZCc7XG4gIEBJbnB1dCgpIG5vdEZvdW5kVGV4dDogc3RyaW5nO1xuICBASW5wdXQoKSB2YWx1ZVJlZjogKChpdGVtOiBhbnkpID0+IGFueSkgfCBzdHJpbmc7XG4gIEBJbnB1dCgpIHRleHRSZWY6ICgoaXRlbTogYW55KSA9PiBzdHJpbmcpIHwgc3RyaW5nO1xuICBASW5wdXQoKSBzZWFyY2hSZWY6IHN0cmluZyB8ICgoaXRlbTogYW55KSA9PiBzdHJpbmcpO1xuXG4gIEBDb250ZW50Q2hpbGQoU2VsZWN0T3B0aW9uRGlyZWN0aXZlLCB7c3RhdGljOiB0cnVlfSlcbiAgb3B0aW9uRGlyZWN0aXZlOiBTZWxlY3RPcHRpb25EaXJlY3RpdmU7XG5cbiAgQENvbnRlbnRDaGlsZChTZWxlY3RWYWx1ZURpcmVjdGl2ZSwge3N0YXRpYzogdHJ1ZX0pXG4gIHZhbHVlRGlyZWN0aXZlOiBTZWxlY3RWYWx1ZURpcmVjdGl2ZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNlbGVjdF9vcGVuJykgb3BlbiA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2VsZWN0JykgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RDbGFzcyA9IHRydWU7XG5cbiAgQEhvc3RCaW5kaW5nKCd0YWJpbmRleCcpXG4gIHByaXZhdGUgZ2V0IHRhYmluZGV4KCkge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVkID8gbnVsbCA6IDA7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNlbGVjdF9kaXNhYmxlZCcpXG4gIGdldCBpc0Rpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICB9XG5cbiAgdmFsdWU6IGFueSB8IGFueVtdO1xuICBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gIGxvY2FsZTogT2JzZXJ2YWJsZTxUZXRhTG9jYWxpc2F0aW9uPjtcblxuICBnZXQgdmlzaWJsZU9wdGlvbnMoKTogYW55W10ge1xuICAgIGlmICghdGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zPy5maWx0ZXIoXG4gICAgICAob3B0aW9uKSA9PlxuICAgICAgICB0aGlzLmdldFNlYXJjaFN0cmluZyhvcHRpb24pXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAuaW5kZXhPZih0aGlzLnNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSkgPj0gMFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9vcHRpb25zOiBhbnkgfCBhbnlbXTtcbiAgcHJpdmF0ZSBfaW50ZXJuYWxWYWx1ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9jb25maWc6IFRldGFDb25maWdTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5fY29uZmlnLmxvY2FsZVxuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgbGV0IHZhbDogYW55O1xuICAgIGlmICh0aGlzLm11bHRpcGxlID09PSB0cnVlKSB7XG4gICAgICB2YWwgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgY2xpY2tPcHRpb24ob3B0aW9uOiBhbnksIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUgPT09IHRydWUpIHtcbiAgICAgIGlmICghdGhpcy52YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBbXTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnZhbHVlLmluZGV4T2Yob3B0aW9uKSA+PSAwKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlSXRlbShvcHRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IFsuLi50aGlzLnZhbHVlLCBvcHRpb25dO1xuICAgICAgfVxuICAgICAgdGhpcy5faW50ZXJuYWxWYWx1ZSA9IHRoaXMudmFsdWUubWFwKChfKSA9PiB0aGlzLmdldFZhbHVlKF8pKVxuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9pbnRlcm5hbFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IG9wdGlvbjtcbiAgICAgIHRoaXMuX2ludGVybmFsVmFsdWUgPSB0aGlzLmdldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9pbnRlcm5hbFZhbHVlKTtcbiAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGl0ZW1TZWxlY3RlZChvcHRpb246IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZT8uaW5kZXhPZihvcHRpb24pID49IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBvcHRpb247XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlSXRlbUNsaWNrKG9wdGlvbjogYW55LCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMucmVtb3ZlSXRlbShvcHRpb24pO1xuICAgIHRoaXMuX2ludGVybmFsVmFsdWUgPSB0aGlzLnZhbHVlLm1hcCgoXykgPT4gdGhpcy5nZXRWYWx1ZShfKSlcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX2ludGVybmFsVmFsdWUpO1xuICB9XG5cbiAgcmVtb3ZlSXRlbShvcHRpb246IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLmZpbHRlcigoXykgPT4gXyAhPT0gb3B0aW9uKTtcbiAgfVxuXG4gIHNlYXJjaCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSB0ZXh0O1xuICB9XG5cbiAgZ2V0VGV4dChvcHRpb246IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKG9wdGlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHN3aXRjaCAodHlwZW9mIHRoaXMudGV4dFJlZikge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIG9wdGlvblt0aGlzLnRleHRSZWZdO1xuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0UmVmKG9wdGlvbik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cbiAgfVxuXG4gIGdldFZhbHVlKG9wdGlvbjogYW55KTogYW55IHtcbiAgICBzd2l0Y2ggKHR5cGVvZiB0aGlzLnZhbHVlUmVmKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gb3B0aW9uW3RoaXMudmFsdWVSZWZdO1xuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVJlZihvcHRpb24pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9XG4gIH1cblxuICBnZXRTZWFyY2hTdHJpbmcob3B0aW9uOiBhbnkpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodHlwZW9mIHRoaXMuc2VhcmNoUmVmKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gb3B0aW9uW3RoaXMuc2VhcmNoUmVmXTtcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoUmVmKG9wdGlvbik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSB8IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5faW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuZ2V0U2VsZWN0ZWRWYWx1ZSh2YWx1ZSlcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge1xuICB9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgb25Ub3VjaGVkID0gKCkgPT4ge1xuICB9O1xuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkVmFsdWUodmFsdWU6IGFueSB8IGFueVtdKSB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMudmFsdWUgPVxuICAgICAgICB2YWx1ZSAmJiB0aGlzLm9wdGlvbnNcbiAgICAgICAgICA/IHRoaXMub3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAob3B0aW9uKSA9PiB2YWx1ZS5pbmRleE9mKHRoaXMuZ2V0VmFsdWUob3B0aW9uKSkgPiAtMVxuICAgICAgICAgIClcbiAgICAgICAgICA6IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID1cbiAgICAgICAgdGhpcy5vcHRpb25zICYmXG4gICAgICAgIHRoaXMub3B0aW9ucz8uZmluZCgob3B0aW9uKSA9PiB0aGlzLmdldFZhbHVlKG9wdGlvbikgPT09IHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKnRldGFMZXQ9XCJsb2NhbGUgfCBhc3luYyBhcyBsb2NcIj5cbiAgPHRldGEtZHJvcGRvd24gW2FsaWduXT1cImFsaWduXCJcbiAgICAgICAgICAgICAgICAgW3ZlcnRpY2FsQWxpZ25dPVwidmVydGljYWxBbGlnblwiXG4gICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiYXV0b0Nsb3NlXCJcbiAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZUlnbm9yZV09XCJhdXRvQ2xvc2VJZ25vcmVcIlxuICAgICAgICAgICAgICAgICBbKG9wZW4pXT1cIm9wZW5cIlxuICAgICAgICAgICAgICAgICBbYXBwZW5kVG9Cb2R5XT1cImFwcGVuZFRvQm9keVwiXG4gICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgIFt2aWV3VHlwZV09XCJ2aWV3VHlwZVwiXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwicm93IHJvd19hdXRvXCI+XG4gICAgPGRpdiB0ZXRhRHJvcGRvd25IZWFkXG4gICAgICAgICBbY2xhc3NdPVwiJ3JvdyByb3dfYXV0byBzZWxlY3QtaGVhZCBzZWxlY3RfJyt2aWV3VHlwZVwiXG4gICAgICAgICBbY2xhc3Muc2VsZWN0LWhlYWRfaW52YWxpZF09XCJpbnZhbGlkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93X2F1dG8gZmxleCBhbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgPHRldGEtaWNvbiAqbmdJZj1cImljb25cIiBbbmFtZV09XCJpY29uXCIgY2xhc3M9XCJtYXJnaW4tcmlnaHQtMVwiPjwvdGV0YS1pY29uPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInBsYWNlaG9sZGVyXCIgKm5nSWY9XCIodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZT8ubGVuZ3RoID09PSAwKSYmIW11bHRpcGxlXCI+XG4gICAgICAgICAge3twbGFjZWhvbGRlciB8fCBsb2Mubm90U2VsZWN0ZWR9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInZhbHVlRGlyZWN0aXZlID8gdmFsdWVEaXJlY3RpdmUudGVtcGxhdGUgOiB2YWx1ZURlZmF1bHQ7IGNvbnRleHQ6IHskaW1wbGljaXQ6IHZhbHVlLCB2YWx1ZTogdmFsdWV9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDx0ZXRhLWljb24gW25hbWVdPVwiJ2Fycm93RG93blNtYWxsJ1wiPjwvdGV0YS1pY29uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zPy5sZW5ndGhcIiB0ZXRhRHJvcGRvd25Db250ZW50IGNsYXNzPVwic2VsZWN0LWJvZHkgcm93X2F1dG9cIlxuICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoUmVmXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtc2VhcmNoIHBhZGRpbmctaC0yXCI+XG4gICAgICAgICAgPHRldGEtdGV4dC1maWVsZCBbbmdNb2RlbF09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCInc2VsZWN0Xycrdmlld1R5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxvYy5zZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xlZnRJY29uTmFtZV09XCInc2VhcmNoJ1wiPjwvdGV0YS10ZXh0LWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpc2libGVPcHRpb25zPy5sZW5ndGg7ZWxzZSBub3RGb3VuZCBcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtdWx0aXBsZSAmJiBhbGxvd051bGxcIj5cbiAgICAgICAgICA8ZGl2IFtjbGFzc109XCInbWFyZ2luLWgtMiBsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlIHNlbGVjdF8nK3ZpZXdUeXBlXCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhcigpXCI+XG4gICAgICAgICAgICB7e2xvYy5ub3RTZWxlY3RlZH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZGl2aWRlciBtYXJnaW4tYm90dG9tLTBcIj48L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDx0ZXRhLXNjcm9sbGFibGUgKm5nSWY9XCJ2aXJ0dWFsOyBlbHNlIGRlZmF1bHRcIiBjbGFzcz1cImNvbHVtbiBjb2x1bW5fYXV0byBwYWRkaW5nLWgtMlwiPlxuICAgICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgdGV0YVNjcm9sbGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtU2l6ZV09XCI0MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5CdWZmZXJQeD1cIjIwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCdWZmZXJQeD1cIjYwMFwiPlxuICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ3NlbGVjdC1saXN0LWl0ZW0gc2VsZWN0LWxpc3QtaXRlbV9pbnRlcmFjdGl2ZSBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBzZWxlY3RfJyt2aWV3VHlwZVwiXG4gICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiB2aXNpYmxlT3B0aW9uczsgdGVtcGxhdGVDYWNoZVNpemU6IDA7XCJcbiAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdC1saXN0LWl0ZW1fYWN0aXZlXT1cIml0ZW1TZWxlY3RlZChvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgW3RldGFIaWdobGlnaHRdPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGlja09wdGlvbihvcHRpb24sICRldmVudClcIj5cbiAgICAgICAgICAgICAgPGRpdiBbdGV0YUhpZ2hsaWdodF09XCJzZWFyY2hUZXh0XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvcHRpb25EaXJlY3RpdmUgPyBvcHRpb25EaXJlY3RpdmUudGVtcGxhdGUgOiBvcHRpb25EZWZhdWx0OyBjb250ZXh0OiB7JGltcGxpY2l0OiBvcHRpb24sIG9wdGlvbjogb3B0aW9ufVwiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHRldGEtaWNvbiAqbmdJZj1cIml0ZW1TZWxlY3RlZChvcHRpb24pXCIgW25hbWVdPVwiJ3RpY2snXCIgW3BhbGV0dGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hcmdpbi1sZWZ0LTJcIj48L3RldGEtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgICAgICA8L3RldGEtc2Nyb2xsYWJsZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgIDx0ZXRhLXNjcm9sbGFibGUgY2xhc3M9XCJjb2x1bW4gY29sdW1uX2F1dG8gcGFkZGluZy1oLTJcIiBbY29udGVudENsYXNzXT1cIlsnY29sdW1uJywgJ2NvbHVtbl9hdXRvJ11cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtbGlzdFwiPlxuICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCInbGlzdC1pdGVtIGxpc3QtaXRlbV9pbnRlcmFjdGl2ZSBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiAgc2VsZWN0Xycrdmlld1R5cGVcIlxuICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgdmlzaWJsZU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3QtbGlzdC1pdGVtX2FjdGl2ZV09XCJpdGVtU2VsZWN0ZWQob3B0aW9uKSAmJiBtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdC1saXN0LWl0ZW1dPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGlja09wdGlvbihvcHRpb24sICRldmVudClcIj5cbiAgICAgICAgICAgICAgPHNwYW4gW3RldGFIaWdobGlnaHRdPVwic2VhcmNoVGV4dFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwib3B0aW9uRGlyZWN0aXZlID8gb3B0aW9uRGlyZWN0aXZlLnRlbXBsYXRlIDogb3B0aW9uRGVmYXVsdDsgY29udGV4dDogeyRpbXBsaWNpdDogb3B0aW9uLCBvcHRpb246IG9wdGlvbn1cIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDx0ZXRhLWljb24gKm5nSWY9XCJpdGVtU2VsZWN0ZWQob3B0aW9uKSAmJiBtdWx0aXBsZVwiIFtuYW1lXT1cIid0aWNrJ1wiIFtwYWxldHRlXT1cIid0ZXh0J1wiPjwvdGV0YS1pY29uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGV0YS1zY3JvbGxhYmxlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IHJvd19hdXRvIHNlbGVjdC1jaGlwLWZpZWxkIGZsZXgtd3JhcFwiICpuZ0lmPVwibXVsdGlwbGUgJiYgdmFsdWU/Lmxlbmd0aFwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHZhbHVlXCIgY2xhc3M9XCJ0YWdcIj5cbiAgICAgICAgICB7e2dldFRleHQoaXRlbSl9fVxuICAgICAgICAgIDx0ZXRhLWljb24gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtuYW1lXT1cIidjbG9zZUNpcmNsZSdcIiAoY2xpY2spPVwicmVtb3ZlSXRlbUNsaWNrKGl0ZW0sICRldmVudClcIj48L3RldGEtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC90ZXRhLWRyb3Bkb3duPlxuICA8bmctdGVtcGxhdGUgI25vdEZvdW5kPlxuICAgIDxwXG4gICAgICBjbGFzcz1cInBhZGRpbmctaC0zIHRleHQtb3ZlcmZsb3ctZWxsaXBzaXMgb3ZlcmZsb3ctaGlkZGVuIHNlbGVjdC1ub3QtZm91bmQtb3B0aW9uXCI+e3tub3RGb3VuZFRleHQgfHwgbG9jLm5vdEZvdW5kfX08L3A+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjb3B0aW9uRGVmYXVsdCBsZXQtb3B0aW9uPlxuICAgIHt7Z2V0VGV4dChvcHRpb24pfX1cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICN2YWx1ZURlZmF1bHQgbGV0LXZhbHVlPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dfYXV0byBvdmVyZmxvdy1oaWRkZW4gdGV4dC1vdmVyZmxvdy1lbGxpcHNpc1wiICpuZ0lmPVwibXVsdGlwbGVcIj5cbiAgICAgIHt7bG9jLnNlbGVjdGVkICsgJyAnICsgdmFsdWU/Lmxlbmd0aH19XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtdWx0aXBsZVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJyb3cgcm93X2F1dG8gb3ZlcmZsb3ctaGlkZGVuIHRleHQtb3ZlcmZsb3ctZWxsaXBzaXNcIj57e2dldFRleHQodmFsdWUpfX08L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cblxuIl19
@@ -1170,10 +1170,11 @@ class BasePicker {
1170
1170
  val.splice(i, 1, value[i]);
1171
1171
  }
1172
1172
  this.placeholder = val.join('');
1173
- this._cdr.detectChanges();
1174
1173
  }
1175
1174
  openChange(e) {
1176
- this.onBlur();
1175
+ if (!e) {
1176
+ this.onBlur();
1177
+ }
1177
1178
  this.open = e;
1178
1179
  }
1179
1180
  checkNull() {
@@ -1195,12 +1196,17 @@ class BasePicker {
1195
1196
  this.open = false;
1196
1197
  }
1197
1198
  emitValue(value) {
1198
- this.date = value;
1199
- this.selectDate.emit(value);
1200
- this.onChange(value);
1199
+ if (this.isValueChange(value)) {
1200
+ this.date = value;
1201
+ this.selectDate.emit(value);
1202
+ this.onChange(value);
1203
+ }
1204
+ }
1205
+ isValueChange(value) {
1206
+ return new Date(value).getTime() !== new Date(this.date).getTime();
1201
1207
  }
1202
1208
  checkEnter(e) {
1203
- if (e.key === "Enter") {
1209
+ if (e.key === 'Enter') {
1204
1210
  this.inputText = e.target.value;
1205
1211
  this.onBlur();
1206
1212
  }
@@ -1217,15 +1223,15 @@ class BasePicker {
1217
1223
  }
1218
1224
  getDateFromStr(str, separator = '.') {
1219
1225
  const date = str?.split(separator);
1220
- const day = this.isAvailableLength((date?.[0]), 2) ? Number(date[0]) : null;
1221
- const month = this.isAvailableLength((date?.[1]), 2) ? Number(date[1]) : null;
1222
- const year = this.isAvailableLength((date?.[2]), 4) ? Number(date[2]) : null;
1226
+ const day = this.isAvailableLength(date?.[0], 2) ? Number(date[0]) : null;
1227
+ const month = this.isAvailableLength(date?.[1], 2) ? Number(date[1]) : null;
1228
+ const year = this.isAvailableLength(date?.[2], 4) ? Number(date[2]) : null;
1223
1229
  return { day, month, year };
1224
1230
  }
1225
1231
  getTimeFromStr(str, separator = ':') {
1226
1232
  const time = str?.trim().split(separator);
1227
- const hours = this.isAvailableLength((time?.[0]), 2) ? Number(time[0]) : null;
1228
- const mins = this.isAvailableLength((time?.[1]), 2) ? Number(time[1]) : null;
1233
+ const hours = this.isAvailableLength(time?.[0], 2) ? Number(time[0]) : null;
1234
+ const mins = this.isAvailableLength(time?.[1], 2) ? Number(time[1]) : null;
1229
1235
  return { hours, mins };
1230
1236
  }
1231
1237
  focus() {
@@ -1241,8 +1247,8 @@ class BasePicker {
1241
1247
  });
1242
1248
  }
1243
1249
  getAvailableDate(min, max, date) {
1244
- let minDate = dayjs(new Date(min)).startOf("day").toDate();
1245
- let maxDate = dayjs(new Date(max)).endOf("day").toDate();
1250
+ let minDate = dayjs(new Date(min)).startOf('day').toDate();
1251
+ let maxDate = dayjs(new Date(max)).endOf('day').toDate();
1246
1252
  if (min && minDate.getTime() >= new Date(date).getTime()) {
1247
1253
  return new Date();
1248
1254
  }
@@ -3215,16 +3221,15 @@ class DateRangeComponent extends BasePicker {
3215
3221
  this._cdr = _cdr;
3216
3222
  this._elementRef = _elementRef;
3217
3223
  this.datePipe = datePipe;
3218
- console.log('dateRange', datePipe);
3219
3224
  }
3220
3225
  changeSelectedDate(date, selectedDate) {
3221
3226
  if (selectedDate.from) {
3222
3227
  const from = new Date(Math.min(new Date(selectedDate.from).getTime(), date.getTime()));
3223
3228
  const to = new Date(Math.max(new Date(selectedDate.from).getTime(), date.getTime()));
3224
3229
  this.setDate({ from, to });
3225
- this.emitValue({ from, to });
3226
3230
  this.selectedDate.next({ from: null, to: null });
3227
3231
  this.open = false;
3232
+ this._cdr.detectChanges();
3228
3233
  }
3229
3234
  else {
3230
3235
  this.setDate({ from: date, to: null });
@@ -3235,12 +3240,20 @@ class DateRangeComponent extends BasePicker {
3235
3240
  if (this.allowNull) {
3236
3241
  return null;
3237
3242
  }
3238
- return this.datePipe.transform(new Date(), 'dd.MM.yyyy') + ' - ' + this.datePipe.transform(new Date(), 'dd.MM.yyyy');
3243
+ return (this.datePipe.transform(new Date(), 'dd.MM.yyyy') +
3244
+ ' - ' +
3245
+ this.datePipe.transform(new Date(), 'dd.MM.yyyy'));
3239
3246
  }
3240
3247
  prepareInput() {
3241
- let str = this.getLocaleString(this.date.from) + ' - ' + this.getLocaleString(this.date.to);
3248
+ let str = this.getLocaleString(this.date.from) +
3249
+ ' - ' +
3250
+ this.getLocaleString(this.date.to);
3242
3251
  if (!this.date?.from) {
3243
- str = this.allowNull ? '' : this.getLocaleString(new Date()) + ' - ' + this.getLocaleString(new Date());
3252
+ str = this.allowNull
3253
+ ? ''
3254
+ : this.getLocaleString(new Date()) +
3255
+ ' - ' +
3256
+ this.getLocaleString(new Date());
3244
3257
  }
3245
3258
  let option = {
3246
3259
  mode: 'dd/mm/yyyy',
@@ -3291,23 +3304,25 @@ class DateRangeComponent extends BasePicker {
3291
3304
  this.changePlaceholder('');
3292
3305
  this.selectedDate.next({
3293
3306
  from: range?.from || null,
3294
- to: range?.to || null
3307
+ to: range?.to || null,
3295
3308
  });
3296
3309
  }
3297
3310
  else {
3298
- this.inputText = this.getLocaleString(range.from) + ' - ' + this.getLocaleString(range.to);
3299
- this.changePlaceholder(this.getLocaleString(range.from) + ' - ' + this.getLocaleString(range.to));
3311
+ const from = this.getLocaleString(range.from);
3312
+ const to = range.from && !range.to ? '' : this.getLocaleString(range.to);
3313
+ this.inputText = from + ' - ' + to;
3314
+ this.changePlaceholder(from + ' - ' + to);
3300
3315
  }
3301
3316
  }
3302
3317
  writeValue(obj) {
3303
3318
  if (obj?.from) {
3304
3319
  this.date = {
3305
3320
  from: new Date(obj.from),
3306
- to: new Date(obj.to)
3321
+ to: new Date(obj.to),
3307
3322
  };
3308
3323
  this.setDate({
3309
3324
  from: new Date(obj.from),
3310
- to: new Date(obj.to)
3325
+ to: new Date(obj.to),
3311
3326
  });
3312
3327
  }
3313
3328
  else {
@@ -3315,35 +3330,37 @@ class DateRangeComponent extends BasePicker {
3315
3330
  }
3316
3331
  this.selectedDate.next({
3317
3332
  from: null,
3318
- to: null
3333
+ to: null,
3319
3334
  });
3320
3335
  }
3336
+ isValueChange(value) {
3337
+ return !(new Date(value.from).getTime() === new Date(this.date.from).getTime() &&
3338
+ new Date(value.to).getTime() === new Date(this.date.to).getTime());
3339
+ }
3321
3340
  registerOnChange(fn) {
3322
3341
  this.onChange = fn;
3323
3342
  }
3324
- registerOnTouched(fn) {
3325
- }
3343
+ registerOnTouched(fn) { }
3326
3344
  ngOnInit() {
3327
3345
  if (this.date?.from) {
3328
3346
  this.setDate({
3329
3347
  from: this.allowNull ? null : new Date(this.date?.from),
3330
- to: this.allowNull ? null : new Date(this.date?.to)
3348
+ to: this.allowNull ? null : new Date(this.date?.to),
3331
3349
  });
3332
3350
  }
3333
3351
  else {
3334
3352
  this.setDate({
3335
3353
  from: this.allowNull ? null : new Date(),
3336
- to: this.allowNull ? null : new Date()
3354
+ to: this.allowNull ? null : new Date(),
3337
3355
  });
3338
3356
  }
3339
3357
  this.selectedDate.next({
3340
3358
  from: null,
3341
- to: null
3359
+ to: null,
3342
3360
  });
3343
3361
  this.prepareInput();
3344
3362
  }
3345
- onChange(date) {
3346
- }
3363
+ onChange(date) { }
3347
3364
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: DateRangeComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.DatePipe }], target: i0.ɵɵFactoryTarget.Component });
3348
3365
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: DateRangeComponent, selector: "teta-date-range", inputs: { date: "date", locale: "locale", showTime: "showTime", minDate: "minDate", maxDate: "maxDate", invalid: "invalid", disabled: "disabled", align: "align", verticalAlign: "verticalAlign", viewType: "viewType", appendToBody: "appendToBody", backdrop: "backdrop", allowNull: "allowNull" }, outputs: { selectDate: "selectDate" }, providers: [DATE_Range_CONTROL_VALUE_ACCESSOR, DatePipe], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<teta-dropdown *ngIf=\"{selectedDate:selectedDate|async}as data\" [appendToBody]=\"appendToBody\" [backdrop]=\"backdrop\"\n [(open)]=\"open\" (openChange)=\"openChange($event)\" [viewType]=\"viewType\"\n [disabled]=\"disabled\" [verticalAlign]=\"verticalAlign\" [align]=\"align\"\n [autoCloseIgnore]=\"['esc', 'inside','enter']\">\n <div tetaDropdownHead\n [class]=\"'datepicker-head font-body-3 gap-8 datepicker_'+viewType\"\n [ngClass]=\"{'datepicker-head_invalid':invalid,'datepicker-head_disabled':disabled}\">\n <teta-input class=\"row row_auto flex\">\n <div [class]=\"'row_auto row datepicker_'+viewType\">\n <div class=\"row position-relative font-body-3 align-center\">\n <input [ngClass]=\"{'color-text-90':!disabled}\" [disabled]=\"disabled\" #input style=\"z-index: 1\"\n class=\"border-0 color-text-90\" (keydown)=\"checkEnter($event)\"\n [(ngModel)]=\"inputText\" (ngModelChange)=\"changeInput($event)\"\n [maskito]=\"maskitoOptions\">\n <div (click)=\"input.focus()\" *ngIf=\"data.selectedDate||allowNull\" class=\"position-absolute color-text-10\"\n style=\"top:-0.3px;cursor: text;user-select: none\">{{placeholder}}</div>\n </div>\n <teta-icon [name]=\"'calendar'\"></teta-icon>\n </div>\n </teta-input>\n </div>\n <div tetaDropdownContent class=\"scrollable\" (click)=\"$event.preventDefault()\">\n <ng-container *ngIf=\"open\">\n <div class=\"row\">\n <teta-range-calendar [isDateNull]=\"date===null||(date?.from===null&&date?.to===null)\" [open]=\"open\"\n [max]=\"maxDate\"\n [allowNull]=\"allowNull\"\n [min]=\"minDate\"\n (setDate)=\"changeSelectedDate($event,data.selectedDate)\"\n [selectedDate]=\"data.selectedDate\"\n [date]=\"date\"\n [viewType]=\"viewType\" [locale]=\"locale\"></teta-range-calendar>\n </div>\n </ng-container>\n </div>\n</teta-dropdown>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DropdownComponent, selector: "teta-dropdown", exportAs: ["dropdown"] }, { kind: "directive", type: DropdownHeadDirective, selector: "[tetaDropdownHead]" }, { kind: "directive", type: DropdownContentDirective, selector: "[tetaDropdownContent]" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"] }, { kind: "directive", type: i6.MaskitoCva, selector: "input[maskito], textarea[maskito]", inputs: ["maskito"] }, { kind: "component", type: IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "component", type: InputComponent, selector: "teta-input", inputs: ["label", "hint", "viewType", "horizontal", "required"] }, { kind: "component", type: RangeCalendarComponent, selector: "teta-range-calendar", inputs: ["locale", "open", "date", "viewType", "allowNull", "selectedDate", "min", "isDateNull", "max"], outputs: ["hoveredDateChange", "setDate"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3349
3366
  }
@@ -5392,7 +5409,7 @@ class SelectComponent {
5392
5409
  useExisting: forwardRef(() => SelectComponent),
5393
5410
  multi: true,
5394
5411
  },
5395
- ], queries: [{ propertyName: "optionDirective", first: true, predicate: SelectOptionDirective, descendants: true, static: true }, { propertyName: "valueDirective", first: true, predicate: SelectValueDirective, descendants: true, static: true }], ngImport: i0, template: "<ng-container *tetaLet=\"locale | async as loc\">\n <teta-dropdown [align]=\"align\"\n [verticalAlign]=\"verticalAlign\"\n [autoClose]=\"autoClose\"\n [autoCloseIgnore]=\"autoCloseIgnore\"\n [(open)]=\"open\"\n [appendToBody]=\"appendToBody\"\n [disabled]=\"disabled\"\n [viewType]=\"viewType\"\n class=\"row row_auto\">\n <div tetaDropdownHead\n [class]=\"'row row_auto select-head select_'+viewType\"\n [class.select-head_invalid]=\"invalid\">\n <div class=\"row_auto flex align-center\">\n <teta-icon *ngIf=\"icon\" [name]=\"icon\" class=\"margin-right-1\"></teta-icon>\n <span class=\"placeholder\" *ngIf=\"(value == null || value?.length === 0)&&!multiple\">\n {{placeholder || loc.notSelected}}\n </span>\n <ng-container\n *ngTemplateOutlet=\"valueDirective ? valueDirective.template : valueDefault; context: {$implicit: value, value: value}\"></ng-container>\n </div>\n <teta-icon [name]=\"'arrowDownSmall'\"></teta-icon>\n </div>\n <div *ngIf=\"options?.length\" tetaDropdownContent class=\"select-body scrollable row_auto margin-h-2\"\n (click)=\"$event.preventDefault()\">\n <ng-container *ngIf=\"searchRef\">\n <div class=\"select-search\">\n <teta-text-field [ngModel]=\"searchText\"\n [class]=\"'select_'+viewType\"\n (ngModelChange)=\"search($event)\"\n [placeholder]=\"loc.search\"\n [leftIconName]=\"'search'\"></teta-text-field>\n </div>\n </ng-container>\n <ng-container *ngIf=\"visibleOptions?.length;else notFound \">\n <ng-container *ngIf=\"!multiple && allowNull\">\n <div [class]=\"'list-item list-item_interactive select_'+viewType\"\n (click)=\"clear()\">\n {{loc.notSelected}}\n </div>\n <div class=\"list-divider margin-bottom-0\"></div>\n </ng-container>\n <ng-container *ngIf=\"!virtual\">\n <div class=\"select-list\">\n <div [class]=\"'list-item list-item_interactive justify-content-between select_'+viewType\"\n *ngFor=\"let option of visibleOptions\"\n [class.select-list-item_active]=\"itemSelected(option) && multiple\"\n [class.select-list-item]=\"multiple\"\n (click)=\"clickOption(option, $event)\">\n\n <span [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </span>\n <teta-icon *ngIf=\"itemSelected(option) && multiple\" [name]=\"'tick'\" [palette]=\"'text'\"></teta-icon>\n </div>\n </div>\n </ng-container>\n <cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n [itemSize]=\"40\"\n minBufferPx=\"200\"\n maxBufferPx=\"600\">\n <div [class]=\"'select-list-item select-list-item_interactive justify-content-between select_'+viewType\"\n *cdkVirtualFor=\"let option of visibleOptions; templateCacheSize: 0;\"\n [class.select-list-item_active]=\"itemSelected(option)\"\n [tetaHighlight]=\"searchText\"\n (click)=\"clickOption(option, $event)\">\n <div [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </div>\n <teta-icon *ngIf=\"itemSelected(option)\" [name]=\"'tick'\" [palette]=\"'text'\"\n class=\"margin-left-2\"></teta-icon>\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-container>\n <div class=\"row row_auto select-chip-field flex-wrap\" *ngIf=\"multiple && value?.length\">\n <div *ngFor=\"let item of value\" class=\"tag\">\n {{getText(item)}}\n <teta-icon class=\"cursor-pointer\" [name]=\"'closeCircle'\" (click)=\"removeItemClick(item, $event)\"></teta-icon>\n </div>\n </div>\n\n </div>\n </teta-dropdown>\n <ng-template #notFound>\n <p\n class=\"padding-h-3 text-overflow-ellipsis overflow-hidden select-not-found-option\">{{notFoundText || loc.notFound}}</p>\n </ng-template>\n <ng-template #optionDefault let-option>\n {{getText(option)}}\n </ng-template>\n <ng-template #valueDefault let-value>\n <div class=\"row_auto overflow-hidden text-overflow-ellipsis\" *ngIf=\"multiple\">\n {{loc.selected + ' ' + value?.length}}\n </div>\n <ng-container *ngIf=\"!multiple\">\n <span class=\"row row_auto overflow-hidden text-overflow-ellipsis\">{{getText(value)}}</span>\n </ng-container>\n </ng-template>\n</ng-container>\n\n", styles: [""], dependencies: [{ kind: "component", type: DropdownComponent, selector: "teta-dropdown", exportAs: ["dropdown"] }, { kind: "directive", type: DropdownHeadDirective, selector: "[tetaDropdownHead]" }, { kind: "directive", type: DropdownContentDirective, selector: "[tetaDropdownContent]" }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6$1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i6$1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i6$1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "directive", type: HighlightDirective, selector: "[tetaHighlight]", inputs: ["tetaHighlight"] }, { kind: "component", type: TextFieldComponent, selector: "teta-text-field", inputs: ["placeholder", "leftIconName", "disabled", "onlyNumber", "decimalPart", "invalid"] }, { kind: "directive", type: LetDirective, selector: "[tetaLet]", inputs: ["tetaLet"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5412
+ ], queries: [{ propertyName: "optionDirective", first: true, predicate: SelectOptionDirective, descendants: true, static: true }, { propertyName: "valueDirective", first: true, predicate: SelectValueDirective, descendants: true, static: true }], ngImport: i0, template: "<ng-container *tetaLet=\"locale | async as loc\">\n <teta-dropdown [align]=\"align\"\n [verticalAlign]=\"verticalAlign\"\n [autoClose]=\"autoClose\"\n [autoCloseIgnore]=\"autoCloseIgnore\"\n [(open)]=\"open\"\n [appendToBody]=\"appendToBody\"\n [disabled]=\"disabled\"\n [viewType]=\"viewType\"\n class=\"row row_auto\">\n <div tetaDropdownHead\n [class]=\"'row row_auto select-head select_'+viewType\"\n [class.select-head_invalid]=\"invalid\">\n <div class=\"row_auto flex align-center\">\n <teta-icon *ngIf=\"icon\" [name]=\"icon\" class=\"margin-right-1\"></teta-icon>\n <span class=\"placeholder\" *ngIf=\"(value == null || value?.length === 0)&&!multiple\">\n {{placeholder || loc.notSelected}}\n </span>\n <ng-container\n *ngTemplateOutlet=\"valueDirective ? valueDirective.template : valueDefault; context: {$implicit: value, value: value}\"></ng-container>\n </div>\n <teta-icon [name]=\"'arrowDownSmall'\"></teta-icon>\n </div>\n <div *ngIf=\"options?.length\" tetaDropdownContent class=\"select-body row_auto\"\n (click)=\"$event.preventDefault()\">\n <ng-container *ngIf=\"searchRef\">\n <div class=\"select-search padding-h-2\">\n <teta-text-field [ngModel]=\"searchText\"\n [class]=\"'select_'+viewType\"\n (ngModelChange)=\"search($event)\"\n [placeholder]=\"loc.search\"\n [leftIconName]=\"'search'\"></teta-text-field>\n </div>\n </ng-container>\n <ng-container *ngIf=\"visibleOptions?.length;else notFound \">\n <ng-container *ngIf=\"!multiple && allowNull\">\n <div [class]=\"'margin-h-2 list-item list-item_interactive select_'+viewType\"\n (click)=\"clear()\">\n {{loc.notSelected}}\n </div>\n <div class=\"list-divider margin-bottom-0\"></div>\n </ng-container>\n <teta-scrollable *ngIf=\"virtual; else default\" class=\"column column_auto padding-h-2\">\n <cdk-virtual-scroll-viewport tetaScrollable\n [itemSize]=\"40\"\n minBufferPx=\"200\"\n maxBufferPx=\"600\">\n <div [class]=\"'select-list-item select-list-item_interactive justify-content-between select_'+viewType\"\n *cdkVirtualFor=\"let option of visibleOptions; templateCacheSize: 0;\"\n [class.select-list-item_active]=\"itemSelected(option)\"\n [tetaHighlight]=\"searchText\"\n (click)=\"clickOption(option, $event)\">\n <div [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </div>\n <teta-icon *ngIf=\"itemSelected(option)\" [name]=\"'tick'\" [palette]=\"'text'\"\n class=\"margin-left-2\"></teta-icon>\n </div>\n </cdk-virtual-scroll-viewport>\n </teta-scrollable>\n <ng-template #default>\n <teta-scrollable class=\"column column_auto padding-h-2\" [contentClass]=\"['column', 'column_auto']\">\n <div class=\"select-list\">\n <div [class]=\"'list-item list-item_interactive justify-content-between select_'+viewType\"\n *ngFor=\"let option of visibleOptions\"\n [class.select-list-item_active]=\"itemSelected(option) && multiple\"\n [class.select-list-item]=\"multiple\"\n (click)=\"clickOption(option, $event)\">\n <span [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </span>\n <teta-icon *ngIf=\"itemSelected(option) && multiple\" [name]=\"'tick'\" [palette]=\"'text'\"></teta-icon>\n </div>\n </div>\n </teta-scrollable>\n </ng-template>\n </ng-container>\n <div class=\"row row_auto select-chip-field flex-wrap\" *ngIf=\"multiple && value?.length\">\n <div *ngFor=\"let item of value\" class=\"tag\">\n {{getText(item)}}\n <teta-icon class=\"cursor-pointer\" [name]=\"'closeCircle'\" (click)=\"removeItemClick(item, $event)\"></teta-icon>\n </div>\n </div>\n </div>\n </teta-dropdown>\n <ng-template #notFound>\n <p\n class=\"padding-h-3 text-overflow-ellipsis overflow-hidden select-not-found-option\">{{notFoundText || loc.notFound}}</p>\n </ng-template>\n <ng-template #optionDefault let-option>\n {{getText(option)}}\n </ng-template>\n <ng-template #valueDefault let-value>\n <div class=\"row_auto overflow-hidden text-overflow-ellipsis\" *ngIf=\"multiple\">\n {{loc.selected + ' ' + value?.length}}\n </div>\n <ng-container *ngIf=\"!multiple\">\n <span class=\"row row_auto overflow-hidden text-overflow-ellipsis\">{{getText(value)}}</span>\n </ng-container>\n </ng-template>\n</ng-container>\n\n", styles: [""], dependencies: [{ kind: "component", type: DropdownComponent, selector: "teta-dropdown", exportAs: ["dropdown"] }, { kind: "directive", type: DropdownHeadDirective, selector: "[tetaDropdownHead]" }, { kind: "directive", type: DropdownContentDirective, selector: "[tetaDropdownContent]" }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6$1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i6$1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i6$1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "directive", type: HighlightDirective, selector: "[tetaHighlight]", inputs: ["tetaHighlight"] }, { kind: "component", type: TextFieldComponent, selector: "teta-text-field", inputs: ["placeholder", "leftIconName", "disabled", "onlyNumber", "decimalPart", "invalid"] }, { kind: "directive", type: LetDirective, selector: "[tetaLet]", inputs: ["tetaLet"] }, { kind: "directive", type: ScrollableDirective, selector: "[tetaScrollable]" }, { kind: "component", type: ScrollableComponent, selector: "teta-scrollable", inputs: ["direction", "showScrollbars", "contentClass"], outputs: ["scroll"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5396
5413
  }
5397
5414
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SelectComponent, decorators: [{
5398
5415
  type: Component,
@@ -5402,7 +5419,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
5402
5419
  useExisting: forwardRef(() => SelectComponent),
5403
5420
  multi: true,
5404
5421
  },
5405
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *tetaLet=\"locale | async as loc\">\n <teta-dropdown [align]=\"align\"\n [verticalAlign]=\"verticalAlign\"\n [autoClose]=\"autoClose\"\n [autoCloseIgnore]=\"autoCloseIgnore\"\n [(open)]=\"open\"\n [appendToBody]=\"appendToBody\"\n [disabled]=\"disabled\"\n [viewType]=\"viewType\"\n class=\"row row_auto\">\n <div tetaDropdownHead\n [class]=\"'row row_auto select-head select_'+viewType\"\n [class.select-head_invalid]=\"invalid\">\n <div class=\"row_auto flex align-center\">\n <teta-icon *ngIf=\"icon\" [name]=\"icon\" class=\"margin-right-1\"></teta-icon>\n <span class=\"placeholder\" *ngIf=\"(value == null || value?.length === 0)&&!multiple\">\n {{placeholder || loc.notSelected}}\n </span>\n <ng-container\n *ngTemplateOutlet=\"valueDirective ? valueDirective.template : valueDefault; context: {$implicit: value, value: value}\"></ng-container>\n </div>\n <teta-icon [name]=\"'arrowDownSmall'\"></teta-icon>\n </div>\n <div *ngIf=\"options?.length\" tetaDropdownContent class=\"select-body scrollable row_auto margin-h-2\"\n (click)=\"$event.preventDefault()\">\n <ng-container *ngIf=\"searchRef\">\n <div class=\"select-search\">\n <teta-text-field [ngModel]=\"searchText\"\n [class]=\"'select_'+viewType\"\n (ngModelChange)=\"search($event)\"\n [placeholder]=\"loc.search\"\n [leftIconName]=\"'search'\"></teta-text-field>\n </div>\n </ng-container>\n <ng-container *ngIf=\"visibleOptions?.length;else notFound \">\n <ng-container *ngIf=\"!multiple && allowNull\">\n <div [class]=\"'list-item list-item_interactive select_'+viewType\"\n (click)=\"clear()\">\n {{loc.notSelected}}\n </div>\n <div class=\"list-divider margin-bottom-0\"></div>\n </ng-container>\n <ng-container *ngIf=\"!virtual\">\n <div class=\"select-list\">\n <div [class]=\"'list-item list-item_interactive justify-content-between select_'+viewType\"\n *ngFor=\"let option of visibleOptions\"\n [class.select-list-item_active]=\"itemSelected(option) && multiple\"\n [class.select-list-item]=\"multiple\"\n (click)=\"clickOption(option, $event)\">\n\n <span [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </span>\n <teta-icon *ngIf=\"itemSelected(option) && multiple\" [name]=\"'tick'\" [palette]=\"'text'\"></teta-icon>\n </div>\n </div>\n </ng-container>\n <cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n [itemSize]=\"40\"\n minBufferPx=\"200\"\n maxBufferPx=\"600\">\n <div [class]=\"'select-list-item select-list-item_interactive justify-content-between select_'+viewType\"\n *cdkVirtualFor=\"let option of visibleOptions; templateCacheSize: 0;\"\n [class.select-list-item_active]=\"itemSelected(option)\"\n [tetaHighlight]=\"searchText\"\n (click)=\"clickOption(option, $event)\">\n <div [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </div>\n <teta-icon *ngIf=\"itemSelected(option)\" [name]=\"'tick'\" [palette]=\"'text'\"\n class=\"margin-left-2\"></teta-icon>\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-container>\n <div class=\"row row_auto select-chip-field flex-wrap\" *ngIf=\"multiple && value?.length\">\n <div *ngFor=\"let item of value\" class=\"tag\">\n {{getText(item)}}\n <teta-icon class=\"cursor-pointer\" [name]=\"'closeCircle'\" (click)=\"removeItemClick(item, $event)\"></teta-icon>\n </div>\n </div>\n\n </div>\n </teta-dropdown>\n <ng-template #notFound>\n <p\n class=\"padding-h-3 text-overflow-ellipsis overflow-hidden select-not-found-option\">{{notFoundText || loc.notFound}}</p>\n </ng-template>\n <ng-template #optionDefault let-option>\n {{getText(option)}}\n </ng-template>\n <ng-template #valueDefault let-value>\n <div class=\"row_auto overflow-hidden text-overflow-ellipsis\" *ngIf=\"multiple\">\n {{loc.selected + ' ' + value?.length}}\n </div>\n <ng-container *ngIf=\"!multiple\">\n <span class=\"row row_auto overflow-hidden text-overflow-ellipsis\">{{getText(value)}}</span>\n </ng-container>\n </ng-template>\n</ng-container>\n\n" }]
5422
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *tetaLet=\"locale | async as loc\">\n <teta-dropdown [align]=\"align\"\n [verticalAlign]=\"verticalAlign\"\n [autoClose]=\"autoClose\"\n [autoCloseIgnore]=\"autoCloseIgnore\"\n [(open)]=\"open\"\n [appendToBody]=\"appendToBody\"\n [disabled]=\"disabled\"\n [viewType]=\"viewType\"\n class=\"row row_auto\">\n <div tetaDropdownHead\n [class]=\"'row row_auto select-head select_'+viewType\"\n [class.select-head_invalid]=\"invalid\">\n <div class=\"row_auto flex align-center\">\n <teta-icon *ngIf=\"icon\" [name]=\"icon\" class=\"margin-right-1\"></teta-icon>\n <span class=\"placeholder\" *ngIf=\"(value == null || value?.length === 0)&&!multiple\">\n {{placeholder || loc.notSelected}}\n </span>\n <ng-container\n *ngTemplateOutlet=\"valueDirective ? valueDirective.template : valueDefault; context: {$implicit: value, value: value}\"></ng-container>\n </div>\n <teta-icon [name]=\"'arrowDownSmall'\"></teta-icon>\n </div>\n <div *ngIf=\"options?.length\" tetaDropdownContent class=\"select-body row_auto\"\n (click)=\"$event.preventDefault()\">\n <ng-container *ngIf=\"searchRef\">\n <div class=\"select-search padding-h-2\">\n <teta-text-field [ngModel]=\"searchText\"\n [class]=\"'select_'+viewType\"\n (ngModelChange)=\"search($event)\"\n [placeholder]=\"loc.search\"\n [leftIconName]=\"'search'\"></teta-text-field>\n </div>\n </ng-container>\n <ng-container *ngIf=\"visibleOptions?.length;else notFound \">\n <ng-container *ngIf=\"!multiple && allowNull\">\n <div [class]=\"'margin-h-2 list-item list-item_interactive select_'+viewType\"\n (click)=\"clear()\">\n {{loc.notSelected}}\n </div>\n <div class=\"list-divider margin-bottom-0\"></div>\n </ng-container>\n <teta-scrollable *ngIf=\"virtual; else default\" class=\"column column_auto padding-h-2\">\n <cdk-virtual-scroll-viewport tetaScrollable\n [itemSize]=\"40\"\n minBufferPx=\"200\"\n maxBufferPx=\"600\">\n <div [class]=\"'select-list-item select-list-item_interactive justify-content-between select_'+viewType\"\n *cdkVirtualFor=\"let option of visibleOptions; templateCacheSize: 0;\"\n [class.select-list-item_active]=\"itemSelected(option)\"\n [tetaHighlight]=\"searchText\"\n (click)=\"clickOption(option, $event)\">\n <div [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </div>\n <teta-icon *ngIf=\"itemSelected(option)\" [name]=\"'tick'\" [palette]=\"'text'\"\n class=\"margin-left-2\"></teta-icon>\n </div>\n </cdk-virtual-scroll-viewport>\n </teta-scrollable>\n <ng-template #default>\n <teta-scrollable class=\"column column_auto padding-h-2\" [contentClass]=\"['column', 'column_auto']\">\n <div class=\"select-list\">\n <div [class]=\"'list-item list-item_interactive justify-content-between select_'+viewType\"\n *ngFor=\"let option of visibleOptions\"\n [class.select-list-item_active]=\"itemSelected(option) && multiple\"\n [class.select-list-item]=\"multiple\"\n (click)=\"clickOption(option, $event)\">\n <span [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </span>\n <teta-icon *ngIf=\"itemSelected(option) && multiple\" [name]=\"'tick'\" [palette]=\"'text'\"></teta-icon>\n </div>\n </div>\n </teta-scrollable>\n </ng-template>\n </ng-container>\n <div class=\"row row_auto select-chip-field flex-wrap\" *ngIf=\"multiple && value?.length\">\n <div *ngFor=\"let item of value\" class=\"tag\">\n {{getText(item)}}\n <teta-icon class=\"cursor-pointer\" [name]=\"'closeCircle'\" (click)=\"removeItemClick(item, $event)\"></teta-icon>\n </div>\n </div>\n </div>\n </teta-dropdown>\n <ng-template #notFound>\n <p\n class=\"padding-h-3 text-overflow-ellipsis overflow-hidden select-not-found-option\">{{notFoundText || loc.notFound}}</p>\n </ng-template>\n <ng-template #optionDefault let-option>\n {{getText(option)}}\n </ng-template>\n <ng-template #valueDefault let-value>\n <div class=\"row_auto overflow-hidden text-overflow-ellipsis\" *ngIf=\"multiple\">\n {{loc.selected + ' ' + value?.length}}\n </div>\n <ng-container *ngIf=\"!multiple\">\n <span class=\"row row_auto overflow-hidden text-overflow-ellipsis\">{{getText(value)}}</span>\n </ng-container>\n </ng-template>\n</ng-container>\n\n" }]
5406
5423
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: TetaConfigService }]; }, propDecorators: { multiple: [{
5407
5424
  type: HostBinding,
5408
5425
  args: ['class.select_multiple']