aboutsummaryrefslogtreecommitdiff
path: root/src/config
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-06-30 03:59:52 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-06-30 04:00:33 +0300
commitf54d8e8c0aee5d3ec9724234d1bcd418bff8ff2f (patch)
tree67eb7fd76f668feab4b5a4ef245eea854a04d42d /src/config
parent5e2dc40691e30f90c5fe3b1e60d5074ceb358556 (diff)
feat: add hidden collapsed sidebar mode
refs #842
Diffstat (limited to 'src/config')
-rw-r--r--src/config/model.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/config/model.rs b/src/config/model.rs
index 92192c26..301b58ca 100644
--- a/src/config/model.rs
+++ b/src/config/model.rs
@@ -106,6 +106,14 @@ impl AgentPanelSortConfig {
}
}
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Deserialize, Serialize)]
+#[serde(rename_all = "lowercase")]
+pub enum SidebarCollapsedModeConfig {
+ #[default]
+ Compact,
+ Hidden,
+}
+
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct RightClickPassthroughModifierConfig(Option<KeyModifiers>);
@@ -763,6 +771,8 @@ pub struct UiConfig {
pub sidebar_min_width: u16,
/// Maximum sidebar width (columns) when expanded. Default: 36.
pub sidebar_max_width: u16,
+ /// Collapsed sidebar presentation. Default: compact.
+ pub sidebar_collapsed_mode: SidebarCollapsedModeConfig,
/// Terminal width at or below which Herdr uses the mobile single-column layout. Default: 64.
pub mobile_width_threshold: u16,
/// Capture mouse input for Herdr's mouse UI. Default: true.
@@ -963,6 +973,7 @@ impl Default for UiConfig {
sidebar_width: 26,
sidebar_min_width: 18,
sidebar_max_width: 36,
+ sidebar_collapsed_mode: SidebarCollapsedModeConfig::Compact,
mobile_width_threshold: DEFAULT_MOBILE_WIDTH_THRESHOLD,
mouse_capture: true,
right_click_passthrough_modifier: RightClickPassthroughModifierConfig::default(),
@@ -1311,6 +1322,25 @@ mobile_width_threshold = 96
}
#[test]
+ fn sidebar_collapsed_mode_defaults_compact_and_parses_hidden() {
+ let default_config = Config::default();
+ assert_eq!(
+ default_config.ui.sidebar_collapsed_mode,
+ SidebarCollapsedModeConfig::Compact
+ );
+
+ let toml = r#"
+[ui]
+sidebar_collapsed_mode = "hidden"
+"#;
+ let config: Config = toml::from_str(toml).unwrap();
+ assert_eq!(
+ config.ui.sidebar_collapsed_mode,
+ SidebarCollapsedModeConfig::Hidden
+ );
+ }
+
+ #[test]
fn validated_sidebar_bounds_rejects_inverted() {
assert_eq!(validated_sidebar_bounds(18, 36), Some((18, 36)));
assert_eq!(validated_sidebar_bounds(20, 20), Some((20, 20)));