Menubar

import { Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger } from '@hanzo/ui'

Default

File, Edit and View menus with items, shortcuts, separators and a submenu.

export function Default() {
return (
<Menubar>
<MenubarMenu value="file">
<MenubarTrigger>File</MenubarTrigger>
<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</MenubarSubTrigger>
<MenubarSubContent>
<MenubarItem>Email link</MenubarItem>
<MenubarItem>Messages</MenubarItem>
<MenubarItem>Notes</MenubarItem>
</MenubarSubContent>
</MenubarSub>
<MenubarSeparator />
<MenubarItem>
Print... <MenubarShortcut>⌘P</MenubarShortcut>
</MenubarItem>
</MenubarContent>
</MenubarMenu>
<MenubarMenu value="edit">
<MenubarTrigger>Edit</MenubarTrigger>
<MenubarContent>
<MenubarItem>
Undo <MenubarShortcut>⌘Z</MenubarShortcut>
</MenubarItem>
<MenubarItem>
Redo <MenubarShortcut>⇧⌘Z</MenubarShortcut>
</MenubarItem>
<MenubarSeparator />
<MenubarItem>Cut</MenubarItem>
<MenubarItem>Copy</MenubarItem>
<MenubarItem>Paste</MenubarItem>
</MenubarContent>
</MenubarMenu>
<MenubarMenu value="view">
<MenubarTrigger>View</MenubarTrigger>
<MenubarContent>
<MenubarCheckboxItem>Always Show Bookmarks Bar</MenubarCheckboxItem>
<MenubarCheckboxItem checked>
Always Show Full URLs
</MenubarCheckboxItem>
<MenubarSeparator />
<MenubarItem inset>
Reload <MenubarShortcut>⌘R</MenubarShortcut>
</MenubarItem>
<MenubarItem disabled inset>
Force Reload <MenubarShortcut>⇧⌘R</MenubarShortcut>
</MenubarItem>
</MenubarContent>
</MenubarMenu>
</Menubar>
)
}

Radio group

A single "Profiles" menu whose rows are a mutually-exclusive choice.

export function RadioGroup() {
return (
<Menubar>
<MenubarMenu value="profiles">
<MenubarTrigger>Profiles</MenubarTrigger>
<MenubarContent>
<MenubarRadioGroup value="benoit">
<MenubarRadioItem value="andy">Andy</MenubarRadioItem>
<MenubarRadioItem value="benoit">Benoit</MenubarRadioItem>
<MenubarRadioItem value="luis">Luis</MenubarRadioItem>
</MenubarRadioGroup>
<MenubarSeparator />
<MenubarItem inset>Edit...</MenubarItem>
<MenubarSeparator />
<MenubarItem inset>Add Profile...</MenubarItem>
</MenubarContent>
</MenubarMenu>
</Menubar>
)
}

Default open

`defaultValue` starts the bar with its Edit menu already open.

export function DefaultOpen() {
return (
<YStack gap="$3">
<XStack>
<Menubar defaultValue="edit">
<MenubarMenu value="file">
<MenubarTrigger>File</MenubarTrigger>
<MenubarContent>
<MenubarItem>New Tab</MenubarItem>
<MenubarItem>New Window</MenubarItem>
</MenubarContent>
</MenubarMenu>
<MenubarMenu value="edit">
<MenubarTrigger>Edit</MenubarTrigger>
<MenubarContent>
<MenubarItem>Undo</MenubarItem>
<MenubarItem>Redo</MenubarItem>
</MenubarContent>
</MenubarMenu>
</Menubar>
</XStack>
</YStack>
)
}

Types

export type MenubarProps = Omit<React.ComponentProps<typeof XStack>, 'onValueChange'> & {
/** Which menu is open, by its `MenubarMenu`'s `value`. Controlled. */
value?: string
defaultValue?: string
onValueChange?: (value: string | undefined) => void
}
export type MenubarMenuProps = React.ComponentProps<typeof Menu> & {
/** Identifies this menu to the root's `value`/`onValueChange`. Auto-generated if omitted. */
value?: string
}
export type MenubarTriggerProps = React.ComponentProps<typeof Menu.Trigger>
export type MenubarContentProps = React.ComponentProps<typeof Menu.Content> & {
sideOffset?: number
align?: 'start' | 'center' | 'end'
}
export type MenubarItemProps = Omit<
React.ComponentProps<typeof Menu.Item>,
'inset' | 'variant'
> & {
inset?: boolean
variant?: 'default' | 'destructive'
}

Exports

MenubarMenubarCheckboxItemMenubarContentMenubarGroupMenubarItemMenubarLabelMenubarMenuMenubarPortalMenubarRadioGroupMenubarRadioItemMenubarSeparatorMenubarShortcutMenubarSubMenubarSubContentMenubarSubTriggerMenubarTriggertype MenubarContentPropstype MenubarItemPropstype MenubarMenuPropstype MenubarPropstype MenubarTriggerProps