@nova-ui/bits
Version:
SolarWinds Nova Framework
124 lines • 17.5 kB
JavaScript
// © 2022 SolarWinds Worldwide, LLC. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
import { CdkStep, CdkStepper, STEPPER_GLOBAL_OPTIONS, } from "@angular/cdk/stepper";
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, forwardRef, Inject, Input, Optional, SkipSelf, TemplateRef, ViewEncapsulation, } from "@angular/core";
import { Subject } from "rxjs";
import { takeUntil } from "rxjs/operators";
import { ErrorStateMatcher } from "../error-state-matcher.provider";
import { WizardStepFooterDirective } from "../wizard-step-footer.directive";
import { WizardStepLabelDirective } from "../wizard-step-label.directive";
import * as i0 from "@angular/core";
import * as i1 from "../error-state-matcher.provider";
import * as i2 from "@angular/common";
/** @ignore */
export class WizardStepV2Component extends CdkStep {
constructor(changeDetectorRef, stepper, _errorStateMatcher, stepperOptions) {
super(stepper, stepperOptions);
this.changeDetectorRef = changeDetectorRef;
this._errorStateMatcher = _errorStateMatcher;
this.destroy$ = new Subject();
}
ngOnInit() {
this.onControlStatusChanges();
}
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}
/** Custom error state matcher that additionally checks for validity of interacted form. */
isErrorState(control, form) {
const originalErrorState = this._errorStateMatcher.isErrorState(control, form);
// Custom error state checks for the validity of form that is not submitted or touched
// since user can trigger a form change by calling for another step without directly
// interacting with the current form.
const customErrorState = !!(control?.invalid && this.interacted);
return originalErrorState || customErrorState;
}
onControlStatusChanges() {
if (this.stepControl) {
this.stepControl.statusChanges
.pipe(takeUntil(this.destroy$))
.subscribe((status) => {
if (status === "INVALID") {
this.completed = false;
}
if (status === "VALID") {
this.completed = true;
}
});
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WizardStepV2Component, deps: [{ token: i0.ChangeDetectorRef }, { token: forwardRef(() => CdkStepper) }, { token: i1.ErrorStateMatcher, skipSelf: true }, { token: STEPPER_GLOBAL_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: WizardStepV2Component, selector: "nui-wizard-step-v2", inputs: { template: "template", stepStateConfig: "stepStateConfig", stepIndex: "stepIndex" }, providers: [
{ provide: ErrorStateMatcher, useExisting: WizardStepV2Component },
{ provide: CdkStep, useExisting: WizardStepV2Component },
], queries: [{ propertyName: "stepLabel", first: true, predicate: WizardStepLabelDirective, descendants: true }, { propertyName: "stepFooter", first: true, predicate: WizardStepFooterDirective, descendants: true }], exportAs: ["nuiWizardStep"], usesInheritance: true, ngImport: i0, template: `
<ng-template>
<ng-content *ngIf="!template"></ng-content>
<ng-container *ngIf="template">
<ng-container *ngTemplateOutlet="template"></ng-container>
</ng-container>
</ng-template>
`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WizardStepV2Component, decorators: [{
type: Component,
args: [{
selector: "nui-wizard-step-v2",
exportAs: "nuiWizardStep",
template: `
<ng-template>
<ng-content *ngIf="!template"></ng-content>
<ng-container *ngIf="template">
<ng-container *ngTemplateOutlet="template"></ng-container>
</ng-container>
</ng-template>
`,
providers: [
{ provide: ErrorStateMatcher, useExisting: WizardStepV2Component },
{ provide: CdkStep, useExisting: WizardStepV2Component },
],
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush,
}]
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
type: Inject,
args: [forwardRef(() => CdkStepper)]
}] }, { type: i1.ErrorStateMatcher, decorators: [{
type: SkipSelf
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [STEPPER_GLOBAL_OPTIONS]
}] }], propDecorators: { template: [{
type: Input
}], stepStateConfig: [{
type: Input
}], stepIndex: [{
type: Input
}], stepLabel: [{
type: ContentChild,
args: [WizardStepLabelDirective]
}], stepFooter: [{
type: ContentChild,
args: [WizardStepFooterDirective]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLXN0ZXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi93aXphcmQtdjIvd2l6YXJkLXN0ZXAvd2l6YXJkLXN0ZXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw0REFBNEQ7QUFDNUQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFDdkQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUVqQixPQUFPLEVBQ0gsT0FBTyxFQUNQLFVBQVUsRUFFVixzQkFBc0IsR0FDekIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixRQUFRLEVBQ1IsV0FBVyxFQUNYLGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7OztBQUUxRSxjQUFjO0FBbUJkLE1BQU0sT0FBTyxxQkFDVCxTQUFRLE9BQU87SUFtQmYsWUFDWSxp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c0NvbnRlbnQiOlsiLy8gwqkgMjAyMiBTb2xhcldpbmRzIFdvcmxkd2lkZSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vICBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7XG4gICAgQ2RrU3RlcCxcbiAgICBDZGtTdGVwcGVyLFxuICAgIFN0ZXBwZXJPcHRpb25zLFxuICAgIFNURVBQRVJfR0xPQkFMX09QVElPTlMsXG59IGZyb20gXCJAYW5ndWxhci9jZGsvc3RlcHBlclwiO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgU2tpcFNlbGYsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwRGlyZWN0aXZlLCBOZ0Zvcm0gfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbmltcG9ydCB7IEVycm9yU3RhdGVNYXRjaGVyIH0gZnJvbSBcIi4uL2Vycm9yLXN0YXRlLW1hdGNoZXIucHJvdmlkZXJcIjtcbmltcG9ydCB7IFdpemFyZFN0ZXBTdGF0ZUNvbmZpZyB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgV2l6YXJkU3RlcEZvb3RlckRpcmVjdGl2ZSB9IGZyb20gXCIuLi93aXphcmQtc3RlcC1mb290ZXIuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBXaXphcmRTdGVwTGFiZWxEaXJlY3RpdmUgfSBmcm9tIFwiLi4vd2l6YXJkLXN0ZXAtbGFiZWwuZGlyZWN0aXZlXCI7XG5cbi8qKiBAaWdub3JlICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJudWktd2l6YXJkLXN0ZXAtdjJcIixcbiAgICBleHBvcnRBczogXCJudWlXaXphcmRTdGVwXCIsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgKm5nSWY9XCIhdGVtcGxhdGVcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIGAsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogRXJyb3JTdGF0ZU1hdGNoZXIsIHVzZUV4aXN0aW5nOiBXaXphcmRTdGVwVjJDb21wb25lbnQgfSxcbiAgICAgICAgeyBwcm92aWRlOiBDZGtTdGVwLCB1c2VFeGlzdGluZzogV2l6YXJkU3RlcFYyQ29tcG9uZW50IH0sXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBXaXphcmRTdGVwVjJDb21wb25lbnRcbiAgICBleHRlbmRzIENka1N0ZXBcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBFcnJvclN0YXRlTWF0Y2hlclxue1xuICAgIEBJbnB1dCgpIHRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBJbnB1dCgpIHN0ZXBTdGF0ZUNvbmZpZzogUGFydGlhbDxXaXphcmRTdGVwU3RhdGVDb25maWc+O1xuXG4gICAgQElucHV0KCkgc3RlcEluZGV4OiBudW1iZXI7XG5cbiAgICAvKiogQ29udGVudCBmb3Igc3RlcCBsYWJlbCBnaXZlbiBieSBgPG5nLXRlbXBsYXRlIHdpemFyZFN0ZXBMYWJlbD5gLiAqL1xuICAgIEBDb250ZW50Q2hpbGQoV2l6YXJkU3RlcExhYmVsRGlyZWN0aXZlKVxuICAgIGRlY2xhcmUgc3RlcExhYmVsOiBXaXphcmRTdGVwTGFiZWxEaXJlY3RpdmU7XG5cbiAgICAvKiogQ29udGVudCBmb3IgZm9vdGVyIGdpdmVuIGJ5IGA8bmctdGVtcGxhdGUgd2l6YXJkU3RlcEZvb3Rlcj5gLiAqL1xuICAgIEBDb250ZW50Q2hpbGQoV2l6YXJkU3RlcEZvb3RlckRpcmVjdGl2ZSlcbiAgICBzdGVwRm9vdGVyOiBXaXphcmRTdGVwRm9vdGVyRGlyZWN0aXZlO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBDZGtTdGVwcGVyKSkgc3RlcHBlcjogYW55LFxuICAgICAgICBAU2tpcFNlbGYoKSBwcml2YXRlIF9lcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXIsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBJbmplY3QoU1RFUFBFUl9HTE9CQUxfT1BUSU9OUylcbiAgICAgICAgc3RlcHBlck9wdGlvbnM/OiBTdGVwcGVyT3B0aW9uc1xuICAgICkge1xuICAgICAgICBzdXBlcihzdGVwcGVyLCBzdGVwcGVyT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ29udHJvbFN0YXR1c0NoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEN1c3RvbSBlcnJvciBzdGF0ZSBtYXRjaGVyIHRoYXQgYWRkaXRpb25hbGx5IGNoZWNrcyBmb3IgdmFsaWRpdHkgb2YgaW50ZXJhY3RlZCBmb3JtLiAqL1xuICAgIHB1YmxpYyBpc0Vycm9yU3RhdGUoXG4gICAgICAgIGNvbnRyb2w/OiBGb3JtQ29udHJvbCxcbiAgICAgICAgZm9ybT86IEZvcm1Hcm91cERpcmVjdGl2ZSB8IE5nRm9ybVxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBvcmlnaW5hbEVycm9yU3RhdGUgPSB0aGlzLl9lcnJvclN0YXRlTWF0Y2hlci5pc0Vycm9yU3RhdGUoXG4gICAgICAgICAgICBjb250cm9sLFxuICAgICAgICAgICAgZm9ybVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEN1c3RvbSBlcnJvciBzdGF0ZSBjaGVja3MgZm9yIHRoZSB2YWxpZGl0eSBvZiBmb3JtIHRoYXQgaXMgbm90IHN1Ym1pdHRlZCBvciB0b3VjaGVkXG4gICAgICAgIC8vIHNpbmNlIHVzZXIgY2FuIHRyaWdnZXIgYSBmb3JtIGNoYW5nZSBieSBjYWxsaW5nIGZvciBhbm90aGVyIHN0ZXAgd2l0aG91dCBkaXJlY3RseVxuICAgICAgICAvLyBpbnRlcmFjdGluZyB3aXRoIHRoZSBjdXJyZW50IGZvcm0uXG4gICAgICAgIGNvbnN0IGN1c3RvbUVycm9yU3RhdGUgPSAhIShjb250cm9sPy5pbnZhbGlkICYmIHRoaXMuaW50ZXJhY3RlZCk7XG5cbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsRXJyb3JTdGF0ZSB8fCBjdXN0b21FcnJvclN0YXRlO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Db250cm9sU3RhdHVzQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3RlcENvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuc3RlcENvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0dXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJJTlZBTElEXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSBcIlZBTElEXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19