| State type | Questions to ask | Button example |
|---|---|---|
| Availability | Can the user use it now? | Enabled, disabled, loading. |
| Interaction | What is happening under pointer or keyboard? | Hover, focus, pressed. |
| Selection | Is it currently chosen or toggled? | Selected, unselected, aria-pressed. |
| Validation | Is something wrong, successful, or incomplete? | Error, success, warning. |
| Permission | Is this hidden, visible, blocked, or explainable? | Upgrade required, read-only, unavailable. |
| Async | What happens while work is pending? | Submitting, retrying, optimistic update. |
Rule of thumb
If a state changes what the user can do, understand, or recover from, it is part of the component contract.