@neynar/ui 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.llm/a.llm.md +131 -0
- package/.llm/accordion-content.llm.md +67 -0
- package/.llm/accordion-item.llm.md +61 -0
- package/.llm/accordion-trigger.llm.md +69 -0
- package/.llm/accordion.llm.md +88 -0
- package/.llm/alert-description.llm.md +78 -0
- package/.llm/alert-dialog-action.llm.md +51 -0
- package/.llm/alert-dialog-cancel.llm.md +48 -0
- package/.llm/alert-dialog-content.llm.md +88 -0
- package/.llm/alert-dialog-description.llm.md +53 -0
- package/.llm/alert-dialog-footer.llm.md +41 -0
- package/.llm/alert-dialog-header.llm.md +39 -0
- package/.llm/alert-dialog-overlay.llm.md +44 -0
- package/.llm/alert-dialog-portal.llm.md +41 -0
- package/.llm/alert-dialog-title.llm.md +46 -0
- package/.llm/alert-dialog-trigger.llm.md +40 -0
- package/.llm/alert-dialog.llm.md +80 -0
- package/.llm/alert-title.llm.md +48 -0
- package/.llm/alert.llm.md +92 -0
- package/.llm/aspect-ratio.llm.md +41 -0
- package/.llm/avatar-fallback.llm.md +41 -0
- package/.llm/avatar-image.llm.md +48 -0
- package/.llm/avatar.llm.md +35 -0
- package/.llm/badge.llm.md +117 -0
- package/.llm/blockquote.llm.md +117 -0
- package/.llm/breadcrumb-ellipsis.llm.md +73 -0
- package/.llm/breadcrumb-item.llm.md +53 -0
- package/.llm/breadcrumb-link.llm.md +84 -0
- package/.llm/breadcrumb-list.llm.md +54 -0
- package/.llm/breadcrumb-page.llm.md +52 -0
- package/.llm/breadcrumb-separator.llm.md +60 -0
- package/.llm/breadcrumb.llm.md +110 -0
- package/.llm/button-group-separator.llm.md +53 -0
- package/.llm/button-group-text.llm.md +56 -0
- package/.llm/button-group.llm.md +81 -0
- package/.llm/button.llm.md +281 -0
- package/.llm/calendar-day-button.llm.md +57 -0
- package/.llm/calendar.llm.md +340 -0
- package/.llm/card-action.llm.md +64 -0
- package/.llm/card-content.llm.md +48 -0
- package/.llm/card-description.llm.md +46 -0
- package/.llm/card-footer.llm.md +56 -0
- package/.llm/card-header.llm.md +53 -0
- package/.llm/card-title.llm.md +43 -0
- package/.llm/card.llm.md +100 -0
- package/.llm/carousel-content.llm.md +77 -0
- package/.llm/carousel-item.llm.md +96 -0
- package/.llm/carousel-next.llm.md +95 -0
- package/.llm/carousel-previous.llm.md +95 -0
- package/.llm/carousel.llm.md +211 -0
- package/.llm/chart-config.llm.md +71 -0
- package/.llm/chart-container.llm.md +148 -0
- package/.llm/chart-legend-content.llm.md +85 -0
- package/.llm/chart-legend.llm.md +144 -0
- package/.llm/chart-style.llm.md +28 -0
- package/.llm/chart-tooltip-content.llm.md +149 -0
- package/.llm/chart-tooltip.llm.md +184 -0
- package/.llm/checkbox.llm.md +100 -0
- package/.llm/cn.llm.md +46 -0
- package/.llm/code.llm.md +103 -0
- package/.llm/collapsible-content.llm.md +109 -0
- package/.llm/collapsible-trigger.llm.md +75 -0
- package/.llm/collapsible.llm.md +109 -0
- package/.llm/combobox-option.llm.md +53 -0
- package/.llm/combobox.llm.md +208 -0
- package/.llm/command-dialog.llm.md +112 -0
- package/.llm/command-empty.llm.md +63 -0
- package/.llm/command-group.llm.md +83 -0
- package/.llm/command-input.llm.md +82 -0
- package/.llm/command-item.llm.md +97 -0
- package/.llm/command-list.llm.md +53 -0
- package/.llm/command-loading.llm.md +48 -0
- package/.llm/command-separator.llm.md +44 -0
- package/.llm/command-shortcut.llm.md +63 -0
- package/.llm/command.llm.md +147 -0
- package/.llm/container.llm.md +236 -0
- package/.llm/context-menu-checkbox-item.llm.md +97 -0
- package/.llm/context-menu-content.llm.md +91 -0
- package/.llm/context-menu-group.llm.md +61 -0
- package/.llm/context-menu-item.llm.md +94 -0
- package/.llm/context-menu-label.llm.md +60 -0
- package/.llm/context-menu-portal.llm.md +49 -0
- package/.llm/context-menu-radio-group.llm.md +66 -0
- package/.llm/context-menu-radio-item.llm.md +76 -0
- package/.llm/context-menu-separator.llm.md +51 -0
- package/.llm/context-menu-shortcut.llm.md +57 -0
- package/.llm/context-menu-sub-content.llm.md +90 -0
- package/.llm/context-menu-sub-trigger.llm.md +73 -0
- package/.llm/context-menu-sub.llm.md +61 -0
- package/.llm/context-menu-trigger.llm.md +53 -0
- package/.llm/context-menu.llm.md +103 -0
- package/.llm/date-picker.llm.md +90 -0
- package/.llm/dialog-close.llm.md +61 -0
- package/.llm/dialog-content.llm.md +128 -0
- package/.llm/dialog-description.llm.md +44 -0
- package/.llm/dialog-footer.llm.md +38 -0
- package/.llm/dialog-header.llm.md +40 -0
- package/.llm/dialog-overlay.llm.md +57 -0
- package/.llm/dialog-portal.llm.md +47 -0
- package/.llm/dialog-title.llm.md +41 -0
- package/.llm/dialog-trigger.llm.md +51 -0
- package/.llm/dialog.llm.md +113 -0
- package/.llm/drawer-close.llm.md +53 -0
- package/.llm/drawer-content.llm.md +58 -0
- package/.llm/drawer-description.llm.md +54 -0
- package/.llm/drawer-footer.llm.md +67 -0
- package/.llm/drawer-header.llm.md +60 -0
- package/.llm/drawer-overlay.llm.md +40 -0
- package/.llm/drawer-portal.llm.md +42 -0
- package/.llm/drawer-title.llm.md +51 -0
- package/.llm/drawer-trigger.llm.md +44 -0
- package/.llm/drawer.llm.md +194 -0
- package/.llm/dropdown-menu-checkbox-item.llm.md +111 -0
- package/.llm/dropdown-menu-content.llm.md +109 -0
- package/.llm/dropdown-menu-group.llm.md +38 -0
- package/.llm/dropdown-menu-item.llm.md +94 -0
- package/.llm/dropdown-menu-label.llm.md +66 -0
- package/.llm/dropdown-menu-portal.llm.md +32 -0
- package/.llm/dropdown-menu-radio-group.llm.md +73 -0
- package/.llm/dropdown-menu-radio-item.llm.md +92 -0
- package/.llm/dropdown-menu-separator.llm.md +55 -0
- package/.llm/dropdown-menu-shortcut.llm.md +74 -0
- package/.llm/dropdown-menu-sub-content.llm.md +80 -0
- package/.llm/dropdown-menu-sub-trigger.llm.md +84 -0
- package/.llm/dropdown-menu-sub.llm.md +74 -0
- package/.llm/dropdown-menu-trigger.llm.md +48 -0
- package/.llm/dropdown-menu.llm.md +120 -0
- package/.llm/empty-content.llm.md +103 -0
- package/.llm/empty-description.llm.md +70 -0
- package/.llm/empty-header.llm.md +64 -0
- package/.llm/empty-media.llm.md +81 -0
- package/.llm/empty-state.llm.md +174 -0
- package/.llm/empty-title.llm.md +54 -0
- package/.llm/empty.llm.md +158 -0
- package/.llm/field-content.llm.md +28 -0
- package/.llm/field-description.llm.md +28 -0
- package/.llm/field-error.llm.md +41 -0
- package/.llm/field-group.llm.md +84 -0
- package/.llm/field-label.llm.md +28 -0
- package/.llm/field-legend.llm.md +77 -0
- package/.llm/field-separator.llm.md +35 -0
- package/.llm/field-set.llm.md +80 -0
- package/.llm/field-title.llm.md +28 -0
- package/.llm/field.llm.md +35 -0
- package/.llm/h1.llm.md +108 -0
- package/.llm/h2.llm.md +108 -0
- package/.llm/h3.llm.md +106 -0
- package/.llm/h4.llm.md +104 -0
- package/.llm/h5.llm.md +105 -0
- package/.llm/h6.llm.md +105 -0
- package/.llm/hover-card-content.llm.md +167 -0
- package/.llm/hover-card-trigger.llm.md +65 -0
- package/.llm/hover-card.llm.md +121 -0
- package/.llm/input-group-addon.llm.md +91 -0
- package/.llm/input-group-button.llm.md +120 -0
- package/.llm/input-group-input.llm.md +145 -0
- package/.llm/input-group-text.llm.md +75 -0
- package/.llm/input-group-textarea.llm.md +157 -0
- package/.llm/input-group.llm.md +108 -0
- package/.llm/input.llm.md +319 -0
- package/.llm/item-actions.llm.md +77 -0
- package/.llm/item-content.llm.md +73 -0
- package/.llm/item-description.llm.md +61 -0
- package/.llm/item-footer.llm.md +68 -0
- package/.llm/item-group.llm.md +73 -0
- package/.llm/item-header.llm.md +66 -0
- package/.llm/item-media.llm.md +75 -0
- package/.llm/item-separator.llm.md +80 -0
- package/.llm/item-title.llm.md +59 -0
- package/.llm/item.llm.md +115 -0
- package/.llm/kbd-group.llm.md +71 -0
- package/.llm/kbd.llm.md +71 -0
- package/.llm/label.llm.md +145 -0
- package/.llm/lead.llm.md +114 -0
- package/.llm/menubar-checkbox-item.llm.md +66 -0
- package/.llm/menubar-content.llm.md +128 -0
- package/.llm/menubar-group.llm.md +40 -0
- package/.llm/menubar-item.llm.md +62 -0
- package/.llm/menubar-label.llm.md +40 -0
- package/.llm/menubar-menu.llm.md +32 -0
- package/.llm/menubar-portal.llm.md +38 -0
- package/.llm/menubar-radio-group.llm.md +39 -0
- package/.llm/menubar-radio-item.llm.md +59 -0
- package/.llm/menubar-separator.llm.md +35 -0
- package/.llm/menubar-shortcut.llm.md +37 -0
- package/.llm/menubar-sub-content.llm.md +127 -0
- package/.llm/menubar-sub-trigger.llm.md +51 -0
- package/.llm/menubar-sub.llm.md +53 -0
- package/.llm/menubar-trigger.llm.md +37 -0
- package/.llm/menubar.llm.md +115 -0
- package/.llm/navigation-menu-content.llm.md +116 -0
- package/.llm/navigation-menu-indicator.llm.md +68 -0
- package/.llm/navigation-menu-item.llm.md +62 -0
- package/.llm/navigation-menu-link.llm.md +109 -0
- package/.llm/navigation-menu-list.llm.md +52 -0
- package/.llm/navigation-menu-trigger-style.llm.md +22 -0
- package/.llm/navigation-menu-trigger.llm.md +57 -0
- package/.llm/navigation-menu-viewport.llm.md +51 -0
- package/.llm/navigation-menu.llm.md +184 -0
- package/.llm/p.llm.md +110 -0
- package/.llm/pagination-content.llm.md +60 -0
- package/.llm/pagination-ellipsis.llm.md +107 -0
- package/.llm/pagination-item.llm.md +59 -0
- package/.llm/pagination-link.llm.md +150 -0
- package/.llm/pagination-next.llm.md +115 -0
- package/.llm/pagination-previous.llm.md +115 -0
- package/.llm/pagination.llm.md +190 -0
- package/.llm/popover-anchor.llm.md +53 -0
- package/.llm/popover-content.llm.md +109 -0
- package/.llm/popover-trigger.llm.md +54 -0
- package/.llm/popover.llm.md +116 -0
- package/.llm/progress.llm.md +76 -0
- package/.llm/radio-group-indicator.llm.md +28 -0
- package/.llm/radio-group-item.llm.md +40 -0
- package/.llm/radio-group.llm.md +76 -0
- package/.llm/resizable-handle.llm.md +156 -0
- package/.llm/resizable-panel-group.llm.md +149 -0
- package/.llm/resizable-panel.llm.md +157 -0
- package/.llm/scroll-area-corner.llm.md +41 -0
- package/.llm/scroll-area-thumb.llm.md +39 -0
- package/.llm/scroll-area-viewport.llm.md +60 -0
- package/.llm/scroll-area.llm.md +125 -0
- package/.llm/scroll-bar.llm.md +78 -0
- package/.llm/sdk-items-registry.json +3022 -0
- package/.llm/select-content.llm.md +139 -0
- package/.llm/select-group.llm.md +60 -0
- package/.llm/select-item.llm.md +75 -0
- package/.llm/select-label.llm.md +62 -0
- package/.llm/select-scroll-down-button.llm.md +45 -0
- package/.llm/select-scroll-up-button.llm.md +45 -0
- package/.llm/select-separator.llm.md +59 -0
- package/.llm/select-trigger.llm.md +66 -0
- package/.llm/select-value.llm.md +67 -0
- package/.llm/select.llm.md +159 -0
- package/.llm/separator.llm.md +129 -0
- package/.llm/sheet-close.llm.md +49 -0
- package/.llm/sheet-content.llm.md +115 -0
- package/.llm/sheet-description.llm.md +62 -0
- package/.llm/sheet-footer.llm.md +64 -0
- package/.llm/sheet-header.llm.md +52 -0
- package/.llm/sheet-title.llm.md +53 -0
- package/.llm/sheet-trigger.llm.md +46 -0
- package/.llm/sheet.llm.md +126 -0
- package/.llm/sidebar-content.llm.md +63 -0
- package/.llm/sidebar-footer.llm.md +50 -0
- package/.llm/sidebar-group-action.llm.md +60 -0
- package/.llm/sidebar-group-content.llm.md +64 -0
- package/.llm/sidebar-group-label.llm.md +53 -0
- package/.llm/sidebar-group.llm.md +56 -0
- package/.llm/sidebar-header.llm.md +67 -0
- package/.llm/sidebar-input.llm.md +50 -0
- package/.llm/sidebar-inset.llm.md +52 -0
- package/.llm/sidebar-menu-action.llm.md +84 -0
- package/.llm/sidebar-menu-badge.llm.md +60 -0
- package/.llm/sidebar-menu-button.llm.md +103 -0
- package/.llm/sidebar-menu-item.llm.md +75 -0
- package/.llm/sidebar-menu-skeleton.llm.md +76 -0
- package/.llm/sidebar-menu-sub-button.llm.md +85 -0
- package/.llm/sidebar-menu-sub-item.llm.md +54 -0
- package/.llm/sidebar-menu-sub.llm.md +74 -0
- package/.llm/sidebar-menu.llm.md +65 -0
- package/.llm/sidebar-provider.llm.md +79 -0
- package/.llm/sidebar-rail.llm.md +34 -0
- package/.llm/sidebar-separator.llm.md +57 -0
- package/.llm/sidebar-trigger.llm.md +49 -0
- package/.llm/sidebar.llm.md +129 -0
- package/.llm/skeleton.llm.md +134 -0
- package/.llm/slider.llm.md +173 -0
- package/.llm/small.llm.md +110 -0
- package/.llm/span.llm.md +118 -0
- package/.llm/spinner.llm.md +182 -0
- package/.llm/stack.llm.md +28 -0
- package/.llm/strong.llm.md +110 -0
- package/.llm/switch.llm.md +76 -0
- package/.llm/table-body.llm.md +36 -0
- package/.llm/table-caption.llm.md +48 -0
- package/.llm/table-cell.llm.md +53 -0
- package/.llm/table-footer.llm.md +41 -0
- package/.llm/table-head.llm.md +69 -0
- package/.llm/table-header.llm.md +41 -0
- package/.llm/table-row.llm.md +42 -0
- package/.llm/table.llm.md +123 -0
- package/.llm/tabs-content.llm.md +47 -0
- package/.llm/tabs-list.llm.md +41 -0
- package/.llm/tabs-trigger.llm.md +47 -0
- package/.llm/tabs.llm.md +71 -0
- package/.llm/text-field.llm.md +327 -0
- package/.llm/textarea.llm.md +311 -0
- package/.llm/theme-preference.llm.md +25 -0
- package/.llm/theme-toggle.llm.md +57 -0
- package/.llm/theme.llm.md +14 -0
- package/.llm/toast.llm.md +32 -0
- package/.llm/toaster.llm.md +193 -0
- package/.llm/toggle-group-item.llm.md +59 -0
- package/.llm/toggle-group.llm.md +101 -0
- package/.llm/toggle.llm.md +40 -0
- package/.llm/tooltip-content.llm.md +185 -0
- package/.llm/tooltip-provider.llm.md +68 -0
- package/.llm/tooltip-trigger.llm.md +70 -0
- package/.llm/tooltip.llm.md +129 -0
- package/.llm/typography.llm.md +161 -0
- package/.llm/use-carousel.llm.md +55 -0
- package/.llm/use-command-state.llm.md +32 -0
- package/.llm/use-is-mobile.llm.md +73 -0
- package/.llm/use-sidebar.llm.md +61 -0
- package/dist/components/ui/scroll-area.d.ts +5 -5
- package/dist/components/ui/scroll-area.d.ts.map +1 -1
- package/dist/components/ui/stack.d.ts.map +1 -1
- package/dist/components/ui/stories/scroll-area.stories.d.ts +1 -1
- package/dist/components/ui/theme-toggle.d.ts +0 -3
- package/dist/components/ui/theme-toggle.d.ts.map +1 -1
- package/dist/components/ui/theme.d.ts.map +1 -1
- package/dist/index.js +4972 -9636
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/components/ui/stack.tsx +3 -1
- package/src/components/ui/theme-toggle.tsx +1 -3
- package/src/components/ui/theme.tsx +6 -1
- package/src/styles/globals.css +57 -85
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# MenubarGroup
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Groups related menu items together within MenubarContent. Used to create logical groupings of menu items, often separated by MenubarSeparator components. Helps organize complex menus.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { MenubarGroup } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<MenubarGroup
|
|
13
|
+
...props={value}
|
|
14
|
+
/>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Component Props
|
|
18
|
+
|
|
19
|
+
### ...props
|
|
20
|
+
- **Type**: `unknown`
|
|
21
|
+
- **Required**: Yes
|
|
22
|
+
- **Description**: No description available
|
|
23
|
+
|
|
24
|
+
## Examples
|
|
25
|
+
|
|
26
|
+
```tsx
|
|
27
|
+
<MenubarContent>
|
|
28
|
+
<MenubarGroup>
|
|
29
|
+
<MenubarItem>Cut</MenubarItem>
|
|
30
|
+
<MenubarItem>Copy</MenubarItem>
|
|
31
|
+
<MenubarItem>Paste</MenubarItem>
|
|
32
|
+
</MenubarGroup>
|
|
33
|
+
<MenubarSeparator />
|
|
34
|
+
<MenubarGroup>
|
|
35
|
+
<MenubarItem>Find</MenubarItem>
|
|
36
|
+
<MenubarItem>Replace</MenubarItem>
|
|
37
|
+
</MenubarGroup>
|
|
38
|
+
</MenubarContent>
|
|
39
|
+
```
|
|
40
|
+
/
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# MenubarItem
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
A selectable menu item within MenubarContent. Can be enhanced with icons, keyboard shortcuts, and supports different variants including destructive actions. Automatically handles selection events and keyboard navigation.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { MenubarItem } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<MenubarItem
|
|
13
|
+
className="value"
|
|
14
|
+
inset={true}
|
|
15
|
+
variant={value}
|
|
16
|
+
disabled={true}
|
|
17
|
+
onSelect={handleSelect}
|
|
18
|
+
textValue="value"
|
|
19
|
+
/>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Component Props
|
|
23
|
+
|
|
24
|
+
### className
|
|
25
|
+
- **Type**: `string`
|
|
26
|
+
- **Required**: No
|
|
27
|
+
- **Description**: Additional CSS classes to apply to the menu item
|
|
28
|
+
|
|
29
|
+
### inset
|
|
30
|
+
- **Type**: `boolean`
|
|
31
|
+
- **Required**: No
|
|
32
|
+
- **Description**: Whether to add left padding for alignment with items that have icons
|
|
33
|
+
|
|
34
|
+
### variant
|
|
35
|
+
- **Type**: `"default" | "destructive"`
|
|
36
|
+
- **Required**: No
|
|
37
|
+
- **Description**: Visual variant of the menu item
|
|
38
|
+
|
|
39
|
+
### disabled
|
|
40
|
+
- **Type**: `boolean`
|
|
41
|
+
- **Required**: No
|
|
42
|
+
- **Description**: When true, prevents the user from interacting with the item
|
|
43
|
+
|
|
44
|
+
### onSelect
|
|
45
|
+
- **Type**: `(event: Event) => void`
|
|
46
|
+
- **Required**: No
|
|
47
|
+
- **Description**: Event handler called when the user selects an item (via mouse or keyboard)
|
|
48
|
+
|
|
49
|
+
### textValue
|
|
50
|
+
- **Type**: `string`
|
|
51
|
+
- **Required**: No
|
|
52
|
+
- **Description**: Optional text used for typeahead purposes when content is complex
|
|
53
|
+
|
|
54
|
+
## Examples
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
<MenubarItem onSelect={() => deleteFile()} variant="destructive">
|
|
58
|
+
Delete File
|
|
59
|
+
<MenubarShortcut>⌫</MenubarShortcut>
|
|
60
|
+
</MenubarItem>
|
|
61
|
+
```
|
|
62
|
+
/
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# MenubarLabel
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
A non-interactive label for grouping menu items. Used to provide section headings within menu content, helping users understand the organization of menu items. Cannot be focused or selected.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { MenubarLabel } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<MenubarLabel
|
|
13
|
+
className="value"
|
|
14
|
+
inset={true}
|
|
15
|
+
/>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Component Props
|
|
19
|
+
|
|
20
|
+
### className
|
|
21
|
+
- **Type**: `string`
|
|
22
|
+
- **Required**: No
|
|
23
|
+
- **Description**: Additional CSS classes to apply to the label
|
|
24
|
+
|
|
25
|
+
### inset
|
|
26
|
+
- **Type**: `boolean`
|
|
27
|
+
- **Required**: No
|
|
28
|
+
- **Description**: Whether to add left padding for alignment with items that have icons
|
|
29
|
+
|
|
30
|
+
## Examples
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
<MenubarContent>
|
|
34
|
+
<MenubarLabel>Recent Files</MenubarLabel>
|
|
35
|
+
<MenubarSeparator />
|
|
36
|
+
<MenubarItem>document.txt</MenubarItem>
|
|
37
|
+
<MenubarItem>photo.jpg</MenubarItem>
|
|
38
|
+
</MenubarContent>
|
|
39
|
+
```
|
|
40
|
+
/
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# MenubarMenu
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Container for a single menu within the menubar. Each MenubarMenu represents one dropdown menu that can be triggered by its corresponding MenubarTrigger. Must be used within a Menubar root.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { MenubarMenu } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<MenubarMenu
|
|
13
|
+
value="value"
|
|
14
|
+
/>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Component Props
|
|
18
|
+
|
|
19
|
+
### value
|
|
20
|
+
- **Type**: `string`
|
|
21
|
+
- **Required**: No
|
|
22
|
+
- **Description**: The unique value of the menu for controlled state management
|
|
23
|
+
|
|
24
|
+
## Examples
|
|
25
|
+
|
|
26
|
+
```tsx
|
|
27
|
+
<MenubarMenu value="edit">
|
|
28
|
+
<MenubarTrigger>Edit</MenubarTrigger>
|
|
29
|
+
<MenubarContent>...</MenubarContent>
|
|
30
|
+
</MenubarMenu>
|
|
31
|
+
```
|
|
32
|
+
/
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# MenubarPortal
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Portal for rendering menu content outside the DOM hierarchy. Automatically used by MenubarContent to ensure proper layering and positioning of dropdown menus. Prevents z-index conflicts.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { MenubarPortal } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<MenubarPortal
|
|
13
|
+
forceMount={value}
|
|
14
|
+
container={value}
|
|
15
|
+
/>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Component Props
|
|
19
|
+
|
|
20
|
+
### forceMount
|
|
21
|
+
- **Type**: `true`
|
|
22
|
+
- **Required**: No
|
|
23
|
+
- **Description**: Used to force mounting when more control is needed. Useful when controlling animation with React animation libraries
|
|
24
|
+
|
|
25
|
+
### container
|
|
26
|
+
- **Type**: `HTMLElement`
|
|
27
|
+
- **Required**: No
|
|
28
|
+
- **Description**: Specify a container element to portal the content into
|
|
29
|
+
|
|
30
|
+
## Examples
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
// Usually used automatically by MenubarContent
|
|
34
|
+
<MenubarPortal container={customContainer}>
|
|
35
|
+
<MenubarPrimitive.Content>...</MenubarPrimitive.Content>
|
|
36
|
+
</MenubarPortal>
|
|
37
|
+
```
|
|
38
|
+
/
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# MenubarRadioGroup
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Container for mutually exclusive radio items. Use for single-selection scenarios like theme selection, view modes, or other settings where only one option can be active. Only one RadioItem can be selected at a time within the group.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { MenubarRadioGroup } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<MenubarRadioGroup
|
|
13
|
+
value="value"
|
|
14
|
+
onValueChange={handleValueChange}
|
|
15
|
+
/>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Component Props
|
|
19
|
+
|
|
20
|
+
### value
|
|
21
|
+
- **Type**: `string`
|
|
22
|
+
- **Required**: No
|
|
23
|
+
- **Description**: The controlled value of the radio item to check. Should be used in conjunction with onValueChange
|
|
24
|
+
|
|
25
|
+
### onValueChange
|
|
26
|
+
- **Type**: `(value: string) => void`
|
|
27
|
+
- **Required**: No
|
|
28
|
+
- **Description**: Event handler called when the value changes
|
|
29
|
+
|
|
30
|
+
## Examples
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
<MenubarRadioGroup value={theme} onValueChange={setTheme}>
|
|
34
|
+
<MenubarRadioItem value="light">Light</MenubarRadioItem>
|
|
35
|
+
<MenubarRadioItem value="dark">Dark</MenubarRadioItem>
|
|
36
|
+
<MenubarRadioItem value="system">System</MenubarRadioItem>
|
|
37
|
+
</MenubarRadioGroup>
|
|
38
|
+
```
|
|
39
|
+
/
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# MenubarRadioItem
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
A menu item for single selection within a MenubarRadioGroup. Use within MenubarRadioGroup for mutually exclusive options. Only one radio item can be selected at a time within the group. Displays a filled circle icon when selected.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { MenubarRadioItem } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<MenubarRadioItem
|
|
13
|
+
className="value"
|
|
14
|
+
value="value"
|
|
15
|
+
disabled={true}
|
|
16
|
+
onSelect={handleSelect}
|
|
17
|
+
textValue="value"
|
|
18
|
+
>
|
|
19
|
+
{/* Your content here */}
|
|
20
|
+
</MenubarRadioItem>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Component Props
|
|
24
|
+
|
|
25
|
+
### className
|
|
26
|
+
- **Type**: `string`
|
|
27
|
+
- **Required**: No
|
|
28
|
+
- **Description**: Additional CSS classes to apply to the radio item
|
|
29
|
+
|
|
30
|
+
### value
|
|
31
|
+
- **Type**: `string`
|
|
32
|
+
- **Required**: Yes
|
|
33
|
+
- **Description**: The unique value of the item (required)
|
|
34
|
+
|
|
35
|
+
### disabled
|
|
36
|
+
- **Type**: `boolean`
|
|
37
|
+
- **Required**: No
|
|
38
|
+
- **Description**: When true, prevents the user from interacting with the item
|
|
39
|
+
|
|
40
|
+
### onSelect
|
|
41
|
+
- **Type**: `(event: Event) => void`
|
|
42
|
+
- **Required**: No
|
|
43
|
+
- **Description**: Event handler called when the user selects an item (via mouse or keyboard)
|
|
44
|
+
|
|
45
|
+
### textValue
|
|
46
|
+
- **Type**: `string`
|
|
47
|
+
- **Required**: No
|
|
48
|
+
- **Description**: Optional text used for typeahead purposes when content is complex
|
|
49
|
+
|
|
50
|
+
## Examples
|
|
51
|
+
|
|
52
|
+
```tsx
|
|
53
|
+
<MenubarRadioGroup value={theme} onValueChange={setTheme}>
|
|
54
|
+
<MenubarRadioItem value="light">Light Theme</MenubarRadioItem>
|
|
55
|
+
<MenubarRadioItem value="dark">Dark Theme</MenubarRadioItem>
|
|
56
|
+
<MenubarRadioItem value="system">System Theme</MenubarRadioItem>
|
|
57
|
+
</MenubarRadioGroup>
|
|
58
|
+
```
|
|
59
|
+
/
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# MenubarSeparator
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
A visual divider between menu items. Use to create logical groupings and improve visual hierarchy within menu content. Creates clear sections for related items.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { MenubarSeparator } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<MenubarSeparator
|
|
13
|
+
className="value"
|
|
14
|
+
/>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Component Props
|
|
18
|
+
|
|
19
|
+
### className
|
|
20
|
+
- **Type**: `string`
|
|
21
|
+
- **Required**: No
|
|
22
|
+
- **Description**: Additional CSS classes to apply to the separator
|
|
23
|
+
|
|
24
|
+
## Examples
|
|
25
|
+
|
|
26
|
+
```tsx
|
|
27
|
+
<MenubarContent>
|
|
28
|
+
<MenubarItem>New</MenubarItem>
|
|
29
|
+
<MenubarItem>Open</MenubarItem>
|
|
30
|
+
<MenubarSeparator />
|
|
31
|
+
<MenubarItem>Save</MenubarItem>
|
|
32
|
+
<MenubarItem>Save As</MenubarItem>
|
|
33
|
+
</MenubarContent>
|
|
34
|
+
```
|
|
35
|
+
/
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# MenubarShortcut
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Displays keyboard shortcut for a menu item. Shows keyboard shortcuts aligned to the right of menu items. Use standard platform conventions (⌘ for Mac, Ctrl+ for Windows/Linux). Purely visual - does not implement the actual keyboard functionality.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { MenubarShortcut } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<MenubarShortcut
|
|
13
|
+
className="value"
|
|
14
|
+
/>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Component Props
|
|
18
|
+
|
|
19
|
+
### className
|
|
20
|
+
- **Type**: `string`
|
|
21
|
+
- **Required**: No
|
|
22
|
+
- **Description**: Additional CSS classes to apply to the shortcut text
|
|
23
|
+
|
|
24
|
+
## Examples
|
|
25
|
+
|
|
26
|
+
```tsx
|
|
27
|
+
<MenubarItem onSelect={() => save()}>
|
|
28
|
+
Save File
|
|
29
|
+
<MenubarShortcut>⌘S</MenubarShortcut>
|
|
30
|
+
</MenubarItem>
|
|
31
|
+
// Platform-specific shortcuts
|
|
32
|
+
<MenubarItem>
|
|
33
|
+
Copy
|
|
34
|
+
<MenubarShortcut>{isMac ? '⌘C' : 'Ctrl+C'}</MenubarShortcut>
|
|
35
|
+
</MenubarItem>
|
|
36
|
+
```
|
|
37
|
+
/
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# MenubarSubContent
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Content container for a submenu. Contains the menu items that appear when a MenubarSubTrigger is hovered or focused. Supports all the same content as MenubarContent. Automatically positioned to avoid viewport collisions.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { MenubarSubContent } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<MenubarSubContent
|
|
13
|
+
className="value"
|
|
14
|
+
align={value}
|
|
15
|
+
alignOffset={0}
|
|
16
|
+
sideOffset={0}
|
|
17
|
+
side={value}
|
|
18
|
+
avoidCollisions={true}
|
|
19
|
+
collisionBoundary={value}
|
|
20
|
+
arrowPadding={0}
|
|
21
|
+
sticky={value}
|
|
22
|
+
hideWhenDetached={true}
|
|
23
|
+
loop={true}
|
|
24
|
+
onEscapeKeyDown={handleEscapeKeyDown}
|
|
25
|
+
onPointerDownOutside={handlePointerDownOutside}
|
|
26
|
+
onFocusOutside={handleFocusOutside}
|
|
27
|
+
onInteractOutside={handleInteractOutside}
|
|
28
|
+
forceMount={value}
|
|
29
|
+
/>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Component Props
|
|
33
|
+
|
|
34
|
+
### className
|
|
35
|
+
- **Type**: `string`
|
|
36
|
+
- **Required**: No
|
|
37
|
+
- **Description**: Additional CSS classes to apply to the sub-content container
|
|
38
|
+
|
|
39
|
+
### align
|
|
40
|
+
- **Type**: `"start" | "center" | "end"`
|
|
41
|
+
- **Required**: No
|
|
42
|
+
- **Description**: The preferred alignment against the trigger. May change when collisions occur
|
|
43
|
+
|
|
44
|
+
### alignOffset
|
|
45
|
+
- **Type**: `number`
|
|
46
|
+
- **Required**: No
|
|
47
|
+
- **Description**: An offset in pixels from the "start" or "end" alignment options
|
|
48
|
+
|
|
49
|
+
### sideOffset
|
|
50
|
+
- **Type**: `number`
|
|
51
|
+
- **Required**: No
|
|
52
|
+
- **Description**: The distance in pixels from the trigger
|
|
53
|
+
|
|
54
|
+
### side
|
|
55
|
+
- **Type**: `"top" | "right" | "bottom" | "left"`
|
|
56
|
+
- **Required**: No
|
|
57
|
+
- **Description**: The preferred side of the trigger to render against when open
|
|
58
|
+
|
|
59
|
+
### avoidCollisions
|
|
60
|
+
- **Type**: `boolean`
|
|
61
|
+
- **Required**: No
|
|
62
|
+
- **Description**: When true, overrides the side and align preferences to prevent collisions with viewport edges
|
|
63
|
+
|
|
64
|
+
### collisionBoundary
|
|
65
|
+
- **Type**: `Element | null | Array<Element | null>`
|
|
66
|
+
- **Required**: No
|
|
67
|
+
- **Description**: The element used as the collision boundary for positioning
|
|
68
|
+
|
|
69
|
+
### arrowPadding
|
|
70
|
+
- **Type**: `number`
|
|
71
|
+
- **Required**: No
|
|
72
|
+
- **Description**: No description available
|
|
73
|
+
|
|
74
|
+
### sticky
|
|
75
|
+
- **Type**: `"partial" | "always"`
|
|
76
|
+
- **Required**: No
|
|
77
|
+
- **Description**: No description available
|
|
78
|
+
|
|
79
|
+
### hideWhenDetached
|
|
80
|
+
- **Type**: `boolean`
|
|
81
|
+
- **Required**: No
|
|
82
|
+
- **Description**: No description available
|
|
83
|
+
|
|
84
|
+
### loop
|
|
85
|
+
- **Type**: `boolean`
|
|
86
|
+
- **Required**: No
|
|
87
|
+
- **Description**: Whether keyboard navigation should loop from last item to first, and vice versa
|
|
88
|
+
|
|
89
|
+
### onEscapeKeyDown
|
|
90
|
+
- **Type**: `(event: KeyboardEvent) => void`
|
|
91
|
+
- **Required**: No
|
|
92
|
+
- **Description**: Event handler called when the escape key is down
|
|
93
|
+
|
|
94
|
+
### onPointerDownOutside
|
|
95
|
+
- **Type**: `(
|
|
96
|
+
event: CustomEvent<{ originalEvent: PointerEvent }>,
|
|
97
|
+
) => void`
|
|
98
|
+
- **Required**: No
|
|
99
|
+
- **Description**: Event handler called when a pointerdown event happens outside of the component
|
|
100
|
+
|
|
101
|
+
### onFocusOutside
|
|
102
|
+
- **Type**: `(event: CustomEvent<{ originalEvent: FocusEvent }>) => void`
|
|
103
|
+
- **Required**: No
|
|
104
|
+
- **Description**: Event handler called when focus moves outside of the component
|
|
105
|
+
|
|
106
|
+
### onInteractOutside
|
|
107
|
+
- **Type**: `(
|
|
108
|
+
event: CustomEvent<{ originalEvent: PointerEvent | FocusEvent }>,
|
|
109
|
+
) => void`
|
|
110
|
+
- **Required**: No
|
|
111
|
+
- **Description**: Event handler called when an interaction happens outside the component
|
|
112
|
+
|
|
113
|
+
### forceMount
|
|
114
|
+
- **Type**: `true`
|
|
115
|
+
- **Required**: No
|
|
116
|
+
- **Description**: No description available
|
|
117
|
+
|
|
118
|
+
## Examples
|
|
119
|
+
|
|
120
|
+
```tsx
|
|
121
|
+
<MenubarSubContent>
|
|
122
|
+
<MenubarItem>document1.txt</MenubarItem>
|
|
123
|
+
<MenubarItem>document2.txt</MenubarItem>
|
|
124
|
+
<MenubarItem>document3.txt</MenubarItem>
|
|
125
|
+
</MenubarSubContent>
|
|
126
|
+
```
|
|
127
|
+
/
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# MenubarSubTrigger
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Menu item that opens a submenu. Automatically includes a right arrow indicator to show that it opens a submenu when hovered or focused. Opens submenu on hover or right arrow key press.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { MenubarSubTrigger } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<MenubarSubTrigger
|
|
13
|
+
className="value"
|
|
14
|
+
inset={true}
|
|
15
|
+
disabled={true}
|
|
16
|
+
textValue="value"
|
|
17
|
+
>
|
|
18
|
+
{/* Your content here */}
|
|
19
|
+
</MenubarSubTrigger>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Component Props
|
|
23
|
+
|
|
24
|
+
### className
|
|
25
|
+
- **Type**: `string`
|
|
26
|
+
- **Required**: No
|
|
27
|
+
- **Description**: Additional CSS classes to apply to the sub-trigger
|
|
28
|
+
|
|
29
|
+
### inset
|
|
30
|
+
- **Type**: `boolean`
|
|
31
|
+
- **Required**: No
|
|
32
|
+
- **Description**: Whether to add left padding for alignment with items that have icons
|
|
33
|
+
|
|
34
|
+
### disabled
|
|
35
|
+
- **Type**: `boolean`
|
|
36
|
+
- **Required**: No
|
|
37
|
+
- **Description**: When true, prevents the user from interacting with the item
|
|
38
|
+
|
|
39
|
+
### textValue
|
|
40
|
+
- **Type**: `string`
|
|
41
|
+
- **Required**: No
|
|
42
|
+
- **Description**: Optional text used for typeahead purposes when content is complex
|
|
43
|
+
|
|
44
|
+
## Examples
|
|
45
|
+
|
|
46
|
+
```tsx
|
|
47
|
+
<MenubarSubTrigger>
|
|
48
|
+
Recent Files
|
|
49
|
+
</MenubarSubTrigger>
|
|
50
|
+
```
|
|
51
|
+
/
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# MenubarSub
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Container for a submenu. Wraps MenubarSubTrigger and MenubarSubContent to create nested menu structures. Supports controlled and uncontrolled states.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { MenubarSub } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<MenubarSub
|
|
13
|
+
open={true}
|
|
14
|
+
defaultOpen={true}
|
|
15
|
+
onOpenChange={handleOpenChange}
|
|
16
|
+
/>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Component Props
|
|
20
|
+
|
|
21
|
+
### open
|
|
22
|
+
- **Type**: `boolean`
|
|
23
|
+
- **Required**: No
|
|
24
|
+
- **Description**: The controlled open state of the sub menu. Must be used in conjunction with onOpenChange
|
|
25
|
+
|
|
26
|
+
### defaultOpen
|
|
27
|
+
- **Type**: `boolean`
|
|
28
|
+
- **Required**: No
|
|
29
|
+
- **Description**: The open state of the submenu when it is initially rendered. Use when you do not need to control its open state
|
|
30
|
+
|
|
31
|
+
### onOpenChange
|
|
32
|
+
- **Type**: `(open: boolean) => void`
|
|
33
|
+
- **Required**: No
|
|
34
|
+
- **Description**: Event handler called when the open state of the submenu changes
|
|
35
|
+
|
|
36
|
+
## Examples
|
|
37
|
+
|
|
38
|
+
```tsx
|
|
39
|
+
<MenubarSub>
|
|
40
|
+
<MenubarSubTrigger>Export</MenubarSubTrigger>
|
|
41
|
+
<MenubarSubContent>
|
|
42
|
+
<MenubarItem>Export as PDF</MenubarItem>
|
|
43
|
+
<MenubarItem>Export as CSV</MenubarItem>
|
|
44
|
+
<MenubarItem>Export as JSON</MenubarItem>
|
|
45
|
+
</MenubarSubContent>
|
|
46
|
+
</MenubarSub>
|
|
47
|
+
// Controlled submenu
|
|
48
|
+
<MenubarSub open={exportOpen} onOpenChange={setExportOpen}>
|
|
49
|
+
<MenubarSubTrigger>Export</MenubarSubTrigger>
|
|
50
|
+
<MenubarSubContent>...</MenubarSubContent>
|
|
51
|
+
</MenubarSub>
|
|
52
|
+
```
|
|
53
|
+
/
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# MenubarTrigger
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Button that opens a dropdown menu. The trigger text should be concise and descriptive of the menu contents. Common patterns include "File", "Edit", "View", "Tools", "Help". Automatically receives focus management and keyboard navigation.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { MenubarTrigger } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<MenubarTrigger
|
|
13
|
+
className="value"
|
|
14
|
+
asChild={true}
|
|
15
|
+
/>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Component Props
|
|
19
|
+
|
|
20
|
+
### className
|
|
21
|
+
- **Type**: `string`
|
|
22
|
+
- **Required**: No
|
|
23
|
+
- **Description**: Additional CSS classes to apply to the trigger button
|
|
24
|
+
|
|
25
|
+
### asChild
|
|
26
|
+
- **Type**: `boolean`
|
|
27
|
+
- **Required**: No
|
|
28
|
+
- **Description**: Change the default rendered element for the one passed as a child, merging their props and behavior
|
|
29
|
+
|
|
30
|
+
## Examples
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
<MenubarTrigger>
|
|
34
|
+
File
|
|
35
|
+
</MenubarTrigger>
|
|
36
|
+
```
|
|
37
|
+
/
|