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