ngx-slice-kit
Version:
[](https://badge.fury.io/js/ngx-slice-kit)
76 lines • 21 kB
JavaScript
import { Component, ContentChildren, ViewChild, } from '@angular/core';
import { TabComponent } from './tab/tab.component';
import { TabsGroupComponent } from '../tabs-group/tabs-group.component';
import * as i0 from "@angular/core";
import * as i1 from "../../core/theme/theme.service";
import * as i2 from "@angular/common";
import * as i3 from "../../buttons/icon/icon.component";
export class TabsComponent extends TabsGroupComponent {
constructor(themeService, cdRef) {
super(themeService, cdRef);
this.themeService = themeService;
this.cdRef = cdRef;
this.tabGroup = [];
}
selectTab(selectedTab, index) {
if (selectedTab.active) {
return;
}
// set prev tab "hiding" stat and start hide animation for it
selectedTab.index = index;
let prevTabIndex;
for (const tab of this.tabGroup) {
if (tab.active) {
tab.hiding = true;
prevTabIndex = tab.index;
if (this.animation) {
tab.slideDirection = tab.index > index ? 'slideRight' : 'slideLeft';
}
setTimeout(() => {
tab.hiding = false;
}, this.animation ? 500 : 0);
}
tab.active = false;
}
// set new active tab and start show animation
selectedTab.active = true;
if (this.animation) {
selectedTab.slideDirection = selectedTab.index > prevTabIndex ? 'slideLeft' : 'slideRight';
}
super.selectTab();
}
ngOnInit() {
super.ngOnInit();
}
ngAfterContentInit() {
this.tabGroup = [];
this.tabs.forEach(tabInstance => this.tabGroup.push(tabInstance));
this.selectTab(this.tabs.first, 0);
this.tabs.changes.subscribe(res => {
this.tabGroup = [];
res.forEach(tabInstance => this.tabGroup.push(tabInstance));
});
}
}
TabsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: TabsComponent, deps: [{ token: i1.ThemeService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
TabsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: TabsComponent, selector: "sdk-tab-group", queries: [{ propertyName: "tabs", predicate: TabComponent }], viewQueries: [{ propertyName: "containerElement", first: true, predicate: ["container"], descendants: true, static: true }, { propertyName: "tabsWrapperElement", first: true, predicate: ["tabs"], descendants: true, static: true }, { propertyName: "arrowLeftElement", first: true, predicate: ["arrowLeft"], descendants: true, static: true }, { propertyName: "arrowRightElement", first: true, predicate: ["arrowRight"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"sdk-tab-container\" #container>\n <div class=\"sdk-tab-container__header\">\n <button class=\"sdk-tab-container__arrow sdk-tab-container__arrow--left\" #arrowLeft\n [disabled]=\"tabsScrollRect?.left + 1 >= containerRect?.left - arrowWidth\"\n [ngStyle]=\"{'width': arrowWidth + 'px', 'display': isArrows ? 'flex' : 'none'}\">\n <sdk-icon [icon]=\"'chevron_left'\"></sdk-icon>\n </button>\n <div class=\"sdk-tab-container__tabs-wrapper\">\n <div class=\"sdk-tab-container__tabs-scroll\" #tabs>\n <ng-container *ngFor=\"let tab of tabGroup; let i = index\">\n <div class=\"sdk-tab-container__tab\" [attr.tabIndex]=\"i\"\n [attr.disabled]=\"tab.disabled || null\"\n [class.sdk-tab-container__tab--active]=\"tab.active\"\n [class.sdk-tab-container__tab--fill]=\"activeTabStyle === 'fill'\"\n (click)=\"selectTab(tab, i)\">\n <span>{{tab.label}}</span>\n <div class=\"sdk-tab__background\"></div>\n </div>\n </ng-container>\n <div class=\"slide\" *ngIf=\"activeTabStyle === 'border'\" [ngStyle]=\"slideMeasure\"></div>\n </div>\n </div>\n <button class=\"sdk-tab-container__arrow sdk-tab-container__arrow--right\" #arrowRight\n [disabled]=\"tabsScrollRect?.right - 3 <= containerRect?.right - arrowWidth\"\n [ngStyle]=\"{'width': arrowWidth + 'px', 'display': isArrows ? 'flex' : 'none'}\">\n <sdk-icon [icon]=\"'chevron_right'\"></sdk-icon>\n </button>\n </div>\n <div class=\"sdk-tab-container__content\">\n <ng-content select=\"sdk-tab\"></ng-content>\n </div>\n</div>\n\n\n", styles: [".sdk-tab-container{overflow:hidden;min-width:320px;width:100%;max-width:100%}.sdk-tab-container__header{height:48px;display:flex;position:relative}.sdk-tab-container__header:after{content:\"\";border-bottom:2px solid var(--regular);width:100%;position:absolute;height:2px;bottom:0;z-index:-1}.sdk-tab-container__tabs-wrapper{display:flex;position:relative;overflow:hidden;width:100%}.sdk-tab-container__tabs-scroll{left:0;position:absolute;display:flex;width:max-content;transition:all .4s}.sdk-tab-container__tab{padding:0 16px;height:48px;color:var(--base-a90);display:flex;white-space:nowrap;cursor:pointer;align-items:center;outline:none;transition:all .3s;position:relative;transition:.4s}.sdk-tab-container__tab:hover{color:var(--base-a100)}.sdk-tab-container__tab span{overflow:hidden;text-overflow:ellipsis}.sdk-tab-container__tab.sdk-tab-container__tab--active{color:var(--primary);opacity:1}.sdk-tab-container__tab.sdk-tab-container__tab--oversize{overflow:hidden}.slide{position:absolute;height:3px;left:0;background-color:var(--primary);bottom:0;transition:all .4s}.sdk-tab-container__content{position:relative}.sdk-tab-container__tab--fill .sdk-tab__background{position:absolute;z-index:-1;left:0;top:0;height:100%;width:0;background-color:var(--primary)}.sdk-tab-container__tab--active.sdk-tab-container__tab--fill{color:#fff}.sdk-tab-container__tab--active.sdk-tab-container__tab--fill .sdk-tab__background{animation:sdk-painting .3s;width:100%}.sdk-tab-container__arrow{display:flex;align-items:center;justify-content:center;cursor:pointer;background-color:transparent}.sdk-tab-container__arrow--right{box-shadow:-2px 0 6px 1px var(--base-a10)}.sdk-tab-container__arrow--left{box-shadow:2px 0 6px 1px var(--base-a10)}.sdk-tab-container__arrow--disabled{opacity:.4}.sdk-tab-container__tab-icon{height:24px;width:24px;position:relative;left:-8px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.IconComponent, selector: "sdk-icon", inputs: ["icon", "image", "inline", "size", "color"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: TabsComponent, decorators: [{
type: Component,
args: [{ selector: 'sdk-tab-group', template: "<div class=\"sdk-tab-container\" #container>\n <div class=\"sdk-tab-container__header\">\n <button class=\"sdk-tab-container__arrow sdk-tab-container__arrow--left\" #arrowLeft\n [disabled]=\"tabsScrollRect?.left + 1 >= containerRect?.left - arrowWidth\"\n [ngStyle]=\"{'width': arrowWidth + 'px', 'display': isArrows ? 'flex' : 'none'}\">\n <sdk-icon [icon]=\"'chevron_left'\"></sdk-icon>\n </button>\n <div class=\"sdk-tab-container__tabs-wrapper\">\n <div class=\"sdk-tab-container__tabs-scroll\" #tabs>\n <ng-container *ngFor=\"let tab of tabGroup; let i = index\">\n <div class=\"sdk-tab-container__tab\" [attr.tabIndex]=\"i\"\n [attr.disabled]=\"tab.disabled || null\"\n [class.sdk-tab-container__tab--active]=\"tab.active\"\n [class.sdk-tab-container__tab--fill]=\"activeTabStyle === 'fill'\"\n (click)=\"selectTab(tab, i)\">\n <span>{{tab.label}}</span>\n <div class=\"sdk-tab__background\"></div>\n </div>\n </ng-container>\n <div class=\"slide\" *ngIf=\"activeTabStyle === 'border'\" [ngStyle]=\"slideMeasure\"></div>\n </div>\n </div>\n <button class=\"sdk-tab-container__arrow sdk-tab-container__arrow--right\" #arrowRight\n [disabled]=\"tabsScrollRect?.right - 3 <= containerRect?.right - arrowWidth\"\n [ngStyle]=\"{'width': arrowWidth + 'px', 'display': isArrows ? 'flex' : 'none'}\">\n <sdk-icon [icon]=\"'chevron_right'\"></sdk-icon>\n </button>\n </div>\n <div class=\"sdk-tab-container__content\">\n <ng-content select=\"sdk-tab\"></ng-content>\n </div>\n</div>\n\n\n", styles: [".sdk-tab-container{overflow:hidden;min-width:320px;width:100%;max-width:100%}.sdk-tab-container__header{height:48px;display:flex;position:relative}.sdk-tab-container__header:after{content:\"\";border-bottom:2px solid var(--regular);width:100%;position:absolute;height:2px;bottom:0;z-index:-1}.sdk-tab-container__tabs-wrapper{display:flex;position:relative;overflow:hidden;width:100%}.sdk-tab-container__tabs-scroll{left:0;position:absolute;display:flex;width:max-content;transition:all .4s}.sdk-tab-container__tab{padding:0 16px;height:48px;color:var(--base-a90);display:flex;white-space:nowrap;cursor:pointer;align-items:center;outline:none;transition:all .3s;position:relative;transition:.4s}.sdk-tab-container__tab:hover{color:var(--base-a100)}.sdk-tab-container__tab span{overflow:hidden;text-overflow:ellipsis}.sdk-tab-container__tab.sdk-tab-container__tab--active{color:var(--primary);opacity:1}.sdk-tab-container__tab.sdk-tab-container__tab--oversize{overflow:hidden}.slide{position:absolute;height:3px;left:0;background-color:var(--primary);bottom:0;transition:all .4s}.sdk-tab-container__content{position:relative}.sdk-tab-container__tab--fill .sdk-tab__background{position:absolute;z-index:-1;left:0;top:0;height:100%;width:0;background-color:var(--primary)}.sdk-tab-container__tab--active.sdk-tab-container__tab--fill{color:#fff}.sdk-tab-container__tab--active.sdk-tab-container__tab--fill .sdk-tab__background{animation:sdk-painting .3s;width:100%}.sdk-tab-container__arrow{display:flex;align-items:center;justify-content:center;cursor:pointer;background-color:transparent}.sdk-tab-container__arrow--right{box-shadow:-2px 0 6px 1px var(--base-a10)}.sdk-tab-container__arrow--left{box-shadow:2px 0 6px 1px var(--base-a10)}.sdk-tab-container__arrow--disabled{opacity:.4}.sdk-tab-container__tab-icon{height:24px;width:24px;position:relative;left:-8px}\n"] }]
}], ctorParameters: function () { return [{ type: i1.ThemeService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { tabs: [{
type: ContentChildren,
args: [TabComponent]
}], containerElement: [{
type: ViewChild,
args: ['container', { static: true }]
}], tabsWrapperElement: [{
type: ViewChild,
args: ['tabs', { static: true }]
}], arrowLeftElement: [{
type: ViewChild,
args: ['arrowLeft', { static: true }]
}], arrowRightElement: [{
type: ViewChild,
args: ['arrowRight', { static: true }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25neC1zbGljZS1raXQvc3JjL2xpYi9uYXZpZ2F0aW9uL3RhYnMvdGFicy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25neC1zbGljZS1raXQvc3JjL2xpYi9uYXZpZ2F0aW9uL3RhYnMvdGFicy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0gsU0FBUyxFQUNULGVBQWUsRUFFZixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7OztBQU94RSxNQUFNLE9BQU8sYUFBYyxTQUFRLGtCQUFrQjtJQVVqRCxZQUNXLFlBQTBCLEVBQ3ZCLEtBQXdCO1FBRWxDLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFIcEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDdkIsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFUL0IsYUFBUSxHQUFtQixFQUFFLENBQUM7SUFZckMsQ0FBQztJQUVNLFNBQVMsQ0FBQyxXQUFXLEVBQUUsS0FBSztRQUMvQixJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUU7WUFDcEIsT0FBTztTQUNWO1FBRUQsNkRBQTZEO1FBQzdELFdBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksWUFBb0IsQ0FBQztRQUN6QixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDN0IsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFO2dCQUNaLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNsQixZQUFZLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDekIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUNoQixHQUFHLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztpQkFDdkU7Z0JBQ0QsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDWixHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDdkIsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDaEM7WUFDRCxHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztTQUN0QjtRQUVELDhDQUE4QztRQUM5QyxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEIsV0FBVyxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7U0FDOUY7UUFFRCxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLFFBQVE7UUFDWCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVNLGtCQUFrQjtRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbkIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7SUFHUCxDQUFDOzswR0EvRFEsYUFBYTs4RkFBYixhQUFhLDBFQUVMLFlBQVksMGZDbkJqQyxxMURBa0NBOzJGRGpCYSxhQUFhO2tCQUx6QixTQUFTOytCQUNJLGVBQWU7bUlBTWEsSUFBSTtzQkFBekMsZUFBZTt1QkFBQyxZQUFZO2dCQUdrQixnQkFBZ0I7c0JBQTlELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDSSxrQkFBa0I7c0JBQTNELFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDYyxnQkFBZ0I7c0JBQTlELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDVSxpQkFBaUI7c0JBQWhFLFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLCBPbkluaXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUYWJDb21wb25lbnQgfSBmcm9tICcuL3RhYi90YWIuY29tcG9uZW50JztcbmltcG9ydCB7IFRoZW1lU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvdGhlbWUvdGhlbWUuc2VydmljZSc7XG5pbXBvcnQgeyBUYWJzR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi90YWJzLWdyb3VwL3RhYnMtZ3JvdXAuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzZGstdGFiLWdyb3VwJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFicy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFicy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRhYnNDb21wb25lbnQgZXh0ZW5kcyBUYWJzR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQge1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihUYWJDb21wb25lbnQpIHB1YmxpYyB0YWJzOiBRdWVyeUxpc3Q8VGFiQ29tcG9uZW50PjtcbiAgICBwdWJsaWMgdGFiR3JvdXA6IFRhYkNvbXBvbmVudFtdID0gW107XG5cbiAgICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7c3RhdGljOiB0cnVlfSkgcHVibGljIGNvbnRhaW5lckVsZW1lbnQ7XG4gICAgQFZpZXdDaGlsZCgndGFicycsIHtzdGF0aWM6IHRydWV9KSBwdWJsaWMgdGFic1dyYXBwZXJFbGVtZW50O1xuICAgIEBWaWV3Q2hpbGQoJ2Fycm93TGVmdCcsIHtzdGF0aWM6IHRydWV9KSBwdWJsaWMgYXJyb3dMZWZ0RWxlbWVudDtcbiAgICBAVmlld0NoaWxkKCdhcnJvd1JpZ2h0Jywge3N0YXRpYzogdHJ1ZX0pIHB1YmxpYyBhcnJvd1JpZ2h0RWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgdGhlbWVTZXJ2aWNlOiBUaGVtZVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICApIHtcbiAgICAgICAgc3VwZXIodGhlbWVTZXJ2aWNlLCBjZFJlZik7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdFRhYihzZWxlY3RlZFRhYiwgaW5kZXgpOiBhbnkge1xuICAgICAgICBpZiAoc2VsZWN0ZWRUYWIuYWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgcHJldiB0YWIgXCJoaWRpbmdcIiBzdGF0IGFuZCBzdGFydCBoaWRlIGFuaW1hdGlvbiBmb3IgaXRcbiAgICAgICAgc2VsZWN0ZWRUYWIuaW5kZXggPSBpbmRleDtcbiAgICAgICAgbGV0IHByZXZUYWJJbmRleDogbnVtYmVyO1xuICAgICAgICBmb3IgKGNvbnN0IHRhYiBvZiB0aGlzLnRhYkdyb3VwKSB7XG4gICAgICAgICAgICBpZiAodGFiLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHRhYi5oaWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHByZXZUYWJJbmRleCA9IHRhYi5pbmRleDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hbmltYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGFiLnNsaWRlRGlyZWN0aW9uID0gdGFiLmluZGV4ID4gaW5kZXggPyAnc2xpZGVSaWdodCcgOiAnc2xpZGVMZWZ0JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRhYi5oaWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LCB0aGlzLmFuaW1hdGlvbiA/IDUwMCA6IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFiLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2V0IG5ldyBhY3RpdmUgdGFiIGFuZCBzdGFydCBzaG93IGFuaW1hdGlvblxuICAgICAgICBzZWxlY3RlZFRhYi5hY3RpdmUgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5hbmltYXRpb24pIHtcbiAgICAgICAgICAgIHNlbGVjdGVkVGFiLnNsaWRlRGlyZWN0aW9uID0gc2VsZWN0ZWRUYWIuaW5kZXggPiBwcmV2VGFiSW5kZXggPyAnc2xpZGVMZWZ0JyA6ICdzbGlkZVJpZ2h0JztcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLnNlbGVjdFRhYigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRhYkdyb3VwID0gW107XG4gICAgICAgIHRoaXMudGFicy5mb3JFYWNoKHRhYkluc3RhbmNlID0+IHRoaXMudGFiR3JvdXAucHVzaCh0YWJJbnN0YW5jZSkpO1xuICAgICAgICB0aGlzLnNlbGVjdFRhYih0aGlzLnRhYnMuZmlyc3QsIDApO1xuXG4gICAgICAgIHRoaXMudGFicy5jaGFuZ2VzLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy50YWJHcm91cCA9IFtdO1xuICAgICAgICAgICAgcmVzLmZvckVhY2godGFiSW5zdGFuY2UgPT4gdGhpcy50YWJHcm91cC5wdXNoKHRhYkluc3RhbmNlKSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2RrLXRhYi1jb250YWluZXJcIiAjY29udGFpbmVyPlxuICAgIDxkaXYgY2xhc3M9XCJzZGstdGFiLWNvbnRhaW5lcl9faGVhZGVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJzZGstdGFiLWNvbnRhaW5lcl9fYXJyb3cgc2RrLXRhYi1jb250YWluZXJfX2Fycm93LS1sZWZ0XCIgI2Fycm93TGVmdFxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0YWJzU2Nyb2xsUmVjdD8ubGVmdCArIDEgPj0gY29udGFpbmVyUmVjdD8ubGVmdCAtIGFycm93V2lkdGhcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnd2lkdGgnOiBhcnJvd1dpZHRoICsgJ3B4JywgJ2Rpc3BsYXknOiBpc0Fycm93cyA/ICdmbGV4JyA6ICdub25lJ31cIj5cbiAgICAgICAgICAgIDxzZGstaWNvbiBbaWNvbl09XCInY2hldnJvbl9sZWZ0J1wiPjwvc2RrLWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2RrLXRhYi1jb250YWluZXJfX3RhYnMtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNkay10YWItY29udGFpbmVyX190YWJzLXNjcm9sbFwiICN0YWJzPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJHcm91cDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RrLXRhYi1jb250YWluZXJfX3RhYlwiIFthdHRyLnRhYkluZGV4XT1cImlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cInRhYi5kaXNhYmxlZCB8fCBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2RrLXRhYi1jb250YWluZXJfX3RhYi0tYWN0aXZlXT1cInRhYi5hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZGstdGFiLWNvbnRhaW5lcl9fdGFiLS1maWxsXT1cImFjdGl2ZVRhYlN0eWxlID09PSAnZmlsbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RUYWIodGFiLCBpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3t0YWIubGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZGstdGFiX19iYWNrZ3JvdW5kXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbGlkZVwiICpuZ0lmPVwiYWN0aXZlVGFiU3R5bGUgPT09ICdib3JkZXInXCIgW25nU3R5bGVdPVwic2xpZGVNZWFzdXJlXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJzZGstdGFiLWNvbnRhaW5lcl9fYXJyb3cgc2RrLXRhYi1jb250YWluZXJfX2Fycm93LS1yaWdodFwiICNhcnJvd1JpZ2h0XG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRhYnNTY3JvbGxSZWN0Py5yaWdodCAtIDMgPD0gY29udGFpbmVyUmVjdD8ucmlnaHQgLSBhcnJvd1dpZHRoXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J3dpZHRoJzogYXJyb3dXaWR0aCArICdweCcsICdkaXNwbGF5JzogaXNBcnJvd3MgPyAnZmxleCcgOiAnbm9uZSd9XCI+XG4gICAgICAgICAgICA8c2RrLWljb24gW2ljb25dPVwiJ2NoZXZyb25fcmlnaHQnXCI+PC9zZGstaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInNkay10YWItY29udGFpbmVyX19jb250ZW50XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNkay10YWJcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuXG4iXX0=