use anstyle::{Color as AnsiColorEnum, Style as AnsiStyle};
use ratatui::style::{Color, Modifier, Style};
use unicode_width::UnicodeWidthStr;
use crate::ui::theme;
pub use vtcode_commons::ui_protocol::{convert_style, theme_from_color_fields};
use super::types::{InlineTextStyle, InlineTheme};
pub fn theme_from_styles(styles: &theme::ThemeStyles) -> InlineTheme {
theme_from_color_fields(
styles.foreground,
styles.background,
styles.primary,
styles.secondary,
styles.tool,
styles.tool_detail,
styles.pty_output,
)
}
pub fn measure_text_width(text: &str) -> u16 {
UnicodeWidthStr::width(text) as u16
}
pub fn ratatui_color_from_ansi(color: AnsiColorEnum) -> Color {
vtcode_design::color::anstyle_to_ratatui_color(color)
}
pub fn ratatui_style_from_inline(
style: &InlineTextStyle,
fallback: Option<AnsiColorEnum>,
) -> Style {
vtcode_design::style::inline_text_style_to_ratatui(
style.color,
style.bg_color,
style.effects,
fallback,
)
}
pub fn ratatui_pty_style_from_inline(
style: &InlineTextStyle,
fallback: Option<AnsiColorEnum>,
) -> Style {
ratatui_style_from_inline(style, fallback)
.remove_modifier(Modifier::BOLD)
.add_modifier(Modifier::DIM)
}
pub fn ratatui_style_from_ansi(style: AnsiStyle) -> Style {
vtcode_design::style::anstyle_to_ratatui_style(style)
}