{"version":3,"file":"rockColor.js","sources":["../../../../Framework/Core/Utilities/rockColor.ts"],"sourcesContent":["// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\n// NOTICE!!!\n// This file has a C# version in the Rock.Common project. If changes are made\n// to one the same changes must be made to the other.\n// NOTICE!!!\n\nimport { ColorPair } from \"./colorPair\";\nimport { ColorScheme } from \"@Obsidian/Enums/Core/colorScheme\";\nimport { ColorRecipe } from \"@Obsidian/Enums/Core/colorRecipe\";\n\nconst html4Colors: Map<string, number> = new Map([\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    [\"darkgrey\", 0xa9a9a9],\n    [\"darkgreen\", 0x006400],\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    [\"grey\", 0x808080],\n    [\"green\", 0x008000],\n    [\"greenyellow\", 0xadff2f],\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    [\"lightgrey\", 0xd3d3d3],\n    [\"lightgreen\", 0x90ee90],\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\", 0x9370d8],\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\", 0xd87093],\n    [\"papayawhip\", 0xffefd5],\n    [\"peachpuff\", 0xffdab9],\n    [\"peru\", 0xcd853f],\n    [\"pink\", 0xffc0cb],\n    [\"plum\", 0xdda0dd],\n    [\"powderblue\", 0xb0e0e6],\n    [\"purple\", 0x800080],\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\nconst html4ColorsReverse: Map<number, string> = new Map();\n\nhtml4Colors.forEach((value, key) => {\n    // Reverse the order.\n    if (!html4ColorsReverse.has(value)) {\n        html4ColorsReverse.set(value, key);\n    }\n});\n\n/**\n * Normalizes the value to ensure it falls between the minimum and maximum\n * values, inclusively.\n *\n * @param value The value to be normalized.\n * @param minimum The minimum value allowed.\n * @param maximum The maximum value allowed.\n *\n * @returns The number after it has been constrained to the allowed values.\n */\nfunction normalize(value: number, minimum: number, maximum: number): number {\n    return value < minimum ? minimum : value > maximum ? maximum : value;\n}\n\n/**\n * Helper method to perform some conversion of HSL values to RGB values.\n *\n * @param q1 The first value.\n * @param q2 The second value.\n * @param hue The hue value.\n */\nfunction qqhToRgb(q1: number, q2: number, hue: number): number {\n    if (hue > 360) {\n        hue -= 360;\n    }\n    else if (hue < 0) {\n        hue += 360;\n    }\n\n    if (hue < 60) {\n        return q1 + (q2 - q1) * hue / 60;\n    }\n    else if (hue < 180) {\n        return q2;\n    }\n    else if (hue < 240) {\n        return q1 + (q2 - q1) * (240 - hue) / 60;\n    }\n    else {\n        return q1;\n    }\n}\n\n/**\n * Parses a hex string into a single numerical value.\n *\n * @param hex The string containing the hex characters.\n *\n * @returns The numerical value of the hex representation.\n */\nfunction parseHexValue(hex: string): number {\n    const value = parseInt(hex, 16);\n\n    return isNaN(value) ? 0 : value;\n}\n\n/**\n * Parses a hexadecimal representation of a color into the RGBA values.\n *\n * @param hex The hexadecimal representation of the color.\n *\n * @returns A 4 segment array of numbers that represent the RGBA values.\n */\nfunction parseHexString(hex: string): number[] {\n    hex = hex.startsWith(\"#\") ? hex.substring(1) : hex;\n\n    if (hex.length === 8) {\n        return [\n            parseHexValue(hex.substring(0, 2)),\n            parseHexValue(hex.substring(2, 4)),\n            parseHexValue(hex.substring(4, 6)),\n            parseHexValue(hex.substring(6, 8)) / 255\n        ];\n    }\n    else if (hex.length === 6) {\n        return [\n            parseHexValue(hex.substring(0, 2)),\n            parseHexValue(hex.substring(2, 4)),\n            parseHexValue(hex.substring(4, 6)),\n            1\n        ];\n    }\n    else if (hex.length === 4) {\n        return [\n            parseHexValue(hex.substring(0, 1).repeat(2)),\n            parseHexValue(hex.substring(1, 2).repeat(2)),\n            parseHexValue(hex.substring(2, 3).repeat(2)),\n            parseHexValue(hex.substring(3, 4).repeat(2)) / 255\n        ];\n    }\n    else if (hex.length === 3) {\n        return [\n            parseHexValue(hex.substring(0, 1).repeat(2)),\n            parseHexValue(hex.substring(1, 2).repeat(2)),\n            parseHexValue(hex.substring(2, 3).repeat(2)),\n            1\n        ];\n    }\n    else {\n        return [0, 0, 0, 1];\n    }\n}\n\n/**\n * Helper function to parse a floating point number from a string with error\n * handling for non-numbers.\n *\n * @param str The string to be parsed.\n *\n * @returns The numerical value or 0 if it could not be parsed.\n */\nfunction asFloat(str: string): number {\n    const num = parseFloat(str);\n\n    return isNaN(num) ? 0 : num;\n}\n\n/**\n * Utility class for color manipulation.\n */\nexport class RockColor {\n    // #region Fields\n\n    private readonly rgbInternal: number[] = [0, 0, 0];\n    private alphaInternal: number = 1;\n    private hueInternal!: number;\n    private saturationInternal!: number;\n    private luminosityInternal!: number;\n    private textInternal?: string;\n\n    // #endregion\n\n    // #region Properties\n\n    /**\n     * Gets or sets the Alpha level. This will be between 0 and 1.\n     */\n    public get alpha(): number {\n        return this.alphaInternal;\n    }\n\n    public set alpha(value: number) {\n        this.alphaInternal = normalize(value, 0, 1);\n    }\n\n    /**\n     * Gets or sets the Red value of the color. This will be between 0 and 255.\n     */\n    public get r(): number {\n        return this.rgbInternal[0];\n    }\n\n    public set r(value: number) {\n        this.rgbInternal[0] = normalize(value, 0, 255);\n        this.updateHslFromRgb();\n    }\n\n    /**\n     * Gets or sets the Green value of the color. This will be between 0 and 255.\n     */\n    public get g(): number {\n        return this.rgbInternal[1];\n    }\n\n    public set g(value: number) {\n        this.rgbInternal[1] = normalize(value, 0, 255);\n        this.updateHslFromRgb();\n    }\n\n    /**\n     * Gets or sets the Blue value of the color. This will be between 0 and 255.\n     */\n    public get b(): number {\n        return this.rgbInternal[2];\n    }\n\n    public set b(value: number) {\n        this.rgbInternal[2] = normalize(value, 0, 255);\n        this.updateHslFromRgb();\n    }\n\n    /**\n     * Calculates the luma value based on the W3 Standard.\n     */\n    public get luma(): number {\n        const { red, green, blue } = this.toStandardRgb();\n\n        return (0.2126 * red) + (0.7152 * green) + (0.0722 * blue);\n    }\n\n    /**\n     * Gets or sets the hue of the color.\n     */\n    public get hue(): number {\n        return this.hueInternal;\n    }\n\n    public set hue(value: number) {\n        // Take care of translating things like 540 to 360.\n        while (value > 360) {\n            value -= 360;\n        }\n\n        while (value < 0) {\n            value += 360;\n        }\n\n        this.hueInternal = value;\n        this.updateRgbFromHsl();\n    }\n\n    /**\n     * Gets or sets the saturation of the color.\n     */\n    public get saturation(): number {\n        return this.saturationInternal;\n    }\n\n    public set saturation(value: number) {\n        this.saturationInternal = normalize(value, 0, 1);\n        this.updateRgbFromHsl();\n    }\n\n    /**\n     * Gets or sets the luminosity of the color.\n     */\n    public get luminosity(): number {\n        return this.luminosityInternal;\n    }\n\n    public set luminosity(value: number) {\n        this.luminosityInternal = normalize(value, 0, 1);\n        this.updateRgbFromHsl();\n    }\n\n    /**\n     * Gets the color as a hexadecimal string, including the leading `#`.\n     */\n    public get hex(): string {\n        return this.toHex();\n    }\n\n    /**\n     * Determines if the color is a light color.\n     */\n    public get isLight(): boolean {\n        return this.luminosityInternal > 0.5;\n    }\n\n    /**\n     * Determines if the color is a dark color.\n     */\n    public get isDark(): boolean {\n        return !this.isLight;\n    }\n\n    // #endregion\n\n    // #region Constructors\n\n    constructor(color: string);\n    constructor(rgb: number[]);\n    constructor(rgb: number[], alpha: number);\n    constructor(rgb: number[], alpha: number, text: string);\n    constructor(color: number);\n    constructor(red: number, green: number, blue: number);\n    constructor(red: number, green: number, blue: number, alpha: number);\n    constructor(red: number, green: number, blue: number, alpha?: number, text?: string);\n\n    constructor(p1: number | string | number[], p2?: number, p3?: number | string, p4?: number, p5?: string) {\n        if (typeof p1 === \"number\") {\n            if (typeof p2 === \"undefined\") {\n                this.constructFromSingleNumber(p1);\n            }\n            else if (typeof p3 === \"number\") {\n                if (typeof p4 === \"number\") {\n                    this.constructFromRgb([p1, p2, p3], p4);\n                }\n                else {\n                    this.constructFromRgb([p1, p2, p3], 1);\n                }\n\n                if (typeof p5 === \"string\") {\n                    this.textInternal = p5;\n                }\n            }\n        }\n        else if (typeof p1 === \"string\") {\n            this.constructFromString(p1);\n        }\n        else if (p1.length === 3) {\n            if (typeof p2 === \"number\") {\n                this.constructFromRgb([p1[0], p1[1], p1[2]], p2);\n            }\n            else {\n                this.constructFromRgb([p1[0], p1[1], p1[2]], 1);\n            }\n\n            if (typeof p3 === \"string\") {\n                this.textInternal = p3;\n            }\n        }\n\n        this.updateHslFromRgb();\n    }\n\n    /**\n     * Creates this instance from the specified number value. This is a numeric\n     * representation such as 0x112233.\n     *\n     * @param color The color has a number value.\n     */\n    private constructFromSingleNumber(color: number): void {\n        this.rgbInternal[0] = color & 0xff;\n        color >>= 8;\n        this.rgbInternal[1] = color & 0xff;\n        color >>= 8;\n        this.rgbInternal[2] = color & 0xff;\n\n        this.alphaInternal = 1;\n    }\n\n    /**\n     * Creates this instance from the specified text value. This can be either\n     * a `#` hex value, an `rgba` value, an `rgb` value or a named HTML color.\n     *\n     * @param color The string that represents the color.\n     */\n    private constructFromString(color: string): void {\n        // Check for colors in #ee7625 format.\n        if (color.startsWith(\"#\")) {\n            const rgba = parseHexString(color);\n            this.rgbInternal[0] = normalize(rgba[0], 0, 255);\n            this.rgbInternal[1] = normalize(rgba[1], 0, 255);\n            this.rgbInternal[2] = normalize(rgba[2], 0, 255);\n            this.alphaInternal = normalize(rgba[3], 0, 1);\n        }\n\n        // Check for colors in rgba(255, 99, 71, 0.5) format.\n        else if (color.startsWith(\"rgba\")) {\n            const parts = color.replace(/ /g, \"\")\n                .replace(\"rgba(\", \"\")\n                .replace(\")\", \"\")\n                .split(\",\");\n\n            if (parts.length === 4) {\n                this.rgbInternal[0] = normalize(asFloat(parts[0].trim()), 0, 255);\n                this.rgbInternal[1] = normalize(asFloat(parts[1].trim()), 0, 255);\n                this.rgbInternal[2] = normalize(asFloat(parts[2].trim()), 0, 255);\n                this.alphaInternal = normalize(asFloat(parts[3].trim()), 0, 1);\n            }\n        }\n\n        // Check for colors in rgb(255, 99, 71) format.\n        else if (color.startsWith(\"rgb\")) {\n            const parts = color.replace(/ /g, \"\")\n                .replace(\"rgb(\", \"\")\n                .replace(\")\", \"\")\n                .split(\",\");\n\n            if (parts.length === 3) {\n                this.rgbInternal[0] = normalize(asFloat(parts[0].trim()), 0, 255);\n                this.rgbInternal[1] = normalize(asFloat(parts[1].trim()), 0, 255);\n                this.rgbInternal[2] = normalize(asFloat(parts[2].trim()), 0, 255);\n                this.alphaInternal = 1;\n            }\n        }\n\n        // Check if it is a named color.\n        else {\n            const namedColor = RockColor.getColorFromKeyword(color);\n\n            if (namedColor != null) {\n                this.rgbInternal[0] = namedColor.r;\n                this.rgbInternal[1] = namedColor.g;\n                this.rgbInternal[2] = namedColor.b;\n                this.alpha = namedColor.alpha;\n            }\n        }\n    }\n\n    /**\n     * Creates this instance from the specified RGB and alpha values.\n     *\n     * @param rgb The RGB components, this must always have 3 components.\n     * @param alpha The alpha value to assign.\n     */\n    private constructFromRgb(rgb: number[], alpha: number): void {\n        this.rgbInternal[0] = normalize(rgb[0], 0, 255);\n        this.rgbInternal[1] = normalize(rgb[1], 0, 255);\n        this.rgbInternal[2] = normalize(rgb[2], 0, 255);\n        this.alphaInternal = normalize(alpha, 0, 1);\n    }\n\n    // #endregion\n\n    // #region Private Functions\n\n    /**\n     * Updates the HSL values of the color from the RGB values.\n     */\n    private updateHslFromRgb(): void {\n        // Convert the RGB values to representations of between 0.0 and 1.0.\n        const red = this.rgbInternal[0] / 255;\n        const green = this.rgbInternal[1] / 255;\n        const blue = this.rgbInternal[2] / 255;\n\n        // Get the maximum value between all three components.\n        const max = Math.max(red, green, blue);\n\n        // Get the minmimum value between all three components.\n        const min = Math.min(red, green, blue);\n\n        // Update the luminosity.\n        this.luminosityInternal = (max + min) / 2;\n\n        const diff = max - min;\n\n        // Update the hue and saturation values.\n        if (Math.abs(diff) < 0.00001) {\n            this.saturationInternal = 0;\n            this.hueInternal = 0;\n        }\n        else {\n            if (this.luminosityInternal <= 0.5) {\n                this.saturationInternal = diff / (max + min);\n            }\n            else {\n                this.saturationInternal = diff / (2 - max - min);\n            }\n\n            const redDist = (max - red) / diff;\n            const greenDist = (max - green) / diff;\n            const blueDist = (max - blue) / diff;\n\n            let hue: number;\n\n            if (red == max) {\n                hue = blueDist - greenDist;\n            }\n            else if (green == max) {\n                hue = 2 + redDist - blueDist;\n            }\n            else {\n                hue = 4 + greenDist - redDist;\n            }\n\n            hue = hue * 60;\n            if (hue < 0) {\n                hue += 360;\n            }\n\n            this.hueInternal = normalize(hue, 0, 360);\n        }\n    }\n\n    /**\n     * Updates the RGB values of the color from the HSL values.\n     */\n    private updateRgbFromHsl(): void {\n        const p2 = this.luminosityInternal <= 0.5\n            ? this.luminosityInternal * (1 + this.saturationInternal)\n            : this.luminosityInternal + this.saturationInternal - this.luminosityInternal * this.saturationInternal;\n        const p1 = 2 * this.luminosityInternal - p2;\n\n        let red: number;\n        let green: number;\n        let blue: number;\n\n        if (this.saturationInternal === 0) {\n            red = this.luminosityInternal;\n            green = this.luminosityInternal;\n            blue = this.luminosityInternal;\n        }\n        else {\n            red = qqhToRgb(p1, p2, this.hueInternal + 120);\n            green = qqhToRgb(p1, p2, this.hueInternal);\n            blue = qqhToRgb(p1, p2, this.hueInternal - 120);\n        }\n\n        // Convert the decimal RGB values to 0 to 255 range.\n        this.rgbInternal[0] = normalize(Math.round(red * 255), 0, 255);\n        this.rgbInternal[1] = normalize(Math.round(green * 255), 0, 255);\n        this.rgbInternal[2] = normalize(Math.round(blue * 255), 0, 255);\n    }\n\n    // #endregion\n\n    // #region Public Functions\n\n    /**\n     * Gets the {@link RockColor} that corresponds to the HTML color keyword.\n     *\n     * @param keyword The HTML color keyword.\n     *\n     * @returns An instance of {@link RockColor} that represents the color or `null` if not found.\n     */\n    public static getColorFromKeyword(keyword: string): RockColor | null {\n        if (keyword === \"transparent\") {\n            return new RockColor(0, 0, 0, 0, keyword);\n        }\n\n        const rgb = html4Colors.get(keyword);\n        if (rgb !== undefined) {\n            const red = (rgb >> 16) & 0xff;\n            const green = (rgb >> 8) & 0xff;\n            const blue = rgb & 0xff;\n\n            return new RockColor(red, green, blue, 1, keyword);\n        }\n\n        return null;\n    }\n\n    /**\n     * Calculates the contrast ratio between two colors.\n     *\n     * @param color1 The first color.\n     * @param color2 The second color.\n     *\n     * @returns A number that represents the contrast ratio between the two colors.\n     */\n    public static calculateContrastRatio(color1: RockColor, color2: RockColor): number {\n        // Formula: (L1 + 0.05) / (L2 + 0.05)\n        // https://medium.muz.li/the-science-of-color-contrast-an-expert-designers-guide-33e84c41d156\n        // https://www.w3.org/TR/2012/NOTE-WCAG20-TECHS-20120103/G17.html\n        // L1 = Lighter color\n        // L2 = Darker color\n\n        let l1: RockColor;\n        let l2: RockColor;\n\n        // Determine the lighter and darker color.\n        if (color1.luminosity > color2.luminosity) {\n            l1 = color1;\n            l2 = color2;\n        }\n        else {\n            l1 = color2;\n            l2 = color1;\n        }\n\n        return (l1.luma + 0.05) / (l2.luma + 0.05);\n    }\n\n    /**\n     * Creates a color pair from a single color with logic for light and\n     * dark modes.\n     *\n     * @param color The base color to use when creating the color pair.\n     * @param colorScheme The color scheme the color will be used in.\n     *\n     * @returns A new instance of {@link ColorPair}.\n     */\n    public static calculateColorPair(color: RockColor, colorScheme: ColorScheme = ColorScheme.Light): ColorPair {\n        const foregroundColor = RockColor.calculateColorRecipe(color, ColorRecipe.Darkest);\n        const backgroundColor = RockColor.calculateColorRecipe(color, ColorRecipe.Lightest);\n\n        const colorPair = new ColorPair(foregroundColor, backgroundColor);\n\n        if (colorScheme === ColorScheme.Dark) {\n            colorPair.flip();\n        }\n\n        return colorPair;\n    }\n\n    /**\n     * Creates a recipe color from the provided color.\n     *\n     * @param color The base color to calculate the new color from.\n     * @param recipe The recipe to use when calculating the new color.\n     *\n     * @returns A new instance of {@link RockColor}.\n     */\n    public static calculateColorRecipe(color: RockColor, recipe: ColorRecipe): RockColor {\n        const recipeColor = color.clone();\n        let recipeSaturation = 0;\n        let recipeLuminosity = 0;\n\n        switch (recipe) {\n            case ColorRecipe.Lightest:\n                recipeSaturation = 0.96;\n                recipeLuminosity = 0.95;\n                break;\n\n            case ColorRecipe.Light:\n                recipeSaturation = 0.44;\n                recipeLuminosity = 0.84;\n                break;\n\n            case ColorRecipe.Medium:\n                recipeSaturation = 0.20;\n                recipeLuminosity = 0.66;\n                break;\n\n            case ColorRecipe.Dark:\n                recipeSaturation = 0.30;\n                recipeLuminosity = 0.45;\n                break;\n\n            case ColorRecipe.Darkest:\n                recipeSaturation = 0.60;\n                recipeLuminosity = 0.20;\n                break;\n\n            case ColorRecipe.Primary:\n                recipeSaturation = 0.70;\n                recipeLuminosity = 0.80;\n                break;\n        }\n\n        // If the saturation of the original color is very low then we'll use\n        // a different recipe so the color looks more like the original (which\n        // would be gray).\n        if (color.saturation <= 0.15) {\n            recipeSaturation = color.saturation;\n        }\n\n        recipeColor.saturation = recipeSaturation;\n        recipeColor.luminosity = recipeLuminosity;\n\n        return recipeColor;\n    }\n\n    /**\n     * Lightens the color by the provided percentage.\n     *\n     * @param percentage The percentage amount to lighten the color as a number between 0 and 100.\n     */\n    public lighten(percentage: number): void {\n        this.luminosity = this.luminosity + (percentage / 100);\n    }\n\n    /**\n     * Darkens the color by the provided percentage.\n     *\n     * @param percentage The percentage amount to darken the color as a number between 0 and 100.\n     */\n    public darken(percentage: number): void {\n        this.luminosity = this.luminosity - (percentage / 100);\n    }\n\n    /**\n     * Saturates the color by the provided percentage.\n     *\n     * @param percentage The percentage amount to saturate the color as a number between 0 and 100.\n     */\n    public saturate(percentage: number): void {\n        this.saturation = this.saturation + (percentage / 100);\n    }\n\n    /**\n     * Desaturates the color by the provided percentage.\n     *\n     * @param percentage The percentage amount to desaturate the color as a number between 0 and 100.\n     */\n    public desaturate(percentage: number): void {\n        this.saturation = this.saturation - (percentage / 100);\n    }\n\n    /**\n     * Increases the opacity level by the given percentage. This makes the\n     * color less transparent and more opaque.\n     *\n     * @param percentage The percentage amount to adjust the alpha as a number between 0 and 100.\n     */\n    public fadeIn(percentage: number): void {\n        this.alpha = this.alpha + (percentage / 100);\n    }\n\n    /**\n     * Decreases the opacity level by the given percentage. This makes the\n     * color more transparent and less opaque.\n     *\n     * @param percentage The percentage amount to adjust the alpha as a number between 0 and 100.\n     */\n    public fadeOut(percentage: number): void {\n        this.alpha = this.alpha - (percentage / 100);\n    }\n\n    /**\n     * Adjusts the hue by the specified percentage.\n     *\n     * @param percentage The percentage to adjust the hue by as a value between -100 and 100.\n     */\n    public adjustHueByPercent(percentage: number): void {\n        this.hue = this.hue + (360 * (percentage / 100));\n    }\n\n    /**\n     * Adjusts the hue by the specified number of degrees.\n     *\n     * @param degrees The number of degrees to adjust the hue by as a value between -360 and 360.\n     */\n    public adjustHueByDegrees(degrees: number): void {\n        this.hue = this.hue + degrees;\n    }\n\n    /**\n     * Tints the specified percentage amount. This mixes this color with white\n     * by the percentage.\n     *\n     * @param percentage The percentage amount as a value between 0 and 100.\n     */\n    public tint(percentage: number): void {\n        this.mix(new RockColor(\"#ffffff\"), percentage);\n    }\n\n    /**\n     * Shades the specified percentage amount. This mixes this color with black\n     * by the percentage.\n     *\n     * @param percentage The percentage amount as a value between 0 and 100.\n     */\n    public shade(percentage: number): void {\n        this.mix(new RockColor(\"#000000\"), percentage);\n    }\n\n    /**\n     * Mixes the specified color into the current color with an optional\n     * percentage amount.\n     *\n     * @param mixColor The color to be mixed into this color.\n     * @param percentage The percentage amount to be mixed as a value between 0 and 100. Defaults to 50.\n     */\n    public mix(mixColor: RockColor, percentage?: number): void {\n        const amount = (percentage ?? 50) / 100;\n\n        this.r = (mixColor.r * amount) + this.r * (1 - amount);\n        this.g = (mixColor.g * amount) + this.g * (1 - amount);\n        this.b = (mixColor.b * amount) + this.b * (1 - amount);\n    }\n\n    /**\n     * Turns the color to it's grayscale value.\n     */\n    public grayscale(): void {\n        this.saturate(-100);\n    }\n\n    /**\n     * Creates a clone of this color.\n     *\n     * @returns A new instance that has the same color values as this instance.\n     */\n    public clone(): RockColor {\n        return new RockColor(this.rgbInternal, this.alpha);\n    }\n\n    /**\n     * Converts the current color to a CSS `rgba` string format.\n     *\n     * @returns A string representation of the color.\n     */\n    public toRgba(): string {\n        return `rgba(${Math.floor(this.r)}, ${Math.floor(this.g)}, ${Math.floor(this.b)}, ${this.alpha})`;\n    }\n\n    /**\n     * Converts the current color to an HTML hexadecimal `#rrggbbaa` string\n     * format. If the alpha value is 1 then the \"aa\" component will not be\n     * included.\n     *\n     * @returns Hexadecimal version of the color.\n     */\n    public toHex(): string {\n        const r = Math.round(this.r).toString(16).padStart(2, \"0\");\n        const g = Math.round(this.g).toString(16).padStart(2, \"0\");\n        const b = Math.round(this.b).toString(16).padStart(2, \"0\");\n        const a = Math.round(this.alpha * 255).toString(16).padStart(2, \"0\");\n\n        if (a === \"ff\") {\n            return `#${r}${g}${b}`;\n        }\n        else {\n            return `#${r}${g}${b}${a}`;\n        }\n    }\n\n    /**\n     * Gets a numeric value representing this color. If two colors have the\n     * same RGB and Alpha values then they will return the same value here.\n     *\n     * @returns A numeric value that represents this unique color.\n     */\n    public valueOf(): number {\n        return (this.r + this.g + this.b) * this.alpha;\n    }\n\n    /**\n     * Compares this color against another color to see which one has a higher\n     * value.\n     *\n     * @param otherColor The other color to compare this color to.\n     *\n     * @returns `0` if both colors are the same, `-1` if this color is less than the other color and `1` if this color is greater than the other color.\n     */\n    public compareTo(otherColor: RockColor | undefined | null): number {\n        if (otherColor === undefined || otherColor === null) {\n            return -1;\n        }\n\n        // Check if they are identical.\n        if (this.r === otherColor.r && this.g === otherColor.g && this.b === otherColor.b && this.alpha === otherColor.alpha) {\n            return 0;\n        }\n\n        return this.valueOf() > otherColor.valueOf() ? 1 : -1;\n    }\n\n    /**\n     * Determines if two colors are similar.\n     *\n     * @param otherColor The other color to compare this color to.\n     * @param similarityPercent The minimum percentage to consider the colors similar. This will be between 0 and 1 (defaults to 0.95).\n     * @returns `true` if the colors are N percent similar, where N is the `similarityPercentage`; otherwise, returns `false`.\n     * @example\n     * // this = new RockColor(\"#FFF\")\n     * this.isSimilarTo(new RockColor(\"#FFE\"), 0.95) // `true`, color similarity >= 95%\n     * this.isSimilarTo(new RockColor(\"#FFE\"), 0.99) // `false`, color similarity < 99%\n     * this.isSimilarTo(new RockColor(\"#FFE\"), 1) // `false`, color similarity != 100%\n     * this.isSimilarTo(new RockColor(\"#FFF\"), 1) // `true`, color similarity = 100%\n     */\n    public isSimilarTo(otherColor: RockColor, similarityPercent: number = 0.95): boolean {\n        similarityPercent = normalize(similarityPercent, 0, 1);\n\n        if (similarityPercent === 0) {\n            // A color similarity of 0% will always return `true`\n            // as the colors do not have to be similar at all.\n            return true;\n        }\n\n        if (this.compareTo(otherColor) === 0) {\n            // The same colors will always return `true`\n            // regardless of the percent similar passed in.\n            return true;\n        }\n\n        if (similarityPercent === 1) {\n            // The colors are not the same at this point\n            // but the similarity percentage was set to 100%,\n            // so return `false`.\n            return false;\n        }\n\n        // Calculate the actual similarity percent and compare the actual and expected values.\n\n        function calculateWeightedColorDistance(r1: number, g1: number, b1: number, r2: number, g2: number, b2: number, maxColorValue: number): number {\n            const redDiffSquared = Math.pow(r2 - r1, 2);\n            const greenDiffSquared = Math.pow(g2 - g1, 2);\n            const blueDiffSquared = Math.pow(b2 - b1, 2);\n            const redAverage = (r2 + r1) / 2;\n            const redAveragePercentage = redAverage / maxColorValue;\n\n            return Math.sqrt(\n                ((2 + redAveragePercentage) * redDiffSquared) +\n                (4 * greenDiffSquared) +\n                ((3 - redAveragePercentage) * blueDiffSquared)\n            );\n        }\n\n        function calculateSimilarityPercent(r1: number, g1: number, b1: number, r2: number, g2: number, b2: number, maxColorValue: number): number {\n            const maxDistance = calculateWeightedColorDistance(\n                maxColorValue, maxColorValue, maxColorValue,\n                0, 0, 0,\n                maxColorValue);\n\n            const colorDistance = calculateWeightedColorDistance(\n                r1, g1, b1,\n                r2, g2, b2,\n                maxColorValue);\n\n            return 1 - (colorDistance / maxDistance);\n        }\n\n        // Compare the sRGB values first.\n        const sRgb = this.toStandardRgb();\n        const otherSRgb = otherColor.toStandardRgb();\n\n        let actualSimilarityPercent = calculateSimilarityPercent(\n            sRgb.red, sRgb.green, sRgb.blue,\n            otherSRgb.red, otherSRgb.green, otherSRgb.blue,\n            1);\n\n        if (actualSimilarityPercent >= similarityPercent) {\n            return true;\n        }\n        // Only fallback to comparing RGB values if the previous result was close (within 5%).\n        else if (similarityPercent - actualSimilarityPercent <= 0.05) {\n            actualSimilarityPercent = calculateSimilarityPercent(\n                this.r, this.g, this.b,\n                otherColor.r, otherColor.g, otherColor.b,\n                255);\n\n            return actualSimilarityPercent >= similarityPercent;\n        }\n        else {\n            return false;\n        }\n    }\n\n    /**\n     * Gets the sRGB value of this color.\n     *\n     * @returns This color in the standard RGB color space.\n     */\n    private toStandardRgb(): { red: number, green: number, blue: number } {\n        const linearR = this.r / 255;\n        const linearG = this.g / 255;\n        const linearB = this.b / 255;\n\n        const red = (linearR <= 0.03928) ? linearR / 12.92 : Math.pow((linearR + 0.055) / 1.055, 2.4);\n        const green = (linearG <= 0.03928) ? linearG / 12.92 : Math.pow((linearG + 0.055) / 1.055, 2.4);\n        const blue = (linearB <= 0.03928) ? linearB / 12.92 : Math.pow((linearB + 0.055) / 1.055, 2.4);\n\n        return { red, green, blue };\n    }\n\n    // #endregion\n}\n"],"names":["html4Colors","Map","html4ColorsReverse","forEach","value","key","has","set","normalize","minimum","maximum","qqhToRgb","q1","q2","hue","parseHexValue","hex","parseInt","isNaN","parseHexString","startsWith","substring","length","repeat","asFloat","str","num","parseFloat","RockColor","alpha","alphaInternal","r","rgbInternal","updateHslFromRgb","g","b","luma","_this$toStandardRgb","toStandardRgb","red","green","blue","hueInternal","updateRgbFromHsl","saturation","saturationInternal","luminosity","luminosityInternal","toHex","isLight","isDark","constructor","p1","p2","p3","p4","p5","_defineProperty","constructFromSingleNumber","constructFromRgb","textInternal","constructFromString","color","rgba","parts","replace","split","trim","namedColor","getColorFromKeyword","rgb","max","Math","min","diff","abs","redDist","greenDist","blueDist","round","keyword","get","undefined","calculateContrastRatio","color1","color2","l1","l2","calculateColorPair","colorScheme","arguments","ColorScheme","Light","foregroundColor","calculateColorRecipe","ColorRecipe","Darkest","backgroundColor","Lightest","colorPair","ColorPair","Dark","flip","recipe","recipeColor","clone","recipeSaturation","recipeLuminosity","Medium","Primary","lighten","percentage","darken","saturate","desaturate","fadeIn","fadeOut","adjustHueByPercent","adjustHueByDegrees","degrees","tint","mix","shade","mixColor","amount","grayscale","toRgba","concat","floor","toString","padStart","a","valueOf","compareTo","otherColor","isSimilarTo","similarityPercent","calculateWeightedColorDistance","r1","g1","b1","r2","g2","b2","maxColorValue","redDiffSquared","pow","greenDiffSquared","blueDiffSquared","redAverage","redAveragePercentage","sqrt","calculateSimilarityPercent","maxDistance","colorDistance","sRgb","otherSRgb","actualSimilarityPercent","linearR","linearG","linearB"],"mappings":"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"}