trnovel 0.14.1

Terminal reader for novel
Documentation
use ratatui::style::{Modifier, Style};
use ratatui_kit::{ComponentTheme, Palette};

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct AppChromeTheme {
    pub logo: Style,
    pub text: Style,
    pub muted: Style,
    pub title: Style,
    pub meta_label: Style,
    pub selected: Style,
    pub highlight: Style,
    pub success: Style,
    pub error: Style,
    pub empty: Style,
    pub border: Style,
    pub loading: Style,
}

impl ComponentTheme for AppChromeTheme {
    fn from_palette(palette: &Palette) -> Self {
        Self {
            logo: Style::new().fg(palette.accent).add_modifier(Modifier::BOLD),
            text: Style::new().fg(palette.fg),
            muted: Style::new().fg(palette.fg_dim),
            title: Style::new().fg(palette.accent).add_modifier(Modifier::BOLD),
            meta_label: Style::new().fg(palette.fg_dim),
            selected: Style::new()
                .fg(palette.on_accent)
                .bg(palette.selection)
                .add_modifier(Modifier::BOLD),
            highlight: Style::new().fg(palette.accent).add_modifier(Modifier::BOLD),
            success: Style::new().fg(palette.success),
            error: Style::new().fg(palette.error).add_modifier(Modifier::BOLD),
            empty: Style::new().fg(palette.placeholder),
            border: Style::new().fg(palette.border),
            loading: Style::new().fg(palette.accent),
        }
    }
}

impl Default for AppChromeTheme {
    fn default() -> Self {
        Self::from_palette(&Palette::default())
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ReaderTheme {
    pub content: Style,
    pub chapter: Style,
    pub footer: Style,
    pub progress: Style,
    pub border: Style,
    pub tts_highlight: Style,
}

impl ComponentTheme for ReaderTheme {
    fn from_palette(palette: &Palette) -> Self {
        Self {
            content: Style::new().fg(palette.fg),
            chapter: Style::new().fg(palette.accent).add_modifier(Modifier::BOLD),
            footer: Style::new().fg(palette.fg_dim),
            progress: Style::new().fg(palette.accent),
            border: Style::new().fg(palette.border),
            tts_highlight: Style::new()
                .fg(palette.success)
                .add_modifier(Modifier::BOLD),
        }
    }
}

impl Default for ReaderTheme {
    fn default() -> Self {
        Self::from_palette(&Palette::default())
    }
}