shadcn.io is an independent project built on shadcn/ui
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, Ark UI closes it when the panel is swiped away.
Installation
Anatomy

Usage
<Drawer swipeDirection="up">
<DrawerTrigger asChild>
<Button variant="outline">Open Top Drawer</Button>
</DrawerTrigger>
<DrawerContent showBar={false}>
<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 asChild>
<Button variant="outline">Close</Button>
</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.
DrawerClose takes asChild and merges onto the Button inside it.
Is there a drag bar?
No. A side or top drawer still follows a swipe, but it doesn't draw the bar.
showBar={false} on DrawerContent hides it.
How does the trigger open it?
An outline button opens the drawer. Its text, Open Top Drawer, is the accessible name.
DrawerTrigger takes asChild and merges onto the one Button inside it.
API Reference
Drawer
Sets swipeDirection="up", asChild and showBar={false}. The rest is on the Drawer page.
Button
Sets variant="outline". The rest is on the Button page.





