mdc-autocomplete-list
Version:
MdcAutocomplete in conjunction with MdcAutocompleteList and MdcAutocompleteListItem are a pack of angular components to provide an autocomplete functionality to Angular MDC web.
312 lines (302 loc) • 27.6 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('mdc-autocomplete-list-item'), require('rxjs'), require('@angular/common'), require('@angular-mdc/web')) :
typeof define === 'function' && define.amd ? define('mdc-autocomplete-list', ['exports', '@angular/core', 'mdc-autocomplete-list-item', 'rxjs', '@angular/common', '@angular-mdc/web'], factory) :
(factory((global['mdc-autocomplete-list'] = {}),global.ng.core,null,global.rxjs,global.ng.common,null));
}(this, (function (exports,i0,mdcAutocompleteListItem,rxjs,common,web) { 'use strict';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var MdcAutocompleteListService = (function () {
function MdcAutocompleteListService() {
}
MdcAutocompleteListService.decorators = [
{ type: i0.Injectable, args: [{
providedIn: 'root'
},] },
];
/** @nocollapse */
MdcAutocompleteListService.ctorParameters = function () { return []; };
/** @nocollapse */ MdcAutocompleteListService.ngInjectableDef = i0.defineInjectable({ factory: function MdcAutocompleteListService_Factory() { return new MdcAutocompleteListService(); }, token: MdcAutocompleteListService, providedIn: "root" });
return MdcAutocompleteListService;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var MdcAutocompleteListComponent = (function () {
function MdcAutocompleteListComponent() {
}
/**
* @return {?}
*/
MdcAutocompleteListComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
};
MdcAutocompleteListComponent.decorators = [
{ type: i0.Component, args: [{
selector: 'mdc-mdc-autocomplete-list',
template: "\n <p>\n mdc-autocomplete-list works!\n </p>\n ",
styles: []
},] },
];
/** @nocollapse */
MdcAutocompleteListComponent.ctorParameters = function () { return []; };
return MdcAutocompleteListComponent;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var MdcAutocompleteList = (function () {
function MdcAutocompleteList() {
this.itemSelected = new rxjs.Subject();
this.maxVisibleItems = Number.POSITIVE_INFINITY;
this._visible = false;
this._filter = '';
}
Object.defineProperty(MdcAutocompleteList.prototype, "visible", {
get: /**
* @return {?}
*/ function () {
return this._visible;
},
set: /**
* @param {?} v
* @return {?}
*/ function (v) {
this._visible = v;
if (v) {
this.filterItems();
this.focusFirstItem();
}
else {
this.unfocusAllItems();
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(MdcAutocompleteList.prototype, "filter", {
get: /**
* @return {?}
*/ function () {
return this._filter;
},
set: /**
* @param {?} f
* @return {?}
*/ function (f) {
this._filter = f;
this.filterItems();
this.focusFirstItem();
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
MdcAutocompleteList.prototype.ngOnInit = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
MdcAutocompleteList.prototype.ngAfterContentChecked = /**
* @return {?}
*/
function () {
var _this = this;
this.autocompleteListItems.toArray().forEach(function (item) {
if (item.itemClicked.observers.length === 0) {
// Only allow one subscription
item.itemClicked.subscribe(function (itemValue) {
_this.itemSelected.next(itemValue);
});
}
if (item.itemHovered.observers.length === 0) {
// Only allow one subscription
item.itemHovered.subscribe(function (itemValue) {
_this.unfocusAllItems();
item.focused = true;
});
}
});
};
/**
* @return {?}
*/
MdcAutocompleteList.prototype.unfocusAllItems = /**
* @return {?}
*/
function () {
this.autocompleteListItems.toArray().forEach(function (item) {
item.focused = false;
});
};
/**
* @return {?}
*/
MdcAutocompleteList.prototype.focusNextItem = /**
* @return {?}
*/
function () {
/** @type {?} */
var focusedItems = this.autocompleteListItems.filter(function (item, index, list) { return item.focused; });
/** @type {?} */
var focusedItem = focusedItems.length > 0 ? focusedItems[0] : null;
/** @type {?} */
var visibleItems = this.autocompleteListItems.filter(function (item, index, list) { return item.visible; });
if (focusedItem) {
/** @type {?} */
var focusedItemIndex = visibleItems.indexOf(focusedItem);
/** @type {?} */
var nextFocusedItem = (visibleItems.length >= focusedItemIndex + 1) ? visibleItems[focusedItemIndex + 1] : null;
if (nextFocusedItem) {
focusedItem.focused = false;
nextFocusedItem.focused = true;
nextFocusedItem.scrollIntoView();
}
}
else {
if (visibleItems.length > 0) {
visibleItems[0].focused = true;
}
}
};
/**
* @return {?}
*/
MdcAutocompleteList.prototype.focusPreviousItem = /**
* @return {?}
*/
function () {
/** @type {?} */
var focusedItems = this.autocompleteListItems.filter(function (item, index, list) { return item.focused; });
/** @type {?} */
var focusedItem = focusedItems.length > 0 ? focusedItems[0] : null;
/** @type {?} */
var visibleItems = this.autocompleteListItems.filter(function (item, index, list) { return item.visible; });
if (focusedItem) {
/** @type {?} */
var focusedItemIndex = visibleItems.indexOf(focusedItem);
/** @type {?} */
var previousFocusedItem = (focusedItemIndex > 0) ? visibleItems[focusedItemIndex - 1] : null;
if (previousFocusedItem) {
focusedItem.focused = false;
previousFocusedItem.focused = true;
previousFocusedItem.scrollIntoView();
}
}
else {
if (visibleItems.length > 0) {
visibleItems[0].focused = true;
}
}
};
/**
* @return {?}
*/
MdcAutocompleteList.prototype.focusFirstItem = /**
* @return {?}
*/
function () {
this.unfocusAllItems();
/** @type {?} */
var visibleItems = this.autocompleteListItems.filter(function (item, index, list) { return item.visible; });
if (visibleItems.length > 0) {
visibleItems[0].focused = true;
}
};
/**
* @return {?}
*/
MdcAutocompleteList.prototype.selectFocusedItem = /**
* @return {?}
*/
function () {
/** @type {?} */
var focusedItems = this.autocompleteListItems.filter(function (item, index, list) { return item.focused; });
/** @type {?} */
var focusedItem = focusedItems.length > 0 ? focusedItems[0] : null;
if (focusedItem) {
this.itemSelected.next(focusedItem.value);
}
};
/**
* @return {?}
*/
MdcAutocompleteList.prototype.filterItems = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var showing = 0;
this.autocompleteListItems.forEach(function (item, index, list) {
if (showing < _this.maxVisibleItems && item.filterString.toUpperCase().includes(_this._filter.toUpperCase())) {
item.visible = true;
showing++;
}
else {
item.visible = false;
item.focused = false;
}
});
};
MdcAutocompleteList.decorators = [
{ type: i0.Component, args: [{
selector: 'mdc-autocomplete-list',
template: "<ul *ngIf=\"visible\" class=\"mdc-elevation--z2\">\n <ng-content></ng-content>\n</ul>\n",
styles: ["ul{position:absolute;min-width:200px;max-height:400px;padding:0;margin:0;background-color:#fff;overflow-y:scroll;list-style:none}"]
},] },
];
/** @nocollapse */
MdcAutocompleteList.ctorParameters = function () { return []; };
MdcAutocompleteList.propDecorators = {
maxVisibleItems: [{ type: i0.Input }],
itemSelected: [{ type: i0.Output }],
autocompleteListItems: [{ type: i0.ContentChildren, args: [mdcAutocompleteListItem.MdcAutocompleteListItem,] }]
};
return MdcAutocompleteList;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var MdcAutocompleteListModule = (function () {
function MdcAutocompleteListModule() {
}
MdcAutocompleteListModule.decorators = [
{ type: i0.NgModule, args: [{
imports: [
common.CommonModule,
mdcAutocompleteListItem.MdcAutocompleteListItemModule,
web.MdcElevationModule
],
declarations: [MdcAutocompleteListComponent, MdcAutocompleteList],
exports: [MdcAutocompleteList]
},] },
];
return MdcAutocompleteListModule;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
exports.MdcAutocompleteListService = MdcAutocompleteListService;
exports.MdcAutocompleteListModule = MdcAutocompleteListModule;
exports.MdcAutocompleteList = MdcAutocompleteList;
exports.ɵa = MdcAutocompleteListComponent;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRjLWF1dG9jb21wbGV0ZS1saXN0LnVtZC5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vbWRjLWF1dG9jb21wbGV0ZS1saXN0L2xpYi9tZGMtYXV0b2NvbXBsZXRlLWxpc3Quc2VydmljZS50cyIsIm5nOi8vbWRjLWF1dG9jb21wbGV0ZS1saXN0L2xpYi9tZGMtYXV0b2NvbXBsZXRlLWxpc3QuY29tcG9uZW50LnRzIiwibmc6Ly9tZGMtYXV0b2NvbXBsZXRlLWxpc3QvbGliL2F1dG9jb21wbGV0ZS1saXN0L2F1dG9jb21wbGV0ZS1saXN0LmNvbXBvbmVudC50cyIsIm5nOi8vbWRjLWF1dG9jb21wbGV0ZS1saXN0L2xpYi9tZGMtYXV0b2NvbXBsZXRlLWxpc3QubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE1kY0F1dG9jb21wbGV0ZUxpc3RTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdtZGMtbWRjLWF1dG9jb21wbGV0ZS1saXN0JyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPHA+XHJcbiAgICAgIG1kYy1hdXRvY29tcGxldGUtbGlzdCB3b3JrcyFcclxuICAgIDwvcD5cclxuICBgLFxyXG4gIHN0eWxlczogW11cclxufSlcclxuZXhwb3J0IGNsYXNzIE1kY0F1dG9jb21wbGV0ZUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICB9XHJcblxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBDb250ZW50Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgSW5wdXQsIE91dHB1dCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZGNBdXRvY29tcGxldGVMaXN0SXRlbSB9IGZyb20gJ21kYy1hdXRvY29tcGxldGUtbGlzdC1pdGVtJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdtZGMtYXV0b2NvbXBsZXRlLWxpc3QnLFxyXG4gIHRlbXBsYXRlOiBgPHVsICpuZ0lmPVwidmlzaWJsZVwiIGNsYXNzPVwibWRjLWVsZXZhdGlvbi0tejJcIj5cclxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbjwvdWw+XHJcbmAsXHJcbiAgc3R5bGVzOiBbYHVse3Bvc2l0aW9uOmFic29sdXRlO21pbi13aWR0aDoyMDBweDttYXgtaGVpZ2h0OjQwMHB4O3BhZGRpbmc6MDttYXJnaW46MDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3ZlcmZsb3cteTpzY3JvbGw7bGlzdC1zdHlsZTpub25lfWBdXHJcbn0pXHJcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtY2xhc3Mtc3VmZml4XHJcbmV4cG9ydCBjbGFzcyBNZGNBdXRvY29tcGxldGVMaXN0IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkIHtcclxuXHJcbiAgQElucHV0KCkgbWF4VmlzaWJsZUl0ZW1zOiBudW1iZXI7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBpdGVtU2VsZWN0ZWQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oTWRjQXV0b2NvbXBsZXRlTGlzdEl0ZW0pIGF1dG9jb21wbGV0ZUxpc3RJdGVtczogIFF1ZXJ5TGlzdDxNZGNBdXRvY29tcGxldGVMaXN0SXRlbT47XHJcbiAgX3Zpc2libGU6IGJvb2xlYW47XHJcbiAgX2ZpbHRlcjogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgdmlzaWJsZSh2OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl92aXNpYmxlID0gdjtcclxuICAgIGlmICh2KSB7XHJcbiAgICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcclxuICAgICAgdGhpcy5mb2N1c0ZpcnN0SXRlbSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy51bmZvY3VzQWxsSXRlbXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZmlsdGVyKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBmaWx0ZXIoZjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9maWx0ZXIgPSBmO1xyXG4gICAgdGhpcy5maWx0ZXJJdGVtcygpO1xyXG4gICAgdGhpcy5mb2N1c0ZpcnN0SXRlbSgpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLm1heFZpc2libGVJdGVtcyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcclxuICAgIHRoaXMuX3Zpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMuX2ZpbHRlciA9ICcnO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XHJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUxpc3RJdGVtcy50b0FycmF5KCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAoaXRlbS5pdGVtQ2xpY2tlZC5vYnNlcnZlcnMubGVuZ3RoID09PSAwKSB7IC8vIE9ubHkgYWxsb3cgb25lIHN1YnNjcmlwdGlvblxyXG4gICAgICAgIGl0ZW0uaXRlbUNsaWNrZWQuc3Vic2NyaWJlKChpdGVtVmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXRlbVNlbGVjdGVkLm5leHQoaXRlbVZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGl0ZW0uaXRlbUhvdmVyZWQub2JzZXJ2ZXJzLmxlbmd0aCA9PT0gMCkgeyAvLyBPbmx5IGFsbG93IG9uZSBzdWJzY3JpcHRpb25cclxuICAgICAgICBpdGVtLml0ZW1Ib3ZlcmVkLnN1YnNjcmliZSgoaXRlbVZhbHVlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnVuZm9jdXNBbGxJdGVtcygpO1xyXG4gICAgICAgICAgaXRlbS5mb2N1c2VkID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdW5mb2N1c0FsbEl0ZW1zKCkge1xyXG4gICAgdGhpcy5hdXRvY29tcGxldGVMaXN0SXRlbXMudG9BcnJheSgpLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5mb2N1c2VkID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2N1c05leHRJdGVtKCkge1xyXG4gICAgY29uc3QgZm9jdXNlZEl0ZW1zID0gdGhpcy5hdXRvY29tcGxldGVMaXN0SXRlbXMuZmlsdGVyKChpdGVtLCBpbmRleCwgbGlzdCkgPT4gaXRlbS5mb2N1c2VkKTtcclxuICAgIGNvbnN0IGZvY3VzZWRJdGVtID0gZm9jdXNlZEl0ZW1zLmxlbmd0aCA+IDAgPyBmb2N1c2VkSXRlbXNbMF0gOiBudWxsO1xyXG4gICAgY29uc3QgdmlzaWJsZUl0ZW1zID0gdGhpcy5hdXRvY29tcGxldGVMaXN0SXRlbXMuZmlsdGVyKChpdGVtLCBpbmRleCwgbGlzdCkgPT4gaXRlbS52aXNpYmxlKTtcclxuXHJcbiAgICBpZiAoZm9jdXNlZEl0ZW0pIHtcclxuICAgICAgY29uc3QgZm9jdXNlZEl0ZW1JbmRleCA9IHZpc2libGVJdGVtcy5pbmRleE9mKGZvY3VzZWRJdGVtKTtcclxuICAgICAgY29uc3QgbmV4dEZvY3VzZWRJdGVtID0gKHZpc2libGVJdGVtcy5sZW5ndGggPj0gZm9jdXNlZEl0ZW1JbmRleCArIDEpID8gdmlzaWJsZUl0ZW1zW2ZvY3VzZWRJdGVtSW5kZXggKyAxXSA6IG51bGw7XHJcbiAgICAgIGlmIChuZXh0Rm9jdXNlZEl0ZW0pIHtcclxuICAgICAgICBmb2N1c2VkSXRlbS5mb2N1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgbmV4dEZvY3VzZWRJdGVtLmZvY3VzZWQgPSB0cnVlO1xyXG4gICAgICAgIG5leHRGb2N1c2VkSXRlbS5zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodmlzaWJsZUl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB2aXNpYmxlSXRlbXNbMF0uZm9jdXNlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2N1c1ByZXZpb3VzSXRlbSgpIHtcclxuICAgIGNvbnN0IGZvY3VzZWRJdGVtcyA9IHRoaXMuYXV0b2NvbXBsZXRlTGlzdEl0ZW1zLmZpbHRlcigoaXRlbSwgaW5kZXgsIGxpc3QpID0+IGl0ZW0uZm9jdXNlZCk7XHJcbiAgICBjb25zdCBmb2N1c2VkSXRlbSA9IGZvY3VzZWRJdGVtcy5sZW5ndGggPiAwID8gZm9jdXNlZEl0ZW1zWzBdIDogbnVsbDtcclxuICAgIGNvbnN0IHZpc2libGVJdGVtcyA9IHRoaXMuYXV0b2NvbXBsZXRlTGlzdEl0ZW1zLmZpbHRlcigoaXRlbSwgaW5kZXgsIGxpc3QpID0+IGl0ZW0udmlzaWJsZSk7XHJcblxyXG4gICAgaWYgKGZvY3VzZWRJdGVtKSB7XHJcbiAgICAgIGNvbnN0IGZvY3VzZWRJdGVtSW5kZXggPSB2aXNpYmxlSXRlbXMuaW5kZXhPZihmb2N1c2VkSXRlbSk7XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzRm9jdXNlZEl0ZW0gPSAoZm9jdXNlZEl0ZW1JbmRleCA+IDApID8gdmlzaWJsZUl0ZW1zW2ZvY3VzZWRJdGVtSW5kZXggLSAxXSA6IG51bGw7XHJcbiAgICAgIGlmIChwcmV2aW91c0ZvY3VzZWRJdGVtKSB7XHJcbiAgICAgICAgZm9jdXNlZEl0ZW0uZm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgIHByZXZpb3VzRm9jdXNlZEl0ZW0uZm9jdXNlZCA9IHRydWU7XHJcbiAgICAgICAgcHJldmlvdXNGb2N1c2VkSXRlbS5zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodmlzaWJsZUl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB2aXNpYmxlSXRlbXNbMF0uZm9jdXNlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2N1c0ZpcnN0SXRlbSgpIHtcclxuICAgIHRoaXMudW5mb2N1c0FsbEl0ZW1zKCk7XHJcbiAgICBjb25zdCB2aXNpYmxlSXRlbXMgPSB0aGlzLmF1dG9jb21wbGV0ZUxpc3RJdGVtcy5maWx0ZXIoKGl0ZW0sIGluZGV4LCBsaXN0KSA9PiBpdGVtLnZpc2libGUpO1xyXG4gICAgaWYgKHZpc2libGVJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHZpc2libGVJdGVtc1swXS5mb2N1c2VkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RGb2N1c2VkSXRlbSgpIHtcclxuICAgIGNvbnN0IGZvY3VzZWRJdGVtcyA9IHRoaXMuYXV0b2NvbXBsZXRlTGlzdEl0ZW1zLmZpbHRlcigoaXRlbSwgaW5kZXgsIGxpc3QpID0+IGl0ZW0uZm9jdXNlZCk7XHJcbiAgICBjb25zdCBmb2N1c2VkSXRlbSA9IGZvY3VzZWRJdGVtcy5sZW5ndGggPiAwID8gZm9jdXNlZEl0ZW1zWzBdIDogbnVsbDtcclxuXHJcbiAgICBpZiAoZm9jdXNlZEl0ZW0pIHtcclxuICAgICAgdGhpcy5pdGVtU2VsZWN0ZWQubmV4dChmb2N1c2VkSXRlbS52YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbHRlckl0ZW1zKCkge1xyXG4gICAgbGV0IHNob3dpbmcgPSAwO1xyXG4gICAgdGhpcy5hdXRvY29tcGxldGVMaXN0SXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgsIGxpc3QpID0+IHtcclxuICAgICAgaWYgKHNob3dpbmcgPCB0aGlzLm1heFZpc2libGVJdGVtcyAmJiBpdGVtLmZpbHRlclN0cmluZy50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuX2ZpbHRlci50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgIGl0ZW0udmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgc2hvd2luZysrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGl0ZW0udmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIGl0ZW0uZm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWRjQXV0b2NvbXBsZXRlTGlzdENvbXBvbmVudCB9IGZyb20gJy4vbWRjLWF1dG9jb21wbGV0ZS1saXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1kY0F1dG9jb21wbGV0ZUxpc3QgfSBmcm9tICcuL2F1dG9jb21wbGV0ZS1saXN0L2F1dG9jb21wbGV0ZS1saXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1kY0F1dG9jb21wbGV0ZUxpc3RJdGVtTW9kdWxlIH0gZnJvbSAnbWRjLWF1dG9jb21wbGV0ZS1saXN0LWl0ZW0nO1xyXG5pbXBvcnQgeyBNZGNFbGV2YXRpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci1tZGMvd2ViJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTWRjQXV0b2NvbXBsZXRlTGlzdEl0ZW1Nb2R1bGUsXHJcbiAgICBNZGNFbGV2YXRpb25Nb2R1bGVcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW01kY0F1dG9jb21wbGV0ZUxpc3RDb21wb25lbnQsIE1kY0F1dG9jb21wbGV0ZUxpc3RdLFxyXG4gIGV4cG9ydHM6IFtNZGNBdXRvY29tcGxldGVMaXN0XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWRjQXV0b2NvbXBsZXRlTGlzdE1vZHVsZSB7IH1cclxuIl0sIm5hbWVzIjpbIkluamVjdGFibGUiLCJDb21wb25lbnQiLCJTdWJqZWN0IiwiSW5wdXQiLCJPdXRwdXQiLCJDb250ZW50Q2hpbGRyZW4iLCJNZGNBdXRvY29tcGxldGVMaXN0SXRlbSIsIk5nTW9kdWxlIiwiQ29tbW9uTW9kdWxlIiwiTWRjQXV0b2NvbXBsZXRlTGlzdEl0ZW1Nb2R1bGUiLCJNZGNFbGV2YXRpb25Nb2R1bGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtRQU9FO1NBQWlCOztvQkFMbEJBLGFBQVUsU0FBQzt3QkFDVixVQUFVLEVBQUUsTUFBTTtxQkFDbkI7Ozs7O3lDQUpEOzs7Ozs7O0FDQUE7UUFhRTtTQUFpQjs7OztRQUVqQiwrQ0FBUTs7O1lBQVI7YUFDQzs7b0JBZEZDLFlBQVMsU0FBQzt3QkFDVCxRQUFRLEVBQUUsMkJBQTJCO3dCQUNyQyxRQUFRLEVBQUUsNkRBSVQ7d0JBQ0QsTUFBTSxFQUFFLEVBQUU7cUJBQ1g7Ozs7MkNBVkQ7Ozs7Ozs7QUNBQTtRQThDRTtnQ0E5QjhDLElBQUlDLFlBQU8sRUFBRTtZQStCekQsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7WUFDaEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7U0FDbkI7OEJBNUJVLHdDQUFP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