Библиотека aria-query предназначена для работы с ARIA-атрибутами и ролями в контексте HTML и JavaScript. Она предоставляет структурированные данные о поддерживаемых ролях, состояниях и свойствах ARIA, что позволяет создавать инструменты проверки доступности, линтеры и фреймворки, учитывающие семантику элементов.
Основные компоненты библиотеки:
aria-hidden, aria-expanded), с
информацией о допустимых значениях.Каждая роль в ARIA имеет определённый тип:
button, checkbox, slider.heading, list, table),
определяющие семантику документа.banner, main, navigation),
используемые для ориентирования в интерфейсе.Пример получения роли через aria-query:
import { roles } from 'aria-query';
const buttonRole = roles.get('button');
console.log(buttonRole.abstract); // false
console.log(buttonRole.superClass); // ['widget', 'command']
console.log(buttonRole.requiredProps); // Set {}
Здесь abstract показывает, является ли роль абстрактной
(используется только для наследования), superClass –
родительские категории, а requiredProps – обязательные
ARIA-свойства.
Свойства и состояния ARIA описывают динамическое состояние элементов
и их поведение для ассистивных технологий. Все свойства доступны через
объект aria-query properties:
import { aria } from 'aria-query';
const expandedState = aria.get('aria-expanded');
console.log(expandedState.type); // 'tristate' – принимает true, false или undefined
console.log(expandedState.values); // Set {true, false, undefined}
Ключевые особенности:
aria-live: off | polite | assertive).aria-query хранит эти сопоставления для валидации.HTML-элементы имеют семантическое значение по умолчанию. Например,
<button> по умолчанию получает роль
button, а <a> с href – роль
link. aria-query предоставляет структуру
elementRoles, позволяющую определить:
Пример:
import { elementRoles } from 'aria-query';
const divRoles = elementRoles.get('div');
divRoles.forEach(role => {
console.log(role.name); // 'button', 'region', 'article' и т.д.
});
Это важно для разработки компонентов, где семантика может быть переопределена ARIA.
Использование aria-query позволяет создавать инструменты проверки доступности на этапе разработки:
Определение роли элемента:
const rolesForElement = elementRoles.get(tagName);Проверка обязательных ARIA-свойств для роли:
const roleInfo = roles.get(roleName);
roleInfo.requiredProps.forEach(prop => {
if (!element.hasAttribute(prop)) {
console.warn(`Отсутствует обязательный ARIA-атрибут: ${prop}`);
}
});Валидация допустимых значений состояний:
const stateInfo = aria.get('aria-checked');
if (!stateInfo.values.has(element.getAttribute('aria-checked'))) {
console.error('Недопустимое значение aria-checked');
}Хотя aria-query предоставляет полный набор стандартных
ролей и свойств, библиотека позволяет:
const customRole = {
name: 'custom-widget',
superClass: ['widget'],
requiredProps: new Set(['aria-label']),
};
roles.set('custom-widget', customRole);
aria-query полезна в React, Vue или Angular для:
Например, в React можно проверять, что <MyButton>
корректно передаёт aria-pressed для кнопок типа toggle,
используя данные из aria-query.
elementRoles для определения возможных
ролей вместо ручного задания.properties для валидации допустимых значений
атрибутов ARIA.Библиотека aria-query обеспечивает основу для строгого соблюдения семантики HTML и ARIA, позволяя создавать доступные интерфейсы и автоматизировать проверки соответствия стандартам.