Skip to content

[Bug] Provider Items ship a partial ARIA contract: aria-selected without a role, no keyboard path #613

Description

@johnleider

From the #543 WS4 audit. The provider Item components emit state ARIA that is invalid or inoperable without consumer completion:

  • SelectionItem.vue:104, SingleItem.vue:104, StepItem.vue:104 emit aria-selected with no role — the attr is only valid on option/tab/row/gridcell/treeitem, so it is ignored as emitted.
  • All four Item families bind onClick but no tabindex/onKeydown (GroupItem.vue:118-126, SelectionItem.vue:103-108, SingleItem.vue:103-108, StepItem.vue:103-108) — keyboard users can't operate them unless the consumer adds the missing half.
  • StepRoot exposes first/last/next/prev/step in slot props (StepRoot.vue:100-104) but nothing wires roving tabindex or arrow keys (useRovingFocus exists but isn't composed).

Design decision needed: either (a) complete the contract where the role is knowable (GroupItem is role=checkbox — tabindex+Space is a safe ~8 LOC addition), (b) document role+keyboard as a required consumer step for the role-agnostic families, or (c) accept a role prop that unlocks the full wiring. GroupRoot.vue:116 / SelectionRoot.vue:105 also emit aria-multiselectable on role-less containers (low).

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions