@reliability-design/web 1.0.2 → 1.0.6
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/README.md +132 -0
- package/dist/components/rel-accordion/rel-accordion.ts +61 -29
- package/dist/components/rel-alert/README.md +141 -0
- package/dist/components/rel-alert/rel-alert.ts +110 -67
- package/dist/components/rel-avatar/README.md +119 -0
- package/dist/components/rel-avatar/rel-avatar.ts +8 -15
- package/dist/components/rel-badge/README.md +86 -0
- package/dist/components/rel-badge/rel-badge.ts +28 -21
- package/dist/components/rel-breadcrumb/README.md +102 -0
- package/dist/components/rel-breadcrumb/rel-breadcrumb.ts +24 -18
- package/dist/components/rel-button/README.md +130 -0
- package/dist/components/rel-button/rel-button.ts +39 -59
- package/dist/components/rel-calendar/README.md +109 -0
- package/dist/components/rel-calendar/index.ts +1 -0
- package/dist/components/rel-calendar/rel-calendar.ts +467 -0
- package/dist/components/rel-card/README.md +94 -0
- package/dist/components/rel-card/rel-card.ts +21 -11
- package/dist/components/rel-cardmedia/README.md +127 -0
- package/dist/components/rel-cardmedia/rel-cardmedia.ts +22 -18
- package/dist/components/rel-carousel/README.md +166 -0
- package/dist/components/rel-carousel/index.ts +1 -0
- package/dist/components/rel-carousel/rel-carousel.ts +469 -0
- package/dist/components/rel-chart/README.md +286 -0
- package/dist/components/rel-chart/index.ts +1 -0
- package/dist/components/rel-chart/rel-chart.ts +736 -0
- package/dist/components/rel-checkbox/README.md +77 -0
- package/dist/components/rel-checkbox/rel-checkbox.ts +36 -45
- package/dist/components/rel-chip/README.md +114 -0
- package/dist/components/rel-chip/rel-chip.ts +47 -122
- package/dist/components/rel-container/README.md +99 -0
- package/dist/components/rel-container/rel-container.ts +1 -6
- package/dist/components/rel-date-picker/README.md +253 -0
- package/dist/components/rel-date-picker/index.ts +1 -0
- package/dist/components/rel-date-picker/rel-date-picker.ts +916 -0
- package/dist/components/rel-divider/README.md +100 -0
- package/dist/components/rel-divider/rel-divider.ts +37 -37
- package/dist/components/rel-drawer/README.md +200 -0
- package/dist/components/rel-drawer/index.ts +1 -0
- package/dist/components/rel-drawer/rel-drawer.ts +621 -0
- package/dist/components/rel-kbd/README.md +151 -0
- package/dist/components/rel-kbd/rel-kbd.ts +118 -0
- package/dist/components/rel-layout/README.md +88 -0
- package/dist/components/rel-layout/rel-layout.ts +12 -14
- package/dist/components/rel-menu/README.md +151 -0
- package/dist/components/rel-menu/rel-menu.ts +18 -10
- package/dist/components/rel-menubar/README.md +329 -0
- package/dist/components/rel-menubar/index.ts +2 -0
- package/dist/components/rel-menubar/rel-menubar-menu.ts +16 -0
- package/dist/components/rel-menubar/rel-menubar.ts +576 -0
- package/dist/components/rel-nav-menu/README.md +289 -0
- package/dist/components/rel-nav-menu/index.ts +3 -0
- package/dist/components/rel-nav-menu/rel-nav-menu-item.ts +143 -0
- package/dist/components/rel-nav-menu/rel-nav-menu-panel.ts +53 -0
- package/dist/components/rel-nav-menu/rel-nav-menu.ts +331 -0
- package/dist/components/rel-navbar/README.md +126 -0
- package/dist/components/rel-navbar/rel-navbar.ts +91 -0
- package/dist/components/rel-otp/README.md +440 -0
- package/dist/components/rel-otp/index.ts +1 -0
- package/dist/components/rel-otp/rel-otp.ts +504 -0
- package/dist/components/rel-pagination/README.md +410 -0
- package/dist/components/rel-pagination/index.ts +1 -0
- package/dist/components/rel-pagination/rel-pagination.ts +376 -0
- package/dist/components/rel-popover/README.md +568 -0
- package/dist/components/rel-popover/index.ts +2 -0
- package/dist/components/rel-popover/rel-popover-content.ts +55 -0
- package/dist/components/rel-popover/rel-popover.ts +327 -0
- package/dist/components/rel-progress/README.md +110 -0
- package/dist/components/rel-progress/rel-progress.ts +58 -20
- package/dist/components/rel-quote-page/README.md +166 -0
- package/dist/components/rel-quote-page/rel-quote-page.ts +816 -0
- package/dist/components/rel-radio/README.md +120 -0
- package/dist/components/rel-radio/rel-radio.ts +41 -73
- package/dist/components/rel-resizable/README.md +140 -0
- package/dist/components/rel-resizable/index.ts +3 -0
- package/dist/components/rel-resizable/rel-resizable-group.ts +374 -0
- package/dist/components/rel-resizable/rel-resizable-handle.ts +149 -0
- package/dist/components/rel-resizable/rel-resizable-panel.ts +47 -0
- package/dist/components/rel-segmented-button/README.md +141 -0
- package/dist/components/rel-segmented-button/rel-segmented-button.ts +18 -13
- package/dist/components/rel-select/README.md +107 -0
- package/dist/components/rel-select/rel-select.ts +14 -14
- package/dist/components/rel-sheet/README.md +224 -0
- package/dist/components/rel-sheet/rel-sheet.ts +683 -0
- package/dist/components/rel-sidebar/README.md +209 -0
- package/dist/components/rel-sidebar/rel-sidebar.ts +1158 -0
- package/dist/components/rel-slider/README.md +135 -0
- package/dist/components/rel-slider/rel-slider.ts +19 -7
- package/dist/components/rel-snackbar/README.md +134 -0
- package/dist/components/rel-snackbar/rel-snackbar.ts +73 -2
- package/dist/components/rel-stepper/README.md +160 -0
- package/dist/components/rel-stepper/rel-stepper.ts +29 -8
- package/dist/components/rel-switch/README.md +102 -0
- package/dist/components/rel-switch/rel-switch.ts +22 -11
- package/dist/components/rel-tab/README.md +163 -0
- package/dist/components/rel-tab/rel-tab.ts +46 -22
- package/dist/components/rel-table/README.md +178 -0
- package/dist/components/rel-table/rel-table-body.ts +16 -0
- package/dist/components/rel-table/rel-table-caption.ts +22 -0
- package/dist/components/rel-table/rel-table-cell.ts +49 -0
- package/dist/components/rel-table/rel-table-footer.ts +18 -0
- package/dist/components/rel-table/rel-table-head.ts +33 -0
- package/dist/components/rel-table/rel-table-header.ts +16 -0
- package/dist/components/rel-table/rel-table-row.ts +32 -0
- package/dist/components/rel-table/rel-table.ts +47 -0
- package/dist/components/rel-textfield/README.md +90 -0
- package/dist/components/rel-textfield/rel-textfield.ts +37 -21
- package/dist/components/rel-toast/README.md +148 -0
- package/dist/components/rel-toast/rel-toast.ts +32 -14
- package/dist/components/rel-tooltip/README.md +103 -0
- package/dist/components/rel-tooltip/rel-tooltip.ts +9 -9
- package/dist/index.d.mts +846 -7
- package/dist/index.d.ts +846 -7
- package/dist/index.js +10860 -1803
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10820 -1809
- package/dist/index.mjs.map +1 -1
- package/dist/styles/vars.css +293 -183
- package/dist/vars-ITL2K3KO.css +294 -0
- package/package.json +2 -2
- package/dist/components/rel-accordion/rel-accordion.stories.ts +0 -313
- package/dist/components/rel-alert/rel-alert.stories.ts +0 -412
- package/dist/components/rel-avatar/rel-avatar.stories.ts +0 -327
- package/dist/components/rel-badge/rel-badge.stories.ts +0 -350
- package/dist/components/rel-breadcrumb/rel-breadcrumb.stories.ts +0 -306
- package/dist/components/rel-button/rel-button.stories.ts +0 -356
- package/dist/components/rel-card/rel-card.stories.ts +0 -299
- package/dist/components/rel-cardmedia/rel-cardmedia.stories.ts +0 -368
- package/dist/components/rel-checkbox/rel-checkbox.stories.ts +0 -414
- package/dist/components/rel-chip/rel-chip.stories.ts +0 -552
- package/dist/components/rel-container/rel-container.stories.ts +0 -239
- package/dist/components/rel-divider/rel-divider.stories.ts +0 -229
- package/dist/components/rel-layout/rel-layout.stories.ts +0 -713
- package/dist/components/rel-menu/rel-menu.stories.ts +0 -910
- package/dist/components/rel-progress/rel-progress.stories.ts +0 -817
- package/dist/components/rel-radio/rel-radio.stories.ts +0 -1048
- package/dist/components/rel-segmented-button/rel-segmented-button.stories.ts +0 -1079
- package/dist/components/rel-select/rel-select.stories.ts +0 -1201
- package/dist/components/rel-slider/rel-slider.stories.ts +0 -730
- package/dist/components/rel-snackbar/rel-snackbar.stories.ts +0 -808
- package/dist/components/rel-stepper/rel-stepper.stories.ts +0 -752
- package/dist/components/rel-switch/rel-switch.stories.ts +0 -441
- package/dist/components/rel-tab/rel-tab.stories.ts +0 -492
- package/dist/components/rel-textfield/rel-textfield.stories.ts +0 -710
- package/dist/components/rel-toast/rel-toast.stories.ts +0 -394
- package/dist/components/rel-tooltip/rel-tooltip.stories.ts +0 -364
|
@@ -1,327 +0,0 @@
|
|
|
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
|
-
};
|
|
@@ -1,350 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/web-components-vite';
|
|
2
|
-
import { html } from 'lit';
|
|
3
|
-
import './rel-badge';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* The Badge component displays notification counts or status indicators.
|
|
7
|
-
* Built with Lit web components for framework-agnostic usage.
|
|
8
|
-
*
|
|
9
|
-
* ## Features
|
|
10
|
-
* - **2 Variants**: number (displays count), dot (indicator only)
|
|
11
|
-
* - **3 Sizes**: sm (20px), md (28px), lg (40px)
|
|
12
|
-
* - **Perfect Circles**: Consistent circular shape across all sizes
|
|
13
|
-
* - **Red Background**: High-contrast notification color
|
|
14
|
-
* - **Number Display**: Shows notification count up to 99+
|
|
15
|
-
*/
|
|
16
|
-
const meta: Meta = {
|
|
17
|
-
title: 'Components/Badge',
|
|
18
|
-
tags: ['autodocs'],
|
|
19
|
-
component: 'rel-badge',
|
|
20
|
-
argTypes: {
|
|
21
|
-
variant: {
|
|
22
|
-
control: { type: 'select' },
|
|
23
|
-
options: ['number', 'dot'],
|
|
24
|
-
description: 'Badge variant',
|
|
25
|
-
table: {
|
|
26
|
-
defaultValue: { summary: 'number' },
|
|
27
|
-
type: { summary: 'string' },
|
|
28
|
-
},
|
|
29
|
-
},
|
|
30
|
-
size: {
|
|
31
|
-
control: { type: 'select' },
|
|
32
|
-
options: ['sm', 'md', 'lg'],
|
|
33
|
-
description: 'Badge size',
|
|
34
|
-
table: {
|
|
35
|
-
defaultValue: { summary: 'md' },
|
|
36
|
-
type: { summary: 'string' },
|
|
37
|
-
},
|
|
38
|
-
},
|
|
39
|
-
number: {
|
|
40
|
-
control: 'text',
|
|
41
|
-
description: 'Number to display (for variant="number")',
|
|
42
|
-
table: {
|
|
43
|
-
type: { summary: 'string' },
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
},
|
|
47
|
-
render: (args) => html`
|
|
48
|
-
<rel-badge
|
|
49
|
-
variant="${args.variant || 'number'}"
|
|
50
|
-
size="${args.size || 'md'}"
|
|
51
|
-
number="${args.number || '1'}"
|
|
52
|
-
></rel-badge>
|
|
53
|
-
`,
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
export default meta;
|
|
57
|
-
type Story = StoryObj;
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Number badge - displays a notification count
|
|
61
|
-
*/
|
|
62
|
-
export const NumberBadge: Story = {
|
|
63
|
-
args: {
|
|
64
|
-
variant: 'number',
|
|
65
|
-
size: 'md',
|
|
66
|
-
number: '5',
|
|
67
|
-
},
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Dot badge - simple indicator without count
|
|
72
|
-
*/
|
|
73
|
-
export const DotBadge: Story = {
|
|
74
|
-
args: {
|
|
75
|
-
variant: 'dot',
|
|
76
|
-
size: 'md',
|
|
77
|
-
},
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Small size - 20px diameter
|
|
82
|
-
*/
|
|
83
|
-
export const Small: Story = {
|
|
84
|
-
args: {
|
|
85
|
-
variant: 'number',
|
|
86
|
-
size: 'sm',
|
|
87
|
-
number: '3',
|
|
88
|
-
},
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Medium size - 28px diameter (default)
|
|
93
|
-
*/
|
|
94
|
-
export const Medium: Story = {
|
|
95
|
-
args: {
|
|
96
|
-
variant: 'number',
|
|
97
|
-
size: 'md',
|
|
98
|
-
number: '9',
|
|
99
|
-
},
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Large size - 40px diameter
|
|
104
|
-
*/
|
|
105
|
-
export const Large: Story = {
|
|
106
|
-
args: {
|
|
107
|
-
variant: 'number',
|
|
108
|
-
size: 'lg',
|
|
109
|
-
number: '12',
|
|
110
|
-
},
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Single digit - notification count less than 10
|
|
115
|
-
*/
|
|
116
|
-
export const SingleDigit: Story = {
|
|
117
|
-
args: {
|
|
118
|
-
variant: 'number',
|
|
119
|
-
size: 'md',
|
|
120
|
-
number: '7',
|
|
121
|
-
},
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Double digit - notification count between 10-99
|
|
126
|
-
*/
|
|
127
|
-
export const DoubleDigit: Story = {
|
|
128
|
-
args: {
|
|
129
|
-
variant: 'number',
|
|
130
|
-
size: 'md',
|
|
131
|
-
number: '42',
|
|
132
|
-
},
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* High count - very high notification count
|
|
137
|
-
*/
|
|
138
|
-
export const HighCount: Story = {
|
|
139
|
-
args: {
|
|
140
|
-
variant: 'number',
|
|
141
|
-
size: 'md',
|
|
142
|
-
number: '99+',
|
|
143
|
-
},
|
|
144
|
-
};
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* All sizes - showcase of all badge sizes with numbers
|
|
148
|
-
*/
|
|
149
|
-
export const AllSizes: Story = {
|
|
150
|
-
render: () => html`
|
|
151
|
-
<div style="display: flex; gap: 20px; align-items: center; padding: 24px; background: #000;">
|
|
152
|
-
<div style="text-align: center;">
|
|
153
|
-
<rel-badge variant="number" size="sm" number="3"></rel-badge>
|
|
154
|
-
<p style="color: #fff; font-size: 12px; margin-top: 8px;">Small (20px)</p>
|
|
155
|
-
</div>
|
|
156
|
-
|
|
157
|
-
<div style="text-align: center;">
|
|
158
|
-
<rel-badge variant="number" size="md" number="9"></rel-badge>
|
|
159
|
-
<p style="color: #fff; font-size: 12px; margin-top: 8px;">Medium (28px)</p>
|
|
160
|
-
</div>
|
|
161
|
-
|
|
162
|
-
<div style="text-align: center;">
|
|
163
|
-
<rel-badge variant="number" size="lg" number="12"></rel-badge>
|
|
164
|
-
<p style="color: #fff; font-size: 12px; margin-top: 8px;">Large (40px)</p>
|
|
165
|
-
</div>
|
|
166
|
-
</div>
|
|
167
|
-
`,
|
|
168
|
-
};
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* All variants - number vs dot badges
|
|
172
|
-
*/
|
|
173
|
-
export const AllVariants: Story = {
|
|
174
|
-
render: () => html`
|
|
175
|
-
<div style="display: flex; gap: 32px; align-items: center; padding: 24px; background: #000;">
|
|
176
|
-
<div style="text-align: center;">
|
|
177
|
-
<rel-badge variant="number" size="lg" number="5"></rel-badge>
|
|
178
|
-
<p style="color: #fff; font-size: 12px; margin-top: 8px;">Number</p>
|
|
179
|
-
</div>
|
|
180
|
-
|
|
181
|
-
<div style="text-align: center;">
|
|
182
|
-
<rel-badge variant="dot" size="lg"></rel-badge>
|
|
183
|
-
<p style="color: #fff; font-size: 12px; margin-top: 8px;">Dot</p>
|
|
184
|
-
</div>
|
|
185
|
-
</div>
|
|
186
|
-
`,
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* Dot sizes - all sizes of dot variant
|
|
191
|
-
*/
|
|
192
|
-
export const DotSizes: Story = {
|
|
193
|
-
render: () => html`
|
|
194
|
-
<div style="display: flex; gap: 20px; align-items: center; padding: 24px; background: #000;">
|
|
195
|
-
<div style="text-align: center;">
|
|
196
|
-
<rel-badge variant="dot" size="sm"></rel-badge>
|
|
197
|
-
<p style="color: #fff; font-size: 12px; margin-top: 8px;">Small</p>
|
|
198
|
-
</div>
|
|
199
|
-
|
|
200
|
-
<div style="text-align: center;">
|
|
201
|
-
<rel-badge variant="dot" size="md"></rel-badge>
|
|
202
|
-
<p style="color: #fff; font-size: 12px; margin-top: 8px;">Medium</p>
|
|
203
|
-
</div>
|
|
204
|
-
|
|
205
|
-
<div style="text-align: center;">
|
|
206
|
-
<rel-badge variant="dot" size="lg"></rel-badge>
|
|
207
|
-
<p style="color: #fff; font-size: 12px; margin-top: 8px;">Large</p>
|
|
208
|
-
</div>
|
|
209
|
-
</div>
|
|
210
|
-
`,
|
|
211
|
-
};
|
|
212
|
-
|
|
213
|
-
/**
|
|
214
|
-
* Number variations - different notification counts
|
|
215
|
-
*/
|
|
216
|
-
export const NumberVariations: Story = {
|
|
217
|
-
render: () => html`
|
|
218
|
-
<div style="display: flex; gap: 16px; align-items: center; padding: 24px; background: #000;">
|
|
219
|
-
<rel-badge variant="number" size="md" number="1"></rel-badge>
|
|
220
|
-
<rel-badge variant="number" size="md" number="5"></rel-badge>
|
|
221
|
-
<rel-badge variant="number" size="md" number="12"></rel-badge>
|
|
222
|
-
<rel-badge variant="number" size="md" number="99"></rel-badge>
|
|
223
|
-
<rel-badge variant="number" size="md" number="99+"></rel-badge>
|
|
224
|
-
</div>
|
|
225
|
-
`,
|
|
226
|
-
};
|
|
227
|
-
|
|
228
|
-
/**
|
|
229
|
-
* With icons - badges positioned on icons
|
|
230
|
-
*/
|
|
231
|
-
export const WithIcons: Story = {
|
|
232
|
-
render: () => html`
|
|
233
|
-
<div style="display: flex; gap: 40px; padding: 24px; background: #000;">
|
|
234
|
-
<div style="position: relative; display: inline-block;">
|
|
235
|
-
<span style="font-size: 32px;">🔔</span>
|
|
236
|
-
<rel-badge variant="number" size="sm" number="3" style="position: absolute; top: -4px; right: -4px;"></rel-badge>
|
|
237
|
-
</div>
|
|
238
|
-
|
|
239
|
-
<div style="position: relative; display: inline-block;">
|
|
240
|
-
<span style="font-size: 32px;">📧</span>
|
|
241
|
-
<rel-badge variant="number" size="sm" number="12" style="position: absolute; top: -4px; right: -4px;"></rel-badge>
|
|
242
|
-
</div>
|
|
243
|
-
|
|
244
|
-
<div style="position: relative; display: inline-block;">
|
|
245
|
-
<span style="font-size: 32px;">💬</span>
|
|
246
|
-
<rel-badge variant="dot" size="sm" style="position: absolute; top: -2px; right: -2px;"></rel-badge>
|
|
247
|
-
</div>
|
|
248
|
-
</div>
|
|
249
|
-
`,
|
|
250
|
-
};
|
|
251
|
-
|
|
252
|
-
/**
|
|
253
|
-
* Navigation menu - badges on menu items
|
|
254
|
-
*/
|
|
255
|
-
export const NavigationMenu: Story = {
|
|
256
|
-
render: () => html`
|
|
257
|
-
<div style="display: flex; flex-direction: column; gap: 12px; padding: 24px; background: #000; width: 250px;">
|
|
258
|
-
<div style="display: flex; align-items: center; justify-content: space-between; padding: 12px; background: #1A1A1A; border-radius: 8px;">
|
|
259
|
-
<div style="display: flex; align-items: center; gap: 12px;">
|
|
260
|
-
<span style="font-size: 20px;">📬</span>
|
|
261
|
-
<span style="color: #fff; font-size: 14px;">Messages</span>
|
|
262
|
-
</div>
|
|
263
|
-
<rel-badge variant="number" size="sm" number="5"></rel-badge>
|
|
264
|
-
</div>
|
|
265
|
-
|
|
266
|
-
<div style="display: flex; align-items: center; justify-content: space-between; padding: 12px; background: #1A1A1A; border-radius: 8px;">
|
|
267
|
-
<div style="display: flex; align-items: center; gap: 12px;">
|
|
268
|
-
<span style="font-size: 20px;">🔔</span>
|
|
269
|
-
<span style="color: #fff; font-size: 14px;">Notifications</span>
|
|
270
|
-
</div>
|
|
271
|
-
<rel-badge variant="number" size="sm" number="23"></rel-badge>
|
|
272
|
-
</div>
|
|
273
|
-
|
|
274
|
-
<div style="display: flex; align-items: center; justify-content: space-between; padding: 12px; background: #1A1A1A; border-radius: 8px;">
|
|
275
|
-
<div style="display: flex; align-items: center; gap: 12px;">
|
|
276
|
-
<span style="font-size: 20px;">⭐</span>
|
|
277
|
-
<span style="color: #fff; font-size: 14px;">Updates</span>
|
|
278
|
-
</div>
|
|
279
|
-
<rel-badge variant="dot" size="sm"></rel-badge>
|
|
280
|
-
</div>
|
|
281
|
-
</div>
|
|
282
|
-
`,
|
|
283
|
-
};
|
|
284
|
-
|
|
285
|
-
/**
|
|
286
|
-
* Real-world examples - practical usage scenarios
|
|
287
|
-
*/
|
|
288
|
-
export const RealWorldExamples: Story = {
|
|
289
|
-
render: () => html`
|
|
290
|
-
<div style="display: flex; flex-direction: column; gap: 24px; padding: 24px; background: #000;">
|
|
291
|
-
<!-- Notification Bell -->
|
|
292
|
-
<div>
|
|
293
|
-
<p style="color: #00F49C; margin: 0 0 12px 0; font-weight: 600;">Notification Bell</p>
|
|
294
|
-
<div style="position: relative; display: inline-block;">
|
|
295
|
-
<button style="background: #1A1A1A; border: 1px solid #2A2A2A; color: #fff; padding: 12px 16px; border-radius: 8px; cursor: pointer; font-size: 20px;">
|
|
296
|
-
🔔
|
|
297
|
-
</button>
|
|
298
|
-
<rel-badge variant="number" size="sm" number="7" style="position: absolute; top: -6px; right: -6px;"></rel-badge>
|
|
299
|
-
</div>
|
|
300
|
-
</div>
|
|
301
|
-
|
|
302
|
-
<!-- Shopping Cart -->
|
|
303
|
-
<div>
|
|
304
|
-
<p style="color: #00F49C; margin: 0 0 12px 0; font-weight: 600;">Shopping Cart</p>
|
|
305
|
-
<div style="position: relative; display: inline-block;">
|
|
306
|
-
<button style="background: #00F49C; border: none; color: #000; padding: 12px 20px; border-radius: 1000px; cursor: pointer; font-weight: 600;">
|
|
307
|
-
🛒 Cart
|
|
308
|
-
</button>
|
|
309
|
-
<rel-badge variant="number" size="sm" number="3" style="position: absolute; top: -6px; right: -6px;"></rel-badge>
|
|
310
|
-
</div>
|
|
311
|
-
</div>
|
|
312
|
-
|
|
313
|
-
<!-- Status Indicator -->
|
|
314
|
-
<div>
|
|
315
|
-
<p style="color: #00F49C; margin: 0 0 12px 0; font-weight: 600;">Status Indicator</p>
|
|
316
|
-
<div style="display: flex; align-items: center; gap: 8px;">
|
|
317
|
-
<rel-badge variant="dot" size="md"></rel-badge>
|
|
318
|
-
<span style="color: #fff;">New activity detected</span>
|
|
319
|
-
</div>
|
|
320
|
-
</div>
|
|
321
|
-
</div>
|
|
322
|
-
`,
|
|
323
|
-
};
|
|
324
|
-
|
|
325
|
-
/**
|
|
326
|
-
* Size comparison - all sizes side by side
|
|
327
|
-
*/
|
|
328
|
-
export const SizeComparison: Story = {
|
|
329
|
-
render: () => html`
|
|
330
|
-
<div style="display: flex; flex-direction: column; gap: 24px; padding: 24px; background: #000;">
|
|
331
|
-
<div>
|
|
332
|
-
<p style="color: #00F49C; margin: 0 0 12px 0; font-weight: 600;">Number Badges</p>
|
|
333
|
-
<div style="display: flex; gap: 16px; align-items: center;">
|
|
334
|
-
<rel-badge variant="number" size="sm" number="5"></rel-badge>
|
|
335
|
-
<rel-badge variant="number" size="md" number="12"></rel-badge>
|
|
336
|
-
<rel-badge variant="number" size="lg" number="99+"></rel-badge>
|
|
337
|
-
</div>
|
|
338
|
-
</div>
|
|
339
|
-
|
|
340
|
-
<div>
|
|
341
|
-
<p style="color: #00F49C; margin: 0 0 12px 0; font-weight: 600;">Dot Badges</p>
|
|
342
|
-
<div style="display: flex; gap: 16px; align-items: center;">
|
|
343
|
-
<rel-badge variant="dot" size="sm"></rel-badge>
|
|
344
|
-
<rel-badge variant="dot" size="md"></rel-badge>
|
|
345
|
-
<rel-badge variant="dot" size="lg"></rel-badge>
|
|
346
|
-
</div>
|
|
347
|
-
</div>
|
|
348
|
-
</div>
|
|
349
|
-
`,
|
|
350
|
-
};
|