@nauverse/color-to-hsla
Version:
🧪 A tiny URL builder library for TypeScript.
1 lines • 22 kB
Source Map (JSON)
{"version":3,"file":"color-to-hsla.umd.cjs","sources":["../src/lib/regexps.ts","../src/lib/named.ts","../src/colorToHSLA.ts"],"sourcesContent":["/* eslint-disable no-useless-escape */\nexport const reHex3 = /^#([0-9a-f]{3})$/;\nexport const reHex6 = /^#([0-9a-f]{6})$/;\nexport const reRgbInteger =\n /^rgb\\(\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*\\)$/;\nexport const reRgbPercent =\n /^rgb\\(\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\nexport const reRgbaInteger =\n /^rgba\\(\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?[\\d\\.]+)\\s*\\)$/;\nexport const reRgbaPercent =\n /^rgba\\(\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?[\\d\\.]+)\\s*\\)$/;\nexport const reHslPercent =\n /^hsl\\(\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\nexport const reHslaPercent =\n /^hsla\\(\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?[\\d\\.]+)\\s*\\)$/;\n","/**\nCopyright (c) 2016 css-utils\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\nconst colors: Record<string, number> = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\nexport default colors;\n","import {\n reHex3,\n reHex6,\n reHslPercent,\n reHslaPercent,\n reRgbInteger,\n reRgbPercent,\n reRgbaInteger,\n reRgbaPercent\n} from \"./lib/regexps\";\nimport colors from \"./lib/named\";\nimport type { HSLA, IColorObject } from \"./types\";\n\nconst DEFAULT_HSLA_COLOR = { h: 0, s: 0, l: 0, a: 0 };\n\n/**\n * Converts a color value to HSLA format.\n *\n * @param format - The color value to convert. It can be either a string or an object.\n * @returns The color value in HSLA format.\n * @throws Error if the format is not a string or an object, or if the argument cannot be parsed.\n */\nexport default function colorToHsla(format: string | IColorObject): HSLA {\n if (typeof format === \"string\") return parseString(format);\n if (typeof format !== \"object\") throw new Error(\"Must pass string or object\");\n const a = format.a == null ? 1 : format.a;\n if (has(format, \"hsl\"))\n return hsla(format?.h ?? 0, format?.s ?? 0, format?.l ?? 0, a);\n if (has(format, \"rgb\"))\n return rgbaToHsla(format?.r ?? 0, format?.g ?? 0, format?.b ?? 0, a);\n throw new Error(\"Could not parse argument\");\n}\n\n/**\n * Checks if the given object has the specified type.\n *\n * @param obj - The object to check.\n * @param type - The type to check for.\n * @returns A boolean indicating whether the object has the specified type.\n * @throws {Error} If a key is missing in the color type.\n */\nfunction has(obj: IColorObject, type: string) {\n const keys = type.split(\"\");\n let isType: boolean = false;\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (typeof key !== \"undefined\" && key in obj) {\n isType = true;\n } else if (typeof key === \"undefined\" && isType) {\n throw new Error('Missing key \"' + key + '\" in color type ' + type);\n }\n }\n return isType;\n}\n\n/**\n * Parses a string representation of a color and converts it to HSLA format.\n * Supports various color formats including HSL, HSLA, HEX, RGB, RGBA, and named colors.\n * If the string cannot be parsed, it returns the default HSLA color.\n *\n * @param string - The string representation of the color.\n * @returns The parsed color in HSLA format.\n */\nfunction parseString(string: string): HSLA {\n try {\n string = `${string}`.trim().toLowerCase();\n\n // Detect HSL and convert to HSLA\n // Example: hsl(120, 50%, 50%) => hsla(120, 50%, 50%, 1)\n const reHslPercentResult = reHslPercent.exec(string);\n if (reHslPercentResult) {\n const v1 =\n reHslPercentResult.length >= 2\n ? Math.round(parseInt(reHslPercentResult[1] ?? \"0\", 10))\n : 0;\n\n const v2 =\n reHslPercentResult.length >= 3\n ? parseFloat(reHslPercentResult[2] ?? \"0\")\n : 0;\n\n const v3 =\n reHslPercentResult.length >= 4\n ? parseFloat(reHslPercentResult[3] ?? \"0\")\n : 0;\n return hsla(v1, v2 / 100, v3 / 100, 1);\n }\n\n // Detect HSLA and convert to HSLA\n // Example: hsla(120, 50%, 50%, 1) => hsla(120, 50%, 50%, 1)\n const reHslaPercentResult = reHslaPercent.exec(string);\n if (reHslaPercentResult) {\n const v1 =\n reHslaPercentResult.length >= 2\n ? Math.round(parseInt(reHslaPercentResult[1] ?? \"0\", 10))\n : 0;\n\n const v2 =\n reHslaPercentResult.length >= 3\n ? parseFloat(reHslaPercentResult[2] ?? \"0\")\n : 0;\n\n const v3 =\n reHslaPercentResult.length >= 4\n ? parseFloat(reHslaPercentResult[3] ?? \"0\")\n : 0;\n\n const v4 =\n reHslaPercentResult.length >= 5\n ? parseFloat(reHslaPercentResult[4] ?? \"0\")\n : 0;\n return hsla(v1, v2 / 100, v3 / 100, v4);\n }\n\n // Detect HEX3 and convert to HSLA\n // Example: #f00 => hsla(0, 100%, 50%, 1)\n const reHex3Result = reHex3.exec(string);\n if (reHex3Result) {\n const v1 = parseInt(reHex3Result[1] ?? \"0\", 16);\n return rgbaToHsla(\n ((v1 >> 8) & 0xf) | ((v1 >> 4) & 0x0f0),\n ((v1 >> 4) & 0xf) | (v1 & 0xf0),\n ((v1 & 0xf) << 4) | (v1 & 0xf),\n 1\n );\n }\n\n // Detect HEX6 and convert to HSLA\n // Example: #ff0000 => hsla(0, 100%, 50%, 1)\n const reHex6Result = reHex6.exec(string);\n if (reHex6Result) {\n const v1 = parseInt(reHex6Result[1] ?? \"0\", 16);\n return rgbn(v1);\n }\n\n // Detect RGB with numbers and convert to HSLA\n // Example: rgb(255, 0, 0) => hsla(0, 100%, 50%, 1)\n const reRgbIntegerResult = reRgbInteger.exec(string);\n if (reRgbIntegerResult) {\n const v1 = parseInt(reRgbIntegerResult[1] ?? \"0\", 10);\n const v2 = parseInt(reRgbIntegerResult[2] ?? \"0\", 10);\n const v3 = parseInt(reRgbIntegerResult[3] ?? \"0\", 10);\n return rgbaToHsla(v1, v2, v3, 1);\n }\n\n // Detect RGB with percentages and convert to HSLA\n // Example: rgb(100%, 0%, 0%) => hsla(0, 100%, 50%, 1)\n const reRgbPercentResult = reRgbPercent.exec(string);\n if (reRgbPercentResult) {\n const v1 = (parseFloat(reRgbPercentResult[1] ?? \"0\") * 255) / 100;\n const v2 = (parseFloat(reRgbPercentResult[2] ?? \"0\") * 255) / 100;\n const v3 = (parseFloat(reRgbPercentResult[3] ?? \"0\") * 255) / 100;\n return rgbaToHsla(v1, v2, v3, 1);\n }\n\n // Detect RGBA with numbers and convert to HSLA\n // Example: rgba(255, 0, 0, 1) => hsla(0, 100%, 50%, 1)\n const reRgbaIntegerResult = reRgbaInteger.exec(string);\n if (reRgbaIntegerResult) {\n const v1 = parseInt(reRgbaIntegerResult[1] ?? \"0\", 10);\n const v2 = parseInt(reRgbaIntegerResult[2] ?? \"0\", 10);\n const v3 = parseInt(reRgbaIntegerResult[3] ?? \"0\", 10);\n const v4 = parseFloat(reRgbaIntegerResult[4] ?? \"0\");\n return rgba(v1, v2, v3, v4);\n }\n\n // Detect RGBA with percentages and convert to HSLA\n // Example: rgba(100%, 0%, 0%, 1) => hsla(0, 100%, 50%, 1)\n const reRgbaPercentResult = reRgbaPercent.exec(string);\n if (reRgbaPercentResult) {\n const v1 = (parseFloat(reRgbaPercentResult[1] ?? \"0\") * 255) / 100;\n const v2 = (parseFloat(reRgbaPercentResult[2] ?? \"0\") * 255) / 100;\n const v3 = (parseFloat(reRgbaPercentResult[3] ?? \"0\") * 255) / 100;\n const v4 = parseFloat(reRgbaPercentResult[4] ?? \"0\");\n return rgba(v1, v2, v3, v4);\n }\n\n // Detect named color and convert to HSLA\n // Example: red => hsla(0, 100%, 50%, 1)\n if (colors[string]) return rgbn(colors[string]!);\n\n // Detect transparent and convert to HSLA\n // Example: transparent => hsla(NaN, NaN, NaN, 0)\n if (string === \"transparent\") return rgbaToHsla(0, 0, 0, 0);\n\n return DEFAULT_HSLA_COLOR;\n } catch {\n return DEFAULT_HSLA_COLOR;\n }\n}\n\n/**\n * Converts a 24-bit RGB color value to an HSLA color object.\n * @param n - The 24-bit RGB color value.\n * @returns The corresponding HSLA color object.\n */\nfunction rgbn(n: number): HSLA {\n return rgbaToHsla((n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff, 1);\n}\n\n/**\n * Converts an RGBA color to HSLA format.\n *\n * @param r - The red component of the color (0-255).\n * @param g - The green component of the color (0-255).\n * @param b - The blue component of the color (0-255).\n * @param a - The alpha (opacity) value of the color (0-1).\n * @returns The color converted to HSLA format.\n */\nfunction rgba(r: number, g: number, b: number, a: number): HSLA {\n return rgbaToHsla(r, g, b, a);\n}\n\n/**\n * Converts an RGBA color value to an HSLA color value.\n * @param R - The red component of the RGBA color value (0-255).\n * @param G - The green component of the RGBA color value (0-255).\n * @param B - The blue component of the RGBA color value (0-255).\n * @param A - The alpha component of the RGBA color value (0-1).\n * @returns The corresponding HSLA color value.\n */\nfunction rgbaToHsla(R: number, G: number, B: number, A: number): HSLA {\n const r = +R / 255;\n const g = +G / 255;\n const b = +B / 255;\n const a = +A;\n const min = Math.min(r, g, b);\n const max = Math.max(r, g, b);\n let h: number = 0;\n let s: number = max - min;\n const l: number = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b ? 1 : 0) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n\n return { h: Math.round(h), s: isNaN(s) ? 0 : s, l: isNaN(l) ? 0 : l, a: a };\n}\n\n/**\n * Converts the given color values to an HSLA object.\n *\n * @param h - The hue value.\n * @param s - The saturation value.\n * @param l - The lightness value.\n * @param a - The alpha value.\n * @returns The HSLA object representing the color.\n */\nfunction hsla(h: number, s: number, l: number, a: number): HSLA {\n return { h: +h, s: +s, l: +l, a: +a };\n}\n\n/**\n * Converts an HSLA color object to a string representation.\n * @param hsla - The HSLA color object to convert.\n * @returns The string representation of the HSLA color.\n */\nexport function hslaToString(hsla: HSLA): string {\n const _h = Math.round(Math.max(0, Math.min(360, hsla.h))).toFixed(0);\n const _s = (Math.max(0, Math.min(1, hsla.s)) * 100).toFixed(0);\n const _l = (Math.max(0, Math.min(1, hsla.l)) * 100).toFixed(0);\n const _a = parseFloat(hsla.a.toFixed(1));\n\n return `hsla(${_h}, ${_s}%, ${_l}%, ${_a})`;\n}\n"],"names":["reHex3","reHex6","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","colors","DEFAULT_HSLA_COLOR","colorToHsla","format","parseString","a","has","hsla","rgbaToHsla","obj","type","keys","isType","key","string","reHslPercentResult","v1","v2","v3","reHslaPercentResult","v4","reHex3Result","reHex6Result","rgbn","reRgbIntegerResult","reRgbPercentResult","reRgbaIntegerResult","rgba","reRgbaPercentResult","n","r","g","b","R","G","B","A","min","max","h","s","l","hslaToString","_h","_s","_l","_a"],"mappings":"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"}