mod copy_mapping;
mod projection;
mod visual_lines;
#[cfg(test)]
pub(crate) use copy_mapping::visual_text;
pub(crate) use copy_mapping::{
activity_button_for_visual_cell, text_position_for_visual_cell, visual_text_for_width,
};
pub(crate) use projection::{TranscriptActivityLink, TranscriptCard};
#[cfg(test)]
pub(crate) use projection::{
TranscriptCardRole, TranscriptCardStatus, project_cards, project_entry_count_for_test,
reset_project_entry_count_for_test,
};
#[cfg(test)]
pub(crate) use visual_lines::visual_lines;
pub(crate) use visual_lines::{
TranscriptVisualLine, VisibleTranscriptLines, cached_visual_lines_ref, rendered_line_text,
visible_scrollback_lines, visible_scrollback_visual_lines, visible_tail_lines,
visual_line_rows,
};
#[cfg(test)]
pub(crate) use crate::{
output::{ActivityId, ActivityStatus},
rendering::plain_projection,
tui::{state::MissionControlState, theme::MATRIX_GREEN},
};
#[cfg(test)]
pub(crate) use ratatui::{
style::Modifier,
text::{Line, Span},
};
#[cfg(test)]
pub(crate) use unicode_width::UnicodeWidthStr;
#[cfg(test)]
fn bounded_lines(text: &str, max_lines: usize) -> String {
projection::bounded_lines(text, max_lines)
}
#[cfg(test)]
fn transcript_status_from_activity(status: ActivityStatus) -> TranscriptCardStatus {
projection::transcript_status_from_activity(status)
}
#[cfg(test)]
fn status_mark(status: TranscriptCardStatus) -> &'static str {
visual_lines::status_mark(status)
}
#[cfg(test)]
fn wrap_spans_to_width(spans: Vec<Span<'static>>, max_width: usize) -> Vec<Vec<Span<'static>>> {
visual_lines::wrap_spans_to_width(spans, max_width)
}
#[cfg(test)]
fn spans_text(spans: &[Span<'static>]) -> String {
visual_lines::spans_text(spans)
}
#[cfg(test)]
fn spans_display_width(spans: &[Span<'static>]) -> usize {
visual_lines::spans_display_width(spans)
}
pub(crate) const CARD_LAYOUT_MIN_WIDTH: u16 = 48;
pub(super) const TOOL_PREVIEW_LINES: usize = 4;
pub(super) const BASH_MODE_RESPONSE_TITLE: &str = "Bash Mode Response";
pub(super) const ACTIVITY_BUTTON_LABEL: &str = "[view-activity]";
pub(super) const TRANSCRIPT_VIEWPORT_OVERSCAN_ROWS: usize = 2;
pub(super) const PREVIEW_LINE_MAX_DISPLAY_WIDTH: usize = 240;
#[cfg(test)]
#[path = "../transcript_cards_tests.rs"]
mod tests;