use console::Style;
use once_cell::sync::Lazy;
use outstanding::{rgb_to_ansi256, AdaptiveTheme, Theme};
pub mod names {
pub const TITLE: &str = "title";
pub const TIME: &str = "time";
pub const HINT: &str = "hint";
pub const LIST_INDEX: &str = "list-index";
pub const LIST_TITLE: &str = "list-title";
pub const PINNED: &str = "pinned";
pub const DELETED: &str = "deleted";
pub const DELETED_INDEX: &str = "deleted-index";
pub const DELETED_TITLE: &str = "deleted-title";
pub const STATUS_ICON: &str = "status-icon";
pub const HIGHLIGHT: &str = "highlight";
pub const MATCH: &str = "match";
pub const ERROR: &str = "error";
pub const WARNING: &str = "warning";
pub const SUCCESS: &str = "success";
pub const INFO: &str = "info";
pub const HELP_HEADER: &str = "help-header";
pub const HELP_SECTION: &str = "help-section";
pub const HELP_COMMAND: &str = "help-command";
pub const HELP_DESC: &str = "help-desc";
pub const HELP_USAGE: &str = "help-usage";
pub const HELP_TEXT: &str = "help-text";
pub const SECTION_HEADER: &str = "section-header";
pub const EMPTY_MESSAGE: &str = "empty-message";
pub const PREVIEW: &str = "preview";
pub const TRUNCATION: &str = "truncation";
pub const LINE_NUMBER: &str = "line-number";
pub const SEPARATOR: &str = "separator";
}
#[allow(dead_code)]
pub static PADZ_THEME: Lazy<AdaptiveTheme> =
Lazy::new(|| AdaptiveTheme::new(build_light_theme(), build_dark_theme()));
pub fn get_resolved_theme() -> Theme {
match dark_light::detect() {
dark_light::Mode::Light => build_light_theme(),
dark_light::Mode::Dark => build_dark_theme(),
}
}
fn build_light_theme() -> Theme {
let primary = Style::new().black();
let gray = Style::new().color256(rgb_to_ansi256((115, 115, 115)));
let gray_light = Style::new().color256(rgb_to_ansi256((173, 173, 173)));
let gold = Style::new().color256(rgb_to_ansi256((196, 140, 0)));
let red = Style::new().color256(rgb_to_ansi256((186, 33, 45)));
let green = Style::new().color256(rgb_to_ansi256((0, 128, 0)));
let yellow_bg = Style::new()
.black()
.on_color256(rgb_to_ansi256((255, 235, 59)));
Theme::new()
.add("_primary", primary.clone())
.add("_gray", gray.clone())
.add("_gray_light", gray_light.clone())
.add("_gold", gold.clone())
.add("_red", red.clone())
.add("_green", green.clone())
.add("_yellow_bg", yellow_bg)
.add("_secondary", "_gray")
.add("_tertiary", "_gray_light")
.add("_accent", "_gold")
.add("_danger", "_red")
.add("_success", "_green")
.add(names::TITLE, primary.clone().bold())
.add(names::TIME, gray.clone().italic())
.add(names::HINT, "_tertiary")
.add(names::LIST_INDEX, "_accent")
.add(names::LIST_TITLE, "_primary")
.add(names::PINNED, gold.clone().bold())
.add(names::DELETED, "_danger")
.add(names::DELETED_INDEX, "_danger")
.add(names::DELETED_TITLE, "_secondary")
.add(names::STATUS_ICON, "_secondary")
.add(names::HIGHLIGHT, "_yellow_bg")
.add(names::MATCH, "_yellow_bg")
.add(names::ERROR, red.clone().bold())
.add(names::WARNING, gold.clone().bold())
.add(names::SUCCESS, "_success")
.add(names::INFO, "_secondary")
.add(names::HELP_HEADER, primary.clone().bold())
.add(names::HELP_SECTION, gold.clone().bold())
.add(names::HELP_COMMAND, "_success")
.add(names::HELP_DESC, "_secondary")
.add(names::HELP_USAGE, Style::new().cyan())
.add(names::HELP_TEXT, "_tertiary")
.add(names::SECTION_HEADER, "_secondary")
.add(names::EMPTY_MESSAGE, "_secondary")
.add(names::PREVIEW, "_tertiary")
.add(names::TRUNCATION, "_secondary")
.add(names::LINE_NUMBER, "_secondary")
.add(names::SEPARATOR, "_tertiary")
}
fn build_dark_theme() -> Theme {
let primary = Style::new().white();
let gray = Style::new().color256(rgb_to_ansi256((180, 180, 180)));
let gray_light = Style::new().color256(rgb_to_ansi256((110, 110, 110)));
let gold = Style::new().color256(rgb_to_ansi256((255, 214, 10)));
let red = Style::new().color256(rgb_to_ansi256((255, 138, 128)));
let green = Style::new().color256(rgb_to_ansi256((144, 238, 144)));
let yellow_bg = Style::new()
.black()
.on_color256(rgb_to_ansi256((229, 185, 0)));
Theme::new()
.add("_primary", primary.clone())
.add("_gray", gray.clone())
.add("_gray_light", gray_light.clone())
.add("_gold", gold.clone())
.add("_red", red.clone())
.add("_green", green.clone())
.add("_yellow_bg", yellow_bg)
.add("_secondary", "_gray")
.add("_tertiary", "_gray_light")
.add("_accent", "_gold")
.add("_danger", "_red")
.add("_success", "_green")
.add(names::TITLE, primary.clone().bold())
.add(names::TIME, gray.clone().italic())
.add(names::HINT, "_tertiary")
.add(names::LIST_INDEX, "_accent")
.add(names::LIST_TITLE, "_primary")
.add(names::PINNED, gold.clone().bold())
.add(names::DELETED, "_danger")
.add(names::DELETED_INDEX, "_danger")
.add(names::DELETED_TITLE, "_secondary")
.add(names::STATUS_ICON, "_secondary")
.add(names::HIGHLIGHT, "_yellow_bg")
.add(names::MATCH, "_yellow_bg")
.add(names::ERROR, red.clone().bold())
.add(names::WARNING, gold.clone().bold())
.add(names::SUCCESS, "_success")
.add(names::INFO, "_secondary")
.add(names::HELP_HEADER, primary.clone().bold())
.add(names::HELP_SECTION, gold.clone().bold())
.add(names::HELP_COMMAND, "_success")
.add(names::HELP_DESC, "_secondary")
.add(names::HELP_USAGE, Style::new().cyan())
.add(names::HELP_TEXT, "_tertiary")
.add(names::SECTION_HEADER, "_secondary")
.add(names::EMPTY_MESSAGE, "_secondary")
.add(names::PREVIEW, "_tertiary")
.add(names::TRUNCATION, "_secondary")
.add(names::LINE_NUMBER, "_secondary")
.add(names::SEPARATOR, "_tertiary")
}