@ptsecurity/mosaic
Version:
155 lines • 20.8 kB
JavaScript
import { ChangeDetectionStrategy, Component, ContentChild, Directive, ElementRef, EventEmitter, Input, NgZone, Output, ViewEncapsulation } from '@angular/core';
import { isControl, isInput, isLeftBracket, isRightBracket } from '@ptsecurity/cdk/keycodes';
import { mcSidebarAnimations, McSidebarAnimationState } from './sidebar-animations';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export var SidebarPositions;
(function (SidebarPositions) {
SidebarPositions["Left"] = "left";
SidebarPositions["Right"] = "right";
})(SidebarPositions || (SidebarPositions = {}));
export class McSidebarOpened {
}
/** @nocollapse */ McSidebarOpened.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: McSidebarOpened, deps: [], target: i0.ɵɵFactoryTarget.Directive });
/** @nocollapse */ McSidebarOpened.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.5", type: McSidebarOpened, selector: "[mc-sidebar-opened]", inputs: { minWidth: "minWidth", width: "width", maxWidth: "maxWidth" }, exportAs: ["mcSidebarOpened"], ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: McSidebarOpened, decorators: [{
type: Directive,
args: [{
selector: '[mc-sidebar-opened]',
exportAs: 'mcSidebarOpened'
}]
}], propDecorators: { minWidth: [{
type: Input
}], width: [{
type: Input
}], maxWidth: [{
type: Input
}] } });
export class McSidebarClosed {
}
/** @nocollapse */ McSidebarClosed.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: McSidebarClosed, deps: [], target: i0.ɵɵFactoryTarget.Directive });
/** @nocollapse */ McSidebarClosed.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.5", type: McSidebarClosed, selector: "[mc-sidebar-closed]", inputs: { width: "width" }, exportAs: ["mcSidebarClosed"], ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: McSidebarClosed, decorators: [{
type: Directive,
args: [{
selector: '[mc-sidebar-closed]',
exportAs: 'mcSidebarClosed'
}]
}], propDecorators: { width: [{
type: Input
}] } });
export class McSidebar {
constructor(ngZone, elementRef) {
this.ngZone = ngZone;
this.elementRef = elementRef;
this._opened = true;
this.params = {
openedStateWidth: 'inherit',
openedStateMinWidth: 'inherit',
openedStateMaxWidth: 'inherit',
closedStateWidth: '32px'
};
this.stateChanged = new EventEmitter();
this.internalState = true;
}
get opened() {
return this._opened;
}
set opened(value) {
if (this._opened) {
this.saveWidth();
}
this._opened = value;
}
get animationState() {
return this._opened ? McSidebarAnimationState.Opened : McSidebarAnimationState.Closed;
}
ngOnInit() {
if (this.position === SidebarPositions.Left || this.position === SidebarPositions.Right) {
this.registerKeydownListener();
}
}
ngOnDestroy() {
if (this.position === SidebarPositions.Left || this.position === SidebarPositions.Right) {
this.unRegisterKeydownListener();
}
}
toggle() {
this.opened = !this.opened;
}
onAnimationStart() {
if (this._opened) {
this.internalState = this._opened;
}
}
onAnimationDone() {
this.internalState = this._opened;
this.stateChanged.emit(this._opened);
}
ngAfterContentInit() {
this.params = {
openedStateWidth: this.openedContent.width || 'inherit',
openedStateMinWidth: this.openedContent.minWidth || 'inherit',
openedStateMaxWidth: this.openedContent.maxWidth || 'inherit',
closedStateWidth: this.closedContent.width || '32px'
};
}
registerKeydownListener() {
this.documentKeydownListener = (event) => {
if (isControl(event) || isInput(event)) {
return;
}
if ((this.position === SidebarPositions.Left && isLeftBracket(event)) ||
(this.position === SidebarPositions.Right && isRightBracket(event))) {
this.ngZone.run(() => this._opened = !this._opened);
}
};
this.ngZone.runOutsideAngular(() => {
// tslint:disable-next-line: no-unbound-method
document.addEventListener('keypress', this.documentKeydownListener, true);
});
}
unRegisterKeydownListener() {
// tslint:disable-next-line: no-unbound-method
document.removeEventListener('keypress', this.documentKeydownListener, true);
}
saveWidth() {
this.params.openedStateWidth = `${this.elementRef.nativeElement.offsetWidth}px`;
}
}
/** @nocollapse */ McSidebar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: McSidebar, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ McSidebar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: McSidebar, selector: "mc-sidebar", inputs: { opened: "opened", position: "position" }, outputs: { stateChanged: "stateChanged" }, host: { listeners: { "@state.start": "onAnimationStart()", "@state.done": "onAnimationDone()" }, properties: { "@state": "{\n value: animationState,\n params: params\n }" }, classAttribute: "mc-sidebar" }, queries: [{ propertyName: "openedContent", first: true, predicate: McSidebarOpened, descendants: true }, { propertyName: "closedContent", first: true, predicate: McSidebarClosed, descendants: true }], exportAs: ["mcSidebar"], ngImport: i0, template: "<ng-container [ngSwitch]=\"internalState\">\n <ng-container *ngSwitchCase=\"true\">\n <ng-content select=\"[mc-sidebar-opened]\"></ng-content>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"false\">\n <ng-content select=\"[mc-sidebar-closed]\"></ng-content>\n </ng-container>\n</ng-container>\n", styles: [".mc-sidebar{display:inline-block;height:100%;overflow:hidden}.mc-sidebar-opened,.mc-sidebar-closed{height:100%}\n"], directives: [{ type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], animations: [mcSidebarAnimations.sidebarState], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: McSidebar, decorators: [{
type: Component,
args: [{
selector: 'mc-sidebar',
exportAs: 'mcSidebar',
templateUrl: 'sidebar.component.html',
styleUrls: ['./sidebar.scss'],
host: {
class: 'mc-sidebar',
'[@state]': `{
value: animationState,
params: params
}`,
'(@state.start)': 'onAnimationStart()',
'(@state.done)': 'onAnimationDone()'
},
animations: [mcSidebarAnimations.sidebarState],
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush
}]
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }]; }, propDecorators: { opened: [{
type: Input
}], position: [{
type: Input
}], stateChanged: [{
type: Output
}], openedContent: [{
type: ContentChild,
args: [McSidebarOpened, { static: false }]
}], closedContent: [{
type: ContentChild,
args: [McSidebarClosed, { static: false }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9tb3NhaWMvc2lkZWJhci9zaWRlYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9zaWRlYmFyL3NpZGViYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFBRSxVQUFVLEVBQ3JCLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sRUFDTixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTdGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUFHcEYsTUFBTSxDQUFOLElBQVksZ0JBR1g7QUFIRCxXQUFZLGdCQUFnQjtJQUN4QixpQ0FBYSxDQUFBO0lBQ2IsbUNBQWUsQ0FBQTtBQUNuQixDQUFDLEVBSFcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQUczQjtBQWdCRCxNQUFNLE9BQU8sZUFBZTs7K0hBQWYsZUFBZTttSEFBZixlQUFlOzJGQUFmLGVBQWU7a0JBSjNCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsUUFBUSxFQUFFLGlCQUFpQjtpQkFDOUI7OEJBRVksUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSzs7QUFPVixNQUFNLE9BQU8sZUFBZTs7K0hBQWYsZUFBZTttSEFBZixlQUFlOzJGQUFmLGVBQWU7a0JBSjNCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0Is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QWUsRUFBRSxtQkFBbUI7cUJBQ3ZDO29CQUNELFVBQVUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQztvQkFDOUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRDtzSEFHTyxNQUFNO3NCQURULEtBQUs7Z0JBY0csUUFBUTtzQkFBaEIsS0FBSztnQkFVYSxZQUFZO3NCQUE5QixNQUFNO2dCQUUyQyxhQUFhO3NCQUE5RCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRUUsYUFBYTtzQkFBOUQsWUFBWTt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRGlyZWN0aXZlLCBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LCBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNDb250cm9sLCBpc0lucHV0LCBpc0xlZnRCcmFja2V0LCBpc1JpZ2h0QnJhY2tldCB9IGZyb20gJ0BwdHNlY3VyaXR5L2Nkay9rZXljb2Rlcyc7XG5cbmltcG9ydCB7IG1jU2lkZWJhckFuaW1hdGlvbnMsIE1jU2lkZWJhckFuaW1hdGlvblN0YXRlIH0gZnJvbSAnLi9zaWRlYmFyLWFuaW1hdGlvbnMnO1xuXG5cbmV4cG9ydCBlbnVtIFNpZGViYXJQb3NpdGlvbnMge1xuICAgIExlZnQgPSAnbGVmdCcsXG4gICAgUmlnaHQgPSAncmlnaHQnXG59XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuYW1pbmctY29udmVudGlvblxuaW50ZXJmYWNlIE1jU2lkZWJhclBhcmFtcyB7XG4gICAgb3BlbmVkU3RhdGVNaW5XaWR0aDogc3RyaW5nO1xuICAgIG9wZW5lZFN0YXRlV2lkdGg6IHN0cmluZztcbiAgICBvcGVuZWRTdGF0ZU1heFdpZHRoOiBzdHJpbmc7XG5cbiAgICBjbG9zZWRTdGF0ZVdpZHRoOiBzdHJpbmc7XG59XG5cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbbWMtc2lkZWJhci1vcGVuZWRdJyxcbiAgICBleHBvcnRBczogJ21jU2lkZWJhck9wZW5lZCdcbn0pXG5leHBvcnQgY2xhc3MgTWNTaWRlYmFyT3BlbmVkIHtcbiAgICBASW5wdXQoKSBtaW5XaWR0aDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHdpZHRoOiBzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4V2lkdGg6IHN0cmluZztcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbbWMtc2lkZWJhci1jbG9zZWRdJyxcbiAgICBleHBvcnRBczogJ21jU2lkZWJhckNsb3NlZCdcbn0pXG5leHBvcnQgY2xhc3MgTWNTaWRlYmFyQ2xvc2VkIHtcbiAgICBASW5wdXQoKSB3aWR0aDogc3RyaW5nO1xufVxuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbWMtc2lkZWJhcicsXG4gICAgZXhwb3J0QXM6ICdtY1NpZGViYXInLFxuICAgIHRlbXBsYXRlVXJsOiAnc2lkZWJhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc2lkZWJhci5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ21jLXNpZGViYXInLFxuICAgICAgICAnW0BzdGF0ZV0nOiBge1xuICAgICAgICAgICAgdmFsdWU6IGFuaW1hdGlvblN0YXRlLFxuICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXNcbiAgICAgICAgfWAsXG4gICAgICAgICcoQHN0YXRlLnN0YXJ0KSc6ICdvbkFuaW1hdGlvblN0YXJ0KCknLFxuICAgICAgICAnKEBzdGF0ZS5kb25lKSc6ICdvbkFuaW1hdGlvbkRvbmUoKSdcbiAgICB9LFxuICAgIGFuaW1hdGlvbnM6IFttY1NpZGViYXJBbmltYXRpb25zLnNpZGViYXJTdGF0ZV0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNY1NpZGViYXIgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgQElucHV0KClcbiAgICBnZXQgb3BlbmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3BlbmVkO1xuICAgIH1cblxuICAgIHNldCBvcGVuZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX29wZW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zYXZlV2lkdGgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX29wZW5lZCA9IHZhbHVlO1xuICAgIH1cbiAgICBwcml2YXRlIF9vcGVuZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgcG9zaXRpb246IFNpZGViYXJQb3NpdGlvbnM7XG5cbiAgICBwYXJhbXM6IE1jU2lkZWJhclBhcmFtcyA9IHtcbiAgICAgICAgb3BlbmVkU3RhdGVXaWR0aDogJ2luaGVyaXQnLFxuICAgICAgICBvcGVuZWRTdGF0ZU1pbldpZHRoOiAnaW5oZXJpdCcsXG4gICAgICAgIG9wZW5lZFN0YXRlTWF4V2lkdGg6ICdpbmhlcml0JyxcblxuICAgICAgICBjbG9zZWRTdGF0ZVdpZHRoOiAnMzJweCdcbiAgICB9O1xuXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHN0YXRlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQENvbnRlbnRDaGlsZChNY1NpZGViYXJPcGVuZWQsIHsgc3RhdGljOiBmYWxzZSB9KSBvcGVuZWRDb250ZW50OiBNY1NpZGViYXJPcGVuZWQ7XG5cbiAgICBAQ29udGVudENoaWxkKE1jU2lkZWJhckNsb3NlZCwgeyBzdGF0aWM6IGZhbHNlIH0pIGNsb3NlZENvbnRlbnQ6IE1jU2lkZWJhckNsb3NlZDtcblxuICAgIGdldCBhbmltYXRpb25TdGF0ZSgpOiBNY1NpZGViYXJBbmltYXRpb25TdGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcGVuZWQgPyBNY1NpZGViYXJBbmltYXRpb25TdGF0ZS5PcGVuZWQgOiBNY1NpZGViYXJBbmltYXRpb25TdGF0ZS5DbG9zZWQ7XG4gICAgfVxuXG4gICAgaW50ZXJuYWxTdGF0ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBwcml2YXRlIGRvY3VtZW50S2V5ZG93bkxpc3RlbmVyOiAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lLCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucG9zaXRpb24gPT09IFNpZGViYXJQb3NpdGlvbnMuTGVmdCB8fCB0aGlzLnBvc2l0aW9uID09PSBTaWRlYmFyUG9zaXRpb25zLlJpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyS2V5ZG93bkxpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucG9zaXRpb24gPT09IFNpZGViYXJQb3NpdGlvbnMuTGVmdCB8fCB0aGlzLnBvc2l0aW9uID09PSBTaWRlYmFyUG9zaXRpb25zLlJpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLnVuUmVnaXN0ZXJLZXlkb3duTGlzdGVuZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSAhdGhpcy5vcGVuZWQ7XG4gICAgfVxuXG4gICAgb25BbmltYXRpb25TdGFydCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX29wZW5lZCkge1xuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbFN0YXRlID0gdGhpcy5fb3BlbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25BbmltYXRpb25Eb25lKCkge1xuICAgICAgICB0aGlzLmludGVybmFsU3RhdGUgPSB0aGlzLl9vcGVuZWQ7XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZWQuZW1pdCh0aGlzLl9vcGVuZWQpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYXJhbXMgPSB7XG4gICAgICAgICAgICBvcGVuZWRTdGF0ZVdpZHRoOiB0aGlzLm9wZW5lZENvbnRlbnQud2lkdGggfHwgJ2luaGVyaXQnLFxuICAgICAgICAgICAgb3BlbmVkU3RhdGVNaW5XaWR0aDogdGhpcy5vcGVuZWRDb250ZW50Lm1pbldpZHRoIHx8ICdpbmhlcml0JyxcbiAgICAgICAgICAgIG9wZW5lZFN0YXRlTWF4V2lkdGg6IHRoaXMub3BlbmVkQ29udGVudC5tYXhXaWR0aCB8fCAnaW5oZXJpdCcsXG5cbiAgICAgICAgICAgIGNsb3NlZFN0YXRlV2lkdGg6IHRoaXMuY2xvc2VkQ29udGVudC53aWR0aCB8fCAnMzJweCdcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyS2V5ZG93bkxpc3RlbmVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY3VtZW50S2V5ZG93bkxpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNDb250cm9sKGV2ZW50KSB8fCBpc0lucHV0KGV2ZW50KSkgeyByZXR1cm47IH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICh0aGlzLnBvc2l0aW9uID09PSBTaWRlYmFyUG9zaXRpb25zLkxlZnQgJiYgaXNMZWZ0QnJhY2tldChldmVudCkpIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMucG9zaXRpb24gPT09IFNpZGViYXJQb3NpdGlvbnMuUmlnaHQgJiYgaXNSaWdodEJyYWNrZXQoZXZlbnQpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMuX29wZW5lZCA9ICF0aGlzLl9vcGVuZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5ib3VuZC1tZXRob2RcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgdGhpcy5kb2N1bWVudEtleWRvd25MaXN0ZW5lciwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdW5SZWdpc3RlcktleWRvd25MaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bmJvdW5kLW1ldGhvZFxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsIHRoaXMuZG9jdW1lbnRLZXlkb3duTGlzdGVuZXIsIHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2F2ZVdpZHRoKCkge1xuICAgICAgICB0aGlzLnBhcmFtcy5vcGVuZWRTdGF0ZVdpZHRoID0gYCR7dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh9cHhgO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImludGVybmFsU3RhdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0cnVlXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYy1zaWRlYmFyLW9wZW5lZF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJmYWxzZVwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWMtc2lkZWJhci1jbG9zZWRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=