Zaidan

Command Palette

Search for a command to run...

GitHub

Menubar

A visually persistent menu common in desktop applications that provides quick access to a consistent set of commands.

Installation

CLI

Manual

Install the following dependencies:

Copy and paste the following code into your project.

import * as MenubarPrimitive from "@kobalte/core/menubar";
import type { PolymorphicProps } from "@kobalte/core/polymorphic";
import { Check, ChevronRight } from "lucide-solid";
import type { Component, ComponentProps, ValidComponent } from "solid-js";
import { mergeProps, splitProps } from "solid-js";
import { cn } from "~/lib/utils";
type MenubarProps<T extends ValidComponent = "div"> = PolymorphicProps<
T,
MenubarPrimitive.MenubarRootProps<T>
> &
Pick<ComponentProps<T>, "class" | "children">;
const Menubar = <T extends ValidComponent = "div">(props: MenubarProps<T>) => {
const [local, others] = splitProps(props as MenubarProps, ["class"]);
return (
<MenubarPrimitive.Root
data-slot="menubar"
class={cn("z-menubar flex items-center", local.class)}
{...others}
/>
);
};
const MenubarMenu = (props: MenubarPrimitive.MenubarMenuProps) => {
const mergedProps = mergeProps({ gutter: 8 }, props);
return <MenubarPrimitive.Menu data-slot="menubar-menu" {...mergedProps} />;
};
type MenubarTriggerProps<T extends ValidComponent = "button"> = PolymorphicProps<
T,
MenubarPrimitive.MenubarTriggerProps<T>
> &
Pick<ComponentProps<T>, "class" | "children">;
const MenubarTrigger = <T extends ValidComponent = "button">(props: MenubarTriggerProps<T>) => {
const [local, others] = splitProps(props as MenubarTriggerProps, ["class", "children"]);
return (
<MenubarPrimitive.Trigger
data-slot="menubar-trigger"
class={cn("z-menubar-trigger flex select-none items-center outline-hidden", local.class)}
{...others}
>
{local.children}
</MenubarPrimitive.Trigger>
);
};
const MenubarPortal: Component<MenubarPrimitive.MenubarPortalProps> = (props) => {
return <MenubarPrimitive.Portal data-slot="menubar-portal" {...props} />;
};
type MenubarContentProps<T extends ValidComponent = "div"> = PolymorphicProps<
T,
MenubarPrimitive.MenubarContentProps<T>
> &
Pick<ComponentProps<T>, "class">;
const MenubarContent = <T extends ValidComponent = "div">(props: MenubarContentProps<T>) => {
const [local, others] = splitProps(props as MenubarContentProps, ["class"]);
return (
<MenubarPortal>
<MenubarPrimitive.Content
data-slot="menubar-content"
class={cn("z-50 z-menu-target z-menubar-content min-w-48 overflow-hidden", local.class)}
{...others}
/>
</MenubarPortal>
);
};
type MenubarGroupProps<T extends ValidComponent = "div"> = PolymorphicProps<
T,
MenubarPrimitive.MenubarGroupProps<T>
> &
Pick<ComponentProps<T>, "class">;
const MenubarGroup = <T extends ValidComponent = "div">(props: MenubarGroupProps<T>) => {
const [local, others] = splitProps(props as MenubarGroupProps, ["class"]);
return (
<MenubarPrimitive.Group
data-slot="menubar-group"
class={cn("z-menubar-group", local.class)}
{...others}
/>
);
};
type MenubarItemProps<T extends ValidComponent = "div"> = PolymorphicProps<
T,
MenubarPrimitive.MenubarItemProps<T>
> &
Pick<ComponentProps<T>, "class"> & {
inset?: boolean;
variant?: "default" | "destructive";
};
const MenubarItem = <T extends ValidComponent = "div">(props: MenubarItemProps<T>) => {
const mergedProps = mergeProps(
{ variant: "default", inset: false } as MenubarItemProps<T>,
props,
);
const [local, others] = splitProps(mergedProps as MenubarItemProps, [
"class",
"inset",
"variant",
]);
return (
<MenubarPrimitive.Item
data-slot="menubar-item"
data-inset={local.inset || undefined}
data-variant={local.variant}
class={cn(
"group/menubar-item relative z-menubar-item flex cursor-default select-none items-center outline-hidden data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
local.class,
)}
{...others}
/>
);
};
type MenubarCheckboxItemProps<T extends ValidComponent = "div"> = PolymorphicProps<
T,
MenubarPrimitive.MenubarCheckboxItemProps<T>
> &
Pick<ComponentProps<T>, "class" | "children">;
const MenubarCheckboxItem = <T extends ValidComponent = "div">(
props: MenubarCheckboxItemProps<T>,
) => {
const [local, others] = splitProps(props as MenubarCheckboxItemProps, ["class", "children"]);
return (
<MenubarPrimitive.CheckboxItem
data-slot="menubar-checkbox-item"
class={cn(
"relative z-menubar-checkbox-item flex cursor-default select-none items-center outline-hidden data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
local.class,
)}
{...others}
>
<span class="pointer-events-none absolute z-menubar-checkbox-item-indicator flex items-center justify-center">
<MenubarPrimitive.ItemIndicator>
<Check />
</MenubarPrimitive.ItemIndicator>
</span>
{local.children}
</MenubarPrimitive.CheckboxItem>
);
};
type MenubarRadioGroupProps<T extends ValidComponent = "div"> = PolymorphicProps<
T,
MenubarPrimitive.MenubarRadioGroupProps<T>
> &
Pick<ComponentProps<T>, "class">;
const MenubarRadioGroup = <T extends ValidComponent = "div">(props: MenubarRadioGroupProps<T>) => {
const [local, others] = splitProps(props as MenubarRadioGroupProps, ["class"]);
return (
<MenubarPrimitive.RadioGroup
data-slot="menubar-radio-group"
class={cn("z-menubar-radio-group", local.class)}
{...others}
/>
);
};
type MenubarRadioItemProps<T extends ValidComponent = "div"> = PolymorphicProps<
T,
MenubarPrimitive.MenubarRadioItemProps<T>
> &
Pick<ComponentProps<T>, "class" | "children">;
const MenubarRadioItem = <T extends ValidComponent = "div">(props: MenubarRadioItemProps<T>) => {
const [local, others] = splitProps(props as MenubarRadioItemProps, ["class", "children"]);
return (
<MenubarPrimitive.RadioItem
data-slot="menubar-radio-item"
class={cn(
"relative z-menubar-radio-item flex cursor-default select-none items-center outline-hidden data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
local.class,
)}
{...others}
>
<span class="pointer-events-none absolute z-menubar-radio-item-indicator flex items-center justify-center">
<MenubarPrimitive.ItemIndicator>
<Check />
</MenubarPrimitive.ItemIndicator>
</span>
{local.children}
</MenubarPrimitive.RadioItem>
);
};
type MenubarGroupLabelProps<T extends ValidComponent = "span"> = PolymorphicProps<
T,
MenubarPrimitive.MenubarGroupLabelProps<T>
> &
Pick<ComponentProps<T>, "class"> & {
inset?: boolean;
};
const MenubarLabel = <T extends ValidComponent = "span">(props: MenubarGroupLabelProps<T>) => {
const mergedProps = mergeProps({ inset: false } as MenubarGroupLabelProps<T>, props);
const [local, others] = splitProps(mergedProps as MenubarGroupLabelProps, ["class", "inset"]);
return (
<MenubarPrimitive.GroupLabel
data-slot="menubar-label"
data-inset={local.inset || undefined}
class={cn("z-menubar-label", local.class)}
{...others}
/>
);
};
type MenubarSeparatorProps<T extends ValidComponent = "hr"> = PolymorphicProps<
T,
MenubarPrimitive.MenubarSeparatorProps<T>
> &
Pick<ComponentProps<T>, "class">;
const MenubarSeparator = <T extends ValidComponent = "hr">(props: MenubarSeparatorProps<T>) => {
const [local, others] = splitProps(props as MenubarSeparatorProps, ["class"]);
return (
<MenubarPrimitive.Separator
data-slot="menubar-separator"
class={cn("z-menubar-separator -mx-1 my-1 h-px", local.class)}
{...others}
/>
);
};
type MenubarShortcutProps = ComponentProps<"span">;
const MenubarShortcut = (props: MenubarShortcutProps) => {
const [local, others] = splitProps(props, ["class"]);
return (
<span
data-slot="menubar-shortcut"
class={cn("z-menubar-shortcut ml-auto", local.class)}
{...others}
/>
);
};
const MenubarSub: Component<MenubarPrimitive.MenubarSubProps> = (props) => {
return <MenubarPrimitive.Sub data-slot="menubar-sub" {...props} />;
};
type MenubarSubTriggerProps<T extends ValidComponent = "div"> = PolymorphicProps<
T,
MenubarPrimitive.MenubarSubTriggerProps<T>
> &
Pick<ComponentProps<T>, "class" | "children"> & {
inset?: boolean;
};
const MenubarSubTrigger = <T extends ValidComponent = "div">(props: MenubarSubTriggerProps<T>) => {
const mergedProps = mergeProps({ inset: false } as MenubarSubTriggerProps<T>, props);
const [local, others] = splitProps(mergedProps as MenubarSubTriggerProps, [
"class",
"inset",
"children",
]);
return (
<MenubarPrimitive.SubTrigger
data-slot="menubar-sub-trigger"
data-inset={local.inset || undefined}
class={cn(
"z-menubar-sub-trigger flex cursor-default select-none items-center outline-hidden data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
local.class,
)}
{...others}
>
{local.children}
<ChevronRight class="ml-auto" />
</MenubarPrimitive.SubTrigger>
);
};
type MenubarSubContentProps<T extends ValidComponent = "div"> = PolymorphicProps<
T,
MenubarPrimitive.MenubarSubContentProps<T>
> &
Pick<ComponentProps<T>, "class">;
const MenubarSubContent = <T extends ValidComponent = "div">(props: MenubarSubContentProps<T>) => {
const [local, others] = splitProps(props as MenubarSubContentProps, ["class"]);
return (
<MenubarPrimitive.Portal>
<MenubarPrimitive.SubContent
data-slot="menubar-sub-content"
class={cn("z-50 z-menubar-sub-content min-w-32 overflow-hidden", local.class)}
{...others}
/>
</MenubarPrimitive.Portal>
);
};
export {
Menubar,
MenubarCheckboxItem,
MenubarContent,
MenubarGroup,
MenubarItem,
MenubarLabel,
MenubarMenu,
MenubarPortal,
MenubarRadioGroup,
MenubarRadioItem,
MenubarSeparator,
MenubarShortcut,
MenubarSub,
MenubarSubContent,
MenubarSubTrigger,
MenubarTrigger,
};

Examples

Here are the source code of all the examples from the preview page:

Basic

import {
Menubar,
MenubarContent,
MenubarItem,
MenubarMenu,
MenubarSeparator,
MenubarShortcut,
MenubarTrigger,
} from "~/components/ui/menubar";
function MenubarBasic() {
return (
<Example title="Basic">
<Menubar>
<MenubarMenu>
<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 />
<MenubarItem>
Print... <MenubarShortcut>⌘P</MenubarShortcut>
</MenubarItem>
</MenubarContent>
</MenubarMenu>
<MenubarMenu>
<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>
</Menubar>
</Example>
);
}

With Submenu

import {
Menubar,
MenubarContent,
MenubarItem,
MenubarMenu,
MenubarSeparator,
MenubarShortcut,
MenubarSub,
MenubarSubContent,
MenubarSubTrigger,
MenubarTrigger,
} from "~/components/ui/menubar";
function MenubarWithSubmenu() {
return (
<Example title="With Submenu">
<Menubar>
<MenubarMenu>
<MenubarTrigger>File</MenubarTrigger>
<MenubarContent>
<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>
<MenubarTrigger>Edit</MenubarTrigger>
<MenubarContent>
<MenubarItem>
Undo <MenubarShortcut>⌘Z</MenubarShortcut>
</MenubarItem>
<MenubarItem>
Redo <MenubarShortcut>⇧⌘Z</MenubarShortcut>
</MenubarItem>
<MenubarSeparator />
<MenubarSub>
<MenubarSubTrigger>Find</MenubarSubTrigger>
<MenubarSubContent>
<MenubarItem>Find...</MenubarItem>
<MenubarItem>Find Next</MenubarItem>
<MenubarItem>Find Previous</MenubarItem>
</MenubarSubContent>
</MenubarSub>
<MenubarSeparator />
<MenubarItem>Cut</MenubarItem>
<MenubarItem>Copy</MenubarItem>
<MenubarItem>Paste</MenubarItem>
</MenubarContent>
</MenubarMenu>
</Menubar>
</Example>
);
}

With Checkboxes

import {
Menubar,
MenubarCheckboxItem,
MenubarContent,
MenubarItem,
MenubarMenu,
MenubarSeparator,
MenubarShortcut,
MenubarTrigger,
} from "~/components/ui/menubar";
function MenubarWithCheckboxes() {
return (
<Example title="With Checkboxes">
<Menubar>
<MenubarMenu>
<MenubarTrigger>View</MenubarTrigger>
<MenubarContent class="w-64">
<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>
<MenubarMenu>
<MenubarTrigger>Format</MenubarTrigger>
<MenubarContent>
<MenubarCheckboxItem checked>Strikethrough</MenubarCheckboxItem>
<MenubarCheckboxItem>Code</MenubarCheckboxItem>
<MenubarCheckboxItem>Superscript</MenubarCheckboxItem>
</MenubarContent>
</MenubarMenu>
</Menubar>
</Example>
);
}

With Radio

import { createSignal } from "solid-js";
import {
Menubar,
MenubarContent,
MenubarItem,
MenubarMenu,
MenubarRadioGroup,
MenubarRadioItem,
MenubarSeparator,
MenubarTrigger,
} from "~/components/ui/menubar";
function MenubarWithRadio() {
const [user, setUser] = createSignal("benoit");
const [theme, setTheme] = createSignal("system");
return (
<Example title="With Radio">
<Menubar>
<MenubarMenu>
<MenubarTrigger>Profiles</MenubarTrigger>
<MenubarContent>
<MenubarRadioGroup value={user()} onChange={setUser}>
<MenubarRadioItem value="andy">Andy</MenubarRadioItem>
<MenubarRadioItem value="benoit">Benoit</MenubarRadioItem>
<MenubarRadioItem value="luis">Luis</MenubarRadioItem>
</MenubarRadioGroup>
<MenubarSeparator />
<MenubarItem inset>Edit...</MenubarItem>
<MenubarItem inset>Add Profile...</MenubarItem>
</MenubarContent>
</MenubarMenu>
<MenubarMenu>
<MenubarTrigger>Theme</MenubarTrigger>
<MenubarContent>
<MenubarRadioGroup value={theme()} onChange={setTheme}>
<MenubarRadioItem value="light">Light</MenubarRadioItem>
<MenubarRadioItem value="dark">Dark</MenubarRadioItem>
<MenubarRadioItem value="system">System</MenubarRadioItem>
</MenubarRadioGroup>
</MenubarContent>
</MenubarMenu>
</Menubar>
</Example>
);
}

With Icons

import { CircleDashed, File, Folder, Save } from "lucide-solid";
import {
Menubar,
MenubarContent,
MenubarGroup,
MenubarItem,
MenubarMenu,
MenubarSeparator,
MenubarShortcut,
MenubarTrigger,
} from "~/components/ui/menubar";
function MenubarWithIcons() {
return (
<Example title="With Icons">
<Menubar>
<MenubarMenu>
<MenubarTrigger>File</MenubarTrigger>
<MenubarContent>
<MenubarItem>
<File />
New File <MenubarShortcut>⌘N</MenubarShortcut>
</MenubarItem>
<MenubarItem>
<Folder />
Open Folder
</MenubarItem>
<MenubarSeparator />
<MenubarItem>
<Save />
Save <MenubarShortcut>⌘S</MenubarShortcut>
</MenubarItem>
</MenubarContent>
</MenubarMenu>
<MenubarMenu>
<MenubarTrigger>More</MenubarTrigger>
<MenubarContent>
<MenubarGroup>
<MenubarItem>
<CircleDashed />
Settings
</MenubarItem>
<MenubarItem>
<CircleDashed />
Help
</MenubarItem>
<MenubarSeparator />
<MenubarItem variant="destructive">
<CircleDashed />
Delete
</MenubarItem>
</MenubarGroup>
</MenubarContent>
</MenubarMenu>
</Menubar>
</Example>
);
}

With Shortcuts

import {
Menubar,
MenubarContent,
MenubarItem,
MenubarMenu,
MenubarSeparator,
MenubarShortcut,
MenubarTrigger,
} from "~/components/ui/menubar";
function MenubarWithShortcuts() {
return (
<Example title="With Shortcuts">
<Menubar>
<MenubarMenu>
<MenubarTrigger>File</MenubarTrigger>
<MenubarContent>
<MenubarItem>
New Tab <MenubarShortcut>⌘T</MenubarShortcut>
</MenubarItem>
<MenubarItem>
New Window <MenubarShortcut>⌘N</MenubarShortcut>
</MenubarItem>
<MenubarItem>
Print... <MenubarShortcut>⌘P</MenubarShortcut>
</MenubarItem>
</MenubarContent>
</MenubarMenu>
<MenubarMenu>
<MenubarTrigger>Edit</MenubarTrigger>
<MenubarContent>
<MenubarItem>
Undo <MenubarShortcut>⌘Z</MenubarShortcut>
</MenubarItem>
<MenubarItem>
Redo <MenubarShortcut>⇧⌘Z</MenubarShortcut>
</MenubarItem>
<MenubarSeparator />
<MenubarItem>
Cut <MenubarShortcut>⌘X</MenubarShortcut>
</MenubarItem>
<MenubarItem>
Copy <MenubarShortcut>⌘C</MenubarShortcut>
</MenubarItem>
<MenubarItem>
Paste <MenubarShortcut>⌘V</MenubarShortcut>
</MenubarItem>
</MenubarContent>
</MenubarMenu>
</Menubar>
</Example>
);
}

Format

import { Bold, Italic, Underline } from "lucide-solid";
import {
Menubar,
MenubarCheckboxItem,
MenubarContent,
MenubarItem,
MenubarMenu,
MenubarSeparator,
MenubarShortcut,
MenubarTrigger,
} from "~/components/ui/menubar";
function MenubarFormat() {
return (
<Example title="Format">
<Menubar>
<MenubarMenu>
<MenubarTrigger>Format</MenubarTrigger>
<MenubarContent>
<MenubarItem>
<Bold />
Bold <MenubarShortcut>⌘B</MenubarShortcut>
</MenubarItem>
<MenubarItem>
<Italic />
Italic <MenubarShortcut>⌘I</MenubarShortcut>
</MenubarItem>
<MenubarItem>
<Underline />
Underline <MenubarShortcut>⌘U</MenubarShortcut>
</MenubarItem>
<MenubarSeparator />
<MenubarCheckboxItem checked>Strikethrough</MenubarCheckboxItem>
<MenubarCheckboxItem>Code</MenubarCheckboxItem>
</MenubarContent>
</MenubarMenu>
<MenubarMenu>
<MenubarTrigger>View</MenubarTrigger>
<MenubarContent>
<MenubarCheckboxItem>Show Ruler</MenubarCheckboxItem>
<MenubarCheckboxItem checked>Show Grid</MenubarCheckboxItem>
<MenubarSeparator />
<MenubarItem inset>Zoom In</MenubarItem>
<MenubarItem inset>Zoom Out</MenubarItem>
</MenubarContent>
</MenubarMenu>
</Menubar>
</Example>
);
}

Insert

import { Check, Image, Link, Search, Table } from "lucide-solid";
import {
Menubar,
MenubarContent,
MenubarItem,
MenubarMenu,
MenubarSeparator,
MenubarShortcut,
MenubarSub,
MenubarSubContent,
MenubarSubTrigger,
MenubarTrigger,
} from "~/components/ui/menubar";
function MenubarInsert() {
return (
<Example title="Insert">
<Menubar>
<MenubarMenu>
<MenubarTrigger>Insert</MenubarTrigger>
<MenubarContent>
<MenubarSub>
<MenubarSubTrigger>
<Image />
Media
</MenubarSubTrigger>
<MenubarSubContent>
<MenubarItem>Image</MenubarItem>
<MenubarItem>Video</MenubarItem>
<MenubarItem>Audio</MenubarItem>
</MenubarSubContent>
</MenubarSub>
<MenubarSeparator />
<MenubarItem>
<Link />
Link <MenubarShortcut>⌘K</MenubarShortcut>
</MenubarItem>
<MenubarItem>
<Table />
Table
</MenubarItem>
</MenubarContent>
</MenubarMenu>
<MenubarMenu>
<MenubarTrigger>Tools</MenubarTrigger>
<MenubarContent class="w-44">
<MenubarItem>
<Search />
Find & Replace <MenubarShortcut>⌘F</MenubarShortcut>
</MenubarItem>
<MenubarItem>
<Check />
Spell Check
</MenubarItem>
</MenubarContent>
</MenubarMenu>
</Menubar>
</Example>
);
}

Destructive

import { File, Folder, LogOut, Settings, Trash, User } from "lucide-solid";
import {
Menubar,
MenubarContent,
MenubarItem,
MenubarMenu,
MenubarSeparator,
MenubarShortcut,
MenubarTrigger,
} from "~/components/ui/menubar";
function MenubarDestructive() {
return (
<Example title="Destructive">
<Menubar>
<MenubarMenu>
<MenubarTrigger>File</MenubarTrigger>
<MenubarContent class="w-40">
<MenubarItem>
<File />
New File <MenubarShortcut>⌘N</MenubarShortcut>
</MenubarItem>
<MenubarItem>
<Folder />
Open Folder
</MenubarItem>
<MenubarSeparator />
<MenubarItem variant="destructive">
<Trash />
Delete File <MenubarShortcut>⌘⌫</MenubarShortcut>
</MenubarItem>
</MenubarContent>
</MenubarMenu>
<MenubarMenu>
<MenubarTrigger>Account</MenubarTrigger>
<MenubarContent>
<MenubarItem>
<User />
Profile
</MenubarItem>
<MenubarItem>
<Settings />
Settings
</MenubarItem>
<MenubarSeparator />
<MenubarItem variant="destructive">
<LogOut />
Sign out
</MenubarItem>
<MenubarSeparator />
<MenubarItem variant="destructive">
<Trash />
Delete
</MenubarItem>
</MenubarContent>
</MenubarMenu>
</Menubar>
</Example>
);
}

In Dialog

import { ClipboardPaste, Copy, Scissors, Trash } from "lucide-solid";
import { Button } from "~/components/ui/button";
import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
DialogTrigger,
} from "~/components/ui/dialog";
import {
Menubar,
MenubarContent,
MenubarItem,
MenubarMenu,
MenubarSeparator,
MenubarShortcut,
MenubarSub,
MenubarSubContent,
MenubarSubTrigger,
MenubarTrigger,
} from "~/components/ui/menubar";
function MenubarInDialog() {
return (
<Example title="In Dialog">
<Dialog>
<DialogTrigger as={Button} variant="outline">
Open Dialog
</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>Menubar Example</DialogTitle>
<DialogDescription>Use the menubar below to see the menu options.</DialogDescription>
</DialogHeader>
<Menubar>
<MenubarMenu>
<MenubarTrigger>File</MenubarTrigger>
<MenubarContent>
<MenubarItem>
<Copy />
Copy
</MenubarItem>
<MenubarItem>
<Scissors />
Cut
</MenubarItem>
<MenubarItem>
<ClipboardPaste />
Paste
</MenubarItem>
<MenubarSeparator />
<MenubarSub>
<MenubarSubTrigger>More Options</MenubarSubTrigger>
<MenubarSubContent>
<MenubarItem>Save Page...</MenubarItem>
<MenubarItem>Create Shortcut...</MenubarItem>
<MenubarItem>Name Window...</MenubarItem>
<MenubarSeparator />
<MenubarItem>Developer Tools</MenubarItem>
</MenubarSubContent>
</MenubarSub>
<MenubarSeparator />
<MenubarItem variant="destructive">
<Trash />
Delete
</MenubarItem>
</MenubarContent>
</MenubarMenu>
<MenubarMenu>
<MenubarTrigger>Edit</MenubarTrigger>
<MenubarContent>
<MenubarItem>
Undo <MenubarShortcut>⌘Z</MenubarShortcut>
</MenubarItem>
<MenubarItem>
Redo <MenubarShortcut>⇧⌘Z</MenubarShortcut>
</MenubarItem>
</MenubarContent>
</MenubarMenu>
</Menubar>
</DialogContent>
</Dialog>
</Example>
);
}