Библиотека aria-query является инструментом для работы с ARIA-ролями в JavaScript. Она предоставляет наборы данных и утилит для проверки соответствия элементов ARIA-спецификациям, определения свойств и состояний ролей, а также поддержки семантической доступности веб-компонентов. Одним из ключевых понятий является виджет-роли (widget roles), которые определяют интерактивные элементы интерфейса, такие как кнопки, ползунки, вкладки и меню.
В ARIA роли делятся на несколько категорий, и виджет-роли относятся к интерактивным элементам управления. Основные характеристики виджет-ролей:
button, slider,
tab).aria-checked, aria-expanded,
aria-selected) для описания динамического поведения.Примеры виджет-ролей:
buttoncheckboxradioslidertabmenuitemcomboboxgridcellБиблиотека предоставляет объекты roles и
elementRoles.
rolesroles — это коллекция всех ARIA-ролей, включая виджеты,
с их свойствами:
import { roles } from 'aria-query';
const buttonRole = roles.get('button');
console.log(buttonRole);
Вывод содержит:
name — имя роли;abstract — является ли роль абстрактной (не
предназначена для прямого использования);superClass — родительские роли;props — свойства, которые поддерживает роль;requiredProps — обязательные свойства;supportedProps — поддерживаемые состояния и свойства
(aria-disabled, aria-expanded и др.).elementRoleselementRoles связывает HTML-элементы с их возможными
ARIA-ролями:
import { elementRoles } from 'aria-query';
const rolesForButton = elementRoles.get('button');
console.log(rolesForButton);
Результат — Set ролей, которые могут быть присвоены
элементу button. Для виджет-ролей это важно для проверки
соответствия спецификации и обеспечения доступности.
Виджет-ролям присущи специфические ARIA-свойства и состояния:
Состояния выбора и проверки:
aria-checked для checkbox и
radioaria-selected для tab или
gridcellСостояния раскрытия/сворачивания:
aria-expanded для menu,
combobox и treeСостояния доступности:
aria-disabled — указывает на недоступность виджетаaria-readonly — для полей вводаИспользование библиотеки позволяет получить подробный список свойств для каждой роли:
const sliderRole = roles.get('slider');
console.log(sliderRole.props);
Каждое свойство отображается с типом, возможными значениями и областью применения.
Для динамических компонентов важно определить, какой HTML-элемент соответствует роли виджета:
import { elementRoles } from 'aria-query';
const divRoles = elementRoles.get('div');
console.log(divRoles.has('tab')); // true или false
Так можно убедиться, что <div role="tab"> допустим
и соответствует спецификации, либо использовать семантически более
подходящий тег.
Некоторые виджет-роли наследуются от абстрактных ролей, которые нельзя применять напрямую, но они определяют общие свойства:
widget — базовая абстрактная роль для всех
интерактивных элементов.command — общий родитель для button,
checkbox, menuitem и других.Наследование используется для проверки поддержки свойств:
const menuitemRole = roles.get('menuitem');
console.log(menuitemRole.superClass);
// ['command', 'widget']
Это показывает, что menuitem наследует свойства и
поведение от widget и command.
Использование aria-query для виджет-ролей позволяет:
Пример проверки кнопки:
function validateButton(element) {
const rolesForElement = elementRoles.get(element.tagName.toLowerCase());
if (!rolesForElement || !rolesForElement.has('button')) {
console.warn('Элемент не соответствует роли button');
}
}
Библиотека aria-query превращает спецификацию ARIA в практический инструмент для работы с интерактивными элементами. Виджет-ролям уделяется особое внимание, так как они формируют основу доступного и управляемого интерфейса. Доступ к свойствам, состояниям и соответствиям HTML позволяет создавать компоненты, строго следуя рекомендациям ARIA, и облегчает тестирование доступности.
Использование roles и elementRoles в связке
обеспечивает структурированный подход к семантической проверке
виджетов, минимизирует ошибки и поддерживает стандарты
доступности на всех уровнях разработки.