Vitral 0.2
Menu

Menubar

A barra de menu da aplicação, com menus aninhados, que vira um único botão de menu em telas estreitas.

Importação

main.ts
import { Menubar } from '@vitral/vue';

Básico

Vitral
GW
Last command: —
<script setup lang="ts">import { Avatar, InputText, Menubar, type MenuItem } from '@vitral/vue';import { ref } from 'vue'; const last = ref('—');const run = ({ item }: { item: MenuItem }) => (last.value = item.label ?? '');const items: MenuItem[] = [    { label: 'Home', icon: 'home', command: run },    {        label: 'Projects',        icon: 'folder',        items: [            { label: 'Vitral', icon: 'star', command: run },            { label: 'Archive', icon: 'folderOpen', items: [{ label: '2025', command: run }, { label: '2024', command: run }] },            { separator: true },            { label: 'New project', icon: 'plus', command: run }        ]    },    {        label: 'Team',        icon: 'user',        items: [            { label: 'Members', command: run },            { label: 'Invitations', command: run, disabled: true }        ]    },    { label: 'Docs', icon: 'externalLink', url: '#' }];</script> <template>    <Menubar :model="items" aria-label="Application">        <template #start><strong style="padding-inline: 0.5rem">Vitral</strong></template>        <template #end>            <div style="display: flex; align-items: center; gap: 0.5rem">                <InputText size="small" placeholder="Search" aria-label="Search" />                <Avatar label="GW" shape="circle" />            </div>        </template>    </Menubar>    <small style="color: var(--vt-text-muted-color)">Last command: {{ last }}</small></template>

Telas pequenas

A breakpoint wider than any screen keeps this one in its small-screen form.
<script setup lang="ts">import { Menubar, type MenuItem } from '@vitral/vue'; const items: MenuItem[] = [    { label: 'Home', icon: 'home' },    {        label: 'Projects',        icon: 'folder',        items: [            { label: 'Vitral', icon: 'star' },            { label: 'Archive', icon: 'folderOpen', items: [{ label: '2025' }, { label: '2024' }] },            { separator: true },            { label: 'New project', icon: 'plus' }        ]    },    {        label: 'Team',        icon: 'user',        items: [{ label: 'Members' }, { label: 'Invitations', disabled: true }]    },    { label: 'Docs', icon: 'externalLink', url: '#' }];</script> <template>    <Menubar :model="items" aria-label="Application (compact)" breakpoint="100000px" />    <small style="color: var(--vt-text-muted-color)">A breakpoint wider than any screen keeps this one in its small-screen form.</small></template>

API

Lido de packages/vue/src/components/Menubar/types.ts, então diz o que o componente aceita de fato.

Props

NomeTipoDescrição
modelMenuItem[]Os itens de primeiro nível; seus `items` descem como menus, que podem se aninhar mais.
breakpointstringAbaixo desta largura a barra vira um botão de menu com os itens em coluna. O padrão é `'960px'`.
ariaLabelstringDá nome à barra de menu.
ariaLabelledbystring—

Mais pt, dt e unstyled de BaseProps; veja pass-through e modo sem estilo.

Emits

EventoPayloadDescrição
mobile-toggleopen: booleanO menu de telas pequenas foi aberto ou fechado.

Slots

NomeProps do slotDescrição
start—Antes dos itens: um logo.
end—Depois dos itens: uma caixa de busca, um avatar.
item(props: NestedMenuItemSlotProps)—
buttonicon—O ícone do botão do menu de telas pequenas.