Skip to main content
⚠️ AppKit is in an early development phase and is subject to change without notice. DO NOT use in production environments.

# NavigationMenu

Horizontal navigation menu with dropdown submenus

## Example​

    "use client"

    import * as React from "react"

    import {
      cn,
      NavigationMenu,
      NavigationMenuContent,
      NavigationMenuItem,
      NavigationMenuLink,
      NavigationMenuList,
      NavigationMenuTrigger,
      navigationMenuTriggerStyle,
    } from "@databricks/appkit-ui/react"

    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 NavigationMenuExample() {
      return (
        <NavigationMenu>
          <NavigationMenuList>
            <NavigationMenuItem>
              <NavigationMenuTrigger>About</NavigationMenuTrigger>
              <NavigationMenuContent>
                <ul className="grid gap-3 p-6 md:w-[400px] lg:w-[500px] lg:grid-cols-[.75fr_1fr]">
                  <li className="row-span-3">
                    <NavigationMenuLink asChild>
                      <a
                        className="flex h-full w-full select-none flex-col justify-end rounded-md bg-gradient-to-b from-muted/50 to-muted p-6 no-underline outline-none focus:shadow-md"
                        href="#"
                      >
                        <div className="mb-2 mt-4 text-lg font-medium">
                          AppKit
                        </div>
                        <p className="text-sm leading-tight text-muted-foreground">
                          Everything you need out-of-the-box.
                        </p>
                      </a>
                    </NavigationMenuLink>
                  </li>
                  <ListItem href="#" title="Extensible Plugins">
                   Extend at any level.
                  </ListItem>
                  <ListItem href="#" title="Type-Safe SQL Queries">
                    Full parameter type safety across your entire stack.
                  </ListItem>
                  <ListItem href="#" title="Built for Humans & AI">
                     Designed for both developers and AI agents.
                  </ListItem>
                </ul>
              </NavigationMenuContent>
            </NavigationMenuItem>
            <NavigationMenuItem>
              <NavigationMenuTrigger>Components</NavigationMenuTrigger>
              <NavigationMenuContent>
                <ul className="grid w-[400px] gap-3 p-4 md:w-[500px] md:grid-cols-2 lg:w-[600px] ">
                  {components.map((component) => (
                    <ListItem
                      key={component.title}
                      title={component.title}
                      href={component.href}
                    >
                      {component.description}
                    </ListItem>
                  ))}
                </ul>
              </NavigationMenuContent>
            </NavigationMenuItem>
            <NavigationMenuItem>
              <NavigationMenuLink asChild>
                <a href="#" className={navigationMenuTriggerStyle()}>
                  Documentation
                </a>
              </NavigationMenuLink>
            </NavigationMenuItem>
          </NavigationMenuList>
        </NavigationMenu>
      )
    }

    const ListItem = React.forwardRef<
      React.ElementRef<"a">,
      React.ComponentPropsWithoutRef<"a">
    >(({ className, title, children, ...props }, ref) => {
      return (
        <li>
          <NavigationMenuLink asChild>
            <a
              ref={ref}
              className={cn(
                "block select-none space-y-1 rounded-md p-3 leading-none no-underline outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground",
                className
              )}
              {...props}
            >
              <div className="text-sm font-medium leading-none">{title}</div>
              <p className="line-clamp-2 text-sm leading-snug text-muted-foreground">
                {children}
              </p>
            </a>
          </NavigationMenuLink>
        </li>
      )
    })
    ListItem.displayName = "ListItem"

## NavigationMenu​

Horizontal navigation menu with dropdown submenus

Source: `packages/appkit-ui/src/react/ui/navigation-menu.tsx`

### Props​

Prop | Type | Required | Default | Description
--- | --- | --- | --- | ---
`value` | `string` |  | - | -
`defaultValue` | `string` |  | - | -
`onValueChange` | `((value: string) => void)` |  | - | -
`dir` | `enum` |  | - | -
`orientation` | `enum` |  | - | -
`delayDuration` | `number` |  | - | The duration from when the pointer enters the trigger until the tooltip gets opened. @defaultValue 200
`skipDelayDuration` | `number` |  | - | How much time a user has to enter another trigger without incurring a delay again. @defaultValue 300
`asChild` | `boolean` |  | - | -
`viewport` | `boolean` |  | `true` | -

### Usage​

    import { NavigationMenu } from '@databricks/appkit-ui';

    <NavigationMenu /* props */ />

## NavigationMenuContent​

Dropdown content area for navigation submenu

Source: `packages/appkit-ui/src/react/ui/navigation-menu.tsx`

### Props​

Prop | Type | Required | Default | Description
--- | --- | --- | --- | ---
`forceMount` | `true` |  | - | Used to force mounting when more control is needed. Useful when controlling animation with React animation libraries.
`asChild` | `boolean` |  | - | -
`onEscapeKeyDown` | `((event: KeyboardEvent) => void)` |  | - | Event handler called when the escape key is down. Can be prevented.
`onPointerDownOutside` | `((event: PointerDownOutsideEvent) => void)` |  | - | Event handler called when the a `pointerdown` event happens outside of the `DismissableLayer`. Can be prevented.
`onFocusOutside` | `((event: FocusOutsideEvent) => void)` |  | - | Event handler called when the focus moves outside of the `DismissableLayer`. Can be prevented.
`onInteractOutside` | `((event: FocusOutsideEvent | PointerDownOutsideEvent) => void)` |  | - | Event handler called when an interaction happens outside the `DismissableLayer`. Specifically, when a `pointerdown` event happens outside or focus moves outside of it. Can be prevented.

### Usage​

    import { NavigationMenuContent } from '@databricks/appkit-ui';

    <NavigationMenuContent /* props */ />

## NavigationMenuIndicator​

Visual indicator for active navigation menu item

Source: `packages/appkit-ui/src/react/ui/navigation-menu.tsx`

### Props​

Prop | Type | Required | Default | Description
--- | --- | --- | --- | ---
`forceMount` | `true` |  | - | Used to force mounting when more control is needed. Useful when controlling animation with React animation libraries.
`asChild` | `boolean` |  | - | -

### Usage​

    import { NavigationMenuIndicator } from '@databricks/appkit-ui';

    <NavigationMenuIndicator /* props */ />

## NavigationMenuItem​

Individual navigation menu item

Source: `packages/appkit-ui/src/react/ui/navigation-menu.tsx`

### Props​

Prop | Type | Required | Default | Description
--- | --- | --- | --- | ---
`value` | `string` |  | - | -
`asChild` | `boolean` |  | - | -

### Usage​

    import { NavigationMenuItem } from '@databricks/appkit-ui';

    <NavigationMenuItem /* props */ />

## NavigationMenuLink​

Clickable link within navigation menu

Source: `packages/appkit-ui/src/react/ui/navigation-menu.tsx`

### Props​

Prop | Type | Required | Default | Description
--- | --- | --- | --- | ---
`active` | `boolean` |  | - | -
`onSelect` | `((event: Event) => void)` |  | - | -
`asChild` | `boolean` |  | - | -

### Usage​

    import { NavigationMenuLink } from '@databricks/appkit-ui';

    <NavigationMenuLink /* props */ />

## NavigationMenuList​

Container list for navigation menu items

Source: `packages/appkit-ui/src/react/ui/navigation-menu.tsx`

### Props​

Prop | Type | Required | Default | Description
--- | --- | --- | --- | ---
`asChild` | `boolean` |  | - | -

### Usage​

    import { NavigationMenuList } from '@databricks/appkit-ui';

    <NavigationMenuList /* props */ />

## NavigationMenuTrigger​

Button that opens a navigation submenu

Source: `packages/appkit-ui/src/react/ui/navigation-menu.tsx`

### Props​

Prop | Type | Required | Default | Description
--- | --- | --- | --- | ---
`asChild` | `boolean` |  | - | -

### Usage​

    import { NavigationMenuTrigger } from '@databricks/appkit-ui';

    <NavigationMenuTrigger /* props */ />

## NavigationMenuViewport​

Viewport container for navigation menu content

Source: `packages/appkit-ui/src/react/ui/navigation-menu.tsx`

### Props​

Prop | Type | Required | Default | Description
--- | --- | --- | --- | ---
`forceMount` | `true` |  | - | Used to force mounting when more control is needed. Useful when controlling animation with React animation libraries.
`asChild` | `boolean` |  | - | -

### Usage​

    import { NavigationMenuViewport } from '@databricks/appkit-ui';

    <NavigationMenuViewport /* props */ />