Components
Save feedback and sticky actions
Keep the save action reachable in long editors and acknowledge confirmed operations without hiding their result.
On this page
Purpose and placement
Keep the save action reachable in long editors and acknowledge confirmed operations without hiding their result.
Anatomy
| Part | Behavior |
|---|---|
| Inline action | Primary submit action near the form end. |
| Sticky save bar | Appears when the inline target leaves view. |
| Save notice | Acknowledges an actual saved result supplied by the host. |
Configuration and contract
| Input or decision | Implementation |
|---|---|
| StickySaveBar | formId, targetId and label; IntersectionObserver controls visibility. |
| Geometry | Desktop offset coordinates with 15.75rem sidebar; phone spans available width. |
| SaveStatusNotice | saved boolean supplied from the route result context. |
States and feedback
- Long story forms and local saved-notice specimen.
- Pending and failed save must remain distinguishable from idle.
- Sticky action should not duplicate an obscuring overlay when the inline action is visible.
Usage rules
- Submit the intended form by stable ID.
- Do not emit Saved when only the local field changed.
- Review the bar against the last field and footer at each breakpoint.
Accessibility and verification
Check focus order, busy/disabled states and announcement of confirmed save. A sticky bar must not cover the focused field at zoom.
Source references
| File | Responsibility |
|---|---|
| components/admin/sticky-save-bar.tsx | Audited Townwell implementation; use this file when extending this interface. |
| components/admin/save-status-notice.tsx | Audited Townwell implementation; use this file when extending this interface. |
Examples from the app
Actual Boise Today and Townwell UI with synthetic editorial, business, review, media metadata and analytics. Existing Boise imagery; no live data changes. Captured at 2× resolution or higher. Select an image to inspect it full size.
Related topics
Source audit: 2026-10-07 · Revision ce8bc72b96da · Documentation v0.1