Toggle Sidebar B
header.lightDarkMode D

Sheet

Side-anchored drawer that slides in from any edge. Use for filter panels, navigation drawers, and detail views that complement the main page.

When to use Sheet vs Drawer vs Dialog

Sheet slides in from a side (left/right/top/bottom). Drawer is a vaul-vue bottom sheet tuned for mobile. Dialog is a centered modal. For modals that should adapt across devices, use DialogResponsive.

Anatomy

Import all parts and piece them together.

vue
<script setup>
import {
  Sheet,
  SheetClose,
  SheetContent,
  SheetDescription,
  SheetFooter,
  SheetHeader,
  SheetTitle,
  SheetTrigger,
} from "@/components/ui/sheet";
</script>

<template>
  <Sheet>
    <SheetTrigger />
    <SheetContent>
      <SheetHeader>
        <SheetTitle />
        <SheetDescription />
      </SheetHeader>
      <SheetFooter />
      <SheetClose />
    </SheetContent>
  </Sheet>
</template>

Default

Right-side sheet with header and content.

Sides

Set side to top, right, bottom, or left.

With form

Collect input with labelled fields and confirm in the footer.

API Reference

Props, events, and slots for each sub-component.

Sheet

Props

PropTypeDefaultDescription
openbooleanOpen state. Supports v-model:open.

Events

EventDescription
update:openFires when the sheet opens or closes. Enables v-model:open.

SheetTrigger / SheetClose

Props

PropTypeDefaultDescription
asChildbooleanfalseRender the child slot without the default button wrapper.

SheetContent

Props

PropTypeDefaultDescription
side"top" | "right" | "bottom" | "left""right"Edge to slide in from.

Events

EventDescription
escape-key-downFires when Escape is pressed.
pointer-down-outsideFires on a pointer press outside the sheet.

SheetHeader / SheetFooter / SheetTitle / SheetDescription

Props

PropTypeDefaultDescription
classstringLayout and typography wrappers for the sheet content.

Accessibility

Keyboard shortcuts and ARIA behavior.

Keyboard

ShortcutDescription
SpaceWhen focus is on the trigger, opens the sheet.
EnterWhen focus is on the trigger, opens the sheet.
TabMoves focus to the next focusable element inside the sheet.
Shift+TabMoves focus to the previous focusable element.
EscCloses the sheet and returns focus to the trigger.
  • A side-anchored Dialog: focus is trapped within the content while open and restored on close.
  • Content is labelled by SheetTitle and described by SheetDescription via aria-labelledby / aria-describedby.