aria-query — это специализированная библиотека для
JavaScript, предназначенная для работы с спецификацией ARIA (Accessible
Rich Internet Applications). Она предоставляет структурированные данные
о ролях ARIA, их состояниях и
свойствах, а также о соответствующих элементах
HTML, что делает возможным создание инструментов для проверки
доступности веб-приложений и компонентов пользовательского
интерфейса.
Библиотека не выполняет манипуляций с DOM напрямую, но предоставляет надежный источник данных, позволяющий анализировать корректность использования ARIA-атрибутов в коде.
Роли в ARIA определяют назначение элемента в интерфейсе. В
aria-query роли представлены объектом
rolesMap, который содержит ключи — названия ролей, и
значения — объект с подробной информацией о каждой роли.
Пример структуры роли:
import { roles } from 'aria-query';
const buttonRole = roles.get('button');
console.log(buttonRole);
Вывод включает:
abstract: булево значение, указывающее, является ли
роль абстрактной и не применяемой напрямую к элементам.superClass: массив родительских ролей, определяющий
иерархию наследования.props: свойства, которые могут быть применены к
элементу с этой ролью.requiredProps: обязательные для роли атрибуты.nameRequired: булево значение, указывающее, требуется
ли у элемента имя (например, текст или aria-label).Библиотека также содержит карту элементов HTML и SVG, сопоставленных с ролями. Это позволяет определить, какая роль может быть применена к конкретному тегу.
Пример использования:
import { elementRoles } from 'aria-query';
const rolesForButton = elementRoles.get('button');
console.log(rolesForButton); // Set { 'button', 'menuitem', ... }
Каждый элемент хранит множество ролей, которые корректны для его применения.
ARIA различает свойства (properties) и
состояния (states). В aria-query они
представлены через объект aria.
import { aria } from 'aria-query';
const ariaChecked = aria.get('aria-checked');
console.log(ariaChecked);
Ключевые поля свойства ARIA:
type: тип значения (boolean, token, string, idref и
т.д.).values: допустимые значения для token-типов.defaultValue: значение по умолчанию.deprecated: булево значение, показывающее, устарело ли
свойство.relatedRoles: роли, для которых свойство
применимо.Состояния и свойства помогают создавать валидаторы доступности, проверяющие соответствие элементов спецификации ARIA.
aria-queryimport { roles } from 'aria-query';
const allRoles = Array.from(roles.keys());
console.log(allRoles);
Метод keys() возвращает набор всех доступных
ролей, что удобно для анализа и генерации документации.
import { elementRoles } from 'aria-query';
function isRoleValidForElement(element, role) {
const validRoles = elementRoles.get(element);
return validRoles ? validRoles.has(role) : false;
}
console.log(isRoleValidForElement('button', 'button')); // true
console.log(isRoleValidForElement('div', 'checkbox')); // true или false
Это позволяет автоматически определять нарушения ARIA, предотвращая ошибки доступности.
import { roles } from 'aria-query';
const listRole = roles.get('list');
console.log(listRole.superClass); // Array of parent roles
Роли могут наследовать свойства и ограничения от других ролей.
Например, menuitemcheckbox наследует menuitem.
Это важно для проверки совместимости свойств.
import { roles, elementRoles, aria } from 'aria-query';
function validateElement(element, role, attributes) {
const validRoles = elementRoles.get(element);
if (!validRoles || !validRoles.has(role)) {
return false; // Роль недопустима для этого элемента
}
const roleData = roles.get(role);
for (const required of Object.keys(roleData.requiredProps)) {
if (!attributes.hasOwnProperty(required)) return false;
}
return true;
}
const result = validateElement('button', 'button', { 'aria-pressed': true });
console.log(result); // true или false
Такой подход позволяет строить автоматические валидаторы, которые полностью учитывают спецификацию ARIA, включая обязательные свойства и наследование ролей.
aria-query является критически важным инструментом для
разработки доступных веб-приложений, обеспечивая
надежный источник информации о ролях, состояниях и свойствах ARIA и
позволяя интегрировать проверку доступности на уровне кода.