Save status
Save feedback for state the host already knows.
State and label contract
Use .save-status[data-save-state] for a stable text line beside an editor’s controls. The host owns the state and visible wording. The CSS hook never observes an input, request, fetch result or clock.
| Host state | Default label | Meaning |
|---|---|---|
ready | Ready | No claim of a newly confirmed save. |
dirty | Unsaved changes | Current edits are not confirmed saved. |
saving | Saving… | The host says a save is pending. |
saved | Draft saved | The host confirmed the stated save scope. |
failed | Couldn’t save draft | The host reported a rejection or failure. |
unknown | Save not confirmed | The host cannot confirm the save outcome. |
Use the exact scope in a success label. For example, if text saved but rules or collaborators remain pending, show Text saved and put Rules and collaborators still need saving. in a separate supporting element inside the same status region so both messages are announced together. Do not claim the whole draft is saved.
Markup
<div class="cluster items-baseline">
<button
type="button"
>
Done editing
</button>
<div role="status"
aria-atomic="true">
<p
class="save-status"
data-save-status
data-save-state="saved"
>
Text saved
</p>
<p>Rules and collaborators
still need saving.</p>
</div>
</div>
<p>
Publishing and editing
completion are separate
actions.
</p>
The component supplies no layout. The host places the text line beside its own controls. Add items-baseline to a flex parent such as cluster when the status should share a text baseline with adjacent buttons or text. role="status" supplies a polite status region containing the short label and essential supporting feedback; retain one region for each independent editor and do not mirror the same event in a second live region.
State and announcement ownership
- Update the state and visible label together from the host’s explicit result. Never derive state from the label text, fetch completion or a timeout.
- Keep the status element at a stable DOM location. Do not move focus to it.
- Announce meaningful state transitions, not every keystroke. The host should set dirty once when the editor first becomes dirty, not on each input event.
- Color reinforces the words. The labels remain meaningful when colors are unavailable or overridden in forced-colors mode.
- Keep recovery instructions outside the short status line. Keep retry, reload, publish and Done editing controls outside the status region.
- A saved draft is neither published nor necessarily finished being edited.
Downstream ownership
Templ #21 may adopt this text and state hook in a later change; its component markup should not bake in layout primitives. Baseplate #1203 remains responsible for autosave protocol, request identity, races, persistence, errors and scope. Live Wires does not duplicate those responsibilities. This manual and its reference simulation are presentation examples, not a production save implementation.
Reference simulation
Open the Save Status reference to inspect all states and deterministic simulated scenarios in inherited, light and dark color schemes.
Hardware loaders
Loader variants and markup work inline with the existing status text.
Saving…