@monetr/vaul
Drawer component for React.

Touch-friendly bottom sheets with snap points, scaled background, nested drawers, and four-direction support. Built on Radix Dialog.

npm
yarn
pnpm
bun
deno
npm install @monetr/vaul
🧭

Direction-aware

Slide drawers in from top, bottom, left, or right with the same API and gestures.

📏

Snap points

Multi-stop sheets with velocity-aware swipes, sequential mode, and overlay fade control.

👆

Drag to dismiss

Real touch physics for both axes. Adjustable close threshold and release velocity.

🪟

Scaled background

iOS-style stacked card effect by tagging a wrapper with one data attribute.

🧩

Non-modal and nested

Run drawers without an overlay or nest one inside another with parent recede animation.

♿

Built on Radix Dialog

Inherits Radix focus management, accessibility, and the asChild slot pattern.

Try it

import { Drawer } from '@monetr/vaul';

export function MyDrawer() {
  return (
    <Drawer.Root>
      <Drawer.Trigger>Open</Drawer.Trigger>
      <Drawer.Portal>
        <Drawer.Overlay />
        <Drawer.Content>
          <Drawer.Title>Make changes</Drawer.Title>
          <Drawer.Description>Drag down or tap outside to dismiss.</Drawer.Description>
          <Drawer.Close>Save</Drawer.Close>
        </Drawer.Content>
      </Drawer.Portal>
    </Drawer.Root>
  );
}