@repobit/dex-system-design 0.22.12 → 0.23.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/CHANGELOG.md +40 -0
- package/package.json +4 -3
- 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
|
@@ -1,507 +1,169 @@
|
|
|
1
1
|
import { html } from 'lit';
|
|
2
|
-
import '../heading/heading.js';
|
|
3
|
-
import '../paragraph/paragraph.js';
|
|
4
2
|
import './link.js';
|
|
5
3
|
|
|
6
4
|
export default {
|
|
7
|
-
title
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
title : 'Components/Link',
|
|
6
|
+
tags : ['autodocs'],
|
|
7
|
+
parameters: {
|
|
8
|
+
docs: {
|
|
9
|
+
description: {
|
|
10
|
+
component: `
|
|
11
|
+
**BdLink** is a Lit anchor component with kind, underline, disabled, and target support.
|
|
12
|
+
|
|
13
|
+
### Usage
|
|
14
|
+
\`\`\`html
|
|
15
|
+
<bd-link href="/products" kind="primary">View products</bd-link>
|
|
16
|
+
<bd-link href="/docs" kind="secondary" underline>Documentation</bd-link>
|
|
17
|
+
<bd-link href="/old" disabled>Unavailable</bd-link>
|
|
18
|
+
\`\`\`
|
|
19
|
+
|
|
20
|
+
### Kind Values
|
|
21
|
+
| Kind | Class |
|
|
22
|
+
|---|---|
|
|
23
|
+
| \`primary\` | \`bd-link--primary\` |
|
|
24
|
+
| \`secondary\` | \`bd-link--secondary\` |
|
|
25
|
+
| \`light\` | \`bd-link--light\` |
|
|
26
|
+
|
|
27
|
+
### Disabled Behavior
|
|
28
|
+
- When \`disabled\`, renders a \`<span>\` instead of \`<a>\`
|
|
29
|
+
- Click events are prevented via \`e.preventDefault()\` and \`e.stopImmediatePropagation()\`
|
|
30
|
+
|
|
31
|
+
### Events
|
|
32
|
+
- \`custom-click\` — NOT dispatched by BdLink (click handled natively by the \`<a>\` tag)
|
|
33
|
+
`
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
argTypes: {
|
|
11
38
|
href: {
|
|
12
39
|
control : 'text',
|
|
13
|
-
description: '
|
|
14
|
-
table : {
|
|
15
|
-
type : { summary: 'string' },
|
|
16
|
-
defaultValue: { summary: '#' }
|
|
17
|
-
}
|
|
40
|
+
description: 'The anchor href URL',
|
|
41
|
+
table : { type: { summary: 'string' }, defaultValue: { summary: '#' }, category: 'Navigation' }
|
|
18
42
|
},
|
|
19
43
|
target: {
|
|
20
44
|
control : { type: 'select' },
|
|
21
45
|
options : ['_self', '_blank', '_parent', '_top'],
|
|
22
|
-
description: '
|
|
23
|
-
table : {
|
|
24
|
-
type : { summary: 'string' },
|
|
25
|
-
defaultValue: { summary: '_self' }
|
|
26
|
-
}
|
|
46
|
+
description: 'Browser target for the link',
|
|
47
|
+
table : { type: { summary: 'string' }, defaultValue: { summary: '_self' }, category: 'Navigation' }
|
|
27
48
|
},
|
|
28
49
|
kind: {
|
|
29
50
|
control : { type: 'select' },
|
|
30
|
-
options : ['primary', 'secondary', '
|
|
31
|
-
description: 'Visual style variant
|
|
32
|
-
table : {
|
|
33
|
-
type : { summary: 'string' },
|
|
34
|
-
defaultValue: { summary: 'primary' }
|
|
35
|
-
}
|
|
51
|
+
options : ['primary', 'secondary', 'light'],
|
|
52
|
+
description: 'Visual style variant applied as `bd-link--{kind}` class',
|
|
53
|
+
table : { type: { summary: "'primary'|'secondary'|'light'" }, defaultValue: { summary: 'primary' }, category: 'Appearance' }
|
|
36
54
|
},
|
|
37
55
|
underline: {
|
|
38
56
|
control : 'boolean',
|
|
39
|
-
description: '
|
|
40
|
-
table : {
|
|
41
|
-
type : { summary: 'boolean' },
|
|
42
|
-
defaultValue: { summary: 'false' }
|
|
43
|
-
}
|
|
57
|
+
description: 'Adds `bd-link--underline` class for underline decoration',
|
|
58
|
+
table : { type: { summary: 'boolean' }, defaultValue: { summary: 'false' }, category: 'Appearance' }
|
|
44
59
|
},
|
|
45
60
|
disabled: {
|
|
46
61
|
control : 'boolean',
|
|
47
|
-
description: '
|
|
48
|
-
table : {
|
|
49
|
-
type : { summary: 'boolean' },
|
|
50
|
-
defaultValue: { summary: 'false' }
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
content: {
|
|
54
|
-
control : 'text',
|
|
55
|
-
description: 'Link text content',
|
|
56
|
-
table : {
|
|
57
|
-
type : { summary: 'string' },
|
|
58
|
-
defaultValue: { summary: 'Link Text' }
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
},
|
|
62
|
-
parameters: {
|
|
63
|
-
docs: {
|
|
64
|
-
description: {
|
|
65
|
-
component: 'A highly customizable link component with multiple visual variants, accessibility features, and interactive states. Supports both internal and external links with proper semantic HTML.'
|
|
66
|
-
}
|
|
62
|
+
description: 'Renders a `<span>` instead of `<a>` and prevents click events',
|
|
63
|
+
table : { type: { summary: 'boolean' }, defaultValue: { summary: 'false' }, category: 'State' }
|
|
67
64
|
}
|
|
68
65
|
}
|
|
69
66
|
};
|
|
70
67
|
|
|
71
|
-
const
|
|
72
|
-
<bd-link
|
|
73
|
-
href="${href}"
|
|
74
|
-
target="${target}"
|
|
75
|
-
kind="${kind}"
|
|
76
|
-
?underline="${underline}"
|
|
77
|
-
?disabled="${disabled}"
|
|
78
|
-
>
|
|
79
|
-
${content}
|
|
80
|
-
</bd-link>
|
|
81
|
-
`;
|
|
68
|
+
const defaultArgs = { href: '/products', target: '_self', kind: 'primary', underline: false, disabled: false };
|
|
82
69
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
disabled : false,
|
|
92
|
-
content : 'Default Link'
|
|
93
|
-
};
|
|
94
|
-
Default.parameters = {
|
|
95
|
-
docs: {
|
|
96
|
-
description: {
|
|
97
|
-
story: 'Default link component with primary styling. This is the most commonly used link variant throughout the application.'
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
export const AllVariants = () => html`
|
|
103
|
-
<div style="display: flex; flex-direction: column; gap: 2rem; max-width: 800px; margin: 0 auto; padding: 2rem;">
|
|
104
|
-
<bd-h as="h2" style="margin-bottom: 1rem;">All Link Variants</bd-h>
|
|
105
|
-
<bd-p kind="regular" style="margin-bottom: 2rem;">
|
|
106
|
-
Explore all available link variants and their recommended use cases. Each variant is designed for specific contexts and user interactions.
|
|
107
|
-
</bd-p>
|
|
108
|
-
|
|
109
|
-
<div style="display: flex; flex-direction: column; gap: 1.5rem;">
|
|
110
|
-
<div style="border: 2px solid #e2e8f0; padding: 1.5rem; border-radius: 8px;">
|
|
111
|
-
<bd-p kind="regular">This is a paragraph with a <bd-link href="#" kind="primary">primary link</bd-link> inside the text.</bd-p>
|
|
112
|
-
<bd-p kind="small" style="color: #64748b; margin-top: 0.5rem;">
|
|
113
|
-
<strong>Primary:</strong> Main calls-to-action, important navigation, key features
|
|
114
|
-
</bd-p>
|
|
115
|
-
</div>
|
|
116
|
-
|
|
117
|
-
<div style="border: 2px solid #e2e8f0; padding: 1.5rem; border-radius: 8px;">
|
|
118
|
-
<bd-p kind="regular">This is a paragraph with a <bd-link href="#" kind="secondary">secondary link</bd-link> inside the text.</bd-p>
|
|
119
|
-
<bd-p kind="small" style="color: #64748b; margin-top: 0.5rem;">
|
|
120
|
-
<strong>Secondary:</strong> Supporting links, less prominent actions, alternative navigation
|
|
121
|
-
</bd-p>
|
|
122
|
-
</div>
|
|
123
|
-
|
|
124
|
-
<div style="border: 2px solid #e2e8f0; padding: 1.5rem; border-radius: 8px;">
|
|
125
|
-
<bd-p kind="regular">This is a paragraph with a <bd-link href="#" kind="danger">danger link</bd-link> inside the text.</bd-p>
|
|
126
|
-
<bd-p kind="small" style="color: #64748b; margin-top: 0.5rem;">
|
|
127
|
-
<strong>Danger:</strong> Destructive actions, warnings, critical operations, error states
|
|
128
|
-
</bd-p>
|
|
129
|
-
</div>
|
|
130
|
-
|
|
131
|
-
<div style="border: 2px solid #e2e8f0; padding: 1.5rem; border-radius: 8px;">
|
|
132
|
-
<bd-p kind="regular">This is a paragraph with a <bd-link href="#" kind="subtle">subtle link</bd-link> inside the text.</bd-p>
|
|
133
|
-
<bd-p kind="small" style="color: #64748b; margin-top: 0.5rem;">
|
|
134
|
-
<strong>Subtle:</strong> Footer links, legal text, supplementary information, low emphasis
|
|
135
|
-
</bd-p>
|
|
136
|
-
</div>
|
|
137
|
-
|
|
138
|
-
<div style="border: 2px solid #e2e8f0; padding: 1.5rem; border-radius: 8px;">
|
|
139
|
-
<bd-p kind="regular">This is a paragraph with a <bd-link href="#" kind="bold">bold link</bd-link> inside the text.</bd-p>
|
|
140
|
-
<bd-p kind="small" style="color: #64748b; margin-top: 0.5rem;">
|
|
141
|
-
<strong>Bold:</strong> High emphasis, featured content, important references, key highlights
|
|
142
|
-
</bd-p>
|
|
143
|
-
</div>
|
|
144
|
-
|
|
145
|
-
<div style="border: 2px solid #e2e8f0; padding: 1.5rem; border-radius: 8px;">
|
|
146
|
-
<bd-p kind="regular">This is a paragraph with a <bd-link href="#" kind="primary" underline>underlined link</bd-link> inside the text.</bd-p>
|
|
147
|
-
<bd-p kind="small" style="color: #64748b; margin-top: 0.5rem;">
|
|
148
|
-
<strong>Underlined:</strong> Improved accessibility, formal content, academic references
|
|
149
|
-
</bd-p>
|
|
150
|
-
</div>
|
|
151
|
-
|
|
152
|
-
<div style="border: 2px solid #e2e8f0; padding: 1.5rem; border-radius: 8px;">
|
|
153
|
-
<bd-p kind="regular">This is a paragraph with a <bd-link href="#" kind="primary" disabled>disabled link</bd-link> inside the text.</bd-p>
|
|
154
|
-
<bd-p kind="small" style="color: #64748b; margin-top: 0.5rem;">
|
|
155
|
-
<strong>Disabled:</strong> Unavailable actions, conditional access, permission-based states
|
|
156
|
-
</bd-p>
|
|
157
|
-
</div>
|
|
158
|
-
</div>
|
|
159
|
-
</div>
|
|
70
|
+
const render = (args) => html`
|
|
71
|
+
<bd-link
|
|
72
|
+
href="${args.href}"
|
|
73
|
+
target="${args.target}"
|
|
74
|
+
kind="${args.kind}"
|
|
75
|
+
?underline="${args.underline}"
|
|
76
|
+
?disabled="${args.disabled}"
|
|
77
|
+
>Click this link</bd-link>
|
|
160
78
|
`;
|
|
161
|
-
AllVariants.parameters = {
|
|
162
|
-
docs: {
|
|
163
|
-
description: {
|
|
164
|
-
story: 'Comprehensive overview of all link variants with detailed usage guidelines and context recommendations for each style option.'
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
};
|
|
168
|
-
|
|
169
|
-
export const Primary = Template.bind({});
|
|
170
|
-
Primary.args = {
|
|
171
|
-
href : '#',
|
|
172
|
-
target : '_self',
|
|
173
|
-
kind : 'primary',
|
|
174
|
-
underline: false,
|
|
175
|
-
disabled : false,
|
|
176
|
-
content : 'Primary Link'
|
|
177
|
-
};
|
|
178
|
-
Primary.parameters = {
|
|
179
|
-
docs: {
|
|
180
|
-
description: {
|
|
181
|
-
story: 'Primary link variant - Use for main calls-to-action, important navigation items, and key feature links. This is the default and most prominent link style.'
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
export const Secondary = Template.bind({});
|
|
187
|
-
Secondary.args = {
|
|
188
|
-
href : '#',
|
|
189
|
-
target : '_self',
|
|
190
|
-
kind : 'secondary',
|
|
191
|
-
underline: false,
|
|
192
|
-
disabled : false,
|
|
193
|
-
content : 'Secondary Link'
|
|
194
|
-
};
|
|
195
|
-
Secondary.parameters = {
|
|
196
|
-
docs: {
|
|
197
|
-
description: {
|
|
198
|
-
story: 'Secondary link variant - Ideal for supporting actions, less prominent navigation, and alternative pathways that don\'t require primary emphasis.'
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
};
|
|
202
79
|
|
|
203
|
-
|
|
204
|
-
Danger.args = {
|
|
205
|
-
href : '#',
|
|
206
|
-
target : '_self',
|
|
207
|
-
kind : 'danger',
|
|
208
|
-
underline: false,
|
|
209
|
-
disabled : false,
|
|
210
|
-
content : 'Danger Link'
|
|
211
|
-
};
|
|
212
|
-
Danger.parameters = {
|
|
213
|
-
docs: {
|
|
214
|
-
description: {
|
|
215
|
-
story: 'Danger link variant - Designed for destructive actions, warnings, critical operations, and error-related links. Use sparingly for high-attention scenarios.'
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
};
|
|
80
|
+
// ─── Stories ───────────────────────────────────────────────────────────────
|
|
219
81
|
|
|
220
|
-
export const
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
kind : 'subtle',
|
|
225
|
-
underline: false,
|
|
226
|
-
disabled : false,
|
|
227
|
-
content : 'Subtle Link'
|
|
228
|
-
};
|
|
229
|
-
Subtle.parameters = {
|
|
230
|
-
docs: {
|
|
231
|
-
description: {
|
|
232
|
-
story: 'Subtle link variant - Perfect for low-emphasis contexts like footer links, legal text, supplementary information, and non-critical references.'
|
|
233
|
-
}
|
|
234
|
-
}
|
|
82
|
+
export const Default = {
|
|
83
|
+
name : 'Default (Primary)',
|
|
84
|
+
render : () => html`<bd-link href="/products" kind="primary">View products</bd-link>`,
|
|
85
|
+
parameters: { docs: { description: { story: 'Default primary link rendered as an `<a>` tag.' } } }
|
|
235
86
|
};
|
|
236
87
|
|
|
237
|
-
export const
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
content : 'Bold Link'
|
|
245
|
-
};
|
|
246
|
-
Bold.parameters = {
|
|
247
|
-
docs: {
|
|
248
|
-
description: {
|
|
249
|
-
story: 'Bold link variant - Use for high-emphasis scenarios, featured content, important references, and key highlights that need extra visual weight.'
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
};
|
|
253
|
-
|
|
254
|
-
export const WithUnderline = Template.bind({});
|
|
255
|
-
WithUnderline.args = {
|
|
256
|
-
href : '#',
|
|
257
|
-
target : '_self',
|
|
258
|
-
kind : 'primary',
|
|
259
|
-
underline: true,
|
|
260
|
-
disabled : false,
|
|
261
|
-
content : 'Underlined Link'
|
|
262
|
-
};
|
|
263
|
-
WithUnderline.parameters = {
|
|
264
|
-
docs: {
|
|
265
|
-
description: {
|
|
266
|
-
story: 'Link with forced underline - Improves accessibility and clarity, especially useful in formal content, academic references, and dense text blocks.'
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
};
|
|
270
|
-
|
|
271
|
-
export const Disabled = Template.bind({});
|
|
272
|
-
Disabled.args = {
|
|
273
|
-
href : '#',
|
|
274
|
-
target : '_self',
|
|
275
|
-
kind : 'primary',
|
|
276
|
-
underline: false,
|
|
277
|
-
disabled : true,
|
|
278
|
-
content : 'Disabled Link'
|
|
279
|
-
};
|
|
280
|
-
Disabled.parameters = {
|
|
281
|
-
docs: {
|
|
282
|
-
description: {
|
|
283
|
-
story: 'Disabled link state - Shows unavailable actions while maintaining visual context. Automatically prevents clicks and maintains semantic structure.'
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
};
|
|
287
|
-
|
|
288
|
-
export const TargetOptions = () => html`
|
|
289
|
-
<div style="display: flex; flex-direction: column; gap: 2rem; max-width: 800px; margin: 0 auto; padding: 2rem;">
|
|
290
|
-
<bd-h as="h2" style="margin-bottom: 1rem;">Link Target Options</bd-h>
|
|
291
|
-
<bd-p kind="regular" style="margin-bottom: 1rem;">
|
|
292
|
-
Different target attributes control how links open in the browser. Choose the appropriate option based on user experience needs.
|
|
293
|
-
</bd-p>
|
|
294
|
-
|
|
295
|
-
<div style="display: flex; flex-direction: column; gap: 1rem;">
|
|
296
|
-
<div>
|
|
297
|
-
<bd-link href="https://example.com" target="_self" kind="primary">
|
|
298
|
-
_self - Opens in same tab/window
|
|
299
|
-
</bd-link>
|
|
300
|
-
<bd-p kind="small" style="color: #64748b;">
|
|
301
|
-
Default behavior. Use for internal navigation and same-context links.
|
|
302
|
-
</bd-p>
|
|
303
|
-
</div>
|
|
304
|
-
|
|
305
|
-
<div>
|
|
306
|
-
<bd-link href="https://example.com" target="_blank" kind="secondary">
|
|
307
|
-
_blank - Opens in new tab
|
|
308
|
-
</bd-link>
|
|
309
|
-
<bd-p kind="small" style="color: #64748b;">
|
|
310
|
-
For external links, references, and resources that shouldn\'t interrupt user flow.
|
|
311
|
-
</bd-p>
|
|
312
|
-
</div>
|
|
313
|
-
|
|
314
|
-
<div>
|
|
315
|
-
<bd-link href="https://example.com" target="_parent" kind="subtle">
|
|
316
|
-
_parent - Opens in parent frame
|
|
317
|
-
</bd-link>
|
|
318
|
-
<bd-p kind="small" style="color: #64748b;">
|
|
319
|
-
Specific to frame-based layouts. Rarely used in modern web applications.
|
|
320
|
-
</bd-p>
|
|
321
|
-
</div>
|
|
322
|
-
|
|
323
|
-
<div>
|
|
324
|
-
<bd-link href="https://example.com" target="_top" kind="subtle">
|
|
325
|
-
_top - Opens in full window
|
|
326
|
-
</bd-link>
|
|
327
|
-
<bd-p kind="small" style="color: #64748b;">
|
|
328
|
-
Breaks out of frames to full browser window. Useful in embedded contexts.
|
|
329
|
-
</bd-p>
|
|
330
|
-
</div>
|
|
88
|
+
export const AllKinds = {
|
|
89
|
+
name : 'All Kinds',
|
|
90
|
+
render: () => html`
|
|
91
|
+
<div style="display:flex; gap:16px; flex-wrap:wrap; align-items:center; padding:8px; background:#333;">
|
|
92
|
+
<bd-link href="#" kind="primary">Primary</bd-link>
|
|
93
|
+
<bd-link href="#" kind="secondary">Secondary</bd-link>
|
|
94
|
+
<bd-link href="#" kind="light">Light</bd-link>
|
|
331
95
|
</div>
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
TargetOptions.parameters = {
|
|
335
|
-
docs: {
|
|
336
|
-
description: {
|
|
337
|
-
story: 'Demonstration of different target attributes and their browser behaviors with recommendations for when to use each option based on user experience considerations.'
|
|
338
|
-
}
|
|
339
|
-
}
|
|
96
|
+
`,
|
|
97
|
+
parameters: { docs: { description: { story: 'All three `kind` values. Light kind is shown on a dark background for visibility.' } } }
|
|
340
98
|
};
|
|
341
99
|
|
|
342
|
-
export const
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
<
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
<div style="display: flex; flex-direction: column; gap: 1.5rem;">
|
|
350
|
-
<div>
|
|
351
|
-
<bd-link href="https://example.com" target="_blank" kind="primary">
|
|
352
|
-
External Primary Link with Security
|
|
353
|
-
</bd-link>
|
|
354
|
-
<bd-p kind="small" style="color: #64748b;">
|
|
355
|
-
Opens in new tab with proper security attributes for external resources.
|
|
356
|
-
</bd-p>
|
|
357
|
-
</div>
|
|
358
|
-
|
|
359
|
-
<div>
|
|
360
|
-
<bd-link href="https://example.com" target="_blank" kind="secondary" underline>
|
|
361
|
-
External Underlined Reference
|
|
362
|
-
</bd-link>
|
|
363
|
-
<bd-p kind="small" style="color: #64748b;">
|
|
364
|
-
Clear visual indication for external academic or reference material.
|
|
365
|
-
</bd-p>
|
|
366
|
-
</div>
|
|
367
|
-
|
|
368
|
-
<div style="border: 2px solid #e2e8f0; padding: 1.5rem; border-radius: 8px;">
|
|
369
|
-
<bd-p kind="regular">
|
|
370
|
-
This is a paragraph with an <bd-link href="https://example.com" target="_blank" kind="primary">external link</bd-link> that opens in a new tab for better user experience and flow preservation.
|
|
371
|
-
</bd-p>
|
|
372
|
-
<bd-p kind="small" style="color: #64748b; margin-top: 0.5rem;">
|
|
373
|
-
Best practice: Use target="_blank" for all external links to keep users in your application context.
|
|
374
|
-
</bd-p>
|
|
375
|
-
</div>
|
|
100
|
+
export const WithUnderline = {
|
|
101
|
+
name : 'With Underline',
|
|
102
|
+
render: () => html`
|
|
103
|
+
<div style="display:flex; gap:16px; flex-wrap:wrap;">
|
|
104
|
+
<bd-link href="#" kind="primary" underline>Primary underlined</bd-link>
|
|
105
|
+
<bd-link href="#" kind="secondary" underline>Secondary underlined</bd-link>
|
|
376
106
|
</div>
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
ExternalLinks.parameters = {
|
|
380
|
-
docs: {
|
|
381
|
-
description: {
|
|
382
|
-
story: 'Examples and best practices for external links, including security considerations, user experience patterns, and visual styling recommendations for outbound navigation.'
|
|
383
|
-
}
|
|
384
|
-
}
|
|
107
|
+
`,
|
|
108
|
+
parameters: { docs: { description: { story: '`underline` prop adds `bd-link--underline` class.' } } }
|
|
385
109
|
};
|
|
386
110
|
|
|
387
|
-
export const
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
<div style="border: 2px solid #10b981; padding: 2rem; border-radius: 12px; background: #f0fdf4;">
|
|
392
|
-
<bd-h as="h3" style="color: #059669; margin-bottom: 1rem;">✅ Accessible Link Practices</bd-h>
|
|
393
|
-
|
|
394
|
-
<div style="display: flex; flex-direction: column; gap: 1rem;">
|
|
395
|
-
<div>
|
|
396
|
-
<bd-p kind="regular"><strong>Descriptive Text:</strong> Always use meaningful link text that makes sense out of context.</bd-p>
|
|
397
|
-
<bd-p kind="small" style="color: #059669;">
|
|
398
|
-
✅ <bd-link href="#" kind="primary">Download security whitepaper</bd-link><br>
|
|
399
|
-
❌ <bd-link href="#" kind="danger">Click here</bd-link>
|
|
400
|
-
</bd-p>
|
|
401
|
-
</div>
|
|
402
|
-
|
|
403
|
-
<div>
|
|
404
|
-
<bd-p kind="regular"><strong>Underline for Clarity:</strong> Use underlined links in paragraphs for better visual identification.</bd-p>
|
|
405
|
-
<bd-p kind="small" style="color: #059669;">
|
|
406
|
-
This <bd-link href="#" kind="primary" underline>underlined link</bd-link> is easier to identify in text blocks.
|
|
407
|
-
</bd-p>
|
|
408
|
-
</div>
|
|
409
|
-
|
|
410
|
-
<div>
|
|
411
|
-
<bd-p kind="regular"><strong>Color Contrast:</strong> All link variants maintain WCAG AA contrast ratios.</bd-p>
|
|
412
|
-
<bd-p kind="small" style="color: #059669;">
|
|
413
|
-
Tested for accessibility: <bd-link href="#" kind="subtle">Subtle</bd-link>, <bd-link href="#" kind="primary">Primary</bd-link>, <bd-link href="#" kind="danger">Danger</bd-link>
|
|
414
|
-
</bd-p>
|
|
415
|
-
</div>
|
|
416
|
-
|
|
417
|
-
<div>
|
|
418
|
-
<bd-p kind="regular"><strong>Focus Indicators:</strong> Clear focus rings for keyboard navigation.</bd-p>
|
|
419
|
-
<bd-p kind="small" style="color: #059669;">
|
|
420
|
-
Try tabbing through these links to see the focus indicators.
|
|
421
|
-
</bd-p>
|
|
422
|
-
</div>
|
|
423
|
-
</div>
|
|
424
|
-
</div>
|
|
425
|
-
|
|
426
|
-
<div style="border: 2px solid #e2e8f0; padding: 2rem; border-radius: 12px;">
|
|
427
|
-
<bd-h as="h3" style="color: #3b82f6; margin-bottom: 1rem;">Screen Reader Considerations</bd-h>
|
|
428
|
-
<bd-p kind="regular" style="margin-bottom: 1rem;">
|
|
429
|
-
Links provide proper semantic information for assistive technologies:
|
|
430
|
-
</bd-p>
|
|
431
|
-
|
|
432
|
-
<ul style="color: #374151; margin-left: 1.5rem;">
|
|
433
|
-
<li style="margin-bottom: 0.5rem;">Disabled links become <code><span></code> elements to prevent interaction</li>
|
|
434
|
-
<li style="margin-bottom: 0.5rem;">External links should include visual or textual indicators</li>
|
|
435
|
-
<li style="margin-bottom: 0.5rem;">Link text should be unique and descriptive</li>
|
|
436
|
-
<li>Focus management works correctly with keyboard navigation</li>
|
|
437
|
-
</ul>
|
|
438
|
-
</div>
|
|
439
|
-
</div>
|
|
440
|
-
`;
|
|
441
|
-
AccessibilityExamples.parameters = {
|
|
442
|
-
docs: {
|
|
443
|
-
description: {
|
|
444
|
-
story: 'Comprehensive accessibility guidelines and best practices for link components, including screen reader compatibility, keyboard navigation, color contrast, and semantic HTML structure.'
|
|
445
|
-
}
|
|
446
|
-
}
|
|
111
|
+
export const Disabled = {
|
|
112
|
+
name : 'Disabled',
|
|
113
|
+
render : () => html`<bd-link href="/products" kind="primary" disabled>Unavailable link</bd-link>`,
|
|
114
|
+
parameters: { docs: { description: { story: 'Disabled link renders as `<span>` — not clickable, not navigable.' } } }
|
|
447
115
|
};
|
|
448
116
|
|
|
449
|
-
export const
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
and <bd-link href="#" kind="bold">real-time monitoring features</bd-link>.
|
|
457
|
-
</bd-p>
|
|
458
|
-
|
|
459
|
-
<bd-p kind="regular">
|
|
460
|
-
Our <bd-link href="#" kind="danger">emergency response team</bd-link> is available 24/7
|
|
461
|
-
to handle security incidents. For less urgent matters, check our
|
|
462
|
-
<bd-link href="#" kind="subtle">comprehensive knowledge base</bd-link> or
|
|
463
|
-
<bd-link href="#" kind="secondary">community support forums</bd-link>.
|
|
464
|
-
</bd-p>
|
|
465
|
-
|
|
466
|
-
<bd-h as="h3" style="margin-top: 2rem;">Additional Resources</bd-h>
|
|
467
|
-
|
|
468
|
-
<bd-p kind="regular">
|
|
469
|
-
Download our <bd-link href="#" kind="primary" underline>security best practices guide</bd-link>
|
|
470
|
-
or explore <bd-link href="https://example.com" target="_blank" kind="secondary">external security resources</bd-link>
|
|
471
|
-
for more in-depth information.
|
|
472
|
-
</bd-p>
|
|
473
|
-
|
|
474
|
-
<div style="margin-top: 2rem; padding-top: 1rem; border-top: 1px solid #e2e8f0;">
|
|
475
|
-
<bd-p kind="small">
|
|
476
|
-
<bd-link href="#" kind="subtle" underline>Terms of service</bd-link> •
|
|
477
|
-
<bd-link href="#" kind="subtle" underline>Privacy policy</bd-link> •
|
|
478
|
-
<bd-link href="#" kind="subtle" underline>Cookie policy</bd-link> •
|
|
479
|
-
<bd-link href="#" kind="subtle" underline>Contact support</bd-link>
|
|
480
|
-
</bd-p>
|
|
117
|
+
export const DisabledAllKinds = {
|
|
118
|
+
name : 'Disabled — All Kinds',
|
|
119
|
+
render: () => html`
|
|
120
|
+
<div style="display:flex; gap:16px; flex-wrap:wrap; align-items:center;">
|
|
121
|
+
<bd-link href="#" kind="primary" disabled>Primary disabled</bd-link>
|
|
122
|
+
<bd-link href="#" kind="secondary" disabled>Secondary disabled</bd-link>
|
|
123
|
+
<bd-link href="#" kind="light" disabled>Light disabled</bd-link>
|
|
481
124
|
</div>
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
125
|
+
`,
|
|
126
|
+
parameters: { docs: { description: { story: 'Disabled state across all three kind variants.' } } }
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
export const OpenInNewTab = {
|
|
130
|
+
name : 'Opens in New Tab',
|
|
131
|
+
render: () => html`
|
|
132
|
+
<bd-link href="https://bitdefender.com" kind="primary" target="_blank">
|
|
133
|
+
Visit Bitdefender.com
|
|
134
|
+
</bd-link>
|
|
135
|
+
`,
|
|
136
|
+
parameters: { docs: { description: { story: '`target="_blank"` opens the link in a new browser tab.' } } }
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
export const InlineWithText = {
|
|
140
|
+
name : 'Inline Within Text',
|
|
141
|
+
render: () => html`
|
|
142
|
+
<p style="font-size:16px; line-height:1.6;">
|
|
143
|
+
Bitdefender offers award-winning protection.
|
|
144
|
+
<bd-link href="/products" kind="primary" underline>View all products</bd-link>
|
|
145
|
+
to find the right plan for you.
|
|
146
|
+
</p>
|
|
147
|
+
`,
|
|
148
|
+
parameters: { docs: { description: { story: 'Link used inline within a paragraph of text.' } } }
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
export const NavigationLinks = {
|
|
152
|
+
name : 'Navigation Link Row',
|
|
153
|
+
render: () => html`
|
|
154
|
+
<nav style="display:flex; gap:24px; padding:16px; background:#1a1a1a;">
|
|
155
|
+
<bd-link href="/consumer" kind="light">Consumer</bd-link>
|
|
156
|
+
<bd-link href="/small-business" kind="light">Small Business</bd-link>
|
|
157
|
+
<bd-link href="/business" kind="light">Business</bd-link>
|
|
158
|
+
<bd-link href="/partners" kind="light">Partners</bd-link>
|
|
159
|
+
</nav>
|
|
160
|
+
`,
|
|
161
|
+
parameters: { docs: { description: { story: 'Light kind links used as navigation items on a dark background.' } } }
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
export const Playground = {
|
|
165
|
+
name : '🛝 Playground',
|
|
166
|
+
args : { ...defaultArgs },
|
|
167
|
+
render,
|
|
168
|
+
parameters: { docs: { description: { story: 'Interactive playground. Adjust href, target, kind, underline, and disabled via Controls.' } } }
|
|
507
169
|
};
|