Skip to content

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

@coderabbitai

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.

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions