Menubar
Uma barra de menus no estilo desktop, com um único destaque que desliza entre os menus abertos e troca instantânea ao percorrer a barra.
pnpm dlx shadcn@latest add https://hextaui.com/r/menubar.jsonAdiciona o componente, os tokens de tema do HextaUI e quaisquer componentes do HextaUI dos quais ele depende.
Adicione os tokens de tema ao seu CSS global, se ainda não o fez.
Instale as dependências.
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cnCopie e cole o código a seguir no seu projeto.
components/ui/menubar.tsx components/ui/dropdown-menu.tsx lib/motion.ts Atualize os caminhos de importação para corresponder à configuração do seu projeto.
Cada <MenubarMenu /> é um Dropdown menu, então itens, itens de checkbox e de rádio, submenus, rótulos e atalhos funcionam e têm exatamente a mesma aparência. Abra um menu e depois mova o ponteiro ou use as setas para percorrer a barra.
Ícones do gatilho
Coloque um ícone antes do rótulo de um gatilho, ou use um ícone sozinho com um aria-label. Gatilhos apenas com ícone ganham formato quadrado.
Ícones
Coloque um ícone antes do rótulo. Use variant="destructive" em itens que excluem ou não podem ser desfeitos.
Desabilitado
Desabilite um único menu com disabled em <MenubarMenu />, ou a barra inteira em <Menubar />. As setas ignoram menus desabilitados.
Vertical
orientation="vertical" empilha os menus e passa a navegação para as setas para cima e para baixo. Abra os menus ao lado com side="inline-end".
Da direita para a esquerda
Menus, submenus e setas seguem a direção de leitura. Os atalhos permanecem na ordem do teclado.
| Tecla | Ação |
|---|---|
| Tab | Move o foco para dentro da menubar e depois para fora dela. |
| ←→ | Move entre os menus. Com um menu aberto, abre o próximo. |
| EnterSpace↓ | Abre o menu com foco. |
| ↑↓ | Move entre os itens de um menu aberto. |
| → | Abre um submenu a partir do seu gatilho. |
| Esc | Fecha o menu aberto e devolve o foco ao seu gatilho. |
- Dê um nome à menubar com
aria-label. Ela renderizarole="menubar"e cada gatilho é um item de menu, então os leitores de tela a anunciam como um menu de aplicativo. - A barra é uma única parada de tabulação. As setas movem entre os menus, então a ordem de tabulação da página fica curta.
- O destaque deslizante é decorativo. Com movimento reduzido, ele apenas aparece no menu aberto.
As partes do menu aceitam as mesmas props que suas equivalentes do Dropdown menu.
| Prop | Tipo | Padrão |
|---|---|---|
orientation | "horizontal" | "vertical" | "horizontal" |
loopFocusVolta do último menu para o primeiro. | boolean | true |
modalBloqueia a rolagem da página e os cliques externos enquanto um menu está aberto. | boolean | true |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="menubar" | Seleciona a barra no CSS. |
data-orientation | A orientação. |
data-has-submenu-open | Presente enquanto qualquer menu da barra está aberto. |
data-slot="menubar-highlight" | O fundo deslizante atrás do gatilho aberto, com data-visible. |
--menubar-radius | Raio dos cantos da barra. Os gatilhos e o destaque derivam o deles a partir dele. |
| Prop | Tipo | Padrão |
|---|---|---|
open | boolean | – |
defaultOpen | boolean | false |
onOpenChange | (open: boolean, details) => void | – |
disabled | boolean | false |
| Atributo | Descrição |
|---|---|
data-slot="menubar-trigger" | Selecione os gatilhos no CSS. |
data-popup-open | Presente enquanto o menu está aberto. |
data-disabled | Presente quando desabilitado. |
| Prop | Tipo | Padrão |
|---|---|---|
side | "top" | "bottom" | "left" | "right" | "inline-start" | "inline-end" | "bottom" |
align | "start" | "center" | "end" | "start" |
sideOffset | number | 8 |
alignOffsetAlinha os itens do menu com o rótulo do gatilho. | number | -4 |
| Atributo | Descrição |
|---|---|
data-slot="menubar-content" | Seleciona os menus no CSS. |
data-instant="group" | Presente quando o menu foi aberto ao percorrer a partir de outro. Ele troca sem animação. |
MenubarItem, MenubarCheckboxItem, MenubarRadioGroup, MenubarRadioItem, MenubarGroup, MenubarLabel, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubTrigger e MenubarSubContent são as partes do Dropdown menu com slots menubar-*. Veja a API do Dropdown menu para as props delas.
- Dropdown menuUm menu de ações e opções atrás de um botão, com grupos, submenus, itens de checkbox e de rádio e atalhos.
- MotionAs curvas de easing, as durações e a verificação de movimento reduzido com que todo componente anima, além de hooks para transformações de tamanho e destaques deslizantes.
- Alert dialogUm diálogo de confirmação para ações destrutivas ou importantes que aguarda trabalho assíncrono e vira um bottom sheet no celular.
- CommandUma lista pesquisável de ações, inline ou como paleta ⌘K, com páginas, atalhos e correspondências destacadas.
- Context menuUm menu de ações ao clicar com o botão direito ou pressionar e segurar, com submenus, itens de checkbox e de rádio e feedback de pressão no toque.
- DialogUma janela sobre a página para formulários e tarefas focadas, com cabeçalho e rodapé fixos, aninhamento e um bottom sheet com deslize no celular.