A11Y: search scope and Include subfolders controls cannot be reached with the keyboard #742

Open
opened 2026-10-02 13:08:10 +00:00 by kayg · 2 comments
Owner

Source audit from rev-a11y (#427), base c4a61e8cf090170f35b1bed3350d9de20c83ecd5. No product changes or production build were made.

A3 — Search scope and subfolder controls have no keyboard route

Priority: P1. Family: search filter chips. Tracking: this issue.
Criterion: 2.1.1 Keyboard.

Evidence:

  • apps/web/src/lib/search/SearchField.svelte:276: the Ask context removal
    button has tabindex="-1".
  • apps/web/src/lib/search/SearchField.svelte:282: the Calendar scope
    removal button has tabindex="-1".
  • apps/web/src/lib/search/SearchField.svelte:295: Include subfolders has
    tabindex="-1". Its click handler is the only UI call to setSubfolders().
  • apps/web/src/lib/search/SearchField.svelte:182: the chip key handler
    can select, remove or edit ordinary pills. It cannot focus or activate
    these nested controls or clear the separate Calendar/Ask scope chips.

Effect: a keyboard User cannot use the visible Include subfolders action
or remove those scope chips through their controls.

Fix: give the controls real Tab stops, or extend the shared chip keyboard
model to reach and activate every action. Preserve the typed query. Give
the active control visible focus and announce changes once.

Test: open scoped search with a keyboard. Toggle Include subfolders with
Space, clear Calendar scope, and clear Ask context. Check the result scope
and query without pointer input.

Duplicate check: searched all-state Forgejo issues for subfolders and accessibility. #63 describes scoped search, not keyboard access to these controls.

Use the existing component and tests. Check phone (390 px), tablet (820 px) and desktop (1440 px), light and dark, with macOS shortcut rendering. Keep keyboard and pointer motion durations equal; retain reduced-motion support.

Source audit from rev-a11y (#427), base `c4a61e8cf090170f35b1bed3350d9de20c83ecd5`. No product changes or production build were made. ### A3 — Search scope and subfolder controls have no keyboard route Priority: P1. Family: search filter chips. Tracking: this issue. Criterion: 2.1.1 Keyboard. Evidence: - `apps/web/src/lib/search/SearchField.svelte:276`: the Ask context removal button has `tabindex="-1"`. - `apps/web/src/lib/search/SearchField.svelte:282`: the Calendar scope removal button has `tabindex="-1"`. - `apps/web/src/lib/search/SearchField.svelte:295`: Include subfolders has `tabindex="-1"`. Its click handler is the only UI call to `setSubfolders()`. - `apps/web/src/lib/search/SearchField.svelte:182`: the chip key handler can select, remove or edit ordinary pills. It cannot focus or activate these nested controls or clear the separate Calendar/Ask scope chips. Effect: a keyboard User cannot use the visible Include subfolders action or remove those scope chips through their controls. Fix: give the controls real Tab stops, or extend the shared chip keyboard model to reach and activate every action. Preserve the typed query. Give the active control visible focus and announce changes once. Test: open scoped search with a keyboard. Toggle Include subfolders with Space, clear Calendar scope, and clear Ask context. Check the result scope and query without pointer input. Duplicate check: searched all-state Forgejo issues for subfolders and accessibility. #63 describes scoped search, not keyboard access to these controls. Use the existing component and tests. Check phone (390 px), tablet (820 px) and desktop (1440 px), light and dark, with macOS shortcut rendering. Keep keyboard and pointer motion durations equal; retain reduced-motion support.
Author
Owner

Additional source check: the visible orphan-coverage toggle is also removed from the Tab order alongside Calendar/Ask clear and in: subfolder controls. I will include it in the keyboard activation coverage and keep the typed query unchanged.

Additional source check: the visible orphan-coverage toggle is also removed from the Tab order alongside Calendar/Ask clear and `in:` subfolder controls. I will include it in the keyboard activation coverage and keep the typed query unchanged.
Author
Owner

Fixed Search scope keyboard access on job/undo-a11y at 539cad033. Calendar scope, Ask context, Include subfolders, and orphan coverage controls are native Tab stops; coarse pointers get 44 px buttons. Added component regressions for focusability, activation, query preservation, and a single status announcement. bun run test -- src/lib/search/SearchField.svelte.test.ts: 2 passed. The full web gates and production screenshot matrix remain in the final verification pass.

Fixed Search scope keyboard access on `job/undo-a11y` at `539cad033`. Calendar scope, Ask context, Include subfolders, and orphan coverage controls are native Tab stops; coarse pointers get 44 px buttons. Added component regressions for focusability, activation, query preservation, and a single status announcement. `bun run test -- src/lib/search/SearchField.svelte.test.ts`: 2 passed. The full web gates and production screenshot matrix remain in the final verification pass.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal#742
No description provided.