Steps 단계 표시
사용자가 흐름에 따라 작업을 완료하도록 안내합니다. 가로 / 세로, 클릭 내비게이션, 전체 상태 덮어쓰기를 지원합니다.
기본 사용법
기본 사용법
- 밑그림구도와 선을 정하기
- 번짐먹색을 층층이 스며들게 하기
- 채색단청의 색을 점찍기
- 낙관서명과 인장을 찍어 완성
- 밑그림
- 번짐
- 채색이 부분은 재작업이 필요합니다
- 낙관
- 밑그림구도와 선을 정하기
- 번짐먹색을 층층이 스며들게 하기
- 채색
- 낙관
import { useState } from 'react'
import { LhSteps, LhStep } from '@lh-ui/react'
export default function Demo() {
const [current, setCurrent] = useState(1)
return (
<LhSteps current={current} onChange={(index) => setCurrent(index)}>
<LhStep title="밑그림" description="구도와 선을 확정합니다" />
<LhStep title="먹 번짐" description="먹색을 단계적으로 번지게 합니다" />
<LhStep title="채색" description="채색을 입입니다" />
<LhStep title="낙관" description="낙관과 인장으로 완성합니다" />
</LhSteps>
)
}
Steps Props
| 프로퍼티 | 설명 | 타입 | 옵션 | 기본값 |
|---|---|---|---|---|
| current | 현재 단계 인덱스(0부터, 제어형) | number | — | — |
| defaultCurrent | 현재 단계 기본값(비제어) | number | — | 0 |
| direction | 방향 | 'horizontal' | 'vertical' | — | 'horizontal' |
| clickable | 단계 클릭 내비게이션 허용 여부 | boolean | — | false |
| status | 모든 단계의 상태를 덮어씀(커스텀 표시용) | 'wait' | 'process' | 'finish' | 'error' | — | — |
| themeVars | 컴포넌트 수준 테마 변수(키에 자동으로 --lh- 접두사 추가) | Record<string, string> | — | — |
| sx | 간편 레이아웃 프로퍼티 | SxProps | — | — |
Step Props
| 프로퍼티 | 설명 | 타입 | 기본값 |
|---|---|---|---|
| title | 단계 제목 | ReactNode | — |
| description | 단계 설명 | ReactNode | — |
| icon | 커스텀 아이콘 이름(미전달 시 finish / error는 체크 / 엑스 아이콘, 나머지는 숫자 표시) | LhIconName | — |
Steps 이벤트
| 이벤트 | 설명 | 콜백 시그니처 | Vue 대응 |
|---|---|---|---|
| onChange | 현재 단계가 변경될 때 발생(clickable일 때만 발생) | (index: number) => void | @change |
제어 / 비제어
current를 전달하면 제어형(컴포넌트가 내부 상태를 갖지 않음)이고, defaultCurrent를 전달하면 비제어 내부 상태를 사용합니다. 두 모드 모두 onChange가 발생합니다.
클릭 가능 범위
clickable이 참이어도 "완료"와 "진행 중" 단계만 <button>으로 렌더링됩니다. 이후 단계(wait 상태)는 항상 <span>이며, 도달하지 않은 흐름 노드로의 점프를 막습니다 — lh-ui-plus 동작과 일치합니다.
자식 노드 제한
children은 반드시 직접 LhStep이어야 합니다(.map으로 렌더링 가능). 커스텀 컴포넌트로 감쌀 수 없습니다 — 부모 컴포넌트가 Children.toArray로 자식 요소 타입을 필터링해 인덱스를 주입하기 때문에, 감싸면 인덱스 주입이 실패하고 상태 계산이 꼬입니다.
테마 변수
themeVars의 키에 자동으로 --lh- 접두사가 붙고 루트 요소의 인라인 스타일에 기록됩니다:
<LhSteps current={1} themeVars={{ 'steps-item-basis': '72px' }}>
<LhStep title="밑그림" />
<LhStep title="먹 번짐" />
</LhSteps>
접근성
목록은 <ol role="list">이고, 현재 단계는 aria-current="step"을 출력합니다. 각 단계의 상태는 aria-label(언어 패 steps.step 템플릿, 예: "2단계")과 상태 클래스명으로 함께 표현됩니다.
ref
forwardRef<HTMLOListElement> — <ol> 루트 요소. LhStep은 HTMLLIElement를 전달합니다.
스타일
import '@lh-ui/react/theme.css'
import '@lh-ui/react/style/steps'