Skip to content

Hand-built interactive surfaces are keyboard-operable and correctly labeled #122

Description

@Azganoth

Summary

Leafdown's four hand-built interactive surfaces — the command menu bar, the custom titlebar, the editor context popup, and the article navigator — are not fully operable by keyboard, and several expose incorrect or missing semantics to assistive technology. This issue tracks bringing all four to a state where every control is reachable, operable, and correctly announced.

They form one piece of work because they share a documentation plan, a set of files that more than one of them modifies, and a single group-level verification pass. Each remains independently actionable and delivers value on its own.

Scope

  • Included:
    • The command menu bar (CommandMenuBar.tsx) and its host in Shell.tsx
    • The custom titlebar (TitleBar.tsx) and the window controls injected by tauri-plugin-frame
    • The editor context popup (EditorContextPopup.tsx) and the ProseMirror plugin that drives it
    • The article navigator (ArticleNavigator.tsx) and the shared VirtualList it renders through
  • Out of scope:
    • Radix primitives in src/components/ui/, except where a wrapper breaks behavior Radix otherwise provides
    • Color contrast and the App.css color tokens
    • A stated WCAG conformance target, automated accessibility checks in CI, or a screen reader test matrix

Shared decisions

  • Accessibility documentation is integrated into the existing documents rather than a new docs/accessibility.md. Key bindings and semantics stay in the files that already own them — decisions.md, specification.md, architecture.md, patterns.md, and reference.md. A dedicated document would only earn its place alongside a conformance story, which is out of scope here.
  • Visible focus is a general rule, not a per-surface fix. The rule landing in patterns.md applies to any control introduced by the later sub-issues, including the article navigator's rewritten rows.

Sequencing

Genuine dependency:

Shared files with no hard ordering, to coordinate rather than serialize:

Recommended ordering, not a constraint: #118#119#120#121. #118 is pure presentation and tab order with no dependencies. #121 is the largest and the most conflict-prone.

Related context

  • Prior investigation or origin: a read-only accessibility review of the four hand-built interactive surfaces. Focus and tab-order findings were verified in a running build; the remainder were verified against application and dependency sources.
  • Related issues or pull requests outside this group: none.

Done when

  • All four sub-issues are complete.
  • Accepted shared decisions are reflected in the owning documentation.
  • A keyboard-only pass over the four surfaces confirms every control is reachable, operable, and shows a visible focus indicator.

Notes

Metadata

Metadata

Assignees

Labels

TrackingCoordination work for a bounded outcome delivered through sub-issues

Projects

Status
Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions