{"version":3,"file":"color.mjs","sources":["../../../../src/_common/js/color-picker/color.ts"],"sourcesContent":["import tinyColor from 'tinycolor2';\nimport { cmykInputToColor, rgb2cmyk } from './cmyk';\nimport {\n  parseGradientString, GradientColors, GradientColorPoint, isGradientColor\n} from './gradient';\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 * @param object\n * @returns\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 * @param color\n * @returns\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): GradientColorPoint => ({\n  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) {\n      return;\n    }\n    if (this.isGradient) {\n      // 处理gradient模式下切换不同格式时的交互问题\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    const gradientColors = parseGradientString(input);\n    let colorInput = input;\n    if (gradientColors) {\n      this.isGradient = true;\n      const object = gradientColors as GradientColors;\n      const points = object.points.map((c) => genGradientPoint(c.left, c.color));\n      this.gradientStates = {\n        colors: points,\n        degree: object.degree,\n        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 {\n      r, g, b, a\n    } = 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 {\n      h, s, v, a\n    } = 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 {\n      h, s, l, a\n    } = 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 {\n      c, m, y, k\n    } = 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    };\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;\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 {\n      r, g, b, a\n    } = 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 {\n      h, s, v, a\n    } = 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 {\n      h, s, l, a\n    } = 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   * @param color\n   * @returns\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  static hsva2color(h: number, s: number, v: number, a: number) {\n    return tinyColor({\n      h, s, v, a\n    }).toHsvString();\n  }\n\n  static hsla2color(h: number, s: number, l: number, a: number) {\n    return tinyColor({\n      h, s, l, a\n    }).toHslString();\n  }\n\n  static rgba2color(r: number, g: number, b: number, a: number) {\n    return tinyColor({\n      r, g, b, a\n    }).toHsvString();\n  }\n\n  static hex2color(hex: string, a: number) {\n    const color = tinyColor(hex);\n    color.setAlpha(a);\n    return color.toHexString();\n  }\n\n  /**\n   * 对象转颜色字符串\n   * @param object\n   * @param format\n   * @returns\n   */\n  static object2color(object: any, format: string) {\n    if (format === 'CMYK') {\n      const {\n        c, m, y, k\n      } = object;\n      return `cmyk(${c}, ${m}, ${y}, ${k})`;\n    }\n    const color = tinyColor(object, {\n      format,\n    });\n    return color.toRgbString();\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 gradientColor1 = gradientColors2string(parseGradientString(color1) as GradientColors);\n      const gradientColor2 = gradientColors2string(parseGradientString(color2) as GradientColors);\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 => {\n  if (!color) {\n    return null;\n  }\n  const colorObject = Object.create(null);\n  // eslint-disable-next-line no-return-assign\n  COLOR_OBJECT_OUTPUT_KEYS.forEach((key) => (colorObject[key] = color[key]));\n  if (color.isGradient) {\n    colorObject.linearGradient = color.linearGradient;\n  }\n  return colorObject;\n};\n\nexport default Color;\n"],"names":["tinyColor","left","color","_classCallCheck","_defineProperty","s","v","h","a","colors","degree","selectedId","css","_createClass","value","set","points","r","g","b","c","m","y","k","l","format","_class","COLOR_OBJECT_OUTPUT_KEYS","colorObject"],"mappings":"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"}