codetether_agent/tui/ui/chat_view/
layout_compute.rs1use ratatui::layout::{Constraint, Direction, Layout, Rect};
7
8use super::layout_chunks::ChatChunks;
9use crate::tui::app::state::App;
10
11pub fn compute_chat_chunks(area: Rect, app: &App) -> ChatChunks {
23 let suggestions_visible = app.state.slash_suggestions_visible();
24 let input_lines_count = app.state.input.lines().count().max(1);
25 let input_height = (input_lines_count as u16 + 2).clamp(3, 6);
26 let status_height = status_bar_height(area.width);
27 let constraints: &[Constraint] = if suggestions_visible {
28 &[
29 Constraint::Min(8),
30 Constraint::Length(input_height),
31 Constraint::Length(5),
32 Constraint::Length(status_height),
33 ]
34 } else {
35 &[
36 Constraint::Min(8),
37 Constraint::Length(input_height),
38 Constraint::Length(status_height),
39 ]
40 };
41 let chunks = Layout::default()
42 .direction(Direction::Vertical)
43 .constraints(constraints)
44 .split(area);
45 ChatChunks {
46 messages: chunks[0],
47 input: chunks[1],
48 suggestions: suggestions_visible.then(|| chunks[2]),
49 status: chunks[if suggestions_visible { 3 } else { 2 }],
50 }
51}
52
53fn status_bar_height(width: u16) -> u16 {
58 if width >= super::status::STACK_WIDTH_THRESHOLD {
59 1
60 } else {
61 3
62 }
63}