Pular para o conteúdo

ContextMenu

Menu de contexto de clique direito com submenus aninhados e ícones.

import { ContextMenu } from 'asterui'

Menu de Contexto Básico

Clique com o botão direito no elemento para mostrar o menu.

Right-click here
import { ContextMenu, notification } from 'asterui'

function App() {
  return (
      <ContextMenu onSelect={(key) => notification.info({ message: `Selected: ${key}` })}>
        <div className="p-8 bg-base-200 rounded-lg text-center cursor-context-menu">
          Right-click here
        </div>
        <ContextMenu.Item key="copy">Copy</ContextMenu.Item>
        <ContextMenu.Item key="paste">Paste</ContextMenu.Item>
        <ContextMenu.Item key="cut">Cut</ContextMenu.Item>
      </ContextMenu>
    )
}

export default App

Padrão Orientado a Dados

Use a prop items para menus orientados a dados.

Right-click here
import { ContextMenu, notification } from 'asterui'

function App() {
  const items = [
    { key: 'copy', label: 'Copy' },
    { key: 'paste', label: 'Paste' },
    { key: 'cut', label: 'Cut' },
  ]
  
  return (
      <ContextMenu items={items} onSelect={(key) => notification.info({ message: `Selected: ${key}` })}>
        <div className="p-8 bg-base-200 rounded-lg text-center cursor-context-menu">
          Right-click here
        </div>
      </ContextMenu>
    )
}

export default App

Com Ícones

Itens de menu com ícones.

Right-click for options
import { ContextMenu, notification } from 'asterui'

function App() {
  const items = [
    { key: 'edit', label: 'Edit', icon: <span>✏️</span> },
    { key: 'duplicate', label: 'Duplicate', icon: <span>📋</span> },
    { key: 'delete', label: 'Delete', icon: <span>🗑️</span>, danger: true },
  ]
  
  return (
      <ContextMenu items={items} onSelect={(key) => notification.info({ message: `Selected: ${key}` })}>
        <div className="p-8 bg-base-200 rounded-lg text-center cursor-context-menu">
          Right-click for options
        </div>
      </ContextMenu>
    )
}

export default App

Com Divisores

Separar seções do menu com divisores.

Right-click for menu with sections
import { ContextMenu, notification } from 'asterui'

function App() {
  const items = [
    { key: 'undo', label: 'Undo' },
    { key: 'redo', label: 'Redo' },
    { key: 'divider1', divider: true },
    { key: 'cut', label: 'Cut' },
    { key: 'copy', label: 'Copy' },
    { key: 'paste', label: 'Paste' },
    { key: 'divider2', divider: true },
    { key: 'select-all', label: 'Select All' },
  ]
  
  return (
      <ContextMenu items={items} onSelect={(key) => notification.info({ message: `Selected: ${key}` })}>
        <div className="p-8 bg-base-200 rounded-lg text-center cursor-context-menu">
          Right-click for menu with sections
        </div>
      </ContextMenu>
    )
}

export default App

Submenu Aninhado

Itens de menu com submenus aninhados.

Right-click for nested menu
import { ContextMenu, notification } from 'asterui'

function App() {
  const items = [
    { key: 'new', label: 'New', children: [
      { key: 'new-file', label: 'File' },
      { key: 'new-folder', label: 'Folder' },
      { key: 'new-project', label: 'Project' },
    ]},
    { key: 'open', label: 'Open' },
    { key: 'save', label: 'Save' },
    { key: 'divider', divider: true },
    { key: 'export', label: 'Export', children: [
      { key: 'export-pdf', label: 'PDF' },
      { key: 'export-png', label: 'PNG' },
      { key: 'export-svg', label: 'SVG' },
    ]},
  ]
  
  return (
      <ContextMenu items={items} onSelect={(key) => notification.info({ message: `Selected: ${key}` })}>
        <div className="p-8 bg-base-200 rounded-lg text-center cursor-context-menu">
          Right-click for nested menu
        </div>
      </ContextMenu>
    )
}

export default App

Itens Desabilitados

Alguns itens do menu podem ser desabilitados.

Right-click (some items disabled)
import { ContextMenu, notification } from 'asterui'

function App() {
  const items = [
    { key: 'copy', label: 'Copy' },
    { key: 'paste', label: 'Paste', disabled: true },
    { key: 'cut', label: 'Cut' },
    { key: 'delete', label: 'Delete', danger: true, disabled: true },
  ]
  
  return (
      <ContextMenu items={items} onSelect={(key) => notification.info({ message: `Selected: ${key}` })}>
        <div className="p-8 bg-base-200 rounded-lg text-center cursor-context-menu">
          Right-click (some items disabled)
        </div>
      </ContextMenu>
    )
}

export default App
PropriedadeDescriçãoTipoPadrão
childrenElemento que aciona o menu de contexto ao clicar com o botão direitoReact.ReactNode-
itemsItens do menuContextMenuItem[]-
onSelectCallback quando um item é selecionado(key: string) => void-
disabledSe o menu de contexto está desabilitadobooleanfalse
classNameClasses CSS adicionais para o menustring-
data-testidID de teste para testesstring-
PropriedadeDescriçãoTipoPadrão
keyIdentificador único para o itemstring-
labelRótulo de exibiçãoReact.ReactNode-
iconElemento de íconeReact.ReactNode-
disabledEstado desabilitadobooleanfalse
dangerMostrar como ação de perigo/destrutivabooleanfalse
dividerRenderizar como um divisorbooleanfalse
childrenItens de submenuContextMenuItem[]-
data-testidID de teste para testesstring-
PropriedadeDescriçãoTipoPadrão
keyChave única para o item (prop key do React)string-
childrenConteúdo do itemReact.ReactNode-
iconÍcone para exibir antes do rótuloReact.ReactNode-
disabledSe o item está desabilitadobooleanfalse
dangerMostrar como ação de perigo/destrutivabooleanfalse
data-testidID de teste para testesstring-
PropriedadeDescriçãoTipoPadrão
keyChave única para o submenu (prop key do React)string-
labelRótulo do submenuReact.ReactNode-
iconÍcone para exibir antes do rótuloReact.ReactNode-
disabledSe o submenu está desabilitadobooleanfalse
childrenItens do submenuReact.ReactNode-
data-testidID de teste para testesstring-
  • Menu fecha ao pressionar a tecla Escape
  • Menu fecha ao clicar fora
  • Itens do menu são navegáveis por teclado
  • Itens desabilitados são anunciados adequadamente