Sheet side
Sheet_side Examples
Copy-ready examples with live previews.
Basic usage
Controlled sheet (isOpen / onOpenChange) with body content.
Live preview
Side sheet
Body (short)
Contenido corto para validar layout.
Basic
import { useState } from "react";
import Sheet_side from "@/_components/sheet/side/Sheet_side";
import { Button } from "@/_components/buttons_variants/buttons/Button";
export default function Example() {
const [open, setOpen] = useState(false);
return (
<>
<Button onClick={() => setOpen(true)}>Open</Button>
<Sheet_side
isOpen={open}
onOpenChange={setOpen}
title="Side sheet"
side="right"
size="medium"
showScrim
contentBody={<div style={{ padding: 12 }}>Body</div>}
/>
</>
);
}Sizes
Use size to switch between minimized / small / medium / large / full.
Live preview
Body (short)
Contenido corto para validar layout.
small (right)
Body (short)
Contenido corto para validar layout.
large (left)
Body (long)
Item 1 — contenido largo para probar scroll interno.
Item 2 — contenido largo para probar scroll interno.
Item 3 — contenido largo para probar scroll interno.
Item 4 — contenido largo para probar scroll interno.
Item 5 — contenido largo para probar scroll interno.
Item 6 — contenido largo para probar scroll interno.
Item 7 — contenido largo para probar scroll interno.
Item 8 — contenido largo para probar scroll interno.
Item 9 — contenido largo para probar scroll interno.
Item 10 — contenido largo para probar scroll interno.
Item 11 — contenido largo para probar scroll interno.
Item 12 — contenido largo para probar scroll interno.
Item 13 — contenido largo para probar scroll interno.
Item 14 — contenido largo para probar scroll interno.
Item 15 — contenido largo para probar scroll interno.
Item 16 — contenido largo para probar scroll interno.
full (right)
Body (long)
Item 1 — contenido largo para probar scroll interno.
Item 2 — contenido largo para probar scroll interno.
Item 3 — contenido largo para probar scroll interno.
Item 4 — contenido largo para probar scroll interno.
Item 5 — contenido largo para probar scroll interno.
Item 6 — contenido largo para probar scroll interno.
Item 7 — contenido largo para probar scroll interno.
Item 8 — contenido largo para probar scroll interno.
Item 9 — contenido largo para probar scroll interno.
Item 10 — contenido largo para probar scroll interno.
Item 11 — contenido largo para probar scroll interno.
Item 12 — contenido largo para probar scroll interno.
Item 13 — contenido largo para probar scroll interno.
Item 14 — contenido largo para probar scroll interno.
Item 15 — contenido largo para probar scroll interno.
Item 16 — contenido largo para probar scroll interno.
Sizes
import { useState } from "react";
import Sheet_side from "@/_components/sheet/side/Sheet_side";
import { Button } from "@/_components/buttons_variants/buttons/Button";
export default function Example() {
const [open, setOpen] = useState(false);
return (
<>
<Button onClick={() => setOpen(true)}>Open</Button>
<Sheet_side
isOpen={open}
onOpenChange={setOpen}
title="Large sheet"
side="left"
size="large"
showScrim
contentBody={<div style={{ padding: 12 }}>Long content</div>}
/>
</>
);
}Side / offset / radius / scrim
Common layout controls for how the sheet is positioned and shaped.
Live preview
Playground sheet
Body (long)
Item 1 — contenido largo para probar scroll interno.
Item 2 — contenido largo para probar scroll interno.
Item 3 — contenido largo para probar scroll interno.
Item 4 — contenido largo para probar scroll interno.
Item 5 — contenido largo para probar scroll interno.
Item 6 — contenido largo para probar scroll interno.
Item 7 — contenido largo para probar scroll interno.
Item 8 — contenido largo para probar scroll interno.
Item 9 — contenido largo para probar scroll interno.
Item 10 — contenido largo para probar scroll interno.
Item 11 — contenido largo para probar scroll interno.
Item 12 — contenido largo para probar scroll interno.
Item 13 — contenido largo para probar scroll interno.
Item 14 — contenido largo para probar scroll interno.
Item 15 — contenido largo para probar scroll interno.
Item 16 — contenido largo para probar scroll interno.
Variants
import Sheet_side from "@/packages/ui/src/_components/sheet/side/Sheet_side";
export default function Example() {
return (
<Sheet_side
isOpen
onOpenChange={() => {}}
title="Sheet"
side="right"
size="medium"
offset="md"
radius="lg"
style="standard"
showScrim
contentBody={<div style={{ padding: 12 }}>Body</div>}
contentFooter={<div style={{ padding: 12 }}>Footer</div>}
/>
);
}No scrim
Disable background overlay with showScrim={false}.
Live preview
No scrim
Body (short)
Contenido corto para validar layout.
No scrim
import { useState } from "react";
import Sheet_side from "@/_components/sheet/side/Sheet_side";
import { Button } from "@/_components/buttons_variants/buttons/Button";
export default function Example() {
const [open, setOpen] = useState(false);
return (
<>
<Button onClick={() => setOpen(true)}>Open</Button>
<Sheet_side
isOpen={open}
onOpenChange={setOpen}
title="No scrim"
side="left"
size="medium"
showScrim={false}
contentBody={<div style={{ padding: 12 }}>Body</div>}
/>
</>
);
}On this page
Sheet_side Props
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
| isOpen | boolean | Yes | — | Controls visibility of the sheet. |
| onOpenChange | (next: boolean) => void | Yes | — | Called when the sheet requests to open/close (scrim click, close button, drag, etc). |
| title | string | No | undefined | Header text text. |
| side | "left" | "right" | No | "right" | Which side the sheet comes from. |
| size | "minimized" | "small" | "medium" | "large" | "full" | No | "medium" | Width preset of the sheet. |
| style | "standard" | No | "standard" | Visual style preset. |
| radius | "none" | "sm" | "md" | "lg" | "xl" | No | "none" | Corner radius preset. |
| offset | "none" | "sm" | "md" | "lg" | "top-sm" | "top-md" | "top-lg" | No | "none" | Inset preset. Use `top-*` to keep space at the top (useful when there is a fixed header). |
| showScrim | boolean | No | false | Shows a background overlay behind the sheet. |
| contentBody | React.ReactNode | No | undefined | Main content (scrollable area). |
| contentFooter | React.ReactNode | No | undefined | Optional footer area (actions). |
useHorizontalDrag Props
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
| enabled | boolean | No | true | Enables the drag gesture handling. |
| side | "left" | "right" | No | "right" | Sheet side (affects drag direction and close threshold logic). |
| sheetRef | React.RefObject<HTMLElement | null> | Yes | — | Ref to the sheet element that is being dragged. |
| threshold | number | No | 80 | Minimum drag distance (px) required to trigger close. |
| onClose | () => void | Yes | — | Called when the gesture decides the sheet should close. |
| scrimRef | React.RefObject<HTMLElement | null> | No | undefined | Optional ref to the scrim/overlay element (useful to coordinate pointer events). |
Components