ColorPicker
取色面板。色盘、色相条与透明度条是 XSlider(二维面 + 一维条),透明度数字框是 XNumberField,吸管用浏览器的 EyeDropper(Chromium 系才有,没有就不显示按钮)。多数时候不单独用,而是经 XColorField 的色块点开;自己配触发器时放进 XPopover。
值
v-model 是 CSS 十六进制串:#rrggbb,不是不透明时 #rrggbbaa(小写,同品牌色 useBrandColor)。传进来的还认 3 / 4 位十六进制与 rgb() / rgba(),发出去的一律归一成上面两种写法。文档里存 [r, g, b, a] 的编辑器类宿主用导出的 parseColor / rgbaToHex 互转——十六进制对 0–255 的 RGBA 无损,往返不变。
输入框在 HEX 与 RGB 两种写法之间切换,回车或失焦提交;没写透明度的沿用现在的。alpha 关掉后没有透明度条与数字框。
#3b82f6cc · input 0 次 / commit 0 次
#16a34a
内部状态
面板内部按 HSV 持有状态,不每步从 RGB 反算:灰色没有色相、黑色连饱和度也没有,反算就丢——拖到黑色再拖回来,色相跳回红色、圆点跳到左边。所以两条讲究:
- 反算时退化的分量沿用上一个状态(黑色沿用色相与饱和度,灰色沿用色相)。
- 外面传回的颜色与内部状态画出来的相同就不换状态:拖动中宿主回传的是取整过的颜色,拿它反算圆点会在像素之间抖。
v-model:state 让宿主替面板留着这份状态:面板关了再开,颜色没被别处改过就接着用。
提交节奏与最近使用
色盘、色相条、透明度条与透明度数字框拖动或微调中逐帧发 input,停手发一次 commit;打字、点最近使用、吸管只发 commit。宿主拿 input 实时改文档,按 commit 把一次调整并成一步撤销。
每次 commit 记进最近使用。缺省整页共享一份、存 localStorage(键 ui:recent-colors),存储不可用时按空处理;recents 传 false 不显示也不记,传 createColorRecents({ key, storage }) 换键或存储,也可以自己实现 ColorRecents(如换成文档里用过的颜色)。
Esc 两段式:输入框里有没提交的字时先撤回并标 defaultPrevented,外面的浮层不跟着关;没有时照常冒泡关浮层。
API
Props
| 名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
alpha | boolean | undefined | true | 能不能改透明度:关掉后不显示透明度条与数字框,输入框里的透明度也不认 |
mixed | boolean | undefined | false | 多选时各不相同:值给 undefined 并带上它,输入框为空、占位「多个值」,色盘从黑色(或留着的状态)起步, 改了就是一个颜色。同 `XNumberField` 的 `mixed`,是显式状态 |
eyedropper | boolean | undefined | true | 显示吸管(浏览器有 `EyeDropper` 才显示,Chromium 系) |
recents | false | ColorRecents | undefined | undefined | 最近使用的来源:缺省整页共享一份、存 localStorage(`ui:recent-colors`,见 `useColorRecents`); `false` 不显示也不记;宿主可以传自己的(`createColorRecents` 换键或存储,或自己实现 `ColorRecents`) |
disabled | boolean | undefined | false | — |
size | "mini" | "small" | "medium" | "large" | "super" | undefined | "small" | 尺寸:mini / small / medium(默认) / large / super;不传则跟随环境 data-size |
modelValue | string | undefined | — | — |
state | Hsva | undefined | — | 面板的内部状态:宿主替面板留着,关了再开颜色没被别处改过就接着用,黑色 / 灰色上的色相不会因重新打开丢掉 |
Emits
| 事件 | 载荷 | 说明 |
|---|---|---|
update:modelValue | [value: string | undefined] | — |
input | [value: string] | — |
commit | [value: string] | — |
update:state | [value: Hsva | undefined] | — |