use ratatui_core::style::Color as RatColor;
use serde::Serialize;
#[derive(Debug, Serialize)]
#[cfg_attr(test, derive(PartialEq))]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(default, deny_unknown_fields)]
pub struct Theme {
pub primary_color: Color,
pub primary_text_color: Color,
pub secondary_color: Color,
pub success_color: Color,
pub error_color: Color,
pub text_color: Color,
pub background_color: Color,
pub border_color: Color,
pub disabled_color: Color,
pub hint_text_color: Color,
pub text_box_background_color: Color,
pub alternate_row_background_color: Color,
pub alternate_row_text_color: Color,
pub syntax: Syntax,
}
impl Default for Theme {
fn default() -> Self {
Self {
primary_color: RatColor::Blue.into(),
secondary_color: RatColor::Yellow.into(),
success_color: RatColor::Green.into(),
error_color: RatColor::Red.into(),
text_color: RatColor::Reset.into(), background_color: RatColor::Reset.into(), border_color: RatColor::White.into(),
primary_text_color: RatColor::White.into(),
syntax: Default::default(),
disabled_color: RatColor::DarkGray.into(),
hint_text_color: RatColor::DarkGray.into(),
text_box_background_color: RatColor::DarkGray.into(),
alternate_row_background_color: RatColor::DarkGray.into(),
alternate_row_text_color: RatColor::Reset.into(),
}
}
}
#[derive(Debug, Serialize)]
#[cfg_attr(test, derive(PartialEq))]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(default, deny_unknown_fields)]
pub struct Syntax {
pub comment_color: Color,
pub builtin_color: Color,
pub escape_color: Color,
pub number_color: Color,
pub string_color: Color,
pub special_color: Color,
}
impl Default for Syntax {
fn default() -> Self {
Self {
comment_color: RatColor::Gray.into(),
builtin_color: RatColor::Blue.into(),
escape_color: RatColor::Green.into(),
number_color: RatColor::Cyan.into(),
string_color: RatColor::LightGreen.into(),
special_color: RatColor::Green.into(),
}
}
}
#[derive(Copy, Clone, Debug, Serialize)]
#[cfg_attr(test, derive(PartialEq))]
#[cfg_attr(
feature = "schema",
derive(schemars::JsonSchema),
schemars(rename = "Color", schema_with = "color_schema")
)]
pub struct Color(RatColor);
impl From<RatColor> for Color {
fn from(color: RatColor) -> Self {
Self(color)
}
}
impl From<Color> for RatColor {
fn from(color: Color) -> Self {
color.0
}
}
#[cfg(feature = "schema")]
fn color_schema(_: &mut schemars::SchemaGenerator) -> schemars::Schema {
schemars::json_schema!({
"type": "string",
"enum": [
"black",
"red",
"green",
"yellow",
"blue",
"magenta",
"cyan",
"gray",
"darkgray",
"lightred",
"lightgreen",
"lightyellow",
"lightblue",
"lightmagenta",
"lightcyan",
"white",
"reset",
]
})
}