@nova-ui/dashboards
Version:
Nova Dashboards is a framework designed to provide feature developers with a common solution for presenting data coming from various sources within a single view, as well as a set of predefined widget visualizations that are 100% configuration-driven and
354 lines • 73.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 { ScrollDispatcher } from "@angular/cdk/overlay";
import { ChangeDetectorRef, Component, ComponentFactoryResolver, ContentChildren, EventEmitter, Input, Output, QueryList, ViewChild, ViewChildren, ViewContainerRef, } from "@angular/core";
import find from "lodash/find";
import findIndex from "lodash/findIndex";
import isUndefined from "lodash/isUndefined";
import { BehaviorSubject } from "rxjs";
import { LoggerService } from "@nova-ui/bits";
import { DashwizStepComponent } from "../dashwiz-step/dashwiz-step.component";
import { DashwizButtonsComponent } from "./dashwiz-buttons.component";
import { DashwizService } from "./dashwiz.service";
import * as i0 from "@angular/core";
import * as i1 from "@nova-ui/bits";
import * as i2 from "./dashwiz.service";
import * as i3 from "@angular/cdk/overlay";
import * as i4 from "@angular/common";
import * as i5 from "@angular/cdk/portal";
import * as i6 from "../../../../pizzagna/directives/component-portal/component-portal.directive";
/**
* Component that provides wizard functionality.
*/
export class DashwizComponent {
static { this.placeholderFinishText = "Action"; } // as a placeholder "Action" does not need to be i18n
constructor(changeDetector, componentFactoryResolver, logger, dashwizService, scrollDispatcher) {
this.changeDetector = changeDetector;
this.componentFactoryResolver = componentFactoryResolver;
this.logger = logger;
this.dashwizService = dashwizService;
this.scrollDispatcher = scrollDispatcher;
/**
* Set to true to hide the wizard header including the step breadcrumbs.
* (default: false)
*/
this.hideHeader = false;
/**
* Set to true to show the "Next" button at any point during the wizard process.
* (default: false)
*/
this.canProceed = false;
/**
* Set to true to show the "Finish" button at any point during the wizard process.
* (default: false)
*/
this.canFinish = false;
/**
* Overrides the default text on the finish step button.
* (default: 'Action')
*/
this.finishText = DashwizComponent.placeholderFinishText;
/**
* Use this to stretch lines between step labels according to largest label width.
* (default: false)
*/
this.stretchStepLines = false;
/**
* Evaluated when a step is selected.
*/
this.stepNavigated = new EventEmitter();
/**
* Evaluated when the user attempts to cancel the wizard.
*/
this.cancel = new EventEmitter();
/**
* Evaluated when the user completes the wizard.
*/
this.finish = new EventEmitter();
/**
* Emits when next button is clicked.
*/
this.next = new EventEmitter();
/**
* Emits when Back button is clicked.
*/
this.back = new EventEmitter();
/**
* Use this BehaviorSubject to control navigability between steps
*/
this.navigationControl = new BehaviorSubject({
busyState: { busy: false },
allowStepChange: true,
});
this.stepLineWidth = 65;
this.scrolled = false;
this.previousStepIndex = 0;
this.onBack = () => {
if (!isUndefined(this.stepIndex)) {
let previousStep = this.arraySteps[this.stepIndex - 1];
if (previousStep.hidden || previousStep.disabled) {
previousStep = find(this.arraySteps.slice(0).reverse(), (step) => !step.hidden, findIndex(this.arraySteps.slice(0).reverse(), this.arraySteps[this.stepIndex]) + 1);
}
this.selectStep(previousStep);
this.back.emit();
}
};
this.onNext = () => {
let nextStep = this.arraySteps[this.stepIndex + 1];
this.handleStepControl(this.currentStep);
this.currentStep.nextStep({
currentStepIndex: this.stepIndex,
currentStep: this.currentStep,
previousStep: this.currentStep,
previousStepIndex: this.stepIndex,
});
if (nextStep.hidden ||
(nextStep.disabled && !isUndefined(nextStep.stepControl))) {
// this disabled does not let user to go forward when next is disabled. Needs to be changed after validation
nextStep = find(this.arraySteps, (step) => !step.hidden, this.stepIndex + 1);
}
if (isUndefined(this.currentStep.stepControl) ||
this.currentStep.stepControl) {
this.currentStep.complete = true;
}
if (nextStep.disabled && !nextStep.visited) {
this.currentStep.complete = false;
}
this.selectStep(nextStep);
this.next.emit();
};
this.onFinish = () => {
this.finish.emit();
};
this.onCancel = () => {
this.cancel.emit(this.steps.toArray().filter((step) => step.complete).length !== 0);
};
// eslint-disable-next-line @typescript-eslint/member-ordering
this.buttonPortalActionMap = {
cancel: this.onCancel,
next: this.onNext,
back: this.onBack,
finish: this.onFinish,
};
if (dashwizService) {
dashwizService.component = this;
}
}
ngOnInit() {
this.scrollDispatcher.scrolled().subscribe((event) => {
const element = event?.getElementRef()?.nativeElement;
if (element?.classList?.contains("configurator-scrollable")) {
this.scrolled = !!element?.scrollTop;
}
});
this.buttonComponentTypes = this.buttonComponentTypes || [
DashwizButtonsComponent.lateLoadKey,
];
if (this.finishText === DashwizComponent.placeholderFinishText) {
this.logger
.warn(`DashwizComponent input "finishText" is using placeholder text
"${DashwizComponent.placeholderFinishText}". A value should be specified.`);
}
}
ngDoCheck() {
if (this.currentStep) {
this.buttonProperties = {
busy: this.currentStep.busyConfig.busy,
canProceed: this.canProceed,
canFinish: this.canFinish,
isLastStepActive: this.steps.last.active,
isFirstStepActive: this.steps.first.active,
nextText: this.currentStep.nextText,
finishText: this.finishText,
};
}
}
ngAfterContentInit() {
const activeTabs = this.steps.filter((item) => item.active);
this.arraySteps = this.steps.toArray();
if (activeTabs.length === 0) {
this.currentStep = this.steps.first;
this.selectStep(this.currentStep);
this.changeDetector.detectChanges();
}
this.steps.toArray().forEach((step) => {
step.valid.subscribe((event) => {
if (!isUndefined(event)) {
this.handleStepControl(step);
}
});
});
this.navigationControl.subscribe((value) => {
this.currentStep.busyConfig = value.busyState;
if (value.allowStepChange &&
!isUndefined(this.futureStep) &&
this.currentStep !== this.futureStep) {
this.enterAnotherStep();
this.futureStep = undefined;
}
});
}
ngAfterViewChecked() {
if (this.stretchStepLines) {
this.stepLineWidth = Math.round(this.getLargestLabelWidth() / 2);
this.changeDetector.detectChanges();
}
}
ngOnDestroy() {
this.steps
.toArray()
.forEach((step) => step.valid.unsubscribe());
this.navigationControl.unsubscribe();
this.dashwizService.component = undefined;
}
addStepDynamic(wizardStep, indexToInsert) {
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(DashwizStepComponent);
const componentRef = this.dynamicStep.createComponent(componentFactory);
const instance = componentRef.instance;
instance.stepTemplate = wizardStep.stepTemplate;
this.arraySteps.splice(indexToInsert, 0, componentRef.instance);
this.steps.reset(this.arraySteps);
return componentRef.instance;
}
disableStep(step) {
const indexOfStep = this.arraySteps.indexOf(step);
const toDisable = this.arraySteps[indexOfStep];
toDisable.disabled = true;
this.changeDetector.detectChanges();
}
enableStep(step) {
const indexOfStep = this.arraySteps.indexOf(step);
const toDisable = this.arraySteps[indexOfStep];
toDisable.disabled = false;
this.changeDetector.detectChanges();
}
hideStep(step) {
const indexOfStep = this.arraySteps.indexOf(step);
const toHide = this.arraySteps[indexOfStep];
toHide.hidden = true;
}
showStep(step) {
const indexOfStep = this.arraySteps.indexOf(step);
const visibleStep = this.arraySteps[indexOfStep];
visibleStep.hidden = false;
}
goToStep(stepIndex) {
this.selectStep(this.arraySteps[stepIndex]);
}
selectStep(step) {
if (!step.disabled) {
this.futureStep = step;
this.currentStep.exitStep({
currentStepIndex: this.arraySteps.indexOf(this.futureStep),
currentStep: this.futureStep,
previousStep: this.arraySteps[this.stepIndex],
previousStepIndex: this.stepIndex,
});
if (this.navigationControl.value.allowStepChange) {
this.enterAnotherStep();
}
}
}
enterAnotherStep() {
this.currentStep.applyExitingStep();
this.futureStep?.enterStep();
if (this.futureStep) {
this.currentStep = this.futureStep;
}
this.currentStep.applyEnteringStep();
this.stepIndex = this.arraySteps.indexOf(this.currentStep);
this.stepNavigatedEvent = {
currentStepIndex: this.stepIndex,
currentStep: this.currentStep,
previousStep: this.arraySteps[this.previousStepIndex],
previousStepIndex: this.previousStepIndex,
};
this.stepNavigated.emit(this.stepNavigatedEvent);
this.previousStepIndex = this.stepIndex;
}
onButtonPortalOutput(event) {
// @ts-ignore
this.buttonPortalActionMap[event.id]?.();
}
disableFollowingSteps() {
this.arraySteps.slice(this.stepIndex + 1).map((item) => {
item.disabled = true;
});
}
enableFollowingSteps() {
this.arraySteps.slice(this.stepIndex + 1).map((item) => {
item.disabled = false;
});
}
handleStepControl(step) {
if (!isUndefined(step.stepControl)) {
if (step.stepControl) {
this.enableFollowingSteps();
}
else {
this.disableFollowingSteps();
}
}
}
getLargestLabelWidth() {
const widths = this.stepTitles.map((title) => title.nativeElement.offsetWidth);
return Math.round(Math.max(...widths));
}
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DashwizComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ComponentFactoryResolver }, { token: i1.LoggerService }, { token: i2.DashwizService }, { token: i3.ScrollDispatcher }], target: i0.ɵɵFactoryTarget.Component }); }
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DashwizComponent, selector: "nui-dashwiz", inputs: { hideHeader: "hideHeader", canProceed: "canProceed", canFinish: "canFinish", finishText: "finishText", stretchStepLines: "stretchStepLines", buttonComponentTypes: "buttonComponentTypes", navigationControl: "navigationControl" }, outputs: { stepNavigated: "stepNavigated", cancel: "cancel", finish: "finish", next: "next", back: "back" }, host: { classAttribute: "flex-grow-1 overflow-auto" }, queries: [{ propertyName: "steps", predicate: DashwizStepComponent }], viewQueries: [{ propertyName: "dynamicStep", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }, { propertyName: "stepTitles", predicate: ["stepTitle"], descendants: true }], ngImport: i0, template: "<div class=\"nui-dashwiz d-flex flex-column h-100\">\n <div\n class=\"nui-dashwiz__header\"\n *ngIf=\"!hideHeader\"\n [class.nui-dashwiz__header--lines-stretched]=\"stretchStepLines\"\n >\n <ul class=\"nui-dashwiz__header-steps\" *ngIf=\"steps\">\n <li\n *ngFor=\"let step of steps; let first = first; let last = last\"\n (click)=\"selectStep(step)\"\n [ngClass]=\"{\n 'nui-dashwiz__header-step--first': first,\n 'nui-dashwiz__header-step--last': last,\n 'nui-dashwiz__header-step--visited': step.visited,\n 'nui-dashwiz__header-step--disabled':\n step.disabled ||\n !step.visited ||\n currentStep.busyConfig.busy,\n 'nui-dashwiz__header-step--active': step.active,\n 'nui-dashwiz__header-step--complete': step.complete\n }\"\n class=\"nui-dashwiz__header-step\"\n >\n <div\n class=\"nui-dashwiz__header-step-container\"\n *ngIf=\"!step.hidden\"\n >\n <div class=\"nui-dashwiz__header-step-row\">\n <div class=\"nui-dashwiz__header-step-col\">\n <div class=\"nui-dashwiz__header-step-content\">\n <span class=\"nui-dashwiz__header-step-link\">\n <span\n class=\"nui-dashwiz__header-step-title\"\n #stepTitle\n >\n {{ step.title }}\n </span>\n <div\n class=\"nui-dashwiz__header-step-link-container\"\n >\n <div\n class=\"nui-dashwiz__header-step-col nui-dashwiz__header-step-col-right\"\n >\n <div\n class=\"nui-dashwiz__header-step-line\"\n [ngStyle]=\"{\n 'min-width.px':\n stepLineWidth\n }\"\n ></div>\n </div>\n <nui-icon\n [icon]=\"step.icon\"\n [iconColor]=\"step.iconColor\"\n ></nui-icon>\n <div\n class=\"nui-dashwiz__header-step-col nui-dashwiz__header-step-col-left\"\n >\n <div\n class=\"nui-dashwiz__header-step-line\"\n [ngStyle]=\"{\n 'min-width.px':\n stepLineWidth\n }\"\n ></div>\n </div>\n </div>\n </span>\n </div>\n </div>\n </div>\n </div>\n </li>\n </ul>\n </div>\n\n <div class=\"flex-grow-1 overflow-auto\">\n <ng-content></ng-content>\n <ng-template #container></ng-template>\n </div>\n\n <div\n class=\"nui-dashwiz__footer\"\n [class.shadow]=\"scrolled\"\n >\n <ng-container\n nuiComponentPortal\n componentId=\"dashwizButtons\"\n [componentType]=\"\n buttonComponentTypes.length === 1\n ? buttonComponentTypes[0]\n : buttonComponentTypes[stepIndex]\n \"\n [properties]=\"buttonProperties\"\n [outputs]=\"['cancel', 'next', 'back', 'finish']\"\n (output)=\"onButtonPortalOutput($event)\"\n #componentPortal=\"nuiComponentPortal\"\n >\n <ng-template\n [cdkPortalOutlet]=\"componentPortal.portal\"\n (attached)=\"componentPortal.attached($event)\"\n ></ng-template>\n </ng-container>\n </div>\n</div>\n", styles: [".nui-dashwiz__header{padding:10px 15px;background-color:var(--nui-color-bg-secondary,#fafafa);border-bottom:1px solid #d9d9d9;border-bottom:1px solid var(--nui-color-line-default, #d9d9d9);overflow:hidden;text-align:center;display:flex;justify-content:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.nui-dashwiz__header-steps{margin-bottom:0;white-space:nowrap;display:inline-flex}.nui-dashwiz__header-step{line-height:normal;display:inline-flex;cursor:pointer}.nui-dashwiz__header-step--disabled{pointer-events:none;cursor:default}.nui-dashwiz__header-step--visited .nui-dashwiz__header-step-link{color:var(--nui-color-text-link,#0079aa)}.nui-dashwiz__header-step--visited .nui-dashwiz__header-step-link:hover{text-decoration:underline}.nui-dashwiz__header-step--visited .nui-dashwiz__header-step-col-right>.nui-dashwiz__header-step-line{border-color:var(--nui-color-line-active,#0079aa)}.nui-dashwiz__header-step--first .nui-dashwiz__header-step-col-right,.nui-dashwiz__header-step--last .nui-dashwiz__header-step-col-left{border-color:transparent;opacity:0}.nui-dashwiz__header-step--active{cursor:default}.nui-dashwiz__header-step--active .nui-dashwiz__header-step-link{color:var(--nui-color-bg-dark,#111)}.nui-dashwiz__header-step--active .nui-dashwiz__header-step-link:hover .nui-dashwiz__header-step-title{text-decoration:none}.nui-dashwiz__header-step--active .nui-dashwiz__header-step-link .nui-dashwiz__header-step-col-right>.nui-dashwiz__header-step-line{border-color:var(--nui-color-line-active,#0079aa)}.nui-dashwiz__header-step--complete .nui-dashwiz__header-step-link .nui-dashwiz__header-step-col-left>.nui-dashwiz__header-step-line{border-color:var(--nui-color-line-active,#0079aa)}.nui-dashwiz__header-step--complete .nui-dashwiz__header-step-link .nui-dashwiz__header-step-col-right>.nui-dashwiz__header-step-line{border-color:var(--nui-color-line-active,#0079aa)}.nui-dashwiz__header-step-container{display:inline-table;width:100%}.nui-dashwiz__header-step-container-bottom{display:none}.nui-dashwiz__header-step-container-bottom .nui-dashwiz__header-step-title{width:100%;max-width:100%;margin:0}.nui-dashwiz__header-step-row{display:table-row}.nui-dashwiz__header-step-col{display:table-cell;vertical-align:middle}.nui-dashwiz__header-step-col .nui-dashwiz__header-step-line{border-color:var(--nui-color-line-default,#d9d9d9)}.nui-dashwiz__header-step-col-right .nui-dashwiz__header-step-line{margin-right:-1px}.nui-dashwiz__header-step-line{border-bottom:solid 2px;height:2px}.nui-dashwiz__header-step-link{color:var(--nui-color-text-secondary,rgba(17, 17, 17, .6));transition:color .3s}.nui-dashwiz__header-step-link-container{display:flex;align-content:baseline;justify-content:center;align-items:center}.nui-dashwiz__header-step-title{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;vertical-align:middle;display:inline-block;max-width:140px;margin:0 0 5px;text-decoration:inherit}.nui-dashwiz__header.nui-dashwiz__header--lines-stretched .nui-dashwiz__header-step-title{max-width:unset}.nui-dashwiz__footer{z-index:1080;background-color:var(--nui-color-bg-content,#fff);border-top:solid 1px var(--nui-color-line-default, #d9d9d9);transition:box-shadow .3s ease-in-out}.nui-dashwiz__footer.shadow{box-shadow:0 0 5px 0 var(--nui-shadow-color-stronger, rgba(17, 17, 17, .6))}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: i6.ComponentPortalDirective, selector: "[nuiComponentPortal]", inputs: ["componentId", "componentType", "properties", "providers", "outputs"], outputs: ["output"], exportAs: ["nuiComponentPortal"] }, { kind: "component", type: i1.IconComponent, selector: "nui-icon", inputs: ["iconColor", "brushType", "iconHoverColor", "iconSize", "cssClass", "fillContainer", "status", "childStatus", "icon", "counter"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DashwizComponent, decorators: [{
type: Component,
args: [{ selector: "nui-dashwiz", host: { class: "flex-grow-1 overflow-auto" }, template: "<div class=\"nui-dashwiz d-flex flex-column h-100\">\n <div\n class=\"nui-dashwiz__header\"\n *ngIf=\"!hideHeader\"\n [class.nui-dashwiz__header--lines-stretched]=\"stretchStepLines\"\n >\n <ul class=\"nui-dashwiz__header-steps\" *ngIf=\"steps\">\n <li\n *ngFor=\"let step of steps; let first = first; let last = last\"\n (click)=\"selectStep(step)\"\n [ngClass]=\"{\n 'nui-dashwiz__header-step--first': first,\n 'nui-dashwiz__header-step--last': last,\n 'nui-dashwiz__header-step--visited': step.visited,\n 'nui-dashwiz__header-step--disabled':\n step.disabled ||\n !step.visited ||\n currentStep.busyConfig.busy,\n 'nui-dashwiz__header-step--active': step.active,\n 'nui-dashwiz__header-step--complete': step.complete\n }\"\n class=\"nui-dashwiz__header-step\"\n >\n <div\n class=\"nui-dashwiz__header-step-container\"\n *ngIf=\"!step.hidden\"\n >\n <div class=\"nui-dashwiz__header-step-row\">\n <div class=\"nui-dashwiz__header-step-col\">\n <div class=\"nui-dashwiz__header-step-content\">\n <span class=\"nui-dashwiz__header-step-link\">\n <span\n class=\"nui-dashwiz__header-step-title\"\n #stepTitle\n >\n {{ step.title }}\n </span>\n <div\n class=\"nui-dashwiz__header-step-link-container\"\n >\n <div\n class=\"nui-dashwiz__header-step-col nui-dashwiz__header-step-col-right\"\n >\n <div\n class=\"nui-dashwiz__header-step-line\"\n [ngStyle]=\"{\n 'min-width.px':\n stepLineWidth\n }\"\n ></div>\n </div>\n <nui-icon\n [icon]=\"step.icon\"\n [iconColor]=\"step.iconColor\"\n ></nui-icon>\n <div\n class=\"nui-dashwiz__header-step-col nui-dashwiz__header-step-col-left\"\n >\n <div\n class=\"nui-dashwiz__header-step-line\"\n [ngStyle]=\"{\n 'min-width.px':\n stepLineWidth\n }\"\n ></div>\n </div>\n </div>\n </span>\n </div>\n </div>\n </div>\n </div>\n </li>\n </ul>\n </div>\n\n <div class=\"flex-grow-1 overflow-auto\">\n <ng-content></ng-content>\n <ng-template #container></ng-template>\n </div>\n\n <div\n class=\"nui-dashwiz__footer\"\n [class.shadow]=\"scrolled\"\n >\n <ng-container\n nuiComponentPortal\n componentId=\"dashwizButtons\"\n [componentType]=\"\n buttonComponentTypes.length === 1\n ? buttonComponentTypes[0]\n : buttonComponentTypes[stepIndex]\n \"\n [properties]=\"buttonProperties\"\n [outputs]=\"['cancel', 'next', 'back', 'finish']\"\n (output)=\"onButtonPortalOutput($event)\"\n #componentPortal=\"nuiComponentPortal\"\n >\n <ng-template\n [cdkPortalOutlet]=\"componentPortal.portal\"\n (attached)=\"componentPortal.attached($event)\"\n ></ng-template>\n </ng-container>\n </div>\n</div>\n", styles: [".nui-dashwiz__header{padding:10px 15px;background-color:var(--nui-color-bg-secondary,#fafafa);border-bottom:1px solid #d9d9d9;border-bottom:1px solid var(--nui-color-line-default, #d9d9d9);overflow:hidden;text-align:center;display:flex;justify-content:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.nui-dashwiz__header-steps{margin-bottom:0;white-space:nowrap;display:inline-flex}.nui-dashwiz__header-step{line-height:normal;display:inline-flex;cursor:pointer}.nui-dashwiz__header-step--disabled{pointer-events:none;cursor:default}.nui-dashwiz__header-step--visited .nui-dashwiz__header-step-link{color:var(--nui-color-text-link,#0079aa)}.nui-dashwiz__header-step--visited .nui-dashwiz__header-step-link:hover{text-decoration:underline}.nui-dashwiz__header-step--visited .nui-dashwiz__header-step-col-right>.nui-dashwiz__header-step-line{border-color:var(--nui-color-line-active,#0079aa)}.nui-dashwiz__header-step--first .nui-dashwiz__header-step-col-right,.nui-dashwiz__header-step--last .nui-dashwiz__header-step-col-left{border-color:transparent;opacity:0}.nui-dashwiz__header-step--active{cursor:default}.nui-dashwiz__header-step--active .nui-dashwiz__header-step-link{color:var(--nui-color-bg-dark,#111)}.nui-dashwiz__header-step--active .nui-dashwiz__header-step-link:hover .nui-dashwiz__header-step-title{text-decoration:none}.nui-dashwiz__header-step--active .nui-dashwiz__header-step-link .nui-dashwiz__header-step-col-right>.nui-dashwiz__header-step-line{border-color:var(--nui-color-line-active,#0079aa)}.nui-dashwiz__header-step--complete .nui-dashwiz__header-step-link .nui-dashwiz__header-step-col-left>.nui-dashwiz__header-step-line{border-color:var(--nui-color-line-active,#0079aa)}.nui-dashwiz__header-step--complete .nui-dashwiz__header-step-link .nui-dashwiz__header-step-col-right>.nui-dashwiz__header-step-line{border-color:var(--nui-color-line-active,#0079aa)}.nui-dashwiz__header-step-container{display:inline-table;width:100%}.nui-dashwiz__header-step-container-bottom{display:none}.nui-dashwiz__header-step-container-bottom .nui-dashwiz__header-step-title{width:100%;max-width:100%;margin:0}.nui-dashwiz__header-step-row{display:table-row}.nui-dashwiz__header-step-col{display:table-cell;vertical-align:middle}.nui-dashwiz__header-step-col .nui-dashwiz__header-step-line{border-color:var(--nui-color-line-default,#d9d9d9)}.nui-dashwiz__header-step-col-right .nui-dashwiz__header-step-line{margin-right:-1px}.nui-dashwiz__header-step-line{border-bottom:solid 2px;height:2px}.nui-dashwiz__header-step-link{color:var(--nui-color-text-secondary,rgba(17, 17, 17, .6));transition:color .3s}.nui-dashwiz__header-step-link-container{display:flex;align-content:baseline;justify-content:center;align-items:center}.nui-dashwiz__header-step-title{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;vertical-align:middle;display:inline-block;max-width:140px;margin:0 0 5px;text-decoration:inherit}.nui-dashwiz__header.nui-dashwiz__header--lines-stretched .nui-dashwiz__header-step-title{max-width:unset}.nui-dashwiz__footer{z-index:1080;background-color:var(--nui-color-bg-content,#fff);border-top:solid 1px var(--nui-color-line-default, #d9d9d9);transition:box-shadow .3s ease-in-out}.nui-dashwiz__footer.shadow{box-shadow:0 0 5px 0 var(--nui-shadow-color-stronger, rgba(17, 17, 17, .6))}\n"] }]
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ComponentFactoryResolver }, { type: i1.LoggerService }, { type: i2.DashwizService }, { type: i3.ScrollDispatcher }], propDecorators: { steps: [{
type: ContentChildren,
args: [DashwizStepComponent]
}], stepTitles: [{
type: ViewChildren,
args: ["stepTitle"]
}], dynamicStep: [{
type: ViewChild,
args: ["container", { read: ViewContainerRef }]
}], hideHeader: [{
type: Input
}], canProceed: [{
type: Input
}], canFinish: [{
type: Input
}], finishText: [{
type: Input
}], stretchStepLines: [{
type: Input
}], buttonComponentTypes: [{
type: Input
}], stepNavigated: [{
type: Output
}], cancel: [{
type: Output
}], finish: [{
type: Output
}], next: [{
type: Output
}], back: [{
type: Output
}], navigationControl: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaHdpei5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbmZpZ3VyYXRvci9jb21wb25lbnRzL3dpemFyZC9kYXNod2l6L2Rhc2h3aXouY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb25maWd1cmF0b3IvY29tcG9uZW50cy93aXphcmQvZGFzaHdpei9kYXNod2l6LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw0REFBNEQ7QUFDNUQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFDdkQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUVqQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBR0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCx3QkFBd0IsRUFDeEIsZUFBZSxFQUdmLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxTQUFTLE1BQU0sa0JBQWtCLENBQUM7QUFDekMsT0FBTyxXQUFXLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQXVCLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQU85RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7O0FBR25EOztHQUVHO0FBT0gsTUFBTSxPQUFPLGdCQUFnQjthQVFWLDBCQUFxQixHQUFHLFFBQVEsQUFBWCxDQUFZLEdBQUMscURBQXFEO0lBOEV0RyxZQUNZLGNBQWlDLEVBQ2pDLHdCQUFrRCxFQUNsRCxNQUFxQixFQUNyQixjQUE4QixFQUM5QixnQkFBa0M7UUFKbEMsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQTVFOUM7OztXQUdHO1FBQ2EsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQzs7O1dBR0c7UUFDYSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25DOzs7V0FHRztRQUNhLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEM7OztXQUdHO1FBQ2EsZUFBVSxHQUFHLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDO1FBQ3BFOzs7V0FHRztRQUNhLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUtsRDs7V0FFRztRQUNjLGtCQUFhLEdBQzFCLElBQUksWUFBWSxFQUE4QixDQUFDO1FBQ25EOztXQUVHO1FBQ2MsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDdEQ7O1dBRUc7UUFDYyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3Qzs7V0FFRztRQUNjLFNBQUksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNDOztXQUVHO1FBQ2MsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0M7O1dBRUc7UUFDYSxzQkFBaUIsR0FDN0IsSUFBSSxlQUFlLENBQW9CO1lBQ25DLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7WUFDMUIsZUFBZSxFQUFFLElBQUk7U0FDeEIsQ0FBQyxDQUFDO1FBR0Esa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFHM0IsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUdoQixzQkFBaUIsR0FBRyxDQUFDLENBQUM7UUErSnZCLFdBQU0sR0FBRyxHQUFTLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQzlCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxZQUFZLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUU7b0JBQzlDLFlBQVksR0FBRyxJQUFJLENBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQ2xDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQ3RCLFNBQVMsQ0FDTCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQ2xDLEdBQUcsQ0FBQyxDQUNSLENBQUM7aUJBQ0w7Z0JBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNwQjtRQUNMLENBQUMsQ0FBQztRQUVLLFdBQU0sR0FBRyxHQUFTLEVBQUU7WUFDdkIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7Z0JBQ3RCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUNoQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDOUIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDcEMsQ0FBQyxDQUFDO1lBQ0gsSUFDSSxRQUFRLENBQUMsTUFBTTtnQkFDZixDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQzNEO2dCQUNFLDRHQUE0RztnQkFDNUcsUUFBUSxHQUFHLElBQUksQ0FDWCxJQUFJLENBQUMsVUFBVSxFQUNmLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUNyQixDQUFDO2FBQ0w7WUFDRCxJQUNJLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztnQkFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQzlCO2dCQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzthQUNwQztZQUNELElBQUksUUFBUSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzthQUNyQztZQUNELElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUM7UUFFSyxhQUFRLEdBQUcsR0FBUyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDO1FBRUssYUFBUSxHQUFHLEdBQVMsRUFBRTtZQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDWixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQ3BFLENBQUM7UUFDTixDQUFDLENBQUM7UUFFRiw4REFBOEQ7UUFDdkQsMEJBQXFCLEdBQTZCO1lBQ3JELE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUTtTQUN4QixDQUFDO1FBdE5FLElBQUksY0FBYyxFQUFFO1lBQ2hCLGNBQWMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQ25DO0lBQ0wsQ0FBQztJQUVNLFFBQVE7UUFDWCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDakQsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUFFLGFBQWEsRUFBRSxFQUFFLGFBQWEsQ0FBQztZQUV0RCxJQUFJLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLHlCQUF5QixDQUFDLEVBQUU7Z0JBQ3pELElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUM7YUFDeEM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLElBQUk7WUFDckQsdUJBQXVCLENBQUMsV0FBVztTQUN0QyxDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFO1lBQzVELElBQUksQ0FBQyxNQUFNO2lCQUNOLElBQUksQ0FBQztHQUNuQixnQkFBZ0IsQ0FBQyxxQkFBcUIsaUNBQWlDLENBQUMsQ0FBQztTQUNuRTtJQUNMLENBQUM7SUFFTSxTQUFTO1FBQ1osSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRztnQkFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUk7Z0JBQ3RDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNO2dCQUN4QyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO2dCQUMxQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRO2dCQUNuQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7YUFDOUIsQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUVNLGtCQUFrQjtRQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN2QyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN2QztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBMEIsRUFBRSxFQUFFO1lBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDaEM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FDNUIsQ0FBQyxLQUF1RCxFQUFFLEVBQUU7WUFDeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUM5QyxJQUNJLEtBQUssQ0FBQyxlQUFlO2dCQUNyQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUM3QixJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQ3RDO2dCQUNFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQzthQUMvQjtRQUNMLENBQUMsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVNLGtCQUFrQjtRQUNyQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDakUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN2QztJQUNMLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLEtBQUs7YUFDTCxPQUFPLEVBQUU7YUFDVCxPQUFPLENBQUMsQ0FBQyxJQUEwQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sY0FBYyxDQUNqQixVQUFpQyxFQUNqQyxhQUFxQjtRQUVyQixNQUFNLGdCQUFnQixHQUNsQixJQUFJLENBQUMsd0JBQXdCLENBQUMsdUJBQXVCLENBQ2pELG9CQUFvQixDQUN2QixDQUFDO1FBQ04sTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN4RSxNQUFNLFFBQVEsR0FBMEIsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUM5RCxRQUFRLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUNqQyxDQUFDO0lBRU0sV0FBVyxDQUFDLElBQTBCO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0MsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU0sVUFBVSxDQUFDLElBQTBCO1FBQ3hDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0MsU0FBUyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU0sUUFBUSxDQUFDLElBQTBCO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxJQUEwQjtRQUN0QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pELFdBQVcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFTSxRQUFRLENBQUMsU0FBaUI7UUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVNLFVBQVUsQ0FBQyxJQUEwQjtRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztnQkFDdEIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDMUQsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUM1QixZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUM3QyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUzthQUNwQyxDQUFDLENBQUM7WUFDSCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFO2dCQUM5QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzthQUMzQjtTQUNKO0lBQ0wsQ0FBQztJQXVFTSxnQkFBZ0I7UUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFFN0IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUN0QztRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsa0JBQWtCLEdBQUc7WUFDdEIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDaEMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUNyRCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1NBQzVDLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sb0JBQW9CLENBQUMsS0FBYTtRQUNyQyxhQUFhO1FBQ2IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVPLHFCQUFxQjtRQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25ELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25ELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGlCQUFpQixDQUFDLElBQTBCO1FBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ2hDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7YUFDL0I7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7YUFDaEM7U0FDSjtJQUNMLENBQUM7SUFFTyxvQkFBb0I7UUFDeEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQzlCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FDN0MsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO2tJQTFXUSxnQkFBZ0I7c0hBQWhCLGdCQUFnQiwyZEFVUixvQkFBb0Isa0hBR0wsZ0JBQWdCLDBHQ2hGcEQseXpKQXlHQTs7NEZEdENhLGdCQUFnQjtrQkFONUIsU0FBUzsrQkFDSSxhQUFhLFFBR2pCLEVBQUUsS0FBSyxFQUFFLDJCQUEyQixFQUFFO3FOQWE1QyxLQUFLO3NCQURKLGVBQWU7dUJBQUMsb0JBQW9CO2dCQUVWLFVBQVU7c0JBQXBDLFlBQVk7dUJBQUMsV0FBVztnQkFDMkIsV0FBVztzQkFBOUQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBTWxDLFVBQVU7c0JBQXpCLEtBQUs7Z0JBS1UsVUFBVTtzQkFBekIsS0FBSztnQkFLVSxTQUFTO3NCQUF4QixLQUFLO2dCQUtVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBS1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUlVLG9CQUFvQjtzQkFBbkMsS0FBSztnQkFJVyxhQUFhO3NCQUE3QixNQUFNO2dCQUtVLE1BQU07c0JBQXRCLE1BQU07Z0JBSVUsTUFBTTtzQkFBdEIsTUFBTTtnQkFJVSxJQUFJO3NCQUFwQixNQUFNO2dCQUlVLElBQUk7c0JBQXBCLE1BQU07Z0JBSVMsaUJBQWlCO3NCQUFoQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gwqkgMjAyMiBTb2xhcldpbmRzIFdvcmxkd2lkZSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vICBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7IFNjcm9sbERpc3BhdGNoZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERvQ2hlY2ssXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCBmaW5kIGZyb20gXCJsb2Rhc2gvZmluZFwiO1xuaW1wb3J0IGZpbmRJbmRleCBmcm9tIFwibG9kYXNoL2ZpbmRJbmRleFwiO1xuaW1wb3J0IGlzVW5kZWZpbmVkIGZyb20gXCJsb2Rhc2gvaXNVbmRlZmluZWRcIjtcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5cbmltcG9ydCB7IElCdXN5Q29uZmlnLCBJRXZlbnQsIExvZ2dlclNlcnZpY2UgfSBmcm9tIFwiQG5vdmEtdWkvYml0c1wiO1xuXG5pbXBvcnQgeyBEYXNod2l6U3RlcENvbXBvbmVudCB9IGZyb20gXCIuLi9kYXNod2l6LXN0ZXAvZGFzaHdpei1zdGVwLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtcbiAgICBJRGFzaHdpekJ1dHRvbnNDb21wb25lbnQsXG4gICAgSURhc2h3aXpTdGVwQ29tcG9uZW50LFxuICAgIElEYXNod2l6U3RlcE5hdmlnYXRlZEV2ZW50LFxuICAgIElEYXNod2l6V2FpdEV2ZW50LFxufSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IERhc2h3aXpCdXR0b25zQ29tcG9uZW50IH0gZnJvbSBcIi4vZGFzaHdpei1idXR0b25zLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgRGFzaHdpelNlcnZpY2UgfSBmcm9tIFwiLi9kYXNod2l6LnNlcnZpY2VcIjtcbmltcG9ydCB7IElEYXNod2l6Q29tcG9uZW50IH0gZnJvbSBcIi4vbW9kZWxcIjtcblxuLyoqXG4gKiBDb21wb25lbnQgdGhhdCBwcm92aWRlcyB3aXphcmQgZnVuY3Rpb25hbGl0eS5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6I