Import
import { ProgressStepper } from '@contentful/f36-components';
import { ProgressStepper } from '@contentful/f36-progress-stepper';
Examples
Orientation
This component can be displayed in a horizontal or vertical orientation.
Example of ProgressStepper with horizontal orientation.
function ProgressStepperHorizontalExample() {
  return (
    <ProgressStepper activeStep={2} ariaLabel="Horizontal progress stepper">
      <ProgressStepper.Step state="complete" />
      <ProgressStepper.Step state="complete" />
      <ProgressStepper.Step state="active" />
      <ProgressStepper.Step />
      <ProgressStepper.Step />
    </ProgressStepper>
  );
}
Example of ProgressStepper with vertical orientation.
function ProgressStepperVerticalExample() {
  return (
    <div
      style={{
        height: '400px',
        display: 'flex',
        justifyContent: 'center',
      }}
    >
      <ProgressStepper
        activeStep={2}
        orientation="vertical"
        ariaLabel="Vertical progress stepper"
      >
        <ProgressStepper.Step state="complete" />
        <ProgressStepper.Step state="complete" />
        <ProgressStepper.Step state="active" />
        <ProgressStepper.Step />
        <ProgressStepper.Step />
      </ProgressStepper>
    </div>
  );
}
Step Styles
This component can be displayed with steps that show numbers or icons.
Example of ProgressStepper with number step styles and displaying the step state options.
function ProgressStepperNumberExample() {
  return (
    <ProgressStepper
      activeStep={0}
      stepStyle="number"
      ariaLabel="Number progress stepper"
    >
      <ProgressStepper.Step state="active" labelText="Active" />
      <ProgressStepper.Step state="complete" labelText="Complete" />
      <ProgressStepper.Step labelText="Incomplete" />
      <ProgressStepper.Step state="disabled" labelText="Disabled" />
      <ProgressStepper.Step state="error" labelText="Error" />
      <ProgressStepper.Step state="warning" labelText="Warning" />
    </ProgressStepper>
  );
}
Example of ProgressStepper with icon step styles and displaying the step state options.
function ProgressStepperIconExample() {
  return (
    <ProgressStepper
      activeStep={0}
      stepStyle="icon"
      ariaLabel="Icon progress stepper"
    >
      <ProgressStepper.Step state="active" labelText="Active" />
      <ProgressStepper.Step state="complete" labelText="Complete" />
      <ProgressStepper.Step labelText="Incomplete" />
      <ProgressStepper.Step state="disabled" labelText="Disabled" />
      <ProgressStepper.Step state="error" labelText="Error" />
      <ProgressStepper.Step state="warning" labelText="Warning" />
    </ProgressStepper>
  );
}
Labels
Example of ProgressStepper with horizontal orientation with labels.
function ProgressStepperHorizontalLabelExample() {
  return (
    <ProgressStepper
      activeStep={2}
      ariaLabel="Horizontal progress stepper with labels"
    >
      <ProgressStepper.Step state="complete" labelText="Label 1" />
      <ProgressStepper.Step state="complete" labelText="Label 2" />
      <ProgressStepper.Step state="active" labelText="Label 3" />
      <ProgressStepper.Step labelText="Label 4" />
      <ProgressStepper.Step labelText="Label 5" />
    </ProgressStepper>
  );
}
Example of ProgressStepper with vertical orientation with labels.
function ProgressStepperVerticalLabelExample() {
  return (
    <div
      style={{
        height: '400px',
        display: 'flex',
        justifyContent: 'center',
      }}
    >
      <ProgressStepper
        activeStep={2}
        orientation="vertical"
        ariaLabel="Vertical progress stepper with labels"
      >
        <ProgressStepper.Step state="complete" labelText="Label 1" />
        <ProgressStepper.Step state="complete" labelText="Label 2" />
        <ProgressStepper.Step state="active" labelText="Label 3" />
        <ProgressStepper.Step labelText="Label 4" />
        <ProgressStepper.Step labelText="Label 5" />
      </ProgressStepper>
    </div>
  );
}
Interactive Example
Example of the ProgressStepper with buttons to move between steps.
function ProgressStepperInteractiveExample() {
  const [currentStep, setCurrentStep] = useState(0);
  const steps = [
    { label: 'Step 1' },
    { label: 'Step 2' },
    { label: 'Step 3' },
    { label: 'Step 4' },
    { label: 'Step 5' },
  ];
  const getSteps = () => {
    return steps.map((step, index) => {
      if (index === currentStep) {
        return (
          <ProgressStepper.Step
            key={step.label}
            state="active"
            labelText={step.label}
          />
        );
      } else if (index < currentStep) {
        return (
          <ProgressStepper.Step
            key={step.label}
            state="complete"
            labelText={step.label}
          />
        );
      }
      return (
        <ProgressStepper.Step
          key={step.label}
          state="incomplete"
          labelText={step.label}
        />
      );
    });
  };
  return (
    <>
      <ProgressStepper
        stepStyle="icon"
        activeStep={currentStep}
        ariaLabel="Interactive progress stepper"
      >
        {getSteps()}
      </ProgressStepper>
      <Flex marginTop="spacingM" gap="spacingXs">
        <Button
          onClick={() => setCurrentStep(currentStep - 1)}
          isDisabled={currentStep === 0}
        >
          Previous Step
        </Button>
        <Button
          onClick={() => setCurrentStep(currentStep + 1)}
          isDisabled={currentStep > steps.length - 1}
        >
          Next Step
        </Button>
      </Flex>
    </>
  );
}
ProgressStepper
Name | Type | Default | 
|---|
| ariaLabel required   | string Label to be used on aria-label for the nav element  |  | 
| children required   | ReactNode  |  | 
| activeStep  | number  | 0  | 
| className  | string CSS class to be appended to the root element  |  | 
| margin  | "spacing2Xs" "spacingXs" "spacingS" "spacingM" "spacingL" "spacingXl" "spacing2Xl" "spacing3Xl" "spacing4Xl" "none" sets margin to one of the corresponding spacing tokens  |  | 
| marginBottom  | "spacing2Xs" "spacingXs" "spacingS" "spacingM" "spacingL" "spacingXl" "spacing2Xl" "spacing3Xl" "spacing4Xl" "none" sets margin-bottom to one of the corresponding spacing tokens  |  | 
| marginLeft  | "spacing2Xs" "spacingXs" "spacingS" "spacingM" "spacingL" "spacingXl" "spacing2Xl" "spacing3Xl" "spacing4Xl" "none" sets margin-left to one of the corresponding spacing tokens  |  | 
| marginRight  | "spacing2Xs" "spacingXs" "spacingS" "spacingM" "spacingL" "spacingXl" "spacing2Xl" "spacing3Xl" "spacing4Xl" "none" sets margin-right to one of the corresponding spacing tokens  |  | 
| marginTop  | "spacing2Xs" "spacingXs" "spacingS" "spacingM" "spacingL" "spacingXl" "spacing2Xl" "spacing3Xl" "spacing4Xl" "none" sets margin-top to one of the corresponding spacing tokens  |  | 
| orientation  | "horizontal" "vertical"  | horizontal  | 
| stepStyle  | "number" "icon"  | number  | 
| testId  | string A [data-test-id] attribute used for testing purposes  |  | 
ProgressStepper.Step
Name | Type | Default | 
|---|
| activeStep  | number Private prop for the ProgressStepper component  |  | 
| className  | string CSS class to be appended to the root element  |  | 
| labelText  | string  |  | 
| orientation  | "horizontal" "vertical" Private prop for the ProgressStepper component  |  | 
| state  | "active" "error" "warning" "disabled" "complete" "incomplete"  | incomplete  | 
| stepNumber  | number Private prop for the ProgressStepper component  |  | 
| stepStyle  | "number" "icon" Private prop for the ProgressStepper component  |  | 
| testId  | string A [data-test-id] attribute used for testing purposes  |  | 
Content guidelines
- The progress stepper provides visual feedback to help guide the user through a workflow that involves linear steps
 - Each step has an optional label
 - Label text should be short, clear and concise
 
Accessibility
- The 
ariaLabel prop for the ProgressStepper component is required. Provide a label that describes what the progress is about (e.g. App installation progress). - The 
aria-label provided for the each Step component communicates information about the step's number and type.