This component no longer exists. It was in ondo-ui’s manifest when we first indexed it and is not there now — the registry served its inventory on 2026-08-09 and this item was not on it. The install command below will fail. It is kept here because a tutorial somewhere still tells people to run it.
stepper
ondo-ui/stepperRemovedComponent
A step-by-step process for users to navigate through a series of steps.
Install it
npx shadcn@latest add https://ui.ondo.dou.so/r/stepper.jsonSource
1"use client"23import type { HTMLAttributes } from "react"4import {5 createContext,6 useCallback,7 useContext,8 useEffect,9 useId,10 useMemo,11 useRef,12 useState,13} from "react"14import { mergeProps } from "@base-ui/react/merge-props"15import { useRender } from "@base-ui/react/use-render"16import { cva } from "class-variance-authority"1718import { cn } from "@/lib/utils"1920type StepperOrientation = "horizontal" | "vertical"21type StepState = "active" | "completed" | "inactive"22type StepperVariant = "default" | "info" | "success" | "warning" | "destructive"2324type StepIndicators = {25 active?: React.ReactNode26 completed?: React.ReactNode27 inactive?: React.ReactNode28 loading?: React.ReactNode29}3031interface StepperContextValue {32 activeStep: number33 setActiveStep: (step: number) => void34 orientation: StepperOrientation35 variant: StepperVariant36 activeVariant: StepperVariant37 indicators: StepIndicators38 baseId: string39 registerTrigger: (node: HTMLButtonElement) => () => void40 focusNext: (node: HTMLButtonElement) => void41 focusPrev: (node: HTMLButtonElement) => void42 focusFirst: () => void43 focusLast: () => void44}4546interface StepItemContextValue {47 step: number48 state: StepState49 isDisabled: boolean50 isLoading: boolean51}5253const StepperContext = createContext<StepperContextValue | undefined>(undefined)54const StepItemContext = createContext<StepItemContextValue | undefined>(55 undefined56)5758function useStepper() {59 const context = useContext(StepperContext)6061 if (!context) {62 throw new Error("useStepper must be used within a Stepper")63 }6465 return context66}6768function useStepItem() {69 const context = useContext(StepItemContext)7071 if (!context) {72 throw new Error("useStepItem must be used within a StepperItem")73 }7475 return context76}7778interface StepperProps extends HTMLAttributes<HTMLDivElement> {79 defaultValue?: number80 value?: number81 onValueChange?: (value: number) => void82 orientation?: StepperOrientation83 variant?: StepperVariant84 activeVariant?: StepperVariant85 indicators?: StepIndicators86}8788const stepperIndicatorVariants = cva(89 "relative flex size-6 shrink-0 items-center justify-center overflow-hidden rounded-full border-background bg-accent text-xs text-accent-foreground data-[state=inactive]:text-muted-foreground",90 {91 variants: {92 variant: {93 default:94 "data-[state=completed]:border-primary data-[state=completed]:bg-primary data-[state=completed]:text-primary-foreground",95// … truncated
What it pulls in
npm packages
Other registry items
