use ratatui::style::{Color, Style};
use ratatui::symbols::Marker;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub enum AppTheme {
Default,
MidnightGreen,
IAmBlue,
SolarizedDark,
Greyscale,
Nord,
Dracula,
Monokai,
Gruvbox,
TokyoNight,
CatppuccinMocha,
OneDark,
AyuDark,
USA,
}
impl AppTheme {
pub fn text_color(&self) -> Color {
match self {
AppTheme::MidnightGreen => Color::Green,
AppTheme::IAmBlue => Color::Blue,
AppTheme::SolarizedDark => Color::Rgb(131, 148, 150), AppTheme::Greyscale => Color::Rgb(204, 204, 204), AppTheme::Nord => Color::Rgb(216, 222, 233), AppTheme::Dracula => Color::Rgb(248, 248, 242), AppTheme::Monokai => Color::Rgb(248, 248, 242), AppTheme::Gruvbox => Color::Rgb(235, 219, 178), AppTheme::TokyoNight => Color::Rgb(169, 177, 214), AppTheme::CatppuccinMocha => Color::Rgb(205, 214, 244), AppTheme::OneDark => Color::Rgb(171, 178, 191), AppTheme::AyuDark => Color::Rgb(230, 225, 207), AppTheme::USA => Color::White, AppTheme::Default => Color::White,
}
}
pub fn title_style(&self) -> Style {
match self {
AppTheme::MidnightGreen => Style::default().fg(Color::White),
AppTheme::IAmBlue => Style::default().fg(Color::Blue),
AppTheme::SolarizedDark => Style::default().fg(Color::Rgb(38, 139, 210)), AppTheme::Greyscale => Style::default().fg(Color::Rgb(255, 255, 255)), AppTheme::Nord => Style::default().fg(Color::Rgb(143, 188, 187)), AppTheme::Dracula => Style::default().fg(Color::Rgb(189, 147, 249)), AppTheme::Monokai => Style::default().fg(Color::Rgb(249, 38, 114)), AppTheme::Gruvbox => Style::default().fg(Color::Rgb(250, 189, 47)), AppTheme::TokyoNight => Style::default().fg(Color::Rgb(187, 154, 247)), AppTheme::CatppuccinMocha => Style::default().fg(Color::Rgb(203, 166, 247)), AppTheme::OneDark => Style::default().fg(Color::Rgb(97, 175, 239)), AppTheme::AyuDark => Style::default().fg(Color::Rgb(255, 204, 102)), AppTheme::USA => Style::default().fg(Color::Rgb(10, 49, 97)), AppTheme::Default => Style::default().fg(Color::Green),
}
}
pub fn border_style(&self) -> Style {
match self {
AppTheme::MidnightGreen => Style::default().fg(Color::Green),
AppTheme::IAmBlue => Style::default().fg(Color::Cyan),
AppTheme::SolarizedDark => Style::default().fg(Color::Rgb(88, 110, 117)), AppTheme::Greyscale => Style::default().fg(Color::Rgb(150, 150, 150)), AppTheme::Nord => Style::default().fg(Color::Rgb(94, 129, 172)), AppTheme::Dracula => Style::default().fg(Color::Rgb(98, 114, 164)), AppTheme::Monokai => Style::default().fg(Color::Rgb(117, 113, 94)), AppTheme::Gruvbox => Style::default().fg(Color::Rgb(168, 153, 132)), AppTheme::TokyoNight => Style::default().fg(Color::Rgb(86, 95, 137)), AppTheme::CatppuccinMocha => Style::default().fg(Color::Rgb(127, 132, 156)), AppTheme::OneDark => Style::default().fg(Color::Rgb(92, 99, 112)), AppTheme::AyuDark => Style::default().fg(Color::Rgb(87, 92, 93)), AppTheme::USA => Style::default().fg(Color::Rgb(187, 19, 62)), AppTheme::Default => Style::default().fg(Color::White),
}
}
pub fn text_enabled_color(&self) -> Color {
match self {
AppTheme::MidnightGreen => Color::Green,
AppTheme::IAmBlue => Color::Blue,
AppTheme::SolarizedDark => Color::Rgb(42, 161, 152), AppTheme::Greyscale => Color::Rgb(230, 230, 230), AppTheme::Nord => Color::Rgb(136, 192, 208), AppTheme::Dracula => Color::Rgb(80, 250, 123), AppTheme::Monokai => Color::Rgb(166, 226, 46), AppTheme::Gruvbox => Color::Rgb(184, 187, 38), AppTheme::TokyoNight => Color::Rgb(158, 206, 106), AppTheme::CatppuccinMocha => Color::Rgb(166, 227, 161), AppTheme::OneDark => Color::Rgb(152, 195, 121), AppTheme::AyuDark => Color::Rgb(195, 232, 141), AppTheme::USA => Color::Rgb(10, 49, 97), AppTheme::Default => Color::Green,
}
}
pub fn text_disabled_color(&self) -> Color {
match self {
AppTheme::MidnightGreen => Color::Green,
AppTheme::IAmBlue => Color::Red,
AppTheme::SolarizedDark => Color::Rgb(220, 50, 47), AppTheme::Greyscale => Color::Rgb(100, 100, 100), AppTheme::Nord => Color::Rgb(191, 97, 106), AppTheme::Dracula => Color::Rgb(255, 85, 85), AppTheme::Monokai => Color::Rgb(249, 38, 114), AppTheme::Gruvbox => Color::Rgb(251, 73, 52), AppTheme::TokyoNight => Color::Rgb(247, 118, 142), AppTheme::CatppuccinMocha => Color::Rgb(243, 139, 168), AppTheme::OneDark => Color::Rgb(224, 108, 117), AppTheme::AyuDark => Color::Rgb(255, 51, 51), AppTheme::USA => Color::Rgb(187, 19, 62), AppTheme::Default => Color::Red,
}
}
pub fn text_important_color(&self) -> Color {
match self {
AppTheme::MidnightGreen => Color::Red,
AppTheme::IAmBlue => Color::White,
AppTheme::SolarizedDark => Color::Rgb(181, 137, 0), AppTheme::Greyscale => Color::Rgb(255, 255, 255), AppTheme::Nord => Color::Rgb(235, 203, 139), AppTheme::Dracula => Color::Rgb(241, 250, 140), AppTheme::Monokai => Color::Rgb(230, 219, 116), AppTheme::Gruvbox => Color::Rgb(250, 189, 47), AppTheme::TokyoNight => Color::Rgb(224, 175, 104), AppTheme::CatppuccinMocha => Color::Rgb(249, 226, 175), AppTheme::OneDark => Color::Rgb(229, 192, 123), AppTheme::AyuDark => Color::Rgb(255, 204, 102), AppTheme::USA => Color::White, AppTheme::Default => Color::Red,
}
}
pub fn sparkline_style(&self) -> Style {
match self {
AppTheme::MidnightGreen => Style::default().fg(Color::Green),
AppTheme::IAmBlue => Style::default().fg(Color::Blue),
AppTheme::SolarizedDark => Style::default().fg(Color::Rgb(133, 153, 0)), AppTheme::Greyscale => Style::default().fg(Color::Rgb(180, 180, 180)), AppTheme::Nord => Style::default().fg(Color::Rgb(163, 190, 140)), AppTheme::Dracula => Style::default().fg(Color::Rgb(139, 233, 253)), AppTheme::Monokai => Style::default().fg(Color::Rgb(102, 217, 239)), AppTheme::Gruvbox => Style::default().fg(Color::Rgb(104, 157, 106)), AppTheme::TokyoNight => Style::default().fg(Color::Rgb(125, 207, 255)), AppTheme::CatppuccinMocha => Style::default().fg(Color::Rgb(137, 220, 235)), AppTheme::OneDark => Style::default().fg(Color::Rgb(86, 182, 194)), AppTheme::AyuDark => Style::default().fg(Color::Rgb(95, 175, 239)), AppTheme::USA => Style::default().fg(Color::Rgb(10, 49, 97)), AppTheme::Default => Style::default().fg(Color::Yellow),
}
}
pub fn kernel_symbol_color(&self) -> Color {
match self {
AppTheme::MidnightGreen => Color::Rgb(255, 100, 100), AppTheme::IAmBlue => Color::Rgb(255, 140, 0), AppTheme::SolarizedDark => Color::Rgb(220, 50, 47), AppTheme::Greyscale => Color::Rgb(180, 180, 180), AppTheme::Nord => Color::Rgb(191, 97, 106), AppTheme::Dracula => Color::Rgb(255, 85, 85), AppTheme::Monokai => Color::Rgb(249, 38, 114), AppTheme::Gruvbox => Color::Rgb(251, 73, 52), AppTheme::TokyoNight => Color::Rgb(247, 118, 142), AppTheme::CatppuccinMocha => Color::Rgb(243, 139, 168), AppTheme::OneDark => Color::Rgb(224, 108, 117), AppTheme::AyuDark => Color::Rgb(255, 160, 122), AppTheme::USA => Color::Rgb(187, 19, 62), AppTheme::Default => Color::Red,
}
}
pub fn userspace_symbol_color(&self) -> Color {
match self {
AppTheme::MidnightGreen => Color::Rgb(100, 255, 100), AppTheme::IAmBlue => Color::Rgb(100, 149, 237), AppTheme::SolarizedDark => Color::Rgb(42, 161, 152), AppTheme::Greyscale => Color::Rgb(120, 120, 120), AppTheme::Nord => Color::Rgb(136, 192, 208), AppTheme::Dracula => Color::Rgb(80, 250, 123), AppTheme::Monokai => Color::Rgb(166, 226, 46), AppTheme::Gruvbox => Color::Rgb(104, 157, 106), AppTheme::TokyoNight => Color::Rgb(158, 206, 106), AppTheme::CatppuccinMocha => Color::Rgb(166, 227, 161), AppTheme::OneDark => Color::Rgb(152, 195, 121), AppTheme::AyuDark => Color::Rgb(95, 175, 239), AppTheme::USA => Color::Rgb(10, 49, 97), AppTheme::Default => Color::Blue,
}
}
pub fn plot_marker(&self) -> Marker {
match self {
AppTheme::MidnightGreen => Marker::Braille,
AppTheme::IAmBlue => Marker::Dot,
AppTheme::SolarizedDark => Marker::Braille,
AppTheme::Greyscale => Marker::Block,
AppTheme::Nord => Marker::Braille,
AppTheme::Dracula => Marker::Dot,
AppTheme::Monokai => Marker::Braille,
AppTheme::Gruvbox => Marker::Block,
AppTheme::TokyoNight => Marker::Braille,
AppTheme::CatppuccinMocha => Marker::Dot,
AppTheme::OneDark => Marker::Braille,
AppTheme::AyuDark => Marker::Block,
AppTheme::USA => Marker::Block,
AppTheme::Default => Marker::Block,
}
}
pub fn positive_value_color(&self) -> Color {
match self {
AppTheme::MidnightGreen => Color::Green,
AppTheme::IAmBlue => Color::Blue,
AppTheme::SolarizedDark => Color::Rgb(133, 153, 0), AppTheme::Greyscale => Color::Rgb(180, 180, 180), AppTheme::Nord => Color::Rgb(163, 190, 140), AppTheme::Dracula => Color::Rgb(80, 250, 123), AppTheme::Monokai => Color::Rgb(166, 226, 46), AppTheme::Gruvbox => Color::Rgb(184, 187, 38), AppTheme::TokyoNight => Color::Rgb(158, 206, 106), AppTheme::CatppuccinMocha => Color::Rgb(166, 227, 161), AppTheme::OneDark => Color::Rgb(152, 195, 121), AppTheme::AyuDark => Color::Rgb(195, 232, 141), AppTheme::USA => Color::Rgb(10, 49, 97), AppTheme::Default => Color::Green,
}
}
pub fn negative_value_color(&self) -> Color {
match self {
AppTheme::MidnightGreen => Color::Yellow,
AppTheme::IAmBlue => Color::Cyan,
AppTheme::SolarizedDark => Color::Rgb(42, 161, 152), AppTheme::Greyscale => Color::Rgb(120, 120, 120), AppTheme::Nord => Color::Rgb(136, 192, 208), AppTheme::Dracula => Color::Rgb(139, 233, 253), AppTheme::Monokai => Color::Rgb(102, 217, 239), AppTheme::Gruvbox => Color::Rgb(104, 157, 106), AppTheme::TokyoNight => Color::Rgb(125, 207, 255), AppTheme::CatppuccinMocha => Color::Rgb(137, 220, 235), AppTheme::OneDark => Color::Rgb(86, 182, 194), AppTheme::AyuDark => Color::Rgb(95, 175, 239), AppTheme::USA => Color::Rgb(187, 19, 62), AppTheme::Default => Color::Red,
}
}
pub fn gradient_3_low(&self, reverse: bool) -> Color {
if reverse {
self.text_disabled_color()
} else {
self.text_enabled_color()
}
}
pub fn gradient_3_mid(&self) -> Color {
self.text_important_color()
}
pub fn gradient_3_high(&self, reverse: bool) -> Color {
if reverse {
self.text_enabled_color()
} else {
self.text_disabled_color()
}
}
pub fn gradient_3(
&self,
value: f64,
low_threshold: f64,
high_threshold: f64,
reverse: bool,
) -> Color {
if value <= low_threshold {
self.gradient_3_low(reverse)
} else if value >= high_threshold {
self.gradient_3_high(reverse)
} else {
self.gradient_3_mid()
}
}
pub fn gradient_5(
&self,
value: f64,
very_low_threshold: f64,
low_threshold: f64,
high_threshold: f64,
very_high_threshold: f64,
reverse: bool,
) -> Color {
let (very_low_color, low_color, mid_color, high_color, very_high_color) = match self {
AppTheme::Default => {
if reverse {
(
Color::Red,
Color::Rgb(255, 165, 0),
Color::Yellow,
Color::LightGreen,
Color::Green,
)
} else {
(
Color::Green,
Color::LightGreen,
Color::Yellow,
Color::Rgb(255, 165, 0),
Color::Red,
)
}
}
AppTheme::MidnightGreen => {
if reverse {
(
Color::Red,
Color::Rgb(255, 140, 0),
Color::Yellow,
Color::LightGreen,
Color::Green,
)
} else {
(
Color::Green,
Color::LightGreen,
Color::Yellow,
Color::Rgb(255, 140, 0),
Color::Red,
)
}
}
AppTheme::IAmBlue => {
if reverse {
(
Color::Red,
Color::Rgb(255, 140, 0),
Color::Yellow,
Color::Cyan,
Color::Blue,
)
} else {
(
Color::Blue,
Color::Cyan,
Color::Yellow,
Color::Rgb(255, 140, 0),
Color::Red,
)
}
}
AppTheme::SolarizedDark => {
if reverse {
(
Color::Rgb(220, 50, 47),
Color::Rgb(203, 75, 22),
Color::Rgb(181, 137, 0),
Color::Rgb(133, 153, 0),
Color::Rgb(42, 161, 152),
)
} else {
(
Color::Rgb(42, 161, 152),
Color::Rgb(133, 153, 0),
Color::Rgb(181, 137, 0),
Color::Rgb(203, 75, 22),
Color::Rgb(220, 50, 47),
)
}
}
AppTheme::Greyscale => {
if reverse {
(
Color::Rgb(80, 80, 80),
Color::Rgb(120, 120, 120),
Color::Rgb(160, 160, 160),
Color::Rgb(200, 200, 200),
Color::Rgb(240, 240, 240),
)
} else {
(
Color::Rgb(240, 240, 240),
Color::Rgb(200, 200, 200),
Color::Rgb(160, 160, 160),
Color::Rgb(120, 120, 120),
Color::Rgb(80, 80, 80),
)
}
}
AppTheme::Nord => {
if reverse {
(
Color::Rgb(191, 97, 106),
Color::Rgb(208, 135, 112),
Color::Rgb(235, 203, 139),
Color::Rgb(163, 190, 140),
Color::Rgb(136, 192, 208),
)
} else {
(
Color::Rgb(136, 192, 208),
Color::Rgb(163, 190, 140),
Color::Rgb(235, 203, 139),
Color::Rgb(208, 135, 112),
Color::Rgb(191, 97, 106),
)
}
}
AppTheme::Dracula => {
if reverse {
(
Color::Rgb(255, 85, 85),
Color::Rgb(255, 184, 108),
Color::Rgb(241, 250, 140),
Color::Rgb(139, 233, 253),
Color::Rgb(80, 250, 123),
)
} else {
(
Color::Rgb(80, 250, 123),
Color::Rgb(139, 233, 253),
Color::Rgb(241, 250, 140),
Color::Rgb(255, 184, 108),
Color::Rgb(255, 85, 85),
)
}
}
AppTheme::Monokai => {
if reverse {
(
Color::Rgb(249, 38, 114),
Color::Rgb(253, 151, 31),
Color::Rgb(230, 219, 116),
Color::Rgb(102, 217, 239),
Color::Rgb(166, 226, 46),
)
} else {
(
Color::Rgb(166, 226, 46),
Color::Rgb(102, 217, 239),
Color::Rgb(230, 219, 116),
Color::Rgb(253, 151, 31),
Color::Rgb(249, 38, 114),
)
}
}
AppTheme::Gruvbox => {
if reverse {
(
Color::Rgb(251, 73, 52),
Color::Rgb(254, 128, 25),
Color::Rgb(250, 189, 47),
Color::Rgb(184, 187, 38),
Color::Rgb(104, 157, 106),
)
} else {
(
Color::Rgb(104, 157, 106),
Color::Rgb(184, 187, 38),
Color::Rgb(250, 189, 47),
Color::Rgb(254, 128, 25),
Color::Rgb(251, 73, 52),
)
}
}
AppTheme::TokyoNight => {
if reverse {
(
Color::Rgb(247, 118, 142),
Color::Rgb(255, 158, 100),
Color::Rgb(224, 175, 104),
Color::Rgb(125, 207, 255),
Color::Rgb(158, 206, 106),
)
} else {
(
Color::Rgb(158, 206, 106),
Color::Rgb(125, 207, 255),
Color::Rgb(224, 175, 104),
Color::Rgb(255, 158, 100),
Color::Rgb(247, 118, 142),
)
}
}
AppTheme::CatppuccinMocha => {
if reverse {
(
Color::Rgb(243, 139, 168),
Color::Rgb(250, 179, 135),
Color::Rgb(249, 226, 175),
Color::Rgb(137, 220, 235),
Color::Rgb(166, 227, 161),
)
} else {
(
Color::Rgb(166, 227, 161),
Color::Rgb(137, 220, 235),
Color::Rgb(249, 226, 175),
Color::Rgb(250, 179, 135),
Color::Rgb(243, 139, 168),
)
}
}
AppTheme::OneDark => {
if reverse {
(
Color::Rgb(224, 108, 117),
Color::Rgb(209, 154, 102),
Color::Rgb(229, 192, 123),
Color::Rgb(86, 182, 194),
Color::Rgb(152, 195, 121),
)
} else {
(
Color::Rgb(152, 195, 121),
Color::Rgb(86, 182, 194),
Color::Rgb(229, 192, 123),
Color::Rgb(209, 154, 102),
Color::Rgb(224, 108, 117),
)
}
}
AppTheme::AyuDark => {
if reverse {
(
Color::Rgb(255, 51, 51),
Color::Rgb(255, 160, 122),
Color::Rgb(255, 204, 102),
Color::Rgb(95, 175, 239),
Color::Rgb(195, 232, 141),
)
} else {
(
Color::Rgb(195, 232, 141),
Color::Rgb(95, 175, 239),
Color::Rgb(255, 204, 102),
Color::Rgb(255, 160, 122),
Color::Rgb(255, 51, 51),
)
}
}
AppTheme::USA => {
if reverse {
(
Color::Rgb(187, 19, 62),
Color::Rgb(255, 100, 100),
Color::White,
Color::Rgb(100, 149, 237),
Color::Rgb(10, 49, 97),
)
} else {
(
Color::Rgb(10, 49, 97),
Color::Rgb(100, 149, 237),
Color::White,
Color::Rgb(255, 100, 100),
Color::Rgb(187, 19, 62),
)
}
}
};
if value <= very_low_threshold {
very_low_color
} else if value <= low_threshold {
low_color
} else if value < high_threshold {
mid_color
} else if value < very_high_threshold {
high_color
} else {
very_high_color
}
}
pub fn next(&self) -> Self {
match self {
AppTheme::Default => AppTheme::MidnightGreen,
AppTheme::MidnightGreen => AppTheme::IAmBlue,
AppTheme::IAmBlue => AppTheme::SolarizedDark,
AppTheme::SolarizedDark => AppTheme::Greyscale,
AppTheme::Greyscale => AppTheme::Nord,
AppTheme::Nord => AppTheme::Dracula,
AppTheme::Dracula => AppTheme::Monokai,
AppTheme::Monokai => AppTheme::Gruvbox,
AppTheme::Gruvbox => AppTheme::TokyoNight,
AppTheme::TokyoNight => AppTheme::CatppuccinMocha,
AppTheme::CatppuccinMocha => AppTheme::OneDark,
AppTheme::OneDark => AppTheme::AyuDark,
AppTheme::AyuDark => AppTheme::USA,
AppTheme::USA => AppTheme::Default,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_theme_next() {
assert_eq!(AppTheme::Default.next(), AppTheme::MidnightGreen);
assert_eq!(AppTheme::MidnightGreen.next(), AppTheme::IAmBlue);
assert_eq!(AppTheme::IAmBlue.next(), AppTheme::SolarizedDark);
assert_eq!(AppTheme::SolarizedDark.next(), AppTheme::Greyscale);
assert_eq!(AppTheme::Greyscale.next(), AppTheme::Nord);
assert_eq!(AppTheme::Nord.next(), AppTheme::Dracula);
assert_eq!(AppTheme::Dracula.next(), AppTheme::Monokai);
assert_eq!(AppTheme::Monokai.next(), AppTheme::Gruvbox);
assert_eq!(AppTheme::Gruvbox.next(), AppTheme::TokyoNight);
assert_eq!(AppTheme::TokyoNight.next(), AppTheme::CatppuccinMocha);
assert_eq!(AppTheme::CatppuccinMocha.next(), AppTheme::OneDark);
assert_eq!(AppTheme::OneDark.next(), AppTheme::AyuDark);
assert_eq!(AppTheme::AyuDark.next(), AppTheme::USA);
assert_eq!(AppTheme::USA.next(), AppTheme::Default);
}
#[test]
fn test_theme_text_color() {
assert_eq!(AppTheme::Default.text_color(), Color::White);
assert_eq!(AppTheme::MidnightGreen.text_color(), Color::Green);
assert_eq!(AppTheme::IAmBlue.text_color(), Color::Blue);
assert_eq!(
AppTheme::SolarizedDark.text_color(),
Color::Rgb(131, 148, 150)
); assert_eq!(AppTheme::Greyscale.text_color(), Color::Rgb(204, 204, 204)); assert_eq!(AppTheme::Nord.text_color(), Color::Rgb(216, 222, 233)); assert_eq!(AppTheme::Dracula.text_color(), Color::Rgb(248, 248, 242)); assert_eq!(AppTheme::Monokai.text_color(), Color::Rgb(248, 248, 242)); assert_eq!(AppTheme::Gruvbox.text_color(), Color::Rgb(235, 219, 178)); assert_eq!(AppTheme::TokyoNight.text_color(), Color::Rgb(169, 177, 214)); assert_eq!(
AppTheme::CatppuccinMocha.text_color(),
Color::Rgb(205, 214, 244)
); assert_eq!(AppTheme::OneDark.text_color(), Color::Rgb(171, 178, 191)); assert_eq!(AppTheme::AyuDark.text_color(), Color::Rgb(230, 225, 207)); }
#[test]
fn test_theme_title_style() {
assert_eq!(
AppTheme::Default.title_style(),
Style::default().fg(Color::Green)
);
assert_eq!(
AppTheme::MidnightGreen.title_style(),
Style::default().fg(Color::White)
);
assert_eq!(
AppTheme::IAmBlue.title_style(),
Style::default().fg(Color::Blue)
);
assert_eq!(
AppTheme::SolarizedDark.title_style(),
Style::default().fg(Color::Rgb(38, 139, 210))
); assert_eq!(
AppTheme::Greyscale.title_style(),
Style::default().fg(Color::Rgb(255, 255, 255))
); assert_eq!(
AppTheme::Nord.title_style(),
Style::default().fg(Color::Rgb(143, 188, 187))
); assert_eq!(
AppTheme::Dracula.title_style(),
Style::default().fg(Color::Rgb(189, 147, 249))
); assert_eq!(
AppTheme::Monokai.title_style(),
Style::default().fg(Color::Rgb(249, 38, 114))
); assert_eq!(
AppTheme::Gruvbox.title_style(),
Style::default().fg(Color::Rgb(250, 189, 47))
); assert_eq!(
AppTheme::TokyoNight.title_style(),
Style::default().fg(Color::Rgb(187, 154, 247))
); assert_eq!(
AppTheme::CatppuccinMocha.title_style(),
Style::default().fg(Color::Rgb(203, 166, 247))
); assert_eq!(
AppTheme::OneDark.title_style(),
Style::default().fg(Color::Rgb(97, 175, 239))
); assert_eq!(
AppTheme::AyuDark.title_style(),
Style::default().fg(Color::Rgb(255, 204, 102))
); }
#[test]
fn test_theme_border_style() {
assert_eq!(
AppTheme::Default.border_style(),
Style::default().fg(Color::White)
);
assert_eq!(
AppTheme::MidnightGreen.border_style(),
Style::default().fg(Color::Green)
);
assert_eq!(
AppTheme::IAmBlue.border_style(),
Style::default().fg(Color::Cyan)
);
assert_eq!(
AppTheme::SolarizedDark.border_style(),
Style::default().fg(Color::Rgb(88, 110, 117))
); assert_eq!(
AppTheme::Greyscale.border_style(),
Style::default().fg(Color::Rgb(150, 150, 150))
); assert_eq!(
AppTheme::Nord.border_style(),
Style::default().fg(Color::Rgb(94, 129, 172))
); assert_eq!(
AppTheme::Dracula.border_style(),
Style::default().fg(Color::Rgb(98, 114, 164))
); assert_eq!(
AppTheme::Monokai.border_style(),
Style::default().fg(Color::Rgb(117, 113, 94))
); assert_eq!(
AppTheme::Gruvbox.border_style(),
Style::default().fg(Color::Rgb(168, 153, 132))
); assert_eq!(
AppTheme::TokyoNight.border_style(),
Style::default().fg(Color::Rgb(86, 95, 137))
); assert_eq!(
AppTheme::CatppuccinMocha.border_style(),
Style::default().fg(Color::Rgb(127, 132, 156))
); assert_eq!(
AppTheme::OneDark.border_style(),
Style::default().fg(Color::Rgb(92, 99, 112))
); assert_eq!(
AppTheme::AyuDark.border_style(),
Style::default().fg(Color::Rgb(87, 92, 93))
); }
#[test]
fn test_theme_text_enabled_color() {
assert_eq!(AppTheme::Default.text_enabled_color(), Color::Green);
assert_eq!(AppTheme::MidnightGreen.text_enabled_color(), Color::Green);
assert_eq!(AppTheme::IAmBlue.text_enabled_color(), Color::Blue);
assert_eq!(
AppTheme::SolarizedDark.text_enabled_color(),
Color::Rgb(42, 161, 152)
); assert_eq!(
AppTheme::Greyscale.text_enabled_color(),
Color::Rgb(230, 230, 230)
); assert_eq!(
AppTheme::Nord.text_enabled_color(),
Color::Rgb(136, 192, 208)
); assert_eq!(
AppTheme::Dracula.text_enabled_color(),
Color::Rgb(80, 250, 123)
); assert_eq!(
AppTheme::Monokai.text_enabled_color(),
Color::Rgb(166, 226, 46)
); assert_eq!(
AppTheme::Gruvbox.text_enabled_color(),
Color::Rgb(184, 187, 38)
); assert_eq!(
AppTheme::TokyoNight.text_enabled_color(),
Color::Rgb(158, 206, 106)
); assert_eq!(
AppTheme::CatppuccinMocha.text_enabled_color(),
Color::Rgb(166, 227, 161)
); assert_eq!(
AppTheme::OneDark.text_enabled_color(),
Color::Rgb(152, 195, 121)
); assert_eq!(
AppTheme::AyuDark.text_enabled_color(),
Color::Rgb(195, 232, 141)
); }
#[test]
fn test_theme_text_disabled_color() {
assert_eq!(AppTheme::Default.text_disabled_color(), Color::Red);
assert_eq!(AppTheme::MidnightGreen.text_disabled_color(), Color::Green);
assert_eq!(AppTheme::IAmBlue.text_disabled_color(), Color::Red);
assert_eq!(
AppTheme::SolarizedDark.text_disabled_color(),
Color::Rgb(220, 50, 47)
); assert_eq!(
AppTheme::Greyscale.text_disabled_color(),
Color::Rgb(100, 100, 100)
); assert_eq!(
AppTheme::Nord.text_disabled_color(),
Color::Rgb(191, 97, 106)
); assert_eq!(
AppTheme::Dracula.text_disabled_color(),
Color::Rgb(255, 85, 85)
); assert_eq!(
AppTheme::Monokai.text_disabled_color(),
Color::Rgb(249, 38, 114)
); assert_eq!(
AppTheme::Gruvbox.text_disabled_color(),
Color::Rgb(251, 73, 52)
); assert_eq!(
AppTheme::TokyoNight.text_disabled_color(),
Color::Rgb(247, 118, 142)
); assert_eq!(
AppTheme::CatppuccinMocha.text_disabled_color(),
Color::Rgb(243, 139, 168)
); assert_eq!(
AppTheme::OneDark.text_disabled_color(),
Color::Rgb(224, 108, 117)
); assert_eq!(
AppTheme::AyuDark.text_disabled_color(),
Color::Rgb(255, 51, 51)
); }
#[test]
fn test_theme_text_important_color() {
assert_eq!(AppTheme::Default.text_important_color(), Color::Red);
assert_eq!(AppTheme::MidnightGreen.text_important_color(), Color::Red);
assert_eq!(AppTheme::IAmBlue.text_important_color(), Color::White);
assert_eq!(
AppTheme::SolarizedDark.text_important_color(),
Color::Rgb(181, 137, 0)
); assert_eq!(
AppTheme::Greyscale.text_important_color(),
Color::Rgb(255, 255, 255)
); assert_eq!(
AppTheme::Nord.text_important_color(),
Color::Rgb(235, 203, 139)
); assert_eq!(
AppTheme::Dracula.text_important_color(),
Color::Rgb(241, 250, 140)
); assert_eq!(
AppTheme::Monokai.text_important_color(),
Color::Rgb(230, 219, 116)
); assert_eq!(
AppTheme::Gruvbox.text_important_color(),
Color::Rgb(250, 189, 47)
); assert_eq!(
AppTheme::TokyoNight.text_important_color(),
Color::Rgb(224, 175, 104)
); assert_eq!(
AppTheme::CatppuccinMocha.text_important_color(),
Color::Rgb(249, 226, 175)
); assert_eq!(
AppTheme::OneDark.text_important_color(),
Color::Rgb(229, 192, 123)
); assert_eq!(
AppTheme::AyuDark.text_important_color(),
Color::Rgb(255, 204, 102)
); }
#[test]
fn test_theme_sparkline_style() {
assert_eq!(
AppTheme::Default.sparkline_style(),
Style::default().fg(Color::Yellow)
);
assert_eq!(
AppTheme::MidnightGreen.sparkline_style(),
Style::default().fg(Color::Green)
);
assert_eq!(
AppTheme::IAmBlue.sparkline_style(),
Style::default().fg(Color::Blue)
);
assert_eq!(
AppTheme::SolarizedDark.sparkline_style(),
Style::default().fg(Color::Rgb(133, 153, 0))
); assert_eq!(
AppTheme::Greyscale.sparkline_style(),
Style::default().fg(Color::Rgb(180, 180, 180))
); assert_eq!(
AppTheme::Nord.sparkline_style(),
Style::default().fg(Color::Rgb(163, 190, 140))
); assert_eq!(
AppTheme::Dracula.sparkline_style(),
Style::default().fg(Color::Rgb(139, 233, 253))
); assert_eq!(
AppTheme::Monokai.sparkline_style(),
Style::default().fg(Color::Rgb(102, 217, 239))
); assert_eq!(
AppTheme::Gruvbox.sparkline_style(),
Style::default().fg(Color::Rgb(104, 157, 106))
); assert_eq!(
AppTheme::TokyoNight.sparkline_style(),
Style::default().fg(Color::Rgb(125, 207, 255))
); assert_eq!(
AppTheme::CatppuccinMocha.sparkline_style(),
Style::default().fg(Color::Rgb(137, 220, 235))
); assert_eq!(
AppTheme::OneDark.sparkline_style(),
Style::default().fg(Color::Rgb(86, 182, 194))
); assert_eq!(
AppTheme::AyuDark.sparkline_style(),
Style::default().fg(Color::Rgb(95, 175, 239))
); }
}