Skip to main content

Drawer

A panel that slides in from the edge of the screen to display additional content or actions without navigating away from the current page.

import {
Drawer,
DrawerClose,
DrawerContent,
DrawerDescription,
DrawerFooter,
DrawerHeader,
DrawerTitle,
DrawerTrigger,
} from "@/components/ui/drawer"
import { Button } from "@/components/ui/button"

<Drawer>
<DrawerTrigger asChild>
<Button variant="outline">Open Drawer</Button>
</DrawerTrigger>
<DrawerContent>
<DrawerHeader className="text-center">
<DrawerTitle>Move Goal</DrawerTitle>
<DrawerDescription>Set your daily move goal</DrawerDescription>
</DrawerHeader>
<div className="flex items-center justify-center gap-6 py-4">
<Button variant="outline" size="icon" className="rounded-full"></Button>
<span className="text-4xl font-bold tabular-nums">1,124</span>
<Button variant="outline" size="icon" className="rounded-full">+</Button>
</div>
<DrawerFooter className="flex-row justify-center">
<DrawerClose asChild>
<Button variant="ghost">Cancel</Button>
</DrawerClose>
<Button>Submit</Button>
</DrawerFooter>
</DrawerContent>
</Drawer>

API Reference

PropTypeDefaultDescription
openbooleanControlled open state of the drawer
onOpenChange(open: boolean) => voidCallback when open state changes
shouldScaleBackgroundbooleantrueWhether the background scales down when the drawer is open
direction"top" | "bottom" | "left" | "right""bottom"The direction from which the drawer slides in

DrawerContent

The container for drawer content. Renders at the bottom of the viewport with a drag handle.

DrawerHeader

Layout wrapper for DrawerTitle and DrawerDescription.

DrawerFooter

Layout wrapper for action buttons at the bottom of the drawer.

DrawerTitle

The accessible title for the drawer.

DrawerDescription

An optional accessible description for the drawer content.

Accessibility

The Drawer component follows WAI-ARIA dialog patterns:

  • Focus is trapped within the drawer while open
  • Escape key closes the drawer
  • Supports swipe-to-dismiss gesture on touch devices
  • Content underneath is made inert (not interactive)
  • Focus returns to trigger when closed
  • Includes a visible drag handle for affordance