@nova-ui/bits
Version:
SolarWinds Nova Framework
358 lines • 77.2 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 { 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