Sheet
Slide-in panel anchored to any edge of the viewport, for filters, navigation, and detail views.
Basic
Sheet title
Use this space for supplementary content that benefits from edge anchoring.
Placement
placement sets the anchor edge and matching slide animation. Left and right sheets fill the viewport height; top and bottom fill the width.
Left drawer
Slides in from the left edge, full viewport height. Good for primary navigation.
Right panel
Slides in from the right edge, full viewport height. Good for filters and detail views.
Top sheet
Slides down from the top edge, full viewport width. Good for command palettes and notifications.
Bottom sheet
Slides up from the bottom edge, full viewport width. Good for mobile-style actions.
Sizing
Use class to set the perpendicular dimension. Tailwind sizing utilities like w-80, w-[28rem], or max-w-xl all work.
Compact
320px wide. Suits short forms or quick actions where vertical space matters more.
Comfortable
448px wide. A balanced default for filter panels, detail views, and edit forms.
Wide
Up to 576px, capped by max-w-xl. Use for richer layouts that need breathing room.
Custom backdrop
backdrop_class overrides the default scrim with tinted overlays, frosted glass, or a lighter dim when stacking on already-darkened content.
Tinted overlay
A coloured backdrop reinforces the surface behind the sheet, useful for branded flows.
Frosted glass
Combine a low-opacity scrim with backdrop-blur for an iOS-style frosted feel.
Subtle dim
A light dim keeps the page readable behind the sheet. Good for non-modal supplementary content.
Custom close control
Set hide_close_button to drop the built-in close glyph and provide your own dismissal in the body or footer.
Confirm changes
Review the summary below, then choose Confirm or Cancel.
Disable dismissal shortcuts
Turn off close_on_esc and close_on_outside_click when the sheet hosts nested controls like code editors, video players, or drag interactions where Escape or backdrop clicks would conflict.
Focused workspace
Escape and backdrop clicks are disabled. Use the close button in the corner to dismiss.
Prevent closing
prevent_closing disables every client-side dismissal: Escape, backdrop click, and the built-in close button. The sheet only closes from the server, or by flipping a bound open assign.
Finish setup
Complete this step before continuing. The only way out is the button below.
Loading state
Render the loading visual as the sheet's default content so it shows the moment the dialog opens; the server swaps in real content when ready.
Loading customer details
Fetching profile data...
Streaming profile
connectedDynamic content per trigger
Multiple buttons open the same sheet, each pushing a different load event so the server decides what to render. Pair open_dialog with JS.push in the click handler, and use on_close to reset the context.
Form submission with validation
Form bound to a LiveView changeset. phx-change validates on every keystroke; phx-submit closes the sheet on success and shows field-level errors otherwise.
Two-column workflow
Wide sheet with a scrollable form on one side and a sticky summary sidebar on the other. Fits checkout, export, and shipping flows.
Server-driven close
Lock down dismissal with prevent_closing and let the server close the sheet once the workflow finishes.
Export workspace
Esc, backdrop click, and the close button are disabled while the export runs. The server closes the sheet when it finishes.
Sticky header and footer
Lay the sheet out as a flex column with flex flex-col, then mark the header and footer as shrink-0 and let the middle region scroll with flex-1 overflow-y-auto.
Workspace settings
Adjust how this workspace behaves.
Navigation drawer
A left-anchored sheet is the canonical app menu. Pair it with a hamburger trigger so navigation collapses neatly on small screens.
Notification panel
Top-anchored sheets are full width by default. Wrap the body in max-w-* mx-auto to keep content readable on wide displays.
Notifications
-
Deployment succeededmain shipped to production 4 minutes ago.
-
Weekly digest is ready12 new comments and 3 mentions this week.
-
Trial ends in 3 daysAdd a payment method to keep your workspace.
Mobile action sheet
A bottom sheet with rounded-t-xl mirrors the iOS and Android action-sheet pattern. Group the actions semantically: primary actions first, destructive actions on their own surface, and a Cancel that stands clearly apart.
Stacked with a modal
Sheets and modals share the same stacking system, so opening a modal on top of a sheet works without extra wiring. Focus, keyboard, and outside-click handling always belong to the topmost dialog.
Edit user
You have unsaved changes.
Discard changes?
Your edits will be lost. This cannot be undone.