agent_core/tui/layout/mod.rs
1//! Layout system for TUI widgets
2//!
3//! This module provides a flexible layout system that allows agents to customize
4//! how widgets are arranged in the terminal UI.
5//!
6//! # Layout Templates
7//!
8//! The easiest way to define a layout is using a template:
9//!
10//! ```ignore
11//! // Standard layout (chat + input + status bar)
12//! core.set_layout(LayoutTemplate::standard());
13//!
14//! // With sidebar
15//! core.set_layout(LayoutTemplate::with_sidebar("file_browser", 40));
16//!
17//! // Minimal (no status bar)
18//! core.set_layout(LayoutTemplate::minimal());
19//! ```
20//!
21//! # Custom Layouts
22//!
23//! For full control, use a closure or implement `LayoutProvider`:
24//!
25//! ```ignore
26//! core.set_layout(LayoutTemplate::custom_fn(|area, ctx, sizes| {
27//! // Use ratatui Layout directly
28//! let chunks = Layout::default()
29//! .direction(Direction::Vertical)
30//! .constraints([Constraint::Min(1), Constraint::Length(5)])
31//! .split(area);
32//!
33//! LayoutResult {
34//! widget_areas: [(widget_ids::CHAT_VIEW, chunks[0])].into(),
35//! ..Default::default()
36//! }
37//! }));
38//! ```
39
40mod types;
41mod template;
42mod standard;
43mod sidebar;
44mod split;
45mod minimal;
46pub mod helpers;
47
48// Re-export shared types
49pub use types::{LayoutContext, LayoutFn, LayoutProvider, LayoutResult, WidgetSizes};
50
51// Re-export template
52pub use template::LayoutTemplate;
53
54// Re-export layout options
55pub use standard::StandardOptions;
56pub use sidebar::{SidebarOptions, SidebarPosition, SidebarWidth};
57pub use split::{SplitOptions, SplitRatio};
58pub use minimal::MinimalOptions;