Codex Handbook
tui/src/selection_list.rs 46 lines
use crate::render::renderable::Renderable;use crate::render::renderable::RowRenderable;use ratatui::style::Style;use ratatui::style::Styled as _;use ratatui::style::Stylize as _;use ratatui::widgets::Paragraph;use ratatui::widgets::Wrap;use unicode_width::UnicodeWidthStr;pub(crate) fn selection_option_row(    index: usize,    label: String,    is_selected: bool,) -> Box<dyn Renderable> {    selection_option_row_with_dim(index, label, is_selected, /*dim*/ false)}pub(crate) fn selection_option_row_with_dim(    index: usize,    label: String,    is_selected: bool,    dim: bool,) -> Box<dyn Renderable> {    let prefix = if is_selected {        format!("› {}. ", index + 1)    } else {        format!("  {}. ", index + 1)    };    let style = if is_selected {        Style::default().cyan()    } else if dim {        Style::default().dim()    } else {        Style::default()    };    let prefix_width = UnicodeWidthStr::width(prefix.as_str()) as u16;    let mut row = RowRenderable::new();    row.push(prefix_width, prefix.set_style(style));    row.push(        u16::MAX,        Paragraph::new(label)            .style(style)            .wrap(Wrap { trim: false }),    );    row.into()}