element-plus
Version:
A Component Library for Vue 3
1 lines • 6.45 kB
Source Map (JSON)
{"version":3,"file":"color.mjs","sources":["../../../../../../../packages/components/color-picker-panel/src/utils/color.ts"],"sourcesContent":["import { TinyColor } from '@ctrl/tinycolor'\nimport { hasOwn } from '@element-plus/utils'\n\nimport type { ColorFormats } from '@ctrl/tinycolor'\n\ninterface ColorOptions {\n enableAlpha: boolean\n format: string\n value?: string | null\n}\n\nexport default class Color {\n private _hue = 0\n private _saturation = 100\n private _value = 100\n private _alpha = 100\n private _tiny = new TinyColor()\n private _isValid = false\n public enableAlpha = false\n public format = ''\n public value = ''\n public selected?: boolean\n\n constructor(options: Partial<ColorOptions> = {}) {\n for (const option in options) {\n if (hasOwn(options, option)) {\n this[option] = options[option]\n }\n }\n if (options.value) {\n this.fromString(options.value)\n } else {\n this.doOnChange()\n }\n }\n\n set(prop: { [key: string]: any } | any, value?: number) {\n if (arguments.length === 1 && typeof prop === 'object') {\n for (const p in prop) {\n if (hasOwn(prop, p)) {\n this.set(p, prop[p])\n }\n }\n\n return\n }\n ;(this as any)[`_${prop}`] = value\n this._isValid = true\n this.doOnChange()\n }\n\n get(prop: string) {\n if (['hue', 'saturation', 'value', 'alpha'].includes(prop)) {\n return Math.round((this as any)[`_${prop}`])\n }\n return (this as any)[`_${prop}`]\n }\n\n toRgb() {\n return this._isValid ? this._tiny.toRgb() : { r: 255, g: 255, b: 255, a: 0 }\n }\n\n fromString(value: string) {\n const color = new TinyColor(value)\n this._isValid = color.isValid\n if (color.isValid) {\n const { h, s, v, a } = color.toHsv()\n this._hue = h\n this._saturation = s * 100\n this._value = v * 100\n this._alpha = a * 100\n } else {\n this._hue = 0\n this._saturation = 100\n this._value = 100\n this._alpha = 100\n }\n this.doOnChange()\n }\n\n clear() {\n this._isValid = false\n this.value = ''\n this._hue = 0\n this._saturation = 100\n this._value = 100\n this._alpha = 100\n }\n\n compare(color: this) {\n const compareColor = new TinyColor({\n h: color._hue,\n s: color._saturation / 100,\n v: color._value / 100,\n a: color._alpha / 100,\n })\n return this._tiny.equals(compareColor)\n }\n\n doOnChange() {\n const { _hue, _saturation, _value, _alpha, format, enableAlpha } = this\n let _format = format || (enableAlpha ? 'rgb' : 'hex')\n if (format === 'hex' && enableAlpha) {\n _format = 'hex8'\n }\n this._tiny = new TinyColor({\n h: _hue,\n s: _saturation / 100,\n v: _value / 100,\n a: _alpha / 100,\n })\n this.value = this._isValid\n ? this._tiny.toString(_format as ColorFormats)\n : ''\n }\n}\n"],"names":[],"mappings":"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"}