Command
검색 가능한 명령 팔레트 메뉴 컴포넌트
개요
iCignal Command는 Foundation Command(cmdk 기반)를 래핑하여 메뉴 항목을 items 배열 데이터로 선언적으로 구성할 수 있도록 한 컴포넌트입니다. 검색 입력, 그룹, 구분선, 단축키 표시를 지원하며, dialog 옵션으로 모달 명령 팔레트로도 사용할 수 있습니다.
주요 특징
- ✅ 데이터 기반 구성: items 배열만으로 메뉴 렌더링
- ✅ 검색 필터링: searchable 옵션으로 입력 기반 실시간 필터링
- ✅ 그룹/구분선: group 타입으로 섹션 구분, separator로 시각적 분리
- ✅ 아이콘/단축키: 항목별 icon, shortcut 표시 지원
- ✅ 다이얼로그 모드: dialog 옵션으로 모달 명령 팔레트 전환
- ✅ 선택 콜백: onSelect로 선택된 항목 객체 전달
사용 예시
기본 (검색 가능)
searchable 옵션으로 검색 입력을 표시하고, 입력에 따라 항목이 필터링됩니다.
Preview
비활성 및 위험 항목
disabled로 비활성 항목을, variant=“destructive”로 위험 항목을 표시합니다.
Preview
검색 결과 없음
empty prop으로 검색 결과가 없을 때 표시할 내용을 변경할 수 있습니다.
Preview
API Reference
Props
| Prop | Type | Default | Description |
|---|---|---|---|
items | CommandItemProps[] | [] | 메뉴 항목 배열 |
searchable | boolean | - | 검색 입력 표시 여부 |
placeholder | string | "Type a command or search..." | 검색 입력 플레이스홀더 |
empty | ReactNode | "No results found." | 검색 결과 없음 메시지 |
dialog | boolean | - | 모달 다이얼로그 모드 여부 |
open | boolean | - | 다이얼로그 열림 상태 (dialog 모드) |
className | string | - | 루트 엘리먼트 추가 CSS 클래스 |
CommandItemProps
| Prop | Type | Default | Description |
|---|---|---|---|
type | "separator" | "group" | - | 항목 타입 (미지정 시 일반 항목) |
label | string | - | 항목 텍스트 (group 타입은 헤딩) |
value | string | - | 항목 식별 값 |
icon | ReactNode | - | 항목 좌측 아이콘 |
shortcut | string | - | 항목 우측 단축키 표시 |
disabled | boolean | - | 비활성화 여부 |
inset | boolean | - | 들여쓰기 여부 (선언되어 있으나 현재 미적용) |
checked | boolean | - | 체크 상태 (data-checked 속성으로 전달) |
variant | "default" | "destructive" | "default" | 항목 스타일 |
items | CommandItemProps[] | - | group 타입의 하위 항목 목록 |
Events
| Event | Type | Description |
|---|---|---|
onSelect | (item: CommandItemProps) => void | 항목 선택 콜백 (선택 시 dialog 자동 닫힘) |
onOpenChange | (open: boolean) => void | 다이얼로그 열림 상태 변경 콜백 |
기본 사용법
import { Command } from "@vortex/ui-icignal"
<Command
searchable
items={[
{ label: "프로필", value: "profile", icon: <User />, shortcut: "⌘P" },
{ type: "separator" },
{ label: "삭제", value: "delete", variant: "destructive" },
]}
onSelect={(item) => console.log(item.value)}
/>다이얼로그 모드
dialog 옵션과 open, onOpenChange를 함께 사용해 모달 명령 팔레트를 만듭니다. 항목 선택 시 onOpenChange(false)가 자동 호출되어 다이얼로그가 닫힙니다.
const [open, setOpen] = useState(false)
// ⌘K 단축키로 여는 명령 팔레트 예시
<Command
dialog
open={open}
onOpenChange={setOpen}
searchable
items={[
{ label: "프로필", value: "profile" },
{ label: "설정", value: "settings" },
]}
onSelect={(item) => router.push(`/${item.value}`)}
/>접근성
ARIA 속성
cmdk 기반 Foundation Command가 자동으로 제공합니다:
- 검색 입력과 항목 목록 간
aria-activedescendant연결 - 키보드 ↑/↓로 항목 탐색, Enter로 선택
- 비활성 항목은 키보드 탐색에서 제외
- dialog 모드에서는 포커스 트랩 및 ESC 닫기 지원
권장 사항
- ✅ 항목에 고유한 value를 지정해 onSelect에서 식별
- ✅ 검색 대상이 되는 label에 명확한 명령어 이름 사용
- ✅ 자주 쓰는 명령에는 shortcut 표시로 키보드 사용성 향상
관련 컴포넌트
- Command (Foundation): Compound 구조의 Foundation 레이어 커맨드
- Dialog (Foundation): 일반적인 모달 다이얼로그
- Combobox: 옵션 검색 선택 입력
Last updated on