feat(a11y): screen-reader announcements for call events (#168)
CI / Build & Quality Checks (push) Canceled after 0s
CI / Trigger Desktop Build (push) Canceled after 0s
CI / Secret scan (gitleaks) (push) Canceled after 0s
CI / Docker image build & smoke test (push) Canceled after 0s
CI / Playwright smoke (e2e) (push) Canceled after 0s

A visually hidden aria-live=polite region (rendered by CallEmbedProvider so it
outlives the embed) announces joins/leaves — batched over 1.5 s: 'alice
joined', 'alice and bob joined', '3 people joined' — your own mute/unmute,
deafen/undeafen and screenshare start/stop, and 'Call ended'. Nothing visible,
nothing audible for anyone else, no setting. Verified headless by observing
the region: bob joined → You are muted → … → bob left → Call ended.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
This commit is contained in:
2026-09-19 12:55:01 -04:00
co-authored by Claude Opus 5
parent 84c906fe33
commit 2e7915d086
3 changed files with 151 additions and 0 deletions
+8
View File
@@ -0,0 +1,8 @@
import { atom } from 'jotai';
/**
* [Gitea #168] Latest screen-reader-only call announcement ("alice joined",
* "You are muted", "Call ended"). Rendered by CallEmbedProvider in an
* aria-live region that outlives the call embed, so "Call ended" is heard.
*/
export const callAnnouncementAtom = atom<string>('');