vtcode_tui/core_tui/
style.rs1use anstyle::{Color as AnsiColorEnum, Style as AnsiStyle};
2use ratatui::style::{Color, Modifier, Style};
3use unicode_width::UnicodeWidthStr;
4
5use crate::ui::theme;
6
7pub use vtcode_commons::ui_protocol::{convert_style, theme_from_color_fields};
9
10use super::types::{InlineTextStyle, InlineTheme};
11
12pub fn theme_from_styles(styles: &theme::ThemeStyles) -> InlineTheme {
13 theme_from_color_fields(
14 styles.foreground,
15 styles.background,
16 styles.primary,
17 styles.secondary,
18 styles.tool,
19 styles.tool_detail,
20 styles.pty_output,
21 )
22}
23
24pub fn measure_text_width(text: &str) -> u16 {
25 UnicodeWidthStr::width(text) as u16
26}
27
28pub fn ratatui_color_from_ansi(color: AnsiColorEnum) -> Color {
33 vtcode_design::color::anstyle_to_ratatui_color(color)
34}
35
36pub fn ratatui_style_from_inline(
37 style: &InlineTextStyle,
38 fallback: Option<AnsiColorEnum>,
39) -> Style {
40 vtcode_design::style::inline_text_style_to_ratatui(
41 style.color,
42 style.bg_color,
43 style.effects,
44 fallback,
45 )
46}
47
48pub fn ratatui_pty_style_from_inline(
50 style: &InlineTextStyle,
51 fallback: Option<AnsiColorEnum>,
52) -> Style {
53 ratatui_style_from_inline(style, fallback)
54 .remove_modifier(Modifier::BOLD)
55 .add_modifier(Modifier::DIM)
56}
57
58pub fn ratatui_style_from_ansi(style: AnsiStyle) -> Style {
60 vtcode_design::style::anstyle_to_ratatui_style(style)
61}