mnemo/tui/theme.rs
1//! Palette centralisée et styles de la TUI « ops dashboard ».
2//!
3//! Toutes les couleurs et styles passent par ce module afin de garder un rendu
4//! cohérent (au lieu de couleurs dispersées dans le code de rendu). Les couleurs
5//! choisies restent lisibles sur un terminal sombre et dégradent proprement si
6//! le terminal ne gère pas la couleur (les `Modifier` comme `BOLD`/`REVERSED`
7//! restent visibles).
8
9use ratatui::style::{Color, Modifier, Style};
10
11/// Vert : succès, état sain.
12pub const SUCCESS: Color = Color::Green;
13/// Rouge : échec, action destructive.
14pub const DANGER: Color = Color::Red;
15/// Jaune : avertissement, dates / fenêtres temporelles.
16pub const WARNING: Color = Color::Yellow;
17/// Cyan : information, contexte projet.
18pub const INFO: Color = Color::Cyan;
19/// Gris atténué : libellés, métadonnées secondaires.
20pub const MUTED: Color = Color::DarkGray;
21/// Magenta : accent (branche Git, éléments mis en avant).
22pub const ACCENT: Color = Color::Magenta;
23/// Cyan vif : titres de blocs.
24pub const TITLE: Color = Color::Cyan;
25/// Gris : bordures.
26pub const BORDER: Color = Color::DarkGray;
27
28/// Style d'un titre de bloc (cyan gras).
29pub fn title() -> Style {
30 Style::default().fg(TITLE).add_modifier(Modifier::BOLD)
31}
32
33/// Style des bordures.
34pub fn border() -> Style {
35 Style::default().fg(BORDER)
36}
37
38/// Style d'un libellé atténué (clé de champ, métadonnée).
39pub fn label() -> Style {
40 Style::default().fg(MUTED)
41}
42
43/// Style d'une valeur lisible (texte principal).
44pub fn value() -> Style {
45 Style::default().fg(Color::Gray)
46}
47
48/// Style d'une valeur mise en avant (gras clair).
49pub fn strong() -> Style {
50 Style::default()
51 .fg(Color::White)
52 .add_modifier(Modifier::BOLD)
53}
54
55/// Style de la ligne sélectionnée dans la liste : inversion vidéo + accent, qui
56/// reste lisible même sans support couleur.
57pub fn selected() -> Style {
58 Style::default()
59 .add_modifier(Modifier::REVERSED | Modifier::BOLD)
60 .fg(INFO)
61}
62
63/// Badge coloré : texte sur une couleur d'accent (gras).
64pub fn badge(fg: Color) -> Style {
65 Style::default().fg(fg).add_modifier(Modifier::BOLD)
66}
67
68/// Couleur associée à un code de sortie (vert si succès, rouge si échec, gris si
69/// inconnu).
70pub fn status_color(exit_code: Option<i64>) -> Color {
71 match exit_code {
72 Some(0) => SUCCESS,
73 Some(_) => DANGER,
74 None => MUTED,
75 }
76}