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