windjammer_ui/components/generated/
panel.rs

1#![allow(clippy::all)]
2#![allow(noop_method_call)]
3use super::traits::Renderable;
4
5#[derive(Debug, Clone, PartialEq, Eq, Default)]
6pub struct Panel {
7    pub title: String,
8    pub children: Vec<String>,
9    pub collapsible: bool,
10    pub collapsed: bool,
11    pub padding: String,
12}
13
14impl Panel {
15    #[inline]
16    pub fn new(title: String) -> Panel {
17        Panel {
18            title,
19            children: Vec::new(),
20            collapsible: false,
21            collapsed: false,
22            padding: "16px".to_string(),
23        }
24    }
25    #[inline]
26    pub fn child(mut self, child: String) -> Panel {
27        self.children.push(child);
28        self
29    }
30    #[inline]
31    pub fn collapsible(mut self, collapsible: bool) -> Panel {
32        self.collapsible = collapsible;
33        self
34    }
35    #[inline]
36    pub fn collapsed(mut self, collapsed: bool) -> Panel {
37        self.collapsed = collapsed;
38        self
39    }
40    #[inline]
41    pub fn padding(mut self, padding: String) -> Panel {
42        self.padding = padding;
43        self
44    }
45}
46
47impl Renderable for Panel {
48    #[inline]
49    fn render(self) -> String {
50        let header_class = {
51            if self.collapsible {
52                "wj-panel-header-collapsible".to_string()
53            } else {
54                "wj-panel-header".to_string()
55            }
56        };
57        let icon = {
58            if self.collapsible {
59                if self.collapsed {
60                    "▶".to_string()
61                } else {
62                    "▼".to_string()
63                }
64            } else {
65                "".to_string()
66            }
67        };
68        let content_style = {
69            if self.collapsed {
70                "display: none;".to_string()
71            } else {
72                "display: block;".to_string()
73            }
74        };
75        let children_html = self.children.join(
76            "
77",
78        );
79        format!(
80            "<div class='wj-panel'>
81  <div class='{}'>
82    <span>{}</span>
83    <h3>{}</h3>
84  </div>
85  <div class='wj-panel-content' style='{}padding: {};'>
86    {}
87  </div>
88</div>",
89            header_class, icon, self.title, content_style, self.padding, children_html
90        )
91    }
92}