use crate::interactive::tui::transcript::BlockKind;
use ratatui::{
layout::Rect,
style::{Color, Modifier, Style},
};
pub(super) const ACCENT: Color = Color::Rgb(157, 139, 245);
pub(super) const USER_COLOR: Color = Color::Rgb(106, 155, 204);
pub(super) const SECONDARY: Color = Color::Rgb(168, 162, 154);
pub(super) const SUCCESS: Color = Color::Rgb(127, 174, 107);
pub(super) const WARNING: Color = Color::Rgb(224, 164, 88);
pub(super) const DANGER: Color = Color::Rgb(229, 105, 95);
pub(super) const STATUS_BG: Color = Color::Rgb(30, 28, 36);
pub(super) const CODE_COLOR: Color = Color::Rgb(127, 181, 214);
pub(super) fn kind_style(kind: BlockKind) -> Style {
match kind {
BlockKind::User => Style::default().fg(USER_COLOR).add_modifier(Modifier::BOLD),
BlockKind::Assistant => Style::default().fg(Color::White),
BlockKind::System => Style::default()
.fg(SECONDARY)
.add_modifier(Modifier::ITALIC),
BlockKind::Error => Style::default().fg(DANGER).add_modifier(Modifier::BOLD),
BlockKind::Tool => Style::default().fg(SECONDARY),
}
}
pub(super) fn rail_style(kind: BlockKind) -> Style {
match kind {
BlockKind::User => Style::default().fg(USER_COLOR).add_modifier(Modifier::BOLD),
BlockKind::Assistant => Style::default().fg(ACCENT).add_modifier(Modifier::BOLD),
BlockKind::Tool | BlockKind::System => Style::default().fg(SECONDARY),
BlockKind::Error => Style::default().fg(DANGER).add_modifier(Modifier::BOLD),
}
}
pub(super) fn centered(screen: Rect, width: u16, height: u16) -> Rect {
Rect {
x: screen.x + (screen.width.saturating_sub(width)) / 2,
y: screen.y + (screen.height.saturating_sub(height)) / 2,
width,
height,
}
}