Drawer
Drawer composes Base UI’s drawer primitives for panels that slide over the current screen.
import { Drawer } from "density-base-ui";
export default function DrawerExample() {
return (
<Drawer
trigger="Open drawer"
title="Filters"
description="Refine visible rows by status, owner, and update time."
actions={[{ label: "Apply filters", emphasis: "primary" }]}
>
<div className="drawer-example-grid">
<span>Status</span>
<strong>Open</strong>
<span>Owner</span>
<strong>Design</strong>
<span>Updated</span>
<strong>Today</strong>
</div>
</Drawer>
);
}Props
| Prop | Attribute | Values | Default |
|---|---|---|---|
trigger |
None | React node | Required |
title, description |
None | React node | None |
children |
None | React node | None |
actions |
None | { label, emphasis? }[] |
Close |
closeLabel |
None | React node | Close |
presentation |
data-dn-presentation |
button |
button |
emphasis |
data-dn-emphasis |
primary, secondary, outline, ghost |
Inherited |
size |
data-dn-size |
2xs, xs, sm, md, lg, xl, 2xl, 3xl |
Inherited |
padding |
data-dn-padding |
none, 2xs, xs, sm, md, lg, xl, 2xl, 3xl |
xl |
popupPresentation |
data-dn-presentation |
overlay |
overlay |
depth |
data-dn-depth |
1, 2, 3, 4, 5, 6, 7 |
1 |
Drawers are right-sided on desktop. Below 768px, every drawer becomes a bottom drawer and can be dismissed by dragging its handle; content remains available for normal scrolling and interaction.
Emphasis
import { Drawer } from "density-base-ui";
import { ExampleRow } from "../ExampleLayout";
export default function DrawerEmphasisExample() {
return (
<ExampleRow>
<Drawer trigger="Primary" emphasis="primary" />
<Drawer trigger="Secondary" emphasis="secondary" />
<Drawer trigger="Outline" emphasis="outline" />
<Drawer trigger="Ghost" emphasis="ghost" />
</ExampleRow>
);
}Size
import { Drawer } from "density-base-ui";
import { ExampleRow } from "../ExampleLayout";
export default function DrawerSizeExample() {
return (
<ExampleRow>
<Drawer trigger="2xs" size="2xs" />
<Drawer trigger="xs" size="xs" />
<Drawer trigger="sm" size="sm" />
<Drawer trigger="md" size="md" />
<Drawer trigger="lg" size="lg" />
<Drawer trigger="xl" size="xl" />
<Drawer trigger="2xl" size="2xl" />
<Drawer trigger="3xl" size="3xl" />
</ExampleRow>
);
}Content
import { Drawer } from "density-base-ui";
export default function DrawerContentExample() {
return (
<Drawer
trigger="Open drawer"
title="Title"
description="Description"
closeLabel="Dismiss"
>
<p>Children content</p>
</Drawer>
);
}Actions
import { Drawer } from "density-base-ui";
export default function DrawerActionsExample() {
return (
<Drawer
trigger="Open drawer"
actions={[{ label: "Later" }, { label: "Save", emphasis: "primary" }]}
/>
);
}Padding
import { Drawer } from "density-base-ui";
import { ExampleRow } from "../ExampleLayout";
export default function DrawerPaddingExample() {
return (
<ExampleRow>
<Drawer trigger="None" padding="none" />
<Drawer trigger="2xs" padding="2xs" />
<Drawer trigger="xs" padding="xs" />
<Drawer trigger="sm" padding="sm" />
<Drawer trigger="md" padding="md" />
<Drawer trigger="lg" padding="lg" />
<Drawer trigger="xl" padding="xl" />
<Drawer trigger="2xl" padding="2xl" />
<Drawer trigger="3xl" padding="3xl" />
</ExampleRow>
);
}Depth
import { Drawer } from "density-base-ui";
import { ExampleRow } from "../ExampleLayout";
export default function DrawerDepthExample() {
return (
<ExampleRow>
<Drawer trigger="Depth 1" depth="1" />
<Drawer trigger="Depth 2" depth="2" />
<Drawer trigger="Depth 3" depth="3" />
<Drawer trigger="Depth 4" depth="4" />
<Drawer trigger="Depth 5" depth="5" />
<Drawer trigger="Depth 6" depth="6" />
<Drawer trigger="Depth 7" depth="7" />
</ExampleRow>
);
}