FieldColor

Поле выбора цвета. Базируется на FieldDecorator и @cloud-ru/ds-input-private, а палитру открывает через @cloud-ru/ds-dropdown + @cloud-ru/ds-color-picker. Слева — swatch с текущим цветом, справа — шеврон открытия палитры. Значение редактируется напрямую в инпуте (hex/rgb-строка) или в палитре.

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

  • Настройка цвета в редакторах тем, брендинга, диаграмм.
  • Поле формы, где значение — цвет в HEX/RGB/HSV.
  • Для статичного показа значения цвета используйте readonly с автоматической кнопкой копирования.

Анатомия

Swatch и шеврон

Поле собирается из:

  • swatch — квадрат-превью текущего цвета слева от инпута. Пустое значение даёт прозрачный swatch.
  • input — текстовое значение цвета (hex/rgb-строка), редактируется напрямую.
  • chevron — индикатор открытия палитры справа. Смотрит вниз в закрытом состоянии и вверх — когда палитра открыта. В readonly шеврон скрыт.

Size (default m)

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

ValidationState (default default)

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

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

Background (default true)

Включает acrylic-фон поля (тонируемый по validationState).

  • true — поле с acrylic-оболочкой и состояниями hover/focus.
  • false — без фона, для встраивания в плотные/кастомные контейнеры.

AvailableModes (default ['hex', 'rgb', 'hsv'])

Ограничивает набор цветовых моделей в переключателе палитры.

  • hex — #rrggbb / #rrggbbaa.
  • rgb — каналы R/G/B.
  • hsv — тон, насыщенность, яркость.

Установка

pnpm add @cloud-ru/ds-fields
import { FieldColor } from '@cloud-ru/ds-fields'

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

Базовое поле

Базовое полеControlled FieldColor с палитрой в дропдауне.
Откройте палитру шевроном или кликом по полю
tsx
import { FieldColor } from '@cloud-ru/ds-fields';
import { useState } from 'react';

export function ColorBasic() {
  const [value, setValue] = useState('#1976d2');
  return (
    <FieldColor
      label='Цвет акцента'
      hint='Откройте палитру шевроном или кликом по полю'
      value={value}
      onChange={setValue}
    />
  );
}

Прозрачность

ПрозрачностьwithAlpha включает слайдер и поле Alpha в палитре, hex принимает #rrggbbaa.
withAlpha добавляет слайдер и поле Alpha в палитру
tsx
import { FieldColor } from '@cloud-ru/ds-fields';
import { useState } from 'react';

export function ColorWithAlpha() {
  const [value, setValue] = useState('rgba(255, 87, 34, 0.5)');
  return (
    <FieldColor
      label='Цвет с прозрачностью'
      hint='withAlpha добавляет слайдер и поле Alpha в палитру'
      withAlpha
      value={value}
      onChange={setValue}
    />
  );
}

Ограниченные модели

Ограниченные моделиavailableModes оставляет только HEX и RGB; autoApply применяет цвет без кнопки Apply.
availableModes ограничивает переключатель моделей в палитре
tsx
import { FieldColor } from '@cloud-ru/ds-fields';
import { useState } from 'react';

export function ColorModes() {
  const [value, setValue] = useState('#4caf50');
  return (
    <FieldColor
      label='Только HEX и RGB'
      hint='availableModes ограничивает переключатель моделей в палитре'
      availableModes={['hex', 'rgb']}
      autoApply
      value={value}
      onChange={setValue}
    />
  );
}

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

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

export function ColorReadonly() {
  // readonly блокирует ввод — onChange не нужен, значение показывается из defaultValue.
  return <FieldColor label='Цвет токена' readonly defaultValue='#7e57c2' showCopyButton />;
}

Props

Types

PropsFieldColorProps
PropTypeDefaultRequiredDescription
autoApplybooleantruenoПрименять изменения автоматически. Если `false` — появляются кнопки Cancel/Apply. По умолчанию `true` — без футера (паритет с Figma colorPicker, где Cancel/Apply нет).
autoCompletestring | booleanfalsenoВключен ли автокомплит для поля
autoFocusbooleanfalsenoВключен ли авто-фокус для поля
availableModesColorMode[]['hex', 'hsv', 'rgb']noКакие цветовые модели доступны переключателю.
backgroundbooleantruenoФон поля (acrylic).
captionstring—noВторичная подпись справа
classNamestring—noCSS-класс CSS-класс корня `FieldDecorator`
data-test-idstringfield-colorno
defaultValuestringnoНачальное значение (uncontrolled-режим).
disabledbooleanfalsenoПоле выключено Является ли поле деактивированным
errorstring—noОшибка (приоритетнее `hint`; форсит `validationState=error`)
fieldClassNamestring—noCSS-класс оболочки поля
hintstring—noПодсказка
idstring—noЗначение html-атрибута id
innerRefRef<HTMLDivElement>—noRef на корневой DOM-элемент
inputMode"decimal" | "email" | "none" | "numeric" | "search" | "tel" | "text" | "url"—noРежим работы экранной клавиатуры
labelstringnoЗаголовок
labelForstring—noHTML-атрибут `for` для `<label>`
labelTooltipQuestionTooltipProps—noПодсказка (question-tooltip) у заголовка
layoutPresetsPartial<Record<LayoutType, Partial<{ autoFocus: boolean; }>>>—noПереопределение адаптивных дефолтов по раскладке. Участвует `autoFocus`: на mobile он выключен (открывает клавиатуру без действия). Вернуть на mobile — `layoutPresets={{ mobile: { autoFocus: true } }}`.
lengthFieldLength—noСчётчик длины `current/max`
maxnumber—noМаксимальное значение поля
maxLengthnumber—noМаксимальная длина вводимого значения
minnumber—noМинимальное значение поля
namestring—noЗначение html-атрибута name
onBlurFocusEventHandler<HTMLInputElement>—noКолбек обработки потери фокуса
onChange((value: string) => void)—noКолбек смены значения.
onClearButtonClick(() => void)—noКолбек после клика по кнопке очистки.
onClickMouseEventHandler<HTMLInputElement>—noКолбек обработки клика
onCopyButtonClick(() => void)—noКолбек после копирования значения.
onFocusFocusEventHandler<HTMLInputElement>—noКолбек обработки получения фокуса
onKeyDownKeyboardEventHandler<HTMLInputElement>—noКолбек обработки начала нажатия клавиши клавиатуры
onMouseDownMouseEventHandler<HTMLInputElement>—noКолбек обработки нажатия кнопки мыши
onOpenChange((open: boolean) => void)—noКолбек смены состояния открытия.
onPasteClipboardEventHandler<HTMLInputElement>—noКолбек обработки вставки значения
openboolean—noОткрыт color-picker.
patternstring—noРегулярное выражение валидного инпута
placeholderstring—noЗначение плейсхолдера
readonlybooleanfalsenoТолько для чтения Является ли поле доступным только для чтения
requiredboolean—noПоказать знак обязательности `*`
showClearButtonbooleantruenoПоказывать кнопку очистки (видна при value && !readonly && !disabled).
showCopyButtonbooleantruenoПоказывать кнопку копирования (видна при readonly && value && !disabled).
showHintIconboolean—noОтображение статус-иконки у подсказки (по умолчанию `true`)
size"l" | "m" | "s"mnoРазмер
spellCheckbooleantruenoЗначение атрибута spellcheck (проверка орфографии)
stepstring | number—noМаксимальное значение поля
tabIndexnumber0noЗначение атрибута tab-index
type"email" | "number" | "password" | "tel" | "text" | "url"—noТип инпута
validationState"default" | "error" | "success" | "warning"defaultnoСостояние валидации
valuestring—noТекущее значение (hex/rgb/hsl-строка, controlled-режим).
withAlphabooleantruenoУправляет альфа-каналом палитры и наличием поля Alpha.

Types

FieldColorProps

Storybook

Figma