# DateRangeField: Доступность

## Подписи

`DateRangeField` нужна подпись, которая объясняет и бизнес-смысл, и то, включает ли диапазон границы или ограничен иначе. Одного плейсхолдера недостаточно.

## Поведение клавиатуры

| Клавиша | Действие |
| --- | --- |
| <kbd>Enter</kbd> / <kbd>Space</kbd> | На кнопке-триггере: открывает или закрывает всплывающий календарь. Фокус остаётся на кнопке. |
| <kbd>Tab</kbd> | С открытого триггера: переносит фокус во всплывающий календарь, на первую кнопку шапки. |
| <kbd>Enter</kbd> | На дне во всплывающем календаре: первое нажатие начинает новый диапазон, второе завершает его, и диапазон записывается в поле. Остальные клавиши календаря работают как в Calendar. |
| <kbd>Shift</kbd> + <kbd>←</kbd> / <kbd>Shift</kbd> + <kbd>→</kbd> / <kbd>Shift</kbd> + <kbd>↑</kbd> / <kbd>Shift</kbd> + <kbd>↓</kbd> | На первом или последнем дне диапазона: двигает этот край диапазона вместе с фокусом. |
| <kbd>Escape</kbd> | Закрывает всплывающий календарь и возвращает фокус на кнопку-триггер. |

- Вводить можно, не открывая календарь. Внутри календаря навигация только перемещает фокус; значение меняется, только когда выбран день.
- Ввод проверяется в календарной системе поля: одиночная цифра, с которой не может начаться двузначный сегмент, дополняется нулём, полные сегменты ограничиваются (день — длиной месяца), а полное значение ограничивается `min` / `max`.
- Введённый в обратном порядке диапазон переставляется так, чтобы более ранняя дата шла первой.

## Поведение фокуса

- Обычно фокус начинается в поле ввода.
- Открытие и закрытие календаря не должны уводить фокус от поля диапазона.
- Использование во вложенных оверлеях нужно проверять на восстановление фокуса и закрытие.

## Семантика для скринридеров

- Поле должно сообщать, что оно принимает дату начала и дату окончания, а не одну непрозрачную строку.
- Вспомогательный текст должен объяснять формат диапазона и любые правила бронирования или отчётности.
- Иконке-кнопке триггера всё равно нужна доступная подпись, например «Открыть календарь диапазона дат».

## Семантика формы

- `DateRangeField` ведёт себя как поле формы через нижележащий input.
- Сообщения об ошибках должны явно покрывать неполные и перевёрнутые диапазоны.

## Риски доступности

- Неоднозначная подпись, которая не объясняет смысл диапазона.
- Текст ошибки помечает поле как невалидное, но не объясняет, какой стороны не хватает.
- Композиция оверлея скрывает выбор дат из-за обрезки или проблем с фокусом.
