1use ratatui::style::{Color, Modifier, Style};
6
7use crate::cli::theme::ColorPalette;
8
9#[derive(Clone)]
10pub struct Styles {
11 pub error: Style,
12 pub warning: Style,
13 pub info: Style,
14 pub debug: Style,
15 pub trace: Style,
16 pub reasoning: Style,
17 pub user: Style,
18 pub server: Style,
19 pub client: Style,
20 pub connection: Style,
21 pub separator: Style,
22 pub dimmed: Style,
23 pub normal: Style,
24 pub success: Style,
25 pub failure: Style,
26 pub ask: Style,
27 pub accent: Style,
29 pub selected: Style,
30 pub button: Style,
31 pub title: Style,
32}
33
34impl Styles {
35 pub fn from_palette(palette: &ColorPalette) -> Self {
36 let c = |color: crossterm::style::Color| -> Color { Color::from(color) };
37 let accent = c(palette.info);
38 Self {
39 error: Style::default().fg(c(palette.error)),
40 warning: Style::default().fg(c(palette.warning)),
41 info: Style::default().fg(c(palette.info)),
42 debug: Style::default().fg(c(palette.debug)),
43 trace: Style::default().fg(c(palette.trace)),
44 reasoning: Style::default().fg(c(palette.reasoning)),
45 user: Style::default()
46 .fg(c(palette.user))
47 .add_modifier(Modifier::BOLD),
48 server: Style::default().fg(c(palette.server)),
49 client: Style::default().fg(c(palette.client)),
50 connection: Style::default().fg(c(palette.connection)),
51 separator: Style::default().fg(c(palette.separator)),
52 dimmed: Style::default().fg(c(palette.dimmed)),
53 normal: Style::default().fg(c(palette.normal)),
54 success: Style::default().fg(c(palette.success)),
55 failure: Style::default().fg(c(palette.failure)),
56 ask: Style::default().fg(c(palette.ask)),
57 accent: Style::default().fg(accent).add_modifier(Modifier::BOLD),
58 selected: Style::default().add_modifier(Modifier::REVERSED),
59 button: Style::default().fg(accent).add_modifier(Modifier::BOLD),
60 title: Style::default().add_modifier(Modifier::BOLD),
61 }
62 }
63
64 pub fn for_log_level(&self, level: crate::ui::app::LogLevel) -> Style {
65 use crate::ui::app::LogLevel;
66 match level {
67 LogLevel::Error => self.error,
68 LogLevel::Warn => self.warning,
69 LogLevel::Info => self.info,
70 LogLevel::Debug => self.debug,
71 LogLevel::Trace => self.trace,
72 }
73 }
74}