@repobit/dex-system-design 0.22.12 → 0.23.1
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/CHANGELOG.md +32 -0
- package/package.json +3 -2
- package/src/components/Button/button.stories.js +292 -120
- package/src/components/accordion/accordion-bg.css.js +7 -2
- package/src/components/accordion/accordion-bg.stories.js +268 -449
- package/src/components/accordion/accordion.stories.js +259 -265
- package/src/components/anchor/anchor.stories.js +160 -159
- package/src/components/awards/awards-icon.js +44 -0
- package/src/components/awards/awards.css.js +328 -0
- package/src/components/awards/awards.js +224 -0
- package/src/components/awards/awards.stories.js +447 -0
- package/src/components/back/back.stories.js +100 -375
- package/src/components/badge/badge.stories.js +241 -129
- package/src/components/breadcrumb/breadcrumb.stories.js +218 -219
- package/src/components/cards/card.stories.js +174 -622
- package/src/components/carousel/carousel.stories.js +196 -225
- package/src/components/checkbox/checkbox.stories.js +136 -51
- package/src/components/compare/compare.css.js +237 -0
- package/src/components/compare/compare.js +253 -0
- package/src/components/compare/compare.stories.js +372 -0
- package/src/components/display/display.stories.js +91 -297
- package/src/components/divider/divider.stories.js +160 -342
- package/src/components/footer/footer.stories.js +177 -402
- package/src/components/header/header.stories.js +130 -338
- package/src/components/heading/heading.js +8 -5
- package/src/components/heading/heading.stories.js +162 -471
- package/src/components/highlight/highlight.stories.js +153 -38
- package/src/components/image/image.stories.js +135 -563
- package/src/components/input/custom-form.stories.js +761 -224
- package/src/components/link/link.js +29 -12
- package/src/components/link/link.stories.js +130 -468
- package/src/components/modal/modal.stories.js +174 -28
- package/src/components/paragraph/paragraph.css.js +10 -1
- package/src/components/paragraph/paragraph.stories.js +85 -410
- package/src/components/picture/picture.stories.js +147 -561
- package/src/components/radio/radio.stories.js +230 -81
- package/src/components/tabs/tabs.stories.js +126 -10
- package/src/components/termsOfUse/terms.stories.js +223 -8
- package/src/tokens/tokens.js +1 -0
|
@@ -0,0 +1,447 @@
|
|
|
1
|
+
// awards.stories.js
|
|
2
|
+
import { html } from 'lit';
|
|
3
|
+
import './awards.js';
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
title : 'Components/AwardsSection',
|
|
7
|
+
component : 'bd-awards-section',
|
|
8
|
+
tags : ['autodocs'],
|
|
9
|
+
parameters: {
|
|
10
|
+
docs: {
|
|
11
|
+
description: {
|
|
12
|
+
component: `
|
|
13
|
+
**AwardsSection** is a Lit web component that showcases Bitdefender's industry awards and trust signals.
|
|
14
|
+
|
|
15
|
+
It includes:
|
|
16
|
+
- A trust banner with tagline, headline, and subtext
|
|
17
|
+
- A responsive awards bar (7 badges, desktop + mobile layouts)
|
|
18
|
+
- A "What's our secret" section
|
|
19
|
+
- Two feature cards (Machine Learning & Behavioral Analysis)
|
|
20
|
+
|
|
21
|
+
### Responsive Behavior
|
|
22
|
+
| Breakpoint | Behavior |
|
|
23
|
+
|---|---|
|
|
24
|
+
| \`≤ 599px\` | Mobile layout: badges split into 2 rows (3 top + 4 bottom), smaller badge sizes |
|
|
25
|
+
| \`600px – 768px\` | Tablet: desktop badge layout, adjusted padding |
|
|
26
|
+
| \`≥ 769px\` | Full desktop layout |
|
|
27
|
+
|
|
28
|
+
### Badge Sizes
|
|
29
|
+
| Badge | Desktop | Mobile |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| PC Mag Editors' Choice | 189×64 | 94×32 |
|
|
32
|
+
| AV Comparatives | 126×64 | 63×32 |
|
|
33
|
+
| Best Brands | 51×64 | 26×32 |
|
|
34
|
+
| PC Mag 2024 | 34×64 | 17×31 |
|
|
35
|
+
| PC Mag Readers' Choice | 37×64 | 19×32 |
|
|
36
|
+
| PC Mag Business Choice | 37×64 | 18×32 |
|
|
37
|
+
| AV Test Top Product | 127×64 | 63×32 |
|
|
38
|
+
`
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
argTypes: {
|
|
43
|
+
tagline: {
|
|
44
|
+
control : 'text',
|
|
45
|
+
description: 'Small text displayed above the headline in blue',
|
|
46
|
+
table : {
|
|
47
|
+
type : { summary: 'string' },
|
|
48
|
+
defaultValue: { summary: "You're Making A Great Choice" },
|
|
49
|
+
category : 'Content'
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
headline: {
|
|
53
|
+
control : 'text',
|
|
54
|
+
description: 'Main heading of the trust banner',
|
|
55
|
+
table : {
|
|
56
|
+
type : { summary: 'string' },
|
|
57
|
+
defaultValue: { summary: 'World-class security software you can trust. Always.' },
|
|
58
|
+
category : 'Content'
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
subtext: {
|
|
62
|
+
control : 'text',
|
|
63
|
+
description: 'Supporting paragraph below the headline',
|
|
64
|
+
table : {
|
|
65
|
+
type : { summary: 'string' },
|
|
66
|
+
defaultValue: {
|
|
67
|
+
summary: "We've added 25 new accolades in the past two years..."
|
|
68
|
+
},
|
|
69
|
+
category: 'Content'
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
secretTitle: {
|
|
73
|
+
control : 'text',
|
|
74
|
+
description: "Title of the 'What's our secret' section",
|
|
75
|
+
table : {
|
|
76
|
+
type : { summary: 'string' },
|
|
77
|
+
defaultValue: { summary: "What's our secret" },
|
|
78
|
+
category : 'Content'
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
secretSubtext: {
|
|
82
|
+
control : 'text',
|
|
83
|
+
description: "Subtext of the 'What's our secret' section",
|
|
84
|
+
table : {
|
|
85
|
+
type : { summary: 'string' },
|
|
86
|
+
defaultValue: {
|
|
87
|
+
summary: 'At the heart of Bitdefender lies a powerhouse of proprietary technology...'
|
|
88
|
+
},
|
|
89
|
+
category: 'Content'
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
desktopAwards: {
|
|
93
|
+
control : 'object',
|
|
94
|
+
description: `
|
|
95
|
+
Array of award badge objects rendered on desktop. Each object has:
|
|
96
|
+
- \`id\` (string) — unique identifier, used for sizing logic
|
|
97
|
+
- \`label\` (string) — accessible label (newlines allowed)
|
|
98
|
+
- \`type\` (string) — \`'red'\` or \`'dark'\`
|
|
99
|
+
- \`format\` (string) — \`'svg'\`
|
|
100
|
+
- \`src\` (string) — path to the SVG asset
|
|
101
|
+
`,
|
|
102
|
+
table: {
|
|
103
|
+
type : { summary: 'Array<{ id, label, type, format, src }>' },
|
|
104
|
+
category: 'Badges'
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
mobileAwards: {
|
|
108
|
+
control : 'object',
|
|
109
|
+
description: `
|
|
110
|
+
Array of award badge objects rendered on mobile. Defaults to a copy of \`desktopAwards\`.
|
|
111
|
+
Split into two rows: first 3 badges on top row, badges 4–7 on bottom row.
|
|
112
|
+
`,
|
|
113
|
+
table: {
|
|
114
|
+
type : { summary: 'Array<{ id, label, type, format, src }>' },
|
|
115
|
+
category: 'Badges'
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
features: {
|
|
119
|
+
control : 'object',
|
|
120
|
+
description: `
|
|
121
|
+
Array of feature card objects. Each object has:
|
|
122
|
+
- \`icon\` (string) — \`'brain'\` or \`'chart'\`
|
|
123
|
+
- \`title\` (string) — card heading
|
|
124
|
+
- \`description\` (string) — card body text
|
|
125
|
+
`,
|
|
126
|
+
table: {
|
|
127
|
+
type : { summary: 'Array<{ icon, title, description }>' },
|
|
128
|
+
category: 'Features'
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
// ─── Default args shared across stories ────────────────────────────────────
|
|
135
|
+
|
|
136
|
+
const defaultArgs = {
|
|
137
|
+
tagline : "You're Making A Great Choice",
|
|
138
|
+
headline: 'World-class security software you can trust. Always.',
|
|
139
|
+
subtext:
|
|
140
|
+
"We've added 25 new accolades in the past two years to the hundreds we have won since we started in 2001 - so you know you are in good hands.",
|
|
141
|
+
secretTitle: "What's our secret",
|
|
142
|
+
secretSubtext:
|
|
143
|
+
'At the heart of Bitdefender lies a powerhouse of proprietary technology, setting it miles apart from the competition.',
|
|
144
|
+
desktopAwards: [
|
|
145
|
+
{ label: "PC MAG\nEDITORS' CHOICE", type: 'red', format: 'svg', src: '/assets/pc-mag.svg', id: 'pc-mag' },
|
|
146
|
+
{ label: 'AV\ncomparatives', type: 'dark', format: 'svg', src: '/assets/av-comparatives.svg', id: 'av-comparatives' },
|
|
147
|
+
{ label: 'Best\nBrands\n2024', type: 'dark', format: 'svg', src: '/assets/best-brands.svg', id: 'best-brands' },
|
|
148
|
+
{ label: 'PC\nChoice\n2024', type: 'red', format: 'svg', src: '/assets/pc-mag-2024.svg', id: 'pc-mag-2024' },
|
|
149
|
+
{ label: "PC MAG\nREADERS'\nCHOICE", type: 'red', format: 'svg', src: '/assets/pc-mag-readers.svg', id: 'pc-mag-readers' },
|
|
150
|
+
{ label: 'PC\nBusiness\nChoice', type: 'red', format: 'svg', src: '/assets/pc-mag-business.svg', id: 'pc-mag-business' },
|
|
151
|
+
{ label: 'AV\nTEST\nTOP\nPRODUCT', type: 'red', format: 'svg', src: '/assets/top-product.svg', id: 'top-product' }
|
|
152
|
+
],
|
|
153
|
+
features: [
|
|
154
|
+
{
|
|
155
|
+
icon : 'brain',
|
|
156
|
+
title: 'Machine Learning',
|
|
157
|
+
description:
|
|
158
|
+
"Imagine Bitdefender as a super-smart detective, constantly learning and getting better at spotting bad guys. Just like how you learn from your experiences, Bitdefender learns from millions of cyber threats it encounters every day. It studies their patterns, figures out their tricks, and uses that knowledge to protect your devices from future attacks."
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
icon : 'chart',
|
|
162
|
+
title: 'Behavioral Analysis',
|
|
163
|
+
description:
|
|
164
|
+
"Bitdefender keeps an eye on how you and your devices normally behave. So, when something unusual happens, like a strange file trying to sneak into your computer or a suspicious website trying to steal your info, Bitdefender sounds the alarm. It's like having a loyal sidekick that never sleeps, always on the lookout for trouble and ready to jump into action to keep you safe."
|
|
165
|
+
}
|
|
166
|
+
]
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
// ─── Helper to render the component with given args ────────────────────────
|
|
170
|
+
|
|
171
|
+
const render = (args) => html`
|
|
172
|
+
<bd-awards-section
|
|
173
|
+
.tagline=${args.tagline}
|
|
174
|
+
.headline=${args.headline}
|
|
175
|
+
.subtext=${args.subtext}
|
|
176
|
+
.secretTitle=${args.secretTitle}
|
|
177
|
+
.secretSubtext=${args.secretSubtext}
|
|
178
|
+
.desktopAwards=${args.desktopAwards}
|
|
179
|
+
.mobileAwards=${args.desktopAwards}
|
|
180
|
+
.features=${args.features}
|
|
181
|
+
></bd-awards-section>
|
|
182
|
+
`;
|
|
183
|
+
|
|
184
|
+
// ─── Stories ───────────────────────────────────────────────────────────────
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* The default full-width desktop view of the AwardsSection component.
|
|
188
|
+
* All 7 award badges are displayed in a single horizontal row.
|
|
189
|
+
*/
|
|
190
|
+
export const Default = {
|
|
191
|
+
name : 'Default (Desktop)',
|
|
192
|
+
args : { ...defaultArgs },
|
|
193
|
+
render,
|
|
194
|
+
parameters: {
|
|
195
|
+
viewport: { defaultViewport: 'desktop' },
|
|
196
|
+
docs : {
|
|
197
|
+
description: {
|
|
198
|
+
story:
|
|
199
|
+
'Full desktop layout. All 7 badges are shown in a single horizontal row with `flex-wrap: nowrap`. Badge sizes match the desktop spec exactly.'
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Mobile viewport (375px). Badges split into two rows:
|
|
207
|
+
* Row 1: PC Mag, AV Comparatives, Best Brands
|
|
208
|
+
* Row 2: PC Mag 2024, Readers' Choice, Business Choice, Top Product
|
|
209
|
+
*/
|
|
210
|
+
export const Mobile = {
|
|
211
|
+
name : 'Mobile (375px)',
|
|
212
|
+
args : { ...defaultArgs },
|
|
213
|
+
render,
|
|
214
|
+
parameters: {
|
|
215
|
+
viewport: { defaultViewport: 'mobile1' },
|
|
216
|
+
docs : {
|
|
217
|
+
description: {
|
|
218
|
+
story:
|
|
219
|
+
'Mobile layout at 375px. The desktop badge row is hidden and replaced with two mobile rows. Badge sizes are halved compared to desktop. The bottom row uses flexbox for tight, gap-controlled centering.'
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Tablet viewport (768px). Renders the desktop badge layout
|
|
227
|
+
* with adjusted padding for mid-size screens.
|
|
228
|
+
*/
|
|
229
|
+
export const Tablet = {
|
|
230
|
+
name : 'Tablet (768px)',
|
|
231
|
+
args : { ...defaultArgs },
|
|
232
|
+
render,
|
|
233
|
+
parameters: {
|
|
234
|
+
viewport: { defaultViewport: 'tablet' },
|
|
235
|
+
docs : {
|
|
236
|
+
description: {
|
|
237
|
+
story:
|
|
238
|
+
'Tablet layout at 768px. Uses the desktop badge row. Padding and font sizes adjust at the 481px and 769px breakpoints.'
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Demonstrates customised text content via Storybook controls.
|
|
246
|
+
*/
|
|
247
|
+
export const CustomContent = {
|
|
248
|
+
name: 'Custom Text Content',
|
|
249
|
+
args: {
|
|
250
|
+
...defaultArgs,
|
|
251
|
+
tagline : 'Trusted by Millions Worldwide',
|
|
252
|
+
headline: 'Award-winning protection for every device.',
|
|
253
|
+
subtext:
|
|
254
|
+
'From homes to enterprises, Bitdefender has been recognized by the world\'s top security testing labs year after year.',
|
|
255
|
+
secretTitle: 'Why we win',
|
|
256
|
+
secretSubtext:
|
|
257
|
+
'Our proprietary AI engine processes over 500 billion queries per day to stay ahead of the most sophisticated threats.'
|
|
258
|
+
},
|
|
259
|
+
render,
|
|
260
|
+
parameters: {
|
|
261
|
+
docs: {
|
|
262
|
+
description: {
|
|
263
|
+
story:
|
|
264
|
+
'All text props replaced with custom values. Use the Controls panel to live-edit tagline, headline, subtext, secretTitle, and secretSubtext.'
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Only 3 badges provided — verifies the component handles
|
|
272
|
+
* a reduced award set without breaking layout.
|
|
273
|
+
*/
|
|
274
|
+
export const FewBadges = {
|
|
275
|
+
name: 'Reduced Badge Set (3 badges)',
|
|
276
|
+
args: {
|
|
277
|
+
...defaultArgs,
|
|
278
|
+
desktopAwards: [
|
|
279
|
+
{ label: "PC MAG\nEDITORS' CHOICE", type: 'red', format: 'svg', src: '/assets/pc-mag.svg', id: 'pc-mag' },
|
|
280
|
+
{ label: 'AV\ncomparatives', type: 'dark', format: 'svg', src: '/assets/av-comparatives.svg', id: 'av-comparatives' },
|
|
281
|
+
{ label: 'AV\nTEST\nTOP\nPRODUCT', type: 'red', format: 'svg', src: '/assets/top-product.svg', id: 'top-product' }
|
|
282
|
+
]
|
|
283
|
+
},
|
|
284
|
+
render,
|
|
285
|
+
parameters: {
|
|
286
|
+
docs: {
|
|
287
|
+
description: {
|
|
288
|
+
story:
|
|
289
|
+
'Only 3 badges passed. Verifies the flex row still centers correctly and that mobile row splitting (slice 0–3 / 3–7) gracefully handles fewer items.'
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Single badge — edge case for minimum badge count.
|
|
297
|
+
*/
|
|
298
|
+
export const SingleBadge = {
|
|
299
|
+
name: 'Single Badge (edge case)',
|
|
300
|
+
args: {
|
|
301
|
+
...defaultArgs,
|
|
302
|
+
desktopAwards: [
|
|
303
|
+
{ label: "PC MAG\nEDITORS' CHOICE", type: 'red', format: 'svg', src: '/assets/pc-mag.svg', id: 'pc-mag' }
|
|
304
|
+
]
|
|
305
|
+
},
|
|
306
|
+
render,
|
|
307
|
+
parameters: {
|
|
308
|
+
docs: {
|
|
309
|
+
description: {
|
|
310
|
+
story:
|
|
311
|
+
'Minimum edge case: only 1 badge. Ensures no layout breakage and that the mobile bottom row renders empty without errors.'
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
};
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Custom feature cards with different titles and descriptions.
|
|
319
|
+
*/
|
|
320
|
+
export const CustomFeatures = {
|
|
321
|
+
name: 'Custom Feature Cards',
|
|
322
|
+
args: {
|
|
323
|
+
...defaultArgs,
|
|
324
|
+
features: [
|
|
325
|
+
{
|
|
326
|
+
icon : 'brain',
|
|
327
|
+
title: 'AI-Powered Threat Detection',
|
|
328
|
+
description:
|
|
329
|
+
'Our next-generation AI engine analyzes over 500 billion security events per day, identifying and neutralizing threats before they can cause harm to your system.'
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
icon : 'chart',
|
|
333
|
+
title: 'Real-Time Protection',
|
|
334
|
+
description:
|
|
335
|
+
'Continuous monitoring of all active processes, network connections, and file system changes ensures that threats are caught the moment they appear — with zero performance impact.'
|
|
336
|
+
}
|
|
337
|
+
]
|
|
338
|
+
},
|
|
339
|
+
render,
|
|
340
|
+
parameters: {
|
|
341
|
+
docs: {
|
|
342
|
+
description: {
|
|
343
|
+
story:
|
|
344
|
+
'Custom feature card content. The `icon` field accepts `"brain"` or `"chart"` to switch between the machine-learning and analysis SVG assets.'
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
};
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* All badges set to 'dark' type — verifies the dark filter is applied.
|
|
352
|
+
*/
|
|
353
|
+
export const AllDarkBadges = {
|
|
354
|
+
name: 'All Dark Badges',
|
|
355
|
+
args: {
|
|
356
|
+
...defaultArgs,
|
|
357
|
+
desktopAwards: defaultArgs.desktopAwards.map((a) => ({ ...a, type: 'dark' }))
|
|
358
|
+
},
|
|
359
|
+
render,
|
|
360
|
+
parameters: {
|
|
361
|
+
docs: {
|
|
362
|
+
description: {
|
|
363
|
+
story:
|
|
364
|
+
'All badges forced to `type: "dark"`. Verifies the `.bd-awards-badge--dark` CSS class is applied to every badge, which adds a `brightness(0.9)` filter.'
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
};
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* All badges set to 'red' type.
|
|
372
|
+
*/
|
|
373
|
+
export const AllRedBadges = {
|
|
374
|
+
name: 'All Red Badges',
|
|
375
|
+
args: {
|
|
376
|
+
...defaultArgs,
|
|
377
|
+
desktopAwards: defaultArgs.desktopAwards.map((a) => ({ ...a, type: 'red' }))
|
|
378
|
+
},
|
|
379
|
+
render,
|
|
380
|
+
parameters: {
|
|
381
|
+
docs: {
|
|
382
|
+
description: {
|
|
383
|
+
story:
|
|
384
|
+
'All badges forced to `type: "red"`. No dark filter is applied to any badge.'
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
};
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Narrow desktop viewport (1024px).
|
|
392
|
+
*/
|
|
393
|
+
export const NarrowDesktop = {
|
|
394
|
+
name : 'Narrow Desktop (1024px)',
|
|
395
|
+
args : { ...defaultArgs },
|
|
396
|
+
render,
|
|
397
|
+
parameters: {
|
|
398
|
+
viewport : { defaultViewport: 'desktop' },
|
|
399
|
+
chromatic: { viewports: [1024] },
|
|
400
|
+
docs : {
|
|
401
|
+
description: {
|
|
402
|
+
story:
|
|
403
|
+
'Desktop layout at 1024px width. Useful for checking that `flex-wrap: nowrap` on the badge row does not cause overflow on narrower desktop screens.'
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
};
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* Small mobile viewport (320px) — the tightest supported size.
|
|
411
|
+
*/
|
|
412
|
+
export const SmallMobile = {
|
|
413
|
+
name : 'Small Mobile (320px)',
|
|
414
|
+
args : { ...defaultArgs },
|
|
415
|
+
render,
|
|
416
|
+
parameters: {
|
|
417
|
+
viewport: {
|
|
418
|
+
viewports: {
|
|
419
|
+
smallMobile: { name: 'Small Mobile', styles: { width: '320px', height: '812px' } }
|
|
420
|
+
},
|
|
421
|
+
defaultViewport: 'smallMobile'
|
|
422
|
+
},
|
|
423
|
+
docs: {
|
|
424
|
+
description: {
|
|
425
|
+
story:
|
|
426
|
+
'Smallest supported viewport at 320px. Verifies badge rows, text wrapping, and padding do not overflow or clip on very narrow screens.'
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
};
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* Playground story — all controls are fully exposed for interactive exploration.
|
|
434
|
+
*/
|
|
435
|
+
export const Playground = {
|
|
436
|
+
name : '🛝 Playground',
|
|
437
|
+
args : { ...defaultArgs },
|
|
438
|
+
render,
|
|
439
|
+
parameters: {
|
|
440
|
+
docs: {
|
|
441
|
+
description: {
|
|
442
|
+
story:
|
|
443
|
+
'Fully interactive story. Use the **Controls** panel below to modify every prop in real time: text content, badge arrays, and feature cards.'
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
};
|