Skip to content

Sidebar thread row actions are unreachable with screen readers #13959

Description

@akj

Follow-up to #13491 and #13910.

What happened

In NVDA browse mode, the sidebar thread list is not announced as a list, and the Snooze and Settle buttons on each row cannot be reached. Before #13491, NVDA reached them.

Diagnosis

Each thread row is a <div role="button"> with real buttons nested inside it: Snooze, Settle, Un-settle, Wake, Unpin, Dismiss Woke, and the PR badge. Draft rows nest Discard.

Whether VoiceOver makes users interact with a list depends on their web navigation setting. Lists require interaction under "Grouping items" but not under "DOM order" (Apple).

Steps to reproduce

  1. On Windows, run NVDA and open T3 Code (desktop, or web in Chrome or Firefox).
  2. In browse mode, press L to move to the thread list.
  3. Arrow through an active thread row.

Environment

main @ de251fc, Windows 11, latest stable NVDA and Chrome.

Workaround

The row's context menu (Applications key) includes Settle, Snooze, and Pin.

Proposed fix

Give each row one native button that opens the thread, named by its title. Put the row actions in the same <li> as siblings of that button, not inside it, and keep role="list". The button fills the row behind its content, so nothing changes visually: layout, colors, and the focus ring match main in Chromium.

In Sarah Higley's secondary actions study, buttons placed next to a tab worked in JAWS, NVDA, and VoiceOver. The same buttons nested inside the tab failed.

Branch: akj:fix/sidebar-row-sibling-actions (diff). It is verified with NVDA. Before a PR, it needs VoiceOver checks on macOS in Safari and Chrome, under both DOM order and Grouping items navigation.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is broken or behaving incorrectly.via-triageFiled through npx t3 triage

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions