Skip to Content

Command

검색 가능한 명령 팔레트 메뉴 컴포넌트


개요

iCignal Command는 Foundation Command(cmdk 기반)를 래핑하여 메뉴 항목을 items 배열 데이터로 선언적으로 구성할 수 있도록 한 컴포넌트입니다. 검색 입력, 그룹, 구분선, 단축키 표시를 지원하며, dialog 옵션으로 모달 명령 팔레트로도 사용할 수 있습니다.

주요 특징

  • 데이터 기반 구성: items 배열만으로 메뉴 렌더링
  • 검색 필터링: searchable 옵션으로 입력 기반 실시간 필터링
  • 그룹/구분선: group 타입으로 섹션 구분, separator로 시각적 분리
  • 아이콘/단축키: 항목별 icon, shortcut 표시 지원
  • 다이얼로그 모드: dialog 옵션으로 모달 명령 팔레트 전환
  • 선택 콜백: onSelect로 선택된 항목 객체 전달

사용 예시

기본 (검색 가능)

searchable 옵션으로 검색 입력을 표시하고, 입력에 따라 항목이 필터링됩니다.

비활성 및 위험 항목

disabled로 비활성 항목을, variant=“destructive”로 위험 항목을 표시합니다.

새로 만들기
복제
삭제⌘⌫

검색 결과 없음

empty prop으로 검색 결과가 없을 때 표시할 내용을 변경할 수 있습니다.

프로필

API Reference

Props

PropTypeDefaultDescription
itemsCommandItemProps[][]메뉴 항목 배열
searchableboolean-검색 입력 표시 여부
placeholderstring"Type a command or search..."검색 입력 플레이스홀더
emptyReactNode"No results found."검색 결과 없음 메시지
dialogboolean-모달 다이얼로그 모드 여부
openboolean-다이얼로그 열림 상태 (dialog 모드)
classNamestring-루트 엘리먼트 추가 CSS 클래스

CommandItemProps

PropTypeDefaultDescription
type"separator" | "group"-항목 타입 (미지정 시 일반 항목)
labelstring-항목 텍스트 (group 타입은 헤딩)
valuestring-항목 식별 값
iconReactNode-항목 좌측 아이콘
shortcutstring-항목 우측 단축키 표시
disabledboolean-비활성화 여부
insetboolean-들여쓰기 여부 (선언되어 있으나 현재 미적용)
checkedboolean-체크 상태 (data-checked 속성으로 전달)
variant"default" | "destructive""default"항목 스타일
itemsCommandItemProps[]-group 타입의 하위 항목 목록

Events

EventTypeDescription
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 표시로 키보드 사용성 향상

관련 컴포넌트

Last updated on