# Sheet
A slide-in panel that appears from the left or right edge of the viewport. Can operate as a modal dialog with a backdrop or as a popover that allows interaction with content behind it. Supports a title, description, action buttons, and optional form wrapping. Controlled via an imperative ref with `open()` and `close()` methods.
```tsx demo
import { Button } from "@tenstorrent/vesper/button";
import { Sheet, useSheet } from "@tenstorrent/vesper/sheet";
export default function SheetDemo() {
const sheet = useSheet();
return (
<>
Sheet content goes here.
>
);
}
```
## Options
| Prop | Type | Description | Default |
| ------------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------- |
| `title` | `string` | The title text displayed in the sheet header. Used for `aria-labelledby`. **Required.** | — |
| `description` | `string` | A description displayed below the title. Used for `aria-describedby`. **Required.** | — |
| `side` | `"left" \| "right"` | The side of the viewport the sheet slides in from. | `"right"` |
| `popover` | `boolean` | When `true`, renders as a popover without a backdrop, allowing interaction behind it. | `false` |
| `buttons` | `ButtonProps[]` | An optional array of button props for action buttons. The last button defaults to `"contrast"` variant; others default to `"tertiary"`. | — |
| `ref` | `Ref` | A ref exposing imperative `open()` and `close()` methods. | — |
| `form` | `FormProps` | When provided, wraps the sheet content in a `