agent_core/tui/layout/
helpers.rs

1//! Helper functions for building custom layouts with ratatui
2
3use ratatui::layout::{Constraint, Direction, Layout, Rect};
4
5/// Create a vertical stack layout
6pub fn vstack(area: Rect, constraints: &[Constraint]) -> Vec<Rect> {
7    Layout::default()
8        .direction(Direction::Vertical)
9        .constraints(constraints)
10        .split(area)
11        .to_vec()
12}
13
14/// Create a horizontal stack layout
15pub fn hstack(area: Rect, constraints: &[Constraint]) -> Vec<Rect> {
16    Layout::default()
17        .direction(Direction::Horizontal)
18        .constraints(constraints)
19        .split(area)
20        .to_vec()
21}
22
23/// Create a centered area within a parent area
24pub fn centered(area: Rect, width: u16, height: u16) -> Rect {
25    let x = area.x + (area.width.saturating_sub(width)) / 2;
26    let y = area.y + (area.height.saturating_sub(height)) / 2;
27    Rect::new(x, y, width.min(area.width), height.min(area.height))
28}
29
30/// Create margin around an area
31pub fn with_margin(area: Rect, margin: u16) -> Rect {
32    Rect::new(
33        area.x + margin,
34        area.y + margin,
35        area.width.saturating_sub(margin * 2),
36        area.height.saturating_sub(margin * 2),
37    )
38}