UNPKG

tdesign-vue-next

Version:
1 lines 61.3 kB
{"version":3,"file":"dep-bb4bb1e5.mjs","sources":["../../../common/js/color-picker/cmyk.ts","../../../common/js/color-picker/gradient.ts","../../../common/js/color-picker/color.ts","../../../common/js/color-picker/draggable.ts","../../../common/js/color-picker/format.ts"],"sourcesContent":["/**\n * rgb 转 cmyk\n * @param red\n * @param green\n * @param blue\n * @returns\n */\nexport const rgb2cmyk = (red: number, green: number, blue: number) => {\n let computedC = 0;\n let computedM = 0;\n let computedY = 0;\n let computedK = 0;\n\n const r = parseInt(`${red}`.replace(/\\s/g, ''), 10);\n const g = parseInt(`${green}`.replace(/\\s/g, ''), 10);\n const b = parseInt(`${blue}`.replace(/\\s/g, ''), 10);\n\n if (r === 0 && g === 0 && b === 0) {\n computedK = 1;\n return [0, 0, 0, 1];\n }\n\n computedC = 1 - r / 255;\n computedM = 1 - g / 255;\n computedY = 1 - b / 255;\n\n const minCMY = Math.min(computedC, Math.min(computedM, computedY));\n computedC = (computedC - minCMY) / (1 - minCMY);\n computedM = (computedM - minCMY) / (1 - minCMY);\n computedY = (computedY - minCMY) / (1 - minCMY);\n computedK = minCMY;\n\n return [computedC, computedM, computedY, computedK];\n};\n\n/**\n * cmyk 转 rgb\n * @param cyan\n * @param magenta\n * @param yellow\n * @param black\n * @returns\n */\nexport const cmyk2rgb = (cyan: number, magenta: number, yellow: number, black: number) => {\n let c = cyan / 100;\n let m = magenta / 100;\n let y = yellow / 100;\n const k = black / 100;\n\n c = c * (1 - k) + k;\n m = m * (1 - k) + k;\n y = y * (1 - k) + k;\n\n let r = 1 - c;\n let g = 1 - m;\n let b = 1 - y;\n\n r = Math.round(255 * r);\n g = Math.round(255 * g);\n b = Math.round(255 * b);\n return {\n r,\n g,\n b,\n };\n};\n\nconst REG_CMYK_STRING = /cmyk\\((\\d+%?),(\\d+%?),(\\d+%?),(\\d+%?)\\)/;\n\nconst toNumber = (str: string) => Math.max(0, Math.min(255, parseInt(str, 10)));\n\n/**\n * 输入色转rgb\n * @param input\n * @returns\n */\nexport const cmykInputToColor = (input: string) => {\n if (/cmyk/i.test(input)) {\n const str = input.replace(/\\s/g, '');\n const match = str.match(REG_CMYK_STRING);\n const c = toNumber(match[1]);\n const m = toNumber(match[2]);\n const y = toNumber(match[3]);\n const k = toNumber(match[4]);\n const { r, g, b } = cmyk2rgb(c, m, y, k);\n return `rgb(${r}, ${g}, ${b})`;\n }\n return input;\n};\n","import { isString, isNull } from 'lodash-es';\n/* eslint-disable no-param-reassign */\n/**\n * 用于反解析渐变字符串为对象\n * https://stackoverflow.com/questions/20215440/parse-css-gradient-rule-with-javascript-regex\n */\nimport tinyColor from 'tinycolor2';\n\n/**\n * Utility combine multiple regular expressions.\n *\n * @param {RegExp[]|string[]} regexpList List of regular expressions or strings.\n * @param {string} flags Normal RegExp flags.\n */\nconst combineRegExp = (regexpList: (string | RegExp)[], flags: string): RegExp => {\n let source = '';\n for (let i = 0; i < regexpList.length; i++) {\n if (isString(regexpList[i])) {\n source += regexpList[i];\n } else {\n source += (regexpList[i] as RegExp).source;\n }\n }\n return new RegExp(source, flags);\n};\n\ninterface RegExpLib {\n gradientSearch: RegExp;\n colorStopSearch: RegExp;\n}\n\ninterface ColorStop {\n color: string;\n position?: string;\n}\n\ninterface ParseGradientResult {\n original: string;\n colorStopList?: ColorStop[];\n line?: string;\n angle?: string;\n sideCorner?: string;\n}\n\n/**\n * Generate the required regular expressions once.\n *\n * Regular Expressions are easier to manage this way and can be well described.\n *\n * @result {object} Object containing regular expressions.\n */\nconst generateRegExp = (): RegExpLib => {\n // Note any variables with \"Capture\" in name include capturing bracket set(s).\n const searchFlags = 'gi'; // ignore case for angles, \"rgb\" etc\n const rAngle = /(?:[+-]?\\d*\\.?\\d+)(?:deg|grad|rad|turn)/; // Angle +ive, -ive and angle types\n // optional 2nd part\n const rSideCornerCapture = /to\\s+((?:(?:left|right|top|bottom)(?:\\s+(?:top|bottom|left|right))?))/;\n const rComma = /\\s*,\\s*/; // Allow space around comma.\n const rColorHex = /#(?:[a-f0-9]{6}|[a-f0-9]{3})/; // 3 or 6 character form\n const rDigits3 = /\\(\\s*(?:\\d{1,3}\\s*,\\s*){2}\\d{1,3}\\s*\\)/;\n const // \"(1, 2, 3)\"\n rDigits4 = /\\(\\s*(?:\\d{1,3}\\s*,\\s*){2}\\d{1,3}\\s*,\\s*\\d*\\.?\\d+\\)/;\n const // \"(1, 2, 3, 4)\"\n rValue = /(?:[+-]?\\d*\\.?\\d+)(?:%|[a-z]+)?/;\n const // \".9\", \"-5px\", \"100%\".\n rKeyword = /[_a-z-][_a-z0-9-]*/;\n const // \"red\", \"transparent\".\n rColor = combineRegExp(\n ['(?:', rColorHex, '|', '(?:rgb|hsl)', rDigits3, '|', '(?:rgba|hsla)', rDigits4, '|', rKeyword, ')'],\n ''\n );\n const rColorStop = combineRegExp([rColor, '(?:\\\\s+', rValue, '(?:\\\\s+', rValue, ')?)?'], '');\n const // Single Color Stop, optional %, optional length.\n rColorStopList = combineRegExp(['(?:', rColorStop, rComma, ')*', rColorStop], '');\n const // List of color stops min 1.\n rLineCapture = combineRegExp(['(?:(', rAngle, ')|', rSideCornerCapture, ')'], '');\n const // Angle or SideCorner\n rGradientSearch = combineRegExp(['(?:(', rLineCapture, ')', rComma, ')?(', rColorStopList, ')'], searchFlags);\n const // Capture 1:\"line\", 2:\"angle\" (optional), 3:\"side corner\" (optional) and 4:\"stop list\".\n rColorStopSearch = combineRegExp(\n ['\\\\s*(', rColor, ')', '(?:\\\\s+', '(', rValue, '))?', '(?:', rComma, '\\\\s*)?'],\n searchFlags\n ); // Capture 1:\"color\" and 2:\"position\" (optional).\n\n return {\n gradientSearch: rGradientSearch,\n colorStopSearch: rColorStopSearch,\n };\n};\n\n/**\n * Actually parse the input gradient parameters string into an object for reusability.\n *\n *\n * @note Really this only supports the standard syntax not historical versions, see MDN for details\n * https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient\n *\n * @param regExpLib\n * @param {string} input\n * @returns {object|undefined}\n */\nconst parseGradient = (regExpLib: RegExpLib, input: string) => {\n let result: ParseGradientResult;\n let matchColorStop: any;\n let stopResult: ColorStop;\n\n // reset search position, because we reuse regex.\n regExpLib.gradientSearch.lastIndex = 0;\n\n const matchGradient = regExpLib.gradientSearch.exec(input);\n if (!isNull(matchGradient)) {\n result = {\n original: matchGradient[0],\n colorStopList: [],\n };\n\n // Line (Angle or Side-Corner).\n if (matchGradient[1]) {\n // eslint-disable-next-line prefer-destructuring\n result.line = matchGradient[1];\n }\n // Angle or undefined if side-corner.\n if (matchGradient[2]) {\n // eslint-disable-next-line prefer-destructuring\n result.angle = matchGradient[2];\n }\n // Side-corner or undefined if angle.\n if (matchGradient[3]) {\n // eslint-disable-next-line prefer-destructuring\n result.sideCorner = matchGradient[3];\n }\n\n // reset search position, because we reuse regex.\n regExpLib.colorStopSearch.lastIndex = 0;\n\n // Loop though all the color-stops.\n matchColorStop = regExpLib.colorStopSearch.exec(matchGradient[4]);\n while (!isNull(matchColorStop)) {\n stopResult = {\n color: matchColorStop[1],\n };\n\n // Position (optional).\n if (matchColorStop[2]) {\n // eslint-disable-next-line prefer-destructuring\n stopResult.position = matchColorStop[2];\n }\n result.colorStopList.push(stopResult);\n\n // Continue searching from previous position.\n matchColorStop = regExpLib.colorStopSearch.exec(matchGradient[4]);\n }\n }\n\n // Can be undefined if match not found.\n return result;\n};\n\nexport interface GradientColorPoint {\n id?: string;\n color?: string;\n left?: number;\n}\n\nexport interface GradientColors {\n points: GradientColorPoint[];\n degree: number;\n}\n\nconst REGEXP_LIB = generateRegExp();\nconst REG_GRADIENT = /.*gradient\\s*\\(((?:\\([^)]*\\)|[^)(]*)*)\\)/gim;\n\n/**\n * 验证是否是渐变字符串\n * @param input\n * @returns\n */\nexport const isGradientColor = (input: string): null | RegExpExecArray => {\n REG_GRADIENT.lastIndex = 0;\n return REG_GRADIENT.exec(input);\n};\n\n// 边界字符串和角度关系\nconst sideCornerDegreeMap = {\n top: 0,\n right: 90,\n bottom: 180,\n left: 270,\n 'top left': 315,\n 'left top': 315,\n 'top right': 45,\n 'right top': 45,\n 'bottom left': 225,\n 'left bottom': 225,\n 'bottom right': 135,\n 'right bottom': 135,\n};\n\n/**\n * 解析渐变字符串为 GradientColors 对象\n * @param input\n * @returns\n */\nexport const parseGradientString = (input: string): GradientColors | false => {\n const match = isGradientColor(input);\n if (!match) return false;\n\n const gradientColors: GradientColors = {\n points: [],\n degree: 0,\n };\n\n const result: ParseGradientResult = parseGradient(REGEXP_LIB, match[1]);\n if (result.original.trim() !== match[1].trim()) return false;\n\n const points: GradientColorPoint[] = result.colorStopList.map(({ color, position }, index, array) => {\n const point = Object.create(null);\n point.color = tinyColor(color).toRgbString();\n\n let left = parseFloat(position);\n if (Number.isNaN(left)) {\n left = (index / (array.length - 1)) * 100;\n }\n\n point.left = left;\n return point;\n });\n gradientColors.points = points;\n\n let degree = parseInt(result.angle, 10);\n if (Number.isNaN(degree)) {\n /* 如果角度不存在,使用 CSS 渐变的默认逻辑(180 deg)\n https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_images/Using_CSS_gradients */\n degree = sideCornerDegreeMap[result.sideCorner as keyof typeof sideCornerDegreeMap] || 180;\n }\n gradientColors.degree = degree;\n\n return gradientColors;\n};\n\nexport default parseGradientString;\n","import tinyColor from 'tinycolor2';\nimport { cmykInputToColor, rgb2cmyk } from './cmyk';\nimport { ALPHA_FORMAT_MAP } from './constants';\nimport { GradientColorPoint, GradientColors, isGradientColor, parseGradientString } from './gradient';\nimport type { AlphaConvertibleFormat, ColorFormat } from './types';\n\nexport interface ColorObject {\n alpha: number;\n css: string;\n hex: string;\n hex8: string;\n hsl: string;\n hsla: string;\n hsv: string;\n hsva: string;\n rgb: string;\n rgba: string;\n saturation: number;\n value: number;\n isGradient: boolean;\n linearGradient?: string;\n}\n\ninterface ColorStates {\n s: number;\n v: number;\n h: number;\n a: number;\n}\n\ninterface GradientStates {\n colors: GradientColorPoint[];\n degree: number;\n selectedId: string;\n css?: string;\n}\n\nconst mathRound = Math.round;\nconst hsv2rgba = (states: ColorStates): tinyColor.ColorFormats.RGBA => tinyColor(states).toRgb();\nconst hsv2hsva = (states: ColorStates): tinyColor.ColorFormats.HSVA => tinyColor(states).toHsv();\nconst hsv2hsla = (states: ColorStates): tinyColor.ColorFormats.HSLA => tinyColor(states).toHsl();\n\n/**\n * 将渐变对象转换成字符串\n */\nexport const gradientColors2string = (object: GradientColors): string => {\n const { points, degree } = object;\n const colorsStop = points\n .sort((pA, pB) => pA.left - pB.left)\n .map((p) => `${p.color} ${Math.round(p.left * 100) / 100}%`);\n\n return `linear-gradient(${degree}deg,${colorsStop.join(',')})`;\n};\n\n/**\n * 去除颜色的透明度\n */\nexport const getColorWithoutAlpha = (color: string) => tinyColor(color).setAlpha(1).toHexString();\n\n// 生成一个随机ID\nexport const genId = () => (1 + Math.random() * 4294967295).toString(16);\n\n/**\n * 生成一个渐变颜色\n * @param left\n * @param color\n * @returns\n */\nexport const genGradientPoint = (left: number, color: string, id?: string): GradientColorPoint => ({\n id: id || genId(),\n left,\n color,\n});\n\nexport class Color {\n states: ColorStates = {\n s: 100,\n v: 100,\n h: 100,\n a: 1,\n };\n\n originColor: string;\n\n isGradient: boolean;\n\n gradientStates: GradientStates = {\n colors: [],\n degree: 0,\n selectedId: null,\n css: '',\n };\n\n constructor(input: string) {\n this.update(input);\n }\n\n update(input: string) {\n if (input === this.originColor) return;\n const gradientColors = parseGradientString(input);\n\n if (this.isGradient && !gradientColors) {\n /* case 1: 渐变模式单独修改某个位置点的色值 */\n const colorHsv = tinyColor(input).toHsv();\n this.states = colorHsv;\n this.updateCurrentGradientColor();\n return;\n }\n this.originColor = input;\n this.isGradient = false;\n let colorInput = input;\n\n /* case 2: 修改整个渐变,生成一套新的颜色点 */\n if (gradientColors) {\n this.isGradient = true;\n const object = gradientColors as GradientColors;\n const points = object.points.map((c, index) =>\n genGradientPoint(c.left, c.color, this.gradientStates.colors[index]?.id)\n );\n this.gradientStates = {\n colors: points,\n degree: object.degree,\n selectedId: this.gradientStates.selectedId || points[0]?.id || null,\n };\n this.gradientStates.css = this.linearGradient;\n colorInput = this.gradientSelectedPoint?.color;\n }\n\n this.updateStates(colorInput);\n }\n\n get saturation() {\n return this.states.s;\n }\n\n set saturation(value) {\n this.states.s = Math.max(0, Math.min(100, value));\n this.updateCurrentGradientColor();\n }\n\n get value() {\n return this.states.v;\n }\n\n set value(value) {\n this.states.v = Math.max(0, Math.min(100, value));\n this.updateCurrentGradientColor();\n }\n\n get hue() {\n return this.states.h;\n }\n\n set hue(value) {\n this.states.h = Math.max(0, Math.min(360, value));\n this.updateCurrentGradientColor();\n }\n\n get alpha() {\n return this.states.a;\n }\n\n set alpha(value) {\n this.states.a = Math.max(0, Math.min(1, Math.round(value * 100) / 100));\n this.updateCurrentGradientColor();\n }\n\n get rgb() {\n const { r, g, b } = hsv2rgba(this.states);\n return `rgb(${mathRound(r)}, ${mathRound(g)}, ${mathRound(b)})`;\n }\n\n get rgba() {\n const { r, g, b, a } = hsv2rgba(this.states);\n return `rgba(${mathRound(r)}, ${mathRound(g)}, ${mathRound(b)}, ${a})`;\n }\n\n get hsv() {\n const { h, s, v } = this.getHsva();\n return `hsv(${h}, ${s}%, ${v}%)`;\n }\n\n get hsva() {\n const { h, s, v, a } = this.getHsva();\n return `hsva(${h}, ${s}%, ${v}%, ${a})`;\n }\n\n get hsl() {\n const { h, s, l } = this.getHsla();\n return `hsl(${h}, ${s}%, ${l}%)`;\n }\n\n get hsla() {\n const { h, s, l, a } = this.getHsla();\n return `hsla(${h}, ${s}%, ${l}%, ${a})`;\n }\n\n get hex() {\n return tinyColor(this.states).toHexString();\n }\n\n get hex8() {\n return tinyColor(this.states).toHex8String();\n }\n\n get cmyk() {\n const { c, m, y, k } = this.getCmyk();\n return `cmyk(${c}, ${m}, ${y}, ${k})`;\n }\n\n get css() {\n if (this.isGradient) {\n return this.linearGradient;\n }\n return this.rgba;\n }\n\n get linearGradient() {\n const { gradientColors, gradientDegree } = this;\n return gradientColors2string({\n points: gradientColors,\n degree: gradientDegree,\n });\n }\n\n get gradientColors() {\n return this.gradientStates.colors;\n }\n\n set gradientColors(colors: GradientColorPoint[]) {\n this.gradientStates.colors = colors;\n this.gradientStates.css = this.linearGradient;\n }\n\n get gradientSelectedId() {\n return this.gradientStates.selectedId;\n }\n\n set gradientSelectedId(id: string) {\n if (id === this.gradientSelectedId) {\n return;\n }\n this.gradientStates.selectedId = id;\n this.updateStates(this.gradientSelectedPoint?.color);\n }\n\n get gradientDegree() {\n return this.gradientStates.degree;\n }\n\n set gradientDegree(degree: number) {\n this.gradientStates.degree = Math.max(0, Math.min(360, degree));\n this.gradientStates.css = this.linearGradient;\n }\n\n get gradientSelectedPoint() {\n const { gradientColors, gradientSelectedId } = this;\n return gradientColors.find((color) => color.id === gradientSelectedId);\n }\n\n getFormatsColorMap() {\n return {\n HEX: this.hex,\n CMYK: this.cmyk,\n RGB: this.rgb,\n RGBA: this.rgba,\n HSL: this.hsl,\n HSLA: this.hsla,\n HSV: this.hsv,\n HSVA: this.hsva,\n CSS: this.css,\n HEX8: this.hex8,\n };\n }\n\n getFormattedColor(format: ColorFormat, enableAlpha: boolean) {\n if (this.isGradient) return this.linearGradient;\n const finalFormat = (\n enableAlpha && format in ALPHA_FORMAT_MAP ? ALPHA_FORMAT_MAP[format as AlphaConvertibleFormat] : format\n ) as keyof ReturnType<Color['getFormatsColorMap']>;\n return this.getFormatsColorMap()[finalFormat];\n }\n\n updateCurrentGradientColor() {\n const { isGradient, gradientColors, gradientSelectedId } = this;\n const { length } = gradientColors;\n const current = this.gradientSelectedPoint;\n if (!isGradient || length === 0 || !current) {\n return false;\n }\n const index = gradientColors.findIndex((color) => color.id === gradientSelectedId);\n const newColor = {\n ...current,\n color: this.rgba,\n };\n gradientColors.splice(index, 1, newColor);\n this.gradientColors = gradientColors.slice();\n return this;\n }\n\n updateStates(input: string) {\n const color = tinyColor(cmykInputToColor(input));\n const hsva = color.toHsv();\n this.states = hsva;\n }\n\n getRgba() {\n const { r, g, b, a } = hsv2rgba(this.states);\n return {\n r: mathRound(r),\n g: mathRound(g),\n b: mathRound(b),\n a,\n };\n }\n\n getCmyk() {\n const { r, g, b } = this.getRgba();\n const [c, m, y, k] = rgb2cmyk(r, g, b);\n return {\n c: mathRound(c * 100),\n m: mathRound(m * 100),\n y: mathRound(y * 100),\n k: mathRound(k * 100),\n };\n }\n\n getHsva(): tinyColor.ColorFormats.HSVA {\n let { h, s, v, a } = hsv2hsva(this.states);\n h = mathRound(h);\n s = mathRound(s * 100);\n v = mathRound(v * 100);\n a *= 1;\n return {\n h,\n s,\n v,\n a,\n };\n }\n\n getHsla(): tinyColor.ColorFormats.HSLA {\n let { h, s, l, a } = hsv2hsla(this.states);\n h = mathRound(h);\n s = mathRound(s * 100);\n l = mathRound(l * 100);\n a *= 1;\n return {\n h,\n s,\n l,\n a,\n };\n }\n\n /**\n * 判断输入色是否与当前色相同\n */\n equals(color: string): boolean {\n return tinyColor.equals(this.rgba, color);\n }\n\n /**\n * 校验输入色是否是一个有效颜色\n * @param color\n * @returns\n */\n static isValid(color: string): boolean {\n if (parseGradientString(color)) {\n return true;\n }\n return tinyColor(color).isValid();\n }\n\n /**\n * 对象转颜色字符串\n */\n static object2color(object: any, format: ColorFormat) {\n if (format === 'CMYK') {\n const { c, m, y, k } = object;\n return `cmyk(${c}, ${m}, ${y}, ${k})`;\n }\n\n if (format === 'RGB' || format === 'RGBA') {\n return tinyColor(object).toRgbString();\n }\n\n if (format === 'HSL' || format === 'HSLA') {\n return tinyColor(object).toHslString();\n }\n\n if (format === 'HSV' || format === 'HSVA') {\n return tinyColor(object).toHsvString();\n }\n\n return tinyColor(object).toHexString();\n }\n\n /**\n * 是否是渐变色\n * @param input\n * @returns\n */\n static isGradientColor = (input: string) => !!isGradientColor(input);\n\n /**\n * 比较两个颜色是否相同\n * @param color1\n * @param color2\n * @returns\n */\n static compare = (color1: string, color2: string): boolean => {\n const isGradientColor1 = Color.isGradientColor(color1);\n const isGradientColor2 = Color.isGradientColor(color2);\n if (isGradientColor1 && isGradientColor2) {\n const gradientStr1 = parseGradientString(color1);\n const gradientStr2 = parseGradientString(color2);\n if (!gradientStr1 || !gradientStr2) return false;\n\n const gradientColor1 = gradientColors2string(gradientStr1);\n const gradientColor2 = gradientColors2string(gradientStr2);\n return gradientColor1 === gradientColor2;\n }\n if (!isGradientColor1 && !isGradientColor2) {\n return tinyColor.equals(color1, color2);\n }\n return false;\n };\n}\n\nconst COLOR_OBJECT_OUTPUT_KEYS = [\n 'alpha',\n 'css',\n 'hex',\n 'hex8',\n 'hsl',\n 'hsla',\n 'hsv',\n 'hsva',\n 'rgb',\n 'rgba',\n 'saturation',\n 'value',\n 'isGradient',\n];\n\n/**\n * 获取对外输出的color对象\n * @param color\n * @returns\n */\nexport const getColorObject = (color: Color): ColorObject | null => {\n if (!color) {\n return null;\n }\n const colorObject = Object.create(null);\n COLOR_OBJECT_OUTPUT_KEYS.forEach((key) => {\n colorObject[key] = (color as { [key: string]: any })[key];\n });\n if (color.isGradient) {\n colorObject.linearGradient = color.linearGradient;\n }\n return colorObject;\n};\n\nexport default Color;\n","/* eslint-disable no-use-before-define */\nexport interface Coordinate {\n x: number;\n y: number;\n}\n\nexport type DraggableEvent = MouseEvent;\n\ninterface DraggableCallback {\n (coordinate: Coordinate, event?: DraggableEvent): void;\n}\n\nexport interface DraggableProps {\n start?: DraggableCallback;\n drag?: DraggableCallback;\n end?: DraggableCallback;\n}\n\ninterface DraggableHandles {\n start: (event: DraggableEvent) => void;\n drag: (event: DraggableEvent) => void;\n end: (event: DraggableEvent) => void;\n}\n\n// 配置项\nconst defaultsOptions: DraggableProps = {\n start: (coordinate: Coordinate, event: DraggableEvent) => {},\n drag: (coordinate: Coordinate, event: DraggableEvent) => {},\n end: (coordinate: Coordinate, event: DraggableEvent) => {},\n};\n\nexport class Draggable {\n private dragging = false;\n\n private $el: HTMLElement;\n\n private props: DraggableProps;\n\n private handles: DraggableHandles;\n\n constructor(el: HTMLElement, options?: DraggableProps) {\n this.$el = el;\n this.props = { ...defaultsOptions, ...options };\n this.handles = {\n start: this.#dragStart.bind(this),\n drag: this.#drag.bind(this),\n end: this.#dragEnd.bind(this),\n };\n this.$el.addEventListener('mousedown', this.handles.start, false);\n }\n\n #dragStart(event: DraggableEvent) {\n if (this.dragging) {\n return;\n }\n // event.preventDefault();\n window.addEventListener('mousemove', this.handles.drag, false);\n window.addEventListener('mouseup', this.handles.end, false);\n window.addEventListener('contextmenu', this.handles.end, false);\n this.dragging = true;\n this.props.start(this.#getCoordinate(event), event);\n }\n\n #drag(event: DraggableEvent) {\n if (!this.dragging) {\n return;\n }\n this.props.drag(this.#getCoordinate(event), event);\n }\n\n #dragEnd(event: DraggableEvent) {\n setTimeout(() => {\n this.dragging = false;\n this.props.end(this.#getCoordinate(event), event);\n }, 0);\n window.removeEventListener('mousemove', this.handles.drag, false);\n window.removeEventListener('mouseup', this.handles.end, false);\n window.removeEventListener('contextmenu', this.handles.end, false);\n }\n\n #getCoordinate(event: DraggableEvent) {\n const rect = this.$el.getBoundingClientRect();\n const mouseEvent = event;\n const left = mouseEvent.clientX - rect.left;\n const top = mouseEvent.clientY - rect.top;\n return {\n y: Math.min(Math.max(0, top), rect.height),\n x: Math.min(Math.max(0, left), rect.width),\n };\n }\n\n destroy() {\n this.$el.removeEventListener('mousedown', this.handles.start, false);\n window.removeEventListener('mousemove', this.handles.drag, false);\n window.removeEventListener('mouseup', this.handles.end, false);\n window.removeEventListener('contextmenu', this.handles.end, false);\n }\n}\n\nexport default Draggable;\n","import Color from './color';\nimport { ALPHA_FORMAT_MAP, COLOR_FORMAT_INPUTS, FORMATS } from './constants';\nimport type { AlphaConvertibleFormat, BasicColorFormat, ColorFormat } from './types';\n\n/**\n * 兜底处理用户传入的格式,例如:\n * - 传入 `RGB`, 但 `enableAlpha` ,则返回 `RGBA`\n */\nexport const initColorFormat = (format: ColorFormat, enableAlpha: boolean) => {\n if (enableAlpha && format in ALPHA_FORMAT_MAP) {\n return format in ALPHA_FORMAT_MAP ? ALPHA_FORMAT_MAP[format as AlphaConvertibleFormat] : format;\n }\n return format as BasicColorFormat;\n};\n\n/**\n * 获取不同格式的输入输出值\n * - encode:将字符串转换为单独的颜色值,例如 `{r: 255, g: 255, b: 255}`\n * - decode:获取完整的颜色字符串,例如 `rgb(255, 255, 255)`\n */\nexport const getColorFormatMap = (color: Color, type: 'encode' | 'decode') => {\n if (type === 'encode') {\n return {\n HSV: color.getHsva(),\n HSVA: color.getHsva(),\n HSL: color.getHsla(),\n HSLA: color.getHsla(),\n RGB: color.getRgba(),\n RGBA: color.getRgba(),\n CMYK: color.getCmyk(),\n CSS: {\n css: color.css,\n },\n HEX: {\n hex: color.hex,\n },\n HEX8: {\n hex: color.hex8, // 为了减少转换 hex8 的 key 也对应 hex\n },\n };\n }\n\n // decode\n return color.getFormatsColorMap();\n};\n\n/**\n * 获取下拉框的格式选项\n */\nexport const getColorFormatOptions = (enableAlpha: boolean) =>\n enableAlpha\n ? FORMATS.map((item) => (item in ALPHA_FORMAT_MAP ? ALPHA_FORMAT_MAP[item as AlphaConvertibleFormat] : item))\n : FORMATS;\n\n/**\n * 获取当前格式的输入框配置\n */\nexport const getColorFormatInputs = (format: ColorFormat = 'RGB', enableAlpha: boolean) => {\n let finalFormat;\n\n /* 为了减少 `ALPHA_FORMAT_MAP` 中的重复代码\n `RGBA/HEX8/HSLA/HSVA` 会被转换为 `RGB/HEX/HSL/HSV` 后再匹配\n 但在下一步会 push 一个代表透明度的输入框 */\n if (enableAlpha) {\n finalFormat =\n Object.keys(ALPHA_FORMAT_MAP).find(\n (key) => key in ALPHA_FORMAT_MAP && ALPHA_FORMAT_MAP[key as AlphaConvertibleFormat] === format\n ) || format;\n } else {\n finalFormat = format;\n }\n\n if (!COLOR_FORMAT_INPUTS[finalFormat as BasicColorFormat]) return [];\n\n const configs = [...COLOR_FORMAT_INPUTS[finalFormat as BasicColorFormat]];\n\n // CMYK 格式不支持透明度\n if (enableAlpha && format !== 'CMYK') {\n configs.push({\n type: 'inputNumber',\n key: 'a',\n min: 0,\n max: 100,\n format: (value: number) => `${value}%`,\n flex: 1.15,\n });\n }\n\n return configs;\n};\n"],"names":["rgb2cmyk","red","green","blue","computedC","computedM","computedY","computedK","r","parseInt","concat","replace","g","b","minCMY","Math","min","cmyk2rgb","cyan","magenta","yellow","black","c","m","y","k","round","REG_CMYK_STRING","toNumber","str","max","cmykInputToColor","input","test","match","_cmyk2rgb","combineRegExp","regexpList","flags","source","i","length","isString","RegExp","generateRegExp","searchFlags","rAngle","rSideCornerCapture","rComma","rColorHex","rDigits3","rDigits4","rValue","rKeyword","rColor","rColorStop","rColorStopList","rLineCapture","rGradientSearch","rColorStopSearch","gradientSearch","colorStopSearch","parseGradient","regExpLib","result","matchColorStop","stopResult","lastIndex","matchGradient","exec","isNull","original","colorStopList","line","angle","sideCorner","color","position","push","REGEXP_LIB","REG_GRADIENT","isGradientColor","sideCornerDegreeMap","top","right","bottom","left","parseGradientString","gradientColors","points","degree","trim","map","_ref","index","array","point","Object","create","tinyColor","toRgbString","parseFloat","Number","isNaN","mathRound","hsv2rgba","states","toRgb","hsv2hsva","toHsv","hsv2hsla","toHsl","gradientColors2string","object","colorsStop","sort","pA","pB","p","join","getColorWithoutAlpha","setAlpha","toHexString","genId","random","toString","genGradientPoint","id","Color","_classCallCheck","_defineProperty","s","v","h","a","colors","selectedId","css","update","_createClass","key","value","_this","originColor","isGradient","colorHsv","updateCurrentGradientColor","colorInput","_points$","_this$gradientSelecte","_this$gradientStates$","gradientStates","linearGradient","gradientSelectedPoint","updateStates","get","set","_hsv2rgba","_hsv2rgba2","_this$getHsva","getHsva","_this$getHsva2","_this$getHsla","getHsla","l","_this$getHsla2","toHex8String","_this$getCmyk","getCmyk","rgba","gradientDegree","_this$gradientSelecte2","gradientSelectedId","find","getFormatsColorMap","HEX","hex","CMYK","cmyk","RGB","rgb","RGBA","HSL","hsl","HSLA","hsla","HSV","hsv","HSVA","hsva","CSS","HEX8","hex8","getFormattedColor","format","enableAlpha","finalFormat","ALPHA_FORMAT_MAP","current","findIndex","newColor","_objectSpread","splice","slice","getRgba","_hsv2rgba3","_this$getRgba","_rgb2cmyk","_rgb2cmyk2","_slicedToArray","_hsv2hsva","_hsv2hsla","equals","isValid","object2color","toHslString","toHsvString","_Color","color1","color2","isGradientColor1","isGradientColor2","gradientStr1","gradientStr2","gradientColor1","gradientColor2","COLOR_OBJECT_OUTPUT_KEYS","getColorObject","colorObject","forEach","defaultsOptions","start","coordinate","event","drag","end","_Draggable_brand","WeakSet","Draggable","el","options","_classPrivateMethodInitSpec","$el","props","handles","_assertClassBrand","_dragStart","bind","_drag","_dragEnd","addEventListener","destroy","removeEventListener","window","dragging","_getCoordinate","call","setTimeout","rect","getBoundingClientRect","mouseEvent","clientX","clientY","height","x","width","initColorFormat","getColorFormatMap","type","getColorFormatOptions","FORMATS","item","getColorFormatInputs","arguments","undefined","keys","COLOR_FORMAT_INPUTS","configs","_toConsumableArray","flex"],"mappings":"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