Специальные возможности

Все компоненты для выбора даты поставляются со встроенной поддержкой специальных возможностей. Навигация с помощью клавиатуры, атрибуты ARIA и управление фокусом работают “из коробки” в каждом варианте — Styled, Tailwind v3/v4 и Headless.

Для стандартного использования дополнительная настройка не требуется. На этой странице документировано, что включено, чтобы вы могли проводить аудит, расширять или воспроизводить шаблоны в пользовательских интерфейсах.

Навигация с помощью клавиатуры

Календарные компоненты

КлавишаДействие
ArrowLeftПереместить фокус на предыдущий день
ArrowRightПереместить фокус на следующий день
ArrowUpПереместить фокус на предыдущую неделю (тот же день недели)
ArrowDownПереместить фокус на следующую неделю (тот же день недели)
Enter / SpaceВыбрать сфокусированный день
EscapeОтменить изменения и закрыть всплывающее окно
TabПереместить к следующему фокусируемому элементу (по умолчанию в браузере)

Пропуск отключенных дат: При навигации с помощью клавиш со стрелками отключенные даты автоматически пропускаются. Компонент ищет до 365 дней в направлении движения, чтобы найти следующую доступную дату.

Автоматическая прокрутка месяца: Когда фокус клавиатуры перемещается на день в другом месяце, вид календаря обновляется, чтобы показать этот месяц.

Компонент выбора времени

КлавишаДействие
EscapeОтменить изменения и закрыть всплывающее окно

Для выбора времени используется интерфейс с колесом прокрутки с взаимодействием по клику/касанию. В колонках прокрутки используется scroll-snap для точного выбора значения.

Атрибуты ARIA

Каждый интерактивный элемент имеет соответствующие роли и атрибуты ARIA:

Всплывающее окно и контейнер

ЭлементАтрибутЗначение
Контейнер всплывающего окнаrole"dialog"
Встроенный контейнерrole"group"
Контейнерaria-labelТекст-заполнитель из локали
Контейнерaria-activedescendantID ячейки дня с текущим фокусом

Кнопка-триггер

АтрибутЗначение
aria-expandedtrue, когда всплывающее окно открыто
aria-haspopup"dialog"

Сетка календаря

ЭлементАтрибутЗначение
Обертка сеткиrole"grid"
Ряд неделиrole"row"
Ячейка заголовка дня неделиrole"columnheader"
Ячейка дняrole"gridcell"
Ячейка дняaria-selectedtrue, когда выбрано
Ячейка дняaria-current"date", когда ячейка является сегодняшним днем
Ячейка дняaria-labelОтформатированная строка даты (например, "2026-03-04")
Ячейка дняdisabledУстанавливается для отключенных дат (нативный атрибут HTML)

Навигация и выпадающие списки

ЭлементАтрибутЗначение
Кнопка предыдущего месяцаaria-label"Previous month" (из locale.prevMonthLabel)
Кнопка следующего месяцаaria-label"Next month" (из locale.nextMonthLabel)
Выпадающий список месяцевaria-label"Select month" (из locale.selectMonthLabel)
Выпадающий список годовaria-label"Select year" (из locale.selectYearLabel)

Колонки времени

ЭлементАтрибутЗначение
Колонка часовrole"listbox"
Колонка часовaria-orientation"vertical"
Колонка часовaria-label"Hours" (из locale.hourLabel)
Колонка минутrole"listbox"
Колонка минутaria-orientation"vertical"
Колонка минутaria-label"Minutes" (из locale.minuteLabel)
Колонка секундrole"listbox"
Колонка секундaria-orientation"vertical"
Колонка секундaria-label"Seconds" (из locale.secondLabel)
Элемент времениrole"option" (элементы-заполнители: "presentation")
Элемент времениaria-selectedtrue, когда элемент является текущим значением
Переключатель периодаaria-labelТекущий период + ”, toggle AM/PM”
Кнопка очисткиaria-label"Clear" (из locale.clear)

Все строки меток настраиваются через систему локализации.

Управление фокусом

Скользящий tabindex

Сетка календаря использует паттерн скользящего tabindex:

  • Только ячейка дня с текущим фокусом имеет tabIndex={0} (доступна по Tab).
  • Все остальные ячейки дня имеют tabIndex={-1} (не доступны по Tab, но фокусируемы с помощью клавиш со стрелками).
  • Это означает, что Tab перемещает фокус из сетки календаря (к следующему элементу управления), а клавиши со стрелками перемещают фокус внутри сетки.

Захват фокуса во всплывающем окне

Режим всплывающего окна использует FloatingFocusManager из @floating-ui/react для:

  • Захвата фокуса внутри всплывающего окна, пока оно открыто.
  • Возврата фокуса на кнопку-триггер при закрытии всплывающего окна.
  • Предотвращения выхода фокуса из всплывающего окна на фоновый контент.

Нативные элементы

Для выбора месяца и года используются нативные элементы <select>, которые по своей природе доступны с клавиатуры. Ячейки дня используют нативные элементы <button> с соответствующими отключенными состояниями.

Соответствие WCAG 2.1