use ratatui::style::Color;
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct ColorPalette {
pub user_message: Color,
pub assistant_message: Color,
pub system_message: Color,
pub error: Color,
pub timestamp: Color,
pub border: Color,
pub code_block: Color,
pub tool_message: Color,
pub text: Color,
pub background: Color,
}
impl ColorPalette {
pub fn dark() -> Self {
Self {
user_message: Color::Cyan,
assistant_message: Color::Green,
system_message: Color::Yellow,
error: Color::Red,
timestamp: Color::DarkGray,
border: Color::Cyan,
code_block: Color::DarkGray,
tool_message: Color::Magenta,
text: Color::White,
background: Color::Black,
}
}
pub fn light() -> Self {
Self {
user_message: Color::DarkBlue,
assistant_message: Color::DarkGreen,
system_message: Color::DarkYellow,
error: Color::DarkRed,
timestamp: Color::Gray,
border: Color::DarkGray,
code_block: Color::Gray,
tool_message: Color::DarkMagenta,
text: Color::Black,
background: Color::White,
}
}
pub fn solarized_dark() -> Self {
Self {
user_message: Color::Rgb(133, 153, 0), assistant_message: Color::Rgb(42, 161, 152), system_message: Color::Rgb(181, 137, 0), error: Color::Rgb(220, 50, 47), timestamp: Color::Rgb(101, 123, 131), border: Color::Rgb(131, 148, 150), code_block: Color::Rgb(88, 110, 117), tool_message: Color::Rgb(211, 54, 130), text: Color::Rgb(238, 232, 213), background: Color::Rgb(0, 43, 54), }
}
pub fn solarized_light() -> Self {
Self {
user_message: Color::Rgb(133, 153, 0), assistant_message: Color::Rgb(42, 161, 152), system_message: Color::Rgb(181, 137, 0), error: Color::Rgb(220, 50, 47), timestamp: Color::Rgb(131, 148, 150), border: Color::Rgb(88, 110, 117), code_block: Color::Rgb(147, 161, 161), tool_message: Color::Rgb(211, 54, 130), text: Color::Rgb(88, 110, 117), background: Color::Rgb(253, 246, 227), }
}
pub fn marketing() -> Self {
Self {
user_message: Color::Rgb(6, 182, 212), assistant_message: Color::Rgb(34, 211, 238), system_message: Color::Rgb(250, 204, 21), error: Color::Rgb(248, 113, 113), timestamp: Color::Rgb(107, 114, 128), border: Color::Rgb(31, 41, 55), code_block: Color::Rgb(75, 85, 99), tool_message: Color::Rgb(232, 121, 249), text: Color::Rgb(229, 231, 235), background: Color::Rgb(3, 7, 18), }
}
pub fn get_message_color(&self, role: &str) -> Color {
match role.to_lowercase().as_str() {
"user" => self.user_message,
"assistant" => self.assistant_message,
"system" => self.system_message,
"tool" => self.tool_message,
"error" => self.error,
_ => self.text,
}
}
}
impl Default for ColorPalette {
fn default() -> Self {
Self::marketing()
}
}