@progress/wct-a11y-spec
Version:
Contains accessibility and keyboard navigation specification of Telerik and Kendo web components.
398 lines • 16.5 kB
JSON
[
{
"h2": "Accessibility Support"
},
{
"p": "Out of the box, the Telerik and Kendo UI ComboBox provides extensive accessibility support and enables users with disabilities to acquire complete control over its features."
},
{
"p": "The ComboBox is compliant with the [Web Content Accessibility Guidelines (WCAG) 2.2 standards](https://www.w3.org/TR/WCAG22/) and [Section 508](http://www.section508.gov/) requirements, follows the [Web Accessibility Initiative - Accessible Rich Internet Applications (WAI-ARIA)](https://www.w3.org/WAI/ARIA/apg/) best practices for implementing the [keyboard navigation](#keyboard-navigation) for its `component` role, provides options for [managing its focus](#managing-the-focus) and is tested against the most popular [screen readers](#screen-readers)."
},
{
"h3": "WAI-ARIA"
},
{
"p": "This section lists the selectors, attributes, and behavior patterns supported by the component and its composite elements, if any."
},
{
"h4": "ComboBox Wrapping Element"
},
{
"p": "The following table summarizes the selectors and attributes supported by the ComboBox wrapper element:"
},
{
"table": {
"headers": [
"Selector",
"Attribute",
"Usage"
],
"rows": [
{
"Selector": "`.k-input-inner`",
"Attribute": "`role=combobox`",
"Usage": "Announces the presence of a combobox as an inner element of the combobox used for filtering."
},
{
"Selector": "",
"Attribute": "`label for` or `aria-label` or `aria-labelledby`",
"Usage": "The input requires an accessible name that will be assigned to it."
},
{
"Selector": "",
"Attribute": "`aria-haspopup=listbox`",
"Usage": "Indicates that the component has a listbox popup."
},
{
"Selector": "",
"Attribute": "`aria-expanded=true/false`",
"Usage": "Announces the visibility state of the popup."
},
{
"Selector": "",
"Attribute": "`aria-controls=.k-list-ul id`",
"Usage": "Points to the listbox element. Signifies that the `combobox` controls the `listbox` element."
},
{
"Selector": "",
"Attribute": "`aria-activedescendant=.k-list-item.k-focus id`",
"Usage": "Points to the focused item in the popup. The focused item is changed through keyboard navigation. If the popup is not visible, the attribute must not point to any element or must be removed."
},
{
"Selector": "",
"Attribute": "`aria-autocomplete=list`",
"Usage": "When filtering is enabled, the attribute is rendered and the value is set to `list`."
},
{
"Selector": "",
"Attribute": "`aria-autocomplete=both`",
"Usage": "When both the filtering and the suggest featutres are enabled, the attribute is rendered and the value is set to `both`."
},
{
"Selector": "",
"Attribute": "`aria-autocomplete=inline`",
"Usage": "When the suggest feature is enabled, the attribute is rendered and the value is set to `inline`."
},
{
"Selector": "",
"Attribute": "`readonly=readonly` or `aria-readonly=true`",
"Usage": "The attribute is rendered only when the ComboBox is read-only."
},
{
"Selector": "",
"Attribute": "`aria-busy=true`",
"Usage": "The attribute is rendered only when the ComboBox is loading data."
},
{
"Selector": "",
"Attribute": "`tabindex=0`",
"Usage": "The element must be focusable."
},
{
"Selector": "`.k-invalid .k-input-inner,.ng-invalid .k-input-inner`",
"Attribute": "`aria-invalid=true`",
"Usage": "The attribute is rendered only when the ComboBox is in a form, and announces the valid state of the component."
},
{
"Selector": "`.k-disabled .k-input-inner`",
"Attribute": "`disabled=disabled` or `aria-disabled=true`",
"Usage": "The attribute is rendered only when the ComboBox is disabled."
},
{
"Selector": "`.k-input-button`",
"Attribute": "`role=button` or `nodeName=button`",
"Usage": "The element must either be a `<button>` element or must have the `role=\"button\"` assigned."
},
{
"Selector": "",
"Attribute": "`aria-label`",
"Usage": "The button element must have discernible text."
},
{
"Selector": "",
"Attribute": "`tabindex=-1`",
"Usage": "The button element must not be focusable."
},
{
"Selector": "`.k-combobox.k-disabled .k-button`",
"Attribute": "`disabled` or `aria-disabled=true`",
"Usage": "Attribute is rendered only when the picker is disabled."
}
]
}
},
{
"h4": "Popup Listbox"
},
{
"p": "The popup element of the ComboBox has to implement the WAI-ARIA specification for a Popup List component. The following table summarizes the selectors and attributes supported by the listbox popup of the ComboBox:"
},
{
"table": {
"headers": [
"Selector",
"Attribute",
"Usage"
],
"rows": [
{
"Selector": "`.k-animation-container`",
"Attribute": "`role=region`",
"Usage": "When the component container is appended to the `<body>` element of the document, it requires you to assing a `landmark` role to it. Otherwise, append it to an element with an appropriate `landmark` role."
},
{
"Selector": "",
"Attribute": "`aria-label` or `aria-labelledby`",
"Usage": "When the container has a `region` role assigned, povides a label."
},
{
"Selector": "`.k-list .k-no-data`",
"Attribute": "`aria-live=polite`",
"Usage": "Identifies the element as a live region in the `polite` state, meaning assistive technology users are informed about changes to the region at the next available opportunity."
},
{
"Selector": "`.k-list-ul`",
"Attribute": "`role=listbox`",
"Usage": "Identifies the `ul` element as a listbox."
},
{
"Selector": "",
"Attribute": "`aria-label` or `aria-labelledby`",
"Usage": " Provides a label for the listbox of the ComboBox."
},
{
"Selector": "`.k-list-item`",
"Attribute": "`role=option`",
"Usage": "Identifies the `li` element as a listbox option."
},
{
"Selector": "",
"Attribute": "`id`",
"Usage": "When grouped, the list items must have an `id` attribute specified, so that the \"aria-owns\" attribute of their group header elements (with `role=group`) point to that ids."
},
{
"Selector": "",
"Attribute": "`aria-describedby`",
"Usage": "When grouped, the list items must have an \"aria-describedby\" attribute pointing to the id of the `k-list-item-text` element in their `k-list-group-item`."
},
{
"Selector": "`.k-list-item.k-selected`",
"Attribute": "`aria-selected=true`",
"Usage": "Indicates the selected state of the item."
},
{
"Selector": "`.k-list-group-item`",
"Attribute": "`role=group`",
"Usage": "The group elements in the popup list must be have `role=group`."
},
{
"Selector": "",
"Attribute": "`aria-owns`",
"Usage": "The group elements in the popup list must own the list items belonging to their group."
},
{
"Selector": "`.k-list-group-item>.k-list-item-text`",
"Attribute": "`id`",
"Usage": "The `k-list-item-text` elements of the `k-list-group-item` must have an id specified. The `aria-labelledby` attribute of the list items in the group must point to that id."
}
]
}
},
{
"h4": "Adaptive Mode"
},
{
"p": "When the component is in adaptive mode, the popup element follows the specifications of the ActionSheet component."
},
{
"link": {
"title": "ActionSheet accessibility specification",
"source": "{{actionsheet_a11y_link}}"
}
},
{
"h3": "Keyboard Shortcuts"
},
{
"p": "This section lists the keyboard shortcuts supported by the ComboBox composite elements."
},
{
"h4": "ComboBox Wrapping Element"
},
{
"p": "The following table summarizes the keyboard combinations and input behavior supported by the ComboBox wrapper element:"
},
{
"table": {
"headers": [
"Shortcut",
"Behavior"
],
"rows": [
{
"Shortcut": "Typing in the input",
"Behavior": "Focuses the matched item."
},
{
"Shortcut": "`Down Arrow`",
"Behavior": "Highlights the next available item."
},
{
"Shortcut": "`Up Arrow`",
"Behavior": "Highlights the previous available item."
},
{
"Shortcut": "`Enter`",
"Behavior": "Selects the focused item."
},
{
"Shortcut": "`Alt` (or `Opt` on Mac) + `Down`",
"Behavior": "Opens the popup."
},
{
"Shortcut": "`Alt` (or `Opt` on Mac) + `Up` or `Esc`",
"Behavior": "Closes the popup."
},
{
"Shortcut": "`Esc`",
"Behavior": "If the popup is not visible, clears the value."
}
]
}
},
{
"h4": "Listbox Popup"
},
{
"p": "The popup element of the ComboBox has to implement the keyboard navigation specification for a Popup List component."
},
{
"table": {
"headers": [
"Shortcut",
"Behavior"
],
"rows": [
{
"Shortcut": "`Down Arrow`",
"Behavior": "Moves the focus to the next item."
},
{
"Shortcut": "`Up Arrow`",
"Behavior": "Moves the focus to the previous item."
},
{
"Shortcut": "`Alt` (or `Opt` on Mac) + `Up Arrow` or `Esc`",
"Behavior": "Closes the popup."
},
{
"Shortcut": "`Home`",
"Behavior": "Moves the focus to the first item. Applicable only when the currently focused element is not an input. When an input is the focused element, the `Home` and `End` keys are used for the cursor position."
},
{
"Shortcut": "`End`",
"Behavior": "Moves the focus to the last item. Applicable only when the currently focused element is not an input. When an input is the focused element, the `Home` and `End` keys are used for the cursor position."
},
{
"Shortcut": "`Enter`",
"Behavior": "Initiates item click."
},
{
"Shortcut": "`Page Up`",
"Behavior": "Scrolls the popup list up."
},
{
"Shortcut": "`Page Down`",
"Behavior": "Scrolls the popup list down."
},
{
"Shortcut": "`Tab`",
"Behavior": "Closes the popup and focuses the next focusable element."
}
]
}
},
{
"h4": "ActionSheet Popup"
},
{
"p": "In adaptive mode, the popup element of the ComboBox has to implement the keyboard navigation specification for an ActionSheet component."
},
{
"link": {
"title": "ActionSheet specification",
"source": "{{actionsheet_kb_link}}"
}
},
{
"h3": "Testing"
},
{
"p": "The ComboBox has been extensively tested automatically with [axe-core](https://github.com/dequelabs/axe-core) and manually with the most popular screen readers."
},
{
"h3": "Screen Readers"
},
{
"p": "The ComboBox has been tested with the following screen readers and browsers combinations:"
},
{
"table": {
"headers": [
"Environment",
"Tool"
],
"rows": [
[
"Firefox",
"NVDA"
],
[
"Chrome",
"JAWS"
],
[
"Microsoft Edge",
"JAWS"
]
]
}
},
{
"h3": "Resources"
},
{
"ul": [
{
"link": {
"source": "https://www.w3.org/WAI/ARIA/apg/example-index/combobox/combobox-autocomplete-both.html",
"title": "WAI-ARIA Authoring Practices: Editable Combobox With Both List and Inline Autocomplete Example"
}
},
{
"link": {
"source": "https://www.w3.org/WAI/ARIA/apg/example-index/combobox/combobox-autocomplete-list.html",
"title": "WAI-ARIA Authoring Practices: Editable Combobox With List Autocomplete Example"
}
},
{
"link": {
"source": "https://www.w3.org/WAI/ARIA/apg/patterns/combobox/",
"title": "WAI-ARIA Authoring Practices: Combobox Pattern "
}
},
{
"link": {
"source": "https://www.w3.org/WAI/ARIA/apg/patterns/listbox/",
"title": "WAI-ARIA Authoring Practices: Listbox Pattern"
}
},
{
"link": {
"source": "https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-autocomplete-none/",
"title": "WAI-ARIA Authoring Practices: Editable Combobox"
}
}
]
}
]