UI

Menu

Menu suspenso com uma lista de ações ou opções, aberto por um botão — o equivalente ao DropdownMenu do shadcn.

Última ação: —

Instalação

npx shadcn@latest add @lenstech/menu

Uso

import { Button } from "@/components/ui/button"
import { Menu, MenuContent, MenuItem, MenuSeparator } from "@/components/ui/menu"
<Menu>
  <Button variant="outline">Ações</Button>
  <MenuContent aria-label="Ações" onAction={(key) => executar(key)}>
    <MenuItem id="editar">Editar</MenuItem>
    <MenuItem id="duplicar">Duplicar</MenuItem>
    <MenuSeparator />
    <MenuItem id="excluir" variant="destructive">Excluir</MenuItem>
  </MenuContent>
</Menu>

Vindo do shadcn? DropdownMenu vira Menu

DropdownMenu → Menu, DropdownMenuContent → MenuContent, DropdownMenuItem → MenuItem, DropdownMenuLabel → MenuHeader, DropdownMenuSub → SubmenuTrigger. Não há DropdownMenuTrigger: o primeiro filho de Menu é o botão que abre o menu.

Use onAction, não onClick

Os itens respondem a mouse, toque, teclado (Enter/Espaço) e busca por digitação. Trate a escolha com onAction — no MenuContent (recebe o id do item) ou no próprio MenuItem. Para navegar, passe href ao item. Itens com conteúdo além de texto (ícone, atalho) precisam de textValue para a busca por digitação.

Exemplos

Agrupe itens com MenuSection + MenuHeader e separe com MenuSeparator. Itens com href viram links reais; isDisabled desabilita um item.

Seleção (checkbox e radio)

Defina selectionMode numa MenuSection (ou no MenuContent): "multiple" mostra um check, "single" mostra uma bolinha. Controle com selectedKeys e onSelectionChange, como nos equivalentes DropdownMenuCheckboxItem e DropdownMenuRadioGroup do shadcn.

Colunas: nome, telefone · Ordem: recentes

SubmenuTrigger recebe um MenuItem (o gatilho) e um MenuContent (o submenu). Abre com hover, seta → ou Enter.

Quando usar

  • Use para agrupar ações secundárias: o "⋯" de uma linha de tabela, o menu da conta do usuário.
  • Não use para escolher um valor de formulário — use Select.
  • Não use para a navegação principal do site — use links visíveis ou um Sheet no mobile.
  • Se há só uma ou duas ações, prefira botões visíveis a escondê-las num menu.

API

É o MenuTrigger do React Aria (também exportado como MenuTrigger). Aceita isOpen, defaultOpen, onOpenChange e trigger ("press" ou "longPress").

Aceita todas as props do Menu do React Aria, mais:

Prop

Type

Aceita todas as props do MenuItem do React Aria, mais:

Prop

Type

Demais partes

Prop

Type

On this page