Dropdown Menu

A sketchy-bordered menu panel with hand-drawn item separators, built on Radix Dropdown Menu. Includes items, checkbox items, radio items, labels, and separators.

<DropdownMenu roughness={1.5}>
  <DropdownMenuTrigger asChild>
    <Button variant="outline">Open menu</Button>
  </DropdownMenuTrigger>
  <DropdownMenuContent>
    <DropdownMenuLabel>Tools</DropdownMenuLabel>
    <DropdownMenuItem>Pen</DropdownMenuItem>
    <DropdownMenuSeparator />
    <DropdownMenuItem>Brush</DropdownMenuItem>
  </DropdownMenuContent>
</DropdownMenu>

CLI install

npx doodleui-react add dropdown-menu

Usage

import {
  DropdownMenu,
  DropdownMenuTrigger,
  DropdownMenuContent,
  DropdownMenuLabel,
  DropdownMenuItem,
  DropdownMenuSeparator,
  Button,
} from "doodleui-react";

<DropdownMenu>
  <DropdownMenuTrigger asChild>
    <Button variant="outline">Open menu</Button>
  </DropdownMenuTrigger>
  <DropdownMenuContent>
    <DropdownMenuLabel>Tools</DropdownMenuLabel>
    <DropdownMenuItem>Pen</DropdownMenuItem>
    <DropdownMenuSeparator />
    <DropdownMenuItem>Brush</DropdownMenuItem>
  </DropdownMenuContent>
</DropdownMenu>

DropdownMenuCheckboxItem and DropdownMenuRadioGroup / DropdownMenuRadioItem are also exported for multi-select and single-select item groups.

Props

PropTypeDefaultNotes
open / onOpenChangeboolean / (open: boolean) => voiduncontrolledRadix controlled API.
animatebooleantrueDraw-in the panel border when the menu opens. Overrides DoodleUIProvider. Reduced motion disables this unless the provider set forceAnimate.
roughnessnumber1.5How wobbly the stroke is. 0 is almost geometric. 3+ is messy.
seednumberprovider / randomLocks the sketch. Omit to follow SketchSeedProvider (Shuffle) or a mount-time random seed.
sketchColorstring#1f1d1aStroke color. Also tints primary/accent fills where relevant.
classNamestringundefinedPassed through to the root element.
styleCSSPropertiesundefinedPassed through to the root element.