Angular Stepper Component Overview

    The Ignite UI for Angular Stepper is a highly customizable component that visualizes content as a process and shows its progress by dividing the content into successive steps. It appears as a vertical or horizontal line. Provided by the Ignite UI for Angular Component library, the stepper component delivers a wizard-like workflow and multiple features like step validation, styling, orientation and keyboard navigation.

    Angular Stepper Example

    In this Angular Stepper example, you can see how users are given the opportunity to customize their credit card and they pass trough the process in five logical steps - selecting card type, adding business information, filling in personal information, providing shipping details and confirmation. Note that the fourth step in our Angular stepper demo gets enabled only if the user ticks the checkbox in the second step, signifying that their mailing address is different from the business physical address.

    Here is the a sample demonstrating how to achieve the above functionality using Angular Reactive Forms.

    Getting Started with Ignite UI for Angular Stepper

    To get started with the Ignite UI for Angular Stepper component, first you need to install Ignite UI for Angular. In an existing Angular application, type the following command:

    ng add igniteui-angular
    

    For a complete introduction to the Ignite UI for Angular, read the getting started topic.

    The next step is to import the IgxStepperModule in your app.module.ts file.

    // app.module.ts
    
    ...
    import { IgxStepperModule } from 'igniteui-angular';
    // import { IgxStepperModule } from '@infragistics/igniteui-angular'; for licensed package
    
    @NgModule({
        ...
        imports: [..., IgxStepperModule],
        ...
    })
    export class AppModule {}
    

    Alternatively, as of 16.0.0 you can import the IgxStepperComponent as a standalone dependency, or use the IGX_STEPPER_DIRECTIVES token to import the component and all of its supporting components and directives.

    // home.component.ts
    
    import { HammerModule } from '@angular/platform-browser';
    import { FormsModule } from '@angular/forms';
    import { IGX_STEPPER_DIRECTIVES } from 'igniteui-angular';
    // import { IGX_STEPPER_DIRECTIVES } from '@infragistics/igniteui-angular'; for licensed package
    
    @Component({
        selector: 'app-home',
        template: `<igx-stepper>
            <igx-step> 
                <p igxStepTitle>Step 1</p>
            </igx-step>
            <igx-step> 
                <p igxStepTitle>Step 2</p>
            </igx-step>
        </igx-stepper>`,
        styleUrls: ['home.component.scss'],
        standalone: true,
        imports: [IGX_STEPPER_DIRECTIVES, FormsModule, HammerModule]
        /* or imports: [IgxStepperComponent, FormsModule, HammerModule] */
    })
    export class HomeComponent {
        public task: Task;
    }
    

    Now that you have the Angular Stepper module or directives imported, you can start with a basic configuration of the igx-stepper and its steps. Now that you have the Angular Stepper module or directives imported, you can start with a basic configuration of the igx-stepper and its steps.

    Using the Angular Stepper

    IgxStepComponent is the representation of every step that belongs to the IgxStepperComponent. Steps provide isValid, active, optional, disabled and completed properties, which give you the ability to configure the step states according to your business requirement.

    Declaring a Stepper

    Now that we have the stepper module imported, let’s get started with its configuration.

    Steps can be declared using one of the following approaches.

    • Iterating through a data set
    <igx-stepper>
        <igx-step *ngFor="let step of stepsData" [disabled]=”step.disabled”>
            <igx-icon igxStepIndicator>
    			{{step.indicator}}
            </igx-icon>
    
            <p igxStepTitle>
    			{{step.title}}
            </p>
        </igx-step>
    </igx-stepper>
    
    • Creating static steps
    <igx-stepper>
        <igx-step> 
           <p igxStepTitle>Step 1</p>
        </igx-step>
        <igx-step> 
           <p igxStepTitle>Step 2</p>
        </igx-step>
    </igx-stepper>
    

    For each step the user has the ability to configure indicator, title, subtitle and content using the igxStepIndicator, igxStepTitle, igxStepSubtitle and igxStepContent directives as follows:

    <igx-stepper>
        <igx-step>
           <igx-icon igxStepIndicator>home</igx-icon>
           <p igxStepTitle>Home</p>
           <p igxStepSubtitle>Home Sub Title</p>
           <div igxStepContent>
              ...
           </div>
        </igx-step>
    </igx-stepper>
    

    Changing the Stepper Orientation

    You can customize the stepper orientation through the exposed orientation property. It takes a member of the IgxStepperOrientation enum - Horizontal (default value) or Vertical.

    Horizontal Stepper Orientation

    horizontal is the default value for the igx-stepper orientation property. When the stepper is horizontally orientated you have the opportunity to determine whether the steps’ content would be displayed above or below the steps’ headers. This could be achieved by setting the IgxStepperComponent contentTop boolean property, which default value is false. In case it is enabled the steps’ content would be displayed above the steps’ headers.

    Vertical Stepper Orientation

    You can easily switch from the horizontal to vertical layout. In order to change the default orientation you should set the orientation property to vertical.

    <igx-stepper [orientation]="'vertical'">
    	<igx-step>    
      		…   
    	</igx-step>
    
    	<igx-step>    
     		 …   
    	</igx-step>
    </igx-stepper>
    

    The sample below demonstrates how stepper orientation and titles position could be changed runtime.

    Step States

    IgxStepperComponent supports four steps states and each of them apply different styles by default:

    • active - Determines whether the step is the currently displayed. By design, if the user does not explicitly set some step’s active attribute to true, the initial active step would be the first non-disabled step.
    • disabled - Determines whether the step is interactable. By default, the disabled attribute of a step is set to false.
    • optional - By default, the optional attribute of a step is set to false. If validity of a step in linear stepper is not required, then the optional attribute can be enabled in order to be able to move forward independently from the step validity.
    • completed - By default, the completed attribute of a step returns false. The user, however, can override this default completed behavior by setting the completed attribute as needed. When step is marked as completed not only that the style of the step header is changed by default, but also the style of the progress line between the completed step and the next one. Both styles could be modified using the exposed CSS variables.

    The IgxStepperComponent gives you the opportunity to set validation logic for each step through the two-way bindable isValid property. Based on its value it is decided whether the user will have the ability to move forward in linear stepper mode. By default, the isValid property of a step is set to true.

    Linear Stepper

    The igx-stepper gives you the opportunity to set its steps flow using the linear property. By default, linear is set to false and the user is enabled to select any non-disabled step in the IgxStepperComponent.

    When the linear property is set to true, the stepper will require the current non-optional step to be valid before proceeding to the next one.

    If the current non-optional step is not valid you cannot go forward to the next step until you validate the current one.

    Note

    Optional steps validity is not taken into account in order to move forward.

    The following example demonstrates how to configure a linear stepper:

    Step Interactions

    IgxStepperComponent provides the following API methods for step interactions:

    • navigateTo – activates the step by given index.
    • next - activates the next non-disabled step.
    • prev – activates the previous non-disabled step.
    • reset – resets the stepper to its initial state.
    Note

    The reset method would not clear the step`s content. This should be done manually.

    Customizing the Steps

    The Ignite UI for Angular Stepper gives you the ability to configure different options for titles, indicators and more.

    This could be achieved through the stepType property of the IgxStepperComponent. It takes a member of the IgxStepType enum:

    • Full (default value)
    • Indicator
    • Title

    Full

    If titles and subtitles are defined, with this setup both indicators and titles would be rendered.

    The user would also have the ability to define the position of the title for the steps, so it could be placed before, after, above or below the step indicator. The user can configure the title position using the titlePosition property. Both properties take member of IgxStepperTitlePosition enum:

    • end
    • start
    • bottom
    • top

    When the igx-stepper is horizontally orientated, the title position default value is bottom.

    When the orientation is set to vertical layout the title position by default is end.

    Note

    titlePosition property is applicable only when the stepper stepType property is set to full.

    Indicator

    If you want to display only indicators for the steps, set the stepType option to indicator.

    The step indicator supports any content, however with the restriction that its size would be always 24 pixels. Having this in mind, we recommend using IgxIconComponent or IgxAvatarComponent as step indicators.

    Title

    If you want to display only titles for the steps, set the stepType option to title.

    In this way if subtitles are defined, they will also be rendered below the step title.

    Note

    This container could be re-templated as per your requirement without any size restrictions. For example, you could add an indicator with size greater than 24 pixels inside it.

    The sample below demonstrates all exposed step types and how they could be changed:

    The IgxStepperComponent also allows you to customize the rendered indicators for active, invalid and completed steps. This could be achieved through the igxStepActiveIndicator, igxStepInvalidIndicator and igxStepCompletedIndicator directives:

    <igx-stepper>
        <ng-template igxStepActiveIndicator>
           <igx-icon>edit</igx-icon>
        </ng-template>
    
        <ng-template igxStepInvalidIndicator>
           <igx-icon>error</igx-icon>
        </ng-template>
    
        <ng-template igxStepCompletedIndicator>
           <igx-icon>check</igx-icon>
        </ng-template>
        ...
    </igx-stepper>
    
    Note

    This templates would be applied for all steps with the relevant state.

    Angular Stepper Animations

    Angular Stepper Animations provide the end-users with a beautiful experience interacting with the defined steps. The available animation options differ depending on the orientation of the stepper.

    When the stepper is horizontally orientated, it is configured to use the slide animation by default. It also supports fade as an alternative. The animations are configured through the horizontalAnimationType input.

    In vertically orientated layout, the animation type could be defined using the verticalAnimationType property. By default, its value is grow and the user has the ability to set it to fade as well.

    Setting none to the both animation type inputs disables stepper animations.

    IgxStepperComponent gives you the ability to configure the duration of the transition between the steps. This could be achieved through the animationDuration property, which takes a number as an argument and it is common to the both orientations.

    Keyboard Navigation

    Angular Stepper provides a rich variety of keyboard interactions to the end-user. This functionality is enabled by default and allows end-users to easily navigate through the steps. The IgxStepperComponent navigation is compliant with W3 accessability standards and convenient to use.

    Key Combinations

    • Tab - moves the focus to the next tabbable element
    • Shift + Tab - moves the focus to the previous tabbable element
    • Arrow Down - moves the focus to the header of the next accessible step when the igx-stepper is vertically orientated
    • Arrow Up - moves the focus to the header of the previous accessible step when the igx-stepper is vertically orientated
    • Arrow Left - moves the focus to the header of the previous accessible step in both orientations
    • Arrow Right - moves the focus to the header of the next accessible step in both orientations
    • Home - moves the focus to the header of the FIRST enabled step in the igx-stepper
    • End - moves the focus to the header of the LAST enabled step in the igx-stepper
    • Enter / Space - activates the currently focused step
    Note

    By design when the user presses the Tab key over the step header the focus will move to the step content container. In case the container should be skipped the developer should set the content container [tabIndex]="-1".

    The Stepper Component is also available in the low-code, drag and drop App Builder™.

    Angular Stepper Styling

    Using the Ignite UI for Angular Theming, we can greatly alter the igx-stepper appearance.

    First, in order to use the functions exposed by the theme engine, we need to import the index file in our style file:

    @import '~igniteui-angular/lib/core/styles/themes/index';
    

    Following the simplest approach, we create a new theme that extends the stepper-theme and pass the parameters, which we would like to change:

    $custom-stepper-theme: stepper-theme(
        $current-title-color: #351e65,
        $current-subtitle-color: #5f4691,
        $step-separator-style: "solid"
    );
    
    

    Using CSS Variables

    The last step is to include the component's theme.

    :host {
        @include css-vars($custom-stepper-theme);
    }
    

    Using Theme Overrides

    In order to style components for older browsers, like IE11, we have to use a different approach, since CSS variables are not supported there.

    If the component is using the Emulated ViewEncapsulation, it is necessary to penetrate this encapsulation using ::ng-deep. To prevent the custom theme to leak into other components, be sure to include the :host selector before ::ng-deep:

    :host {
        ::ng-deep {
            @include stepper($custom-stepper-theme);    
        }
    }
    

    Demo

    The sample below demonstrates a simple styling applied through the Ignite UI for Angular Theming.

    API Reference

    Additional Resources

    Our community is active and always welcoming new ideas.