Docs
Dropdown Menu
Dropdown Menu
Displays a menu to the user — such as a set of actions or functions — triggered by a button.
import type { DropdownMenuSubTriggerProps } from "@kobalte/core/dropdown-menu";
import { Button } from "@repo/tailwindcss/default/button";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuGroupLabel,
DropdownMenuItem,
DropdownMenuSeparator,
DropdownMenuShortcut,
DropdownMenuSub,
DropdownMenuSubContent,
DropdownMenuSubTrigger,
DropdownMenuTrigger,
} from "@repo/tailwindcss/default/dropdown-menu";
const DropdownMenuDemo = () => {
return (
<DropdownMenu placement="bottom">
<DropdownMenuTrigger
as={(props: DropdownMenuSubTriggerProps) => (
<Button variant="outline" {...props}>
Open
</Button>
)}
/>
<DropdownMenuContent class="w-56">
<DropdownMenuGroup>
<DropdownMenuGroupLabel>My Account</DropdownMenuGroupLabel>
<DropdownMenuSeparator />
<DropdownMenuItem>
<i class="i-lucide:user mr-2" />
<span>Profile</span>
<DropdownMenuShortcut>⇧⌘P</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem>
<i class="i-lucide:credit-card mr-2" />
<span>Billing</span>
<DropdownMenuShortcut>⌘B</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem>
<i class="i-lucide:settings mr-2" />
<span>Settings</span>
<DropdownMenuShortcut>⌘S</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem>
<i class="i-lucide:keyboard mr-2" />
<span>Keyboard shortcuts</span>
<DropdownMenuShortcut>⌘K</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuItem>
<i class="i-lucide:user mr-2" />
<span>Team</span>
</DropdownMenuItem>
<DropdownMenuSub>
<DropdownMenuSubTrigger>
<i class="i-lucide:user-plus mr-2" />
<span>Invite users</span>
</DropdownMenuSubTrigger>
<DropdownMenuSubContent>
<DropdownMenuItem>
<i class="i-lucide:mail mr-2" />
<span>Email</span>
</DropdownMenuItem>
<DropdownMenuItem>
<i class="i-lucide:message-square mr-2" />
<span>Message</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem>
<i class="ilucide:plus-circle mr-2" />
<span>More...</span>
</DropdownMenuItem>
</DropdownMenuSubContent>
</DropdownMenuSub>
<DropdownMenuItem>
<i class="i-lucide:plus mr-2" />
<span>New Team</span>
<DropdownMenuShortcut>⌘+T</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuItem>
<i class="i-lucide:github mr-2" />
<span>GitHub</span>
</DropdownMenuItem>
<DropdownMenuItem>
<i class="i-lucide:life-buoy mr-2" />
<span>Support</span>
</DropdownMenuItem>
<DropdownMenuItem disabled>
<i class="i-lucide:cloud mr-2" />
<span>API</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem>
<i class="i-lucide:log-out mr-2" />
<span>Log out</span>
<DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
};
export default DropdownMenuDemo;
import type { DropdownMenuSubTriggerProps } from "@kobalte/core/dropdown-menu";
import { Button } from "@repo/tailwindcss/solid/button";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuGroupLabel,
DropdownMenuItem,
DropdownMenuSeparator,
DropdownMenuShortcut,
DropdownMenuSub,
DropdownMenuSubContent,
DropdownMenuSubTrigger,
DropdownMenuTrigger,
} from "@repo/tailwindcss/solid/dropdown-menu";
const DropdownMenuDemo = () => {
return (
<DropdownMenu placement="bottom">
<DropdownMenuTrigger
as={(props: DropdownMenuSubTriggerProps) => (
<Button variant="outline" {...props}>
Open
</Button>
)}
/>
<DropdownMenuContent class="w-56">
<DropdownMenuGroup>
<DropdownMenuGroupLabel>My Account</DropdownMenuGroupLabel>
<DropdownMenuSeparator />
<DropdownMenuItem>
<i class="i-lucide:user mr-2" />
<span>Profile</span>
<DropdownMenuShortcut>⇧⌘P</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem>
<i class="i-lucide:credit-card mr-2" />
<span>Billing</span>
<DropdownMenuShortcut>⌘B</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem>
<i class="i-lucide:settings mr-2" />
<span>Settings</span>
<DropdownMenuShortcut>⌘S</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem>
<i class="i-lucide:keyboard mr-2" />
<span>Keyboard shortcuts</span>
<DropdownMenuShortcut>⌘K</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuItem>
<i class="i-lucide:user mr-2" />
<span>Team</span>
</DropdownMenuItem>
<DropdownMenuSub>
<DropdownMenuSubTrigger>
<i class="i-lucide:user-plus mr-2" />
<span>Invite users</span>
</DropdownMenuSubTrigger>
<DropdownMenuSubContent>
<DropdownMenuItem>
<i class="i-lucide:mail mr-2" />
<span>Email</span>
</DropdownMenuItem>
<DropdownMenuItem>
<i class="i-lucide:message-square mr-2" />
<span>Message</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem>
<i class="ilucide:plus-circle mr-2" />
<span>More...</span>
</DropdownMenuItem>
</DropdownMenuSubContent>
</DropdownMenuSub>
<DropdownMenuItem>
<i class="i-lucide:plus mr-2" />
<span>New Team</span>
<DropdownMenuShortcut>⌘+T</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuItem>
<i class="i-lucide:github mr-2" />
<span>GitHub</span>
</DropdownMenuItem>
<DropdownMenuItem>
<i class="i-lucide:life-buoy mr-2" />
<span>Support</span>
</DropdownMenuItem>
<DropdownMenuItem disabled>
<i class="i-lucide:cloud mr-2" />
<span>API</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem>
<i class="i-lucide:log-out mr-2" />
<span>Log out</span>
<DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
};
export default DropdownMenuDemo;
Installation
npx shadcn-solid@latest add dropdown-menu
Install the following dependencies:
npm install @kobalte/core
Copy and paste the following code into your project:
Install the following dependencies:
npm install @kobalte/core
Copy and paste the following code into your project:
Usage
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuItemLabel,
DropdownMenuSeparator,
DropdownMenuTrigger
} from "@/components/ui/dropdown-menu";
<DropdownMenu>
<DropdownMenuTrigger>Open</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuItemLabel>My Account</DropdownMenuItemLabel>
<DropdownMenuSeparator />
<DropdownMenuItem>Profile</DropdownMenuItem>
<DropdownMenuItem>Billing</DropdownMenuItem>
<DropdownMenuItem>Team</DropdownMenuItem>
<DropdownMenuItem>Subscription</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
Examples
Checkboxes
import type { DropdownMenuSubTriggerProps } from "@kobalte/core/dropdown-menu";
import { Button } from "@repo/tailwindcss/default/button";
import {
DropdownMenu,
DropdownMenuCheckboxItem,
DropdownMenuContent,
DropdownMenuTrigger,
} from "@repo/tailwindcss/default/dropdown-menu";
import { createSignal } from "solid-js";
const DropdownMenuCheckboxes = () => {
const [showStatusBar, setShowStatusBar] = createSignal<boolean>(true);
const [showActivityBar, setShowActivityBar] = createSignal<boolean>(false);
const [showPanel, setShowPanel] = createSignal<boolean>(false);
return (
<DropdownMenu placement="bottom">
<DropdownMenuTrigger
as={(props: DropdownMenuSubTriggerProps) => (
<Button variant="outline" {...props}>
Open
</Button>
)}
/>
<DropdownMenuContent class="w-56">
<DropdownMenuCheckboxItem
checked={showStatusBar()}
onChange={setShowStatusBar}
>
Status Bar
</DropdownMenuCheckboxItem>
<DropdownMenuCheckboxItem
checked={showActivityBar()}
onChange={setShowActivityBar}
disabled
>
Activity Bar
</DropdownMenuCheckboxItem>
<DropdownMenuCheckboxItem checked={showPanel()} onChange={setShowPanel}>
Panel
</DropdownMenuCheckboxItem>
</DropdownMenuContent>
</DropdownMenu>
);
};
export default DropdownMenuCheckboxes;
import type { DropdownMenuSubTriggerProps } from "@kobalte/core/dropdown-menu";
import { Button } from "@repo/tailwindcss/solid/button";
import {
DropdownMenu,
DropdownMenuCheckboxItem,
DropdownMenuContent,
DropdownMenuTrigger,
} from "@repo/tailwindcss/solid/dropdown-menu";
import { createSignal } from "solid-js";
const DropdownMenuCheckboxes = () => {
const [showStatusBar, setShowStatusBar] = createSignal<boolean>(true);
const [showActivityBar, setShowActivityBar] = createSignal<boolean>(false);
const [showPanel, setShowPanel] = createSignal<boolean>(false);
return (
<DropdownMenu placement="bottom">
<DropdownMenuTrigger
as={(props: DropdownMenuSubTriggerProps) => (
<Button variant="outline" {...props}>
Open
</Button>
)}
/>
<DropdownMenuContent class="w-56">
<DropdownMenuCheckboxItem
checked={showStatusBar()}
onChange={setShowStatusBar}
>
Status Bar
</DropdownMenuCheckboxItem>
<DropdownMenuCheckboxItem
checked={showActivityBar()}
onChange={setShowActivityBar}
disabled
>
Activity Bar
</DropdownMenuCheckboxItem>
<DropdownMenuCheckboxItem checked={showPanel()} onChange={setShowPanel}>
Panel
</DropdownMenuCheckboxItem>
</DropdownMenuContent>
</DropdownMenu>
);
};
export default DropdownMenuCheckboxes;
Radio Group
import type { DropdownMenuSubTriggerProps } from "@kobalte/core/dropdown-menu";
import { Button } from "@repo/tailwindcss/default/button";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuGroupLabel,
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
DropdownMenuSeparator,
DropdownMenuTrigger,
} from "@repo/tailwindcss/default/dropdown-menu";
import { createSignal } from "solid-js";
const DropdownMenuRadioGroupDemo = () => {
const [position, setPosition] = createSignal("bottom");
return (
<DropdownMenu placement="bottom">
<DropdownMenuTrigger
as={(props: DropdownMenuSubTriggerProps) => (
<Button variant="outline" {...props}>
Open
</Button>
)}
/>
<DropdownMenuContent class="w-56">
<DropdownMenuGroup>
<DropdownMenuGroupLabel>Panel Position</DropdownMenuGroupLabel>
<DropdownMenuSeparator />
<DropdownMenuRadioGroup value={position()} onChange={setPosition}>
<DropdownMenuRadioItem value="top">Top</DropdownMenuRadioItem>
<DropdownMenuRadioItem value="bottom">Bottom</DropdownMenuRadioItem>
<DropdownMenuRadioItem value="right">Right</DropdownMenuRadioItem>
</DropdownMenuRadioGroup>
</DropdownMenuGroup>
</DropdownMenuContent>
</DropdownMenu>
);
};
export default DropdownMenuRadioGroupDemo;
import type { DropdownMenuSubTriggerProps } from "@kobalte/core/dropdown-menu";
import { Button } from "@repo/tailwindcss/solid/button";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuGroupLabel,
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
DropdownMenuSeparator,
DropdownMenuTrigger,
} from "@repo/tailwindcss/solid/dropdown-menu";
import { createSignal } from "solid-js";
const DropdownMenuRadioGroupDemo = () => {
const [position, setPosition] = createSignal("bottom");
return (
<DropdownMenu placement="bottom">
<DropdownMenuTrigger
as={(props: DropdownMenuSubTriggerProps) => (
<Button variant="outline" {...props}>
Open
</Button>
)}
/>
<DropdownMenuContent class="w-56">
<DropdownMenuGroup>
<DropdownMenuGroupLabel>Panel Position</DropdownMenuGroupLabel>
<DropdownMenuSeparator />
<DropdownMenuRadioGroup value={position()} onChange={setPosition}>
<DropdownMenuRadioItem value="top">Top</DropdownMenuRadioItem>
<DropdownMenuRadioItem value="bottom">Bottom</DropdownMenuRadioItem>
<DropdownMenuRadioItem value="right">Right</DropdownMenuRadioItem>
</DropdownMenuRadioGroup>
</DropdownMenuGroup>
</DropdownMenuContent>
</DropdownMenu>
);
};
export default DropdownMenuRadioGroupDemo;