Overlay
Menubar
A pill rail of menus with hover-switching and full keyboard navigation.
Show codeHide code
"use client";
import { useState } from "react";
import {
Menubar,
MenubarCheckboxItem,
MenubarContent,
MenubarItem,
MenubarMenu,
MenubarSeparator,
MenubarSub,
MenubarSubTrigger,
MenubarTrigger,
} from "@/registry/lilt/ui/menubar";
export default function MenubarDemo() {
const [showGrid, setShowGrid] = useState(true);
return (
<Menubar>
<MenubarMenu>
<MenubarTrigger>File</MenubarTrigger>
<MenubarContent>
<MenubarItem>New</MenubarItem>
<MenubarItem>Open</MenubarItem>
<MenubarSeparator />
<MenubarItem variant="danger">Delete project</MenubarItem>
</MenubarContent>
</MenubarMenu>
<MenubarMenu>
<MenubarTrigger>Edit</MenubarTrigger>
<MenubarContent>
<MenubarItem>Undo</MenubarItem>
<MenubarItem>Redo</MenubarItem>
<MenubarSeparator />
<MenubarItem>Find & replace</MenubarItem>
</MenubarContent>
</MenubarMenu>
<MenubarMenu>
<MenubarTrigger>View</MenubarTrigger>
<MenubarContent>
<MenubarCheckboxItem checked={showGrid} onCheckedChange={setShowGrid}>
Show grid
</MenubarCheckboxItem>
<MenubarSub>
<MenubarSubTrigger>Sort by</MenubarSubTrigger>
<MenubarContent>
<MenubarItem>Name</MenubarItem>
<MenubarItem>Last edited</MenubarItem>
</MenubarContent>
</MenubarSub>
</MenubarContent>
</MenubarMenu>
</Menubar>
);
}Installation
npx shadcn@latest add @lilt/menubarAccessibility
- One tab stop for the whole bar; arrows move across menus, Escape backs out level by level.
- Triggers expose aria-haspopup and aria-expanded automatically.