DateInput

Компонент для поля даты и времени. Позволяет пользователю вводить дату как вручную, так и выбирать значение через календарь.

Загружается...

Данный компонент представляет собой поле формы с возможностью вызова календаря.

Если вам нужно поле ввода диапазона дат (со всплывающим календарём), то используйте компонент DateRangeInput.

Если вам нужен отдельный компонент календаря для выбора даты и времени, то используйте Calendar.

Компонент поддерживает работу как в неконтролируемом режиме, так и контролируемом. Это стандартное поведение React-компонентов, прочитать про это можно в документации React ↗.

Для использования неконтролируемого режима достаточно просто не передавать value или передавать defaultValue, если требуется задать значение по умолчанию. Для контролируемого режима используйте связку свойств value/onChange для задания значения и его изменения.

// Неконтролируемое состояние
<DateInput defaultValue={new Date()} accessible />;
 
// Контролируемое состояние
const [date, setDate] = React.useState(new Date());
 
<DateInput value={date} onChange={setDate} accessible />;

Свойство disabled блокирует взаимодействие с компонентом и добавляет визуальную индикацию недоступности.

Загружается...

Свойство status используется для визуализации валидации компонента - некорректности заполненного поля (значение "error") или успешной валидации (значение "valid").

Загружается...

Для тестирования компонента можно использовать следующие свойство определяющие data-testid атрибуты:

  • dayFieldTestId — поле ввода дня;
  • monthFieldTestId — поле ввода месяца;
  • yearFieldTestId — поле ввода года;
  • hourFieldTestId — поле ввода часа;
  • minuteFieldTestId — поле ввода минут.

Подробности смотри в Свойства и методы.

Компонент обеспечивает базовую доступность, но по умолчанию компонент всё ещё сложно использовать пользователям ассистивных технологий. Мы доработали компонент так, чтобы сделать его доступным, но это потребовало ломающих изменений в визуальном поведении компонента.

Новое, доступное поведение можно включить с помощью нового свойства accessible.

Вот список изменений которые отличают поведение со свойством accessible от поведения по умолчанию:

  • иконка календаря видна постоянно (раньше она была видна, только если в DateInput нет значения);
  • календарь открывается только по клику по иконке календаря, по клику на поле ввода и нажатию клавиши <Space>, если DateInput в фокусе (раньше он открывался сразу при фокусе на DateInput);
  • при открытии календарь получает фокус. При закрытии календаря фокус возвращается на DateInput. Если нужно отключить это поведение, используйте свойство disableFocusTrap. Если нужно больше контроля над тем, куда возвращать фокус, используйте свойство restoreFocus.

Из-за особенности реализации DateInput, если вкладывать его внутрь label, или связывать label и DateInput через htmlFor, то по клику на label фокус будет попадать на DateInput, но текст label скринридером зачитываться в момент фокуса не будет. Рекомендуем дублировать текст label в DateInput, передавая в DateInput текст через свойство aria-label.

<label>
  День рождения
  <DateInput aria-label="День рождения" accessible />
</label>
<label htmlFor="date"> День рождения</label>
<DateInput id="date" aria-label="День рождения" accessible />
<FormItem top="День рождения" htmlFor="date">
  <DateInput id="date" aria-label="День рождения" accessible />
</FormItem>

Формат дат и их перевод задаётся с помощью средств браузера Intl.DateTimeFormat ↗. Тем не менее компонент, в том числе и календарь, имеют большое количество внутренних интерактивных элементов, которые должны иметь описание. Особенно важно для доступности (a11y), так как большинство подписей зрячему пользователю не видны, но критически важны пользователям скринридеров.

Ниже приведён список свойств, которые стоит использовать, если требуется перевести компонент на другой язык. Полный список ищите в таблице свойств компонента ниже.

  • changeHoursLabel;
  • changeMinutsLabel;
  • changeDayLabel;
  • changeMonthLabel;
  • changeYearLabel;
  • prevMonthLabel;
  • nextMonthLabel;
  • clearFieldLabel;
  • showCalendarLabel;
  • calendarLabel.
СвойствоОписание
accessibleboolean

Включает режим в котором DateInput доступен для ассистивных технологий. В этом режиме:

  • календарь больше не открывает при фокусе на DateInput;
  • иконка календаря видна всегда, чтобы пользователи ассистивных технологий могли открыть календарь по клику на иконку;
  • календарь при открытии получает фокус, клавиатурный фокус зациклен и не выходит за пределы календаря пока календарь не закрыт.
По умолчанию: -
afterReactNode

Добавляет иконку справа.

Рекомендации:

  • Используйте следующие размеры иконок 12 | 16 | 20 | 24 | 28.
  • Используйте IconButton ↗, если вам нужна иконка, реагируюущая на нажатие.
По умолчанию: -
afterAlignFieldIconsAlign

Вертикальное выравнивание иконки справа.

По умолчанию: -
beforeReactNode

Добавляет иконку слева.

Рекомендации:

  • Используйте следующие размеры иконок 12 | 16 | 20 | 24 | 28.
  • Используйте IconButton ↗, если вам нужна иконка, реагирующая на нажатие.
По умолчанию: -
beforeAlignFieldIconsAlign

Вертикальное выравнивание иконки слева.

По умолчанию: -
calendarLabelstring

aria-label для календаря.

По умолчанию: Календарь
calendarPlacementPlacementWithAuto

Расположение календаря относительно поля ввода.

По умолчанию: bottom-start
calendarTestsPropsCalendarTestsProps

Передает атрибуты data-testid для интерактивных элементов в календаре.

По умолчанию: -
changeDayLabelstring

aria-label для поля изменения дня.

По умолчанию: День
changeHoursLabelstring

Текст выпадающего списка с выбором часов. Делает его доступным для ассистивных технологий.

По умолчанию: Час
changeMinutesLabelstring

Текст выпадающего списка с выбором минут. Делает его доступным для ассистивных технологий.

По умолчанию: Минута
changeMonthLabelstring

aria-label для селектора месяца.

По умолчанию: Месяц
changeYearLabelstring

aria-label для селектора года.

По умолчанию: Год
clearButtonTestIdstring

Передает атрибут data-testid для кнопки очистки даты.

По умолчанию: -
clearFieldLabelstring

Label для кнопки очистки. Делает доступным для ассистивных технологий.

По умолчанию: Очистить поле
closeOnChangeboolean

Автоматически закрывать календарь при изменениях.

По умолчанию: true
dayFieldTestIdstring

Передает атрибут data-testid для поля ввода дня.

По умолчанию: -
defaultValueDate | null

Начальная дата при монтировании.

По умолчанию: -
disableCalendarboolean

Отключение открытия календаря.

По умолчанию: false
disableFocusTrapboolean

Позволяет отключить захват фокуса при появлении календаря.

По умолчанию: -
disableFutureboolean

Запрещает выбор даты в будущем. Применяется, если не задано shouldDisableDate.

По умолчанию: -
disablePastboolean

Запрещает выбор даты в прошлом. Применяется, если не заданы shouldDisableDate и disableFuture.

По умолчанию: -
disablePickersboolean

Отключает селекторы выбора месяца/года.

По умолчанию: -
DoneButtonComponentType<ButtonProps>

Кастомное отображение кнопки "Done".

По умолчанию: -
doneButtonTextstring

Текст отображаемый в кнопке "Done".

По умолчанию: -
enableTimeboolean

Включает выбор времени.

По умолчанию: -
getRootRefRef<HTMLDivElement>
По умолчанию: -
hourFieldTestIdstring

Передает атрибут data-testid для поля ввода часа.

По умолчанию: -
maxDateTimeDate

Максимальные дата и время, которые можно выбрать. Применяется, если не заданы shouldDisableDate и disablePast/disableFuture.

По умолчанию: -
minDateTimeDate

Минимальные дата и время, которые можно выбрать. Применяется, если не заданы shouldDisableDate и disablePast/disableFuture.

По умолчанию: -
minuteFieldTestIdstring

Передает атрибут data-testid для поля ввода минут.

По умолчанию: -
mode"default" | "plain"

Режим отображения.

  • default — показывает фон, обводку и, при наличии, текст-подсказку.
  • plain — показывает только текст-подсказку.
По умолчанию: -
monthFieldTestIdstring

Передает атрибут data-testid для поля ввода месяца.

По умолчанию: -
nextMonthIconReactNode

Кастомная иконка для кнопки следующего месяца.

По умолчанию: -
nextMonthLabelstring

aria-label для кнопки следующего месяца.

По умолчанию: Следующий месяц
onApply((value?: Date) => void) | undefined

Обработчик нажатия на кнопку "Done". Используется совместно с флагом enableTime.

По умолчанию: -
onCalendarOpenChanged((opened: boolean) => void)

Обработчик изменения состояния открытия календаря.

По умолчанию: -
onChange((value?: Date) => void) | undefined

Обработчик изменения выбранной даты.

По умолчанию: -
onHeaderChange((value: Date) => void)

Обработчик изменения даты в шапке календаря.

По умолчанию: -
onNextMonth(() => void)

Нажатие на кнопку переключения на следующий месяц.

По умолчанию: -
onPrevMonth(() => void)

Нажатие на кнопку переключения на предыдущий месяц.

По умолчанию: -
prevMonthIconReactNode

Кастомная иконка для кнопки предыдущего месяца.

По умолчанию: -
prevMonthLabelstring

aria-label для кнопки предыдущего месяца.

По умолчанию: Предыдущий месяц
renderCustomValue((date: Date) => ReactNode) | undefined

Функция для кастомного форматирования отображаемого значения даты. Позволяет переопределить стандартное отображение даты и вернуть собственное представление.

По умолчанию: -
renderDayContent((day: Date) => ReactNode)

Кастомизация отображения содержимого дня.

По умолчанию: -
restoreFocusboolean | (() => boolean | HTMLElement)
По умолчанию: true
shouldDisableDate((value: Date) => boolean)

Функция для проверки запрета выбора даты.

По умолчанию: -
showCalendarButtonTestIdstring

Передает атрибут data-testid для кнопки показа календаря.

По умолчанию: -
showCalendarLabelstring

Label для кнопки открытия календаря. Делает доступным для ассистивных технологий.

По умолчанию: Показать календарь
showNeighboringMonthboolean

Показывать дни соседних месяцев.

По умолчанию: -
size"s" | "m"

Размер календаря.

По умолчанию: -
status"default" | "error" | "valid"

Статус отображения поля в форме.

По умолчанию: -
timezonestring

Часовой пояс для отображения даты.

По умолчанию: -
valueDate | null

Текущая выбранная дата.

По умолчанию: -
viewDateDate

Дата отображаемого месяца. При использовании обновление даты должно происходить вне компонента.

По умолчанию: -
weekStartsOn0 | 1 | 2 | 3 | 4 | 5 | 6

День недели, с которого начинается неделя.

По умолчанию: -
yearFieldTestIdstring

Передает атрибут data-testid для поля ввода года.

По умолчанию: -