docs / state
State and lifecycle
Choose controlled or uncontrolled state without mixing contracts.
Open state
Use defaultOpen when the sheet owns its state. Use open with onOpenChange when routing, a form, or another component needs to know whether the sheet is open.
The callback includes a reason such as trigger, close, Escape, backdrop, drag, or imperative change. Controlled props remain authoritative: update state in the callback or the visible state will not change.
Snap state
Name destinations after meaning rather than height. Pair activeSnapPoint with onSnapPointChange when the application needs to coordinate compact and expanded layouts.