Библиотека Aria-query является мощным инструментом для работы с ARIA-ролями, свойствами и состояниями в JavaScript. Центральным элементом структуры данных является объект ARIARoleDefinition, который описывает характеристики каждой ARIA-роли и её взаимодействие с элементами DOM.
Объект ARIARoleDefinition представляет собой
словарь, где ключами являются названия ролей (например,
button, checkbox, dialog), а
значениями — объект с описанием ролей. Стандартное представление роли
включает следующие свойства:
abstract — булево значение
(true/false), указывающее, является ли роль абстрактной.
Абстрактные роли не применяются напрямую к элементам DOM, они служат
только для наследования и структурирования.
baseConcepts — массив объектов, описывающих базовые концепты HTML, к которым соответствует роль. Каждый объект может содержать свойства:
concept — строка с HTML-тегом (button,
input и др.).attributes — объект с ключами атрибутов и их
значениями.childrenPresentational — булево значение. Если
true, дочерние элементы роли рассматриваются как
декоративные и не учитываются в accessibility tree.
requiredContextRole — массив ролей, которые должны присутствовать в контексте родителя для корректного применения роли.
requiredOwnedElements — массив объектов с описанием элементов, которые должны быть вложены в элемент с этой ролью.
prohibitedProps — массив строк, содержащий имена ARIA-свойств, запрещённых для данной роли.
props — объект с описанием разрешённых свойств и их возможных значений.
superClass — массив строк, перечисляющий роли, от которых наследуется данная роль. Это позволяет определить иерархию ролей и унаследованные свойства.
Пример минимального определения роли button:
{
button: {
abstract: false,
baseConcepts: [
{ concept: 'button', attributes: {} }
],
childrenPresentational: false,
requiredContextRole: [],
requiredOwnedElements: [],
prohibitedProps: ['aria-checked', 'aria-selected'],
props: {
'aria-pressed': null
},
superClass: ['command']
}
}
baseConceptsСвойство baseConcepts играет ключевую роль в
сопоставлении ARIA-ролей с HTML-элементами. Например, роль
checkbox имеет базовую концепцию
input[type="checkbox"], что позволяет инструментам
тестирования и вспомогательным технологиям правильно интерпретировать
элемент. Это свойство особенно важно при создании кастомных компонентов,
которые должны оставаться доступными.
superClassСистема наследования ARIA-ролей реализована через массив
superClass. Например, button наследует
свойства роли command, которая, в свою очередь, может
наследовать свойства от абстрактной роли widget. Это
позволяет сократить дублирование свойств и стандартизировать поведение
ролей.
Пример иерархии:
widget
└─ command
└─ button
Такое наследование обеспечивает возможность проверки доступности без необходимости дублировать описание всех свойств в каждой конкретной роли.
Свойство props в ARIARoleDefinition определяет, какие ARIA-свойства допустимы для роли и какие значения они могут принимать. Значения могут быть:
true /
false)true / false /
mixed)'horizontal' | 'vertical')Пример роли progressbar:
progressbar: {
abstract: false,
baseConcepts: [
{ concept: 'progress', attributes: {} }
],
childrenPresentational: true,
requiredContextRole: [],
requiredOwnedElements: [],
prohibitedProps: ['aria-checked'],
props: {
'aria-valuemin': null,
'aria-valuemax': null,
'aria-valuenow': null,
'aria-valuetext': null
},
superClass: ['range', 'widget']
}
listitem должен находиться внутри list.menu может требовать наличие
элементов с ролью menuitem в качестве потомков.Использование ARIARoleDefinition позволяет:
Aria-query часто используется вместе с линтерами доступности, такими как eslint-plugin-jsx-a11y, где ARIARoleDefinition служит источником истины для допустимых ARIA-ролей и свойств. Это позволяет выявлять:
ARIARoleDefinition является фундаментальной структурой библиотеки Aria-query, обеспечивающей точное определение и валидацию ARIA-ролей, их свойств и контекста. Глубокое понимание этой структуры позволяет создавать доступные, стандартные и надёжные веб-компоненты, соблюдающие все требования спецификации WAI-ARIA.