Installation

pnpm dlx shadcn@latest add @cortexcn/drawerUsage
import { Drawer, DrawerPortal, DrawerOverlay, DrawerTrigger, DrawerClose, DrawerContent, DrawerHeader, DrawerFooter, DrawerTitle, DrawerDescription } from "@/components/drawer";Examples
Scrollable content
import { Button } from "@/components/button"import { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger } from "@/components/drawer"export function DrawerScrollableContent() { return ( <div className="flex flex-col gap-6"> <Drawer direction="right"> <DrawerTrigger asChild> <Button variant="outline">Scrollable Content</Button> </DrawerTrigger> <DrawerContent> <DrawerHeader> <DrawerTitle>Move Goal</DrawerTitle> <DrawerDescription>Set your daily activity goal.</DrawerDescription> </DrawerHeader> <div className="no-scrollbar overflow-y-auto px-4"> {Array.from({ length: 10 }).map((_, index) => ( <p key={index} className="mb-4 leading-normal style-lyra:mb-2 style-lyra:leading-relaxed style-sera:leading-relaxed" > Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </p> ))} </div> <DrawerFooter> <Button>Submit</Button> <DrawerClose asChild> <Button variant="outline">Cancel</Button> </DrawerClose> </DrawerFooter> </DrawerContent> </Drawer> </div> )}Sides
import { Button } from "@/components/button"import { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger } from "@/components/drawer"const DRAWER_SIDES = ["top", "right", "bottom", "left"] as constexport function DrawerWithSides() { return ( <div className="flex flex-col gap-6"> <div className="flex flex-wrap gap-2"> {DRAWER_SIDES.map((side) => ( <Drawer key={side} direction={ side === "bottom" ? undefined : (side as "top" | "right" | "left") } > <DrawerTrigger asChild> <Button variant="outline" className="capitalize style-sera:uppercase" > {side} </Button> </DrawerTrigger> <DrawerContent className="data-[vaul-drawer-direction=bottom]:max-h-[50vh] data-[vaul-drawer-direction=top]:max-h-[50vh]"> <DrawerHeader> <DrawerTitle>Move Goal</DrawerTitle> <DrawerDescription> Set your daily activity goal. </DrawerDescription> </DrawerHeader> <div className="no-scrollbar overflow-y-auto px-4"> {Array.from({ length: 10 }).map((_, index) => ( <p key={index} className="mb-4 leading-normal style-lyra:mb-2 style-lyra:leading-relaxed style-sera:leading-relaxed" > Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </p> ))} </div> <DrawerFooter> <Button>Submit</Button> <DrawerClose asChild> <Button variant="outline">Cancel</Button> </DrawerClose> </DrawerFooter> </DrawerContent> </Drawer> ))} </div> </div> )}Adapted from the shadcn/ui Drawer (MIT).
