Menubar
The Menubar component provides a customizable and accessible menu bar, built using Radix UI Menubar primitives. It can be used to create complex menu structures with various functionalities such as submenus, checkboxes, and radio groups.
Usage
To use the Menubar
, import it from your components and compose it with other related Menubar components like MenubarMenu
, MenubarTrigger
, MenubarContent
, MenubarItem
, etc.
Menubar Example
A menubar showcasing all the basic functionalities of the Menubar component.
import React from "react";
import {
FiberManualRecordIcon,
Menubar,
MenubarCheckboxItem,
MenubarContent,
MenubarItem,
MenubarItemIndicator,
MenubarMenu,
MenubarPortal,
MenubarRadioGroup,
MenubarRadioItem,
MenubarSeparator,
MenubarShortcut,
MenubarSub,
MenubarSubContent,
MenubarSubTrigger,
MenubarSubTriggerIndicator,
MenubarTrigger
} from "@firecms/ui";
const RADIO_ITEMS = ["Andy", "Benoît", "Luis"];
const CHECK_ITEMS = ["Always Show Bookmarks Bar", "Always Show Full URLs"];
export default function MenubarDemo() {
const [checkedSelection, setCheckedSelection] = React.useState([CHECK_ITEMS[1]]);
const [radioSelection, setRadioSelection] = React.useState(RADIO_ITEMS[2]);
return (
<Menubar className={"rounded-lg mb-8"}>
<MenubarMenu>
<MenubarTrigger>
File
</MenubarTrigger>
<MenubarPortal>
<MenubarContent>
<MenubarItem>
New Tab{" "}
<MenubarShortcut>
⌘ T
</MenubarShortcut>
</MenubarItem>
<MenubarItem>
New Window{" "}
<MenubarShortcut>
⌘ N
</MenubarShortcut>
</MenubarItem>
<MenubarItem disabled
>
New Incognito Window
</MenubarItem>
<MenubarSeparator/>
<MenubarSub>
<MenubarSubTrigger>
Share
<MenubarSubTriggerIndicator/>
</MenubarSubTrigger>
<MenubarPortal>
<MenubarSubContent>
<MenubarItem>
Email Link
</MenubarItem>
<MenubarItem>
Messages
</MenubarItem>
<MenubarItem>
Notes
</MenubarItem>
</MenubarSubContent>
</MenubarPortal>
</MenubarSub>
<MenubarSeparator/>
<MenubarItem>
Print…{" "}
<MenubarShortcut>
⌘ P
</MenubarShortcut>
</MenubarItem>
</MenubarContent>
</MenubarPortal>
</MenubarMenu>
<MenubarMenu>
<MenubarTrigger>
Edit
</MenubarTrigger>
<MenubarPortal>
<MenubarContent>
<MenubarItem>
Undo{" "}
<MenubarShortcut
>
⌘ Z
</MenubarShortcut>
</MenubarItem>
<MenubarItem>
Redo{" "}
<MenubarShortcut
>
⇧ ⌘ Z
</MenubarShortcut>
</MenubarItem>
<MenubarSeparator/>
<MenubarSub>
<MenubarSubTrigger>
Find
</MenubarSubTrigger>
<MenubarPortal>
<MenubarSubContent>
<MenubarItem>
Search the web…
</MenubarItem>
<MenubarSeparator/>
<MenubarItem>
Find…
</MenubarItem>
<MenubarItem>
Find Next
</MenubarItem>
<MenubarItem>
Find Previous
</MenubarItem>
</MenubarSubContent>
</MenubarPortal>
</MenubarSub>
<MenubarSeparator/>
<MenubarItem>
Cut
</MenubarItem>
<MenubarItem>
Copy
</MenubarItem>
<MenubarItem>
Paste
</MenubarItem>
</MenubarContent>
</MenubarPortal>
</MenubarMenu>
<MenubarMenu>
<MenubarTrigger>
View
</MenubarTrigger>
<MenubarPortal>
<MenubarContent>
{CHECK_ITEMS.map((item) => (
<MenubarCheckboxItem
key={item}
checked={checkedSelection.includes(item)}
onCheckedChange={() =>
setCheckedSelection((current) =>
current.includes(item)
? current.filter((el) => el !== item)
: current.concat(item)
)
}
>
<MenubarItemIndicator/>
{item}
</MenubarCheckboxItem>
))}
<MenubarSeparator/>
<MenubarItem leftPadding={true}>
Reload{" "}
<MenubarShortcut>
⌘ R
</MenubarShortcut>
</MenubarItem>
<MenubarItem
leftPadding
disabled>
Force Reload{" "}
<MenubarShortcut>
⇧ ⌘ R
</MenubarShortcut>
</MenubarItem>
<MenubarSeparator/>
<MenubarItem
leftPadding>
Toggle Fullscreen
</MenubarItem>
<MenubarSeparator/>
<MenubarItem
leftPadding>
Hide Sidebar
</MenubarItem>
</MenubarContent>
</MenubarPortal>
</MenubarMenu>
<MenubarMenu>
<MenubarTrigger>
Profiles
</MenubarTrigger>
<MenubarPortal>
<MenubarContent>
<MenubarRadioGroup value={radioSelection} onValueChange={setRadioSelection}>
{RADIO_ITEMS.map((item) => (
<MenubarRadioItem
key={item}
value={item}>
<MenubarItemIndicator>
<FiberManualRecordIcon size={"smallest"}/>
</MenubarItemIndicator>
{item}
</MenubarRadioItem>
))}
<MenubarSeparator/>
<MenubarItem leftPadding>
Edit…
</MenubarItem>
<MenubarSeparator/>
<MenubarItem leftPadding>
Add Profile…
</MenubarItem>
</MenubarRadioGroup>
</MenubarContent>
</MenubarPortal>
</MenubarMenu>
</Menubar>
);
};