Command
검색과 키보드 탐색이 가능한 커맨드 팔레트 컴포넌트
개요
Command 컴포넌트는 cmdk 기반으로 검색 입력, 항목 필터링, 키보드 탐색을 제공하는 커맨드 메뉴입니다. 인라인으로 사용하거나 CommandDialog로 모달 팔레트 형태(⌘K 스타일)로 사용할 수 있습니다.
주요 특징
- ✅ 검색 필터링: 입력 텍스트에 따라 항목 자동 필터링
- ✅ 그룹화: CommandGroup으로 항목을 섹션별로 구분
- ✅ 단축키 표시: CommandShortcut으로 키 바인딩 힌트 표시
- ✅ 다이얼로그 모드: CommandDialog로 모달 커맨드 팔레트 구성
- ✅ 키보드 탐색: 방향키/Enter로 항목 탐색 및 실행
- ✅ 디자인 토큰: 테마 커스터마이징 지원
사용 예시
기본 사용
검색 입력, 그룹, 구분선, 단축키를 포함한 인라인 커맨드 메뉴입니다.
Preview
커맨드 다이얼로그
CommandDialog로 모달 형태의 커맨드 팔레트를 구성합니다. ⌘K 등의 전역 단축키와 함께 사용하는 것이 일반적입니다. 아래 Preview는 다이얼로그 내부에 렌더링되는 콘텐츠를 보여줍니다.
Preview
API Reference
Command Props
cmdk의 Command props를 모두 상속합니다.
| Prop | Type | Default | Description |
|---|---|---|---|
value | string | - | 선택된 항목 값 (제어 모드) |
onValueChange | (value: string) => void | - | 선택 값 변경 콜백 |
filter | function | - | 커스텀 필터 함수 |
loop | boolean | false | 항목 탐색 순환 여부 |
className | string | - | 추가 CSS 클래스 |
CommandDialog Props
Dialog props를 상속하며, 내부에 Command를 배치합니다.
| Prop | Type | Default | Description |
|---|---|---|---|
open | boolean | - | 열림 상태 (제어 모드) |
onOpenChange | (open: boolean) => void | - | 열림 상태 변경 콜백 |
title | string | "Command Palette" | 접근성용 제목 (시각적으로 숨김) |
description | string | "Search for a command to run..." | 접근성용 설명 (시각적으로 숨김) |
showCloseButton | boolean | false | 닫기 버튼 표시 |
className | string | - | 추가 CSS 클래스 |
CommandInput Props
| Prop | Type | Default | Description |
|---|---|---|---|
placeholder | string | - | 입력 플레이스홀더 |
value | string | - | 검색어 (제어 모드) |
onValueChange | (value: string) => void | - | 검색어 변경 콜백 |
CommandGroup Props
| Prop | Type | Default | Description |
|---|---|---|---|
heading | string | - | 그룹 제목 |
CommandItem Props
| Prop | Type | Default | Description |
|---|---|---|---|
value | string | - | 항목 값 (검색 대상) |
keywords | string[] | - | 추가 검색 키워드 |
disabled | boolean | false | 항목 비활성화 |
onSelect | (value: string) => void | - | 항목 선택 시 콜백 |
기본 사용법
import {
Command,
CommandDialog,
CommandInput,
CommandList,
CommandEmpty,
CommandGroup,
CommandItem,
CommandShortcut,
CommandSeparator,
} from "@vortex/ui-foundation"
<Command>
<CommandInput placeholder="검색..." />
<CommandList>
<CommandEmpty>결과가 없습니다.</CommandEmpty>
<CommandGroup heading="제안">
<CommandItem onSelect={() => console.log("선택됨")}>
캘린더
<CommandShortcut>⌘P</CommandShortcut>
</CommandItem>
</CommandGroup>
</CommandList>
</Command>접근성
시맨틱 마크업
- cmdk 기반으로 입력창에
role="combobox", 목록에role="listbox", 항목에role="option"자동 적용 aria-expanded,aria-activedescendant등 상태 속성 자동 관리- CommandDialog는 Dialog 기반으로 포커스 트랩과
aria-modal적용
키보드 지원
- ✅
↑/↓로 항목 탐색 - ✅
Enter로 항목 선택 - ✅
Esc로 다이얼로그 닫기 (CommandDialog)
관련 컴포넌트
- Dialog: CommandDialog의 기반이 되는 모달
- Combobox: 검색 가능한 선택 입력 컴포넌트
- DropdownMenu: 트리거 기반 메뉴 표시
Last updated on