use color_eyre::Result;
use ratatui::{Frame, layout::Rect};
use crate::action::Action;
pub(crate) mod approvals;
pub(crate) mod fleet;
pub(crate) mod questions;
pub(crate) mod tools;
pub(crate) mod transcript;
#[must_use]
pub(crate) fn step_selection(selected: Option<usize>, len: usize, delta: isize) -> Option<usize> {
if len == 0 {
return None;
}
let cur = isize::try_from(selected.unwrap_or(0)).unwrap_or(isize::MAX);
let max = isize::try_from(len - 1).unwrap_or(isize::MAX);
Some((cur + delta).clamp(0, max).unsigned_abs())
}
pub(crate) trait Component {
fn handle(&mut self, action: &Action) -> Option<Action>;
fn draw(&mut self, frame: &mut Frame, area: Rect) -> Result<()>;
fn controls(&self) -> Vec<(&'static str, &'static str)> {
Vec::new()
}
fn capturing_input(&self) -> bool {
false
}
}