use ratatui::style::Color;
#[derive(Debug, Clone, PartialEq)]
pub struct ColorScheme {
pub name: &'static str,
pub background: Color, pub border: Color, pub window_border: Color, pub window_title: Color, pub explorer_border: Color, pub explorer_title: Color, pub card_border: Color, pub text: Color, pub text_dim: Color, pub line_number: Color, pub highlight: Color, pub selected: Color, pub card_selected: Color, pub card_visual: Color, pub card_title: Color, pub card_content: Color, pub overlay_field_active: Color, pub overlay_field_selected: Color, pub overlay_field_placeholder: Color, pub overlay_field_normal: Color, pub explorer_folder: Color, pub explorer_file: Color, pub explorer_file_selected: Color, pub status_bar: Color, pub key: Color, pub string: Color, pub number: Color, pub boolean: Color, pub bracket: Color, }
impl ColorScheme {
pub fn default() -> Self {
Self {
name: "Default",
background: Color::Black,
border: Color::DarkGray,
window_border: Color::DarkGray,
window_title: Color::Cyan,
explorer_border: Color::DarkGray,
explorer_title: Color::Cyan,
card_border: Color::DarkGray,
text: Color::White,
text_dim: Color::DarkGray,
line_number: Color::Yellow,
highlight: Color::Yellow,
selected: Color::Cyan,
card_selected: Color::Yellow,
card_visual: Color::Magenta,
card_title: Color::Cyan,
card_content: Color::White,
overlay_field_active: Color::Yellow,
overlay_field_selected: Color::Cyan,
overlay_field_placeholder: Color::DarkGray,
overlay_field_normal: Color::White,
explorer_folder: Color::Cyan,
explorer_file: Color::White,
explorer_file_selected: Color::Yellow,
status_bar: Color::White,
key: Color::Cyan,
string: Color::Magenta,
number: Color::Magenta,
boolean: Color::Yellow,
bracket: Color::Yellow,
}
}
pub fn morning() -> Self {
Self {
name: "Morning",
background: Color::White,
border: Color::Black,
window_border: Color::Black,
window_title: Color::Blue,
explorer_border: Color::Black,
explorer_title: Color::DarkGray,
card_border: Color::DarkGray,
text: Color::Black,
text_dim: Color::DarkGray,
line_number: Color::DarkGray,
highlight: Color::Yellow,
selected: Color::Cyan,
card_selected: Color::Blue,
card_visual: Color::Magenta,
card_title: Color::Blue,
card_content: Color::Black,
overlay_field_active: Color::Red,
overlay_field_selected: Color::Blue,
overlay_field_placeholder: Color::Gray,
overlay_field_normal: Color::Black,
explorer_folder: Color::Blue,
explorer_file: Color::Black,
explorer_file_selected: Color::Red,
status_bar: Color::Blue,
key: Color::Blue,
string: Color::Red,
number: Color::Magenta,
boolean: Color::DarkGray,
bracket: Color::Black,
}
}
pub fn evening() -> Self {
Self {
name: "Evening",
background: Color::Rgb(50, 50, 70),
border: Color::Rgb(120, 120, 140),
window_border: Color::Rgb(120, 120, 140),
window_title: Color::Rgb(200, 200, 255),
explorer_border: Color::Rgb(120, 120, 140),
explorer_title: Color::Rgb(150, 200, 255),
card_border: Color::Rgb(100, 100, 120),
text: Color::Rgb(220, 220, 255),
text_dim: Color::Rgb(140, 140, 160),
line_number: Color::Rgb(140, 140, 160),
highlight: Color::Yellow,
selected: Color::Cyan,
card_selected: Color::Rgb(255, 200, 100),
card_visual: Color::Rgb(150, 200, 255),
card_title: Color::Rgb(150, 200, 255),
card_content: Color::Rgb(220, 220, 255),
overlay_field_active: Color::Rgb(255, 200, 100),
overlay_field_selected: Color::Rgb(150, 200, 255),
overlay_field_placeholder: Color::Rgb(140, 140, 160),
overlay_field_normal: Color::Rgb(220, 220, 255),
explorer_folder: Color::Rgb(150, 200, 255),
explorer_file: Color::Rgb(200, 200, 220),
explorer_file_selected: Color::Rgb(255, 255, 255),
status_bar: Color::Rgb(150, 200, 255),
key: Color::Rgb(150, 200, 255),
string: Color::Rgb(255, 150, 150),
number: Color::Rgb(200, 150, 255),
boolean: Color::Rgb(200, 200, 150),
bracket: Color::Rgb(180, 180, 200),
}
}
pub fn pablo() -> Self {
Self {
name: "Pablo",
background: Color::Black,
border: Color::Rgb(100, 100, 100),
window_border: Color::Rgb(100, 100, 100),
window_title: Color::Cyan,
explorer_border: Color::Rgb(100, 100, 100),
explorer_title: Color::Yellow,
card_border: Color::Rgb(80, 80, 80),
text: Color::White,
text_dim: Color::DarkGray,
line_number: Color::DarkGray,
highlight: Color::Yellow,
selected: Color::Cyan,
card_selected: Color::Yellow,
card_visual: Color::Magenta,
card_title: Color::Cyan,
card_content: Color::White,
overlay_field_active: Color::Yellow,
overlay_field_selected: Color::Cyan,
overlay_field_placeholder: Color::DarkGray,
overlay_field_normal: Color::White,
explorer_folder: Color::Cyan,
explorer_file: Color::Gray,
explorer_file_selected: Color::Yellow,
status_bar: Color::Green,
key: Color::Cyan,
string: Color::Red,
number: Color::Magenta,
boolean: Color::Yellow,
bracket: Color::White,
}
}
pub fn ron() -> Self {
Self {
name: "Ron",
background: Color::Rgb(0, 0, 0),
border: Color::Rgb(135, 135, 135),
window_border: Color::Rgb(135, 135, 135),
window_title: Color::Rgb(175, 215, 255),
explorer_border: Color::Rgb(135, 135, 135),
explorer_title: Color::Rgb(255, 215, 0),
card_border: Color::Rgb(95, 95, 95),
text: Color::Rgb(215, 215, 215),
text_dim: Color::Rgb(135, 135, 135),
line_number: Color::Rgb(135, 135, 135),
highlight: Color::Rgb(255, 215, 0),
selected: Color::Rgb(0, 175, 215),
card_selected: Color::Rgb(255, 215, 0),
card_visual: Color::Rgb(215, 95, 255),
card_title: Color::Rgb(175, 215, 255),
card_content: Color::Rgb(215, 215, 215),
overlay_field_active: Color::Rgb(255, 215, 0),
overlay_field_selected: Color::Rgb(0, 175, 215),
overlay_field_placeholder: Color::Rgb(135, 135, 135),
overlay_field_normal: Color::Rgb(215, 215, 215),
explorer_folder: Color::Rgb(175, 215, 255),
explorer_file: Color::Rgb(175, 175, 175),
explorer_file_selected: Color::Rgb(255, 255, 255),
status_bar: Color::Rgb(95, 215, 135),
key: Color::Rgb(175, 215, 255),
string: Color::Rgb(255, 135, 135),
number: Color::Rgb(215, 135, 255),
boolean: Color::Rgb(255, 215, 0),
bracket: Color::Rgb(175, 175, 175),
}
}
pub fn blue() -> Self {
Self {
name: "Blue",
background: Color::Rgb(0, 0, 95),
border: Color::Rgb(95, 135, 175),
window_border: Color::Rgb(95, 135, 175),
window_title: Color::Rgb(175, 215, 255),
explorer_border: Color::Rgb(95, 135, 175),
explorer_title: Color::Rgb(255, 255, 135),
card_border: Color::Rgb(60, 95, 135),
text: Color::Rgb(215, 215, 255),
text_dim: Color::Rgb(135, 135, 175),
line_number: Color::Rgb(135, 135, 175),
highlight: Color::Yellow,
selected: Color::Cyan,
card_selected: Color::Rgb(255, 255, 135),
card_visual: Color::Rgb(255, 95, 215),
card_title: Color::Rgb(175, 215, 255),
card_content: Color::Rgb(215, 215, 255),
overlay_field_active: Color::Rgb(255, 255, 135),
overlay_field_selected: Color::Rgb(135, 215, 255),
overlay_field_placeholder: Color::Rgb(135, 135, 175),
overlay_field_normal: Color::Rgb(215, 215, 255),
explorer_folder: Color::Rgb(175, 215, 255),
explorer_file: Color::Rgb(175, 175, 215),
explorer_file_selected: Color::Rgb(255, 255, 255),
status_bar: Color::Rgb(135, 215, 255),
key: Color::Rgb(175, 215, 255),
string: Color::Rgb(255, 175, 175),
number: Color::Rgb(215, 175, 255),
boolean: Color::Rgb(135, 255, 175),
bracket: Color::Rgb(175, 215, 255),
}
}
pub fn by_name(name: &str) -> Option<Self> {
match name.to_lowercase().as_str() {
"default" => Some(Self::default()),
"morning" => Some(Self::morning()),
"evening" => Some(Self::evening()),
"pablo" => Some(Self::pablo()),
"ron" => Some(Self::ron()),
"blue" => Some(Self::blue()),
_ => None,
}
}
#[allow(dead_code)]
pub fn all_schemes() -> Vec<Self> {
vec![
Self::default(),
Self::morning(),
Self::evening(),
Self::pablo(),
Self::ron(),
Self::blue(),
]
}
pub fn all_scheme_names() -> Vec<&'static str> {
vec![
"Default",
"Morning",
"Evening",
"Pablo",
"Ron",
"Blue",
]
}
}