TaskBoard - Accessibility

Reference TaskBoard keyboard, role, focus, live-region, and custom UI responsibilities.

#Roles and Labels

The root renders role="group", an accessible label (Task board by default), and a polite live region for announcements. Columns render role="list" with labels derived from column names and counts. Swimlane rows use nested group semantics with row labels and expanded state.

Card wrappers render role="listitem" and carry data-task-id so focus, scrolling, keyboard navigation, and tests can target the same public surface. Custom column-header content remains responsible for choosing an appropriate heading element or role.

#Keyboard Behavior

KeyRuntime behavior
Arrow keysMove focus across cards, columns, empty columns, and swimlane cells.
Home, EndMove to the first or last card in the current column or swimlane cell.
Tab, Shift TabMove to the next or previous column.
EnterEmits @card-activate for the focused card.
SpaceToggles the focused card when selection is enabled.
Shift Up, Shift DownExtends range selection within the current column or swimlane cell.
Ctrl or Cmd ASelects all cards in the focused column or swimlane cell.
Alt arrow keysReorder within a lane or move the focused card or selected set between columns.
Alt Shift Up, Alt Shift DownMove the focused card or selected set between adjacent swimlanes.
Delete, BackspaceReserved for app-owned controls; no default delete is applied.
EscapeCloses TaskBoard-owned transient state, then clears board selection or focus from the board surface.
Ctrl or Cmd ZUndo local history.
Ctrl or Cmd Y, Ctrl or Cmd Shift ZRedo local history.

Keyboard moves share pointer move validation, mutation, history, audit, and blocked-drop events. Blocked keyboard moves leave data unchanged and emit @card-drop-blocked.

#Custom UI Responsibilities

Application-owned cards, headers, menus, dialogs, toolbar controls, and blocked-action messages need accessible labels, focus order, disabled state, and keyboard support. TaskBoard provides the runtime structure and context, but custom controls must still expose the correct button, menu, input, or dialog semantics.

Board shortcuts are scoped away from nested native controls, links, editable regions, labels tied to enabled form controls, and elements with interactive ARIA roles. If a custom widget is built from generic elements, give it a real interactive role such as button, menuitem, textbox, combobox, listbox, tab, or slider plus focus handling.

Stop propagation only on custom controls that should not trigger card selection, drag, or column-header surface gestures. Keep the rest of the card or header surface available for TaskBoard gestures and keyboard behavior.

#Motion and Contrast

Drag previews, drop indicators, focus rings, selected state, WIP warnings, and blocked-state copy should remain visible in light and dark themes. Respect reduced-motion preferences in product-owned animations around cards or menus.