Sheet
A side-placed overlay panel for navigation, drawers, and contextual actions.This component's API and documentation are under review and may change. Use with caution in production.
A side-placed overlay built on top of Radix Dialog. Sheet inherits accessibility, focus management, overlay behavior, and sizing scales from Dialog, while adding side placement and slide motion suited for navigation panels and drawers.
Playground
Installation
Usage
Anatomy
Sheet is a compound component with the following parts:
Root Props
The Root component manages open state and provides context to child components.
Trigger Props
Element that opens the sheet. Expects a single element child.
Content Props
The panel that slides in from the specified side.
Title Props
Accessible title for the sheet. Renders as a Heading component with sensible defaults.
Description Props
Supplementary description text for sheet content. Renders as a Text component with sensible defaults.
Close Props
Button that closes the sheet. Expects a single element child.
Side
Use the side prop to control where the sheet appears. The left and right values are aliased to start and end for RTL support.
Start (Left)
Default position, slides in from the left side.
End (Right)
Slides in from the right side. Common for detail panels and inspectors.
Top
Slides down from the top. Useful for notifications or dropdowns.
Bottom
Slides up from the bottom. Common for mobile action sheets.
Sizing
Sheet reuses Dialog's sizing system but removes the default maxWidth clamping, allowing sheets to take custom widths.
Fixed Width
Set a specific width for the sheet.
Responsive Width
Use responsive objects for breakpoint-specific widths.
Min/Max Constraints
Control size boundaries.
Material
Use the material prop to set sheet appearance. Choose solid for opaque backgrounds, or translucent for depth and separation over images or dynamic backgrounds.
Theme
Sheets automatically inherit the theme's material setting.
Custom
Override the theme's material for specific effects.
Examples
Navigation Drawer
A common pattern for mobile navigation.
Detail Panel
A right-side panel for showing item details.
Bottom Action Sheet
A mobile-friendly action sheet pattern.
Controlled Sheet
Control the sheet state programmatically.
Accessibility
Sheet provides comprehensive accessibility through Radix Dialog primitives.
Required Label
Always provide an accessible name via Sheet.Title or aria-label on Sheet.Content. A development warning appears if neither is provided.
Keyboard Navigation
- Escape - Closes the sheet
- Tab - Moves focus to next focusable element within sheet
- Shift + Tab - Moves focus to previous focusable element
Focus Management
- Focus is automatically trapped within the sheet when open
- Focus moves to the first focusable element when opened
- Focus returns to the trigger element when closed
Screen Readers
role="dialog"witharia-modal="true"on content- Title associated via
aria-labelledby - Description associated via
aria-describedbywhen present - Overlay prevents interaction with content behind
Changelog
Changed
Sheet.Descriptiondefaults toemphasis="medium"instead ofcolor="gray", keeping its muted lookSheet.Titlenow renders as a Heading component with sensible defaults (size="4",weight="medium")Sheet.Descriptionnow renders as a Text component with sensible defaults (size="2",color="gray")
Added
- Initial Sheet component built on Radix Dialog
- Side placement with RTL-aware aliases (
left→start,right→end) - Slide animation for each side direction
- Material prop for solid/translucent backgrounds
- Responsive width/height support
- Focus management and keyboard navigation
- Development warning for missing accessible name
Deprecated
panelBackgroundprop in favor ofmaterialprop
© 2026 Kushagra Dhawan. Licensed under MIT. GitHub.