NovaUI
Components

Navigation Menu

A navigation component with trigger items that open dropdown content panels for site navigation.

The Navigation Menu component provides a horizontal navigation bar with items that can expand to show rich dropdown content. It supports trigger buttons with chevron indicators, positioned content panels, and navigation links. Built for site-level navigation patterns.

Preview

Installation

npx novaui-cli add navigation-menu

Import

import {
  NavigationMenu,
  NavigationMenuList,
  NavigationMenuItem,
  NavigationMenuContent,
  NavigationMenuTrigger,
  NavigationMenuLink,
  NavigationMenuIndicator,
  NavigationMenuViewport,
  navigationMenuTriggerStyle,
} from 'novaui-components'

Basic Usage

import {
  NavigationMenu,
  NavigationMenuList,
  NavigationMenuItem,
  NavigationMenuContent,
  NavigationMenuTrigger,
  NavigationMenuLink,
  navigationMenuTriggerStyle,
} from 'novaui-components'
import { Text, View } from 'react-native'

export function BasicNavigationMenu() {
  return (
    <NavigationMenu>
      <NavigationMenuList>
        <NavigationMenuItem>
          <NavigationMenuTrigger>Getting Started</NavigationMenuTrigger>
          <NavigationMenuContent>
            <View className="gap-3 p-4 w-[300px]">
              <NavigationMenuLink>
                <Text className="text-sm font-medium">Introduction</Text>
                <Text className="text-sm text-muted-foreground">
                  Learn the basics of the framework.
                </Text>
              </NavigationMenuLink>
              <NavigationMenuLink>
                <Text className="text-sm font-medium">Installation</Text>
                <Text className="text-sm text-muted-foreground">
                  How to install and set up your project.
                </Text>
              </NavigationMenuLink>
            </View>
          </NavigationMenuContent>
        </NavigationMenuItem>
        <NavigationMenuItem>
          <NavigationMenuTrigger>Components</NavigationMenuTrigger>
          <NavigationMenuContent>
            <View className="gap-3 p-4 w-[300px]">
              <NavigationMenuLink>
                <Text className="text-sm font-medium">Button</Text>
                <Text className="text-sm text-muted-foreground">
                  Interactive button component.
                </Text>
              </NavigationMenuLink>
              <NavigationMenuLink>
                <Text className="text-sm font-medium">Dialog</Text>
                <Text className="text-sm text-muted-foreground">
                  Modal dialog overlays.
                </Text>
              </NavigationMenuLink>
            </View>
          </NavigationMenuContent>
        </NavigationMenuItem>
        <NavigationMenuItem>
          <NavigationMenuLink className={navigationMenuTriggerStyle()}>
            Documentation
          </NavigationMenuLink>
        </NavigationMenuItem>
      </NavigationMenuList>
    </NavigationMenu>
  )
}

Highlight the currently active navigation link:

<NavigationMenuLink active>
  <Text className="text-sm font-medium">Dashboard</Text>
  <Text className="text-sm text-muted-foreground">
    View your analytics and data.
  </Text>
</NavigationMenuLink>

Props API

Extends React.ComponentPropsWithoutRef<typeof View>:

PropTypeDefaultDescription
valuestring-Controlled active item value
onValueChange(value: string | undefined) => void-Callback when active item changes
classNamestring-Additional CSS classes

Extends React.ComponentPropsWithoutRef<typeof View>:

PropTypeDefaultDescription
classNamestring-Additional CSS classes

Extends React.ComponentPropsWithoutRef<typeof View>:

PropTypeDefaultDescription
valuestringauto-generatedUnique value to identify this item

Extends React.ComponentPropsWithoutRef<typeof Pressable>:

PropTypeDefaultDescription
classNamestring-Additional CSS classes

Extends React.ComponentPropsWithoutRef<typeof View>:

PropTypeDefaultDescription
align'start' | 'center' | 'end''center'Alignment relative to trigger
sideOffsetnumber4Offset from trigger in pixels
classNamestring-Additional CSS classes

Extends React.ComponentPropsWithoutRef<typeof Pressable>:

PropTypeDefaultDescription
activebooleanfalseWhether the link is currently active
classNamestring-Additional CSS classes

A cva utility that returns the trigger button styling. Use on NavigationMenuLink to style plain links to match trigger items.

Best Practices

  1. Use for site navigation: Best suited for top-level site nav with rich dropdowns
  2. Keep content focused: Each trigger's dropdown should cover a single topic area
  3. Use links for leaf items: Use NavigationMenuLink with navigationMenuTriggerStyle for items without dropdowns
  4. Mark the active link: Set active on the current page's link for visual feedback
  5. Limit trigger count: Aim for 3–6 top-level navigation items
  • Menubar - For application-level menu bars
  • Tabs - For in-page content switching
  • Breadcrumb - For page-level navigation hierarchy

On this page