pub mod banner;
pub mod layout;
pub mod modal;
pub mod preview;
pub mod section_preview;
pub mod session_list;
pub mod statusbar;
pub mod theme;
use ratatui::layout::Rect;
use ratatui::style::Style;
use ratatui::Frame;
use crate::app::AppState;
pub use theme::Theme;
pub fn draw(frame: &mut Frame<'_>, state: &AppState, theme: &Theme) {
let area = frame.area();
let l = layout::compute(area, state.divider_x);
session_list::render(frame, l.list, state, theme);
if let Some(preview_area) = l.preview {
preview::render(frame, preview_area, state, theme);
}
if let Some(divider_area) = l.divider {
render_divider(frame, divider_area, state, theme);
}
statusbar::render(frame, l.statusbar, state, theme);
state.modals.render(frame, area, theme);
}
fn render_divider(frame: &mut Frame<'_>, area: Rect, state: &AppState, theme: &Theme) {
let fg = if state.dragging_divider {
theme.accent
} else {
theme.text_muted
};
let style = Style::default().fg(fg).bg(theme.bg);
let buf = frame.buffer_mut();
for y in area.top()..area.bottom() {
let cell = &mut buf[(area.left(), y)];
cell.set_char('│');
cell.set_style(style);
}
}