Библиотека aria-query предоставляет средства для работы с ARIA-ролями, свойствами и состояниями в веб-приложениях. Она реализована в виде набора карт (maps) и функций, которые позволяют получать подробную информацию о поддерживаемых ролях, их атрибутах, а также о допустимых элементах DOM, к которым эти роли могут быть применены. В основе лежат стандарты WAI-ARIA, что обеспечивает корректное взаимодействие с технологиями вспомогательного доступа.
Основные экспорты из aria-query:
roles — карта всех ARIA-ролей с их свойствами и
метаданными.elementRoles — карта соответствия HTML-элементов и
ролей, которые они могут принимать.roleValues — список всех допустимых значений атрибутов
ARIA.roleKeys — упрощённый список имён ролей.Эти структуры данных являются неизменяемыми
(Immutable Maps), что гарантирует безопасность при
использовании в проектах с большим количеством компонентов.
Оконные роли описывают элементы пользовательского интерфейса, которые ведут себя как отдельные окна или панельные области, с возможностью фокусировки, навигации и взаимодействия через клавиатуру и вспомогательные технологии. В ARIA они представлены, прежде всего, следующими ролями:
window — базовая оконная роль.
Обозначает независимое окно или диалог.dialog — модальный или немодальный
диалог, чаще всего используется для уведомлений, форм или
подтверждений.alertdialog — специализированный
диалог для критических уведомлений, автоматически привлекает внимание
пользователя.document — роль для основного
содержимого документа или значимого блока текста, который может
содержать вложенные элементы.application — область, которая
имитирует полноценное приложение, часто используется для комплексных
виджетов с богатым взаимодействием через клавиатуру.Каждая роль сопровождается ARIA-свойствами и состояниями, которые описывают доступность и поведение:
aria-labelledby — связывает окно с заголовком.aria-label — альтернативная текстовая метка.aria-hidden — скрывает окно от вспомогательных
технологий.aria-modal — указывает, что окно модальное и блокирует
взаимодействие с другими частями интерфейса.aria-expanded — состояние, информирующее о свёрнутом
или развернутом состоянии панели или диалога.aria-describedby — связывает окно с описанием или
инструкцией.Библиотека aria-query позволяет определить, какие
свойства применимы к каждой роли, и какие значения допустимы. Например,
для dialog допустимо использовать
aria-modal="true" или false, а для
alertdialog — только true.
Использование карт roles и elementRoles
позволяет динамически проверять совместимость элементов и ролей.
import { roles, elementRoles } from 'aria-query';
// Проверка, поддерживает ли элемент роль dialog
const divRoles = elementRoles.get('div');
if (divRoles && divRoles.has('dialog')) {
console.log('div может использоваться как dialog');
}
// Получение всех свойств роли window
const windowRole = roles.get('window');
console.log(windowRole.props); // { 'aria-label': undefined, 'aria-labelledby': undefined, ... }
roles.get('window') возвращает объект с метаданными:
abstract — булевое значение,
указывающее, что роль абстрактная и не должна применяться напрямую.superClass — массив родительских
ролей, от которых наследуется функциональность.props — доступные ARIA-свойства и
состояния с типами и значениями по умолчанию.requiredProps — свойства, которые
обязательно должны присутствовать для корректного использования
роли.Библиотека позволяет определить, какие HTML-элементы могут безопасно использовать ту или иную оконную роль. Например:
div, section и main —
поддерживают роли window, dialog,
application.article — может получать роли document и
application.span — обычно не используется для оконных ролей, за
исключением случаев, когда добавлены специальные атрибуты.const divSupportedRoles = elementRoles.get('div');
console.log(divSupportedRoles); // Set { 'dialog', 'alertdialog', 'window', ... }
Некоторые роли в ARIA являются абстрактными, их нельзя назначать элементу напрямую. Для оконных ролей это:
window — базовая роль, от которой наследуют
dialog и alertdialog.document — используется для наследования поведения
текстового содержимого.Использование наследования позволяет создавать новые кастомные виджеты, соблюдая стандарт ARIA, при этом библиотека aria-query упрощает получение всех наследуемых свойств и состояний:
const dialogRole = roles.get('dialog');
console.log(dialogRole.superClass); // [ 'window' ]
dialog для модальных и немодальных окон с
фокусируемым содержимым.alertdialog для критических уведомлений,
требующих немедленного внимания.application
только там, где необходимо подавление стандартных клавиатурных
взаимодействий.elementRoles для предотвращения ошибок доступности.aria-labelledby или
aria-label) для всех оконных ролей, чтобы они были понятны
вспомогательным технологиям.Глубокое понимание оконных ролей и возможностей библиотеки aria-query позволяет создавать интерфейсы, полностью соответствующие стандартам WAI-ARIA и обеспечивающие максимальную доступность для пользователей с ограниченными возможностями.