use ratatui::style::{Color, Modifier, Style};
use tui_markdown::StyleSheet;
use crate::theme::ThemeStyles;
#[derive(Clone, Copy, Debug)]
pub struct OxiStyleSheet {
code_fg: Color,
code_bg: Color,
accent: Color,
primary: Color,
muted: Color,
}
impl OxiStyleSheet {
pub fn from_styles(styles: &ThemeStyles) -> Self {
Self {
code_fg: styles.code_fg.fg.unwrap_or(Color::Rgb(255, 200, 100)),
code_bg: styles.code_bg.bg.unwrap_or(Color::Reset),
accent: styles.accent.fg.unwrap_or(Color::Magenta),
primary: styles.primary.fg.unwrap_or(Color::Blue),
muted: styles.muted.fg.unwrap_or(Color::DarkGray),
}
}
}
impl StyleSheet for OxiStyleSheet {
fn heading(&self, level: u8) -> Style {
match level {
0 | 1 => Style::new().fg(self.accent).add_modifier(Modifier::BOLD),
2 => Style::new().fg(self.primary).add_modifier(Modifier::BOLD),
3 => Style::new()
.fg(self.primary)
.add_modifier(Modifier::BOLD | Modifier::ITALIC),
_ => Style::new().fg(self.muted).add_modifier(Modifier::ITALIC),
}
}
fn code(&self) -> Style {
Style::new()
.fg(self.code_fg)
.bg(self.code_bg)
.add_modifier(Modifier::BOLD)
}
fn link(&self) -> Style {
Style::new()
.fg(self.primary)
.add_modifier(Modifier::UNDERLINED)
}
fn blockquote(&self) -> Style {
Style::new().fg(self.accent)
}
fn heading_meta(&self) -> Style {
Style::new().fg(self.muted).add_modifier(Modifier::DIM)
}
fn metadata_block(&self) -> Style {
Style::new().fg(self.muted)
}
}