Wizard
Betav1.0.0다단계 스텝 플로우(Stepper). 상단 인디케이터(번호·라벨·연결선) + 현재 스텝 패널 + 네비게이션으로 구성. controlled/uncontrolled 모두 지원하며useWizard()훅으로 next/prev/goTo 를 직접 제어합니다.
Loading…
import {
Wizard,
WizardSteps,
WizardPanel,
useWizard,
} from "@/components/ui/wizard";
<Wizard steps={["Account", "Profile", "Confirm"]}>
<WizardSteps clickable />
<WizardPanel step={0}>{/* 계정 폼 */}</WizardPanel>
<WizardPanel step={1}>{/* 프로필 폼 */}</WizardPanel>
<WizardPanel step={2}>{/* 확인 */}</WizardPanel>
<WizardActions />
</Wizard>
// 네비게이션은 useWizard() 로 직접 구성
function WizardActions() {
const { isFirst, isLast, next, prev } = useWizard();
return (
<div className="flex justify-end gap-2">
<Button variant="outline" onClick={prev} disabled={isFirst}>이전</Button>
<Button onClick={next}>{isLast ? "완료" : "다음"}</Button>
</div>
);
}Installation
pnpm dlx shadcn@latest add https://groudit.com/r/wizard.jsonComposition
Wizard (steps, value/onValueChange)
├── WizardSteps (clickable) — 인디케이터
├── WizardPanel (step) — 현재 스텝만 렌더
└── useWizard() — next/prev/goTo/isFirst/isLastDependencies
설치 시 자동으로 함께 들어오는 의존성. 모든 버전은 정확히 고정되어 자동 업데이트를 방지합니다.
npm packages
| Package | Version |
|---|---|
| clsx | 2.1.1 |
| tailwind-merge | 3.6.0 |
Accessibility
Keyboard interactions
| Key | Description |
|---|---|
Tab | 스텝 인디케이터 · 패널 · 네비게이션 버튼 순환. |
EnterSpace | 이전/다음/완료 버튼 실행, clickable 스텝 이동. |
Notes
- •현재 스텝에 aria-current="step" 부여 — 스크린리더가 진행 위치 안내.
- •WizardPanel 은 role="tabpanel". 현재 스텝만 렌더해 포커스 혼선 방지.
- •연결선·체크 아이콘은 장식용(aria-hidden). 라벨/번호로 의미 전달.