UNPKG

@nova-ui/bits

Version:

SolarWinds Nova Framework

123 lines 20.6 kB
import { CdkStepper, } from "@angular/cdk/stepper"; import { ContentChildren, Directive, EventEmitter, Input, Output, QueryList, ViewChildren, } from "@angular/core"; import { Subject } from "rxjs"; import { distinctUntilChanged, startWith, takeUntil } from "rxjs/operators"; import { WizardStepV2Component } from "./wizard-step/wizard-step.component"; import { WizardStepHeaderComponent } from "./wizard-step-header/wizard-step-header.component"; import * as i0 from "@angular/core"; export class WizardDirective extends CdkStepper { constructor() { super(...arguments); /** Override CdkStepper 'steps' property to use WizardStepV2Component instead of CdkStep */ this.steps = new QueryList(); this.stepsArray = []; /** Event emitted when the current step is done transitioning in. */ this.animationDone = new EventEmitter(); /** Event emitted when the selected step has changed. */ this.selectionChange = new EventEmitter(); /** Emits the completed wizard state on component destroy */ this.finished = new EventEmitter(); /** Stream of animation `done` events when the body expands/collapses. */ this._animationDone = new Subject(); } static { this.ngAcceptInputTypeEditable = undefined; } static { this.ngAcceptInputTypeOptional = undefined; } static { this.ngAcceptInputTypeCompleted = undefined; } static { this.ngAcceptInputTypeHasError = undefined; } /** The step that is selected. */ get selected() { return this.steps.toArray()[this.selectedIndex]; } set selected(step) { this.selectedIndex = this.steps ? this.steps.toArray().indexOf(step) : -1; } ngOnChanges(changes) { if (changes.state && changes.state.currentValue) { this.state = changes.state.currentValue; } } ngAfterContentInit() { this._steps.changes .pipe(startWith(this._steps), takeUntil(this._destroyed)) .subscribe((steps) => { this.steps.reset(steps.filter((step) => step._stepper === this)); this.stepsArray = this.steps.toArray(); this.steps.notifyOnChanges(); this.setIds(); }); this.steps.changes .pipe(takeUntil(this._destroyed)) .subscribe(() => this._stateChanged()); this._animationDone .pipe( // This needs a `distinctUntilChanged` in order to avoid emitting the same event twice due // to a bug in animations where the `.done` callback gets invoked twice on some browsers. // See https://github.com/angular/angular/issues/24084 distinctUntilChanged((x, y) => x.fromState === y.fromState && x.toState === y.toState), takeUntil(this._destroyed)) .subscribe((event) => { if (event.toState === "current") { this.animationDone.emit(); } }); } ngAfterViewInit() { super.ngAfterViewInit(); if (this.state?.finished) { this.restore(); } } ngOnDestroy() { this.finished.emit({ finished: this.allStepsCompleted, }); super.ngOnDestroy(); } get allStepsCompleted() { const completed = this.steps .toArray() .reduce((acc, step) => acc && step.completed, true); return completed; } // Restores the completed wizard to the last step restore() { this.steps.toArray().forEach((step) => { step.completed = true; if (step === this.steps.last) { step.select(); } }); this["_changeDetectorRef"].detectChanges(); } setIds() { this.labelIds = this.stepsArray.map((step, index) => this._getStepLabelId(index)); this.stepContentIds = this.stepsArray.map((step, index) => this._getStepContentId(index)); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WizardDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: WizardDirective, selector: "[nuiWizard]", inputs: { state: "state", selected: "selected" }, outputs: { animationDone: "animationDone", selectionChange: "selectionChange", finished: "finished" }, providers: [{ provide: CdkStepper, useExisting: WizardDirective }], queries: [{ propertyName: "_steps", predicate: WizardStepV2Component, descendants: true }], viewQueries: [{ propertyName: "_stepHeader", predicate: WizardStepHeaderComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WizardDirective, decorators: [{ type: Directive, args: [{ selector: "[nuiWizard]", providers: [{ provide: CdkStepper, useExisting: WizardDirective }], }] }], propDecorators: { animationDone: [{ type: Output }], selectionChange: [{ type: Output }], state: [{ type: Input }], finished: [{ type: Output }], _stepHeader: [{ type: ViewChildren, args: [WizardStepHeaderComponent] }], _steps: [{ type: ContentChildren, args: [WizardStepV2Component, { descendants: true }] }], selected: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvd2l6YXJkLXYyL3dpemFyZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc0JBLE9BQU8sRUFDSCxVQUFVLEdBR2IsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBR0gsZUFBZSxFQUNmLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBRVQsWUFBWSxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc1RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7QUFNOUYsTUFBTSxPQUFPLGVBQ1QsU0FBUSxVQUFVO0lBTHRCOztRQWFJLDJGQUEyRjtRQUNsRixVQUFLLEdBQ1YsSUFBSSxTQUFTLEVBQXlCLENBQUM7UUFFM0MsZUFBVSxHQUFpQyxFQUFFLENBQUM7UUFROUMsb0VBQW9FO1FBQ2pELGtCQUFhLEdBQzVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDN0Isd0RBQXdEO1FBQ3JDLG9CQUFlLEdBQzlCLElBQUksWUFBWSxFQUF5QixDQUFDO1FBSzlDLDREQUE0RDtRQUN6QyxhQUFRLEdBQ3ZCLElBQUksWUFBWSxFQUFnQixDQUFDO1FBTXJDLHlFQUF5RTtRQUN6RSxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFrQixDQUFDO0tBNEdsRDthQWhKVSw4QkFBeUIsR0FBaUIsU0FBUyxBQUExQixDQUEyQjthQUNwRCw4QkFBeUIsR0FBaUIsU0FBUyxBQUExQixDQUEyQjthQUNwRCwrQkFBMEIsR0FB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QVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLGlCQUFpQixFQUFFLENBQUM7aUJBQ3JFOzhCQXVCc0IsYUFBYTtzQkFBL0IsTUFBTTtnQkFHWSxlQUFlO3NCQUFqQyxNQUFNO2dCQUlFLEtBQUs7c0JBQWIsS0FBSztnQkFHYSxRQUFRO3NCQUExQixNQUFNO2dCQUtDLFdBQVc7c0JBRGxCLFlBQVk7dUJBQUMseUJBQXlCO2dCQVEvQixNQUFNO3NCQURiLGVBQWU7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUt6RCxRQUFRO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyDCqSAyMDIyIFNvbGFyV2luZHMgV29ybGR3aWRlLCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4vLyAgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vICByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHsgQW5pbWF0aW9uRXZlbnQgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2VyY2lvblwiO1xuaW1wb3J0IHtcbiAgICBDZGtTdGVwcGVyLFxuICAgIFN0ZXBDb250ZW50UG9zaXRpb25TdGF0ZSxcbiAgICBTdGVwcGVyU2VsZWN0aW9uRXZlbnQsXG59IGZyb20gXCJAYW5ndWxhci9jZGsvc3RlcHBlclwiO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkcmVuLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3RhcnRXaXRoLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuaW1wb3J0IHsgSVdpemFyZFN0YXRlIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IFdpemFyZFN0ZXBWMkNvbXBvbmVudCB9IGZyb20gXCIuL3dpemFyZC1zdGVwL3dpemFyZC1zdGVwLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgV2l6YXJkU3RlcEhlYWRlckNvbXBvbmVudCB9IGZyb20gXCIuL3dpemFyZC1zdGVwLWhlYWRlci93aXphcmQtc3RlcC1oZWFkZXIuY29tcG9uZW50XCI7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiBcIltudWlXaXphcmRdXCIsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDZGtTdGVwcGVyLCB1c2VFeGlzdGluZzogV2l6YXJkRGlyZWN0aXZlIH1dLFxufSlcbmV4cG9ydCBjbGFzcyBXaXphcmREaXJlY3RpdmVcbiAgICBleHRlbmRzIENka1N0ZXBwZXJcbiAgICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gICAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlRWRpdGFibGU6IEJvb2xlYW5JbnB1dCA9IHVuZGVmaW5lZDtcbiAgICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVPcHRpb25hbDogQm9vbGVhbklucHV0ID0gdW5kZWZpbmVkO1xuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZUNvbXBsZXRlZDogQm9vbGVhbklucHV0ID0gdW5kZWZpbmVkO1xuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZUhhc0Vycm9yOiBCb29sZWFuSW5wdXQgPSB1bmRlZmluZWQ7XG5cbiAgICAvKiogT3ZlcnJpZGUgQ2RrU3RlcHBlciAnc3RlcHMnIHByb3BlcnR5IHRvIHVzZSBXaXphcmRTdGVwVjJDb21wb25lbnQgaW5zdGVhZCBvZiBDZGtTdGVwICovXG4gICAgcmVhZG9ubHkgc3RlcHM6IFF1ZXJ5TGlzdDxXaXphcmRTdGVwVjJDb21wb25lbnQ+ID1cbiAgICAgICAgbmV3IFF1ZXJ5TGlzdDxXaXphcmRTdGVwVjJDb21wb25lbnQ+KCk7XG5cbiAgICBzdGVwc0FycmF5OiBBcnJheTxXaXphcmRTdGVwVjJDb21wb25lbnQ+ID0gW107XG5cbiAgICAvKiogVW5pcSBsYWJlbHMgaWRzICovXG4gICAgcHVibGljIGxhYmVsSWRzOiBzdHJpbmdbXTtcblxuICAgIC8qKiBVbmlxIHN0ZXAgY29udGVudCBpZHMgKi9cbiAgICBwdWJsaWMgc3RlcENvbnRlbnRJZHM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgY3VycmVudCBzdGVwIGlzIGRvbmUgdHJhbnNpdGlvbmluZyBpbi4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgYW5pbWF0aW9uRG9uZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGVkIHN0ZXAgaGFzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZSA9XG4gICAgICAgIG5ldyBFdmVudEVtaXR0ZXI8U3RlcHBlclNlbGVjdGlvbkV2ZW50PigpO1xuXG4gICAgLyoqIFRoZSBzdGF0ZSBvZiB0aGUgd2l6YXJkICovXG4gICAgQElucHV0KCkgc3RhdGU6IElXaXphcmRTdGF0ZTtcblxuICAgIC8qKiBFbWl0cyB0aGUgY29tcGxldGVkIHdpemFyZCBzdGF0ZSBvbiBjb21wb25lbnQgZGVzdHJveSAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBmaW5pc2hlZDogRXZlbnRFbWl0dGVyPElXaXphcmRTdGF0ZT4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPElXaXphcmRTdGF0ZT4oKTtcblxuICAgIC8qKiBUaGUgbGlzdCBvZiBzdGVwIGhlYWRlcnMgb2YgdGhlIHN0ZXBzIGluIHRoZSBzdGVwcGVyLiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oV2l6YXJkU3RlcEhlYWRlckNvbXBvbmVudClcbiAgICBkZWNsYXJlIF9zdGVwSGVhZGVyOiBRdWVyeUxpc3Q8V2l6YXJkU3RlcEhlYWRlckNvbXBvbmVudD47XG5cbiAgICAvKiogU3RyZWFtIG9mIGFuaW1hdGlvbiBgZG9uZWAgZXZlbnRzIHdoZW4gdGhlIGJvZHkgZXhwYW5kcy9jb2xsYXBzZXMuICovXG4gICAgX2FuaW1hdGlvbkRvbmUgPSBuZXcgU3ViamVjdDxBbmltYXRpb25FdmVudD4oKTtcblxuICAgIC8qKiBTdGVwcyB0aGF0IHRoZSBzdGVwcGVyIGhvbGRzLiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oV2l6YXJkU3RlcFYyQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgZGVjbGFyZSBfc3RlcHM6IFF1ZXJ5TGlzdDxXaXphcmRTdGVwVjJDb21wb25lbnQ+O1xuXG4gICAgLyoqIFRoZSBzdGVwIHRoYXQgaXMgc2VsZWN0ZWQuICovXG4gICAgQElucHV0KClcbiAgICBnZXQgc2VsZWN0ZWQoKTogV2l6YXJkU3RlcFYyQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHMudG9BcnJheSgpW1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4XG4gICAgICAgIF0gYXMgV2l6YXJkU3RlcFYyQ29tcG9uZW50O1xuICAgIH1cblxuICAgIHNldCBzZWxlY3RlZChzdGVwOiBXaXphcmRTdGVwVjJDb21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gdGhpcy5zdGVwc1xuICAgICAgICAgICAgPyB0aGlzLnN0ZXBzLnRvQXJyYXkoKS5pbmRleE9mKHN0ZXApXG4gICAgICAgICAgICA6IC0xO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnN0YXRlICYmIGNoYW5nZXMuc3RhdGUuY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gY2hhbmdlcy5zdGF0ZS5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdGVwcy5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShzdGFydFdpdGgodGhpcy5fc3RlcHMpLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHN0ZXBzOiBRdWVyeUxpc3Q8V2l6YXJkU3RlcFYyQ29tcG9uZW50PikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcHMucmVzZXQoXG4gICAgICAgICAgICAgICAgICAgIHN0ZXBzLmZpbHRlcigoc3RlcCkgPT4gc3RlcC5fc3RlcHBlciA9PT0gdGhpcylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcHNBcnJheSA9IHRoaXMuc3RlcHMudG9BcnJheSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcHMubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJZHMoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc3RlcHMuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3N0YXRlQ2hhbmdlZCgpKTtcblxuICAgICAgICB0aGlzLl9hbmltYXRpb25Eb25lXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAvLyBUaGlzIG5lZWRzIGEgYGRpc3RpbmN0VW50aWxDaGFuZ2VkYCBpbiBvcmRlciB0byBhdm9pZCBlbWl0dGluZyB0aGUgc2FtZSBldmVudCB0d2ljZSBkdWVcbiAgICAgICAgICAgICAgICAvLyB0byBhIGJ1ZyBpbiBhbmltYXRpb25zIHdoZXJlIHRoZSBgLmRvbmVgIGNhbGxiYWNrIGdldHMgaW52b2tlZCB0d2ljZSBvbiBzb21lIGJyb3dzZXJzLlxuICAgICAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8yNDA4NFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKFxuICAgICAgICAgICAgICAgICAgICAoeCwgeSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHguZnJvbVN0YXRlID09PSB5LmZyb21TdGF0ZSAmJiB4LnRvU3RhdGUgPT09IHkudG9TdGF0ZVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKChldmVudC50b1N0YXRlIGFzIFN0ZXBDb250ZW50UG9zaXRpb25TdGF0ZSkgPT09IFwiY3VycmVudFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uRG9uZS5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGU/LmZpbmlzaGVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maW5pc2hlZC5lbWl0KHtcbiAgICAgICAgICAgIGZpbmlzaGVkOiB0aGlzLmFsbFN0ZXBzQ29tcGxldGVkLFxuICAgICAgICB9KTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFsbFN0ZXBzQ29tcGxldGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjb21wbGV0ZWQ6IGJvb2xlYW4gPSB0aGlzLnN0ZXBzXG4gICAgICAgICAgICAudG9BcnJheSgpXG4gICAgICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgICAgIChhY2M6IGJvb2xlYW4sIHN0ZXA6IFdpemFyZFN0ZXBWMkNvbXBvbmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgYWNjICYmIHN0ZXAuY29tcGxldGVkLFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGNvbXBsZXRlZDtcbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlcyB0aGUgY29tcGxldGVkIHdpemFyZCB0byB0aGUgbGFzdCBzdGVwXG4gICAgcHJpdmF0ZSByZXN0b3JlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0ZXBzLnRvQXJyYXkoKS5mb3JFYWNoKChzdGVwKSA9PiB7XG4gICAgICAgICAgICBzdGVwLmNvbXBsZXRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChzdGVwID09PSB0aGlzLnN0ZXBzLmxhc3QpIHtcbiAgICAgICAgICAgICAgICBzdGVwLnNlbGVjdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzW1wiX2NoYW5nZURldGVjdG9yUmVmXCJdLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldElkcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sYWJlbElkcyA9IHRoaXMuc3RlcHNBcnJheS5tYXAoKHN0ZXAsIGluZGV4KSA9PlxuICAgICAgICAgICAgdGhpcy5fZ2V0U3RlcExhYmVsSWQoaW5kZXgpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3RlcENvbnRlbnRJZHMgPSB0aGlzLnN0ZXBzQXJyYXkubWFwKChzdGVwLCBpbmRleCkgPT5cbiAgICAgICAgICAgIHRoaXMuX2dldFN0ZXBDb250ZW50SWQoaW5kZXgpXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19