Navigation Menu
Flexible navigation surface with dropdown popups for grouped links.
Overview
The Navigation Menu component helps build adaptive, multi-level navigation bars using Base UI primitives. It pairs triggers with popup content, supports complex layouts, and keeps interactions accessible with full keyboard support.
Usage
import {
NavigationMenu,
NavigationMenuContent,
NavigationMenuItem,
NavigationMenuLink,
NavigationMenuList,
NavigationMenuTrigger,
} from "@tilt-legal/cubitt-components/primitives";<NavigationMenu>
<NavigationMenuList>
<NavigationMenuItem>
<NavigationMenuTrigger>Products</NavigationMenuTrigger>
<NavigationMenuContent>...</NavigationMenuContent>
</NavigationMenuItem>
</NavigationMenuList>
</NavigationMenu>Examples
Basic
import {
NavigationMenu,
NavigationMenuArrow,
NavigationMenuContent,
NavigationMenuItem,
NavigationMenuLink,
NavigationMenuList,
NavigationMenuPopup,
NavigationMenuPositioner,
NavigationMenuTrigger,
} from "@tilt-legal/cubitt-components/primitives";
const resourceLinks = [
{ title: "Changelog", href: "#" },
{ title: "Blog", href: "#" },
{ title: "Docs", href: "#" },
{ title: "Community", href: "#" },
{ title: "Help", href: "#" },
{ title: "Workshops", href: "#" },
{ title: "Forum", href: "#" },
{ title: "Careers", href: "#" },
];
export function NavigationMenuBasicExample() {
return (
<NavigationMenu>
<NavigationMenuList>
<NavigationMenuItem>
<NavigationMenuLink href="#">About</NavigationMenuLink>
</NavigationMenuItem>
<NavigationMenuItem>
<NavigationMenuTrigger>Resources</NavigationMenuTrigger>
<NavigationMenuContent>
<ul className="grid w-[320px] grid-cols-2 gap-1">
{resourceLinks.map((item) => (
<li key={item.title}>
<NavigationMenuLink href={item.href}>
{item.title}
</NavigationMenuLink>
</li>
))}
</ul>
</NavigationMenuContent>
</NavigationMenuItem>
<NavigationMenuItem>
<NavigationMenuLink href="#">Support</NavigationMenuLink>
</NavigationMenuItem>
</NavigationMenuList>
<NavigationMenuPositioner>
<NavigationMenuPopup>
<NavigationMenuArrow />
</NavigationMenuPopup>
</NavigationMenuPositioner>
</NavigationMenu>
);
}API Reference
NavigationMenu
The root component that provides context for all navigation menu components.
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes for the root. |
children | ReactNode | - | Menu list and positioner components. |
NavigationMenuList
Container for navigation menu items. Renders as a <ul> element.
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes for the list. |
children | ReactNode | - | Navigation menu items. |
NavigationMenuItem
Individual item within the navigation menu list. Renders as a <li> element.
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes for the item. |
children | ReactNode | - | Trigger and content components. |
NavigationMenuTrigger
Button that toggles the visibility of the associated content popup.
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes for the trigger. |
children | ReactNode | - | Trigger button content. |
NavigationMenuContent
Container for the popup content associated with a trigger. Supports animated transitions based on activation direction.
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes for content. |
children | ReactNode | - | Content to display in the popup. |
NavigationMenuLink
Styled link component for navigation items. Supports polymorphic rendering via the render prop.
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes for the link. |
render | React.ReactElement | function | - | Polymorphic rendering (e.g., Next.js Link). |
active | boolean | false | Whether the link represents the current active location. |
children | ReactNode | - | Link content. |
NavigationMenuPositioner
Handles positioning of the popup relative to the trigger. Wraps the popup with collision detection.
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes. |
sideOffset | number | 10 | Distance from trigger in pixels. |
collisionPadding | { top, bottom, left, right } | { top: 5, bottom: 5, left: 20, right: 20 } | Viewport padding for collision detection. |
children | ReactNode | - | NavigationMenuPopup component. |
NavigationMenuPopup
The popup surface that contains the content and viewport. Appears when a trigger is activated.
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes for popup. |
children | ReactNode | - | Popup content. |
NavigationMenuArrow
Optional arrow indicator that points from the popup to the active trigger.
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes for arrow. |