Navigation: [/sitemap.md](/sitemap.md)

---
type: doc
title: Sheet
description: A sliding panel component that appears from the edge of the screen.
---

import { Icon } from "@/components/ui/icon"

```astro live props={{ name: 'sheet' }}
---
import { Button } from "@/components/ui/button"
import { Icon } from "@/components/ui/icon"
import {
  Sheet,
  SheetContent,
  SheetDescription,
  SheetHeader,
  SheetTitle,
  SheetTrigger,
} from "@/components/ui/sheet"
---

<Sheet>
  <SheetTrigger variant="outline">
    <Icon name="menu" />
  </SheetTrigger>
  <SheetContent>
    <SheetHeader>
      <SheetTitle>Sheet Title</SheetTitle>
      <SheetDescription>
        This is a description of the sheet. You can add any content here.
      </SheetDescription>
    </SheetHeader>
  </SheetContent>
</Sheet>
```

## Installation

```bash
npx shadcn@latest add @fulldev/sheet
```

## Usage

```ts
import {
  Sheet,
  SheetClose,
  SheetContent,
  SheetDescription,
  SheetFooter,
  SheetHeader,
  SheetTitle,
  SheetTrigger,
} from "@/components/ui/sheet"
```

```astro
<Sheet>
  <SheetTrigger>Open</SheetTrigger>
  <SheetContent>
    <SheetHeader>
      <SheetTitle>Sheet Title</SheetTitle>
      <SheetDescription>Sheet Description</SheetDescription>
    </SheetHeader>
    <SheetFooter>
      <SheetClose variant="outline">Close</SheetClose>
      <Button>Save</Button>
    </SheetFooter>
  </SheetContent>
</Sheet>
```

## Composition

Use the following composition to build a `Sheet`:

```text
Sheet
├── SheetTrigger
└── SheetContent
    ├── SheetHeader
    │   ├── SheetTitle
    │   └── SheetDescription
    └── SheetFooter
```

## Examples

```astro live
---
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
import {
  Sheet,
  SheetClose,
  SheetContent,
  SheetDescription,
  SheetFooter,
  SheetHeader,
  SheetTitle,
  SheetTrigger,
} from "@/components/ui/sheet"
---

<Sheet>
  <SheetTrigger variant="outline">Open</SheetTrigger>
  <SheetContent>
    <SheetHeader>
      <SheetTitle>Edit profile</SheetTitle>
      <SheetDescription>
        Make changes to your profile here. Click save when you&apos;re done.
      </SheetDescription>
    </SheetHeader>
    <div class="grid gap-4 px-4">
      <div class="grid gap-2">
        <Label for="sheet-name">Name</Label>
        <Input id="sheet-name" value="Pedro Duarte" />
      </div>
      <div class="grid gap-2">
        <Label for="sheet-username">Username</Label>
        <Input id="sheet-username" value="@peduarte" />
      </div>
    </div>
    <SheetFooter>
      <SheetClose variant="outline">Cancel</SheetClose>
      <Button>Save changes</Button>
    </SheetFooter>
  </SheetContent>
</Sheet>
```

### Sides

```astro live
---
import {
  Sheet,
  SheetContent,
  SheetHeader,
  SheetTitle,
  SheetTrigger,
} from "@/components/ui/sheet"
---

<div class="flex flex-wrap gap-3">
  <Sheet>
    <SheetTrigger variant="outline">Left</SheetTrigger>
    <SheetContent side="left">
      <SheetHeader>
        <SheetTitle>Left sheet</SheetTitle>
      </SheetHeader>
    </SheetContent>
  </Sheet>
  <Sheet>
    <SheetTrigger variant="outline">Right</SheetTrigger>
    <SheetContent side="right">
      <SheetHeader>
        <SheetTitle>Right sheet</SheetTitle>
      </SheetHeader>
    </SheetContent>
  </Sheet>
</div>
```

## API Reference

See the [GitHub source code](https://github.com/fulldotdev/ui/tree/main/src/components/ui/sheet) for more information on props.
See the [data-slot docs](https://github.com/bejamas/data-slot/blob/main/packages/dialog/README.md) for more information on interactivity.
