windjammer_ui/components/generated/
avatar.rs1#![allow(clippy::all)]
2#![allow(noop_method_call)]
3pub struct Avatar {
4 src: String,
5 alt: String,
6 size: AvatarSize,
7 shape: AvatarShape,
8 fallback: String,
9 class: String,
10}
11
12pub enum AvatarSize {
13 Small,
14 Medium,
15 Large,
16 XLarge,
17}
18
19pub enum AvatarShape {
20 Circle,
21 Square,
22 Rounded,
23}
24
25impl Avatar {
26 #[inline]
27 pub fn new(src: String) -> Avatar {
28 Avatar {
29 src,
30 alt: "Avatar".to_string(),
31 size: AvatarSize::Medium,
32 shape: AvatarShape::Circle,
33 fallback: String::new(),
34 class: String::new(),
35 }
36 }
37 #[inline]
38 pub fn alt(mut self, alt: String) -> Avatar {
39 self.alt = alt;
40 self
41 }
42 #[inline]
43 pub fn size(mut self, size: AvatarSize) -> Avatar {
44 self.size = size;
45 self
46 }
47 #[inline]
48 pub fn shape(mut self, shape: AvatarShape) -> Avatar {
49 self.shape = shape;
50 self
51 }
52 #[inline]
53 pub fn fallback(mut self, fallback: String) -> Avatar {
54 self.fallback = fallback;
55 self
56 }
57 #[inline]
58 pub fn class(mut self, class: String) -> Avatar {
59 self.class = class;
60 self
61 }
62 #[inline]
63 pub fn render(&self) -> String {
64 let size_px = match self.size {
65 AvatarSize::Small => "32px",
66 AvatarSize::Medium => "48px",
67 AvatarSize::Large => "64px",
68 AvatarSize::XLarge => "96px",
69 };
70 let border_radius = match self.shape {
71 AvatarShape::Circle => "50%",
72 AvatarShape::Square => "0",
73 AvatarShape::Rounded => "8px",
74 };
75 let mut html = String::new();
76 if self.src.is_empty() && !self.fallback.is_empty() {
77 html.push_str("<div class=\"wj-avatar wj-avatar-fallback ");
78 html.push_str(self.class.as_str());
79 html.push_str("\" style=\"width: ");
80 html.push_str(size_px);
81 html.push_str("; height: ");
82 html.push_str(size_px);
83 html.push_str("; border-radius: ");
84 html.push_str(border_radius);
85 html.push_str("; background-color: #3b82f6; color: white; display: flex; align-items: center; justify-content: center; font-weight: 600; font-size: ");
86 let font_size = match self.size {
87 AvatarSize::Small => "12px",
88 AvatarSize::Medium => "16px",
89 AvatarSize::Large => "20px",
90 AvatarSize::XLarge => "28px",
91 };
92 html.push_str(font_size);
93 html.push_str(";\">");
94 html.push_str(self.fallback.as_str());
95 html.push_str("</div>")
96 } else {
97 html.push_str("<img class=\"wj-avatar ");
98 html.push_str(self.class.as_str());
99 html.push_str("\" src=\"");
100 html.push_str(self.src.as_str());
101 html.push_str("\" alt=\"");
102 html.push_str(self.alt.as_str());
103 html.push_str("\" style=\"width: ");
104 html.push_str(size_px);
105 html.push_str("; height: ");
106 html.push_str(size_px);
107 html.push_str("; border-radius: ");
108 html.push_str(border_radius);
109 html.push_str("; object-fit: cover;\">")
110 }
111 html
112 }
113}