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>
);
}

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.