Components

Menubar

Horizontal menu strip with arrow-key navigation across menus.

Menubar renders a horizontal role="menubar" command strip. Top-level triggers move with left/right arrows and each trigger can open a collision-aware vertical menu panel using the same MenuItem shape as Menu.

Anatomy

  • #trigger: Custom top-level trigger content.
  • #[item.slot]: Per-item render override for a top-level trigger or panel item.
  • #checkbox-item: Shared checkbox item renderer.
  • #radio-item: Shared radio item renderer.
  • #label: Shared label row renderer.

Usage

Examples

Radio groups

Pass radioValues for radio menu items. The event contract matches Menu.

<template>
  <Menubar
    v-model:radio-values="radioValues"
    :items="[
      { label: 'View', children: [
        { type: 'radio', label: 'Preview', value: 'preview', radioGroup: 'view' },
        { type: 'radio', label: 'Source', value: 'source', radioGroup: 'view' },
      ] },
    ]"
  />
</template>

Custom trigger

Use #trigger when top-level menu buttons need icons or badges.

<template>
  <Menubar :items="items">
    <template #trigger="{ item, isOpen }">
      <span>{{ item.label }}</span>
      <span aria-hidden="true">{{ isOpen ? "▲" : "▼" }}</span>
    </template>
  </Menubar>
</template>

Controlled menu and top-level actions

Plain items without children are commands. Bind default v-model to control the open top-level menu.

<Menubar
  v-model="openMenu"
  :items="[
    { value: 'file', label: 'File', children: fileItems },
    { value: 'save', label: 'Save', onSelect: save },
  ]"
/>

API Reference

Props

PropTypeDefaultDescription
itemsMenubarItem[]requiredTop-level menu items. Items with children open panels.
loopbooleantrueLeft/right focus wraps.
dir"ltr" | "rtl""ltr"Reverses horizontal arrow behavior for RTL.
disabledbooleanfalseDisables the menubar.
closeOnSelectbooleantrueCloses after normal item selection.
radioValuesRecord<string, string>State for radio groups inside panels.
ariaLabelstringAccessible label.
ariaLabelledbystringAccessible label id.
uiMenubarUiClasses for root, triggers, content, and menu parts.

Emits

EventPayloadDescription
open-change(value: string | null, details)Fired before active menu changes.
select(item, details)Fired when an item is selected.
check-change(item, checked, details)Fired when checkbox item changes.
radio-change(group, value, details)Fired when radio item changes.
update:radioValues(values)v-model event for radio state.

Slots

SlotPropsDescription
triggeritem, isOpenTop-level trigger content.
[item.slot]Depends on item typePer-item panel renderer.
checkbox-itemitem, checkedShared checkbox item renderer.
radio-itemitem, checkedShared radio item renderer.
labelitemShared label renderer.

UI Options

KeyDescription
rootrole="menubar" root.
triggerTop-level menu trigger button.
contentOpen menu panel wrapper.
panel, group, item, checkboxItem, radioItem, separator, label, submenu, submenuTrigger, submenuContentSame as Menu.

Styling Hooks

UI keyCSS classData attrs
rootakaza-menubardata-akaza-state, data-akaza-disabled
triggerakaza-menubar-triggerdata-akaza-state, data-akaza-disabled
contentakaza-menubar-content, akaza-menu-contentdata-akaza-state, data-akaza-side, data-akaza-align, --akaza-menubar-anchor-width, --akaza-menubar-anchor-height, --akaza-menubar-available-width, --akaza-menubar-available-height, --akaza-menubar-transform-origin, --akaza-menubar-duration
menu partsakaza-menu-*Same as Menu.

Popup entry and exit use a subtle side-aware structural transition. Override --akaza-menubar-duration to change its 120ms duration. Reduced-motion preference shortens it automatically.

Keyboard

KeyBehavior
ArrowRight / ArrowLeftMove between top-level triggers.
ArrowDownOpen active menu and focus first panel item.
ArrowUpOpen active menu and focus last panel item.
Enter / SpaceOpen a menu or activate a top-level command without children.
ArrowUp / ArrowDownMove within an open panel.
Home / EndFocus first/last enabled top-level item.
Character keysTypeahead across top-level items.
EscapeClose the open panel and return focus to its trigger.