Skip to content

shadcn.io is an independent project built on shadcn/ui

Simple Top Drawer for React

A top drawer titled Top Drawer that slides down from the top, with a short description and Close.

Open Top Drawer slides a panel down from the top. It shows Top Drawer, a short description, one line of text, and Close.

Use it for a notice that belongs at the top of the screen. A notice that must stay can be an Alert. In React, Base UI closes it when the panel is swiped away.

Preview

Preview width

Installation

Sign in to get your install command
Free with an account. It carries your token, so the CLI installs everything in one go.

Anatomy

Drawer anatomy: grabber, title, description, content, close

Usage

<Drawer swipeDirection="up">
  <DrawerTrigger render={<Button variant="outline" />}>
    Open Top Drawer
  </DrawerTrigger>
  <DrawerContent>
    <DrawerHeader>
      <DrawerTitle>Top Drawer</DrawerTitle>
      <DrawerDescription>
        This drawer slides down from the top.
      </DrawerDescription>
    </DrawerHeader>
    <div className="p-4">
      <p className="text-muted-foreground text-sm">
        Top drawers are useful for search bars, notifications, and quick
        action panels.
      </p>
    </div>
    <DrawerFooter>
      <DrawerClose render={<Button variant="outline" />}>Close</DrawerClose>
    </DrawerFooter>
  </DrawerContent>
</Drawer>

FAQ

How does this drawer open from the top?

swipeDirection="up" on Drawer puts it on the top edge. The prop names the swipe that closes the drawer, so up docks it at the top; leave it out for a bottom drawer.

What's inside the drawer?

DrawerHeader with Top Drawer and This drawer slides down from the top, one paragraph, and DrawerFooter with Close.

How does Close work?

It's a DrawerClose, so it dismisses the drawer. Swiping it back toward its edge, Escape and a click on the overlay all close it, and focus goes back to the trigger. The Button goes in the render prop of DrawerClose.

Is there a drag bar?

No. A side or top drawer still follows a swipe, but it doesn't draw the bar. The bar stays off unless Drawer sets showSwipeHandle.

How does the trigger open it?

An outline button opens the drawer. Its text, Open Top Drawer, is the accessible name. The Button goes in the render prop of DrawerTrigger.

When should I use a top Drawer?

When the content reads best from the top down: a search bar, a banner, a row of actions. Pick a Drawer when people should be able to drag the panel, which feels natural on touch screens. A Sheet slides in from an edge without the drag and suits desktop side panels; a Dialog is centered.

API Reference

Drawer

Sets swipeDirection="up". The rest is on the Drawer page.

Button

Sets variant="outline". The rest is on the Button page.