Navigation Menu
A collection of links and menus for website and application navigation.
API Reference
Original primitive API
Behavior, accessibility details, and low-level props are documented by Base UI.
Basic
import { NavigationMenu, NavigationMenuList, NavigationMenuItem, NavigationMenuTrigger, NavigationMenuContent, NavigationMenuLink,} from "moduix";export function NavigationMenuDemo() { return ( <NavigationMenu> <NavigationMenuList> <NavigationMenuItem> <NavigationMenuTrigger> Product </NavigationMenuTrigger> <NavigationMenuContent> <ul className={styles.contentGrid}> {productLinks.map((link) => ( <li key={link.title}> <a href={link.href} className={styles.linkCard}> <p className={styles.title}>{link.title}</p> <p className={styles.description}>{link.description}</p> </a> </li> ))} </ul> </NavigationMenuContent> </NavigationMenuItem> <NavigationMenuItem> <NavigationMenuTrigger> Guides </NavigationMenuTrigger> <NavigationMenuContent> <ul className={styles.contentList}> {guideLinks.slice(0, 2).map((link) => ( <li key={link.title}> <a href={link.href} className={styles.linkCard}> <p className={styles.title}>{link.title}</p> <p className={styles.description}>{link.description}</p> </a> </li> ))} </ul> </NavigationMenuContent> </NavigationMenuItem> <NavigationMenuItem> <NavigationMenuLink href="#" closeOnClick> Releases </NavigationMenuLink> </NavigationMenuItem> </NavigationMenuList> </NavigationMenu> );}.contentList,.contentGrid { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--spacing-1); width: 100%; margin: 0; padding: 0; list-style: none;}.linkCard { box-sizing: border-box; display: grid; gap: var(--spacing-1); min-width: 0; width: 100%; padding: var(--spacing-2) var(--spacing-3); border-radius: var(--radius-md); color: inherit; text-decoration: none; overflow-wrap: anywhere;}.linkCard:hover { background-color: var(--color-muted);}.title { margin: 0; color: var(--color-foreground); font-size: var(--text-sm); line-height: var(--line-height-text-sm);}.description { margin: 0; color: var(--color-muted-foreground); font-size: var(--text-sm); line-height: var(--line-height-text-sm);}@media (min-width: 700px) { .contentGrid { grid-template-columns: repeat(2, minmax(12rem, 1fr)); width: min(34rem, calc(100vw - var(--spacing-8))); }}const productLinks = [ { href: "#", title: "Quick Start", description: "Install the package and assemble your first navigation.", }, { href: "#", title: "Composition", description: "Use slots and className to match your application layout.", },];const guideLinks = [ { href: "#", title: "Accessibility handbook", description: "Take a practical pass over focus order and keyboard support.", }, { href: "#", title: "Composition handbook", description: "Learn when to wrap parts and expose flexible APIs.", }, { href: "#", title: "Styling handbook", description: "Apply tokens and state styles without fighting markup.", },];Full list of component variables available for project-level overrides.
| Property | Default | Description |
|---|---|---|
| --navigation-menu-arrow-height | 0.625rem | Controls popup arrow height. |
| --navigation-menu-arrow-inline-offset | 0.8125rem | Controls arrow inline-axis offset. |
| --navigation-menu-arrow-offset | 0.5rem | Controls arrow block-axis offset. |
| --navigation-menu-arrow-stroke-color | var(--navigation-menu-popup-border-color) | Controls popup arrow stroke color. |
| --navigation-menu-arrow-transition-duration | var(--duration-slow) | Controls popup arrow movement duration. |
| --navigation-menu-arrow-width | 1.25rem | Controls popup arrow width. |
| --navigation-menu-backdrop-bg | var(--backdrop-bg, transparent) | Controls backdrop color. |
| --navigation-menu-backdrop-blur | 0 | Controls backdrop blur when backdrop is enabled. |
| --navigation-menu-backdrop-transition | var(--navigation-menu-transition, var(--transition-default)) | Controls backdrop opacity transition. |
| --navigation-menu-bg | transparent | Controls root background. |
| --navigation-menu-color | var(--color-foreground) | Controls root text color. |
| --navigation-menu-content-min-width | 20rem | Controls desktop content minimum width. |
| --navigation-menu-content-opacity-duration | calc(var(--duration-slow) * 0.7) | Controls content fade duration. |
| --navigation-menu-content-padding | var(--spacing-4) | Controls content padding. |
| --navigation-menu-content-slide-distance | 50% | Controls content slide animation distance. |
| --navigation-menu-content-width-mobile | calc(100vw - var(--spacing-8)) | Controls mobile content width. |
| --navigation-menu-disabled-opacity | var(--opacity-disabled) | Controls disabled opacity. |
| --navigation-menu-focus-ring-color | var(--color-ring) | Controls trigger focus ring color. |
| --navigation-menu-focus-ring-width | var(--border-width-sm) | Controls trigger focus ring width. |
| --navigation-menu-full-width-inset | 0px | Controls screen gutter for full-width popup mode. |
| --navigation-menu-icon-color | currentColor | Controls trigger icon color. |
| --navigation-menu-icon-size | 0.875rem | Controls trigger icon size. |
| --navigation-menu-icon-transition | var(--navigation-menu-transition, 200ms ease) | Controls trigger icon rotation transition. |
| --navigation-menu-list-gap | 0 | Controls spacing between top-level items. |
| --navigation-menu-list-justify | flex-start | Controls horizontal alignment of top-level items. |
| --navigation-menu-min-width | max-content | Controls root minimum width. |
| --navigation-menu-padding | var(--spacing-1) | Controls root padding. |
| --navigation-menu-popup-bg | var(--color-popover) | Controls popup background. |
| --navigation-menu-popup-border-color | var(--color-border) | Controls popup border and arrow stroke color. |
| --navigation-menu-popup-border-style | solid | Controls popup border style. |
| --navigation-menu-popup-border-width | var(--border-width-sm) | Controls popup border width. |
| --navigation-menu-popup-color | var(--color-popover-foreground) | Controls popup text color. |
| --navigation-menu-popup-leave-duration | 150ms | Controls popup closing transition duration. |
| --navigation-menu-popup-radius | var(--radius-lg) | Controls popup border radius. |
| --navigation-menu-popup-scale | var(--scale-popup) | Controls popup enter/exit scale. |
| --navigation-menu-popup-shadow | var(--shadow-lg) | Controls popup shadow. |
| --navigation-menu-popup-transition-duration | var(--duration-slow) | Controls popup transition duration. |
| --navigation-menu-popup-transition-easing | cubic-bezier(0.22, 1, 0.36, 1) | Controls popup transition easing. |
| --navigation-menu-positioner-gap | 0.625rem | Controls hover bridge spacing between trigger and popup. |
| --navigation-menu-positioner-max-width | calc(100vw - var(--spacing-8)) | Controls popup positioner maximum width. |
| --navigation-menu-radius | var(--radius-lg) | Controls root border radius. |
| --navigation-menu-submenu-trigger-bg | transparent | Controls nested submenu trigger background. |
| --navigation-menu-submenu-trigger-bg-active | var(--navigation-menu-popup-bg, var(--color-background)) | Controls nested submenu trigger active background. |
| --navigation-menu-submenu-trigger-min-width | 9rem | Controls nested submenu trigger minimum width. |
| --navigation-menu-submenu-trigger-padding-x | 0.75rem | Controls nested submenu trigger horizontal padding. |
| --navigation-menu-submenu-trigger-padding-y | 0.5rem | Controls nested submenu trigger vertical padding. |
| --navigation-menu-submenu-trigger-radius | var(--radius-lg) | Controls nested submenu trigger border radius. |
| --navigation-menu-submenu-trigger-shadow-active | 0 1px 2px rgb(0 0 0 / 0.08), 0 1px 1px rgb(0 0 0 / 0.04) | Controls nested submenu trigger active shadow. |
| --navigation-menu-transition | var(--transition-default) | Controls trigger transitions. |
| --navigation-menu-trigger-bg | transparent | Controls trigger background. |
| --navigation-menu-trigger-bg-active | var(--color-muted) | Controls trigger background when active or open. |
| --navigation-menu-trigger-bg-hover | var(--color-accent) | Controls trigger background on hover. |
| --navigation-menu-trigger-border-color | transparent | Controls trigger border color. |
| --navigation-menu-trigger-border-style | solid | Controls trigger border style. |
| --navigation-menu-trigger-border-width | 0 | Controls trigger border width. |
| --navigation-menu-trigger-color | var(--color-foreground) | Controls trigger text color. |
| --navigation-menu-trigger-font-size | var(--text-sm) | Controls trigger font size. |
| --navigation-menu-trigger-gap | 0.375rem | Controls trigger content gap. |
| --navigation-menu-trigger-height | var(--size-md) | Controls trigger minimum height. |
| --navigation-menu-trigger-line-height | var(--line-height-text-sm) | Controls trigger line height. |
| --navigation-menu-trigger-padding-x | 0.75rem | Controls trigger horizontal padding. |
| --navigation-menu-trigger-padding-y | 0 | Controls trigger vertical padding. |
| --navigation-menu-trigger-radius | var(--radius-md) | Controls trigger border radius. |
Interactive variables scoped for docs preview without changing size scale tokens.
| Property | Value | Default | Description |
|---|---|---|---|
| --navigation-menu-bg | transparent | Controls root background. | |
| --navigation-menu-color | var(--color-foreground) | Controls root text color. | |
| --navigation-menu-full-width-inset | 0px | Controls full-width popup viewport inset. | |
| --navigation-menu-list-justify | flex-start | Controls top-level item alignment. | |
| --navigation-menu-popup-bg | var(--color-popover) | Controls popup background. | |
| --navigation-menu-popup-border-color | var(--color-border) | Controls popup border color. | |
| --navigation-menu-popup-radius | var(--radius-lg) | Controls popup border radius. | |
| --navigation-menu-radius | var(--radius-lg) | Controls root border radius. | |
| --navigation-menu-trigger-bg | transparent | Controls trigger background. | |
| --navigation-menu-trigger-bg-active | var(--color-muted) | Controls trigger active background. | |
| --navigation-menu-trigger-bg-hover | var(--color-accent) | Controls trigger hover background. | |
| --navigation-menu-trigger-border-color | transparent | Controls trigger border color. | |
| --navigation-menu-trigger-border-width | 0 | Controls trigger border width. |
Anatomy
NavigationMenu is composed from visible navigation parts (List, Item, Trigger, Content,
Link) and the trigger's optional icon slot. The popup infrastructure (Portal,
Positioner, Popup, Arrow, Viewport) is rendered internally by default through
popupContent, so consumers can keep a compact composition for common navigation scenarios.
NavigationMenu
└─ NavigationMenuList
├─ NavigationMenuItem
│ ├─ NavigationMenuTrigger
│ │ └─ label
│ └─ NavigationMenuContent
│ └─ content
└─ NavigationMenuItem
└─ NavigationMenuLink<NavigationMenu>
<NavigationMenuList>
<NavigationMenuItem>
<NavigationMenuTrigger>Product</NavigationMenuTrigger>
<NavigationMenuContent>
<ul>
<li>
<a href="#">Quick Start</a>
</li>
<li>
<a href="#">Composition</a>
</li>
</ul>
</NavigationMenuContent>
</NavigationMenuItem>
<NavigationMenuItem>
<NavigationMenuLink href="#" closeOnClick>
Releases
</NavigationMenuLink>
</NavigationMenuItem>
</NavigationMenuList>
</NavigationMenu>| Part | Role |
|---|---|
NavigationMenu | Root state machine. Controls value, orientation, open state, and shared popup behavior. |
NavigationMenuList | Semantic list wrapper for top-level navigation items. |
NavigationMenuItem | One navigation node that can render either a trigger/content pair or a direct link. |
NavigationMenuTrigger | Interactive control that toggles associated content and receives state attributes. |
NavigationMenuIcon | Icon slot rendered by NavigationMenuTrigger; use icon, hideIcon, or classNames.icon for common cases. |
NavigationMenuContent | Panel content for a trigger item; rendered with popup mechanics by default. |
NavigationMenuLink | Direct navigation link item that can participate in close behavior with closeOnClick. |
For most implementations, keep default popup service slots internal and style visible parts first.
Reach for popupContent.className and popupContent.classNames when you need fine-grained control
over popup container and infrastructure slots.
Composition
NavigationMenu forwards Base UI root props such as value, defaultValue, onValueChange,
delay, closeDelay, orientation, actionsRef, render, className, and style.
NavigationMenuTrigger, NavigationMenuContent, and NavigationMenuLink also forward their
Base UI props, including render, keepMounted, active, and closeOnClick where those props
belong.
NavigationMenuTrigger renders a chevron icon by default. Pass icon to replace it, hideIcon
to remove it, or classNames.icon / slotProps.icon when only the icon slot needs styling or
extra props.
Use popupContent for Base UI placement behavior and popup styling. popupContent.className
styles the visible popup, while popupContent.classNames styles service slots hidden from
the default composition:
<NavigationMenu
popupContent={{
sideOffset: 16,
withBackdrop: true,
className: styles.popup,
classNames: {
portal: styles.portal,
backdrop: styles.backdrop,
positioner: styles.positioner,
arrow: styles.arrow,
viewport: styles.viewport,
},
}}
/>popupContent accepts Base UI popup props and the full positioner surface: side, sideOffset,
align, alignOffset, arrowPadding, anchor, collisionAvoidance, collisionBoundary,
collisionPadding, sticky, positionMethod, and disableAnchorTracking. Use
popupContent.container to choose the portal container, popupContent.withBackdrop to render the
backdrop, popupContent.withArrow={false} to hide the arrow, popupContent.fullWidth to stretch
the popup to viewport width, and popupContent.slotProps when a service slot needs non-class props.
Use popupContent={false} and withViewport when a nested menu should render its content inside
the current panel instead of opening another popup.
Examples
Full Width Popup
Use popupContent.fullWidth when the popup should span the full viewport width, while the menu
itself stays inside the page container. The example also shows 2/3/4-column layouts and content
alignment control through CSS.
import { NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger,} from "moduix";import styles from "./navigation-menu.module.css";export function FullWidthNavigationMenuDemo() { return ( <header className={styles.header}> <div className={styles.container}> <NavigationMenu className={styles.menu} popupContent={{ fullWidth: true, sideOffset: 12, withArrow: false }} > <NavigationMenuList> <NavigationMenuItem> <NavigationMenuTrigger>Platform</NavigationMenuTrigger> <NavigationMenuContent className={styles.content}> <div className={styles.contentInner}> <ul className={styles.gridCols2}>{/* 2-column links */}</ul> </div> </NavigationMenuContent> </NavigationMenuItem> <NavigationMenuItem> <NavigationMenuTrigger>Developers</NavigationMenuTrigger> <NavigationMenuContent className={styles.content}> <div className={styles.contentInner}> <ul className={styles.gridCols3}>{/* 3-column links */}</ul> </div> </NavigationMenuContent> </NavigationMenuItem> <NavigationMenuItem> <NavigationMenuTrigger>Design System</NavigationMenuTrigger> <NavigationMenuContent className={styles.content}> <div className={styles.contentInner}> <ul className={styles.gridCols4}>{/* 4-column links */}</ul> </div> </NavigationMenuContent> </NavigationMenuItem> <NavigationMenuItem> <NavigationMenuLink href="#">Pricing</NavigationMenuLink> </NavigationMenuItem> </NavigationMenuList> </NavigationMenu> </div> </header> );}.header { width: 100%;}.container { display: flex; justify-content: center; max-width: 72rem; margin: 0 auto; padding: 0 var(--spacing-4);}.menu { --navigation-menu-full-width-content-justify: center;}.content { padding: var(--spacing-5) 0;}.contentInner { display: grid; justify-content: var(--navigation-menu-full-width-content-justify, center); max-width: 72rem; margin: 0 auto; padding: 0 var(--spacing-4);}.gridCols2,.gridCols3,.gridCols4 { display: grid; width: max-content; gap: var(--spacing-1); margin: 0; padding: 0; list-style: none;}.gridCols2 { grid-template-columns: repeat(2, minmax(12rem, 16rem));}.gridCols3 { grid-template-columns: repeat(3, minmax(12rem, 16rem));}.gridCols4 { grid-template-columns: repeat(4, minmax(12rem, 16rem));}Nested Submenu
Nest another NavigationMenu inside content when a second-level menu should open in a separate popup.
The nested popup can still use collision handling from Base UI.
import { ChevronRightIcon, NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger,} from "moduix";export function NestedNavigationMenuDemo() { return ( <NavigationMenu> <NavigationMenuList> <NavigationMenuItem> <NavigationMenuTrigger> Overview </NavigationMenuTrigger> <NavigationMenuContent> <ul className={styles.contentList}> <li> <a href="#" className={styles.linkCard}>Quick Start</a> </li> <li className={styles.fullWidth}> <NavigationMenu className={styles.nestedRoot} orientation="vertical" popupContent={{ side: "right", align: "end", sideOffset: 24, alignOffset: -24, withArrow: false, }} > <NavigationMenuList className={styles.fullWidth}> <NavigationMenuItem className={styles.fullWidth}> <NavigationMenuTrigger className={styles.nestedTrigger} icon={<ChevronRightIcon />} classNames={{ icon: styles.nestedIcon }} > <span>Handbook</span> </NavigationMenuTrigger> <NavigationMenuContent> <ul className={styles.contentList}> {guideLinks.map((link) => ( <li key={link.title}> <a href={link.href} className={styles.linkCard}> {link.title} </a> </li> ))} </ul> </NavigationMenuContent> </NavigationMenuItem> </NavigationMenuList> </NavigationMenu> </li> </ul> </NavigationMenuContent> </NavigationMenuItem> <NavigationMenuItem> <NavigationMenuLink href="#">GitHub</NavigationMenuLink> </NavigationMenuItem> </NavigationMenuList> </NavigationMenu> );}.contentList { display: grid; gap: var(--spacing-1); width: 100%; margin: 0; padding: 0; list-style: none;}.linkCard,.nestedTrigger { box-sizing: border-box; display: grid; gap: var(--spacing-1); width: 100%; padding: var(--spacing-2) var(--spacing-3); border-radius: var(--radius-md); color: inherit; text-align: left; text-decoration: none; overflow-wrap: anywhere;}.fullWidth { width: 100%;}.nestedRoot { --navigation-menu-bg: transparent; --navigation-menu-min-width: 0; --navigation-menu-padding: 0;}.nestedTrigger { position: relative; padding-right: 2rem;}.nestedIcon { position: absolute; top: 50%; right: 0.625rem; transform: translateY(-50%);}const guideLinks = [ { href: "#", title: "Accessibility handbook" }, { href: "#", title: "Composition handbook" }, { href: "#", title: "Styling handbook" },];Nested Inline Submenu
Use popupContent={false} when second-level content should stay inside the same panel.
Set withViewport on the nested menu and pass classNames.viewport to style the automatic viewport.
import { NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuList, NavigationMenuTrigger,} from "moduix";import { useMediaQuery } from "@base-ui/react/unstable-use-media-query";export function NestedInlineNavigationMenuDemo() { const isDesktop = useMediaQuery("(min-width: 700px)", { defaultMatches: true }); return ( <NavigationMenu> <NavigationMenuList> <NavigationMenuItem> <NavigationMenuTrigger> Product </NavigationMenuTrigger> <NavigationMenuContent className={styles.inlineProductContent}> <NavigationMenu className={styles.inlineNestedRoot} orientation={isDesktop ? "vertical" : "horizontal"} defaultValue="developers" popupContent={false} withViewport classNames={{ viewport: styles.inlineViewport }} > <NavigationMenuList className={styles.inlineList}> {sections.map((section) => ( <NavigationMenuItem key={section.value} value={section.value}> <NavigationMenuTrigger className={styles.inlineTrigger} hideIcon> <span>{section.title}</span> <span>{section.description}</span> </NavigationMenuTrigger> <NavigationMenuContent className={styles.inlineSubmenuContent}> <ul className={styles.contentList}> {section.links.map((link) => ( <li key={link}> <a href="#" className={styles.linkCard}>{link}</a> </li> ))} </ul> </NavigationMenuContent> </NavigationMenuItem> ))} </NavigationMenuList> </NavigationMenu> </NavigationMenuContent> </NavigationMenuItem> </NavigationMenuList> </NavigationMenu> );}.inlineProductContent { width: calc(100vw - 40px); height: 100%; max-width: 675px; padding: 0;}.inlineNestedRoot { display: grid; grid-template-columns: 1fr; overflow: hidden; padding: 0; border-radius: var(--radius-lg);}.inlineList { display: flex; flex-direction: row; gap: var(--spacing-2); overflow-x: auto; margin: 0; padding: var(--spacing-3); border-bottom: var(--border-width-sm) solid var(--color-border); background-color: var(--color-muted); list-style: none;}.inlineTrigger { box-sizing: border-box; display: grid; justify-content: flex-start; gap: var(--spacing-1); width: 100%; min-width: 10rem; padding: var(--spacing-2) var(--spacing-3); border-radius: var(--radius-md); text-align: left;}.inlineTrigger[data-popup-open],.inlineTrigger[data-active] { background-color: var(--color-background);}.inlineSubmenuContent { height: 100%; padding: var(--spacing-4);}.inlineViewport { min-height: 16.5rem; border-top: var(--border-width-sm) solid var(--color-border);}@media (min-width: 700px) { .inlineNestedRoot { grid-template-columns: 13rem minmax(0, 1fr); } .inlineList { flex-direction: column; height: var(--popup-height); overflow-x: visible; overflow-y: auto; border-right: var(--border-width-sm) solid var(--color-border); border-bottom: 0; } .inlineViewport { border-top: 0; }}const sections = [ { value: "developers", title: "Developers", description: "API, SDK and integrations", links: ["API Overview", "Web SDK", "Composition"], }, { value: "systems", title: "Design Systems", description: "Patterns and governance", links: ["Styling", "Accessibility", "Release notes"], },];Custom Styles
Use popupContent.className and popupContent.classNames when styling the popup and the hidden
Base UI service slots.
import { NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuList, NavigationMenuTrigger,} from "moduix";export function CustomStylesNavigationMenuDemo() { return ( <NavigationMenu className={styles.customRoot} popupContent={{ sideOffset: 16, withBackdrop: true, classNames: { portal: styles.portal, backdrop: styles.backdrop, positioner: styles.positioner, arrow: styles.arrow, viewport: styles.viewport, }, }} > <NavigationMenuList> <NavigationMenuItem> <NavigationMenuTrigger> Resources </NavigationMenuTrigger> <NavigationMenuContent> <ul className={styles.contentList}> {guideLinks.map((link) => ( <li key={link.title}> <a href={link.href} className={styles.linkCard}> {link.title} </a> </li> ))} </ul> </NavigationMenuContent> </NavigationMenuItem> </NavigationMenuList> </NavigationMenu> );}.contentList { display: grid; gap: var(--spacing-1); margin: 0; padding: 0; list-style: none;}.linkCard { display: block; padding: var(--spacing-2) var(--spacing-3); border-radius: var(--radius-md); color: inherit; text-decoration: none;}.portal { z-index: var(--z-popup);}.customRoot { position: relative; z-index: calc(var(--z-popup) + 1);}.backdrop { background-color: rgb(15 23 42 / 0.08); backdrop-filter: blur(2px);}.positioner { --navigation-menu-positioner-gap: var(--spacing-2);}.arrow { color: var(--color-background); --navigation-menu-arrow-stroke-color: var(--navigation-menu-popup-border-color);}.viewport { overflow: hidden;}const guideLinks = [ { href: "#", title: "Accessibility handbook" }, { href: "#", title: "Composition handbook" }, { href: "#", title: "Styling handbook" },];Custom Icon
Pass icon to NavigationMenuTrigger to use any icon from your app or icon library.
import { ChevronDownIcon, NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuList, NavigationMenuTrigger,} from "moduix";export function CustomIconNavigationMenuDemo() { return ( <NavigationMenu> <NavigationMenuList> <NavigationMenuItem> <NavigationMenuTrigger icon={<ChevronDownIcon />} classNames={{ icon: styles.customIcon }} > Resources </NavigationMenuTrigger> <NavigationMenuContent> <ul className={styles.contentList}> {guideLinks.slice(0, 2).map((link) => ( <li key={link.title}> <a href={link.href} className={styles.linkCard}> {link.title} </a> </li> ))} </ul> </NavigationMenuContent> </NavigationMenuItem> </NavigationMenuList> </NavigationMenu> );}.contentList { display: grid; gap: var(--spacing-1); margin: 0; padding: 0; list-style: none;}.linkCard { display: block; padding: var(--spacing-2) var(--spacing-3); border-radius: var(--radius-md); color: inherit; text-decoration: none;}.customIcon { width: 1rem; height: 1rem;}const guideLinks = [ { href: "#", title: "Accessibility handbook" }, { href: "#", title: "Composition handbook" }, { href: "#", title: "Styling handbook" },];