Initial upload: GitPulse - Developer Productivity Analyzer CLI tool
Some checks failed
CI / test (push) Has been cancelled
CI / release (push) Has been cancelled

This commit is contained in:
2026-02-04 15:45:47 +00:00
parent 5f9a5d6b69
commit 1c8531a00e

75
src/ui/theme.rs Normal file
View File

@@ -0,0 +1,75 @@
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ThemeColors {
pub background: String,
pub foreground: String,
pub primary: String,
pub secondary: String,
pub accent: String,
pub error: String,
pub success: String,
pub warning: String,
}
impl Default for ThemeColors {
fn default() -> Self {
Self {
background: "#1a1b26".to_string(),
foreground: "#a9b1d6".to_string(),
primary: "#7aa2f7".to_string(),
secondary: "#9ece6a".to_string(),
accent: "#e0af68".to_string(),
error: "#f7768e".to_string(),
success: "#9ece6a".to_string(),
warning: "#ff9e64".to_string(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum Theme {
Dark,
Light,
Custom(ThemeColors),
}
impl Theme {
pub fn colors(&self) -> &ThemeColors {
match self {
Theme::Dark => &DARK_THEME,
Theme::Light => &LIGHT_THEME,
Theme::Custom(colors) => colors,
}
}
}
pub static DARK_THEME: ThemeColors = ThemeColors {
background: "#1a1b26",
foreground: "#a9b1d6",
primary: "#7aa2f7",
secondary: "#9ece6a",
accent: "#e0af68",
error: "#f7768e",
success: "#9ece6a",
warning: "#ff9e64",
};
pub static LIGHT_THEME: ThemeColors = ThemeColors {
background: "#ffffff",
foreground: "#1a1a2e",
primary: "#0066cc",
secondary: "#28a745",
accent: "#ffc107",
error: "#dc3545",
success: "#28a745",
warning: "#fd7e14",
};
pub fn get_theme_from_string(s: &str) -> Theme {
match s.to_lowercase().as_str() {
"dark" => Theme::Dark,
"light" => Theme::Light,
_ => Theme::Dark,
}
}