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).
From the #543 WS4 audit. The provider Item components emit state ARIA that is invalid or inoperable without consumer completion:
aria-selectedwith no role — the attr is only valid on option/tab/row/gridcell/treeitem, so it is ignored as emitted.onClickbut notabindex/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.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).