{"version":3,"sources":["../src/color-converter.ts","../src/color-names.ts","../src/utils.ts","../src/input-parser.ts","../src/moo-color.ts"],"names":["hslToRgb","h","s","l","c","x","m","r","g","b","val","rgbToHsl","max","min","delta","hwbToRgb","hue","white","black","v","hwbToHsv","hsvToRgb","rgbToHwb","rgbToHsv","hsvToHwb","cmykToRgb","y","k","red","green","blue","rgbToCmyk","i","w","resolveHwb","rgbToHex","a","enableShort","arr","hex","hexToShorthand","pairs","total","color_names_default","Names","clamp","num","degree","resolveAlpha","n","decimal","precision","factor","getRandom","arrayIsEqual","arr1","arr2","linearize","value","inputParser","input","parseHwb","parseHsl","parseHsv","parseCmyk","parseRgb","shortHex","rgba","percent","hexToAlpha","values","alpha","hsl","hwb","hsv","cmyk","MooColor","_MooColor","#model","#values","#alpha","color1","color2","percentOf1","c1","options","vals","color","str","parsed","model","#convert","rgb","#toRgbValues","rLin","gLin","bLin","l1","l2","args","mode","name","parts","#getValuesAs","amount","#manipulate","_s","d","p","c2","asModel","callback","newVals","finalVals","from","to"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Converts an HSL to RGB.\n * @see https://www.rapidtables.com/convert/color/hsl-to-rgb.html\n * @export\n * @param {number} h hue\n * @param {number} s saturation 0-100\n * @param {number} l lightness 0-100\n * @returns {number[]} [red, green, blue] 0-255\n */\nexport function hslToRgb(h: number, s: number, l: number): number[] {\n  h /= 60, s /= 100, l /= 100;\n  const c = (1 - Math.abs(2 * l - 1)) * s;\n  const x = c * (1 - Math.abs(h % 2 - 1));\n  const m = l - c / 2;\n  let r = 0;\n  let g = 0;\n  let b = 0;\n  switch (Math.floor(h)) {\n    case 0: r = c; g = x; b = 0; break;\n    case 1: r = x; g = c; b = 0; break;\n    case 2: r = 0; g = c; b = x; break;\n    case 3: r = 0; g = x; b = c; break;\n    case 4: r = x; g = 0; b = c; break;\n    case 5: r = c; g = 0; b = x; break;\n  }\n  return [r, g, b].map(val => (val + m) * 255);\n}\n\n/**\n * Converts RGB to HSL.\n * @see https://www.rapidtables.com/convert/color/rgb-to-hsl.html\n * @export\n * @param {number} r red 0-255\n * @param {number} g green 0-255\n * @param {number} b blue 0-255\n * @returns {number[]} [hue, saturation, lightness] (0-360, 0-100, 0-100)\n */\nexport function rgbToHsl(r: number, g: number, b: number): number[] {\n  r /= 255, g /= 255, b /= 255;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const delta = max - min;\n  let h;\n  if (delta === 0) {\n    h = 0;\n  } else if (max === r) {\n    h = 60 * ((g - b) / delta % 6);\n  } else if (max === g) {\n    h = 60 * ((b - r) / delta + 2);\n  } else {\n    h = 60 * ((r - g) / delta + 4);\n  }\n  const l = (max + min) / 2;\n  const s = delta === 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));\n  return [h, s * 100, l * 100];\n}\n\n/**\n * Converts HWB to RGB.\n * @export\n * @param {number} hue hue 0-360\n * @param {number} white whiteness 0-100\n * @param {number} black blackness 0-100\n * @returns {number[]} [red, green, blue] 0-255\n */\nexport function hwbToRgb(hue: number, white: number, black: number): number[] {\n  const [h, s, v] = hwbToHsv(hue, white, black);\n  return hsvToRgb(h, s, v);\n}\n\n/**\n * Converts RGB to HWB.\n * @export\n * @param {number} r red 0-255\n * @param {number} g green 0-255\n * @param {number} b blue 0-255\n * @returns {number[]} [hue, whiteness, blackness] (0-360, 0-100, 0-100)\n */\nexport function rgbToHwb(r: number, g: number, b: number): number[] {\n  const [h, s, v] = rgbToHsv(r, g, b);\n  return hsvToHwb(h, s, v);\n}\n\n/**\n * Converts CMYK to RGB.\n * @see https://www.rapidtables.com/convert/color/cmyk-to-rgb.html\n * @export\n * @param {number} c cyan 0-100\n * @param {number} m magenta 0-100\n * @param {number} y yellow 0-100\n * @param {number} k black 0-100\n * @returns {number[]} [red, green, blue] 0-255\n */\nexport function cmykToRgb(c: number, m: number, y: number, k: number): number[] {\n  c /= 100, m /= 100, y /= 100, k /= 100;\n  const red = 255 * (1 - c) * (1 - k);\n  const green = 255 * (1 - m) * (1 - k);\n  const blue = 255 * (1 - y) * (1 - k);\n  return [red, green, blue];\n}\n\n/**\n * Converts RGB to CMYK\n * @see https://www.rapidtables.com/convert/color/rgb-to-cmyk.html\n * @export\n * @param {number} r red 0-255\n * @param {number} g green 0-255\n * @param {number} b blue 0-255\n * @returns {number[]} [cyan, magenta, yellow, black] 0-100\n */\nexport function rgbToCmyk(r: number, g: number, b: number): number[] {\n  r /= 255, g /= 255, b /= 255;\n  const k = 1 - Math.max(r, g, b);\n  const c = (1 - r - k) / (1 - k);\n  const m = (1 - g - k) / (1 - k);\n  const y = (1 - b - k) / (1 - k);\n  return [c, m, y, k].map(x => x * 100);\n}\n\n/**\n * Converts HSV to RGB.\n * @see https://www.rapidtables.com/convert/color/hsv-to-rgb.html\n * @export\n * @param {number} h hue 0-360\n * @param {number} s saturation 0-100\n * @param {number} v value 0-100\n * @returns {number[]} [red, green, blue] 0-255\n */\nexport function hsvToRgb(h: number, s: number, v: number): number[] {\n  s /= 100; v /= 100;\n  let r = 0;\n  let g = 0;\n  let b = 0;\n  const i = h / 60;\n  const c = v * s;\n  const x = c * (1 - Math.abs(i % 2 - 1));\n  const m = v - c;\n  switch (Math.floor(i)) {\n    case 0: r = c; g = x; b = 0; break;\n    case 1: r = x; g = c; b = 0; break;\n    case 2: r = 0; g = c; b = x; break;\n    case 3: r = 0; g = x; b = c; break;\n    case 4: r = x; g = 0; b = c; break;\n    case 5: r = c; g = 0; b = x; break;\n  }\n  return [r, g, b].map(val => (val + m) * 255);\n}\n\n/**\n * Converts RGB to HSV.\n * @see https://www.rapidtables.com/convert/color/rgb-to-hsv.html\n * @export\n * @param {number} r red 0-255\n * @param {number} g green 0-255\n * @param {number} b blue 0-255\n * @returns {[number, number, number]} [hue, saturation, value] (0-360, 0-100, 0-100)\n */\nexport function rgbToHsv(r: number, g: number, b: number): [number, number, number] {\n  r /= 255, g /= 255, b /= 255;\n  let h;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const delta = max - min;\n  if (delta === 0) {\n    h = 0;\n  } else if (max === r) {\n    h = 60 * ((g - b) / delta % 6);\n  } else if (max === g) {\n    h = 60 * ((b - r) / delta + 2);\n  } else {\n    h = 60 * ((r - g) / delta + 4);\n  }\n  const s = max === 0 ? 0 : delta / max;\n  const v = max;\n  return [h, s * 100, v * 100];\n}\n\n/**\n * Converts HSV to HWB\n * @see https://en.wikipedia.org/wiki/HWB_color_model\n * @export\n * @param {number} h hue 0-360\n * @param {number} s saturation 0-100\n * @param {number} v value 0-100\n * @returns {number[]} [hue, whiteness, blackness] (0-360, 0-100, 0-100)\n */\nexport function hsvToHwb(h: number, s: number, v: number): number[] {\n  s /= 100, v /= 100;\n  const white = (1 - s) * v;\n  const black = 1 - v;\n  return [h, white * 100, black * 100];\n}\n\n/**\n * Converts HWB to HSV.\n * @see https://en.wikipedia.org/wiki/HWB_color_model\n * @export\n * @param {number} h hue 0-360\n * @param {number} w whiteness 0-100\n * @param {number} b blackness 0-100\n * @returns {[number, number, number]} [hue, saturation, value] (0-360, 0-100, 0-100)\n */\nexport function hwbToHsv(h: number, w: number, b: number): [number, number, number] {\n  [h, w, b] = resolveHwb(h, w, b);\n  w /= 100, b /= 100;\n  const s = 1 - w / (1 - b);\n  const v = 1 - b;\n  return [h, s * 100, v * 100];\n}\n\n/**\n * Converts RGB to HEX string.\n * @export\n * @param {number} r red 0-255\n * @param {number} g green 0-255\n * @param {number} b blue 0-255\n * @param {(number|null)} [a] alpha 0-1 or null\n * @param {boolean} [enableShort] enable shorthand, default is false.\n * @returns {string} Hex string. e.g. 'ff0000'\n */\nexport function rgbToHex(r: number, g: number, b: number, a?: number|null, enableShort?: boolean): string {\n  const arr = [r, g, b];\n  if (typeof a === 'number') {\n    arr.push(Math.round(a * 255));\n  }\n  const hex = arr.map(x => x.toString(16).padStart(2, '0')).join('');\n  return enableShort ? hexToShorthand(hex) : hex;\n}\n\nfunction hexToShorthand(hex: string): string {\n  const pairs = hex.match(/.{2}/g);\n  if (!pairs) return hex;\n  const isShorthandable = pairs.every(x => /(.)\\1+/.test(x));\n  return isShorthandable ? pairs.map(x => x.substring(1)).join('') : hex;\n}\n\n/**\n * Converts HEX string to RGB.\n * @export\n * @param {string} hex hex string. e.g. 'ff0000', 'f00', 'ff000080'\n * @returns {number[]} [red, green, blue, alpha?] (rgb: 0-255, alpha: 0-1)\n */\nexport function hexToRgb(hex: string): number[] {\n  const short = /^#?([a-f\\d])([a-f\\d])([a-f\\d])([a-f\\d])?$/i;\n  const expanded = hex.replace(short, (_m, r, g, b, a) => {\n    const alpha = typeof a === 'undefined' ? '' : (a as string);\n    return r + r + g + g + b + b + alpha + alpha;\n  });\n  return (expanded.match(/.{2}/g) ?? [])\n    .map((x, i) => i !== 3 ? parseInt(x, 16) : parseInt(x, 16) / 255);\n}\n\n/**\n * Resolve HWB values.\n * @see https://drafts.csswg.org/css-color/#the-hwb-notation\n * @export\n * @param {number} h hue 0-360\n * @param {number} w whiteness 0-100\n * @param {number} b blackness 0-100\n * @returns {[number, number, number]} [hue, whiteness, blackness]\n */\nexport function resolveHwb(h: number, w: number, b: number): [number, number, number] {\n  const total = w + b;\n  if (total > 100) {\n    w = Number((w / total).toFixed(4)) * 100;\n    b = Number((b / total).toFixed(4)) * 100;\n  }\n  return [h, w, b];\n}\n","import Names from 'color-name';\n\ninterface ColorNames {\n  [index: string]: [number, number, number];\n}\n\nexport default Names as ColorNames;\n","export function clamp(num: number, min: number, max: number): number {\n  return Math.min(Math.max(min, num), max);\n}\n\nexport function degree(num: string | number): number {\n  const n = typeof num === 'string' ? parseFloat(num) : num;\n  return ((n % 360) + 360) % 360;\n}\n\nexport function resolveAlpha(a: string | number | undefined): number {\n  const n = typeof a === 'string' ? parseFloat(a) : (a ?? NaN);\n  return clamp(isNaN(n) ? 1 : n, 0, 1);\n}\n\n/**\n * Round to a given number of decimal places.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n */\nexport function decimal(num: number, precision: number): number {\n  const factor = 10 ** precision;\n  return Math.round(num * factor) / factor;\n}\n\nexport function getRandom(min: number, max: number, precision = 0): number {\n  const num = Math.random() * (max - min) + min;\n  return decimal(num, precision);\n}\n\nexport function arrayIsEqual(arr1: unknown[], arr2: unknown[]): boolean {\n  return (\n    arr1.length === arr2.length &&\n    arr1.every((v, i) =>\n      Array.isArray(v) ? arrayIsEqual(v, arr2[i] as unknown[]) : v === arr2[i],\n    )\n  );\n}\n\n/**\n * Linearizes an sRGB channel value for relative luminance calculation.\n *\n * The sRGB transfer function must be removed before applying the luminance\n * coefficients.  Without this step, mid-range grays are significantly\n * overestimated.\n *\n * @param value — sRGB component in the range 0–1.\n * @returns Linear-light component in the range 0–1.\n * @see https://www.w3.org/TR/WCAG21/#dfn-relative-luminance\n */\nexport function linearize(value: number): number {\n  return value <= 0.04045\n    ? value / 12.92\n    : ((value + 0.055) / 1.055) ** 2.4;\n}\n","import type { Color } from './types';\nimport { resolveHwb } from './color-converter';\nimport Names from './color-names';\nimport { clamp, degree, resolveAlpha } from './utils';\n\n/**\n * Parse a color string into a {@link Color} data object.\n *\n * Handles CSS named colors, `transparent`, hex (`#rgb`, `#rrggbb`, `#rrggbbaa`),\n * and functional notations: `rgb()`, `hsl()`, `hwb()`, `hsv()`, `cmyk()`.\n *\n * @param input - Any parsable color string (see docs/README.md for the full list).\n * @returns A {@link Color} object, or `null` if the string could not be parsed.\n */\nexport default function inputParser(input: string): Color|null {\n  if (input in Names) {\n    // Named colors.\n    return {\n      model: 'rgb',\n      values: Names[input]!,\n      alpha: 1,\n    };\n  } else if (input === 'transparent') {\n    // 'transparent'.\n    return {\n      model: 'rgb',\n      values: [0, 0, 0],\n      alpha: 0,\n    };\n  } else {\n    // parse string.\n    const prefix = input.substring(0, 3).toLowerCase();\n    switch (prefix) {\n      case 'hwb': return parseHwb(input);\n      case 'hsl': return parseHsl(input);\n      case 'hsv': return parseHsv(input);\n      case 'cmy': return parseCmyk(input);\n      default: return parseRgb(input);\n    }\n  }\n}\n\n/** Parse `#rrggbb`, `#rgb`, `rgb()`, or `rgba()` strings. */\nfunction parseRgb(input: string): Color|null {\n  const hex = /^#?([a-f0-9]{6})([a-f0-9]{2})?$/i;\n  const shortHex = /^#?([a-f0-9]{3})([a-f0-9]{1})?$/i;\n  const rgba = /^rgba?\\s*\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d.]+)\\s*)?\\)$/;\n  const percent = /^rgba?\\s*\\(\\s*([+-]?[\\d.]+)%\\s*,\\s*([+-]?[\\d.]+)%\\s*,\\s*([+-]?[\\d.]+)%\\s*(?:,\\s*([+-]?[\\d.]+)\\s*)?\\)$/;\n  const hexToAlpha = (num: string) => Math.round((parseInt(num, 16) / 255) * 100) / 100;\n  let values: number[];\n  let alpha: number;\n  let m: RegExpMatchArray | null;\n\n  if ((m = input.match(hex)) !== null) {\n    values = m[1]!.match(/.{2}/g)!.map((x: string) => parseInt(x, 16));\n    alpha = m[2] ? hexToAlpha(m[2]) : 1;\n  } else if ((m = input.match(shortHex)) !== null) {\n    values = m[1]!.match(/.{1}/g)!.map((x: string) => parseInt(x + x, 16));\n    alpha = m[2] ? hexToAlpha(m[2]) : 1;\n  } else if ((m = input.match(rgba)) !== null) {\n    values = [m[1]!, m[2]!, m[3]!].map((x: string) => parseInt(x, 0));\n    alpha = resolveAlpha(m[4]);\n  } else if ((m = input.match(percent)) !== null) {\n    values = [m[1]!, m[2]!, m[3]!].map((x: string) => Math.round(parseFloat(x) * 2.55));\n    alpha = resolveAlpha(m[4]);\n  } else {\n    return null;\n  }\n  return {\n    model: 'rgb',\n    values: values.map(x => clamp(x, 0, 255)),\n    alpha: clamp(alpha, 0, 1),\n  };\n}\n\n/** Parse `hsl()` or `hsla()` strings. */\nfunction parseHsl(input: string): Color|null {\n  const hsl = /^hsla?\\s*\\(\\s*([+-]?\\d*[.]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d.]+)%\\s*,\\s*([+-]?[\\d.]+)%\\s*(?:,\\s*([+-]?[\\d.]+)\\s*)?\\)$/i;\n  const m = input.match(hsl);\n  if (!m) return null;\n  return {\n    model: 'hsl',\n    values: [\n      degree(m[1]!),\n      clamp(parseFloat(m[2]!), 0, 100),\n      clamp(parseFloat(m[3]!), 0, 100),\n    ],\n    alpha: resolveAlpha(m[4]),\n  };\n}\n\n/** Parse `hwb()` or `hwba()` strings. Normalizes whiteness + blackness sums over 100. */\nfunction parseHwb(input: string): Color|null {\n  const hwb = /^hwba?\\s*\\(\\s*([+-]?\\d*[.]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d.]+)%\\s*,\\s*([+-]?[\\d.]+)%\\s*(?:,\\s*([+-]?[\\d.]+)\\s*)?\\)$/i;\n  const m = input.match(hwb);\n  if (!m) return null;\n  return {\n    model: 'hwb',\n    values: resolveHwb(\n      degree(m[1]!),\n      clamp(parseFloat(m[2]!), 0, 100),\n      clamp(parseFloat(m[3]!), 0, 100),\n    ),\n    alpha: resolveAlpha(m[4]),\n  };\n}\n\n/** Parse `hsv()` or `hsva()` strings. */\nfunction parseHsv(input: string): Color|null {\n  const hsv = /^hsva?\\s*\\(\\s*([+-]?\\d*[.]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d.]+)%\\s*,\\s*([+-]?[\\d.]+)%\\s*(?:,\\s*([+-]?[\\d.]+)\\s*)?\\)$/i;\n  const m = input.match(hsv);\n  if (!m) return null;\n  return {\n    model: 'hsv',\n    values: [\n      degree(m[1]!),\n      clamp(parseFloat(m[2]!), 0, 100),\n      clamp(parseFloat(m[3]!), 0, 100),\n    ],\n    alpha: resolveAlpha(m[4]),\n  };\n}\n\n/** Parse `cmyk()` strings. */\nfunction parseCmyk(input: string): Color|null {\n  const cmyk = /^cmyk\\s*\\(\\s*([+-]?[\\d.]+)%\\s*,\\s*([+-]?[\\d.]+)%\\s*,\\s*([+-]?[\\d.]+)%\\s*,\\s*([+-]?[\\d.]+)%\\s*(?:,\\s*([+-]?[\\d.]+)\\s*)?\\)$/i;\n  const m = input.match(cmyk);\n  if (!m) return null;\n  return {\n    model: 'cmyk',\n    values: [\n      clamp(parseFloat(m[1]!), 0, 100),\n      clamp(parseFloat(m[2]!), 0, 100),\n      clamp(parseFloat(m[3]!), 0, 100),\n      clamp(parseFloat(m[4]!), 0, 100),\n    ],\n    alpha: resolveAlpha(m[5]),\n  };\n}\n","import type {\n  AcceptedModel,\n  Color,\n  ColorInput,\n  HexMode,\n  RandomOptions,\n  RgbMode,\n} from './types';\nimport * as Converter from './color-converter';\nimport Names from './color-names';\nimport parseColor from './input-parser';\nimport {\n  arrayIsEqual,\n  clamp,\n  decimal,\n  degree,\n  getRandom,\n  linearize,\n  resolveAlpha,\n} from './utils';\n\nexport type { AcceptedModel, Color, ColorInput, HexMode, RandomOptions, RgbMode };\n\ntype ManipulateFn = (...args: number[]) => number[];\n\n/**\n * A modern, **immutable** color manipulation class.\n *\n * Every manipulation method returns a **new** `MooColor` instance —\n * the original is never mutated. This makes the class safe for\n * React / Vue state, memoization, and concurrent use.\n *\n * @example\n * ```ts\n * import { MooColor } from 'moo-color';\n *\n * const red = new MooColor('#ff0000');\n * const light = red.lighten(20);\n *\n * console.log(red.toHex());   // '#ff0000' — unchanged\n * console.log(light.toHex()); // '#ff6666'\n * ```\n */\nexport class MooColor {\n  #model: AcceptedModel;\n  #values: number[];\n  #alpha: number;\n\n  // -----------------------------------------------------------------------\n  // Static\n  // -----------------------------------------------------------------------\n\n  /**\n   * Mix two colors together.\n   *\n   * @param color1 - First color (string, {@link Color} data, or `MooColor`).\n   * @param color2 - Second color.\n   * @param percentOf1 - Weight of the **first** color, 0–100. Default `50`.\n   * @returns A new blended `MooColor`.\n   *\n   * @example\n   * ```ts\n   * MooColor.mix('#ff0000', '#ffff00', 50); // orange\n   * ```\n   */\n  static mix(\n    color1: MooColor | ColorInput | Color,\n    color2: MooColor | ColorInput | Color,\n    percentOf1 = 50,\n  ): MooColor {\n    const c1 = color1 instanceof MooColor ? color1 : new MooColor(color1);\n    const c2 = color2 instanceof MooColor ? color2 : new MooColor(color2);\n    return c2.mix(c1, percentOf1);\n  }\n\n  /**\n   * Generate a random color in the HWB space.\n   *\n   * @param options - Optional constraints for hue / whiteness / blackness.\n   * @returns A new randomly‐generated `MooColor`.\n   *\n   * @example\n   * ```ts\n   * MooColor.random();                         // fully random\n   * MooColor.random({ hue: [0, 180] });        // warm‐ish hue\n   * MooColor.random({ white: 50, black: 10 }); // fixed tint\n   * ```\n   */\n  static random(options: RandomOptions = {}): MooColor {\n    const { hue, white, black } = options;\n    const vals = [hue, white, black].map((x, i) => {\n      if (typeof x === 'number') return x;\n      if (Array.isArray(x)) {\n        const precision = i === 0 ? 0 : 2;\n        return getRandom(Math.min(...x), Math.max(...x), precision);\n      }\n      return i === 0 ? getRandom(0, 360) : getRandom(0, 100, 2);\n    });\n    return new MooColor({\n      model: 'hwb',\n      values: Converter.resolveHwb(\n        degree(vals[0]!),\n        clamp(vals[1]!, 0, 100),\n        clamp(vals[2]!, 0, 100),\n      ),\n      alpha: 1,\n    });\n  }\n\n  // -----------------------------------------------------------------------\n  // Constructor\n  // -----------------------------------------------------------------------\n\n  /**\n   * Create a new `MooColor`.\n   *\n   * @param color - A CSS color string, a {@link Color} data object, or\n   *   `undefined` (defaults to black `#000`).\n   * @throws {Error} When the string cannot be parsed.\n   *\n   * @example\n   * ```ts\n   * new MooColor('#ff0000');\n   * new MooColor('rgb(255, 0, 0)');\n   * new MooColor('hsl(120, 50%, 100%)');\n   * new MooColor({ model: 'rgb', values: [255, 0, 0], alpha: 1 });\n   * new MooColor(); // black\n   * ```\n   */\n  constructor(color?: ColorInput | Color) {\n    if (typeof color === 'object' && color !== null && 'model' in color) {\n      this.#model = color.model;\n      this.#values = [...color.values];\n      this.#alpha = resolveAlpha(color.alpha);\n    } else {\n      const str = typeof color === 'string' ? color : '#000';\n      const parsed = parseColor(str);\n      if (!parsed) throw new Error(`Cannot parse color: \"${str}\"`);\n      this.#model = parsed.model;\n      this.#values = parsed.values;\n      this.#alpha = parsed.alpha ?? 1;\n    }\n  }\n\n  // -----------------------------------------------------------------------\n  // Data access\n  // -----------------------------------------------------------------------\n\n  /**\n   * Returns the underlying color data as a plain object.\n   *\n   * The returned object is a **copy** — mutating it will not\n   * affect this instance.\n   *\n   * @example\n   * ```ts\n   * new MooColor('#f00').getColor();\n   * // → { model: 'rgb', values: [255, 0, 0], alpha: 1 }\n   * ```\n   */\n  getColor(): Color {\n    return { model: this.#model, values: [...this.#values], alpha: this.#alpha };\n  }\n\n  /**\n   * Returns color data converted to the given model.\n   *\n   * @param model - Target color model.\n   *\n   * @example\n   * ```ts\n   * new MooColor('#f00').getColorAs('hsl');\n   * // → { model: 'hsl', values: [0, 100, 50], alpha: 1 }\n   * ```\n   */\n  getColorAs(model: AcceptedModel): Color {\n    if (this.#model === model) return this.getColor();\n    return {\n      model,\n      values: this.#convert(this.#values, this.#model, model),\n      alpha: this.#alpha,\n    };\n  }\n\n  /** Returns the current color model identifier. */\n  getModel(): AcceptedModel {\n    return this.#model;\n  }\n\n  /**\n   * Returns a **new** `MooColor` whose internal model is changed to `model`.\n   *\n   * @param model - Target color model.\n   */\n  changeModel(model: AcceptedModel): MooColor {\n    if (this.#model === model) return this.clone();\n    return new MooColor(this.getColorAs(model));\n  }\n\n  /** Returns the alpha (opacity) channel, 0–1. */\n  getAlpha(): number {\n    return this.#alpha;\n  }\n\n  /**\n   * Returns a **new** `MooColor` with the given alpha value.\n   *\n   * @param alpha - Opacity, 0 (transparent) – 1 (opaque).\n   *\n   * @example\n   * ```ts\n   * new MooColor('red').setAlpha(0.5).toRgb();\n   * // → 'rgba(255, 0, 0, 0.5)'\n   * ```\n   */\n  setAlpha(alpha: number): MooColor {\n    return new MooColor({\n      model: this.#model,\n      values: [...this.#values],\n      alpha: clamp(alpha, 0, 1),\n    });\n  }\n\n  /**\n   * Converts a standalone {@link Color} data object to another model.\n   *\n   * @param color - Source color data.\n   * @param model - Target model.\n   * @returns A new {@link Color} in the target model.\n   */\n  convert(color: Color, model: AcceptedModel): Color {\n    return {\n      model,\n      values: this.#convert(color.values, color.model, model),\n      alpha: color.alpha,\n    };\n  }\n\n  /** Creates an independent copy of this color. */\n  clone(): MooColor {\n    return new MooColor(this.getColor());\n  }\n\n  // -----------------------------------------------------------------------\n  // State accessors\n  // -----------------------------------------------------------------------\n\n  /**\n   * Perceived brightness on a 0–255 scale (W3C AERT formula).\n   *\n   * @see https://www.w3.org/TR/AERT/#color-contrast\n   *\n   * @example\n   * ```ts\n   * new MooColor('#808080').brightness; // 128\n   * ```\n   */\n  get brightness(): number {\n    const rgb = this.#toRgbValues();\n    const r = rgb[0] ?? 0;\n    const g = rgb[1] ?? 0;\n    const b = rgb[2] ?? 0;\n    return (r * 299 + g * 587 + b * 114) / 1000;\n  }\n\n  /** `true` when {@link brightness} ≥ 128. */\n  get isLight(): boolean {\n    return this.brightness >= 128;\n  }\n\n  /** `true` when {@link brightness} < 128. */\n  get isDark(): boolean {\n    return this.brightness < 128;\n  }\n\n  /**\n   * Relative luminance per **WCAG 2.1** (0 – 1).\n   *\n   * Unlike v1, this implementation correctly applies **sRGB gamma\n   * linearization** before weighting channels:\n   *\n   * ```\n   * L = 0.2126 × R_lin + 0.7152 × G_lin + 0.0722 × B_lin\n   * ```\n   *\n   * where `R_lin = linearize(R / 255)` etc.\n   *\n   * @see https://www.w3.org/TR/WCAG21/#dfn-relative-luminance\n   *\n   * @example\n   * ```ts\n   * new MooColor('#000').luminance; // 0\n   * new MooColor('#fff').luminance; // 1\n   * new MooColor('#808080').luminance; // ≈ 0.2159 (NOT 0.502)\n   * ```\n   */\n  get luminance(): number {\n    const rgb = this.#toRgbValues();\n    const rLin = linearize((rgb[0] ?? 0) / 255);\n    const gLin = linearize((rgb[1] ?? 0) / 255);\n    const bLin = linearize((rgb[2] ?? 0) / 255);\n    return 0.2126 * rLin + 0.7152 * gLin + 0.0722 * bLin;\n  }\n\n  /**\n   * WCAG 2.1 contrast ratio against another color (range 1–21).\n   *\n   * @see https://www.w3.org/TR/WCAG21/#dfn-contrast-ratio\n   *\n   * @example\n   * ```ts\n   * new MooColor('#000').contrastRatioWith(new MooColor('#fff')); // 21\n   * ```\n   */\n  contrastRatioWith(color: MooColor): number {\n    const l1 = Math.max(this.luminance, color.luminance);\n    const l2 = Math.min(this.luminance, color.luminance);\n    return (l1 + 0.05) / (l2 + 0.05);\n  }\n\n  /**\n   * Returns `true` when the contrast ratio with `color` meets the\n   * WCAG 2.1 **AA** requirement for normal text (≥ 4.5 : 1).\n   *\n   * @see https://www.w3.org/TR/WCAG21/#contrast-minimum\n   */\n  isContrastEnough(color: MooColor): boolean {\n    return this.contrastRatioWith(color) >= 4.5;\n  }\n\n  // -----------------------------------------------------------------------\n  // Formatting\n  // -----------------------------------------------------------------------\n\n  /**\n   * Formats the color in the given model's notation.\n   * Defaults to the current model.\n   *\n   * @param model - Output notation (`'rgb'`, `'hex'`, `'hsl'`, `'hwb'`, `'hsv'`, `'cmyk'`).\n   * @param args  - Forwarded to the underlying format method.\n   *\n   * @example\n   * ```ts\n   * new MooColor('#f00').toString();         // 'rgb(255, 0, 0)'\n   * new MooColor('#f00').toString('hex');     // '#ff0000'\n   * new MooColor('#f00').toString('hsl');     // 'hsl(0, 100%, 50%)'\n   * ```\n   */\n  toString(model?: AcceptedModel | 'hex', ...args: unknown[]): string {\n    const m = model ?? this.#model;\n    switch (m) {\n      case 'hex': return this.toHex(args[0] as HexMode | undefined);\n      case 'hwb': return this.toHwb();\n      case 'hsl': return this.toHsl();\n      case 'hsv': return this.toHsv();\n      case 'cmyk': return this.toCmyk();\n      default: return this.toRgb(args[0] as RgbMode | undefined);\n    }\n  }\n\n  /**\n   * Hex notation (`#rrggbb` / `#rrggbbaa`).\n   *\n   * @param mode - `'full'` (default), `'short'` (`#rgb`), or `'name'` (CSS name if available).\n   * @see https://www.w3.org/TR/css-color-4/#hex-notation\n   *\n   * @example\n   * ```ts\n   * new MooColor('red').toHex();        // '#ff0000'\n   * new MooColor('red').toHex('short'); // '#f00'\n   * new MooColor('red').toHex('name');  // 'red'\n   * ```\n   */\n  toHex(mode: HexMode = 'full'): string {\n    const rgb = this.#toRgbValues().map(Math.round);\n    const r = rgb[0] ?? 0;\n    const g = rgb[1] ?? 0;\n    const b = rgb[2] ?? 0;\n    const a = this.#alpha === 1 ? null : this.#alpha;\n\n    if (mode === 'name') {\n      for (const [name, vals] of Object.entries(Names)) {\n        if (a === null && arrayIsEqual(vals as number[], [r, g, b])) return name;\n      }\n      return `#${Converter.rgbToHex(r, g, b, a, true)}`;\n    }\n\n    const enableShort = mode === 'short';\n    return `#${Converter.rgbToHex(r, g, b, a, enableShort)}`;\n  }\n\n  /**\n   * RGB / RGBA notation.\n   *\n   * @param mode - `'default'` or `'percent'`.\n   * @see https://www.w3.org/TR/css-color-4/#rgb-functions\n   *\n   * @example\n   * ```ts\n   * new MooColor('#f00').toRgb();          // 'rgb(255, 0, 0)'\n   * new MooColor('#f00').toRgb('percent'); // 'rgb(100%, 0%, 0%)'\n   * ```\n   */\n  toRgb(mode: RgbMode = 'default'): string {\n    const rgb = this.#toRgbValues().map(Math.round);\n    const r = rgb[0] ?? 0;\n    const g = rgb[1] ?? 0;\n    const b = rgb[2] ?? 0;\n    let parts: (number | string)[] = [r, g, b];\n    if (mode === 'percent') {\n      parts = [r, g, b].map(x => `${(x / 255) * 100}%`);\n    }\n    return this.#alpha === 1\n      ? `rgb(${parts[0]}, ${parts[1]}, ${parts[2]})`\n      : `rgba(${parts[0]}, ${parts[1]}, ${parts[2]}, ${this.#alpha})`;\n  }\n\n  /**\n   * HWB notation.\n   * @see https://www.w3.org/TR/css-color-4/#the-hwb-notation\n   */\n  toHwb(): string {\n    const [h, w, b] = this.#getValuesAs('hwb').map(x => decimal(x, 2));\n    const a = this.#alpha === 1 ? '' : `, ${this.#alpha}`;\n    return `hwb(${h}, ${w}%, ${b}%${a})`;\n  }\n\n  /**\n   * HSL / HSLA notation.\n   * @see https://www.w3.org/TR/css-color-4/#the-hsl-notation\n   */\n  toHsl(): string {\n    const [h, s, l] = this.#getValuesAs('hsl').map(x => decimal(x, 2));\n    return this.#alpha === 1\n      ? `hsl(${h}, ${s}%, ${l}%)`\n      : `hsla(${h}, ${s}%, ${l}%, ${this.#alpha})`;\n  }\n\n  /**\n   * HSV / HSVA notation (non‐standard; same shape as HSL).\n   */\n  toHsv(): string {\n    const [h, s, v] = this.#getValuesAs('hsv').map(x => decimal(x, 2));\n    return this.#alpha === 1\n      ? `hsv(${h}, ${s}%, ${v}%)`\n      : `hsva(${h}, ${s}%, ${v}%, ${this.#alpha})`;\n  }\n\n  /**\n   * CMYK notation.\n   * @see https://www.w3.org/TR/css-color-4/#cmyk-colors\n   */\n  toCmyk(): string {\n    const [c, m, y, k] = this.#getValuesAs('cmyk').map(x => decimal(x, 2));\n    const a = this.#alpha === 1 ? '' : `, ${this.#alpha}`;\n    return `cmyk(${c}%, ${m}%, ${y}%, ${k}%${a})`;\n  }\n\n  // -----------------------------------------------------------------------\n  // Manipulation — every method returns a **new** MooColor\n  // -----------------------------------------------------------------------\n\n  /**\n   * Increase lightness (HSL model).\n   *\n   * @param amount - Value to add, 0–100.\n   *\n   * @example\n   * ```ts\n   * new MooColor('red').lighten(20).toRgb(); // 'rgb(255, 102, 102)'\n   * ```\n   */\n  lighten(amount: number): MooColor {\n    return this.#manipulate('hsl', (h, s, l) => [h, s, clamp(l + amount, 0, 100)]);\n  }\n\n  /**\n   * Decrease lightness (HSL model).\n   *\n   * @param amount - Value to subtract, 0–100.\n   *\n   * @example\n   * ```ts\n   * new MooColor('red').darken(20).toRgb(); // 'rgb(153, 0, 0)'\n   * ```\n   */\n  darken(amount: number): MooColor {\n    return this.#manipulate('hsl', (h, s, l) => [h, s, clamp(l - amount, 0, 100)]);\n  }\n\n  /**\n   * Increase saturation (HSL model).\n   *\n   * @param amount - Value to add, 0–100.\n   */\n  saturate(amount: number): MooColor {\n    return this.#manipulate('hsl', (h, s, l) => [h, clamp(s + amount, 0, 100), l]);\n  }\n\n  /**\n   * Decrease saturation (HSL model).\n   *\n   * @param amount - Value to subtract, 0–100.\n   */\n  desaturate(amount: number): MooColor {\n    return this.#manipulate('hsl', (h, s, l) => [h, clamp(s - amount, 0, 100), l]);\n  }\n\n  /**\n   * Remove all saturation — convert to grayscale.\n   */\n  grayscale(): MooColor {\n    return this.#manipulate('hsl', (h, _s, l) => [h, 0, l]);\n  }\n\n  /**\n   * Increase whiteness (HWB model).\n   *\n   * @param amount - Value to add, −100 – 100.\n   *\n   * @example\n   * ```ts\n   * new MooColor('hwb(120, 40%, 40%)').whiten(20).toHwb();\n   * // 'hwb(120, 60%, 40%)'\n   * ```\n   */\n  whiten(amount: number): MooColor {\n    return this.#manipulate(\n      'hwb',\n      (h, w, b) => Converter.resolveHwb(h, clamp(w + amount, 0, 100), b),\n    );\n  }\n\n  /**\n   * Increase blackness (HWB model).\n   *\n   * @param amount - Value to add, −100 – 100.\n   */\n  blacken(amount: number): MooColor {\n    return this.#manipulate(\n      'hwb',\n      (h, w, b) => Converter.resolveHwb(h, w, clamp(b + amount, 0, 100)),\n    );\n  }\n\n  /**\n   * Rotate the hue by `d` degrees.\n   *\n   * @param d - Degrees to rotate (negative = counter‐clockwise).\n   *\n   * @example\n   * ```ts\n   * new MooColor('hsl(0, 100%, 50%)').rotate(120).toHex('short');\n   * // '#0f0'\n   * ```\n   */\n  rotate(d: number): MooColor {\n    return this.#manipulate('hsl', (h, s, l) => [degree(h + d), s, l]);\n  }\n\n  /**\n   * Blend this color with another.\n   *\n   * @param color   - The color to blend with.\n   * @param percent - Weight of `color`, 0–100. Default `50`.\n   * @returns A new blended `MooColor`.\n   *\n   * @example\n   * ```ts\n   * const red = new MooColor('rgb(255, 0, 0)');\n   * const yellow = new MooColor('rgb(255, 255, 0)');\n   * red.mix(yellow, 50).toString(); // 'rgb(255, 128, 0)'\n   * ```\n   */\n  mix(color: MooColor, percent = 50): MooColor {\n    const p = percent / 100;\n    const c1 = this.#toRgbValues();\n    const c2 = color.#toRgbValues();\n    return new MooColor({\n      model: 'rgb',\n      values: c1.map((v, i) => v + (c2[i]! - v) * p),\n      alpha: this.#alpha + (color.#alpha - this.#alpha) * p,\n    }).changeModel(this.#model);\n  }\n\n  /**\n   * Complementary color (hue + 180°).\n   *\n   * @example\n   * ```ts\n   * new MooColor('hsl(30, 100%, 50%)').complement().toHsl();\n   * // 'hsl(210, 100%, 50%)'\n   * ```\n   */\n  complement(): MooColor {\n    return this.#manipulate('hsl', (h, s, l) => [degree(h + 180), s, l]);\n  }\n\n  /**\n   * Invert (negate) the color in RGB space.\n   *\n   * @param percent - Degree of inversion, 0–100. Default `100`.\n   *\n   * @example\n   * ```ts\n   * new MooColor('#0ff').invert().toHex('short'); // '#f00'\n   * ```\n   */\n  invert(percent = 100): MooColor {\n    const p = percent / 100;\n    return this.#manipulate('rgb', (r, g, b) =>\n      [r, g, b].map(x => Math.round(Math.abs(255 * p - x))),\n    );\n  }\n\n  // -----------------------------------------------------------------------\n  // Private helpers\n  // -----------------------------------------------------------------------\n\n  #toRgbValues(): number[] {\n    if (this.#model === 'rgb') return [...this.#values];\n    return this.#convert(this.#values, this.#model, 'rgb');\n  }\n\n  #getValuesAs(model: AcceptedModel): number[] {\n    if (this.#model === model) return [...this.#values];\n    return this.#convert(this.#values, this.#model, model);\n  }\n\n  #manipulate(asModel: AcceptedModel, callback: ManipulateFn): MooColor {\n    const vals = this.#getValuesAs(asModel);\n    const newVals = callback(...vals);\n    const finalVals =\n      asModel === this.#model\n        ? newVals\n        : this.#convert(newVals, asModel, this.#model);\n    return new MooColor({\n      model: this.#model,\n      values: finalVals,\n      alpha: this.#alpha,\n    });\n  }\n\n  #convert(values: number[], from: AcceptedModel, to: AcceptedModel): number[] {\n    if (from === to) return [...values];\n\n    // Direct HSV ↔ HWB (avoids RGB round‐trip)\n    if (from === 'hsv' && to === 'hwb') {\n      return Converter.hsvToHwb(values[0]!, values[1]!, values[2]!);\n    }\n    if (from === 'hwb' && to === 'hsv') {\n      return Converter.hwbToHsv(values[0]!, values[1]!, values[2]!);\n    }\n\n    // All other conversions go through RGB as hub\n    let rgb: number[];\n    switch (from) {\n      case 'rgb':  rgb = values; break;\n      case 'hsl':  rgb = Converter.hslToRgb(values[0]!, values[1]!, values[2]!); break;\n      case 'hwb':  rgb = Converter.hwbToRgb(values[0]!, values[1]!, values[2]!); break;\n      case 'hsv':  rgb = Converter.hsvToRgb(values[0]!, values[1]!, values[2]!); break;\n      case 'cmyk': rgb = Converter.cmykToRgb(values[0]!, values[1]!, values[2]!, values[3]!); break;\n      default:     rgb = values;\n    }\n\n    switch (to) {\n      case 'rgb':  return rgb;\n      case 'hsl':  return Converter.rgbToHsl(rgb[0]!, rgb[1]!, rgb[2]!);\n      case 'hwb':  return Converter.rgbToHwb(rgb[0]!, rgb[1]!, rgb[2]!);\n      case 'hsv':  return Converter.rgbToHsv(rgb[0]!, rgb[1]!, rgb[2]!);\n      case 'cmyk': return Converter.rgbToCmyk(rgb[0]!, rgb[1]!, rgb[2]!);\n      default:     return rgb;\n    }\n  }\n}\n\nexport default MooColor;\n\n"]}