ng-zenduit 1.0.53 → 1.0.55

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.
@@ -54,7 +54,7 @@ export class ZenduPaginationBarComponent {
54
54
  }
55
55
  }
56
56
  ZenduPaginationBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduPaginationBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
57
- ZenduPaginationBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduPaginationBarComponent, selector: "zen-pagination-bar", inputs: { page: "page", perPage: "perPage", count: "count" }, outputs: { pageChange: "pageChange", perPageChange: "perPageChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"pagination-component\">\n <div class=\"select-dropdown\">\n <label>{{\"Rows per page\" | translate}}:</label>\n <zen-select [(selectModel)]=\"perPage\"\n [options]=\"availablePagesSize\"\n (selectModelChange)=\"updatePageSize()\"></zen-select>\n </div>\n <div class=\"pages\">\n <button class=\"pagination-button\"\n [disabled]=\"page - 1 <= 0\"\n (click)=\"prevPage()\">\n <i class=\"material-icons\">keyboard_arrow_left</i>\n </button>\n <label>{{((page - 1) * perPage) + 1 }} - {{endRowSize()}} of {{count}}</label>\n <button class=\"pagination-button\"\n [disabled]=\"page + 1 > totalPages\"\n (click)=\"nextPage()\">\n <i class=\"material-icons\">keyboard_arrow_right</i>\n </button>\n </div>\n</div>\n", styles: [".pagination-component{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.pagination-component .select-dropdown{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .select-dropdown label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:120%;color:#4f4f4f}.pagination-component .pages{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .pages label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:16px;color:#828282}.pagination-component .pages .pagination-button{display:flex;flex-direction:row;align-items:center;height:16px;padding:0;box-sizing:border-box;white-space:nowrap;border:none;border-radius:50%;transition:.1s;cursor:pointer;color:#828282;background:#FFFFFF}.pagination-component .pages .pagination-button:hover{color:#4f4f4f;background:#F2F2F2}.pagination-component .pages .pagination-button:focus{outline:none;color:#2188d9;background:#F4F9FD}.pagination-component .pages .pagination-button:disabled{color:#e0e0e0;background:#FFFFFF;cursor:not-allowed}.pagination-component .pages .pagination-button .material-icons{font-size:16px;height:16px;width:16px}\n"], dependencies: [{ kind: "component", type: i1.ZenduSelectComponent, selector: "zen-select", inputs: ["selectModel", "options", "placeholder", "displayProp", "idProp", "hasSearch", "returnOption", "isMultiselect", "disabled", "customIcon", "customIconStart", "customIconColor", "isTruncate", "enableAddNewOption", "newOptionText", "enableRemoveOption", "removeOptionText", "isLazyLoading", "lazyLoader", "preferedOpenDirection"], outputs: ["selectModelChange", "addNewOption", "removeOption", "closed"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
57
+ ZenduPaginationBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduPaginationBarComponent, selector: "zen-pagination-bar", inputs: { page: "page", perPage: "perPage", count: "count" }, outputs: { pageChange: "pageChange", perPageChange: "perPageChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"pagination-component\">\n <div class=\"select-dropdown\">\n <label>{{\"Rows per page\" | translate}}:</label>\n <zen-select [(selectModel)]=\"perPage\"\n [options]=\"availablePagesSize\"\n (selectModelChange)=\"updatePageSize()\"></zen-select>\n </div>\n <div class=\"pages\">\n <button class=\"pagination-button\"\n [disabled]=\"page - 1 <= 0\"\n (click)=\"prevPage()\">\n <i class=\"material-icons\">keyboard_arrow_left</i>\n </button>\n <label>{{((page - 1) * perPage) + 1 }} - {{endRowSize()}} of {{count}}</label>\n <button class=\"pagination-button\"\n [disabled]=\"page + 1 > totalPages\"\n (click)=\"nextPage()\">\n <i class=\"material-icons\">keyboard_arrow_right</i>\n </button>\n </div>\n</div>\n", styles: [".pagination-component{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.pagination-component .select-dropdown{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .select-dropdown label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:120%;color:#4f4f4f}.pagination-component .pages{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .pages label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:16px;color:#828282}.pagination-component .pages .pagination-button{display:flex;flex-direction:row;align-items:center;height:16px;padding:0;box-sizing:border-box;white-space:nowrap;border:none;border-radius:50%;transition:.1s;cursor:pointer;color:#828282;background:#FFFFFF}.pagination-component .pages .pagination-button:hover{color:#4f4f4f;background:#F2F2F2}.pagination-component .pages .pagination-button:focus{outline:none;color:#2188d9;background:#F4F9FD}.pagination-component .pages .pagination-button:disabled{color:#e0e0e0;background:#FFFFFF;cursor:not-allowed}.pagination-component .pages .pagination-button .material-icons{font-size:16px;height:16px;width:16px}\n"], dependencies: [{ kind: "component", type: i1.ZenduSelectComponent, selector: "zen-select", inputs: ["selectModel", "options", "placeholder", "displayProp", "idProp", "hasSearch", "returnOption", "isMultiselect", "disabled", "customIcon", "customIconStart", "customIconColor", "isTruncate", "enableAddNewOption", "showDefaultAddOption", "newOptionText", "enableRemoveOption", "removeOptionText", "isLazyLoading", "lazyLoader", "preferedOpenDirection"], outputs: ["selectModelChange", "addNewOption", "removeOption", "closed"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
58
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduPaginationBarComponent, decorators: [{
59
59
  type: Component,
60
60
  args: [{ selector: 'zen-pagination-bar', template: "<div class=\"pagination-component\">\n <div class=\"select-dropdown\">\n <label>{{\"Rows per page\" | translate}}:</label>\n <zen-select [(selectModel)]=\"perPage\"\n [options]=\"availablePagesSize\"\n (selectModelChange)=\"updatePageSize()\"></zen-select>\n </div>\n <div class=\"pages\">\n <button class=\"pagination-button\"\n [disabled]=\"page - 1 <= 0\"\n (click)=\"prevPage()\">\n <i class=\"material-icons\">keyboard_arrow_left</i>\n </button>\n <label>{{((page - 1) * perPage) + 1 }} - {{endRowSize()}} of {{count}}</label>\n <button class=\"pagination-button\"\n [disabled]=\"page + 1 > totalPages\"\n (click)=\"nextPage()\">\n <i class=\"material-icons\">keyboard_arrow_right</i>\n </button>\n </div>\n</div>\n", styles: [".pagination-component{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.pagination-component .select-dropdown{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .select-dropdown label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:120%;color:#4f4f4f}.pagination-component .pages{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .pages label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:16px;color:#828282}.pagination-component .pages .pagination-button{display:flex;flex-direction:row;align-items:center;height:16px;padding:0;box-sizing:border-box;white-space:nowrap;border:none;border-radius:50%;transition:.1s;cursor:pointer;color:#828282;background:#FFFFFF}.pagination-component .pages .pagination-button:hover{color:#4f4f4f;background:#F2F2F2}.pagination-component .pages .pagination-button:focus{outline:none;color:#2188d9;background:#F4F9FD}.pagination-component .pages .pagination-button:disabled{color:#e0e0e0;background:#FFFFFF;cursor:not-allowed}.pagination-component .pages .pagination-button .material-icons{font-size:16px;height:16px;width:16px}\n"] }]
@@ -47,6 +47,10 @@ export class ZenduSelectComponent {
47
47
  * show Add New Option at first place
48
48
  */
49
49
  this.enableAddNewOption = false;
50
+ /**
51
+ * Show Add New option text by default if newOptionText empty
52
+ */
53
+ this.showDefaultAddOption = true;
50
54
  /**
51
55
  * Emit event when Add New Option is clicked
52
56
  */
@@ -385,10 +389,10 @@ export class ZenduSelectComponent {
385
389
  }
386
390
  }
387
391
  ZenduSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduSelectComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
388
- ZenduSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduSelectComponent, selector: "zen-select", inputs: { selectModel: "selectModel", options: "options", placeholder: "placeholder", displayProp: "displayProp", idProp: "idProp", hasSearch: "hasSearch", returnOption: "returnOption", isMultiselect: "isMultiselect", disabled: "disabled", customIcon: "customIcon", customIconStart: "customIconStart", customIconColor: "customIconColor", isTruncate: "isTruncate", enableAddNewOption: "enableAddNewOption", newOptionText: "newOptionText", enableRemoveOption: "enableRemoveOption", removeOptionText: "removeOptionText", isLazyLoading: "isLazyLoading", lazyLoader: "lazyLoader", preferedOpenDirection: "preferedOpenDirection" }, outputs: { selectModelChange: "selectModelChange", addNewOption: "addNewOption", removeOption: "removeOption", closed: "closed" }, host: { listeners: { "window:mousedown": "outsideHandling($event)", "window:scroll": "scroll()" } }, queries: [{ propertyName: "optionTemplate", first: true, predicate: ZenduSelectOptionDirective, descendants: true }, { propertyName: "valueTemplate", first: true, predicate: ZenduSelectValueDirective, descendants: true }, { propertyName: "buttonTemplate", first: true, predicate: ZenduSelectButtonDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"app-select\">\n <button class=\"app-select-toggle\"\n [disabled]=\"disabled\"\n (click)=\"toggleExpand()\"\n [ngClass]=\"{'active': isExpanded}\">\n <div class=\"app-select-label\">\n <i *ngIf=\"customIconStart\" class=\"material-icons app-select-icon-start\">{{customIconStart}}</i>\n <div class=\"placeholder\"\n *ngIf=\"isModelEmpty()\">\n <span>{{placeholder | translate}}</span>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"!isMultiselect && !isModelEmpty()\">\n <ng-template *ngIf=\"valueTemplate && selectModel[0]; else tplValueText\"\n [ngTemplateOutlet]=\"valueTemplate.template\"\n [ngTemplateOutletContext]=\"{ selectModel: selectModel, labelText: labelText }\"></ng-template>\n <ng-template #tplValueText>\n <span>{{ labelText | translate }}</span>\n </ng-template>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"isMultiselect && !isModelEmpty()\">\n <span>{{ labelText | translate }}</span>\n </div>\n </div>\n <i *ngIf=\"!customIcon\"\n class=\"material-icons app-select-icon\">expand_more</i>\n <i *ngIf=\"customIcon\"\n class=\"material-icons-outlined custom-icon\"\n [style.color]=\"customIconColor\">{{customIcon}}</i>\n </button>\n\n <div class=\"action-menu-container\">\n <div class=\"action-menu app-select-dropdown-wrapper\"\n [ngClass]=\"{ 'show-top': isTopMenuDirection }\">\n <div class=\"app-select-dropdown\"\n *ngIf=\"isExpanded\">\n <div class=\"action-menu-header\"\n *ngIf=\"hasSearch\">\n <!--Search options-->\n <div class=\"search-wrapper\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n </div>\n <ng-template *ngIf=\"buttonTemplate\"\n [ngTemplateOutlet]=\"buttonTemplate.template\">\n </ng-template>\n <div class=\"action-menu-body\">\n <!--No options found-->\n <div class=\"no-options-found\"\n *ngIf=\"!filteredOptions.length && !isLoadingNow\">\n {{ 'No matching options found' | translate }}\n </div>\n\n <!--Select All Option-->\n <div class=\"action-item-checkbox select-all\"\n *ngIf=\"isMultiselect && !searchText && !isLazyLoading\"\n (click)=\"toggleAll()\">\n <zen-checkbox [checked]=\"selectModel.length === options.length\"\n [indeterminate]=\"selectModel.length !== options.length && selectModel.length\"\n [disableValueChange]=\"true\"\n [label]=\"'Select All' | translate\"></zen-checkbox>\n </div>\n\n <!--Single select Options-->\n <ng-container *ngIf=\"!isMultiselect\">\n <a class=\"action-item\"\n *ngIf=\"enableAddNewOption\"\n (click)=\"handleAddNewOption()\">\n <span *ngIf=\"newOptionText\">\n {{ newOptionText | translate }}\n </span>\n <span *ngIf=\"!newOptionText\">\n {{'Add New' | translate}}\n </span>\n </a>\n\n <a class=\"action-item remove-item\"\n *ngIf=\"enableRemoveOption\"\n (click)=\"handleRemoveOption()\">\n <span *ngIf=\"removeOptionText\">\n {{ removeOptionText | translate }}\n </span>\n <span *ngIf=\"!removeOptionText\">\n {{'Remove Selected' | translate}}\n </span>\n </a>\n\n <a class=\"action-item\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\"\n [ngClass]=\"{ 'active': isSelected(option) }\">\n <span *ngIf=\"!isMultiselect\"\n [class.action-item-truncate]=\"isTruncate\">\n <ng-template *ngIf=\"optionTemplate; else tplOptionText\"\n [ngTemplateOutlet]=\"optionTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: option }\">\n </ng-template>\n <ng-template #tplOptionText>\n {{ getName(option) | translate }}\n </ng-template>\n </span>\n </a>\n </ng-container>\n\n <!--Multiselect Options-->\n <ng-container *ngIf=\"isMultiselect\">\n <div class=\"action-item-checkbox\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\">\n <zen-checkbox *ngIf=\"isMultiselect\"\n [checked]=\"isSelected(option)\"\n [label]=\"getName(option)\"\n [disableValueChange]=\"true\"></zen-checkbox>\n </div>\n\n <ng-container *ngIf=\"isLazyLoading\">\n <div *ngIf=\"canLoadMore && !isLoadingNow\"\n class=\"action-item\">\n <button (click)=\"loadMore(false)\"\n class=\"button-stroked full-width\">\n {{'Load More' | translate}}\n </button>\n </div>\n <div *ngIf=\"isLoadingNow\"\n class=\"loader-more-spinner\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{--toggle-border-bottom: var(--zen-select-toggle-border-bottom, 1px solid #d6d6d8);--toggle-padding: var(--zen-select-toggle-padding, 0 0 8px 0)}.app-select{width:100%;position:relative}.app-select ::-webkit-scrollbar-thumb{background-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle{display:flex;align-items:center;justify-content:space-between;position:relative;transition:.3s;width:100%;background:#ffffff;-webkit-appearance:none;appearance:none;outline:none;cursor:pointer;border:none;border-radius:0;border-bottom:var(--toggle-border-bottom);padding:var(--toggle-padding);font-style:normal;font-weight:400;font-size:16px;line-height:24px;color:#333}.app-select .app-select-toggle .app-select-label{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-weight:400;font-size:14px;line-height:24px}.app-select .app-select-toggle .app-select-label .placeholder{color:#bebebe}.app-select .app-select-toggle .app-select-label .selected-item{color:#333}.app-select .app-select-toggle .custom-icon{color:#bebebe}.app-select .app-select-toggle .app-select-icon{color:#bebebe;transition:.3s}.app-select .app-select-toggle .app-select-icon-start{color:#bebebe;margin-right:4px}.app-select .app-select-toggle:focus{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle:focus .app-select-icon,.app-select .app-select-toggle:focus .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle[readonly],.app-select .app-select-toggle[disabled]{cursor:not-allowed;color:#b8b9bc;border-color:#d0d0d2}.app-select .app-select-toggle.active{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle.active .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle.active .app-select-icon{transform:rotate(180deg);color:var(--color-primary, #2188d9)}.app-select .app-select-toggle.active .app-select-icon-start{color:var(--color-primary, #2188d9)}.app-select .action-menu-container{position:sticky;width:inherit;z-index:10}.app-select .app-select-dropdown-wrapper{top:115%;width:inherit}.app-select .app-select-dropdown-wrapper.show-top{top:unset;bottom:115%}.app-select .app-select-dropdown-wrapper .action-menu-body{max-height:200px;overflow:auto}.app-select .app-select-dropdown-wrapper .action-menu-body .remove-item{color:#dc3e33}.app-select .app-select-dropdown-wrapper .no-options-found{background:#ffffff;color:#b8b9bc;padding:8px 16px;text-decoration:none;font-style:normal;font-weight:400;font-size:16px;line-height:24px}.app-select .app-select-dropdown-wrapper .select-all{font-weight:500}.app-select .app-select-dropdown-wrapper .loader-more-spinner{display:flex;align-items:center;justify-content:center;padding:16px;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: "component", type: i2.ZenduCheckboxComponent, selector: "zen-checkbox", inputs: ["checked", "label", "labelColor", "disabled", "disableValueChange", "indeterminate", "imageUrl"], outputs: ["checkedChange"] }, { kind: "component", type: i3.ZenduSearchBoxComponent, selector: "zen-search-box", inputs: ["text", "delay", "autoFocus", "disabled", "placeholder"], outputs: ["textChange"] }, { kind: "component", type: i4.ZenduSpinner, selector: "zen-spinner", inputs: ["size"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
392
+ ZenduSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduSelectComponent, selector: "zen-select", inputs: { selectModel: "selectModel", options: "options", placeholder: "placeholder", displayProp: "displayProp", idProp: "idProp", hasSearch: "hasSearch", returnOption: "returnOption", isMultiselect: "isMultiselect", disabled: "disabled", customIcon: "customIcon", customIconStart: "customIconStart", customIconColor: "customIconColor", isTruncate: "isTruncate", enableAddNewOption: "enableAddNewOption", showDefaultAddOption: "showDefaultAddOption", newOptionText: "newOptionText", enableRemoveOption: "enableRemoveOption", removeOptionText: "removeOptionText", isLazyLoading: "isLazyLoading", lazyLoader: "lazyLoader", preferedOpenDirection: "preferedOpenDirection" }, outputs: { selectModelChange: "selectModelChange", addNewOption: "addNewOption", removeOption: "removeOption", closed: "closed" }, host: { listeners: { "window:mousedown": "outsideHandling($event)", "window:scroll": "scroll()" } }, queries: [{ propertyName: "optionTemplate", first: true, predicate: ZenduSelectOptionDirective, descendants: true }, { propertyName: "valueTemplate", first: true, predicate: ZenduSelectValueDirective, descendants: true }, { propertyName: "buttonTemplate", first: true, predicate: ZenduSelectButtonDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"app-select\">\n <button class=\"app-select-toggle\"\n [disabled]=\"disabled\"\n (click)=\"toggleExpand()\"\n [ngClass]=\"{'active': isExpanded}\">\n <div class=\"app-select-label\">\n <i *ngIf=\"customIconStart\"\n class=\"material-icons app-select-icon-start\">{{customIconStart}}</i>\n <div class=\"placeholder\"\n *ngIf=\"isModelEmpty()\">\n <span>{{placeholder | translate}}</span>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"!isMultiselect && !isModelEmpty()\">\n <ng-template *ngIf=\"valueTemplate && selectModel[0]; else tplValueText\"\n [ngTemplateOutlet]=\"valueTemplate.template\"\n [ngTemplateOutletContext]=\"{ selectModel: selectModel, labelText: labelText }\"></ng-template>\n <ng-template #tplValueText>\n <span>{{ labelText | translate }}</span>\n </ng-template>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"isMultiselect && !isModelEmpty()\">\n <span>{{ labelText | translate }}</span>\n </div>\n </div>\n <i *ngIf=\"!customIcon\"\n class=\"material-icons app-select-icon\">expand_more</i>\n <i *ngIf=\"customIcon\"\n class=\"material-icons-outlined custom-icon\"\n [style.color]=\"customIconColor\">{{customIcon}}</i>\n </button>\n\n <div class=\"action-menu-container\">\n <div class=\"action-menu app-select-dropdown-wrapper\"\n [ngClass]=\"{ 'show-top': isTopMenuDirection }\">\n <div class=\"app-select-dropdown\"\n *ngIf=\"isExpanded\">\n <div class=\"action-menu-header\"\n *ngIf=\"hasSearch\">\n <!--Search options-->\n <div class=\"search-wrapper\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n </div>\n <ng-template *ngIf=\"buttonTemplate\"\n [ngTemplateOutlet]=\"buttonTemplate.template\">\n </ng-template>\n <div class=\"action-menu-body\">\n <!--No options found-->\n <div class=\"no-options-found\"\n *ngIf=\"!filteredOptions.length && !isLoadingNow\">\n {{ 'No matching options found' | translate }}\n </div>\n\n <!--Select All Option-->\n <div class=\"action-item-checkbox select-all\"\n *ngIf=\"isMultiselect && !searchText && !isLazyLoading\"\n (click)=\"toggleAll()\">\n <zen-checkbox [checked]=\"selectModel.length === options.length\"\n [indeterminate]=\"selectModel.length !== options.length && selectModel.length\"\n [disableValueChange]=\"true\"\n [label]=\"'Select All' | translate\"></zen-checkbox>\n </div>\n\n <!--Single select Options-->\n <ng-container *ngIf=\"!isMultiselect\">\n <a class=\"action-item\"\n *ngIf=\"enableAddNewOption\"\n (click)=\"handleAddNewOption()\">\n <span *ngIf=\"newOptionText\">\n {{ newOptionText | translate }}\n </span>\n <span *ngIf=\"!newOptionText && !showDefaultAddOption && searchText\">\n + {{ 'Add' | translate }} \"{{ searchText }}\"\n </span>\n <span *ngIf=\"!newOptionText && showDefaultAddOption\">\n {{'Add New' | translate}}\n </span>\n </a>\n\n <a class=\"action-item remove-item\"\n *ngIf=\"enableRemoveOption\"\n (click)=\"handleRemoveOption()\">\n <span *ngIf=\"removeOptionText\">\n {{ removeOptionText | translate }}\n </span>\n <span *ngIf=\"!removeOptionText\">\n {{'Remove Selected' | translate}}\n </span>\n </a>\n\n <a class=\"action-item\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\"\n [ngClass]=\"{ 'active': isSelected(option) }\">\n <span *ngIf=\"!isMultiselect\"\n [class.action-item-truncate]=\"isTruncate\">\n <ng-template *ngIf=\"optionTemplate; else tplOptionText\"\n [ngTemplateOutlet]=\"optionTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: option }\">\n </ng-template>\n <ng-template #tplOptionText>\n {{ getName(option) | translate }}\n </ng-template>\n </span>\n </a>\n </ng-container>\n\n <!--Multiselect Options-->\n <ng-container *ngIf=\"isMultiselect\">\n <div class=\"action-item-checkbox\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\">\n <zen-checkbox *ngIf=\"isMultiselect\"\n [checked]=\"isSelected(option)\"\n [label]=\"getName(option)\"\n [disableValueChange]=\"true\"></zen-checkbox>\n </div>\n\n <ng-container *ngIf=\"isLazyLoading\">\n <div *ngIf=\"canLoadMore && !isLoadingNow\"\n class=\"action-item\">\n <button (click)=\"loadMore(false)\"\n class=\"button-stroked full-width\">\n {{'Load More' | translate}}\n </button>\n </div>\n <div *ngIf=\"isLoadingNow\"\n class=\"loader-more-spinner\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{--toggle-border-bottom: var(--zen-select-toggle-border-bottom, 1px solid #d6d6d8);--toggle-padding: var(--zen-select-toggle-padding, 0 0 8px 0)}.app-select{width:100%;position:relative}.app-select ::-webkit-scrollbar-thumb{background-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle{display:flex;align-items:center;justify-content:space-between;position:relative;transition:.3s;width:100%;background:#ffffff;-webkit-appearance:none;appearance:none;outline:none;cursor:pointer;border:none;border-radius:0;border-bottom:var(--toggle-border-bottom);padding:var(--toggle-padding);font-style:normal;font-weight:400;font-size:16px;line-height:24px;color:#333}.app-select .app-select-toggle .app-select-label{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-weight:400;font-size:14px;line-height:24px}.app-select .app-select-toggle .app-select-label .placeholder{color:#bebebe}.app-select .app-select-toggle .app-select-label .selected-item{color:#333}.app-select .app-select-toggle .custom-icon{color:#bebebe}.app-select .app-select-toggle .app-select-icon{color:#bebebe;transition:.3s}.app-select .app-select-toggle .app-select-icon-start{color:#bebebe;margin-right:4px}.app-select .app-select-toggle:focus{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle:focus .app-select-icon,.app-select .app-select-toggle:focus .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle[readonly],.app-select .app-select-toggle[disabled]{cursor:not-allowed;color:#b8b9bc;border-color:#d0d0d2}.app-select .app-select-toggle.active{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle.active .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle.active .app-select-icon{transform:rotate(180deg);color:var(--color-primary, #2188d9)}.app-select .app-select-toggle.active .app-select-icon-start{color:var(--color-primary, #2188d9)}.app-select .action-menu-container{position:sticky;width:inherit;z-index:10}.app-select .app-select-dropdown-wrapper{top:115%;width:inherit}.app-select .app-select-dropdown-wrapper.show-top{top:unset;bottom:115%}.app-select .app-select-dropdown-wrapper .action-menu-body{max-height:200px;overflow:auto}.app-select .app-select-dropdown-wrapper .action-menu-body .remove-item{color:#dc3e33}.app-select .app-select-dropdown-wrapper .no-options-found{background:#ffffff;color:#b8b9bc;padding:8px 16px;text-decoration:none;font-style:normal;font-weight:400;font-size:16px;line-height:24px}.app-select .app-select-dropdown-wrapper .select-all{font-weight:500}.app-select .app-select-dropdown-wrapper .loader-more-spinner{display:flex;align-items:center;justify-content:center;padding:16px;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: "component", type: i2.ZenduCheckboxComponent, selector: "zen-checkbox", inputs: ["checked", "label", "labelColor", "disabled", "disableValueChange", "indeterminate", "imageUrl"], outputs: ["checkedChange"] }, { kind: "component", type: i3.ZenduSearchBoxComponent, selector: "zen-search-box", inputs: ["text", "delay", "autoFocus", "disabled", "placeholder"], outputs: ["textChange"] }, { kind: "component", type: i4.ZenduSpinner, selector: "zen-spinner", inputs: ["size"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
389
393
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduSelectComponent, decorators: [{
390
394
  type: Component,
391
- args: [{ selector: 'zen-select', template: "<div class=\"app-select\">\n <button class=\"app-select-toggle\"\n [disabled]=\"disabled\"\n (click)=\"toggleExpand()\"\n [ngClass]=\"{'active': isExpanded}\">\n <div class=\"app-select-label\">\n <i *ngIf=\"customIconStart\" class=\"material-icons app-select-icon-start\">{{customIconStart}}</i>\n <div class=\"placeholder\"\n *ngIf=\"isModelEmpty()\">\n <span>{{placeholder | translate}}</span>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"!isMultiselect && !isModelEmpty()\">\n <ng-template *ngIf=\"valueTemplate && selectModel[0]; else tplValueText\"\n [ngTemplateOutlet]=\"valueTemplate.template\"\n [ngTemplateOutletContext]=\"{ selectModel: selectModel, labelText: labelText }\"></ng-template>\n <ng-template #tplValueText>\n <span>{{ labelText | translate }}</span>\n </ng-template>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"isMultiselect && !isModelEmpty()\">\n <span>{{ labelText | translate }}</span>\n </div>\n </div>\n <i *ngIf=\"!customIcon\"\n class=\"material-icons app-select-icon\">expand_more</i>\n <i *ngIf=\"customIcon\"\n class=\"material-icons-outlined custom-icon\"\n [style.color]=\"customIconColor\">{{customIcon}}</i>\n </button>\n\n <div class=\"action-menu-container\">\n <div class=\"action-menu app-select-dropdown-wrapper\"\n [ngClass]=\"{ 'show-top': isTopMenuDirection }\">\n <div class=\"app-select-dropdown\"\n *ngIf=\"isExpanded\">\n <div class=\"action-menu-header\"\n *ngIf=\"hasSearch\">\n <!--Search options-->\n <div class=\"search-wrapper\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n </div>\n <ng-template *ngIf=\"buttonTemplate\"\n [ngTemplateOutlet]=\"buttonTemplate.template\">\n </ng-template>\n <div class=\"action-menu-body\">\n <!--No options found-->\n <div class=\"no-options-found\"\n *ngIf=\"!filteredOptions.length && !isLoadingNow\">\n {{ 'No matching options found' | translate }}\n </div>\n\n <!--Select All Option-->\n <div class=\"action-item-checkbox select-all\"\n *ngIf=\"isMultiselect && !searchText && !isLazyLoading\"\n (click)=\"toggleAll()\">\n <zen-checkbox [checked]=\"selectModel.length === options.length\"\n [indeterminate]=\"selectModel.length !== options.length && selectModel.length\"\n [disableValueChange]=\"true\"\n [label]=\"'Select All' | translate\"></zen-checkbox>\n </div>\n\n <!--Single select Options-->\n <ng-container *ngIf=\"!isMultiselect\">\n <a class=\"action-item\"\n *ngIf=\"enableAddNewOption\"\n (click)=\"handleAddNewOption()\">\n <span *ngIf=\"newOptionText\">\n {{ newOptionText | translate }}\n </span>\n <span *ngIf=\"!newOptionText\">\n {{'Add New' | translate}}\n </span>\n </a>\n\n <a class=\"action-item remove-item\"\n *ngIf=\"enableRemoveOption\"\n (click)=\"handleRemoveOption()\">\n <span *ngIf=\"removeOptionText\">\n {{ removeOptionText | translate }}\n </span>\n <span *ngIf=\"!removeOptionText\">\n {{'Remove Selected' | translate}}\n </span>\n </a>\n\n <a class=\"action-item\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\"\n [ngClass]=\"{ 'active': isSelected(option) }\">\n <span *ngIf=\"!isMultiselect\"\n [class.action-item-truncate]=\"isTruncate\">\n <ng-template *ngIf=\"optionTemplate; else tplOptionText\"\n [ngTemplateOutlet]=\"optionTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: option }\">\n </ng-template>\n <ng-template #tplOptionText>\n {{ getName(option) | translate }}\n </ng-template>\n </span>\n </a>\n </ng-container>\n\n <!--Multiselect Options-->\n <ng-container *ngIf=\"isMultiselect\">\n <div class=\"action-item-checkbox\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\">\n <zen-checkbox *ngIf=\"isMultiselect\"\n [checked]=\"isSelected(option)\"\n [label]=\"getName(option)\"\n [disableValueChange]=\"true\"></zen-checkbox>\n </div>\n\n <ng-container *ngIf=\"isLazyLoading\">\n <div *ngIf=\"canLoadMore && !isLoadingNow\"\n class=\"action-item\">\n <button (click)=\"loadMore(false)\"\n class=\"button-stroked full-width\">\n {{'Load More' | translate}}\n </button>\n </div>\n <div *ngIf=\"isLoadingNow\"\n class=\"loader-more-spinner\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{--toggle-border-bottom: var(--zen-select-toggle-border-bottom, 1px solid #d6d6d8);--toggle-padding: var(--zen-select-toggle-padding, 0 0 8px 0)}.app-select{width:100%;position:relative}.app-select ::-webkit-scrollbar-thumb{background-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle{display:flex;align-items:center;justify-content:space-between;position:relative;transition:.3s;width:100%;background:#ffffff;-webkit-appearance:none;appearance:none;outline:none;cursor:pointer;border:none;border-radius:0;border-bottom:var(--toggle-border-bottom);padding:var(--toggle-padding);font-style:normal;font-weight:400;font-size:16px;line-height:24px;color:#333}.app-select .app-select-toggle .app-select-label{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-weight:400;font-size:14px;line-height:24px}.app-select .app-select-toggle .app-select-label .placeholder{color:#bebebe}.app-select .app-select-toggle .app-select-label .selected-item{color:#333}.app-select .app-select-toggle .custom-icon{color:#bebebe}.app-select .app-select-toggle .app-select-icon{color:#bebebe;transition:.3s}.app-select .app-select-toggle .app-select-icon-start{color:#bebebe;margin-right:4px}.app-select .app-select-toggle:focus{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle:focus .app-select-icon,.app-select .app-select-toggle:focus .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle[readonly],.app-select .app-select-toggle[disabled]{cursor:not-allowed;color:#b8b9bc;border-color:#d0d0d2}.app-select .app-select-toggle.active{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle.active .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle.active .app-select-icon{transform:rotate(180deg);color:var(--color-primary, #2188d9)}.app-select .app-select-toggle.active .app-select-icon-start{color:var(--color-primary, #2188d9)}.app-select .action-menu-container{position:sticky;width:inherit;z-index:10}.app-select .app-select-dropdown-wrapper{top:115%;width:inherit}.app-select .app-select-dropdown-wrapper.show-top{top:unset;bottom:115%}.app-select .app-select-dropdown-wrapper .action-menu-body{max-height:200px;overflow:auto}.app-select .app-select-dropdown-wrapper .action-menu-body .remove-item{color:#dc3e33}.app-select .app-select-dropdown-wrapper .no-options-found{background:#ffffff;color:#b8b9bc;padding:8px 16px;text-decoration:none;font-style:normal;font-weight:400;font-size:16px;line-height:24px}.app-select .app-select-dropdown-wrapper .select-all{font-weight:500}.app-select .app-select-dropdown-wrapper .loader-more-spinner{display:flex;align-items:center;justify-content:center;padding:16px;box-sizing:border-box}\n"] }]
395
+ args: [{ selector: 'zen-select', template: "<div class=\"app-select\">\n <button class=\"app-select-toggle\"\n [disabled]=\"disabled\"\n (click)=\"toggleExpand()\"\n [ngClass]=\"{'active': isExpanded}\">\n <div class=\"app-select-label\">\n <i *ngIf=\"customIconStart\"\n class=\"material-icons app-select-icon-start\">{{customIconStart}}</i>\n <div class=\"placeholder\"\n *ngIf=\"isModelEmpty()\">\n <span>{{placeholder | translate}}</span>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"!isMultiselect && !isModelEmpty()\">\n <ng-template *ngIf=\"valueTemplate && selectModel[0]; else tplValueText\"\n [ngTemplateOutlet]=\"valueTemplate.template\"\n [ngTemplateOutletContext]=\"{ selectModel: selectModel, labelText: labelText }\"></ng-template>\n <ng-template #tplValueText>\n <span>{{ labelText | translate }}</span>\n </ng-template>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"isMultiselect && !isModelEmpty()\">\n <span>{{ labelText | translate }}</span>\n </div>\n </div>\n <i *ngIf=\"!customIcon\"\n class=\"material-icons app-select-icon\">expand_more</i>\n <i *ngIf=\"customIcon\"\n class=\"material-icons-outlined custom-icon\"\n [style.color]=\"customIconColor\">{{customIcon}}</i>\n </button>\n\n <div class=\"action-menu-container\">\n <div class=\"action-menu app-select-dropdown-wrapper\"\n [ngClass]=\"{ 'show-top': isTopMenuDirection }\">\n <div class=\"app-select-dropdown\"\n *ngIf=\"isExpanded\">\n <div class=\"action-menu-header\"\n *ngIf=\"hasSearch\">\n <!--Search options-->\n <div class=\"search-wrapper\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n </div>\n <ng-template *ngIf=\"buttonTemplate\"\n [ngTemplateOutlet]=\"buttonTemplate.template\">\n </ng-template>\n <div class=\"action-menu-body\">\n <!--No options found-->\n <div class=\"no-options-found\"\n *ngIf=\"!filteredOptions.length && !isLoadingNow\">\n {{ 'No matching options found' | translate }}\n </div>\n\n <!--Select All Option-->\n <div class=\"action-item-checkbox select-all\"\n *ngIf=\"isMultiselect && !searchText && !isLazyLoading\"\n (click)=\"toggleAll()\">\n <zen-checkbox [checked]=\"selectModel.length === options.length\"\n [indeterminate]=\"selectModel.length !== options.length && selectModel.length\"\n [disableValueChange]=\"true\"\n [label]=\"'Select All' | translate\"></zen-checkbox>\n </div>\n\n <!--Single select Options-->\n <ng-container *ngIf=\"!isMultiselect\">\n <a class=\"action-item\"\n *ngIf=\"enableAddNewOption\"\n (click)=\"handleAddNewOption()\">\n <span *ngIf=\"newOptionText\">\n {{ newOptionText | translate }}\n </span>\n <span *ngIf=\"!newOptionText && !showDefaultAddOption && searchText\">\n + {{ 'Add' | translate }} \"{{ searchText }}\"\n </span>\n <span *ngIf=\"!newOptionText && showDefaultAddOption\">\n {{'Add New' | translate}}\n </span>\n </a>\n\n <a class=\"action-item remove-item\"\n *ngIf=\"enableRemoveOption\"\n (click)=\"handleRemoveOption()\">\n <span *ngIf=\"removeOptionText\">\n {{ removeOptionText | translate }}\n </span>\n <span *ngIf=\"!removeOptionText\">\n {{'Remove Selected' | translate}}\n </span>\n </a>\n\n <a class=\"action-item\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\"\n [ngClass]=\"{ 'active': isSelected(option) }\">\n <span *ngIf=\"!isMultiselect\"\n [class.action-item-truncate]=\"isTruncate\">\n <ng-template *ngIf=\"optionTemplate; else tplOptionText\"\n [ngTemplateOutlet]=\"optionTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: option }\">\n </ng-template>\n <ng-template #tplOptionText>\n {{ getName(option) | translate }}\n </ng-template>\n </span>\n </a>\n </ng-container>\n\n <!--Multiselect Options-->\n <ng-container *ngIf=\"isMultiselect\">\n <div class=\"action-item-checkbox\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\">\n <zen-checkbox *ngIf=\"isMultiselect\"\n [checked]=\"isSelected(option)\"\n [label]=\"getName(option)\"\n [disableValueChange]=\"true\"></zen-checkbox>\n </div>\n\n <ng-container *ngIf=\"isLazyLoading\">\n <div *ngIf=\"canLoadMore && !isLoadingNow\"\n class=\"action-item\">\n <button (click)=\"loadMore(false)\"\n class=\"button-stroked full-width\">\n {{'Load More' | translate}}\n </button>\n </div>\n <div *ngIf=\"isLoadingNow\"\n class=\"loader-more-spinner\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{--toggle-border-bottom: var(--zen-select-toggle-border-bottom, 1px solid #d6d6d8);--toggle-padding: var(--zen-select-toggle-padding, 0 0 8px 0)}.app-select{width:100%;position:relative}.app-select ::-webkit-scrollbar-thumb{background-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle{display:flex;align-items:center;justify-content:space-between;position:relative;transition:.3s;width:100%;background:#ffffff;-webkit-appearance:none;appearance:none;outline:none;cursor:pointer;border:none;border-radius:0;border-bottom:var(--toggle-border-bottom);padding:var(--toggle-padding);font-style:normal;font-weight:400;font-size:16px;line-height:24px;color:#333}.app-select .app-select-toggle .app-select-label{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-weight:400;font-size:14px;line-height:24px}.app-select .app-select-toggle .app-select-label .placeholder{color:#bebebe}.app-select .app-select-toggle .app-select-label .selected-item{color:#333}.app-select .app-select-toggle .custom-icon{color:#bebebe}.app-select .app-select-toggle .app-select-icon{color:#bebebe;transition:.3s}.app-select .app-select-toggle .app-select-icon-start{color:#bebebe;margin-right:4px}.app-select .app-select-toggle:focus{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle:focus .app-select-icon,.app-select .app-select-toggle:focus .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle[readonly],.app-select .app-select-toggle[disabled]{cursor:not-allowed;color:#b8b9bc;border-color:#d0d0d2}.app-select .app-select-toggle.active{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle.active .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle.active .app-select-icon{transform:rotate(180deg);color:var(--color-primary, #2188d9)}.app-select .app-select-toggle.active .app-select-icon-start{color:var(--color-primary, #2188d9)}.app-select .action-menu-container{position:sticky;width:inherit;z-index:10}.app-select .app-select-dropdown-wrapper{top:115%;width:inherit}.app-select .app-select-dropdown-wrapper.show-top{top:unset;bottom:115%}.app-select .app-select-dropdown-wrapper .action-menu-body{max-height:200px;overflow:auto}.app-select .app-select-dropdown-wrapper .action-menu-body .remove-item{color:#dc3e33}.app-select .app-select-dropdown-wrapper .no-options-found{background:#ffffff;color:#b8b9bc;padding:8px 16px;text-decoration:none;font-style:normal;font-weight:400;font-size:16px;line-height:24px}.app-select .app-select-dropdown-wrapper .select-all{font-weight:500}.app-select .app-select-dropdown-wrapper .loader-more-spinner{display:flex;align-items:center;justify-content:center;padding:16px;box-sizing:border-box}\n"] }]
392
396
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { selectModel: [{
393
397
  type: Input
394
398
  }], selectModelChange: [{
@@ -419,6 +423,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
419
423
  type: Input
420
424
  }], enableAddNewOption: [{
421
425
  type: Input
426
+ }], showDefaultAddOption: [{
427
+ type: Input
422
428
  }], newOptionText: [{
423
429
  type: Input
424
430
  }], addNewOption: [{
@@ -453,4 +459,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
453
459
  type: HostListener,
454
460
  args: ['window:scroll', []]
455
461
  }] } });
456
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9zZWxlY3QvemVuZHUtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9zZWxlY3QvemVuZHUtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN2RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7OztBQVF2RixNQUFNLE9BQU8sb0JBQW9CO0lBaUo3QixZQUNZLFFBQW9CO1FBQXBCLGFBQVEsR0FBUixRQUFRLENBQVk7UUEzSWhDOztXQUVHO1FBQ08sc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV0RDs7V0FFRztRQUNNLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFFN0I7O1dBRUc7UUFDTSxnQkFBVyxHQUFHLGNBQWMsQ0FBQztRQTRCdEM7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRTFCOztXQUVHO1FBQ00sZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUV6Qjs7V0FFRztRQUNNLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBRTlCOztXQUVHO1FBQ00sb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFFOUI7O1dBRUc7UUFDTSxlQUFVLEdBQVksS0FBSyxDQUFDO1FBRXJDOztXQUVHO1FBQ00sdUJBQWtCLEdBQVksS0FB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c0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBDb250ZW50Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgWmVuZHVTZWxlY3RPcHRpb25EaXJlY3RpdmUgfSBmcm9tICcuL3RlbXBsYXRlcy96ZW5kdS1zZWxlY3Qtb3B0aW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBaZW5kdVNlbGVjdFZhbHVlRGlyZWN0aXZlIH0gZnJvbSAnLi90ZW1wbGF0ZXMvemVuZHUtc2VsZWN0LXZhbHVlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBaZW5kdVNlbGVjdEJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4vdGVtcGxhdGVzL3plbmR1LXNlbGVjdC1idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICcuLi9maWx0ZXIvZmlsdGVyc0NvbmZpZyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnemVuLXNlbGVjdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3plbmR1LXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vemVuZHUtc2VsZWN0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgWmVuZHVTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIC8qKlxuICAgICAqIDItV2F5IGNvbXBvbmVudCBwcm9wZXJ0eSBmb3Igc2VsZWN0ZWQgaXRlbXMuXG4gICAgICogRG9uJ3QgaW5pdGlhbGl6ZSBwcm9wZXJ0eSBvbiBjb25zdHJ1Y3RvciB0byBwcmV2ZW50IGNoYW5nZSBzb3VyY2UgcGFyYW1ldGVyXG4gICAgICovXG4gICAgQElucHV0KCkgc2VsZWN0TW9kZWw6IGFueSB8IGFueVtdO1xuXG4gICAgLyoqXG4gICAgICogY2FsbGJhY2sgdG8gZW1pdCBjaGFuZ2VzIGZvciBwYXJlbnQgY29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIHNlbGVjdE1vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIG9wdGlvbnMgZm9yIHNlbGVjdFxuICAgICAqL1xuICAgIEBJbnB1dCgpIG9wdGlvbnM6IGFueVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBQcm9wZXJ0eSB0byBzZXQgY3VzdG9tIHBsYWNlaG9sZGVyIHZhbHVlXG4gICAgICovXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnU2VsZWN0IEl0ZW1zJztcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYSBrZXkgdmFsdWUgdG8gZ2V0IGRpc3BsYXkgbmFtZSBmcm9tIG9wdGlvbiBvYmplY3RcbiAgICAgKi9cbiAgICBASW5wdXQoKSBkaXNwbGF5UHJvcDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhIGtleSB2YWx1ZSB0byBnZXQgaWQgZnJvbSBvcHRpb24gb2JqZWN0XG4gICAgICovXG4gICAgQElucHV0KCkgaWRQcm9wOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBDb21wb25lbnQgcHJvcGVydHkgdG8gZW5hYmxlIHNlYXJjaFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGhhc1NlYXJjaDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENvbXBvbmVudCBwcm9wZXJ0eSB0byByZXR1cm4gd2hvbGUgb3B0aW9uIG9iamVjdFxuICAgICAqIEJ5IGRlZmF1bHQgb25seSBpZCB2YWx1ZSBpcyByZXR1cm5lZFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHJldHVybk9wdGlvbjogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENvbXBvbmVudCBwcm9wZXJ0eSB0byBlbmFibGUgbXVsdGlzZWxlY3RcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpc011bHRpc2VsZWN0OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQ29tcG9uZW50IHByb3BlcnR5IHRvIGRpc2FibGUgY29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNob3cgdGhlIGN1c3RvbSBpY29uIGZvciB0b2dnbGVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBjdXN0b21JY29uID0gXCJcIjtcblxuICAgIC8qKlxuICAgICAqIFNob3cgdGhlIGN1c3RvbSBpY29uIGZvciBzdGFydFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGN1c3RvbUljb25TdGFydCA9IFwiXCI7XG5cbiAgICAvKipcbiAgICAgKiBDb2xvciBmb3IgY3VzdG9tIGljb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBjdXN0b21JY29uQ29sb3IgPSBcIlwiO1xuXG4gICAgLyoqXG4gICAgICogVHJ1bmNhdGUgdGV4dCB3aXRoIFwiLi4uXCIgYXQgdGhlIGVuZFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGlzVHJ1bmNhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIHNob3cgQWRkIE5ldyBPcHRpb24gYXQgZmlyc3QgcGxhY2VcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVBZGROZXdPcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIGRpc3BsYXkgY3VzdG9tIHRleHQgZm9yIEFkZCBOZXcgT3B0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgbmV3T3B0aW9uVGV4dDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRW1pdCBldmVudCB3aGVuIEFkZCBOZXcgT3B0aW9uIGlzIGNsaWNrZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgYWRkTmV3T3B0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgLyoqXG4gICAgICAgKiBzaG93IHJlbW92ZSBPcHRpb24gYXQgZmlyc3QgcGxhY2VcbiAgICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZVJlbW92ZU9wdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogZGlzcGxheSBjdXN0b20gdGV4dCBmb3IgcmVtb3ZlIE9wdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIHJlbW92ZU9wdGlvblRleHQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEVuYWJsZSBsYXp5IGxvYWRpbmcgZm9yIG9wdGlvbnNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpc0xhenlMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBMYXp5IGxvYWRlciBmdW5jdGlvbiB0byBmZXRjaCBvcHRpb25zXG4gICAgICovXG4gICAgQElucHV0KCkgbGF6eUxvYWRlcj86IChzZWFyY2g6IHsgdGV4dD86IHN0cmluZywgaWRzPzogc3RyaW5nW10gfSwgb2Zmc2V0OiBudW1iZXIsIGxpbWl0OiBudW1iZXIpID0+IFByb21pc2U8RGF0YVNvdXJjZVtdPjtcblxuICAgIC8qKlxuICAgICAqIFByZWZlcnJlZCBkaXJlY3Rpb24gZm9yIGRyb3Bkb3duIG1lbnUgcGxhY2VtZW50XG4gICAgICovXG4gICAgQElucHV0KCkgcHJlZmVyZWRPcGVuRGlyZWN0aW9uPzogXCJib3R0b21cIiB8IFwidG9wXCI7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0IGV2ZW50IHdoZW4gcmVtb3ZlIE9wdGlvbiBpcyBjbGlja2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIHJlbW92ZU9wdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXQgZXZlbnQgd2hlbiBzZWxlY3QgaXMgY2xvc2VkLCBzZW5kaW5nIHRoZSBzZWxlY3RlZCBkYXRhXG4gICAgICovXG4gICAgQE91dHB1dCgpIGNsb3NlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKlxuICAgICAqIEZpbHRlcmVkIGl0ZW1zIHZpc2libGUgb24gZHJvcGRvd25cbiAgICAgKi9cbiAgICBwdWJsaWMgZmlsdGVyZWRPcHRpb25zOiBhbnlbXTtcblxuICAgIC8qKlxuICAgICAqIElzIGRyb3Bkb3duIGV4cGFuZGVkXG4gICAgICovXG4gICAgcHVibGljIGlzRXhwYW5kZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBzZWFyY2hUZXh0ID0gJyc7XG5cbiAgICBwdWJsaWMgbGFiZWxUZXh0ID0gJyc7XG5cbiAgICBwdWJsaWMgaXNUb3BNZW51RGlyZWN0aW9uID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgb3B0aW9uOiBhbnlcblxuICAgIHB1YmxpYyBjYW5Mb2FkTW9yZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIGlzTG9hZGluZ05vdyA9IGZhbHNlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IE9wdGlvbiBUZW1wbGF0ZSBmb3IgY3VzdG9tIEhUTUxcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKFplbmR1U2VsZWN0T3B0aW9uRGlyZWN0aXZlKSBvcHRpb25UZW1wbGF0ZTogWmVuZHVTZWxlY3RPcHRpb25EaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3QgVmFsdWUgVGVtcGxhdGUgZm9yIGN1c3RvbSBIVE1MXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChaZW5kdVNlbGVjdFZhbHVlRGlyZWN0aXZlKSB2YWx1ZVRlbXBsYXRlOiBaZW5kdVNlbGVjdFZhbHVlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IE9wdGlvbiBUZW1wbGF0ZSBmb3IgY3VzdG9tIEhUTUxcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKFplbmR1U2VsZWN0QnV0dG9uRGlyZWN0aXZlKSBidXR0b25UZW1wbGF0ZTogWmVuZHVTZWxlY3RCdXR0b25EaXJlY3RpdmU7XG5cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptb3VzZWRvd24nLCBbJyRldmVudCddKVxuICAgIG91dHNpZGVIYW5kbGluZyhldmVudCkge1xuICAgICAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgLy8gZWxlbWVudCBub3QgaW4gdGhlIERPTVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGhpZGUgdGhlIG1lbnUgZm9yIG91dHNpZGUgY2xpY2tcbiAgICAgICAgdGhpcy5oaWRlRHJvcERvd24odHJ1ZSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFtdKVxuICAgIHNjcm9sbCgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQbGFjZW1lbnQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlT2JqOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25zKCk7XG4gICAgICAgIHRoaXMudXBkYXRlTGFiZWwoKTtcblxuICAgICAgICBpZiAoY2hhbmdlT2JqW1wic2VsZWN0TW9kZWxcIl0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGF6eUxvYWRpbmcgJiYgdGhpcy5zZWxlY3RNb2RlbD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpbHRlcmVkT3B0aW9ucz8ubGVuZ3RoICYmICF0aGlzLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcHJlbG9hZCBkYXRhIHRvIHNob3cgdGhlIGxhYmVsc1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRNb3JlKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpc01vZGVsRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5zZWxlY3RNb2RlbCB8fCAhdGhpcy5zZWxlY3RNb2RlbC5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuc2VsZWN0TW9kZWwgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMuc2VsZWN0TW9kZWwgPT09IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlT3B0aW9uQ2xpY2sob3B0aW9uOiBzdHJpbmcgfCBvYmplY3QpIHtcbiAgICAgICAgdGhpcy5vcHRpb24gPSBvcHRpb247XG4gICAgICAgIGNvbnN0IG9wdGlvblZhbHVlID0gdGhpcy5yZXR1cm5PcHRpb24gPyBvcHRpb24gOiB0aGlzLmdldElkKG9wdGlvbik7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVPcHRpb24ob3B0aW9uVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaW5nbGVTZWxlY3Qob3B0aW9uVmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLy8gTG9naWMgZm9yIHNpbmdsZSBzZWxlY3RcbiAgICBwcml2YXRlIHNpbmdsZVNlbGVjdCh2YWx1ZTogc3RyaW5nIHwgb2JqZWN0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0TW9kZWwgPSB2YWx1ZTtcblxuICAgICAgICAvLyAgSGlkZSBkcm9wZG93biBpZiBzaW5nbGUgc2VsZWN0XG4gICAgICAgIHRoaXMuaGlkZURyb3BEb3duKHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGVFeHBhbmQoKSB7XG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9ICF0aGlzLmlzRXhwYW5kZWQ7XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IFwiXCI7XG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVBsYWNlbWVudCgpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzRXhwYW5kZWQgJiYgdGhpcy5pc0xhenlMb2FkaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRNb3JlKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTG9naWMgZm9yIG11bHRpc2VsZWN0XG4gICAgcHJpdmF0ZSB0b2dnbGVPcHRpb24odmFsdWU6IHN0cmluZyB8IG9iamVjdCk6IHZvaWQge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RNb2RlbCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZWwgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRFbGVtZW50SW5kZXgodmFsdWUpO1xuXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZWwucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUNoaWxkcmVuKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RNb2RlbC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy50b2dnbGVDaGlsZHJlbihmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2dnbGVDaGlsZHJlbihjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb24gfHwgIXRoaXMub3B0aW9uLkNoaWxkcmVucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb24uQ2hpbGRyZW5zLmZvckVhY2goKGNoaWxkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQoZWwgPT4gdGhpcy5nZXRJZChlbCkgPT09IGNoaWxkKTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkSW5kZXggPSB0aGlzLnNlbGVjdE1vZGVsLmZpbmRJbmRleChlbCA9PiB0aGlzLmdldElkKGVsKSA9PT0gY2hpbGQpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9uICYmIGNoZWNrZWQgJiYgY2hpbGRJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGVsLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghY2hlY2tlZCAmJiBjaGlsZEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGVsLnNwbGljZShjaGlsZEluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZSBjYWxsIHRvIGhhbmRsZSBuZXN0ZWQgY2hpbGRyZW5cbiAgICAgICAgICAgIHRoaXMudG9nZ2xlQ2hpbGRyZW4oY2hlY2tlZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RWxlbWVudEluZGV4KHZhbHVlOiBzdHJpbmcgfCBvYmplY3QpOiBudW1iZXIge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVJZCA9IHRoaXMuZ2V0SWQodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0TW9kZWwuZmluZEluZGV4KGVsID0+IHRoaXMuZ2V0SWQoZWwpID09PSB2YWx1ZUlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGVsLmluZGV4T2YodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZUFsbCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0TW9kZWwubGVuZ3RoICE9PSB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGVsID0gdGhpcy5vcHRpb25zLm1hcChlbCA9PiB0aGlzLnJldHVybk9wdGlvbiA/IGVsIDogdGhpcy5nZXRJZChlbCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RNb2RlbCA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VhcmNoQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMoKTtcblxuICAgICAgICBpZiAodGhpcy5pc0xhenlMb2FkaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jYW5Mb2FkTW9yZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmxvYWRNb3JlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZmlsdGVyT3B0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5zbGljZSgwKTtcblxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHRoaXMuc2VhcmNoVGV4dCwgJ2knKTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBvcHRpb25zLmZpbHRlcihvcHRpb24gPT4gcmVnZXgudGVzdCh0aGlzLmdldE5hbWUob3B0aW9uKSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1NlbGVjdGVkKG9wdGlvbjogc3RyaW5nIHwgb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmlzTW9kZWxFbXB0eSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHRpb25JZCA9IHRoaXMuZ2V0SWQob3B0aW9uKTtcblxuICAgICAgICBpZiAodGhpcy5pc011bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RNb2RlbC5maW5kSW5kZXgoZWwgPT4gdGhpcy5nZXRJZChlbCkgPT09IG9wdGlvbklkKSA+PSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SWQodGhpcy5zZWxlY3RNb2RlbCkgPT09IG9wdGlvbklkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUxhYmVsKCkge1xuICAgICAgICBpZiAodGhpcy5pc01vZGVsRW1wdHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb3VudCA9IHRoaXMuc2VsZWN0TW9kZWwubGVuZ3RoO1xuXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRDb3VudCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxUZXh0ID0gdGhpcy5nZXROYW1lRnJvbVZhbHVlKHRoaXMuc2VsZWN0TW9kZWxbMF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsVGV4dCA9IGAke3NlbGVjdGVkQ291bnR9IFNlbGVjdGVkYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGFiZWxUZXh0ID0gdGhpcy5nZXROYW1lRnJvbVZhbHVlKHRoaXMuc2VsZWN0TW9kZWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldE5hbWVGcm9tVmFsdWUodmFsOiBzdHJpbmcgfCBvYmplY3QpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5yZXR1cm5PcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE5hbWUodmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGF6eUxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHQgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucz8uZmluZChpID0+IGkuaWQgPT0gdmFsKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROYW1lKG9wdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucyB8fCAhdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBvcHRpb24gPSB0aGlzLm9wdGlvbnMuZmluZChlbCA9PiB0aGlzLmdldElkKGVsKSA9PT0gdmFsKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE5hbWUob3B0aW9uID8/IHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TmFtZShvcHRpb246IHN0cmluZyB8IG9iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzcGxheVByb3ApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21iaW5lZFByb3BzID0gdGhpcy5kaXNwbGF5UHJvcC5zcGxpdChcInxcIilcbiAgICAgICAgICAgICAgICAgICAgLm1hcChpID0+IHRoaXMuZ2V0UmVjdXJzaXZlUHJvcGVydHkob3B0aW9uLCBpKSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIgXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21iaW5lZFByb3BzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBcHAtU2VsZWN0OiB3aGVuIHVzaW5nIG9iamVjdHMgYXMgbW9kZWwsIGEgZGlzcGxheVByb3AgdmFsdWUgaXMgbWFuZGF0b3J5LicpO1xuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBnZXRJZChvcHRpb246IHN0cmluZyB8IG9iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaXZlUHJvcGVydHkob3B0aW9uLCB0aGlzLmlkUHJvcCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FwcC1TZWxlY3Q6IHdoZW4gdXNpbmcgb2JqZWN0cyBhcyBtb2RlbCwgYSBpZFByb3AgdmFsdWUgaXMgbWFuZGF0b3J5LicpO1xuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UmVjdXJzaXZlUHJvcGVydHkob2JqZWN0OiBhbnksIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChvYmosIHgpID0+IHtcbiAgICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqW3hdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaGlkZURyb3BEb3duKHVzZXJBY3Rpb246IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBPbmx5IGVtaXQgY2xvc2VkIGV2ZW50IGlmIGl0IHdhcyBvcGVuIEFORCB0cmlnZ2VyZWQgYnkgdXNlciBhY3Rpb25cbiAgICAgICAgaWYgKHVzZXJBY3Rpb24gJiYgdGhpcy5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlZC5lbWl0KHRoaXMuc2VsZWN0TW9kZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Q2hhbmdlKCkge1xuICAgICAgICAvLyBub3RpZnkgd2l0aCB0aW1lb3V0XG4gICAgICAgIC8vIGFsbG93IG91dHB1dCBwcm9wZXJ0eSBcImVuYWJsZWRcIiBhcHBsaWVkIGJ5IHBhcmVudCBmaXJzdCBhbmQgdGhlbiBlbWl0IHRoZSBvbkNoYW5nZVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZWxDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdE1vZGVsKTtcbiAgICAgICAgfSwgMSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQbGFjZW1lbnQoKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBtZW51IHBvc2l0aW9uIGJhc2Ugb24gc2Nyb2xsXG4gICAgICAgIHRoaXMuaXNUb3BNZW51RGlyZWN0aW9uID0gdGhpcy5nZXRNZW51RGlyZWN0aW9uKCkgPT09IFwidG9wXCI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNZW51RGlyZWN0aW9uKCk6IFwiYm90dG9tXCIgfCBcInRvcFwiIHtcblxuICAgICAgICBpZiAodGhpcy5wcmVmZXJlZE9wZW5EaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByZWZlcmVkT3BlbkRpcmVjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRvcCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblxuICAgICAgICBpZiAodG9wID4gKGhlaWdodCAvIDIpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJ0b3BcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBcImJvdHRvbVwiXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1heE1lbnVIZWlnaHQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSB0aGlzLmdldENvbnRhaW5lckVsZW1lbnQoKTtcbiAgICAgICAgaWYgKCFjb250YWluZXJFbGVtZW50IHx8ICFjb250YWluZXJFbGVtZW50LmNsaWVudEhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiMTkwcHhcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudEhlaWdodCA9IGNvbnRhaW5lckVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICBsZXQgaGVpZ2h0ID0gTWF0aC5yb3VuZCgocGFyZW50SGVpZ2h0IC8gMikgLSAyNSk7XG4gICAgICAgIGhlaWdodCA9IE1hdGgubWluKDIxNiwgaGVpZ2h0KTtcbiAgICAgICAgaGVpZ2h0ID0gTWF0aC5tYXgoOTYsIGhlaWdodCk7XG4gICAgICAgIHJldHVybiBgJHtoZWlnaHR9cHhgO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29udGFpbmVyRWxlbWVudCgpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBjb21wb25lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImFwcC1zZWxlY3RcIikuaXRlbSgwKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5vZmZzZXRQYXJlbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUFkZE5ld09wdGlvbigpIHtcbiAgICAgICAgdGhpcy5hZGROZXdPcHRpb24uZW1pdCh7IHZhbHVlOiB0aGlzLnNlYXJjaFRleHQgfSlcbiAgICAgICAgdGhpcy5oaWRlRHJvcERvd24odHJ1ZSlcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlUmVtb3ZlT3B0aW9uKCkge1xuICAgICAgICB0aGlzLnJlbW92ZU9wdGlvbi5lbWl0KHsgcmVtb3ZlZDogdHJ1ZSB9KVxuICAgICAgICB0aGlzLmhpZGVEcm9wRG93bih0cnVlKVxuICAgIH1cblxuXG5cbiAgICBwdWJsaWMgYXN5bmMgbG9hZE1vcmUoc2hvd1NlbGVjdGVkT25Ub3A6IGJvb2xlYW4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nTm93ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5sYXp5TG9hZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgYGxvYWRlciBpcyBub3QgYXZhaWxhYmxlYFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmZpbHRlcmVkT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGxvYWQgZmlyc3QgMTAgcmVjb3JkcyBmb3IgdGhlIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgICAgICBjb25zdCBsaW1pdCA9ICh0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT0gMCkgPyAxMCA6IDEwMDtcbiAgICAgICAgICAgIGxldCBuZXdJdGVtcyA9IGF3YWl0IHRoaXMubGF6eUxvYWRlcih7IHRleHQ6IHRoaXMuc2VhcmNoVGV4dCB8fCBcIlwiIH0sIHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCwgbGltaXQpO1xuXG4gICAgICAgICAgICB0aGlzLmNhbkxvYWRNb3JlID0gKG5ld0l0ZW1zLmxlbmd0aCA9PSBsaW1pdCk7XG5cbiAgICAgICAgICAgIC8vIHRoZSBzZWxlY3RNb2RlbCBjb250YWlucyB0aGUgc2VsZWN0ZWQgaXRlbXMgaWRzXG4gICAgICAgICAgICBjb25zdCBjaGVja2VkSWRzID0gdGhpcy5zZWxlY3RNb2RlbCBhcyBzdHJpbmdbXTtcblxuICAgICAgICAgICAgaWYgKHNob3dTZWxlY3RlZE9uVG9wICYmIGNoZWNrZWRJZHM/Lmxlbmd0aCkge1xuXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBjaGVja2VkIGl0ZW1zIGZpcnN0XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maWx0ZXIoaSA9PiAhY2hlY2tlZElkcy5pbmNsdWRlcyhpLmlkKSk7XG4gICAgICAgICAgICAgICAgbmV3SXRlbXMgPSBuZXdJdGVtcy5maWx0ZXIoaSA9PiAhY2hlY2tlZElkcy5pbmNsdWRlcyhpLmlkIGFzIHN0cmluZykpO1xuXG4gICAgICAgICAgICAgICAgLy8gYWRkIGFsbCBjaGVja2VkIGl0ZW1zIHRvIHRoZSB0b3AgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgY2hlY2tlZEl0ZW1zID0gYXdhaXQgdGhpcy5sYXp5TG9hZGVyKHsgaWRzOiBjaGVja2VkSWRzIH0sIDAsIDEwMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBjaGVja2VkSXRlbXMuY29uY2F0KHRoaXMuZmlsdGVyZWRPcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGFiZWwoKTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAvLyB0aGUgZmlsdGVyZWREYXRhU291cmNlIGNvbnRhaW5zIHRoZSBpdGVtcyB0aGF0IGlzIHZpc2lsaWJsZSB0byB1c2VyIGF0IHRoZSBjdXJyZW50IG1vbWVudFxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5jb25jYXQobmV3SXRlbXMpO1xuXG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdOb3cgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhcHAtc2VsZWN0XCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImFwcC1zZWxlY3QtdG9nZ2xlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRXhwYW5kKClcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc0V4cGFuZGVkfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLXNlbGVjdC1sYWJlbFwiPlxuICAgICAgICAgICAgPGkgKm5nSWY9XCJjdXN0b21JY29uU3RhcnRcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGFwcC1zZWxlY3QtaWNvbi1zdGFydFwiPnt7Y3VzdG9tSWNvblN0YXJ0fX08L2k+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTW9kZWxFbXB0eSgpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3twbGFjZWhvbGRlciB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtaXRlbVwiXG4gICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzTXVsdGlzZWxlY3QgJiYgIWlzTW9kZWxFbXB0eSgpXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwidmFsdWVUZW1wbGF0ZSAmJiBzZWxlY3RNb2RlbFswXTsgZWxzZSB0cGxWYWx1ZVRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ2YWx1ZVRlbXBsYXRlLnRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgc2VsZWN0TW9kZWw6IHNlbGVjdE1vZGVsLCBsYWJlbFRleHQ6IGxhYmVsVGV4dCB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RwbFZhbHVlVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgbGFiZWxUZXh0IHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc011bHRpc2VsZWN0ICYmICFpc01vZGVsRW1wdHkoKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGxhYmVsVGV4dCB8IHRyYW5zbGF0ZSAgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpICpuZ0lmPVwiIWN1c3RvbUljb25cIlxuICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGFwcC1zZWxlY3QtaWNvblwiPmV4cGFuZF9tb3JlPC9pPlxuICAgICAgICA8aSAqbmdJZj1cImN1c3RvbUljb25cIlxuICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIGN1c3RvbS1pY29uXCJcbiAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImN1c3RvbUljb25Db2xvclwiPnt7Y3VzdG9tSWNvbn19PC9pPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGRpdiBjbGFzcz1cImFjdGlvbi1tZW51LWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLW1lbnUgYXBwLXNlbGVjdC1kcm9wZG93bi13cmFwcGVyXCJcbiAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzaG93LXRvcCc6IGlzVG9wTWVudURpcmVjdGlvbiB9XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLXNlbGVjdC1kcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNFeHBhbmRlZFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tbWVudS1oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNTZWFyY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLVNlYXJjaCBvcHRpb25zLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHplbi1zZWFyY2gtYm94IFsodGV4dCldPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRleHRDaGFuZ2UpPVwib25TZWFyY2hDaGFuZ2UoKVwiPjwvemVuLXNlYXJjaC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImJ1dHRvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYnV0dG9uVGVtcGxhdGUudGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tbWVudS1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS1ObyBvcHRpb25zIGZvdW5kLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuby1vcHRpb25zLWZvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoICYmICFpc0xvYWRpbmdOb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdObyBtYXRjaGluZyBvcHRpb25zIGZvdW5kJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tU2VsZWN0IEFsbCBPcHRpb24tLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1pdGVtLWNoZWNrYm94IHNlbGVjdC1hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNNdWx0aXNlbGVjdCAmJiAhc2VhcmNoVGV4dCAmJiAhaXNMYXp5TG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8emVuLWNoZWNrYm94IFtjaGVja2VkXT1cInNlbGVjdE1vZGVsLmxlbmd0aCA9PT0gb3B0aW9ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3RNb2RlbC5sZW5ndGggIT09IG9wdGlvbnMubGVuZ3RoICYmIHNlbGVjdE1vZGVsLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVmFsdWVDaGFuZ2VdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInU2VsZWN0IEFsbCcgfCB0cmFuc2xhdGVcIj48L3plbi1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLVNpbmdsZSBzZWxlY3QgT3B0aW9ucy0tPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTXVsdGlzZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJlbmFibGVBZGROZXdPcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFkZE5ld09wdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJuZXdPcHRpb25UZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG5ld09wdGlvblRleHQgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbmV3T3B0aW9uVGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydBZGQgTmV3JyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImFjdGlvbi1pdGVtIHJlbW92ZS1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZW5hYmxlUmVtb3ZlT3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVSZW1vdmVPcHRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicmVtb3ZlT3B0aW9uVGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByZW1vdmVPcHRpb25UZXh0IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXJlbW92ZU9wdGlvblRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snUmVtb3ZlIFNlbGVjdGVkJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImFjdGlvbi1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVPcHRpb25DbGljayhvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IGlzU2VsZWN0ZWQob3B0aW9uKSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNNdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGlvbi1pdGVtLXRydW5jYXRlXT1cImlzVHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwib3B0aW9uVGVtcGxhdGU7IGVsc2UgdHBsT3B0aW9uVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25UZW1wbGF0ZS50ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBvcHRpb246IG9wdGlvbiB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdHBsT3B0aW9uVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldE5hbWUob3B0aW9uKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLU11bHRpc2VsZWN0IE9wdGlvbnMtLT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTXVsdGlzZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24taXRlbS1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU9wdGlvbkNsaWNrKG9wdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWNoZWNrYm94ICpuZ0lmPVwiaXNNdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImdldE5hbWUob3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVZhbHVlQ2hhbmdlXT1cInRydWVcIj48L3plbi1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMYXp5TG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjYW5Mb2FkTW9yZSAmJiAhaXNMb2FkaW5nTm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZE1vcmUoZmFsc2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1zdHJva2VkIGZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0xvYWQgTW9yZScgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nTm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibG9hZGVyLW1vcmUtc3Bpbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLXNwaW5uZXIgc2l6ZT1cInNtYWxsXCI+PC96ZW4tc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9zZWxlY3QvemVuZHUtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9zZWxlY3QvemVuZHUtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN2RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7OztBQVF2RixNQUFNLE9BQU8sb0JBQW9CO0lBc0o3QixZQUNZLFFBQW9CO1FBQXBCLGFBQVEsR0FBUixRQUFRLENBQVk7UUFoSmhDOztXQUVHO1FBQ08sc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV0RDs7V0FFRztRQUNNLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFFN0I7O1dBRUc7UUFDTSxnQkFBVyxHQUFHLGNBQWMsQ0FBQztRQTRCdEM7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRTFCOztXQUVHO1FBQ00sZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUV6Qjs7V0FFRztRQUNNLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBRTlCOztXQUVHO1FBQ00sb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFFOUI7O1dBRUc7UUFDTSxlQUFVLEdBQVksS0FBSyxDQUFDO1FBRXJDOztXQUVHO1FBQ00sdUJBQWtCLEdBQVksS0FB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QyxRQUFRLENBQUM7Z0JBYzVDLE1BQU07c0JBREwsWUFBWTt1QkFBQyxlQUFlLEVBQUUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgQ29udGVudENoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFplbmR1U2VsZWN0T3B0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi90ZW1wbGF0ZXMvemVuZHUtc2VsZWN0LW9wdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgWmVuZHVTZWxlY3RWYWx1ZURpcmVjdGl2ZSB9IGZyb20gJy4vdGVtcGxhdGVzL3plbmR1LXNlbGVjdC12YWx1ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgWmVuZHVTZWxlY3RCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuL3RlbXBsYXRlcy96ZW5kdS1zZWxlY3QtYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnLi4vZmlsdGVyL2ZpbHRlcnNDb25maWcnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3plbi1zZWxlY3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi96ZW5kdS1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3plbmR1LXNlbGVjdC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFplbmR1U2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICAvKipcbiAgICAgKiAyLVdheSBjb21wb25lbnQgcHJvcGVydHkgZm9yIHNlbGVjdGVkIGl0ZW1zLlxuICAgICAqIERvbid0IGluaXRpYWxpemUgcHJvcGVydHkgb24gY29uc3RydWN0b3IgdG8gcHJldmVudCBjaGFuZ2Ugc291cmNlIHBhcmFtZXRlclxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNlbGVjdE1vZGVsOiBhbnkgfCBhbnlbXTtcblxuICAgIC8qKlxuICAgICAqIGNhbGxiYWNrIHRvIGVtaXQgY2hhbmdlcyBmb3IgcGFyZW50IGNvbXBvbmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBzZWxlY3RNb2RlbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBvcHRpb25zIGZvciBzZWxlY3RcbiAgICAgKi9cbiAgICBASW5wdXQoKSBvcHRpb25zOiBhbnlbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUHJvcGVydHkgdG8gc2V0IGN1c3RvbSBwbGFjZWhvbGRlciB2YWx1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlbGVjdCBJdGVtcyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGEga2V5IHZhbHVlIHRvIGdldCBkaXNwbGF5IG5hbWUgZnJvbSBvcHRpb24gb2JqZWN0XG4gICAgICovXG4gICAgQElucHV0KCkgZGlzcGxheVByb3A6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYSBrZXkgdmFsdWUgdG8gZ2V0IGlkIGZyb20gb3B0aW9uIG9iamVjdFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGlkUHJvcDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ29tcG9uZW50IHByb3BlcnR5IHRvIGVuYWJsZSBzZWFyY2hcbiAgICAgKi9cbiAgICBASW5wdXQoKSBoYXNTZWFyY2g6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBDb21wb25lbnQgcHJvcGVydHkgdG8gcmV0dXJuIHdob2xlIG9wdGlvbiBvYmplY3RcbiAgICAgKiBCeSBkZWZhdWx0IG9ubHkgaWQgdmFsdWUgaXMgcmV0dXJuZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKSByZXR1cm5PcHRpb246IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBDb21wb25lbnQgcHJvcGVydHkgdG8gZW5hYmxlIG11bHRpc2VsZWN0XG4gICAgICovXG4gICAgQElucHV0KCkgaXNNdWx0aXNlbGVjdDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENvbXBvbmVudCBwcm9wZXJ0eSB0byBkaXNhYmxlIGNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHRoZSBjdXN0b20gaWNvbiBmb3IgdG9nZ2xlXG4gICAgICovXG4gICAgQElucHV0KCkgY3VzdG9tSWNvbiA9IFwiXCI7XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHRoZSBjdXN0b20gaWNvbiBmb3Igc3RhcnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBjdXN0b21JY29uU3RhcnQgPSBcIlwiO1xuXG4gICAgLyoqXG4gICAgICogQ29sb3IgZm9yIGN1c3RvbSBpY29uXG4gICAgICovXG4gICAgQElucHV0KCkgY3VzdG9tSWNvbkNvbG9yID0gXCJcIjtcblxuICAgIC8qKlxuICAgICAqIFRydW5jYXRlIHRleHQgd2l0aCBcIi4uLlwiIGF0IHRoZSBlbmRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpc1RydW5jYXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBzaG93IEFkZCBOZXcgT3B0aW9uIGF0IGZpcnN0IHBsYWNlXG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlQWRkTmV3T3B0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cdFxuICAgLyoqXG4gICAqIFNob3cgQWRkIE5ldyBvcHRpb24gdGV4dCBieSBkZWZhdWx0IGlmIG5ld09wdGlvblRleHQgZW1wdHlcbiAgICovXG4gICBASW5wdXQoKSBzaG93RGVmYXVsdEFkZE9wdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBkaXNwbGF5IGN1c3RvbSB0ZXh0IGZvciBBZGQgTmV3IE9wdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIG5ld09wdGlvblRleHQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEVtaXQgZXZlbnQgd2hlbiBBZGQgTmV3IE9wdGlvbiBpcyBjbGlja2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIGFkZE5ld09wdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKlxuICAgICAgICogc2hvdyByZW1vdmUgT3B0aW9uIGF0IGZpcnN0IHBsYWNlXG4gICAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVSZW1vdmVPcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIGRpc3BsYXkgY3VzdG9tIHRleHQgZm9yIHJlbW92ZSBPcHRpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSByZW1vdmVPcHRpb25UZXh0OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGUgbGF6eSBsb2FkaW5nIGZvciBvcHRpb25zXG4gICAgICovXG4gICAgQElucHV0KCkgaXNMYXp5TG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogTGF6eSBsb2FkZXIgZnVuY3Rpb24gdG8gZmV0Y2ggb3B0aW9uc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGxhenlMb2FkZXI/OiAoc2VhcmNoOiB7IHRleHQ/OiBzdHJpbmcsIGlkcz86IHN0cmluZ1tdIH0sIG9mZnNldDogbnVtYmVyLCBsaW1pdDogbnVtYmVyKSA9PiBQcm9taXNlPERhdGFTb3VyY2VbXT47XG5cbiAgICAvKipcbiAgICAgKiBQcmVmZXJyZWQgZGlyZWN0aW9uIGZvciBkcm9wZG93biBtZW51IHBsYWNlbWVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHByZWZlcmVkT3BlbkRpcmVjdGlvbj86IFwiYm90dG9tXCIgfCBcInRvcFwiO1xuXG4gICAgLyoqXG4gICAgICogRW1pdCBldmVudCB3aGVuIHJlbW92ZSBPcHRpb24gaXMgY2xpY2tlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSByZW1vdmVPcHRpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0IGV2ZW50IHdoZW4gc2VsZWN0IGlzIGNsb3NlZCwgc2VuZGluZyB0aGUgc2VsZWN0ZWQgZGF0YVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBjbG9zZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXJlZCBpdGVtcyB2aXNpYmxlIG9uIGRyb3Bkb3duXG4gICAgICovXG4gICAgcHVibGljIGZpbHRlcmVkT3B0aW9uczogYW55W107XG5cbiAgICAvKipcbiAgICAgKiBJcyBkcm9wZG93biBleHBhbmRlZFxuICAgICAqL1xuICAgIHB1YmxpYyBpc0V4cGFuZGVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgc2VhcmNoVGV4dCA9ICcnO1xuXG4gICAgcHVibGljIGxhYmVsVGV4dCA9ICcnO1xuXG4gICAgcHVibGljIGlzVG9wTWVudURpcmVjdGlvbiA9IGZhbHNlO1xuXG4gICAgcHVibGljIG9wdGlvbjogYW55XG5cbiAgICBwdWJsaWMgY2FuTG9hZE1vcmUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBpc0xvYWRpbmdOb3cgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdCBPcHRpb24gVGVtcGxhdGUgZm9yIGN1c3RvbSBIVE1MXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChaZW5kdVNlbGVjdE9wdGlvbkRpcmVjdGl2ZSkgb3B0aW9uVGVtcGxhdGU6IFplbmR1U2VsZWN0T3B0aW9uRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IFZhbHVlIFRlbXBsYXRlIGZvciBjdXN0b20gSFRNTFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoWmVuZHVTZWxlY3RWYWx1ZURpcmVjdGl2ZSkgdmFsdWVUZW1wbGF0ZTogWmVuZHVTZWxlY3RWYWx1ZURpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIFNlbGVjdCBPcHRpb24gVGVtcGxhdGUgZm9yIGN1c3RvbSBIVE1MXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChaZW5kdVNlbGVjdEJ1dHRvbkRpcmVjdGl2ZSkgYnV0dG9uVGVtcGxhdGU6IFplbmR1U2VsZWN0QnV0dG9uRGlyZWN0aXZlO1xuXG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBvdXRzaWRlSGFuZGxpbmcoZXZlbnQpIHtcbiAgICAgICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIC8vIGVsZW1lbnQgbm90IGluIHRoZSBET01cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBoaWRlIHRoZSBtZW51IGZvciBvdXRzaWRlIGNsaWNrXG4gICAgICAgIHRoaXMuaGlkZURyb3BEb3duKHRydWUpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnLCBbXSlcbiAgICBzY3JvbGwoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUGxhY2VtZW50KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZU9iajogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucygpO1xuICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsKCk7XG5cbiAgICAgICAgaWYgKGNoYW5nZU9ialtcInNlbGVjdE1vZGVsXCJdKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xhenlMb2FkaW5nICYmIHRoaXMuc2VsZWN0TW9kZWw/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5maWx0ZXJlZE9wdGlvbnM/Lmxlbmd0aCAmJiAhdGhpcy5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHByZWxvYWQgZGF0YSB0byBzaG93IHRoZSBsYWJlbHNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkTW9yZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaXNNb2RlbEVtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5pc011bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuc2VsZWN0TW9kZWwgfHwgIXRoaXMuc2VsZWN0TW9kZWwubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLnNlbGVjdE1vZGVsID09PSAndW5kZWZpbmVkJyB8fCB0aGlzLnNlbGVjdE1vZGVsID09PSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZU9wdGlvbkNsaWNrKG9wdGlvbjogc3RyaW5nIHwgb2JqZWN0KSB7XG4gICAgICAgIHRoaXMub3B0aW9uID0gb3B0aW9uO1xuICAgICAgICBjb25zdCBvcHRpb25WYWx1ZSA9IHRoaXMucmV0dXJuT3B0aW9uID8gb3B0aW9uIDogdGhpcy5nZXRJZChvcHRpb24pO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlT3B0aW9uKG9wdGlvblZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2luZ2xlU2VsZWN0KG9wdGlvblZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cblxuICAgIC8vIExvZ2ljIGZvciBzaW5nbGUgc2VsZWN0XG4gICAgcHJpdmF0ZSBzaW5nbGVTZWxlY3QodmFsdWU6IHN0cmluZyB8IG9iamVjdCkge1xuICAgICAgICB0aGlzLnNlbGVjdE1vZGVsID0gdmFsdWU7XG5cbiAgICAgICAgLy8gIEhpZGUgZHJvcGRvd24gaWYgc2luZ2xlIHNlbGVjdFxuICAgICAgICB0aGlzLmhpZGVEcm9wRG93bih0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlRXhwYW5kKCkge1xuICAgICAgICB0aGlzLmlzRXhwYW5kZWQgPSAhdGhpcy5pc0V4cGFuZGVkO1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBcIlwiO1xuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVQbGFjZW1lbnQoKTtcblxuICAgICAgICBpZiAodGhpcy5pc0V4cGFuZGVkICYmIHRoaXMuaXNMYXp5TG9hZGluZykge1xuICAgICAgICAgICAgdGhpcy5sb2FkTW9yZSh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIExvZ2ljIGZvciBtdWx0aXNlbGVjdFxuICAgIHByaXZhdGUgdG9nZ2xlT3B0aW9uKHZhbHVlOiBzdHJpbmcgfCBvYmplY3QpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0TW9kZWwpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGVsID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RWxlbWVudEluZGV4KHZhbHVlKTtcblxuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGVsLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50b2dnbGVDaGlsZHJlbih0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlQ2hpbGRyZW4oZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVMYWJlbCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9nZ2xlQ2hpbGRyZW4oY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9uIHx8ICF0aGlzLm9wdGlvbi5DaGlsZHJlbnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3B0aW9uLkNoaWxkcmVucy5mb3JFYWNoKChjaGlsZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKGVsID0+IHRoaXMuZ2V0SWQoZWwpID09PSBjaGlsZCk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZEluZGV4ID0gdGhpcy5zZWxlY3RNb2RlbC5maW5kSW5kZXgoZWwgPT4gdGhpcy5nZXRJZChlbCkgPT09IGNoaWxkKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbiAmJiBjaGVja2VkICYmIGNoaWxkSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RNb2RlbC5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNoZWNrZWQgJiYgY2hpbGRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RNb2RlbC5zcGxpY2UoY2hpbGRJbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmUgY2FsbCB0byBoYW5kbGUgbmVzdGVkIGNoaWxkcmVuXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUNoaWxkcmVuKGNoZWNrZWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVsZW1lbnRJbmRleCh2YWx1ZTogc3RyaW5nIHwgb2JqZWN0KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlSWQgPSB0aGlzLmdldElkKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGVsLmZpbmRJbmRleChlbCA9PiB0aGlzLmdldElkKGVsKSA9PT0gdmFsdWVJZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RNb2RlbC5pbmRleE9mKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGVBbGwoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdE1vZGVsLmxlbmd0aCAhPT0gdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RNb2RlbCA9IHRoaXMub3B0aW9ucy5tYXAoZWwgPT4gdGhpcy5yZXR1cm5PcHRpb24gPyBlbCA6IHRoaXMuZ2V0SWQoZWwpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZWwgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNlYXJjaENoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25zKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNMYXp5TG9hZGluZykge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2FuTG9hZE1vcmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5sb2FkTW9yZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbHRlck9wdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuc2xpY2UoMCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCh0aGlzLnNlYXJjaFRleHQsICdpJyk7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gb3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHJlZ2V4LnRlc3QodGhpcy5nZXROYW1lKG9wdGlvbikpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNTZWxlY3RlZChvcHRpb246IHN0cmluZyB8IG9iamVjdCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5pc01vZGVsRW1wdHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3B0aW9uSWQgPSB0aGlzLmdldElkKG9wdGlvbik7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0TW9kZWwuZmluZEluZGV4KGVsID0+IHRoaXMuZ2V0SWQoZWwpID09PSBvcHRpb25JZCkgPj0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldElkKHRoaXMuc2VsZWN0TW9kZWwpID09PSBvcHRpb25JZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVMYWJlbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNb2RlbEVtcHR5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ291bnQgPSB0aGlzLnNlbGVjdE1vZGVsLmxlbmd0aDtcblxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ291bnQgPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsVGV4dCA9IHRoaXMuZ2V0TmFtZUZyb21WYWx1ZSh0aGlzLnNlbGVjdE1vZGVsWzBdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFRleHQgPSBgJHtzZWxlY3RlZENvdW50fSBTZWxlY3RlZGA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxhYmVsVGV4dCA9IHRoaXMuZ2V0TmFtZUZyb21WYWx1ZSh0aGlzLnNlbGVjdE1vZGVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXROYW1lRnJvbVZhbHVlKHZhbDogc3RyaW5nIHwgb2JqZWN0KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuT3B0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROYW1lKHZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xhenlMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0ID0gdGhpcy5maWx0ZXJlZE9wdGlvbnM/LmZpbmQoaSA9PiBpLmlkID09IHZhbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmFtZShvcHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMgfHwgIXRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgb3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQoZWwgPT4gdGhpcy5nZXRJZChlbCkgPT09IHZhbClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROYW1lKG9wdGlvbiA/PyB2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldE5hbWUob3B0aW9uOiBzdHJpbmcgfCBvYmplY3QpOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXlQcm9wKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tYmluZWRQcm9wcyA9IHRoaXMuZGlzcGxheVByb3Auc3BsaXQoXCJ8XCIpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoaSA9PiB0aGlzLmdldFJlY3Vyc2l2ZVByb3BlcnR5KG9wdGlvbiwgaSkpXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiIFwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tYmluZWRQcm9wcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQXBwLVNlbGVjdDogd2hlbiB1c2luZyBvYmplY3RzIGFzIG1vZGVsLCBhIGRpc3BsYXlQcm9wIHZhbHVlIGlzIG1hbmRhdG9yeS4nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHByaXZhdGUgZ2V0SWQob3B0aW9uOiBzdHJpbmcgfCBvYmplY3QpOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlkUHJvcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2l2ZVByb3BlcnR5KG9wdGlvbiwgdGhpcy5pZFByb3ApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBcHAtU2VsZWN0OiB3aGVuIHVzaW5nIG9iamVjdHMgYXMgbW9kZWwsIGEgaWRQcm9wIHZhbHVlIGlzIG1hbmRhdG9yeS4nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlY3Vyc2l2ZVByb3BlcnR5KG9iamVjdDogYW55LCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgob2JqLCB4KSA9PiB7XG4gICAgICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ialt4XTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIG9iamVjdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGhpZGVEcm9wRG93bih1c2VyQWN0aW9uOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gT25seSBlbWl0IGNsb3NlZCBldmVudCBpZiBpdCB3YXMgb3BlbiBBTkQgdHJpZ2dlcmVkIGJ5IHVzZXIgYWN0aW9uXG4gICAgICAgIGlmICh1c2VyQWN0aW9uICYmIHRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCh0aGlzLnNlbGVjdE1vZGVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdENoYW5nZSgpIHtcbiAgICAgICAgLy8gbm90aWZ5IHdpdGggdGltZW91dFxuICAgICAgICAvLyBhbGxvdyBvdXRwdXQgcHJvcGVydHkgXCJlbmFibGVkXCIgYXBwbGllZCBieSBwYXJlbnQgZmlyc3QgYW5kIHRoZW4gZW1pdCB0aGUgb25DaGFuZ2VcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGVsQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RNb2RlbCk7XG4gICAgICAgIH0sIDEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUGxhY2VtZW50KCkge1xuICAgICAgICAvLyB1cGRhdGUgbWVudSBwb3NpdGlvbiBiYXNlIG9uIHNjcm9sbFxuICAgICAgICB0aGlzLmlzVG9wTWVudURpcmVjdGlvbiA9IHRoaXMuZ2V0TWVudURpcmVjdGlvbigpID09PSBcInRvcFwiO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TWVudURpcmVjdGlvbigpOiBcImJvdHRvbVwiIHwgXCJ0b3BcIiB7XG5cbiAgICAgICAgaWYgKHRoaXMucHJlZmVyZWRPcGVuRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVmZXJlZE9wZW5EaXJlY3Rpb247XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCB0b3AgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcblxuICAgICAgICBjb25zdCBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cbiAgICAgICAgaWYgKHRvcCA+IChoZWlnaHQgLyAyKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwidG9wXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gXCJib3R0b21cIlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNYXhNZW51SGVpZ2h0KCkge1xuICAgICAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gdGhpcy5nZXRDb250YWluZXJFbGVtZW50KCk7XG4gICAgICAgIGlmICghY29udGFpbmVyRWxlbWVudCB8fCAhY29udGFpbmVyRWxlbWVudC5jbGllbnRIZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjE5MHB4XCI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRIZWlnaHQgPSBjb250YWluZXJFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgbGV0IGhlaWdodCA9IE1hdGgucm91bmQoKHBhcmVudEhlaWdodCAvIDIpIC0gMjUpO1xuICAgICAgICBoZWlnaHQgPSBNYXRoLm1pbigyMTYsIGhlaWdodCk7XG4gICAgICAgIGhlaWdodCA9IE1hdGgubWF4KDk2LCBoZWlnaHQpO1xuICAgICAgICByZXR1cm4gYCR7aGVpZ2h0fXB4YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbnRhaW5lckVsZW1lbnQoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gY29tcG9uZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJhcHAtc2VsZWN0XCIpLml0ZW0oMCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIHJldHVybiBjb250YWluZXIub2Zmc2V0UGFyZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVBZGROZXdPcHRpb24oKSB7XG4gICAgICAgIHRoaXMuYWRkTmV3T3B0aW9uLmVtaXQoeyB2YWx1ZTogdGhpcy5zZWFyY2hUZXh0IH0pXG4gICAgICAgIHRoaXMuaGlkZURyb3BEb3duKHRydWUpXG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZVJlbW92ZU9wdGlvbigpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVPcHRpb24uZW1pdCh7IHJlbW92ZWQ6IHRydWUgfSlcbiAgICAgICAgdGhpcy5oaWRlRHJvcERvd24odHJ1ZSlcbiAgICB9XG5cblxuXG4gICAgcHVibGljIGFzeW5jIGxvYWRNb3JlKHNob3dTZWxlY3RlZE9uVG9wOiBib29sZWFuKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ05vdyA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMubGF6eUxvYWRlcikge1xuICAgICAgICAgICAgICAgIHRocm93IGBsb2FkZXIgaXMgbm90IGF2YWlsYWJsZWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5maWx0ZXJlZE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBsb2FkIGZpcnN0IDEwIHJlY29yZHMgZm9yIHRoZSB0aGUgZmlyc3QgdGltZVxuICAgICAgICAgICAgY29uc3QgbGltaXQgPSAodGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09IDApID8gMTAgOiAxMDA7XG4gICAgICAgICAgICBsZXQgbmV3SXRlbXMgPSBhd2FpdCB0aGlzLmxhenlMb2FkZXIoeyB0ZXh0OiB0aGlzLnNlYXJjaFRleHQgfHwgXCJcIiB9LCB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGgsIGxpbWl0KTtcblxuICAgICAgICAgICAgdGhpcy5jYW5Mb2FkTW9yZSA9IChuZXdJdGVtcy5sZW5ndGggPT0gbGltaXQpO1xuXG4gICAgICAgICAgICAvLyB0aGUgc2VsZWN0TW9kZWwgY29udGFpbnMgdGhlIHNlbGVjdGVkIGl0ZW1zIGlkc1xuICAgICAgICAgICAgY29uc3QgY2hlY2tlZElkcyA9IHRoaXMuc2VsZWN0TW9kZWwgYXMgc3RyaW5nW107XG5cbiAgICAgICAgICAgIGlmIChzaG93U2VsZWN0ZWRPblRvcCAmJiBjaGVja2VkSWRzPy5sZW5ndGgpIHtcblxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgY2hlY2tlZCBpdGVtcyBmaXJzdFxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMuZmlsdGVyKGkgPT4gIWNoZWNrZWRJZHMuaW5jbHVkZXMoaS5pZCkpO1xuICAgICAgICAgICAgICAgIG5ld0l0ZW1zID0gbmV3SXRlbXMuZmlsdGVyKGkgPT4gIWNoZWNrZWRJZHMuaW5jbHVkZXMoaS5pZCBhcyBzdHJpbmcpKTtcblxuICAgICAgICAgICAgICAgIC8vIGFkZCBhbGwgY2hlY2tlZCBpdGVtcyB0byB0aGUgdG9wICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRJdGVtcyA9IGF3YWl0IHRoaXMubGF6eUxvYWRlcih7IGlkczogY2hlY2tlZElkcyB9LCAwLCAxMDApO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gY2hlY2tlZEl0ZW1zLmNvbmNhdCh0aGlzLmZpbHRlcmVkT3B0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsKCk7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgLy8gdGhlIGZpbHRlcmVkRGF0YVNvdXJjZSBjb250YWlucyB0aGUgaXRlbXMgdGhhdCBpcyB2aXNpbGlibGUgdG8gdXNlciBhdCB0aGUgY3VycmVudCBtb21lbnRcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMuY29uY2F0KG5ld0l0ZW1zKTtcblxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nTm93ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXBwLXNlbGVjdFwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJhcHAtc2VsZWN0LXRvZ2dsZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUV4cGFuZCgpXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNFeHBhbmRlZH1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1zZWxlY3QtbGFiZWxcIj5cbiAgICAgICAgICAgIDxpICpuZ0lmPVwiY3VzdG9tSWNvblN0YXJ0XCJcbiAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgYXBwLXNlbGVjdC1pY29uLXN0YXJ0XCI+e3tjdXN0b21JY29uU3RhcnR9fTwvaT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNNb2RlbEVtcHR5KClcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57e3BsYWNlaG9sZGVyIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNNdWx0aXNlbGVjdCAmJiAhaXNNb2RlbEVtcHR5KClcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJ2YWx1ZVRlbXBsYXRlICYmIHNlbGVjdE1vZGVsWzBdOyBlbHNlIHRwbFZhbHVlVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInZhbHVlVGVtcGxhdGUudGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBzZWxlY3RNb2RlbDogc2VsZWN0TW9kZWwsIGxhYmVsVGV4dDogbGFiZWxUZXh0IH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdHBsVmFsdWVUZXh0PlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBsYWJlbFRleHQgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTXVsdGlzZWxlY3QgJiYgIWlzTW9kZWxFbXB0eSgpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgbGFiZWxUZXh0IHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aSAqbmdJZj1cIiFjdXN0b21JY29uXCJcbiAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBhcHAtc2VsZWN0LWljb25cIj5leHBhbmRfbW9yZTwvaT5cbiAgICAgICAgPGkgKm5nSWY9XCJjdXN0b21JY29uXCJcbiAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCBjdXN0b20taWNvblwiXG4gICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJjdXN0b21JY29uQ29sb3JcIj57e2N1c3RvbUljb259fTwvaT5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tbWVudS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1tZW51IGFwcC1zZWxlY3QtZHJvcGRvd24td3JhcHBlclwiXG4gICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnc2hvdy10b3AnOiBpc1RvcE1lbnVEaXJlY3Rpb24gfVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1zZWxlY3QtZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAqbmdJZj1cImlzRXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLW1lbnUtaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzU2VhcmNoXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS1TZWFyY2ggb3B0aW9ucy0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx6ZW4tc2VhcmNoLWJveCBbKHRleHQpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXh0Q2hhbmdlKT1cIm9uU2VhcmNoQ2hhbmdlKClcIj48L3plbi1zZWFyY2gtYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJidXR0b25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJ1dHRvblRlbXBsYXRlLnRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLW1lbnUtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tTm8gb3B0aW9ucyBmb3VuZC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm8tb3B0aW9ucy1mb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZmlsdGVyZWRPcHRpb25zLmxlbmd0aCAmJiAhaXNMb2FkaW5nTm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnTm8gbWF0Y2hpbmcgb3B0aW9ucyBmb3VuZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLVNlbGVjdCBBbGwgT3B0aW9uLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24taXRlbS1jaGVja2JveCBzZWxlY3QtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTXVsdGlzZWxlY3QgJiYgIXNlYXJjaFRleHQgJiYgIWlzTGF6eUxvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBbGwoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHplbi1jaGVja2JveCBbY2hlY2tlZF09XCJzZWxlY3RNb2RlbC5sZW5ndGggPT09IG9wdGlvbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0TW9kZWwubGVuZ3RoICE9PSBvcHRpb25zLmxlbmd0aCAmJiBzZWxlY3RNb2RlbC5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVZhbHVlQ2hhbmdlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1NlbGVjdCBBbGwnIHwgdHJhbnNsYXRlXCI+PC96ZW4tY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS1TaW5nbGUgc2VsZWN0IE9wdGlvbnMtLT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc011bHRpc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImFjdGlvbi1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZW5hYmxlQWRkTmV3T3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBZGROZXdPcHRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibmV3T3B0aW9uVGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBuZXdPcHRpb25UZXh0IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIW5ld09wdGlvblRleHQgJiYgIXNob3dEZWZhdWx0QWRkT3B0aW9uICYmIHNlYXJjaFRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB7eyAnQWRkJyB8IHRyYW5zbGF0ZSB9fSBcInt7IHNlYXJjaFRleHQgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFuZXdPcHRpb25UZXh0ICYmIHNob3dEZWZhdWx0QWRkT3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0FkZCBOZXcnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYWN0aW9uLWl0ZW0gcmVtb3ZlLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJlbmFibGVSZW1vdmVPcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVJlbW92ZU9wdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyZW1vdmVPcHRpb25UZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJlbW92ZU9wdGlvblRleHQgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhcmVtb3ZlT3B0aW9uVGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydSZW1vdmUgU2VsZWN0ZWQnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU9wdGlvbkNsaWNrKG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogaXNTZWxlY3RlZChvcHRpb24pIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aW9uLWl0ZW0tdHJ1bmNhdGVdPVwiaXNUcnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJvcHRpb25UZW1wbGF0ZTsgZWxzZSB0cGxPcHRpb25UZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvblRlbXBsYXRlLnRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG9wdGlvbjogb3B0aW9uIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0cGxPcHRpb25UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0TmFtZShvcHRpb24pIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tTXVsdGlzZWxlY3QgT3B0aW9ucy0tPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNNdWx0aXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1pdGVtLWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlT3B0aW9uQ2xpY2sob3B0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx6ZW4tY2hlY2tib3ggKm5nSWY9XCJpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWQob3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZ2V0TmFtZShvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVmFsdWVDaGFuZ2VdPVwidHJ1ZVwiPjwvemVuLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xhenlMb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNhbkxvYWRNb3JlICYmICFpc0xvYWRpbmdOb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTW9yZShmYWxzZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXN0cm9rZWQgZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snTG9hZCBNb3JlJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdOb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsb2FkZXItbW9yZS1zcGlubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx6ZW4tc3Bpbm5lciBzaXplPVwic21hbGxcIj48L3plbi1zcGlubmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -2058,6 +2058,10 @@ class ZenduSelectComponent {
2058
2058
  * show Add New Option at first place
2059
2059
  */
2060
2060
  this.enableAddNewOption = false;
2061
+ /**
2062
+ * Show Add New option text by default if newOptionText empty
2063
+ */
2064
+ this.showDefaultAddOption = true;
2061
2065
  /**
2062
2066
  * Emit event when Add New Option is clicked
2063
2067
  */
@@ -2403,10 +2407,10 @@ class ZenduSelectComponent {
2403
2407
  }
2404
2408
  }
2405
2409
  ZenduSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduSelectComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2406
- ZenduSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduSelectComponent, selector: "zen-select", inputs: { selectModel: "selectModel", options: "options", placeholder: "placeholder", displayProp: "displayProp", idProp: "idProp", hasSearch: "hasSearch", returnOption: "returnOption", isMultiselect: "isMultiselect", disabled: "disabled", customIcon: "customIcon", customIconStart: "customIconStart", customIconColor: "customIconColor", isTruncate: "isTruncate", enableAddNewOption: "enableAddNewOption", newOptionText: "newOptionText", enableRemoveOption: "enableRemoveOption", removeOptionText: "removeOptionText", isLazyLoading: "isLazyLoading", lazyLoader: "lazyLoader", preferedOpenDirection: "preferedOpenDirection" }, outputs: { selectModelChange: "selectModelChange", addNewOption: "addNewOption", removeOption: "removeOption", closed: "closed" }, host: { listeners: { "window:mousedown": "outsideHandling($event)", "window:scroll": "scroll()" } }, queries: [{ propertyName: "optionTemplate", first: true, predicate: ZenduSelectOptionDirective, descendants: true }, { propertyName: "valueTemplate", first: true, predicate: ZenduSelectValueDirective, descendants: true }, { propertyName: "buttonTemplate", first: true, predicate: ZenduSelectButtonDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"app-select\">\n <button class=\"app-select-toggle\"\n [disabled]=\"disabled\"\n (click)=\"toggleExpand()\"\n [ngClass]=\"{'active': isExpanded}\">\n <div class=\"app-select-label\">\n <i *ngIf=\"customIconStart\" class=\"material-icons app-select-icon-start\">{{customIconStart}}</i>\n <div class=\"placeholder\"\n *ngIf=\"isModelEmpty()\">\n <span>{{placeholder | translate}}</span>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"!isMultiselect && !isModelEmpty()\">\n <ng-template *ngIf=\"valueTemplate && selectModel[0]; else tplValueText\"\n [ngTemplateOutlet]=\"valueTemplate.template\"\n [ngTemplateOutletContext]=\"{ selectModel: selectModel, labelText: labelText }\"></ng-template>\n <ng-template #tplValueText>\n <span>{{ labelText | translate }}</span>\n </ng-template>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"isMultiselect && !isModelEmpty()\">\n <span>{{ labelText | translate }}</span>\n </div>\n </div>\n <i *ngIf=\"!customIcon\"\n class=\"material-icons app-select-icon\">expand_more</i>\n <i *ngIf=\"customIcon\"\n class=\"material-icons-outlined custom-icon\"\n [style.color]=\"customIconColor\">{{customIcon}}</i>\n </button>\n\n <div class=\"action-menu-container\">\n <div class=\"action-menu app-select-dropdown-wrapper\"\n [ngClass]=\"{ 'show-top': isTopMenuDirection }\">\n <div class=\"app-select-dropdown\"\n *ngIf=\"isExpanded\">\n <div class=\"action-menu-header\"\n *ngIf=\"hasSearch\">\n <!--Search options-->\n <div class=\"search-wrapper\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n </div>\n <ng-template *ngIf=\"buttonTemplate\"\n [ngTemplateOutlet]=\"buttonTemplate.template\">\n </ng-template>\n <div class=\"action-menu-body\">\n <!--No options found-->\n <div class=\"no-options-found\"\n *ngIf=\"!filteredOptions.length && !isLoadingNow\">\n {{ 'No matching options found' | translate }}\n </div>\n\n <!--Select All Option-->\n <div class=\"action-item-checkbox select-all\"\n *ngIf=\"isMultiselect && !searchText && !isLazyLoading\"\n (click)=\"toggleAll()\">\n <zen-checkbox [checked]=\"selectModel.length === options.length\"\n [indeterminate]=\"selectModel.length !== options.length && selectModel.length\"\n [disableValueChange]=\"true\"\n [label]=\"'Select All' | translate\"></zen-checkbox>\n </div>\n\n <!--Single select Options-->\n <ng-container *ngIf=\"!isMultiselect\">\n <a class=\"action-item\"\n *ngIf=\"enableAddNewOption\"\n (click)=\"handleAddNewOption()\">\n <span *ngIf=\"newOptionText\">\n {{ newOptionText | translate }}\n </span>\n <span *ngIf=\"!newOptionText\">\n {{'Add New' | translate}}\n </span>\n </a>\n\n <a class=\"action-item remove-item\"\n *ngIf=\"enableRemoveOption\"\n (click)=\"handleRemoveOption()\">\n <span *ngIf=\"removeOptionText\">\n {{ removeOptionText | translate }}\n </span>\n <span *ngIf=\"!removeOptionText\">\n {{'Remove Selected' | translate}}\n </span>\n </a>\n\n <a class=\"action-item\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\"\n [ngClass]=\"{ 'active': isSelected(option) }\">\n <span *ngIf=\"!isMultiselect\"\n [class.action-item-truncate]=\"isTruncate\">\n <ng-template *ngIf=\"optionTemplate; else tplOptionText\"\n [ngTemplateOutlet]=\"optionTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: option }\">\n </ng-template>\n <ng-template #tplOptionText>\n {{ getName(option) | translate }}\n </ng-template>\n </span>\n </a>\n </ng-container>\n\n <!--Multiselect Options-->\n <ng-container *ngIf=\"isMultiselect\">\n <div class=\"action-item-checkbox\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\">\n <zen-checkbox *ngIf=\"isMultiselect\"\n [checked]=\"isSelected(option)\"\n [label]=\"getName(option)\"\n [disableValueChange]=\"true\"></zen-checkbox>\n </div>\n\n <ng-container *ngIf=\"isLazyLoading\">\n <div *ngIf=\"canLoadMore && !isLoadingNow\"\n class=\"action-item\">\n <button (click)=\"loadMore(false)\"\n class=\"button-stroked full-width\">\n {{'Load More' | translate}}\n </button>\n </div>\n <div *ngIf=\"isLoadingNow\"\n class=\"loader-more-spinner\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{--toggle-border-bottom: var(--zen-select-toggle-border-bottom, 1px solid #d6d6d8);--toggle-padding: var(--zen-select-toggle-padding, 0 0 8px 0)}.app-select{width:100%;position:relative}.app-select ::-webkit-scrollbar-thumb{background-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle{display:flex;align-items:center;justify-content:space-between;position:relative;transition:.3s;width:100%;background:#ffffff;-webkit-appearance:none;appearance:none;outline:none;cursor:pointer;border:none;border-radius:0;border-bottom:var(--toggle-border-bottom);padding:var(--toggle-padding);font-style:normal;font-weight:400;font-size:16px;line-height:24px;color:#333}.app-select .app-select-toggle .app-select-label{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-weight:400;font-size:14px;line-height:24px}.app-select .app-select-toggle .app-select-label .placeholder{color:#bebebe}.app-select .app-select-toggle .app-select-label .selected-item{color:#333}.app-select .app-select-toggle .custom-icon{color:#bebebe}.app-select .app-select-toggle .app-select-icon{color:#bebebe;transition:.3s}.app-select .app-select-toggle .app-select-icon-start{color:#bebebe;margin-right:4px}.app-select .app-select-toggle:focus{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle:focus .app-select-icon,.app-select .app-select-toggle:focus .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle[readonly],.app-select .app-select-toggle[disabled]{cursor:not-allowed;color:#b8b9bc;border-color:#d0d0d2}.app-select .app-select-toggle.active{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle.active .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle.active .app-select-icon{transform:rotate(180deg);color:var(--color-primary, #2188d9)}.app-select .app-select-toggle.active .app-select-icon-start{color:var(--color-primary, #2188d9)}.app-select .action-menu-container{position:sticky;width:inherit;z-index:10}.app-select .app-select-dropdown-wrapper{top:115%;width:inherit}.app-select .app-select-dropdown-wrapper.show-top{top:unset;bottom:115%}.app-select .app-select-dropdown-wrapper .action-menu-body{max-height:200px;overflow:auto}.app-select .app-select-dropdown-wrapper .action-menu-body .remove-item{color:#dc3e33}.app-select .app-select-dropdown-wrapper .no-options-found{background:#ffffff;color:#b8b9bc;padding:8px 16px;text-decoration:none;font-style:normal;font-weight:400;font-size:16px;line-height:24px}.app-select .app-select-dropdown-wrapper .select-all{font-weight:500}.app-select .app-select-dropdown-wrapper .loader-more-spinner{display:flex;align-items:center;justify-content:center;padding:16px;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: "component", type: ZenduCheckboxComponent, selector: "zen-checkbox", inputs: ["checked", "label", "labelColor", "disabled", "disableValueChange", "indeterminate", "imageUrl"], outputs: ["checkedChange"] }, { kind: "component", type: ZenduSearchBoxComponent, selector: "zen-search-box", inputs: ["text", "delay", "autoFocus", "disabled", "placeholder"], outputs: ["textChange"] }, { kind: "component", type: ZenduSpinner, selector: "zen-spinner", inputs: ["size"] }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] });
2410
+ ZenduSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduSelectComponent, selector: "zen-select", inputs: { selectModel: "selectModel", options: "options", placeholder: "placeholder", displayProp: "displayProp", idProp: "idProp", hasSearch: "hasSearch", returnOption: "returnOption", isMultiselect: "isMultiselect", disabled: "disabled", customIcon: "customIcon", customIconStart: "customIconStart", customIconColor: "customIconColor", isTruncate: "isTruncate", enableAddNewOption: "enableAddNewOption", showDefaultAddOption: "showDefaultAddOption", newOptionText: "newOptionText", enableRemoveOption: "enableRemoveOption", removeOptionText: "removeOptionText", isLazyLoading: "isLazyLoading", lazyLoader: "lazyLoader", preferedOpenDirection: "preferedOpenDirection" }, outputs: { selectModelChange: "selectModelChange", addNewOption: "addNewOption", removeOption: "removeOption", closed: "closed" }, host: { listeners: { "window:mousedown": "outsideHandling($event)", "window:scroll": "scroll()" } }, queries: [{ propertyName: "optionTemplate", first: true, predicate: ZenduSelectOptionDirective, descendants: true }, { propertyName: "valueTemplate", first: true, predicate: ZenduSelectValueDirective, descendants: true }, { propertyName: "buttonTemplate", first: true, predicate: ZenduSelectButtonDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"app-select\">\n <button class=\"app-select-toggle\"\n [disabled]=\"disabled\"\n (click)=\"toggleExpand()\"\n [ngClass]=\"{'active': isExpanded}\">\n <div class=\"app-select-label\">\n <i *ngIf=\"customIconStart\"\n class=\"material-icons app-select-icon-start\">{{customIconStart}}</i>\n <div class=\"placeholder\"\n *ngIf=\"isModelEmpty()\">\n <span>{{placeholder | translate}}</span>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"!isMultiselect && !isModelEmpty()\">\n <ng-template *ngIf=\"valueTemplate && selectModel[0]; else tplValueText\"\n [ngTemplateOutlet]=\"valueTemplate.template\"\n [ngTemplateOutletContext]=\"{ selectModel: selectModel, labelText: labelText }\"></ng-template>\n <ng-template #tplValueText>\n <span>{{ labelText | translate }}</span>\n </ng-template>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"isMultiselect && !isModelEmpty()\">\n <span>{{ labelText | translate }}</span>\n </div>\n </div>\n <i *ngIf=\"!customIcon\"\n class=\"material-icons app-select-icon\">expand_more</i>\n <i *ngIf=\"customIcon\"\n class=\"material-icons-outlined custom-icon\"\n [style.color]=\"customIconColor\">{{customIcon}}</i>\n </button>\n\n <div class=\"action-menu-container\">\n <div class=\"action-menu app-select-dropdown-wrapper\"\n [ngClass]=\"{ 'show-top': isTopMenuDirection }\">\n <div class=\"app-select-dropdown\"\n *ngIf=\"isExpanded\">\n <div class=\"action-menu-header\"\n *ngIf=\"hasSearch\">\n <!--Search options-->\n <div class=\"search-wrapper\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n </div>\n <ng-template *ngIf=\"buttonTemplate\"\n [ngTemplateOutlet]=\"buttonTemplate.template\">\n </ng-template>\n <div class=\"action-menu-body\">\n <!--No options found-->\n <div class=\"no-options-found\"\n *ngIf=\"!filteredOptions.length && !isLoadingNow\">\n {{ 'No matching options found' | translate }}\n </div>\n\n <!--Select All Option-->\n <div class=\"action-item-checkbox select-all\"\n *ngIf=\"isMultiselect && !searchText && !isLazyLoading\"\n (click)=\"toggleAll()\">\n <zen-checkbox [checked]=\"selectModel.length === options.length\"\n [indeterminate]=\"selectModel.length !== options.length && selectModel.length\"\n [disableValueChange]=\"true\"\n [label]=\"'Select All' | translate\"></zen-checkbox>\n </div>\n\n <!--Single select Options-->\n <ng-container *ngIf=\"!isMultiselect\">\n <a class=\"action-item\"\n *ngIf=\"enableAddNewOption\"\n (click)=\"handleAddNewOption()\">\n <span *ngIf=\"newOptionText\">\n {{ newOptionText | translate }}\n </span>\n <span *ngIf=\"!newOptionText && !showDefaultAddOption && searchText\">\n + {{ 'Add' | translate }} \"{{ searchText }}\"\n </span>\n <span *ngIf=\"!newOptionText && showDefaultAddOption\">\n {{'Add New' | translate}}\n </span>\n </a>\n\n <a class=\"action-item remove-item\"\n *ngIf=\"enableRemoveOption\"\n (click)=\"handleRemoveOption()\">\n <span *ngIf=\"removeOptionText\">\n {{ removeOptionText | translate }}\n </span>\n <span *ngIf=\"!removeOptionText\">\n {{'Remove Selected' | translate}}\n </span>\n </a>\n\n <a class=\"action-item\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\"\n [ngClass]=\"{ 'active': isSelected(option) }\">\n <span *ngIf=\"!isMultiselect\"\n [class.action-item-truncate]=\"isTruncate\">\n <ng-template *ngIf=\"optionTemplate; else tplOptionText\"\n [ngTemplateOutlet]=\"optionTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: option }\">\n </ng-template>\n <ng-template #tplOptionText>\n {{ getName(option) | translate }}\n </ng-template>\n </span>\n </a>\n </ng-container>\n\n <!--Multiselect Options-->\n <ng-container *ngIf=\"isMultiselect\">\n <div class=\"action-item-checkbox\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\">\n <zen-checkbox *ngIf=\"isMultiselect\"\n [checked]=\"isSelected(option)\"\n [label]=\"getName(option)\"\n [disableValueChange]=\"true\"></zen-checkbox>\n </div>\n\n <ng-container *ngIf=\"isLazyLoading\">\n <div *ngIf=\"canLoadMore && !isLoadingNow\"\n class=\"action-item\">\n <button (click)=\"loadMore(false)\"\n class=\"button-stroked full-width\">\n {{'Load More' | translate}}\n </button>\n </div>\n <div *ngIf=\"isLoadingNow\"\n class=\"loader-more-spinner\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{--toggle-border-bottom: var(--zen-select-toggle-border-bottom, 1px solid #d6d6d8);--toggle-padding: var(--zen-select-toggle-padding, 0 0 8px 0)}.app-select{width:100%;position:relative}.app-select ::-webkit-scrollbar-thumb{background-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle{display:flex;align-items:center;justify-content:space-between;position:relative;transition:.3s;width:100%;background:#ffffff;-webkit-appearance:none;appearance:none;outline:none;cursor:pointer;border:none;border-radius:0;border-bottom:var(--toggle-border-bottom);padding:var(--toggle-padding);font-style:normal;font-weight:400;font-size:16px;line-height:24px;color:#333}.app-select .app-select-toggle .app-select-label{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-weight:400;font-size:14px;line-height:24px}.app-select .app-select-toggle .app-select-label .placeholder{color:#bebebe}.app-select .app-select-toggle .app-select-label .selected-item{color:#333}.app-select .app-select-toggle .custom-icon{color:#bebebe}.app-select .app-select-toggle .app-select-icon{color:#bebebe;transition:.3s}.app-select .app-select-toggle .app-select-icon-start{color:#bebebe;margin-right:4px}.app-select .app-select-toggle:focus{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle:focus .app-select-icon,.app-select .app-select-toggle:focus .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle[readonly],.app-select .app-select-toggle[disabled]{cursor:not-allowed;color:#b8b9bc;border-color:#d0d0d2}.app-select .app-select-toggle.active{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle.active .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle.active .app-select-icon{transform:rotate(180deg);color:var(--color-primary, #2188d9)}.app-select .app-select-toggle.active .app-select-icon-start{color:var(--color-primary, #2188d9)}.app-select .action-menu-container{position:sticky;width:inherit;z-index:10}.app-select .app-select-dropdown-wrapper{top:115%;width:inherit}.app-select .app-select-dropdown-wrapper.show-top{top:unset;bottom:115%}.app-select .app-select-dropdown-wrapper .action-menu-body{max-height:200px;overflow:auto}.app-select .app-select-dropdown-wrapper .action-menu-body .remove-item{color:#dc3e33}.app-select .app-select-dropdown-wrapper .no-options-found{background:#ffffff;color:#b8b9bc;padding:8px 16px;text-decoration:none;font-style:normal;font-weight:400;font-size:16px;line-height:24px}.app-select .app-select-dropdown-wrapper .select-all{font-weight:500}.app-select .app-select-dropdown-wrapper .loader-more-spinner{display:flex;align-items:center;justify-content:center;padding:16px;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: "component", type: ZenduCheckboxComponent, selector: "zen-checkbox", inputs: ["checked", "label", "labelColor", "disabled", "disableValueChange", "indeterminate", "imageUrl"], outputs: ["checkedChange"] }, { kind: "component", type: ZenduSearchBoxComponent, selector: "zen-search-box", inputs: ["text", "delay", "autoFocus", "disabled", "placeholder"], outputs: ["textChange"] }, { kind: "component", type: ZenduSpinner, selector: "zen-spinner", inputs: ["size"] }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] });
2407
2411
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduSelectComponent, decorators: [{
2408
2412
  type: Component,
2409
- args: [{ selector: 'zen-select', template: "<div class=\"app-select\">\n <button class=\"app-select-toggle\"\n [disabled]=\"disabled\"\n (click)=\"toggleExpand()\"\n [ngClass]=\"{'active': isExpanded}\">\n <div class=\"app-select-label\">\n <i *ngIf=\"customIconStart\" class=\"material-icons app-select-icon-start\">{{customIconStart}}</i>\n <div class=\"placeholder\"\n *ngIf=\"isModelEmpty()\">\n <span>{{placeholder | translate}}</span>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"!isMultiselect && !isModelEmpty()\">\n <ng-template *ngIf=\"valueTemplate && selectModel[0]; else tplValueText\"\n [ngTemplateOutlet]=\"valueTemplate.template\"\n [ngTemplateOutletContext]=\"{ selectModel: selectModel, labelText: labelText }\"></ng-template>\n <ng-template #tplValueText>\n <span>{{ labelText | translate }}</span>\n </ng-template>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"isMultiselect && !isModelEmpty()\">\n <span>{{ labelText | translate }}</span>\n </div>\n </div>\n <i *ngIf=\"!customIcon\"\n class=\"material-icons app-select-icon\">expand_more</i>\n <i *ngIf=\"customIcon\"\n class=\"material-icons-outlined custom-icon\"\n [style.color]=\"customIconColor\">{{customIcon}}</i>\n </button>\n\n <div class=\"action-menu-container\">\n <div class=\"action-menu app-select-dropdown-wrapper\"\n [ngClass]=\"{ 'show-top': isTopMenuDirection }\">\n <div class=\"app-select-dropdown\"\n *ngIf=\"isExpanded\">\n <div class=\"action-menu-header\"\n *ngIf=\"hasSearch\">\n <!--Search options-->\n <div class=\"search-wrapper\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n </div>\n <ng-template *ngIf=\"buttonTemplate\"\n [ngTemplateOutlet]=\"buttonTemplate.template\">\n </ng-template>\n <div class=\"action-menu-body\">\n <!--No options found-->\n <div class=\"no-options-found\"\n *ngIf=\"!filteredOptions.length && !isLoadingNow\">\n {{ 'No matching options found' | translate }}\n </div>\n\n <!--Select All Option-->\n <div class=\"action-item-checkbox select-all\"\n *ngIf=\"isMultiselect && !searchText && !isLazyLoading\"\n (click)=\"toggleAll()\">\n <zen-checkbox [checked]=\"selectModel.length === options.length\"\n [indeterminate]=\"selectModel.length !== options.length && selectModel.length\"\n [disableValueChange]=\"true\"\n [label]=\"'Select All' | translate\"></zen-checkbox>\n </div>\n\n <!--Single select Options-->\n <ng-container *ngIf=\"!isMultiselect\">\n <a class=\"action-item\"\n *ngIf=\"enableAddNewOption\"\n (click)=\"handleAddNewOption()\">\n <span *ngIf=\"newOptionText\">\n {{ newOptionText | translate }}\n </span>\n <span *ngIf=\"!newOptionText\">\n {{'Add New' | translate}}\n </span>\n </a>\n\n <a class=\"action-item remove-item\"\n *ngIf=\"enableRemoveOption\"\n (click)=\"handleRemoveOption()\">\n <span *ngIf=\"removeOptionText\">\n {{ removeOptionText | translate }}\n </span>\n <span *ngIf=\"!removeOptionText\">\n {{'Remove Selected' | translate}}\n </span>\n </a>\n\n <a class=\"action-item\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\"\n [ngClass]=\"{ 'active': isSelected(option) }\">\n <span *ngIf=\"!isMultiselect\"\n [class.action-item-truncate]=\"isTruncate\">\n <ng-template *ngIf=\"optionTemplate; else tplOptionText\"\n [ngTemplateOutlet]=\"optionTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: option }\">\n </ng-template>\n <ng-template #tplOptionText>\n {{ getName(option) | translate }}\n </ng-template>\n </span>\n </a>\n </ng-container>\n\n <!--Multiselect Options-->\n <ng-container *ngIf=\"isMultiselect\">\n <div class=\"action-item-checkbox\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\">\n <zen-checkbox *ngIf=\"isMultiselect\"\n [checked]=\"isSelected(option)\"\n [label]=\"getName(option)\"\n [disableValueChange]=\"true\"></zen-checkbox>\n </div>\n\n <ng-container *ngIf=\"isLazyLoading\">\n <div *ngIf=\"canLoadMore && !isLoadingNow\"\n class=\"action-item\">\n <button (click)=\"loadMore(false)\"\n class=\"button-stroked full-width\">\n {{'Load More' | translate}}\n </button>\n </div>\n <div *ngIf=\"isLoadingNow\"\n class=\"loader-more-spinner\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{--toggle-border-bottom: var(--zen-select-toggle-border-bottom, 1px solid #d6d6d8);--toggle-padding: var(--zen-select-toggle-padding, 0 0 8px 0)}.app-select{width:100%;position:relative}.app-select ::-webkit-scrollbar-thumb{background-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle{display:flex;align-items:center;justify-content:space-between;position:relative;transition:.3s;width:100%;background:#ffffff;-webkit-appearance:none;appearance:none;outline:none;cursor:pointer;border:none;border-radius:0;border-bottom:var(--toggle-border-bottom);padding:var(--toggle-padding);font-style:normal;font-weight:400;font-size:16px;line-height:24px;color:#333}.app-select .app-select-toggle .app-select-label{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-weight:400;font-size:14px;line-height:24px}.app-select .app-select-toggle .app-select-label .placeholder{color:#bebebe}.app-select .app-select-toggle .app-select-label .selected-item{color:#333}.app-select .app-select-toggle .custom-icon{color:#bebebe}.app-select .app-select-toggle .app-select-icon{color:#bebebe;transition:.3s}.app-select .app-select-toggle .app-select-icon-start{color:#bebebe;margin-right:4px}.app-select .app-select-toggle:focus{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle:focus .app-select-icon,.app-select .app-select-toggle:focus .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle[readonly],.app-select .app-select-toggle[disabled]{cursor:not-allowed;color:#b8b9bc;border-color:#d0d0d2}.app-select .app-select-toggle.active{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle.active .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle.active .app-select-icon{transform:rotate(180deg);color:var(--color-primary, #2188d9)}.app-select .app-select-toggle.active .app-select-icon-start{color:var(--color-primary, #2188d9)}.app-select .action-menu-container{position:sticky;width:inherit;z-index:10}.app-select .app-select-dropdown-wrapper{top:115%;width:inherit}.app-select .app-select-dropdown-wrapper.show-top{top:unset;bottom:115%}.app-select .app-select-dropdown-wrapper .action-menu-body{max-height:200px;overflow:auto}.app-select .app-select-dropdown-wrapper .action-menu-body .remove-item{color:#dc3e33}.app-select .app-select-dropdown-wrapper .no-options-found{background:#ffffff;color:#b8b9bc;padding:8px 16px;text-decoration:none;font-style:normal;font-weight:400;font-size:16px;line-height:24px}.app-select .app-select-dropdown-wrapper .select-all{font-weight:500}.app-select .app-select-dropdown-wrapper .loader-more-spinner{display:flex;align-items:center;justify-content:center;padding:16px;box-sizing:border-box}\n"] }]
2413
+ args: [{ selector: 'zen-select', template: "<div class=\"app-select\">\n <button class=\"app-select-toggle\"\n [disabled]=\"disabled\"\n (click)=\"toggleExpand()\"\n [ngClass]=\"{'active': isExpanded}\">\n <div class=\"app-select-label\">\n <i *ngIf=\"customIconStart\"\n class=\"material-icons app-select-icon-start\">{{customIconStart}}</i>\n <div class=\"placeholder\"\n *ngIf=\"isModelEmpty()\">\n <span>{{placeholder | translate}}</span>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"!isMultiselect && !isModelEmpty()\">\n <ng-template *ngIf=\"valueTemplate && selectModel[0]; else tplValueText\"\n [ngTemplateOutlet]=\"valueTemplate.template\"\n [ngTemplateOutletContext]=\"{ selectModel: selectModel, labelText: labelText }\"></ng-template>\n <ng-template #tplValueText>\n <span>{{ labelText | translate }}</span>\n </ng-template>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"isMultiselect && !isModelEmpty()\">\n <span>{{ labelText | translate }}</span>\n </div>\n </div>\n <i *ngIf=\"!customIcon\"\n class=\"material-icons app-select-icon\">expand_more</i>\n <i *ngIf=\"customIcon\"\n class=\"material-icons-outlined custom-icon\"\n [style.color]=\"customIconColor\">{{customIcon}}</i>\n </button>\n\n <div class=\"action-menu-container\">\n <div class=\"action-menu app-select-dropdown-wrapper\"\n [ngClass]=\"{ 'show-top': isTopMenuDirection }\">\n <div class=\"app-select-dropdown\"\n *ngIf=\"isExpanded\">\n <div class=\"action-menu-header\"\n *ngIf=\"hasSearch\">\n <!--Search options-->\n <div class=\"search-wrapper\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n </div>\n <ng-template *ngIf=\"buttonTemplate\"\n [ngTemplateOutlet]=\"buttonTemplate.template\">\n </ng-template>\n <div class=\"action-menu-body\">\n <!--No options found-->\n <div class=\"no-options-found\"\n *ngIf=\"!filteredOptions.length && !isLoadingNow\">\n {{ 'No matching options found' | translate }}\n </div>\n\n <!--Select All Option-->\n <div class=\"action-item-checkbox select-all\"\n *ngIf=\"isMultiselect && !searchText && !isLazyLoading\"\n (click)=\"toggleAll()\">\n <zen-checkbox [checked]=\"selectModel.length === options.length\"\n [indeterminate]=\"selectModel.length !== options.length && selectModel.length\"\n [disableValueChange]=\"true\"\n [label]=\"'Select All' | translate\"></zen-checkbox>\n </div>\n\n <!--Single select Options-->\n <ng-container *ngIf=\"!isMultiselect\">\n <a class=\"action-item\"\n *ngIf=\"enableAddNewOption\"\n (click)=\"handleAddNewOption()\">\n <span *ngIf=\"newOptionText\">\n {{ newOptionText | translate }}\n </span>\n <span *ngIf=\"!newOptionText && !showDefaultAddOption && searchText\">\n + {{ 'Add' | translate }} \"{{ searchText }}\"\n </span>\n <span *ngIf=\"!newOptionText && showDefaultAddOption\">\n {{'Add New' | translate}}\n </span>\n </a>\n\n <a class=\"action-item remove-item\"\n *ngIf=\"enableRemoveOption\"\n (click)=\"handleRemoveOption()\">\n <span *ngIf=\"removeOptionText\">\n {{ removeOptionText | translate }}\n </span>\n <span *ngIf=\"!removeOptionText\">\n {{'Remove Selected' | translate}}\n </span>\n </a>\n\n <a class=\"action-item\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\"\n [ngClass]=\"{ 'active': isSelected(option) }\">\n <span *ngIf=\"!isMultiselect\"\n [class.action-item-truncate]=\"isTruncate\">\n <ng-template *ngIf=\"optionTemplate; else tplOptionText\"\n [ngTemplateOutlet]=\"optionTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: option }\">\n </ng-template>\n <ng-template #tplOptionText>\n {{ getName(option) | translate }}\n </ng-template>\n </span>\n </a>\n </ng-container>\n\n <!--Multiselect Options-->\n <ng-container *ngIf=\"isMultiselect\">\n <div class=\"action-item-checkbox\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\">\n <zen-checkbox *ngIf=\"isMultiselect\"\n [checked]=\"isSelected(option)\"\n [label]=\"getName(option)\"\n [disableValueChange]=\"true\"></zen-checkbox>\n </div>\n\n <ng-container *ngIf=\"isLazyLoading\">\n <div *ngIf=\"canLoadMore && !isLoadingNow\"\n class=\"action-item\">\n <button (click)=\"loadMore(false)\"\n class=\"button-stroked full-width\">\n {{'Load More' | translate}}\n </button>\n </div>\n <div *ngIf=\"isLoadingNow\"\n class=\"loader-more-spinner\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{--toggle-border-bottom: var(--zen-select-toggle-border-bottom, 1px solid #d6d6d8);--toggle-padding: var(--zen-select-toggle-padding, 0 0 8px 0)}.app-select{width:100%;position:relative}.app-select ::-webkit-scrollbar-thumb{background-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle{display:flex;align-items:center;justify-content:space-between;position:relative;transition:.3s;width:100%;background:#ffffff;-webkit-appearance:none;appearance:none;outline:none;cursor:pointer;border:none;border-radius:0;border-bottom:var(--toggle-border-bottom);padding:var(--toggle-padding);font-style:normal;font-weight:400;font-size:16px;line-height:24px;color:#333}.app-select .app-select-toggle .app-select-label{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-weight:400;font-size:14px;line-height:24px}.app-select .app-select-toggle .app-select-label .placeholder{color:#bebebe}.app-select .app-select-toggle .app-select-label .selected-item{color:#333}.app-select .app-select-toggle .custom-icon{color:#bebebe}.app-select .app-select-toggle .app-select-icon{color:#bebebe;transition:.3s}.app-select .app-select-toggle .app-select-icon-start{color:#bebebe;margin-right:4px}.app-select .app-select-toggle:focus{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle:focus .app-select-icon,.app-select .app-select-toggle:focus .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle[readonly],.app-select .app-select-toggle[disabled]{cursor:not-allowed;color:#b8b9bc;border-color:#d0d0d2}.app-select .app-select-toggle.active{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle.active .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle.active .app-select-icon{transform:rotate(180deg);color:var(--color-primary, #2188d9)}.app-select .app-select-toggle.active .app-select-icon-start{color:var(--color-primary, #2188d9)}.app-select .action-menu-container{position:sticky;width:inherit;z-index:10}.app-select .app-select-dropdown-wrapper{top:115%;width:inherit}.app-select .app-select-dropdown-wrapper.show-top{top:unset;bottom:115%}.app-select .app-select-dropdown-wrapper .action-menu-body{max-height:200px;overflow:auto}.app-select .app-select-dropdown-wrapper .action-menu-body .remove-item{color:#dc3e33}.app-select .app-select-dropdown-wrapper .no-options-found{background:#ffffff;color:#b8b9bc;padding:8px 16px;text-decoration:none;font-style:normal;font-weight:400;font-size:16px;line-height:24px}.app-select .app-select-dropdown-wrapper .select-all{font-weight:500}.app-select .app-select-dropdown-wrapper .loader-more-spinner{display:flex;align-items:center;justify-content:center;padding:16px;box-sizing:border-box}\n"] }]
2410
2414
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { selectModel: [{
2411
2415
  type: Input
2412
2416
  }], selectModelChange: [{
@@ -2437,6 +2441,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
2437
2441
  type: Input
2438
2442
  }], enableAddNewOption: [{
2439
2443
  type: Input
2444
+ }], showDefaultAddOption: [{
2445
+ type: Input
2440
2446
  }], newOptionText: [{
2441
2447
  type: Input
2442
2448
  }], addNewOption: [{
@@ -2524,7 +2530,7 @@ class ZenduPaginationBarComponent {
2524
2530
  }
2525
2531
  }
2526
2532
  ZenduPaginationBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduPaginationBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2527
- ZenduPaginationBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduPaginationBarComponent, selector: "zen-pagination-bar", inputs: { page: "page", perPage: "perPage", count: "count" }, outputs: { pageChange: "pageChange", perPageChange: "perPageChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"pagination-component\">\n <div class=\"select-dropdown\">\n <label>{{\"Rows per page\" | translate}}:</label>\n <zen-select [(selectModel)]=\"perPage\"\n [options]=\"availablePagesSize\"\n (selectModelChange)=\"updatePageSize()\"></zen-select>\n </div>\n <div class=\"pages\">\n <button class=\"pagination-button\"\n [disabled]=\"page - 1 <= 0\"\n (click)=\"prevPage()\">\n <i class=\"material-icons\">keyboard_arrow_left</i>\n </button>\n <label>{{((page - 1) * perPage) + 1 }} - {{endRowSize()}} of {{count}}</label>\n <button class=\"pagination-button\"\n [disabled]=\"page + 1 > totalPages\"\n (click)=\"nextPage()\">\n <i class=\"material-icons\">keyboard_arrow_right</i>\n </button>\n </div>\n</div>\n", styles: [".pagination-component{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.pagination-component .select-dropdown{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .select-dropdown label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:120%;color:#4f4f4f}.pagination-component .pages{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .pages label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:16px;color:#828282}.pagination-component .pages .pagination-button{display:flex;flex-direction:row;align-items:center;height:16px;padding:0;box-sizing:border-box;white-space:nowrap;border:none;border-radius:50%;transition:.1s;cursor:pointer;color:#828282;background:#FFFFFF}.pagination-component .pages .pagination-button:hover{color:#4f4f4f;background:#F2F2F2}.pagination-component .pages .pagination-button:focus{outline:none;color:#2188d9;background:#F4F9FD}.pagination-component .pages .pagination-button:disabled{color:#e0e0e0;background:#FFFFFF;cursor:not-allowed}.pagination-component .pages .pagination-button .material-icons{font-size:16px;height:16px;width:16px}\n"], dependencies: [{ kind: "component", type: ZenduSelectComponent, selector: "zen-select", inputs: ["selectModel", "options", "placeholder", "displayProp", "idProp", "hasSearch", "returnOption", "isMultiselect", "disabled", "customIcon", "customIconStart", "customIconColor", "isTruncate", "enableAddNewOption", "newOptionText", "enableRemoveOption", "removeOptionText", "isLazyLoading", "lazyLoader", "preferedOpenDirection"], outputs: ["selectModelChange", "addNewOption", "removeOption", "closed"] }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] });
2533
+ ZenduPaginationBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduPaginationBarComponent, selector: "zen-pagination-bar", inputs: { page: "page", perPage: "perPage", count: "count" }, outputs: { pageChange: "pageChange", perPageChange: "perPageChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"pagination-component\">\n <div class=\"select-dropdown\">\n <label>{{\"Rows per page\" | translate}}:</label>\n <zen-select [(selectModel)]=\"perPage\"\n [options]=\"availablePagesSize\"\n (selectModelChange)=\"updatePageSize()\"></zen-select>\n </div>\n <div class=\"pages\">\n <button class=\"pagination-button\"\n [disabled]=\"page - 1 <= 0\"\n (click)=\"prevPage()\">\n <i class=\"material-icons\">keyboard_arrow_left</i>\n </button>\n <label>{{((page - 1) * perPage) + 1 }} - {{endRowSize()}} of {{count}}</label>\n <button class=\"pagination-button\"\n [disabled]=\"page + 1 > totalPages\"\n (click)=\"nextPage()\">\n <i class=\"material-icons\">keyboard_arrow_right</i>\n </button>\n </div>\n</div>\n", styles: [".pagination-component{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.pagination-component .select-dropdown{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .select-dropdown label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:120%;color:#4f4f4f}.pagination-component .pages{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .pages label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:16px;color:#828282}.pagination-component .pages .pagination-button{display:flex;flex-direction:row;align-items:center;height:16px;padding:0;box-sizing:border-box;white-space:nowrap;border:none;border-radius:50%;transition:.1s;cursor:pointer;color:#828282;background:#FFFFFF}.pagination-component .pages .pagination-button:hover{color:#4f4f4f;background:#F2F2F2}.pagination-component .pages .pagination-button:focus{outline:none;color:#2188d9;background:#F4F9FD}.pagination-component .pages .pagination-button:disabled{color:#e0e0e0;background:#FFFFFF;cursor:not-allowed}.pagination-component .pages .pagination-button .material-icons{font-size:16px;height:16px;width:16px}\n"], dependencies: [{ kind: "component", type: ZenduSelectComponent, selector: "zen-select", inputs: ["selectModel", "options", "placeholder", "displayProp", "idProp", "hasSearch", "returnOption", "isMultiselect", "disabled", "customIcon", "customIconStart", "customIconColor", "isTruncate", "enableAddNewOption", "showDefaultAddOption", "newOptionText", "enableRemoveOption", "removeOptionText", "isLazyLoading", "lazyLoader", "preferedOpenDirection"], outputs: ["selectModelChange", "addNewOption", "removeOption", "closed"] }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] });
2528
2534
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduPaginationBarComponent, decorators: [{
2529
2535
  type: Component,
2530
2536
  args: [{ selector: 'zen-pagination-bar', template: "<div class=\"pagination-component\">\n <div class=\"select-dropdown\">\n <label>{{\"Rows per page\" | translate}}:</label>\n <zen-select [(selectModel)]=\"perPage\"\n [options]=\"availablePagesSize\"\n (selectModelChange)=\"updatePageSize()\"></zen-select>\n </div>\n <div class=\"pages\">\n <button class=\"pagination-button\"\n [disabled]=\"page - 1 <= 0\"\n (click)=\"prevPage()\">\n <i class=\"material-icons\">keyboard_arrow_left</i>\n </button>\n <label>{{((page - 1) * perPage) + 1 }} - {{endRowSize()}} of {{count}}</label>\n <button class=\"pagination-button\"\n [disabled]=\"page + 1 > totalPages\"\n (click)=\"nextPage()\">\n <i class=\"material-icons\">keyboard_arrow_right</i>\n </button>\n </div>\n</div>\n", styles: [".pagination-component{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.pagination-component .select-dropdown{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .select-dropdown label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:120%;color:#4f4f4f}.pagination-component .pages{display:flex;flex-direction:row;align-items:center;gap:8px}.pagination-component .pages label{margin:0;font-style:normal;font-weight:400;font-size:12px;line-height:16px;color:#828282}.pagination-component .pages .pagination-button{display:flex;flex-direction:row;align-items:center;height:16px;padding:0;box-sizing:border-box;white-space:nowrap;border:none;border-radius:50%;transition:.1s;cursor:pointer;color:#828282;background:#FFFFFF}.pagination-component .pages .pagination-button:hover{color:#4f4f4f;background:#F2F2F2}.pagination-component .pages .pagination-button:focus{outline:none;color:#2188d9;background:#F4F9FD}.pagination-component .pages .pagination-button:disabled{color:#e0e0e0;background:#FFFFFF;cursor:not-allowed}.pagination-component .pages .pagination-button .material-icons{font-size:16px;height:16px;width:16px}\n"] }]