Библиотека Aria-query предоставляет инструменты для
работы с ARIA-ролями, их свойствами и состояниями в контексте
веб-разработки. Она используется в основном для анализа и валидации
ARIA-атрибутов, особенно при построении доступных интерфейсов. Основные
экспорты библиотеки включают объекты roles и
elementRoles, которые содержат детализированные сведения о
ролях и допустимых атрибутах HTML-элементов.
Эти структуры позволяют строить строгую проверку соответствия элементов ARIA-спецификациям и реализовать динамическую генерацию интерфейсных компонентов с правильными атрибутами.
ARIA определяет специальную группу атрибутов для поддержки drag-and-drop взаимодействий. Они позволяют обозначать, какие элементы можно перетаскивать, куда их можно помещать, а также следить за состоянием перетаскивания.
aria-grabbed
Тип: true | false | undefined
Применяется к элементам, которые могут быть перетащены.
Указывает текущее состояние: захвачен элемент (true)
или нет (false).
Пример:
Элемент 1aria-dropeffect (устаревший в
последних спецификациях, но поддерживается в некоторых
библиотеках)
Тип:
copy | move | link | execute | popup | none
Определяет ожидаемый эффект при отпускании элемента в целевой контейнер.
Применяется к элементу-контейнеру.
Пример:
aria-owns
Тип: строка с id элементов
Используется для управления логической структурой документа при drag-and-drop, чтобы корректно отслеживать порядок элементов, даже если DOM меняется.
Пример:
В Aria-query роли для drag-and-drop относятся к интерактивным
компонентам: list, listitem,
option, treeitem, gridcell. Эти
роли имеют набор поддерживаемых атрибутов:
list: может содержать
listitem, поддерживает aria-owns для
управления порядком.listitem: может быть перетаскиваемым
(aria-grabbed), взаимодействует с list или
tree.tree / treeitem:
поддерживает сложные иерархические drag-and-drop сценарии.grid / gridcell:
позволяет реализовать перетаскивание ячеек таблицы с сохранением
семантики.Использование Aria-query позволяет программно проверять, какие атрибуты допустимы для выбранной роли, предотвращая ошибки при динамическом изменении DOM.
Библиотека экспортирует объект roles, который можно
использовать для получения списка всех поддерживаемых атрибутов:
import { roles } from 'aria-query';
const listitemRole = roles.get('listitem');
console.log(listitemRole.attributes);
// { 'aria-grabbed': [true, false], ... }
Аналогично, elementRoles позволяет проверить, какие роли
допустимы для конкретного HTML-тега:
import { elementRoles } from 'aria-query';
const divRoles = elementRoles.get('div');
console.log(divRoles);
// Set { 'listitem', 'option', ... }
Эта проверка особенно важна при построении drag-and-drop интерфейсов, где один и тот же элемент может динамически менять роль или состояние.
aria-grabbed, чтобы скринридеры могли
корректно отслеживать состояние.aria-owns
помогает сохранить порядок элементов, даже если DOM перестраивается
после перемещения.aria-grabbed или других drag-and-drop атрибутов проверять,
поддерживает ли выбранная роль эти атрибуты через Aria-query.dragstart,
dragover, drop и соответствующая логика
JavaScript.Aria-query облегчает создание адаптивных drag-and-drop компонентов, когда элементы могут менять роли или атрибуты в реальном времени. Используя библиотеку, можно:
Пример динамического обновления атрибутов:
function toggleGrabbed(element) {
const grabbed = element.getAttribute('aria-grabbed') === 'true';
element.setAttribute('aria-grabbed', String(!grabbed));
}
Использование Aria-query позволяет убедиться, что
aria-grabbed применим к роли элемента, прежде чем обновлять
атрибут.