colorizr 3.0.1 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1578,7 +1578,7 @@ function shadeColorDynamic(input, lightnessTuningFactor, chromaTuningFactor = 0)
1578
1578
  }
1579
1579
  function shadeColor(input, lightness, chromaTuningFactor = 0) {
1580
1580
  const { c, h } = input;
1581
- return oklch2hex({ l: lightness / 100, c: c + chromaTuningFactor, h });
1581
+ return oklch2hex({ l: lightness / 100, c: clamp(c + chromaTuningFactor, 0, 0.4), h });
1582
1582
  }
1583
1583
  function swatch(input, options = {}) {
1584
1584
  invariant(isString(input), MESSAGES.inputString);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/modules/invariant.ts","../src/modules/constants.ts","../src/modules/css-colors.ts","../src/modules/validators.ts","../src/modules/utils.ts","../src/modules/hex-utils.ts","../src/converters/index.ts","../src/format-hex.ts","../src/converters/hex2rgb.ts","../src/converters/rgb2hsl.ts","../src/converters/hex2hsl.ts","../src/converters/rgb2oklab.ts","../src/converters/hex2oklab.ts","../src/converters/oklab2oklch.ts","../src/converters/rgb2oklch.ts","../src/converters/hex2oklch.ts","../src/modules/hue2rgb.ts","../src/converters/hsl2rgb.ts","../src/converters/rgb2hex.ts","../src/converters/hsl2hex.ts","../src/converters/hsl2oklab.ts","../src/converters/hsl2oklch.ts","../src/converters/oklab2rgb.ts","../src/converters/oklab2hex.ts","../src/converters/oklab2hsl.ts","../src/converters/oklch2oklab.ts","../src/converters/oklch2rgb.ts","../src/converters/oklch2hex.ts","../src/converters/oklch2hsl.ts","../src/extract-color-parts.ts","../src/parse-css.ts","../src/modules/parse-color.ts","../src/brightness-difference.ts","../src/chroma.ts","../src/color-difference.ts","../src/luminance.ts","../src/contrast.ts","../src/compare.ts","../src/format-css.ts","../src/modules/updater.ts","../src/darken.ts","../src/desaturate.ts","../src/rotate.ts","../src/invert.ts","../src/lighten.ts","../src/opacify.ts","../src/opacity.ts","../src/saturate.ts","../src/text-color.ts","../src/transparentize.ts","../src/colorizr.ts","../src/convert.ts","../src/is-valid-color.ts","../src/name.ts","../src/palette.ts","../src/p3.ts","../src/random.ts","../src/scheme.ts","../src/swatch.ts"],"sourcesContent":["import Colorizr from '~/colorizr';\n\nexport { default as brightnessDifference } from '~/brightness-difference';\nexport { default as chroma } from '~/chroma';\nexport { default as colorDifference } from '~/color-difference';\nexport { default as compare } from '~/compare';\nexport { default as contrast } from '~/contrast';\nexport { default as convert } from '~/convert';\nexport { default as darken } from '~/darken';\nexport { default as desaturate } from '~/desaturate';\nexport { default as extractColorParts } from '~/extract-color-parts';\nexport { default as formatCSS } from '~/format-css';\nexport { default as formatHex } from '~/format-hex';\nexport { default as isValidColor } from '~/is-valid-color';\nexport { default as lighten } from '~/lighten';\nexport { default as luminance } from '~/luminance';\nexport { default as name } from '~/name';\nexport { default as palette } from '~/palette';\nexport { default as opacify } from '~/opacify';\nexport { default as opacity } from '~/opacity';\nexport { getOkLCHMaxChroma, getP3Color } from '~/p3';\nexport { default as parseCSS } from '~/parse-css';\nexport { default as random } from '~/random';\nexport { default as rotate } from '~/rotate';\nexport { default as saturate } from '~/saturate';\nexport { default as scheme } from '~/scheme';\nexport { default as swatch } from '~/swatch';\nexport { default as textColor } from '~/text-color';\nexport { default as transparentize } from '~/transparentize';\n\nexport * from '~/converters';\nexport * from '~/types';\nexport * from '~/modules/hex-utils';\nexport { isHex, isHSL, isLAB, isLCH, isRGB } from '~/modules/validators';\n\n// eslint-disable-next-line unicorn/prefer-export-from\nexport default Colorizr;\n","export function invariant(condition: boolean, message: string): asserts condition {\n if (condition) {\n return;\n }\n\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n if (message === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n const error = !message\n ? new Error(\n 'Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.',\n )\n : new Error(message);\n\n error.name = 'colorizr';\n\n throw error;\n}\n","import { ColorKeysTuple, ColorModelKey } from '~/types';\n\nexport const COLOR_KEYS: Record<ColorModelKey, ColorKeysTuple> = {\n hsl: ['h', 's', 'l'],\n oklab: ['l', 'a', 'b'],\n oklch: ['l', 'c', 'h'],\n rgb: ['r', 'g', 'b'],\n};\nexport const COLOR_MODELS: ColorModelKey[] = ['hsl', 'oklab', 'oklch', 'rgb'];\nexport const DEG2RAD = Math.PI / 180;\nexport const LAB_TO_LMS = {\n l: [0.3963377773761749, 0.2158037573099136],\n m: [-0.1055613458156586, -0.0638541728258133],\n s: [-0.0894841775298119, -1.2914855480194092],\n};\nexport const LRGB_TO_LMS = {\n l: [0.4122214708, 0.5363325363, 0.0514459929],\n m: [0.2119034982, 0.6806995451, 0.1073969566],\n s: [0.0883024619, 0.2817188376, 0.6299787005],\n};\nexport const LSM_TO_LAB = {\n l: [0.2104542553, 0.793617785, 0.0040720468],\n a: [1.9779984951, 2.428592205, 0.4505937099],\n b: [0.0259040371, 0.7827717662, 0.808675766],\n};\nexport const LSM_TO_RGB = {\n r: [4.0767416360759583, -3.3077115392580629, 0.2309699031821043],\n g: [-1.2684379732850315, 2.6097573492876882, -0.341319376002657],\n b: [-0.0041960761386756, -0.7034186179359362, 1.7076146940746117],\n};\nexport const SRGB_TO_P3 = [\n [0.8224270476, 0.1775729524, 0],\n [0.0331008087, 0.9668991913, 0],\n [0.0170720188, 0.0723477973, 0.9105801839],\n];\nexport const PRECISION = 5;\nexport const RAD2DEG = 180 / Math.PI;\n\nexport const MESSAGES = {\n alpha: 'amount must be a number between 0 and 1',\n hueRange: 'hue must be a number between 0 and 360',\n input: 'input is required',\n inputHex: 'input is required and must be a hex',\n inputNumber: 'input is required and must be a number',\n inputString: 'input is required and must be a string',\n invalid: 'invalid input',\n invalidCSS: 'invalid CSS string',\n left: 'left is required and must be a string',\n lightnessRange: 'lightness must be a number between 0 and 1',\n options: 'invalid options',\n right: 'right is required and must be a string',\n threshold: 'threshold must be a number between 0 and 255',\n} as const;\n","/**\n * CSS named colors\n */\n\nexport type CSSColor = keyof typeof cssColors;\n\nexport const cssColors = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n grey: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n};\n","import { COLOR_KEYS } from '~/modules/constants';\nimport { cssColors } from '~/modules/css-colors';\n\nimport { ColorModel, HEX, HSL, LAB, LCH, PlainObject, RGB } from '~/types';\n\nexport function hasValidMatches(input: unknown): input is string[] {\n return Array.isArray(input) && input.length === 6;\n}\n\n/**\n * Check if the input is a CSS named color\n */\nexport function isNamedColor(input: unknown): input is keyof typeof cssColors {\n return isString(input) && Object.keys(cssColors).includes(input.toLowerCase());\n}\n\n/**\n * Check if the input is a number and not NaN\n */\nexport function isNumber(input: unknown): input is number {\n return typeof input === 'number' && !Number.isNaN(input);\n}\n\n/**\n * Check if the input is an object\n */\nexport function isPlainObject(input: unknown): input is PlainObject {\n if (!input) {\n return false;\n }\n\n const { toString } = Object.prototype;\n const prototype = Object.getPrototypeOf(input);\n\n return (\n toString.call(input) === '[object Object]' &&\n (prototype === null || prototype === Object.getPrototypeOf({}))\n );\n}\n\n/**\n * Check if the input is a string\n */\nexport function isString(input: unknown, validate = true): input is string {\n const isValid = typeof input === 'string';\n\n if (validate) {\n return isValid && !!input.trim().length;\n }\n\n return isValid;\n}\n\nexport function isValidColorModel<T extends ColorModel>(input: T): input is T {\n return isHSL(input) || isRGB(input) || isLAB(input) || isLCH(input);\n}\n\nexport function isHex(input: any): input is HEX {\n if (!isString(input)) {\n return false;\n }\n\n return /^#([\\da-f]{3,4}|[\\da-f]{6,8})$/i.test(input);\n}\n\n/**\n * Check if an object contains HSL values\n * The input must be an object with keys 'h', 's', and 'l'\n * with values between 0 and 360 for hue or 0 and 100 for the others.\n */\nexport function isHSL(input: unknown): input is HSL {\n if (!isPlainObject(input)) {\n return false;\n }\n\n const entries = Object.entries(input);\n\n return (\n !!entries.length &&\n entries.every(([key, value]) => {\n if (key === 'h') {\n return value >= 0 && value <= 360;\n }\n\n if (key === 'alpha') {\n return value >= 0 && value <= 1;\n }\n\n return COLOR_KEYS.hsl.includes(key) && value >= 0 && value <= 100;\n })\n );\n}\n\n/**\n * Check if an object contains LAB values\n * The input must be an object with keys 'l', 'a', and 'b' with values between -1 and 1.\n */\nexport function isLAB(input: unknown): input is LAB {\n if (!isPlainObject(input)) {\n return false;\n }\n\n const entries = Object.entries(input);\n\n return (\n !!entries.length &&\n entries.every(([key, value]) => {\n if (key === 'l') {\n return value >= 0 && value <= 100;\n }\n\n if (key === 'alpha') {\n return value >= 0 && value <= 1;\n }\n\n return COLOR_KEYS.oklab.includes(key) && value >= -1 && value <= 1;\n })\n );\n}\n\n/**\n * Check if an object contains LAB values\n * The input must be an object with keys 'l', 'c', and 'h' with values between 0 and 360.\n */\nexport function isLCH(input: unknown): input is LCH {\n if (!isPlainObject(input)) {\n return false;\n }\n\n const entries = Object.entries(input);\n\n return (\n !!entries.length &&\n entries.every(([key, value]) => {\n if (key === 'l') {\n return value >= 0 && value <= 100;\n }\n\n if (key === 'alpha') {\n return value >= 0 && value <= 1;\n }\n\n return COLOR_KEYS.oklch.includes(key) && value >= 0 && value <= (key === 'h' ? 360 : 1);\n })\n );\n}\n\n/**\n * Check if an object contains RGB values.\n * The input must be an object with keys 'r', 'g', and 'b' with values between 0 and 255.\n */\nexport function isRGB(input: unknown): input is RGB {\n if (!isPlainObject(input)) {\n return false;\n }\n\n const entries = Object.entries(input);\n\n return (\n !!entries.length &&\n entries.every(([key, value]) => {\n if (key === 'alpha') {\n return value >= 0 && value <= 1;\n }\n\n return COLOR_KEYS.rgb.includes(key) && value >= 0 && value <= 255;\n })\n );\n}\n","import { COLOR_KEYS, COLOR_MODELS, MESSAGES, PRECISION } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport {\n isHSL,\n isLAB,\n isLCH,\n isNumber,\n isPlainObject,\n isRGB,\n isValidColorModel,\n} from '~/modules/validators';\n\nimport {\n Alpha,\n ColorModel,\n ColorModelKey,\n ColorModelKeys,\n ConverterParameters,\n LAB,\n LCH,\n PlainObject,\n} from '~/types';\n\nexport function addAlpha<T extends ColorModel>(input: any, alpha?: Alpha): T {\n invariant(isValidColorModel(input), MESSAGES.invalid);\n\n let value = alpha;\n\n if (!value) {\n return input;\n }\n\n /* c8 ignore next 3 */\n if (value > 1) {\n value /= 100;\n }\n\n if (value === 1) {\n return input;\n }\n\n return { ...input, alpha: value };\n}\n\n/**\n * Clamp a value between a min and max\n * @param value\n * @param [min=0] - The minimum value\n * @param [max=100] - The maximum value\n */\nexport function clamp(value: number, min = 0, max = 100) {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Constrain the degrees between 0 and 360\n */\nexport function constrainDegrees(input: number, amount: number): number {\n invariant(isNumber(input), MESSAGES.inputNumber);\n\n let value = input + amount;\n\n if (value > 360) {\n value %= 360;\n }\n\n if (value < 0) {\n value += 360;\n }\n\n return Math.abs(value);\n}\n\n/**\n * Limit values per type.\n */\nexport function limit<TModel extends Extract<ColorModelKey, 'hsl' | 'rgb'>>(\n input: number,\n model: TModel,\n key: ColorModelKeys<TModel>,\n): number {\n invariant(isNumber(input), 'Input is not a number');\n invariant(COLOR_MODELS.includes(model), `Invalid model${model ? `: ${model}` : ''}`);\n invariant(COLOR_KEYS[model].includes(key), `Invalid key${key ? `: ${key}` : ''}`);\n\n switch (model) {\n case 'hsl': {\n invariant(COLOR_KEYS.hsl.includes(key), 'Invalid key');\n\n if (['s', 'l'].includes(key)) {\n return clamp(input);\n }\n\n return clamp(input, 0, 360);\n }\n case 'rgb': {\n invariant(COLOR_KEYS.rgb.includes(key), 'Invalid key');\n\n return clamp(input, 0, 255);\n }\n /* c8 ignore next 3 */\n default: {\n throw new Error('Invalid inputs');\n }\n }\n}\n\n/**\n * Parse the input parameters\n */\nexport function parseInput<T extends ColorModel>(\n input: ConverterParameters<T>,\n model: ColorModelKey,\n): T {\n const keys = COLOR_KEYS[model];\n const validator = {\n hsl: isHSL,\n oklab: isLAB,\n oklch: isLCH,\n rgb: isRGB,\n };\n\n invariant(isPlainObject(input) || Array.isArray(input), MESSAGES.invalid);\n\n const value = Array.isArray(input)\n ? ({ [keys[0]]: input[0], [keys[1]]: input[1], [keys[2]]: input[2] } as unknown as T)\n : input;\n\n invariant(validator[model](value), `invalid ${model} color`);\n\n return value;\n}\n\n/**\n * Creates an object composed of the picked source properties.\n */\nexport function pick(input: PlainObject, options: string[]): PlainObject {\n if (!Array.isArray(options)) {\n throw new TypeError('options must be an array');\n }\n\n return options\n .filter(d => typeof input[d] !== 'undefined')\n .reduce((acc: PlainObject, d) => {\n acc[d] = input[d];\n\n return acc;\n }, {});\n}\n\n/**\n * Restrict the values to a certain number of digits.\n */\nexport function restrictValues<T extends LAB | LCH>(\n input: T,\n precision: number = PRECISION,\n forcePrecision = true,\n): T {\n const output = new Map(Object.entries(input));\n\n for (const [key, value] of output.entries()) {\n output.set(key, round(value, precision, forcePrecision));\n }\n\n return Object.fromEntries(output) as T;\n}\n\n/**\n * Round decimal numbers.\n */\nexport function round(input: number, precision = 2, forcePrecision = true): number {\n if (!isNumber(input) || input === 0) {\n return 0;\n }\n\n if (forcePrecision) {\n const factor = 10 ** precision;\n\n return Math.round(input * factor) / factor;\n }\n\n const absInput = Math.abs(input);\n\n let digits = Math.abs(Math.ceil(Math.log(absInput) / Math.LN10));\n\n if (digits === 0) {\n digits = 2;\n } else if (digits > precision) {\n digits = precision;\n }\n\n let exponent = precision - (digits < 0 ? 0 : digits);\n\n if (exponent <= 1 && precision > 1) {\n exponent = 2;\n } else if (exponent > precision || exponent === 0) {\n exponent = precision;\n }\n\n const factor = 10 ** exponent;\n\n return Math.round(input * factor) / factor;\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { round } from '~/modules/utils';\nimport { isHex, isNumber } from '~/modules/validators';\n\nimport { Alpha } from '~/types';\n\n/**\n * Add an alpha value to a hex string\n */\nexport function addAlphaToHex(input: string, alpha: Alpha): string {\n invariant(isHex(input), MESSAGES.inputHex);\n invariant(isNumber(alpha), MESSAGES.inputNumber);\n\n if (alpha >= 1) {\n return removeAlphaFromHex(input);\n }\n\n return `${removeAlphaFromHex(input)}${convertAlphaToHex(alpha)}`;\n}\n\n/**\n * Convert an alpha value to a hex value.\n */\nexport function convertAlphaToHex(input: Alpha): string {\n invariant(isNumber(input), MESSAGES.inputNumber);\n\n let alpha = input;\n\n if (input > 1) {\n alpha /= 100;\n }\n\n return Math.round(alpha * 255)\n .toString(16)\n .padStart(2, '0');\n}\n\n/**\n * Extract the alpha value from a hex string\n */\nexport function extractAlphaFromHex(input: string): number {\n invariant(isHex(input), MESSAGES.inputString);\n\n const alpha = input.substring(7, 9);\n\n if (!alpha) {\n return 1;\n }\n\n return round(parseInt(alpha, 16) / 255);\n}\n\nexport function hexadecimalToNumber(input: string) {\n return round(parseInt(input, 16));\n}\n\n/**\n * Remove the alpha value from a hex string\n */\nexport function removeAlphaFromHex(input: string) {\n invariant(isHex(input), MESSAGES.inputHex);\n\n if (input.length === 5) {\n return input.substring(0, 4);\n }\n\n return input.substring(0, 7);\n}\n","export { default as hex2hsl } from '~/converters/hex2hsl';\nexport { default as hex2oklab } from '~/converters/hex2oklab';\nexport { default as hex2oklch } from '~/converters/hex2oklch';\nexport { default as hex2rgb } from '~/converters/hex2rgb';\n\nexport { default as hsl2hex } from '~/converters/hsl2hex';\nexport { default as hsl2oklab } from '~/converters/hsl2oklab';\nexport { default as hsl2oklch } from '~/converters/hsl2oklch';\nexport { default as hsl2rgb } from '~/converters/hsl2rgb';\n\nexport { default as oklab2hex } from '~/converters/oklab2hex';\nexport { default as oklab2hsl } from '~/converters/oklab2hsl';\nexport { default as oklab2oklch } from '~/converters/oklab2oklch';\nexport { default as oklab2rgb } from '~/converters/oklab2rgb';\n\nexport { default as oklch2hex } from '~/converters/oklch2hex';\nexport { default as oklch2hsl } from '~/converters/oklch2hsl';\nexport { default as oklch2oklab } from '~/converters/oklch2oklab';\nexport { default as oklch2rgb } from '~/converters/oklch2rgb';\n\nexport { default as rgb2hex } from '~/converters/rgb2hex';\nexport { default as rgb2hsl } from '~/converters/rgb2hsl';\nexport { default as rgb2oklab } from '~/converters/rgb2oklab';\nexport { default as rgb2oklch } from '~/converters/rgb2oklch';\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex } from '~/modules/validators';\n\nimport { HEX } from '~/types';\n\nexport default function formatHex(input: string): HEX {\n invariant(isHex(input), MESSAGES.inputHex);\n\n let color = input.replace('#', '');\n\n if (color.length === 3 || color.length === 4) {\n const values = [...color];\n\n color = '';\n\n values.forEach(d => {\n color += `${d}${d}`;\n });\n }\n\n const hex = `#${color}`;\n\n invariant(isHex(hex), 'invalid hex');\n\n return hex;\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex } from '~/modules/validators';\n\nimport formatHex from '~/format-hex';\nimport { RGB } from '~/types';\n\n/** Convert HEX to RGB */\nexport default function hex2rgb(input: string): RGB {\n invariant(isHex(input), MESSAGES.inputHex);\n\n const hex = formatHex(input).slice(1);\n\n return {\n r: parseInt(hex.charAt(0) + hex.charAt(1), 16),\n g: parseInt(hex.charAt(2) + hex.charAt(3), 16),\n b: parseInt(hex.charAt(4) + hex.charAt(5), 16),\n };\n}\n","import { limit, parseInput } from '~/modules/utils';\n\nimport { ConverterParameters, HSL, RGB } from '~/types';\n\n/** Convert RGB to HSL */\nexport default function rgb2hsl(input: ConverterParameters<RGB>): HSL {\n const value = parseInput(input, 'rgb');\n\n const rLimit = limit(value.r, 'rgb', 'r') / 255;\n const gLimit = limit(value.g, 'rgb', 'g') / 255;\n const bLimit = limit(value.b, 'rgb', 'b') / 255;\n\n const min = Math.min(rLimit, gLimit, bLimit);\n const max = Math.max(rLimit, gLimit, bLimit);\n const delta = max - min;\n\n let h = 0;\n let s;\n const l = (max + min) / 2;\n let rate;\n\n switch (max) {\n case rLimit:\n rate = !delta ? 0 : (gLimit - bLimit) / delta;\n h = 60 * rate;\n break;\n case gLimit:\n rate = (bLimit - rLimit) / delta;\n h = 60 * rate + 120;\n break;\n case bLimit:\n rate = (rLimit - gLimit) / delta;\n h = 60 * rate + 240;\n break;\n /* c8 ignore next 2 */\n default:\n break;\n }\n\n if (h < 0) {\n h = 360 + h;\n }\n\n if (min === max) {\n s = 0;\n } else {\n s = l < 0.5 ? delta / (2 * l) : delta / (2 - 2 * l);\n }\n\n return {\n h: Math.abs(+(h % 360).toFixed(2)),\n s: +(s * 100).toFixed(2),\n l: +(l * 100).toFixed(2),\n };\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex } from '~/modules/validators';\n\nimport hex2rgb from '~/converters/hex2rgb';\nimport rgb2hsl from '~/converters/rgb2hsl';\nimport { HSL } from '~/types';\n\n/** Convert HEX to HSL */\nexport default function hex2hsl(input: string): HSL {\n invariant(isHex(input), MESSAGES.inputHex);\n\n return rgb2hsl(hex2rgb(input));\n}\n","import { LRGB_TO_LMS, LSM_TO_LAB, PRECISION } from '~/modules/constants';\nimport { parseInput, restrictValues } from '~/modules/utils';\n\nimport { ConverterParameters, LAB, RGB } from '~/types';\n\nconst { cbrt, sign } = Math;\n\nfunction rgb2lrgb(input: number) {\n const abs = Math.abs(input);\n\n if (abs < 0.04045) {\n return input / 12.92;\n }\n\n return (sign(input) || 1) * ((abs + 0.055) / 1.055) ** 2.4;\n}\n\n/** Convert RGB to oklab */\nexport default function rgb2oklab(input: ConverterParameters<RGB>, precision = PRECISION): LAB {\n const value = parseInput(input, 'rgb');\n\n const [lr, lg, lb] = [rgb2lrgb(value.r / 255), rgb2lrgb(value.g / 255), rgb2lrgb(value.b / 255)];\n const l = cbrt(LRGB_TO_LMS.l[0] * lr + LRGB_TO_LMS.l[1] * lg + LRGB_TO_LMS.l[2] * lb);\n const m = cbrt(LRGB_TO_LMS.m[0] * lr + LRGB_TO_LMS.m[1] * lg + LRGB_TO_LMS.m[2] * lb);\n const s = cbrt(LRGB_TO_LMS.s[0] * lr + LRGB_TO_LMS.s[1] * lg + LRGB_TO_LMS.s[2] * lb);\n\n const lab = {\n l: LSM_TO_LAB.l[0] * l + LSM_TO_LAB.l[1] * m - LSM_TO_LAB.l[2] * s,\n a: LSM_TO_LAB.a[0] * l - LSM_TO_LAB.a[1] * m + LSM_TO_LAB.a[2] * s,\n b: LSM_TO_LAB.b[0] * l + LSM_TO_LAB.b[1] * m - LSM_TO_LAB.b[2] * s,\n };\n\n return restrictValues(lab, precision);\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex } from '~/modules/validators';\n\nimport hex2rgb from '~/converters/hex2rgb';\nimport rgb2oklab from '~/converters/rgb2oklab';\nimport { LAB } from '~/types';\n\n/** Convert HEX to oklab */\nexport default function hex2oklab(input: string, precision?: number): LAB {\n invariant(isHex(input), MESSAGES.inputHex);\n\n return rgb2oklab(hex2rgb(input), precision);\n}\n","import { RAD2DEG } from '~/modules/constants';\nimport { parseInput, restrictValues, round } from '~/modules/utils';\n\nimport { ConverterParameters, LAB, LCH } from '~/types';\n\nconst { atan2, sqrt } = Math;\n\n/** Convert oklab to oklch */\nexport default function oklab2oklch(input: ConverterParameters<LAB>, precision?: number): LCH {\n const { l, a, b } = restrictValues(parseInput(input, 'oklab'));\n\n const c = sqrt(a ** 2 + b ** 2);\n let h = (atan2(b, a) * RAD2DEG + 360) % 360;\n\n if (round(c * 10000) === 0) {\n h = 0;\n }\n\n return restrictValues({ l, c, h }, precision);\n}\n","import { parseInput } from '~/modules/utils';\n\nimport oklab2oklch from '~/converters/oklab2oklch';\nimport rgb2oklab from '~/converters/rgb2oklab';\nimport { ConverterParameters, LCH, RGB } from '~/types';\n\n/** Convert RGB to oklch */\nexport default function rgb2oklch(input: ConverterParameters<RGB>, precision?: number): LCH {\n const value = parseInput(input, 'rgb');\n\n return oklab2oklch(rgb2oklab(value, precision), precision);\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex } from '~/modules/validators';\n\nimport hex2rgb from '~/converters/hex2rgb';\nimport rgb2oklch from '~/converters/rgb2oklch';\nimport { LCH } from '~/types';\n\n/** Convert HEX to oklch */\nexport default function hex2oklch(input: string, precision?: number): LCH {\n invariant(isHex(input), MESSAGES.inputHex);\n\n return rgb2oklch(hex2rgb(input), precision);\n}\n","import { invariant } from '~/modules/invariant';\nimport { round } from '~/modules/utils';\nimport { isNumber } from '~/modules/validators';\n\n/**\n * Convert hue to RGB using chroma and median point\n */\nexport default function hue2rgb(point: number, chroma: number, h: number): number {\n invariant(isNumber(point) && isNumber(chroma) && isNumber(h), 'point, chroma and h are required');\n let hue = h;\n\n if (hue < 0) {\n hue += 1;\n }\n\n if (hue > 1) {\n hue -= 1;\n }\n\n if (hue < 1 / 6) {\n return round(point + (chroma - point) * 6 * hue, 4);\n }\n\n if (hue < 1 / 2) {\n return round(chroma, 4);\n }\n\n if (hue < 2 / 3) {\n return round(point + (chroma - point) * (2 / 3 - hue) * 6, 4);\n }\n\n return round(point, 4);\n}\n","import hue2rgb from '~/modules/hue2rgb';\nimport { parseInput, round } from '~/modules/utils';\n\nimport { ConverterParameters, HSL, RGB } from '~/types';\n\n/** Convert HSL to RGB */\nexport default function hsl2rgb(input: ConverterParameters<HSL>): RGB {\n const value = parseInput(input, 'hsl');\n\n const h = round(value.h) / 360;\n const s = round(value.s) / 100;\n const l = round(value.l) / 100;\n\n let r;\n let g;\n let b;\n\n let point;\n let chroma;\n\n if (s === 0) {\n r = l;\n g = l;\n b = l;\n } else {\n chroma = l < 0.5 ? l * (1 + s) : l + s - l * s;\n point = 2 * l - chroma;\n\n r = hue2rgb(point, chroma, h + 1 / 3);\n g = hue2rgb(point, chroma, h);\n b = hue2rgb(point, chroma, h - 1 / 3);\n }\n\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255),\n };\n}\n","import { parseInput } from '~/modules/utils';\n\nimport { ConverterParameters, HEX, RGB } from '~/types';\n\n/** Convert RGB to HEX */\nexport default function rgb2hex(input: ConverterParameters<RGB>): HEX {\n const rgb = parseInput(input, 'rgb');\n\n return `#${Object.values(rgb)\n .map(d => `0${Math.floor(d).toString(16)}`.slice(-2))\n .join('')}`;\n}\n","import { parseInput } from '~/modules/utils';\n\nimport hsl2rgb from '~/converters/hsl2rgb';\nimport rgb2hex from '~/converters/rgb2hex';\nimport { ConverterParameters, HEX, HSL } from '~/types';\n\n/** Convert HSL to HEX */\nexport default function hsl2hex(input: ConverterParameters<HSL>): HEX {\n const value = parseInput(input, 'hsl');\n\n return rgb2hex(hsl2rgb(value));\n}\n","import { parseInput } from '~/modules/utils';\n\nimport hsl2rgb from '~/converters/hsl2rgb';\nimport rgb2oklab from '~/converters/rgb2oklab';\nimport { ConverterParameters, HSL, LAB } from '~/types';\n\n/** Convert HSL to oklab */\nexport default function hsl2oklab(input: ConverterParameters<HSL>, precision?: number): LAB {\n const value = parseInput(input, 'hsl');\n\n return rgb2oklab(hsl2rgb(value), precision);\n}\n","import { parseInput } from '~/modules/utils';\n\nimport hsl2rgb from '~/converters/hsl2rgb';\nimport rgb2oklch from '~/converters/rgb2oklch';\nimport { ConverterParameters, HSL, LCH } from '~/types';\n\n/** Convert HSL to oklch */\nexport default function hsl2oklch(input: ConverterParameters<HSL>, precision?: number): LCH {\n const value = parseInput(input, 'hsl');\n\n return rgb2oklch(hsl2rgb(value), precision);\n}\n","import { LAB_TO_LMS, LSM_TO_RGB } from '~/modules/constants';\nimport { clamp, parseInput, round } from '~/modules/utils';\n\nimport { ConverterParameters, LAB, RGB } from '~/types';\n\nconst { abs } = Math;\n\nfunction lrgb2rgb(input: number) {\n const absoluteNumber = abs(input);\n const sign = input < 0 ? -1 : 1;\n\n if (absoluteNumber > 0.0031308) {\n return sign * (absoluteNumber ** (1 / 2.4) * 1.055 - 0.055);\n }\n\n return input * 12.92;\n}\n\n/** Convert oklab to RGB */\nexport default function oklab2rgb(input: ConverterParameters<LAB>, precision = 0): RGB {\n const { l: L, a: A, b: B } = parseInput(input, 'oklab');\n\n const l = (L + LAB_TO_LMS.l[0] * A + LAB_TO_LMS.l[1] * B) ** 3;\n const m = (L + LAB_TO_LMS.m[0] * A + LAB_TO_LMS.m[1] * B) ** 3;\n const s = (L + LAB_TO_LMS.s[0] * A + LAB_TO_LMS.s[1] * B) ** 3;\n\n const r = 255 * lrgb2rgb(LSM_TO_RGB.r[0] * l + LSM_TO_RGB.r[1] * m + LSM_TO_RGB.r[2] * s);\n const g = 255 * lrgb2rgb(LSM_TO_RGB.g[0] * l + LSM_TO_RGB.g[1] * m + LSM_TO_RGB.g[2] * s);\n const b = 255 * lrgb2rgb(LSM_TO_RGB.b[0] * l + LSM_TO_RGB.b[1] * m + LSM_TO_RGB.b[2] * s);\n\n return {\n r: clamp(round(r, precision), 0, 255),\n g: clamp(round(g, precision), 0, 255),\n b: clamp(round(b, precision), 0, 255),\n };\n}\n","import { parseInput } from '~/modules/utils';\n\nimport oklab2rgb from '~/converters/oklab2rgb';\nimport rgb2hex from '~/converters/rgb2hex';\nimport { ConverterParameters, HEX, LAB } from '~/types';\n\n/** Convert oklab to HEX */\nexport default function oklab2hex(input: ConverterParameters<LAB>): HEX {\n const value = parseInput(input, 'oklab');\n\n return rgb2hex(oklab2rgb(value));\n}\n","import { parseInput } from '~/modules/utils';\n\nimport oklab2rgb from '~/converters/oklab2rgb';\nimport rgb2hsl from '~/converters/rgb2hsl';\nimport { ConverterParameters, HSL, LAB } from '~/types';\n\n/** Convert oklab to HSL */\nexport default function oklab2hsl(input: ConverterParameters<LAB>): HSL {\n const value = parseInput(input, 'oklab');\n\n return rgb2hsl(oklab2rgb(value));\n}\n","/* eslint-disable prefer-const */\nimport { DEG2RAD } from '~/modules/constants';\nimport { parseInput, restrictValues } from '~/modules/utils';\n\nimport { ConverterParameters, LAB, LCH } from '~/types';\n\nconst { sin, cos } = Math;\n\n/** Convert oklch to oklab */\nexport default function oklch2oklab(input: ConverterParameters<LCH>, precision?: number): LAB {\n /*\n Convert from a qualitative parameter h and a quantitative parameter l to a 24-bit pixel.\n These formulas were invented by David Dalrymple to obtain maximum contrast without going\n out of gamut if the parameters are in the range 0-1.\n\n A saturation multiplier was added by Gregor Aisch\n */\n let { l, c, h } = parseInput(input, 'oklch');\n\n /* c8 ignore next 3 */\n if (Number.isNaN(h) || h < 0) {\n h = 0;\n }\n\n return restrictValues({ l, a: c * cos(h * DEG2RAD), b: c * sin(h * DEG2RAD) }, precision);\n}\n","import { parseInput } from '~/modules/utils';\n\nimport oklab2rgb from '~/converters/oklab2rgb';\nimport oklch2oklab from '~/converters/oklch2oklab';\nimport { ConverterParameters, LCH, RGB } from '~/types';\n\n/** Convert oklch to RGB */\nexport default function oklch2rgb(input: ConverterParameters<LCH>, precision = 0): RGB {\n const value = parseInput(input, 'oklch');\n\n return oklab2rgb(oklch2oklab(value), precision);\n}\n","import { parseInput } from '~/modules/utils';\n\nimport oklch2rgb from '~/converters/oklch2rgb';\nimport rgb2hex from '~/converters/rgb2hex';\nimport { ConverterParameters, HEX, LCH } from '~/types';\n\n/** Convert oklch to HEX */\nexport default function oklch2hex(input: ConverterParameters<LCH>): HEX {\n const value = parseInput(input, 'oklch');\n\n return rgb2hex(oklch2rgb(value));\n}\n","import { parseInput } from '~/modules/utils';\n\nimport oklch2rgb from '~/converters/oklch2rgb';\nimport rgb2hsl from '~/converters/rgb2hsl';\nimport { ConverterParameters, HSL, LCH } from '~/types';\n\n/** Convert oklch to HSL */\nexport default function oklch2hsl(input: ConverterParameters<LCH>): HSL {\n const value = parseInput(input, 'oklch');\n\n return rgb2hsl(oklch2rgb(value));\n}\n","import { COLOR_KEYS, MESSAGES } from '~/modules/constants';\nimport { extractAlphaFromHex } from '~/modules/hex-utils';\nimport { invariant } from '~/modules/invariant';\nimport { hasValidMatches, isHex, isString } from '~/modules/validators';\n\nimport hex2rgb from '~/converters/hex2rgb';\nimport { ColorModelKey, PlainObject } from '~/types';\n\nexport type ExtractColorPartsReturn = {\n alpha?: number;\n model: ColorModelKey;\n} & PlainObject<number>;\n\n/**\n * Extract the color parts from a CSS color string.\n * Hex colors are not supported.\n */\nexport default function extractColorParts(input: string) {\n invariant(isString(input), MESSAGES.inputString);\n\n if (isHex(input)) {\n const keys = COLOR_KEYS.rgb;\n const { r, g, b } = hex2rgb(input);\n const alpha = extractAlphaFromHex(input);\n\n return {\n model: 'rgb' as ColorModelKey,\n [keys[0]]: r,\n [keys[1]]: g,\n [keys[2]]: b,\n alpha: alpha < 1 ? alpha : undefined,\n } as ExtractColorPartsReturn;\n }\n\n const colorRegex =\n /(?:(rgb|hsl|oklab|oklch)a?\\s*\\(\\s*([\\d%.-]+)\\s*[ ,/]\\s*([\\d%.-]+)\\s*[ ,/]\\s*([\\d%.-]+)(?:\\s*[ ,/]\\s*([\\d%.-]+))?\\s*\\))/i;\n\n const matches = colorRegex.exec(input);\n\n invariant(hasValidMatches(matches), MESSAGES.invalidCSS);\n\n const model = matches[1] as ColorModelKey;\n const keys = COLOR_KEYS[model];\n let alpha = matches[5] ? parseFloat(matches[5]) : 1;\n\n if (alpha > 1) {\n alpha /= 100;\n }\n\n return {\n model,\n [keys[0]]: parseFloat(matches[2]),\n [keys[1]]: parseFloat(matches[3]),\n [keys[2]]: parseFloat(matches[4]),\n alpha: alpha < 1 ? alpha : undefined,\n } as ExtractColorPartsReturn;\n}\n","import { MESSAGES, PRECISION } from '~/modules/constants';\nimport { CSSColor, cssColors } from '~/modules/css-colors';\nimport { convertAlphaToHex, extractAlphaFromHex, removeAlphaFromHex } from '~/modules/hex-utils';\nimport { invariant } from '~/modules/invariant';\nimport { addAlpha, round } from '~/modules/utils';\nimport { isHex, isNamedColor, isString } from '~/modules/validators';\n\nimport * as converters from '~/converters';\nimport extractColorParts from '~/extract-color-parts';\nimport { ColorTuple, ColorType, HEX, HSL, LAB, LCH, RGB } from '~/types';\n\nexport type ParseCSSReturn<T extends ColorType> = T extends 'hex'\n ? HEX\n : T extends 'hsl'\n ? HSL\n : T extends 'oklab'\n ? LAB\n : T extends 'oklch'\n ? LCH\n : T extends 'rgb'\n ? RGB\n : never;\n\n/**\n * Parse CSS color\n */\nexport default function parseCSS<T extends ColorType>(\n input: string,\n format?: T,\n): ParseCSSReturn<T> {\n invariant(isString(input), MESSAGES.inputString);\n\n let result: any;\n\n const value = isNamedColor(input) ? cssColors[input.toLowerCase() as CSSColor] : input;\n\n const output = format ?? (isHex(value) ? 'hex' : extractColorParts(value).model);\n\n const colorParams = (params: Record<string, number>) => Object.values(params) as ColorTuple;\n\n if (isHex(value)) {\n const alpha = extractAlphaFromHex(value);\n\n switch (output) {\n case 'hsl': {\n result = addAlpha(converters.hex2hsl(value), alpha);\n break;\n }\n case 'oklab': {\n result = addAlpha(converters.hex2oklab(value), alpha);\n break;\n }\n case 'oklch': {\n result = addAlpha(converters.hex2oklch(value), alpha);\n break;\n }\n case 'rgb': {\n result = addAlpha(converters.hex2rgb(value), alpha);\n break;\n }\n default: {\n result = `${removeAlphaFromHex(value)}${alpha !== 1 ? convertAlphaToHex(alpha) : ''}`;\n break;\n }\n }\n\n return result as ParseCSSReturn<T>;\n }\n\n switch (output) {\n case 'hsl': {\n const { alpha, model, ...color } = extractColorParts(value);\n\n if (['oklab', 'oklch'].includes(model) && color.l > 1) {\n color.l = round(color.l / 100, PRECISION);\n }\n\n result = addAlpha(\n model === 'hsl' ? color : converters[`${model}2hsl`](colorParams(color)),\n alpha,\n );\n\n break;\n }\n case 'oklab': {\n const { alpha, model, ...color } = extractColorParts(value);\n\n if (['oklab', 'oklch'].includes(model) && color.l > 1) {\n color.l = round(color.l / 100, PRECISION);\n }\n\n result = addAlpha(\n model === 'oklab' ? color : converters[`${model}2oklab`](colorParams(color)),\n alpha,\n );\n\n break;\n }\n case 'oklch': {\n const { alpha, model, ...color } = extractColorParts(value);\n\n if (['oklab', 'oklch'].includes(model) && color.l > 1) {\n color.l = round(color.l / 100, PRECISION);\n }\n\n result = addAlpha(\n model === 'oklch' ? color : converters[`${model}2oklch`](colorParams(color)),\n alpha,\n );\n break;\n }\n case 'rgb': {\n const { alpha, model, ...color } = extractColorParts(value);\n\n if (['oklab', 'oklch'].includes(model) && color.l > 1) {\n color.l /= 100;\n }\n\n result = addAlpha(\n model === 'rgb' ? color : converters[`${model}2rgb`](colorParams(color)),\n alpha,\n );\n break;\n }\n\n case 'hex':\n default: {\n const { alpha, model, ...color } = extractColorParts(value);\n let alphaPrefix = '';\n\n if (['oklab', 'oklch'].includes(model) && color.l > 1) {\n color.l = round(color.l / 100, PRECISION);\n }\n\n if (alpha) {\n alphaPrefix = convertAlphaToHex(alpha);\n }\n\n result = `${converters[`${model}2hex`](colorParams(color))}${alphaPrefix}`;\n\n break;\n }\n }\n\n return result as ParseCSSReturn<T>;\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { addAlphaToHex } from '~/modules/hex-utils';\nimport { invariant } from '~/modules/invariant';\nimport { addAlpha, limit } from '~/modules/utils';\nimport { isHex, isHSL, isLAB, isLCH, isPlainObject, isRGB, isString } from '~/modules/validators';\n\nimport * as converters from '~/converters';\nimport extractColorParts from '~/extract-color-parts';\nimport parseCSS from '~/parse-css';\nimport { Colors, HSL, LAB, LCH, PlainObject, RGB } from '~/types';\n\nexport default function parseColor(color: string | HSL | LAB | LCH | RGB): Colors {\n invariant(!!color, MESSAGES.input);\n\n const output: PlainObject = {};\n\n if (isString(color)) {\n const { alpha = 1 } = extractColorParts(color);\n const type = isHex(color) ? 'hex' : extractColorParts(color).model;\n\n output.hex = addAlphaToHex(parseCSS(color, 'hex'), alpha);\n output.hsl = addAlpha(parseCSS(color, 'hsl'), alpha);\n output.oklab = addAlpha(parseCSS(color, 'oklab'), alpha);\n output.oklch = addAlpha(parseCSS(color, 'oklch'), alpha);\n output.rgb = addAlpha(parseCSS(color, 'rgb'), alpha);\n\n output.alpha = alpha;\n output.type = type;\n } else if (isPlainObject(color)) {\n const { alpha = 1 } = color;\n\n if (isHSL(color)) {\n output.hsl = {\n h: limit(color.h, 'hsl', 'h'),\n s: limit(color.s, 'hsl', 's'),\n l: limit(color.l, 'hsl', 'l'),\n };\n output.rgb = converters.hsl2rgb(output.hsl);\n output.oklab = converters.hsl2oklab(output.hsl);\n output.oklch = converters.hsl2oklch(output.hsl);\n output.type = 'hsl';\n } else if (isLAB(color)) {\n output.hsl = converters.oklab2hsl(color);\n output.oklab = color;\n output.oklch = converters.oklab2oklch(color);\n output.rgb = converters.oklab2rgb(color);\n output.type = 'oklab';\n } else if (isLCH(color)) {\n output.hsl = converters.oklch2hsl(color);\n output.oklab = converters.oklch2oklab(color);\n output.oklch = color;\n output.rgb = converters.oklch2rgb(color);\n output.type = 'oklch';\n } else if (isRGB(color)) {\n output.rgb = {\n r: limit(color.r, 'rgb', 'r'),\n g: limit(color.g, 'rgb', 'g'),\n b: limit(color.b, 'rgb', 'b'),\n };\n output.hsl = converters.rgb2hsl(output.rgb);\n output.oklab = converters.rgb2oklab(output.rgb);\n output.oklch = converters.rgb2oklch(output.rgb);\n output.type = 'rgb';\n } else {\n throw new Error('invalid color');\n }\n\n output.hex = addAlphaToHex(converters.hsl2hex(output.hsl), alpha);\n output.hsl = addAlpha(output.hsl, alpha);\n output.oklab = addAlpha(output.oklab, alpha);\n output.oklch = addAlpha(output.oklch, alpha);\n output.rgb = addAlpha(output.rgb, alpha);\n\n output.alpha = alpha;\n } else {\n throw new Error(MESSAGES.input);\n }\n\n return output as Colors;\n}\n","import { MESSAGES, PRECISION } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { round } from '~/modules/utils';\nimport { isString } from '~/modules/validators';\n\nimport parseCSS from '~/parse-css';\n\n/**\n * Get the brightness difference between 2 colors.\n */\nexport default function brightnessDifference(\n left: string,\n right: string,\n precision = PRECISION,\n): number {\n invariant(isString(left), MESSAGES.left);\n invariant(isString(right), MESSAGES.right);\n\n const RGBLeft = parseCSS(left, 'rgb');\n const RGBRight = parseCSS(right, 'rgb');\n\n const brightnessLeft = (RGBLeft.r * 299 + RGBLeft.g * 587 + RGBLeft.b * 114) / 1000;\n const brightnessRight = (RGBRight.r * 299 + RGBRight.g * 587 + RGBRight.b * 114) / 1000;\n\n return round(Math.abs(brightnessRight - brightnessLeft), precision);\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { round } from '~/modules/utils';\nimport { isString } from '~/modules/validators';\n\nimport parseCSS from '~/parse-css';\n\n/**\n * Get the chroma of a color.\n */\nexport default function chroma(input: string): number {\n invariant(isString(input), MESSAGES.inputString);\n\n const { r, g, b } = parseCSS(input, 'rgb');\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n\n return round((max - min) / 255, 4);\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isString } from '~/modules/validators';\n\nimport parseCSS from '~/parse-css';\n\n/**\n * Get the difference between 2 colors.\n */\nexport default function colorDifference(left: string, right: string): number {\n invariant(isString(left), MESSAGES.left);\n invariant(isString(right), MESSAGES.right);\n\n const RGBLeft = parseCSS(left, 'rgb');\n const RGBRight = parseCSS(right, 'rgb');\n\n return (\n Math.max(RGBLeft.r, RGBRight.r) -\n Math.min(RGBLeft.r, RGBRight.r) +\n (Math.max(RGBLeft.g, RGBRight.g) - Math.min(RGBLeft.g, RGBRight.g)) +\n (Math.max(RGBLeft.b, RGBRight.b) - Math.min(RGBLeft.b, RGBRight.b))\n );\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { round } from '~/modules/utils';\nimport { isString } from '~/modules/validators';\n\nimport parseCSS from '~/parse-css';\n\n/**\n * Get the luminance of a color.\n */\nexport default function luminance(input: string): number {\n invariant(isString(input), MESSAGES.inputString);\n\n const { r, g, b } = parseCSS(input, 'rgb');\n\n const rgb = [r / 255, g / 255, b / 255];\n\n for (let index = 0; index < rgb.length; index++) {\n if (rgb[index] <= 0.03928) {\n rgb[index] /= 12.92;\n } else {\n rgb[index] = ((rgb[index] + 0.055) / 1.055) ** 2.4;\n }\n }\n\n return round(0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2], 4);\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { round } from '~/modules/utils';\nimport { isString } from '~/modules/validators';\n\nimport getLuminance from '~/luminance';\n\n/**\n * Get the color contrast between 2 colors.\n */\nexport default function contrast(left: string, right: string): number {\n invariant(isString(left), MESSAGES.left);\n invariant(isString(right), MESSAGES.right);\n\n const LuminanceLeft = getLuminance(left);\n const LuminanceRight = getLuminance(right);\n\n return round(\n LuminanceLeft >= LuminanceRight\n ? (LuminanceLeft + 0.05) / (LuminanceRight + 0.05)\n : (LuminanceRight + 0.05) / (LuminanceLeft + 0.05),\n );\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isString } from '~/modules/validators';\n\nimport getBrightnessDifference from '~/brightness-difference';\nimport getColorDifference from '~/color-difference';\nimport getContrast from '~/contrast';\nimport { Analysis } from '~/types';\n\n/**\n * Check 2 colors for WCAG compliance.\n */\nexport default function compare(left: string, right: string): Analysis {\n invariant(isString(left), MESSAGES.left);\n invariant(isString(right), MESSAGES.right);\n\n const colorThreshold = 500;\n const brightnessThreshold = 125;\n\n const colorDifference = getColorDifference(left, right);\n const contrast = getContrast(left, right);\n const brightnessDifference = getBrightnessDifference(left, right);\n\n const isBright = brightnessDifference >= brightnessThreshold;\n const hasEnoughDifference = colorDifference >= colorThreshold;\n\n let compliant = 0;\n\n if (isBright && hasEnoughDifference) {\n compliant = 2;\n } else if (isBright || hasEnoughDifference) {\n compliant = 1;\n }\n\n return {\n brightnessDifference,\n colorDifference,\n compliant,\n contrast,\n largeAA: contrast >= 3,\n largeAAA: contrast >= 4.5,\n normalAA: contrast >= 4.5,\n normalAAA: contrast >= 7,\n };\n}\n","import { MESSAGES, PRECISION } from '~/modules/constants';\nimport { convertAlphaToHex } from '~/modules/hex-utils';\nimport { invariant } from '~/modules/invariant';\nimport { restrictValues, round } from '~/modules/utils';\nimport { isHex, isHSL, isLAB, isLCH, isValidColorModel } from '~/modules/validators';\n\nimport * as converters from '~/converters';\nimport { Alpha, ColorModel, ColorType, HEX, HSL } from '~/types';\n\nexport interface FormatOptions {\n alpha?: Alpha;\n /**\n * The output color type.\n * @default 'hex'\n */\n format?: ColorType;\n /**\n * The number of digits of the output.\n * @default 5\n */\n precision?: number;\n /**\n * The separator between the values.\n * oklab and oklch always use space as a separator.\n * @default ' '\n */\n separator?: string;\n}\n\nexport default function formatCSS<T extends ColorModel | HEX>(\n input: T,\n options: FormatOptions = {},\n): string {\n invariant(isHex(input) || isValidColorModel(input), MESSAGES.invalid);\n\n const { alpha, format = 'hex', precision = PRECISION, separator: baseSeparator = ' ' } = options;\n\n let value: HSL;\n\n if (isHex(input)) {\n value = converters.hex2hsl(input);\n } else if (isHSL(input)) {\n value = input;\n } else if (isLAB(input)) {\n value = converters.oklab2hsl(input);\n } else if (isLCH(input)) {\n value = converters.oklch2hsl(input);\n } else {\n value = converters.rgb2hsl(input);\n }\n\n const opacity = alpha && alpha !== 1 ? `${round(alpha * 100)}%` : null;\n let params = [];\n let separator = baseSeparator;\n\n switch (format) {\n case 'hsl': {\n const { h, s, l } = value;\n\n params = [h, `${s}%`, `${l}%`];\n break;\n }\n case 'oklab': {\n separator = ' ';\n const { l, a, b } = restrictValues(converters.hsl2oklab(value), precision);\n\n params = [`${round(l * 100, precision)}%`, a, b];\n break;\n }\n case 'oklch': {\n separator = ' ';\n const { l, c, h } = restrictValues(converters.hsl2oklch(value), precision);\n\n params = [`${round(l * 100, precision)}%`, c, h];\n break;\n }\n case 'rgb': {\n const { r, g, b } = converters.hsl2rgb(value);\n\n params = [r, g, b];\n break;\n }\n default: {\n const hex = converters.hsl2hex(value);\n\n if (alpha && alpha !== 1) {\n return `${hex}${convertAlphaToHex(alpha)}`;\n }\n\n return hex;\n }\n }\n\n return `${format}(${params.join(separator)}${opacity ? ` / ${opacity}` : ''})`;\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { clamp } from '~/modules/utils';\nimport { isHex, isNamedColor, isNumber, isString } from '~/modules/validators';\n\nimport extractColorParts from '~/extract-color-parts';\nimport formatCSS from '~/format-css';\nimport parseCSS from '~/parse-css';\nimport { ColorModelKeys, ColorType } from '~/types';\n\n/**\n * Update color properties\n */\nexport default function updater(\n key: ColorModelKeys<'hsl'>,\n operator: '+' | '-',\n format?: ColorType,\n) {\n return (input: string, amount: number) => {\n invariant(isString(input), MESSAGES.inputString);\n invariant(isNumber(amount), MESSAGES.alpha);\n\n const color = parseCSS(input, 'hsl');\n const output = isHex(input) || isNamedColor(input) ? 'hex' : extractColorParts(input).model;\n\n return formatCSS(\n {\n ...color,\n [key]: clamp(color[key] + (operator === '+' ? amount : -amount), 0, 100),\n },\n { format: format ?? output },\n );\n };\n}\n","import updater from '~/modules/updater';\n\nimport { Amount, ColorType } from '~/types';\n\n/**\n * Decrease color lightness\n */\nexport default function darken(input: string, amount: Amount, format?: ColorType): string {\n return updater('l', '-', format)(input, amount);\n}\n","import updater from '~/modules/updater';\n\nimport { Amount, ColorType } from '~/types';\n\n/**\n * Decrease color saturation\n */\nexport default function desaturate(input: string, amount: Amount, format?: ColorType) {\n return updater('s', '-', format)(input, amount);\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { constrainDegrees } from '~/modules/utils';\nimport { isHex, isNamedColor, isNumber, isString } from '~/modules/validators';\n\nimport extractColorParts from '~/extract-color-parts';\nimport formatCSS from '~/format-css';\nimport parseCSS from '~/parse-css';\nimport { ColorType, Degrees } from '~/types';\n\n/**\n * Change the color hue\n */\nexport default function rotate(input: string, degrees: Degrees, format?: ColorType) {\n invariant(isString(input), MESSAGES.inputString);\n invariant(isNumber(degrees), 'degrees must be a number');\n\n const color = parseCSS(input, 'hsl');\n\n const output = isHex(input) || isNamedColor(input) ? 'hex' : extractColorParts(input).model;\n\n return formatCSS(\n {\n ...color,\n h: constrainDegrees(color.h, degrees),\n },\n { format: format ?? output },\n );\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex, isNamedColor, isString } from '~/modules/validators';\n\nimport extractColorParts from '~/extract-color-parts';\nimport formatCSS from '~/format-css';\nimport parseCSS from '~/parse-css';\nimport rotate from '~/rotate';\nimport { HEX } from '~/types';\n\n/**\n * Invert the color\n */\nexport default function invert(input: string) {\n invariant(isString(input), MESSAGES.inputString);\n const format = isHex(input) || isNamedColor(input) ? 'hex' : extractColorParts(input).model;\n const hex = parseCSS(input, 'hex');\n\n return formatCSS(rotate(hex, 180) as HEX, { format });\n}\n","import updater from '~/modules/updater';\n\nimport { Amount, ColorType } from '~/types';\n\n/**\n * Increase color lightness\n */\nexport default function lighten(input: string, amount: Amount, format?: ColorType) {\n return updater('l', '+', format)(input, amount);\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex, isNamedColor, isNumber, isString } from '~/modules/validators';\n\nimport extractColorParts from '~/extract-color-parts';\nimport formatCSS from '~/format-css';\nimport parseCSS from '~/parse-css';\nimport { Alpha, ColorType } from '~/types';\n\n/**\n * Make the color transparent\n */\nexport default function opacify(input: string, alpha: Alpha, format?: ColorType): string {\n invariant(isString(input), MESSAGES.inputString);\n invariant(isNumber(alpha), MESSAGES.alpha);\n const type = isHex(input) || isNamedColor(input) ? 'hex' : extractColorParts(input).model;\n\n const rgb = parseCSS(input, 'rgb');\n\n return formatCSS(rgb, { format: format ?? type, alpha });\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { cssColors } from '~/modules/css-colors';\nimport { extractAlphaFromHex } from '~/modules/hex-utils';\nimport { invariant } from '~/modules/invariant';\nimport { isHex, isString } from '~/modules/validators';\n\nimport extractColorParts from '~/extract-color-parts';\n\nexport default function opacity(input: string): number {\n invariant(isString(input), MESSAGES.inputString);\n\n if (isHex(input)) {\n return extractAlphaFromHex(input);\n } else if (Object.keys(cssColors).includes(input)) {\n return 1;\n }\n\n const { alpha } = extractColorParts(input);\n\n if (!alpha) {\n return 1;\n }\n\n return alpha;\n}\n","import updater from '~/modules/updater';\n\nimport { ColorType } from '~/types';\n\n/**\n * Increase color saturation\n */\nexport default function saturate(input: string, amount: number, format?: ColorType) {\n return updater('s', '+', format)(input, amount);\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isString } from '~/modules/validators';\n\nimport hex2rgb from '~/converters/hex2rgb';\nimport parseCSS from '~/parse-css';\n\ninterface Options {\n /**\n * The dark color to return if the input is light.\n * @default '#000000'\n */\n darkColor?: string;\n /**\n * The light color to return if the input is dark.\n * @default '#ffffff'\n */\n lightColor?: string;\n /**\n * The threshold to determine if the color is light or dark.\n * A number between 0 and 255.\n * @default 128\n */\n threshold?: number;\n}\n\n/**\n * Get the contrasted color for a given hex.\n */\nexport default function textColor(input: string, options: Options = {}): string {\n const { darkColor = '#000000', lightColor = '#ffffff', threshold = 128 } = options;\n\n invariant(isString(input), MESSAGES.inputString);\n invariant(threshold >= 0 && threshold <= 255, MESSAGES.threshold);\n\n const { r, g, b } = hex2rgb(parseCSS(input, 'hex'));\n const yiq = (r * 299 + g * 587 + b * 114) / 1000;\n\n return yiq >= threshold ? darkColor : lightColor;\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { clamp, round } from '~/modules/utils';\nimport { isNumber, isString } from '~/modules/validators';\n\nimport formatCSS from '~/format-css';\nimport opacity from '~/opacity';\nimport parseCSS from '~/parse-css';\nimport { Alpha, ColorType } from '~/types';\n\n/**\n * Increase the color transparency.\n */\nexport default function transparentize(input: string, alpha: Alpha, format?: ColorType): string {\n invariant(isString(input), MESSAGES.inputString);\n invariant(isNumber(alpha), MESSAGES.alpha);\n\n invariant(alpha >= -1 && alpha <= 1, MESSAGES.alpha);\n\n const oklch = parseCSS(input, 'oklab');\n\n const value = round(clamp(opacity(input) - alpha, 0, 1));\n\n return formatCSS(oklch, { format, alpha: value });\n}\n","import { invariant } from '~/modules/invariant';\nimport parseColor from '~/modules/parse-color';\n\nimport brightnessDifference from '~/brightness-difference';\nimport chroma from '~/chroma';\nimport colorDifference from '~/color-difference';\nimport compare from '~/compare';\nimport contrast from '~/contrast';\nimport darken from '~/darken';\nimport desaturate from '~/desaturate';\nimport formatCSS from '~/format-css';\nimport invert from '~/invert';\nimport lighten from '~/lighten';\nimport luminance from '~/luminance';\nimport opacify from '~/opacify';\nimport opacity from '~/opacity';\nimport rotate from '~/rotate';\nimport saturate from '~/saturate';\nimport textColor from '~/text-color';\nimport transparentize from '~/transparentize';\nimport { Alpha, Amount, Analysis, ColorType, Degrees, HEX, HSL, LAB, LCH, RGB } from '~/types';\n\nexport interface Options {\n /**\n * The output color type\n */\n format?: ColorType;\n}\n\nexport default class Colorizr {\n public alpha: Alpha;\n public hex: HEX;\n public hsl: HSL;\n public oklab: LAB;\n public oklch: LCH;\n public rgb: RGB;\n public type: ColorType;\n\n constructor(color: string | HSL | LAB | LCH | RGB, options: Options = {}) {\n invariant(!!color, 'color is required');\n\n const { alpha, hex, hsl, oklab, oklch, rgb, type } = parseColor(color);\n\n this.hex = hex;\n this.hsl = hsl;\n this.oklab = oklab;\n this.oklch = oklch;\n this.rgb = rgb;\n\n this.alpha = alpha;\n this.type = options.format ?? type;\n }\n\n /**\n * Get css string\n */\n get css(): string {\n return this.selectedColor;\n }\n\n /**\n * Get the red value\n */\n get red(): number {\n return Number(this.rgb.r);\n }\n\n /**\n * Get the green value\n */\n get green(): number {\n return Number(this.rgb.g);\n }\n\n /**\n * Get the blue value\n */\n get blue(): number {\n return Number(this.rgb.b);\n }\n\n /**\n * Get the hue value\n */\n get hue(): number {\n return Number(this.hsl.h);\n }\n\n /**\n * Get the saturation value\n */\n get saturation(): number {\n return Number(this.hsl.s);\n }\n\n /**\n * Get the lightness value\n */\n get lightness(): number {\n return Number(this.hsl.l);\n }\n\n /**\n * Get the luminance value\n */\n get luminance(): number {\n return luminance(this.selectedColor);\n }\n\n /**\n * Get the chroma value\n */\n get chroma(): number {\n return chroma(this.selectedColor);\n }\n\n get opacity(): number {\n return opacity(this.selectedColor);\n }\n\n /**\n * Get the contrasted color\n */\n get textColor(): string {\n return textColor(this.selectedColor);\n }\n\n private get selectedColor(): string {\n return formatCSS(this[this.type], { format: this.type, alpha: this.alpha });\n }\n\n public brightnessDifference(input: string): number {\n return brightnessDifference(this.selectedColor, input);\n }\n\n public colorDifference(input: string): number {\n return colorDifference(this.selectedColor, input);\n }\n\n /**\n * Test 2 colors for compliance\n */\n public compare(input: string): Analysis {\n return compare(this.selectedColor, input);\n }\n\n public contrast(input: string): number {\n return contrast(this.selectedColor, input);\n }\n\n public format(type: ColorType, precision?: number): string {\n return formatCSS(this.rgb, {\n alpha: this.alpha,\n format: type,\n precision,\n });\n }\n\n /**\n * Increase lightness\n */\n public lighten(amount: Amount): string {\n return lighten(this.selectedColor, amount);\n }\n\n /**\n * Decrease lightness\n */\n public darken(amount: Amount): string {\n return darken(this.selectedColor, amount);\n }\n\n /**\n * Increase saturation\n */\n public saturate(amount: Amount): string {\n return saturate(this.selectedColor, amount);\n }\n\n /**\n * Decrease saturation\n */\n public desaturate(amount: Amount): string {\n return desaturate(this.selectedColor, amount);\n }\n\n /**\n * Invert color\n */\n public invert(): string {\n return invert(this.selectedColor);\n }\n\n /**\n * Add opacity to the color.\n */\n public opacify(alpha: Alpha = 0.9): string {\n return opacify(this.selectedColor, alpha, this.type);\n }\n\n /**\n * Rotate color\n */\n public rotate(degrees: Degrees): string {\n return rotate(this.selectedColor, degrees);\n }\n\n /**\n * Make the color more transparent\n */\n public transparentize(alpha: Alpha = 0.1): string {\n return transparentize(this.selectedColor, alpha, this.type);\n }\n}\n","import formatCSS from '~/format-css';\nimport parseCSS from '~/parse-css';\nimport { ColorType } from '~/types';\n\n/**\n * Convert a color string to another format.\n */\nexport default function convert(input: string, format: ColorType) {\n const value = parseCSS(input, format);\n\n return formatCSS(value, { format });\n}\n","import parseCSS from '~/parse-css';\n\nexport default function isValidColor(input: string): boolean {\n try {\n parseCSS(input);\n\n return true;\n } catch {\n return false;\n }\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { cssColors } from '~/modules/css-colors';\nimport { invariant } from '~/modules/invariant';\nimport { isString } from '~/modules/validators';\n\nimport parseCSS from '~/parse-css';\n\n/**\n * Get the name of a color.\n * Returns the hex value if the color is not found.\n */\nexport default function name(input: string): string {\n invariant(isString(input), MESSAGES.inputString);\n\n const hex = parseCSS(input, 'hex');\n\n const [color] = Object.entries(cssColors).find(([, value]) => value === hex) || [];\n\n return color ?? hex;\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex, isNamedColor, isPlainObject, isString } from '~/modules/validators';\n\nimport convert from '~/convert';\nimport hex2hsl from '~/converters/hex2hsl';\nimport hsl2hex from '~/converters/hsl2hex';\nimport extractColorParts from '~/extract-color-parts';\nimport parseCSS from '~/parse-css';\nimport rotate from '~/rotate';\nimport { ColorType, HEX } from '~/types';\n\nexport interface PaletteOptions {\n format?: ColorType;\n lightness?: number;\n saturation?: number;\n /**\n * The number of colors to generate\n * @default 6\n */\n size?: number;\n type?: 'monochromatic';\n}\n\nexport default function palette(input: string, options: PaletteOptions = {}): string[] {\n invariant(isString(input), MESSAGES.inputString);\n invariant(isPlainObject(options), MESSAGES.options);\n\n const { format, lightness, saturation, size = 6, type } = options;\n const hsl = parseCSS(input, 'hsl');\n const output: string[] = [];\n const colorFormat = isHex(input) || isNamedColor(input) ? 'hex' : extractColorParts(input).model;\n\n switch (type) {\n case 'monochromatic': {\n const step = 80 / size;\n\n for (let index = size; index > 0; index--) {\n output.push(hsl2hex({ ...hsl, l: step * index }));\n }\n\n break;\n }\n default: {\n const step = 360 / size;\n\n output.push(hsl2hex({ ...hsl, l: lightness ?? hsl.l, s: saturation ?? hsl.s }));\n\n for (let index = 1; index < size; index++) {\n const color = rotate(input, hsl.h + step * index, 'hex') as HEX;\n\n output.push(hsl2hex({ ...hex2hsl(color), l: lightness ?? hsl.l, s: saturation ?? hsl.s }));\n }\n\n break;\n }\n }\n\n return output.map(color => convert(color, format ?? colorFormat));\n}\n","import { LAB_TO_LMS, LSM_TO_RGB, MESSAGES, PRECISION, SRGB_TO_P3 } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { round } from '~/modules/utils';\nimport { isNumber, isString } from '~/modules/validators';\n\nimport { oklch2oklab } from '~/converters';\nimport parseCSS from '~/parse-css';\nimport { ColorTuple, LCH } from '~/types';\n\nfunction multiplyMatrix(matrix: number[][], vector: ColorTuple): ColorTuple {\n return [\n matrix[0][0] * vector[0] + matrix[0][1] * vector[1] + matrix[0][2] * vector[2],\n matrix[1][0] * vector[0] + matrix[1][1] * vector[1] + matrix[1][2] * vector[2],\n matrix[2][0] * vector[0] + matrix[2][1] * vector[1] + matrix[2][2] * vector[2],\n ];\n}\n\nfunction isInP3Gamut(color: ColorTuple): boolean {\n const epsilon = 0.000001;\n\n return color.every(component => component >= 0 - epsilon && component <= 1 + epsilon);\n}\n\nfunction oklabToLinearSRGB(L: number, a: number, b: number): ColorTuple {\n const l = (L + LAB_TO_LMS.l[0] * a + LAB_TO_LMS.l[1] * b) ** 3;\n const m = (L + LAB_TO_LMS.m[0] * a + LAB_TO_LMS.m[1] * b) ** 3;\n const s = (L + LAB_TO_LMS.s[0] * a + LAB_TO_LMS.s[1] * b) ** 3;\n\n return [\n LSM_TO_RGB.r[0] * l + LSM_TO_RGB.r[1] * m + LSM_TO_RGB.r[2] * s,\n LSM_TO_RGB.g[0] * l + LSM_TO_RGB.g[1] * m + LSM_TO_RGB.g[2] * s,\n LSM_TO_RGB.b[0] * l + LSM_TO_RGB.b[1] * m + LSM_TO_RGB.b[2] * s,\n ];\n}\n\nfunction oklabToLinearP3(L: number, a: number, b: number): ColorTuple {\n const srgb = oklabToLinearSRGB(L, a, b);\n\n return multiplyMatrix(SRGB_TO_P3, srgb);\n}\n\n/**\n * Get the maximum chroma for a given lightness and hue in the OkLCH color space\n */\nexport function getOkLCHMaxChroma(input: string | LCH, precision = PRECISION): number {\n const { l, h } = isString(input) ? parseCSS(input, 'oklch') : input;\n\n invariant(isNumber(l) && l >= 0 && l <= 1, MESSAGES.lightnessRange);\n invariant(isNumber(h) && h >= 0 && h <= 360, MESSAGES.hueRange);\n\n // Binary search parameters\n const epsilon = 0.000001;\n let low = 0;\n let high = 0.5; // Increased max theoretical chroma\n\n while (high - low > epsilon) {\n const mid = (low + high) / 2;\n const { l: L, a, b } = oklch2oklab({ l, c: mid, h }, 16);\n\n const p3Color = oklabToLinearP3(L, a, b);\n\n if (isInP3Gamut(p3Color)) {\n low = mid;\n } else {\n high = mid;\n }\n }\n\n return round(low, precision);\n}\n\n/**\n * Get a OkLCH color in the P3 color space.\n */\nexport function getP3Color(input: string | LCH): string {\n const lch = isString(input) ? parseCSS(input, 'oklch') : input;\n\n return `oklch(${lch.l} ${getOkLCHMaxChroma(lch)} ${lch.h})`;\n}\n","import formatCSS from '~/format-css';\nimport { ColorType } from '~/types';\n\n/**\n * Generate a random color.\n */\nexport default function random(type: ColorType = 'hex'): string {\n const hsl = {\n h: Math.floor(Math.random() * 360) + 1,\n s: Math.floor(Math.random() * 90) + 10,\n l: Math.floor(Math.random() * 80) + 10,\n };\n\n return formatCSS(hsl, { format: type });\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex, isNamedColor, isString } from '~/modules/validators';\n\nimport convert from '~/convert';\nimport extractColorParts from '~/extract-color-parts';\nimport rotate from '~/rotate';\nimport { ColorType } from '~/types';\n\nexport type Scheme =\n | 'analogous'\n | 'complementary'\n | 'rectangle'\n | 'split'\n | 'split-complementary'\n | 'square'\n | 'tetradic'\n | 'triadic';\n\nexport interface SchemeOptions {\n format?: ColorType;\n /**\n * The type of scheme to generate.\n * @default 'complementary'\n */\n type?: Scheme;\n}\n\n/**\n * Get the scheme for a color.\n */\nexport default function scheme(input: string, typeOrOptions?: Scheme | SchemeOptions): string[] {\n invariant(isString(input), MESSAGES.inputString);\n const { format, type = 'complementary' } = isString(typeOrOptions)\n ? { type: typeOrOptions }\n : (typeOrOptions ?? {});\n\n const output = isHex(input) || isNamedColor(input) ? 'hex' : extractColorParts(input).model;\n\n const colors: string[] = [];\n\n switch (type) {\n case 'analogous': {\n colors.push(rotate(input, -30), input, rotate(input, 30));\n break;\n }\n case 'complementary': {\n colors.push(input, rotate(input, 180));\n break;\n }\n\n case 'split':\n case 'split-complementary': {\n colors.push(input, rotate(input, 150), rotate(input, 210));\n break;\n }\n case 'triadic': {\n colors.push(input, rotate(input, 120), rotate(input, 240));\n break;\n }\n\n case 'tetradic':\n case 'rectangle': {\n colors.push(input, rotate(input, 60), rotate(input, 180), rotate(input, 240));\n break;\n }\n case 'square': {\n colors.push(input, rotate(input, 90), rotate(input, 180), rotate(input, 270));\n break;\n }\n default: {\n throw new TypeError('invalid type');\n }\n }\n\n return colors.map(color => convert(color, format ?? output));\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex, isNamedColor, isString } from '~/modules/validators';\n\nimport convert from '~/convert';\nimport { oklch2hex } from '~/converters';\nimport oklch2rgb from '~/converters/oklch2rgb';\nimport rgb2hex from '~/converters/rgb2hex';\nimport extractColorParts from '~/extract-color-parts';\nimport parseCSS from '~/parse-css';\nimport { ColorType, HEX, LCH } from '~/types';\n\ntype ColorTokens = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;\n\ntype Swatch = {\n [key in ColorTokens]: string;\n};\n\nexport interface SwatchOptions {\n format?: ColorType;\n /**\n * The scale of the swatch.\n * Linear scale will have equal distance between each shade.\n * @default 'dynamic'\n */\n scale?: 'dynamic' | 'linear';\n}\n\nconst MIN_LIGHTNESS = 21;\nconst MAX_LIGHTNESS = 97;\n\n/**\n * Generate a shade of a color based its lightness tuning factor\n */\nfunction shadeColorDynamic(input: LCH, lightnessTuningFactor: number, chromaTuningFactor = 0): HEX {\n if (lightnessTuningFactor === 0) {\n return rgb2hex(oklch2rgb({ ...input, l: input.l / 100 }));\n }\n\n // Convert back to RGB and make sure it's within the sRGB gamut\n return shadeColor(input, input.l + lightnessTuningFactor, chromaTuningFactor);\n}\n\n/**\n * Generate a shade of a color based its lightness tuning factor\n */\nfunction shadeColor(input: LCH, lightness: number, chromaTuningFactor = 0): HEX {\n const { c, h } = input;\n\n // Convert back to RGB and make sure it's within the sRGB gamut\n return oklch2hex({ l: lightness / 100, c: c + chromaTuningFactor, h });\n}\n\n/**\n * Generate a palette of shades of a color\n */\nexport default function swatch(input: string, options: SwatchOptions = {}): Swatch {\n invariant(isString(input), MESSAGES.inputString);\n const { format, scale = 'dynamic' } = options;\n\n const lch = parseCSS(input, 'oklch');\n\n lch.l = 50;\n\n const colorFormat = isHex(input) || isNamedColor(input) ? 'hex' : extractColorParts(input).model;\n\n const currentLightness = lch.l;\n const safeMaxLightness = currentLightness >= 88.5 ? 99.5 : MAX_LIGHTNESS;\n const safeMinLightness = currentLightness <= 33 ? 0 : MIN_LIGHTNESS;\n const lightBase = (safeMaxLightness - currentLightness) / 5;\n const darkBase = (-1 * (currentLightness - safeMinLightness)) / 8;\n\n const output: Swatch =\n scale === 'linear'\n ? {\n 50: shadeColor(lch, 95, -0.00375),\n 100: shadeColor(lch, 90, -0.00375),\n 200: shadeColor(lch, 80, -0.00375),\n 300: shadeColor(lch, 70, -0.00375),\n 400: shadeColor(lch, 60, -0.00375),\n 500: shadeColor(lch, 50),\n 600: shadeColor(lch, 40, 0.025),\n 700: shadeColor(lch, 30, 0.05),\n 800: shadeColor(lch, 20, 0.075),\n 900: shadeColor(lch, 10, 0.1),\n }\n : {\n 50: shadeColorDynamic(lch, 5 * lightBase, -0.00375),\n 100: shadeColorDynamic(lch, 4 * lightBase, -0.00375),\n 200: shadeColorDynamic(lch, 3 * lightBase, -0.00375),\n 300: shadeColorDynamic(lch, 2 * lightBase, -0.00375),\n 400: shadeColorDynamic(lch, lightBase, -0.00375),\n 500: shadeColorDynamic(lch, 0),\n 600: shadeColorDynamic(lch, 1.6 * darkBase, 0.025),\n 700: shadeColorDynamic(lch, 1.875 * 2 * darkBase, 0.05),\n 800: shadeColorDynamic(lch, 3 * 2 * darkBase, 0.075),\n 900: shadeColorDynamic(lch, 4 * 2 * darkBase, 0.1),\n };\n\n return Object.entries(output).reduce((acc, [key, value]) => {\n return {\n ...acc,\n [key]: convert(value, format ?? colorFormat),\n };\n }, {} as Swatch);\n}\n"],"mappings":"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","names":["factor","abs","chroma","chroma","sign","keys","alpha","colorDifference","contrast","brightnessDifference","opacity"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/modules/invariant.ts","../src/modules/constants.ts","../src/modules/css-colors.ts","../src/modules/validators.ts","../src/modules/utils.ts","../src/modules/hex-utils.ts","../src/converters/index.ts","../src/format-hex.ts","../src/converters/hex2rgb.ts","../src/converters/rgb2hsl.ts","../src/converters/hex2hsl.ts","../src/converters/rgb2oklab.ts","../src/converters/hex2oklab.ts","../src/converters/oklab2oklch.ts","../src/converters/rgb2oklch.ts","../src/converters/hex2oklch.ts","../src/modules/hue2rgb.ts","../src/converters/hsl2rgb.ts","../src/converters/rgb2hex.ts","../src/converters/hsl2hex.ts","../src/converters/hsl2oklab.ts","../src/converters/hsl2oklch.ts","../src/converters/oklab2rgb.ts","../src/converters/oklab2hex.ts","../src/converters/oklab2hsl.ts","../src/converters/oklch2oklab.ts","../src/converters/oklch2rgb.ts","../src/converters/oklch2hex.ts","../src/converters/oklch2hsl.ts","../src/extract-color-parts.ts","../src/parse-css.ts","../src/modules/parse-color.ts","../src/brightness-difference.ts","../src/chroma.ts","../src/color-difference.ts","../src/luminance.ts","../src/contrast.ts","../src/compare.ts","../src/format-css.ts","../src/modules/updater.ts","../src/darken.ts","../src/desaturate.ts","../src/rotate.ts","../src/invert.ts","../src/lighten.ts","../src/opacify.ts","../src/opacity.ts","../src/saturate.ts","../src/text-color.ts","../src/transparentize.ts","../src/colorizr.ts","../src/convert.ts","../src/is-valid-color.ts","../src/name.ts","../src/palette.ts","../src/p3.ts","../src/random.ts","../src/scheme.ts","../src/swatch.ts"],"sourcesContent":["import Colorizr from '~/colorizr';\n\nexport { default as brightnessDifference } from '~/brightness-difference';\nexport { default as chroma } from '~/chroma';\nexport { default as colorDifference } from '~/color-difference';\nexport { default as compare } from '~/compare';\nexport { default as contrast } from '~/contrast';\nexport { default as convert } from '~/convert';\nexport { default as darken } from '~/darken';\nexport { default as desaturate } from '~/desaturate';\nexport { default as extractColorParts } from '~/extract-color-parts';\nexport { default as formatCSS } from '~/format-css';\nexport { default as formatHex } from '~/format-hex';\nexport { default as isValidColor } from '~/is-valid-color';\nexport { default as lighten } from '~/lighten';\nexport { default as luminance } from '~/luminance';\nexport { default as name } from '~/name';\nexport { default as palette } from '~/palette';\nexport { default as opacify } from '~/opacify';\nexport { default as opacity } from '~/opacity';\nexport { getOkLCHMaxChroma, getP3Color } from '~/p3';\nexport { default as parseCSS } from '~/parse-css';\nexport { default as random } from '~/random';\nexport { default as rotate } from '~/rotate';\nexport { default as saturate } from '~/saturate';\nexport { default as scheme } from '~/scheme';\nexport { default as swatch } from '~/swatch';\nexport { default as textColor } from '~/text-color';\nexport { default as transparentize } from '~/transparentize';\n\nexport * from '~/converters';\nexport * from '~/types';\nexport * from '~/modules/hex-utils';\nexport { isHex, isHSL, isLAB, isLCH, isRGB } from '~/modules/validators';\n\n// eslint-disable-next-line unicorn/prefer-export-from\nexport default Colorizr;\n","export function invariant(condition: boolean, message: string): asserts condition {\n if (condition) {\n return;\n }\n\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n if (message === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n const error = !message\n ? new Error(\n 'Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.',\n )\n : new Error(message);\n\n error.name = 'colorizr';\n\n throw error;\n}\n","import { ColorKeysTuple, ColorModelKey } from '~/types';\n\nexport const COLOR_KEYS: Record<ColorModelKey, ColorKeysTuple> = {\n hsl: ['h', 's', 'l'],\n oklab: ['l', 'a', 'b'],\n oklch: ['l', 'c', 'h'],\n rgb: ['r', 'g', 'b'],\n};\nexport const COLOR_MODELS: ColorModelKey[] = ['hsl', 'oklab', 'oklch', 'rgb'];\nexport const DEG2RAD = Math.PI / 180;\nexport const LAB_TO_LMS = {\n l: [0.3963377773761749, 0.2158037573099136],\n m: [-0.1055613458156586, -0.0638541728258133],\n s: [-0.0894841775298119, -1.2914855480194092],\n};\nexport const LRGB_TO_LMS = {\n l: [0.4122214708, 0.5363325363, 0.0514459929],\n m: [0.2119034982, 0.6806995451, 0.1073969566],\n s: [0.0883024619, 0.2817188376, 0.6299787005],\n};\nexport const LSM_TO_LAB = {\n l: [0.2104542553, 0.793617785, 0.0040720468],\n a: [1.9779984951, 2.428592205, 0.4505937099],\n b: [0.0259040371, 0.7827717662, 0.808675766],\n};\nexport const LSM_TO_RGB = {\n r: [4.0767416360759583, -3.3077115392580629, 0.2309699031821043],\n g: [-1.2684379732850315, 2.6097573492876882, -0.341319376002657],\n b: [-0.0041960761386756, -0.7034186179359362, 1.7076146940746117],\n};\nexport const SRGB_TO_P3 = [\n [0.8224270476, 0.1775729524, 0],\n [0.0331008087, 0.9668991913, 0],\n [0.0170720188, 0.0723477973, 0.9105801839],\n];\nexport const PRECISION = 5;\nexport const RAD2DEG = 180 / Math.PI;\n\nexport const MESSAGES = {\n alpha: 'amount must be a number between 0 and 1',\n hueRange: 'hue must be a number between 0 and 360',\n input: 'input is required',\n inputHex: 'input is required and must be a hex',\n inputNumber: 'input is required and must be a number',\n inputString: 'input is required and must be a string',\n invalid: 'invalid input',\n invalidCSS: 'invalid CSS string',\n left: 'left is required and must be a string',\n lightnessRange: 'lightness must be a number between 0 and 1',\n options: 'invalid options',\n right: 'right is required and must be a string',\n threshold: 'threshold must be a number between 0 and 255',\n} as const;\n","/**\n * CSS named colors\n */\n\nexport type CSSColor = keyof typeof cssColors;\n\nexport const cssColors = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n grey: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n};\n","import { COLOR_KEYS } from '~/modules/constants';\nimport { cssColors } from '~/modules/css-colors';\n\nimport { ColorModel, HEX, HSL, LAB, LCH, PlainObject, RGB } from '~/types';\n\nexport function hasValidMatches(input: unknown): input is string[] {\n return Array.isArray(input) && input.length === 6;\n}\n\n/**\n * Check if the input is a CSS named color\n */\nexport function isNamedColor(input: unknown): input is keyof typeof cssColors {\n return isString(input) && Object.keys(cssColors).includes(input.toLowerCase());\n}\n\n/**\n * Check if the input is a number and not NaN\n */\nexport function isNumber(input: unknown): input is number {\n return typeof input === 'number' && !Number.isNaN(input);\n}\n\n/**\n * Check if the input is an object\n */\nexport function isPlainObject(input: unknown): input is PlainObject {\n if (!input) {\n return false;\n }\n\n const { toString } = Object.prototype;\n const prototype = Object.getPrototypeOf(input);\n\n return (\n toString.call(input) === '[object Object]' &&\n (prototype === null || prototype === Object.getPrototypeOf({}))\n );\n}\n\n/**\n * Check if the input is a string\n */\nexport function isString(input: unknown, validate = true): input is string {\n const isValid = typeof input === 'string';\n\n if (validate) {\n return isValid && !!input.trim().length;\n }\n\n return isValid;\n}\n\nexport function isValidColorModel<T extends ColorModel>(input: T): input is T {\n return isHSL(input) || isRGB(input) || isLAB(input) || isLCH(input);\n}\n\nexport function isHex(input: any): input is HEX {\n if (!isString(input)) {\n return false;\n }\n\n return /^#([\\da-f]{3,4}|[\\da-f]{6,8})$/i.test(input);\n}\n\n/**\n * Check if an object contains HSL values\n * The input must be an object with keys 'h', 's', and 'l'\n * with values between 0 and 360 for hue or 0 and 100 for the others.\n */\nexport function isHSL(input: unknown): input is HSL {\n if (!isPlainObject(input)) {\n return false;\n }\n\n const entries = Object.entries(input);\n\n return (\n !!entries.length &&\n entries.every(([key, value]) => {\n if (key === 'h') {\n return value >= 0 && value <= 360;\n }\n\n if (key === 'alpha') {\n return value >= 0 && value <= 1;\n }\n\n return COLOR_KEYS.hsl.includes(key) && value >= 0 && value <= 100;\n })\n );\n}\n\n/**\n * Check if an object contains LAB values\n * The input must be an object with keys 'l', 'a', and 'b' with values between -1 and 1.\n */\nexport function isLAB(input: unknown): input is LAB {\n if (!isPlainObject(input)) {\n return false;\n }\n\n const entries = Object.entries(input);\n\n return (\n !!entries.length &&\n entries.every(([key, value]) => {\n if (key === 'l') {\n return value >= 0 && value <= 100;\n }\n\n if (key === 'alpha') {\n return value >= 0 && value <= 1;\n }\n\n return COLOR_KEYS.oklab.includes(key) && value >= -1 && value <= 1;\n })\n );\n}\n\n/**\n * Check if an object contains LAB values\n * The input must be an object with keys 'l', 'c', and 'h' with values between 0 and 360.\n */\nexport function isLCH(input: unknown): input is LCH {\n if (!isPlainObject(input)) {\n return false;\n }\n\n const entries = Object.entries(input);\n\n return (\n !!entries.length &&\n entries.every(([key, value]) => {\n if (key === 'l') {\n return value >= 0 && value <= 100;\n }\n\n if (key === 'alpha') {\n return value >= 0 && value <= 1;\n }\n\n return COLOR_KEYS.oklch.includes(key) && value >= 0 && value <= (key === 'h' ? 360 : 1);\n })\n );\n}\n\n/**\n * Check if an object contains RGB values.\n * The input must be an object with keys 'r', 'g', and 'b' with values between 0 and 255.\n */\nexport function isRGB(input: unknown): input is RGB {\n if (!isPlainObject(input)) {\n return false;\n }\n\n const entries = Object.entries(input);\n\n return (\n !!entries.length &&\n entries.every(([key, value]) => {\n if (key === 'alpha') {\n return value >= 0 && value <= 1;\n }\n\n return COLOR_KEYS.rgb.includes(key) && value >= 0 && value <= 255;\n })\n );\n}\n","import { COLOR_KEYS, COLOR_MODELS, MESSAGES, PRECISION } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport {\n isHSL,\n isLAB,\n isLCH,\n isNumber,\n isPlainObject,\n isRGB,\n isValidColorModel,\n} from '~/modules/validators';\n\nimport {\n Alpha,\n ColorModel,\n ColorModelKey,\n ColorModelKeys,\n ConverterParameters,\n LAB,\n LCH,\n PlainObject,\n} from '~/types';\n\nexport function addAlpha<T extends ColorModel>(input: any, alpha?: Alpha): T {\n invariant(isValidColorModel(input), MESSAGES.invalid);\n\n let value = alpha;\n\n if (!value) {\n return input;\n }\n\n /* c8 ignore next 3 */\n if (value > 1) {\n value /= 100;\n }\n\n if (value === 1) {\n return input;\n }\n\n return { ...input, alpha: value };\n}\n\n/**\n * Clamp a value between a min and max\n * @param value\n * @param [min=0] - The minimum value\n * @param [max=100] - The maximum value\n */\nexport function clamp(value: number, min = 0, max = 100) {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Constrain the degrees between 0 and 360\n */\nexport function constrainDegrees(input: number, amount: number): number {\n invariant(isNumber(input), MESSAGES.inputNumber);\n\n let value = input + amount;\n\n if (value > 360) {\n value %= 360;\n }\n\n if (value < 0) {\n value += 360;\n }\n\n return Math.abs(value);\n}\n\n/**\n * Limit values per type.\n */\nexport function limit<TModel extends Extract<ColorModelKey, 'hsl' | 'rgb'>>(\n input: number,\n model: TModel,\n key: ColorModelKeys<TModel>,\n): number {\n invariant(isNumber(input), 'Input is not a number');\n invariant(COLOR_MODELS.includes(model), `Invalid model${model ? `: ${model}` : ''}`);\n invariant(COLOR_KEYS[model].includes(key), `Invalid key${key ? `: ${key}` : ''}`);\n\n switch (model) {\n case 'hsl': {\n invariant(COLOR_KEYS.hsl.includes(key), 'Invalid key');\n\n if (['s', 'l'].includes(key)) {\n return clamp(input);\n }\n\n return clamp(input, 0, 360);\n }\n case 'rgb': {\n invariant(COLOR_KEYS.rgb.includes(key), 'Invalid key');\n\n return clamp(input, 0, 255);\n }\n /* c8 ignore next 3 */\n default: {\n throw new Error('Invalid inputs');\n }\n }\n}\n\n/**\n * Parse the input parameters\n */\nexport function parseInput<T extends ColorModel>(\n input: ConverterParameters<T>,\n model: ColorModelKey,\n): T {\n const keys = COLOR_KEYS[model];\n const validator = {\n hsl: isHSL,\n oklab: isLAB,\n oklch: isLCH,\n rgb: isRGB,\n };\n\n invariant(isPlainObject(input) || Array.isArray(input), MESSAGES.invalid);\n\n const value = Array.isArray(input)\n ? ({ [keys[0]]: input[0], [keys[1]]: input[1], [keys[2]]: input[2] } as unknown as T)\n : input;\n\n invariant(validator[model](value), `invalid ${model} color`);\n\n return value;\n}\n\n/**\n * Creates an object composed of the picked source properties.\n */\nexport function pick(input: PlainObject, options: string[]): PlainObject {\n if (!Array.isArray(options)) {\n throw new TypeError('options must be an array');\n }\n\n return options\n .filter(d => typeof input[d] !== 'undefined')\n .reduce((acc: PlainObject, d) => {\n acc[d] = input[d];\n\n return acc;\n }, {});\n}\n\n/**\n * Restrict the values to a certain number of digits.\n */\nexport function restrictValues<T extends LAB | LCH>(\n input: T,\n precision: number = PRECISION,\n forcePrecision = true,\n): T {\n const output = new Map(Object.entries(input));\n\n for (const [key, value] of output.entries()) {\n output.set(key, round(value, precision, forcePrecision));\n }\n\n return Object.fromEntries(output) as T;\n}\n\n/**\n * Round decimal numbers.\n */\nexport function round(input: number, precision = 2, forcePrecision = true): number {\n if (!isNumber(input) || input === 0) {\n return 0;\n }\n\n if (forcePrecision) {\n const factor = 10 ** precision;\n\n return Math.round(input * factor) / factor;\n }\n\n const absInput = Math.abs(input);\n\n let digits = Math.abs(Math.ceil(Math.log(absInput) / Math.LN10));\n\n if (digits === 0) {\n digits = 2;\n } else if (digits > precision) {\n digits = precision;\n }\n\n let exponent = precision - (digits < 0 ? 0 : digits);\n\n if (exponent <= 1 && precision > 1) {\n exponent = 2;\n } else if (exponent > precision || exponent === 0) {\n exponent = precision;\n }\n\n const factor = 10 ** exponent;\n\n return Math.round(input * factor) / factor;\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { round } from '~/modules/utils';\nimport { isHex, isNumber } from '~/modules/validators';\n\nimport { Alpha } from '~/types';\n\n/**\n * Add an alpha value to a hex string\n */\nexport function addAlphaToHex(input: string, alpha: Alpha): string {\n invariant(isHex(input), MESSAGES.inputHex);\n invariant(isNumber(alpha), MESSAGES.inputNumber);\n\n if (alpha >= 1) {\n return removeAlphaFromHex(input);\n }\n\n return `${removeAlphaFromHex(input)}${convertAlphaToHex(alpha)}`;\n}\n\n/**\n * Convert an alpha value to a hex value.\n */\nexport function convertAlphaToHex(input: Alpha): string {\n invariant(isNumber(input), MESSAGES.inputNumber);\n\n let alpha = input;\n\n if (input > 1) {\n alpha /= 100;\n }\n\n return Math.round(alpha * 255)\n .toString(16)\n .padStart(2, '0');\n}\n\n/**\n * Extract the alpha value from a hex string\n */\nexport function extractAlphaFromHex(input: string): number {\n invariant(isHex(input), MESSAGES.inputString);\n\n const alpha = input.substring(7, 9);\n\n if (!alpha) {\n return 1;\n }\n\n return round(parseInt(alpha, 16) / 255);\n}\n\nexport function hexadecimalToNumber(input: string) {\n return round(parseInt(input, 16));\n}\n\n/**\n * Remove the alpha value from a hex string\n */\nexport function removeAlphaFromHex(input: string) {\n invariant(isHex(input), MESSAGES.inputHex);\n\n if (input.length === 5) {\n return input.substring(0, 4);\n }\n\n return input.substring(0, 7);\n}\n","export { default as hex2hsl } from '~/converters/hex2hsl';\nexport { default as hex2oklab } from '~/converters/hex2oklab';\nexport { default as hex2oklch } from '~/converters/hex2oklch';\nexport { default as hex2rgb } from '~/converters/hex2rgb';\n\nexport { default as hsl2hex } from '~/converters/hsl2hex';\nexport { default as hsl2oklab } from '~/converters/hsl2oklab';\nexport { default as hsl2oklch } from '~/converters/hsl2oklch';\nexport { default as hsl2rgb } from '~/converters/hsl2rgb';\n\nexport { default as oklab2hex } from '~/converters/oklab2hex';\nexport { default as oklab2hsl } from '~/converters/oklab2hsl';\nexport { default as oklab2oklch } from '~/converters/oklab2oklch';\nexport { default as oklab2rgb } from '~/converters/oklab2rgb';\n\nexport { default as oklch2hex } from '~/converters/oklch2hex';\nexport { default as oklch2hsl } from '~/converters/oklch2hsl';\nexport { default as oklch2oklab } from '~/converters/oklch2oklab';\nexport { default as oklch2rgb } from '~/converters/oklch2rgb';\n\nexport { default as rgb2hex } from '~/converters/rgb2hex';\nexport { default as rgb2hsl } from '~/converters/rgb2hsl';\nexport { default as rgb2oklab } from '~/converters/rgb2oklab';\nexport { default as rgb2oklch } from '~/converters/rgb2oklch';\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex } from '~/modules/validators';\n\nimport { HEX } from '~/types';\n\nexport default function formatHex(input: string): HEX {\n invariant(isHex(input), MESSAGES.inputHex);\n\n let color = input.replace('#', '');\n\n if (color.length === 3 || color.length === 4) {\n const values = [...color];\n\n color = '';\n\n values.forEach(d => {\n color += `${d}${d}`;\n });\n }\n\n const hex = `#${color}`;\n\n invariant(isHex(hex), 'invalid hex');\n\n return hex;\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex } from '~/modules/validators';\n\nimport formatHex from '~/format-hex';\nimport { RGB } from '~/types';\n\n/** Convert HEX to RGB */\nexport default function hex2rgb(input: string): RGB {\n invariant(isHex(input), MESSAGES.inputHex);\n\n const hex = formatHex(input).slice(1);\n\n return {\n r: parseInt(hex.charAt(0) + hex.charAt(1), 16),\n g: parseInt(hex.charAt(2) + hex.charAt(3), 16),\n b: parseInt(hex.charAt(4) + hex.charAt(5), 16),\n };\n}\n","import { limit, parseInput } from '~/modules/utils';\n\nimport { ConverterParameters, HSL, RGB } from '~/types';\n\n/** Convert RGB to HSL */\nexport default function rgb2hsl(input: ConverterParameters<RGB>): HSL {\n const value = parseInput(input, 'rgb');\n\n const rLimit = limit(value.r, 'rgb', 'r') / 255;\n const gLimit = limit(value.g, 'rgb', 'g') / 255;\n const bLimit = limit(value.b, 'rgb', 'b') / 255;\n\n const min = Math.min(rLimit, gLimit, bLimit);\n const max = Math.max(rLimit, gLimit, bLimit);\n const delta = max - min;\n\n let h = 0;\n let s;\n const l = (max + min) / 2;\n let rate;\n\n switch (max) {\n case rLimit:\n rate = !delta ? 0 : (gLimit - bLimit) / delta;\n h = 60 * rate;\n break;\n case gLimit:\n rate = (bLimit - rLimit) / delta;\n h = 60 * rate + 120;\n break;\n case bLimit:\n rate = (rLimit - gLimit) / delta;\n h = 60 * rate + 240;\n break;\n /* c8 ignore next 2 */\n default:\n break;\n }\n\n if (h < 0) {\n h = 360 + h;\n }\n\n if (min === max) {\n s = 0;\n } else {\n s = l < 0.5 ? delta / (2 * l) : delta / (2 - 2 * l);\n }\n\n return {\n h: Math.abs(+(h % 360).toFixed(2)),\n s: +(s * 100).toFixed(2),\n l: +(l * 100).toFixed(2),\n };\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex } from '~/modules/validators';\n\nimport hex2rgb from '~/converters/hex2rgb';\nimport rgb2hsl from '~/converters/rgb2hsl';\nimport { HSL } from '~/types';\n\n/** Convert HEX to HSL */\nexport default function hex2hsl(input: string): HSL {\n invariant(isHex(input), MESSAGES.inputHex);\n\n return rgb2hsl(hex2rgb(input));\n}\n","import { LRGB_TO_LMS, LSM_TO_LAB, PRECISION } from '~/modules/constants';\nimport { parseInput, restrictValues } from '~/modules/utils';\n\nimport { ConverterParameters, LAB, RGB } from '~/types';\n\nconst { cbrt, sign } = Math;\n\nfunction rgb2lrgb(input: number) {\n const abs = Math.abs(input);\n\n if (abs < 0.04045) {\n return input / 12.92;\n }\n\n return (sign(input) || 1) * ((abs + 0.055) / 1.055) ** 2.4;\n}\n\n/** Convert RGB to oklab */\nexport default function rgb2oklab(input: ConverterParameters<RGB>, precision = PRECISION): LAB {\n const value = parseInput(input, 'rgb');\n\n const [lr, lg, lb] = [rgb2lrgb(value.r / 255), rgb2lrgb(value.g / 255), rgb2lrgb(value.b / 255)];\n const l = cbrt(LRGB_TO_LMS.l[0] * lr + LRGB_TO_LMS.l[1] * lg + LRGB_TO_LMS.l[2] * lb);\n const m = cbrt(LRGB_TO_LMS.m[0] * lr + LRGB_TO_LMS.m[1] * lg + LRGB_TO_LMS.m[2] * lb);\n const s = cbrt(LRGB_TO_LMS.s[0] * lr + LRGB_TO_LMS.s[1] * lg + LRGB_TO_LMS.s[2] * lb);\n\n const lab = {\n l: LSM_TO_LAB.l[0] * l + LSM_TO_LAB.l[1] * m - LSM_TO_LAB.l[2] * s,\n a: LSM_TO_LAB.a[0] * l - LSM_TO_LAB.a[1] * m + LSM_TO_LAB.a[2] * s,\n b: LSM_TO_LAB.b[0] * l + LSM_TO_LAB.b[1] * m - LSM_TO_LAB.b[2] * s,\n };\n\n return restrictValues(lab, precision);\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex } from '~/modules/validators';\n\nimport hex2rgb from '~/converters/hex2rgb';\nimport rgb2oklab from '~/converters/rgb2oklab';\nimport { LAB } from '~/types';\n\n/** Convert HEX to oklab */\nexport default function hex2oklab(input: string, precision?: number): LAB {\n invariant(isHex(input), MESSAGES.inputHex);\n\n return rgb2oklab(hex2rgb(input), precision);\n}\n","import { RAD2DEG } from '~/modules/constants';\nimport { parseInput, restrictValues, round } from '~/modules/utils';\n\nimport { ConverterParameters, LAB, LCH } from '~/types';\n\nconst { atan2, sqrt } = Math;\n\n/** Convert oklab to oklch */\nexport default function oklab2oklch(input: ConverterParameters<LAB>, precision?: number): LCH {\n const { l, a, b } = restrictValues(parseInput(input, 'oklab'));\n\n const c = sqrt(a ** 2 + b ** 2);\n let h = (atan2(b, a) * RAD2DEG + 360) % 360;\n\n if (round(c * 10000) === 0) {\n h = 0;\n }\n\n return restrictValues({ l, c, h }, precision);\n}\n","import { parseInput } from '~/modules/utils';\n\nimport oklab2oklch from '~/converters/oklab2oklch';\nimport rgb2oklab from '~/converters/rgb2oklab';\nimport { ConverterParameters, LCH, RGB } from '~/types';\n\n/** Convert RGB to oklch */\nexport default function rgb2oklch(input: ConverterParameters<RGB>, precision?: number): LCH {\n const value = parseInput(input, 'rgb');\n\n return oklab2oklch(rgb2oklab(value, precision), precision);\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex } from '~/modules/validators';\n\nimport hex2rgb from '~/converters/hex2rgb';\nimport rgb2oklch from '~/converters/rgb2oklch';\nimport { LCH } from '~/types';\n\n/** Convert HEX to oklch */\nexport default function hex2oklch(input: string, precision?: number): LCH {\n invariant(isHex(input), MESSAGES.inputHex);\n\n return rgb2oklch(hex2rgb(input), precision);\n}\n","import { invariant } from '~/modules/invariant';\nimport { round } from '~/modules/utils';\nimport { isNumber } from '~/modules/validators';\n\n/**\n * Convert hue to RGB using chroma and median point\n */\nexport default function hue2rgb(point: number, chroma: number, h: number): number {\n invariant(isNumber(point) && isNumber(chroma) && isNumber(h), 'point, chroma and h are required');\n let hue = h;\n\n if (hue < 0) {\n hue += 1;\n }\n\n if (hue > 1) {\n hue -= 1;\n }\n\n if (hue < 1 / 6) {\n return round(point + (chroma - point) * 6 * hue, 4);\n }\n\n if (hue < 1 / 2) {\n return round(chroma, 4);\n }\n\n if (hue < 2 / 3) {\n return round(point + (chroma - point) * (2 / 3 - hue) * 6, 4);\n }\n\n return round(point, 4);\n}\n","import hue2rgb from '~/modules/hue2rgb';\nimport { parseInput, round } from '~/modules/utils';\n\nimport { ConverterParameters, HSL, RGB } from '~/types';\n\n/** Convert HSL to RGB */\nexport default function hsl2rgb(input: ConverterParameters<HSL>): RGB {\n const value = parseInput(input, 'hsl');\n\n const h = round(value.h) / 360;\n const s = round(value.s) / 100;\n const l = round(value.l) / 100;\n\n let r;\n let g;\n let b;\n\n let point;\n let chroma;\n\n if (s === 0) {\n r = l;\n g = l;\n b = l;\n } else {\n chroma = l < 0.5 ? l * (1 + s) : l + s - l * s;\n point = 2 * l - chroma;\n\n r = hue2rgb(point, chroma, h + 1 / 3);\n g = hue2rgb(point, chroma, h);\n b = hue2rgb(point, chroma, h - 1 / 3);\n }\n\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255),\n };\n}\n","import { parseInput } from '~/modules/utils';\n\nimport { ConverterParameters, HEX, RGB } from '~/types';\n\n/** Convert RGB to HEX */\nexport default function rgb2hex(input: ConverterParameters<RGB>): HEX {\n const rgb = parseInput(input, 'rgb');\n\n return `#${Object.values(rgb)\n .map(d => `0${Math.floor(d).toString(16)}`.slice(-2))\n .join('')}`;\n}\n","import { parseInput } from '~/modules/utils';\n\nimport hsl2rgb from '~/converters/hsl2rgb';\nimport rgb2hex from '~/converters/rgb2hex';\nimport { ConverterParameters, HEX, HSL } from '~/types';\n\n/** Convert HSL to HEX */\nexport default function hsl2hex(input: ConverterParameters<HSL>): HEX {\n const value = parseInput(input, 'hsl');\n\n return rgb2hex(hsl2rgb(value));\n}\n","import { parseInput } from '~/modules/utils';\n\nimport hsl2rgb from '~/converters/hsl2rgb';\nimport rgb2oklab from '~/converters/rgb2oklab';\nimport { ConverterParameters, HSL, LAB } from '~/types';\n\n/** Convert HSL to oklab */\nexport default function hsl2oklab(input: ConverterParameters<HSL>, precision?: number): LAB {\n const value = parseInput(input, 'hsl');\n\n return rgb2oklab(hsl2rgb(value), precision);\n}\n","import { parseInput } from '~/modules/utils';\n\nimport hsl2rgb from '~/converters/hsl2rgb';\nimport rgb2oklch from '~/converters/rgb2oklch';\nimport { ConverterParameters, HSL, LCH } from '~/types';\n\n/** Convert HSL to oklch */\nexport default function hsl2oklch(input: ConverterParameters<HSL>, precision?: number): LCH {\n const value = parseInput(input, 'hsl');\n\n return rgb2oklch(hsl2rgb(value), precision);\n}\n","import { LAB_TO_LMS, LSM_TO_RGB } from '~/modules/constants';\nimport { clamp, parseInput, round } from '~/modules/utils';\n\nimport { ConverterParameters, LAB, RGB } from '~/types';\n\nconst { abs } = Math;\n\nfunction lrgb2rgb(input: number) {\n const absoluteNumber = abs(input);\n const sign = input < 0 ? -1 : 1;\n\n if (absoluteNumber > 0.0031308) {\n return sign * (absoluteNumber ** (1 / 2.4) * 1.055 - 0.055);\n }\n\n return input * 12.92;\n}\n\n/** Convert oklab to RGB */\nexport default function oklab2rgb(input: ConverterParameters<LAB>, precision = 0): RGB {\n const { l: L, a: A, b: B } = parseInput(input, 'oklab');\n\n const l = (L + LAB_TO_LMS.l[0] * A + LAB_TO_LMS.l[1] * B) ** 3;\n const m = (L + LAB_TO_LMS.m[0] * A + LAB_TO_LMS.m[1] * B) ** 3;\n const s = (L + LAB_TO_LMS.s[0] * A + LAB_TO_LMS.s[1] * B) ** 3;\n\n const r = 255 * lrgb2rgb(LSM_TO_RGB.r[0] * l + LSM_TO_RGB.r[1] * m + LSM_TO_RGB.r[2] * s);\n const g = 255 * lrgb2rgb(LSM_TO_RGB.g[0] * l + LSM_TO_RGB.g[1] * m + LSM_TO_RGB.g[2] * s);\n const b = 255 * lrgb2rgb(LSM_TO_RGB.b[0] * l + LSM_TO_RGB.b[1] * m + LSM_TO_RGB.b[2] * s);\n\n return {\n r: clamp(round(r, precision), 0, 255),\n g: clamp(round(g, precision), 0, 255),\n b: clamp(round(b, precision), 0, 255),\n };\n}\n","import { parseInput } from '~/modules/utils';\n\nimport oklab2rgb from '~/converters/oklab2rgb';\nimport rgb2hex from '~/converters/rgb2hex';\nimport { ConverterParameters, HEX, LAB } from '~/types';\n\n/** Convert oklab to HEX */\nexport default function oklab2hex(input: ConverterParameters<LAB>): HEX {\n const value = parseInput(input, 'oklab');\n\n return rgb2hex(oklab2rgb(value));\n}\n","import { parseInput } from '~/modules/utils';\n\nimport oklab2rgb from '~/converters/oklab2rgb';\nimport rgb2hsl from '~/converters/rgb2hsl';\nimport { ConverterParameters, HSL, LAB } from '~/types';\n\n/** Convert oklab to HSL */\nexport default function oklab2hsl(input: ConverterParameters<LAB>): HSL {\n const value = parseInput(input, 'oklab');\n\n return rgb2hsl(oklab2rgb(value));\n}\n","/* eslint-disable prefer-const */\nimport { DEG2RAD } from '~/modules/constants';\nimport { parseInput, restrictValues } from '~/modules/utils';\n\nimport { ConverterParameters, LAB, LCH } from '~/types';\n\nconst { sin, cos } = Math;\n\n/** Convert oklch to oklab */\nexport default function oklch2oklab(input: ConverterParameters<LCH>, precision?: number): LAB {\n /*\n Convert from a qualitative parameter h and a quantitative parameter l to a 24-bit pixel.\n These formulas were invented by David Dalrymple to obtain maximum contrast without going\n out of gamut if the parameters are in the range 0-1.\n\n A saturation multiplier was added by Gregor Aisch\n */\n let { l, c, h } = parseInput(input, 'oklch');\n\n /* c8 ignore next 3 */\n if (Number.isNaN(h) || h < 0) {\n h = 0;\n }\n\n return restrictValues({ l, a: c * cos(h * DEG2RAD), b: c * sin(h * DEG2RAD) }, precision);\n}\n","import { parseInput } from '~/modules/utils';\n\nimport oklab2rgb from '~/converters/oklab2rgb';\nimport oklch2oklab from '~/converters/oklch2oklab';\nimport { ConverterParameters, LCH, RGB } from '~/types';\n\n/** Convert oklch to RGB */\nexport default function oklch2rgb(input: ConverterParameters<LCH>, precision = 0): RGB {\n const value = parseInput(input, 'oklch');\n\n return oklab2rgb(oklch2oklab(value), precision);\n}\n","import { parseInput } from '~/modules/utils';\n\nimport oklch2rgb from '~/converters/oklch2rgb';\nimport rgb2hex from '~/converters/rgb2hex';\nimport { ConverterParameters, HEX, LCH } from '~/types';\n\n/** Convert oklch to HEX */\nexport default function oklch2hex(input: ConverterParameters<LCH>): HEX {\n const value = parseInput(input, 'oklch');\n\n return rgb2hex(oklch2rgb(value));\n}\n","import { parseInput } from '~/modules/utils';\n\nimport oklch2rgb from '~/converters/oklch2rgb';\nimport rgb2hsl from '~/converters/rgb2hsl';\nimport { ConverterParameters, HSL, LCH } from '~/types';\n\n/** Convert oklch to HSL */\nexport default function oklch2hsl(input: ConverterParameters<LCH>): HSL {\n const value = parseInput(input, 'oklch');\n\n return rgb2hsl(oklch2rgb(value));\n}\n","import { COLOR_KEYS, MESSAGES } from '~/modules/constants';\nimport { extractAlphaFromHex } from '~/modules/hex-utils';\nimport { invariant } from '~/modules/invariant';\nimport { hasValidMatches, isHex, isString } from '~/modules/validators';\n\nimport hex2rgb from '~/converters/hex2rgb';\nimport { ColorModelKey, PlainObject } from '~/types';\n\nexport type ExtractColorPartsReturn = {\n alpha?: number;\n model: ColorModelKey;\n} & PlainObject<number>;\n\n/**\n * Extract the color parts from a CSS color string.\n * Hex colors are not supported.\n */\nexport default function extractColorParts(input: string) {\n invariant(isString(input), MESSAGES.inputString);\n\n if (isHex(input)) {\n const keys = COLOR_KEYS.rgb;\n const { r, g, b } = hex2rgb(input);\n const alpha = extractAlphaFromHex(input);\n\n return {\n model: 'rgb' as ColorModelKey,\n [keys[0]]: r,\n [keys[1]]: g,\n [keys[2]]: b,\n alpha: alpha < 1 ? alpha : undefined,\n } as ExtractColorPartsReturn;\n }\n\n const colorRegex =\n /(?:(rgb|hsl|oklab|oklch)a?\\s*\\(\\s*([\\d%.-]+)\\s*[ ,/]\\s*([\\d%.-]+)\\s*[ ,/]\\s*([\\d%.-]+)(?:\\s*[ ,/]\\s*([\\d%.-]+))?\\s*\\))/i;\n\n const matches = colorRegex.exec(input);\n\n invariant(hasValidMatches(matches), MESSAGES.invalidCSS);\n\n const model = matches[1] as ColorModelKey;\n const keys = COLOR_KEYS[model];\n let alpha = matches[5] ? parseFloat(matches[5]) : 1;\n\n if (alpha > 1) {\n alpha /= 100;\n }\n\n return {\n model,\n [keys[0]]: parseFloat(matches[2]),\n [keys[1]]: parseFloat(matches[3]),\n [keys[2]]: parseFloat(matches[4]),\n alpha: alpha < 1 ? alpha : undefined,\n } as ExtractColorPartsReturn;\n}\n","import { MESSAGES, PRECISION } from '~/modules/constants';\nimport { CSSColor, cssColors } from '~/modules/css-colors';\nimport { convertAlphaToHex, extractAlphaFromHex, removeAlphaFromHex } from '~/modules/hex-utils';\nimport { invariant } from '~/modules/invariant';\nimport { addAlpha, round } from '~/modules/utils';\nimport { isHex, isNamedColor, isString } from '~/modules/validators';\n\nimport * as converters from '~/converters';\nimport extractColorParts from '~/extract-color-parts';\nimport { ColorTuple, ColorType, HEX, HSL, LAB, LCH, RGB } from '~/types';\n\nexport type ParseCSSReturn<T extends ColorType> = T extends 'hex'\n ? HEX\n : T extends 'hsl'\n ? HSL\n : T extends 'oklab'\n ? LAB\n : T extends 'oklch'\n ? LCH\n : T extends 'rgb'\n ? RGB\n : never;\n\n/**\n * Parse CSS color\n */\nexport default function parseCSS<T extends ColorType>(\n input: string,\n format?: T,\n): ParseCSSReturn<T> {\n invariant(isString(input), MESSAGES.inputString);\n\n let result: any;\n\n const value = isNamedColor(input) ? cssColors[input.toLowerCase() as CSSColor] : input;\n\n const output = format ?? (isHex(value) ? 'hex' : extractColorParts(value).model);\n\n const colorParams = (params: Record<string, number>) => Object.values(params) as ColorTuple;\n\n if (isHex(value)) {\n const alpha = extractAlphaFromHex(value);\n\n switch (output) {\n case 'hsl': {\n result = addAlpha(converters.hex2hsl(value), alpha);\n break;\n }\n case 'oklab': {\n result = addAlpha(converters.hex2oklab(value), alpha);\n break;\n }\n case 'oklch': {\n result = addAlpha(converters.hex2oklch(value), alpha);\n break;\n }\n case 'rgb': {\n result = addAlpha(converters.hex2rgb(value), alpha);\n break;\n }\n default: {\n result = `${removeAlphaFromHex(value)}${alpha !== 1 ? convertAlphaToHex(alpha) : ''}`;\n break;\n }\n }\n\n return result as ParseCSSReturn<T>;\n }\n\n switch (output) {\n case 'hsl': {\n const { alpha, model, ...color } = extractColorParts(value);\n\n if (['oklab', 'oklch'].includes(model) && color.l > 1) {\n color.l = round(color.l / 100, PRECISION);\n }\n\n result = addAlpha(\n model === 'hsl' ? color : converters[`${model}2hsl`](colorParams(color)),\n alpha,\n );\n\n break;\n }\n case 'oklab': {\n const { alpha, model, ...color } = extractColorParts(value);\n\n if (['oklab', 'oklch'].includes(model) && color.l > 1) {\n color.l = round(color.l / 100, PRECISION);\n }\n\n result = addAlpha(\n model === 'oklab' ? color : converters[`${model}2oklab`](colorParams(color)),\n alpha,\n );\n\n break;\n }\n case 'oklch': {\n const { alpha, model, ...color } = extractColorParts(value);\n\n if (['oklab', 'oklch'].includes(model) && color.l > 1) {\n color.l = round(color.l / 100, PRECISION);\n }\n\n result = addAlpha(\n model === 'oklch' ? color : converters[`${model}2oklch`](colorParams(color)),\n alpha,\n );\n break;\n }\n case 'rgb': {\n const { alpha, model, ...color } = extractColorParts(value);\n\n if (['oklab', 'oklch'].includes(model) && color.l > 1) {\n color.l /= 100;\n }\n\n result = addAlpha(\n model === 'rgb' ? color : converters[`${model}2rgb`](colorParams(color)),\n alpha,\n );\n break;\n }\n\n case 'hex':\n default: {\n const { alpha, model, ...color } = extractColorParts(value);\n let alphaPrefix = '';\n\n if (['oklab', 'oklch'].includes(model) && color.l > 1) {\n color.l = round(color.l / 100, PRECISION);\n }\n\n if (alpha) {\n alphaPrefix = convertAlphaToHex(alpha);\n }\n\n result = `${converters[`${model}2hex`](colorParams(color))}${alphaPrefix}`;\n\n break;\n }\n }\n\n return result as ParseCSSReturn<T>;\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { addAlphaToHex } from '~/modules/hex-utils';\nimport { invariant } from '~/modules/invariant';\nimport { addAlpha, limit } from '~/modules/utils';\nimport { isHex, isHSL, isLAB, isLCH, isPlainObject, isRGB, isString } from '~/modules/validators';\n\nimport * as converters from '~/converters';\nimport extractColorParts from '~/extract-color-parts';\nimport parseCSS from '~/parse-css';\nimport { Colors, HSL, LAB, LCH, PlainObject, RGB } from '~/types';\n\nexport default function parseColor(color: string | HSL | LAB | LCH | RGB): Colors {\n invariant(!!color, MESSAGES.input);\n\n const output: PlainObject = {};\n\n if (isString(color)) {\n const { alpha = 1 } = extractColorParts(color);\n const type = isHex(color) ? 'hex' : extractColorParts(color).model;\n\n output.hex = addAlphaToHex(parseCSS(color, 'hex'), alpha);\n output.hsl = addAlpha(parseCSS(color, 'hsl'), alpha);\n output.oklab = addAlpha(parseCSS(color, 'oklab'), alpha);\n output.oklch = addAlpha(parseCSS(color, 'oklch'), alpha);\n output.rgb = addAlpha(parseCSS(color, 'rgb'), alpha);\n\n output.alpha = alpha;\n output.type = type;\n } else if (isPlainObject(color)) {\n const { alpha = 1 } = color;\n\n if (isHSL(color)) {\n output.hsl = {\n h: limit(color.h, 'hsl', 'h'),\n s: limit(color.s, 'hsl', 's'),\n l: limit(color.l, 'hsl', 'l'),\n };\n output.rgb = converters.hsl2rgb(output.hsl);\n output.oklab = converters.hsl2oklab(output.hsl);\n output.oklch = converters.hsl2oklch(output.hsl);\n output.type = 'hsl';\n } else if (isLAB(color)) {\n output.hsl = converters.oklab2hsl(color);\n output.oklab = color;\n output.oklch = converters.oklab2oklch(color);\n output.rgb = converters.oklab2rgb(color);\n output.type = 'oklab';\n } else if (isLCH(color)) {\n output.hsl = converters.oklch2hsl(color);\n output.oklab = converters.oklch2oklab(color);\n output.oklch = color;\n output.rgb = converters.oklch2rgb(color);\n output.type = 'oklch';\n } else if (isRGB(color)) {\n output.rgb = {\n r: limit(color.r, 'rgb', 'r'),\n g: limit(color.g, 'rgb', 'g'),\n b: limit(color.b, 'rgb', 'b'),\n };\n output.hsl = converters.rgb2hsl(output.rgb);\n output.oklab = converters.rgb2oklab(output.rgb);\n output.oklch = converters.rgb2oklch(output.rgb);\n output.type = 'rgb';\n } else {\n throw new Error('invalid color');\n }\n\n output.hex = addAlphaToHex(converters.hsl2hex(output.hsl), alpha);\n output.hsl = addAlpha(output.hsl, alpha);\n output.oklab = addAlpha(output.oklab, alpha);\n output.oklch = addAlpha(output.oklch, alpha);\n output.rgb = addAlpha(output.rgb, alpha);\n\n output.alpha = alpha;\n } else {\n throw new Error(MESSAGES.input);\n }\n\n return output as Colors;\n}\n","import { MESSAGES, PRECISION } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { round } from '~/modules/utils';\nimport { isString } from '~/modules/validators';\n\nimport parseCSS from '~/parse-css';\n\n/**\n * Get the brightness difference between 2 colors.\n */\nexport default function brightnessDifference(\n left: string,\n right: string,\n precision = PRECISION,\n): number {\n invariant(isString(left), MESSAGES.left);\n invariant(isString(right), MESSAGES.right);\n\n const RGBLeft = parseCSS(left, 'rgb');\n const RGBRight = parseCSS(right, 'rgb');\n\n const brightnessLeft = (RGBLeft.r * 299 + RGBLeft.g * 587 + RGBLeft.b * 114) / 1000;\n const brightnessRight = (RGBRight.r * 299 + RGBRight.g * 587 + RGBRight.b * 114) / 1000;\n\n return round(Math.abs(brightnessRight - brightnessLeft), precision);\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { round } from '~/modules/utils';\nimport { isString } from '~/modules/validators';\n\nimport parseCSS from '~/parse-css';\n\n/**\n * Get the chroma of a color.\n */\nexport default function chroma(input: string): number {\n invariant(isString(input), MESSAGES.inputString);\n\n const { r, g, b } = parseCSS(input, 'rgb');\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n\n return round((max - min) / 255, 4);\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isString } from '~/modules/validators';\n\nimport parseCSS from '~/parse-css';\n\n/**\n * Get the difference between 2 colors.\n */\nexport default function colorDifference(left: string, right: string): number {\n invariant(isString(left), MESSAGES.left);\n invariant(isString(right), MESSAGES.right);\n\n const RGBLeft = parseCSS(left, 'rgb');\n const RGBRight = parseCSS(right, 'rgb');\n\n return (\n Math.max(RGBLeft.r, RGBRight.r) -\n Math.min(RGBLeft.r, RGBRight.r) +\n (Math.max(RGBLeft.g, RGBRight.g) - Math.min(RGBLeft.g, RGBRight.g)) +\n (Math.max(RGBLeft.b, RGBRight.b) - Math.min(RGBLeft.b, RGBRight.b))\n );\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { round } from '~/modules/utils';\nimport { isString } from '~/modules/validators';\n\nimport parseCSS from '~/parse-css';\n\n/**\n * Get the luminance of a color.\n */\nexport default function luminance(input: string): number {\n invariant(isString(input), MESSAGES.inputString);\n\n const { r, g, b } = parseCSS(input, 'rgb');\n\n const rgb = [r / 255, g / 255, b / 255];\n\n for (let index = 0; index < rgb.length; index++) {\n if (rgb[index] <= 0.03928) {\n rgb[index] /= 12.92;\n } else {\n rgb[index] = ((rgb[index] + 0.055) / 1.055) ** 2.4;\n }\n }\n\n return round(0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2], 4);\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { round } from '~/modules/utils';\nimport { isString } from '~/modules/validators';\n\nimport getLuminance from '~/luminance';\n\n/**\n * Get the color contrast between 2 colors.\n */\nexport default function contrast(left: string, right: string): number {\n invariant(isString(left), MESSAGES.left);\n invariant(isString(right), MESSAGES.right);\n\n const LuminanceLeft = getLuminance(left);\n const LuminanceRight = getLuminance(right);\n\n return round(\n LuminanceLeft >= LuminanceRight\n ? (LuminanceLeft + 0.05) / (LuminanceRight + 0.05)\n : (LuminanceRight + 0.05) / (LuminanceLeft + 0.05),\n );\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isString } from '~/modules/validators';\n\nimport getBrightnessDifference from '~/brightness-difference';\nimport getColorDifference from '~/color-difference';\nimport getContrast from '~/contrast';\nimport { Analysis } from '~/types';\n\n/**\n * Check 2 colors for WCAG compliance.\n */\nexport default function compare(left: string, right: string): Analysis {\n invariant(isString(left), MESSAGES.left);\n invariant(isString(right), MESSAGES.right);\n\n const colorThreshold = 500;\n const brightnessThreshold = 125;\n\n const colorDifference = getColorDifference(left, right);\n const contrast = getContrast(left, right);\n const brightnessDifference = getBrightnessDifference(left, right);\n\n const isBright = brightnessDifference >= brightnessThreshold;\n const hasEnoughDifference = colorDifference >= colorThreshold;\n\n let compliant = 0;\n\n if (isBright && hasEnoughDifference) {\n compliant = 2;\n } else if (isBright || hasEnoughDifference) {\n compliant = 1;\n }\n\n return {\n brightnessDifference,\n colorDifference,\n compliant,\n contrast,\n largeAA: contrast >= 3,\n largeAAA: contrast >= 4.5,\n normalAA: contrast >= 4.5,\n normalAAA: contrast >= 7,\n };\n}\n","import { MESSAGES, PRECISION } from '~/modules/constants';\nimport { convertAlphaToHex } from '~/modules/hex-utils';\nimport { invariant } from '~/modules/invariant';\nimport { restrictValues, round } from '~/modules/utils';\nimport { isHex, isHSL, isLAB, isLCH, isValidColorModel } from '~/modules/validators';\n\nimport * as converters from '~/converters';\nimport { Alpha, ColorModel, ColorType, HEX, HSL } from '~/types';\n\nexport interface FormatOptions {\n alpha?: Alpha;\n /**\n * The output color type.\n * @default 'hex'\n */\n format?: ColorType;\n /**\n * The number of digits of the output.\n * @default 5\n */\n precision?: number;\n /**\n * The separator between the values.\n * oklab and oklch always use space as a separator.\n * @default ' '\n */\n separator?: string;\n}\n\nexport default function formatCSS<T extends ColorModel | HEX>(\n input: T,\n options: FormatOptions = {},\n): string {\n invariant(isHex(input) || isValidColorModel(input), MESSAGES.invalid);\n\n const { alpha, format = 'hex', precision = PRECISION, separator: baseSeparator = ' ' } = options;\n\n let value: HSL;\n\n if (isHex(input)) {\n value = converters.hex2hsl(input);\n } else if (isHSL(input)) {\n value = input;\n } else if (isLAB(input)) {\n value = converters.oklab2hsl(input);\n } else if (isLCH(input)) {\n value = converters.oklch2hsl(input);\n } else {\n value = converters.rgb2hsl(input);\n }\n\n const opacity = alpha && alpha !== 1 ? `${round(alpha * 100)}%` : null;\n let params = [];\n let separator = baseSeparator;\n\n switch (format) {\n case 'hsl': {\n const { h, s, l } = value;\n\n params = [h, `${s}%`, `${l}%`];\n break;\n }\n case 'oklab': {\n separator = ' ';\n const { l, a, b } = restrictValues(converters.hsl2oklab(value), precision);\n\n params = [`${round(l * 100, precision)}%`, a, b];\n break;\n }\n case 'oklch': {\n separator = ' ';\n const { l, c, h } = restrictValues(converters.hsl2oklch(value), precision);\n\n params = [`${round(l * 100, precision)}%`, c, h];\n break;\n }\n case 'rgb': {\n const { r, g, b } = converters.hsl2rgb(value);\n\n params = [r, g, b];\n break;\n }\n default: {\n const hex = converters.hsl2hex(value);\n\n if (alpha && alpha !== 1) {\n return `${hex}${convertAlphaToHex(alpha)}`;\n }\n\n return hex;\n }\n }\n\n return `${format}(${params.join(separator)}${opacity ? ` / ${opacity}` : ''})`;\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { clamp } from '~/modules/utils';\nimport { isHex, isNamedColor, isNumber, isString } from '~/modules/validators';\n\nimport extractColorParts from '~/extract-color-parts';\nimport formatCSS from '~/format-css';\nimport parseCSS from '~/parse-css';\nimport { ColorModelKeys, ColorType } from '~/types';\n\n/**\n * Update color properties\n */\nexport default function updater(\n key: ColorModelKeys<'hsl'>,\n operator: '+' | '-',\n format?: ColorType,\n) {\n return (input: string, amount: number) => {\n invariant(isString(input), MESSAGES.inputString);\n invariant(isNumber(amount), MESSAGES.alpha);\n\n const color = parseCSS(input, 'hsl');\n const output = isHex(input) || isNamedColor(input) ? 'hex' : extractColorParts(input).model;\n\n return formatCSS(\n {\n ...color,\n [key]: clamp(color[key] + (operator === '+' ? amount : -amount), 0, 100),\n },\n { format: format ?? output },\n );\n };\n}\n","import updater from '~/modules/updater';\n\nimport { Amount, ColorType } from '~/types';\n\n/**\n * Decrease color lightness\n */\nexport default function darken(input: string, amount: Amount, format?: ColorType): string {\n return updater('l', '-', format)(input, amount);\n}\n","import updater from '~/modules/updater';\n\nimport { Amount, ColorType } from '~/types';\n\n/**\n * Decrease color saturation\n */\nexport default function desaturate(input: string, amount: Amount, format?: ColorType) {\n return updater('s', '-', format)(input, amount);\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { constrainDegrees } from '~/modules/utils';\nimport { isHex, isNamedColor, isNumber, isString } from '~/modules/validators';\n\nimport extractColorParts from '~/extract-color-parts';\nimport formatCSS from '~/format-css';\nimport parseCSS from '~/parse-css';\nimport { ColorType, Degrees } from '~/types';\n\n/**\n * Change the color hue\n */\nexport default function rotate(input: string, degrees: Degrees, format?: ColorType) {\n invariant(isString(input), MESSAGES.inputString);\n invariant(isNumber(degrees), 'degrees must be a number');\n\n const color = parseCSS(input, 'hsl');\n\n const output = isHex(input) || isNamedColor(input) ? 'hex' : extractColorParts(input).model;\n\n return formatCSS(\n {\n ...color,\n h: constrainDegrees(color.h, degrees),\n },\n { format: format ?? output },\n );\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex, isNamedColor, isString } from '~/modules/validators';\n\nimport extractColorParts from '~/extract-color-parts';\nimport formatCSS from '~/format-css';\nimport parseCSS from '~/parse-css';\nimport rotate from '~/rotate';\nimport { HEX } from '~/types';\n\n/**\n * Invert the color\n */\nexport default function invert(input: string) {\n invariant(isString(input), MESSAGES.inputString);\n const format = isHex(input) || isNamedColor(input) ? 'hex' : extractColorParts(input).model;\n const hex = parseCSS(input, 'hex');\n\n return formatCSS(rotate(hex, 180) as HEX, { format });\n}\n","import updater from '~/modules/updater';\n\nimport { Amount, ColorType } from '~/types';\n\n/**\n * Increase color lightness\n */\nexport default function lighten(input: string, amount: Amount, format?: ColorType) {\n return updater('l', '+', format)(input, amount);\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex, isNamedColor, isNumber, isString } from '~/modules/validators';\n\nimport extractColorParts from '~/extract-color-parts';\nimport formatCSS from '~/format-css';\nimport parseCSS from '~/parse-css';\nimport { Alpha, ColorType } from '~/types';\n\n/**\n * Make the color transparent\n */\nexport default function opacify(input: string, alpha: Alpha, format?: ColorType): string {\n invariant(isString(input), MESSAGES.inputString);\n invariant(isNumber(alpha), MESSAGES.alpha);\n const type = isHex(input) || isNamedColor(input) ? 'hex' : extractColorParts(input).model;\n\n const rgb = parseCSS(input, 'rgb');\n\n return formatCSS(rgb, { format: format ?? type, alpha });\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { cssColors } from '~/modules/css-colors';\nimport { extractAlphaFromHex } from '~/modules/hex-utils';\nimport { invariant } from '~/modules/invariant';\nimport { isHex, isString } from '~/modules/validators';\n\nimport extractColorParts from '~/extract-color-parts';\n\nexport default function opacity(input: string): number {\n invariant(isString(input), MESSAGES.inputString);\n\n if (isHex(input)) {\n return extractAlphaFromHex(input);\n } else if (Object.keys(cssColors).includes(input)) {\n return 1;\n }\n\n const { alpha } = extractColorParts(input);\n\n if (!alpha) {\n return 1;\n }\n\n return alpha;\n}\n","import updater from '~/modules/updater';\n\nimport { ColorType } from '~/types';\n\n/**\n * Increase color saturation\n */\nexport default function saturate(input: string, amount: number, format?: ColorType) {\n return updater('s', '+', format)(input, amount);\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isString } from '~/modules/validators';\n\nimport hex2rgb from '~/converters/hex2rgb';\nimport parseCSS from '~/parse-css';\n\ninterface Options {\n /**\n * The dark color to return if the input is light.\n * @default '#000000'\n */\n darkColor?: string;\n /**\n * The light color to return if the input is dark.\n * @default '#ffffff'\n */\n lightColor?: string;\n /**\n * The threshold to determine if the color is light or dark.\n * A number between 0 and 255.\n * @default 128\n */\n threshold?: number;\n}\n\n/**\n * Get the contrasted color for a given hex.\n */\nexport default function textColor(input: string, options: Options = {}): string {\n const { darkColor = '#000000', lightColor = '#ffffff', threshold = 128 } = options;\n\n invariant(isString(input), MESSAGES.inputString);\n invariant(threshold >= 0 && threshold <= 255, MESSAGES.threshold);\n\n const { r, g, b } = hex2rgb(parseCSS(input, 'hex'));\n const yiq = (r * 299 + g * 587 + b * 114) / 1000;\n\n return yiq >= threshold ? darkColor : lightColor;\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { clamp, round } from '~/modules/utils';\nimport { isNumber, isString } from '~/modules/validators';\n\nimport formatCSS from '~/format-css';\nimport opacity from '~/opacity';\nimport parseCSS from '~/parse-css';\nimport { Alpha, ColorType } from '~/types';\n\n/**\n * Increase the color transparency.\n */\nexport default function transparentize(input: string, alpha: Alpha, format?: ColorType): string {\n invariant(isString(input), MESSAGES.inputString);\n invariant(isNumber(alpha), MESSAGES.alpha);\n\n invariant(alpha >= -1 && alpha <= 1, MESSAGES.alpha);\n\n const oklch = parseCSS(input, 'oklab');\n\n const value = round(clamp(opacity(input) - alpha, 0, 1));\n\n return formatCSS(oklch, { format, alpha: value });\n}\n","import { invariant } from '~/modules/invariant';\nimport parseColor from '~/modules/parse-color';\n\nimport brightnessDifference from '~/brightness-difference';\nimport chroma from '~/chroma';\nimport colorDifference from '~/color-difference';\nimport compare from '~/compare';\nimport contrast from '~/contrast';\nimport darken from '~/darken';\nimport desaturate from '~/desaturate';\nimport formatCSS from '~/format-css';\nimport invert from '~/invert';\nimport lighten from '~/lighten';\nimport luminance from '~/luminance';\nimport opacify from '~/opacify';\nimport opacity from '~/opacity';\nimport rotate from '~/rotate';\nimport saturate from '~/saturate';\nimport textColor from '~/text-color';\nimport transparentize from '~/transparentize';\nimport { Alpha, Amount, Analysis, ColorType, Degrees, HEX, HSL, LAB, LCH, RGB } from '~/types';\n\nexport interface Options {\n /**\n * The output color type\n */\n format?: ColorType;\n}\n\nexport default class Colorizr {\n public alpha: Alpha;\n public hex: HEX;\n public hsl: HSL;\n public oklab: LAB;\n public oklch: LCH;\n public rgb: RGB;\n public type: ColorType;\n\n constructor(color: string | HSL | LAB | LCH | RGB, options: Options = {}) {\n invariant(!!color, 'color is required');\n\n const { alpha, hex, hsl, oklab, oklch, rgb, type } = parseColor(color);\n\n this.hex = hex;\n this.hsl = hsl;\n this.oklab = oklab;\n this.oklch = oklch;\n this.rgb = rgb;\n\n this.alpha = alpha;\n this.type = options.format ?? type;\n }\n\n /**\n * Get css string\n */\n get css(): string {\n return this.selectedColor;\n }\n\n /**\n * Get the red value\n */\n get red(): number {\n return Number(this.rgb.r);\n }\n\n /**\n * Get the green value\n */\n get green(): number {\n return Number(this.rgb.g);\n }\n\n /**\n * Get the blue value\n */\n get blue(): number {\n return Number(this.rgb.b);\n }\n\n /**\n * Get the hue value\n */\n get hue(): number {\n return Number(this.hsl.h);\n }\n\n /**\n * Get the saturation value\n */\n get saturation(): number {\n return Number(this.hsl.s);\n }\n\n /**\n * Get the lightness value\n */\n get lightness(): number {\n return Number(this.hsl.l);\n }\n\n /**\n * Get the luminance value\n */\n get luminance(): number {\n return luminance(this.selectedColor);\n }\n\n /**\n * Get the chroma value\n */\n get chroma(): number {\n return chroma(this.selectedColor);\n }\n\n get opacity(): number {\n return opacity(this.selectedColor);\n }\n\n /**\n * Get the contrasted color\n */\n get textColor(): string {\n return textColor(this.selectedColor);\n }\n\n private get selectedColor(): string {\n return formatCSS(this[this.type], { format: this.type, alpha: this.alpha });\n }\n\n public brightnessDifference(input: string): number {\n return brightnessDifference(this.selectedColor, input);\n }\n\n public colorDifference(input: string): number {\n return colorDifference(this.selectedColor, input);\n }\n\n /**\n * Test 2 colors for compliance\n */\n public compare(input: string): Analysis {\n return compare(this.selectedColor, input);\n }\n\n public contrast(input: string): number {\n return contrast(this.selectedColor, input);\n }\n\n public format(type: ColorType, precision?: number): string {\n return formatCSS(this.rgb, {\n alpha: this.alpha,\n format: type,\n precision,\n });\n }\n\n /**\n * Increase lightness\n */\n public lighten(amount: Amount): string {\n return lighten(this.selectedColor, amount);\n }\n\n /**\n * Decrease lightness\n */\n public darken(amount: Amount): string {\n return darken(this.selectedColor, amount);\n }\n\n /**\n * Increase saturation\n */\n public saturate(amount: Amount): string {\n return saturate(this.selectedColor, amount);\n }\n\n /**\n * Decrease saturation\n */\n public desaturate(amount: Amount): string {\n return desaturate(this.selectedColor, amount);\n }\n\n /**\n * Invert color\n */\n public invert(): string {\n return invert(this.selectedColor);\n }\n\n /**\n * Add opacity to the color.\n */\n public opacify(alpha: Alpha = 0.9): string {\n return opacify(this.selectedColor, alpha, this.type);\n }\n\n /**\n * Rotate color\n */\n public rotate(degrees: Degrees): string {\n return rotate(this.selectedColor, degrees);\n }\n\n /**\n * Make the color more transparent\n */\n public transparentize(alpha: Alpha = 0.1): string {\n return transparentize(this.selectedColor, alpha, this.type);\n }\n}\n","import formatCSS from '~/format-css';\nimport parseCSS from '~/parse-css';\nimport { ColorType } from '~/types';\n\n/**\n * Convert a color string to another format.\n */\nexport default function convert(input: string, format: ColorType) {\n const value = parseCSS(input, format);\n\n return formatCSS(value, { format });\n}\n","import parseCSS from '~/parse-css';\n\nexport default function isValidColor(input: string): boolean {\n try {\n parseCSS(input);\n\n return true;\n } catch {\n return false;\n }\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { cssColors } from '~/modules/css-colors';\nimport { invariant } from '~/modules/invariant';\nimport { isString } from '~/modules/validators';\n\nimport parseCSS from '~/parse-css';\n\n/**\n * Get the name of a color.\n * Returns the hex value if the color is not found.\n */\nexport default function name(input: string): string {\n invariant(isString(input), MESSAGES.inputString);\n\n const hex = parseCSS(input, 'hex');\n\n const [color] = Object.entries(cssColors).find(([, value]) => value === hex) || [];\n\n return color ?? hex;\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex, isNamedColor, isPlainObject, isString } from '~/modules/validators';\n\nimport convert from '~/convert';\nimport hex2hsl from '~/converters/hex2hsl';\nimport hsl2hex from '~/converters/hsl2hex';\nimport extractColorParts from '~/extract-color-parts';\nimport parseCSS from '~/parse-css';\nimport rotate from '~/rotate';\nimport { ColorType, HEX } from '~/types';\n\nexport interface PaletteOptions {\n format?: ColorType;\n lightness?: number;\n saturation?: number;\n /**\n * The number of colors to generate\n * @default 6\n */\n size?: number;\n type?: 'monochromatic';\n}\n\nexport default function palette(input: string, options: PaletteOptions = {}): string[] {\n invariant(isString(input), MESSAGES.inputString);\n invariant(isPlainObject(options), MESSAGES.options);\n\n const { format, lightness, saturation, size = 6, type } = options;\n const hsl = parseCSS(input, 'hsl');\n const output: string[] = [];\n const colorFormat = isHex(input) || isNamedColor(input) ? 'hex' : extractColorParts(input).model;\n\n switch (type) {\n case 'monochromatic': {\n const step = 80 / size;\n\n for (let index = size; index > 0; index--) {\n output.push(hsl2hex({ ...hsl, l: step * index }));\n }\n\n break;\n }\n default: {\n const step = 360 / size;\n\n output.push(hsl2hex({ ...hsl, l: lightness ?? hsl.l, s: saturation ?? hsl.s }));\n\n for (let index = 1; index < size; index++) {\n const color = rotate(input, hsl.h + step * index, 'hex') as HEX;\n\n output.push(hsl2hex({ ...hex2hsl(color), l: lightness ?? hsl.l, s: saturation ?? hsl.s }));\n }\n\n break;\n }\n }\n\n return output.map(color => convert(color, format ?? colorFormat));\n}\n","import { LAB_TO_LMS, LSM_TO_RGB, MESSAGES, PRECISION, SRGB_TO_P3 } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { round } from '~/modules/utils';\nimport { isNumber, isString } from '~/modules/validators';\n\nimport { oklch2oklab } from '~/converters';\nimport parseCSS from '~/parse-css';\nimport { ColorTuple, LCH } from '~/types';\n\nfunction multiplyMatrix(matrix: number[][], vector: ColorTuple): ColorTuple {\n return [\n matrix[0][0] * vector[0] + matrix[0][1] * vector[1] + matrix[0][2] * vector[2],\n matrix[1][0] * vector[0] + matrix[1][1] * vector[1] + matrix[1][2] * vector[2],\n matrix[2][0] * vector[0] + matrix[2][1] * vector[1] + matrix[2][2] * vector[2],\n ];\n}\n\nfunction isInP3Gamut(color: ColorTuple): boolean {\n const epsilon = 0.000001;\n\n return color.every(component => component >= 0 - epsilon && component <= 1 + epsilon);\n}\n\nfunction oklabToLinearSRGB(L: number, a: number, b: number): ColorTuple {\n const l = (L + LAB_TO_LMS.l[0] * a + LAB_TO_LMS.l[1] * b) ** 3;\n const m = (L + LAB_TO_LMS.m[0] * a + LAB_TO_LMS.m[1] * b) ** 3;\n const s = (L + LAB_TO_LMS.s[0] * a + LAB_TO_LMS.s[1] * b) ** 3;\n\n return [\n LSM_TO_RGB.r[0] * l + LSM_TO_RGB.r[1] * m + LSM_TO_RGB.r[2] * s,\n LSM_TO_RGB.g[0] * l + LSM_TO_RGB.g[1] * m + LSM_TO_RGB.g[2] * s,\n LSM_TO_RGB.b[0] * l + LSM_TO_RGB.b[1] * m + LSM_TO_RGB.b[2] * s,\n ];\n}\n\nfunction oklabToLinearP3(L: number, a: number, b: number): ColorTuple {\n const srgb = oklabToLinearSRGB(L, a, b);\n\n return multiplyMatrix(SRGB_TO_P3, srgb);\n}\n\n/**\n * Get the maximum chroma for a given lightness and hue in the OkLCH color space\n */\nexport function getOkLCHMaxChroma(input: string | LCH, precision = PRECISION): number {\n const { l, h } = isString(input) ? parseCSS(input, 'oklch') : input;\n\n invariant(isNumber(l) && l >= 0 && l <= 1, MESSAGES.lightnessRange);\n invariant(isNumber(h) && h >= 0 && h <= 360, MESSAGES.hueRange);\n\n // Binary search parameters\n const epsilon = 0.000001;\n let low = 0;\n let high = 0.5; // Increased max theoretical chroma\n\n while (high - low > epsilon) {\n const mid = (low + high) / 2;\n const { l: L, a, b } = oklch2oklab({ l, c: mid, h }, 16);\n\n const p3Color = oklabToLinearP3(L, a, b);\n\n if (isInP3Gamut(p3Color)) {\n low = mid;\n } else {\n high = mid;\n }\n }\n\n return round(low, precision);\n}\n\n/**\n * Get a OkLCH color in the P3 color space.\n */\nexport function getP3Color(input: string | LCH): string {\n const lch = isString(input) ? parseCSS(input, 'oklch') : input;\n\n return `oklch(${lch.l} ${getOkLCHMaxChroma(lch)} ${lch.h})`;\n}\n","import formatCSS from '~/format-css';\nimport { ColorType } from '~/types';\n\n/**\n * Generate a random color.\n */\nexport default function random(type: ColorType = 'hex'): string {\n const hsl = {\n h: Math.floor(Math.random() * 360) + 1,\n s: Math.floor(Math.random() * 90) + 10,\n l: Math.floor(Math.random() * 80) + 10,\n };\n\n return formatCSS(hsl, { format: type });\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { isHex, isNamedColor, isString } from '~/modules/validators';\n\nimport convert from '~/convert';\nimport extractColorParts from '~/extract-color-parts';\nimport rotate from '~/rotate';\nimport { ColorType } from '~/types';\n\nexport type Scheme =\n | 'analogous'\n | 'complementary'\n | 'rectangle'\n | 'split'\n | 'split-complementary'\n | 'square'\n | 'tetradic'\n | 'triadic';\n\nexport interface SchemeOptions {\n format?: ColorType;\n /**\n * The type of scheme to generate.\n * @default 'complementary'\n */\n type?: Scheme;\n}\n\n/**\n * Get the scheme for a color.\n */\nexport default function scheme(input: string, typeOrOptions?: Scheme | SchemeOptions): string[] {\n invariant(isString(input), MESSAGES.inputString);\n const { format, type = 'complementary' } = isString(typeOrOptions)\n ? { type: typeOrOptions }\n : (typeOrOptions ?? {});\n\n const output = isHex(input) || isNamedColor(input) ? 'hex' : extractColorParts(input).model;\n\n const colors: string[] = [];\n\n switch (type) {\n case 'analogous': {\n colors.push(rotate(input, -30), input, rotate(input, 30));\n break;\n }\n case 'complementary': {\n colors.push(input, rotate(input, 180));\n break;\n }\n\n case 'split':\n case 'split-complementary': {\n colors.push(input, rotate(input, 150), rotate(input, 210));\n break;\n }\n case 'triadic': {\n colors.push(input, rotate(input, 120), rotate(input, 240));\n break;\n }\n\n case 'tetradic':\n case 'rectangle': {\n colors.push(input, rotate(input, 60), rotate(input, 180), rotate(input, 240));\n break;\n }\n case 'square': {\n colors.push(input, rotate(input, 90), rotate(input, 180), rotate(input, 270));\n break;\n }\n default: {\n throw new TypeError('invalid type');\n }\n }\n\n return colors.map(color => convert(color, format ?? output));\n}\n","import { MESSAGES } from '~/modules/constants';\nimport { invariant } from '~/modules/invariant';\nimport { clamp } from '~/modules/utils';\nimport { isHex, isNamedColor, isString } from '~/modules/validators';\n\nimport convert from '~/convert';\nimport { oklch2hex } from '~/converters';\nimport oklch2rgb from '~/converters/oklch2rgb';\nimport rgb2hex from '~/converters/rgb2hex';\nimport extractColorParts from '~/extract-color-parts';\nimport parseCSS from '~/parse-css';\nimport { ColorType, HEX, LCH } from '~/types';\n\ntype ColorTokens = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;\n\ntype Swatch = {\n [key in ColorTokens]: string;\n};\n\nexport interface SwatchOptions {\n format?: ColorType;\n /**\n * The scale of the swatch.\n * Linear scale will have equal distance between each shade.\n * @default 'dynamic'\n */\n scale?: 'dynamic' | 'linear';\n}\n\nconst MIN_LIGHTNESS = 21;\nconst MAX_LIGHTNESS = 97;\n\n/**\n * Generate a shade of a color based its lightness tuning factor\n */\nfunction shadeColorDynamic(input: LCH, lightnessTuningFactor: number, chromaTuningFactor = 0): HEX {\n if (lightnessTuningFactor === 0) {\n return rgb2hex(oklch2rgb({ ...input, l: input.l / 100 }));\n }\n\n // Convert back to RGB and make sure it's within the sRGB gamut\n return shadeColor(input, input.l + lightnessTuningFactor, chromaTuningFactor);\n}\n\n/**\n * Generate a shade of a color based its lightness tuning factor\n */\nfunction shadeColor(input: LCH, lightness: number, chromaTuningFactor = 0): HEX {\n const { c, h } = input;\n\n // Convert back to RGB and make sure it's within the sRGB gamut\n return oklch2hex({ l: lightness / 100, c: clamp(c + chromaTuningFactor, 0, 0.4), h });\n}\n\n/**\n * Generate a palette of shades of a color\n */\nexport default function swatch(input: string, options: SwatchOptions = {}): Swatch {\n invariant(isString(input), MESSAGES.inputString);\n const { format, scale = 'dynamic' } = options;\n\n const lch = parseCSS(input, 'oklch');\n\n lch.l = 50;\n\n const colorFormat = isHex(input) || isNamedColor(input) ? 'hex' : extractColorParts(input).model;\n\n const currentLightness = lch.l;\n const safeMaxLightness = currentLightness >= 88.5 ? 99.5 : MAX_LIGHTNESS;\n const safeMinLightness = currentLightness <= 33 ? 0 : MIN_LIGHTNESS;\n const lightBase = (safeMaxLightness - currentLightness) / 5;\n const darkBase = (-1 * (currentLightness - safeMinLightness)) / 8;\n\n const output: Swatch =\n scale === 'linear'\n ? {\n 50: shadeColor(lch, 95, -0.00375),\n 100: shadeColor(lch, 90, -0.00375),\n 200: shadeColor(lch, 80, -0.00375),\n 300: shadeColor(lch, 70, -0.00375),\n 400: shadeColor(lch, 60, -0.00375),\n 500: shadeColor(lch, 50),\n 600: shadeColor(lch, 40, 0.025),\n 700: shadeColor(lch, 30, 0.05),\n 800: shadeColor(lch, 20, 0.075),\n 900: shadeColor(lch, 10, 0.1),\n }\n : {\n 50: shadeColorDynamic(lch, 5 * lightBase, -0.00375),\n 100: shadeColorDynamic(lch, 4 * lightBase, -0.00375),\n 200: shadeColorDynamic(lch, 3 * lightBase, -0.00375),\n 300: shadeColorDynamic(lch, 2 * lightBase, -0.00375),\n 400: shadeColorDynamic(lch, lightBase, -0.00375),\n 500: shadeColorDynamic(lch, 0),\n 600: shadeColorDynamic(lch, 1.6 * darkBase, 0.025),\n 700: shadeColorDynamic(lch, 1.875 * 2 * darkBase, 0.05),\n 800: shadeColorDynamic(lch, 3 * 2 * darkBase, 0.075),\n 900: shadeColorDynamic(lch, 4 * 2 * darkBase, 0.1),\n };\n\n return Object.entries(output).reduce((acc, [key, value]) => {\n return {\n ...acc,\n [key]: convert(value, format ?? colorFormat),\n };\n }, {} as Swatch);\n}\n"],"mappings":"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","names":["factor","abs","chroma","chroma","sign","keys","alpha","colorDifference","contrast","brightnessDifference","opacity"]}
package/dist/index.mjs CHANGED
@@ -1500,7 +1500,7 @@ function shadeColorDynamic(input, lightnessTuningFactor, chromaTuningFactor = 0)
1500
1500
  }
1501
1501
  function shadeColor(input, lightness, chromaTuningFactor = 0) {
1502
1502
  const { c, h } = input;
1503
- return oklch2hex({ l: lightness / 100, c: c + chromaTuningFactor, h });
1503
+ return oklch2hex({ l: lightness / 100, c: clamp(c + chromaTuningFactor, 0, 0.4), h });
1504
1504
  }
1505
1505
  function swatch(input, options = {}) {
1506
1506
  invariant(isString(input), MESSAGES.inputString);