1use ratatui::layout::Rect;
2use ratatui_macros::{horizontal, vertical};
3
4#[derive(Debug, Clone, Copy)]
5pub struct Layout {
6 pub status_bar: Rect,
7 pub main_content: Rect,
8 pub label_list: Rect,
9 pub text_search: Rect,
10 pub status_dropdown: Rect,
11 pub issue_preview: Rect,
12 pub label_search: Rect,
13 pub title_bar: Rect,
14}
15
16impl Layout {
17 pub fn new(area: Rect) -> Self {
18 let [title_bar, main, status_bar] = vertical![==1, *=1, ==1].areas(area);
19 let [left, right] = horizontal![==70%, *=1].areas(main);
20 let [label_list, issue_preview] = vertical![*=1, *=1].areas(right);
21 let [text_search, bottom_search, main_content] = vertical![==3, ==3, *=1].areas(left);
22 let [label_search, status_dropdown] = horizontal![*=1, ==30%].areas(bottom_search);
23 Self {
24 status_dropdown,
25 title_bar,
26 status_bar,
27 main_content,
28 label_list,
29 label_search,
30 text_search,
31 issue_preview,
32 }
33 }
34
35 pub fn fullscreen(area: Rect) -> Self {
36 Self {
37 status_bar: area,
38 main_content: area,
39 label_list: area,
40 text_search: area,
41 status_dropdown: area,
42 issue_preview: area,
43 label_search: area,
44 title_bar: area,
45 }
46 }
47
48 pub fn areas(&self) -> [Rect; 4] {
49 [
50 self.title_bar,
51 self.main_content,
52 self.label_list,
53 self.issue_preview,
54 ]
55 }
56}