Components

Navigation Menu

Top-level site navigation with hover and focus flyout panels.

NavigationMenu is for application or documentation navigation, not command menus. It renders semantic nav markup, top-level triggers/links, and collision-aware flyout content from an items array.

Anatomy

  • #trigger: Custom top-level flyout trigger content.
  • #link: Custom top-level direct-link content.
  • #item: Custom flyout item content.
  • #[item.slot]: Per-item override for triggers or links.

Top-level list, item wrappers, trigger/link elements, content viewport, and flyout links are generated by the component.

Usage

Examples

Controlled open state

Bind v-model:open to observe or control the currently open flyout.

<script setup lang="ts">
import { ref } from "vue";
const open = ref<string | null>(null);
</script>

<template>
  <NavigationMenu v-model:open="open" :items="items" />
</template>

Custom flyout items

Use #item for richer content while the component keeps generated list and link structure.

<template>
  <NavigationMenu :items="items">
    <template #item="{ item }">
      <strong>{{ item.label }}</strong>
      <small>{{ item.description }}</small>
    </template>
  </NavigationMenu>
</template>

API Reference

Props

PropTypeDefaultDescription
itemsNavigationMenuItem[]requiredTop-level navigation items.
loopbooleantrueLeft/right trigger focus wraps.
dir"ltr" | "rtl""ltr"Horizontal keyboard direction.
disabledbooleanfalseDisables trigger interaction.
openDelaynumber80Pointer-open delay in milliseconds.
closeDelaynumber150Pointer-close delay in milliseconds.
ariaLabelstring"Primary"Accessible nav label.
uiNavigationMenuUiClasses for structural parts.

Emits

EventPayloadDescription
open-change(value: string | null, details)Fired before active flyout changes.
select(item, details)Fired when a link/item is selected.

Slots

SlotPropsDescription
triggeritem, isOpenTop-level flyout trigger content.
linkitem, isOpenTop-level direct-link content.
itemitemFlyout item content.
[item.slot]item, isOpenPer-item override at any supported level.

Item Shape

KeyTypeDescription
valuestringStable id. Falls back to href then label.
labelstringVisible label.
hrefstringLink target.
tounknownRouter destination passed to custom as component.
asstring | ComponentCustom link component, such as RouterLink.
descriptionstringOptional flyout description.
disabledbooleanDisables the item.
activebooleanAdds aria-current.
ariaCurrentARIA current valueDefaults to "page" when active.
childrenNavigationMenuItem[]Flyout links.
slotstringNamed per-item slot.
onSelect() => voidRuns after uncanceled select event.

UI Options

KeyDescription
rootRoot nav.
listTop-level list.
itemTop-level item wrapper.
triggerTop-level item with flyout.
linkTop-level direct link.
indicatorActive flyout indicator.
contentFlyout wrapper.
viewportFlyout viewport.
contentListFlyout list.
contentItemFlyout item wrapper.
contentLinkFlyout link.
labelFlyout item label.
descriptionFlyout item description.

Styling Hooks

UI keyCSS classData attrs
rootakaza-navigation-menudata-akaza-state, data-akaza-disabled
listakaza-navigation-menu-list
itemakaza-navigation-menu-itemdata-akaza-state, data-akaza-disabled
triggerakaza-navigation-menu-triggerdata-akaza-state, data-akaza-disabled
linkakaza-navigation-menu-linkdata-akaza-state, data-akaza-disabled, aria-current
indicatorakaza-navigation-menu-indicatordata-akaza-state
contentakaza-navigation-menu-contentdata-akaza-state, data-akaza-side, data-akaza-align, --akaza-navigation-menu-anchor-width, --akaza-navigation-menu-anchor-height, --akaza-navigation-menu-available-width, --akaza-navigation-menu-available-height, --akaza-navigation-menu-transform-origin, --akaza-navigation-menu-duration
viewportakaza-navigation-menu-viewport
contentListakaza-navigation-menu-content-list
contentItemakaza-navigation-menu-content-itemdata-akaza-disabled
contentLinkakaza-navigation-menu-content-link
labelakaza-navigation-menu-label
descriptionakaza-navigation-menu-description

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

Keyboard

KeyBehavior
ArrowRight / ArrowLeftMove between top-level items.
ArrowDown / Enter / SpaceOpen a flyout item.
Home / EndFocus first/last enabled top-level item.
Character keysTypeahead across top-level items.
ArrowDown / ArrowUp in flyoutMove through enabled flyout links.
EscapeClose the active flyout.