Navigation Menu

PreviousNext

A navigation menu component.

Docs
roiuiitem

Preview

Loading preview…
registry/brook/ui/navigation-menu/navigation-menu.tsx
"use client";
import { NavigationMenu } from "@base-ui/react/navigation-menu";
import { cn } from "@/lib/utils";
import styles from "./navigation-menu.module.css";

function NavigationMenuRoot({ className, ...props }: NavigationMenu.Root.Props) {
  return <NavigationMenu.Root className={cn(styles.root, className)} data-slot="navigationmenu-root" {...props} />;
}

function NavigationMenuList({ className, ...props }: NavigationMenu.List.Props) {
  return <NavigationMenu.List className={cn(styles.list, className)} data-slot="navigationmenu-list" {...props} />;
}

function NavigationMenuItem({ className, ...props }: NavigationMenu.Item.Props) {
  return <NavigationMenu.Item className={cn(className)} {...props} />;
}

function NavigationMenuTrigger({ className, ...props }: NavigationMenu.Trigger.Props) {
  return (
    <NavigationMenu.Trigger className={cn(styles.trigger, className)} data-slot="navigationmenu-trigger" {...props} />
  );
}

function NavigationMenuContent({ className, ...props }: NavigationMenu.Content.Props) {
  return (
    <NavigationMenu.Content className={cn(styles.content, className)} data-slot="navigationmenu-content" {...props} />
  );
}

function NavigationMenuIcon({ className, ...props }: NavigationMenu.Icon.Props) {
  return <NavigationMenu.Icon className={cn(styles.chevron, className)} data-slot="navigationmenu-icon" {...props} />;
}

function NavigationMenuLink({ className, ...props }: NavigationMenu.Link.Props) {
  return <NavigationMenu.Link className={className || styles.link} data-slot="navigationmenu-link" {...props} />;
}

function NavigationMenuPortal({ children, ...props }: NavigationMenu.Portal.Props) {
  return <NavigationMenu.Portal {...props}>{children}</NavigationMenu.Portal>;
}

function NavigationMenuBackdrop({ className, ...props }: NavigationMenu.Backdrop.Props) {
  return (
    <NavigationMenu.Backdrop
      className={cn(styles.backdrop, className)}
      data-slot="navigationmenu-backdrop"
      {...props}
    />
  );
}

function NavigationMenuPositioner({ className, children, ...props }: NavigationMenu.Positioner.Props) {
  return (
    <NavigationMenu.Positioner
      className={cn(styles.positioner, className)}
      data-slot="navigationmenu-positioner"
      {...props}
    >
      {children}
    </NavigationMenu.Positioner>
  );
}

function NavigationMenuPopup({ className, children, ...props }: NavigationMenu.Popup.Props) {
  return (
    <NavigationMenu.Popup className={cn(styles.popup, className)} {...props}>
      {children}
    </NavigationMenu.Popup>
  );
}

function NavigationMenuArrow({ className, ...props }: NavigationMenu.Arrow.Props) {
  return (
    <NavigationMenu.Arrow className={cn(styles.arrow, className)} {...props}>
      <svg aria-hidden="true" fill="none" height="8" viewBox="0 0 16 8" width="16">
        <path className={styles.arrowFill} d="M8 0L16 8H0L8 0Z" />
        <path className={styles.arrowOuterStroke} d="M8 0L0 8" fill="none" stroke="currentColor" strokeWidth="1" />
        <path className={styles.arrowOuterStroke} d="M8 0L16 8" fill="none" stroke="currentColor" strokeWidth="1" />
      </svg>
    </NavigationMenu.Arrow>
  );
}

function NavigationMenuViewport({ className, ...props }: NavigationMenu.Viewport.Props) {
  return (
    <NavigationMenu.Viewport
      className={cn(styles.viewport, className)}
      data-slot="navigationmenu-viewport"
      {...props}
    />
  );
}

const navigationMenuTriggerStyle = () => styles.trigger;

export {
  NavigationMenuRoot as NavigationMenu,
  NavigationMenuList,
  NavigationMenuItem,
  NavigationMenuTrigger,
  NavigationMenuIcon,
  NavigationMenuContent,
  NavigationMenuLink,
  NavigationMenuPortal,
  NavigationMenuBackdrop,
  NavigationMenuPositioner,
  NavigationMenuPopup,
  NavigationMenuArrow,
  NavigationMenuViewport,
  navigationMenuTriggerStyle,
};

Installation

npx shadcn@latest add @roiui/navigation-menu

Usage

import { NavigationMenu } from "@/components/navigation-menu"
<NavigationMenu />