mod copy_mapping;
mod projection;
mod visual_lines;
#[cfg(test)]
pub(crate) use copy_mapping::visual_text;
pub(crate) use copy_mapping::{text_position_for_visual_cell, visual_text_for_width};
pub(crate) use projection::{TranscriptActivityLink, TranscriptCard};
#[cfg(test)]
pub(crate) use projection::{TranscriptCardRole, project_cards};
#[cfg(test)]
pub(crate) use projection::{
TranscriptCardStatus, cached_card_ptr_for_test, project_entry_count_for_test,
reset_project_entry_count_for_test,
};
pub(crate) use visual_lines::{
TranscriptHitTarget, TranscriptVisualLine, VisibleTranscriptLines, activity_card_visual_lines,
activity_viewer_notice_visual_line, cached_visual_rows, rendered_line_text,
visible_scrollback_visual_lines, visual_line_rows,
};
#[cfg(test)]
pub(crate) use visual_lines::{cached_visual_lines_ref, visual_lines};
#[cfg(test)]
pub(crate) use visual_lines::{
reset_visual_cache_counters_for_test, visual_block_rebuild_count_for_test,
visual_block_width_count_for_test, visual_row_measurement_count_for_test,
visual_width_cache_presence_for_test,
};
#[cfg(test)]
pub(crate) use crate::{
output::{ActivityId, ActivityStatus},
rendering::plain_projection,
tui::state::MissionControlState,
};
#[cfg(test)]
pub(crate) use ratatui::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)
}
#[cfg(test)]
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(crate) const TRANSCRIPT_VIEWPORT_OVERSCAN_ROWS: u16 = 2;
pub(super) const PREVIEW_LINE_MAX_DISPLAY_WIDTH: usize = 240;
#[cfg(test)]
mod tests;