1use ratatui::style::Color;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Deserialize, Serialize)]
5#[serde(rename_all = "lowercase")]
6pub enum ThemeName {
7 Light,
8 Dark,
9}
10
11impl Default for ThemeName {
12 fn default() -> Self {
13 ThemeName::Light
14 }
15}
16
17#[derive(Debug, Clone)]
18pub struct Theme {
19 pub name: String,
20 pub bg_primary: Color, pub bg_secondary: Color, pub bg_accent: Color, pub fg_primary: Color, pub fg_secondary: Color, pub accent: Color, pub accent_fg: Color, }
28
29impl Theme {
30 pub fn light() -> Self {
31 Self {
32 name: "Light".to_string(),
33 bg_primary: Color::Rgb(255, 254, 252), bg_secondary: Color::Rgb(255, 254, 252), bg_accent: Color::Rgb(230, 230, 227), fg_primary: Color::Rgb(0, 0, 0), fg_secondary: Color::Rgb(148, 148, 148), accent: Color::Rgb(234, 68, 57), accent_fg: Color::Rgb(255, 255, 255), }
41 }
42
43 pub fn dark() -> Self {
44 Self {
45 name: "Dark".to_string(),
46 bg_primary: Color::Rgb(0, 0, 0), bg_secondary: Color::Rgb(20, 20, 20), bg_accent: Color::Rgb(40, 40, 40), fg_primary: Color::Rgb(255, 255, 255), fg_secondary: Color::Rgb(150, 150, 150), accent: Color::Rgb(234, 68, 57), accent_fg: Color::Rgb(255, 255, 255), }
54 }
55
56 pub fn from_name(name: &ThemeName) -> Self {
57 match name {
58 ThemeName::Light => Self::light(),
59 ThemeName::Dark => Self::dark(),
60 }
61 }
62}