Menubar
Principal
import { Menubar } from '@rivocode/ui'Quando usar
A barra de menus de aplicativo: Arquivo, Editar, Exibir.
Coordena vários Menu lado a lado: com um aberto, passar o mouse sobre o
vizinho já troca, sem novo clique, e as setas andam entre eles.
Em tela de web isso quase nunca e o certo. Barra de menus e vocabulário de
programa de mesa; num painel, Sidebar e Tabs dizem mais. Ela existe para
editor e ferramenta, onde o usuário já espera esse arranjo.
<Menubar>
<Menu>
<MenuTrigger>Arquivo</MenuTrigger>
<MenuContent>
<MenuItem>Nova nota</MenuItem>
<MenuItem>Abrir</MenuItem>
</MenuContent>
</Menu>
</Menubar>
As partes
MenubarTrigger é o gatilho de cada menu da barra: "Arquivo", "Editar",
"Exibir". Ele já vem vestido, inclusive com o anel de foco. Dentro da barra é
ele que se usa, e não um MenuTrigger com classe na mão.
No React Native
Não porta, por decisão - idioma de mesa; navegação nativa é tab bar e drawer do router. Não é fila: não vai existir. A tabela de paridade diz o porquê de cada uma.
API
| Prop | Tipo |
|---|---|
disabled0.4.0Whether the whole menubar is disabled. | boolean |
loopFocus0.4.0Whether to loop keyboard focus back to the first item when the end of the list is reached while using the arrow keys. | boolean |
modal0.4.0Whether the menubar is modal. | boolean |
orientation0.4.0The orientation of the menubar. | MenuRootOrientation |
render0.4.0Allows you to replace the component's HTML element with a different tag, or compose it with another component. | ComponentRenderFn<HTMLProps, MenubarState>ReactElement<unknown, stringJSXElementConstructor<any>> |
Além destas, a peça aceita className, style, id e children, repassados ao elemento de baixo.
Partes
Menubar se monta com estas peças. Todas vivem nesta página, porque separar cada uma num endereço obrigaria a abrir seis abas para montar uma tela.
MenubarTrigger
/menubar-trigger.mdO gatilho de um menu dentro da barra: "Arquivo", "Editar", "Exibir".
Já vem vestido: respiro, canto, cor de texto, o realce da passagem do mouse, o
estado de aberto e o anel de foco do teclado. Dentro de um Menubar é ele que
se usa, e não sobra nada para escrever por fora.
<Menubar aria-label="Principal">
<Menu>
<MenubarTrigger>Arquivo</MenubarTrigger>
<MenuContent>
<MenuItem>Nova nota</MenuItem>
<MenuItem>Abrir rascunho</MenuItem>
</MenuContent>
</Menu>
<Menu>
<MenubarTrigger>Editar</MenubarTrigger>
<MenuContent>
<MenuItem>Desfazer</MenuItem>
</MenuContent>
</Menu>
</Menubar>
Por que ele existe, se já há MenuTrigger
O MenuTrigger sai sem estilo de propósito: o uso comum dele é
render={<Button />}, e duas fontes de estilo brigariam. Quem pagava por isso
era a barra. O exemplo publicado repetia as mesmas cinco classes em cada item, e
toda barra montada a partir dele repetia de novo. E a cópia vinha sem o anel de
foco, então a barra da documentação era a única peça do catálogo que sumia da
vista ao ser percorrida com o Tab.
Os dois continuam existindo porque têm trabalhos diferentes: um é gatilho de menu em qualquer lugar, o outro é item de uma barra.
Quando não usar
Fora de um Menubar, é MenuTrigger cru. O menu solto (os três pontinhos de
uma linha de tabela, o botão de ações de um cartão) abre com
render={<Button variant="ghost" />}, e a pele de item de barra ali desalinha o
gatilho dos outros controles da linha e promete uma barra que não existe.
Se a dúvida for entre barra de menus e outra coisa, ela é sobre o Menubar
inteiro, e não sobre o gatilho: em tela de web, Sidebar e Tabs quase sempre
dizem mais.
| Prop | Tipo |
|---|---|
closeDelay0.5.0How long to wait before closing the menu that was opened on hover. | number |
delay0.5.0How long to wait before the menu may be opened on hover. | number |
disabled0.5.0Whether the component should ignore user interaction. | boolean |
handle0.5.0A handle to associate the trigger with a menu. | MenuHandle<unknown> |
nativeButton0.5.0Whether the component renders a native `<button>` element when replacing it via the `render` prop. | boolean |
openOnHover0.5.0Whether the menu should also open when the trigger is hovered. | boolean |
payload0.5.0A payload to pass to the menu when it is opened. | unknown |
render0.5.0Allows you to replace the component's HTML element with a different tag, or compose it with another component. | ComponentRenderFn<HTMLProps, MenuTriggerState>ReactElement<unknown, stringJSXElementConstructor<any>> |
Além destas, a peça aceita className, style, id e children, repassados ao elemento de baixo.