Изменения в спецификации ARIA

Библиотека aria-query предназначена для работы с спецификацией Accessible Rich Internet Applications (ARIA) в JavaScript. Она предоставляет структурированные данные о ролях, свойствах и состояниях ARIA, что позволяет создавать инструменты для валидации доступности интерфейсов и генерации вспомогательных подсказок для разработчиков.

Источники данных и структура

Основой aria-query являются официальные спецификации ARIA, поддерживаемые W3C. Библиотека экспортирует несколько ключевых объектов:

  • roles — коллекция всех ARIA-ролей с их характеристиками. Каждая роль описана через:

    • name: строковое название роли.
    • requiredProps: массив обязательных свойств.
    • superClass: массив родительских ролей, определяющих наследование атрибутов.
    • abstract: булево значение, определяющее, является ли роль абстрактной.
  • properties — набор всех ARIA-свойств и состояний:

    • type: тип значения (string, boolean, tristate и др.).
    • values: допустимые значения, если они ограничены.
    • defaultValue: значение по умолчанию, если оно предусмотрено спецификацией.
  • roles.keys() и roles.get() — методы для получения списка всех ролей и их деталей.

Нововведения ARIA 1.2 и 1.3

Спецификация ARIA постоянно обновляется, что требует синхронизации данных в aria-query. Основные изменения последних версий включают:

  1. Новые роли:

    • Добавлены семантические роли, обеспечивающие лучшую совместимость с современными компонентами. Например, rowgroup и cell стали обязательными для сложных таблиц и сеток.
    • Изменены правила наследования: некоторые абстрактные роли теперь определяют больше дочерних элементов, влияя на автоматическое распространение свойств.
  2. Обновленные свойства:

    • aria-checked и aria-selected расширили допустимые значения, добавив поддержку mixed состояния для многоуровневых чекбоксов.
    • Введены новые свойства состояния для динамических интерфейсов: aria-expanded и aria-pressed получили более строгие типы данных и правила использования в сочетании с конкретными ролями.
  3. Удаленные и устаревшие элементы:

    • Некоторые роли были объявлены устаревшими и теперь помечаются в библиотеке как deprecated, что позволяет инструментам предупреждать разработчиков о их использовании.
    • Свойства, которые больше не поддерживаются браузерами или нарушают совместимость с помощниками для людей с ограничениями, исключены из активного набора.

Работа с изменениями через API aria-query

Использование aria-query позволяет динамически проверять актуальность ролей и свойств:

import { roles, ARIAPropertyMap } from 'aria-query';

// Получение информации о роли
const buttonRole = roles.get('button');
console.log(buttonRole.requiredProps); // ['aria-pressed'] если актуально

// Проверка доступности свойства для роли
const prop = ARIAPropertyMap.get('aria-checked');
console.log(prop.type); // 'tristate' в последней спецификации

Такой подход обеспечивает строгую типизацию и согласованность с текущими стандартами ARIA. Любые изменения в спецификации, например, добавление новых свойств или корректировка допустимых значений, автоматически отражаются в библиотеке через обновленные версии пакета.

Влияние изменений на проверку доступности

Изменения спецификации напрямую влияют на алгоритмы проверки доступности:

  • Проверка соответствия ролей элементам DOM требует учета новых абстрактных ролей и наследования свойств.
  • Динамические компоненты интерфейса должны обновлять состояния с учетом новых правил ARIA (aria-expanded, aria-live, aria-busy).
  • Старые роли и устаревшие свойства требуют генерации предупреждений при валидации, чтобы предотвратить ошибки у пользователей вспомогательных технологий.

Использование обновленных данных в инструментах

Многие инструменты линтинга и тестирования доступности полагаются на aria-query как источник правдивых данных:

  • eslint-plugin-jsx-a11y использует коллекцию ролей и свойств для проверки компонентов React.
  • Автоматизированные тесты на доступность (axe-core, jest-axe) получают актуальные значения атрибутов ARIA через API библиотеки.
  • Генераторы документации и вспомогательных подсказок могут строить дерево ролей и свойств, учитывая изменения в спецификации, без необходимости ручного обновления.

Поддержка обратной совместимости

Библиотека обеспечивает:

  • Отметку устаревших ролей и свойств (deprecated: true).
  • Сохранение исторических значений для старых версий спецификации.
  • Возможность проверки старых интерфейсов, которые еще не адаптированы к новым требованиям ARIA.

Это позволяет постепенно внедрять новые стандарты, не ломая существующий код, и минимизировать ошибки при миграции интерфейсов на актуальные версии ARIA.

Итоговое применение

aria-query выполняет роль промежуточного слоя между спецификацией ARIA и инструментами разработки, обеспечивая:

  • Точное соответствие текущей спецификации.
  • Возможность отслеживания изменений и устаревших элементов.
  • Поддержку автоматизированного тестирования доступности.

Благодаря обновляемым наборам данных роли, свойства и состояния ARIA становятся полностью управляемыми через JavaScript, что упрощает интеграцию стандартов доступности в любые современные веб-приложения.