Navigation Menu
A collection of links for navigating websites.
NavigationMenu — barre horizontale de nav avec sub-panels au hover (pattern nav app publique — Vercel, shadcn.com header). Chaque top-level ouvre un panel plus large avec liens hiérarchiques ou preview de section.
CSS-only : le reveal du sub-panel utilise group-hover — pas d'island requis.
Installation
$ bext ui add navigation-menu
Copy and paste the following into src/components/ui/navigation-menu.tsx.
Usage
Anatomy
<NavigationMenu>
└── <NavigationMenuList>
├── <NavigationMenuItem> // group/nav-item
│ ├── <NavigationMenuTrigger>Getting started</NavigationMenuTrigger>
│ └── <NavigationMenuContent> // revealed group-hover
│ └── <NavigationMenuLink href="/docs">Introduction</NavigationMenuLink>
└── <NavigationMenuItem>...</NavigationMenuItem>API Reference
NavigationMenu
| Prop | Type | Default | Description |
|---|---|---|---|
| viewport | boolean | true | Rendre le viewport dynamique (radix pattern — no-op en PRISM CSS-only). |
NavigationMenuList
| Prop | Type | Default | Description |
|---|---|---|---|
| className | string | — | flex items-center gap-1. |
NavigationMenuItem
| Prop | Type | Default | Description |
|---|---|---|---|
| className | string | — | Wrapper group/nav-item relative. |
NavigationMenuTrigger
| Prop | Type | Default | Description |
|---|---|---|---|
| className | string | — | Button h-9 px-4, avec chevron down qui rotate au hover. |
NavigationMenuContent
| Prop | Type | Default | Description |
|---|---|---|---|
| className | string | — | Panel invisible → visible au hover parent. min-w-[220px], rounded-md border bg-popover. |
NavigationMenuLink
| Prop | Type | Default | Description |
|---|---|---|---|
| href | string | — | URL. |
| active | boolean | — | data-active pour styling état actif. |
NavigationMenuViewport / Indicator
| Prop | Type | Default | Description |
|---|---|---|---|
| — | — | — | Placeholder pour parité API shadcn (radix). No-op en PRISM. |
Data Attributes
Attributs qu'on peut cibler en CSS custom pour override le style par état.
| Attribute | On | Values | Description |
|---|---|---|---|
| group/nav-item | Item | — | Utilisé par group-hover: sur Content pour le reveal. |
| data-active | Link | présent si active | bg-accent quand actif. |
Keyboard
| Key | Action |
|---|---|
| Tab | Focus les triggers un par un. Sub-panel NON révélé au focus (limitation CSS pure). |
| Enter | Navigue si trigger est un . |
Accessibility
Le reveal CSS-only ne se déclenche PAS au focus keyboard. Pour un vrai nav accessible, utiliser DropdownMenu (click) ou Popover.
Poser role="navigation" aria-label="Main" sur le NavigationMenu racine.
Edit this component live in the bext playground. The PRISM + signals version is the bext-native idiom — fine-grained reactivity, no virtual DOM.
On This Page