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}