ratatui_toolkit/widgets/code_diff/widget/constructors/
new.rs

1use std::collections::HashMap;
2
3use crate::primitives::resizable_split::ResizableSplit;
4use crate::services::theme::AppTheme;
5use crate::widgets::code_diff::code_diff::CodeDiff;
6use crate::widgets::code_diff::diff_config::DiffConfig;
7use crate::widgets::code_diff::diff_file_tree::DiffFileTree;
8
9impl CodeDiff {
10    /// Creates a new empty diff widget.
11    ///
12    /// # Returns
13    ///
14    /// A new `CodeDiff` instance with no hunks and default configuration
15    ///
16    /// # Example
17    ///
18    /// ```rust
19    /// use ratatui_toolkit::code_diff::CodeDiff;
20    ///
21    /// let diff = CodeDiff::new();
22    /// assert!(diff.hunks.is_empty());
23    /// ```
24    pub fn new() -> Self {
25        let config = DiffConfig::new();
26        let mut sidebar_split = ResizableSplit::new(config.sidebar_default_width);
27        sidebar_split.min_percent = config.sidebar_min_width;
28        sidebar_split.max_percent = config.sidebar_max_width;
29        Self {
30            file_path: None,
31            hunks: Vec::new(),
32            scroll_offset: 0,
33            file_tree: DiffFileTree::new(),
34            file_diffs: HashMap::new(),
35            show_sidebar: config.sidebar_enabled,
36            sidebar_split,
37            sidebar_focused: true,
38            config,
39            theme: AppTheme::default(),
40        }
41    }
42}