A lightweight, customizable, and reusable multi-stepper component for React.
It allows you to create step-based workflows such as onboarding, multi-step forms, or guided processes with ease.
- ✅ Easy to use and integrate into any React project
- 🎨 Fully customizable step styles (active, completed)
- ⚡ Built with TypeScript for type safety
- 🧩 Context-based state management with hooks
- 🧪 Tested with Vitest + React Testing Library (83% coverage)
npm install reactjs-multi-stepper
# or
yarn add reactjs-multi-stepperimport { MultiStepper,MultiStepperProvider,useMultiStepper } from "reactjs-multi-stepper";
function App() {
// Define reusable base style
const baseContentStyle = {
width: "60%",
height: "10vh",
marginBlock: "5vh",
display: "flex",
justifyContent: "center",
alignItems: "center",
borderRadius: "0.5vw",
};
const Component = () => {
const { handleNextStep } = useMultiStepper();
return <MultiStepper onClickNext={handleNextStep} />;
};
return (
<MultiStepperProvider
steppers={[
{
active: true,
title: "Step One",
children: (
<div
style={{
...baseContentStyle,
backgroundColor: "rgba(255, 0, 0, 0.5)",
}}
>
Step One Content
</div>
),
},
{
id: 2,
active: false,
title: "Step Two",
children: (
<div
style={{
...baseContentStyle,
backgroundColor: "rgba(0, 0, 255, 0.5)",
}}
>
Step Two Content
</div>
),
},
{
id: 3,
active: false,
title: "Step Three",
children: (
<div
style={{
...baseContentStyle,
backgroundColor: "rgba(0, 128, 0, 0.5)",
}}
>
Step Three Content
</div>
),
},
]}
>
<Component />
</MultiStepperProvider>
);
}
export default App;| Prop | Type | Required | Description |
|---|---|---|---|
steppers |
StepperType[] |
✅ | Array of step configurations |
children |
ReactNode |
✅ | Child components that will have access to stepper context |
options |
OptionsType |
(Optional) Custom icons for step statuses |
| Property | Type | Required | Description |
|---|---|---|---|
id |
number |
✅ | Unique identifier for the step |
title |
string |
✅ | Step title displayed in the stepper |
description |
string |
✅ | Step description or subtitle |
children |
ReactNode |
✅ | Content to render for this step |
| Property | Type | Required | Description |
|---|---|---|---|
completedIcon |
ReactNode | No | Icon to display for completed steps |
activeIcon |
ReactNode | No | Icon to display for the active step |
| Prop | Type | Required | Description |
|---|---|---|---|
onClickNext |
() => void |
✅ | Callback triggered when the "Next" button is clicked |
| Method/Property | Type | Description |
|---|---|---|
handleNextStep |
() => void |
Move to the next step |
setStepStatus |
(status: StepStatus) => void |
Update current step status |
currentStep |
number |
Current active step number |
totalSteps |
number |
Total number of steps |
| Status | Description |
|---|---|
"active" |
Step is currently active and ready for user interaction |
"completed" |
Step has been successfully completed |
