Aria-query — это специализированная библиотека на JavaScript, предназначенная для работы с ARIA-ролью и атрибутами в веб-разработке, обеспечивая строгую типизацию и актуальную информацию о доступности интерфейсов. Абстрактные роли в ARIA представляют собой концептуальные категории, которые не имеют прямого визуального представления в DOM, но используются для группировки и наследования функциональных возможностей других ролей.
Абстрактные роли не могут быть назначены напрямую элементам HTML. Они служат как базовые шаблоны для производных ролей. В библиотеке Aria-query каждая роль описывается объектом, включающим следующие свойства:
name: уникальное имя роли;abstract: булевое значение, определяющее, является ли
роль абстрактной;superClass: массив родительских ролей, от которых
наследуются свойства и разрешённые атрибуты;props: объект, описывающий допустимые ARIA-атрибуты для
данной роли.Пример структуры абстрактной роли в arias:
import { roles } from 'aria-query';
const abstractRole = roles.get('command');
console.log(abstractRole.abstract); // true
console.log(abstractRole.superClass); // [['widget', 'actionable']]
console.log(abstractRole.props);
// { aria-pressed: undefined, aria-expanded: undefined, ... }
Абстрактные роли делятся на несколько категорий в зависимости от их функциональной направленности:
button, checkbox.banner, main.section, heading.grid или tree.Aria-query позволяет получать список всех абстрактных ролей и их наследников для анализа доступности интерфейса:
import { roles } from 'aria-query';
const abstractRoles = Array.from(roles).filter(([name, data]) => data.abstract);
console.log(abstractRoles.map(([name]) => name));
// ['command', 'composite', 'structure', ...]
Ключевой аспект абстрактных ролей — это наследование свойств
через superClass. Каждая конкретная роль, например
button, наследует атрибуты и ограничения от абстрактной
роли command. Это позволяет:
Пример:
const buttonRole = roles.get('button');
console.log(buttonRole.superClass);
// [['command', 'widget', 'actionable']]
Таким образом, button получает все свойства абстрактных
ролей command и widget, включая возможность
использования aria-pressed, aria-expanded и
других.
Aria-query используется для валидации интерфейсов и разработки библиотек компонентов, где важна доступность. С помощью информации об абстрактных ролях можно:
tree) или таблица (grid), чтобы гарантировать
корректное взаимодействие с ассистивными технологиями.roles.get(name) — возвращает объект роли с информацией
о свойствах, наследовании и абстрактности.roles.keys() — возвращает все доступные роли.abstract позволяет быстро отделить
конкретные роли от шаблонных.Пример фильтрации:
const concreteRoles = Array.from(roles).filter(([_, data]) => !data.abstract);
Использование этих методов упрощает автоматизацию проверки доступности и построение библиотек UI-компонентов, полностью совместимых с ARIA-спецификацией.
Абстрактные роли служат фундаментом для всего ARIA-интерфейса, обеспечивая структурную целостность и предсказуемость поведения виджетов, а Aria-query позволяет работать с ними программно, анализируя, валидируя и создавая доступные веб-компоненты.