The two `<span class="remove">x</span>` glyphs (one per queue item, one per streamer-list item) had no semantic role, no aria-label, no tabindex — entirely mouse-only and screen-readers just announced them as the bare "x" character. Made both fully keyboard-accessible: - role="button" + tabindex="0" so they enter the tab order and read as buttons to AT - aria-label="Remove" / "Entfernen" via new streamers.removeAria locale key (DE + EN) - Keydown handler on Enter + Space synthesizes the same removal callback (mirroring native button behaviour for synthetic buttons — Enter on real buttons fires click, Space does too) - Focus-visible state: 2px red glow ring + force opacity:1 on the streamer-list .remove (which is normally opacity:0 until the streamer-item is hovered) so keyboard navigators can see the focused X Both call sites preserved e.stopPropagation in the keydown handler so Enter on a focused X doesn't bubble up to the row's click handler (which would trigger streamer-select). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| build | ||
| docs | ||
| scripts | ||
| src | ||
| .gitignore | ||
| eslint.config.mjs | ||
| package-lock.json | ||
| package.json | ||
| README_AI_RELEASE.md | ||
| tsconfig.json | ||