Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
128 changes: 128 additions & 0 deletions src/lib/stepper/stepper.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
Angular Material stepper walks users through multi-step processes by breaking them up
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The docs pattern I've been trying to keep is something like

  • One-sentence summary of the component (tabs docs seem to be the exception)
  • Live overview example
  • Individual sections specific to the component
  • Accessibility section

The live example can go in a follow up PR

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd make the first sentence tagline something like

Angular Material's stepper provides a wizard-like workflow by dividing content into logical steps.

into multiple logical and numbered steps. It displays progress through a sequence of steps
and can also be used for navigation between different steps.

Material stepper builds on the foundation of the CDK stepper that is responsible for the logic
that drives a stepped workflow. Material stepper extends the CDK stepper and has Material Design
styling.

There are two stepper components: `md-horizontal-stepper` and `md-vertical-stepper`. They
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd put this under a header like ### Stepper variants

can be used the same way. The only difference is the orientation of stepper.
`md-horizontal-stepper` selector can be used to create a horizontal stepper, and
`md-vertical-stepper` can be used to create a vertical stepper. `md-step` components need to be
placed inside either one of the two stepper components.


### Event
The `selectionChange` output event is emitted when the selected step changes.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd omit the events section since the information is covered in the generated API docs (we should remove this from the tabs docs as well)


### Labels
If a step's label is only text then `label` attribute can be used.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"If a step's label is only text, then the label attribute can be used."

```html
<md-vertical-stepper>
<md-step label="Step 1">
Content 1
</md-step>
<md-step label="Step 1">
Content 2
</md-step>
</md-vertical-stepper>
```

For more complex labels, add a template with the `mdStepLabel` directive inside the
`md-step`.
```html
<md-vertical-stepper>
<md-step>
<ng-template mdStepLabel>...</ng-template>
...
</md-step>
</md-vertical-stepper>
```

### Stepper buttons
There are two button directives to support navigation between different steps:
`mdStepperPrevious` and `mdStepperNext`.
```html
<md-horizontal-stepper>
<md-step>
...
<div>
<button md-button mdStepperPrevious>Back</button>
<button md-button mdStepperNext>Next</button>
</div>
</md-step>
</md-horizontal-stepper>
```

### Linear stepper
`linear` attribute can be set on `md-horizontal-stepper` and `md-vertical-stepper` to create
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

linear attribute -> The linear attribute

a linear stepper that requires the user to complete previous steps before proceeding
to following steps. For each `md-step`, `stepControl` attribute can be set to the top level
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

stepControl attribute -> the stepControl attribute

`AbstractControl` that is used to check the validity of the step.

There are two possible approaches. One is using a single form for stepper, and the other is
using a different form for each step.

#### Using a single form
When using a single form for the stepper, `mdStepperPrevious` and `mdStepperNext` has to be
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

has to be -> have to be

set to `type="button"` in order to prevent submission of the form before all steps
are completed.

```html
<form [formGroup]="formGroup">
<md-horizontal-stepper formArrayName="formArray" linear>
<md-step formGroupName="0" [stepControl]="formArray.get([0])">
...
<div>
<button md-button mdStepperNext type="button">Next</button>
</div>
</md-step>
<md-step formGroupName="1" [stepControl]="formArray.get([1])">
...
<div>
<button md-button mdStepperPrevious type="button">Back</button>
<button md-button mdStepperNext type="button">Next</button>
</div>
</md-step>
...
</md-horizontal-stepper>
</form>
```

#### Using a different form for each step
```html
<md-vertical-stepper linear>
<md-step [stepControl]="formGroup1">
<form [formGroup]="formGroup1">
...
</form>
</md-step>
<md-step [stepControl]="formGroup2">
<form [formGroup]="formGroup2">
...
</form>
</md-step>
</md-vertical-stepper>
```
### Types of steps

#### Optional step
If completion of a step in linear stepper is not required, then `optional` attribute can be set
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

optional attribute -> the optional attribute

on `md-step`.

#### Editable step
By default, steps are editable, which means users can return to previously completed steps and
edit their responses. `editable="true"` can be set on `md-step` to change the default
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing the period at the end


#### Completed step
By default, `completed` attribute of a step returns `true` if the step is valid (in case of
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

completed attribute -> the completed attribute

linear stepper) and the user has interacted with the step. The user, however, can also override
this default `completed` behavior by setting the `completed` attribute as needed.

### Keyboard interaction
- <kbd>LEFT_ARROW</kbd>: Focuses the previous step header
- <kbd>RIGHT_ARROW</kbd>: Focuses the next step header
- <kbd>ENTER</kbd>, <kbd>SPACE</kbd>: Selects the step that the focus is currently on
- <kbd>TAB</kbd>: Focuses the next tabbable element
- <kbd>TAB</kbd>+<kbd>SHIFT</kbd>: Focuses the previous tabbable element
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need an Accessibility section at the end that describes the a11y aspects of the component. In this case it should mention that the stepper is treated as a tabbed view for a11y purposes. Should also mention any required labels, etc.