FieldTime

Поле выбора времени. Базируется на FieldDecorator и @cloud-ru/ds-input-private, в качестве picker’а использует TimePickerDropdown из @cloud-ru/ds-calendar. Значение — объект TimeValue ({ hours, minutes, seconds }). Ввод идёт по сегментной маске чч:мм:сс (inputMode='numeric'), выбор — через дропдаун с барабанами времени.

Когда использовать

  • Ввод точного времени в формах: расписание, дедлайны, окна обслуживания.
  • Когда нужны и клавиатурный ввод по маске, и выбор мышью из дропдауна.
  • Для ввода только часов и минут отключите секунды через showSeconds={false} — маска станет чч:мм.
  • Для выбора даты используйте FieldDate, для даты со временем — соответствующее поле, не FieldTime.

Анатомия

Сегментный ввод с клавиатуры

Поле редактируется посегментно: фокус (или клик) выделяет сегмент (чч, мм, сс), цифры заполняют его с автопереходом к следующему, / двигают по сегментам, Backspace очищает сегмент до плейсхолдера, ArrowDown открывает picker и переводит фокус на барабаны времени. Значения сегментов зажимаются к допустимым (часы ≤ 23, минуты/секунды ≤ 59).

Size (default m)

ЗначениеКогда
sПлотные таблицы, inline-редактирование
mСтандартные формы (по умолчанию)
lЛендинги, primary-формы

ValidationState (default default)

Управляет тонировкой acrylic-фона поля и иконкой подсказки. Проп error форсит error.

ЗначениеКогда
defaultНет валидации — нейтральный фон, текст подсказки textTertiary, без иконки валидации
errorПоле не прошло валидацию — красная тонировка фона
warningПредупреждение, ввод допустим — жёлтая тонировка фона
successПодтверждение успешного ввода — зелёная тонировка фона

Установка

pnpm add @cloud-ru/ds-fields
import { FieldTime } from '@cloud-ru/ds-fields'
import { TimeValue } from '@cloud-ru/ds-calendar'

Примеры использования

Базовое поле

Базовое полеControlled FieldTime с сегментной маской чч:мм:сс. ArrowDown открывает picker и переводит фокус на барабаны времени, Escape закрывает.
tsx
import { TimeValue } from '@cloud-ru/ds-calendar';
import { FieldTime } from '@cloud-ru/ds-fields';
import { useState } from 'react';

export function TimeBasic() {
  const [value, setValue] = useState<TimeValue | undefined>({ hours: 9, minutes: 30, seconds: 0 });
  return (
    <FieldTime label='Время' hint='Введите HH:MM:SS или выберите из дропдауна' value={value} onChange={setValue} />
  );
}

Без секунд

Без секундshowSeconds=false убирает секунды из маски (чч:мм) и из picker.
tsx
import { TimeValue } from '@cloud-ru/ds-calendar';
import { FieldTime } from '@cloud-ru/ds-fields';
import { useState } from 'react';

export function TimeShowSeconds() {
  const [value, setValue] = useState<TimeValue | undefined>({ hours: 14, minutes: 25, seconds: 0 });
  return (
    <FieldTime
      label='Время без секунд'
      hint='showSeconds=false — маска HH:MM, picker без барабана секунд'
      showSeconds={false}
      value={value}
      onChange={setValue}
    />
  );
}

Readonly с копированием

Readonly с копированиемReadonly FieldTime показывает кнопку копирования значения в буфер, ввод и picker недоступны.
tsx
import { FieldTime } from '@cloud-ru/ds-fields';

export function TimeReadonly() {
  return <FieldTime label='Время выполнения' readonly defaultValue={{ hours: 23, minutes: 59, seconds: 59 }} />;
}

Props

Types

PropsFieldTimeProps
PropTypeDefaultRequiredDescription
autoFocusbooleannoАвтофокус. На mobile выключается адаптивно (см. `layoutPresets`)
backgroundbooleantruenoФон поля (acrylic).
captionstringnoВторичная подпись справа
classNamestringnoCSS-класс CSS-класс корня `FieldDecorator`
closeOnApplybooleantruenoЗакрыть picker после Apply.
data-test-idstringfield-timeno
defaultValueTimeValuenoДефолтное значение для uncontrolled-режима
disabledbooleannoПоле выключено Отключено
errorstringnoОшибка (приоритетнее `hint`; форсит `validationState=error`)
fieldClassNamestringnoCSS-класс оболочки поля
hintstringnoПодсказка
idstringnoHTML id
innerRefRef<HTMLDivElement>noRef на корневой DOM-элемент
labelstringnoЗаголовок
labelForstringnoHTML-атрибут `for` для `<label>`
labelTooltipQuestionTooltipPropsnoПодсказка (question-tooltip) у заголовка
layoutPresetsPartial<Record<LayoutType, Partial<{ autoFocus: boolean; }>>>noПереопределение адаптивных дефолтов по раскладке. Участвует `autoFocus`: на mobile он выключен (открывает клавиатуру без действия). Вернуть на mobile — `layoutPresets={{ mobile: { autoFocus: true } }}`.
lengthFieldLengthnoСчётчик длины `current/max`
namestringnoHTML name
onBlur((event: FocusEvent<HTMLInputElement, Element>) => void)noКолбек блюра input
onChange((value: TimeValue) => void)noКолбек смены значения
onClearButtonClick(() => void)noКолбек после клика по кнопке очистки.
onCopyButtonClick(() => void)noКолбек после копирования значения.
onFocus((event: FocusEvent<HTMLInputElement, Element>) => void)noКолбек фокуса input
onOpenChange((open: boolean) => void)noКолбек смены состояния открытия
openbooleannoОткрыт ли picker (controlled)
placeholderstringnoПлейсхолдер маски; по умолчанию `чч:мм:сс` или `чч:мм` в зависимости от `showSeconds`.
readonlybooleannoТолько для чтения
requiredbooleannoПоказать знак обязательности `*`
showClearButtonbooleantruenoПоказывать кнопку очистки (видна при value && !readonly && !disabled).
showCopyButtonbooleantruenoПоказывать кнопку копирования (видна при readonly && value && !disabled).
showHintIconbooleannoОтображение статус-иконки у подсказки (по умолчанию `true`)
showSecondsbooleantruenoПоказывать секунды в picker и в маске input.
size"l" | "m" | "s"mnoРазмер
validationState"default" | "error" | "success" | "warning"defaultnoСостояние валидации
valueTimeValuenoЗначение

Types

FieldTimeProps

Storybook

Figma