Skip to content

Sheet

A panel that slides out from the edge of the screen, useful for displaying additional content or forms.

Usage

import { Sheet } from "@rhinolabs/ui"
export default function SheetDemo() {
return (
<Sheet>
<Sheet.Trigger>Open Sheet</Sheet.Trigger>
<Sheet.Content>
<Sheet.Header>
<Sheet.Title>Edit Profile</Sheet.Title>
<Sheet.Description>
Make changes to your profile here.
</Sheet.Description>
</Sheet.Header>
<div className="grid gap-4 py-4">
<div className="grid grid-cols-4 items-center gap-4">
<label htmlFor="name">Name</label>
<input id="name" className="col-span-3" />
</div>
</div>
<Sheet.Footer>
<Button type="submit">Save changes</Button>
</Sheet.Footer>
</Sheet.Content>
</Sheet>
)
}

Examples

Side Variants

Sheet panels can slide in from different sides.

<div className="grid grid-cols-2 gap-2">
<Sheet>
<Sheet.Trigger asChild>
<Button variant="outline">Left Sheet</Button>
</Sheet.Trigger>
<Sheet.Content side="left">
<Sheet.Header>
<Sheet.Title>Left Panel</Sheet.Title>
<Sheet.Description>
This panel slides in from the left.
</Sheet.Description>
</Sheet.Header>
</Sheet.Content>
</Sheet>
<Sheet>
<Sheet.Trigger asChild>
<Button variant="outline">Top Sheet</Button>
</Sheet.Trigger>
<Sheet.Content side="top">
<Sheet.Header>
<Sheet.Title>Top Panel</Sheet.Title>
<Sheet.Description>
This panel slides in from the top.
</Sheet.Description>
</Sheet.Header>
</Sheet.Content>
</Sheet>
</div>

With Form

Sheet containing a form.

<Sheet>
<Sheet.Trigger asChild>
<Button>Edit Settings</Button>
</Sheet.Trigger>
<Sheet.Content>
<Sheet.Header>
<Sheet.Title>Settings</Sheet.Title>
<Sheet.Description>
Configure your preferences.
</Sheet.Description>
</Sheet.Header>
<form className="grid gap-4 py-4">
<div className="grid grid-cols-4 items-center gap-4">
<label htmlFor="theme">Theme</label>
<select id="theme" className="col-span-3">
<option>Light</option>
<option>Dark</option>
</select>
</div>
<div className="grid grid-cols-4 items-center gap-4">
<label htmlFor="email">Email</label>
<input id="email" type="email" className="col-span-3" />
</div>
</form>
<Sheet.Footer>
<Button type="submit">Save changes</Button>
</Sheet.Footer>
</Sheet.Content>
</Sheet>

Props

SheetContent

PropTypeDefaultDescription
side"top" | "right" | "bottom" | "left""right"Side the sheet appears from
onOpenAutoFocus(event: Event) => void-Focus event handler when sheet opens
onCloseAutoFocus(event: Event) => void-Focus event handler when sheet closes

All components accept their respective Radix UI Dialog primitive props.

Design Considerations

  • Choose appropriate side
  • Maintain content hierarchy
  • Consider mobile viewports
  • Handle form submissions
  • Provide clear actions

Accessibility

  • Manages focus states
  • Supports keyboard navigation
  • Provides ARIA labels
  • Handles escape key
  • Traps focus within sheet