@repobit/dex-system-design 0.24.4 → 0.24.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/CHANGELOG.md +15 -0
- package/package.json +4 -4
- package/src/components/accordion/accordion.css.js +40 -0
- package/src/components/accordion/accordion.js +31 -0
- package/src/components/accordion/accordion.stories.js +147 -4
- package/src/components/agent-endpoints/agent-endpoints.css.js +92 -0
- package/src/components/agent-endpoints/agent-endpoints.js +86 -0
- package/src/components/agent-endpoints/agent-endpoints.stories.js +148 -0
- package/src/components/ai-guardian-demo.stories.js +848 -0
- package/src/components/awards/awards-flex.css.js +169 -0
- package/src/components/awards/awards-flex.js +269 -0
- package/src/components/awards/awards-flex.stories.js +657 -0
- package/src/components/bento-grid/bento-grid.css.js +57 -0
- package/src/components/bento-grid/bento-grid.js +186 -0
- package/src/components/bento-grid/bento-grid.stories.js +440 -0
- package/src/components/bento-grid/bento-item.css.js +105 -0
- package/src/components/bento-grid/bento-item.js +57 -0
- package/src/components/button/button.css.js +26 -0
- package/src/components/button/button.js +8 -0
- package/src/components/button/button.stories.js +12 -0
- package/src/components/comparison-panel/comparison-panel.css.js +104 -0
- package/src/components/comparison-panel/comparison-panel.js +100 -0
- package/src/components/comparison-panel/comparison-panel.stories.js +223 -0
- package/src/components/compatibility-table/compatibility-table.css.js +243 -0
- package/src/components/compatibility-table/compatibility-table.js +123 -0
- package/src/components/compatibility-table/compatibility-table.stories.js +189 -0
- package/src/components/cta-banner/cta-banner.css.js +60 -0
- package/src/components/cta-banner/cta-banner.js +63 -0
- package/src/components/dropdown/dropdown.css.js +1 -1
- package/src/components/footer/footer.css.js +0 -1
- package/src/components/header/header-code.css.js +125 -0
- package/src/components/header/header-code.js +69 -0
- package/src/components/header/header-code.stories.js +226 -0
- package/src/components/heading/heading.css.js +3 -0
- package/src/components/icons/bd-ai-icon.js +27 -0
- package/src/components/icons/quote-icon.js +28 -0
- package/src/components/install-options/install-options.css.js +276 -0
- package/src/components/install-options/install-options.js +184 -0
- package/src/components/list/list-item/list-item.css.js +3 -3
- package/src/components/list/list-item/list-item.js +10 -4
- package/src/components/overview/overview.css.js +121 -0
- package/src/components/overview/overview.js +63 -0
- package/src/components/overview/overview.stories.js +193 -0
- package/src/components/page-switcher/page-switcher.css.js +100 -0
- package/src/components/page-switcher/page-switcher.js +42 -0
- package/src/components/paragraph/paragraph.css.js +1 -5
- package/src/components/paragraph/paragraph.js +7 -3
- package/src/components/process-steps/process-steps.css.js +95 -0
- package/src/components/process-steps/process-steps.js +72 -0
- package/src/components/process-steps/process-steps.stories.js +144 -0
- package/src/components/quick-answer/quick-answer.css.js +67 -0
- package/src/components/quick-answer/quick-answer.js +59 -0
- package/src/components/quick-answer/quick-answer.stories.js +160 -0
- package/src/components/review/review-grid.css.js +34 -0
- package/src/components/review/review-grid.js +63 -0
- package/src/components/review/review.css.js +50 -0
- package/src/components/review/review.js +58 -0
- package/src/components/review/review.stories.js +228 -0
- package/src/components/terminal/terminal-cursor.js +49 -0
- package/src/components/terminal/terminal-message.css.js +161 -0
- package/src/components/terminal/terminal-message.js +169 -0
- package/src/components/terminal/terminal-message.stories.js +321 -0
- package/src/components/trust-panel/trust-panel.css.js +167 -0
- package/src/components/trust-panel/trust-panel.js +116 -0
- package/src/components/trust-panel/trust-panel.stories.js +234 -0
- package/src/tokens/tokens.css +1 -1
- package/src/components/tabsComponent/tabsComponent.css.js +0 -267
- package/src/components/tabsComponent/tabsComponent.js +0 -193
- package/src/components/tabsComponent/tabsComponent.stories.js +0 -134
- package/src/components/tabsComponentFamily/tabsComponentFamily.css.js +0 -181
- package/src/components/tabsComponentFamily/tabsComponentFamily.js +0 -180
- package/src/components/tabsComponentFamily/tabsComponentFamily.stories.js +0 -319
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { html } from "lit";
|
|
2
|
+
import "./trust-panel.js";
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
title : "Components/Trust Panel",
|
|
6
|
+
component : "bd-trust-panel",
|
|
7
|
+
tags : ["autodocs"],
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: "fullscreen",
|
|
10
|
+
docs : {
|
|
11
|
+
description: {
|
|
12
|
+
component: `
|
|
13
|
+
**TrustPanel** is a light-blue section combining an eyebrow/title/description block,
|
|
14
|
+
a row of large stat numbers, and 1-2 white bordered cards (each with logos, a title,
|
|
15
|
+
description, and a "Learn more" link) — used for social-proof / trust-building
|
|
16
|
+
sections.
|
|
17
|
+
|
|
18
|
+
Shares the same card visual language (white background, border, radius) as
|
|
19
|
+
\`bd-comparison-panel\`, but the content shape (stats row + logo cards) is different
|
|
20
|
+
enough to warrant its own component.
|
|
21
|
+
|
|
22
|
+
### Usage
|
|
23
|
+
\`\`\`html
|
|
24
|
+
<bd-trust-panel
|
|
25
|
+
eyebrow="Why trust it"
|
|
26
|
+
title="Built by Bitdefender"
|
|
27
|
+
description="AI Guardian is made by Bitdefender, the company that has protected people and organisations since 2001."
|
|
28
|
+
link-label="Why millions trust Bitdefender"
|
|
29
|
+
link-href="#"
|
|
30
|
+
.stats=\${[
|
|
31
|
+
{ value: "50B+", label: "threats blocked every year" },
|
|
32
|
+
{ value: "580+", label: "technology patents" }
|
|
33
|
+
]}
|
|
34
|
+
.cards=\${[
|
|
35
|
+
{ eyebrow: "Brand partnership", title: "Trusted by Ferrari as cybersecurity partner", description: "...", linkLabel: "Learn more", linkHref: "#" }
|
|
36
|
+
]}
|
|
37
|
+
>
|
|
38
|
+
<img slot="card-1-logos" src="/logos/bitdefender.svg" alt="Bitdefender" />
|
|
39
|
+
<img slot="card-1-logos" src="/logos/ferrari.svg" alt="Ferrari" />
|
|
40
|
+
</bd-trust-panel>
|
|
41
|
+
\`\`\`
|
|
42
|
+
|
|
43
|
+
### Attributes
|
|
44
|
+
| Attribute | Type | Default | Description |
|
|
45
|
+
|------------------|--------|---------|------------------------------------------------------------------------|
|
|
46
|
+
| \`eyebrow\` | String | \`""\` | Small blue label above the title |
|
|
47
|
+
| \`title\` | String | \`""\` | Heading (or the \`title\` slot) |
|
|
48
|
+
| \`description\` | String | \`""\` | Paragraph under the title (or the \`description\` slot) |
|
|
49
|
+
| \`link-label\` | String | \`""\` | Optional inline link appended after the description |
|
|
50
|
+
| \`link-href\` | String | \`"#"\` | URL for the inline description link |
|
|
51
|
+
| \`stats\` | Array | \`[]\` | \`{ value, label }\` — rendered as a row of large numbers with dividers |
|
|
52
|
+
| \`cards\` | Array | \`[]\` | \`{ eyebrow, title, description, linkLabel, linkHref }\` — logos go in slots \`card-N-logos\` |
|
|
53
|
+
|
|
54
|
+
### Slots
|
|
55
|
+
| Slot | Description |
|
|
56
|
+
|-----------------------|----------------------------------------------------------|
|
|
57
|
+
| \`eyebrow\` | Overrides the \`eyebrow\` attribute |
|
|
58
|
+
| \`title\` | Overrides the \`title\` attribute |
|
|
59
|
+
| \`description\` | Overrides the \`description\` attribute |
|
|
60
|
+
| \`card-1-logos\`, \`card-2-logos\`, ... | Logo images/elements for each card, in order (1-indexed) |
|
|
61
|
+
`
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const render = (args) => html`
|
|
68
|
+
<bd-trust-panel
|
|
69
|
+
eyebrow=${args.eyebrow}
|
|
70
|
+
title=${args.title}
|
|
71
|
+
description=${args.description}
|
|
72
|
+
link-label=${args.linkLabel}
|
|
73
|
+
link-href=${args.linkHref}
|
|
74
|
+
.stats=${args.stats}
|
|
75
|
+
.cards=${args.cards}
|
|
76
|
+
>
|
|
77
|
+
<span slot="card-1-logos" style="font-weight:700; color:#006DFF; font-size:18px;">Bitdefender</span>
|
|
78
|
+
<span slot="card-1-logos" style="font-size:12px; color:#374151; font-weight:600;">FERRARI TEAM PARTNER</span>
|
|
79
|
+
|
|
80
|
+
<span slot="card-2-logos" style="font-weight:700; color:#dc2626; font-size:14px;">PC MAG</span>
|
|
81
|
+
<span slot="card-2-logos" style="font-weight:700; color:#dc2626; font-size:14px;">AV-TEST</span>
|
|
82
|
+
<span slot="card-2-logos" style="font-weight:700; color:#111827; font-size:14px;">FORRESTER</span>
|
|
83
|
+
</bd-trust-panel>
|
|
84
|
+
`;
|
|
85
|
+
|
|
86
|
+
export const Default = {
|
|
87
|
+
name: "Default — Built by Bitdefender",
|
|
88
|
+
args: {
|
|
89
|
+
eyebrow : "Why trust it",
|
|
90
|
+
title : "Built by Bitdefender",
|
|
91
|
+
description: "AI Guardian is made by Bitdefender, the company that has protected people and organisations since 2001. The figures and recognitions below describe Bitdefender the company — not the AI Guardian product, which is in BETA.",
|
|
92
|
+
linkLabel : "Why millions trust Bitdefender",
|
|
93
|
+
linkHref : "#",
|
|
94
|
+
stats : [
|
|
95
|
+
{ value: "50B+", label: "threats blocked every year" },
|
|
96
|
+
{ value: "580+", label: "technology patents" },
|
|
97
|
+
{ value: "170+", label: "countries protected" },
|
|
98
|
+
{ value: "15+", label: "years of AI-driven security" },
|
|
99
|
+
{ value: "50%+", label: "of employees work in R&D" },
|
|
100
|
+
{ value: "30+", label: "law-enforcement partnerships" }
|
|
101
|
+
],
|
|
102
|
+
cards: [
|
|
103
|
+
{
|
|
104
|
+
eyebrow : "Brand partnership",
|
|
105
|
+
title : "Trusted by Ferrari as cybersecurity partner",
|
|
106
|
+
description: "A partnership born from a passion for high performance and technological innovation — Bitdefender supports Ferrari with Advanced Threat Intelligence to improve detection and response to cyber threats.",
|
|
107
|
+
linkLabel : "Learn more",
|
|
108
|
+
linkHref : "#"
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
eyebrow : "Brand recognition",
|
|
112
|
+
title : "Award-winning security software you can trust. Always.",
|
|
113
|
+
description: "Consistently top-ranked by the world's leading independent testing labs and tech publications.",
|
|
114
|
+
linkLabel : "Learn more",
|
|
115
|
+
linkHref : "#"
|
|
116
|
+
}
|
|
117
|
+
]
|
|
118
|
+
},
|
|
119
|
+
render,
|
|
120
|
+
parameters: {
|
|
121
|
+
docs: {
|
|
122
|
+
description: {
|
|
123
|
+
story: "Matches the reference design: eyebrow, title, description with inline link, 6-stat row, and 2 white cards with logos, title, description, and a learn-more link."
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
export const SingleCard = {
|
|
130
|
+
name : "Single Card",
|
|
131
|
+
render: () => html`
|
|
132
|
+
<bd-trust-panel
|
|
133
|
+
eyebrow="Why trust it"
|
|
134
|
+
title="Built by Bitdefender"
|
|
135
|
+
.stats=${[
|
|
136
|
+
{ value: "50B+", label: "threats blocked every year" },
|
|
137
|
+
{ value: "170+", label: "countries protected" }
|
|
138
|
+
]}
|
|
139
|
+
.cards=${[
|
|
140
|
+
{
|
|
141
|
+
eyebrow : "Brand recognition",
|
|
142
|
+
title : "Award-winning security software you can trust. Always.",
|
|
143
|
+
description: "Consistently top-ranked by the world's leading independent testing labs and tech publications.",
|
|
144
|
+
linkLabel : "Learn more",
|
|
145
|
+
linkHref : "#"
|
|
146
|
+
}
|
|
147
|
+
]}
|
|
148
|
+
>
|
|
149
|
+
<span slot="card-1-logos" style="font-weight:700; color:#dc2626;">AV-TEST</span>
|
|
150
|
+
</bd-trust-panel>
|
|
151
|
+
`,
|
|
152
|
+
parameters: {
|
|
153
|
+
docs: {
|
|
154
|
+
description: {
|
|
155
|
+
story: "Only one card in the array — the grid simply renders one card instead of two, no forced empty column."
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
export const NoCards = {
|
|
162
|
+
name: "No Cards — Stats Only",
|
|
163
|
+
args: {
|
|
164
|
+
eyebrow : "Why trust it",
|
|
165
|
+
title : "Built by Bitdefender",
|
|
166
|
+
description: "",
|
|
167
|
+
linkLabel : "",
|
|
168
|
+
linkHref : "#",
|
|
169
|
+
stats : [
|
|
170
|
+
{ value: "50B+", label: "threats blocked every year" },
|
|
171
|
+
{ value: "580+", label: "technology patents" },
|
|
172
|
+
{ value: "170+", label: "countries protected" }
|
|
173
|
+
],
|
|
174
|
+
cards: []
|
|
175
|
+
},
|
|
176
|
+
render: (args) => html`
|
|
177
|
+
<bd-trust-panel
|
|
178
|
+
eyebrow=${args.eyebrow}
|
|
179
|
+
title=${args.title}
|
|
180
|
+
.stats=${args.stats}
|
|
181
|
+
.cards=${args.cards}
|
|
182
|
+
></bd-trust-panel>
|
|
183
|
+
`,
|
|
184
|
+
parameters: {
|
|
185
|
+
docs: {
|
|
186
|
+
description: {
|
|
187
|
+
story: "cards left empty — only the eyebrow/title and stats row render."
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
export const Playground = {
|
|
194
|
+
name: "Playground",
|
|
195
|
+
args: {
|
|
196
|
+
eyebrow : "Why trust it",
|
|
197
|
+
title : "Built by Bitdefender",
|
|
198
|
+
description: "AI Guardian is made by Bitdefender, the company that has protected people and organisations since 2001.",
|
|
199
|
+
linkLabel : "Why millions trust Bitdefender",
|
|
200
|
+
linkHref : "#",
|
|
201
|
+
stats : [
|
|
202
|
+
{ value: "50B+", label: "threats blocked every year" },
|
|
203
|
+
{ value: "580+", label: "technology patents" },
|
|
204
|
+
{ value: "170+", label: "countries protected" },
|
|
205
|
+
{ value: "15+", label: "years of AI-driven security" },
|
|
206
|
+
{ value: "50%+", label: "of employees work in R&D" },
|
|
207
|
+
{ value: "30+", label: "law-enforcement partnerships" }
|
|
208
|
+
],
|
|
209
|
+
cards: [
|
|
210
|
+
{
|
|
211
|
+
eyebrow : "Brand partnership",
|
|
212
|
+
title : "Trusted by Ferrari as cybersecurity partner",
|
|
213
|
+
description: "A partnership born from a passion for high performance and technological innovation.",
|
|
214
|
+
linkLabel : "Learn more",
|
|
215
|
+
linkHref : "#"
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
eyebrow : "Brand recognition",
|
|
219
|
+
title : "Award-winning security software you can trust. Always.",
|
|
220
|
+
description: "Consistently top-ranked by the world's leading independent testing labs.",
|
|
221
|
+
linkLabel : "Learn more",
|
|
222
|
+
linkHref : "#"
|
|
223
|
+
}
|
|
224
|
+
]
|
|
225
|
+
},
|
|
226
|
+
render,
|
|
227
|
+
parameters: {
|
|
228
|
+
docs: {
|
|
229
|
+
description: {
|
|
230
|
+
story: "Fully interactive — use the Controls panel to edit eyebrow, title, description, stats, and cards live."
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
};
|
package/src/tokens/tokens.css
CHANGED
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
import { css } from "lit";
|
|
2
|
-
|
|
3
|
-
export default css`
|
|
4
|
-
:host {
|
|
5
|
-
--background-card-grey: var(--color-neutral-25);
|
|
6
|
-
--border-card-grey: var(--color-neutral-50);
|
|
7
|
-
--border-card-green: var(--color-green-700);
|
|
8
|
-
--badge-background: var(--color-blue-700);
|
|
9
|
-
--bd-accesibility-focus: var(--color-blue-500);
|
|
10
|
-
|
|
11
|
-
--text-color-white: var(--color-neutral-0);
|
|
12
|
-
font-size: 100%;
|
|
13
|
-
display: block;
|
|
14
|
-
font-family: var(--typography-fontFamily-sans);
|
|
15
|
-
padding-top: var(--spacing-64);
|
|
16
|
-
padding-bottom: var(--spacing-64);
|
|
17
|
-
}
|
|
18
|
-
.bd-tabs-subtitle{
|
|
19
|
-
font-size: var(--typography-body-regular-fontSize);
|
|
20
|
-
max-width: 500px;
|
|
21
|
-
text-align: center;
|
|
22
|
-
font-family: var(--typography-fontFamily-sans);
|
|
23
|
-
margin-top: var(--spacing-32);
|
|
24
|
-
margin-bottom: var(--spacing-32);
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
.bd-tab-button p {
|
|
28
|
-
margin-top: 1em;
|
|
29
|
-
margin-bottom: 1em;
|
|
30
|
-
}
|
|
31
|
-
.bd-tab-button:focus-visible,
|
|
32
|
-
.bd-find-out-more:focus-visible {
|
|
33
|
-
outline: var(--spacing-2) solid var(--bd-accesibility-focus);
|
|
34
|
-
outline-offset: var(--spacing-2);
|
|
35
|
-
border-radius: var(--space-2xs);
|
|
36
|
-
}
|
|
37
|
-
.bd-tabs-component .bd-left img {
|
|
38
|
-
max-width: 90%;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
.bd-card-container {
|
|
42
|
-
display: flex;
|
|
43
|
-
justify-content: space-between;
|
|
44
|
-
padding: 36px 0px;
|
|
45
|
-
border-radius: 5px;
|
|
46
|
-
margin-top: 10px;
|
|
47
|
-
margin: auto;
|
|
48
|
-
width: 50%;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.bd-card-container .bd-left {
|
|
52
|
-
flex: 1;
|
|
53
|
-
padding-right: 20px;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
.bd-card-container .bd-right {
|
|
57
|
-
flex: 1;
|
|
58
|
-
justify-content: center;
|
|
59
|
-
align-items: center;
|
|
60
|
-
padding: var(--spacing-0) var(--spacing-24);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
.bd-tabs-container {
|
|
64
|
-
display: flex;
|
|
65
|
-
justify-content: center;
|
|
66
|
-
margin-bottom: 40px;
|
|
67
|
-
flex-wrap: wrap;
|
|
68
|
-
border-bottom: 1px solid #e4f2ff;
|
|
69
|
-
margin: 0 auto;
|
|
70
|
-
margin-bottom: var(--spacing-32);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
.bd-tabs-container button {
|
|
74
|
-
color: #006eff;
|
|
75
|
-
border: 0;
|
|
76
|
-
padding: 9px;
|
|
77
|
-
display: flex;
|
|
78
|
-
gap: 10px;
|
|
79
|
-
align-items: center;
|
|
80
|
-
position: relative;
|
|
81
|
-
cursor: pointer;
|
|
82
|
-
font-size: 1.125em;
|
|
83
|
-
max-height: 55px;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
.bd-tabs-container button::after {
|
|
87
|
-
background: #006eff;
|
|
88
|
-
content: "";
|
|
89
|
-
height: 4px;
|
|
90
|
-
position: absolute;
|
|
91
|
-
left: 0;
|
|
92
|
-
bottom: 0;
|
|
93
|
-
width: 0;
|
|
94
|
-
transition: width 1s ease;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
.bd-tabs-container button.bd-selected::after {
|
|
98
|
-
width: 100%;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
.bd-tabs-container button.bd-selected {
|
|
102
|
-
color: black;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
.bd-tab-button {
|
|
106
|
-
display: inline-flex;
|
|
107
|
-
align-items: center;
|
|
108
|
-
justify-content: center;
|
|
109
|
-
gap: 8px;
|
|
110
|
-
background: none;
|
|
111
|
-
border: none;
|
|
112
|
-
padding: 10px;
|
|
113
|
-
cursor: pointer;
|
|
114
|
-
<!-- font-weight: bold; -->
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
.bd-tab-button img {
|
|
118
|
-
margin-right: 8px;
|
|
119
|
-
height: 30px;
|
|
120
|
-
width: 30px;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
.bd-tabs-component h2 {
|
|
124
|
-
margin-bottom: 75px;
|
|
125
|
-
max-width: 630px;
|
|
126
|
-
text-align: center;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
.bd-tabs-component {
|
|
130
|
-
display: flex;
|
|
131
|
-
flex-direction: column;
|
|
132
|
-
align-items: center;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
.bd-ul-privacy {
|
|
136
|
-
list-style: none;
|
|
137
|
-
padding-inline-start: 0px;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
.bd-find-out-more {
|
|
141
|
-
text-decoration: none;
|
|
142
|
-
background-color: white;
|
|
143
|
-
color: #006eff;
|
|
144
|
-
border: 0;
|
|
145
|
-
display: flex;
|
|
146
|
-
gap: 10px;
|
|
147
|
-
align-items: start;
|
|
148
|
-
position: relative;
|
|
149
|
-
cursor: pointer;
|
|
150
|
-
font-family: var(--typography-fontFamily-sans);
|
|
151
|
-
font-weight: var(--typography-fontWeight-semibold);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
.bd-find-out-more .bd-arrow svg {
|
|
155
|
-
width: 12px;
|
|
156
|
-
height: 12px;
|
|
157
|
-
position: relative;
|
|
158
|
-
top: 1.5px;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
.bd-right h3 {
|
|
162
|
-
font-size: var(--typography-heading-h4-fontSize);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
.bd-section-title {
|
|
166
|
-
font-family: var(--typography-fontFamily-sans);
|
|
167
|
-
font-weight: var(--typography-fontWeight-semibold);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/* ✅ Responsive Design */
|
|
171
|
-
@media (max-width: 1200px) {
|
|
172
|
-
.bd-tabs-component.bd-we-container {
|
|
173
|
-
max-width: 100%;
|
|
174
|
-
padding: 0 20px;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
@media (max-width: 992px) {
|
|
179
|
-
.bd-tabs-component .bd-card-container {
|
|
180
|
-
flex-direction: column;
|
|
181
|
-
width: 90%;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
.bd-tabs-component .bd-tabs-container {
|
|
185
|
-
flex-wrap: wrap;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
.bd-tabs-component .bd-tabs-container button picture img {
|
|
189
|
-
width: 24px;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
.bd-tabs-component .bd-card-container {
|
|
193
|
-
align-items: center;
|
|
194
|
-
text-align: center;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
.bd-tabs-component .bd-left {
|
|
198
|
-
width: 100%;
|
|
199
|
-
padding: 10px;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
.bd-tabs-component .bd-left img {
|
|
203
|
-
max-width: 50%;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
.bd-tabs-component .bd-right {
|
|
207
|
-
width: 100%;
|
|
208
|
-
padding: 10px;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
.bd-tabs-component.bd-we-container {
|
|
212
|
-
max-width: 100%;
|
|
213
|
-
padding-left: 30px;
|
|
214
|
-
padding-right: 30px;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
@media (max-width: 768px) {
|
|
219
|
-
.bd-card-container {
|
|
220
|
-
flex-direction: column;
|
|
221
|
-
width: 100%;
|
|
222
|
-
padding: 20px;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
.bd-section-title {
|
|
226
|
-
text-align: center;
|
|
227
|
-
font-size: 1.6em;
|
|
228
|
-
margin-bottom: 30px;
|
|
229
|
-
padding: 10px;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
.bd-right h3 {
|
|
233
|
-
text-align: center;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
.bd-tabs-component {
|
|
237
|
-
margin-top: 24px;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
.bd-tabs-container {
|
|
241
|
-
flex-direction: column;
|
|
242
|
-
align-items: center;
|
|
243
|
-
text-align: center;
|
|
244
|
-
width: 100%;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
.bd-tabs-container button {
|
|
248
|
-
font-size: 1.2em;
|
|
249
|
-
padding: 6px;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
.bd-tabs-component .bd-left img {
|
|
253
|
-
max-width: 100%;
|
|
254
|
-
height: auto;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
.bd-tabs-component .bd-right {
|
|
258
|
-
text-align: center;
|
|
259
|
-
padding: 10px;
|
|
260
|
-
text-align: left;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
.bd-find-out-more {
|
|
264
|
-
justify-content: center;
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
`;
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
import { LitElement, html } from "lit";
|
|
2
|
-
import { tokens } from "../../tokens/tokens.js";
|
|
3
|
-
import "../heading/heading.js";
|
|
4
|
-
import "../highlight/highlight.js";
|
|
5
|
-
import "../list/list-item/list-item.js";
|
|
6
|
-
import "../list/list.js";
|
|
7
|
-
import "../paragraph/paragraph.js";
|
|
8
|
-
import tabsCSS from "./tabsComponent.css.js";
|
|
9
|
-
|
|
10
|
-
class TabsComponent extends LitElement {
|
|
11
|
-
static properties = {
|
|
12
|
-
selectedTab: { type: Number }
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
constructor() {
|
|
16
|
-
super();
|
|
17
|
-
this.selectedTab = 0;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
selectTab(index) {
|
|
21
|
-
this.selectedTab = index;
|
|
22
|
-
this.requestUpdate();
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
render() {
|
|
26
|
-
const tabs = [
|
|
27
|
-
{
|
|
28
|
-
title : "Privacy Protection",
|
|
29
|
-
imageBase: "/assets/tabs-img1.png",
|
|
30
|
-
icon : "/assets/pic1.png"
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
title : "Identity Protection",
|
|
34
|
-
imageBase: "/assets/tabs-img2.png",
|
|
35
|
-
icon : "/assets/pic2.png"
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
title : "Device Protection",
|
|
39
|
-
imageBase: "/assets/tabs-img3.png",
|
|
40
|
-
icon : "/assets/pic3.png"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
title : "Financial Insurance",
|
|
44
|
-
imageBase: "/assets/tabs-img3.png",
|
|
45
|
-
icon : "/assets/pic3.png"
|
|
46
|
-
}
|
|
47
|
-
];
|
|
48
|
-
|
|
49
|
-
const content = [
|
|
50
|
-
{
|
|
51
|
-
heading : "Take back your family's digital privacy",
|
|
52
|
-
description: () => html`
|
|
53
|
-
<bd-list type="unordered" spacing="md" variant="default" orientation="vertical">
|
|
54
|
-
<bd-li kind="bullet" size="md">
|
|
55
|
-
<bd-p kind="small">Enjoy complete data privacy with
|
|
56
|
-
<strong>Bitdefender Premium VPN</strong>.</bd-p>
|
|
57
|
-
</bd-li>
|
|
58
|
-
<bd-li kind="bullet" size="md">
|
|
59
|
-
<bd-p kind="small">Escape intrusive ads and trackers with our advanced
|
|
60
|
-
<strong>Ad-Blocker</strong> and
|
|
61
|
-
<strong>Anti-Tracker</strong> features.</bd-p>
|
|
62
|
-
</bd-li>
|
|
63
|
-
<bd-li kind="bullet" size="md">
|
|
64
|
-
<bd-p kind="small">Shield yourself with robust
|
|
65
|
-
<strong>Webcam and Microphone Protection</strong>.</bd-p>
|
|
66
|
-
</bd-li>
|
|
67
|
-
</bd-list>`,
|
|
68
|
-
href: "#1"
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
heading : "Safe data. Safe you.",
|
|
72
|
-
description: () => html`
|
|
73
|
-
<bd-p kind="small">Get instant alerts for potential threats to your personal data and
|
|
74
|
-
finances.</bd-p>
|
|
75
|
-
<bd-p kind="small">Receive clear and concise advice on handling data breaches.</bd-p>
|
|
76
|
-
<bd-p kind="small">Reduce the risk of online ID theft by scanning your digital
|
|
77
|
-
footprint.</bd-p>`,
|
|
78
|
-
href: "#2"
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
heading : "We secure what you hold dear",
|
|
82
|
-
description: () => html`
|
|
83
|
-
<bd-p kind="small">Enjoy seamless security across all devices.</bd-p>
|
|
84
|
-
<bd-p kind="small">Protection from corrupt websites, risky downloads, and phishing
|
|
85
|
-
attempts.</bd-p>
|
|
86
|
-
<bd-p kind="small">Lightweight performance ensures smooth device operation.</bd-p>`,
|
|
87
|
-
href: "#3"
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
heading : "Financial Insurance",
|
|
91
|
-
description: () => html`
|
|
92
|
-
<bd-p kind="small">Enjoy seamless security across all devices.</bd-p>
|
|
93
|
-
<bd-p kind="small">Protection from corrupt websites, risky downloads, and phishing
|
|
94
|
-
attempts.</bd-p>
|
|
95
|
-
<bd-p kind="small">Lightweight performance ensures smooth device operation.</bd-p>`,
|
|
96
|
-
href: "#4"
|
|
97
|
-
}
|
|
98
|
-
];
|
|
99
|
-
|
|
100
|
-
const selectedTabData = tabs[this.selectedTab];
|
|
101
|
-
|
|
102
|
-
return html`
|
|
103
|
-
<div class="bd-tabs-component">
|
|
104
|
-
<bd-highlight highlight-text="family member">
|
|
105
|
-
Customized online protection for each family member - Smart, Private &
|
|
106
|
-
Safe
|
|
107
|
-
</bd-highlight>
|
|
108
|
-
<bd-p kind="regular" class="bd-tabs-subtitle">Your family is unique and so should be your online security. Our family protection plan adapts to each member's needs, offering the ideal mix of privacy, freedom, and safety.</bd-p>
|
|
109
|
-
<div class="bd-tabs-container">
|
|
110
|
-
${tabs.map(
|
|
111
|
-
(tab, index) => html`
|
|
112
|
-
<button
|
|
113
|
-
role="tab"
|
|
114
|
-
aria-selected="${this.selectedTab === index ? "true" : "false"}"
|
|
115
|
-
class=${this.selectedTab === index
|
|
116
|
-
? "bd-selected bd-tab-button"
|
|
117
|
-
: "bd-tab-button"}
|
|
118
|
-
@click=${() => this.selectTab(index)}
|
|
119
|
-
aria-controls="tab-content-${index}"
|
|
120
|
-
id="tab-${index}"
|
|
121
|
-
>
|
|
122
|
-
<img src="${tab.icon}" alt="${tab.title} Icon" />
|
|
123
|
-
<bd-p kind="small"><strong>${tab.title}</strong></bd-p>
|
|
124
|
-
</button>
|
|
125
|
-
`
|
|
126
|
-
)}
|
|
127
|
-
</div>
|
|
128
|
-
<div class="bd-card-container">
|
|
129
|
-
<div class="bd-left">
|
|
130
|
-
<picture>
|
|
131
|
-
${["webp", "png"].map((format) =>
|
|
132
|
-
["2000", "750"].map(
|
|
133
|
-
(width) => html`
|
|
134
|
-
<source
|
|
135
|
-
type="image/${format}"
|
|
136
|
-
srcset="
|
|
137
|
-
${selectedTabData.imageBase}?width=${width}&format=${format}&optimize=medium
|
|
138
|
-
"
|
|
139
|
-
media="${width === "2000" ? "(min-width: 600px)" : ""}"
|
|
140
|
-
/>
|
|
141
|
-
`
|
|
142
|
-
)
|
|
143
|
-
)}
|
|
144
|
-
<img
|
|
145
|
-
loading="lazy"
|
|
146
|
-
alt="${selectedTabData.title} Image"
|
|
147
|
-
src="${selectedTabData.imageBase}?width=750&format=png&optimize=medium"
|
|
148
|
-
/>
|
|
149
|
-
</picture>
|
|
150
|
-
</div>
|
|
151
|
-
<div class="bd-right">
|
|
152
|
-
<bd-h as="h3" id="tab-content-heading-${this.selectedTab}">
|
|
153
|
-
${content[this.selectedTab].heading}
|
|
154
|
-
</bd-h>
|
|
155
|
-
<div
|
|
156
|
-
id="tab-content-${this.selectedTab}"
|
|
157
|
-
aria-labelledby="tab-content-heading-${this.selectedTab}"
|
|
158
|
-
>
|
|
159
|
-
${content[this.selectedTab].description()}
|
|
160
|
-
</div>
|
|
161
|
-
<a
|
|
162
|
-
href="${content[this.selectedTab].href}"
|
|
163
|
-
class="bd-find-out-more"
|
|
164
|
-
aria-label="Find out more about ${content[this.selectedTab]
|
|
165
|
-
.heading}"
|
|
166
|
-
>
|
|
167
|
-
<bd-p kind="small">Find out more</bd-p>
|
|
168
|
-
<span class="bd-arrow">
|
|
169
|
-
<svg
|
|
170
|
-
width="14"
|
|
171
|
-
height="14"
|
|
172
|
-
viewBox="0 0 24 24"
|
|
173
|
-
fill="none"
|
|
174
|
-
stroke="currentColor"
|
|
175
|
-
stroke-width="3"
|
|
176
|
-
stroke-linecap="round"
|
|
177
|
-
stroke-linejoin="round"
|
|
178
|
-
>
|
|
179
|
-
<path d="M5 12h14"></path>
|
|
180
|
-
<path d="M12 5l7 7-7 7"></path>
|
|
181
|
-
</svg>
|
|
182
|
-
</span>
|
|
183
|
-
</a>
|
|
184
|
-
</div>
|
|
185
|
-
</div>
|
|
186
|
-
</div>
|
|
187
|
-
`;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
TabsComponent.styles = [tokens, tabsCSS];
|
|
192
|
-
|
|
193
|
-
customElements.define("bd-tabs-component", TabsComponent);
|