Pho Design System

Navigation Menu

Primary site navigation — a horizontal bar whose items open dropdown panels of grouped links that animate and resize to their content. Built on Base UI NavigationMenu. For application action menus use Menu.

Import

import { NavigationMenu } from "@photon-ai/pho-ui/components/navigation-menu";

Basic

Each NavigationMenu.Item pairs a Trigger with Content; the content renders into a shared Viewport inside the popup. A plain NavigationMenu.Link makes a top-level item with no dropdown.

<NavigationMenu.Root>
  <NavigationMenu.List>
    <NavigationMenu.Item>
      <NavigationMenu.Trigger>
        Products
        <NavigationMenu.Icon>
          <CaretDown />
        </NavigationMenu.Icon>
      </NavigationMenu.Trigger>
      <NavigationMenu.Content>
        <NavigationMenu.Link href="/deploy">Deploy</NavigationMenu.Link>
      </NavigationMenu.Content>
    </NavigationMenu.Item>
  </NavigationMenu.List>
  <NavigationMenu.Portal>
    <NavigationMenu.Positioner>
      <NavigationMenu.Popup>
        <NavigationMenu.Viewport />
      </NavigationMenu.Popup>
    </NavigationMenu.Positioner>
  </NavigationMenu.Portal>
</NavigationMenu.Root>

Anatomy

Props

Every part also accepts className (a plain string) and render — Base UI’s prop for swapping the element it renders (e.g. a framework <Link> for a NavigationMenu.Link). The rest forward to the underlying Base UI part.

NavigationMenu.Root (<nav>; holds open state)

NavigationMenu.Trigger (<button>) — opens its Content; gets aria-expanded and data-popup-open (which drives the Icon rotation).

NavigationMenu.Content (<div>) — the body for one item, mounted into the shared Viewport.

NavigationMenu.Link (<a>) — forwards href and any anchor attribute; pass render to route through your framework’s link.

NavigationMenu.Positioner (<div>) — positions the popup against the active trigger

NavigationMenu.Popup (<nav>) — the floating surface; sized to --popup-width / --popup-height and animated via data-starting-style / data-ending-style.

NavigationMenu.Viewport (<div>) — the single window each item’s Content renders into; the popup resizes to fit it.

Accessibility

Best practices