Selection, draft, and focus ownership
Preserve user work during adaptation by assigning each piece of interaction state one clear owner.
A view change is safe only when it preserves the user's work. Give each piece of interaction state exactly one owner, and define how it transfers.
Assign each state one owner#
| State | Default owner | Transfer rule |
|---|---|---|
| Filters and sort | Intent/application | Persist across equivalent browse views. |
| Selection | Region using stable identity | Transfer only when the next view supports equivalent identity. |
| Form draft | Form recipe or host, never both | Block or map transitions that would lose dirty values. |
| Focus | Active renderer | Restore the logical control after commit; do not steal focus during typing. |
| Navigation context | Host router plus Region | Retain back context when master-detail becomes stacked navigation. |
Follow one transition#
You filter the ticket list to your team and select ticket t-17. You type half a reply in the wide master-detail layout. Then the container narrows. The filter stays on the intent. Selection survives because both views understand the same stable identity. The dirty draft keeps the wide form's owner, or the transition waits. Focus lands on the same logical field. Back still returns to the filtered list. If any piece cannot map, the narrow switch is deferred rather than destroying work.
Guard risky transitions#
Coalesce resize changes. Defer adaptation during IME composition, active typing, drag, confirmation, or unsafe dirty-draft transitions. If mapping fails, keep the current valid view.
