@repobit/dex-system-design 0.21.1 → 0.22.0
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 +20 -0
- package/package.json +4 -2
- package/src/components/Button/Button.js +7 -2
- package/src/components/Button/button.css.js +30 -0
- package/src/components/accordion/accordion-bg.stories.js +341 -171
- package/src/components/accordion/accordion.stories.js +345 -0
- package/src/components/anchor/anchor-nav.js +1 -0
- package/src/components/anchor/anchor.stories.js +134 -76
- package/src/components/back/back.css.js +1 -1
- package/src/components/back/back.stories.js +301 -63
- package/src/components/badge/badge.js +4 -7
- package/src/components/badge/badge.stories.js +89 -96
- package/src/components/breadcrumb/breadcrumb.stories.js +167 -3
- package/src/components/cards/card.stories.js +153 -3
- package/src/components/display/display.css.js +7 -10
- package/src/components/display/display.js +14 -2
- package/src/components/display/display.stories.js +213 -219
- package/src/components/divider/divider.stories.js +337 -30
- package/src/components/footer/footer-lp.stories.js +346 -3
- package/src/components/footer/footer.js +0 -3
- package/src/components/footer/footer.stories.js +267 -4
- package/src/components/header/header.css.js +1 -1
- package/src/components/header/header.js +81 -56
- package/src/components/header/header.stories.js +298 -22
- package/src/components/heading/heading.css.js +1 -1
- package/src/components/heading/heading.stories.js +355 -113
- package/src/components/image/image.css.js +146 -98
- package/src/components/image/image.js +13 -2
- package/src/components/image/image.stories.js +546 -160
- package/src/components/input/custom-form.stories.js +209 -12
- package/src/components/link/link.css.js +2 -2
- package/src/components/link/link.stories.js +383 -53
- package/src/components/paragraph/paragraph.css.js +1 -1
- package/src/components/paragraph/paragraph.stories.js +365 -157
- package/src/components/picture/picture.css.js +209 -0
- package/src/components/picture/picture.js +16 -2
- package/src/components/picture/picture.stories.js +525 -180
- package/src/components/pricing-cards/new-pricing-card.js +19 -4
- package/src/components/pricing-cards/new-pricing-card.stories.js +422 -0
- package/src/components/pricing-cards/new-pricing.css.js +8 -0
- package/src/components/pricing-cards/pricing-card-actions.js +50 -9
- package/src/components/pricing-cards/pricing-card-container.css.js +1 -1
- package/src/components/pricing-cards/pricing-card-header.css.js +73 -63
- package/src/components/pricing-cards/pricing-card-header.js +44 -10
- package/src/components/pricing-cards/pricing-card-pricing.js +63 -64
- package/src/components/pricing-cards/pricing-card.css.js +7 -15
- package/src/components/pricing-cards/pricing-card.js +354 -271
- package/src/components/pricing-cards/pricing-card.stories.js +3 -3
- package/src/tokens/fonts.stories.js +335 -8
- package/src/tokens/spacing.stories.js +701 -34
- package/src/tokens/tokens-grid.stories.js +897 -48
- package/src/tokens/typography.stories.js +980 -38
- package/src/components/accordion/accordion-light.stories.js +0 -241
|
@@ -3,9 +3,20 @@ import '../heading/heading.js';
|
|
|
3
3
|
import './badge.js';
|
|
4
4
|
|
|
5
5
|
export default {
|
|
6
|
-
title
|
|
7
|
-
component: 'bd-badge',
|
|
8
|
-
|
|
6
|
+
title : 'Atoms/Badge',
|
|
7
|
+
component : 'bd-badge',
|
|
8
|
+
tags : ['autodocs'],
|
|
9
|
+
parameters: {
|
|
10
|
+
docs: {
|
|
11
|
+
description: {
|
|
12
|
+
component: `
|
|
13
|
+
Un **badge** care poate afișa un text sau un element în slot.
|
|
14
|
+
Badge-ul acceptă culori personalizate, variante predefinite, dimensiuni diferite și mărimi de font.
|
|
15
|
+
Acest Storybook include toate exemplele posibile pentru testare completă.`
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
argTypes: {
|
|
9
20
|
children: {
|
|
10
21
|
control : 'text',
|
|
11
22
|
description : 'Conținutul afișat în interiorul badge-ului (prin slot).',
|
|
@@ -13,54 +24,57 @@ export default {
|
|
|
13
24
|
},
|
|
14
25
|
color: {
|
|
15
26
|
control : 'color',
|
|
16
|
-
description : 'Culoarea de fundal a badge-ului',
|
|
27
|
+
description : 'Culoarea de fundal a badge-ului.',
|
|
17
28
|
defaultValue: '#026DFF'
|
|
18
29
|
},
|
|
19
30
|
variant: {
|
|
20
|
-
control: {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
},
|
|
24
|
-
description : 'Variantă de stil pentru badge',
|
|
25
|
-
defaultValue: ''
|
|
31
|
+
control : { type: 'select' },
|
|
32
|
+
options : ['', 'bd-light-blue', 'bd-light-green'],
|
|
33
|
+
description: 'Variantă de stil predefinită pentru badge.'
|
|
26
34
|
},
|
|
27
35
|
size: {
|
|
28
|
-
control: {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
},
|
|
32
|
-
description : 'Dimensiunea badge-ului',
|
|
33
|
-
defaultValue: 'md'
|
|
36
|
+
control : { type: 'select' },
|
|
37
|
+
options : ['sm', 'md', 'lg'],
|
|
38
|
+
description: 'Dimensiunea badge-ului.'
|
|
34
39
|
},
|
|
35
40
|
fontsize: {
|
|
36
|
-
control: {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
},
|
|
40
|
-
description : 'Mărimea fontului',
|
|
41
|
-
defaultValue: '14'
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
parameters: {
|
|
45
|
-
docs: {
|
|
46
|
-
description: {
|
|
47
|
-
component: 'Un badge simplu care afișează un text prin slot și are multiple opțiuni de personalizare.'
|
|
48
|
-
}
|
|
41
|
+
control : { type: 'select' },
|
|
42
|
+
options : ['12', '14', '16'],
|
|
43
|
+
description: 'Mărimea fontului textului.'
|
|
49
44
|
}
|
|
50
45
|
}
|
|
51
46
|
};
|
|
52
47
|
|
|
48
|
+
// TEMPLATE DE BAZĂ
|
|
53
49
|
const Template = ({ children, color, variant, size, fontsize }) => html`
|
|
54
|
-
<bd-badge
|
|
55
|
-
color="${color}"
|
|
56
|
-
variant="${variant}"
|
|
57
|
-
size="${size}"
|
|
50
|
+
<bd-badge
|
|
51
|
+
color="${color}"
|
|
52
|
+
variant="${variant}"
|
|
53
|
+
size="${size}"
|
|
58
54
|
fontsize="${fontsize}"
|
|
59
55
|
>
|
|
60
56
|
${children}
|
|
61
57
|
</bd-badge>
|
|
62
58
|
`;
|
|
63
59
|
|
|
60
|
+
export const Default = Template.bind({});
|
|
61
|
+
Default.args = {
|
|
62
|
+
children: 'Badge',
|
|
63
|
+
color : '#026DFF',
|
|
64
|
+
variant : '',
|
|
65
|
+
size : 'md',
|
|
66
|
+
fontsize: '14'
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
Default.parameters = {
|
|
70
|
+
docs: {
|
|
71
|
+
description: {
|
|
72
|
+
story: 'Exemplul de bază pentru componenta Badge.'
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// TEMPLATE SECȚIUNI
|
|
64
78
|
const GridTemplate = (items) => html`
|
|
65
79
|
<div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 16px;">
|
|
66
80
|
${items}
|
|
@@ -74,16 +88,10 @@ const SectionTemplate = (title, items) => html`
|
|
|
74
88
|
</div>
|
|
75
89
|
`;
|
|
76
90
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
variant : '',
|
|
82
|
-
size : 'md',
|
|
83
|
-
fontsize: '14'
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
export const AllVariants = () => {
|
|
91
|
+
// ===================
|
|
92
|
+
// 🔵 TOATE VARIANTELE
|
|
93
|
+
// ===================
|
|
94
|
+
export const Variants = () => {
|
|
87
95
|
const variants = [
|
|
88
96
|
{ variant: '', label: 'Default' },
|
|
89
97
|
{ variant: 'bd-light-blue', label: 'Light Blue' },
|
|
@@ -91,14 +99,23 @@ export const AllVariants = () => {
|
|
|
91
99
|
];
|
|
92
100
|
|
|
93
101
|
return SectionTemplate(
|
|
94
|
-
'
|
|
102
|
+
'Variante disponibile',
|
|
95
103
|
variants.map(item => html`
|
|
96
104
|
<bd-badge variant="${item.variant}">${item.label}</bd-badge>
|
|
97
105
|
`)
|
|
98
106
|
);
|
|
99
107
|
};
|
|
100
108
|
|
|
101
|
-
|
|
109
|
+
Variants.parameters = {
|
|
110
|
+
docs: {
|
|
111
|
+
description: { story: 'Toate variantele vizuale ale componentei bd-badge.' }
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
// ===================
|
|
116
|
+
// 🔶 TOATE DIMENSIUNILE
|
|
117
|
+
// ===================
|
|
118
|
+
export const Sizes = () => {
|
|
102
119
|
const sizes = [
|
|
103
120
|
{ size: 'sm', label: 'Small' },
|
|
104
121
|
{ size: 'md', label: 'Medium' },
|
|
@@ -106,14 +123,23 @@ export const AllSizes = () => {
|
|
|
106
123
|
];
|
|
107
124
|
|
|
108
125
|
return SectionTemplate(
|
|
109
|
-
'
|
|
126
|
+
'Dimensiuni disponibile',
|
|
110
127
|
sizes.map(item => html`
|
|
111
128
|
<bd-badge size="${item.size}">${item.label}</bd-badge>
|
|
112
129
|
`)
|
|
113
130
|
);
|
|
114
131
|
};
|
|
115
132
|
|
|
116
|
-
|
|
133
|
+
Sizes.parameters = {
|
|
134
|
+
docs: {
|
|
135
|
+
description: { story: 'Dimensiuni disponibile pentru badge.' }
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
// ==========================
|
|
140
|
+
// 🔤 TOATE MĂRIMILE DE FONT
|
|
141
|
+
// ==========================
|
|
142
|
+
export const FontSizes = () => {
|
|
117
143
|
const fontSizes = [
|
|
118
144
|
{ fontsize: '12', label: 'Font 12' },
|
|
119
145
|
{ fontsize: '14', label: 'Font 14' },
|
|
@@ -121,13 +147,22 @@ export const AllFontSizes = () => {
|
|
|
121
147
|
];
|
|
122
148
|
|
|
123
149
|
return SectionTemplate(
|
|
124
|
-
'
|
|
150
|
+
'Mărimi de font disponibile',
|
|
125
151
|
fontSizes.map(item => html`
|
|
126
152
|
<bd-badge fontsize="${item.fontsize}">${item.label}</bd-badge>
|
|
127
153
|
`)
|
|
128
154
|
);
|
|
129
155
|
};
|
|
130
156
|
|
|
157
|
+
FontSizes.parameters = {
|
|
158
|
+
docs: {
|
|
159
|
+
description: { story: 'Toate mărimile de font suportate de badge.' }
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
// =======================================
|
|
164
|
+
// 🧪 COMBINAȚII: VARIANTE × DIMENSIUNI
|
|
165
|
+
// =======================================
|
|
131
166
|
export const Combinations = () => {
|
|
132
167
|
const combinations = [
|
|
133
168
|
{ variant: 'bd-light-blue', size: 'sm', label: 'Light Blue Small' },
|
|
@@ -139,59 +174,17 @@ export const Combinations = () => {
|
|
|
139
174
|
];
|
|
140
175
|
|
|
141
176
|
return SectionTemplate(
|
|
142
|
-
'Combinații
|
|
177
|
+
'Combinații între variante și dimensiuni',
|
|
143
178
|
combinations.map(item => html`
|
|
144
|
-
<bd-badge variant="${item.variant}" size="${item.size}"
|
|
179
|
+
<bd-badge variant="${item.variant}" size="${item.size}">
|
|
180
|
+
${item.label}
|
|
181
|
+
</bd-badge>
|
|
145
182
|
`)
|
|
146
183
|
);
|
|
147
184
|
};
|
|
148
185
|
|
|
149
|
-
export const CustomColors = () => {
|
|
150
|
-
const colors = [
|
|
151
|
-
{ color: '#FF5733', label: 'Rosu' },
|
|
152
|
-
{ color: '#33FF57', label: 'Verde' },
|
|
153
|
-
{ color: '#3357FF', label: 'Albastru' },
|
|
154
|
-
{ color: '#F3FF33', label: 'Galben', textColor: '#000' },
|
|
155
|
-
{ color: '#FF33F3', label: 'Roz' },
|
|
156
|
-
{ color: '#33FFF3', label: 'Turcoaz' }
|
|
157
|
-
];
|
|
158
|
-
|
|
159
|
-
return SectionTemplate(
|
|
160
|
-
'Culori Personalizate',
|
|
161
|
-
colors.map(item => html`
|
|
162
|
-
<bd-badge color="${item.color}">${item.label}</bd-badge>
|
|
163
|
-
`)
|
|
164
|
-
);
|
|
165
|
-
};
|
|
166
|
-
|
|
167
|
-
AllVariants.parameters = {
|
|
168
|
-
docs: {
|
|
169
|
-
description: {
|
|
170
|
-
story: 'Toate variantele de badge disponibile.'
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
};
|
|
174
|
-
|
|
175
|
-
AllSizes.parameters = {
|
|
176
|
-
docs: {
|
|
177
|
-
description: {
|
|
178
|
-
story: 'Toate dimensiunile de badge disponibile.'
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
AllFontSizes.parameters = {
|
|
184
|
-
docs: {
|
|
185
|
-
description: {
|
|
186
|
-
story: 'Toate mărimile de font disponibile pentru badge-uri.'
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
};
|
|
190
|
-
|
|
191
186
|
Combinations.parameters = {
|
|
192
187
|
docs: {
|
|
193
|
-
description: {
|
|
194
|
-
story: 'Diverse combinații între variante și dimensiuni.'
|
|
195
|
-
}
|
|
188
|
+
description: { story: 'Combinații ale tuturor variantelor și dimensiunilor.' }
|
|
196
189
|
}
|
|
197
|
-
};
|
|
190
|
+
};
|
|
@@ -5,10 +5,21 @@ export default {
|
|
|
5
5
|
title : 'Components/Breadcrumb',
|
|
6
6
|
component : 'bd-breadcrumb',
|
|
7
7
|
subcomponents: { 'BreadcrumbItem': 'bd-breadcrumb-item' },
|
|
8
|
-
|
|
8
|
+
tags : ['autodocs'],
|
|
9
|
+
argTypes : {
|
|
10
|
+
mobileBreakpoint: {
|
|
11
|
+
control : 'text',
|
|
12
|
+
description: 'Breakpoint for mobile responsive behavior',
|
|
13
|
+
table : {
|
|
14
|
+
type : { summary: 'string' },
|
|
15
|
+
defaultValue: { summary: '768px' }
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
parameters: {
|
|
9
20
|
docs: {
|
|
10
21
|
description: {
|
|
11
|
-
component: 'A navigation component that shows the current page location within a hierarchy.'
|
|
22
|
+
component: 'A navigation component that shows the current page location within a hierarchy. Supports responsive behavior and accessible navigation.'
|
|
12
23
|
}
|
|
13
24
|
}
|
|
14
25
|
}
|
|
@@ -30,6 +41,13 @@ export const Default = () => html`
|
|
|
30
41
|
</bd-breadcrumb-item>
|
|
31
42
|
</bd-breadcrumb>
|
|
32
43
|
`;
|
|
44
|
+
Default.parameters = {
|
|
45
|
+
docs: {
|
|
46
|
+
description: {
|
|
47
|
+
story: 'Default breadcrumb navigation showing a typical product hierarchy. The current page is marked with the `current` attribute and is not clickable.'
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
33
51
|
|
|
34
52
|
export const WithNestedLinks = () => html`
|
|
35
53
|
<bd-breadcrumb>
|
|
@@ -47,6 +65,13 @@ export const WithNestedLinks = () => html`
|
|
|
47
65
|
</bd-breadcrumb-item>
|
|
48
66
|
</bd-breadcrumb>
|
|
49
67
|
`;
|
|
68
|
+
WithNestedLinks.parameters = {
|
|
69
|
+
docs: {
|
|
70
|
+
description: {
|
|
71
|
+
story: 'Breadcrumb with nested product categories demonstrating deep hierarchical navigation structure.'
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
};
|
|
50
75
|
|
|
51
76
|
export const MixedItems = () => html`
|
|
52
77
|
<bd-breadcrumb>
|
|
@@ -64,6 +89,13 @@ export const MixedItems = () => html`
|
|
|
64
89
|
</bd-breadcrumb-item>
|
|
65
90
|
</bd-breadcrumb>
|
|
66
91
|
`;
|
|
92
|
+
MixedItems.parameters = {
|
|
93
|
+
docs: {
|
|
94
|
+
description: {
|
|
95
|
+
story: 'Breadcrumb with mixed navigation items - some are clickable links while others are non-clickable text nodes for intermediate hierarchy levels.'
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
};
|
|
67
99
|
|
|
68
100
|
export const LongPath = () => html`
|
|
69
101
|
<bd-breadcrumb>
|
|
@@ -87,6 +119,13 @@ export const LongPath = () => html`
|
|
|
87
119
|
</bd-breadcrumb-item>
|
|
88
120
|
</bd-breadcrumb>
|
|
89
121
|
`;
|
|
122
|
+
LongPath.parameters = {
|
|
123
|
+
docs: {
|
|
124
|
+
description: {
|
|
125
|
+
story: 'Breadcrumb with an extended hierarchical path showing how the component handles deep navigation structures and long product names.'
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
};
|
|
90
129
|
|
|
91
130
|
export const MobileView = () => html`
|
|
92
131
|
<div style="max-width: 400px; border: 1px solid #ccc; padding: 20px;">
|
|
@@ -106,4 +145,129 @@ export const MobileView = () => html`
|
|
|
106
145
|
Resize window to see responsive behavior.
|
|
107
146
|
</p>
|
|
108
147
|
</div>
|
|
109
|
-
`;
|
|
148
|
+
`;
|
|
149
|
+
MobileView.parameters = {
|
|
150
|
+
docs: {
|
|
151
|
+
description: {
|
|
152
|
+
story: 'Mobile-optimized breadcrumb demonstration. The component automatically adapts to smaller screens by collapsing intermediate items when the viewport is below the specified breakpoint.'
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
export const EcommerceExample = () => html`
|
|
158
|
+
<bd-breadcrumb>
|
|
159
|
+
<bd-breadcrumb-item href="/">
|
|
160
|
+
Home
|
|
161
|
+
</bd-breadcrumb-item>
|
|
162
|
+
<bd-breadcrumb-item href="/electronics">
|
|
163
|
+
Electronics
|
|
164
|
+
</bd-breadcrumb-item>
|
|
165
|
+
<bd-breadcrumb-item href="/electronics/computers">
|
|
166
|
+
Computers & Tablets
|
|
167
|
+
</bd-breadcrumb-item>
|
|
168
|
+
<bd-breadcrumb-item href="/electronics/computers/laptops">
|
|
169
|
+
Laptops
|
|
170
|
+
</bd-breadcrumb-item>
|
|
171
|
+
<bd-breadcrumb-item current>
|
|
172
|
+
Gaming Laptops - High Performance
|
|
173
|
+
</bd-breadcrumb-item>
|
|
174
|
+
</bd-breadcrumb>
|
|
175
|
+
`;
|
|
176
|
+
EcommerceExample.parameters = {
|
|
177
|
+
docs: {
|
|
178
|
+
description: {
|
|
179
|
+
story: 'E-commerce style breadcrumb showing typical product categorization hierarchy commonly used in online shopping platforms.'
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
export const DocumentationExample = () => html`
|
|
185
|
+
<bd-breadcrumb>
|
|
186
|
+
<bd-breadcrumb-item href="/">
|
|
187
|
+
Home
|
|
188
|
+
</bd-breadcrumb-item>
|
|
189
|
+
<bd-breadcrumb-item href="/help">
|
|
190
|
+
Help Center
|
|
191
|
+
</bd-breadcrumb-item>
|
|
192
|
+
<bd-breadcrumb-item href="/help/getting-started">
|
|
193
|
+
Getting Started
|
|
194
|
+
</bd-breadcrumb-item>
|
|
195
|
+
<bd-breadcrumb-item href="/help/getting-started/installation">
|
|
196
|
+
Installation Guide
|
|
197
|
+
</bd-breadcrumb-item>
|
|
198
|
+
<bd-breadcrumb-item current>
|
|
199
|
+
Troubleshooting
|
|
200
|
+
</bd-breadcrumb-item>
|
|
201
|
+
</bd-breadcrumb>
|
|
202
|
+
`;
|
|
203
|
+
DocumentationExample.parameters = {
|
|
204
|
+
docs: {
|
|
205
|
+
description: {
|
|
206
|
+
story: 'Documentation site breadcrumb demonstrating hierarchical navigation through help articles and documentation sections.'
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
export const AccessibilityExample = () => html`
|
|
212
|
+
<bd-breadcrumb aria-label="Breadcrumb navigation">
|
|
213
|
+
<bd-breadcrumb-item href="/">
|
|
214
|
+
Home
|
|
215
|
+
</bd-breadcrumb-item>
|
|
216
|
+
<bd-breadcrumb-item href="/accessibility">
|
|
217
|
+
Accessibility
|
|
218
|
+
</bd-breadcrumb-item>
|
|
219
|
+
<bd-breadcrumb-item href="/accessibility/components">
|
|
220
|
+
Components
|
|
221
|
+
</bd-breadcrumb-item>
|
|
222
|
+
<bd-breadcrumb-item current>
|
|
223
|
+
Breadcrumb Best Practices
|
|
224
|
+
</bd-breadcrumb-item>
|
|
225
|
+
</bd-breadcrumb>
|
|
226
|
+
|
|
227
|
+
<div style="margin-top: 2rem; padding: 1rem; background: #f5f5f5; border-radius: 4px;">
|
|
228
|
+
<h4 style="margin-top: 0;">Accessibility Features</h4>
|
|
229
|
+
<ul style="margin-bottom: 0;">
|
|
230
|
+
<li><strong>ARIA landmarks:</strong> Proper navigation role with aria-label</li>
|
|
231
|
+
<li><strong>Current page indication:</strong> aria-current="page" for active item</li>
|
|
232
|
+
<li><strong>Keyboard navigation:</strong> All links are keyboard accessible</li>
|
|
233
|
+
<li><strong>Semantic structure:</strong> Clear hierarchy for screen readers</li>
|
|
234
|
+
</ul>
|
|
235
|
+
</div>
|
|
236
|
+
`;
|
|
237
|
+
AccessibilityExample.parameters = {
|
|
238
|
+
docs: {
|
|
239
|
+
description: {
|
|
240
|
+
story: 'Accessibility-focused breadcrumb example demonstrating proper ARIA attributes and semantic HTML structure for screen reader compatibility and keyboard navigation.'
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
// Template for interactive controls
|
|
246
|
+
const BreadcrumbTemplate = ({ mobileBreakpoint }) => html`
|
|
247
|
+
<bd-breadcrumb mobile-breakpoint="${mobileBreakpoint}">
|
|
248
|
+
<bd-breadcrumb-item href="/">
|
|
249
|
+
Home
|
|
250
|
+
</bd-breadcrumb-item>
|
|
251
|
+
<bd-breadcrumb-item href="/products">
|
|
252
|
+
Products
|
|
253
|
+
</bd-breadcrumb-item>
|
|
254
|
+
<bd-breadcrumb-item href="/products/security">
|
|
255
|
+
Security
|
|
256
|
+
</bd-breadcrumb-item>
|
|
257
|
+
<bd-breadcrumb-item current>
|
|
258
|
+
Current Product
|
|
259
|
+
</bd-breadcrumb-item>
|
|
260
|
+
</bd-breadcrumb>
|
|
261
|
+
`;
|
|
262
|
+
|
|
263
|
+
export const InteractiveExample = BreadcrumbTemplate.bind({});
|
|
264
|
+
InteractiveExample.args = {
|
|
265
|
+
mobileBreakpoint: '768px'
|
|
266
|
+
};
|
|
267
|
+
InteractiveExample.parameters = {
|
|
268
|
+
docs: {
|
|
269
|
+
description: {
|
|
270
|
+
story: 'Interactive breadcrumb example. Use the controls panel to adjust the mobile breakpoint and see how it affects the responsive behavior.'
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
};
|