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