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).
captionstringnoВторичная подпись справа
classNamestringnoCSS-класс CSS-класс корня `FieldDecorator`
data-test-idstringfield-colorno
defaultValuestringnoНачальное значение (uncontrolled-режим).
disabledbooleanfalsenoПоле выключено Является ли поле деактивированным
errorstringnoОшибка (приоритетнее `hint`; форсит `validationState=error`)
fieldClassNamestringnoCSS-класс оболочки поля
hintstringnoПодсказка
idstringnoЗначение html-атрибута id
innerRefRef<HTMLDivElement>noRef на корневой DOM-элемент
inputMode"decimal" | "email" | "none" | "numeric" | "search" | "tel" | "text" | "url"noРежим работы экранной клавиатуры
labelstringnoЗаголовок
labelForstringnoHTML-атрибут `for` для `<label>`
labelTooltipQuestionTooltipPropsnoПодсказка (question-tooltip) у заголовка
layoutPresetsPartial<Record<LayoutType, Partial<{ autoFocus: boolean; }>>>noПереопределение адаптивных дефолтов по раскладке. Участвует `autoFocus`: на mobile он выключен (открывает клавиатуру без действия). Вернуть на mobile — `layoutPresets={{ mobile: { autoFocus: true } }}`.
lengthFieldLengthnoСчётчик длины `current/max`
maxnumbernoМаксимальное значение поля
maxLengthnumbernoМаксимальная длина вводимого значения
minnumbernoМинимальное значение поля
namestringnoЗначение 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Колбек обработки вставки значения
openbooleannoОткрыт color-picker.
patternstringnoРегулярное выражение валидного инпута
placeholderstringnoЗначение плейсхолдера
readonlybooleanfalsenoТолько для чтения Является ли поле доступным только для чтения
requiredbooleannoПоказать знак обязательности `*`
showClearButtonbooleantruenoПоказывать кнопку очистки (видна при value && !readonly && !disabled).
showCopyButtonbooleantruenoПоказывать кнопку копирования (видна при readonly && value && !disabled).
showHintIconbooleannoОтображение статус-иконки у подсказки (по умолчанию `true`)
size"l" | "m" | "s"mnoРазмер
spellCheckbooleantruenoЗначение атрибута spellcheck (проверка орфографии)
stepstring | numbernoМаксимальное значение поля
tabIndexnumber0noЗначение атрибута tab-index
type"email" | "number" | "password" | "tel" | "text" | "url"noТип инпута
validationState"default" | "error" | "success" | "warning"defaultnoСостояние валидации
valuestringnoТекущее значение (hex/rgb/hsl-строка, controlled-режим).
withAlphabooleantruenoУправляет альфа-каналом палитры и наличием поля Alpha.

Types

FieldColorProps

Storybook

Figma