Перейти к содержимому
v2.5.0
English
Русский
Документация

DateRangeField

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

Пропсы корня

ПропТипПо умолчанию
value[start: string, end: string]—
Контролируемый диапазон в виде кортежа [start, end] из строк YYYY-MM-DD. Граница равна '', пока она не заполнена; без начала диапазон пуст.
defaultValue[start: string, end: string]['', '']
Начальный диапазон для неконтролируемого использования, как у value. По умолчанию ['', ''] — пустое поле.
onChangeValue(value: [start: string, end: string]) => void—
Вызывается с диапазоном при его изменении.
formatобязательныйstring—
Шаблон формата даты для маски ввода и разбора. Определяет порядок сегментов даты. Примеры: "dd.MM.yyyy"; "MM/dd/yyyy"; "yyyy-MM-dd"
separatorобязательныйstring—
Символ-разделитель сегментов даты в поле. Примеры: "."; "/"; "-"
rangeSeparatorstring' – '
Разделитель между начальной и конечной датами в поле диапазона, по умолчанию — короткое тире между неразрывными пробелами ('\u00A0–\u00A0'). Определяет, как две даты визуально и логически разделяются при вводе или отображении диапазона дат. Примеры: " – " → "01.01.2024 – 31.01.2024"; " - " → "01.01.2024 - 31.01.2024"; " to " → "01.01.2024 to 31.01.2024". Если не задан, используется короткое тире между неразрывными пробелами (U+00A0), чтобы диапазон не переносился на разделителе.
minstring—
Минимально допустимая дата в виде строки YYYY-MM-DD. Даты раньше этого значения нельзя выбрать; при разборе ввода они ограничиваются или отклоняются.
maxstring—
Максимально допустимая дата в виде строки YYYY-MM-DD. Даты позже этого значения нельзя выбрать; при разборе ввода они ограничиваются или отклоняются.
disabledDatesCalendarDatesDisabled—
Правила отключения отдельных дат в календаре. Можно использовать, чтобы блокировать диапазоны, дни недели или собственные условия.
disabledboolean—
Отключает поле. Запрещает ввод и взаимодействие и применяет визуальное отключённое состояние.
calendarCalendarSystemgregorianCalendar
Календарная система, в которой даты вводятся и выбираются. Значения остаются днями в формате YYYY-MM-DD. По умолчанию — григорианский календарь.
localestring—
Локаль BCP 47 всплывающего календаря (названия месяцев и дней, первый день недели), например de-DE. Формат ввода по-прежнему задаётся format. По умолчанию — локаль среды выполнения, как у Intl.
sizeTextFieldSize—
Визуальный размер текстового поля. Влияет на отступы, размер шрифта и общую высоту. 'sm': компактное поле; 'md': по умолчанию; 'lg': просторная раскладка
refRef<HTMLDivElement>—
Ref, передаваемый на элемент-обёртку. Полезен для программного управления, фокуса или интеграции.
errorboolean—
Показывает поле ввода в состоянии ошибки.

Также принимает все атрибуты <div>.

Дочерние части

  • DateRangeFieldInput: поверхность ввода дат начала и окончания.
  • DateRangeFieldTriggerIconButton: необязательная кнопка-триггер календаря.
  • DateRangeFieldCalendar: содержимое календаря, синхронизированное с выбранным диапазоном.

DateRangeFieldInput

ПропТипПо умолчанию
refRef<HTMLInputElement>—
Ref, передаваемый на нижележащий нативный элемент <input>.

Также принимает все атрибуты <input>.

DateRangeFieldCalendar

ПропТипПо умолчанию
maxstring—
Самая поздняя доступная для выбора дата в виде строки YYYY-MM-DD. Месяцы и годы после этой даты становятся недоступны. Пикеры дней, месяцев и годов используют её, чтобы отключать или ограничивать навигацию.
minstring—
Самая ранняя доступная для выбора дата в виде строки YYYY-MM-DD. Месяцы и годы до этой даты становятся недоступны. Все пикеры учитывают это ограничение при вычислении активных диапазонов.
selection"range"—
Режим выбора. Определяет форму value, все даты — строки YYYY-MM-DD: 'single' — строка, '', когда ничего не выбрано; 'multiple' — массив строк; 'range' — кортеж [start, end], где start не позже end, а '' обозначает незаданную границу. По умолчанию: 'single'
viewCalendarView—
Контролируемый видимый вид: 'day' — дни видимого месяца (CalendarDays); 'month' — месяцы видимого года (CalendarMonths); 'year' — страницы годов (CalendarYears)
value[start: string, end: string]—
Контролируемое значение выбора, форма которого зависит от режима selection. Некорректные или несуществующие даты считаются невыбранными.
defaultValue[start: string, end: string]—
Неконтролируемое начальное значение выбора, форма которого зависит от режима selection.
defaultViewCalendarView—
Начальный вид для неконтролируемого использования. По умолчанию: 'day'
disabledboolean—
Отключает весь календарь: ни одну дату нельзя выбрать, навигация выключена.
disabledDatesCalendarDatesDisabled—
Даты, которые нельзя выбрать, в виде строк YYYY-MM-DD: одна дата; массив дат; предикат (date: string) => boolean
onChangeValue(value: CalendarValue<S>) => void—
Вызывается, когда пользователь меняет выбор. Форма значения зависит от режима selection.
onChangeView(view: CalendarView) => void—
Вызывается при изменении видимого вида.
monthstring—
Контролируемый видимый месяц — строка YYYY-MM-DD любого дня этого месяца.
defaultMonthstring—
Начальный видимый месяц для неконтролируемого использования — строка YYYY-MM-DD любого дня этого месяца. По умолчанию: месяц выбранной даты, иначе текущий месяц
onChangeMonth(month: string) => void—
Вызывается с первым днём видимого месяца в виде строки YYYY-MM-DD, когда видимый месяц меняется (например, при прокрутке или через пикеры месяца и года). Это событие отражает навигацию по виду, а не выбор.
calendarCalendarSystem—
Календарная система, в которой показывается календарь. Значения остаются днями в формате YYYY-MM-DD. По умолчанию — григорианский календарь.
localestring—
Локаль BCP 47 для названий месяцев и дней и первого дня недели, например de-DE. Применяется ко всем частям календаря и задаёт lang на корне. По умолчанию — локаль среды выполнения, как у Intl.
sizeCalendarBaseSize—
Общая шкала размера календаря. Через CalendarBaseContext влияет на вложенные элементы управления: кнопки навигации, триггеры пикеров и подписи дней недели.
variantCalendarBaseVariant—
Визуальный вариант календаря. Передаётся через CalendarBaseContext и используется вложенными элементами управления (кнопками, подписями и т. д.) для единообразной стилизации.
compactboolean—
Флаг плотности для более компактных раскладок. При true корневой элемент получает data-compact="true", чтобы стили могли уменьшить отступы, промежутки и высоту элементов управления для более плотного календаря. При false или undefined календарь использует обычные интервалы.

Также принимает все атрибуты <div>.

DateRangeFieldTriggerIconButton

ПропТипПо умолчанию
sizeIconButtonSize—
Размер контейнера кнопки. Управляет отступами и общей кликабельной областью.
asChildboolean—
Если true, рендерит кнопку как дочерний компонент через Slot (например, из Radix UI). Включает полиморфный рендер — полезно, чтобы кнопка работала как ссылка или собственный тег.
variantButtonBaseVariant—
Определяет визуальный стиль кнопки: цветовую схему и акцент.
appearanceButtonBaseAppearance—
Настраивает структурный внешний вид кнопки (фон, рамка и т. д.).
disabledboolean—
Отключает кнопку при true. Запрещает взаимодействие и применяет визуальное отключённое состояние. Не применяется с asChild: отключённым состоянием владеет дочерний элемент, например через aria-disabled или ссылку без href.
classNamestring—
Необязательный собственный CSS-класс для элемента кнопки. Полезен для переопределений дизайн-системы или локальных стилей.
childrenReactNode—
Содержимое кнопки — текст, иконка или любой React-узел.
refRef<HTMLButtonElement>—
Ref, передаваемый на нативный элемент <button>. Даёт прямой доступ к DOM для управления фокусом или измерений.

Также принимает все атрибуты <button>.

Типы

  • DateRangeFieldProps
  • DateRangeFieldInputProps
  • DateRangeFieldTriggerIconButtonProps
  • DateRangeFieldCalendarProps

Модель состояния

  • Корень владеет связанной парой дат, а не двумя несвязанными значениями.
  • Частичный ввод — обычное дело при редактировании, и его нужно обрабатывать явно.
  • Корень принимает value, defaultValue и onChangeValue как кортеж [start, end] из дней YYYY-MM-DD; DateRangeFieldInput показывает его в формате format и по-прежнему вызывает собственные onChange и onInput. Пока дата начала пуста или неполна, диапазон равен ['', '']; пока неполна только дата окончания, в диапазоне есть только начало. Сброс формы восстанавливает defaultValue, если поле не контролируемое.
  • При изменении min или max обе введённые даты снова ограничиваются так же, как при вводе, с вызовом input.
  • rangeSeparator влияет на видимую композицию и ожидания при разборе.
  • Пропсы ограничений должны соответствовать реальным правилам формы и отчётности.