gnome-ui
Components

Menubar

An application menu bar. Combines Base UI's `Menubar` with `Menu.Root` and its sub-components to create dropdown menus with full keyboard support.

Menubar component
    import { Menubar } from "gnome-ui/menubar";
    import { Menu } from "gnome-ui/menu";

    export function MenubarApp() {
      return (
        <Menubar>
          <Menu.Root>
            <Menu.Trigger>File</Menu.Trigger>
            <Menu.Portal>
              <Menu.Positioner sideOffset={6} alignOffset={-2} align="start">
                <Menu.Popup>
                  <Menu.Item><Icons.FilePlus /> New file <span>⌘N</span></Menu.Item>
                  <Menu.Item><Icons.FolderOpen /> Open… <span>⌘O</span></Menu.Item>
                  <Menu.Item><Icons.Save /> Save <span>⌘S</span></Menu.Item>
                  <Menu.SubmenuRoot>
                    <Menu.SubmenuTrigger>
                      <Icons.FileOutput /> Export
                      <Icons.ChevronRight className="ml-auto" />
                    </Menu.SubmenuTrigger>
                    <Menu.Portal>
                      <Menu.Positioner sideOffset={4} side="right" alignOffset={-4} align="start">
                        <Menu.Popup>
                          <Menu.Item>PDF</Menu.Item>
                          <Menu.Item>PNG</Menu.Item>
                          <Menu.Item>SVG</Menu.Item>
                        </Menu.Popup>
                      </Menu.Positioner>
                    </Menu.Portal>
                  </Menu.SubmenuRoot>
                  <Menu.Separator />
                  <Menu.Item><Icons.Printer /> Print… <span>⌘P</span></Menu.Item>
                </Menu.Popup>
              </Menu.Positioner>
            </Menu.Portal>
          </Menu.Root>

          <Menu.Root>
            <Menu.Trigger>Edit</Menu.Trigger>
            <Menu.Portal>
              <Menu.Positioner sideOffset={6} align="start">
                <Menu.Popup>
                  <Menu.Item><Icons.Undo2 /> Undo <span>⌘Z</span></Menu.Item>
                  <Menu.Item><Icons.Redo2 /> Redo <span>⇧⌘Z</span></Menu.Item>
                  <Menu.Separator />
                  <Menu.Item><Icons.Scissors /> Cut <span>⌘X</span></Menu.Item>
                  <Menu.Item><Icons.Copy /> Copy <span>⌘C</span></Menu.Item>
                  <Menu.Item><Icons.Clipboard /> Paste <span>⌘V</span></Menu.Item>
                </Menu.Popup>
              </Menu.Positioner>
            </Menu.Portal>
          </Menu.Root>

          <Menu.Root>
            <Menu.Trigger>View</Menu.Trigger>
            {/* ... */}
          </Menu.Root>

          <Menu.Root disabled>
            <Menu.Trigger>Help</Menu.Trigger>
          </Menu.Root>
        </Menubar>
      );
    }

API reference

The container for menus.

Menubar Props:

PropTypeDefaultDescription
loopFocusbooleantrueWhether to loop keyboard focus back to the first item when the end of the list is reached while using the arrow keys.
modalbooleantrueWhether the menubar is modal.
disabledbooleanfalseWhether the whole menubar is disabled.
orientationMenu.Root.Orientation'horizontal'The orientation of the menubar.
classNamestring | ((state: Menubar.State) => string | undefined)-CSS class applied to the element, or a function that returns a class based on the component’s state.
styleCSSProperties | ((state: Menubar.State) => CSSProperties | undefined)--
renderReactElement | ((props: HTMLProps, state: Menubar.State) => ReactElement)-Allows you to replace the component’s HTML element with a different tag, or compose it with another component.Accepts a ReactElement or a function that returns the element to render.

On this page