UNPKG

angular-admin-lte-teliqo

Version:
445 lines (444 loc) 33.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, EventEmitter, Input, NgZone, Output, QueryList, Renderer2, TemplateRef, ViewChild, ViewChildren } from '@angular/core'; import { TabToggleDirective } from './tabs.directive'; import { removeListeners, removeSubscriptions } from '../helpers'; var TabHeaderComponent = /** @class */ (function () { function TabHeaderComponent() { } TabHeaderComponent.decorators = [ { type: Component, args: [{ selector: 'mk-tab-header', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>', changeDetection: ChangeDetectionStrategy.OnPush },] }, ]; /** @nocollapse */ TabHeaderComponent.propDecorators = { "templateRef": [{ type: ViewChild, args: ['templateRef',] },], }; return TabHeaderComponent; }()); export { TabHeaderComponent }; function TabHeaderComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ TabHeaderComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ TabHeaderComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ TabHeaderComponent.propDecorators; /** @type {?} */ TabHeaderComponent.prototype.templateRef; } var TabContentComponent = /** @class */ (function () { function TabContentComponent() { } TabContentComponent.decorators = [ { type: Component, args: [{ selector: 'mk-tab-content', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>', changeDetection: ChangeDetectionStrategy.OnPush },] }, ]; /** @nocollapse */ TabContentComponent.propDecorators = { "templateRef": [{ type: ViewChild, args: ['templateRef',] },], }; return TabContentComponent; }()); export { TabContentComponent }; function TabContentComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ TabContentComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ TabContentComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ TabContentComponent.propDecorators; /** @type {?} */ TabContentComponent.prototype.templateRef; } var TabComponent = /** @class */ (function () { function TabComponent() { this.isActive = false; } /** * @method ngOnInit */ /** * \@method ngOnInit * @return {?} */ TabComponent.prototype.ngOnInit = /** * \@method ngOnInit * @return {?} */ function () { if (this.tabContentComponent) { this.contentTemplateRef = this.tabContentComponent.templateRef; } else { this.contentTemplateRef = this.templateRef; } }; TabComponent.decorators = [ { type: Component, args: [{ selector: 'mk-tab', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>', changeDetection: ChangeDetectionStrategy.OnPush },] }, ]; /** @nocollapse */ TabComponent.propDecorators = { "header": [{ type: Input },], "isDisabled": [{ type: Input },], "tabColor": [{ type: Input },], "templateRef": [{ type: ViewChild, args: ['templateRef',] },], "tabHeaderComponent": [{ type: ContentChild, args: [TabHeaderComponent,] },], "tabContentComponent": [{ type: ContentChild, args: [TabContentComponent,] },], }; return TabComponent; }()); export { TabComponent }; function TabComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ TabComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ TabComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ TabComponent.propDecorators; /** @type {?} */ TabComponent.prototype.index; /** @type {?} */ TabComponent.prototype.isActive; /** @type {?} */ TabComponent.prototype.contentTemplateRef; /** @type {?} */ TabComponent.prototype.header; /** @type {?} */ TabComponent.prototype.isDisabled; /** @type {?} */ TabComponent.prototype.tabColor; /** @type {?} */ TabComponent.prototype.templateRef; /** @type {?} */ TabComponent.prototype.tabHeaderComponent; /** @type {?} */ TabComponent.prototype.tabContentComponent; } var TabsHeaderComponent = /** @class */ (function () { function TabsHeaderComponent() { } TabsHeaderComponent.decorators = [ { type: Component, args: [{ selector: 'mk-tabs-header', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>', changeDetection: ChangeDetectionStrategy.OnPush },] }, ]; /** @nocollapse */ TabsHeaderComponent.propDecorators = { "templateRef": [{ type: ViewChild, args: ['templateRef',] },], }; return TabsHeaderComponent; }()); export { TabsHeaderComponent }; function TabsHeaderComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ TabsHeaderComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ TabsHeaderComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ TabsHeaderComponent.propDecorators; /** @type {?} */ TabsHeaderComponent.prototype.templateRef; } var TabsComponent = /** @class */ (function () { /** * @method constructor * @param changeDetectorRef [description] * @param ngZone [description] * @param renderer2 [description] */ function TabsComponent(changeDetectorRef, ngZone, renderer2) { this.changeDetectorRef = changeDetectorRef; this.ngZone = ngZone; this.renderer2 = renderer2; this.listeners = []; this.subscriptions = []; this.headerStyleClass = 'header pull-left'; this.navStyleClass = 'nav nav-tabs'; this.contentStyleClass = 'tab-content'; this.styleClass = 'nav-tabs-custom'; this.onClose = new EventEmitter(); this.onOpen = new EventEmitter(); } Object.defineProperty(TabsComponent.prototype, "activeTabIndex", { set: /** * @param {?} index * @return {?} */ function (index) { this.activatedTabIndex = index; this.changeDetectorRef.detectChanges(); }, enumerable: true, configurable: true }); /** * @method ngAfterViewInit */ /** * \@method ngAfterViewInit * @return {?} */ TabsComponent.prototype.ngAfterContentInit = /** * \@method ngAfterViewInit * @return {?} */ function () { var _this = this; // Set tab index on load. this.setTabIndex(); // Update tab index if tabs is updated. this.subscriptions.push(this.tabs.changes.subscribe(function () { _this.setTabIndex(); })); // Open tab on load. this.openTabIndex(); }; /** * @method ngAfterViewInit */ /** * \@method ngAfterViewInit * @return {?} */ TabsComponent.prototype.ngAfterViewInit = /** * \@method ngAfterViewInit * @return {?} */ function () { var _this = this; // Set tab toggles on load. this.setTabsToggle(); // Update tab toggles if tabs is updated. this.subscriptions.push(this.tabToggleDirectives.changes.subscribe(function () { _this.setTabsToggle(); })); }; /** * @method ngOnChanges * @param changes [description] */ /** * \@method ngOnChanges * @param {?} changes [description] * @return {?} */ TabsComponent.prototype.ngOnChanges = /** * \@method ngOnChanges * @param {?} changes [description] * @return {?} */ function (changes) { if (changes["activeTabIndex"]) { this.openTabIndex(); } }; /** * @method ngOnDestroy */ /** * \@method ngOnDestroy * @return {?} */ TabsComponent.prototype.ngOnDestroy = /** * \@method ngOnDestroy * @return {?} */ function () { removeListeners(this.listeners); removeSubscriptions(this.subscriptions); }; /** * [toggleTab description] * \@method toggleTab * @return {?} */ TabsComponent.prototype.openTabIndex = /** * [toggleTab description] * \@method toggleTab * @return {?} */ function () { var _this = this; if (this.tabs) { this.tabs.forEach(function (tab) { if (_this.activatedTabIndex === tab.index || (_this.activatedTabIndex === undefined && tab.index === 0)) { tab.isActive = true; _this.onOpen.emit({ index: tab.index }); _this.changeDetectorRef.detectChanges(); } else if (tab.isActive) { tab.isActive = false; _this.onClose.emit({ index: tab.index }); _this.changeDetectorRef.detectChanges(); } }); } }; /** * [openTab description] * \@method openTab * @param {?} event [description] * @param {?} tabToOpen [description] * @return {?} */ TabsComponent.prototype.openTab = /** * [openTab description] * \@method openTab * @param {?} event [description] * @param {?} tabToOpen [description] * @return {?} */ function (event, tabToOpen) { var _this = this; event.preventDefault(); tabToOpen.isActive = true; this.onOpen.emit({ event: event, index: tabToOpen.index }); this.tabs.forEach(function (tab) { if (tab.isActive && tabToOpen !== tab) { tab.isActive = false; _this.onClose.emit({ event: event, index: tab.index }); } }); }; /** * [setTabIndex description] * \@method setTabIndex * @return {?} */ TabsComponent.prototype.setTabIndex = /** * [setTabIndex description] * \@method setTabIndex * @return {?} */ function () { this.tabs.forEach(function (tab, index) { tab.index = index; }); this.changeDetectorRef.detectChanges(); }; /** * [setTabsToggle description] * \@method setTabsToggle * @return {?} */ TabsComponent.prototype.setTabsToggle = /** * [setTabsToggle description] * \@method setTabsToggle * @return {?} */ function () { var _this = this; this.listeners = removeListeners(this.listeners); this.ngZone.runOutsideAngular(function () { _this.tabToggleDirectives.forEach(function (tabToggle) { _this.listeners.push(_this.renderer2.listen(tabToggle.elementRef.nativeElement, 'click', function (event) { _this.openTab(event, tabToggle.tabComponent); _this.changeDetectorRef.detectChanges(); })); }); }); }; TabsComponent.decorators = [ { type: Component, args: [{ selector: 'mk-tabs', template: "<div [ngClass]=\"styleClass\">\n <ul [ngClass]=\"navStyleClass\" [class.pull-right]=\"header || tabsHeaderComponent\">\n <li *ngFor=\"let tab of tabs\" [class.active]=\"tab.isActive\" [mkColor]=\"tab.tabColor || tabsColor\" mkColorProperty=\"border-top-color\">\n <a *ngIf=\"!tab.isDisabled\" [mkTabToggle]=\"tab\" href=\"#\">\n {{tab.header}}\n <ng-template *ngIf=\"!tab.header\" [ngTemplateOutlet]=\"tab.tabHeaderComponent?.templateRef\"></ng-template>\n </a>\n <ng-template [ngIf]=\"tab.isDisabled\">\n {{tab.header}}\n <ng-template *ngIf=\"!tab.header\" [ngTemplateOutlet]=\"tab.tabHeaderComponent.templateRef\"></ng-template>\n </ng-template>\n </li>\n <li *ngIf=\"tabsHeaderComponent || header\" [ngClass]=\"headerStyleClass\">\n {{header}}\n <ng-template *ngIf=\"!header\" [ngTemplateOutlet]=\"tabsHeaderComponent.templateRef\"></ng-template>\n </li>\n </ul>\n <div [ngClass]=\"contentStyleClass\">\n <div *ngFor=\"let tab of tabs\" class=\"tab-pane\" [class.active]=\"tab.isActive\">\n <ng-template [ngTemplateOutlet]=\"tab.contentTemplateRef\"></ng-template>\n </div>\n </div>\n</div>\n", styles: [".nav-tabs-custom>.nav-tabs>li{border-top-width:0}.nav-tabs-custom>.nav-tabs>li.active{border-top-width:3px}"], changeDetection: ChangeDetectionStrategy.OnPush },] }, ]; /** @nocollapse */ TabsComponent.ctorParameters = function () { return [ { type: ChangeDetectorRef, }, { type: NgZone, }, { type: Renderer2, }, ]; }; TabsComponent.propDecorators = { "activeTabIndex": [{ type: Input },], "header": [{ type: Input },], "headerStyleClass": [{ type: Input },], "navStyleClass": [{ type: Input },], "contentStyleClass": [{ type: Input },], "styleClass": [{ type: Input },], "tabsColor": [{ type: Input },], "onClose": [{ type: Output },], "onOpen": [{ type: Output },], "tabsHeaderComponent": [{ type: ContentChild, args: [TabsHeaderComponent,] },], "tabs": [{ type: ContentChildren, args: [TabComponent,] },], "tabToggleDirectives": [{ type: ViewChildren, args: [TabToggleDirective,] },], }; return TabsComponent; }()); export { TabsComponent }; function TabsComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ TabsComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ TabsComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ TabsComponent.propDecorators; /** @type {?} */ TabsComponent.prototype.activatedTabIndex; /** @type {?} */ TabsComponent.prototype.listeners; /** @type {?} */ TabsComponent.prototype.subscriptions; /** @type {?} */ TabsComponent.prototype.header; /** @type {?} */ TabsComponent.prototype.headerStyleClass; /** @type {?} */ TabsComponent.prototype.navStyleClass; /** @type {?} */ TabsComponent.prototype.contentStyleClass; /** @type {?} */ TabsComponent.prototype.styleClass; /** @type {?} */ TabsComponent.prototype.tabsColor; /** @type {?} */ TabsComponent.prototype.onClose; /** @type {?} */ TabsComponent.prototype.onOpen; /** @type {?} */ TabsComponent.prototype.tabsHeaderComponent; /** @type {?} */ TabsComponent.prototype.tabs; /** @type {?} */ TabsComponent.prototype.tabToggleDirectives; /** @type {?} */ TabsComponent.prototype.changeDetectorRef; /** @type {?} */ TabsComponent.prototype.ngZone; /** @type {?} */ TabsComponent.prototype.renderer2; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLWFkbWluLWx0ZS10ZWxpcW8vIiwic291cmNlcyI6WyJsaWIvdGFicy90YWJzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBSU4sTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQzs7Ozs7Z0JBT2pFLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsUUFBUSxFQUFFLG1FQUFtRTtvQkFDN0UsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzs7O2dDQUVFLFNBQVMsU0FBQyxhQUFhOzs2QkF0QzFCOztTQXFDYSxrQkFBa0I7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQkFROUIsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFFBQVEsRUFBRSxtRUFBbUU7b0JBQzdFLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs7OztnQ0FFRSxTQUFTLFNBQUMsYUFBYTs7OEJBbkQxQjs7U0FrRGEsbUJBQW1COzs7Ozs7Ozs7Ozs7Ozs7O3dCQWNaLEtBQUs7O0lBYXZCOztPQUVHOzs7OztJQUNILCtCQUFROzs7O0lBQVI7UUFDRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENB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S0FBSztzQ0FDTCxLQUFLOytCQUNMLEtBQUs7OEJBQ0wsS0FBSzs0QkFFTCxNQUFNOzJCQUNOLE1BQU07d0NBRU4sWUFBWSxTQUFDLG1CQUFtQjt5QkFFaEMsZUFBZSxTQUFDLFlBQVk7d0NBRTVCLFlBQVksU0FBQyxrQkFBa0I7O3dCQTVKbEM7O1NBcUlhLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFRhYlRvZ2dsZURpcmVjdGl2ZSB9IGZyb20gJy4vdGFicy5kaXJlY3RpdmUnO1xuXG5pbXBvcnQgeyByZW1vdmVMaXN0ZW5lcnMsIHJlbW92ZVN1YnNjcmlwdGlvbnMgfSBmcm9tICcuLi9oZWxwZXJzJztcblxuLy8gQFRPRE8gVmVydGljYWwgdGFic1xuXG4vKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWstdGFiLWhlYWRlcicsXG4gIHRlbXBsYXRlOiAnPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVJlZj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9uZy10ZW1wbGF0ZT4nLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBUYWJIZWFkZXJDb21wb25lbnQge1xuICBAVmlld0NoaWxkKCd0ZW1wbGF0ZVJlZicpIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pjtcbn1cblxuXG4vKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWstdGFiLWNvbnRlbnQnLFxuICB0ZW1wbGF0ZTogJzxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVSZWY+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvbmctdGVtcGxhdGU+JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVGFiQ29udGVudENvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUmVmJykgcHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xufVxuXG4vKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWstdGFiJyxcbiAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFRhYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBpbmRleDogbnVtYmVyO1xuICBwdWJsaWMgaXNBY3RpdmUgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnRlbnRUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKSBwdWJsaWMgdGFiQ29sb3I6IHN0cmluZztcblxuICBAVmlld0NoaWxkKCd0ZW1wbGF0ZVJlZicpIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKFRhYkhlYWRlckNvbXBvbmVudCkgcHVibGljIHRhYkhlYWRlckNvbXBvbmVudDogVGFiSGVhZGVyQ29tcG9uZW50O1xuICBAQ29udGVudENoaWxkKFRhYkNvbnRlbnRDb21wb25lbnQpIHB1YmxpYyB0YWJDb250ZW50Q29tcG9uZW50OiBUYWJDb250ZW50Q29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBAbWV0aG9kIG5nT25Jbml0XG4gICAqL1xuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy50YWJDb250ZW50Q29tcG9uZW50KSB7XG4gICAgICB0aGlzLmNvbnRlbnRUZW1wbGF0ZVJlZiA9IHRoaXMudGFiQ29udGVudENvbXBvbmVudC50ZW1wbGF0ZVJlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGVSZWYgPSB0aGlzLnRlbXBsYXRlUmVmO1xuICAgIH1cbiAgfVxufVxuXG4vKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWstdGFicy1oZWFkZXInLFxuICB0ZW1wbGF0ZTogJzxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVSZWY+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvbmctdGVtcGxhdGU+JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVGFic0hlYWRlckNvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUmVmJykgcHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xufVxuXG4vKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWstdGFicycsXG4gIHRlbXBsYXRlOiBgPGRpdiBbbmdDbGFzc109XCJzdHlsZUNsYXNzXCI+XG4gIDx1bCBbbmdDbGFzc109XCJuYXZTdHlsZUNsYXNzXCIgW2NsYXNzLnB1bGwtcmlnaHRdPVwiaGVhZGVyIHx8IHRhYnNIZWFkZXJDb21wb25lbnRcIj5cbiAgICA8bGkgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzXCIgW2NsYXNzLmFjdGl2ZV09XCJ0YWIuaXNBY3RpdmVcIiBbbWtDb2xvcl09XCJ0YWIudGFiQ29sb3IgfHwgdGFic0NvbG9yXCIgbWtDb2xvclByb3BlcnR5PVwiYm9yZGVyLXRvcC1jb2xvclwiPlxuICAgICAgPGEgKm5nSWY9XCIhdGFiLmlzRGlzYWJsZWRcIiBbbWtUYWJUb2dnbGVdPVwidGFiXCIgaHJlZj1cIiNcIj5cbiAgICAgICAge3t0YWIuaGVhZGVyfX1cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiIXRhYi5oZWFkZXJcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWIudGFiSGVhZGVyQ29tcG9uZW50Py50ZW1wbGF0ZVJlZlwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L2E+XG4gICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwidGFiLmlzRGlzYWJsZWRcIj5cbiAgICAgICAge3t0YWIuaGVhZGVyfX1cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiIXRhYi5oZWFkZXJcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWIudGFiSGVhZGVyQ29tcG9uZW50LnRlbXBsYXRlUmVmXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9saT5cbiAgICA8bGkgKm5nSWY9XCJ0YWJzSGVhZGVyQ29tcG9uZW50IHx8IGhlYWRlclwiIFtuZ0NsYXNzXT1cImhlYWRlclN0eWxlQ2xhc3NcIj5cbiAgICAgIHt7aGVhZGVyfX1cbiAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIiFoZWFkZXJcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWJzSGVhZGVyQ29tcG9uZW50LnRlbXBsYXRlUmVmXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2xpPlxuICA8L3VsPlxuICA8ZGl2IFtuZ0NsYXNzXT1cImNvbnRlbnRTdHlsZUNsYXNzXCI+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIiBjbGFzcz1cInRhYi1wYW5lXCIgW2NsYXNzLmFjdGl2ZV09XCJ0YWIuaXNBY3RpdmVcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWIuY29udGVudFRlbXBsYXRlUmVmXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbmAsXG4gIHN0eWxlczogW2AubmF2LXRhYnMtY3VzdG9tPi5uYXYtdGFicz5saXtib3JkZXItdG9wLXdpZHRoOjB9Lm5hdi10YWJzLWN1c3RvbT4ubmF2LXRhYnM+bGkuYWN0aXZle2JvcmRlci10b3Atd2lkdGg6M3B4fWBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBUYWJzQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGFjdGl2YXRlZFRhYkluZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgbGlzdGVuZXJzID0gW107XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IFtdO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgYWN0aXZlVGFiSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuYWN0aXZhdGVkVGFiSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBoZWFkZXJTdHlsZUNsYXNzID0gJ2hlYWRlciBwdWxsLWxlZnQnO1xuICBASW5wdXQoKSBwdWJsaWMgbmF2U3R5bGVDbGFzcyA9ICduYXYgbmF2LXRhYnMnO1xuICBASW5wdXQoKSBwdWJsaWMgY29udGVudFN0eWxlQ2xhc3MgPSAndGFiLWNvbnRlbnQnO1xuICBASW5wdXQoKSBwdWJsaWMgc3R5bGVDbGFzcyA9ICduYXYtdGFicy1jdXN0b20nO1xuICBASW5wdXQoKSBwdWJsaWMgdGFic0NvbG9yOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBvbkNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9uT3BlbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAQ29udGVudENoaWxkKFRhYnNIZWFkZXJDb21wb25lbnQpIHB1YmxpYyB0YWJzSGVhZGVyQ29tcG9uZW50OiBUYWJzSGVhZGVyQ29tcG9uZW50O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oVGFiQ29tcG9uZW50KSBwdWJsaWMgdGFiczogUXVlcnlMaXN0PFRhYkNvbXBvbmVudD47XG5cbiAgQFZpZXdDaGlsZHJlbihUYWJUb2dnbGVEaXJlY3RpdmUpIHB1YmxpYyB0YWJUb2dnbGVEaXJlY3RpdmVzOiBRdWVyeUxpc3Q8VGFiVG9nZ2xlRGlyZWN0aXZlPjtcblxuICAvKipcbiAgICogQG1ldGhvZCBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0gY2hhbmdlRGV0ZWN0b3JSZWYgW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0gbmdab25lICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0gcmVuZGVyZXIyICAgICAgICAgW2Rlc2NyaXB0aW9uXVxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyMjogUmVuZGVyZXIyXG4gICkge31cblxuICAvKipcbiAgICogQG1ldGhvZCBuZ0FmdGVyVmlld0luaXRcbiAgICovXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAvLyBTZXQgdGFiIGluZGV4IG9uIGxvYWQuXG4gICAgdGhpcy5zZXRUYWJJbmRleCgpO1xuXG4gICAgLy8gVXBkYXRlIHRhYiBpbmRleCBpZiB0YWJzIGlzIHVwZGF0ZWQuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50YWJzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0VGFiSW5kZXgoKTtcbiAgICB9KSk7XG5cbiAgICAvLyBPcGVuIHRhYiBvbiBsb2FkLlxuICAgIHRoaXMub3BlblRhYkluZGV4KCk7XG4gIH1cblxuICAvKipcbiAgICogQG1ldGhvZCBuZ0FmdGVyVmlld0luaXRcbiAgICovXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBTZXQgdGFiIHRvZ2dsZXMgb24gbG9hZC5cbiAgICB0aGlzLnNldFRhYnNUb2dnbGUoKTtcblxuICAgIC8vIFVwZGF0ZSB0YWIgdG9nZ2xlcyBpZiB0YWJzIGlzIHVwZGF0ZWQuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50YWJUb2dnbGVEaXJlY3RpdmVzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0VGFic1RvZ2dsZSgpO1xuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbWV0aG9kIG5nT25DaGFuZ2VzXG4gICAqIEBwYXJhbSBjaGFuZ2VzIFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHtbcHJvcEtleTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlfSkge1xuICAgIGlmIChjaGFuZ2VzLmFjdGl2ZVRhYkluZGV4KSB7XG4gICAgICB0aGlzLm9wZW5UYWJJbmRleCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAbWV0aG9kIG5nT25EZXN0cm95XG4gICAqL1xuICBuZ09uRGVzdHJveSgpIHtcbiAgICByZW1vdmVMaXN0ZW5lcnModGhpcy5saXN0ZW5lcnMpO1xuICAgIHJlbW92ZVN1YnNjcmlwdGlvbnModGhpcy5zdWJzY3JpcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbdG9nZ2xlVGFiIGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIHRvZ2dsZVRhYlxuICAgKi9cbiAgcHVibGljIG9wZW5UYWJJbmRleCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICB0aGlzLnRhYnMuZm9yRWFjaCgodGFiOiBUYWJDb21wb25lbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZhdGVkVGFiSW5kZXggPT09IHRhYi5pbmRleCB8fCAodGhpcy5hY3RpdmF0ZWRUYWJJbmRleCA9PT0gdW5kZWZpbmVkICYmIHRhYi5pbmRleCA9PT0gMCkpIHtcbiAgICAgICAgICB0YWIuaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMub25PcGVuLmVtaXQoe2luZGV4OiB0YWIuaW5kZXh9KTtcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0YWIuaXNBY3RpdmUpIHtcbiAgICAgICAgICB0YWIuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm9uQ2xvc2UuZW1pdCh7aW5kZXg6IHRhYi5pbmRleH0pO1xuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogW29wZW5UYWIgZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2Qgb3BlblRhYlxuICAgKiBAcGFyYW0gZXZlbnQgICAgIFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIHRhYlRvT3BlbiBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBwdWJsaWMgb3BlblRhYihldmVudDogRXZlbnQsIHRhYlRvT3BlbjogVGFiQ29tcG9uZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0YWJUb09wZW4uaXNBY3RpdmUgPSB0cnVlO1xuICAgIHRoaXMub25PcGVuLmVtaXQoe2V2ZW50LCBpbmRleDogdGFiVG9PcGVuLmluZGV4fSk7XG4gICAgdGhpcy50YWJzLmZvckVhY2goKHRhYjogVGFiQ29tcG9uZW50KSA9PiB7XG4gICAgICBpZiAodGFiLmlzQWN0aXZlICYmIHRhYlRvT3BlbiAhPT0gdGFiKSB7XG4gICAgICAgIHRhYi5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uQ2xvc2UuZW1pdCh7ZXZlbnQsIGluZGV4OiB0YWIuaW5kZXh9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbc2V0VGFiSW5kZXggZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2Qgc2V0VGFiSW5kZXhcbiAgICovXG4gIHByaXZhdGUgc2V0VGFiSW5kZXgoKTogdm9pZCB7XG4gICAgdGhpcy50YWJzLmZvckVhY2goKHRhYjogVGFiQ29tcG9uZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICB0YWIuaW5kZXggPSBpbmRleDtcbiAgICB9KTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbc2V0VGFic1RvZ2dsZSBkZXNjcmlwdGlvbl1cbiAgICogQG1ldGhvZCBzZXRUYWJzVG9nZ2xlXG4gICAqL1xuICBwcml2YXRlIHNldFRhYnNUb2dnbGUoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSByZW1vdmVMaXN0ZW5lcnModGhpcy5saXN0ZW5lcnMpO1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMudGFiVG9nZ2xlRGlyZWN0aXZlcy5mb3JFYWNoKCh0YWJUb2dnbGU6IFRhYlRvZ2dsZURpcmVjdGl2ZSkgPT4ge1xuICAgICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIyLmxpc3Rlbih0YWJUb2dnbGUuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLm9wZW5UYWIoZXZlbnQsIHRhYlRvZ2dsZS50YWJDb21wb25lbnQpO1xuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl19