mod catppuccin_mocha;
mod custom;
mod dracula;
mod gruvbox_dark;
mod no_color;
mod nord;
mod one_dark;
mod rose_pine;
mod solarized_dark;
mod tailwind_dark;
mod terminal_native;
mod tokyo_night;
use ratatui::style::Color;
use crate::Theme;
pub use catppuccin_mocha::CATPPUCCIN_MOCHA;
pub use dracula::DRACULA;
pub use gruvbox_dark::GRUVBOX_DARK;
pub use no_color::NO_COLOR;
pub use nord::NORD;
pub use one_dark::ONE_DARK;
pub use rose_pine::ROSE_PINE;
pub use solarized_dark::SOLARIZED_DARK;
pub use tailwind_dark::TAILWIND_DARK;
pub use terminal_native::TERMINAL_NATIVE;
pub use tokyo_night::TOKYO_NIGHT;
pub use custom::CustomTheme;
pub static BUILTIN_THEMES: &[ThemeData] = &[
CATPPUCCIN_MOCHA,
DRACULA,
NORD,
GRUVBOX_DARK,
ONE_DARK,
SOLARIZED_DARK,
TAILWIND_DARK,
TOKYO_NIGHT,
ROSE_PINE,
TERMINAL_NATIVE,
];
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ThemeData {
pub name: &'static str,
pub id: &'static str,
pub accent: Color,
pub accent_dim: Color,
pub text: Color,
pub text_dim: Color,
pub text_bright: Color,
pub success: Color,
pub error: Color,
pub warning: Color,
pub info: Color,
pub diff_added: Color,
pub diff_removed: Color,
pub diff_context: Color,
pub border: Color,
pub surface: Color,
}
impl std::fmt::Display for ThemeData {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{} ({})", self.name, self.id)
}
}
impl Theme for ThemeData {
fn name(&self) -> &str {
self.name
}
fn id(&self) -> &str {
self.id
}
fn accent(&self) -> Color {
self.accent
}
fn accent_dim(&self) -> Color {
self.accent_dim
}
fn text(&self) -> Color {
self.text
}
fn text_dim(&self) -> Color {
self.text_dim
}
fn text_bright(&self) -> Color {
self.text_bright
}
fn success(&self) -> Color {
self.success
}
fn error(&self) -> Color {
self.error
}
fn warning(&self) -> Color {
self.warning
}
fn info(&self) -> Color {
self.info
}
fn diff_added(&self) -> Color {
self.diff_added
}
fn diff_removed(&self) -> Color {
self.diff_removed
}
fn diff_context(&self) -> Color {
self.diff_context
}
fn border(&self) -> Color {
self.border
}
fn surface(&self) -> Color {
self.surface
}
}