@repobit/dex-system-design 0.23.31 → 0.23.33
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 +14 -0
- package/package.json +4 -4
- package/src/components/accordion/accordion-bg.css.js +12 -6
- package/src/components/accordion/accordion-bg.js +108 -28
- package/src/components/accordion/accordion-bg.stories.js +123 -3
- package/src/components/accordion/accordion.css.js +25 -15
- package/src/components/accordion/accordion.js +38 -29
- package/src/components/awards/awards-icon.js +4 -4
- package/src/components/awards/awards.css.js +4 -3
- package/src/components/awards/awards.js +88 -148
- package/src/components/awards/awards.stories.js +11 -51
- package/src/components/badge/badge.css.js +0 -17
- package/src/components/badge/badge.js +5 -2
- package/src/components/footer/footer.css.js +0 -17
- package/src/components/footer/footer.js +23 -17
- package/src/components/icons/analysis-icon.js +25 -0
- package/src/components/icons/arrow-down-icon.js +28 -0
- package/src/components/icons/arrow-up-icon.js +28 -0
- package/src/components/icons/av-comparatives-icon.js +34 -0
- package/src/components/icons/best-brands-icon.js +36 -0
- package/src/components/icons/close-icon.js +28 -0
- package/src/components/icons/family-icon.js +31 -0
- package/src/components/icons/globe-icon.js +28 -0
- package/src/components/icons/guide-icon.js +28 -0
- package/src/components/icons/icons.stories.js +226 -0
- package/src/components/icons/individual-icon.js +29 -0
- package/src/components/icons/laurel-icon.js +39 -0
- package/src/components/icons/machine-learning-icon.js +26 -0
- package/src/components/icons/minus-icon.js +6 -4
- package/src/components/icons/pc-mag-2024-icon.js +35 -0
- package/src/components/icons/pc-mag-business-icon.js +35 -0
- package/src/components/icons/pc-mag-icon.js +35 -0
- package/src/components/icons/pc-mag-readers-icon.js +34 -0
- package/src/components/icons/plus-icon.js +6 -4
- package/src/components/icons/top-product-icon.js +35 -0
- package/src/components/light-carousel/light-carousel.stories.js +523 -76
- package/src/components/paragraph/paragraph.css.js +1 -0
- package/src/components/paragraph/paragraph.js +34 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,20 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [0.23.33](https://github.com/bitdefender/dex-core/compare/@repobit/dex-system-design@0.23.32...@repobit/dex-system-design@0.23.33) (2026-05-21)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **DEX-1014:** refactor accordion and replace static SVG assets
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## [0.23.32](https://github.com/bitdefender/dex-core/compare/@repobit/dex-system-design@0.23.31...@repobit/dex-system-design@0.23.32) (2026-05-18)
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* **DEX-1014:** css adjustment for alignment - accordion
|
|
18
|
+
|
|
19
|
+
|
|
6
20
|
## [0.23.31](https://github.com/bitdefender/dex-core/compare/@repobit/dex-system-design@0.23.30...@repobit/dex-system-design@0.23.31) (2026-05-14)
|
|
7
21
|
|
|
8
22
|
**Note:** Version bump only for package @repobit/dex-system-design
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@repobit/dex-system-design",
|
|
3
|
-
"version": "0.23.
|
|
3
|
+
"version": "0.23.33",
|
|
4
4
|
"description": "Design system based on Web Components.",
|
|
5
5
|
"author": "Iordache Matei Cezar <miordache@bitdefender.com>",
|
|
6
6
|
"homepage": "https://github.com/bitdefender/dex-core#readme",
|
|
@@ -70,8 +70,8 @@
|
|
|
70
70
|
"url": "https://github.com/bitdefender/dex-core/issues"
|
|
71
71
|
},
|
|
72
72
|
"dependencies": {
|
|
73
|
-
"@repobit/dex-store": "1.3.
|
|
74
|
-
"@repobit/dex-store-elements": "1.4.
|
|
73
|
+
"@repobit/dex-store": "1.3.29",
|
|
74
|
+
"@repobit/dex-store-elements": "1.4.21",
|
|
75
75
|
"lit": "^3.3.2"
|
|
76
76
|
},
|
|
77
77
|
"devDependencies": {
|
|
@@ -88,5 +88,5 @@
|
|
|
88
88
|
"volta": {
|
|
89
89
|
"node": "24.14.0"
|
|
90
90
|
},
|
|
91
|
-
"gitHead": "
|
|
91
|
+
"gitHead": "33f284d019667909f6437039a84f0301f485c95a"
|
|
92
92
|
}
|
|
@@ -12,7 +12,7 @@ export default css`
|
|
|
12
12
|
|
|
13
13
|
:host(bd-accordion-bg-item) {
|
|
14
14
|
display: block;
|
|
15
|
-
margin-bottom: var(--spacing-
|
|
15
|
+
margin-bottom: var(--spacing-16);
|
|
16
16
|
padding: 0 var(--spacing-16);
|
|
17
17
|
box-sizing: border-box;
|
|
18
18
|
background-color: var(--color-blue-50);
|
|
@@ -51,6 +51,13 @@ export default css`
|
|
|
51
51
|
box-shadow: var(--focus-outline-primary);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
::slotted(bd-p) {
|
|
55
|
+
padding-bottom: var(--spacing-16);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
::slotted(bd-p:last-child) {
|
|
59
|
+
padding-bottom: 0;
|
|
60
|
+
}
|
|
54
61
|
.bd-accordion-bg-item {
|
|
55
62
|
margin-bottom: 0;
|
|
56
63
|
border-radius: 0;
|
|
@@ -67,7 +74,7 @@ export default css`
|
|
|
67
74
|
align-items: flex-start;
|
|
68
75
|
gap: var(--spacing-12);
|
|
69
76
|
width: 100%;
|
|
70
|
-
padding: var(--spacing-
|
|
77
|
+
padding: var(--spacing-16) 0;
|
|
71
78
|
margin: 0;
|
|
72
79
|
border: none;
|
|
73
80
|
font: inherit;
|
|
@@ -165,7 +172,7 @@ export default css`
|
|
|
165
172
|
display: block;
|
|
166
173
|
max-height: 5000px;
|
|
167
174
|
opacity: 1;
|
|
168
|
-
padding: var(--spacing-0) var(--spacing-0) var(--spacing-
|
|
175
|
+
padding: var(--spacing-0) var(--spacing-0) var(--spacing-16)
|
|
169
176
|
calc(var(--icon-sm-size) + var(--spacing-12));
|
|
170
177
|
}
|
|
171
178
|
|
|
@@ -179,10 +186,9 @@ export default css`
|
|
|
179
186
|
}
|
|
180
187
|
|
|
181
188
|
.bd-accordion-bg-container {
|
|
182
|
-
width:
|
|
189
|
+
// width: 100%;
|
|
183
190
|
margin: auto;
|
|
184
|
-
padding
|
|
185
|
-
padding-bottom: var(--spacing-64);
|
|
191
|
+
padding: var(--spacing-64) var(--spacing-32) var(--spacing-64) var(--spacing-32)
|
|
186
192
|
}
|
|
187
193
|
|
|
188
194
|
.bd-accordion-bg-container.no-bg {
|
|
@@ -1,27 +1,56 @@
|
|
|
1
1
|
import { LitElement, html } from "lit";
|
|
2
2
|
import { tokens } from "../../tokens/tokens.js";
|
|
3
|
+
import "../heading/heading.js";
|
|
3
4
|
import "../icons/minus-icon.js";
|
|
4
5
|
import "../icons/plus-icon.js";
|
|
6
|
+
import "../paragraph/paragraph.js";
|
|
5
7
|
import accordionCSS from "./accordion-bg.css.js";
|
|
8
|
+
import { accordionItem, accordionSection } from "./accordion.css.js";
|
|
6
9
|
|
|
7
10
|
class BdAccordionBg extends LitElement {
|
|
8
11
|
static properties = {
|
|
9
|
-
title: { type: String },
|
|
10
|
-
noBg
|
|
12
|
+
title : { type: String },
|
|
13
|
+
noBg : { type: Boolean, reflect: true, attribute: "no-bg" },
|
|
14
|
+
_variant: { state: true }
|
|
11
15
|
};
|
|
12
16
|
|
|
13
17
|
constructor() {
|
|
14
18
|
super();
|
|
15
|
-
this.noBg
|
|
19
|
+
this.noBg = false;
|
|
20
|
+
this._variant = "default";
|
|
16
21
|
}
|
|
17
22
|
|
|
18
|
-
static styles = [tokens, accordionCSS];
|
|
23
|
+
static styles = [tokens, accordionCSS, accordionSection];
|
|
24
|
+
|
|
25
|
+
connectedCallback() {
|
|
26
|
+
super.connectedCallback();
|
|
27
|
+
Promise.resolve().then(() => this._detectVariant());
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
_detectVariant() {
|
|
31
|
+
let el = this.parentElement;
|
|
32
|
+
while (el) {
|
|
33
|
+
if (el.classList.contains("faq")) {
|
|
34
|
+
this._variant = "faq";
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (
|
|
38
|
+
el.classList.contains("terms-of-use") ||
|
|
39
|
+
el.classList.contains("system-requirements")
|
|
40
|
+
) {
|
|
41
|
+
this._variant = "terms-of-use";
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
el = el.parentElement;
|
|
45
|
+
}
|
|
46
|
+
this._variant = "default";
|
|
47
|
+
}
|
|
19
48
|
|
|
20
49
|
render() {
|
|
21
50
|
return html`
|
|
22
|
-
<div class="bd-accordion-bg-container ${this.noBg ? "no-bg" : ""}">
|
|
51
|
+
<div class="bd-accordion-bg-container ${this.noBg ? "no-bg" : ""}${this._variant}">
|
|
23
52
|
<div class="bd-accordion-bg-header">
|
|
24
|
-
<
|
|
53
|
+
<bd-h as="h2" class="bd-accordion-bg-title">${this.title}</bd-h>
|
|
25
54
|
</div>
|
|
26
55
|
<slot></slot>
|
|
27
56
|
</div>
|
|
@@ -31,32 +60,56 @@ class BdAccordionBg extends LitElement {
|
|
|
31
60
|
|
|
32
61
|
class BdAccordionBgItem extends LitElement {
|
|
33
62
|
static properties = {
|
|
34
|
-
title: { type: String },
|
|
35
|
-
open
|
|
36
|
-
noBg
|
|
63
|
+
title : { type: String },
|
|
64
|
+
open : { type: Boolean, reflect: true },
|
|
65
|
+
noBg : { type: Boolean, reflect: true, attribute: "no-bg" },
|
|
66
|
+
_variant: { state: true }
|
|
37
67
|
};
|
|
38
68
|
|
|
39
69
|
constructor() {
|
|
40
70
|
super();
|
|
41
|
-
this.title
|
|
42
|
-
this.open
|
|
43
|
-
this.noBg
|
|
44
|
-
|
|
71
|
+
this.title = "";
|
|
72
|
+
this.open = false;
|
|
73
|
+
this.noBg = false;
|
|
74
|
+
this._variant = "default";
|
|
75
|
+
const id = Math.random().toString(36)
|
|
45
76
|
.slice(2, 11);
|
|
46
|
-
/** @type {string} */
|
|
47
77
|
this._headerId = `acc-bg-h-${id}`;
|
|
48
|
-
|
|
49
|
-
|
|
78
|
+
this._panelId = `acc-bg-p-${id}`;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
static styles = [tokens, accordionCSS, accordionItem];
|
|
82
|
+
|
|
83
|
+
connectedCallback() {
|
|
84
|
+
super.connectedCallback();
|
|
85
|
+
Promise.resolve().then(() => this._detectVariant());
|
|
50
86
|
}
|
|
51
87
|
|
|
52
|
-
|
|
88
|
+
_detectVariant() {
|
|
89
|
+
let el = this.parentElement;
|
|
90
|
+
while (el) {
|
|
91
|
+
if (el.classList.contains("faq")) {
|
|
92
|
+
this._variant = "faq";
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (
|
|
96
|
+
el.classList.contains("terms-of-use") ||
|
|
97
|
+
el.classList.contains("system-requirements")
|
|
98
|
+
) {
|
|
99
|
+
this._variant = "terms-of-use";
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
el = el.parentElement;
|
|
103
|
+
}
|
|
104
|
+
this._variant = "default";
|
|
105
|
+
}
|
|
53
106
|
|
|
54
107
|
toggleItem() {
|
|
55
108
|
this.open = !this.open;
|
|
56
109
|
}
|
|
57
110
|
|
|
58
111
|
_onTriggerFocusIn() {
|
|
59
|
-
const btn = this.renderRoot?.querySelector(".bd-accordion-bg-question");
|
|
112
|
+
const btn = this.renderRoot?.querySelector(".bd-accordion-bg-question, .header");
|
|
60
113
|
if (!btn) return;
|
|
61
114
|
requestAnimationFrame(() => {
|
|
62
115
|
requestAnimationFrame(() => {
|
|
@@ -71,11 +124,33 @@ class BdAccordionBgItem extends LitElement {
|
|
|
71
124
|
this.removeAttribute("data-bd-acc-focus");
|
|
72
125
|
}
|
|
73
126
|
|
|
74
|
-
|
|
127
|
+
_renderTerms() {
|
|
75
128
|
return html`
|
|
76
|
-
<
|
|
77
|
-
|
|
129
|
+
<button
|
|
130
|
+
type="button"
|
|
131
|
+
class="header"
|
|
132
|
+
aria-expanded="${this.open}"
|
|
133
|
+
aria-controls="${this._panelId}"
|
|
134
|
+
@click=${this.toggleItem}
|
|
135
|
+
@focusin=${this._onTriggerFocusIn}
|
|
136
|
+
@focusout=${this._onTriggerFocusOut}
|
|
78
137
|
>
|
|
138
|
+
<span class="toggle" aria-hidden="true">
|
|
139
|
+
${this.open
|
|
140
|
+
? html`<bd-minus-icon size="16" color="#006DFF"></bd-minus-icon>`
|
|
141
|
+
: html`<bd-plus-icon size="16" color="#006DFF"></bd-plus-icon>`}
|
|
142
|
+
</span>
|
|
143
|
+
<span class="title">${this.title}</span>
|
|
144
|
+
</button>
|
|
145
|
+
<div id="${this._panelId}" class="content" ?hidden=${!this.open}>
|
|
146
|
+
<slot></slot>
|
|
147
|
+
</div>
|
|
148
|
+
`;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
_renderDefault() {
|
|
152
|
+
return html`
|
|
153
|
+
<div class="bd-accordion-bg-item ${this.open ? "open" : ""} ${this.noBg ? "no-bg" : ""}">
|
|
79
154
|
<button
|
|
80
155
|
type="button"
|
|
81
156
|
id="${this._headerId}"
|
|
@@ -86,12 +161,11 @@ class BdAccordionBgItem extends LitElement {
|
|
|
86
161
|
@focusin=${this._onTriggerFocusIn}
|
|
87
162
|
@focusout=${this._onTriggerFocusOut}
|
|
88
163
|
>
|
|
89
|
-
<span class="bd-accordion-bg-icon" aria-hidden="true">
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
</span>
|
|
164
|
+
<span class="bd-accordion-bg-icon" aria-hidden="true">
|
|
165
|
+
${this.open
|
|
166
|
+
? html`<bd-minus-icon size="16" color="#006DFF"></bd-minus-icon>`
|
|
167
|
+
: html`<bd-plus-icon size="16" color="#006DFF"></bd-plus-icon>`}
|
|
168
|
+
</span>
|
|
95
169
|
<span class="bd-accordion-bg-question-text">${this.title}</span>
|
|
96
170
|
</button>
|
|
97
171
|
<div
|
|
@@ -106,7 +180,13 @@ class BdAccordionBgItem extends LitElement {
|
|
|
106
180
|
</div>
|
|
107
181
|
`;
|
|
108
182
|
}
|
|
183
|
+
|
|
184
|
+
render() {
|
|
185
|
+
return this._variant === "terms-of-use"
|
|
186
|
+
? this._renderTerms()
|
|
187
|
+
: this._renderDefault();
|
|
188
|
+
}
|
|
109
189
|
}
|
|
110
190
|
|
|
111
191
|
customElements.define("bd-accordion-bg", BdAccordionBg);
|
|
112
|
-
customElements.define("bd-accordion-bg-item", BdAccordionBgItem);
|
|
192
|
+
customElements.define("bd-accordion-bg-item", BdAccordionBgItem);
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { html } from "lit";
|
|
2
|
+
import "../accordion/accordion.js";
|
|
3
|
+
import "../divider/divider-horizontal.js";
|
|
4
|
+
import "../list/list-item/list-item.js";
|
|
5
|
+
import "../list/list.js";
|
|
6
|
+
import "../paragraph/paragraph.js";
|
|
2
7
|
import "./accordion-bg.js";
|
|
3
8
|
|
|
4
9
|
export default {
|
|
@@ -16,9 +21,6 @@ Two Lit web components for building FAQ-style accordion sections with an optiona
|
|
|
16
21
|
<bd-accordion-bg-item title="What is Bitdefender?">
|
|
17
22
|
<p>Bitdefender is a global cybersecurity leader...</p>
|
|
18
23
|
</bd-accordion-bg-item>
|
|
19
|
-
<bd-accordion-bg-item title="How do I renew my subscription?">
|
|
20
|
-
<p>Log in to Bitdefender Central and go to My Subscriptions...</p>
|
|
21
|
-
</bd-accordion-bg-item>
|
|
22
24
|
</bd-accordion-bg>
|
|
23
25
|
\`\`\`
|
|
24
26
|
|
|
@@ -43,6 +45,124 @@ Two Lit web components for building FAQ-style accordion sections with an optiona
|
|
|
43
45
|
};
|
|
44
46
|
|
|
45
47
|
|
|
48
|
+
// ─── Toate 3 variantele pe aceeasi pagina ─────────────────────────────────────
|
|
49
|
+
|
|
50
|
+
export const AllVariants = {
|
|
51
|
+
name : "FAQ + Terms of Use + System Requirements",
|
|
52
|
+
render: () => html`
|
|
53
|
+
|
|
54
|
+
<!-- FAQ -->
|
|
55
|
+
<div class="accordion faq block">
|
|
56
|
+
<bd-accordion-bg title="Questions? Answers." id="anchor-1-section">
|
|
57
|
+
<bd-accordion-bg-item title="How does Bitdefender Internet Security protect me?">
|
|
58
|
+
<bd-p kind="small">Bitdefender Internet Security provides the best protection through multiple layers of security:</bd-p>
|
|
59
|
+
<bd-list type="unordered" spacing="md" variant="default" orientation="vertical">
|
|
60
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">Advanced threat detection using artificial intelligence</bd-p></bd-li>
|
|
61
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">Real-time protection against viruses, malware, and ransomware</bd-p></bd-li>
|
|
62
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">Secure browsing with anti-phishing technology</bd-p></bd-li>
|
|
63
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">Firewall protection for network security</bd-p></bd-li>
|
|
64
|
+
</bd-list>
|
|
65
|
+
<bd-p kind="small">All these features work together to provide comprehensive protection for your devices.</bd-p>
|
|
66
|
+
</bd-accordion-bg-item>
|
|
67
|
+
|
|
68
|
+
<bd-accordion-bg-item title="Does Bitdefender protect me against ransomware?">
|
|
69
|
+
<bd-p kind="small">Yes! Bitdefender Internet Security offers unbeatable ransomware protection with:</bd-p>
|
|
70
|
+
<bd-list type="unordered" spacing="md" variant="default" orientation="vertical">
|
|
71
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">Multi-layer ransomware protection</bd-p></bd-li>
|
|
72
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">Behavioral detection to stop unknown threats</bd-p></bd-li>
|
|
73
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">Safe Files feature to protect your important documents</bd-p></bd-li>
|
|
74
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">Real-time monitoring of file encryption attempts</bd-p></bd-li>
|
|
75
|
+
</bd-list>
|
|
76
|
+
</bd-accordion-bg-item>
|
|
77
|
+
|
|
78
|
+
<bd-accordion-bg-item title="Do I get a VPN with Bitdefender Internet Security?">
|
|
79
|
+
<bd-p kind="small">Bitdefender Internet Security includes a basic VPN with 200MB per day. Additional features include:</bd-p>
|
|
80
|
+
<bd-list type="unordered" spacing="md" variant="default" orientation="vertical">
|
|
81
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">200MB daily VPN traffic for secure browsing</bd-p></bd-li>
|
|
82
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">Automatic activation on unsecured Wi-Fi networks</bd-p></bd-li>
|
|
83
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">Banking encryption for financial transactions</bd-p></bd-li>
|
|
84
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">Option to upgrade to unlimited VPN</bd-p></bd-li>
|
|
85
|
+
</bd-list>
|
|
86
|
+
</bd-accordion-bg-item>
|
|
87
|
+
|
|
88
|
+
<bd-accordion-bg-item title="What devices are supported?">
|
|
89
|
+
<bd-p kind="small">Bitdefender Internet Security supports a wide range of devices:</bd-p>
|
|
90
|
+
<bd-list type="unordered" spacing="md" variant="default" orientation="vertical">
|
|
91
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">Windows 10, 11 (32-bit and 64-bit)</bd-p></bd-li>
|
|
92
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">macOS 10.12 or later</bd-p></bd-li>
|
|
93
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">Android 5.0 or later</bd-p></bd-li>
|
|
94
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">iOS 12 or later</bd-p></bd-li>
|
|
95
|
+
</bd-list>
|
|
96
|
+
</bd-accordion-bg-item>
|
|
97
|
+
|
|
98
|
+
<bd-accordion-bg-item title="System requirements">
|
|
99
|
+
<bd-p kind="small">Minimum system requirements for optimal performance:</bd-p>
|
|
100
|
+
<bd-list type="unordered" spacing="md" variant="default" orientation="vertical">
|
|
101
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">1GB RAM minimum (2GB recommended)</bd-p></bd-li>
|
|
102
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">2.5GB available hard disk space</bd-p></bd-li>
|
|
103
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">Internet connection for activation and updates</bd-p></bd-li>
|
|
104
|
+
<bd-li kind="bullet" size="md"><bd-p kind="small">Intel Core 2 Duo processor or equivalent</bd-p></bd-li>
|
|
105
|
+
</bd-list>
|
|
106
|
+
</bd-accordion-bg-item>
|
|
107
|
+
</bd-accordion-bg>
|
|
108
|
+
</div>
|
|
109
|
+
|
|
110
|
+
<!-- Terms of Use -->
|
|
111
|
+
<div class="accordion terms-of-use block">
|
|
112
|
+
<bd-accordion-section title="Terms of use">
|
|
113
|
+
<bd-accordion-item title="Auto renewal terms" open>
|
|
114
|
+
<bd-p kind="small">Your subscription automatically begins at the purchase date;</bd-p>
|
|
115
|
+
<bd-p kind="small">By subscribing, you are purchasing a recurring subscription which will automatically renew;</bd-p>
|
|
116
|
+
<bd-p kind="small">The Bitdefender Auto Renewal Plan is designed to save you time, effort, and minimize your vulnerability risk by extending your subscription automatically before you run out of protection.</bd-p>
|
|
117
|
+
</bd-accordion-item>
|
|
118
|
+
|
|
119
|
+
<bd-accordion-item title="Here is what the Bitdefender Auto Renewal Plan means for you">
|
|
120
|
+
<bd-p kind="small"><a href="#">Here is what the Bitdefender Auto Renewal Plan means for you</a></bd-p>
|
|
121
|
+
</bd-accordion-item>
|
|
122
|
+
|
|
123
|
+
<bd-accordion-item title="Affirmative consent">
|
|
124
|
+
<bd-p kind="small"><a href="#">Affirmative consent</a></bd-p>
|
|
125
|
+
</bd-accordion-item>
|
|
126
|
+
|
|
127
|
+
<bd-accordion-item title="How to cancel + email address cancelation support">
|
|
128
|
+
<bd-p kind="small"><a href="#">How to cancel + email address cancelation support</a></bd-p>
|
|
129
|
+
</bd-accordion-item>
|
|
130
|
+
</bd-accordion-section>
|
|
131
|
+
</div>
|
|
132
|
+
|
|
133
|
+
<bd-divider-horizontal width="95%"></bd-divider-horizontal>
|
|
134
|
+
|
|
135
|
+
<!-- System Requirements -->
|
|
136
|
+
<div class="accordion system-requirements block">
|
|
137
|
+
<bd-accordion-section title="System Requirements" guide-icon="src/assets/user_guide.png" guide-label="User guide >" guide-href="#">
|
|
138
|
+
<bd-accordion-item title="Bitdefender Parental Control" open>
|
|
139
|
+
<bd-p kind="small">
|
|
140
|
+
<strong>Windows™ Operating Systems</strong><br />
|
|
141
|
+
Microsoft Windows 7 (all versions) with Service Pack 1 (SP 1) or later.
|
|
142
|
+
</bd-p>
|
|
143
|
+
<bd-p kind="small">
|
|
144
|
+
<strong>Mac® Operating Systems</strong><br />
|
|
145
|
+
macOS X Yosemite (10.10) or later
|
|
146
|
+
</bd-p>
|
|
147
|
+
<bd-p kind="small">
|
|
148
|
+
<strong>Android™ Operating Systems</strong><br />
|
|
149
|
+
Android 5.0 or later
|
|
150
|
+
</bd-p>
|
|
151
|
+
<bd-p kind="small">
|
|
152
|
+
<strong>iOS Operating Systems</strong><br />
|
|
153
|
+
Android 5.0 or later
|
|
154
|
+
</bd-p>
|
|
155
|
+
</bd-accordion-item>
|
|
156
|
+
|
|
157
|
+
<bd-accordion-item title="Bitdefender Central">
|
|
158
|
+
<bd-p kind="small">Bitdefender Central</bd-p>
|
|
159
|
+
</bd-accordion-item>
|
|
160
|
+
</bd-accordion-section>
|
|
161
|
+
</div>
|
|
162
|
+
`
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
|
|
46
166
|
// ─── Default ─────────────────────────────────────────────────────────────────
|
|
47
167
|
|
|
48
168
|
export const Default = {
|
|
@@ -8,7 +8,7 @@ import { css } from "lit";
|
|
|
8
8
|
export const accordionItem = css`
|
|
9
9
|
:host {
|
|
10
10
|
display: block;
|
|
11
|
-
margin-bottom: var(--bd-acc-item-margin-bottom, var(--spacing-
|
|
11
|
+
margin-bottom: var(--bd-acc-item-margin-bottom, var(--spacing-16));
|
|
12
12
|
box-sizing: border-box;
|
|
13
13
|
border-radius: var(--radius-sm);
|
|
14
14
|
}
|
|
@@ -80,7 +80,7 @@ export const accordionItem = css`
|
|
|
80
80
|
var(--typography-fontWeight-semibold)
|
|
81
81
|
);
|
|
82
82
|
line-height: var(--bd-acc-title-line-height, var(--typography-lineHeight-normal));
|
|
83
|
-
margin-bottom: var(--bd-acc-header-margin-bottom, var(--spacing-
|
|
83
|
+
margin-bottom: var(--bd-acc-header-margin-bottom, var(--spacing-16));
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
.header:focus-visible {
|
|
@@ -89,11 +89,11 @@ export const accordionItem = css`
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
.header[aria-expanded="true"] .title {
|
|
92
|
-
color: var(--
|
|
92
|
+
color: var(--color-blue-500);
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
.header[aria-expanded="false"] .title {
|
|
96
|
-
color: var(--
|
|
96
|
+
color: var(--color-blue-500);
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
:host-context(bd-accordion-section[variant="small"])
|
|
@@ -175,7 +175,12 @@ export const accordionItem = css`
|
|
|
175
175
|
.content[hidden] {
|
|
176
176
|
display: none !important;
|
|
177
177
|
}
|
|
178
|
-
|
|
178
|
+
::slotted(bd-p) {
|
|
179
|
+
padding-bottom: var(--spacing-16);
|
|
180
|
+
}
|
|
181
|
+
::slotted(bd-p:last-child) {
|
|
182
|
+
padding-bottom: 0px;
|
|
183
|
+
}
|
|
179
184
|
::slotted(p) {
|
|
180
185
|
margin-top: 0;
|
|
181
186
|
margin-bottom: var(--bd-acc-panel-paragraph-gap, var(--spacing-16));
|
|
@@ -192,11 +197,16 @@ export const accordionItem = css`
|
|
|
192
197
|
`;
|
|
193
198
|
|
|
194
199
|
export const accordionSection = css`
|
|
195
|
-
:host {
|
|
196
|
-
|
|
200
|
+
// :host {
|
|
201
|
+
// display: block;
|
|
202
|
+
// background-color: var(--bd-acc-section-bg, var(--color-neutral-25));
|
|
203
|
+
// padding: var(--bd-acc-section-padding, var(--spacing-32));
|
|
204
|
+
// box-sizing: border-box;
|
|
205
|
+
// }
|
|
206
|
+
.bd-accordion-section-container {
|
|
197
207
|
background-color: var(--bd-acc-section-bg, var(--color-neutral-25));
|
|
198
208
|
padding: var(--bd-acc-section-padding, var(--spacing-32));
|
|
199
|
-
|
|
209
|
+
border-radius: var(--bd-acc-section-radius, var(--radius-lg));
|
|
200
210
|
}
|
|
201
211
|
|
|
202
212
|
:host([variant="small"]) {
|
|
@@ -220,7 +230,7 @@ export const accordionSection = css`
|
|
|
220
230
|
font-weight: var(--typography-fontWeight-bold);
|
|
221
231
|
font-size: var(--typography-body-regular-fontSize);
|
|
222
232
|
line-height: var(--typography-lineHeight-normal);
|
|
223
|
-
color: var(--color-neutral-
|
|
233
|
+
color: var(--color-neutral-1000);
|
|
224
234
|
}
|
|
225
235
|
|
|
226
236
|
:host([variant="small"]) .section-title {
|
|
@@ -229,19 +239,19 @@ export const accordionSection = css`
|
|
|
229
239
|
}
|
|
230
240
|
|
|
231
241
|
.user-guide-link {
|
|
232
|
-
margin-top: var(--spacing-
|
|
233
|
-
font-family: var(--typography-fontFamily-sans);
|
|
234
|
-
font-size: var(--typography-fontSize-xs);
|
|
242
|
+
margin-top: var(--spacing-32);
|
|
235
243
|
color: var(--color-blue-600);
|
|
236
|
-
margin-left: var(--spacing-8);
|
|
237
244
|
}
|
|
238
245
|
|
|
239
246
|
.user-guide-link a {
|
|
240
247
|
display: inline-flex;
|
|
241
248
|
align-items: center;
|
|
242
249
|
text-decoration: none;
|
|
243
|
-
color:
|
|
244
|
-
gap: var(--spacing-
|
|
250
|
+
color: var(--color-blue-500);
|
|
251
|
+
gap: var(--spacing-12);
|
|
252
|
+
font-family: Arial, Helvetica, sans-serif;
|
|
253
|
+
font-size: var(--typography-fontSize-xs);
|
|
254
|
+
|
|
245
255
|
}
|
|
246
256
|
|
|
247
257
|
.user-guide-link a:focus-visible {
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { LitElement, html } from "lit";
|
|
2
2
|
import { tokens } from "../../tokens/tokens.js";
|
|
3
|
+
import "../heading/heading.js";
|
|
3
4
|
import "../icons/minus-icon.js";
|
|
4
5
|
import "../icons/plus-icon.js";
|
|
6
|
+
import "../paragraph/paragraph.js";
|
|
5
7
|
import { accordionItem, accordionSection } from "./accordion.css.js";
|
|
6
8
|
|
|
7
9
|
export class BdAccordionItem extends LitElement {
|
|
@@ -52,12 +54,11 @@ export class BdAccordionItem extends LitElement {
|
|
|
52
54
|
@focusin=${this._onTriggerFocusIn}
|
|
53
55
|
@focusout=${this._onTriggerFocusOut}
|
|
54
56
|
>
|
|
55
|
-
<span class="toggle" aria-hidden="true">
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
</span>
|
|
57
|
+
<span class="toggle" aria-hidden="true">
|
|
58
|
+
${this.open
|
|
59
|
+
? html`<bd-minus-icon size="16" color="#006DFF"></bd-minus-icon>`
|
|
60
|
+
: html`<bd-plus-icon size="16" color="#006DFF"></bd-plus-icon>`}
|
|
61
|
+
</span>
|
|
61
62
|
<span class="title">${this.title}</span>
|
|
62
63
|
</button>
|
|
63
64
|
<div id="${this._panelId}" class="content" ?hidden=${!this.open}>
|
|
@@ -71,16 +72,12 @@ export class BdAccordionSection extends LitElement {
|
|
|
71
72
|
static styles = [tokens, accordionSection];
|
|
72
73
|
|
|
73
74
|
static properties = {
|
|
74
|
-
title
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
variant : { type: String, reflect: true },
|
|
81
|
-
guideIcon : { type: String, reflect: true, attribute: "guide-icon" },
|
|
82
|
-
guideLabel: { type: String, reflect: true, attribute: "guide-label" },
|
|
83
|
-
guideHref : { type: String, reflect: true, attribute: "guide-href" }
|
|
75
|
+
title : { type: String },
|
|
76
|
+
variant : { type: String, reflect: true },
|
|
77
|
+
guideIcon : { type: String, reflect: true, attribute: "guide-icon" },
|
|
78
|
+
guideLabel : { type: String, reflect: true, attribute: "guide-label" },
|
|
79
|
+
guideHref : { type: String, reflect: true, attribute: "guide-href" },
|
|
80
|
+
noContainer: { type: Boolean, attribute: "no-container" } // ← ADĂUGĂ
|
|
84
81
|
};
|
|
85
82
|
|
|
86
83
|
constructor() {
|
|
@@ -90,29 +87,41 @@ export class BdAccordionSection extends LitElement {
|
|
|
90
87
|
this.guideIcon = "";
|
|
91
88
|
this.guideLabel = "";
|
|
92
89
|
this.guideHref = "#";
|
|
90
|
+
this.noContainer = false; // ← ADĂUGĂ
|
|
93
91
|
}
|
|
94
92
|
|
|
95
93
|
render() {
|
|
96
|
-
|
|
94
|
+
const content = html`
|
|
97
95
|
${this.title
|
|
98
|
-
? html`<
|
|
96
|
+
? html`<bd-h as="h6" fontWeight="700" paddingBottom="var(--spacing-32)" class="section-title">${this.title}</bd-h>`
|
|
99
97
|
: ""}
|
|
100
98
|
<slot></slot>
|
|
101
99
|
${this.guideLabel
|
|
102
|
-
? html
|
|
103
|
-
<
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
</
|
|
111
|
-
</p>`
|
|
100
|
+
? html`
|
|
101
|
+
<bd-p kind="small" class="user-guide-link">
|
|
102
|
+
<a href=${this.guideHref}>
|
|
103
|
+
${this.guideIcon
|
|
104
|
+
? html`<bd-plus-icon size="16" color="#006DFF"></bd-plus-icon>`
|
|
105
|
+
: ""}
|
|
106
|
+
${this.guideLabel}
|
|
107
|
+
</a>
|
|
108
|
+
</bd-p>`
|
|
112
109
|
: ""}
|
|
113
110
|
`;
|
|
111
|
+
|
|
112
|
+
// Dacă nu vrei container, returnează direct contentul
|
|
113
|
+
if (this.noContainer) {
|
|
114
|
+
return content;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Altfel, înfășoară într-un div cu clasă pentru background
|
|
118
|
+
return html`
|
|
119
|
+
<div class="bd-accordion-section-container">
|
|
120
|
+
${content}
|
|
121
|
+
</div>
|
|
122
|
+
`;
|
|
114
123
|
}
|
|
115
124
|
}
|
|
116
125
|
|
|
117
126
|
customElements.define("bd-accordion-item", BdAccordionItem);
|
|
118
|
-
customElements.define("bd-accordion-section", BdAccordionSection);
|
|
127
|
+
customElements.define("bd-accordion-section", BdAccordionSection);
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { LitElement,
|
|
1
|
+
import { LitElement, css, html } from "lit";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Optional `src` (image URL) with `label` for alt text, or default slot for inline SVG.
|
|
5
5
|
*/
|
|
6
6
|
class BdIcon extends LitElement {
|
|
7
7
|
static properties = {
|
|
8
|
-
src: { type: String },
|
|
9
|
-
label: { type: String },
|
|
10
|
-
width: { type: String },
|
|
8
|
+
src : { type: String },
|
|
9
|
+
label : { type: String },
|
|
10
|
+
width : { type: String },
|
|
11
11
|
height: { type: String }
|
|
12
12
|
};
|
|
13
13
|
|