Async Region
Async Region base prototype
base-async-region-root is a narrow async accessibility primitive that projects governed aria-busy state and exposes the busy handle.
It owns a single busy prop (default false) that projects aria-busy and is exposed as the sole state handle:
busy=false(default) projectsaria-busy=falsebusy=trueprojectsaria-busy=true
Authored descendants and focus are preserved on prop-only transitions. The prototype declares no role, accessible name, loading timers, replacement state machine, announcements, action, event, command, or chat semantics.
Current v0 Boundary
Section titled “Current v0 Boundary”base-async-region-root currently includes:
- governed aria-busy projection from the busy prop
- busy state handle exposed via
getExposes().busy - mounted prop transitions that update aria-busy and the expose handle synchronously
- authored descendant and focus preservation across prop transitions
It does not include:
- role or accessible-name projection
- loading timers or replacement state machines
- announcement behavior (compose with Live Region at the application layer)
- action, event, command, or chat semantics
References
Section titled “References”- Contract: C-ASYNC-A11Y-0001
- Source: packages/prototypes/base/src/async-region
- Test: async-region.test.ts