UNPKG

primeng

Version:

[![npm version](https://badge.fury.io/js/primeng.svg)](https://badge.fury.io/js/primeng) [![npm downloads](https://img.shields.io/npm/dm/primeng.svg)](https://www.npmjs.com/package/primeng) [![Actions CI](https://github.com/primefaces/primeng/workflows/No

685 lines (681 loc) 70.5 kB
import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Input, NgModule, Output, ViewEncapsulation } from '@angular/core'; import { PrimeTemplate, SharedModule } from 'primeng/api'; import { UniqueComponentId } from 'primeng/utils'; import { animate, state, style, transition, trigger } from '@angular/animations'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; export class StepperHeader { id; template; stepperPanel; index; disabled; active; highlighted; getStepProp; ariaControls; onClick = new EventEmitter(); static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: StepperHeader, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.1", type: StepperHeader, selector: "p-stepperHeader", inputs: { id: "id", template: "template", stepperPanel: "stepperPanel", index: "index", disabled: "disabled", active: "active", highlighted: "highlighted", getStepProp: "getStepProp", ariaControls: "ariaControls" }, outputs: { onClick: "onClick" }, host: { classAttribute: "p-element" }, ngImport: i0, template: ` <ng-container *ngIf="template; else buttonRef"> <ng-container *ngTemplateOutlet=" template; context: { index: index, active: active, highlighted: highlighted, class: 'p-stepper-action', headerClass: 'p-stepper-action', numberClass: 'p-stepper-number', titleClass: 'p-stepper-title', onClick: onClick } " ></ng-container> </ng-container> <ng-template #buttonRef> <p-button [id]="id" class="p-stepper-action" role="tab" [tabindex]="disabled ? -1 : undefined" [aria-controls]="ariaControls" (click)="onClick.emit($event, index)"> <span class="p-stepper-number">{{ index + 1 }}</span> <span class="p-stepper-title">{{ getStepProp }}</span> </p-button> </ng-template> `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: StepperHeader, decorators: [{ type: Component, args: [{ selector: 'p-stepperHeader', template: ` <ng-container *ngIf="template; else buttonRef"> <ng-container *ngTemplateOutlet=" template; context: { index: index, active: active, highlighted: highlighted, class: 'p-stepper-action', headerClass: 'p-stepper-action', numberClass: 'p-stepper-number', titleClass: 'p-stepper-title', onClick: onClick } " ></ng-container> </ng-container> <ng-template #buttonRef> <p-button [id]="id" class="p-stepper-action" role="tab" [tabindex]="disabled ? -1 : undefined" [aria-controls]="ariaControls" (click)="onClick.emit($event, index)"> <span class="p-stepper-number">{{ index + 1 }}</span> <span class="p-stepper-title">{{ getStepProp }}</span> </p-button> </ng-template> `, host: { class: 'p-element' } }] }], propDecorators: { id: [{ type: Input }], template: [{ type: Input }], stepperPanel: [{ type: Input }], index: [{ type: Input }], disabled: [{ type: Input }], active: [{ type: Input }], highlighted: [{ type: Input }], getStepProp: [{ type: Input }], ariaControls: [{ type: Input }], onClick: [{ type: Output }] } }); export class StepperSeparator { template; separatorClass; stepperPanel; index; active; highlighted; static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: StepperSeparator, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.1", type: StepperSeparator, selector: "p-stepperSeparator", inputs: { template: "template", separatorClass: "separatorClass", stepperPanel: "stepperPanel", index: "index", active: "active", highlighted: "highlighted" }, host: { classAttribute: "p-stepper-separator" }, ngImport: i0, template: ` <ng-container *ngIf="template; else span"> <ng-container *ngTemplateOutlet="template; context: { index: index, active: active, highlighted: highlighted, class: separatorClass }"></ng-container> </ng-container> <ng-template #span> <span [class]="separatorClass" aria-hidden="true"></span> </ng-template> `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: StepperSeparator, decorators: [{ type: Component, args: [{ selector: 'p-stepperSeparator', template: ` <ng-container *ngIf="template; else span"> <ng-container *ngTemplateOutlet="template; context: { index: index, active: active, highlighted: highlighted, class: separatorClass }"></ng-container> </ng-container> <ng-template #span> <span [class]="separatorClass" aria-hidden="true"></span> </ng-template> `, host: { class: 'p-stepper-separator' } }] }], propDecorators: { template: [{ type: Input }], separatorClass: [{ type: Input }], stepperPanel: [{ type: Input }], index: [{ type: Input }], active: [{ type: Input }], highlighted: [{ type: Input }] } }); export class StepperContent { id; orientation; template; ariaLabelledby; stepperPanel; index; active; highlighted; onClick = new EventEmitter(); prevCallback = new EventEmitter(); nextCallback = new EventEmitter(); static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: StepperContent, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.1", type: StepperContent, selector: "p-stepperContent", inputs: { id: "id", orientation: "orientation", template: "template", ariaLabelledby: "ariaLabelledby", stepperPanel: "stepperPanel", index: "index", active: "active", highlighted: "highlighted" }, outputs: { onClick: "onClick", prevCallback: "prevCallback", nextCallback: "nextCallback" }, host: { properties: { "class.p-stepper-content": "true", "class.p-element": "true", "class.p-toggleable-content": "orientation === 'vertical'" } }, ngImport: i0, template: ` <div [id]="id" role="tabpanel" data-pc-name="stepperpanel" [attr.data-pc-index]="index" [attr.data-p-active]="active" [attr.aria-labelledby]="ariaLabelledby"> <ng-container *ngIf="template"> <ng-container *ngTemplateOutlet="template; context: { index: index, active: active, highlighted: highlighted, onClick: onClick, prevCallback: prevCallback, nextCallback: nextCallback }"></ng-container> </ng-container> <ng-template *ngIf="!template"> <ng-container *ngIf="stepperPanel"> <ng-container *ngTemplateOutlet="stepperPanel"></ng-container> </ng-container> </ng-template> </div>`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: StepperContent, decorators: [{ type: Component, args: [{ selector: 'p-stepperContent', template: ` <div [id]="id" role="tabpanel" data-pc-name="stepperpanel" [attr.data-pc-index]="index" [attr.data-p-active]="active" [attr.aria-labelledby]="ariaLabelledby"> <ng-container *ngIf="template"> <ng-container *ngTemplateOutlet="template; context: { index: index, active: active, highlighted: highlighted, onClick: onClick, prevCallback: prevCallback, nextCallback: nextCallback }"></ng-container> </ng-container> <ng-template *ngIf="!template"> <ng-container *ngIf="stepperPanel"> <ng-container *ngTemplateOutlet="stepperPanel"></ng-container> </ng-container> </ng-template> </div>`, host: { '[class.p-stepper-content]': 'true', '[class.p-element]': 'true', '[class.p-toggleable-content]': "orientation === 'vertical'" } }] }], propDecorators: { id: [{ type: Input }], orientation: [{ type: Input }], template: [{ type: Input }], ariaLabelledby: [{ type: Input }], stepperPanel: [{ type: Input }], index: [{ type: Input }], active: [{ type: Input }], highlighted: [{ type: Input }], onClick: [{ type: Output }], prevCallback: [{ type: Output }], nextCallback: [{ type: Output }] } }); /** * StepperPanel is a helper component for Stepper component. * @group Components */ export class StepperPanel { /** * Orientation of tab headers. * @group Props */ header; templates; headerTemplate; startTemplate; contentTemplate; separatorTemplate; endTemplate; ngAfterContentInit() { this.templates.forEach((item) => { switch (item.getType()) { case 'header': this.headerTemplate = item.template; break; case 'content': this.contentTemplate = item.template; break; case 'separator': this.separatorTemplate = item.template; break; } }); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: StepperPanel, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.1", type: StepperPanel, selector: "p-stepperPanel", inputs: { header: "header" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: StepperPanel, decorators: [{ type: Component, args: [{ selector: 'p-stepperPanel', template: ` <ng-content></ng-content> `, host: { class: 'p-element' } }] }], propDecorators: { header: [{ type: Input }], templates: [{ type: ContentChildren, args: [PrimeTemplate] }] } }); /** * The Stepper component displays a wizard-like workflow by guiding users through the multi-step progression. * @group Components */ export class Stepper { /** * Active step index of stepper. * @group Props */ activeStep = 0; /** * Orientation of the stepper. * @group Props */ orientation = 'horizontal'; /** * Whether the steps are clickable or not. * @group Props */ linear = false; /** * Transition options of the animation. * @group Props */ transitionOptions = '400ms cubic-bezier(0.86, 0, 0.07, 1)'; stepperPanels; templates; onClick = new EventEmitter(); /** * Emitted when the value changes. * @param {ActiveStepChangeEvent} event - custom change event. * @group Emits */ activeStepChange = new EventEmitter(); headerTemplate; startTemplate; separatorTemplate; endTemplate; id = UniqueComponentId(); panels; isStepActive(index) { return this.activeStep === index; } getStepProp(step) { if (step?.header) { return step.header; } if (step?.content) { return step.content; } return undefined; } getStepKey(step, index) { return this.getStepProp(step) || index; } getStepHeaderActionId(index) { return `${this.id}_${index}_header_action`; } getStepContentId(index) { return `${this.id}_${index}_content`; } updateActiveStep(event, index) { this.activeStep = index; this.activeStepChange.emit(this.activeStep); } onItemClick(event, index) { if (this.linear) { event.preventDefault(); return; } if (index !== this.activeStep) { this.updateActiveStep(event, index); } } isItemDisabled(index) { return this.linear && !this.isStepActive(index); } prevCallback(event, index) { if (index !== 0) { this.updateActiveStep(event, index - 1); } } nextCallback(event, index) { if (index !== this.stepperPanels.length - 1) { this.updateActiveStep(event, index + 1); } } trackByFn(index) { return index; } ngAfterContentInit() { this.panels = this.stepperPanels.toArray(); this.templates.forEach((item) => { switch (item.getType()) { case 'start': this.startTemplate = item.template; break; case 'end': this.endTemplate = item.template; break; default: break; } }); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: Stepper, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.1", type: Stepper, selector: "p-stepper", inputs: { activeStep: "activeStep", orientation: "orientation", linear: "linear", transitionOptions: "transitionOptions" }, outputs: { onClick: "onClick", activeStepChange: "activeStepChange" }, host: { properties: { "class.p-stepper": "true", "class.p-component": "true", "class.p-stepper-vertical": "orientation === 'vertical'" } }, queries: [{ propertyName: "stepperPanels", predicate: StepperPanel }, { propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: ` <div role="tablist"> <ng-container *ngIf="startTemplate"> <ng-container *ngTemplateOutlet="startTemplate"></ng-container> </ng-container> <ng-container *ngIf="orientation === 'horizontal'; else vertical"> <ul class="p-stepper-nav"> <ng-template ngFor let-step [ngForOf]="panels" let-index="index" [ngForTrackBy]="trackByFn"> <li [key]="getStepKey(step, index)" class="p-stepper-header" [ngClass]="{ 'p-highlight': isStepActive(index), 'p-disabled': isItemDisabled(index) }" [attr.aria-current]="isStepActive(index) ? 'step' : undefined" role="presentation" [data-pc-name]="stepperPanel" [data-p-highlight]="isStepActive(index)" [data-p-disabled]="isItemDisabled(index)" [data-pc-index]="index" [data-p-active]="isStepActive(index)" > <p-stepperHeader [id]="getStepHeaderActionId(index)" [template]="step.headerTemplate" [stepperPanel]="step" [getStepProp]="getStepProp(step, 'header')" [index]="index" [disabled]="isItemDisabled(index)" [active]="isStepActive(index)" [highlighted]="index < activeStep" [class]="'p-stepper-action'" [aria-controls]="getStepContentId(index)" (onClick)="onItemClick($event, index)" ></p-stepperHeader> <ng-container *ngIf="index !== stepperPanels.length - 1"> <p-stepperSeparator [template]="step.separatorTemplate" [separatorClass]="'p-stepper-separator'" [stepperPanel]="step" [index]="index" [active]="isStepActive(index)" [highlighted]="index < activeStep" /> </ng-container> </li> </ng-template> </ul> <div class="p-stepper-panels"> <ng-template ngFor let-step [ngForOf]="panels" let-index="index" [ngForTrackBy]="trackByFn"> <ng-container *ngIf="isStepActive(index)"> <p-stepperContent [id]="getStepContentId(index)" [template]="step.contentTemplate" [orientation]="orientation" [stepperPanel]="step" [index]="index" [active]="isStepActive(index)" [highlighted]="index < activeStep" [ariaLabelledby]="getStepHeaderActionId(index)" (onClick)="onItemClick($event, index)" (nextCallback)="nextCallback($event, index)" (prevCallback)="prevCallback($event, index)" /> </ng-container> </ng-template> </div> </ng-container> <ng-template #vertical> <ng-template ngFor let-step [ngForOf]="panels" let-index="index" [ngForTrackBy]="trackByFn"> <div [key]="getStepKey(step, index)" class="p-stepper-panel" [ngClass]="{ 'p-stepper-panel-active': orientation === 'vertical' && isStepActive(index) }" [attr.aria-current]="isStepActive(index) ? 'step' : undefined" [data-pc-name]="'stepperpanel'" [data-p-highlight]="isStepActive(index)" [data-p-disabled]="isItemDisabled(index)" [data-pc-index]="index" [data-p-active]="isStepActive(index)" > <div class="p-stepper-header " [ngClass]="{ 'p-highlight': isStepActive(index), 'p-disabled': isItemDisabled(index) }" > <p-stepperHeader [id]="getStepHeaderActionId(index)" [template]="step.headerTemplate" [stepperPanel]="step" [getStepProp]="getStepProp(step, 'header')" [index]="index" [disabled]="isItemDisabled(index)" [active]="isStepActive(index)" [highlighted]="index < activeStep" [class]="'p-stepper-action'" [aria-controls]="getStepContentId(index)" (onClick)="onItemClick($event, index)" ></p-stepperHeader> </div> <div class="p-stepper-toggleable-content" [@tabContent]="isStepActive(index) ? { value: 'visible', params: { transitionParams: transitionOptions } } : { value: 'hidden', params: { transitionParams: transitionOptions } }"> <ng-container *ngIf="index !== stepperPanels.length - 1"> <p-stepperSeparator [template]="step.separatorTemplate" [separatorClass]="'p-stepper-separator'" [stepperPanel]="step" [index]="index" [active]="isStepActive(index)" [highlighted]="index < activeStep" /> </ng-container> <p-stepperContent [id]="getStepContentId(index)" [template]="step.contentTemplate" [orientation]="orientation" [stepperPanel]="step" [index]="index" [active]="isStepActive(index)" [highlighted]="index < activeStep" [ariaLabelledby]="getStepHeaderActionId(index)" (onClick)="onItemClick($event, index)" (nextCallback)="nextCallback($event, index)" (prevCallback)="prevCallback($event, index)" /> </div> </div> </ng-template> </ng-template> <ng-container *ngIf="endTemplate"> <ng-container *ngTemplateOutlet="endTemplate"></ng-container> </ng-container> </div> `, isInline: true, styles: ["@layer primeng{.p-stepper-vertical .p-stepper-panel>.p-stepper-toggleable-content{overflow:hidden}.p-stepper-vertical .p-stepper-panel-active>.p-stepper-toggleable-content:not(.ng-animating){overflow:inherit}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: StepperContent, selector: "p-stepperContent", inputs: ["id", "orientation", "template", "ariaLabelledby", "stepperPanel", "index", "active", "highlighted"], outputs: ["onClick", "prevCallback", "nextCallback"] }, { kind: "component", type: StepperHeader, selector: "p-stepperHeader", inputs: ["id", "template", "stepperPanel", "index", "disabled", "active", "highlighted", "getStepProp", "ariaControls"], outputs: ["onClick"] }, { kind: "component", type: StepperSeparator, selector: "p-stepperSeparator", inputs: ["template", "separatorClass", "stepperPanel", "index", "active", "highlighted"] }], animations: [ trigger('tabContent', [ state('hidden', style({ height: '0', visibility: 'hidden' })), state('visible', style({ height: '*', visibility: 'visible' })), transition('visible <=> hidden', [animate('250ms cubic-bezier(0.86, 0, 0.07, 1)')]), transition('void => *', animate(0)) ]) ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: Stepper, decorators: [{ type: Component, args: [{ selector: 'p-stepper', template: ` <div role="tablist"> <ng-container *ngIf="startTemplate"> <ng-container *ngTemplateOutlet="startTemplate"></ng-container> </ng-container> <ng-container *ngIf="orientation === 'horizontal'; else vertical"> <ul class="p-stepper-nav"> <ng-template ngFor let-step [ngForOf]="panels" let-index="index" [ngForTrackBy]="trackByFn"> <li [key]="getStepKey(step, index)" class="p-stepper-header" [ngClass]="{ 'p-highlight': isStepActive(index), 'p-disabled': isItemDisabled(index) }" [attr.aria-current]="isStepActive(index) ? 'step' : undefined" role="presentation" [data-pc-name]="stepperPanel" [data-p-highlight]="isStepActive(index)" [data-p-disabled]="isItemDisabled(index)" [data-pc-index]="index" [data-p-active]="isStepActive(index)" > <p-stepperHeader [id]="getStepHeaderActionId(index)" [template]="step.headerTemplate" [stepperPanel]="step" [getStepProp]="getStepProp(step, 'header')" [index]="index" [disabled]="isItemDisabled(index)" [active]="isStepActive(index)" [highlighted]="index < activeStep" [class]="'p-stepper-action'" [aria-controls]="getStepContentId(index)" (onClick)="onItemClick($event, index)" ></p-stepperHeader> <ng-container *ngIf="index !== stepperPanels.length - 1"> <p-stepperSeparator [template]="step.separatorTemplate" [separatorClass]="'p-stepper-separator'" [stepperPanel]="step" [index]="index" [active]="isStepActive(index)" [highlighted]="index < activeStep" /> </ng-container> </li> </ng-template> </ul> <div class="p-stepper-panels"> <ng-template ngFor let-step [ngForOf]="panels" let-index="index" [ngForTrackBy]="trackByFn"> <ng-container *ngIf="isStepActive(index)"> <p-stepperContent [id]="getStepContentId(index)" [template]="step.contentTemplate" [orientation]="orientation" [stepperPanel]="step" [index]="index" [active]="isStepActive(index)" [highlighted]="index < activeStep" [ariaLabelledby]="getStepHeaderActionId(index)" (onClick)="onItemClick($event, index)" (nextCallback)="nextCallback($event, index)" (prevCallback)="prevCallback($event, index)" /> </ng-container> </ng-template> </div> </ng-container> <ng-template #vertical> <ng-template ngFor let-step [ngForOf]="panels" let-index="index" [ngForTrackBy]="trackByFn"> <div [key]="getStepKey(step, index)" class="p-stepper-panel" [ngClass]="{ 'p-stepper-panel-active': orientation === 'vertical' && isStepActive(index) }" [attr.aria-current]="isStepActive(index) ? 'step' : undefined" [data-pc-name]="'stepperpanel'" [data-p-highlight]="isStepActive(index)" [data-p-disabled]="isItemDisabled(index)" [data-pc-index]="index" [data-p-active]="isStepActive(index)" > <div class="p-stepper-header " [ngClass]="{ 'p-highlight': isStepActive(index), 'p-disabled': isItemDisabled(index) }" > <p-stepperHeader [id]="getStepHeaderActionId(index)" [template]="step.headerTemplate" [stepperPanel]="step" [getStepProp]="getStepProp(step, 'header')" [index]="index" [disabled]="isItemDisabled(index)" [active]="isStepActive(index)" [highlighted]="index < activeStep" [class]="'p-stepper-action'" [aria-controls]="getStepContentId(index)" (onClick)="onItemClick($event, index)" ></p-stepperHeader> </div> <div class="p-stepper-toggleable-content" [@tabContent]="isStepActive(index) ? { value: 'visible', params: { transitionParams: transitionOptions } } : { value: 'hidden', params: { transitionParams: transitionOptions } }"> <ng-container *ngIf="index !== stepperPanels.length - 1"> <p-stepperSeparator [template]="step.separatorTemplate" [separatorClass]="'p-stepper-separator'" [stepperPanel]="step" [index]="index" [active]="isStepActive(index)" [highlighted]="index < activeStep" /> </ng-container> <p-stepperContent [id]="getStepContentId(index)" [template]="step.contentTemplate" [orientation]="orientation" [stepperPanel]="step" [index]="index" [active]="isStepActive(index)" [highlighted]="index < activeStep" [ariaLabelledby]="getStepHeaderActionId(index)" (onClick)="onItemClick($event, index)" (nextCallback)="nextCallback($event, index)" (prevCallback)="prevCallback($event, index)" /> </div> </div> </ng-template> </ng-template> <ng-container *ngIf="endTemplate"> <ng-container *ngTemplateOutlet="endTemplate"></ng-container> </ng-container> </div> `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { '[class.p-stepper]': 'true', '[class.p-component]': 'true', '[class.p-stepper-vertical]': "orientation === 'vertical'" }, animations: [ trigger('tabContent', [ state('hidden', style({ height: '0', visibility: 'hidden' })), state('visible', style({ height: '*', visibility: 'visible' })), transition('visible <=> hidden', [animate('250ms cubic-bezier(0.86, 0, 0.07, 1)')]), transition('void => *', animate(0)) ]) ], styles: ["@layer primeng{.p-stepper-vertical .p-stepper-panel>.p-stepper-toggleable-content{overflow:hidden}.p-stepper-vertical .p-stepper-panel-active>.p-stepper-toggleable-content:not(.ng-animating){overflow:inherit}}\n"] }] }], propDecorators: { activeStep: [{ type: Input }], orientation: [{ type: Input }], linear: [{ type: Input }], transitionOptions: [{ type: Input }], stepperPanels: [{ type: ContentChildren, args: [StepperPanel] }], templates: [{ type: ContentChildren, args: [PrimeTemplate] }], onClick: [{ type: Output }], activeStepChange: [{ type: Output }] } }); export class StepperModule { static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: StepperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.1", ngImport: i0, type: StepperModule, declarations: [Stepper, StepperPanel, StepperPanel, StepperContent, StepperHeader, StepperSeparator], imports: [CommonModule, SharedModule], exports: [Stepper, StepperPanel, StepperContent, StepperHeader, StepperSeparator, SharedModule] }); static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: StepperModule, imports: [CommonModule, SharedModule, SharedModule] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: StepperModule, decorators: [{ type: NgModule, args: [{ imports: [CommonModule, SharedModule], exports: [Stepper, StepperPanel, StepperContent, StepperHeader, StepperSeparator, SharedModule], declarations: [Stepper, StepperPanel, StepperPanel, StepperContent, StepperHeader, StepperSeparator] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9zdGVwcGVyL3N0ZXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBb0IsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQTBCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hMLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7QUFpQ2pGLE1BQU0sT0FBTyxhQUFhO0lBQ2IsRUFBRSxDQUFxQjtJQUV2QixRQUFRLENBQStCO0lBRXZDLFlBQVksQ0FBZTtJQUUzQixLQUFLLENBQXFCO0lBRTFCLFFBQVEsQ0FBc0I7SUFFOUIsTUFBTSxDQUFzQjtJQUU1QixXQUFXLENBQXNCO0lBRWpDLFdBQVcsQ0FBcUI7SUFFaEMsWUFBWSxDQUFxQjtJQUVoQyxPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQzt1R0FuQnBDLGFBQWE7MkZBQWIsYUFBYSx1VkE3Qlo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXdCVDs7MkZBS1EsYUFBYTtrQkEvQnpCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0F3QlQ7b0JBQ0QsSUFBSSxFQUFFO3dCQUNGLEtBQUssRUFBRSxXQUFXO3FCQUNyQjtpQkFDSjs4QkFFWSxFQUFF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IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgTmdNb2R1bGUsIE91dHB1dCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFByaW1lVGVtcGxhdGUsIFNoYXJlZE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAncHJpbWVuZy90cy1oZWxwZXJzJztcbmltcG9ydCB7IFVuaXF1ZUNvbXBvbmVudElkIH0gZnJvbSAncHJpbWVuZy91dGlscyc7XG5pbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLXN0ZXBwZXJIZWFkZXInLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0ZW1wbGF0ZTsgZWxzZSBidXR0b25SZWZcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBhY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogaGlnaGxpZ2h0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogJ3Atc3RlcHBlci1hY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyQ2xhc3M6ICdwLXN0ZXBwZXItYWN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlckNsYXNzOiAncC1zdGVwcGVyLW51bWJlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZUNsYXNzOiAncC1zdGVwcGVyLXRpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IG9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2J1dHRvblJlZj5cbiAgICAgICAgICAgIDxwLWJ1dHRvbiBbaWRdPVwiaWRcIiBjbGFzcz1cInAtc3RlcHBlci1hY3Rpb25cIiByb2xlPVwidGFiXCIgW3RhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiB1bmRlZmluZWRcIiBbYXJpYS1jb250cm9sc109XCJhcmlhQ29udHJvbHNcIiAoY2xpY2spPVwib25DbGljay5lbWl0KCRldmVudCwgaW5kZXgpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLXN0ZXBwZXItbnVtYmVyXCI+e3sgaW5kZXggKyAxIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1zdGVwcGVyLXRpdGxlXCI+e3sgZ2V0U3RlcFByb3AgfX08L3NwYW4+XG4gICAgICAgICAgICA8L3AtYnV0dG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIGAsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ3AtZWxlbWVudCdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFN0ZXBwZXJIZWFkZXIge1xuICAgIEBJbnB1dCgpIGlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpIHN0ZXBwZXJQYW5lbDogU3RlcHBlclBhbmVsO1xuXG4gICAgQElucHV0KCkgaW5kZXg6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgYWN0aXZlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgaGlnaGxpZ2h0ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSBnZXRTdGVwUHJvcDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgYXJpYUNvbnRyb2xzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBAT3V0cHV0KCkgb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLXN0ZXBwZXJTZXBhcmF0b3InLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0ZW1wbGF0ZTsgZWxzZSBzcGFuXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGU7IGNvbnRleHQ6IHsgaW5kZXg6IGluZGV4LCBhY3RpdmU6IGFjdGl2ZSwgaGlnaGxpZ2h0ZWQ6IGhpZ2hsaWdodGVkLCBjbGFzczogc2VwYXJhdG9yQ2xhc3MgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzcGFuPlxuICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cInNlcGFyYXRvckNsYXNzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIGAsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ3Atc3RlcHBlci1zZXBhcmF0b3InXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBTdGVwcGVyU2VwYXJhdG9yIHtcbiAgICBASW5wdXQoKSB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpIHNlcGFyYXRvckNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSBzdGVwcGVyUGFuZWw6IFN0ZXBwZXJQYW5lbDtcblxuICAgIEBJbnB1dCgpIGluZGV4OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbi