Scoped

Share stepper state with the Scoped component

Scoped is the provider for the stepper. Wrap your tree with <Scoped> so any descendant can call useStepper() from the same defineStepper and receive the same stepper instance. Without Scoped (or Stepper.Root), there is no shared stepper context.

Basic usage

import React from "react";
import {  } from "@stepperize/react";

const { ,  } = (
  { : "first", : "First" },
  { : "second", : "Second" },
  { : "last", : "Last" }
);

export const  = () => (
  <>
    < />
    < />
  </>
);

const  = () => {
  const  = ();
  return (
    <>
      {..("first", () => <>Starting with {.}</>)}
      {..("second", () => <>In the middle: {.}</>)}
    </>
  );
};

const  = () => {
  const  = ();
  return (
    < ={.. ? () => ..() : () => ..()}>
      {..("last", () => "Reset", () => "Next")}
    </>
  );
};

Props

NameTypeDescription
initialStepGet.Id<Steps>Initial active step ID
initialMetadataPartial<Record<Get.Id<Steps>, Metadata>>Initial metadata per step
childrenReact.ReactNodeContent to render
import React from "react";
import {  } from "@stepperize/react";

const { ,  } = (
  { : "first", : "First" },
  { : "second", : "Second" },
  { : "last", : "Last" }
);

export const  = () => (
  <
    ="second"
    ={{ : { : true }, : null, : null }}
  >
    < />
  </>
);

const  = () => {
  const  = ();
  return <>Current: {....}</>;
};

Nested scopes

You can nest different steppers (e.g. global wizard + local sub-steps):

import React from "react";
import {  } from "@stepperize/react";

const  = (
  { : "start", : "Start" },
  { : "middle", : "Middle" },
  { : "end", : "End" }
);

const  = (
  { : "sub1", : "Sub-step 1" },
  { : "sub2", : "Sub-step 2" }
);

export const  = () => (
  <.>
    < />
    <.>
      < />
    </.>
  </.>
);

const  = () => {
  const  = .();
  return <>Global: {....}</>;
};

const  = () => {
  const  = .();
  return <>Local: {....}</>;
};

With Stepper.Root

Stepper.Root wraps content and provides the stepper via context (it uses Scoped internally). Stepper.Root accepts initialStep and initialMetadata and passes them to Scoped internally; use either Root or Scoped to set initial state.

import React from "react";
import {  } from "@stepperize/react";

const { ,  } = (
  { : "first", : "First" },
  { : "second", : "Second" }
);

export const  = () => (
  <.>
    {({  }) => (
      <>
        <>Current: {....}</>
        < ={() => ..()}>Next</>
      </>
    )}
  </.>
);
Edit on GitHub

Last updated on

On this page