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'
Примеры использования
Базовое поле
Откройте палитру шевроном или кликом по полю
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 в палитру
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 ограничивает переключатель моделей в палитре
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 с копированием
tsx
import { FieldColor } from '@cloud-ru/ds-fields';
export function ColorReadonly() {
// readonly блокирует ввод — onChange не нужен, значение показывается из defaultValue.
return <FieldColor label='Цвет токена' readonly defaultValue='#7e57c2' showCopyButton />;
}Props
Types
Props
FieldColorProps| Prop | Type | Default | Required | Description |
|---|---|---|---|---|
autoApply | boolean | true | no | Применять изменения автоматически. Если `false` — появляются кнопки Cancel/Apply. По умолчанию `true` — без футера (паритет с Figma colorPicker, где Cancel/Apply нет). |
autoComplete | string | boolean | false | no | Включен ли автокомплит для поля |
autoFocus | boolean | false | no | Включен ли авто-фокус для поля |
availableModes | ColorMode[] | ['hex', 'hsv', 'rgb'] | no | Какие цветовые модели доступн ы переключателю. |
background | boolean | true | no | Фон поля (acrylic). |
caption | string | — | no | Вторичная подпись справа |
className | string | — | no | CSS-класс CSS-класс корня `FieldDecorator` |
data-test-id | string | field-color | no | |
defaultValue | string | | no | Начальное значение (uncontrolled-режим). |
disabled | boolean | false | no | Поле выключено Является ли поле деактивированным |
error | string | — | no | Ошибка (приоритетнее `hint`; форсит `validationState=error`) |
fieldClassName | string | — | no | CSS-класс оболочки поля |
hint | string | — | no | Подсказка |
id | string | — | no | Значение html-атрибута id |
innerRef | Ref<HTMLDivElement> | — | no | Ref на корневой DOM-элемент |
inputMode | "decimal" | "email" | "none" | "numeric" | "search" | "tel" | "text" | "url" | — | no | Режим работы экранной клавиатуры |
label | string | | no | Заголовок |
labelFor | string | — | no | HTML-атрибут `for` для `<label>` |
labelTooltip | QuestionTooltipProps | — | no | Подсказка (question-tooltip) у заголовка |
layoutPresets | Partial<Record<LayoutType, Partial<{ autoFocus: boolean; }>>> | — | no | Переопределение адаптивных дефолтов по раскладке. Участвует `autoFocus`: на mobile он выключен (открывает клавиатуру без действия). Вернуть на mobile — `layoutPresets={{ mobile: { autoFocus: true } }}`. |
length | FieldLength | — | no | Счётчик длины `current/max` |
max | number | — | no | Максимальное значение поля |
maxLength | number | — | no | Максимальная длина вводимого значения |
min | number | — | no | Минимальное значение поля |
name | string | — | no | Значение html-атрибута name |
onBlur | FocusEventHandler<HTMLInputElement> | — | no | Колбек обработки потери фокуса |
onChange | ((value: string) => void) | — | no | Колбек смены значения. |
onClearButtonClick | (() => void) | — | no | Колбек после клика по кнопке очистки. |
onClick | MouseEventHandler<HTMLInputElement> | — | no | Колбек обработки клика |
onCopyButtonClick | (() => void) | — | no | Колбек после копирования значения. |
onFocus | FocusEventHandler<HTMLInputElement> | — | no | Колбек обработки получения фокуса |
onKeyDown | KeyboardEventHandler<HTMLInputElement> | — | no | Колбек обработки начала нажатия клавиши клавиатуры |
onMouseDown | MouseEventHandler<HTMLInputElement> | — | no | Колбек обработки нажатия кнопки мыши |
onOpenChange | ((open: boolean) => void) | — | no | Колбек смены состояния открытия. |
onPaste | ClipboardEventHandler<HTMLInputElement> | — | no | Колбек обработки вставки значения |
open | boolean | — | no | Открыт color-picker. |
pattern | string | — | no | Регулярное выражение валидного инпута |
placeholder | string | — | no | Значение плейсхолдера |
readonly | boolean | false | no | Только для чтения Является ли поле доступным только для чтения |
required | boolean | — | no | Показать знак обязательности `*` |
showClearButton | boolean | true | no | Показывать кнопку очистки (видна при value && !readonly && !disabled). |
showCopyButton | boolean | true | no | Показывать кнопку копирования (видна при readonly && value && !disabled). |
showHintIcon | boolean | — | no | Отображение статус-иконки у подсказки (по умолчанию `true`) |
size | "l" | "m" | "s" | m | no | Размер |
spellCheck | boolean | true | no | Значение атрибута spellcheck (проверка орфографии) |
step | string | number | — | no | Максимальное значение поля |
tabIndex | number | 0 | no | Значение атрибута tab-index |
type | "email" | "number" | "password" | "tel" | "text" | "url" | — | no | Тип инпута |
validationState | "default" | "error" | "success" | "warning" | default | no | Состояние валидации |
value | string | — | no | Текущее значение (hex/rgb/hsl-строка, controlled-режим). |
withAlpha | boolean | true | no | Управляет альфа-каналом палитры и наличием поля Alpha. |