use std::sync::atomic::{AtomicU8, Ordering};
use ratatui::style::{Color, Modifier, Style};
static COLOR_MODE: AtomicU8 = AtomicU8::new(1);
pub fn init() {
if std::env::var_os("NO_COLOR").is_some() {
COLOR_MODE.store(0, Ordering::Release);
} else if std::env::var("COLORTERM")
.map(|v| v == "truecolor" || v == "24bit")
.unwrap_or(false)
{
COLOR_MODE.store(2, Ordering::Release);
}
}
pub fn brand_badge() -> Style {
match COLOR_MODE.load(Ordering::Acquire) {
0 => Style::default()
.add_modifier(Modifier::BOLD | Modifier::REVERSED)
.remove_modifier(Modifier::DIM),
2 => Style::default()
.fg(Color::White)
.bg(Color::Rgb(147, 51, 234))
.add_modifier(Modifier::BOLD)
.remove_modifier(Modifier::DIM),
_ => Style::default()
.fg(Color::White)
.bg(Color::Magenta)
.add_modifier(Modifier::BOLD)
.remove_modifier(Modifier::DIM),
}
}
pub fn brand() -> Style {
Style::default().add_modifier(Modifier::BOLD)
}
pub fn accent() -> Style {
Style::default()
}
pub fn accent_bold() -> Style {
Style::default().add_modifier(Modifier::BOLD)
}
pub fn highlight_bold() -> Style {
Style::default().add_modifier(Modifier::BOLD | Modifier::REVERSED)
}
pub fn primary_action() -> Style {
Style::default().add_modifier(Modifier::BOLD)
}
pub fn muted() -> Style {
Style::default().add_modifier(Modifier::DIM)
}
pub fn section_header() -> Style {
Style::default().add_modifier(Modifier::BOLD)
}
pub fn error() -> Style {
match COLOR_MODE.load(Ordering::Acquire) {
0 => Style::default().add_modifier(Modifier::BOLD),
2 => Style::default()
.fg(Color::Rgb(239, 68, 68))
.add_modifier(Modifier::BOLD),
_ => Style::default()
.fg(Color::Red)
.add_modifier(Modifier::BOLD),
}
}
pub fn success() -> Style {
match COLOR_MODE.load(Ordering::Acquire) {
0 => Style::default().add_modifier(Modifier::BOLD),
2 => Style::default()
.fg(Color::Rgb(34, 197, 94))
.add_modifier(Modifier::BOLD),
_ => Style::default()
.fg(Color::Green)
.add_modifier(Modifier::BOLD),
}
}
pub fn danger() -> Style {
match COLOR_MODE.load(Ordering::Acquire) {
0 => Style::default().add_modifier(Modifier::BOLD),
2 => Style::default()
.fg(Color::Rgb(239, 68, 68))
.add_modifier(Modifier::BOLD),
_ => Style::default()
.fg(Color::Red)
.add_modifier(Modifier::BOLD),
}
}
pub fn border() -> Style {
Style::default().add_modifier(Modifier::DIM)
}
pub fn border_search() -> Style {
match COLOR_MODE.load(Ordering::Acquire) {
0 => Style::default().add_modifier(Modifier::BOLD),
2 => Style::default().fg(Color::Rgb(147, 51, 234)),
_ => Style::default().fg(Color::Magenta),
}
}
pub fn selected_row() -> Style {
match COLOR_MODE.load(Ordering::Acquire) {
0 => Style::default()
.add_modifier(Modifier::REVERSED)
.remove_modifier(Modifier::DIM),
2 => Style::default()
.fg(Color::White)
.bg(Color::Rgb(147, 51, 234))
.add_modifier(Modifier::BOLD)
.remove_modifier(Modifier::DIM),
_ => Style::default()
.fg(Color::White)
.bg(Color::Magenta)
.add_modifier(Modifier::BOLD)
.remove_modifier(Modifier::DIM),
}
}
pub fn border_danger() -> Style {
match COLOR_MODE.load(Ordering::Acquire) {
0 => Style::default().add_modifier(Modifier::BOLD),
2 => Style::default()
.fg(Color::Rgb(239, 68, 68))
.add_modifier(Modifier::BOLD),
_ => Style::default()
.fg(Color::Red)
.add_modifier(Modifier::BOLD),
}
}
pub fn bold() -> Style {
Style::default().add_modifier(Modifier::BOLD)
}
pub fn update_badge() -> Style {
match COLOR_MODE.load(Ordering::Acquire) {
0 => Style::default()
.add_modifier(Modifier::BOLD | Modifier::REVERSED)
.remove_modifier(Modifier::DIM),
2 => Style::default()
.fg(Color::White)
.bg(Color::Rgb(147, 51, 234))
.add_modifier(Modifier::BOLD)
.remove_modifier(Modifier::DIM),
_ => Style::default()
.fg(Color::White)
.bg(Color::Magenta)
.add_modifier(Modifier::BOLD)
.remove_modifier(Modifier::DIM),
}
}