Sheet bottom
Sheet_bottom Examples
Copy-ready examples with live previews.
Basic usage
Controlled sheet (isOpen / onOpenChange) with body + footer slots.
Live preview
Basic
import { useState } from "react";
import Sheet_bottom from "@/_components/sheet/bottom/Sheet_bottom";
export default function Example() {
const [open, setOpen] = useState(false);
return (
<>
<button type="button" onClick={() => setOpen(true)}>Open</button>
<Sheet_bottom
isOpen={open}
onOpenChange={setOpen}
title="Bottom sheet"
contentBody={<div style={{ padding: 16 }}>Body</div>}
contentFooter={<div style={{ padding: 16 }}>Footer</div>}
/>
</>
);
}Sizes
Use size to control how tall the sheet is (small / medium / large / full).
Live preview
Sizes gallery
import { useState } from "react";
import Sheet_bottom from "@/packages/ui/src/_components/sheet/bottom/Sheet_bottom";
type SheetSize = "small" | "medium" | "large" | "full";
export default function Example() {
const [open, setOpen] = useState<SheetSize | null>(null);
return (
<>
<button onClick={() => setOpen("small")}>Open small</button>
<button onClick={() => setOpen("full")}>Open full</button>
<Sheet_bottom
isOpen={open === "small"}
onOpenChange={(v) => setOpen(v ? "small" : null)}
size="small"
showScrim
title="Small"
contentBody={<div style={{ padding: 16 }}>...</div>}
/>
</>
);
}Scrim (overlay)
Toggle showScrim to enable/disable the overlay behind the sheet.
Live preview
showScrim
import { useState } from "react";
import Sheet_bottom from "@/packages/ui/src/_components/sheet/bottom/Sheet_bottom";
export default function Example() {
const [open, setOpen] = useState(false);
return (
<Sheet_bottom
isOpen={open}
onOpenChange={setOpen}
showScrim
title="With scrim"
contentBody={<div style={{ padding: 16 }}>...</div>}
/>
);
}Radius + minHeight
Use radius for corner rounding and minHeight to constrain the content area height.
Live preview
radius + minHeight
import Sheet_bottom from "@/packages/ui/src/_components/sheet/bottom/Sheet_bottom";
export default function Example() {
return (
<Sheet_bottom
isOpen
onOpenChange={() => {}}
radius="large"
minHeight="520px"
title="Details"
contentBody={<div style={{ padding: 16 }}>Long content...</div>}
/>
);
}Interactive playground
Quick way to validate combinations in docs while keeping fixed layers inside the preview.
Live preview
Playground
import { useState } from "react";
import Sheet_bottom from "@/_components/sheet/bottom/Sheet_bottom";
export default function Example() {
const [open, setOpen] = useState(false);
return (
<>
<button onClick={() => setOpen(true)}>Open</button>
<Sheet_bottom
isOpen={open}
onOpenChange={setOpen}
size="large"
radius="medium"
showScrim
title="Playground"
contentBody={<div style={{ padding: 16 }}>...</div>}
/>
</>
);
}On this page
Sheet_bottom Props
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
| isOpen | boolean | Yes | false | Controlled state: true shows the sheet, false hides it. |
| onOpenChange | (open: boolean) => void | No | — | Called when the sheet requests open/close (internally it triggers close via onOpenChange(false)). |
| title | string | No | — | Header text text. |
| contentBody | React.ReactNode | No | — | Main body content. |
| contentFooter | React.ReactNode | No | — | Footer content (usually actions). |
| size | "small" | "medium" | "large" | "full" | No | "large" | Applies a size preset class to the sheet root. |
| radius | "none" | "small" | "medium" | "large" | "extra-large" | "full" | No | — | Applies a radius preset class (if omitted, no radius class is added). |
| showScrim | boolean | No | false | If true, renders a scrim element behind the sheet. |
| minHeight | string | No | "500px" | Inline height constraint for the content area. Current implementation sets both minHeight and maxHeight to this value. |
Components