Menubar
Common in desktop applications, menu bar that provides quick access to a set of commands.
Preview
Installation
npx sigma-ui@latest add menubarUsage
<script setup lang="ts">
import {
Menubar,
MenubarContent,
MenubarItem,
MenubarMenu,
MenubarSeparator,
MenubarShortcut,
MenubarTrigger,
} from '@/components/ui/menubar';
</script>
<template>
<Menubar>
<MenubarMenu>
<MenubarTrigger>File</MenubarTrigger>
<MenubarContent>
<MenubarItem>
New Tab <MenubarShortcut>⌘T</MenubarShortcut>
</MenubarItem>
<MenubarItem>New Window</MenubarItem>
<MenubarSeparator />
<MenubarItem>Share</MenubarItem>
<MenubarSeparator />
<MenubarItem>Print</MenubarItem>
</MenubarContent>
</MenubarMenu>
</Menubar>
</template>- Each
<MenubarMenu>pairs a<MenubarTrigger>with its<MenubarContent>. - Use
<MenubarCheckboxItem>,<MenubarRadioGroup>/<MenubarRadioItem>and<MenubarSub>for checkable items and submenus, like in a dropdown menu.
Examples
Checkable Items
Use v-model on <MenubarCheckboxItem> and <MenubarRadioGroup> to track the checked state.
<script setup lang="ts">
import { ref } from 'vue';
import {
Menubar,
MenubarCheckboxItem,
MenubarContent,
MenubarMenu,
MenubarRadioGroup,
MenubarRadioItem,
MenubarSeparator,
MenubarTrigger,
} from '@/components/ui/menubar';
const showStatusBar = ref(true);
const profile = ref('benoit');
</script>
<template>
<Menubar>
<MenubarMenu>
<MenubarTrigger>View</MenubarTrigger>
<MenubarContent>
<MenubarCheckboxItem v-model="showStatusBar">
Show Status Bar
</MenubarCheckboxItem>
<MenubarSeparator />
<MenubarRadioGroup v-model="profile">
<MenubarRadioItem value="andy">
Andy
</MenubarRadioItem>
<MenubarRadioItem value="benoit">
Benoit
</MenubarRadioItem>
</MenubarRadioGroup>
</MenubarContent>
</MenubarMenu>
</Menubar>
</template>API Reference
Menubar
Props
| Prop | Type | Default |
|---|---|---|
modelValueThe controlled value of the menu to open. Can be used as | string | - |
defaultValueThe value of the menu that should be open when initially rendered. Use when you do not need to control the value state. | string | - |
dirThe reading direction of the combobox when applicable. If omitted, inherits globally from | Direction | - |
loopWhen | boolean | - |
Events
| Event | Payload |
|---|---|
update:modelValueEvent handler called when the value changes. | [value: boolean] |
Slots
| Slot | Scope |
|---|---|
defaultThe content of the component. | - |
MenubarItem
Props
| Prop | Type | Default |
|---|---|---|
disabledWhen | boolean | - |
textValueOptional text used for typeahead purposes. By default the typeahead behavior will use the | string | - |
asChildChange the default rendered element for the one passed as a child, merging their props and behavior. Read our Composition guide for more details. | boolean | - |
asThe element or component this component should render as. Can be overwritten by | AsTag | Component | "div" |
insetAdds left padding so the text lines up with items that have an icon or indicator. | boolean | - |
Events
| Event | Payload |
|---|---|
selectEvent handler called when the user selects an item (via mouse or keyboard). <br>
Calling | [event: Event] |
Slots
| Slot | Scope |
|---|---|
defaultThe content of the component. | - |
MenubarContent
Props
| Prop | Type | Default |
|---|---|---|
forceMountUsed to force mounting when more control is needed. Useful when controlling animation with Vue animation libraries. | boolean | - |
asChildChange the default rendered element for the one passed as a child, merging their props and behavior. Read our Composition guide for more details. | boolean | - |
asThe element or component this component should render as. Can be overwritten by | AsTag | Component | "div" |
loopWhen | boolean | false |
referenceThe custom element or virtual element that will be set as the reference to position the floating element. If provided, it will replace the default anchor element. | ReferenceElement | - |
memoDependenciesReactive dependencies that should invalidate the memoized content subtree. | unknown[] | - |
sideThe preferred side of the trigger to render against when open. Will be reversed when collisions occur and avoidCollisions is enabled. | "top" | "right" | "bottom" | "left" | "bottom" |
sideOffsetThe distance in pixels from the trigger. | number | 8 |
sideFlipFlip to the opposite side when colliding with boundary. | boolean | true |
alignThe preferred alignment against the trigger. May change when collisions occur. | "center" | "start" | "end" | "start" |
alignOffsetAn offset in pixels from the | number | -4 |
alignFlipFlip alignment when colliding with boundary.
May only occur when | boolean | true |
avoidCollisionsWhen | boolean | true |
collisionBoundaryThe element used as the collision boundary. By default this is the viewport, though you can provide additional element(s) to be included in this check. | Element | (Element | null)[] | null | [] |
collisionPaddingThe distance in pixels from the boundary edges where collision detection should occur. Accepts a number (same for all sides), or a partial padding object, for example: { top: 20, left: 20 }. | number | Partial<Record<"top" | "right" | "bottom" | "left", number>> | 0 |
arrowPaddingThe padding between the arrow and the edges of the content. If your content has border-radius, this will prevent it from overflowing the corners. | number | 0 |
hideShiftedArrowWhen | boolean | true |
stickyThe sticky behavior on the align axis. | "partial" | "always" | "partial" |
hideWhenDetachedWhether to hide the content when the trigger becomes fully occluded. | boolean | false |
positionStrategyThe type of CSS position property to use. | "absolute" | "fixed" | - |
updatePositionStrategyStrategy to update the position of the floating element on every animation frame. | "always" | "optimized" | 'optimized' |
disableUpdateOnLayoutShiftWhether to disable the update position for the content when the layout shifted. | boolean | false |
prioritizePositionForce content to be position within the viewport. Might overlap the reference element, which may not be desired. | boolean | false |
Slots
| Slot | Scope |
|---|---|
defaultThe content of the component. | - |
MenubarGroup
Props
| Prop | Type | Default |
|---|---|---|
asChildChange the default rendered element for the one passed as a child, merging their props and behavior. Read our Composition guide for more details. | boolean | - |
asThe element or component this component should render as. Can be overwritten by | AsTag | Component | "div" |
Slots
| Slot | Scope |
|---|---|
defaultThe content of the component. | - |
MenubarMenu
Props
| Prop | Type | Default |
|---|---|---|
valueA unique value that associates the item with an active value when the navigation menu is controlled. This prop is managed automatically when uncontrolled. | string | - |
Slots
| Slot | Scope |
|---|---|
defaultThe content of the component. | - |
MenubarRadioGroup
Props
| Prop | Type | Default |
|---|---|---|
modelValueThe value of the selected item in the group. | AcceptableValue | - |
asChildChange the default rendered element for the one passed as a child, merging their props and behavior. Read our Composition guide for more details. | boolean | - |
asThe element or component this component should render as. Can be overwritten by | AsTag | Component | "div" |
Events
| Event | Payload |
|---|---|
update:modelValueEvent handler called when the value changes. | [payload: AcceptableValue] |
Slots
| Slot | Scope |
|---|---|
defaultThe content of the component. | - |
MenubarRadioItem
Props
| Prop | Type | Default |
|---|---|---|
valuerequiredThe unique value of the item. | AcceptableValue | - |
disabledWhen | boolean | - |
textValueOptional text used for typeahead purposes. By default the typeahead behavior will use the | string | - |
asChildChange the default rendered element for the one passed as a child, merging their props and behavior. Read our Composition guide for more details. | boolean | - |
asThe element or component this component should render as. Can be overwritten by | AsTag | Component | "div" |
Events
| Event | Payload |
|---|---|
selectEvent handler called when the user selects an item (via mouse or keyboard). <br>
Calling | [event: Event] |
Slots
| Slot | Scope |
|---|---|
defaultThe content of the component. | - |
MenubarCheckboxItem
Props
| Prop | Type | Default |
|---|---|---|
modelValueThe controlled checked state of the item. Can be used as | CheckedState | - |
disabledWhen | boolean | - |
textValueOptional text used for typeahead purposes. By default the typeahead behavior will use the | string | - |
asChildChange the default rendered element for the one passed as a child, merging their props and behavior. Read our Composition guide for more details. | boolean | - |
asThe element or component this component should render as. Can be overwritten by | AsTag | Component | "div" |
Events
| Event | Payload |
|---|---|
update:modelValueEvent handler called when the checked state changes. | [payload: boolean] |
selectEvent handler called when the user selects an item (via mouse or keyboard). <br>
Calling | [event: Event] |
Slots
| Slot | Scope |
|---|---|
defaultThe content of the component. | - |
MenubarSeparator
Props
| Prop | Type | Default |
|---|---|---|
asChildChange the default rendered element for the one passed as a child, merging their props and behavior. Read our Composition guide for more details. | boolean | - |
asThe element or component this component should render as. Can be overwritten by | AsTag | Component | "div" |
MenubarSub
Props
| Prop | Type | Default |
|---|---|---|
defaultOpenWhether the submenu is open on first render; use when you do not control the open state. | boolean | - |
openControlled open state of the submenu; use with | boolean | - |
Events
| Event | Payload |
|---|---|
update:openEvent handler called when the open state of the submenu changes. | [payload: boolean] |
Slots
| Slot | Scope |
|---|---|
defaultThe content of the component. | - |
MenubarSubContent
Props
| Prop | Type | Default |
|---|---|---|
forceMountUsed to force mounting when more control is needed. Useful when controlling animation with Vue animation libraries. | boolean | - |
asChildChange the default rendered element for the one passed as a child, merging their props and behavior. Read our Composition guide for more details. | boolean | - |
asThe element or component this component should render as. Can be overwritten by | AsTag | Component | "div" |
loopWhen | boolean | false |
referenceThe custom element or virtual element that will be set as the reference to position the floating element. If provided, it will replace the default anchor element. | ReferenceElement | - |
memoDependenciesReactive dependencies that should invalidate the memoized content subtree. | unknown[] | - |
sideOffsetThe distance in pixels from the trigger. | number | 0 |
sideFlipFlip to the opposite side when colliding with boundary. | boolean | true |
alignOffsetAn offset in pixels from the | number | 0 |
alignFlipFlip alignment when colliding with boundary.
May only occur when | boolean | true |
avoidCollisionsWhen | boolean | true |
collisionBoundaryThe element used as the collision boundary. By default this is the viewport, though you can provide additional element(s) to be included in this check. | Element | (Element | null)[] | null | [] |
collisionPaddingThe distance in pixels from the boundary edges where collision detection should occur. Accepts a number (same for all sides), or a partial padding object, for example: { top: 20, left: 20 }. | number | Partial<Record<"top" | "right" | "bottom" | "left", number>> | 0 |
arrowPaddingThe padding between the arrow and the edges of the content. If your content has border-radius, this will prevent it from overflowing the corners. | number | 0 |
hideShiftedArrowWhen | boolean | true |
stickyThe sticky behavior on the align axis. | "partial" | "always" | "partial" |
hideWhenDetachedWhether to hide the content when the trigger becomes fully occluded. | boolean | false |
positionStrategyThe type of CSS position property to use. | "absolute" | "fixed" | - |
updatePositionStrategyStrategy to update the position of the floating element on every animation frame. | "always" | "optimized" | 'optimized' |
disableUpdateOnLayoutShiftWhether to disable the update position for the content when the layout shifted. | boolean | false |
prioritizePositionForce content to be position within the viewport. Might overlap the reference element, which may not be desired. | boolean | false |
Events
| Event | Payload |
|---|---|
escapeKeyDownEvent handler called when the escape key is down. Can be prevented. | [event: KeyboardEvent] |
pointerDownOutsideEvent handler called when a | [event: PointerDownOutsideEvent] |
focusOutsideEvent handler called when the focus moves outside of the | [event: FocusOutsideEvent] |
interactOutsideEvent handler called when an interaction happens outside the | [event: PointerDownOutsideEvent | FocusOutsideEvent] |
openAutoFocus | [event: Event] |
closeAutoFocusEvent handler called when auto-focusing on close. Can be prevented. | [event: Event] |
entryFocus | [event: Event] |
Slots
| Slot | Scope |
|---|---|
defaultThe content of the component. | - |
MenubarSubTrigger
Props
| Prop | Type | Default |
|---|---|---|
graceDurationHow long (in milliseconds) the pointer is given to reach the submenu after leaving the trigger. While it moves towards the submenu within this time, hovering other items won't close the submenu. Increase it for users who move the pointer slowly or on devices under heavy load. | number | 300 |
disabledWhen | boolean | - |
textValueOptional text used for typeahead purposes. By default the typeahead behavior will use the | string | - |
asChildChange the default rendered element for the one passed as a child, merging their props and behavior. Read our Composition guide for more details. | boolean | - |
asThe element or component this component should render as. Can be overwritten by | AsTag | Component | "div" |
insetAdds left padding so the text lines up with items that have an icon or indicator. | boolean | - |
Slots
| Slot | Scope |
|---|---|
defaultThe content of the component. | - |
MenubarTrigger
Props
| Prop | Type | Default |
|---|---|---|
disabledWhen | boolean | - |
asChildChange the default rendered element for the one passed as a child, merging their props and behavior. Read our Composition guide for more details. | boolean | - |
asThe element or component this component should render as. Can be overwritten by | AsTag | Component | "div" |
Slots
| Slot | Scope |
|---|---|
defaultThe content of the component. | - |
MenubarShortcut
Slots
| Slot | Scope |
|---|---|
defaultThe content of the component. | - |
MenubarLabel
Props
| Prop | Type | Default |
|---|---|---|
asChildChange the default rendered element for the one passed as a child, merging their props and behavior. Read our Composition guide for more details. | boolean | - |
asThe element or component this component should render as. Can be overwritten by | AsTag | Component | "div" |
insetAdds left padding so the text lines up with items that have an icon or indicator. | boolean | - |
Slots
| Slot | Scope |
|---|---|
defaultThe content of the component. | - |
Accessibility
Adheres to the Menubar WAI-ARIA design pattern and uses roving focus to move between triggers and items. Reka UI manages focus and the menubar / menu / menuitem roles.
| Key | Description |
|---|---|
| Space | When focus is on a trigger, opens its menu and focuses the first item. When focus is on an item, activates it. |
| Enter | When focus is on a trigger, opens its menu and focuses the first item. When focus is on an item, activates it. |
| ArrowDown | When focus is on a trigger, opens its menu. When focus is on an item, moves focus to the next item. |
| ArrowUp | When focus is on an item, moves focus to the previous item. |
| ArrowRight | When focus is on a trigger, moves focus to the next trigger. When focus is on a submenu trigger, opens the submenu. |
| ArrowLeft | When focus is on a trigger, moves focus to the previous trigger. When focus is on an item of a submenu, closes the submenu. |
| Esc | Closes the open menu and moves focus to its trigger. |