UNPKG

26.8 kBJavaScriptView Raw
1import { FocusKeyManager } from '@angular/cdk/a11y';
2import * as i1 from '@angular/cdk/bidi';
3import { BidiModule } from '@angular/cdk/bidi';
4import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
5import { hasModifierKey, SPACE, ENTER } from '@angular/cdk/keycodes';
6import * as i0 from '@angular/core';
7import { Directive, InjectionToken, EventEmitter, forwardRef, TemplateRef, Component, ViewEncapsulation, ChangeDetectionStrategy, Inject, Optional, ContentChild, ViewChild, Input, Output, QueryList, ContentChildren, NgModule } from '@angular/core';
8import { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';
9import { Subject, of } from 'rxjs';
10import { startWith, takeUntil } from 'rxjs/operators';
11
12class CdkStepHeader {
13 constructor(_elementRef) {
14 this._elementRef = _elementRef;
15 }
16 /** Focuses the step header. */
17 focus() {
18 this._elementRef.nativeElement.focus();
19 }
20 static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CdkStepHeader, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
21 static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: CdkStepHeader, selector: "[cdkStepHeader]", host: { attributes: { "role": "tab" } }, ngImport: i0 }); }
22}
23i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CdkStepHeader, decorators: [{
24 type: Directive,
25 args: [{
26 selector: '[cdkStepHeader]',
27 host: {
28 'role': 'tab',
29 },
30 }]
31 }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
32
33class CdkStepLabel {
34 constructor(/** @docs-private */ template) {
35 this.template = template;
36 }
37 static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CdkStepLabel, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
38 static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: CdkStepLabel, selector: "[cdkStepLabel]", ngImport: i0 }); }
39}
40i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CdkStepLabel, decorators: [{
41 type: Directive,
42 args: [{
43 selector: '[cdkStepLabel]',
44 }]
45 }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
46
47/** Used to generate unique ID for each stepper component. */
48let nextId = 0;
49/** Change event emitted on selection changes. */
50class StepperSelectionEvent {
51}
52/** Enum to represent the different states of the steps. */
53const STEP_STATE = {
54 NUMBER: 'number',
55 EDIT: 'edit',
56 DONE: 'done',
57 ERROR: 'error',
58};
59/** InjectionToken that can be used to specify the global stepper options. */
60const STEPPER_GLOBAL_OPTIONS = new InjectionToken('STEPPER_GLOBAL_OPTIONS');
61class CdkStep {
62 /** Whether the user can return to this step once it has been marked as completed. */
63 get editable() {
64 return this._editable;
65 }
66 set editable(value) {
67 this._editable = coerceBooleanProperty(value);
68 }
69 /** Whether the completion of step is optional. */
70 get optional() {
71 return this._optional;
72 }
73 set optional(value) {
74 this._optional = coerceBooleanProperty(value);
75 }
76 /** Whether step is marked as completed. */
77 get completed() {
78 return this._completedOverride == null ? this._getDefaultCompleted() : this._completedOverride;
79 }
80 set completed(value) {
81 this._completedOverride = coerceBooleanProperty(value);
82 }
83 _getDefaultCompleted() {
84 return this.stepControl ? this.stepControl.valid && this.interacted : this.interacted;
85 }
86 /** Whether step has an error. */
87 get hasError() {
88 return this._customError == null ? this._getDefaultError() : this._customError;
89 }
90 set hasError(value) {
91 this._customError = coerceBooleanProperty(value);
92 }
93 _getDefaultError() {
94 return this.stepControl && this.stepControl.invalid && this.interacted;
95 }
96 constructor(_stepper, stepperOptions) {
97 this._stepper = _stepper;
98 /** Whether user has attempted to move away from the step. */
99 this.interacted = false;
100 /** Emits when the user has attempted to move away from the step. */
101 this.interactedStream = new EventEmitter();
102 this._editable = true;
103 this._optional = false;
104 this._completedOverride = null;
105 this._customError = null;
106 this._stepperOptions = stepperOptions ? stepperOptions : {};
107 this._displayDefaultIndicatorType = this._stepperOptions.displayDefaultIndicatorType !== false;
108 }
109 /** Selects this step component. */
110 select() {
111 this._stepper.selected = this;
112 }
113 /** Resets the step to its initial state. Note that this includes resetting form data. */
114 reset() {
115 this.interacted = false;
116 if (this._completedOverride != null) {
117 this._completedOverride = false;
118 }
119 if (this._customError != null) {
120 this._customError = false;
121 }
122 if (this.stepControl) {
123 this.stepControl.reset();
124 }
125 }
126 ngOnChanges() {
127 // Since basically all inputs of the MatStep get proxied through the view down to the
128 // underlying MatStepHeader, we have to make sure that change detection runs correctly.
129 this._stepper._stateChanged();
130 }
131 _markAsInteracted() {
132 if (!this.interacted) {
133 this.interacted = true;
134 this.interactedStream.emit(this);
135 }
136 }
137 /** Determines whether the error state can be shown. */
138 _showError() {
139 // We want to show the error state either if the user opted into/out of it using the
140 // global options, or if they've explicitly set it through the `hasError` input.
141 return this._stepperOptions.showError ?? this._customError != null;
142 }
143 static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CdkStep, deps: [{ token: forwardRef(() => CdkStepper) }, { token: STEPPER_GLOBAL_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
144 static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: CdkStep, selector: "cdk-step", inputs: { stepControl: "stepControl", label: "label", errorMessage: "errorMessage", ariaLabel: ["aria-label", "ariaLabel"], ariaLabelledby: ["aria-labelledby", "ariaLabelledby"], state: "state", editable: "editable", optional: "optional", completed: "completed", hasError: "hasError" }, outputs: { interactedStream: "interacted" }, queries: [{ propertyName: "stepLabel", first: true, predicate: CdkStepLabel, descendants: true }], viewQueries: [{ propertyName: "content", first: true, predicate: TemplateRef, descendants: true, static: true }], exportAs: ["cdkStep"], usesOnChanges: true, ngImport: i0, template: '<ng-template><ng-content></ng-content></ng-template>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
145}
146i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CdkStep, decorators: [{
147 type: Component,
148 args: [{
149 selector: 'cdk-step',
150 exportAs: 'cdkStep',
151 template: '<ng-template><ng-content></ng-content></ng-template>',
152 encapsulation: ViewEncapsulation.None,
153 changeDetection: ChangeDetectionStrategy.OnPush,
154 }]
155 }], ctorParameters: function () { return [{ type: CdkStepper, decorators: [{
156 type: Inject,
157 args: [forwardRef(() => CdkStepper)]
158 }] }, { type: undefined, decorators: [{
159 type: Optional
160 }, {
161 type: Inject,
162 args: [STEPPER_GLOBAL_OPTIONS]
163 }] }]; }, propDecorators: { stepLabel: [{
164 type: ContentChild,
165 args: [CdkStepLabel]
166 }], content: [{
167 type: ViewChild,
168 args: [TemplateRef, { static: true }]
169 }], stepControl: [{
170 type: Input
171 }], interactedStream: [{
172 type: Output,
173 args: ['interacted']
174 }], label: [{
175 type: Input
176 }], errorMessage: [{
177 type: Input
178 }], ariaLabel: [{
179 type: Input,
180 args: ['aria-label']
181 }], ariaLabelledby: [{
182 type: Input,
183 args: ['aria-labelledby']
184 }], state: [{
185 type: Input
186 }], editable: [{
187 type: Input
188 }], optional: [{
189 type: Input
190 }], completed: [{
191 type: Input
192 }], hasError: [{
193 type: Input
194 }] } });
195class CdkStepper {
196 /** Whether the validity of previous steps should be checked or not. */
197 get linear() {
198 return this._linear;
199 }
200 set linear(value) {
201 this._linear = coerceBooleanProperty(value);
202 }
203 /** The index of the selected step. */
204 get selectedIndex() {
205 return this._selectedIndex;
206 }
207 set selectedIndex(index) {
208 const newIndex = coerceNumberProperty(index);
209 if (this.steps && this._steps) {
210 // Ensure that the index can't be out of bounds.
211 if (!this._isValidIndex(newIndex) && (typeof ngDevMode === 'undefined' || ngDevMode)) {
212 throw Error('cdkStepper: Cannot assign out-of-bounds value to `selectedIndex`.');
213 }
214 this.selected?._markAsInteracted();
215 if (this._selectedIndex !== newIndex &&
216 !this._anyControlsInvalidOrPending(newIndex) &&
217 (newIndex >= this._selectedIndex || this.steps.toArray()[newIndex].editable)) {
218 this._updateSelectedItemIndex(newIndex);
219 }
220 }
221 else {
222 this._selectedIndex = newIndex;
223 }
224 }
225 /** The step that is selected. */
226 get selected() {
227 return this.steps ? this.steps.toArray()[this.selectedIndex] : undefined;
228 }
229 set selected(step) {
230 this.selectedIndex = step && this.steps ? this.steps.toArray().indexOf(step) : -1;
231 }
232 /** Orientation of the stepper. */
233 get orientation() {
234 return this._orientation;
235 }
236 set orientation(value) {
237 // This is a protected method so that `MatStepper` can hook into it.
238 this._orientation = value;
239 if (this._keyManager) {
240 this._keyManager.withVerticalOrientation(value === 'vertical');
241 }
242 }
243 constructor(_dir, _changeDetectorRef, _elementRef) {
244 this._dir = _dir;
245 this._changeDetectorRef = _changeDetectorRef;
246 this._elementRef = _elementRef;
247 /** Emits when the component is destroyed. */
248 this._destroyed = new Subject();
249 /** Steps that belong to the current stepper, excluding ones from nested steppers. */
250 this.steps = new QueryList();
251 /** List of step headers sorted based on their DOM order. */
252 this._sortedHeaders = new QueryList();
253 this._linear = false;
254 this._selectedIndex = 0;
255 /** Event emitted when the selected step has changed. */
256 this.selectionChange = new EventEmitter();
257 this._orientation = 'horizontal';
258 this._groupId = nextId++;
259 }
260 ngAfterContentInit() {
261 this._steps.changes
262 .pipe(startWith(this._steps), takeUntil(this._destroyed))
263 .subscribe((steps) => {
264 this.steps.reset(steps.filter(step => step._stepper === this));
265 this.steps.notifyOnChanges();
266 });
267 }
268 ngAfterViewInit() {
269 // If the step headers are defined outside of the `ngFor` that renders the steps, like in the
270 // Material stepper, they won't appear in the `QueryList` in the same order as they're
271 // rendered in the DOM which will lead to incorrect keyboard navigation. We need to sort
272 // them manually to ensure that they're correct. Alternatively, we can change the Material
273 // template to inline the headers in the `ngFor`, but that'll result in a lot of
274 // code duplication. See #23539.
275 this._stepHeader.changes
276 .pipe(startWith(this._stepHeader), takeUntil(this._destroyed))
277 .subscribe((headers) => {
278 this._sortedHeaders.reset(headers.toArray().sort((a, b) => {
279 const documentPosition = a._elementRef.nativeElement.compareDocumentPosition(b._elementRef.nativeElement);
280 // `compareDocumentPosition` returns a bitmask so we have to use a bitwise operator.
281 // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition
282 // tslint:disable-next-line:no-bitwise
283 return documentPosition & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;
284 }));
285 this._sortedHeaders.notifyOnChanges();
286 });
287 // Note that while the step headers are content children by default, any components that
288 // extend this one might have them as view children. We initialize the keyboard handling in
289 // AfterViewInit so we're guaranteed for both view and content children to be defined.
290 this._keyManager = new FocusKeyManager(this._sortedHeaders)
291 .withWrap()
292 .withHomeAndEnd()
293 .withVerticalOrientation(this._orientation === 'vertical');
294 (this._dir ? this._dir.change : of())
295 .pipe(startWith(this._layoutDirection()), takeUntil(this._destroyed))
296 .subscribe(direction => this._keyManager.withHorizontalOrientation(direction));
297 this._keyManager.updateActiveItem(this._selectedIndex);
298 // No need to `takeUntil` here, because we're the ones destroying `steps`.
299 this.steps.changes.subscribe(() => {
300 if (!this.selected) {
301 this._selectedIndex = Math.max(this._selectedIndex - 1, 0);
302 }
303 });
304 // The logic which asserts that the selected index is within bounds doesn't run before the
305 // steps are initialized, because we don't how many steps there are yet so we may have an
306 // invalid index on init. If that's the case, auto-correct to the default so we don't throw.
307 if (!this._isValidIndex(this._selectedIndex)) {
308 this._selectedIndex = 0;
309 }
310 }
311 ngOnDestroy() {
312 this._keyManager?.destroy();
313 this.steps.destroy();
314 this._sortedHeaders.destroy();
315 this._destroyed.next();
316 this._destroyed.complete();
317 }
318 /** Selects and focuses the next step in list. */
319 next() {
320 this.selectedIndex = Math.min(this._selectedIndex + 1, this.steps.length - 1);
321 }
322 /** Selects and focuses the previous step in list. */
323 previous() {
324 this.selectedIndex = Math.max(this._selectedIndex - 1, 0);
325 }
326 /** Resets the stepper to its initial state. Note that this includes clearing form data. */
327 reset() {
328 this._updateSelectedItemIndex(0);
329 this.steps.forEach(step => step.reset());
330 this._stateChanged();
331 }
332 /** Returns a unique id for each step label element. */
333 _getStepLabelId(i) {
334 return `cdk-step-label-${this._groupId}-${i}`;
335 }
336 /** Returns unique id for each step content element. */
337 _getStepContentId(i) {
338 return `cdk-step-content-${this._groupId}-${i}`;
339 }
340 /** Marks the component to be change detected. */
341 _stateChanged() {
342 this._changeDetectorRef.markForCheck();
343 }
344 /** Returns position state of the step with the given index. */
345 _getAnimationDirection(index) {
346 const position = index - this._selectedIndex;
347 if (position < 0) {
348 return this._layoutDirection() === 'rtl' ? 'next' : 'previous';
349 }
350 else if (position > 0) {
351 return this._layoutDirection() === 'rtl' ? 'previous' : 'next';
352 }
353 return 'current';
354 }
355 /** Returns the type of icon to be displayed. */
356 _getIndicatorType(index, state = STEP_STATE.NUMBER) {
357 const step = this.steps.toArray()[index];
358 const isCurrentStep = this._isCurrentStep(index);
359 return step._displayDefaultIndicatorType
360 ? this._getDefaultIndicatorLogic(step, isCurrentStep)
361 : this._getGuidelineLogic(step, isCurrentStep, state);
362 }
363 _getDefaultIndicatorLogic(step, isCurrentStep) {
364 if (step._showError() && step.hasError && !isCurrentStep) {
365 return STEP_STATE.ERROR;
366 }
367 else if (!step.completed || isCurrentStep) {
368 return STEP_STATE.NUMBER;
369 }
370 else {
371 return step.editable ? STEP_STATE.EDIT : STEP_STATE.DONE;
372 }
373 }
374 _getGuidelineLogic(step, isCurrentStep, state = STEP_STATE.NUMBER) {
375 if (step._showError() && step.hasError && !isCurrentStep) {
376 return STEP_STATE.ERROR;
377 }
378 else if (step.completed && !isCurrentStep) {
379 return STEP_STATE.DONE;
380 }
381 else if (step.completed && isCurrentStep) {
382 return state;
383 }
384 else if (step.editable && isCurrentStep) {
385 return STEP_STATE.EDIT;
386 }
387 else {
388 return state;
389 }
390 }
391 _isCurrentStep(index) {
392 return this._selectedIndex === index;
393 }
394 /** Returns the index of the currently-focused step header. */
395 _getFocusIndex() {
396 return this._keyManager ? this._keyManager.activeItemIndex : this._selectedIndex;
397 }
398 _updateSelectedItemIndex(newIndex) {
399 const stepsArray = this.steps.toArray();
400 this.selectionChange.emit({
401 selectedIndex: newIndex,
402 previouslySelectedIndex: this._selectedIndex,
403 selectedStep: stepsArray[newIndex],
404 previouslySelectedStep: stepsArray[this._selectedIndex],
405 });
406 // If focus is inside the stepper, move it to the next header, otherwise it may become
407 // lost when the active step content is hidden. We can't be more granular with the check
408 // (e.g. checking whether focus is inside the active step), because we don't have a
409 // reference to the elements that are rendering out the content.
410 this._containsFocus()
411 ? this._keyManager.setActiveItem(newIndex)
412 : this._keyManager.updateActiveItem(newIndex);
413 this._selectedIndex = newIndex;
414 this._stateChanged();
415 }
416 _onKeydown(event) {
417 const hasModifier = hasModifierKey(event);
418 const keyCode = event.keyCode;
419 const manager = this._keyManager;
420 if (manager.activeItemIndex != null &&
421 !hasModifier &&
422 (keyCode === SPACE || keyCode === ENTER)) {
423 this.selectedIndex = manager.activeItemIndex;
424 event.preventDefault();
425 }
426 else {
427 manager.setFocusOrigin('keyboard').onKeydown(event);
428 }
429 }
430 _anyControlsInvalidOrPending(index) {
431 if (this._linear && index >= 0) {
432 return this.steps
433 .toArray()
434 .slice(0, index)
435 .some(step => {
436 const control = step.stepControl;
437 const isIncomplete = control
438 ? control.invalid || control.pending || !step.interacted
439 : !step.completed;
440 return isIncomplete && !step.optional && !step._completedOverride;
441 });
442 }
443 return false;
444 }
445 _layoutDirection() {
446 return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';
447 }
448 /** Checks whether the stepper contains the focused element. */
449 _containsFocus() {
450 const stepperElement = this._elementRef.nativeElement;
451 const focusedElement = _getFocusedElementPierceShadowDom();
452 return stepperElement === focusedElement || stepperElement.contains(focusedElement);
453 }
454 /** Checks whether the passed-in index is a valid step index. */
455 _isValidIndex(index) {
456 return index > -1 && (!this.steps || index < this.steps.length);
457 }
458 static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CdkStepper, deps: [{ token: i1.Directionality, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
459 static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: CdkStepper, selector: "[cdkStepper]", inputs: { linear: "linear", selectedIndex: "selectedIndex", selected: "selected", orientation: "orientation" }, outputs: { selectionChange: "selectionChange" }, queries: [{ propertyName: "_steps", predicate: CdkStep, descendants: true }, { propertyName: "_stepHeader", predicate: CdkStepHeader, descendants: true }], exportAs: ["cdkStepper"], ngImport: i0 }); }
460}
461i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CdkStepper, decorators: [{
462 type: Directive,
463 args: [{
464 selector: '[cdkStepper]',
465 exportAs: 'cdkStepper',
466 }]
467 }], ctorParameters: function () { return [{ type: i1.Directionality, decorators: [{
468 type: Optional
469 }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { _steps: [{
470 type: ContentChildren,
471 args: [CdkStep, { descendants: true }]
472 }], _stepHeader: [{
473 type: ContentChildren,
474 args: [CdkStepHeader, { descendants: true }]
475 }], linear: [{
476 type: Input
477 }], selectedIndex: [{
478 type: Input
479 }], selected: [{
480 type: Input
481 }], selectionChange: [{
482 type: Output
483 }], orientation: [{
484 type: Input
485 }] } });
486
487/** Button that moves to the next step in a stepper workflow. */
488class CdkStepperNext {
489 constructor(_stepper) {
490 this._stepper = _stepper;
491 /** Type of the next button. Defaults to "submit" if not specified. */
492 this.type = 'submit';
493 }
494 static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CdkStepperNext, deps: [{ token: CdkStepper }], target: i0.ɵɵFactoryTarget.Directive }); }
495 static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: CdkStepperNext, selector: "button[cdkStepperNext]", inputs: { type: "type" }, host: { listeners: { "click": "_stepper.next()" }, properties: { "type": "type" } }, ngImport: i0 }); }
496}
497i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CdkStepperNext, decorators: [{
498 type: Directive,
499 args: [{
500 selector: 'button[cdkStepperNext]',
501 host: {
502 '[type]': 'type',
503 '(click)': '_stepper.next()',
504 },
505 }]
506 }], ctorParameters: function () { return [{ type: CdkStepper }]; }, propDecorators: { type: [{
507 type: Input
508 }] } });
509/** Button that moves to the previous step in a stepper workflow. */
510class CdkStepperPrevious {
511 constructor(_stepper) {
512 this._stepper = _stepper;
513 /** Type of the previous button. Defaults to "button" if not specified. */
514 this.type = 'button';
515 }
516 static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CdkStepperPrevious, deps: [{ token: CdkStepper }], target: i0.ɵɵFactoryTarget.Directive }); }
517 static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: CdkStepperPrevious, selector: "button[cdkStepperPrevious]", inputs: { type: "type" }, host: { listeners: { "click": "_stepper.previous()" }, properties: { "type": "type" } }, ngImport: i0 }); }
518}
519i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CdkStepperPrevious, decorators: [{
520 type: Directive,
521 args: [{
522 selector: 'button[cdkStepperPrevious]',
523 host: {
524 '[type]': 'type',
525 '(click)': '_stepper.previous()',
526 },
527 }]
528 }], ctorParameters: function () { return [{ type: CdkStepper }]; }, propDecorators: { type: [{
529 type: Input
530 }] } });
531
532class CdkStepperModule {
533 static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CdkStepperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
534 static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: CdkStepperModule, declarations: [CdkStep,
535 CdkStepper,
536 CdkStepHeader,
537 CdkStepLabel,
538 CdkStepperNext,
539 CdkStepperPrevious], imports: [BidiModule], exports: [CdkStep, CdkStepper, CdkStepHeader, CdkStepLabel, CdkStepperNext, CdkStepperPrevious] }); }
540 static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CdkStepperModule, imports: [BidiModule] }); }
541}
542i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CdkStepperModule, decorators: [{
543 type: NgModule,
544 args: [{
545 imports: [BidiModule],
546 exports: [CdkStep, CdkStepper, CdkStepHeader, CdkStepLabel, CdkStepperNext, CdkStepperPrevious],
547 declarations: [
548 CdkStep,
549 CdkStepper,
550 CdkStepHeader,
551 CdkStepLabel,
552 CdkStepperNext,
553 CdkStepperPrevious,
554 ],
555 }]
556 }] });
557
558/**
559 * Generated bundle index. Do not edit.
560 */
561
562export { CdkStep, CdkStepHeader, CdkStepLabel, CdkStepper, CdkStepperModule, CdkStepperNext, CdkStepperPrevious, STEPPER_GLOBAL_OPTIONS, STEP_STATE, StepperSelectionEvent };
563//# sourceMappingURL=stepper.mjs.map