Starting your winter arc? 🥶 Get 25% off every plan and template with

Navigation Menu

Primary navigation with dropdown panels, mega menus, nested links, and full keyboard accessibility for headers.

Loading preview

Examples

Practical examples and common states for the same installable component.

Mega Menu

Rich multi-column navigation with grouped content sections.

examples/navigation-menu-mega-menu.tsx
import {
NavigationMenu,
NavigationMenuList,
NavigationMenuItem,
NavigationMenuTrigger,
NavigationMenuContent,
NavigationMenuLink,
NavigationMenuGroupHeading,
} from "@/components/wensity/navigation-menu";
export function MegaMenuNav() {
return (
<NavigationMenu>
<NavigationMenuList>
<NavigationMenuItem>
<NavigationMenuTrigger>Products</NavigationMenuTrigger>
<NavigationMenuContent width="w-[44rem]">
<div className="grid grid-cols-3 gap-4">
{/* Column groups with headings */}
</div>
</NavigationMenuContent>
</NavigationMenuItem>
<NavigationMenuItem>
<NavigationMenuLink href="/pricing">Pricing</NavigationMenuLink>
</NavigationMenuItem>
</NavigationMenuList>
</NavigationMenu>
);
}

Icons

Visual icons for faster wayfinding and recognition.

examples/navigation-menu-icons.tsx
import {
NavigationMenu,
NavigationMenuList,
NavigationMenuItem,
NavigationMenuTrigger,
NavigationMenuLink,
NavigationMenuIcon,
} from "@/components/wensity/navigation-menu";
import { IconHome, IconSettings } from "@tabler/icons-react";
export function IconsNav() {
return (
<NavigationMenu>
<NavigationMenuList>
<NavigationMenuItem>
<NavigationMenuLink href="/">
<NavigationMenuIcon><IconHome /></NavigationMenuIcon>
Home
</NavigationMenuLink>
</NavigationMenuItem>
</NavigationMenuList>
</NavigationMenu>
);
}

Descriptions

Supporting text beneath links to guide user intent.

examples/navigation-menu-descriptions.tsx
import {
NavigationMenu,
NavigationMenuList,
NavigationMenuItem,
NavigationMenuTrigger,
NavigationMenuContent,
} from "@/components/wensity/navigation-menu";
export function DescriptionsNav() {
return (
<NavigationMenu>
<NavigationMenuList>
<NavigationMenuItem>
<NavigationMenuTrigger>Products</NavigationMenuTrigger>
<NavigationMenuContent width="w-[24rem]">
{/* Links with descriptive text */}
</NavigationMenuContent>
</NavigationMenuItem>
</NavigationMenuList>
</NavigationMenu>
);
}

Nested

Submenus for deeper navigation hierarchies.

examples/navigation-menu-nested.tsx
import {
NavigationMenu,
NavigationMenuList,
NavigationMenuItem,
NavigationMenuTrigger,
NavigationMenuContent,
NavigationMenuSub,
NavigationMenuSubTrigger,
NavigationMenuSubContent,
} from "@/components/wensity/navigation-menu";
export function NestedNav() {
return (
<NavigationMenu>
<NavigationMenuList>
<NavigationMenuItem>
<NavigationMenuTrigger>Products</NavigationMenuTrigger>
<NavigationMenuContent width="w-[20rem]">
<NavigationMenuSub>
<NavigationMenuSubTrigger>Integrations</NavigationMenuSubTrigger>
<NavigationMenuSubContent>
{/* Nested items */}
</NavigationMenuSubContent>
</NavigationMenuSub>
</NavigationMenuContent>
</NavigationMenuItem>
</NavigationMenuList>
</NavigationMenu>
);
}

Compact

Minimal navigation for smaller interface headers.

examples/navigation-menu-compact.tsx
import {
NavigationMenu,
NavigationMenuList,
NavigationMenuItem,
NavigationMenuTrigger,
NavigationMenuContent,
NavigationMenuLink,
NavigationMenuIcon,
} from "@/components/wensity/navigation-menu";
export function CompactNav() {
return (
<NavigationMenu size="compact">
<NavigationMenuList>
<NavigationMenuItem>
<NavigationMenuTrigger showChevron={false}>
<NavigationMenuIcon><IconApps /></NavigationMenuIcon>
Products
</NavigationMenuTrigger>
<NavigationMenuContent width="w-[18rem]">
{/* Compact dropdown content */}
</NavigationMenuContent>
</NavigationMenuItem>
<NavigationMenuItem>
<NavigationMenuLink href="/docs">Docs</NavigationMenuLink>
</NavigationMenuItem>
</NavigationMenuList>
</NavigationMenu>
);
}

Installation

Run the following command

~/your-project
pnpm dlx wensity@latest add navigation-menu

Usage

Import NavigationMenu from @/components/wensity/navigation-menu and render it anywhere in your React or Next.js app. The source lands in your own repo, so every prop, class and animation below is yours to edit.

app/example.tsx
import {
NavigationMenu,
NavigationMenuList,
NavigationMenuItem,
NavigationMenuTrigger,
NavigationMenuContent,
NavigationMenuLink,
NavigationMenuIcon,
} from "@/components/wensity/navigation-menu";
export function NavDemo() {
return (
<NavigationMenu>
<NavigationMenuList>
<NavigationMenuItem>
<NavigationMenuTrigger>Products</NavigationMenuTrigger>
<NavigationMenuContent width="w-[24rem]">
{/* Dropdown content */}
</NavigationMenuContent>
</NavigationMenuItem>
<NavigationMenuItem>
<NavigationMenuLink href="/pricing">Pricing</NavigationMenuLink>
</NavigationMenuItem>
</NavigationMenuList>
</NavigationMenu>
);
}

Props

PropTypeDefaultDescription
size"default" | "compact""default"Trigger height and spacing.
valuestring | null-Controlled open menu.
defaultValuestring | null-Initially open menu when uncontrolled.
onValueChange(value: string | null) => void-Called when the open menu changes.
delayDurationnumber120Milliseconds the pointer must rest on a trigger before its menu opens.

Featured in React navbar components.