chromakitx 1.0.2

A comprehensive color manipulation library for Rust
Documentation
// SPDX-FileCopyrightText: 2023 CELESTIFYX Team
// SPDX-License-Identifier: GPL-3.0-or-later

use super::EnumColor;

use crate::{
    ColorFormattable,
    define_css_colors
};

define_css_colors! {
    AliceBlue = (240, 248, 255),
    AntiqueWhite = (250, 235, 215),
    Aqua = (0, 255, 255),
    Aquamarine = (127, 255, 212),
    Azure = (240, 255, 255),
    Beige = (245, 245, 220),
    Bisque = (255, 228, 196),
    Black = (0, 0, 0),
    BlanchedAlmond = (255, 235, 205),
    Blue = (0, 0, 255),
    BlueViolet = (138, 43, 226),
    Brown = (165, 42, 42),
    BurlyWood = (222, 184, 135),
    CadetBlue = (95, 158, 160),
    Chartreuse = (127, 255, 0),
    Chocolate = (210, 105, 30),
    Coral = (255, 127, 80),
    CornflowerBlue = (100, 149, 237),
    Cornsilk = (255, 248, 220),
    Crimson = (220, 20, 60),
    DarkBlue = (0, 0, 139),
    DarkCyan = (0, 139, 139),
    DarkGoldenRod = (184, 134, 11),
    DarkGray = (169, 169, 169),
    DarkGrey = (169, 169, 169),
    DarkGreen = (0, 100, 0),
    DarkKhaki = (189, 183, 107),
    DarkMagenta = (139, 0, 139),
    DarkOliveGreen = (85, 107, 47),
    DarkOrange = (255, 140, 0),
    DarkOrchid = (153, 50, 204),
    DarkRed = (139, 0, 0),
    DarkSalmon = (233, 150, 122),
    DarkSeaGreen = (143, 188, 143),
    DarkSlateBlue = (72, 61, 139),
    DarkSlateGray = (47, 79, 79),
    DarkSlateGrey = (47, 79, 79),
    DarkTurquoise = (0, 206, 209),
    DarkViolet = (148, 0, 211),
    DeepPink = (255, 20, 147),
    DeepSkyBlue = (0, 191, 255),
    DimGray = (105, 105, 105),
    DimGrey = (105, 105, 105),
    DodgerBlue = (30, 144, 255),
    FireBrick = (178, 34, 34),
    FloralWhite = (255, 250, 240),
    ForestGreen = (34, 139, 34),
    Fuchsia = (255, 0, 255),
    Gainsboro = (220, 220, 220),
    GhostWhite = (248, 248, 255),
    Gold = (255, 215, 0),
    GoldenRod = (218, 165, 32),
    Gray = (128, 128, 128),
    Grey = (128, 128, 128),
    Green = (0, 128, 0),
    GreenYellow = (173, 255, 47),
    HoneyDew = (240, 255, 240),
    HotPink = (255, 105, 180),
    IndianRed = (205, 92, 92),
    Indigo = (75, 0, 130),
    Ivory = (255, 255, 240),
    Khaki = (240, 230, 140),
    Lavender = (230, 230, 250),
    LavenderBlush = (255, 240, 245),
    LawnGreen = (124, 252, 0),
    LemonChiffon = (255, 250, 205),
    LightBlue = (173, 216, 230),
    LightCoral = (240, 128, 128),
    LightCyan = (224, 255, 255),
    LightGoldenRodYellow = (250, 250, 210),
    LightGray = (211, 211, 211),
    LightGrey = (211, 211, 211),
    LightGreen = (144, 238, 144),
    LightPink = (255, 182, 193),
    LightSalmon = (255, 160, 122),
    LightSeaGreen = (32, 178, 170),
    LightSkyBlue = (135, 206, 250),
    LightSlateGray = (119, 136, 153),
    LightSlateGrey = (119, 136, 153),
    LightSteelBlue = (176, 196, 222),
    LightYellow = (255, 255, 224),
    Lime = (0, 255, 0),
    LimeGreen = (50, 205, 50),
    Linen = (250, 240, 230),
    Magenta = (255, 0, 255),
    Maroon = (128, 0, 0),
    MediumAquaMarine = (102, 205, 170),
    MediumBlue = (0, 0, 205),
    MediumOrchid = (186, 85, 211),
    MediumPurple = (147, 112, 219),
    MediumSeaGreen = (60, 179, 113),
    MediumSlateBlue = (123, 104, 238),
    MediumSpringGreen = (0, 250, 154),
    MediumTurquoise = (72, 209, 204),
    MediumVioletRed = (199, 21, 133),
    MidnightBlue = (25, 25, 112),
    MintCream = (245, 255, 250),
    MistyRose = (255, 228, 225),
    Moccasin = (255, 228, 181),
    NavajoWhite = (255, 222, 173),
    Navy = (0, 0, 128),
    OldLace = (253, 245, 230),
    Olive = (128, 128, 0),
    OliveDrab = (107, 142, 35),
    Orange = (255, 165, 0),
    OrangeRed = (255, 69, 0),
    Orchid = (218, 112, 214),
    PaleGoldenRod = (238, 232, 170),
    PaleGreen = (152, 251, 152),
    PaleTurquoise = (175, 238, 238),
    PaleVioletRed = (219, 112, 147),
    PapayaWhip = (255, 239, 213),
    PeachPuff = (255, 218, 185),
    Peru = (205, 133, 63),
    Pink = (255, 192, 203),
    Plum = (221, 160, 221),
    PowderBlue = (176, 224, 230),
    Purple = (128, 0, 128),
    RebeccaPurple = (102, 51, 153),
    Red = (255, 0, 0),
    RosyBrown = (188, 143, 143),
    RoyalBlue = (65, 105, 225),
    SaddleBrown = (139, 69, 19),
    Salmon = (250, 128, 114),
    SandyBrown = (244, 164, 96),
    SeaGreen = (46, 139, 87),
    SeaShell = (255, 245, 238),
    Sienna = (160, 82, 45),
    Silver = (192, 192, 192),
    SkyBlue = (135, 206, 235),
    SlateBlue = (106, 90, 205),
    SlateGray = (112, 128, 144),
    SlateGrey = (112, 128, 144),
    Snow = (255, 250, 250),
    SpringGreen = (0, 255, 127),
    SteelBlue = (70, 130, 180),
    Tan = (210, 180, 140),
    Teal = (0, 128, 128),
    Thistle = (216, 191, 216),
    Tomato = (255, 99, 71),
    Turquoise = (64, 224, 208),
    Violet = (238, 130, 238),
    Wheat = (245, 222, 179),
    White = (255, 255, 255),
    WhiteSmoke = (245, 245, 245),
    Yellow = (255, 255, 0),
    YellowGreen = (154, 205, 50)
}

impl ColorFormattable for CssColor {
    fn format(&self, is_background: bool) -> String {
        let (r, g, b): (u8, u8, u8) = self.rgb();

        if is_background {
            format!("\x1B[48;2;{};{};{}m", r, g, b)
        } else {
            format!("\x1B[38;2;{};{};{}m", r, g, b)
        }
    }
}

impl EnumColor for CssColor {
    fn from_name(name: &str) -> Option<Self> {
        Self::from_str(name).ok()
    }
}