diff --git a/build.rs b/build.rs index f159d5d..5772121 100644 --- a/build.rs +++ b/build.rs @@ -16,11 +16,6 @@ use proc_macro2::TokenStream; use quote::{format_ident, quote}; use serde::Deserialize; -// the palette json currently has no order field for ANSI colors. -const ANSI_COLOR_ORDER: [&str; 8] = [ - "black", "red", "green", "yellow", "blue", "magenta", "cyan", "white", -]; - #[derive(Debug, Deserialize)] struct Palette { #[allow(dead_code)] @@ -64,13 +59,16 @@ struct Hsl { #[derive(Debug, Deserialize)] struct AnsiColorPair { + name: String, + order: u32, normal: AnsiColor, bright: AnsiColor, } #[derive(Debug, Deserialize)] struct AnsiColor { - hex: String, + rgb: Rgb, + hsl: Hsl, code: u8, } @@ -95,7 +93,6 @@ fn main() -> Result<(), Box> { make_color_name_display_impl(sample_flavor), make_color_name_identifier_impl(sample_flavor), make_color_name_fromstr_impl_tokens(sample_flavor), - make_flavor_ansi_colors_struct(sample_flavor), make_flavor_ansi_colors_all_impl(sample_flavor), make_ansi_color_name_enum(sample_flavor), @@ -103,7 +100,6 @@ fn main() -> Result<(), Box> { make_ansi_color_name_display_impl(sample_flavor), make_ansi_color_name_identifier_impl(sample_flavor), make_ansi_color_name_fromstr_impl_tokens(sample_flavor), - make_palette_const(&palette), ]; let ast = syn::parse2(tokens.into_iter().collect())?; @@ -154,12 +150,11 @@ fn colors_in_order(flavor: &Flavor) -> std::vec::IntoIter<(&String, &Color)> { .sorted_by(|(_, a), (_, b)| a.order.cmp(&b.order)) } -fn ansi_colors_in_order(flavor: &Flavor) -> std::vec::IntoIter<(&str, &AnsiColorPair)> { - ANSI_COLOR_ORDER +fn ansi_colors_in_order(flavor: &Flavor) -> std::vec::IntoIter<(&String, &AnsiColorPair)> { + flavor + .ansi_colors .iter() - .map(|key| (*key, &flavor.ansi_colors[*key])) - .collect::>() - .into_iter() + .sorted_by(|(_, a), (_, b)| a.order.cmp(&b.order)) } fn make_flavor_colors_struct(sample_flavor: &Flavor) -> TokenStream { @@ -182,24 +177,6 @@ fn make_flavor_colors_struct(sample_flavor: &Flavor) -> TokenStream { } } -fn make_flavor_colors_all_impl(sample_flavor: &Flavor) -> TokenStream { - let items = colors_in_order(sample_flavor).map(|(identifier, _)| { - let ident = format_ident!("{identifier}"); - quote! { &self.#ident } - }); - quote! { - impl FlavorColors { - /// Get an array of the colors in the flavor. - #[must_use] - pub const fn all_colors(&self) -> [&Color; 26] { - [ - #(#items),* - ] - } - } - } -} - fn make_flavor_ansi_colors_struct(sample_flavor: &Flavor) -> TokenStream { let colors = ansi_colors_in_order(sample_flavor).map(|(k, _)| { let ident = format_ident!("{k}"); @@ -211,17 +188,20 @@ fn make_flavor_ansi_colors_struct(sample_flavor: &Flavor) -> TokenStream { quote! { /// All of the ANSI colors for a particular flavor of Catppuccin. /// Obtained via [`Flavor::ansi_colors`]. - #[derive(Clone, Copy, Debug, Eq, PartialEq)] + #[derive(Clone, Copy, Debug, PartialEq)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct FlavorAnsiColors { #(#colors),* } /// A pair of ANSI colors - normal and bright. - /// TODO: Add name into here - #[derive(Clone, Copy, Debug, Eq, PartialEq)] + #[derive(Clone, Copy, Debug, PartialEq)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct AnsiColorPair { + /// The [`AnsiColorName`] for this color. + pub name: AnsiColorName, + /// Order of the ANSI color in the palette spec. + pub order: u32, /// The normal color. pub normal: AnsiColor, /// The bright color. @@ -229,17 +209,39 @@ fn make_flavor_ansi_colors_struct(sample_flavor: &Flavor) -> TokenStream { } /// A single ANSI color. - #[derive(Clone, Copy, Debug, Eq, PartialEq)] + #[derive(Clone, Copy, Debug, PartialEq)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct AnsiColor { /// The color represented as a six-digit hex string with a leading hash (#). pub hex: Hex, + /// The color represented as individual red, green, and blue channels. + pub rgb: Rgb, + /// The color represented as individual hue, saturation, and lightness channels. + pub hsl: Hsl, /// The color's ANSI code. pub code: u8, } } } +fn make_flavor_colors_all_impl(sample_flavor: &Flavor) -> TokenStream { + let items = colors_in_order(sample_flavor).map(|(identifier, _)| { + let ident = format_ident!("{identifier}"); + quote! { &self.#ident } + }); + quote! { + impl FlavorColors { + /// Get an array of the colors in the flavor. + #[must_use] + pub const fn all_colors(&self) -> [&Color; 26] { + [ + #(#items),* + ] + } + } + } +} + fn make_flavor_ansi_colors_all_impl(sample_flavor: &Flavor) -> TokenStream { let items = ansi_colors_in_order(sample_flavor).map(|(identifier, _)| { let ident = format_ident!("{identifier}"); @@ -450,7 +452,7 @@ fn make_ansi_color_name_identifier_impl(sample_flavor: &Flavor) -> TokenStream { /// Example: /// /// ```rust - /// let black = catppuccin::PALETTE.latte.ansi_colors.normal.black; + /// let black = catppuccin::PALETTE.latte.ansi_colors.black; /// assert_eq!(black.name.to_string(), "Black"); /// assert_eq!(black.name.identifier(), "black"); /// ``` @@ -578,46 +580,66 @@ fn make_color_entry(identifier: &str, color: &Color) -> TokenStream { fn make_ansi_color_entry(identifier: &str, ansi_color_pair: &AnsiColorPair) -> TokenStream { let ident = format_ident!("{}", identifier); let AnsiColorPair { - normal: AnsiColor { - hex: normal_hex, - code: normal_code, - }, - bright: AnsiColor { - hex: bright_hex, - code: bright_code, - }, + name, + order, + normal: + AnsiColor { + code: normal_code, + rgb: + Rgb { + r: normal_r, + g: normal_g, + b: normal_b, + }, + hsl: + Hsl { + h: normal_h, + s: normal_s, + l: normal_l, + }, + .. + }, + bright: + AnsiColor { + code: bright_code, + rgb: + Rgb { + r: bright_r, + g: bright_g, + b: bright_b, + }, + hsl: + Hsl { + h: bright_h, + s: bright_s, + l: bright_l, + }, + .. + }, } = ansi_color_pair; - // we don't get RGB from the palette json for ansi colours, so we have to - // parse the hex string into an RGB and then wrap that in Hex(...) - let (normal_r, normal_g, normal_b) = parse_hex_string(normal_hex); - let (bright_r, bright_g, bright_b) = parse_hex_string(bright_hex); - - let normal_hex = quote! { Hex(Rgb { r: #normal_r, g: #normal_g, b: #normal_b }) }; - let bright_hex = quote! { Hex(Rgb { r: #bright_r, g: #bright_g, b: #bright_b }) }; + let ansi_name_variant = format_ident!("{}", name); + let normal_rgb = quote! { Rgb { r: #normal_r, g: #normal_g, b: #normal_b } }; + let normal_hsl = quote! { Hsl { h: #normal_h, s: #normal_s, l: #normal_l } }; + let bright_rgb = quote! { Rgb { r: #bright_r, g: #bright_g, b: #bright_b } }; + let bright_hsl = quote! { Hsl { h: #bright_h, s: #bright_s, l: #bright_l } }; quote! { #ident: AnsiColorPair { + name: AnsiColorName::#ansi_name_variant, + order: #order, normal: AnsiColor { - hex: #normal_hex, + hex: Hex(#normal_rgb), + rgb: #normal_rgb, + hsl: #normal_hsl, code: #normal_code, }, bright: AnsiColor { - hex: #bright_hex, + hex: Hex(#bright_rgb), + rgb: #bright_rgb, + hsl: #bright_hsl, code: #bright_code, } } } } - -fn parse_hex_string(hex: &str) -> (u8, u8, u8) { - let hex = hex - .strip_prefix('#') - .expect("hex string should start with #"); - let hex = u32::from_str_radix(hex, 16).expect("hex string should be valid hexadecimal"); - ( - ((hex >> 16) & 0xff) as u8, - ((hex >> 8) & 0xff) as u8, - (hex & 0xff) as u8, - ) -} diff --git a/examples/simple.rs b/examples/simple.rs index d8f5cf8..45dcd35 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -1,5 +1,5 @@ //! Simple example showing how to get colors from the Catppuccin palette. -use catppuccin::{AnsiColor, ColorName, Rgb, PALETTE}; +use catppuccin::{AnsiColorPair, ColorName, Rgb, PALETTE}; fn main() { let latte_teal = PALETTE.latte.colors.teal; @@ -22,10 +22,32 @@ fn main() { println!("Mocha's {} is {}", mocha_mauve.name, mocha_mauve.hex); - // TODO: Add implementation for `.name` to get the name of the ANSI colour - for ansi_color in mocha.ansi_colors.iter() { - let AnsiColor { hex: normal_hex, code: normal_code } = ansi_color.normal; - let AnsiColor { hex: bright_hex, code: bright_code } = ansi_color.bright; - print!("[{normal_code}]: ") + for AnsiColorPair { + name, + normal, + bright, + .. + } in mocha.ansi_colors.iter() + { + println!( + r#" + Mocha ANSI {}: + Hex: {}, + RGB: {:?}, + HSL: {:?}, + Code: {} + "#, + name, normal.hex, normal.rgb, normal.hsl, normal.code + ); + println!( + r#" + Mocha Bright ANSI {}: + Hex: {}, + RGB: {:?}, + HSL: {:?}, + Code: {} + "#, + name, bright.hex, bright.rgb, bright.hsl, bright.code + ); } } diff --git a/src/lib.rs b/src/lib.rs index 328227e..3f45e79 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -182,6 +182,7 @@ pub struct ColorIterator<'a> { } /// An iterator over the ANSI colors in a flavor. +/// Obtained via [`FlavorAnsiColors::iter()`]. pub struct AnsiColorIterator<'a> { ansi_colors: &'a FlavorAnsiColors, current: usize, diff --git a/src/palette.json b/src/palette.json index 54767c9..c519d8b 100644 --- a/src/palette.json +++ b/src/palette.json @@ -1,5 +1,5 @@ { - "version": "1.6.0", + "version": "1.7.0", "latte": { "name": "Latte", "emoji": "🌻", @@ -430,11 +430,31 @@ "normal": { "name": "Normal", "hex": "#5c5f77", + "rgb": { + "r": 92, + "g": 95, + "b": 119 + }, + "hsl": { + "h": 233.33333333333334, + "s": 0.1279620853080569, + "l": 0.4137254901960784 + }, "code": 0 }, "bright": { "name": "Bright", "hex": "#6c6f85", + "rgb": { + "r": 108, + "g": 111, + "b": 133 + }, + "hsl": { + "h": 232.79999999999998, + "s": 0.10373443983402494, + "l": 0.4725490196078431 + }, "code": 8 } }, @@ -444,11 +464,31 @@ "normal": { "name": "Normal", "hex": "#d20f39", + "rgb": { + "r": 210, + "g": 15, + "b": 57 + }, + "hsl": { + "h": 347.0769230769231, + "s": 0.8666666666666666, + "l": 0.4411764705882353 + }, "code": 1 }, "bright": { "name": "Bright", "hex": "#de293e", + "rgb": { + "r": 222, + "g": 41, + "b": 62 + }, + "hsl": { + "h": 353.0386740331492, + "s": 0.7327935222672065, + "l": 0.515686274509804 + }, "code": 9 } }, @@ -458,11 +498,31 @@ "normal": { "name": "Normal", "hex": "#40a02b", + "rgb": { + "r": 64, + "g": 160, + "b": 43 + }, + "hsl": { + "h": 109.23076923076923, + "s": 0.5763546798029556, + "l": 0.39803921568627454 + }, "code": 2 }, "bright": { "name": "Bright", "hex": "#49af3d", + "rgb": { + "r": 73, + "g": 175, + "b": 61 + }, + "hsl": { + "h": 113.68421052631581, + "s": 0.48305084745762705, + "l": 0.4627450980392157 + }, "code": 10 } }, @@ -472,11 +532,31 @@ "normal": { "name": "Normal", "hex": "#df8e1d", + "rgb": { + "r": 223, + "g": 142, + "b": 29 + }, + "hsl": { + "h": 34.948453608247426, + "s": 0.7698412698412698, + "l": 0.49411764705882355 + }, "code": 3 }, "bright": { "name": "Bright", "hex": "#eea02d", + "rgb": { + "r": 238, + "g": 160, + "b": 45 + }, + "hsl": { + "h": 35.751295336787564, + "s": 0.8502202643171807, + "l": 0.5549019607843138 + }, "code": 11 } }, @@ -486,11 +566,31 @@ "normal": { "name": "Normal", "hex": "#1e66f5", + "rgb": { + "r": 30, + "g": 102, + "b": 245 + }, + "hsl": { + "h": 219.90697674418607, + "s": 0.9148936170212768, + "l": 0.5392156862745098 + }, "code": 4 }, "bright": { "name": "Bright", "hex": "#456eff", + "rgb": { + "r": 69, + "g": 110, + "b": 255 + }, + "hsl": { + "h": 226.77419354838707, + "s": 1, + "l": 0.6352941176470588 + }, "code": 12 } }, @@ -500,11 +600,31 @@ "normal": { "name": "Normal", "hex": "#ea76cb", + "rgb": { + "r": 234, + "g": 118, + "b": 203 + }, + "hsl": { + "h": 316.0344827586207, + "s": 0.7341772151898731, + "l": 0.6901960784313725 + }, "code": 5 }, "bright": { "name": "Bright", "hex": "#fe85d8", + "rgb": { + "r": 254, + "g": 133, + "b": 216 + }, + "hsl": { + "h": 318.8429752066116, + "s": 0.983739837398374, + "l": 0.7588235294117647 + }, "code": 13 } }, @@ -514,11 +634,31 @@ "normal": { "name": "Normal", "hex": "#179299", + "rgb": { + "r": 23, + "g": 146, + "b": 153 + }, + "hsl": { + "h": 183.23076923076923, + "s": 0.7386363636363636, + "l": 0.34509803921568627 + }, "code": 6 }, "bright": { "name": "Bright", "hex": "#2d9fa8", + "rgb": { + "r": 45, + "g": 159, + "b": 168 + }, + "hsl": { + "h": 184.39024390243904, + "s": 0.5774647887323943, + "l": 0.4176470588235294 + }, "code": 14 } }, @@ -528,11 +668,31 @@ "normal": { "name": "Normal", "hex": "#acb0be", + "rgb": { + "r": 172, + "g": 176, + "b": 190 + }, + "hsl": { + "h": 226.6666666666667, + "s": 0.12162162162162159, + "l": 0.7098039215686275 + }, "code": 7 }, "bright": { "name": "Bright", "hex": "#bcc0cc", + "rgb": { + "r": 188, + "g": 192, + "b": 204 + }, + "hsl": { + "h": 225.00000000000003, + "s": 0.13559322033898308, + "l": 0.7686274509803922 + }, "code": 15 } } @@ -968,11 +1128,31 @@ "normal": { "name": "Normal", "hex": "#51576d", + "rgb": { + "r": 81, + "g": 87, + "b": 109 + }, + "hsl": { + "h": 227.14285714285714, + "s": 0.14736842105263157, + "l": 0.37254901960784315 + }, "code": 0 }, "bright": { "name": "Bright", "hex": "#626880", + "rgb": { + "r": 98, + "g": 104, + "b": 128 + }, + "hsl": { + "h": 228.00000000000003, + "s": 0.1327433628318584, + "l": 0.44313725490196076 + }, "code": 8 } }, @@ -982,11 +1162,31 @@ "normal": { "name": "Normal", "hex": "#e78284", + "rgb": { + "r": 231, + "g": 130, + "b": 132 + }, + "hsl": { + "h": 358.8118811881188, + "s": 0.6778523489932885, + "l": 0.7078431372549019 + }, "code": 1 }, "bright": { "name": "Bright", "hex": "#e67172", + "rgb": { + "r": 230, + "g": 113, + "b": 114 + }, + "hsl": { + "h": 359.4871794871795, + "s": 0.7005988023952096, + "l": 0.6725490196078432 + }, "code": 9 } }, @@ -996,11 +1196,31 @@ "normal": { "name": "Normal", "hex": "#a6d189", + "rgb": { + "r": 166, + "g": 209, + "b": 137 + }, + "hsl": { + "h": 95.83333333333331, + "s": 0.4390243902439024, + "l": 0.6784313725490196 + }, "code": 2 }, "bright": { "name": "Bright", "hex": "#8ec772", + "rgb": { + "r": 142, + "g": 199, + "b": 114 + }, + "hsl": { + "h": 100.23529411764706, + "s": 0.431472081218274, + "l": 0.6137254901960785 + }, "code": 10 } }, @@ -1010,11 +1230,31 @@ "normal": { "name": "Normal", "hex": "#e5c890", + "rgb": { + "r": 229, + "g": 200, + "b": 144 + }, + "hsl": { + "h": 39.52941176470588, + "s": 0.6204379562043796, + "l": 0.7313725490196079 + }, "code": 3 }, "bright": { "name": "Bright", "hex": "#d9ba73", + "rgb": { + "r": 217, + "g": 186, + "b": 115 + }, + "hsl": { + "h": 41.764705882352935, + "s": 0.5730337078651685, + "l": 0.6509803921568628 + }, "code": 11 } }, @@ -1024,11 +1264,31 @@ "normal": { "name": "Normal", "hex": "#8caaee", + "rgb": { + "r": 140, + "g": 170, + "b": 238 + }, + "hsl": { + "h": 221.6326530612245, + "s": 0.7424242424242424, + "l": 0.7411764705882353 + }, "code": 4 }, "bright": { "name": "Bright", "hex": "#7b9ef0", + "rgb": { + "r": 123, + "g": 158, + "b": 240 + }, + "hsl": { + "h": 222.05128205128207, + "s": 0.7959183673469388, + "l": 0.711764705882353 + }, "code": 12 } }, @@ -1038,11 +1298,31 @@ "normal": { "name": "Normal", "hex": "#f4b8e4", + "rgb": { + "r": 244, + "g": 184, + "b": 228 + }, + "hsl": { + "h": 316, + "s": 0.7317073170731713, + "l": 0.8392156862745098 + }, "code": 5 }, "bright": { "name": "Bright", "hex": "#f2a4db", + "rgb": { + "r": 242, + "g": 164, + "b": 219 + }, + "hsl": { + "h": 317.6923076923077, + "s": 0.7499999999999998, + "l": 0.7960784313725491 + }, "code": 13 } }, @@ -1052,11 +1332,31 @@ "normal": { "name": "Normal", "hex": "#81c8be", + "rgb": { + "r": 129, + "g": 200, + "b": 190 + }, + "hsl": { + "h": 171.5492957746479, + "s": 0.3922651933701657, + "l": 0.6450980392156862 + }, "code": 6 }, "bright": { "name": "Bright", "hex": "#5abfb5", + "rgb": { + "r": 90, + "g": 191, + "b": 181 + }, + "hsl": { + "h": 174.05940594059405, + "s": 0.44104803493449785, + "l": 0.5509803921568628 + }, "code": 14 } }, @@ -1066,11 +1366,31 @@ "normal": { "name": "Normal", "hex": "#a5adce", + "rgb": { + "r": 165, + "g": 173, + "b": 206 + }, + "hsl": { + "h": 228.29268292682926, + "s": 0.2949640287769784, + "l": 0.7274509803921569 + }, "code": 7 }, "bright": { "name": "Bright", "hex": "#b5bfe2", + "rgb": { + "r": 181, + "g": 191, + "b": 226 + }, + "hsl": { + "h": 226.66666666666669, + "s": 0.43689320388349495, + "l": 0.7980392156862746 + }, "code": 15 } } @@ -1506,11 +1826,31 @@ "normal": { "name": "Normal", "hex": "#494d64", + "rgb": { + "r": 73, + "g": 77, + "b": 100 + }, + "hsl": { + "h": 231.11111111111114, + "s": 0.15606936416184972, + "l": 0.3392156862745098 + }, "code": 0 }, "bright": { "name": "Bright", "hex": "#5b6078", + "rgb": { + "r": 91, + "g": 96, + "b": 120 + }, + "hsl": { + "h": 229.65517241379308, + "s": 0.13744075829383887, + "l": 0.4137254901960784 + }, "code": 8 } }, @@ -1520,11 +1860,31 @@ "normal": { "name": "Normal", "hex": "#ed8796", + "rgb": { + "r": 237, + "g": 135, + "b": 150 + }, + "hsl": { + "h": 351.1764705882353, + "s": 0.7391304347826088, + "l": 0.7294117647058824 + }, "code": 1 }, "bright": { "name": "Bright", "hex": "#ec7486", + "rgb": { + "r": 236, + "g": 116, + "b": 134 + }, + "hsl": { + "h": 351, + "s": 0.759493670886076, + "l": 0.6901960784313725 + }, "code": 9 } }, @@ -1534,11 +1894,31 @@ "normal": { "name": "Normal", "hex": "#a6da95", + "rgb": { + "r": 166, + "g": 218, + "b": 149 + }, + "hsl": { + "h": 105.21739130434783, + "s": 0.4825174825174825, + "l": 0.7196078431372549 + }, "code": 2 }, "bright": { "name": "Bright", "hex": "#8ccf7f", + "rgb": { + "r": 140, + "g": 207, + "b": 127 + }, + "hsl": { + "h": 110.24999999999999, + "s": 0.45454545454545453, + "l": 0.6549019607843137 + }, "code": 10 } }, @@ -1548,11 +1928,31 @@ "normal": { "name": "Normal", "hex": "#eed49f", + "rgb": { + "r": 238, + "g": 212, + "b": 159 + }, + "hsl": { + "h": 40.253164556962034, + "s": 0.6991150442477877, + "l": 0.7784313725490196 + }, "code": 3 }, "bright": { "name": "Bright", "hex": "#e1c682", + "rgb": { + "r": 225, + "g": 198, + "b": 130 + }, + "hsl": { + "h": 42.94736842105264, + "s": 0.6129032258064515, + "l": 0.696078431372549 + }, "code": 11 } }, @@ -1562,11 +1962,31 @@ "normal": { "name": "Normal", "hex": "#8aadf4", + "rgb": { + "r": 138, + "g": 173, + "b": 244 + }, + "hsl": { + "h": 220.188679245283, + "s": 0.8281250000000003, + "l": 0.7490196078431373 + }, "code": 4 }, "bright": { "name": "Bright", "hex": "#78a1f6", + "rgb": { + "r": 120, + "g": 161, + "b": 246 + }, + "hsl": { + "h": 220.47619047619048, + "s": 0.8750000000000002, + "l": 0.7176470588235294 + }, "code": 12 } }, @@ -1576,11 +1996,31 @@ "normal": { "name": "Normal", "hex": "#f5bde6", + "rgb": { + "r": 245, + "g": 189, + "b": 230 + }, + "hsl": { + "h": 316.0714285714286, + "s": 0.7368421052631583, + "l": 0.8509803921568628 + }, "code": 5 }, "bright": { "name": "Bright", "hex": "#f2a9dd", + "rgb": { + "r": 242, + "g": 169, + "b": 221 + }, + "hsl": { + "h": 317.26027397260276, + "s": 0.7373737373737372, + "l": 0.8058823529411765 + }, "code": 13 } }, @@ -1590,11 +2030,31 @@ "normal": { "name": "Normal", "hex": "#8bd5ca", + "rgb": { + "r": 139, + "g": 213, + "b": 202 + }, + "hsl": { + "h": 171.08108108108107, + "s": 0.46835443037974706, + "l": 0.6901960784313725 + }, "code": 6 }, "bright": { "name": "Bright", "hex": "#63cbc0", + "rgb": { + "r": 99, + "g": 203, + "b": 192 + }, + "hsl": { + "h": 173.65384615384616, + "s": 0.4999999999999998, + "l": 0.592156862745098 + }, "code": 14 } }, @@ -1604,11 +2064,31 @@ "normal": { "name": "Normal", "hex": "#a5adcb", + "rgb": { + "r": 165, + "g": 173, + "b": 203 + }, + "hsl": { + "h": 227.36842105263156, + "s": 0.2676056338028167, + "l": 0.7215686274509804 + }, "code": 7 }, "bright": { "name": "Bright", "hex": "#b8c0e0", + "rgb": { + "r": 184, + "g": 192, + "b": 224 + }, + "hsl": { + "h": 228, + "s": 0.39215686274509803, + "l": 0.8 + }, "code": 15 } } @@ -2044,11 +2524,31 @@ "normal": { "name": "Normal", "hex": "#45475a", + "rgb": { + "r": 69, + "g": 71, + "b": 90 + }, + "hsl": { + "h": 234.2857142857143, + "s": 0.13207547169811326, + "l": 0.31176470588235294 + }, "code": 0 }, "bright": { "name": "Bright", "hex": "#585b70", + "rgb": { + "r": 88, + "g": 91, + "b": 112 + }, + "hsl": { + "h": 232.5, + "s": 0.12, + "l": 0.39215686274509803 + }, "code": 8 } }, @@ -2058,11 +2558,31 @@ "normal": { "name": "Normal", "hex": "#f38ba8", + "rgb": { + "r": 243, + "g": 139, + "b": 168 + }, + "hsl": { + "h": 343.2692307692308, + "s": 0.8124999999999998, + "l": 0.7490196078431373 + }, "code": 1 }, "bright": { "name": "Bright", "hex": "#f37799", + "rgb": { + "r": 243, + "g": 119, + "b": 153 + }, + "hsl": { + "h": 343.54838709677415, + "s": 0.8378378378378376, + "l": 0.7098039215686274 + }, "code": 9 } }, @@ -2072,11 +2592,31 @@ "normal": { "name": "Normal", "hex": "#a6e3a1", + "rgb": { + "r": 166, + "g": 227, + "b": 161 + }, + "hsl": { + "h": 115.45454545454544, + "s": 0.5409836065573769, + "l": 0.7607843137254902 + }, "code": 2 }, "bright": { "name": "Bright", "hex": "#89d88b", + "rgb": { + "r": 137, + "g": 216, + "b": 139 + }, + "hsl": { + "h": 121.51898734177213, + "s": 0.5031847133757963, + "l": 0.692156862745098 + }, "code": 10 } }, @@ -2086,11 +2626,31 @@ "normal": { "name": "Normal", "hex": "#f9e2af", + "rgb": { + "r": 249, + "g": 226, + "b": 175 + }, + "hsl": { + "h": 41.35135135135135, + "s": 0.8604651162790699, + "l": 0.8313725490196078 + }, "code": 3 }, "bright": { "name": "Bright", "hex": "#ebd391", + "rgb": { + "r": 235, + "g": 211, + "b": 145 + }, + "hsl": { + "h": 44, + "s": 0.692307692307692, + "l": 0.7450980392156863 + }, "code": 11 } }, @@ -2100,11 +2660,31 @@ "normal": { "name": "Normal", "hex": "#89b4fa", + "rgb": { + "r": 137, + "g": 180, + "b": 250 + }, + "hsl": { + "h": 217.1681415929203, + "s": 0.9186991869918699, + "l": 0.7588235294117647 + }, "code": 4 }, "bright": { "name": "Bright", "hex": "#74a8fc", + "rgb": { + "r": 116, + "g": 168, + "b": 252 + }, + "hsl": { + "h": 217.05882352941174, + "s": 0.9577464788732396, + "l": 0.7215686274509804 + }, "code": 12 } }, @@ -2114,11 +2694,31 @@ "normal": { "name": "Normal", "hex": "#f5c2e7", + "rgb": { + "r": 245, + "g": 194, + "b": 231 + }, + "hsl": { + "h": 316.4705882352941, + "s": 0.7183098591549301, + "l": 0.8607843137254902 + }, "code": 5 }, "bright": { "name": "Bright", "hex": "#f2aede", + "rgb": { + "r": 242, + "g": 174, + "b": 222 + }, + "hsl": { + "h": 317.6470588235294, + "s": 0.7234042553191488, + "l": 0.8156862745098039 + }, "code": 13 } }, @@ -2128,11 +2728,31 @@ "normal": { "name": "Normal", "hex": "#94e2d5", + "rgb": { + "r": 148, + "g": 226, + "b": 213 + }, + "hsl": { + "h": 170.00000000000003, + "s": 0.5735294117647057, + "l": 0.7333333333333334 + }, "code": 6 }, "bright": { "name": "Bright", "hex": "#6bd7ca", + "rgb": { + "r": 107, + "g": 215, + "b": 202 + }, + "hsl": { + "h": 172.77777777777777, + "s": 0.5744680851063831, + "l": 0.6313725490196078 + }, "code": 14 } }, @@ -2142,11 +2762,31 @@ "normal": { "name": "Normal", "hex": "#a6adc8", + "rgb": { + "r": 166, + "g": 173, + "b": 200 + }, + "hsl": { + "h": 227.6470588235294, + "s": 0.23611111111111102, + "l": 0.7176470588235294 + }, "code": 7 }, "bright": { "name": "Bright", "hex": "#bac2de", + "rgb": { + "r": 186, + "g": 194, + "b": 222 + }, + "hsl": { + "h": 226.66666666666669, + "s": 0.35294117647058837, + "l": 0.8 + }, "code": 15 } }