1use ratatui::style::Color;
23use serde::{Deserialize, Serialize};
24
25#[derive(Debug, Clone)]
27pub struct ColorScheme {
28 pub focused_border: Color,
31 pub unfocused_border: Color,
33 pub panel_bg: Color,
35
36 pub keyword_color: Color,
39 pub string_color: Color,
41 pub comment_color: Color,
43 pub number_color: Color,
45 pub identifier_color: Color,
47 pub operator_color: Color,
49
50 pub line_number: Color,
53 pub line_number_bg: Color,
55
56 pub syntax_keyword_color: Color,
59 pub syntax_type_color: Color,
61 pub syntax_string_color: Color,
63 pub syntax_number_color: Color,
65 pub syntax_comment_color: Color,
67 pub syntax_identifier_color: Color,
69 pub syntax_operator_color: Color,
71 pub syntax_punctuation_color: Color,
73 pub syntax_address_color: Color,
75 pub syntax_pragma_color: Color,
77 pub syntax_opcode_color: Color,
79
80 pub highlight_bg: Color,
83 pub highlight_fg: Color,
85
86 pub help_text_color: Color,
89
90 pub current_line_bg: Color,
93 pub current_line_fg: Color,
95 pub breakpoint_color: Color,
97 pub error_color: Color,
99 pub success_color: Color,
101 pub warning_color: Color,
103 pub info_color: Color,
105
106 pub call_color: Color,
109 pub return_color: Color,
111 pub revert_color: Color,
113 pub create_color: Color,
115
116 pub prompt_color: Color,
119 pub command_color: Color,
121 pub output_color: Color,
123 pub cursor_color: Color,
125
126 pub selection_bg: Color,
129 pub selection_fg: Color,
131 pub hover_color: Color,
133 pub accent_color: Color,
135}
136
137#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
139pub enum Theme {
140 CyberpunkDark,
142 TerminalHacker,
144 ModernIDE,
146 HighContrast,
148 SolarizedDark,
150 MonokaiPro,
152 NordDark,
154 DraculaDark,
156 VSCodeLight,
158}
159
160impl Default for Theme {
161 fn default() -> Self {
162 Self::ModernIDE
163 }
164}
165
166impl Theme {
167 pub fn all() -> &'static [Self] {
169 &[
170 Self::CyberpunkDark,
171 Self::TerminalHacker,
172 Self::ModernIDE,
173 Self::HighContrast,
174 Self::SolarizedDark,
175 Self::MonokaiPro,
176 Self::NordDark,
177 Self::DraculaDark,
178 Self::VSCodeLight,
179 ]
180 }
181
182 pub fn name(&self) -> &'static str {
184 match self {
185 Self::CyberpunkDark => "neon_purple",
186 Self::TerminalHacker => "matrix_green",
187 Self::ModernIDE => "vscode_dark",
188 Self::HighContrast => "accessibility",
189 Self::SolarizedDark => "solarized_dark",
190 Self::MonokaiPro => "monokai_pro",
191 Self::NordDark => "nord_dark",
192 Self::DraculaDark => "dracula_dark",
193 Self::VSCodeLight => "vscode_light",
194 }
195 }
196
197 pub fn display_name(&self) -> &'static str {
199 match self {
200 Self::CyberpunkDark => "Neon Purple",
201 Self::TerminalHacker => "Matrix Green",
202 Self::ModernIDE => "VS Code Dark",
203 Self::HighContrast => "High Contrast",
204 Self::SolarizedDark => "Solarized Dark",
205 Self::MonokaiPro => "Monokai Pro",
206 Self::NordDark => "Nord Dark",
207 Self::DraculaDark => "Dracula",
208 Self::VSCodeLight => "VS Code Light",
209 }
210 }
211
212 pub fn description(&self) -> &'static str {
214 match self {
215 Self::CyberpunkDark => "Neon purple cyberpunk theme",
216 Self::TerminalHacker => "Classic green terminal theme",
217 Self::ModernIDE => "Professional VS Code dark theme",
218 Self::HighContrast => "High contrast accessibility theme",
219 Self::SolarizedDark => "Warm Solarized dark theme",
220 Self::MonokaiPro => "Vibrant Monokai theme",
221 Self::NordDark => "Cool Arctic-inspired theme",
222 Self::DraculaDark => "Purple Dracula theme",
223 Self::VSCodeLight => "Clean VS Code light theme",
224 }
225 }
226
227 pub fn next(&self) -> Self {
229 match self {
230 Self::CyberpunkDark => Self::TerminalHacker,
231 Self::TerminalHacker => Self::ModernIDE,
232 Self::ModernIDE => Self::HighContrast,
233 Self::HighContrast => Self::SolarizedDark,
234 Self::SolarizedDark => Self::MonokaiPro,
235 Self::MonokaiPro => Self::NordDark,
236 Self::NordDark => Self::DraculaDark,
237 Self::DraculaDark => Self::VSCodeLight,
238 Self::VSCodeLight => Self::CyberpunkDark,
239 }
240 }
241}
242
243impl From<Theme> for ColorScheme {
244 fn from(theme: Theme) -> Self {
245 match theme {
246 Theme::CyberpunkDark => cyberpunk_dark(),
247 Theme::TerminalHacker => terminal_hacker(),
248 Theme::ModernIDE => modern_ide(),
249 Theme::HighContrast => high_contrast(),
250 Theme::SolarizedDark => solarized_dark(),
251 Theme::MonokaiPro => monokai_pro(),
252 Theme::NordDark => nord_dark(),
253 Theme::DraculaDark => dracula_dark(),
254 Theme::VSCodeLight => vscode_light(),
255 }
256 }
257}
258
259impl Default for ColorScheme {
260 fn default() -> Self {
261 Theme::ModernIDE.into()
262 }
263}
264
265fn cyberpunk_dark() -> ColorScheme {
267 ColorScheme {
268 focused_border: Color::Rgb(138, 43, 226), unfocused_border: Color::Rgb(75, 75, 75), panel_bg: Color::Rgb(20, 20, 30), keyword_color: Color::Rgb(255, 20, 147), string_color: Color::Rgb(0, 255, 127), comment_color: Color::Rgb(108, 108, 108), number_color: Color::Rgb(255, 165, 0), identifier_color: Color::Rgb(135, 206, 250), operator_color: Color::Rgb(255, 255, 255), line_number: Color::Rgb(100, 100, 100), line_number_bg: Color::Rgb(20, 20, 30), syntax_keyword_color: Color::Rgb(255, 20, 147), syntax_type_color: Color::Rgb(255, 105, 180), syntax_string_color: Color::Rgb(0, 255, 127), syntax_number_color: Color::Rgb(255, 165, 0), syntax_comment_color: Color::Rgb(108, 108, 108), syntax_identifier_color: Color::Rgb(135, 206, 250), syntax_operator_color: Color::Rgb(255, 255, 255), syntax_punctuation_color: Color::Rgb(220, 220, 220), syntax_address_color: Color::Rgb(255, 215, 0), syntax_pragma_color: Color::Rgb(186, 85, 211), syntax_opcode_color: Color::Rgb(0, 255, 255), highlight_bg: Color::Rgb(60, 40, 100), highlight_fg: Color::Rgb(255, 255, 255), help_text_color: Color::Rgb(160, 160, 160), current_line_bg: Color::Rgb(100, 20, 50), current_line_fg: Color::Rgb(255, 255, 255), breakpoint_color: Color::Rgb(255, 69, 0), error_color: Color::Rgb(220, 20, 60), success_color: Color::Rgb(50, 205, 50), warning_color: Color::Rgb(255, 215, 0), info_color: Color::Rgb(30, 144, 255), call_color: Color::Rgb(0, 255, 255), return_color: Color::Rgb(50, 205, 50), revert_color: Color::Rgb(255, 69, 0), create_color: Color::Rgb(255, 20, 147), prompt_color: Color::Rgb(138, 43, 226), command_color: Color::Rgb(255, 255, 255), output_color: Color::Rgb(192, 192, 192), cursor_color: Color::Rgb(0, 255, 0), selection_bg: Color::Rgb(60, 40, 100), selection_fg: Color::Rgb(255, 255, 255), hover_color: Color::Rgb(147, 112, 219), accent_color: Color::Rgb(0, 255, 255), }
332}
333
334fn terminal_hacker() -> ColorScheme {
336 ColorScheme {
337 focused_border: Color::Rgb(0, 255, 0), unfocused_border: Color::Rgb(0, 128, 0), panel_bg: Color::Rgb(0, 0, 0), keyword_color: Color::Rgb(0, 255, 0), string_color: Color::Rgb(0, 255, 127), comment_color: Color::Rgb(0, 128, 0), number_color: Color::Rgb(0, 255, 255), identifier_color: Color::Rgb(255, 255, 255), operator_color: Color::Rgb(0, 255, 0), line_number: Color::Rgb(0, 128, 0), line_number_bg: Color::Rgb(0, 0, 0), syntax_keyword_color: Color::Rgb(0, 255, 0), syntax_type_color: Color::Rgb(0, 255, 127), syntax_string_color: Color::Rgb(0, 255, 127), syntax_number_color: Color::Rgb(0, 255, 255), syntax_comment_color: Color::Rgb(0, 128, 0), syntax_identifier_color: Color::Rgb(255, 255, 255), syntax_operator_color: Color::Rgb(0, 255, 0), syntax_punctuation_color: Color::Rgb(0, 192, 0), syntax_address_color: Color::Rgb(255, 255, 0), syntax_pragma_color: Color::Rgb(0, 255, 255), syntax_opcode_color: Color::Rgb(0, 255, 255), highlight_bg: Color::Rgb(0, 80, 0), highlight_fg: Color::Rgb(255, 255, 255), help_text_color: Color::Rgb(0, 192, 0), current_line_bg: Color::Rgb(0, 100, 50), current_line_fg: Color::Rgb(255, 255, 255), breakpoint_color: Color::Rgb(255, 0, 0), error_color: Color::Rgb(255, 0, 0), success_color: Color::Rgb(0, 255, 0), warning_color: Color::Rgb(255, 255, 0), info_color: Color::Rgb(0, 255, 255), call_color: Color::Rgb(0, 255, 255), return_color: Color::Rgb(0, 255, 0), revert_color: Color::Rgb(255, 0, 0), create_color: Color::Rgb(255, 255, 0), prompt_color: Color::Rgb(0, 255, 0), command_color: Color::Rgb(255, 255, 255), output_color: Color::Rgb(0, 255, 0), cursor_color: Color::Rgb(0, 255, 0), selection_bg: Color::Rgb(0, 80, 0), selection_fg: Color::Rgb(255, 255, 255), hover_color: Color::Rgb(0, 192, 0), accent_color: Color::Rgb(0, 255, 255), }
401}
402
403fn modern_ide() -> ColorScheme {
405 ColorScheme {
406 focused_border: Color::Rgb(0, 122, 204), unfocused_border: Color::Rgb(60, 60, 60), panel_bg: Color::Rgb(30, 30, 30), keyword_color: Color::Rgb(86, 156, 214), string_color: Color::Rgb(206, 145, 120), comment_color: Color::Rgb(106, 153, 85), number_color: Color::Rgb(181, 206, 168), identifier_color: Color::Rgb(220, 220, 170), operator_color: Color::Rgb(212, 212, 212), line_number: Color::Rgb(128, 128, 128), line_number_bg: Color::Rgb(30, 30, 30), syntax_keyword_color: Color::Rgb(86, 156, 214), syntax_type_color: Color::Rgb(78, 201, 176), syntax_string_color: Color::Rgb(206, 145, 120), syntax_number_color: Color::Rgb(181, 206, 168), syntax_comment_color: Color::Rgb(106, 153, 85), syntax_identifier_color: Color::Rgb(220, 220, 170), syntax_operator_color: Color::Rgb(212, 212, 212), syntax_punctuation_color: Color::Rgb(200, 200, 200), syntax_address_color: Color::Rgb(255, 204, 102), syntax_pragma_color: Color::Rgb(197, 134, 192), syntax_opcode_color: Color::Rgb(86, 156, 214), highlight_bg: Color::Rgb(0, 90, 160), highlight_fg: Color::Rgb(255, 255, 255), help_text_color: Color::Rgb(160, 160, 160), current_line_bg: Color::Rgb(80, 60, 0), current_line_fg: Color::Rgb(255, 255, 255), breakpoint_color: Color::Rgb(244, 71, 71), error_color: Color::Rgb(244, 71, 71), success_color: Color::Rgb(106, 153, 85), warning_color: Color::Rgb(255, 204, 102), info_color: Color::Rgb(86, 156, 214), call_color: Color::Rgb(78, 201, 176), return_color: Color::Rgb(106, 153, 85), revert_color: Color::Rgb(244, 71, 71), create_color: Color::Rgb(197, 134, 192), prompt_color: Color::Rgb(0, 122, 204), command_color: Color::Rgb(212, 212, 212), output_color: Color::Rgb(204, 204, 204), cursor_color: Color::Rgb(255, 255, 255), selection_bg: Color::Rgb(0, 90, 160), selection_fg: Color::Rgb(255, 255, 255), hover_color: Color::Rgb(60, 60, 60), accent_color: Color::Rgb(0, 122, 204), }
470}
471
472fn high_contrast() -> ColorScheme {
474 ColorScheme {
475 focused_border: Color::Rgb(255, 255, 255), unfocused_border: Color::Rgb(128, 128, 128), panel_bg: Color::Rgb(0, 0, 0), keyword_color: Color::Rgb(255, 255, 0), string_color: Color::Rgb(0, 255, 0), comment_color: Color::Rgb(128, 128, 128), number_color: Color::Rgb(0, 255, 255), identifier_color: Color::Rgb(255, 255, 255), operator_color: Color::Rgb(255, 255, 255), line_number: Color::Rgb(255, 255, 255), line_number_bg: Color::Rgb(0, 0, 0), syntax_keyword_color: Color::Rgb(255, 255, 0), syntax_type_color: Color::Rgb(255, 0, 255), syntax_string_color: Color::Rgb(0, 255, 0), syntax_number_color: Color::Rgb(0, 255, 255), syntax_comment_color: Color::Rgb(128, 128, 128), syntax_identifier_color: Color::Rgb(255, 255, 255), syntax_operator_color: Color::Rgb(255, 255, 255), syntax_punctuation_color: Color::Rgb(255, 255, 255), syntax_address_color: Color::Rgb(255, 255, 0), syntax_pragma_color: Color::Rgb(255, 0, 255), syntax_opcode_color: Color::Rgb(0, 255, 255), highlight_bg: Color::Rgb(200, 200, 200), highlight_fg: Color::Rgb(0, 0, 0), help_text_color: Color::Rgb(255, 255, 255), current_line_bg: Color::Rgb(180, 180, 180), current_line_fg: Color::Rgb(0, 0, 0), breakpoint_color: Color::Rgb(255, 0, 0), error_color: Color::Rgb(255, 0, 0), success_color: Color::Rgb(0, 255, 0), warning_color: Color::Rgb(255, 255, 0), info_color: Color::Rgb(0, 0, 255), call_color: Color::Rgb(0, 255, 255), return_color: Color::Rgb(0, 255, 0), revert_color: Color::Rgb(255, 0, 0), create_color: Color::Rgb(255, 0, 255), prompt_color: Color::Rgb(255, 255, 255), command_color: Color::Rgb(255, 255, 255), output_color: Color::Rgb(255, 255, 255), cursor_color: Color::Rgb(255, 255, 255), selection_bg: Color::Rgb(200, 200, 200), selection_fg: Color::Rgb(0, 0, 0), hover_color: Color::Rgb(128, 128, 128), accent_color: Color::Rgb(255, 255, 255), }
539}
540
541fn solarized_dark() -> ColorScheme {
543 ColorScheme {
544 focused_border: Color::Rgb(38, 139, 210), unfocused_border: Color::Rgb(88, 110, 117), panel_bg: Color::Rgb(0, 43, 54), keyword_color: Color::Rgb(133, 153, 0), string_color: Color::Rgb(42, 161, 152), comment_color: Color::Rgb(101, 123, 131), number_color: Color::Rgb(203, 75, 22), identifier_color: Color::Rgb(131, 148, 150), operator_color: Color::Rgb(147, 161, 161), line_number: Color::Rgb(88, 110, 117), line_number_bg: Color::Rgb(0, 43, 54), syntax_keyword_color: Color::Rgb(133, 153, 0), syntax_type_color: Color::Rgb(181, 137, 0), syntax_string_color: Color::Rgb(42, 161, 152), syntax_number_color: Color::Rgb(203, 75, 22), syntax_comment_color: Color::Rgb(101, 123, 131), syntax_identifier_color: Color::Rgb(131, 148, 150), syntax_operator_color: Color::Rgb(147, 161, 161), syntax_punctuation_color: Color::Rgb(147, 161, 161), syntax_address_color: Color::Rgb(203, 75, 22), syntax_pragma_color: Color::Rgb(108, 113, 196), syntax_opcode_color: Color::Rgb(38, 139, 210), highlight_bg: Color::Rgb(30, 100, 160), highlight_fg: Color::Rgb(253, 246, 227), help_text_color: Color::Rgb(131, 148, 150), current_line_bg: Color::Rgb(100, 50, 0), current_line_fg: Color::Rgb(253, 246, 227), breakpoint_color: Color::Rgb(220, 50, 47), error_color: Color::Rgb(220, 50, 47), success_color: Color::Rgb(133, 153, 0), warning_color: Color::Rgb(181, 137, 0), info_color: Color::Rgb(38, 139, 210), call_color: Color::Rgb(42, 161, 152), return_color: Color::Rgb(133, 153, 0), revert_color: Color::Rgb(220, 50, 47), create_color: Color::Rgb(108, 113, 196), prompt_color: Color::Rgb(38, 139, 210), command_color: Color::Rgb(147, 161, 161), output_color: Color::Rgb(131, 148, 150), cursor_color: Color::Rgb(220, 50, 47), selection_bg: Color::Rgb(30, 100, 160), selection_fg: Color::Rgb(253, 246, 227), hover_color: Color::Rgb(88, 110, 117), accent_color: Color::Rgb(203, 75, 22), }
608}
609
610fn monokai_pro() -> ColorScheme {
612 ColorScheme {
613 focused_border: Color::Rgb(102, 217, 239), unfocused_border: Color::Rgb(90, 90, 90), panel_bg: Color::Rgb(45, 42, 46), keyword_color: Color::Rgb(249, 38, 114), string_color: Color::Rgb(230, 219, 116), comment_color: Color::Rgb(117, 113, 94), number_color: Color::Rgb(174, 129, 255), identifier_color: Color::Rgb(248, 248, 242), operator_color: Color::Rgb(249, 38, 114), line_number: Color::Rgb(90, 90, 90), line_number_bg: Color::Rgb(45, 42, 46), syntax_keyword_color: Color::Rgb(249, 38, 114), syntax_type_color: Color::Rgb(102, 217, 239), syntax_string_color: Color::Rgb(230, 219, 116), syntax_number_color: Color::Rgb(174, 129, 255), syntax_comment_color: Color::Rgb(117, 113, 94), syntax_identifier_color: Color::Rgb(248, 248, 242), syntax_operator_color: Color::Rgb(249, 38, 114), syntax_punctuation_color: Color::Rgb(248, 248, 242), syntax_address_color: Color::Rgb(230, 219, 116), syntax_pragma_color: Color::Rgb(174, 129, 255), syntax_opcode_color: Color::Rgb(166, 226, 46), highlight_bg: Color::Rgb(60, 60, 65), highlight_fg: Color::Rgb(248, 248, 242), help_text_color: Color::Rgb(248, 248, 242), current_line_bg: Color::Rgb(80, 40, 80), current_line_fg: Color::Rgb(248, 248, 242), breakpoint_color: Color::Rgb(249, 38, 114), error_color: Color::Rgb(249, 38, 114), success_color: Color::Rgb(166, 226, 46), warning_color: Color::Rgb(230, 219, 116), info_color: Color::Rgb(102, 217, 239), call_color: Color::Rgb(102, 217, 239), return_color: Color::Rgb(166, 226, 46), revert_color: Color::Rgb(249, 38, 114), create_color: Color::Rgb(174, 129, 255), prompt_color: Color::Rgb(249, 38, 114), command_color: Color::Rgb(248, 248, 242), output_color: Color::Rgb(248, 248, 242), cursor_color: Color::Rgb(102, 217, 239), selection_bg: Color::Rgb(60, 60, 65), selection_fg: Color::Rgb(248, 248, 242), hover_color: Color::Rgb(90, 90, 90), accent_color: Color::Rgb(249, 38, 114), }
677}
678
679fn nord_dark() -> ColorScheme {
681 ColorScheme {
682 focused_border: Color::Rgb(136, 192, 208), unfocused_border: Color::Rgb(76, 86, 106), panel_bg: Color::Rgb(46, 52, 64), keyword_color: Color::Rgb(129, 161, 193), string_color: Color::Rgb(163, 190, 140), comment_color: Color::Rgb(76, 86, 106), number_color: Color::Rgb(180, 142, 173), identifier_color: Color::Rgb(216, 222, 233), operator_color: Color::Rgb(236, 239, 244), line_number: Color::Rgb(76, 86, 106), line_number_bg: Color::Rgb(46, 52, 64), syntax_keyword_color: Color::Rgb(129, 161, 193), syntax_type_color: Color::Rgb(136, 192, 208), syntax_string_color: Color::Rgb(163, 190, 140), syntax_number_color: Color::Rgb(180, 142, 173), syntax_comment_color: Color::Rgb(76, 86, 106), syntax_identifier_color: Color::Rgb(216, 222, 233), syntax_operator_color: Color::Rgb(236, 239, 244), syntax_punctuation_color: Color::Rgb(236, 239, 244), syntax_address_color: Color::Rgb(235, 203, 139), syntax_pragma_color: Color::Rgb(180, 142, 173), syntax_opcode_color: Color::Rgb(136, 192, 208), highlight_bg: Color::Rgb(50, 56, 70), highlight_fg: Color::Rgb(236, 239, 244), help_text_color: Color::Rgb(216, 222, 233), current_line_bg: Color::Rgb(80, 60, 40), current_line_fg: Color::Rgb(236, 239, 244), breakpoint_color: Color::Rgb(191, 97, 106), error_color: Color::Rgb(191, 97, 106), success_color: Color::Rgb(163, 190, 140), warning_color: Color::Rgb(235, 203, 139), info_color: Color::Rgb(129, 161, 193), call_color: Color::Rgb(136, 192, 208), return_color: Color::Rgb(163, 190, 140), revert_color: Color::Rgb(191, 97, 106), create_color: Color::Rgb(180, 142, 173), prompt_color: Color::Rgb(129, 161, 193), command_color: Color::Rgb(236, 239, 244), output_color: Color::Rgb(216, 222, 233), cursor_color: Color::Rgb(136, 192, 208), selection_bg: Color::Rgb(50, 56, 70), selection_fg: Color::Rgb(236, 239, 244), hover_color: Color::Rgb(76, 86, 106), accent_color: Color::Rgb(136, 192, 208), }
746}
747
748fn dracula_dark() -> ColorScheme {
750 ColorScheme {
751 focused_border: Color::Rgb(255, 121, 198), unfocused_border: Color::Rgb(98, 114, 164), panel_bg: Color::Rgb(40, 42, 54), keyword_color: Color::Rgb(255, 121, 198), string_color: Color::Rgb(241, 250, 140), comment_color: Color::Rgb(98, 114, 164), number_color: Color::Rgb(189, 147, 249), identifier_color: Color::Rgb(248, 248, 242), operator_color: Color::Rgb(255, 184, 108), line_number: Color::Rgb(98, 114, 164), line_number_bg: Color::Rgb(40, 42, 54), syntax_keyword_color: Color::Rgb(255, 121, 198), syntax_type_color: Color::Rgb(139, 233, 253), syntax_string_color: Color::Rgb(241, 250, 140), syntax_number_color: Color::Rgb(189, 147, 249), syntax_comment_color: Color::Rgb(98, 114, 164), syntax_identifier_color: Color::Rgb(248, 248, 242), syntax_operator_color: Color::Rgb(255, 184, 108), syntax_punctuation_color: Color::Rgb(248, 248, 242), syntax_address_color: Color::Rgb(255, 184, 108), syntax_pragma_color: Color::Rgb(189, 147, 249), syntax_opcode_color: Color::Rgb(80, 250, 123), highlight_bg: Color::Rgb(55, 58, 75), highlight_fg: Color::Rgb(248, 248, 242), help_text_color: Color::Rgb(248, 248, 242), current_line_bg: Color::Rgb(80, 40, 60), current_line_fg: Color::Rgb(248, 248, 242), breakpoint_color: Color::Rgb(255, 85, 85), error_color: Color::Rgb(255, 85, 85), success_color: Color::Rgb(80, 250, 123), warning_color: Color::Rgb(241, 250, 140), info_color: Color::Rgb(139, 233, 253), call_color: Color::Rgb(139, 233, 253), return_color: Color::Rgb(80, 250, 123), revert_color: Color::Rgb(255, 85, 85), create_color: Color::Rgb(189, 147, 249), prompt_color: Color::Rgb(255, 121, 198), command_color: Color::Rgb(248, 248, 242), output_color: Color::Rgb(248, 248, 242), cursor_color: Color::Rgb(255, 121, 198), selection_bg: Color::Rgb(55, 58, 75), selection_fg: Color::Rgb(248, 248, 242), hover_color: Color::Rgb(98, 114, 164), accent_color: Color::Rgb(255, 121, 198), }
815}
816
817fn vscode_light() -> ColorScheme {
819 ColorScheme {
820 focused_border: Color::Rgb(0, 122, 204), unfocused_border: Color::Rgb(200, 200, 200), panel_bg: Color::Rgb(255, 255, 255), keyword_color: Color::Rgb(0, 0, 255), string_color: Color::Rgb(163, 21, 21), comment_color: Color::Rgb(0, 128, 0), number_color: Color::Rgb(9, 134, 88), identifier_color: Color::Rgb(0, 0, 0), operator_color: Color::Rgb(0, 0, 0), line_number: Color::Rgb(128, 128, 128), line_number_bg: Color::Rgb(255, 255, 255), syntax_keyword_color: Color::Rgb(0, 0, 255), syntax_type_color: Color::Rgb(43, 145, 175), syntax_string_color: Color::Rgb(163, 21, 21), syntax_number_color: Color::Rgb(9, 134, 88), syntax_comment_color: Color::Rgb(0, 128, 0), syntax_identifier_color: Color::Rgb(0, 0, 0), syntax_operator_color: Color::Rgb(0, 0, 0), syntax_punctuation_color: Color::Rgb(0, 0, 0), syntax_address_color: Color::Rgb(121, 94, 38), syntax_pragma_color: Color::Rgb(175, 0, 219), syntax_opcode_color: Color::Rgb(0, 0, 255), highlight_bg: Color::Rgb(200, 220, 255), highlight_fg: Color::Rgb(0, 0, 0), help_text_color: Color::Rgb(106, 106, 106), current_line_bg: Color::Rgb(255, 200, 100), current_line_fg: Color::Rgb(0, 0, 0), breakpoint_color: Color::Rgb(205, 49, 49), error_color: Color::Rgb(205, 49, 49), success_color: Color::Rgb(0, 128, 0), warning_color: Color::Rgb(255, 140, 0), info_color: Color::Rgb(0, 122, 204), call_color: Color::Rgb(43, 145, 175), return_color: Color::Rgb(0, 128, 0), revert_color: Color::Rgb(205, 49, 49), create_color: Color::Rgb(175, 0, 219), prompt_color: Color::Rgb(0, 122, 204), command_color: Color::Rgb(0, 0, 0), output_color: Color::Rgb(0, 0, 0), cursor_color: Color::Rgb(0, 0, 0), selection_bg: Color::Rgb(200, 220, 255), selection_fg: Color::Rgb(0, 0, 0), hover_color: Color::Rgb(229, 229, 229), accent_color: Color::Rgb(0, 122, 204), }
884}
885
886#[cfg(test)]
887mod tests {
888 use super::*;
889
890 #[test]
891 fn test_theme_cycle() {
892 assert_eq!(Theme::CyberpunkDark.next(), Theme::TerminalHacker);
893 assert_eq!(Theme::TerminalHacker.next(), Theme::ModernIDE);
894 assert_eq!(Theme::ModernIDE.next(), Theme::HighContrast);
895 assert_eq!(Theme::HighContrast.next(), Theme::SolarizedDark);
896 assert_eq!(Theme::SolarizedDark.next(), Theme::MonokaiPro);
897 assert_eq!(Theme::MonokaiPro.next(), Theme::NordDark);
898 assert_eq!(Theme::NordDark.next(), Theme::DraculaDark);
899 assert_eq!(Theme::DraculaDark.next(), Theme::VSCodeLight);
900 assert_eq!(Theme::VSCodeLight.next(), Theme::CyberpunkDark);
901 }
902
903 #[test]
904 fn test_theme_names() {
905 assert_eq!(Theme::CyberpunkDark.name(), "neon_purple");
906 assert_eq!(Theme::TerminalHacker.name(), "matrix_green");
907 assert_eq!(Theme::ModernIDE.name(), "vscode_dark");
908 assert_eq!(Theme::HighContrast.name(), "accessibility");
909 assert_eq!(Theme::SolarizedDark.name(), "solarized_dark");
910 assert_eq!(Theme::MonokaiPro.name(), "monokai_pro");
911 assert_eq!(Theme::NordDark.name(), "nord_dark");
912 assert_eq!(Theme::DraculaDark.name(), "dracula_dark");
913 assert_eq!(Theme::VSCodeLight.name(), "vscode_light");
914 }
915
916 #[test]
917 fn test_theme_display_names() {
918 assert_eq!(Theme::CyberpunkDark.display_name(), "Neon Purple");
919 assert_eq!(Theme::TerminalHacker.display_name(), "Matrix Green");
920 assert_eq!(Theme::ModernIDE.display_name(), "VS Code Dark");
921 assert_eq!(Theme::HighContrast.display_name(), "High Contrast");
922 assert_eq!(Theme::SolarizedDark.display_name(), "Solarized Dark");
923 assert_eq!(Theme::MonokaiPro.display_name(), "Monokai Pro");
924 assert_eq!(Theme::NordDark.display_name(), "Nord Dark");
925 assert_eq!(Theme::DraculaDark.display_name(), "Dracula");
926 assert_eq!(Theme::VSCodeLight.display_name(), "VS Code Light");
927 }
928
929 #[test]
930 fn test_color_scheme_conversion() {
931 let scheme: ColorScheme = Theme::CyberpunkDark.into();
932 assert_ne!(scheme.focused_border, scheme.unfocused_border);
934 }
935}