1use ratatui::style::Color;
2
3#[derive(Debug, Clone, Copy, PartialEq)]
5pub struct ColorPalette {
6 pub user_message: Color,
8 pub assistant_message: Color,
10 pub system_message: Color,
12 pub error: Color,
14 pub timestamp: Color,
16 pub border: Color,
18 pub code_block: Color,
20 pub tool_message: Color,
22 pub text: Color,
24 pub background: Color,
26}
27
28impl ColorPalette {
29 pub fn dark() -> Self {
31 Self {
32 user_message: Color::Cyan,
33 assistant_message: Color::Green,
34 system_message: Color::Yellow,
35 error: Color::Red,
36 timestamp: Color::Gray,
37 border: Color::Cyan,
38 code_block: Color::Gray,
39 tool_message: Color::Magenta,
40 text: Color::White,
41 background: Color::Black,
42 }
43 }
44
45 pub fn light() -> Self {
47 Self {
48 user_message: Color::Blue,
49 assistant_message: Color::Green,
50 system_message: Color::Yellow,
51 error: Color::Red,
52 timestamp: Color::Gray,
53 border: Color::Gray,
54 code_block: Color::Gray,
55 tool_message: Color::Magenta,
56 text: Color::Black,
57 background: Color::White,
58 }
59 }
60
61 pub fn solarized_dark() -> Self {
63 Self {
64 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), }
75 }
76
77 pub fn solarized_light() -> Self {
79 Self {
80 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), }
91 }
92
93 pub fn marketing() -> Self {
95 Self {
96 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), }
107 }
108
109 pub fn get_message_color(&self, role: &str) -> Color {
111 match role.to_lowercase().as_str() {
112 "user" => self.user_message,
113 "assistant" => self.assistant_message,
114 "system" => self.system_message,
115 "tool" => self.tool_message,
116 "error" => self.error,
117 _ => self.text,
118 }
119 }
120}
121
122impl Default for ColorPalette {
123 fn default() -> Self {
124 Self::marketing()
125 }
126}