use ratatui::style::Color; #[derive(Clone, Copy)] pub(super) struct Palette { pub primary: Color, pub accent: Color, pub canvas: Color, pub canvas_heading: Color, pub selection: Color, pub selection_foreground: Color, pub foreground: Color, } pub(super) fn palette(theme: &str) -> Palette { match theme { "mono" => Palette { primary: Color::Black, accent: Color::White, canvas: Color::Gray, canvas_heading: Color::Black, selection: Color::DarkGray, selection_foreground: rgb(0xffffff), foreground: Color::Black, }, "amber" => Palette { primary: Color::Black, accent: Color::Rgb(255, 191, 0), canvas: Color::Rgb(32, 24, 0), canvas_heading: Color::Rgb(255, 191, 0), selection: Color::Rgb(112, 56, 0), selection_foreground: rgb(0xffffff), foreground: Color::Rgb(255, 191, 0), }, "greenscreen" => Palette { primary: Color::Black, accent: rgb(0x79a86b), canvas: rgb(0x030704), canvas_heading: rgb(0x9ac58d), selection: rgb(0x284b2f), selection_foreground: rgb(0xdce8d8), foreground: rgb(0x8fbd80), }, "nord" => Palette { primary: rgb(0x2e3440), accent: rgb(0x88c0d0), canvas: rgb(0x3b4252), canvas_heading: rgb(0xeceff4), selection: rgb(0xeceff4), selection_foreground: rgb(0x2e3440), foreground: rgb(0xeceff4), }, "catppuccin-mocha" => Palette { primary: rgb(0x181825), accent: rgb(0xcba6f7), canvas: rgb(0x1e1e2e), canvas_heading: rgb(0xcdd6f4), selection: rgb(0xcba6f7), selection_foreground: rgb(0x11111b), foreground: rgb(0xcdd6f4), }, _ => Palette { primary: Color::Rgb(0, 0, 128), accent: Color::Cyan, canvas: Color::Rgb(192, 192, 192), canvas_heading: Color::Rgb(0, 0, 128), selection: Color::Rgb(128, 0, 0), selection_foreground: rgb(0xffffff), foreground: Color::Black, }, } } pub(super) const fn rgb(value: u32) -> Color { Color::Rgb( ((value >> 16) & 0xff) as u8, ((value >> 8) & 0xff) as u8, (value & 0xff) as u8, ) }