0
# Radix UI React Menubar
1
2
Radix UI React Menubar is a comprehensive collection of React components for building accessible menubar interfaces. It provides keyboard navigation, submenu support, and complete accessibility features while maintaining semantic HTML structure and screen reader compatibility.
3
4
## Package Information
5
6
- **Package Name**: @radix-ui/react-menubar
7
- **Package Type**: npm
8
- **Language**: TypeScript
9
- **Installation**: `npm install @radix-ui/react-menubar`
10
11
## Core Imports
12
13
```typescript
14
'use client';
15
import * as Menubar from "@radix-ui/react-menubar";
16
```
17
18
Or import specific components:
19
20
```typescript
21
'use client';
22
import {
23
Menubar,
24
MenubarMenu,
25
MenubarTrigger,
26
MenubarContent,
27
MenubarItem
28
} from "@radix-ui/react-menubar";
29
```
30
31
Alternative short-form imports:
32
33
```typescript
34
'use client';
35
import {
36
Root,
37
Menu,
38
Trigger,
39
Content,
40
Item
41
} from "@radix-ui/react-menubar";
42
```
43
44
## Basic Usage
45
46
```typescript
47
'use client';
48
import * as Menubar from "@radix-ui/react-menubar";
49
50
function MenubarDemo() {
51
return (
52
<Menubar.Root>
53
<Menubar.Menu>
54
<Menubar.Trigger>File</Menubar.Trigger>
55
<Menubar.Portal>
56
<Menubar.Content>
57
<Menubar.Item>New File</Menubar.Item>
58
<Menubar.Item>Open</Menubar.Item>
59
<Menubar.Separator />
60
<Menubar.Item>Exit</Menubar.Item>
61
</Menubar.Content>
62
</Menubar.Portal>
63
</Menubar.Menu>
64
65
<Menubar.Menu>
66
<Menubar.Trigger>Edit</Menubar.Trigger>
67
<Menubar.Portal>
68
<Menubar.Content>
69
<Menubar.Item>Cut</Menubar.Item>
70
<Menubar.Item>Copy</Menubar.Item>
71
<Menubar.Item>Paste</Menubar.Item>
72
</Menubar.Content>
73
</Menubar.Portal>
74
</Menubar.Menu>
75
</Menubar.Root>
76
);
77
}
78
```
79
80
## Architecture
81
82
Radix UI React Menubar is built around several key architectural components:
83
84
- **Primitive Foundation**: Built on top of Radix UI primitives for consistent behavior and styling
85
- **Context Management**: Uses React context for state management and component communication
86
- **Focus Management**: Implements roving tabindex pattern for keyboard navigation
87
- **Portal Rendering**: Optional portal-based rendering for dropdown content positioning
88
- **Accessibility-First**: Full ARIA attributes, keyboard navigation, and screen reader support
89
- **Composable Design**: Individual components that can be combined flexibly
90
91
## Capabilities
92
93
### Core Menubar Structure
94
95
Essential components for creating the basic menubar structure and managing overall state.
96
97
```typescript { .api }
98
// Root menubar container
99
function Menubar(props: MenubarProps): React.ReactElement;
100
101
// Individual menu within the menubar
102
function MenubarMenu(props: MenubarMenuProps): React.ReactElement;
103
104
// Button that triggers menu opening
105
function MenubarTrigger(props: MenubarTriggerProps): React.ReactElement;
106
107
// Portal for rendering content outside DOM tree
108
function MenubarPortal(props: MenubarPortalProps): React.ReactElement;
109
110
// Container for menu items
111
function MenubarContent(props: MenubarContentProps): React.ReactElement;
112
```
113
114
[Core Components](./core-components.md)
115
116
### Menu Items and Layout
117
118
Components for organizing and displaying menu items with various interaction patterns.
119
120
```typescript { .api }
121
// Basic interactive menu item
122
function MenubarItem(props: MenubarItemProps): React.ReactElement;
123
124
// Group related menu items
125
function MenubarGroup(props: MenubarGroupProps): React.ReactElement;
126
127
// Non-interactive label for sections
128
function MenubarLabel(props: MenubarLabelProps): React.ReactElement;
129
130
// Visual separator between groups
131
function MenubarSeparator(props: MenubarSeparatorProps): React.ReactElement;
132
```
133
134
[Menu Items and Layout](./menu-items.md)
135
136
### Interactive Menu Items
137
138
Advanced menu items with checkbox, radio button, and visual indicator functionality.
139
140
```typescript { .api }
141
// Menu item with checkbox behavior
142
function MenubarCheckboxItem(props: MenubarCheckboxItemProps): React.ReactElement;
143
144
// Container for radio button items
145
function MenubarRadioGroup(props: MenubarRadioGroupProps): React.ReactElement;
146
147
// Menu item with radio button behavior
148
function MenubarRadioItem(props: MenubarRadioItemProps): React.ReactElement;
149
150
// Visual indicator for checked/selected items
151
function MenubarItemIndicator(props: MenubarItemIndicatorProps): React.ReactElement;
152
```
153
154
[Interactive Items](./interactive-items.md)
155
156
### Submenus and Advanced Features
157
158
Components for creating nested submenus and additional visual elements.
159
160
```typescript { .api }
161
// Container for submenu functionality
162
function MenubarSub(props: MenubarSubProps): React.ReactElement;
163
164
// Trigger that opens a submenu
165
function MenubarSubTrigger(props: MenubarSubTriggerProps): React.ReactElement;
166
167
// Content container for submenu items
168
function MenubarSubContent(props: MenubarSubContentProps): React.ReactElement;
169
170
// Optional arrow pointing from trigger to content
171
function MenubarArrow(props: MenubarArrowProps): React.ReactElement;
172
```
173
174
[Submenus](./submenus.md)
175
176
### Utilities
177
178
Utility functions for advanced usage patterns and context management.
179
180
```typescript { .api }
181
// Creates scoped context for nested menubars
182
function createMenubarScope(): ScopeHook;
183
```
184
185
[Utilities](./utilities.md)
186
187
## Common Type Definitions
188
189
```typescript { .api }
190
// Direction for text and navigation
191
type Direction = 'ltr' | 'rtl';
192
193
// Base element types
194
type MenubarElement = React.ComponentRef<'div'>;
195
type MenubarTriggerElement = React.ComponentRef<'button'>;
196
type MenubarContentElement = HTMLDivElement;
197
type MenubarGroupElement = HTMLDivElement;
198
type MenubarLabelElement = HTMLDivElement;
199
type MenubarItemElement = HTMLDivElement;
200
type MenubarCheckboxItemElement = HTMLDivElement;
201
type MenubarRadioGroupElement = HTMLDivElement;
202
type MenubarRadioItemElement = HTMLDivElement;
203
type MenubarItemIndicatorElement = HTMLSpanElement;
204
type MenubarSeparatorElement = HTMLDivElement;
205
type MenubarArrowElement = SVGSVGElement;
206
type MenubarSubTriggerElement = HTMLDivElement;
207
type MenubarSubContentElement = HTMLDivElement;
208
209
// Scoping types
210
interface Scope {
211
__scopeMenubar?: string;
212
}
213
214
type ScopeHook = () => Scope;
215
216
// Event types
217
interface FocusOutsideEvent {
218
target: HTMLElement;
219
preventDefault(): void;
220
}
221
222
interface InteractOutsideEvent {
223
target: HTMLElement;
224
preventDefault(): void;
225
}
226
227
interface PointerDownOutsideEvent {
228
target: HTMLElement;
229
preventDefault(): void;
230
}
231
232
interface SelectEvent {
233
preventDefault(): void;
234
target: HTMLElement;
235
}
236
237
// State types
238
type CheckedState = boolean | 'indeterminate';
239
240
// Collection item data
241
interface ItemData {
242
value: string;
243
disabled: boolean;
244
}
245
```