React

Menu

사용자가 취할 수 있는 선택지나 액션 리스트를 제공하는 컴포넌트입니다.

Installation

npx @seed-design/cli@latest add ui:menu

Usage

Menu는 아래와 같은 구조로 구성됩니다.

import {
  MenuRoot,
  MenuTrigger,
  MenuContent,
  MenuGroup,
  MenuGroupLabel,
  MenuItem,
} from "seed-design/ui/menu";
<MenuRoot>
  <MenuTrigger>...</MenuTrigger>
  <MenuContent>
    <MenuGroup>
      <MenuGroupLabel>그룹 제목</MenuGroupLabel>
      <MenuItem label="항목 1" />
      <MenuItem label="항목 2" />
    </MenuGroup>
    <MenuGroup>
      <MenuItem label="항목 3" />
    </MenuGroup>
  </MenuContent>
</MenuRoot>
  • MenuRoot: 메뉴의 상태(열림/닫힘)와 위치를 관리합니다.
  • MenuTrigger: 클릭 시 메뉴를 열고 닫는 트리거입니다.
  • MenuAnchor: 메뉴의 위치 기준점만 제공하며, 열고 닫는 동작은 포함하지 않습니다. 트리거 동작을 직접 제어해야 하는 경우에 MenuTrigger 대신 사용합니다.
  • MenuContent: 메뉴 항목들을 감싸는 플로팅 컨테이너입니다.
  • MenuGroup: 관련된 항목들을 그룹으로 묶습니다. 모든 MenuItemMenuGroup 안에 있어야 합니다.
  • MenuGroupLabel: 그룹의 제목을 표시합니다.
  • MenuItem: 개별 메뉴 항목입니다.

Props

Prop

Type

children?React.ReactNode
disabled?boolean | undefined
open?boolean | undefined
defaultOpen?boolean | undefined
onOpenChange?((open: boolean, details?: MenuChangeDetails) => void) | undefined

Prop

Type

Prop

Type

Prop

Type

positionerContainer?React.RefObject<HTMLElement | null> | undefined

Prop

Type

Prop

Type

Prop

Type

prefixIcon?React.ReactNode
labelReact.ReactNode
description?React.ReactNode
suffixIcon?React.ReactNode
disabled?boolean | undefined

Examples

Trigger

<MenuTrigger>aria-haspopup="menu" 속성을 설정하고, Menu의 open 상태에 따라 aria-expanded 속성을 자동으로 설정합니다. 이 속성은 스크린 리더와 같은 보조 기술에 유용합니다.

Size

size로 MenuRoot의 크기를 정합니다. (default: medium)

responsive는 화면 너비에 따라 size가 자동으로 전환되는 값입니다. 여러 화면 너비를 함께 지원하는 제품에서 size=responsive를 사용하여 대응합니다.

With Description

MenuItemdescription prop을 사용하여 항목에 부가 설명을 추가합니다.

Tone

MenuItemtone prop으로 항목의 톤을 설정합니다.

Disabled Items

MenuItemdisabled prop을 사용하여 특정 항목을 비활성화합니다.

Placement

MenuRootplacement prop으로 메뉴의 위치를 설정합니다. 기본값은 "bottom"입니다.

Anchor

MenuAnchorchildren은 Menu가 위치를 잡는 데에만 사용되며, MenuTrigger와 달리 클릭으로 열고 닫는 동작이 포함되지 않습니다.

open prop을 controlled하게 사용하여 열리고 닫힌 상태를 직접 관리해야 합니다.

Menu는 기본적으로 Menu 밖 영역에서 클릭(마우스 환경) 또는 드래그(터치 환경)가 발생할 때 닫힙니다.

아래 예시의 경우 onOpenChange 콜백에 조건을 추가하여 바깥 영역을 클릭한 경우에도 메뉴가 닫히지 않도록 구현되어 있습니다.

Match Width

MenuRootmatchReferenceWidth prop을 사용하면 메뉴의 너비가 reference 요소(Trigger 또는 Anchor)의 너비에 맞춰집니다.

onOpenChange Details

onOpenChange 두 번째 인자로 details가 제공됩니다.

reason

열릴 때 (open: true)

  • "trigger": MenuTrigger로 열림

닫힐 때 (open: false)

  • "trigger": MenuTrigger로 닫힘
  • "escapeKeyDown": ESC 키 사용
  • "interactOutside": 외부 영역 클릭
  • "itemClick": 메뉴 항목 클릭
  • "cascadeDismiss": 상위 레이어 닫힘으로 인한 연쇄 닫힘

Last updated on

On this page