use crate::config::ThemeConfig;
use ratatui::style::Style;
use ratatui::widgets::{Block, Borders};
use ratatui::widgets::block::Title;
#[allow(dead_code)]
pub enum Emphasis {
Normal,
Muted,
Header,
Title,
Error,
Warning,
Success,
}
#[allow(dead_code)]
pub enum DiffKind {
Add,
Remove,
Context,
Hunk,
}
pub fn text(theme: &ThemeConfig, emphasis: Emphasis) -> Style {
match emphasis {
Emphasis::Normal => Style::default().fg(theme.fg_color()),
Emphasis::Muted => Style::default().fg(theme.muted_color()),
Emphasis::Header | Emphasis::Title => Style::default().fg(theme.header_color()),
Emphasis::Error => Style::default().fg(theme.error_color()),
Emphasis::Warning => Style::default().fg(theme.warning_color()),
Emphasis::Success => Style::default().fg(theme.success_color()),
}
}
pub fn border(theme: &ThemeConfig, focused: bool) -> Style {
if focused {
Style::default().fg(theme.border_focused_color())
} else {
Style::default().fg(theme.border_color())
}
}
pub fn selection(theme: &ThemeConfig) -> Style {
Style::default()
.bg(theme.selection_bg_color())
.fg(theme.selection_fg_color())
}
pub fn diff_style(theme: &ThemeConfig, kind: DiffKind) -> Style {
match kind {
DiffKind::Add => Style::default().fg(theme.diff_add_color()),
DiffKind::Remove => Style::default().fg(theme.diff_remove_color()),
DiffKind::Context => Style::default().fg(theme.diff_context_color()),
DiffKind::Hunk => Style::default().fg(theme.diff_hunk_color()),
}
}
pub fn body_style(theme: &ThemeConfig) -> Style {
Style::default()
.bg(theme.bg_color()) .fg(theme.fg_color())
}
pub fn pane_block<'a>(theme: &ThemeConfig, title: impl Into<Title<'a>>, focused: bool) -> Block<'a> {
Block::default()
.borders(Borders::ALL)
.border_style(border(theme, focused))
.title(title)
}