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.

312 lines (302 loc) 27.6 kB
(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+IHtcclxuICAgICAgaWYgKHNob3dpbmcgPCB0aGlzLm1heFZpc2libGVJdGVtcyAmJiBpdGVtLmZpbHRlclN0cmluZy50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuX2ZpbHRlci50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgIGl0ZW0udmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgc2hvd2luZysrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGl0ZW0udmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIGl0ZW0uZm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWRjQXV0b2NvbXBsZXRlTGlzdENvbXBvbmVudCB9IGZyb20gJy4vbWRjLWF1dG9jb21wbGV0ZS1saXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1kY0F1dG9jb21wbGV0ZUxpc3QgfSBmcm9tICcuL2F1dG9jb21wbGV0ZS1saXN0L2F1dG9jb21wbGV0ZS1saXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1kY0F1dG9jb21wbGV0ZUxpc3RJdGVtTW9kdWxlIH0gZnJvbSAnbWRjLWF1dG9jb21wbGV0ZS1saXN0LWl0ZW0nO1xyXG5pbXBvcnQgeyBNZGNFbGV2YXRpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci1tZGMvd2ViJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTWRjQXV0b2NvbXBsZXRlTGlzdEl0ZW1Nb2R1bGUsXHJcbiAgICBNZGNFbGV2YXRpb25Nb2R1bGVcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW01kY0F1dG9jb21wbGV0ZUxpc3RDb21wb25lbnQsIE1kY0F1dG9jb21wbGV0ZUxpc3RdLFxyXG4gIGV4cG9ydHM6IFtNZGNBdXRvY29tcGxldGVMaXN0XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWRjQXV0b2NvbXBsZXRlTGlzdE1vZHVsZSB7IH1cclxuIl0sIm5hbWVzIjpbIkluamVjdGFibGUiLCJDb21wb25lbnQiLCJTdWJqZWN0IiwiSW5wdXQiLCJPdXRwdXQiLCJDb250ZW50Q2hpbGRyZW4iLCJNZGNBdXRvY29tcGxldGVMaXN0SXRlbSIsIk5nTW9kdWxlIiwiQ29tbW9uTW9kdWxlIiwiTWRjQXV0b2NvbXBsZXRlTGlzdEl0ZW1Nb2R1bGUiLCJNZGNFbGV2YXRpb25Nb2R1bGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtRQU9FO1NBQWlCOztvQkFMbEJBLGFBQVUsU0FBQzt3QkFDVixVQUFVLEVBQUUsTUFBTTtxQkFDbkI7Ozs7O3lDQUpEOzs7Ozs7O0FDQUE7UUFhRTtTQUFpQjs7OztRQUVqQiwrQ0FBUTs7O1lBQVI7YUFDQzs7b0JBZEZDLFlBQVMsU0FBQzt3QkFDVCxRQUFRLEVBQUUsMkJBQTJCO3dCQUNyQyxRQUFRLEVBQUUsNkRBSVQ7d0JBQ0QsTUFBTSxFQUFFLEVBQUU7cUJBQ1g7Ozs7MkNBVkQ7Ozs7Ozs7QUNBQTtRQThDRTtnQ0E5QjhDLElBQUlDLFlBQU8sRUFBRTtZQStCekQsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7WUFDaEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7U0FDbkI7OEJBNUJVLHdDQUFPOzs7O2dCQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7OzBCQUdKLENBQVU7Z0JBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQixJQUFJLENBQUMsRUFBRTtvQkFDTCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztpQkFDdkI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2lCQUN4Qjs7Ozs7OEJBR1EsdUNBQU07Ozs7Z0JBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDOzs7OzswQkFHSixDQUFTO2dCQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztnQkFDakIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Ozs7Ozs7O1FBU3hCLHNDQUFROzs7WUFBUjthQUNDOzs7O1FBRUQsbURBQXFCOzs7WUFBckI7Z0JBQUEsaUJBZUM7Z0JBZEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFDLElBQUk7b0JBQ2hELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTs7d0JBQzNDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQUMsU0FBUzs0QkFDbkMsS0FBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7eUJBQ25DLENBQUMsQ0FBQztxQkFDSjtvQkFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O3dCQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFDLFNBQVM7NEJBQ25DLEtBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzs0QkFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7eUJBQ3JCLENBQUMsQ0FBQztxQkFDSjtpQkFDRixDQUFDLENBQUM7YUFDSjs7OztRQUVNLDZDQUFlOzs7O2dCQUNwQixJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQUMsSUFBSTtvQkFDaEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7aUJBQ3RCLENBQUMsQ0FBQzs7Ozs7UUFHRSwyQ0FBYTs7Ozs7Z0JBQ2xCLElBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsVUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSyxPQUFBLElBQUksQ0FBQyxPQUFPLEdBQUEsQ0FBQyxDQUFDOztnQkFDNUYsSUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7Z0JBQ3JFLElBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsVUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSyxPQUFBLElBQUksQ0FBQyxPQUFPLEdBQUEsQ0FBQyxDQUFDO2dCQUU1RixJQUFJLFdBQVcsRUFBRTs7b0JBQ2YsSUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDOztvQkFDM0QsSUFBTSxlQUFlLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLGdCQUFnQixHQUFHLENBQUMsSUFBSSxZQUFZLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUNsSCxJQUFJLGVBQWUsRUFBRTt3QkFDbkIsV0FBVyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7d0JBQzVCLGVBQWUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUMvQixlQUFlLENBQUMsY0FBYyxFQUFFLENBQUM7cUJBQ2xDO2lCQUNGO3FCQUFNO29CQUNMLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQzNCLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3FCQUNoQztpQkFDRjs7Ozs7UUFHSSwrQ0FBaUI7Ozs7O2dCQUN0QixJQUFNLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLFVBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLElBQUssT0FBQSxJQUFJLENBQUMsT0FBTyxHQUFBLENBQUMsQ0FBQzs7Z0JBQzVGLElBQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7O2dCQUNyRSxJQUFNLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLFVBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLElBQUssT0FBQSxJQUFJLENBQUMsT0FBTyxHQUFBLENBQUMsQ0FBQztnQkFFNUYsSUFBSSxXQUFXLEVBQUU7O29CQUNmLElBQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQzs7b0JBQzNELElBQU0sbUJBQW1CLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksWUFBWSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztvQkFDL0YsSUFBSSxtQkFBbUIsRUFBRTt3QkFDdkIsV0FBVyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7d0JBQzVCLG1CQUFtQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7d0JBQ25DLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDO3FCQUN0QztpQkFDRjtxQkFBTTtvQkFDTCxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUMzQixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztxQkFDaEM7aUJBQ0Y7Ozs7O1FBR0ksNENBQWM7Ozs7Z0JBQ25CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzs7Z0JBQ3ZCLElBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsVUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSyxPQUFBLElBQUksQ0FBQyxPQUFPLEdBQUEsQ0FBQyxDQUFDO2dCQUM1RixJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUMzQixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztpQkFDaEM7Ozs7O1FBR0ksK0NBQWlCOzs7OztnQkFDdEIsSUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxVQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFLLE9BQUEsSUFBSSxDQUFDLE9BQU8sR0FBQSxDQUFDLENBQUM7O2dCQUM1RixJQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUVyRSxJQUFJLFdBQVcsRUFBRTtvQkFDZixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQzNDOzs7OztRQUdLLHlDQUFXOzs7Ozs7Z0JBQ2pCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxVQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSTtvQkFDbkQsSUFBSSxPQUFPLEdBQUcsS0FBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7d0JBQzFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUNwQixPQUFPLEVBQUUsQ0FBQztxQkFDWDt5QkFBTTt3QkFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzt3QkFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7cUJBQ3RCO2lCQUNGLENBQUMsQ0FBQzs7O29CQTdJTkQsWUFBUyxTQUFDO3dCQUNULFFBQVEsRUFBRSx1QkFBdUI7d0JBQ2pDLFFBQVEsRUFBRSwwRkFHWDt3QkFDQyxNQUFNLEVBQUUsQ0FBQyxtSUFBbUksQ0FBQztxQkFDOUk7Ozs7O3NDQUlFRSxRQUFLO21DQUNMQyxTQUFNOzRDQUVOQyxrQkFBZSxTQUFDQywrQ0FBdUI7O2tDQWxCMUM7Ozs7Ozs7QUNBQTs7OztvQkFPQ0MsV0FBUSxTQUFDO3dCQUNSLE9BQU8sRUFBRTs0QkFDUEMsbUJBQVk7NEJBQ1pDLHFEQUE2Qjs0QkFDN0JDLHNCQUFrQjt5QkFDbkI7d0JBQ0QsWUFBWSxFQUFFLENBQUMsNEJBQTRCLEVBQUUsbUJBQW1CLENBQUM7d0JBQ2pFLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO3FCQUMvQjs7d0NBZkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9