registry:component

Navigation Menu

v1.0.0ga

Top-level navigation primitive with trigger/content panels.

Registry Endpoint
Open JSON

https://registry.aavya.com/r/ui-navigation-menu.json

npx shadcn@latest add https://registry.aavya.com/r/ui-navigation-menu.json

Live Preview
Usage Snippet
import NavigationMenu from '@/components/ui/navigation-menu.tsx'

export default function Example() {
  return (
    <div className="p-6">
      <NavigationMenu />
    </div>
  )
}
Source Preview
import * as React from 'react'

import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu'
import { cva } from 'class-variance-authority'
import { ChevronDownIcon } from 'lucide-react'

import { cn } from '@/lib/utils'

function NavigationMenu({
  className,
  children,
  viewport = true,
  ...props
}: React.ComponentProps<typeof NavigationMenuPrimitive.Root> & {
  viewport?: boolean
}) {
  return (
    <NavigationMenuPrimitive.Root
      data-slot='navigation-menu'
      data-viewport={viewport}
      className={cn('group/navigation-menu relative flex max-w-max flex-1 items-center justify-center', className)}
      {...props}
    >
      {children}
      {viewport && <NavigationMenuViewport />}
    </NavigationMenuPrimitive.Root>
  )
}

function NavigationMenuList({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {
  return (
    <NavigationMenuPrimitive.List
      data-slot='navigation-menu-list'
      className={cn('group flex flex-1 list-none items-center justify-center gap-1', className)}
      {...props}
    />
  )
}

function NavigationMenuItem({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {
  return (
    <NavigationMenuPrimitive.Item data-slot='navigation-menu-item' className={cn('relative', className)} {...props} />
  )
}

const navigationMenuTriggerStyle = cva(
  'group bg-backgro