Twigs Logo

Dropdown

A dropdown menu that displays a list of actions or functions triggered by a button. Supports items, checkboxes, radio groups, submenus, and separators with full keyboard navigation and accessibility features.

Import

import {DropdownMenu,DropdownMenuTrigger,DropdownMenuContent,DropdownMenuItem,DropdownMenuCheckboxItem,DropdownMenuRadioGroup,DropdownMenuRadioItem,DropdownMenuItemIndicator,DropdownMenuLabel,DropdownMenuSeparator,DropdownMenuSub,DropdownMenuSubTrigger,DropdownMenuSubContent} from "@sparrowengg/twigs-react";

Usage

const DropdownExample = () => {
  const [bookmarksChecked, setBookmarksChecked] = React.useState(true);
  const [urlsChecked, setUrlsChecked] = React.useState(false);
  const [person, setPerson] = React.useState("pedro");

  return (
    <DropdownMenu size="sm">
      <DropdownMenuTrigger asChild>
        <Button variant="solid" size="sm">
          <Box css={{ marginLeft: "$2" }}>Menu</Box>
        </Button>
      </DropdownMenuTrigger>
      <DropdownMenuContent sideOffset={5}>
        <DropdownMenuItem>New Tab</DropdownMenuItem>
        <DropdownMenuItem>New Window</DropdownMenuItem>
        <DropdownMenuSub>
          <DropdownMenuSubTrigger>More Tools</DropdownMenuSubTrigger>
          <DropdownMenuSubContent sideOffset={2} alignOffset={-5}>
            <DropdownMenuItem>Save Page As…</DropdownMenuItem>
          </DropdownMenuSubContent>
        </DropdownMenuSub>
      </DropdownMenuContent>
    </DropdownMenu>
  );
};

Examples

Advanced customization

The dropdown component supports a wide range of features you can customize the component based on your own needs.

Props

PropTypeDefault
defaultOpen?
boolean
-
open?
boolean
-
onOpenChange?
(open: boolean) => void
-
modal?
boolean
true
dir?
'ltr' | 'rtl'
-
size?
'sm' | 'md'
'md'
PropTypeDefault
asChild?
boolean
false
PropTypeDefault
asChild?
boolean
false
side?
'top' | 'right' | 'bottom' | 'left'
'bottom'
sideOffset?
number
0
align?
'start' | 'center' | 'end'
'center'
alignOffset?
number
0
avoidCollisions?
boolean
true
collisionBoundary?
Boundary
-
collisionPadding?
number | Partial<Record<Side, number>>
0
arrowPadding?
number
0
sticky?
'partial' | 'always'
'partial'
hideWhenDetached?
boolean
false
loop?
boolean
false
onCloseAutoFocus?
(event: Event) => void
-
onEscapeKeyDown?
(event: KeyboardEvent) => void
-
onPointerDownOutside?
(event: PointerDownOutsideEvent) => void
-
onFocusOutside?
(event: FocusOutsideEvent) => void
-
onInteractOutside?
(event: PointerDownOutsideEvent | FocusOutsideEvent) => void
-
forceMount?
boolean
-
container?
HTMLElement
-
showArrow?
boolean
false
PropTypeDefault
disabled?
boolean
false
onSelect?
(event: Event) => void
-
textValue?
string
-
PropTypeDefault
checked?
boolean | 'indeterminate'
-
onCheckedChange?
(checked: boolean) => void
-
disabled?
boolean
false
textValue?
string
-
PropTypeDefault
value?
string
-
onValueChange?
(value: string) => void
-
disabled?
boolean
false
PropTypeDefault
value?
string
-
disabled?
boolean
false
textValue?
string
-
PropTypeDefault
defaultOpen?
boolean
-
open?
boolean
-
onOpenChange?
(open: boolean) => void
-
PropTypeDefault
disabled?
boolean
false
textValue?
string
-
PropTypeDefault
side?
'top' | 'right' | 'bottom' | 'left'
'right'
sideOffset?
number
0
align?
'start' | 'center' | 'end'
'start'
alignOffset?
number
0
avoidCollisions?
boolean
true
collisionBoundary?
Boundary
-
collisionPadding?
number | Partial<Record<Side, number>>
0
arrowPadding?
number
0
sticky?
'partial' | 'always'
'partial'
hideWhenDetached?
boolean
false
loop?
boolean
false
onCloseAutoFocus?
(event: Event) => void
-
onEscapeKeyDown?
(event: KeyboardEvent) => void
-
onPointerDownOutside?
(event: PointerDownOutsideEvent) => void
-
onFocusOutside?
(event: FocusOutsideEvent) => void
-
onInteractOutside?
(event: PointerDownOutsideEvent | FocusOutsideEvent) => void
-
forceMount?
boolean
-
container?
HTMLElement
-

Data Attributes

These props are used for the conditional rendering of the components

Applicable - DropdownMenu
PropTypeDefault
[data-state]?
'open' | 'closed'
-
Applicable - DropdownMenuTrigger
PropTypeDefault
[data-state]?
'open' | 'closed'
-
[data-disabled]?
boolean
-
Applicable - DropdownMenuContent/ DropdownMenuSubContent
PropTypeDefault
[data-state]?
'open' | 'closed'
-
[data-side]?
'top' | 'right' | 'bottom' | 'left'
-
[data-align]?
'start' | 'center' | 'end'
-
Applicable - DropdownMenuItem/ DropdownMenuCheckboxItem/ DropdownMenuRadioItem/ DropdownMenuSubTrigger
PropTypeDefault
[data-disabled]?
boolean
-
[data-highlighted]?
boolean
-
[data-state]?
'checked' | 'unchecked' | 'indeterminate'
-
Applicable - DropdownMenuSubTrigger
PropTypeDefault
[data-state]?
'open' | 'closed'
-
Dropdown | Twigs