ContextMenu
요소 우클릭 시 상황별 메뉴를 표시하는 컴포넌트
개요
iCignal ContextMenu는 Foundation ContextMenu(Base UI Menu 기반)를 래핑하여 메뉴 항목을 items 배열 데이터로 선언적으로 구성할 수 있도록 한 컴포넌트입니다. 일반 항목, 체크박스, 라디오 그룹, 서브메뉴, 구분선을 지원하며, trigger로 지정한 영역을 우클릭하면 메뉴가 열립니다.
주요 특징
- ✅ 데이터 기반 구성: items 배열만으로 메뉴 렌더링
- ✅ 다양한 항목 타입: 일반, checkbox, radio-group, separator 지원
- ✅ 서브메뉴: items 중첩으로 다단계 메뉴 구성
- ✅ 단축키 표시: 항목별 shortcut 텍스트 표시
- ✅ 위험 항목: variant=“destructive”로 위험 작업 강조
- ✅ 너비 지정: width prop으로 메뉴 너비 고정 가능
사용 예시
기본 사용법
trigger로 지정한 영역을 우클릭하면 메뉴가 열립니다.
Preview
여기를 우클릭하세요
체크박스와 라디오 그룹
checkbox 타입으로 토글 옵션을, radio-group 타입으로 단일 선택 옵션을 제공합니다.
Preview
보기 옵션 — 우클릭
서브메뉴와 위험 항목
항목에 items를 중첩하면 서브메뉴가 되고, variant=“destructive”로 위험 작업을 강조합니다.
Preview
파일 옵션 — 우클릭
API Reference
Props
| Prop | Type | Default | Description |
|---|---|---|---|
trigger | ReactNode | (필수) | 우클릭으로 메뉴를 여는 영역 |
items | ContextItemProps[] | (필수) | 메뉴 항목 배열 |
width | number | - | 메뉴 너비 (px) |
ContextItemProps
| Prop | Type | Default | Description |
|---|---|---|---|
type | "separator" | "radio-group" | "checkbox" | - | 항목 타입 (미지정 시 일반/서브메뉴 항목) |
label | string | - | 항목 텍스트 (radio-group 타입은 그룹 레이블) |
value | string | - | 항목 식별 값 |
shortcut | string | - | 항목 우측 단축키 표시 |
disabled | boolean | - | 비활성화 여부 |
inset | boolean | - | 좌측 들여쓰기 여부 |
checked | boolean | - | checkbox 타입의 체크 상태 |
selectedValue | string | - | radio-group 타입의 현재 선택 값 |
variant | "default" | "destructive" | "default" | 항목 스타일 |
items | ContextItemProps[] | - | 서브메뉴 또는 radio-group 하위 항목 목록 |
Events
| Event | Type | Description |
|---|---|---|
onSelect | (item: ContextItemProps) => void | 항목 선택 콜백 |
onOpenChange | (open: boolean) => void | 메뉴 열림 상태 변경 콜백 |
기본 사용법
import { ContextMenu } from "@vortex/ui-icignal"
<ContextMenu
trigger={<div>우클릭 영역</div>}
width={220}
items={[
{ label: "이름 바꾸기", value: "rename" },
{ type: "checkbox", label: "고정", value: "pin", checked: true },
{ type: "separator" },
{ label: "삭제", value: "delete", variant: "destructive" },
]}
onSelect={(item) => console.log(item.value)}
/>접근성
ARIA 속성
Base UI Menu 기반 Foundation ContextMenu가 자동으로 제공합니다:
role="menu"및 항목별role="menuitem",role="menuitemcheckbox",role="menuitemradio"적용- 체크/라디오 항목에
aria-checked자동 적용 - 키보드 ↑/↓로 항목 탐색, →/←로 서브메뉴 진입·복귀, ESC로 닫기
- 메뉴가 열리면 포커스가 메뉴로 이동하고 닫히면 트리거로 복귀
권장 사항
- ✅ 파괴적 작업에는
variant="destructive"사용 - ✅ 긴 메뉴는 separator와 서브메뉴로 구조화
- ❌ 우클릭 메뉴에만 기능을 숨기지 말고, 일반 버튼 등 대체 진입점 제공
관련 컴포넌트
- ContextMenu (Foundation): Compound 구조의 Foundation 레이어 컨텍스트 메뉴
- DropdownMenu (Foundation): 클릭으로 여는 드롭다운 메뉴
- Menubar (Foundation): 애플리케이션 상단 메뉴 바
Last updated on