use rae::{TranscriptItem, TranscriptViewport};
fn main() {
let items = vec![
TranscriptItem::system("rae example session initialized"),
TranscriptItem::user("Show how transcript rows wrap and clamp across renderer sizes."),
TranscriptItem::assistant(
"TranscriptViewport computes columns from glyph metrics, wraps long rows, preserves role labels on first lines, marks detail rows as muted, and clamps scroll to the available content.",
"detail: renderer chooses fonts, colors, selection, and scroll gestures",
),
TranscriptItem::assistant(
"Because this crate stays renderer-neutral, the viewport output is just rows and flags.",
"",
),
];
for (label, viewport) in [
(
"wide",
TranscriptViewport::new(720.0, 220.0).with_metrics(9.0, 22.0),
),
(
"narrow scrolled",
TranscriptViewport::new(260.0, 110.0)
.with_metrics(8.5, 20.0)
.with_scroll(3),
),
] {
let view = viewport.materialize(&items);
println!(
"\n{label}: total={} visible={} scroll={}/{}",
view.total_rows, view.visible_rows, view.scroll, view.max_scroll
);
for row in view.rows {
println!(
" {:<9} {}{}",
row.role,
if row.muted { "# " } else { " " },
row.text
);
}
}
}