UNPKG

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.

309 lines (301 loc) 25.2 kB
import { Injectable, Component, NgModule, ContentChildren, Input, Output, defineInjectable } from '@angular/core'; import { MdcAutocompleteListItem, MdcAutocompleteListItemModule } from 'mdc-autocomplete-list-item'; import { Subject } from 'rxjs'; import { CommonModule } from '@angular/common'; import { MdcElevationModule } from '@angular-mdc/web'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var MdcAutocompleteListService = /** @class */ (function () { function MdcAutocompleteListService() { } MdcAutocompleteListService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] }, ]; /** @nocollapse */ MdcAutocompleteListService.ctorParameters = function () { return []; }; /** @nocollapse */ MdcAutocompleteListService.ngInjectableDef = 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 = /** @class */ (function () { function MdcAutocompleteListComponent() { } /** * @return {?} */ MdcAutocompleteListComponent.prototype.ngOnInit = /** * @return {?} */ function () { }; MdcAutocompleteListComponent.decorators = [ { type: 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 = /** @class */ (function () { function MdcAutocompleteList() { this.itemSelected = new 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: 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: Input }], itemSelected: [{ type: Output }], autocompleteListItems: [{ type: ContentChildren, args: [MdcAutocompleteListItem,] }] }; return MdcAutocompleteList; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var MdcAutocompleteListModule = /** @class */ (function () { function MdcAutocompleteListModule() { } MdcAutocompleteListModule.decorators = [ { type: NgModule, args: [{ imports: [ CommonModule, MdcAutocompleteListItemModule, 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 */ export { MdcAutocompleteListService, MdcAutocompleteListModule, MdcAutocompleteList, MdcAutocompleteListComponent as ɵa }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRjLWF1dG9jb21wbGV0ZS1saXN0LmpzLm1hcCIsInNvdXJjZXMiOlsibmc6Ly9tZGMtYXV0b2NvbXBsZXRlLWxpc3QvbGliL21kYy1hdXRvY29tcGxldGUtbGlzdC5zZXJ2aWNlLnRzIiwibmc6Ly9tZGMtYXV0b2NvbXBsZXRlLWxpc3QvbGliL21kYy1hdXRvY29tcGxldGUtbGlzdC5jb21wb25lbnQudHMiLCJuZzovL21kYy1hdXRvY29tcGxldGUtbGlzdC9saWIvYXV0b2NvbXBsZXRlLWxpc3QvYXV0b2NvbXBsZXRlLWxpc3QuY29tcG9uZW50LnRzIiwibmc6Ly9tZGMtYXV0b2NvbXBsZXRlLWxpc3QvbGliL21kYy1hdXRvY29tcGxldGUtbGlzdC5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTWRjQXV0b2NvbXBsZXRlTGlzdFNlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ21kYy1tZGMtYXV0b2NvbXBsZXRlLWxpc3QnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8cD5cclxuICAgICAgbWRjLWF1dG9jb21wbGV0ZS1saXN0IHdvcmtzIVxyXG4gICAgPC9wPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWRjQXV0b2NvbXBsZXRlTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gIH1cclxuXHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIENvbnRlbnRDaGlsZHJlbiwgUXVlcnlMaXN0LCBJbnB1dCwgT3V0cHV0LCBBZnRlckNvbnRlbnRDaGVja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1kY0F1dG9jb21wbGV0ZUxpc3RJdGVtIH0gZnJvbSAnbWRjLWF1dG9jb21wbGV0ZS1saXN0LWl0ZW0nO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ21kYy1hdXRvY29tcGxldGUtbGlzdCcsXHJcbiAgdGVtcGxhdGU6IGA8dWwgKm5nSWY9XCJ2aXNpYmxlXCIgY2xhc3M9XCJtZGMtZWxldmF0aW9uLS16MlwiPlxyXG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuPC91bD5cclxuYCxcclxuICBzdHlsZXM6IFtgdWx7cG9zaXRpb246YWJzb2x1dGU7bWluLXdpZHRoOjIwMHB4O21heC1oZWlnaHQ6NDAwcHg7cGFkZGluZzowO21hcmdpbjowO2JhY2tncm91bmQtY29sb3I6I2ZmZjtvdmVyZmxvdy15OnNjcm9sbDtsaXN0LXN0eWxlOm5vbmV9YF1cclxufSlcclxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1jbGFzcy1zdWZmaXhcclxuZXhwb3J0IGNsYXNzIE1kY0F1dG9jb21wbGV0ZUxpc3QgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQge1xyXG5cclxuICBASW5wdXQoKSBtYXhWaXNpYmxlSXRlbXM6IG51bWJlcjtcclxuICBAT3V0cHV0KCkgcHVibGljIGl0ZW1TZWxlY3RlZDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihNZGNBdXRvY29tcGxldGVMaXN0SXRlbSkgYXV0b2NvbXBsZXRlTGlzdEl0ZW1zOiAgUXVlcnlMaXN0PE1kY0F1dG9jb21wbGV0ZUxpc3RJdGVtPjtcclxuICBfdmlzaWJsZTogYm9vbGVhbjtcclxuICBfZmlsdGVyOiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCB2aXNpYmxlKHY6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3Zpc2libGUgPSB2O1xyXG4gICAgaWYgKHYpIHtcclxuICAgICAgdGhpcy5maWx0ZXJJdGVtcygpO1xyXG4gICAgICB0aGlzLmZvY3VzRmlyc3RJdGVtKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVuZm9jdXNBbGxJdGVtcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBmaWx0ZXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9maWx0ZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGZpbHRlcihmOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2ZpbHRlciA9IGY7XHJcbiAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XHJcbiAgICB0aGlzLmZvY3VzRmlyc3RJdGVtKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMubWF4VmlzaWJsZUl0ZW1zID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xyXG4gICAgdGhpcy5fdmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fZmlsdGVyID0gJyc7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcclxuICAgIHRoaXMuYXV0b2NvbXBsZXRlTGlzdEl0ZW1zLnRvQXJyYXkoKS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLml0ZW1DbGlja2VkLm9ic2VydmVycy5sZW5ndGggPT09IDApIHsgLy8gT25seSBhbGxvdyBvbmUgc3Vic2NyaXB0aW9uXHJcbiAgICAgICAgaXRlbS5pdGVtQ2xpY2tlZC5zdWJzY3JpYmUoKGl0ZW1WYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWQubmV4dChpdGVtVmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXRlbS5pdGVtSG92ZXJlZC5vYnNlcnZlcnMubGVuZ3RoID09PSAwKSB7IC8vIE9ubHkgYWxsb3cgb25lIHN1YnNjcmlwdGlvblxyXG4gICAgICAgIGl0ZW0uaXRlbUhvdmVyZWQuc3Vic2NyaWJlKChpdGVtVmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMudW5mb2N1c0FsbEl0ZW1zKCk7XHJcbiAgICAgICAgICBpdGVtLmZvY3VzZWQgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1bmZvY3VzQWxsSXRlbXMoKSB7XHJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUxpc3RJdGVtcy50b0FycmF5KCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmZvY3VzZWQgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZvY3VzTmV4dEl0ZW0oKSB7XHJcbiAgICBjb25zdCBmb2N1c2VkSXRlbXMgPSB0aGlzLmF1dG9jb21wbGV0ZUxpc3RJdGVtcy5maWx0ZXIoKGl0ZW0sIGluZGV4LCBsaXN0KSA9PiBpdGVtLmZvY3VzZWQpO1xyXG4gICAgY29uc3QgZm9jdXNlZEl0ZW0gPSBmb2N1c2VkSXRlbXMubGVuZ3RoID4gMCA/IGZvY3VzZWRJdGVtc1swXSA6IG51bGw7XHJcbiAgICBjb25zdCB2aXNpYmxlSXRlbXMgPSB0aGlzLmF1dG9jb21wbGV0ZUxpc3RJdGVtcy5maWx0ZXIoKGl0ZW0sIGluZGV4LCBsaXN0KSA9PiBpdGVtLnZpc2libGUpO1xyXG5cclxuICAgIGlmIChmb2N1c2VkSXRlbSkge1xyXG4gICAgICBjb25zdCBmb2N1c2VkSXRlbUluZGV4ID0gdmlzaWJsZUl0ZW1zLmluZGV4T2YoZm9jdXNlZEl0ZW0pO1xyXG4gICAgICBjb25zdCBuZXh0Rm9jdXNlZEl0ZW0gPSAodmlzaWJsZUl0ZW1zLmxlbmd0aCA+PSBmb2N1c2VkSXRlbUluZGV4ICsgMSkgPyB2aXNpYmxlSXRlbXNbZm9jdXNlZEl0ZW1JbmRleCArIDFdIDogbnVsbDtcclxuICAgICAgaWYgKG5leHRGb2N1c2VkSXRlbSkge1xyXG4gICAgICAgIGZvY3VzZWRJdGVtLmZvY3VzZWQgPSBmYWxzZTtcclxuICAgICAgICBuZXh0Rm9jdXNlZEl0ZW0uZm9jdXNlZCA9IHRydWU7XHJcbiAgICAgICAgbmV4dEZvY3VzZWRJdGVtLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh2aXNpYmxlSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHZpc2libGVJdGVtc1swXS5mb2N1c2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZvY3VzUHJldmlvdXNJdGVtKCkge1xyXG4gICAgY29uc3QgZm9jdXNlZEl0ZW1zID0gdGhpcy5hdXRvY29tcGxldGVMaXN0SXRlbXMuZmlsdGVyKChpdGVtLCBpbmRleCwgbGlzdCkgPT4gaXRlbS5mb2N1c2VkKTtcclxuICAgIGNvbnN0IGZvY3VzZWRJdGVtID0gZm9jdXNlZEl0ZW1zLmxlbmd0aCA+IDAgPyBmb2N1c2VkSXRlbXNbMF0gOiBudWxsO1xyXG4gICAgY29uc3QgdmlzaWJsZUl0ZW1zID0gdGhpcy5hdXRvY29tcGxldGVMaXN0SXRlbXMuZmlsdGVyKChpdGVtLCBpbmRleCwgbGlzdCkgPT4gaXRlbS52aXNpYmxlKTtcclxuXHJcbiAgICBpZiAoZm9jdXNlZEl0ZW0pIHtcclxuICAgICAgY29uc3QgZm9jdXNlZEl0ZW1JbmRleCA9IHZpc2libGVJdGVtcy5pbmRleE9mKGZvY3VzZWRJdGVtKTtcclxuICAgICAgY29uc3QgcHJldmlvdXNGb2N1c2VkSXRlbSA9IChmb2N1c2VkSXRlbUluZGV4ID4gMCkgPyB2aXNpYmxlSXRlbXNbZm9jdXNlZEl0ZW1JbmRleCAtIDFdIDogbnVsbDtcclxuICAgICAgaWYgKHByZXZpb3VzRm9jdXNlZEl0ZW0pIHtcclxuICAgICAgICBmb2N1c2VkSXRlbS5mb2N1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgcHJldmlvdXNGb2N1c2VkSXRlbS5mb2N1c2VkID0gdHJ1ZTtcclxuICAgICAgICBwcmV2aW91c0ZvY3VzZWRJdGVtLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh2aXNpYmxlSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHZpc2libGVJdGVtc1swXS5mb2N1c2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZvY3VzRmlyc3RJdGVtKCkge1xyXG4gICAgdGhpcy51bmZvY3VzQWxsSXRlbXMoKTtcclxuICAgIGNvbnN0IHZpc2libGVJdGVtcyA9IHRoaXMuYXV0b2NvbXBsZXRlTGlzdEl0ZW1zLmZpbHRlcigoaXRlbSwgaW5kZXgsIGxpc3QpID0+IGl0ZW0udmlzaWJsZSk7XHJcbiAgICBpZiAodmlzaWJsZUl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdmlzaWJsZUl0ZW1zWzBdLmZvY3VzZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdEZvY3VzZWRJdGVtKCkge1xyXG4gICAgY29uc3QgZm9jdXNlZEl0ZW1zID0gdGhpcy5hdXRvY29tcGxldGVMaXN0SXRlbXMuZmlsdGVyKChpdGVtLCBpbmRleCwgbGlzdCkgPT4gaXRlbS5mb2N1c2VkKTtcclxuICAgIGNvbnN0IGZvY3VzZWRJdGVtID0gZm9jdXNlZEl0ZW1zLmxlbmd0aCA+IDAgPyBmb2N1c2VkSXRlbXNbMF0gOiBudWxsO1xyXG5cclxuICAgIGlmIChmb2N1c2VkSXRlbSkge1xyXG4gICAgICB0aGlzLml0ZW1TZWxlY3RlZC5uZXh0KGZvY3VzZWRJdGVtLnZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlsdGVySXRlbXMoKSB7XHJcbiAgICBsZXQgc2hvd2luZyA9IDA7XHJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUxpc3RJdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCwgbGlzdCkgPT4ge1xyXG4gICAgICBpZiAoc2hvd2luZyA8IHRoaXMubWF4VmlzaWJsZUl0ZW1zICYmIGl0ZW0uZmlsdGVyU3RyaW5nLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXModGhpcy5fZmlsdGVyLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgaXRlbS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICBzaG93aW5nKys7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaXRlbS52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgaXRlbS5mb2N1c2VkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNZGNBdXRvY29tcGxldGVMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9tZGMtYXV0b2NvbXBsZXRlLWxpc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWRjQXV0b2NvbXBsZXRlTGlzdCB9IGZyb20gJy4vYXV0b2NvbXBsZXRlLWxpc3QvYXV0b2NvbXBsZXRlLWxpc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWRjQXV0b2NvbXBsZXRlTGlzdEl0ZW1Nb2R1bGUgfSBmcm9tICdtZGMtYXV0b2NvbXBsZXRlLWxpc3QtaXRlbSc7XHJcbmltcG9ydCB7IE1kY0VsZXZhdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyLW1kYy93ZWInO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNZGNBdXRvY29tcGxldGVMaXN0SXRlbU1vZHVsZSxcclxuICAgIE1kY0VsZXZhdGlvbk1vZHVsZVxyXG4gIF0sXHJcbiAgZGVjbGFyYXRpb25zOiBbTWRjQXV0b2NvbXBsZXRlTGlzdENvbXBvbmVudCwgTWRjQXV0b2NvbXBsZXRlTGlzdF0sXHJcbiAgZXhwb3J0czogW01kY0F1dG9jb21wbGV0ZUxpc3RdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZGNBdXRvY29tcGxldGVMaXN0TW9kdWxlIHsgfVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0lBT0U7S0FBaUI7O2dCQUxsQixVQUFVLFNBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzs7OztxQ0FKRDs7Ozs7OztBQ0FBO0lBYUU7S0FBaUI7Ozs7SUFFakIsK0NBQVE7OztJQUFSO0tBQ0M7O2dCQWRGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxRQUFRLEVBQUUsNkRBSVQ7b0JBQ0QsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7Ozs7dUNBVkQ7Ozs7Ozs7QUNBQTtJQThDRTs0QkE5QjhDLElBQUksT0FBTyxFQUFFO1FBK0J6RCxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztLQUNuQjswQkE1QlUsd0NBQU87Ozs7O1lBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7O2tCQUdKLENBQVU7WUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLEVBQUU7Z0JBQ0wsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdkI7aUJB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