use ratatui::layout::Rect;
use crate::tui::views::ListDetailLayout;
use super::option::SettingOption;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct SettingsPickerLayout {
pub list: Rect,
pub detail: Option<Rect>,
pub stacked: bool,
pub narrow: bool,
}
impl SettingsPickerLayout {
#[must_use]
pub fn resolve(area: Rect, min_detail_width: u16, focused: Option<&SettingOption>) -> Self {
if area.width == 0 || area.height == 0 {
return Self {
list: area,
detail: None,
stacked: true,
narrow: true,
};
}
let base = ListDetailLayout::split(area, min_detail_width);
let narrow = base.stacked || area.width < 96;
let prefer_list = focused.is_some_and(|option| option.prefer_list_when_narrow);
if narrow && prefer_list {
return Self {
list: area,
detail: None,
stacked: true,
narrow: true,
};
}
Self {
list: base.list,
detail: Some(base.detail),
stacked: base.stacked,
narrow,
}
}
}