windjammer_ui/components/generated/
panel.rs1#![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}