UNPKG

@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
// © 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaHdpei5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbmZpZ3VyYXRvci9jb21wb25lbnRzL3dpemFyZC9kYXNod2l6L2Rhc2h3aXouY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb25maWd1cmF0b3IvY29tcG9uZW50cy93aXphcmQvZGFzaHdpei9kYXNod2l6LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw0REFBNEQ7QUFDNUQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFDdkQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUVqQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBR0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCx3QkFBd0IsRUFDeEIsZUFBZSxFQUdmLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxTQUFTLE1BQU0sa0JBQWtCLENBQUM7QUFDekMsT0FBTyxXQUFXLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQXVCLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFP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LEVBQUUsZ0JBQWdCLEVBQUU7Z0JBTWxDLFVBQVU7c0JBQXpCLEtBQUs7Z0JBS1UsVUFBVTtzQkFBekIsS0FBSztnQkFLVSxTQUFTO3NCQUF4QixLQUFLO2dCQUtVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBS1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUlVLG9CQUFvQjtzQkFBbkMsS0FBSztnQkFJVyxhQUFhO3NCQUE3QixNQUFNO2dCQUtVLE1BQU07c0JBQXRCLE1BQU07Z0JBSVUsTUFBTTtzQkFBdEIsTUFBTTtnQkFJVSxJQUFJO3NCQUFwQixNQUFNO2dCQUlVLElBQUk7c0JBQXBCLE1BQU07Z0JBSVMsaUJBQWlCO3NCQUFoQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gwqkgMjAyMiBTb2xhcldpbmRzIFdvcmxkd2lkZSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vICBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7IFNjcm9sbERpc3BhdGNoZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERvQ2hlY2ssXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCBmaW5kIGZyb20gXCJsb2Rhc2gvZmluZFwiO1xuaW1wb3J0IGZpbmRJbmRleCBmcm9tIFwibG9kYXNoL2ZpbmRJbmRleFwiO1xuaW1wb3J0IGlzVW5kZWZpbmVkIGZyb20gXCJsb2Rhc2gvaXNVbmRlZmluZWRcIjtcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5cbmltcG9ydCB7IElCdXN5Q29uZmlnLCBJRXZlbnQsIExvZ2dlclNlcnZpY2UgfSBmcm9tIFwiQG5vdmEtdWkvYml0c1wiO1xuXG5pbXBvcnQgeyBEYXNod2l6U3RlcENvbXBvbmVudCB9IGZyb20gXCIuLi9kYXNod2l6LXN0ZXAvZGFzaHdpei1zdGVwLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtcbiAgICBJRGFzaHdpekJ1dHRvbnNDb21wb25lbnQsXG4gICAgSURhc2h3aXpTdGVwQ29tcG9uZW50LFxuICAgIElEYXNod2l6U3RlcE5hdmlnYXRlZEV2ZW50LFxuICAgIElEYXNod2l6V2FpdEV2ZW50LFxufSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IERhc2h3aXpCdXR0b25zQ29tcG9uZW50IH0gZnJvbSBcIi4vZGFzaHdpei1idXR0b25zLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgRGFzaHdpelNlcnZpY2UgfSBmcm9tIFwiLi9kYXNod2l6LnNlcnZpY2VcIjtcbmltcG9ydCB7IElEYXNod2l6Q29tcG9uZW50IH0gZnJvbSBcIi4vbW9kZWxcIjtcblxuLyoqXG4gKiBDb21wb25lbnQgdGhhdCBwcm92aWRlcyB3aXphcmQgZnVuY3Rpb25hbGl0eS5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6I