ngx-selectbox-may
Version:
Angular selectbox with autocomplete
927 lines (916 loc) • 74.4 kB
JavaScript
(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