Same content, three shells. Dialog feels disconnected from the triggering data; Sheet preserves spatial proximity to the row/item that opened it; Drawer is the full-height mobile action-sheet equivalent.
Centered, floats above everything. Use when the task has no relationship to a specific item on the page.
Slides in from the edge, partial overlap — the list stays visible behind it.
Full-width, rises from the bottom. The default overlay shell on small viewports.
Primary action stays disabled until required fields are valid, not clickable-then-erroring.
Whole form disables while the save is in flight — not just the button that was clicked.
Input stays editable and the entered value is preserved — a failed save never discards what the user typed.