UNPKG

@nova-ui/bits

Version:

SolarWinds Nova Framework

358 lines 77.2 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 { ChangeDetectorRef, Component, ContentChildren, EventEmitter, Input, Output, QueryList, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation, } from "@angular/core"; import _find from "lodash/find"; import _findIndex from "lodash/findIndex"; import _isUndefined from "lodash/isUndefined"; import { BehaviorSubject } from "rxjs"; import { WizardStepComponent } from "./wizard-step.component"; import { LoggerService } from "../../services/log-service"; import * as i0 from "@angular/core"; import * as i1 from "../../services/log-service"; import * as i2 from "@angular/common"; import * as i3 from "../button/button.component"; import * as i4 from "../icon/icon.component"; // <example-url>./../examples/index.html#/wizard</example-url> /** * Component that provides wizard functionality. */ export class WizardComponent { static { this.placeholderFinishText = "Action"; } // as a placeholder "Action" does not need to be i18n constructor(changeDetector, viewContainerRef, logger) { this.changeDetector = changeDetector; this.viewContainerRef = viewContainerRef; this.logger = logger; /** * Set to true to show the "Finish" button at any point during the wizard process. *(default: false) */ this.canFinish = false; /** * Set to true to enable overflow in wizard body container. */ this.enableScroll = false; /** * Overrides the default text on the finish step button. *(default: 'Action') */ this.finishText = WizardComponent.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.selectionChange = 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(); this.stepLineWidth = 65; this.navigationControl = new BehaviorSubject({ busyState: { busy: false }, allowStepChange: true, }); this.previousStepIndex = 0; this.dynamicSubscriptions = new Map(); this.dynamicRefs = new Map(); } ngOnInit() { if (this.finishText === WizardComponent.placeholderFinishText) { this.logger .warn(`WizardComponent input "finishText" is using placeholder text "${WizardComponent.placeholderFinishText}". A value should be specified.`); } } 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) => { if (this.currentStep) { 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(); } addStepDynamic(wizardStep, indexToInsert) { const componentRef = this.dynamicStep.createComponent(WizardStepComponent); const instance = componentRef.instance; const wizardStepInputs = this.getInputsAndOutputs(wizardStep); wizardStepInputs.forEach((key) => { instance[key] = wizardStep[key]; }); this.handleStepControl(componentRef.instance); const subscription = instance.valid?.subscribe((event) => { if (!_isUndefined(event)) { instance.stepControl = wizardStep.stepControl; this.handleStepControl(componentRef.instance); } }); this.dynamicRefs.set(instance, componentRef); this.dynamicSubscriptions.set(instance, subscription); this.arraySteps.splice(indexToInsert, 0, componentRef.instance); this.steps.reset([]); this.steps.reset(this.arraySteps); return componentRef.instance; } removeStep(index) { const steps = this.steps.toArray(); if (index < 1 || index > steps.length - 1) { return; } const stepToRemove = steps[index]; if (this.currentStep === stepToRemove) { this.onBackClick(); } this.onRemoveDynamic(stepToRemove); this.arraySteps.splice(index, 1); this.steps.reset([]); this.steps.reset(this.arraySteps); this.stepIndex = this.steps .toArray() .findIndex((s) => s === this.currentStep); } 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; } resetStep(step) { let index = this.arraySteps.findIndex((s) => s === step); const length = this.arraySteps.length; for (index; index < length; index++) { const stepToReset = this.arraySteps[index]; stepToReset.visited = false; stepToReset.complete = false; stepToReset.icon = "step"; } if (this.currentStep) { this.currentStep.complete = false; } } goToStep(stepIndex) { this.selectStep(this.arraySteps[stepIndex]); } selectStep(step) { if (!step.disabled) { this.futureStep = step; this.currentStep?.exitStep({ selectedIndex: this.arraySteps.indexOf(this.futureStep), selectedStep: this.futureStep, previouslySelectedStep: this.arraySteps[this.stepIndex], previouslySelectedIndex: this.stepIndex, }); if (this.navigationControl.value.allowStepChange) { this.enterAnotherStep(); } } } onBackClick() { 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(); } } onNextClick() { let nextStep = this.arraySteps[this.stepIndex + 1]; this.handleStepControl(this.currentStep); this.currentStep?.nextStep({ selectedIndex: this.stepIndex, selectedStep: this.currentStep, previouslySelectedStep: this.currentStep, previouslySelectedIndex: 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 (this.currentStep) { 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(); } onFinishClick() { this.finish.emit(); } onCancelClick() { this.cancel.emit(this.steps.toArray().filter((step) => step.complete).length !== 0); } enterAnotherStep() { this.currentStep?.applyExitingStep(); this.futureStep?.enterStep(); this.currentStep = this.futureStep; this.currentStep?.applyEnteringStep(); this.stepIndex = this.arraySteps.indexOf(this.currentStep); this.selectionEvent = { selectedIndex: this.stepIndex, selectedStep: this.currentStep, previouslySelectedStep: this.arraySteps[this.previousStepIndex], previouslySelectedIndex: this.previousStepIndex, }; this.selectionChange.emit(this.selectionEvent); this.previousStepIndex = this.stepIndex; } disableFollowingSteps() { this.arraySteps.slice(this.stepIndex + 1).map((item) => { item.disabled = true; }); } enableFollowingSteps() { this.arraySteps.slice(this.stepIndex + 1).map((item) => { item.disabled = false; }); } getInputsAndOutputs(compType) { const inputs = compType.inputsList; const outputs = Object.keys(compType).filter((key) => compType[key] instanceof EventEmitter); return [...inputs, ...outputs]; } 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)); } onRemoveDynamic(step) { const dynamicSubscription = this.dynamicSubscriptions.get(step); const ref = this.dynamicRefs.get(step); if (ref) { ref.destroy(); } if (dynamicSubscription) { dynamicSubscription.unsubscribe(); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WizardComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ViewContainerRef }, { token: i1.LoggerService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: WizardComponent, selector: "nui-wizard", inputs: { canFinish: "canFinish", enableScroll: "enableScroll", bodyContainerHeight: "bodyContainerHeight", finishText: "finishText", stretchStepLines: "stretchStepLines" }, outputs: { selectionChange: "selectionChange", cancel: "cancel", finish: "finish", next: "next", back: "back" }, queries: [{ propertyName: "steps", predicate: WizardStepComponent }], viewQueries: [{ propertyName: "dynamicStep", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }, { propertyName: "stepTitles", predicate: ["stepTitle"], descendants: true }], ngImport: i0, template: "<div class=\"nui-wizard\">\n <div\n class=\"nui-wizard__header\"\n [class.nui-wizard__header--lines-stretched]=\"stretchStepLines\"\n >\n <ul class=\"nui-wizard__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-wizard__header-step--first': first,\n 'nui-wizard__header-step--last': last,\n 'nui-wizard__header-step--visited': step.visited,\n 'nui-wizard__header-step--disabled':\n step.disabled ||\n !step.visited ||\n currentStep?.busyConfig.busy,\n 'nui-wizard__header-step--active': step.active,\n 'nui-wizard__header-step--complete': step.complete\n }\"\n class=\"nui-wizard__header-step\"\n >\n <div\n class=\"nui-wizard__header-step-container\"\n *ngIf=\"!step.hidden\"\n >\n <div class=\"nui-wizard__header-step-row\">\n <div class=\"nui-wizard__header-step-col\">\n <div class=\"nui-wizard__header-step-content\">\n <span class=\"nui-wizard__header-step-link\">\n <span\n class=\"nui-wizard__header-step-title\"\n #stepTitle\n >\n {{\n step.shortTitle || step.title\n }}</span\n >\n <div\n class=\"nui-wizard__header-step-link-container\"\n >\n <div\n class=\"nui-wizard__header-step-col nui-wizard__header-step-col-right\"\n >\n <div\n class=\"nui-wizard__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-wizard__header-step-col nui-wizard__header-step-col-left\"\n >\n <div\n class=\"nui-wizard__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 <div\n class=\"nui-wizard__container\"\n [class.show-scroll]=\"enableScroll\"\n [style.height]=\"bodyContainerHeight\"\n >\n <ng-content></ng-content>\n <ng-template #container></ng-template>\n </div>\n <div class=\"nui-wizard__footer\">\n <button\n nui-button\n type=\"button\"\n (click)=\"onCancelClick()\"\n class=\"nui-wizard__cancel-button\"\n >\n <span i18n>Cancel</span>\n </button>\n <ng-content select=\"[nui-button]\"></ng-content>\n <button\n *ngIf=\"!steps.first.active\"\n nui-button\n type=\"button\"\n class=\"nui-wizard__back-button\"\n [isBusy]=\"currentStep?.busyConfig?.busy\"\n [icon]=\"'caret-left'\"\n (click)=\"onBackClick()\"\n >\n <span i18n>Back</span>\n </button>\n <button\n *ngIf=\"!steps.last.active\"\n nui-button\n type=\"button\"\n class=\"nui-wizard__next-button\"\n [isBusy]=\"currentStep?.busyConfig?.busy\"\n [displayStyle]=\"'primary'\"\n [icon]=\"'caret-right'\"\n [iconRight]=\"true\"\n (click)=\"onNextClick()\"\n >\n <span>{{ currentStep?.nextText }}</span>\n </button>\n <button\n *ngIf=\"canFinish || steps.last.active\"\n nui-button\n type=\"button\"\n class=\"nui-wizard__finish-button\"\n [displayStyle]=\"'primary'\"\n (click)=\"onFinishClick()\"\n >\n <span>{{ finishText }}</span>\n </button>\n </div>\n</div>\n", styles: [".nui .nui-dialog .nui-wizard{padding-top:0}.nui .nui-dialog .nui-wizard__header{border-top:none}.nui .nui-wizard{padding-top:15px}.nui .nui-wizard__container{margin:15px}.nui .nui-wizard__container.show-scroll{overflow:auto}.nui .nui-wizard__header{padding:10px 15px;background-color:var(--nui-color-bg-secondary,#fafafa);border:1px solid;border-left:none;border-right:none;border-color: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 .nui-wizard__header-steps{margin-bottom:0;white-space:nowrap;display:inline-flex}.nui .nui-wizard__header-step{line-height:normal;display:inline-flex;cursor:pointer}.nui .nui-wizard__header-step--disabled{pointer-events:none;cursor:default}.nui .nui-wizard__header-step--visited .nui-wizard__header-step-link{color:var(--nui-color-text-link,#0079aa)}.nui .nui-wizard__header-step--visited .nui-wizard__header-step-link:hover{text-decoration:underline}.nui .nui-wizard__header-step--visited .nui-wizard__header-step-col-right>.nui-wizard__header-step-line{border-color:var(--nui-color-line-active,#0079aa)}.nui .nui-wizard__header-step--first .nui-wizard__header-step-col-right,.nui .nui-wizard__header-step--last .nui-wizard__header-step-col-left{border-color:transparent;opacity:0}.nui .nui-wizard__header-step--active{cursor:default}.nui .nui-wizard__header-step--active .nui-wizard__header-step-link{color:var(--nui-color-bg-dark,#111)}.nui .nui-wizard__header-step--active .nui-wizard__header-step-link:hover .nui-wizard__header-step-title{text-decoration:none}.nui .nui-wizard__header-step--active .nui-wizard__header-step-link .nui-wizard__header-step-col-right>.nui-wizard__header-step-line{border-color:var(--nui-color-line-active,#0079aa)}.nui .nui-wizard__header-step--complete .nui-wizard__header-step-link .nui-wizard__header-step-col-left>.nui-wizard__header-step-line{border-color:var(--nui-color-line-active,#0079aa)}.nui .nui-wizard__header-step--complete .nui-wizard__header-step-link .nui-wizard__header-step-col-right>.nui-wizard__header-step-line{border-color:var(--nui-color-line-active,#0079aa)}.nui .nui-wizard__header-step-container{display:inline-table;width:100%}.nui .nui-wizard__header-step-container-bottom{display:none}.nui .nui-wizard__header-step-container-bottom .nui-wizard__header-step-title{width:100%;max-width:100%;margin:0}.nui .nui-wizard__header-step-row{display:table-row}.nui .nui-wizard__header-step-col{display:table-cell;vertical-align:middle}.nui .nui-wizard__header-step-col .nui-wizard__header-step-line{border-color:var(--nui-color-line-default,#d9d9d9)}.nui .nui-wizard__header-step-col-right .nui-wizard__header-step-line{margin-right:-1px}.nui .nui-wizard__header-step-line{border-bottom:solid 2px;height:2px}.nui .nui-wizard__header-step-link{color:var(--nui-color-text-secondary,rgba(17, 17, 17, .6));transition:color .3s}.nui .nui-wizard__header-step-link-container{display:flex;align-content:baseline;justify-content:center;align-items:center}.nui .nui-wizard__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 .nui-wizard__header.nui-wizard__header--lines-stretched .nui-wizard__header-step-title{max-width:unset}.nui .nui-wizard__title{margin:0}.nui .nui-wizard__description{margin-top:5px}.nui .nui-wizard__steps{padding:15px}.nui .nui-wizard__step{margin-top:15px;display:none}.nui .nui-wizard__step--active{display:block}.nui .nui-wizard__step-title{margin:15px 0 10px}.nui .nui-wizard__footer{border-top:1px solid;border-top-color:var(--nui-color-line-default,#d9d9d9);padding:15px;display:flex;justify-content:flex-end}.nui .nui-wizard__footer>.nui-button{margin-left:15px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.ButtonComponent, selector: "[nui-button]", inputs: ["displayStyle", "icon", "iconColor", "iconRight", "isBusy", "isEmpty", "ariaLabel", "isRepeat", "size"] }, { kind: "component", type: i4.IconComponent, selector: "nui-icon", inputs: ["iconColor", "brushType", "iconHoverColor", "iconSize", "cssClass", "fillContainer", "status", "childStatus", "icon", "counter"] }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WizardComponent, decorators: [{ type: Component, args: [{ selector: "nui-wizard", encapsulation: ViewEncapsulation.None, template: "<div class=\"nui-wizard\">\n <div\n class=\"nui-wizard__header\"\n [class.nui-wizard__header--lines-stretched]=\"stretchStepLines\"\n >\n <ul class=\"nui-wizard__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-wizard__header-step--first': first,\n 'nui-wizard__header-step--last': last,\n 'nui-wizard__header-step--visited': step.visited,\n 'nui-wizard__header-step--disabled':\n step.disabled ||\n !step.visited ||\n currentStep?.busyConfig.busy,\n 'nui-wizard__header-step--active': step.active,\n 'nui-wizard__header-step--complete': step.complete\n }\"\n class=\"nui-wizard__header-step\"\n >\n <div\n class=\"nui-wizard__header-step-container\"\n *ngIf=\"!step.hidden\"\n >\n <div class=\"nui-wizard__header-step-row\">\n <div class=\"nui-wizard__header-step-col\">\n <div class=\"nui-wizard__header-step-content\">\n <span class=\"nui-wizard__header-step-link\">\n <span\n class=\"nui-wizard__header-step-title\"\n #stepTitle\n >\n {{\n step.shortTitle || step.title\n }}</span\n >\n <div\n class=\"nui-wizard__header-step-link-container\"\n >\n <div\n class=\"nui-wizard__header-step-col nui-wizard__header-step-col-right\"\n >\n <div\n class=\"nui-wizard__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-wizard__header-step-col nui-wizard__header-step-col-left\"\n >\n <div\n class=\"nui-wizard__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 <div\n class=\"nui-wizard__container\"\n [class.show-scroll]=\"enableScroll\"\n [style.height]=\"bodyContainerHeight\"\n >\n <ng-content></ng-content>\n <ng-template #container></ng-template>\n </div>\n <div class=\"nui-wizard__footer\">\n <button\n nui-button\n type=\"button\"\n (click)=\"onCancelClick()\"\n class=\"nui-wizard__cancel-button\"\n >\n <span i18n>Cancel</span>\n </button>\n <ng-content select=\"[nui-button]\"></ng-content>\n <button\n *ngIf=\"!steps.first.active\"\n nui-button\n type=\"button\"\n class=\"nui-wizard__back-button\"\n [isBusy]=\"currentStep?.busyConfig?.busy\"\n [icon]=\"'caret-left'\"\n (click)=\"onBackClick()\"\n >\n <span i18n>Back</span>\n </button>\n <button\n *ngIf=\"!steps.last.active\"\n nui-button\n type=\"button\"\n class=\"nui-wizard__next-button\"\n [isBusy]=\"currentStep?.busyConfig?.busy\"\n [displayStyle]=\"'primary'\"\n [icon]=\"'caret-right'\"\n [iconRight]=\"true\"\n (click)=\"onNextClick()\"\n >\n <span>{{ currentStep?.nextText }}</span>\n </button>\n <button\n *ngIf=\"canFinish || steps.last.active\"\n nui-button\n type=\"button\"\n class=\"nui-wizard__finish-button\"\n [displayStyle]=\"'primary'\"\n (click)=\"onFinishClick()\"\n >\n <span>{{ finishText }}</span>\n </button>\n </div>\n</div>\n", styles: [".nui .nui-dialog .nui-wizard{padding-top:0}.nui .nui-dialog .nui-wizard__header{border-top:none}.nui .nui-wizard{padding-top:15px}.nui .nui-wizard__container{margin:15px}.nui .nui-wizard__container.show-scroll{overflow:auto}.nui .nui-wizard__header{padding:10px 15px;background-color:var(--nui-color-bg-secondary,#fafafa);border:1px solid;border-left:none;border-right:none;border-color: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 .nui-wizard__header-steps{margin-bottom:0;white-space:nowrap;display:inline-flex}.nui .nui-wizard__header-step{line-height:normal;display:inline-flex;cursor:pointer}.nui .nui-wizard__header-step--disabled{pointer-events:none;cursor:default}.nui .nui-wizard__header-step--visited .nui-wizard__header-step-link{color:var(--nui-color-text-link,#0079aa)}.nui .nui-wizard__header-step--visited .nui-wizard__header-step-link:hover{text-decoration:underline}.nui .nui-wizard__header-step--visited .nui-wizard__header-step-col-right>.nui-wizard__header-step-line{border-color:var(--nui-color-line-active,#0079aa)}.nui .nui-wizard__header-step--first .nui-wizard__header-step-col-right,.nui .nui-wizard__header-step--last .nui-wizard__header-step-col-left{border-color:transparent;opacity:0}.nui .nui-wizard__header-step--active{cursor:default}.nui .nui-wizard__header-step--active .nui-wizard__header-step-link{color:var(--nui-color-bg-dark,#111)}.nui .nui-wizard__header-step--active .nui-wizard__header-step-link:hover .nui-wizard__header-step-title{text-decoration:none}.nui .nui-wizard__header-step--active .nui-wizard__header-step-link .nui-wizard__header-step-col-right>.nui-wizard__header-step-line{border-color:var(--nui-color-line-active,#0079aa)}.nui .nui-wizard__header-step--complete .nui-wizard__header-step-link .nui-wizard__header-step-col-left>.nui-wizard__header-step-line{border-color:var(--nui-color-line-active,#0079aa)}.nui .nui-wizard__header-step--complete .nui-wizard__header-step-link .nui-wizard__header-step-col-right>.nui-wizard__header-step-line{border-color:var(--nui-color-line-active,#0079aa)}.nui .nui-wizard__header-step-container{display:inline-table;width:100%}.nui .nui-wizard__header-step-container-bottom{display:none}.nui .nui-wizard__header-step-container-bottom .nui-wizard__header-step-title{width:100%;max-width:100%;margin:0}.nui .nui-wizard__header-step-row{display:table-row}.nui .nui-wizard__header-step-col{display:table-cell;vertical-align:middle}.nui .nui-wizard__header-step-col .nui-wizard__header-step-line{border-color:var(--nui-color-line-default,#d9d9d9)}.nui .nui-wizard__header-step-col-right .nui-wizard__header-step-line{margin-right:-1px}.nui .nui-wizard__header-step-line{border-bottom:solid 2px;height:2px}.nui .nui-wizard__header-step-link{color:var(--nui-color-text-secondary,rgba(17, 17, 17, .6));transition:color .3s}.nui .nui-wizard__header-step-link-container{display:flex;align-content:baseline;justify-content:center;align-items:center}.nui .nui-wizard__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 .nui-wizard__header.nui-wizard__header--lines-stretched .nui-wizard__header-step-title{max-width:unset}.nui .nui-wizard__title{margin:0}.nui .nui-wizard__description{margin-top:5px}.nui .nui-wizard__steps{padding:15px}.nui .nui-wizard__step{margin-top:15px;display:none}.nui .nui-wizard__step--active{display:block}.nui .nui-wizard__step-title{margin:15px 0 10px}.nui .nui-wizard__footer{border-top:1px solid;border-top-color:var(--nui-color-line-default,#d9d9d9);padding:15px;display:flex;justify-content:flex-end}.nui .nui-wizard__footer>.nui-button{margin-left:15px}\n"] }] }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ViewContainerRef }, { type: i1.LoggerService }], propDecorators: { steps: [{ type: ContentChildren, args: [WizardStepComponent] }], stepTitles: [{ type: ViewChildren, args: ["stepTitle"] }], dynamicStep: [{ type: ViewChild, args: ["container", { read: ViewContainerRef }] }], canFinish: [{ type: Input }], enableScroll: [{ type: Input }], bodyContainerHeight: [{ type: Input }], finishText: [{ type: Input }], stretchStepLines: [{ type: Input }], selectionChange: [{ type: Output }], cancel: [{ type: Output }], finish: [{ type: Output }], next: [{ type: Output }], back: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvd2l6YXJkL3dpemFyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL3dpemFyZC93aXphcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlEO0FBQ3pELEVBQUU7QUFDRiwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLDREQUE0RDtBQUM1RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UsMEVBQTBFO0FBQzFFLGlGQUFpRjtBQUNqRiw2RUFBNkU7QUFDN0UsaUJBQWlCO0FBRWpCLE9BQU8sRUFHSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsaUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sS0FBSyxNQUFNLGFBQWEsQ0FBQztBQUNoQyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLFlBQVksTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBT3ZDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7O0FBRTNELDhEQUE4RDtBQUU5RDs7R0FFRztBQU9ILE1BQU0sT0FBTyxlQUFlO2FBR1QsMEJBQXFCLEdBQUcsUUFBUSxBQUFYLENBQVksR0FBQyxxREFBcUQ7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QUMsVUFBVSxDQUFDLEdBQUcsQ0FDOUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUM3QyxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyxlQUFlLENBQUMsSUFBeUI7UUFDN0MsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZDLElBQUksR0FBRyxFQUFFO1lBQ0wsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2pCO1FBRUQsSUFBSSxtQkFBbUIsRUFBRTtZQUNyQixtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNyQztJQUNMLENBQUM7K0dBaFhRLGVBQWU7bUdBQWYsZUFBZSx1V0FLUCxtQkFBbUIsa0hBRUosZ0JBQWdCLDBHQ3JFcEQsb2pMQWtJQTs7NEZEcEVhLGVBQWU7a0JBTjNCLFNBQVM7K0JBQ0ksWUFBWSxpQkFHUCxpQkFBaUIsQ0FBQyxJQUFJO2lKQU9DLEtBQUs7c0JBQTFDLGVBQWU7dUJBQUMsbUJBQW1CO2dCQUNULFVBQVU7c0JBQXBDLFlBQVk7dUJBQUMsV0FBVztnQkFDMkIsV0FBVztzQkFBOUQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBTWxDLFNBQVM7c0JBQXhCLEtBQUs7Z0JBSVUsWUFBWTtzQkFBM0IsS0FBSztnQkFJVSxtQkFBbUI7c0JBQWxDLEtBQUs7Z0JBS1UsVUFBVTtzQkFBekIsS0FBSztnQkFLVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBSVcsZUFBZTtzQkFBL0IsTUFBTTtnQkFLVSxNQUFNO3NCQUF0QixNQUFNO2dCQUlVLE1BQU07c0JBQXRCLE1BQU07Z0JBSVUsSUFBSTtzQkFBcEIsTUFBTTtnQkFJVSxJQUFJO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLy8gwqkgMjAyMiBTb2xhcldpbmRzIFdvcmxkd2lkZSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob