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 constraints: &[Constraint] = if suggestions_visible {
27 &[
28 Constraint::Min(8),
29 Constraint::Length(input_height),
30 Constraint::Length(5),
31 Constraint::Length(1),
32 ]
33 } else {
34 &[
35 Constraint::Min(8),
36 Constraint::Length(input_height),
37 Constraint::Length(1),
38 ]
39 };
40 let chunks = Layout::default()
41 .direction(Direction::Vertical)
42 .constraints(constraints)
43 .split(area);
44 ChatChunks {
45 messages: chunks[0],
46 input: chunks[1],
47 suggestions: suggestions_visible.then(|| chunks[2]),
48 status: chunks[if suggestions_visible { 3 } else { 2 }],
49 }
50}