import React, { forwardRef } from "react"; import { cl } from "../utils/helpers"; import Step, { StepperStepProps } from "./Step"; import { StepperContextProvider } from "./context"; interface StepperProps extends React.HTMLAttributes { /** * `` elements. */ children: React.ReactNode; /** * The direction the component grows. * @default "vertical" */ orientation?: "horizontal" | "vertical"; /** * Current active step. * * Stepper index starts at 1, not 0. */ activeStep: number; /** * Callback for next `activeStep`. * * Stepper index starts at 1, not 0. */ onStepChange?: (step: number) => void; /** * Makes stepper non-interactive if false. * @deprecated Use `interactive` prop on `` instead for individual steps. For completely static steppers, use `Process` component instead. * @default true */ interactive?: boolean; } interface StepperComponent extends React.ForwardRefExoticComponent< StepperProps & React.RefAttributes > { /** * @see 🏷️ {@link StepperStepProps} * @see [🤖 OverridableComponent](https://aksel.nav.no/grunnleggende/kode/overridablecomponent) support */ Step: typeof Step; } /** * A component that displays a stepper with clickable steps. * * @see [📝 Documentation](https://aksel.nav.no/komponenter/core/stepper) * @see 🏷️ {@link StepperProps} * * @example * ```jsx * <> * * Søknadssteg * * * Start søknad * Saksopplysninger * Vedlegg * * * ``` */ export const Stepper: StepperComponent = forwardRef< HTMLOListElement, StepperProps >( ( { children, className, activeStep, orientation = "vertical", onStepChange = () => {}, interactive = true, ...rest }, ref, ) => { activeStep = activeStep - 1; return (
    {React.Children.map(children, (step, index) => { const stepProps: Partial = React.isValidElement(step) ? step.props : {}; const isInteractive = stepProps.interactive ?? interactive; return (
  1. {step}
  2. ); })}
); }, ) as StepperComponent; Stepper.Step = Step; export default Stepper; export { Step as StepperStep }; export type { StepperProps, StepperStepProps };