Menubar

A menubar component that provides a horizontal interface for applications.

import {
  Menubar,
  MenubarMenu,
  MenubarMenuTrigger,
  MenubarMenuPortal,
  MenubarMenuPositioner,
  MenubarMenuPopup,
  MenubarMenuItem,
  MenubarMenuSeparator,
  MenubarMenuSubmenuRoot,
  MenubarMenuSubmenuTrigger,
} from "@/components/ui/menubar/menubar";
import { Button } from "@/components/ui/button/button";
import styles from "./menubar-demo.module.css";

export default function MenubarDemo() {
  return (
    <Menubar>
      <MenubarMenu>
        <MenubarMenuTrigger
          render={
            <Button variant="ghost" size="sm">
              File
            </Button>
          }
        />
        <MenubarMenuPortal>
          <MenubarMenuPositioner>
            <MenubarMenuPopup>
              <MenubarMenuItem>
                <div className={styles.menuItemContent}>
                  New File
                  <span className={styles.shortcut}>
                    ⌘N
                  </span>
                </div>
              </MenubarMenuItem>
              <MenubarMenuItem>
                <div className={styles.menuItemContent}>
                  Open
                  <span className={styles.shortcut}>
                    ⌘O
                  </span>
                </div>
              </MenubarMenuItem>
              <MenubarMenuSeparator />
              <MenubarMenuItem>
                <div className={styles.menuItemContent}>
                  Save
                  <span className={styles.shortcut}>
                    ⌘S
                  </span>
                </div>
              </MenubarMenuItem>
              <MenubarMenuItem>Save As...</MenubarMenuItem>
              <MenubarMenuSeparator />

              <MenubarMenuSubmenuRoot>
                <MenubarMenuSubmenuTrigger>Export</MenubarMenuSubmenuTrigger>
                <MenubarMenuPortal>
                  <MenubarMenuPositioner side="right" align="start" sideOffset={8}>
                    <MenubarMenuPopup>
                      <MenubarMenuItem>PDF</MenubarMenuItem>
                      <MenubarMenuItem>PNG</MenubarMenuItem>
                      <MenubarMenuItem>SVG</MenubarMenuItem>
                    </MenubarMenuPopup>
                  </MenubarMenuPositioner>
                </MenubarMenuPortal>
              </MenubarMenuSubmenuRoot>

              <MenubarMenuSeparator />
              <MenubarMenuItem>Print</MenubarMenuItem>
            </MenubarMenuPopup>
          </MenubarMenuPositioner>
        </MenubarMenuPortal>
      </MenubarMenu>

      <MenubarMenu>
        <MenubarMenuTrigger
          render={
            <Button variant="ghost" size="sm">
              Edit
            </Button>
          }
        />
        <MenubarMenuPortal>
          <MenubarMenuPositioner>
            <MenubarMenuPopup>
              <MenubarMenuItem>
                <div className={styles.menuItemContent}>
                  Undo
                  <span className={styles.shortcut}>
                    ⌘Z
                  </span>
                </div>
              </MenubarMenuItem>
              <MenubarMenuItem>
                <div className={styles.menuItemContent}>
                  Redo
                  <span className={styles.shortcut}>
                    ⌘⇧Z
                  </span>
                </div>
              </MenubarMenuItem>
              <MenubarMenuSeparator />
              <MenubarMenuItem>
                <div className={styles.menuItemContent}>
                  Cut
                  <span className={styles.shortcut}>
                    ⌘X
                  </span>
                </div>
              </MenubarMenuItem>
              <MenubarMenuItem>
                <div className={styles.menuItemContent}>
                  Copy
                  <span className={styles.shortcut}>
                    ⌘C
                  </span>
                </div>
              </MenubarMenuItem>
              <MenubarMenuItem>
                <div className={styles.menuItemContent}>
                  Paste
                  <span className={styles.shortcut}>
                    ⌘V
                  </span>
                </div>
              </MenubarMenuItem>
            </MenubarMenuPopup>
          </MenubarMenuPositioner>
        </MenubarMenuPortal>
      </MenubarMenu>

      <MenubarMenu>
        <MenubarMenuTrigger
          render={
            <Button variant="ghost" size="sm">
              View
            </Button>
          }
        />
        <MenubarMenuPortal>
          <MenubarMenuPositioner>
            <MenubarMenuPopup>
              <MenubarMenuItem>Toggle Sidebar</MenubarMenuItem>
              <MenubarMenuItem>Toggle Fullscreen</MenubarMenuItem>
              <MenubarMenuSeparator />
              <MenubarMenuItem>Zoom In</MenubarMenuItem>
              <MenubarMenuItem>Zoom Out</MenubarMenuItem>
              <MenubarMenuItem>Reset Zoom</MenubarMenuItem>
              <MenubarMenuSeparator />

              <MenubarMenuSubmenuRoot>
                <MenubarMenuSubmenuTrigger>Layout</MenubarMenuSubmenuTrigger>
                <MenubarMenuPortal>
                  <MenubarMenuPositioner side="right" align="start" sideOffset={8}>
                    <MenubarMenuPopup>
                      <MenubarMenuItem>Single Page</MenubarMenuItem>
                      <MenubarMenuItem>Two Pages</MenubarMenuItem>
                    </MenubarMenuPopup>
                  </MenubarMenuPositioner>
                </MenubarMenuPortal>
              </MenubarMenuSubmenuRoot>
            </MenubarMenuPopup>
          </MenubarMenuPositioner>
        </MenubarMenuPortal>
      </MenubarMenu>

      <MenubarMenu>
        <MenubarMenuTrigger
          render={
            <Button variant="ghost" size="sm">
              Help
            </Button>
          }
        />
        <MenubarMenuPortal>
          <MenubarMenuPositioner>
            <MenubarMenuPopup>
              <MenubarMenuItem>About</MenubarMenuItem>
              <MenubarMenuItem>Documentation</MenubarMenuItem>
              <MenubarMenuItem disabled>Keyboard Shortcuts</MenubarMenuItem>
            </MenubarMenuPopup>
          </MenubarMenuPositioner>
        </MenubarMenuPortal>
      </MenubarMenu>
    </Menubar>
  );
}

Installation

npx shadcn@latest add https://roiui.com/r/menubar.json

Anatomy

anatomy
import {
Menubar,
MenubarMenu,
MenubarMenuTrigger,
MenubarMenuPortal,
MenubarMenuPositioner,
MenubarMenuPopup,
MenubarMenuItem,
MenubarMenuSeparator,
MenubarMenuArrow,
MenubarMenuSubmenuRoot,
MenubarMenuSubmenuTrigger,
} from '../ui/menubar'

<Menubar>
  <MenubarMenu>
      <MenubarMenuTrigger />
      <MenubarMenuPortal>
          <MenubarMenuPositioner>
              <MenubarMenuPopup>
                  <MenubarMenuArrow />
                  <MenubarMenuItem />
                  <MenubarMenuSeparator />
                  <MenubarMenuSubmenuRoot>
                      <MenubarMenuSubmenuTrigger />
                  </MenubarMenuSubmenuRoot>
              </MenubarMenuPopup>
          </MenubarMenuPositioner>
      </MenubarMenuPortal>
  </MenubarMenu>
</Menubar>