windjammer_ui/components/generated/
avatar.rs

1#![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}