UI Design System
build dev

ColorPicker

选择或输入颜色。中文惯用名:颜色选择器。
稳定本期新增已接入

元信息

字段值
规范 IDcomponent.color-picker
名称ColorPicker
二级分类数据录入(data-entry)
用途选择或输入颜色
描述中文惯用名:颜色选择器。

预览

静态结构:ColorPicker 为 input 风格触发器(data-slot="colorpicker-trigger",前置 data-slot="colorpicker-swatch" 棋盘格色板 + 当前 hex 文本)+ 受控 Popover 弹层(data-slot="colorpicker-panel")。弹层为 react-color Sketch 风格面板:饱和度 / 明度二维面板(data-slot="colorpicker-saturation")、色相与透明度滑杆(colorpicker-hue / colorpicker-alpha,透明度滑杆叠棋盘格)、当前色预览块(colorpicker-preview)、hex 文本输入(Enter 提交,非法值显示 data-slot="colorpicker-error" 错误行)与 R / G / B / A 四通道数字输入(Enter 或失焦提交)、presets 预设色板(colorpicker-presets,命中当前值加 ring 高亮)。拖拽过程实时提交 onChange;Form 内声明 name 时外层包 FieldShell(label + 校验错误)。

DSL 结构

DslNode
{
  "type": "ColorPicker",
  "props": {
    "name": "brandColor",
    "value": "#1677ff",
    "presets": [
      "#1677ff",
      "#52c41a",
      "#faad14",
      "#ff4d4f"
    ]
  }
}

何时用

何时使用

  • 允许用户自由选色:主题色、标签色、图表配色、富文本文字色。
  • 需要透明度(alpha)的颜色:遮罩、高亮底色,a<1 时值自动为 8 位 hex。
  • 提供 presets 预设色板收敛可选范围(如品牌色 + 功能色)。

何时不用

  • 有限的固定色集合选择(如 8 个标签色):使用 RadioGroup / Select 配合色块更轻量。
  • 只需展示颜色而不允许修改:使用色块展示,不使用取色器。

变体

变体视觉形态适用场景
基础取色(无预设)完整 Sketch 面板:二维面板 + 双滑杆 + 通道输入自由选色,如自定义主题色
presets 预设色板面板底部追加预设色块行收敛到品牌 / 功能色集合,兼顾自定义
透明度取色透明度滑杆与棋盘格底纹,值输出 8 位 hex遮罩、半透明高亮等需要 alpha 的颜色
placeholder 空态未选时触发器显示弱提示(缺省「请选择颜色」)非必填颜色字段

API 属性

属性类型默认值说明
namestring—字段名;在 Form 内声明即自动成为表单项
labelstring—表单项标签(FieldShell 呈现)
rulesFieldRule[]—校验规则
valuestring—受控值(hex 颜色,支持 3/4/6/8 位,如 #1677ff、#1677ffcc);Form 内作为字段初始值
presetsstring[]—预设色板(hex 数组),面板底部渲染色块行
placeholderstring'请选择颜色'空态提示文案
disabledbooleanfalse禁用触发器
onChange(value: string) => void—颜色变化事件,传出 hex 字符串(透明度小于 1 时为 8 位 hex,DSL 语义值)
classNamestring—根节点 class(Form 内为 form-item 容器,独立渲染时为触发器)
styleCSSProperties—根节点内联样式(同 className 的挂载规则)

使用规范

  • 值统一为 hex 字符串:6 位(a=1)或 8 位(a<1);消费方按长度判断透明度,不要再拼 rgb()。
  • 输入值宽容(3/4/6/8 位 hex 均可解析并归一化为小写展开),但输出始终是 6/8 位规范形。
  • 面板内拖拽为实时提交:onChange 会高频触发,联动重活(如接口保存)需自行节流。
  • presets 用于收敛选择范围;纯固定集合场景改用 RadioGroup / Select 色块更合适。
  • 含透明度的颜色展示时叠棋盘格底纹表达透明区域,消费端回显也应如此。

正例

  • ✓ 主题设置:presets 给品牌色板,用户也可在二维面板自定义,onChange 高频更新实时预览。
  • ✓ 高亮遮罩:拖透明度滑杆得到 8 位 hex(如 #1677ff80),直接用于样式。
  • ✓ Form 内声明 name + 必填 rules,未选色提交时提示。

反例

  • ✕ 用 ColorPicker 让用户在 8 个固定标签色中选一个(应使用 RadioGroup / Select 色块)。
  • ✕ 把 8 位 hex 截断成 6 位存储,透明度信息被静默丢弃。
  • ✕ 在 onChange 里每次触发都直接请求保存接口,拖拽一次发出数十个请求。

Design Token 映射

不适用:组件 tokenRefs 为空:样式 Token 数据尚未接入,三层映射(Primitive → Semantic → Component)待样式 Token 接入后回填。