@reliability-design/web 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/rel-accordion/rel-accordion.stories.ts +313 -0
- package/dist/components/rel-accordion/rel-accordion.ts +114 -0
- package/dist/components/rel-alert/rel-alert.stories.ts +412 -0
- package/dist/components/rel-alert/rel-alert.ts +194 -0
- package/dist/components/rel-avatar/rel-avatar.stories.ts +327 -0
- package/dist/components/rel-avatar/rel-avatar.ts +100 -0
- package/dist/components/rel-badge/rel-badge.stories.ts +350 -0
- package/dist/components/rel-badge/rel-badge.ts +70 -0
- package/dist/components/rel-breadcrumb/rel-breadcrumb.stories.ts +306 -0
- package/dist/components/rel-breadcrumb/rel-breadcrumb.ts +97 -0
- package/dist/components/rel-button/rel-button.stories.ts +356 -0
- package/dist/components/rel-button/rel-button.ts +204 -0
- package/dist/components/rel-card/rel-card.stories.ts +299 -0
- package/dist/components/rel-card/rel-card.ts +33 -0
- package/dist/components/rel-cardmedia/rel-cardmedia.stories.ts +368 -0
- package/dist/components/rel-cardmedia/rel-cardmedia.ts +80 -0
- package/dist/components/rel-checkbox/rel-checkbox.stories.ts +414 -0
- package/dist/components/rel-checkbox/rel-checkbox.ts +164 -0
- package/dist/components/rel-chip/rel-chip.stories.ts +552 -0
- package/dist/components/rel-chip/rel-chip.ts +261 -0
- package/dist/components/rel-container/rel-container.stories.ts +239 -0
- package/dist/components/rel-container/rel-container.ts +74 -0
- package/dist/components/rel-divider/rel-divider.stories.ts +229 -0
- package/dist/components/rel-divider/rel-divider.ts +44 -0
- package/dist/components/rel-layout/rel-layout.stories.ts +713 -0
- package/dist/components/rel-layout/rel-layout.ts +60 -0
- package/dist/components/rel-menu/rel-menu.stories.ts +910 -0
- package/dist/components/rel-menu/rel-menu.ts +319 -0
- package/dist/components/rel-progress/rel-progress.stories.ts +817 -0
- package/dist/components/rel-progress/rel-progress.ts +182 -0
- package/dist/components/rel-radio/rel-radio.stories.ts +1048 -0
- package/dist/components/rel-radio/rel-radio.ts +187 -0
- package/dist/components/rel-segmented-button/rel-segmented-button.stories.ts +1079 -0
- package/dist/components/rel-segmented-button/rel-segmented-button.ts +150 -0
- package/dist/components/rel-select/rel-select.stories.ts +1201 -0
- package/dist/components/rel-select/rel-select.ts +261 -0
- package/dist/components/rel-slider/rel-slider.stories.ts +730 -0
- package/dist/components/rel-slider/rel-slider.ts +440 -0
- package/dist/components/rel-snackbar/rel-snackbar.stories.ts +808 -0
- package/dist/components/rel-snackbar/rel-snackbar.ts +212 -0
- package/dist/components/rel-stepper/rel-stepper.stories.ts +752 -0
- package/dist/components/rel-stepper/rel-stepper.ts +425 -0
- package/dist/components/rel-switch/rel-switch.stories.ts +441 -0
- package/dist/components/rel-switch/rel-switch.ts +161 -0
- package/dist/components/rel-tab/rel-tab.stories.ts +492 -0
- package/dist/components/rel-tab/rel-tab.ts +145 -0
- package/dist/components/rel-textfield/rel-textfield.stories.ts +710 -0
- package/dist/components/rel-textfield/rel-textfield.ts +224 -0
- package/dist/components/rel-toast/rel-toast.stories.ts +394 -0
- package/dist/components/rel-toast/rel-toast.ts +154 -0
- package/dist/components/rel-tooltip/rel-tooltip.stories.ts +364 -0
- package/dist/components/rel-tooltip/rel-tooltip.ts +80 -0
- package/dist/index.d.mts +372 -0
- package/dist/index.d.ts +372 -0
- package/dist/index.js +4593 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +4544 -0
- package/dist/index.mjs.map +1 -0
- package/dist/styles/vars.css +184 -0
- package/package.json +32 -0
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/web-components-vite';
|
|
2
|
+
import { html } from 'lit';
|
|
3
|
+
import './rel-avatar';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The Avatar component displays user profile images, initials, or icons in a circular format.
|
|
7
|
+
* Built with Lit web components for framework-agnostic usage.
|
|
8
|
+
*
|
|
9
|
+
* ## Features
|
|
10
|
+
* - **3 Types**: image, text (initials), icon
|
|
11
|
+
* - **4 Sizes**: xs (18px), sm (24px), md (32px), lg (40px)
|
|
12
|
+
* - **Circular Shape**: Perfect circle for all variants
|
|
13
|
+
* - **Flexible Content**: Supports images, text initials, or custom icons
|
|
14
|
+
* - **Fallback Support**: Graceful handling of missing images
|
|
15
|
+
*/
|
|
16
|
+
const meta: Meta = {
|
|
17
|
+
title: 'Components/Avatar',
|
|
18
|
+
tags: ['autodocs'],
|
|
19
|
+
component: 'rel-avatar',
|
|
20
|
+
argTypes: {
|
|
21
|
+
type: {
|
|
22
|
+
control: { type: 'select' },
|
|
23
|
+
options: ['image', 'text', 'icon'],
|
|
24
|
+
description: 'Type of avatar content',
|
|
25
|
+
table: {
|
|
26
|
+
defaultValue: { summary: 'image' },
|
|
27
|
+
type: { summary: 'string' },
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
size: {
|
|
31
|
+
control: { type: 'select' },
|
|
32
|
+
options: ['xs', 'sm', 'md', 'lg'],
|
|
33
|
+
description: 'Avatar size',
|
|
34
|
+
table: {
|
|
35
|
+
defaultValue: { summary: 'md' },
|
|
36
|
+
type: { summary: 'string' },
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
src: {
|
|
40
|
+
control: 'text',
|
|
41
|
+
description: 'Image source URL (for type="image")',
|
|
42
|
+
table: {
|
|
43
|
+
type: { summary: 'string' },
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
text: {
|
|
47
|
+
control: 'text',
|
|
48
|
+
description: 'Text initials (for type="text")',
|
|
49
|
+
table: {
|
|
50
|
+
type: { summary: 'string' },
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
alt: {
|
|
54
|
+
control: 'text',
|
|
55
|
+
description: 'Image alt text for accessibility',
|
|
56
|
+
table: {
|
|
57
|
+
defaultValue: { summary: 'Avatar' },
|
|
58
|
+
type: { summary: 'string' },
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
render: (args) => {
|
|
63
|
+
if (args.type === 'icon') {
|
|
64
|
+
return html`
|
|
65
|
+
<rel-avatar
|
|
66
|
+
type="icon"
|
|
67
|
+
size="${args.size || 'md'}"
|
|
68
|
+
>
|
|
69
|
+
<span>👤</span>
|
|
70
|
+
</rel-avatar>
|
|
71
|
+
`;
|
|
72
|
+
}
|
|
73
|
+
return html`
|
|
74
|
+
<rel-avatar
|
|
75
|
+
type="${args.type || 'image'}"
|
|
76
|
+
size="${args.size || 'md'}"
|
|
77
|
+
src="${args.src || ''}"
|
|
78
|
+
text="${args.text || ''}"
|
|
79
|
+
alt="${args.alt || 'Avatar'}"
|
|
80
|
+
></rel-avatar>
|
|
81
|
+
`;
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export default meta;
|
|
86
|
+
type Story = StoryObj;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Image avatar - displays a profile picture
|
|
90
|
+
*/
|
|
91
|
+
export const ImageAvatar: Story = {
|
|
92
|
+
args: {
|
|
93
|
+
type: 'image',
|
|
94
|
+
size: 'md',
|
|
95
|
+
src: 'https://i.pravatar.cc/150?img=1',
|
|
96
|
+
alt: 'John Doe',
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Text avatar - displays user initials
|
|
102
|
+
*/
|
|
103
|
+
export const TextAvatar: Story = {
|
|
104
|
+
args: {
|
|
105
|
+
type: 'text',
|
|
106
|
+
size: 'md',
|
|
107
|
+
text: 'JD',
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Icon avatar - displays a custom icon
|
|
113
|
+
*/
|
|
114
|
+
export const IconAvatar: Story = {
|
|
115
|
+
args: {
|
|
116
|
+
type: 'icon',
|
|
117
|
+
size: 'md',
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Extra small size - 18px diameter
|
|
123
|
+
*/
|
|
124
|
+
export const ExtraSmall: Story = {
|
|
125
|
+
args: {
|
|
126
|
+
type: 'image',
|
|
127
|
+
size: 'xs',
|
|
128
|
+
src: 'https://i.pravatar.cc/150?img=2',
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Small size - 24px diameter
|
|
134
|
+
*/
|
|
135
|
+
export const Small: Story = {
|
|
136
|
+
args: {
|
|
137
|
+
type: 'image',
|
|
138
|
+
size: 'sm',
|
|
139
|
+
src: 'https://i.pravatar.cc/150?img=3',
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Medium size - 32px diameter (default)
|
|
145
|
+
*/
|
|
146
|
+
export const Medium: Story = {
|
|
147
|
+
args: {
|
|
148
|
+
type: 'image',
|
|
149
|
+
size: 'md',
|
|
150
|
+
src: 'https://i.pravatar.cc/150?img=4',
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Large size - 40px diameter
|
|
156
|
+
*/
|
|
157
|
+
export const Large: Story = {
|
|
158
|
+
args: {
|
|
159
|
+
type: 'image',
|
|
160
|
+
size: 'lg',
|
|
161
|
+
src: 'https://i.pravatar.cc/150?img=5',
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* All sizes - showcase of all avatar sizes with images
|
|
167
|
+
*/
|
|
168
|
+
export const AllSizes: Story = {
|
|
169
|
+
render: () => html`
|
|
170
|
+
<div style="display: flex; gap: 16px; align-items: center; padding: 24px; background: #000;">
|
|
171
|
+
<rel-avatar type="image" size="xs" src="https://i.pravatar.cc/150?img=6"></rel-avatar>
|
|
172
|
+
<rel-avatar type="image" size="sm" src="https://i.pravatar.cc/150?img=7"></rel-avatar>
|
|
173
|
+
<rel-avatar type="image" size="md" src="https://i.pravatar.cc/150?img=8"></rel-avatar>
|
|
174
|
+
<rel-avatar type="image" size="lg" src="https://i.pravatar.cc/150?img=9"></rel-avatar>
|
|
175
|
+
</div>
|
|
176
|
+
`,
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* All types - showcase of all avatar types
|
|
181
|
+
*/
|
|
182
|
+
export const AllTypes: Story = {
|
|
183
|
+
render: () => html`
|
|
184
|
+
<div style="display: flex; gap: 16px; align-items: center; padding: 24px; background: #000;">
|
|
185
|
+
<div style="text-align: center;">
|
|
186
|
+
<rel-avatar type="image" size="lg" src="https://i.pravatar.cc/150?img=10"></rel-avatar>
|
|
187
|
+
<p style="color: #fff; font-size: 12px; margin-top: 8px;">Image</p>
|
|
188
|
+
</div>
|
|
189
|
+
|
|
190
|
+
<div style="text-align: center;">
|
|
191
|
+
<rel-avatar type="text" size="lg" text="AB"></rel-avatar>
|
|
192
|
+
<p style="color: #fff; font-size: 12px; margin-top: 8px;">Text</p>
|
|
193
|
+
</div>
|
|
194
|
+
|
|
195
|
+
<div style="text-align: center;">
|
|
196
|
+
<rel-avatar type="icon" size="lg">
|
|
197
|
+
<span>👤</span>
|
|
198
|
+
</rel-avatar>
|
|
199
|
+
<p style="color: #fff; font-size: 12px; margin-top: 8px;">Icon</p>
|
|
200
|
+
</div>
|
|
201
|
+
</div>
|
|
202
|
+
`,
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Text initials - different initial combinations
|
|
207
|
+
*/
|
|
208
|
+
export const TextInitials: Story = {
|
|
209
|
+
render: () => html`
|
|
210
|
+
<div style="display: flex; gap: 16px; padding: 24px; background: #000;">
|
|
211
|
+
<rel-avatar type="text" size="lg" text="JD"></rel-avatar>
|
|
212
|
+
<rel-avatar type="text" size="lg" text="AB"></rel-avatar>
|
|
213
|
+
<rel-avatar type="text" size="lg" text="XY"></rel-avatar>
|
|
214
|
+
<rel-avatar type="text" size="lg" text="MK"></rel-avatar>
|
|
215
|
+
</div>
|
|
216
|
+
`,
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Icon variations - different icons
|
|
221
|
+
*/
|
|
222
|
+
export const IconVariations: Story = {
|
|
223
|
+
render: () => html`
|
|
224
|
+
<div style="display: flex; gap: 16px; padding: 24px; background: #000;">
|
|
225
|
+
<rel-avatar type="icon" size="lg">
|
|
226
|
+
<span>👤</span>
|
|
227
|
+
</rel-avatar>
|
|
228
|
+
<rel-avatar type="icon" size="lg">
|
|
229
|
+
<span>🏢</span>
|
|
230
|
+
</rel-avatar>
|
|
231
|
+
<rel-avatar type="icon" size="lg">
|
|
232
|
+
<span>⚙️</span>
|
|
233
|
+
</rel-avatar>
|
|
234
|
+
<rel-avatar type="icon" size="lg">
|
|
235
|
+
<span>📧</span>
|
|
236
|
+
</rel-avatar>
|
|
237
|
+
</div>
|
|
238
|
+
`,
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* User list - avatars in a typical user list layout
|
|
243
|
+
*/
|
|
244
|
+
export const UserList: Story = {
|
|
245
|
+
render: () => html`
|
|
246
|
+
<div style="display: flex; flex-direction: column; gap: 12px; padding: 24px; background: #000;">
|
|
247
|
+
<div style="display: flex; align-items: center; gap: 12px;">
|
|
248
|
+
<rel-avatar type="image" size="md" src="https://i.pravatar.cc/150?img=11"></rel-avatar>
|
|
249
|
+
<div>
|
|
250
|
+
<p style="color: #fff; margin: 0; font-size: 14px; font-weight: 600;">John Doe</p>
|
|
251
|
+
<p style="color: #999; margin: 0; font-size: 12px;">john.doe@example.com</p>
|
|
252
|
+
</div>
|
|
253
|
+
</div>
|
|
254
|
+
|
|
255
|
+
<div style="display: flex; align-items: center; gap: 12px;">
|
|
256
|
+
<rel-avatar type="text" size="md" text="AB"></rel-avatar>
|
|
257
|
+
<div>
|
|
258
|
+
<p style="color: #fff; margin: 0; font-size: 14px; font-weight: 600;">Alice Brown</p>
|
|
259
|
+
<p style="color: #999; margin: 0; font-size: 12px;">alice.brown@example.com</p>
|
|
260
|
+
</div>
|
|
261
|
+
</div>
|
|
262
|
+
|
|
263
|
+
<div style="display: flex; align-items: center; gap: 12px;">
|
|
264
|
+
<rel-avatar type="image" size="md" src="https://i.pravatar.cc/150?img=12"></rel-avatar>
|
|
265
|
+
<div>
|
|
266
|
+
<p style="color: #fff; margin: 0; font-size: 14px; font-weight: 600;">Sarah Wilson</p>
|
|
267
|
+
<p style="color: #999; margin: 0; font-size: 12px;">sarah.wilson@example.com</p>
|
|
268
|
+
</div>
|
|
269
|
+
</div>
|
|
270
|
+
</div>
|
|
271
|
+
`,
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Avatar group - overlapping avatars
|
|
276
|
+
*/
|
|
277
|
+
export const AvatarGroup: Story = {
|
|
278
|
+
render: () => html`
|
|
279
|
+
<div style="padding: 24px; background: #000;">
|
|
280
|
+
<div style="display: flex; margin-left: 16px;">
|
|
281
|
+
<rel-avatar type="image" size="md" src="https://i.pravatar.cc/150?img=13" style="margin-left: -16px; border: 2px solid #000;"></rel-avatar>
|
|
282
|
+
<rel-avatar type="image" size="md" src="https://i.pravatar.cc/150?img=14" style="margin-left: -16px; border: 2px solid #000;"></rel-avatar>
|
|
283
|
+
<rel-avatar type="text" size="md" text="JD" style="margin-left: -16px; border: 2px solid #000;"></rel-avatar>
|
|
284
|
+
<rel-avatar type="text" size="md" text="+5" style="margin-left: -16px; border: 2px solid #000;"></rel-avatar>
|
|
285
|
+
</div>
|
|
286
|
+
</div>
|
|
287
|
+
`,
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Size comparison - all sizes of each type
|
|
292
|
+
*/
|
|
293
|
+
export const SizeComparison: Story = {
|
|
294
|
+
render: () => html`
|
|
295
|
+
<div style="display: flex; flex-direction: column; gap: 24px; padding: 24px; background: #000;">
|
|
296
|
+
<div>
|
|
297
|
+
<p style="color: #00F49C; margin: 0 0 12px 0; font-weight: 600;">Image Avatars</p>
|
|
298
|
+
<div style="display: flex; gap: 12px; align-items: center;">
|
|
299
|
+
<rel-avatar type="image" size="xs" src="https://i.pravatar.cc/150?img=15"></rel-avatar>
|
|
300
|
+
<rel-avatar type="image" size="sm" src="https://i.pravatar.cc/150?img=15"></rel-avatar>
|
|
301
|
+
<rel-avatar type="image" size="md" src="https://i.pravatar.cc/150?img=15"></rel-avatar>
|
|
302
|
+
<rel-avatar type="image" size="lg" src="https://i.pravatar.cc/150?img=15"></rel-avatar>
|
|
303
|
+
</div>
|
|
304
|
+
</div>
|
|
305
|
+
|
|
306
|
+
<div>
|
|
307
|
+
<p style="color: #00F49C; margin: 0 0 12px 0; font-weight: 600;">Text Avatars</p>
|
|
308
|
+
<div style="display: flex; gap: 12px; align-items: center;">
|
|
309
|
+
<rel-avatar type="text" size="xs" text="AB"></rel-avatar>
|
|
310
|
+
<rel-avatar type="text" size="sm" text="AB"></rel-avatar>
|
|
311
|
+
<rel-avatar type="text" size="md" text="AB"></rel-avatar>
|
|
312
|
+
<rel-avatar type="text" size="lg" text="AB"></rel-avatar>
|
|
313
|
+
</div>
|
|
314
|
+
</div>
|
|
315
|
+
|
|
316
|
+
<div>
|
|
317
|
+
<p style="color: #00F49C; margin: 0 0 12px 0; font-weight: 600;">Icon Avatars</p>
|
|
318
|
+
<div style="display: flex; gap: 12px; align-items: center;">
|
|
319
|
+
<rel-avatar type="icon" size="xs"><span>👤</span></rel-avatar>
|
|
320
|
+
<rel-avatar type="icon" size="sm"><span>👤</span></rel-avatar>
|
|
321
|
+
<rel-avatar type="icon" size="md"><span>👤</span></rel-avatar>
|
|
322
|
+
<rel-avatar type="icon" size="lg"><span>👤</span></rel-avatar>
|
|
323
|
+
</div>
|
|
324
|
+
</div>
|
|
325
|
+
</div>
|
|
326
|
+
`,
|
|
327
|
+
};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { LitElement, html, css } from "lit";
|
|
2
|
+
import { customElement, property } from "lit/decorators.js";
|
|
3
|
+
|
|
4
|
+
@customElement("rel-avatar")
|
|
5
|
+
export class RelAvatar extends LitElement {
|
|
6
|
+
@property({ type: String }) size: "lg" | "md" | "sm" | "xs" = "md";
|
|
7
|
+
@property({ type: String }) type: "image" | "text" | "icon" = "image";
|
|
8
|
+
|
|
9
|
+
@property({ type: String }) src = "";
|
|
10
|
+
@property({ type: String }) text = "";
|
|
11
|
+
@property({ type: String }) alt = "Avatar";
|
|
12
|
+
|
|
13
|
+
static styles = css`
|
|
14
|
+
:host {
|
|
15
|
+
display: inline-flex;
|
|
16
|
+
font-family: var(--rel-fontFamilies-primary);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.avatar {
|
|
20
|
+
display: inline-flex;
|
|
21
|
+
align-items: center;
|
|
22
|
+
justify-content: center;
|
|
23
|
+
border-radius: 50%;
|
|
24
|
+
overflow: hidden;
|
|
25
|
+
|
|
26
|
+
background-color: var(--rel-colors-gray-heading);
|
|
27
|
+
color: var(--rel-colors-white);
|
|
28
|
+
font-weight: var(--rel-fontWeights-bold);
|
|
29
|
+
|
|
30
|
+
user-select: none;
|
|
31
|
+
text-transform: uppercase;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* -------------------------
|
|
35
|
+
CORRECTED SIZE CLASSES
|
|
36
|
+
------------------------- */
|
|
37
|
+
.avatar-lg {
|
|
38
|
+
width: 40px;
|
|
39
|
+
height: 40px;
|
|
40
|
+
font-size: var(--rel-fontSizes-xl);
|
|
41
|
+
line-height: 38px;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.avatar-md {
|
|
45
|
+
width: 32px;
|
|
46
|
+
height: 32px;
|
|
47
|
+
font-size: var(--rel-fontSizes-lg);
|
|
48
|
+
line-height: 32px;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.avatar-sm {
|
|
52
|
+
width: 24px;
|
|
53
|
+
height: 24px;
|
|
54
|
+
font-size: var(--rel-fontSizes-md);
|
|
55
|
+
line-height: 24px;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.avatar-xs {
|
|
59
|
+
width: 18px;
|
|
60
|
+
height: 18px;
|
|
61
|
+
font-size: var(--rel-fontSizes-xs);
|
|
62
|
+
line-height: 18px;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
img {
|
|
66
|
+
width: 100%;
|
|
67
|
+
height: 100%;
|
|
68
|
+
object-fit: cover;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.icon-slot {
|
|
72
|
+
width: 100%;
|
|
73
|
+
height: 100%;
|
|
74
|
+
display: inline-flex;
|
|
75
|
+
align-items: center;
|
|
76
|
+
justify-content: center;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.icon-slot ::slotted(*) {
|
|
80
|
+
font-size: var(--rel-fontSizes-md);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.icon-slot ::slotted(svg) {
|
|
84
|
+
width: 50%;
|
|
85
|
+
height: 50%;
|
|
86
|
+
}
|
|
87
|
+
`;
|
|
88
|
+
|
|
89
|
+
render() {
|
|
90
|
+
return html`
|
|
91
|
+
<div class="avatar avatar-${this.size}">
|
|
92
|
+
${this.type === "image"
|
|
93
|
+
? html`<img src=${this.src!} alt=${this.alt} />`
|
|
94
|
+
: this.type === "text"
|
|
95
|
+
? html`<span>${this.text}</span>`
|
|
96
|
+
: html`<span class="icon-slot"><slot></slot></span>`}
|
|
97
|
+
</div>
|
|
98
|
+
`;
|
|
99
|
+
}
|
|
100
|
+
}
|