Ember UI LogoEmber UI
Components

Navigation Menu

A navigation-menu component

Preview

Loading...
"use client";import { CircleCheckIcon, CircleHelpIcon, CircleIcon } from "lucide-react";import Link from "next/link";import type * as React from "react";import {  NavigationMenu,  NavigationMenuContent,  NavigationMenuItem,  NavigationMenuLink,  NavigationMenuList,  NavigationMenuPopup,  NavigationMenuPositioner,  NavigationMenuTrigger,  navigationMenuTriggerStyle,} from "@/registry/axon/ui/navigation-menu";const components: { title: string; href: string; description: string }[] = [  {    title: "Alert Dialog",    href: "/docs/primitives/alert-dialog",    description:      "A modal dialog that interrupts the user with important content and expects a response.",  },  {    title: "Hover Card",    href: "/docs/primitives/hover-card",    description:      "For sighted users to preview content available behind a link.",  },  {    title: "Progress",    href: "/docs/primitives/progress",    description:      "Displays an indicator showing the completion progress of a task, typically displayed as a progress bar.",  },  {    title: "Scroll-area",    href: "/docs/primitives/scroll-area",    description: "Visually or semantically separates content.",  },  {    title: "Tabs",    href: "/docs/primitives/tabs",    description:      "A set of layered sections of content—known as tab panels—that are displayed one at a time.",  },  {    title: "Tooltip",    href: "/docs/primitives/tooltip",    description:      "A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.",  },];export default function NavigationMenuDemo() {  return (    <NavigationMenu>      <NavigationMenuList>        <NavigationMenuItem>          <NavigationMenuTrigger>Home</NavigationMenuTrigger>          <NavigationMenuContent>            <ul className="grid gap-2 md:w-[400px] lg:w-[500px] lg:grid-cols-[.75fr_1fr]">              <li className="row-span-3">                <NavigationMenuLink                  render={                    <Link                      className="flex h-full w-full select-none flex-col justify-end rounded-md bg-linear-to-b from-muted/50 to-muted p-6 no-underline outline-hidden focus:shadow-md"                      href="/"                    />                  }                >                  <div className="mt-4 mb-2 font-medium text-lg">Confluent</div>                  <p className="text-muted-foreground text-sm leading-tight">                    Turn Data Chaos Into AI-Ready Data Products with the World's                    Data Streaming Platform, by the original co-creators of                    Apache Kafka®.                  </p>                </NavigationMenuLink>              </li>              <ListItem href="/docs" title="Introduction">                Re-usable components built using Radix UI and Tailwind CSS.              </ListItem>              <ListItem href="/docs/installation" title="Installation">                How to install dependencies and structure your app.              </ListItem>              <ListItem href="/docs/primitives/typography" title="Typography">                Styles for headings, paragraphs, lists...etc              </ListItem>            </ul>          </NavigationMenuContent>        </NavigationMenuItem>        <NavigationMenuItem>          <NavigationMenuTrigger>Components</NavigationMenuTrigger>          <NavigationMenuContent>            <ul className="grid w-[400px] gap-2 md:w-[500px] md:grid-cols-2 lg:w-[600px]">              {components.map((component) => (                <ListItem                  href={component.href}                  key={component.title}                  title={component.title}                >                  {component.description}                </ListItem>              ))}            </ul>          </NavigationMenuContent>        </NavigationMenuItem>        <NavigationMenuItem>          <NavigationMenuLink            render={              <Link className={navigationMenuTriggerStyle()} href="/docs" />            }          >            Docs          </NavigationMenuLink>        </NavigationMenuItem>        <NavigationMenuItem>          <NavigationMenuTrigger>List</NavigationMenuTrigger>          <NavigationMenuContent>            <ul className="grid w-[300px] gap-4">              <li>                <NavigationMenuLink render={<Link href="#" />}>                  <div className="font-medium">Components</div>                  <div className="text-muted-foreground">                    Browse all components in the library.                  </div>                </NavigationMenuLink>                <NavigationMenuLink render={<Link href="#" />}>                  <div className="font-medium">Documentation</div>                  <div className="text-muted-foreground">                    Learn how to use the library.                  </div>                </NavigationMenuLink>                <NavigationMenuLink render={<Link href="#" />}>                  <div className="font-medium">Blog</div>                  <div className="text-muted-foreground">                    Read our latest blog posts.                  </div>                </NavigationMenuLink>              </li>            </ul>          </NavigationMenuContent>        </NavigationMenuItem>        <NavigationMenuItem>          <NavigationMenuTrigger>Simple</NavigationMenuTrigger>          <NavigationMenuContent>            <ul className="grid w-[200px] gap-4">              <li>                <NavigationMenuLink render={<Link href="#" />}>                  Components                </NavigationMenuLink>                <NavigationMenuLink render={<Link href="#" />}>                  Documentation                </NavigationMenuLink>                <NavigationMenuLink render={<Link href="#" />}>                  Blocks                </NavigationMenuLink>              </li>            </ul>          </NavigationMenuContent>        </NavigationMenuItem>        <NavigationMenuItem>          <NavigationMenuTrigger>With Icon</NavigationMenuTrigger>          <NavigationMenuContent>            <ul className="grid w-[200px] gap-4">              <li>                <NavigationMenuLink                  render={                    <Link className="flex-row items-center gap-2" href="#" />                  }                >                  <CircleHelpIcon />                  Backlog                </NavigationMenuLink>                <NavigationMenuLink                  render={                    <Link className="flex-row items-center gap-2" href="#" />                  }                >                  <CircleIcon />                  To Do                </NavigationMenuLink>                <NavigationMenuLink                  render={                    <Link className="flex-row items-center gap-2" href="#" />                  }                >                  <CircleCheckIcon />                  Done                </NavigationMenuLink>              </li>            </ul>          </NavigationMenuContent>        </NavigationMenuItem>      </NavigationMenuList>      <NavigationMenuPositioner>        <NavigationMenuPopup />      </NavigationMenuPositioner>    </NavigationMenu>  );}function ListItem({  title,  children,  href,  ...props}: React.ComponentPropsWithoutRef<"li"> & { href: string }) {  return (    <li {...props}>      <NavigationMenuLink render={<Link href={href} />}>        <div className="font-medium text-sm leading-none">{title}</div>        <p className="line-clamp-2 text-muted-foreground text-sm leading-snug">          {children}        </p>      </NavigationMenuLink>    </li>  );}

Installation

CLI

npx shadcn@latest add @emberui/navigation-menu
yarn shadcn@latest add @emberui/navigation-menu
pnpm dlx shadcn@latest add @emberui/navigation-menu
bunx --bun shadcn@latest add @emberui/navigation-menu

Reference

This component is based on the basecn Navigation Menu component.

On this page