Skip to content

CdsDateInput

New in v4.0

Поле ввода даты: текстовое поле с иконкой календаря, по клику раскрывающее CdsDatePicker в выпадающем меню. Дату можно выбрать мышью или набрать с клавиатуры — значение приходит строкой в формате mask (DD.MM.YYYY по умолчанию).

Storybook GitLab
Покрытие тестами: 96% — хорошее покрытие
API в спеках
123 / 123 пропсы, события, слоты и exposed, у которых есть тест
Тест-кейсы
105 юнит · 5 браузерных
Известные баги
9 зафиксированы тестом it.fails
Покрытие кода
95.7% строк · 87.1% ветвей замер v4.0.0-alpha.13
A11y (axe)
16 рекомендаций в 15 историях замер v4.0.0-alpha.11

Если календарь нужен прямо на странице, без поля, — берите CdsDatePicker. Для одного только времени — CdsTimePicker, для выбора из готового списка — CdsSelect.

Анатомия ​

Поле собрано на CdsTextInput, поэтому лейбл, описание, сообщения, очистка и валидация работают так же. Иконка календаря занимает зону prepend-inner и открывает меню — как и клик по самому полю.

Вариации ​

Значение и формат ​

Дата приходит в v-model строкой в формате mask. Placeholder по умолчанию показывает саму маску, так что подсказывать формат отдельно не нужно.

Sandbox Storybook

display-format меняет только то, что видит пользователь: в модели остаётся строка в mask. Принимает маску (D MMMM YYYY) или функцию, которая получает нативный Date. Если нужно хранить дату иначе — например в ISO, — меняйте mask: он задаёт и хранение, и разбор ручного ввода.

Sandbox Storybook

Дата и время ​

with-time добавляет под календарь CdsTimePicker и дописывает время в маску: DD.MM.YYYY превращается в DD.MM.YYYY HH:mm (with-seconds — в DD.MM.YYYY HH:mm:ss). Значение остаётся одной строкой, календарь и часы меняют в ней свои части. Настройки тайм-пикера доступны прямо на поле — now-btn, format12h, allowed-hours, allowed-minutes — либо целиком через time-picker-props.

Со временем меню не закрывается по клику на дату: пользователь ещё выбирает часы. Если нужен явный финал, добавьте :hide-actions="false" — кнопки встанут под тайм-пикером.

Sandbox Storybook

Несколько дат и период ​

multiple разрешает отметить несколько дат — модель становится массивом строк. range переключает календарь на выбор периода: значение приходит объектом { from, to }, а меню остаётся открытым, пока не выбраны обе границы. Общего времени у набора дат и диапазона нет, поэтому with-time с ними не работает.

Sandbox Storybook

Кнопки подтверждения ​

По умолчанию выбранная дата применяется сразу, а меню закрывается. Передайте :hide-actions="false" — и выбор станет черновиком: он попадёт в модель только после кнопки «ОК», а «Отмена» вернёт прежнее значение. Компонент испускает save и cancel.

Sandbox Storybook

Слот actions заменяет пару кнопок своей: он получает save, cancel и isPristine — признак того, что в календаре ничего не меняли.

Sandbox Storybook

Ручной ввод ​

update-on задаёт момент, когда набранное значение разбирается и попадает в модель: по умолчанию это blur и enter. Строка, которая не разбирается по mask (или по строковому display-format), игнорируется — поле возвращает прежнее значение. Пустой массив запрещает ввод с клавиатуры и оставляет только календарь.

Маску ввода компонент не навязывает — добавьте её директивой, например лёгкой (2,5 КБ) библиотекой Maska.

Sandbox Storybook

Ограничения дат ​

Пропсы календаря доступны прямо на поле: allowed-dates оставляет доступными только нужные дни, min-year-month и max-year-month не выпускают навигацию за пределы диапазона.

Sandbox Storybook

Состояния ​

disabled блокирует и поле, и календарь, readonly запрещает изменения, но оставляет фокус и копирование, error-messages показывает ошибку под полем.

Sandbox Storybook

Календарь и меню ​

picker-props передаёт настройки календарю — например шапку с итогом выбора, menu-props и location управляют выпадающим меню.

Sandbox Storybook

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

Сценарии использования ​

Отчётный период ​

Период живёт в одном поле: range даёт { from, to }, :hide-actions="false" превращает выбор в черновик, а кнопки-пресеты пишут в ту же модель — календарь подхватывает их значение.

Sandbox Storybook

Дата доставки ​

Ограничения работают вместе: allowed-dates оставляет только будни, min-year-month и max-year-month — ближайшие два месяца. Ручной ввод здесь выключен намеренно: набрать недоступный день невозможно, а display-format показывает дату словами.

Sandbox Storybook

Дата в форме ​

Поле участвует в CdsForm наравне с остальными: rules получают то же строковое значение, что лежит в модели, поэтому проверка «не в прошлом» — обычная функция. Ограничение навигации через min-year-month подстраховывает правило, а не заменяет его.

Sandbox Storybook

API ​

Пропсы

ИмяТипПо умолчаниюОписание
activeboolean | undefined—Активное состояние поля
activeColorstring | undefined—Цвет компонента, когда он находится в активном состоянии
allowedDatesTCalendarAllowedDates | undefined—Массив дат, которые будут отображаться в календаре. При использовании функции, функция получает дату в формате YYYY/MM/DD и должна вернуть true или false.
allowedHoursnumber[] | undefined—Позволяет настроить какие часы доступны для выбора.
allowedMinutesnumber[] | undefined—Позволяет настроить какие минуты доступны для выбора.
allowedSecondsnumber[] | undefined—Позволяет настроить какие секунды доступны для выбора.
allowedTime((hr: number | null, min: number | null, sec: number | null) => boolean) | undefined—Позволяет настроить какое время доступно для выбора.
appendIconIconValue | undefined—Иконка в слоте append после контента
appendInnerIconIconValue | undefined—Иконка во внутреннем слоте append после содержимого поля
autocompletestring | undefined—Помогает влиять на предложения браузера. Значение «suppress» изменяет атрибут name полей, а значение «off» полагается на то, что браузер по собственной инициативе перестанет предлагать значения. Любое другое значение передается встроенной функции автозаполнения для соответствующего элемента.
autofocusboolean | undefined—Включает автофокус
baseColorstring | undefined—Цвет неактивного компонента
bgColorstring | undefined—Цвет фона компонента
centerAffixboolean | undefined—Выровнять по вертикали элементы appendInner, prependInner, clearIcon и label по центру.
clearableboolean | undefined—Отображать кнопку очистки значения
clearIconIconValue | undefined'remove'Иконка кнопки очистки
colorstring | undefined—Цвет компонента
counterstring | number | boolean | undefined—Счетчик символов. Принимает булево значение, число или строку
counterValuenumber | ((value: any) => number) | undefined—Пользовательское значение счетчика. Может быть числом или функцией вычисления от текущего значения
defaultDatestring | undefined—Используемая дата по-умолчанию, когда модель не заполнена (в формате YYYY/MM/DD).
defaultYearMonthstring | undefined—Отображаемый год/месяц в формате YYYY/MM. По-умолчанию это текущий год/месяц если не указана v-model.
descriptionstring | undefined—Описание компонента, отображаемое под меткой
dirtyboolean | undefined—Признак того, что значение поля было изменено пользователем
disabledboolean | null | undefinednullЗаблокированное состояние
displayFormatstring | ((date: Date) => string) | undefined—Формат отображения даты в поле ввода. Маска ('D MMMM YYYY') или функция, получающая нативный Date и возвращающая строку. По умолчанию значение показывается как есть — в маске mask.
emitImmediatelyboolean | undefined—Эмитировать событие update:modelValue при смене месяца и года сразу. Недоступно при multiple и range.
errorboolean | undefined—Состояние ошибки
errorMessagesstring | readonly string[] | null | undefined[]Отображает компонент в состояние ошибки и передает пользовательские сообщения об ошибках. Будет объединяться с любыми проверками, заданными в свойстве rules. Это поле не запускает валидацию.
eventsTCalendarEvents | undefined—Список событий, которые будут отображаться в календаре. Формат: YYYY/MM/DD.
eventsColorTCalendarEventsColor | undefined'default'Цвет событий в календаре.
firstDayOfWeekstring | number | undefined1Первый день недели (понедельник по-умолчанию).
focusedboolean | undefined—Управляет состоянием фокуса компонента. Когда true, компонент считается сфокусированным и может применять соответствующие стили или поведение.
format12hboolean | undefined—Отображает время в 12-часовом формате AM/PM.
headerboolean | undefined—Отображать шапку календаря
hideActionsboolean | undefinedtrueСкрыть кнопки подтверждения под календарём — выбранная дата применяется сразу.
hideDetailsboolean | "auto" | undefined—Скрытие блока с деталями (сообщениями и подсказками). При значении 'auto' блок скрывается, если нет сообщений
hideMessagesboolean | undefined—Скрыть сообщения под полем ввода
hideSiblingMonthboolean | undefined—Скрыть дни соседних месяцев в календаре.
hintstring | undefined—Текст подсказки, отображаемый под полем ввода
iconColorstring | boolean | undefined—Цвет иконки. Принимает булево значение или строку с цветом
idstring | undefined—Уникальный идентификатор компонента
labelstring | undefined—Текст метки (label) компонента
loadingstring | boolean | undefined—Индикатор загрузки для компонента
localestring | TDateLocale | undefined—Локаль для дат. Имя локали ('ru' | 'en') или объект TDateLocale. По умолчанию берётся текущая локаль из useLocale, иначе ru.
locationAnchor | undefined'bottom start'Положение выпадающего календаря относительно поля ввода.
maskstring | undefined'DD.MM.YYYY'Формат даты/времени
maxErrorsstring | number | undefined1Максимальное число отображаемых ошибок при валидации
maxWidthstring | number | undefined—Максимальная ширина компонента
maxYearMonthstring | undefined—Запретить навигацию в календаре после указанной максимальной даты в формате YYYY/MM.
menuboolean | undefined—Состояние выпадающего календаря (v-model:menu).
menuPropsCdsMenuProps | undefined—Пропсы, пробрасываемые в компонент CdsMenu выпадающего календаря.
messagesstring | readonly string[] | undefined[]Сообщения для отображения под полем ввода
minWidthstring | number | undefined—Минимальная ширина компонента
minYearMonthstring | undefined—Запретить навигацию в календаре до указанной минимальной даты в формате YYYY/MM.
modelModifiersRecord<string, boolean> | undefined—Модификаторы v-model, переданные Vue для обработки значения поля
modelValueTDateInputValue | undefinednullЗначение поля: строка в маске mask, объект диапазона { from, to } или их массив при multiple/range.
multipleboolean | undefined—Разрешает множественный выбор дат. v-model должна быть массивом.
namestring | undefined—Имя поля ввода
noUnsetboolean | undefined—Запретить сброс даты в календаре.
nowBtnboolean | undefined—Отображает кнопку "Сейчас".
persistentClearableboolean | undefined—Всегда отображать кнопку очистки, а не только при наведении или фокусе
persistentCounterboolean | undefined—Всегда отображать счетчик, а не только при взаимодействии с полем
persistentHintboolean | undefined—Всегда отображать подсказку, а не только при фокусе
persistentPlaceholderboolean | undefined—Всегда отображать placeholder, а не скрывать его при взаимодействии с полем
pickerPropsCdsDatePickerProps | undefined—Пропсы, пробрасываемые в компонент CdsDatePicker. Побеждают одноимённые пропсы самого поля.
placeholderstring | undefined—Текст-заполнитель, отображаемый в пустом поле
prefixstring | undefined—Текстовый префикс, отображаемый перед значением поля
prependIconIconValue | undefined—Иконка в слоте prepend перед контентом
prependInnerIconIconValue | undefined'calendar'Иконка во внутреннем слоте prepend перед содержимым поля
rangeboolean | undefined—Разрешает выбор диапазона дат. v-model должна быть массивом.
readonlyboolean | null | undefinednullТолько для чтения
reverseboolean | undefined—Обратный порядок расположения элементов внутри поля
rolestring | undefined—ARIA-роль для нативного элемента ввода
rulesreadonly ValidationRule[] | undefined[]Принимает массив, состоящий из элементов различных типов: функций, логических значений и строк. Функции принимают входное значение в качестве аргумента и должны возвращать либо true / false, либо строку, содержащую сообщение об ошибке. Поле ввода перейдет в состояние ошибки, если функция возвращает значение false (или любое значение в массиве содержит false) либо является строкой.
sizenumber | "xs" | "sm" | "md" | "lg" | "xl" | undefined'md'Размер компонента
suffixstring | undefined—Текстовый суффикс, отображаемый после значения поля
textColorstring | undefined—Цвет текста компонента
themestring | undefined—Тема компонента
timePickerPropsCdsTimePickerProps | undefined—Пропсы, пробрасываемые в компонент CdsTimePicker. Побеждают одноимённые пропсы самого поля.
todayBtnboolean | undefined—Отображать кнопку "Сегодня" в шапке календаря
typestring | undefined'text'Тип нативного поля ввода
updateOn("enter" | "blur")[] | undefined['blur', 'enter']События, по которым применяется вручную введённое значение. Пустой массив запрещает ручной ввод — поле становится readonly.
validateOnValidateOn | undefined—Изменяет тип события, при котором запускается валидация
validationValueany—Значение, используемое при применении правил валидации
view"Calendar" | "Years" | "Months" | undefined'Calendar'Вид календаря по-умолчанию. Возможные значения: 'Calendar', 'Years', 'Months'.
widthstring | number | undefined—Ширина компонента
withSecondsboolean | undefined—Добавляет секунды в выбор времени.
withTimeboolean | undefined—Добавляет под календарь выбор времени (CdsTimePicker) и дописывает время в маску. Работает только для одиночной даты — с multiple и range игнорируется.

События

ИмяТипОписание
cancel[]Выбор отменён кнопкой отмены.
navigation[payload: { year: number | undefined; month: number | undefined; }]Переход к другому месяцу или году в календаре.
rangeEnd[payload: { from: Partial<IRawDate>; to: Partial<IRawDate>; }]Окончание выбора диапазона дат.
rangeStart[value: Partial<IRawDate>]Начало выбора диапазона дат.
save[value: TDateInputValue]Значение подтверждено — выбором в календаре или кнопкой сохранения.
update:focused[focused: boolean]Изменение состояния фокуса поля (v-model:focused).
update:menu[value: boolean]Изменение состояния выпадающего календаря (v-model:menu).
update:modelValue[value: TDateInputValue]Изменение значения поля (v-model).

Слоты

ИмяТипОписание
actionsCdsDateInputActionsSlotКнопки подтверждения под календарём (актуально при hide-actions="false").
appendCdsInputSlotДобавляет элемент после поля ввода
append-innerCdsInputDefaultSlotСлот, добавляемый в конце инпута ввода
clearCdsInputDefaultSlot & { props: Record<string, any>; }Слот для пользовательского иконки очистки (отображается, когда свойство clearable имеет значение «true»).
description{ description: string | undefined; props: Record<string, any>; }Слот по умолчанию для компонента CdsDescription
detailsCdsInputSlotСлот для ввода пользовательских данных, позволяющее настраивать отображение сообщений
label{ label: string | undefined; props: Record<string, any>; }Слот по умолчанию для компонента CdsLabel
loaderLoaderSlotPropsСлот для пользовательского загрузчика (отображается, если свойство loading имеет значение true).
messageCdsMessageSlotСлот для настройки содержания сообщения
messagesCdsInputSlotСлот для ввода пользовательских данных, позволяющее настраивать отображение сообщений
picker-description{ year: string | number | undefined; }Описание шапки календаря.
picker-title{ date: string; }Заголовок шапки календаря.
prependCdsInputSlotДобавляет элемент до поля ввода
prepend-innerCdsInputDefaultSlotСлот, добавляемый в начало инпута ввода

Exposed

ИмяТипОписание
cancel() => voidОтменяет выбор, возвращает предыдущее значение и закрывает всплывающее окно.
controlRefHTMLElement | undefinedRef-ссылка на контролл поля ввода
fieldIconColorstring | undefinedЦвет иконки
isDirtybooleanЯвляется ли поле ввода "грязным"
isDisabledbooleanЯвляется ли поле ввода заблокированным
isPurebooleanЯвляется ли поле ввода "чистым"
isReadonlybooleanЯвляется ли поле ввода только для чтения
isValidboolean | nullЯвляется ли поле ввода валидным
isValidatingbooleanЯвляется ли поле ввода в процессе валидации
reset() => Promise<void>Функция сброса поля ввода в исходное состояние
resetValidation() => Promise<void>Функция сброса валидации поля ввода
save() => voidПодтверждает выбранную в календаре дату и закрывает всплывающее окно.
validate(silent?: boolean) => Promise<string[]>Функция валидации поля ввода