Sheet
A side-placed overlay panel for navigation, drawers, and contextual actions.View source →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
shellUsage
tsxAnatomy
Sheet is a compound component with the following parts:
tsxRoot 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.
tsxEnd (Right)
Slides in from the right side. Common for detail panels and inspectors.
tsxTop
Slides down from the top. Useful for notifications or dropdowns.
tsxBottom
Slides up from the bottom. Common for mobile action sheets.
tsxSizing
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.
tsxResponsive Width
Use responsive objects for breakpoint-specific widths.
tsxMin/Max Constraints
Control size boundaries.
tsxMaterial
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.
tsxCustom
Override the theme's material for specific effects.
tsxExamples
Navigation Drawer
A common pattern for mobile navigation.
tsxDetail Panel
A right-side panel for showing item details.
tsxBottom Action Sheet
A mobile-friendly action sheet pattern.
tsxControlled Sheet
Control the sheet state programmatically.
tsxAccessibility
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.
tsxKeyboard 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.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