windjammer_ui/components/generated/
avatar.rs

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