UNPKG

ngx-selectbox-may

Version:

Angular selectbox with autocomplete

927 lines (916 loc) 74.4 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/forms'), require('@angular/platform-browser'), require('@angular/platform-browser/animations')) : typeof define === 'function' && define.amd ? define('ngx-selectbox-may', ['exports', '@angular/core', '@angular/forms', '@angular/platform-browser', '@angular/platform-browser/animations'], factory) : (factory((global['ngx-selectbox-may'] = {}),global.ng.core,global.ng.forms,global.ng.platformBrowser,global.ng.platformBrowser.animations)); }(this, (function (exports,i0,forms,platformBrowser,animations) { 'use strict'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var NGXSelectMayRow = /** @class */ (function () { function NGXSelectMayRow(isSelected, data) { this.isSelected = isSelected; this.data = data; } /** * @param {?} value * @return {?} */ NGXSelectMayRow.prototype.setKey = /** * @param {?} value * @return {?} */ function (value) { this.value = value; }; /** * @param {?} label * @return {?} */ NGXSelectMayRow.prototype.setLabel = /** * @param {?} label * @return {?} */ function (label) { this.label = label; }; return NGXSelectMayRow; }()); var NGXSelectMayConfigs = /** @class */ (function () { function NGXSelectMayConfigs() { this._labelField = ""; this._placeholderText = ""; this._emptyText = ""; this._showEmptyResultsLabel = true; this._cssClass = ""; } Object.defineProperty(NGXSelectMayConfigs.prototype, "labelField", { get: /** * @return {?} */ function () { return this._labelField; }, set: /** * @param {?} value * @return {?} */ function (value) { this._labelField = value; }, enumerable: true, configurable: true }); Object.defineProperty(NGXSelectMayConfigs.prototype, "valueField", { get: /** * @return {?} */ function () { return this._valueField; }, set: /** * @param {?} value * @return {?} */ function (value) { this._valueField = value; }, enumerable: true, configurable: true }); Object.defineProperty(NGXSelectMayConfigs.prototype, "placeholderText", { get: /** * @return {?} */ function () { return this._placeholderText; }, set: /** * @param {?} value * @return {?} */ function (value) { this._placeholderText = value; }, enumerable: true, configurable: true }); Object.defineProperty(NGXSelectMayConfigs.prototype, "emptyText", { get: /** * @return {?} */ function () { return this._emptyText; }, set: /** * @param {?} value * @return {?} */ function (value) { this._emptyText = value; }, enumerable: true, configurable: true }); Object.defineProperty(NGXSelectMayConfigs.prototype, "showEmptyResultsLabel", { get: /** * @return {?} */ function () { return this._showEmptyResultsLabel; }, set: /** * @param {?} value * @return {?} */ function (value) { this._showEmptyResultsLabel = value; }, enumerable: true, configurable: true }); Object.defineProperty(NGXSelectMayConfigs.prototype, "cssClass", { get: /** * @return {?} */ function () { return this._cssClass; }, set: /** * @param {?} value * @return {?} */ function (value) { this._cssClass = value; }, enumerable: true, configurable: true }); Object.defineProperty(NGXSelectMayConfigs.prototype, "isMultiSelect", { get: /** * @return {?} */ function () { return this._isMultiSelect; }, set: /** * @param {?} value * @return {?} */ function (value) { this._isMultiSelect = value; }, enumerable: true, configurable: true }); NGXSelectMayConfigs.ROW_ACTIVE_CLASS = "active"; NGXSelectMayConfigs.EMPTY_TEXT = "No results found"; NGXSelectMayConfigs.MULTI_SELECTED_LABEL = "#COUNT #ITEMS Selected"; NGXSelectMayConfigs.LOADING_TEXT = "Please wait..."; return NGXSelectMayConfigs; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var NgxSelectboxMayService = /** @class */ (function () { function NgxSelectboxMayService() { } /** * @param {?} items * @param {?} configs * @return {?} */ NgxSelectboxMayService.prototype.createDropdownRows = /** * @param {?} items * @param {?} configs * @return {?} */ function (items, configs) { /** @type {?} */ var arr = []; items.forEach(function (element) { /** @type {?} */ var row = new NGXSelectMayRow(false, element); row.setKey(configs.valueField ? element[configs.valueField] : element); row.setLabel(configs.labelField ? element[configs.labelField] : element); arr.push(row); }); return arr; }; /** * @param {?} allRows * @param {?} configs * @return {?} */ NgxSelectboxMayService.prototype.reconfigureDropdownRowLabelsAndValues = /** * @param {?} allRows * @param {?} configs * @return {?} */ function (allRows, configs) { allRows.forEach(function (element) { element.setKey(configs.valueField ? element.data[configs.valueField] : element.data); element.setLabel(configs.labelField ? element.data[configs.labelField] : element.data); }); }; /** * @param {?} configs * @param {?} selectedRows * @return {?} */ NgxSelectboxMayService.prototype.createDropdownLabel = /** * @param {?} configs * @param {?} selectedRows * @return {?} */ function (configs, selectedRows) { //Check is configured to select multiple choices if (configs.isMultiSelect) { if (selectedRows.length > 1) { return NGXSelectMayConfigs.MULTI_SELECTED_LABEL.replace("#COUNT", selectedRows.length.toString()).replace("#ITEMS", "Items"); } else if (selectedRows.length == 1) { return NGXSelectMayConfigs.MULTI_SELECTED_LABEL.replace("#COUNT", selectedRows.length.toString()).replace("#ITEMS", "Item"); } else { return NGXSelectMayConfigs.MULTI_SELECTED_LABEL.replace("#COUNT", selectedRows.length.toString()).replace("#ITEMS", "Items"); } } else { return selectedRows.length > 0 ? selectedRows[0].label : ""; } }; /** * @param {?} configs * @param {?} selectedRows * @param {?} allRows * @param {?} row * @return {?} */ NgxSelectboxMayService.prototype.setSelectedItems = /** * @param {?} configs * @param {?} selectedRows * @param {?} allRows * @param {?} row * @return {?} */ function (configs, selectedRows, allRows, row) { //Check is configured to select multiple choices if (configs.isMultiSelect) ; else { if (!row.isSelected) { this.unselectAllSelectedRows(allRows); row.isSelected = true; selectedRows = []; selectedRows.push(row); } } return selectedRows; }; /** * @param {?} allRows * @return {?} */ NgxSelectboxMayService.prototype.unselectAllSelectedRows = /** * @param {?} allRows * @return {?} */ function (allRows) { allRows.forEach(function (r) { r.isSelected = false; }); }; /** * @param {?} allRows * @param {?} value * @return {?} */ NgxSelectboxMayService.prototype.selectItemByValue = /** * @param {?} allRows * @param {?} value * @return {?} */ function (allRows, value) { /** @type {?} */ var filteredVal = allRows.filter(function (r) { return r.value === value; }); if (filteredVal.length > 0) filteredVal[0].isSelected = true; return filteredVal; }; /** * @param {?} allRows * @param {?} values * @return {?} */ NgxSelectboxMayService.prototype.selectItemsByValue = /** * @param {?} allRows * @param {?} values * @return {?} */ function (allRows, values) { /** @type {?} */ var a = []; values.forEach(function (v) { /** @type {?} */ var filteredVal = allRows.filter(function (r) { return r.value === v; }); if (filteredVal.length > 0) filteredVal[0].isSelected = true; a.push(filteredVal[0]); }); return a; }; NgxSelectboxMayService.decorators = [ { type: i0.Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ NgxSelectboxMayService.ctorParameters = function () { return []; }; /** @nocollapse */ NgxSelectboxMayService.ngInjectableDef = i0.defineInjectable({ factory: function NgxSelectboxMayService_Factory() { return new NgxSelectboxMayService(); }, token: NgxSelectboxMayService, providedIn: "root" }); return NgxSelectboxMayService; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var NgxSelectboxMayComponent = /** @class */ (function () { function NgxSelectboxMayComponent(_selectboxref, selectboxService) { this._selectboxref = _selectboxref; this.selectboxService = selectboxService; this.dropdownRows = []; this.configs = new NGXSelectMayConfigs(); this.selectedRows = []; this.show_items = false; this.searchText = ""; this.isEnable = true; this.propagateChange = function (_) { }; this.propagateOnTouch = function (_) { }; this.onKeyUp = new i0.EventEmitter(); this.onSelect = new i0.EventEmitter(); this.onBlur = new i0.EventEmitter(); } Object.defineProperty(NgxSelectboxMayComponent.prototype, "items", { set: /** * @param {?} items * @return {?} */ function (items) { this.createDropdownRows(items); }, enumerable: true, configurable: true }); Object.defineProperty(NgxSelectboxMayComponent.prototype, "cssClass", { set: /** * @param {?} cssClass * @return {?} */ function (cssClass) { this.configs.cssClass = cssClass; }, enumerable: true, configurable: true }); Object.defineProperty(NgxSelectboxMayComponent.prototype, "valueField", { set: /** * @param {?} valueField * @return {?} */ function (valueField) { this.configs.valueField = valueField; }, enumerable: true, configurable: true }); Object.defineProperty(NgxSelectboxMayComponent.prototype, "labelField", { set: /** * @param {?} labelField * @return {?} */ function (labelField) { this.configs.labelField = labelField; this.reconfigureLabelsAndValues(); }, enumerable: true, configurable: true }); Object.defineProperty(NgxSelectboxMayComponent.prototype, "placeholder", { set: /** * @param {?} placeholder * @return {?} */ function (placeholder) { this.configs.placeholderText = placeholder; }, enumerable: true, configurable: true }); Object.defineProperty(NgxSelectboxMayComponent.prototype, "emptyText", { set: /** * @param {?} emptyText * @return {?} */ function (emptyText) { this.configs.emptyText = emptyText; }, enumerable: true, configurable: true }); Object.defineProperty(NgxSelectboxMayComponent.prototype, "showEmptyResultText", { set: /** * @param {?} showEmptyText * @return {?} */ function (showEmptyText) { this.configs.showEmptyResultsLabel = showEmptyText; }, enumerable: true, configurable: true }); Object.defineProperty(NgxSelectboxMayComponent.prototype, "isMulti", { set: /** * @param {?} isMulti * @return {?} */ function (isMulti) { this.configs.isMultiSelect = isMulti; }, enumerable: true, configurable: true }); Object.defineProperty(NgxSelectboxMayComponent.prototype, "isLoading", { set: /** * @param {?} isLoading * @return {?} */ function (isLoading) { this._isLoading = isLoading; }, enumerable: true, configurable: true }); Object.defineProperty(NgxSelectboxMayComponent.prototype, "loadingText", { set: /** * @param {?} loadingText * @return {?} */ function (loadingText) { this._loadingText = loadingText; }, enumerable: true, configurable: true }); /** * @return {?} */ NgxSelectboxMayComponent.prototype.ngOnInit = /** * @return {?} */ function () { }; /** * @param {?} items * @return {?} */ NgxSelectboxMayComponent.prototype.createDropdownRows = /** * @param {?} items * @return {?} */ function (items) { this.dropdownRows = this.selectboxService.createDropdownRows(items, this.configs); this.setValuesPassedExternal(this.ngModelValue); }; /** * @return {?} */ NgxSelectboxMayComponent.prototype.reconfigureLabelsAndValues = /** * @return {?} */ function () { this.selectboxService.reconfigureDropdownRowLabelsAndValues(this.dropdownRows, this.configs); }; /** * @return {?} */ NgxSelectboxMayComponent.prototype.getSelectboxLabel = /** * @return {?} */ function () { /** @type {?} */ var label = this.selectboxService.createDropdownLabel(this.configs, this.selectedRows); return label ? label : this.configs.placeholderText; }; /** * @return {?} */ NgxSelectboxMayComponent.prototype.getEmptyTextLabel = /** * @return {?} */ function () { return this.configs.emptyText ? this.configs.emptyText : NGXSelectMayConfigs.EMPTY_TEXT; }; /** * @return {?} */ NgxSelectboxMayComponent.prototype.getLoadingText = /** * @return {?} */ function () { return this._loadingText ? this._loadingText : NGXSelectMayConfigs.LOADING_TEXT; }; /** * @return {?} */ NgxSelectboxMayComponent.prototype.onClickSelectBox = /** * @return {?} */ function () { this.showItemsWindow(); }; /** * @return {?} */ NgxSelectboxMayComponent.prototype.getActiveClass = /** * @return {?} */ function () { return NGXSelectMayConfigs.ROW_ACTIVE_CLASS; }; /** * @return {?} */ NgxSelectboxMayComponent.prototype.showItemsWindow = /** * @return {?} */ function () { this.show_items = true; }; /** * @return {?} */ NgxSelectboxMayComponent.prototype.hideItemsWindow = /** * @return {?} */ function () { this.onBlur.emit(this.searchText); this.resetFilters(); this.show_items = false; }; /** * @return {?} */ NgxSelectboxMayComponent.prototype.onRemoveClick = /** * @return {?} */ function () { this.selectboxService.unselectAllSelectedRows(this.dropdownRows); this.selectedRows = []; this.publishValue(); }; /** * @param {?} e * @return {?} */ NgxSelectboxMayComponent.prototype.onSearchKeydown = /** * @param {?} e * @return {?} */ function (e) { if (e.key == "Escape") { this.hideItemsWindow(); } //Up and Down arrow events if (e.keyCode == 38 || e.keyCode == 40) { e.preventDefault(); } }; /** * @param {?} e * @return {?} */ NgxSelectboxMayComponent.prototype.onSearchKeyup = /** * @param {?} e * @return {?} */ function (e) { if (e.keyCode == 38 || e.keyCode == 40 || e.key == "Escape") { e.preventDefault(); } else { this.onKeyUp.emit(this.searchText); } }; /** * @return {?} */ NgxSelectboxMayComponent.prototype.resetFilters = /** * @return {?} */ function () { this.searchText = ""; }; /** * @param {?} row * @param {?} index * @return {?} */ NgxSelectboxMayComponent.prototype.onClickItem = /** * @param {?} row * @param {?} index * @return {?} */ function (row, index) { if (this.configs.isMultiSelect) ; else { this.selectedRows = this.selectboxService.setSelectedItems(this.configs, this.selectedRows, this.dropdownRows, row); this.onSelect.emit(row.data); this.hideItemsWindow(); } this.publishValue(); }; /** * @return {?} */ NgxSelectboxMayComponent.prototype.publishValue = /** * @return {?} */ function () { /** @type {?} */ var values = this.selectedRows.map(function (r) { return r.value; }); if (this.configs.isMultiSelect) { this.propagateChange(values); } else { this.propagateChange(values.length > 0 ? values[0] : ""); } }; /** * @param {?} obj * @return {?} */ NgxSelectboxMayComponent.prototype.setValuesPassedExternal = /** * @param {?} obj * @return {?} */ function (obj) { if (this.configs.isMultiSelect) { this.selectedRows = this.selectboxService.selectItemsByValue(this.dropdownRows, obj); } else { this.selectedRows = this.selectboxService.selectItemByValue(this.dropdownRows, obj); } }; Object.defineProperty(NgxSelectboxMayComponent.prototype, "content", { /* * * On Item browse open window begin & document outside click event Begins * */ set: /* * * On Item browse open window begin & document outside click event Begins * */ /** * @param {?} content * @return {?} */ function (content) { this.itemWindow = content; // this.positionWindow(); this.focusToSearchField(); this.scrollToSelectedItem(); }, enumerable: true, configurable: true }); /** * @return {?} */ NgxSelectboxMayComponent.prototype.positionWindow = /** * @return {?} */ function () { if (this.searchField) { /** @type {?} */ var selectBoxRef = this._selectboxref.nativeElement; /** @type {?} */ var viewportOffset = selectBoxRef.getBoundingClientRect(); console.log(viewportOffset); this.itemWindow.nativeElement.setAttribute('style', 'width: ' + (selectBoxRef.firstChild.offsetWidth + 3) + 'px; top: ' + (viewportOffset.top - 5) + 'px; margin-left: -12px;'); } }; /** * @return {?} */ NgxSelectboxMayComponent.prototype.focusToSearchField = /** * @return {?} */ function () { if (this.searchField) { this.searchField.nativeElement.focus(); } }; /** * @return {?} */ NgxSelectboxMayComponent.prototype.scrollToSelectedItem = /** * @return {?} */ function () { var _this = this; this.listItems.forEach(function (li) { if (li.nativeElement.classList.contains(NGXSelectMayConfigs.ROW_ACTIVE_CLASS)) { /** @type {?} */ var scrollLi = li.nativeElement; _this.itemWindow.nativeElement.getElementsByTagName("ul")[0].scrollTop = scrollLi.offsetTop - (scrollLi.offsetHeight + 20); } }); }; /** * @param {?} e * @return {?} */ NgxSelectboxMayComponent.prototype.onClickOutside = /** * @param {?} e * @return {?} */ function (e) { if (!this._selectboxref.nativeElement.contains(event.target) && this.show_items) { this.hideItemsWindow(); } }; /** * @param {?} e * @return {?} */ NgxSelectboxMayComponent.prototype.onWindowResize = /** * @param {?} e * @return {?} */ function (e) { // this.positionWindow(); }; /** * @return {?} */ NgxSelectboxMayComponent.prototype.setDisable = /** * @return {?} */ function () { this.hideItemsWindow(); this.isEnable = false; }; /** * @return {?} */ NgxSelectboxMayComponent.prototype.setEnable = /** * @return {?} */ function () { this.isEnable = true; }; /** * @param {?} obj * @return {?} */ NgxSelectboxMayComponent.prototype.writeValue = /** * @param {?} obj * @return {?} */ function (obj) { this.ngModelValue = obj; this.setValuesPassedExternal(obj); }; /** * @param {?} fn * @return {?} */ NgxSelectboxMayComponent.prototype.registerOnChange = /** * @param {?} fn * @return {?} */ function (fn) { this.propagateChange = fn; }; /** * @param {?} fn * @return {?} */ NgxSelectboxMayComponent.prototype.registerOnTouched = /** * @param {?} fn * @return {?} */ function (fn) { this.propagateOnTouch = fn; }; /** * @param {?} isDisabled * @return {?} */ NgxSelectboxMayComponent.prototype.setDisabledState = /** * @param {?} isDisabled * @return {?} */ function (isDisabled) { console.log(isDisabled, "set disable"); if (isDisabled) { this.setDisable(); } else { this.setEnable(); } }; NgxSelectboxMayComponent.decorators = [ { type: i0.Component, args: [{ selector: 'ngx-selectbox-may', host: { '(document:click)': 'onClickOutside($event)', '(window:resize)': 'onWindowResize($event)' }, template: "<div [ngClass]=\"configs.cssClass\" class=\"__ngx-selectbox-may\">\n <span class=\"__selected-label\">\n <span>{{getSelectboxLabel()}}</span>\n </span>\n <div *ngIf=\"_isLoading\" class=\"__loading-text\">{{getLoadingText()}}</div>\n <div class=\"__clickable-area\" (click)=\"onClickSelectBox()\"></div>\n <button *ngIf=\"selectedRows.length>0 && isEnable\" type=\"button\" class=\"__remove-selected-btn\" (click)=\"onRemoveClick()\">\n <i></i>\n </button>\n <div *ngIf=\"show_items\" class=\"__item-list-browser\" #item_window>\n <div class=\"__item-search\">\n <input #search_field type=\"text\" max-length=\"15\" (keydown)=\"onSearchKeydown($event)\"\n (keyup)=\"onSearchKeyup($event)\" placeholder=\"search\" [(ngModel)]=\"searchText\" />\n </div>\n <ng-container *ngTemplateOutlet=\"actionTemplate\"></ng-container>\n <ul class=\"__ngx-selectbox-ul\">\n <ng-container *ngFor=\"let item of dropdownRows | ngx_item_filter:searchText; let i = index; let l = count\">\n <li #li_item *ngIf=\"l>0\" (click)=\"onClickItem(item, i)\" [ngClass]=\"item.isSelected ? getActiveClass() : ''\">\n {{item.label}}\n </li>\n </ng-container>\n <li class=\"__empty-items\"\n *ngIf=\"(dropdownRows | ngx_item_filter:searchText).length === 0 && configs.showEmptyResultsLabel\">\n {{getEmptyTextLabel()}}\n </li>\n </ul>\n </div>\n <div *ngIf=\"!isEnable\" class=\"__disabled-mask\"></div>\n</div>", providers: [ { provide: forms.NG_VALUE_ACCESSOR, useExisting: i0.forwardRef(function () { return NgxSelectboxMayComponent; }), multi: true, } ], styles: [".__ngx-selectbox-may{position:relative;min-width:200px;padding:3px 40px 3px 10px;display:flex;align-items:center;cursor:pointer;background-color:#fff}.__ngx-selectbox-may .__disabled-mask{position:absolute;background-color:rgba(0,0,0,.15);top:0;left:0;right:0;bottom:0}.__ngx-selectbox-may::before{content:\"\\f107\";position:absolute;font-family:FontAwesome;color:#3f495b;right:10px;top:0;bottom:0;display:flex;align-items:center;font-size:14px}.__ngx-selectbox-may .__selected-label{position:relative;display:block;width:100%;text-align:left;height:19px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.__ngx-selectbox-may .__remove-selected-btn{background-color:transparent;border:0;outline:0;cursor:pointer;position:absolute;right:20px;top:0;bottom:0;display:flex;align-items:center}.__ngx-selectbox-may .__clickable-area{position:absolute;top:0;left:0;right:0;bottom:0}.__ngx-selectbox-may .__remove-selected-btn i::before{content:\"\\f00d\";font-family:FontAwesome;font-style:normal!important;-webkit-text-stroke:.5px #f1f4f8}.__ngx-selectbox-may .__selected-label .__remove-selected-btn::before{content:\"\\f00c\";position:absolute;font-family:FontAwesome;right:12px;font-size:12px;top:0;bottom:0;display:flex;align-items:center;-webkit-text-stroke:.5px #f1f4f8}.__ngx-selectbox-may .__item-list-browser{position:absolute;background-color:#fff;border-radius:4px;border:1px solid #dfe3e9;box-shadow:0 3px 18px -6px rgba(0,0,0,.5);z-index:1;top:-2px;left:-2px;right:-2px}.__ngx-selectbox-may .__item-list-browser ul{max-height:200px;overflow-y:auto;padding:0;margin:0;border-top:1px solid #dfe3e9}.__ngx-selectbox-may .__item-list-browser ul li{color:#777;font-size:13px;text-align:left;padding:9px 24px 9px 12px;border-bottom:1px solid #dfe3e9;cursor:pointer;line-height:17px}.__ngx-selectbox-may .__item-list-browser ul li.selected,.__ngx-selectbox-may .__item-list-browser ul li:hover{background-color:#f1f4f8;color:#2ea2f8}.__ngx-selectbox-may .__item-list-browser ul li.active{background-color:#f1f4f8;color:#2ea2f8;position:relative}.__ngx-selectbox-may .__item-list-browser ul li.active::before{content:\"\\f00c\";position:absolute;font-family:FontAwesome;right:12px;font-size:12px;-webkit-text-stroke:.5px #f1f4f8;top:0;bottom:0;display:flex;align-items:center}.__ngx-selectbox-may .__item-list-browser ul li.__empty-items{color:#ff7f74;background-color:#fff4f4;cursor:auto}.__ngx-selectbox-may .__item-list-browser ul li:last-child{border-bottom:none}.__ngx-selectbox-may .__item-list-browser .__item-search{padding:5px;display:flex;position:relative}.__ngx-selectbox-may .__item-list-browser .__item-search::before{content:\"\\f002\";position:absolute;font-family:FontAwesome;right:16px;-webkit-text-stroke:.5px #fff;color:#ced0da;top:0;bottom:0;display:flex;align-items:center}.__ngx-selectbox-may .__item-list-browser .__item-search input[type=text]{width:100%;border:1px solid #dfe3e9;border-radius:4px;padding:8px 30px 8px 10px;outline:0}.__ngx-selectbox-may .__item-list-browser .__item-search input[type=text]:focus{border:1px solid #2ea2f8;box-shadow:0 0 0 3px #2ea2f84d}.__ngx-selectbox-may .__item-list-browser ul::-webkit-scrollbar{width:11px;height:18px}.__ngx-selectbox-may .__item-list-browser ul::-webkit-scrollbar-thumb{height:6px;border:3px solid transparent;background-clip:padding-box;-webkit-border-radius:7px;background-color:rgba(0,0,0,.15);-webkit-box-shadow:inset -1px -1px 0 rgba(0,0,0,.05) inset 1px 1px 0 rgba(0,0,0,.05)}.__ngx-selectbox-may .__item-list-browser ul::-webkit-scrollbar-button{width:0;height:0;display:none}.__ngx-selectbox-may .__item-list-browser ul::-webkit-scrollbar-corner{background-color:transparent}.__ngx-selectbox-may .__loading-text{position:absolute;background-color:#e5e5e5;top:0;left:0;right:0;bottom:0;display:flex;align-items:center;padding-left:10px;border-radius:4px;z-index:2}"] }] } ]; /** @nocollapse */ NgxSelectboxMayComponent.ctorParameters = function () { return [ { type: i0.ElementRef }, { type: NgxSelectboxMayService } ]; }; NgxSelectboxMayComponent.propDecorators = { items: [{ type: i0.Input, args: ["items",] }], cssClass: [{ type: i0.Input, args: ["css-class",] }], valueField: [{ type: i0.Input, args: ["value-field",] }], labelField: [{ type: i0.Input, args: ["label-field",] }], placeholder: [{ type: i0.Input, args: ["placeholder",] }], emptyText: [{ type: i0.Input, args: ["empty-text",] }], showEmptyResultText: [{ type: i0.Input, args: ["show-empty-text",] }], isMulti: [{ type: i0.Input, args: ["is-multi",] }], isLoading: [{ type: i0.Input, args: ["is-loading",] }], loadingText: [{ type: i0.Input, args: ["loading-text",] }], onKeyUp: [{ type: i0.Output, args: ["search-keyup",] }], onSelect: [{ type: i0.Output, args: ["on-select-item",] }], onBlur: [{ type: i0.Output, args: ["on-blur",] }], searchField: [{ type: i0.ViewChild, args: ['search_field',] }], listItems: [{ type: i0.ViewChildren, args: ["li_item",] }], actionTemplate: [{ type: i0.ContentChild, args: ['actionTemplate',] }], content: [{ type: i0.ViewChild, args: ['item_window',] }] }; return NgxSelectboxMayComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var NGXSelectboxMayPipe = /** @class */ (function () { function NGXSelectboxMayPipe() { } /** * @param {?} items * @param {?} filter * @return {?} */ NGXSelectboxMayPipe.prototype.transform = /** * @param {?} items * @param {?} filter * @return {?} */ function (items, filter) { if (!items || !filter) { return items; } // filter items array, items which match and return true will be // kept, false will be filtered out return items.filter(function (item) { return item.label.toUpperCase().indexOf(filter.toUpperCase()) !== -1; }); }; NGXSelectboxMayPipe.decorators = [ { type: i0.Pipe, args: [{ name: 'ngx_item_filter', pure: false },] } ]; return NGXSelectboxMayPipe; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var NgxSelectboxMayModule = /** @class */ (function () { function NgxSelectboxMayModule() { } NgxSelectboxMayModule.decorators = [ { type: i0.NgModule, args: [{ declarations: [NgxSelectboxMayComponent, NGXSelectboxMayPipe], imports: [ platformBrowser.BrowserModule, animations.BrowserAnimationsModule, forms.FormsModule ], exports: [NgxSelectboxMayComponent] },] } ]; return NgxSelectboxMayModule; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ exports.NgxSelectboxMayService = NgxSelectboxMayService; exports.NgxSelectboxMayComponent = NgxSelectboxMayComponent; exports.NGXSelectMayRow = NGXSelectMayRow; exports.NGXSelectMayConfigs = NGXSelectMayConfigs; exports.NGXSelectboxMayPipe = NGXSelectboxMayPipe; exports.NgxSelectboxMayModule = NgxSelectboxMayModule; Object.defineProperty(exports, '__esModule', { value: true }); }))); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXNlbGVjdGJveC1tYXkudW1kLmpzLm1hcCIsInNvdXJjZXMiOlsibmc6Ly9uZ3gtc2VsZWN0Ym94LW1heS9saWIvbmd4LXNlbGVjdGJveC1tYXktY29uZmlncy50cyIsIm5nOi8vbmd4LXNlbGVjdGJveC1tYXkvbGliL25neC1zZWxlY3Rib3gtbWF5LnNlcnZpY2UudHMiLCJuZzovL25neC1zZWxlY3Rib3gtbWF5L2xpYi9uZ3gtc2VsZWN0Ym94LW1heS5jb21wb25lbnQudHMiLCJuZzovL25neC1zZWxlY3Rib3gtbWF5L2xpYi9OR1hTZWxlY3Rib3hNYXlQaXBlLnRzIiwibmc6Ly9uZ3gtc2VsZWN0Ym94LW1heS9saWIvbmd4LXNlbGVjdGJveC1tYXkubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBOR1hTZWxlY3RNYXlSb3d7XG4gICAgaXNTZWxlY3RlZDpib29sZWFuO1xuICAgIGRhdGE6YW55O1xuICAgIHZhbHVlOmFueTtcbiAgICBsYWJlbDpzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3Rvcihpc1NlbGVjdGVkOmJvb2xlYW4sIGRhdGE6YW55KXtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkID0gaXNTZWxlY3RlZDtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB9XG5cbiAgICBzZXRLZXkodmFsdWU6YW55KXtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHNldExhYmVsKGxhYmVsOnN0cmluZyl7XG4gICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIE5HWFNlbGVjdE1heUNvbmZpZ3N7XG5cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUk9XX0FDVElWRV9DTEFTUyA9IFwiYWN0aXZlXCI7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTVBUWV9URVhUID0gXCJObyByZXN1bHRzIGZvdW5kXCI7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBNVUxUSV9TRUxFQ1RFRF9MQUJFTCA9IFwiI0NPVU5UICNJVEVNUyBTZWxlY3RlZFwiO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTE9BRElOR19URVhUID0gXCJQbGVhc2Ugd2FpdC4uLlwiO1xuXG4gICAgcHJpdmF0ZSBfbGFiZWxGaWVsZDogc3RyaW5nID0gXCJcIjtcbiAgICBwdWJsaWMgZ2V0IGxhYmVsRmllbGQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhYmVsRmllbGQ7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgbGFiZWxGaWVsZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2xhYmVsRmllbGQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF92YWx1ZUZpZWxkOiBhbnk7XG4gICAgcHVibGljIGdldCB2YWx1ZUZpZWxkKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZUZpZWxkO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHZhbHVlRmllbGQodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLl92YWx1ZUZpZWxkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGxhY2Vob2xkZXJUZXh0OiBzdHJpbmcgPSBcIlwiO1xuICAgIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlclRleHQ7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgcGxhY2Vob2xkZXJUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXJUZXh0ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZW1wdHlUZXh0OiBzdHJpbmcgPSBcIlwiO1xuICAgIHB1YmxpYyBnZXQgZW1wdHlUZXh0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbXB0eVRleHQ7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgZW1wdHlUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZW1wdHlUZXh0ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2hvd0VtcHR5UmVzdWx0c0xhYmVsOiBib29sZWFuID0gdHJ1ZTtcbiAgICBwdWJsaWMgZ2V0IHNob3dFbXB0eVJlc3VsdHNMYWJlbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dFbXB0eVJlc3VsdHNMYWJlbDtcbiAgICB9XG4gICAgcHVibGljIHNldCBzaG93RW1wdHlSZXN1bHRzTGFiZWwodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fc2hvd0VtcHR5UmVzdWx0c0xhYmVsID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3NzQ2xhc3M6IHN0cmluZyA9IFwiXCI7XG4gICAgcHVibGljIGdldCBjc3NDbGFzcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3NzQ2xhc3M7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgY3NzQ2xhc3ModmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9jc3NDbGFzcyA9IHZhbHVlO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBfaXNNdWx0aVNlbGVjdDogYm9vbGVhbjtcbiAgICBwdWJsaWMgZ2V0IGlzTXVsdGlTZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc011bHRpU2VsZWN0O1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGlzTXVsdGlTZWxlY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faXNNdWx0aVNlbGVjdCA9IHZhbHVlO1xuICAgIH1cblxufSIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HWFNlbGVjdE1heUNvbmZpZ3MsIE5HWFNlbGVjdE1heVJvdyB9IGZyb20gJy4vbmd4LXNlbGVjdGJveC1tYXktY29uZmlncyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE5neFNlbGVjdGJveE1heVNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgY3JlYXRlRHJvcGRvd25Sb3dzKGl0ZW1zOmFueVtdLCBjb25maWdzOk5HWFNlbGVjdE1heUNvbmZpZ3MpOkFycmF5PE5HWFNlbGVjdE1heVJvdz57XG4gICAgbGV0IGFyciA9IFtdO1xuICAgIGl0ZW1zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICBsZXQgcm93ID0gbmV3IE5HWFNlbGVjdE1heVJvdyhmYWxzZSwgZWxlbWVudCk7XG4gICAgICByb3cuc2V0S2V5KGNvbmZpZ3MudmFsdWVGaWVsZCA/IGVsZW1lbnRbY29uZmlncy52YWx1ZUZpZWxkXSA6IGVsZW1lbnQpO1xuICAgICAgcm93LnNldExhYmVsKGNvbmZpZ3MubGFiZWxGaWVsZCA/IGVsZW1lbnRbY29uZmlncy5sYWJlbEZpZWxkXSA6IGVsZW1lbnQpO1xuICAgICAgYXJyLnB1c2gocm93KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyO1xuICB9XG5cbiAgcmVjb25maWd1cmVEcm9wZG93blJvd0xhYmVsc0FuZFZhbHVlcyhhbGxSb3dzOkFycmF5PE5HWFNlbGVjdE1heVJvdz4sIGNvbmZpZ3M6TkdYU2VsZWN0TWF5Q29uZmlncyl7XG4gICAgYWxsUm93cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgZWxlbWVudC5zZXRLZXkoY29uZmlncy52YWx1ZUZpZWxkID8gZWxlbWVudC5kYXRhW2NvbmZpZ3MudmFsdWVGaWVsZF0gOiBlbGVtZW50LmRhdGEpO1xuICAgICAgZWxlbWVudC5zZXRMYWJlbChjb25maWdzLmxhYmVsRmllbGQgPyBlbGVtZW50LmRhdGFbY29uZmlncy5sYWJlbEZpZWxkXSA6IGVsZW1lbnQuZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuXG4gIGNyZWF0ZURyb3Bkb3duTGFiZWwoY29uZmlnczpOR1hTZWxlY3RNYXlDb25maWdzLCBzZWxlY3RlZFJvd3M6QXJyYXk8TkdYU2VsZWN0TWF5Um93Pil7XG4gICAgLy9DaGVjayBpcyBjb25maWd1cmVkIHRvIHNlbGVjdCBtdWx0aXBsZSBjaG9pY2VzXG4gICAgaWYoY29uZmlncy5pc011bHRpU2VsZWN0KXtcblxuICAgICAgaWYoc2VsZWN0ZWRSb3dzLmxlbmd0aCA+IDEpe1xuICAgICAgICByZXR1cm4gTkdYU2VsZWN0TWF5Q29uZmlncy5NVUxUSV9TRUxFQ1RFRF9MQUJFTC5yZXBsYWNlKFwiI0NPVU5UXCIsIHNlbGVjdGVkUm93cy5sZW5ndGgudG9TdHJpbmcoKSkucmVwbGFjZShcIiNJVEVNU1wiLCBcIkl0ZW1zXCIpO1xuICAgICAgfWVsc2UgaWYoc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PSAxKXtcbiAgICAgICAgcmV0dXJuIE5HWFNlbGVjdE1heUNvbmZpZ3MuTVVMVElfU0VMRUNURURfTEFCRUwucmVwbGFjZShcIiNDT1VOVFwiLCBzZWxlY3RlZFJvd3MubGVuZ3RoLnRvU3RyaW5nKCkpLnJlcGxhY2UoXCIjSVRFTVNcIiwgXCJJdGVtXCIpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIHJldHVybiBOR1hTZWxlY3RNYXlDb25maWdzLk1VTFRJX1NFTEVDVEVEX0xBQkVMLnJlcGxhY2UoXCIjQ09VTlRcIiwgc2VsZWN0ZWRSb3dzLmxlbmd0aC50b1N0cmluZygpKS5yZXBsYWNlKFwiI0lURU1TXCIsIFwiSXRlbXNcIik7XG4gICAgICB9XG5cbiAgICB9ZWxzZXtcbiAgICAgIHJldHVybiBzZWxlY3RlZFJvd3MubGVuZ3RoID4gMCA/IHNlbGVjdGVkUm93c1swXS5sYWJlbCA6IFwiXCI7XG4gICAgfVxuICB9XG5cbiAgc2V0U2VsZWN0ZWRJdGVtcyhjb25maWdzOk5HWFNlbGVjdE1heUNvbmZpZ3MsIHNlbGVjdGVkUm93czpBcnJheTxOR1hTZWxlY3RNYXlSb3c+LGFsbFJvd3M6QXJyYXk8TkdYU2VsZWN0TWF5Um93Piwgcm93Ok5HWFNlbGVjdE1heVJvdyl7XG4gICAgLy9DaGVjayBpcyBjb25maWd1cmVkIHRvIHNlbGVjdCBtdWx0aXBsZSBjaG9pY2VzXG4gICAgaWYoY29uZmlncy5pc011bHRpU2VsZWN0KXtcbiAgICAgIFxuICAgIH1lbHNle1xuICAgICAgaWYoIXJvdy5pc1NlbGVjdGVkKXtcbiAgICAgICAgdGhpcy51bnNlbGVjdEFsbFNlbGVjdGVkUm93cyhhbGxSb3dzKTtcbiAgICAgICAgcm93LmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICBzZWxlY3RlZFJvd3MgPSBbXTtcbiAgICAgICAgc2VsZWN0ZWRSb3dzLnB1c2gocm93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGVkUm93cztcbiAgfVxuXG4gIHVuc2VsZWN0QWxsU2VsZWN0ZWRSb3dzKGFsbFJvd3M6QXJyYXk8TkdYU2VsZWN0TWF5Um93Pil7XG4gICAgYWxsUm93cy5mb3JFYWNoKHIgPT4ge1xuICAgICAgci5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBzZWxlY3RJdGVtQnlWYWx1ZShhbGxSb3dzOkFycmF5PE5HWFNlbGVjdE1heVJvdz4sIHZhbHVlOmFueSl7XG4gICAgbGV0IGZpbHRlcmVkVmFsID0gYWxsUm93cy5maWx0ZXIociA9PiByLnZhbHVlID09PSB2YWx1ZSk7XG4gICAgaWYoZmlsdGVyZWRWYWwubGVuZ3RoID4gMCkgZmlsdGVyZWRWYWxbMF0uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgcmV0dXJuIGZpbHRlcmVkVmFsO1xuICB9XG5cbiAgc2VsZWN0SXRlbXNCeVZhbHVlKGFsbFJvd3M6QXJyYXk8TkdYU2VsZWN0TWF5Um93PiwgdmFsdWVzOkFycmF5PGFueT4pe1xuICAgIGxldCBhID0gW107XG4gICAgdmFsdWVzLmZvckVhY2godiA9PiB7XG4gICAgICBsZXQgZmlsdGVyZWRWYWwgPSBhbGxSb3dzLmZpbHRlcihyID0+IHIudmFsdWUgPT09IHYpO1xuICAgICAgaWYoZmlsdGVyZWRWYWwubGVuZ3RoID4gMCkgZmlsdGVyZWRWYWxbMF0uaXNTZWxlY3RlZCA9IHRydWU7IGEucHVzaChmaWx0ZXJlZFZhbFswXSk7XG4gICAgfSlcbiAgICByZXR1cm4gYTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgUXVlcnlMaXN0LCBmb3J3YXJkUmVmLCBIb3N0TGlzdGVuZXIsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDb250ZW50Q2hpbGQsIFRlbXBsYXRlUmVmLCBPbkRlc3Ryb3ksIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmd4U2VsZWN0Ym94TWF5U2VydmljZSB9IGZyb20gJy4vbmd4LXNlbGVjdGJveC1tYXkuc2VydmljZSc7XG5pbXBvcnQgeyBOR1hTZWxlY3RNYXlDb25maWdzLCBOR1hTZWxlY3RNYXlSb3cgfSBmcm9tICcuL25neC1zZWxlY3Rib3gtbWF5LWNvbmZpZ3MnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtc2VsZWN0Ym94LW1heScsXG4gIGhvc3Q6IHtcbiAgICAnKGRvY3VtZW50OmNsaWNrKSc6ICdvbkNsaWNrT3V0c2lkZSgkZXZlbnQpJyxcbiAgICAnKHdpbmRvdzpyZXNpemUpJzogJ29uV2luZG93UmVzaXplKCRldmVudCknXG4gIH0sXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3gtc2VsZWN0Ym94LW1heS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25neC1zZWxlY3Rib3gtbWF5LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmd4U2VsZWN0Ym94TWF5Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hTZWxlY3Rib3hNYXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICBkcm9wZG93blJvd3M6IEFycmF5PE5HWFNlbGVjdE1heVJvdz4gPSBbXTtcbiAgY29uZmlnczogTkdYU2VsZWN0TWF5Q29uZmlncyA9IG5ldyBOR1hTZWxlY3RNYXlDb25maWdzKCk7XG4gIHNlbGVjdGVkUm93czogQXJyYXk8TkdYU2VsZWN0TWF5Um93PiA9IFtdO1xuICBzaG93X2l0ZW1zOiBib29sZWFuID0gZmFsc2U7XG4gIHNlYXJjaFRleHQ6IHN0cmluZyA9IFwiXCI7XG4gIGlzRW5hYmxlOmJvb2xlYW4gPSB0cnVlO1xuICBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XG4gIHByb3BhZ2F0ZU9uVG91Y2ggPSAoXzogYW55KSA9PiB7IH07XG5cbiAgQElucHV0KFwiaXRlbXNcIilcbiAgc2V0IGl0ZW1zKGl0ZW1zOiBhbnlbXSkge1xuICAgIHRoaXMuY3JlYXRlRHJvcGRvd25Sb3dzKGl0ZW1zKTtcbiAgfVxuXG4gIEBJbnB1dChcImNzcy1jbGFzc1wiKVxuICBzZXQgY3NzQ2xhc3MoY3NzQ2xhc3M6IHN0cmluZykge1xuICAgIHRoaXMuY29uZmlncy5jc3NDbGFzcyA9IGNzc0NsYXNzO1xuICB9XG5cbiAgQElucHV0KFwidmFsdWUtZmllbGRcIilcbiAgc2V0IHZhbHVlRmllbGQodmFsdWVGaWVsZDogc3RyaW5nKSB7XG4gICAgdGhpcy5jb25maWdzLnZhbHVlRmllbGQgPSB2YWx1ZUZpZWxkO1xuICB9XG5cbiAgQElucHV0KFwibGFiZWwtZmllbGRcIilcbiAgc2V0IGxhYmVsRmllbGQobGFiZWxGaWVsZDogc3RyaW5nKSB7XG4gICAgdGhpcy5jb25maWdzLmxhYmVsRmllbGQgPSBsYWJlbEZpZWxkO1xuICAgIHRoaXMucmVjb25maWd1cmVMYWJlbHNBbmRWYWx1ZXMoKTtcbiAgfVxuXG4gIEBJbnB1dChcInBsYWNlaG9sZGVyXCIpXG4gIHNldCBwbGFjZWhvbGRlcihwbGFjZWhvbGRlcjogc3RyaW5nKSB7XG4gICAgdGhpcy5jb25maWdzLnBsYWNlaG9sZGVyVGV4dCA9IHBsYWNlaG9sZGVyO1xuICB9XG5cbiAgQElucHV0KFwiZW1wdHktdGV4dFwiKVxuICBzZXQgZW1wdHlUZXh0KGVtcHR5VGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5jb25maWdzLmVtcHR5VGV4dCA9IGVtcHR5VGV4dDtcbiAgfVxuXG4gIEBJbnB1dChcInNob3ctZW1wdHktdGV4dFwiKVxuICBzZXQgc2hvd0VtcHR5UmVzdWx0VGV4dChzaG93RW1wdHlUZXh0OiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25maWdzLnNob3dFbXB0eVJlc3VsdHNMYWJlbCA9IHNob3dFbXB0eVRleHQ7XG4gIH1cblxuICBASW5wdXQoXCJpcy1tdWx0aVwiKVxuICBzZXQgaXNNdWx0aShpc011bHRpOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25maWdzLmlzTXVsdGlTZWxlY3QgPSBpc011bHRpO1xuICB9XG5cbiAgX2lzTG9hZGluZzogYm9vbGVhbjtcbiAgQElucHV0KFwiaXMtbG9hZGluZ1wiKVxuICBzZXQgaXNMb2FkaW5nKGlzTG9hZGluZzogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzTG9hZGluZyA9IGlzTG9hZGluZztcbiAgfVxuXG4gIF9sb2FkaW5nVGV4dDogc3RyaW5nO1xuICBASW5wdXQoXCJsb2FkaW5nLXRleHRcIilcbiAgc2V0IGxvYWRpbmdUZXh0KGxvYWRpbmdUZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sb2FkaW5nVGV4dCA9IGxvYWRpbmdUZXh0O1xuICB9XG5cbiAgQE91dHB1dChcInNlYXJjaC1rZXl1cFwiKSBvbktleVVwID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KFwib24tc2VsZWN0LWl0ZW1cIikgb25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoXCJvbi1ibHVyXCIpIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkKCdzZWFyY2hfZmllbGQnKSBzZWFyY2hGaWVsZDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZHJlbihcImxpX2l0ZW1cIikgbGlzdEl0ZW1zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIGl0ZW1XaW5kb3c6IEVsZW1lbnRSZWY7XG5cbiAgQENvbnRlbnRDaGlsZCgnYWN0aW9uVGVtcGxhdGUnKSBhY3Rpb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8RWxlbWVudFJlZj47XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3NlbGVjdGJveHJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBzZWxlY3Rib3hTZXJ2aWNlOiBOZ3hTZWxlY3Rib3hNYXlTZXJ2aWNlKSB7XG5cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cblxuICBjcmVhdGVEcm9wZG93blJvd3MoaXRlbXM6IGFueVtdKSB7XG4gICAgdGhpcy5kcm9wZG93blJvd3MgPSB0aGlzLnNlbGVjdGJveFNlcnZpY2UuY3JlYXRlRHJvcGRvd25Sb3dzKGl0ZW1zLCB0aGlzLmNvbmZpZ3MpO1xuICAgIHRoaXMuc2V0VmFsdWVzUGFzc2VkRXh0ZXJuYWwodGhpcy5uZ01vZGVsVmFsdWUpO1xuICB9XG5cbiAgcmVjb25maWd1cmVMYWJlbHNBbmRWYWx1ZXMoKSB7XG4gICAgdGhpcy5zZWxlY3Rib3hTZXJ2aWNlLnJlY29uZmlndXJlRHJvcGRvd25Sb3dMYWJlbHNBbmRWYWx1ZXModGhpcy5kcm9wZG93blJvd3MsIHRoaXMuY29uZmlncyk7XG4gIH1cblxuICBnZXRTZWxlY3Rib3hMYWJlbCgpIHtcbiAgICBsZXQgbGFiZWwgPSB0aGlzLnNlbGVjdGJveFNlcnZpY2UuY3JlYXRlRHJvcGRvd25MYWJlbCh0aGlzLmNvbmZpZ3MsIHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICByZXR1cm4gbGFiZWwgPyBsYWJlbCA6IHRoaXMuY29uZmlncy5wbGFjZWhvbGRlclRleHQ7XG4gIH1cblxuICBnZXRFbXB0eVRleHRMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdzLmVtcHR5VGV4dCA/IHRoaXMuY29uZmlncy5lbXB0eVRleHQgOiBOR1hTZWxlY3RNYXlDb25maWdzLkVNUFRZX1RFWFQ7XG4gIH1cblxuICBnZXRMb2FkaW5nVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG