Dropdown Menu
A menu of actions, checkbox items or radio items that opens from a trigger.
Examples
Usage
Props
DropdownMenu
Takes every prop of DropdownMenuProps.
DropdownMenuPortal
Takes every prop of DropdownMenuPortalProps.
DropdownMenuTrigger
Takes every prop of DropdownMenuTriggerProps.
DropdownMenuContent
| Prop | Type | Default |
|---|---|---|
align | "center" | "start" | "end" | "start" |
sideOffset | number | 4 |
Takes these and every prop of DropdownMenuContentProps.
DropdownMenuGroup
Takes every prop of DropdownMenuGroupProps.
DropdownMenuLabel
| Prop | Type | Default |
|---|---|---|
inset | boolean | — |
Takes these and every prop of DropdownMenuLabelProps.
DropdownMenuItem
| Prop | Type | Default |
|---|---|---|
inset | boolean | — |
variant | "default" | "destructive" | "default" |
Takes these and every prop of DropdownMenuItemProps.
DropdownMenuCheckboxItem
| Prop | Type | Default |
|---|---|---|
inset | boolean | — |
Takes these and every prop of DropdownMenuCheckboxItemProps.
DropdownMenuRadioGroup
Takes every prop of DropdownMenuRadioGroupProps.
DropdownMenuRadioItem
| Prop | Type | Default |
|---|---|---|
inset | boolean | — |
Takes these and every prop of DropdownMenuRadioItemProps.
DropdownMenuSeparator
Takes every prop of DropdownMenuSeparatorProps.
DropdownMenuShortcut
Takes every prop of DropdownMenuShortcutProps.
DropdownMenuSub
Takes every prop of DropdownMenuSubProps.
DropdownMenuSubTrigger
| Prop | Type | Default |
|---|---|---|
inset | boolean | — |
Takes these and every prop of DropdownMenuSubTriggerProps.
DropdownMenuSubContent
Takes every prop of DropdownMenuSubContentProps.
DropdownMenu
Takes every prop of DropdownMenuProps.
DropdownMenuPortal
Takes every prop of DropdownMenuPortalProps.
DropdownMenuTrigger
Takes every prop of DropdownMenuTriggerProps.
DropdownMenuContent
| Prop | Type | Default |
|---|---|---|
align | import("/app/node_modules/.bun/@base-ui+react@1.6.0+df7f6a806acd27ca/node_modules/@base-ui/react/utils/useAnchorPositioning").Align | "start" |
alignOffset | number | import("/app/node_modules/.bun/@base-ui+react@1.6.0+df7f6a806acd27ca/node_modules/@base-ui/react/utils/useAnchorPositioning").OffsetFunction | 0 |
side | import("/app/node_modules/.bun/@base-ui+react@1.6.0+df7f6a806acd27ca/node_modules/@base-ui/react/utils/useAnchorPositioning").Side | "bottom" |
sideOffset | number | import("/app/node_modules/.bun/@base-ui+react@1.6.0+df7f6a806acd27ca/node_modules/@base-ui/react/utils/useAnchorPositioning").OffsetFunction | 4 |
Takes these and every prop of DropdownMenuContentProps.
DropdownMenuGroup
Takes every prop of DropdownMenuGroupProps.
DropdownMenuLabel
| Prop | Type | Default |
|---|---|---|
inset | boolean | — |
Takes these and every prop of DropdownMenuLabelProps.
DropdownMenuItem
| Prop | Type | Default |
|---|---|---|
inset | boolean | — |
variant | "default" | "destructive" | "default" |
Takes these and every prop of DropdownMenuItemProps.
DropdownMenuCheckboxItem
| Prop | Type | Default |
|---|---|---|
inset | boolean | — |
Takes these and every prop of DropdownMenuCheckboxItemProps.
DropdownMenuRadioGroup
Takes every prop of DropdownMenuRadioGroupProps.
DropdownMenuRadioItem
| Prop | Type | Default |
|---|---|---|
inset | boolean | — |
Takes these and every prop of DropdownMenuRadioItemProps.
DropdownMenuSeparator
Takes every prop of DropdownMenuSeparatorProps.
DropdownMenuShortcut
Takes every prop of DropdownMenuShortcutProps.
DropdownMenuSub
Takes every prop of DropdownMenuSubProps.
DropdownMenuSubTrigger
| Prop | Type | Default |
|---|---|---|
inset | boolean | — |
Takes these and every prop of DropdownMenuSubTriggerProps.
DropdownMenuSubContent
Takes every prop of DropdownMenuSubContentProps.
Dependencies
- npm
radix-ui@1.6.0- Installs with it
- 2 icons
- npm
@base-ui/react@1.6.0- Installs with it
- 2 icons
Source
components/ui/dropdown-menu.tsx
import * as React from "react";
import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
import { Check01 } from "@/components/icons/check-01";
import { ChevronRight } from "@/components/icons/chevron-right";
import { cn } from "@/lib/utils";
export type DropdownMenuProps = React.ComponentProps<typeof DropdownMenuPrimitive.Root>;
function DropdownMenu({
...props
}: DropdownMenuProps) {
return <DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} />;
}
export type DropdownMenuPortalProps = React.ComponentProps<typeof DropdownMenuPrimitive.Portal>;
function DropdownMenuPortal({
...props
}: DropdownMenuPortalProps) {
return (
<DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />
);
}
export type DropdownMenuTriggerProps = React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>;
function DropdownMenuTrigger({
...props
}: DropdownMenuTriggerProps) {
return (
<DropdownMenuPrimitive.Trigger
data-slot="dropdown-menu-trigger"
{...props}
/>
);
}
export type DropdownMenuContentProps = React.ComponentProps<typeof DropdownMenuPrimitive.Content>;
function DropdownMenuContent({
className,
align = "start",
sideOffset = 4,
...props
}: DropdownMenuContentProps) {
return (
<DropdownMenuPrimitive.Portal>
<DropdownMenuPrimitive.Content
data-slot="dropdown-menu-content"
sideOffset={sideOffset}
align={align}
className={cn(
"z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border-default bg-bg-main p-1 text-text-strong shadow-md duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
className,
)}
{...props}
/>
</DropdownMenuPrimitive.Portal>
);
}
export type DropdownMenuGroupProps = React.ComponentProps<typeof DropdownMenuPrimitive.Group>;
function DropdownMenuGroup({
...props
}: DropdownMenuGroupProps) {
return (
<DropdownMenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />
);
}
export type DropdownMenuItemProps = React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
inset?: boolean;
variant?: "default" | "destructive";
};
function DropdownMenuItem({
className,
inset,
variant = "default",
...props
}: DropdownMenuItemProps) {
return (
<DropdownMenuPrimitive.Item
data-slot="dropdown-menu-item"
data-inset={inset}
data-variant={variant}
className={cn(
"relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm text-text-strong outline-hidden select-none focus:bg-bg-surface-1 data-inset:pl-7 data-[variant=destructive]:text-negative-middle data-[variant=destructive]:focus:bg-negative-middle/10 data-[variant=destructive]:focus:text-negative-strong data-disabled:pointer-events-none data-disabled:text-text-disabled [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-negative-middle",
className,
)}
{...props}
/>
);
}
export type DropdownMenuCheckboxItemProps = React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> & {
inset?: boolean;
};
function DropdownMenuCheckboxItem({
className,
children,
checked,
inset,
...props
}: DropdownMenuCheckboxItemProps) {
return (
<DropdownMenuPrimitive.CheckboxItem
data-slot="dropdown-menu-checkbox-item"
data-inset={inset}
className={cn(
"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm text-text-strong outline-hidden select-none focus:bg-bg-surface-1 data-inset:pl-7 data-disabled:pointer-events-none data-disabled:text-text-disabled [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
className,
)}
checked={checked}
{...props}
>
<span
className="pointer-events-none absolute right-2 flex items-center justify-center"
data-slot="dropdown-menu-checkbox-item-indicator"
>
<DropdownMenuPrimitive.ItemIndicator>
<Check01 className="text-icon-strong" />
</DropdownMenuPrimitive.ItemIndicator>
</span>
{children}
</DropdownMenuPrimitive.CheckboxItem>
);
}
export type DropdownMenuRadioGroupProps = React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>;
function DropdownMenuRadioGroup({
...props
}: DropdownMenuRadioGroupProps) {
return (
<DropdownMenuPrimitive.RadioGroup
data-slot="dropdown-menu-radio-group"
{...props}
/>
);
}
export type DropdownMenuRadioItemProps = React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem> & {
inset?: boolean;
};
function DropdownMenuRadioItem({
className,
children,
inset,
...props
}: DropdownMenuRadioItemProps) {
return (
<DropdownMenuPrimitive.RadioItem
data-slot="dropdown-menu-radio-item"
data-inset={inset}
className={cn(
"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm text-text-strong outline-hidden select-none focus:bg-bg-surface-1 data-inset:pl-7 data-disabled:pointer-events-none data-disabled:text-text-disabled [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
className,
)}
{...props}
>
<span
className="pointer-events-none absolute right-2 flex items-center justify-center"
data-slot="dropdown-menu-radio-item-indicator"
>
<DropdownMenuPrimitive.ItemIndicator>
<Check01 className="text-icon-strong" />
</DropdownMenuPrimitive.ItemIndicator>
</span>
{children}
</DropdownMenuPrimitive.RadioItem>
);
}
export type DropdownMenuLabelProps = React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {
inset?: boolean;
};
function DropdownMenuLabel({
className,
inset,
...props
}: DropdownMenuLabelProps) {
return (
<DropdownMenuPrimitive.Label
data-slot="dropdown-menu-label"
data-inset={inset}
className={cn(
"px-1.5 py-1 text-xs font-medium text-text-muted data-inset:pl-7",
className,
)}
{...props}
/>
);
}
export type DropdownMenuSeparatorProps = React.ComponentProps<typeof DropdownMenuPrimitive.Separator>;
function DropdownMenuSeparator({
className,
...props
}: DropdownMenuSeparatorProps) {
return (
<DropdownMenuPrimitive.Separator
data-slot="dropdown-menu-separator"
className={cn("-mx-1 my-1 h-px bg-border-default", className)}
{...props}
/>
);
}
export type DropdownMenuShortcutProps = React.ComponentProps<"span">;
function DropdownMenuShortcut({
className,
...props
}: DropdownMenuShortcutProps) {
return (
<span
data-slot="dropdown-menu-shortcut"
className={cn("ml-auto text-xs tracking-widest text-text-muted", className)}
{...props}
/>
);
}
export type DropdownMenuSubProps = React.ComponentProps<typeof DropdownMenuPrimitive.Sub>;
function DropdownMenuSub({
...props
}: DropdownMenuSubProps) {
return <DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} />;
}
export type DropdownMenuSubTriggerProps = React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
inset?: boolean;
};
function DropdownMenuSubTrigger({
className,
inset,
children,
...props
}: DropdownMenuSubTriggerProps) {
return (
<DropdownMenuPrimitive.SubTrigger
data-slot="dropdown-menu-sub-trigger"
data-inset={inset}
className={cn(
"flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm text-text-strong outline-hidden select-none focus:bg-bg-surface-1 data-inset:pl-7 data-open:bg-bg-surface-1 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
className,
)}
{...props}
>
{children}
<ChevronRight className="ml-auto" />
</DropdownMenuPrimitive.SubTrigger>
);
}
export type DropdownMenuSubContentProps = React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>;
function DropdownMenuSubContent({
className,
...props
}: DropdownMenuSubContentProps) {
return (
<DropdownMenuPrimitive.SubContent
data-slot="dropdown-menu-sub-content"
className={cn(
"z-50 min-w-24 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border border-border-default bg-bg-main p-1 text-text-strong shadow-md duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
className,
)}
{...props}
/>
);
}
export {
DropdownMenu,
DropdownMenuPortal,
DropdownMenuTrigger,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuLabel,
DropdownMenuItem,
DropdownMenuCheckboxItem,
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
DropdownMenuSeparator,
DropdownMenuShortcut,
DropdownMenuSub,
DropdownMenuSubTrigger,
DropdownMenuSubContent,
};components/ui/dropdown-menu.tsx
import * as React from "react";
import { Menu as DropdownMenuPrimitive } from "@base-ui/react/menu";
import { Check01 } from "@/components/icons/check-01";
import { ChevronRight } from "@/components/icons/chevron-right";
import { cn } from "@/lib/utils";
export type DropdownMenuProps = React.ComponentProps<typeof DropdownMenuPrimitive.Root>;
function DropdownMenu({
...props
}: DropdownMenuProps) {
return <DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} />;
}
export type DropdownMenuPortalProps = React.ComponentProps<typeof DropdownMenuPrimitive.Portal>;
function DropdownMenuPortal({
...props
}: DropdownMenuPortalProps) {
return (
<DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />
);
}
export type DropdownMenuTriggerProps = React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>;
function DropdownMenuTrigger({
...props
}: DropdownMenuTriggerProps) {
return (
<DropdownMenuPrimitive.Trigger
data-slot="dropdown-menu-trigger"
{...props}
/>
);
}
export type DropdownMenuContentProps = React.ComponentProps<typeof DropdownMenuPrimitive.Popup> &
Pick<
React.ComponentProps<typeof DropdownMenuPrimitive.Positioner>,
"align" | "alignOffset" | "side" | "sideOffset"
>;
function DropdownMenuContent({
className,
align = "start",
alignOffset = 0,
side = "bottom",
sideOffset = 4,
...props
}: DropdownMenuContentProps) {
return (
<DropdownMenuPrimitive.Portal>
<DropdownMenuPrimitive.Positioner
className="isolate z-50 outline-none"
align={align}
alignOffset={alignOffset}
side={side}
sideOffset={sideOffset}
>
<DropdownMenuPrimitive.Popup
data-slot="dropdown-menu-content"
className={cn(
"z-50 max-h-(--available-height) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border-default bg-bg-main p-1 text-text-strong shadow-md duration-100 data-closed:overflow-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
className,
)}
{...props}
/>
</DropdownMenuPrimitive.Positioner>
</DropdownMenuPrimitive.Portal>
);
}
export type DropdownMenuGroupProps = React.ComponentProps<typeof DropdownMenuPrimitive.Group>;
function DropdownMenuGroup({
...props
}: DropdownMenuGroupProps) {
return (
<DropdownMenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />
);
}
export type DropdownMenuItemProps = React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
inset?: boolean;
variant?: "default" | "destructive";
};
function DropdownMenuItem({
className,
inset,
variant = "default",
...props
}: DropdownMenuItemProps) {
return (
<DropdownMenuPrimitive.Item
data-slot="dropdown-menu-item"
data-inset={inset}
data-variant={variant}
className={cn(
"relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm text-text-strong outline-hidden select-none focus:bg-bg-surface-1 data-inset:pl-7 data-[variant=destructive]:text-negative-middle data-[variant=destructive]:focus:bg-negative-middle/10 data-[variant=destructive]:focus:text-negative-strong data-disabled:pointer-events-none data-disabled:text-text-disabled [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-negative-middle",
className,
)}
{...props}
/>
);
}
export type DropdownMenuCheckboxItemProps = React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> & {
inset?: boolean;
};
function DropdownMenuCheckboxItem({
className,
children,
checked,
inset,
...props
}: DropdownMenuCheckboxItemProps) {
return (
<DropdownMenuPrimitive.CheckboxItem
data-slot="dropdown-menu-checkbox-item"
data-inset={inset}
className={cn(
"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm text-text-strong outline-hidden select-none focus:bg-bg-surface-1 data-inset:pl-7 data-disabled:pointer-events-none data-disabled:text-text-disabled [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
className,
)}
checked={checked}
{...props}
>
<span
className="pointer-events-none absolute right-2 flex items-center justify-center"
data-slot="dropdown-menu-checkbox-item-indicator"
>
<DropdownMenuPrimitive.CheckboxItemIndicator>
<Check01 className="text-icon-strong" />
</DropdownMenuPrimitive.CheckboxItemIndicator>
</span>
{children}
</DropdownMenuPrimitive.CheckboxItem>
);
}
export type DropdownMenuRadioGroupProps = React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>;
function DropdownMenuRadioGroup({
...props
}: DropdownMenuRadioGroupProps) {
return (
<DropdownMenuPrimitive.RadioGroup
data-slot="dropdown-menu-radio-group"
{...props}
/>
);
}
export type DropdownMenuRadioItemProps = React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem> & {
inset?: boolean;
};
function DropdownMenuRadioItem({
className,
children,
inset,
...props
}: DropdownMenuRadioItemProps) {
return (
<DropdownMenuPrimitive.RadioItem
data-slot="dropdown-menu-radio-item"
data-inset={inset}
className={cn(
"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm text-text-strong outline-hidden select-none focus:bg-bg-surface-1 data-inset:pl-7 data-disabled:pointer-events-none data-disabled:text-text-disabled [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
className,
)}
{...props}
>
<span
className="pointer-events-none absolute right-2 flex items-center justify-center"
data-slot="dropdown-menu-radio-item-indicator"
>
<DropdownMenuPrimitive.RadioItemIndicator>
<Check01 className="text-icon-strong" />
</DropdownMenuPrimitive.RadioItemIndicator>
</span>
{children}
</DropdownMenuPrimitive.RadioItem>
);
}
export type DropdownMenuLabelProps = React.ComponentProps<"div"> & {
inset?: boolean;
};
function DropdownMenuLabel({
className,
inset,
...props
}: DropdownMenuLabelProps) {
// A plain element, like Radix's DropdownMenu.Label: Base UI's Menu.GroupLabel throws outside a
// Menu.Group, and a label heads a menu or a section with or without one.
return (
<div
data-slot="dropdown-menu-label"
data-inset={inset}
className={cn(
"px-1.5 py-1 text-xs font-medium text-text-muted data-inset:pl-7",
className,
)}
{...props}
/>
);
}
export type DropdownMenuSeparatorProps = React.ComponentProps<typeof DropdownMenuPrimitive.Separator>;
function DropdownMenuSeparator({
className,
...props
}: DropdownMenuSeparatorProps) {
return (
<DropdownMenuPrimitive.Separator
data-slot="dropdown-menu-separator"
className={cn("-mx-1 my-1 h-px bg-border-default", className)}
{...props}
/>
);
}
export type DropdownMenuShortcutProps = React.ComponentProps<"span">;
function DropdownMenuShortcut({
className,
...props
}: DropdownMenuShortcutProps) {
return (
<span
data-slot="dropdown-menu-shortcut"
className={cn("ml-auto text-xs tracking-widest text-text-muted", className)}
{...props}
/>
);
}
export type DropdownMenuSubProps = React.ComponentProps<typeof DropdownMenuPrimitive.SubmenuRoot>;
function DropdownMenuSub({
...props
}: DropdownMenuSubProps) {
return (
<DropdownMenuPrimitive.SubmenuRoot
data-slot="dropdown-menu-sub"
{...props}
/>
);
}
export type DropdownMenuSubTriggerProps = React.ComponentProps<typeof DropdownMenuPrimitive.SubmenuTrigger> & {
inset?: boolean;
};
function DropdownMenuSubTrigger({
className,
inset,
children,
...props
}: DropdownMenuSubTriggerProps) {
return (
<DropdownMenuPrimitive.SubmenuTrigger
data-slot="dropdown-menu-sub-trigger"
data-inset={inset}
className={cn(
"flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm text-text-strong outline-hidden select-none focus:bg-bg-surface-1 data-inset:pl-7 data-open:bg-bg-surface-1 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
className,
)}
{...props}
>
{children}
<ChevronRight className="ml-auto" />
</DropdownMenuPrimitive.SubmenuTrigger>
);
}
export type DropdownMenuSubContentProps = React.ComponentProps<typeof DropdownMenuContent>;
function DropdownMenuSubContent({
className,
...props
}: DropdownMenuSubContentProps) {
return (
<DropdownMenuContent
data-slot="dropdown-menu-sub-content"
align="start"
alignOffset={0}
side="right"
sideOffset={0}
className={cn(
"z-50 min-w-24 origin-(--transform-origin) overflow-hidden rounded-md border border-border-default bg-bg-main p-1 text-text-strong shadow-md duration-100 data-closed:overflow-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
className,
)}
{...props}
/>
);
}
export {
DropdownMenu,
DropdownMenuPortal,
DropdownMenuTrigger,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuLabel,
DropdownMenuItem,
DropdownMenuCheckboxItem,
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
DropdownMenuSeparator,
DropdownMenuShortcut,
DropdownMenuSub,
DropdownMenuSubTrigger,
DropdownMenuSubContent,
};