ratatui_toolkit/services/theme/app_theme/traits/default.rs
1//! Default trait implementation for [`AppTheme`].
2
3use ratatui::style::Color;
4
5use crate::services::theme::app_theme::AppTheme;
6use crate::services::theme::diff_colors::DiffColors;
7use crate::services::theme::markdown_colors::MarkdownColors;
8use crate::services::theme::syntax_colors::SyntaxColors;
9
10impl Default for AppTheme {
11 /// Creates a default application theme based on the Gruvbox dark theme.
12 ///
13 /// This provides a cohesive dark theme that works well in most terminals
14 /// and provides good contrast and readability.
15 ///
16 /// # Returns
17 ///
18 /// An `AppTheme` instance with Gruvbox dark colors.
19 fn default() -> Self {
20 Self {
21 // UI colors
22 primary: Color::Rgb(131, 165, 152), // gruvbox bright blue
23 secondary: Color::Rgb(211, 134, 155), // gruvbox bright purple
24 accent: Color::Rgb(142, 192, 124), // gruvbox bright aqua
25 error: Color::Rgb(251, 73, 52), // gruvbox bright red
26 warning: Color::Rgb(254, 128, 25), // gruvbox bright orange
27 success: Color::Rgb(184, 187, 38), // gruvbox bright green
28 info: Color::Rgb(250, 189, 47), // gruvbox bright yellow
29
30 // Text colors
31 text: Color::Rgb(235, 219, 178), // gruvbox fg1
32 text_muted: Color::Rgb(146, 131, 116), // gruvbox gray
33 selected_text: Color::Rgb(251, 241, 199), // gruvbox fg0
34
35 // Background colors
36 background: Color::Rgb(40, 40, 40), // gruvbox bg0
37 background_panel: Color::Rgb(60, 56, 54), // gruvbox bg1
38 background_element: Color::Rgb(80, 73, 69), // gruvbox bg2
39 background_menu: Color::Rgb(60, 56, 54), // gruvbox bg1
40
41 // Border colors
42 border: Color::Rgb(102, 92, 84), // gruvbox bg3
43 border_active: Color::Rgb(235, 219, 178), // gruvbox fg1
44 border_subtle: Color::Rgb(80, 73, 69), // gruvbox bg2
45
46 // Specialized colors
47 diff: DiffColors::default(),
48 markdown: MarkdownColors::default(),
49 syntax: SyntaxColors::default(),
50 }
51 }
52}