Skip to content

a11y: keyboard-accessible move-download-between-packages interaction #134

Description

@coderabbitai

Context

This issue tracks the keyboard-accessible alternative to the pointer-only drag-and-drop interaction introduced in PR #133 for moving downloads between packages in the Packages view.

Related PR: #133
Related review comment: #133 (comment)
Requested by: @mpiton

Problem

The current PackageDownloadRow component uses native HTML5 drag-and-drop (onDragStart) as the only way to move a download from one package to another. This interaction is pointer-only and is not accessible to keyboard-only or assistive-technology users.

The drag shortcut has been intentionally deferred — all other package-level actions (expand/collapse, rename, folder, password, auto-extract, priority, pause-all, start-all, delete) remain keyboard-navigable — but the move action needs a proper alternative interaction model.

Proposed interaction model

  1. Select source row — add a "Move" button (or keyboard-triggered action) on each PackageDownloadRow that marks the download as "selected for move".
  2. Target menu on each package row — when a download is selected for move, surface a "Move to this package…" action on each PackageRow (e.g., via a context menu or an inline button that appears only in move-selection mode).
  3. ARIA semantics — annotate the source row with aria-grabbed="true" (or equivalent role/state), and annotate target rows with aria-dropeffect="move" while a move is in progress.
  4. Live region — add an aria-live="polite" region to announce move start, success, and failure outcomes to screen reader users.

Acceptance criteria

  • Keyboard users can initiate a "move download" action without a pointer device.
  • Appropriate ARIA attributes are applied during the move flow so screen readers announce state changes.
  • A live region announces move start, success, and error outcomes.
  • Existing pointer-based drag-and-drop continues to work unchanged.
  • New keyboard flow is covered by Vitest tests.

Activity

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

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions