@repobit/dex-system-design 0.19.1 → 0.20.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 CHANGED
@@ -3,6 +3,37 @@
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.20.0](https://github.com/bitdefender/dex-core/compare/@repobit/dex-system-design@0.19.2...@repobit/dex-system-design@0.20.0) (2025-10-08)
7
+
8
+
9
+ ### Features
10
+
11
+ * **DEX-1001:** new version for tokens.css - previous was outdated ([97acf3a](https://github.com/bitdefender/dex-core/commit/97acf3a5002fdad340eaf73e7b79049073eb908e))
12
+
13
+
14
+ ### Bug Fixes
15
+
16
+ * **DEX-1003:** footer adjustments on tablets and new card components created ([f8d5cf5](https://github.com/bitdefender/dex-core/commit/f8d5cf5af9dbcf81dbd7bf6e307ce9af202e2aa9))
17
+ * **DEX-1003:** modified light carousel storybook due to images issue ([69224b1](https://github.com/bitdefender/dex-core/commit/69224b1c6eab9562e31b215ddc06039093e90b6b))
18
+ * **DEX-1003:** modified svg icons into inline svg ([12eb99b](https://github.com/bitdefender/dex-core/commit/12eb99b6652e214798876c24fa186da2db675a8c))
19
+ * **DEX-1003:** remove accordion-no-bg and merge with accordion-bg, add SVG inline icons ([cfbc2da](https://github.com/bitdefender/dex-core/commit/cfbc2da3a6879244d1e9d2db0c1da113e32e1ad3))
20
+ * **DEX-1003:** remove accordion-no-bg, merge with accordion-bg, add inline SVG icons ([2f35df4](https://github.com/bitdefender/dex-core/commit/2f35df4389cb3a42bb5c739653b3b513c876a031))
21
+ * **DEX-1003:** remove forgotten line from index.html ([57f203a](https://github.com/bitdefender/dex-core/commit/57f203a4cdbf2e8942663e08124d2950cd8149ea))
22
+ * **DEX-1003:** svg icons modified into svg in line + card components ([fc536e2](https://github.com/bitdefender/dex-core/commit/fc536e2e62d24cd2354d3e5d420e4e17856cbf9a))
23
+ * **DEX-1003:** token name updated to fix gap problems between quick links columns ([40a1375](https://github.com/bitdefender/dex-core/commit/40a1375172bec391a7144eb3e6045e65e064712d))
24
+ * **DEX-1003:** update footer stories ([b55074d](https://github.com/bitdefender/dex-core/commit/b55074d801bf4ca99c39b33360783013d1257198))
25
+ * **DEX-999:** new version for tokens (previous was outdated) ([d4d73fc](https://github.com/bitdefender/dex-core/commit/d4d73fcdafeff82c61a742711b11bd9c98d9636c))
26
+
27
+
28
+
29
+ ## [0.19.2](https://github.com/bitdefender/dex-core/compare/@repobit/dex-system-design@0.19.1...@repobit/dex-system-design@0.19.2) (2025-10-06)
30
+
31
+ **Note:** Version bump only for package @repobit/dex-system-design
32
+
33
+
34
+
35
+
36
+
6
37
  ## [0.19.1](https://github.com/bitdefender/dex-core/compare/@repobit/dex-system-design@0.19.0...@repobit/dex-system-design@0.19.1) (2025-10-02)
7
38
 
8
39
  **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.19.1",
3
+ "version": "0.20.0",
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",
@@ -17,7 +17,6 @@
17
17
  ],
18
18
  "exports": {
19
19
  "./accordion-bg": "./src/components/accordion/accordion-bg.js",
20
- "./accordion-no-bg": "./src/components/accordion/accordion-no-bg.js",
21
20
  "./accordion": "./src/components/accordion/accordion.js",
22
21
  "./anchor": "./src/components/anchor/anchor-nav.js",
23
22
  "./badge": "./src/components/badge/badge.js",
@@ -79,5 +78,5 @@
79
78
  "volta": {
80
79
  "node": "22.14.0"
81
80
  },
82
- "gitHead": "dbf063ce6cbe70f63fee6dd325d5659886e5fe13"
81
+ "gitHead": "a8089d8dbd8b06f741f5d710fbe98d70d1a56c7e"
83
82
  }
@@ -1,78 +1,89 @@
1
1
  import { css } from "lit";
2
2
 
3
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-500);
9
- --text-color-white: var(--color-neutral-0);
10
- --bd-accesibility-focus: var(--color-blue-500);
11
- display: block;
12
- }
4
+ @layer bd-components {
5
+ :host {
6
+ --background-card-grey: var(--color-neutral-25);
7
+ --border-card-grey: var(--color-neutral-50);
8
+ --border-card-green: var(--color-green-700);
9
+ --badge-background: var(--color-blue-500);
10
+ --text-color-white: var(--color-neutral-0);
11
+ --bd-accesibility-focus: var(--color-blue-500);
12
+ display: block;
13
+ }
13
14
 
14
- .bd-accordion-bg-item {
15
- margin-bottom: var(--spacing-16);
16
- border-radius: var(--spacing-8);
17
- background-color: var(--color-blue-50);
18
- overflow: hidden;
19
- transition: box-shadow 0.3s ease;
20
- }
15
+ .bd-accordion-bg-item {
16
+ margin-bottom: var(--spacing-16);
17
+ border-radius: var(--spacing-8);
18
+ background-color: var(--color-blue-50);
19
+ overflow: hidden;
20
+ transition: box-shadow 0.3s ease;
21
+ }
21
22
 
22
- .bd-accordion-bg-item:hover {
23
- .bd-accordion-bg-question-text {
24
- text-decoration-line: underline;
23
+ .bd-accordion-bg-item:hover {
24
+ .bd-accordion-bg-question-text {
25
+ text-decoration-line: underline;
26
+ }
25
27
  }
26
- }
27
28
 
28
- .bd-accordion-bg-question {
29
- cursor: pointer;
30
- display: flex;
31
- justify-content: flex-start;
32
- align-items: center;
33
- gap: var(--spacing-10);
34
- padding: var(--spacing-16);
35
- font-weight: bold;
36
- background-color: var(--color-blue-50);
37
- color: #333;
38
- transition: background-color 0.3s ease, color 0.3s ease;
39
- }
29
+ .bd-accordion-bg-question {
30
+ cursor: pointer;
31
+ display: flex;
32
+ justify-content: flex-start;
33
+ align-items: center;
34
+ gap: var(--spacing-10);
35
+ padding: var(--spacing-16);
36
+ font-weight: bold;
37
+ background-color: var(--color-blue-50);
38
+ color: #333;
39
+ transition: background-color 0.3s ease, color 0.3s ease;
40
+ }
40
41
 
41
- .bd-accordion-bg-header {
42
- margin-bottom: var(--spacing-32);
43
- }
42
+ .bd-accordion-bg-header {
43
+ margin-bottom: var(--spacing-32);
44
+ }
44
45
 
45
- .bd-accordion-bg-question:hover {
46
- color: #0073e6;
47
- }
46
+ .bd-accordion-bg-question:hover {
47
+ color: #0073e6;
48
+ }
48
49
 
49
- .bd-accordion-bg-item:focus-visible {
50
- outline: var(--spacing-2) solid var(--bd-accesibility-focus);
51
- outline-offset: var(--spacing-2);
52
- border-radius: var(--space-2xs);
53
- }
50
+ .bd-accordion-bg-item:focus-visible {
51
+ outline: var(--spacing-2) solid var(--bd-accesibility-focus);
52
+ outline-offset: var(--spacing-2);
53
+ border-radius: var(--space-2xs);
54
+ }
55
+
56
+ .bd-accordion-bg-item:focus {
57
+ .bd-accordion-bg-question-text {
58
+ font-weight: 600;
59
+ text-decoration-line: underline;
60
+ color: var(--color-blue-600);
61
+ text-decoration-thickness: var(--spacing-2);
62
+ }
63
+ }
54
64
 
55
- .bd-accordion-bg-item:focus {
56
65
  .bd-accordion-bg-question-text {
57
- font-weight: 600;
58
- text-decoration-line: underline;
59
- color: var(--color-blue-600);
60
- text-decoration-thickness: var(--spacing-2);
66
+ font-family: var(--typography-fontFamily-sans);
67
+ font-weight: var(--typography-fontWeight-semibold);
61
68
  }
62
- }
63
69
 
64
- .bd-accordion-bg-question-text {
65
- font-family: var(--typography-fontFamily-sans);
66
- font-weight: var(--typography-fontWeight-semibold);
67
- }
70
+ .bd-accordion-bg-title {
71
+ font-family: var(--typography-fontFamily-sans);
72
+ font-weight: var(--typography-fontWeight-semibold);
73
+ margin-left: auto;
74
+ margin-right: auto;
75
+ text-align: center;
76
+ }
68
77
 
69
- .bd-accordion-bg-title {
70
- font-family: var(--typography-fontFamily-sans);
71
- font-weight: var(--typography-fontWeight-semibold);
72
- margin-left: auto;
73
- margin-right: auto;
74
- text-align: center;
75
- }
78
+ .bd-accordion-bg-icon {
79
+ transition: transform 0.3s ease;
80
+ width: var(--spacing-14);
81
+ height: var(--spacing-14);
82
+ color: var(--color-blue-500);
83
+ text-align: center;
84
+ position: relative;
85
+ bottom: 1px;
86
+ }
76
87
 
77
88
  .bd-accordion-bg-icon {
78
89
  transition: transform 0.3s ease;
@@ -81,9 +92,16 @@ export default css`
81
92
  color: var(--color-blue-500);
82
93
  text-align: center;
83
94
  position: relative;
84
- bottom: 1px;
85
95
  }
86
96
 
97
+ .bd-accordion-bg-item:not(.open) .bd-accordion-bg-icon {
98
+ content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><rect x="6" width="2" height="14" fill="%23006DFF"/><rect x="14" y="6" width="2" height="14" transform="rotate(90 14 6)" fill="%23006DFF"/></svg>');
99
+ }
100
+
101
+ .bd-accordion-bg-item.open .bd-accordion-bg-icon {
102
+ content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><rect x="14" y="6" width="2" height="14" transform="rotate(90 14 6)" fill="%23006DFF"/></svg>');
103
+ }
104
+
87
105
  .bd-accordion-bg-answer {
88
106
  overflow: hidden;
89
107
  max-height: 0;
@@ -94,24 +112,64 @@ export default css`
94
112
  font-weight: var(--font-weight-sans-medium);
95
113
  }
96
114
 
97
- .bd-accordion-bg-item.open .bd-accordion-bg-answer {
98
- max-height: 1000px;
99
- opacity: 1;
100
- padding: var(--spacing-0) var(--spacing-40);
101
- }
102
115
 
103
- .bd-accordion-bg-answer > div {
104
- overflow: hidden;
105
- }
116
+ .bd-accordion-bg-answer > div {
117
+ overflow: hidden;
118
+ }
106
119
 
107
- .bd-accordion-bg-container {
108
- width: 90%;
109
- margin: auto;
110
- padding-top: var(--spacing-64);
111
- padding-bottom: var(--spacing-64);
112
- }
120
+ .bd-accordion-bg-container {
121
+ width: 90%;
122
+ margin: auto;
123
+ padding-top: var(--spacing-64);
124
+ padding-bottom: var(--spacing-64);
125
+ }
126
+
127
+ .bd-accordion-bg-link-noline {
128
+ text-decoration: none;
129
+ }
130
+
131
+ .test-accordion {
132
+ background-color: blue;
133
+ }
113
134
 
114
- .bd-accordion-bg-link-noline {
115
- text-decoration: none;
135
+ .test-accordion p {
136
+ font-size: 20px;
137
+ }
116
138
  }
139
+ .bd-accordion-bg-container.no-bg {
140
+ background: none;
141
+ }
142
+
143
+ .bd-accordion-bg-item.no-bg {
144
+ background-color: transparent;
145
+ border: none;
146
+ }
147
+
148
+ .bd-accordion-bg-item.no-bg .bd-accordion-bg-question {
149
+ background-color: transparent;
150
+ }
151
+
152
+ .bd-accordion-bg-item.no-bg .bd-accordion-bg-answer {
153
+ background-color: transparent;
154
+ padding: var(--spacing-0) var(--spacing-40);
155
+ }
156
+
157
+ .bd-accordion-bg-item.no-bg:hover {
158
+ background-color: transparent;
159
+ }
160
+
161
+ .bd-accordion-bg-item.no-bg:hover .bd-accordion-bg-question-text {
162
+ text-decoration-line: none;
163
+ }
164
+
165
+ .bd-accordion-bg-item:hover .bd-accordion-bg-question-text {
166
+ text-decoration-line: none;
167
+ }
168
+ .bd-accordion-bg-item:focus .bd-accordion-bg-question-text {
169
+ text-decoration-line: none;
170
+ }
171
+ .bd-accordion-bg-item.no-bg:focus .bd-accordion-bg-question-text {
172
+ text-decoration-line: none;
173
+ }
174
+
117
175
  `;
@@ -4,14 +4,20 @@ import accordionCSS from "./accordion-bg.css";
4
4
 
5
5
  class BdAccordionBg extends LitElement {
6
6
  static properties = {
7
- title: { type: String }
7
+ title: { type: String },
8
+ noBg : { type: Boolean, attribute: 'no-bg' }
8
9
  };
9
10
 
11
+ constructor() {
12
+ super();
13
+ this.noBg = false;
14
+ }
15
+
10
16
  static styles = [tokens, accordionCSS];
11
17
 
12
18
  render() {
13
19
  return html`
14
- <div class="bd-accordion-bg-container">
20
+ <div class="bd-accordion-bg-container ${this.noBg ? 'no-bg' : ''}">
15
21
  <div class="bd-accordion-bg-header">
16
22
  <h1 class="bd-accordion-bg-title">${this.title}</h1>
17
23
  </div>
@@ -24,13 +30,15 @@ class BdAccordionBg extends LitElement {
24
30
  class BdAccordionBgItem extends LitElement {
25
31
  static properties = {
26
32
  title: { type: String },
27
- open : { type: Boolean, reflect: true }
33
+ open : { type: Boolean, reflect: true },
34
+ noBg : { type: Boolean, attribute: 'no-bg' }
28
35
  };
29
36
 
30
37
  constructor() {
31
38
  super();
32
39
  this.title = "";
33
40
  this.open = false;
41
+ this.noBg = false;
34
42
  this.id = `accordion-${Math.random().toString(36)
35
43
  .substr(2, 9)}`;
36
44
  }
@@ -48,10 +56,18 @@ class BdAccordionBgItem extends LitElement {
48
56
  }
49
57
  }
50
58
 
59
+ /**
60
+ * @param {Event} e
61
+ */
62
+ #onSlot(e) {
63
+ const slot = e.currentTarget;
64
+ slot.classList.add('accordion-test');
65
+ }
66
+
51
67
  render() {
52
68
  return html`
53
69
  <div
54
- class="bd-accordion-bg-item ${this.open ? "open" : ""}"
70
+ class="bd-accordion-bg-item ${this.open ? "open" : ""} ${this.noBg ? 'no-bg' : ''}"
55
71
  role="button"
56
72
  aria-expanded="${this.open}"
57
73
  aria-controls="${this.id}"
@@ -60,7 +76,7 @@ class BdAccordionBgItem extends LitElement {
60
76
  @keydown=${this.handleKeyDown}
61
77
  >
62
78
  <div class="bd-accordion-bg-question">
63
- <span class="bd-accordion-bg-icon">${this.open ? "−" : "+"}</span>
79
+ <div class="bd-accordion-bg-icon"></div>
64
80
  <span class="bd-accordion-bg-question-text">${this.title}</span>
65
81
  </div>
66
82
  <div
@@ -69,7 +85,7 @@ class BdAccordionBgItem extends LitElement {
69
85
  role="region"
70
86
  aria-labelledby="${this.id}"
71
87
  >
72
- <slot></slot>
88
+ <slot @slotchange=${this.#onSlot}></slot>
73
89
  </div>
74
90
  </div>
75
91
  `;
@@ -0,0 +1,251 @@
1
+ // accordion-bg.stories.js
2
+
3
+ import { html } from 'lit';
4
+ import './accordion-bg.js';
5
+
6
+ export default {
7
+ title : 'Components/Accordion BG',
8
+ component : 'bd-accordion-bg',
9
+ subcomponents: { 'bd-accordion-bg-item': 'bd-accordion-bg-item' },
10
+ argTypes : {
11
+ title: {
12
+ control : 'text',
13
+ description: 'Title of the accordion section'
14
+ },
15
+ noBg: {
16
+ control : 'boolean',
17
+ description: 'Remove background from accordion items'
18
+ }
19
+ },
20
+ parameters: {
21
+ docs: {
22
+ description: {
23
+ component: 'A customizable accordion component with background options and accessibility features.'
24
+ }
25
+ }
26
+ }
27
+ };
28
+
29
+ const Template = ({ title, noBg }) => html`
30
+ <bd-accordion-bg title="${title}" ?no-bg="${noBg}">
31
+ <bd-accordion-bg-item title="How does Bitdefender Internet Security protect me?" ?no-bg="${noBg}">
32
+ <p>Bitdefender Internet Security provides the best protection against all e-threats, combining antimalware, e-mail, and web protection with firewall and privacy features.</p>
33
+ <p>It uses advanced behavioral detection to close the window of zero-day vulnerability and keeps you safe from ransomware, spyware, and advanced persistent threats.</p>
34
+ </bd-accordion-bg-item>
35
+
36
+ <bd-accordion-bg-item title="Does Bitdefender protect me against ransomware?" ?no-bg="${noBg}">
37
+ <p>Yes! Bitdefender Internet Security offers unbeatable ransomware protection by safeguarding your most important files from encryption by ransomware.</p>
38
+ <p>Our multi-layer ransomware protection includes:</p>
39
+ <ul>
40
+ <li>Behavioral detection of ransomware</li>
41
+ <li>Safe Files feature to protect important folders</li>
42
+ <li>Real-time protection against encryption attempts</li>
43
+ </ul>
44
+ </bd-accordion-bg-item>
45
+
46
+ <bd-accordion-bg-item title="Do I get a VPN with Bitdefender Internet Security?" ?no-bg="${noBg}">
47
+ <p>Bitdefender Internet Security includes a basic VPN with 200MB per day to protect your privacy when browsing on public Wi-Fi networks.</p>
48
+ <p>For unlimited VPN traffic, you can upgrade to Bitdefender Premium VPN or Bitdefender Total Security which includes unlimited VPN.</p>
49
+ </bd-accordion-bg-item>
50
+
51
+ <bd-accordion-bg-item title="Can I use Bitdefender on multiple devices?" ?no-bg="${noBg}">
52
+ <p>Yes, depending on your subscription. Bitdefender offers multi-device plans that allow you to protect:</p>
53
+ <ul>
54
+ <li>Windows computers</li>
55
+ <li>Mac computers</li>
56
+ <li>Android devices</li>
57
+ <li>iOS devices</li>
58
+ </ul>
59
+ </bd-accordion-bg-item>
60
+
61
+ <bd-accordion-bg-item title="How often are virus definitions updated?" ?no-bg="${noBg}">
62
+ <p>Bitdefender updates its virus definitions multiple times per day to ensure you're protected against the latest threats.</p>
63
+ <p>Our cloud-based threat intelligence network processes over 500 million queries daily, providing real-time protection against emerging threats.</p>
64
+ </bd-accordion-bg-item>
65
+ </bd-accordion-bg>
66
+ `;
67
+
68
+ export const Default = Template.bind({});
69
+ Default.args = {
70
+ title: 'Frequently Asked Questions',
71
+ noBg : false
72
+ };
73
+ Default.parameters = {
74
+ docs: {
75
+ description: {
76
+ story: 'Default accordion with background styling.'
77
+ }
78
+ }
79
+ };
80
+
81
+ export const NoBackground = Template.bind({});
82
+ NoBackground.args = {
83
+ title: 'Frequently Asked Questions',
84
+ noBg : true
85
+ };
86
+ NoBackground.parameters = {
87
+ docs: {
88
+ description: {
89
+ story: 'Accordion without background styling for cleaner, minimalist design.'
90
+ }
91
+ }
92
+ };
93
+
94
+ export const MixedBackground = () => html`
95
+ <bd-accordion-bg title="Mixed Background Accordion">
96
+ <bd-accordion-bg-item title="Item with background">
97
+ <p>This item has the default background styling.</p>
98
+ <p>It uses the blue background color as defined in the CSS.</p>
99
+ </bd-accordion-bg-item>
100
+
101
+ <bd-accordion-bg-item title="Item without background" no-bg>
102
+ <p>This item has no background styling.</p>
103
+ <p>It appears transparent and integrates seamlessly with the page background.</p>
104
+ </bd-accordion-bg-item>
105
+
106
+ <bd-accordion-bg-item title="Another item with background">
107
+ <p>This item returns to the default background styling.</p>
108
+ <p>You can mix and match background styles within the same accordion.</p>
109
+ </bd-accordion-bg-item>
110
+ </bd-accordion-bg>
111
+ `;
112
+ MixedBackground.parameters = {
113
+ docs: {
114
+ description: {
115
+ story: 'Accordion with mixed background styles - some items with background, some without.'
116
+ }
117
+ }
118
+ };
119
+
120
+ export const ContainerNoBackground = () => html`
121
+ <bd-accordion-bg title="Container without Background" no-bg>
122
+ <bd-accordion-bg-item title="First question">
123
+ <p>When the container has no-bg, all items inherit the transparent background unless specifically overridden.</p>
124
+ </bd-accordion-bg-item>
125
+
126
+ <bd-accordion-bg-item title="Second question">
127
+ <p>All items in this accordion have transparent backgrounds because the container has no-bg set.</p>
128
+ </bd-accordion-bg-item>
129
+
130
+ <bd-accordion-bg-item title="Third question">
131
+ <p>This creates a clean, minimalist look that blends with the page background.</p>
132
+ </bd-accordion-bg-item>
133
+ </bd-accordion-bg>
134
+ `;
135
+ ContainerNoBackground.parameters = {
136
+ docs: {
137
+ description: {
138
+ story: 'Accordion container with no-bg attribute, making all items transparent by default.'
139
+ }
140
+ }
141
+ };
142
+
143
+ export const WithCustomContent = () => html`
144
+ <bd-accordion-bg title="Product Features">
145
+ <bd-accordion-bg-item title="Advanced Threat Defense">
146
+ <div>
147
+ <h4>Multi-layer Protection</h4>
148
+ <p>Our advanced threat defense uses multiple layers of protection:</p>
149
+ <ul>
150
+ <li>Behavioral detection</li>
151
+ <li>Machine learning algorithms</li>
152
+ <li>Cloud-based analysis</li>
153
+ <li>Real-time scanning</li>
154
+ </ul>
155
+ <p><strong>System Requirements:</strong> Windows 10/11, 2GB RAM, 2.5GB free space</p>
156
+ </div>
157
+ </bd-accordion-bg-item>
158
+
159
+ <bd-accordion-bg-item title="Privacy Protection" no-bg>
160
+ <div>
161
+ <h4>Complete Privacy Suite</h4>
162
+ <p>Protect your online privacy with our comprehensive tools:</p>
163
+ <div style="display: flex; gap: 20px; margin-top: 15px;">
164
+ <div>
165
+ <h5>VPN</h5>
166
+ <p>200MB/day included</p>
167
+ </div>
168
+ <div>
169
+ <h5>Password Manager</h5>
170
+ <p>Secure credential storage</p>
171
+ </div>
172
+ <div>
173
+ <h5>Webcam Protection</h5>
174
+ <p>Block unauthorized access</p>
175
+ </div>
176
+ </div>
177
+ </div>
178
+ </bd-accordion-bg-item>
179
+
180
+ <bd-accordion-bg-item title="Performance Impact">
181
+ <div>
182
+ <h4>Lightweight Design</h4>
183
+ <p>Bitdefender is designed to have minimal impact on system performance:</p>
184
+ <table style="width: 100%; border-collapse: collapse; margin-top: 10px;">
185
+ <tr>
186
+ <th style="text-align: left; padding: 8px; border-bottom: 1px solid #ccc;">Resource</th>
187
+ <th style="text-align: left; padding: 8px; border-bottom: 1px solid #ccc;">Usage</th>
188
+ </tr>
189
+ <tr>
190
+ <td style="padding: 8px; border-bottom: 1px solid #ccc;">CPU</td>
191
+ <td style="padding: 8px; border-bottom: 1px solid #ccc;">&lt; 2% average</td>
192
+ </tr>
193
+ <tr>
194
+ <td style="padding: 8px; border-bottom: 1px solid #ccc;">Memory</td>
195
+ <td style="padding: 8px; border-bottom: 1px solid #ccc;">~150MB</td>
196
+ </tr>
197
+ <tr>
198
+ <td style="padding: 8px;">Disk</td>
199
+ <td style="padding: 8px;">&lt; 500MB</td>
200
+ </tr>
201
+ </table>
202
+ </div>
203
+ </bd-accordion-bg-item>
204
+ </bd-accordion-bg>
205
+ `;
206
+ WithCustomContent.parameters = {
207
+ docs: {
208
+ description: {
209
+ story: 'Accordion with rich custom content including lists, tables, and formatted text.'
210
+ }
211
+ }
212
+ };
213
+
214
+ export const AccessibilityDemo = () => html`
215
+ <bd-accordion-bg title="Accessibility Features">
216
+ <bd-accordion-bg-item title="Keyboard Navigation">
217
+ <p>This accordion supports full keyboard navigation:</p>
218
+ <ul>
219
+ <li>Use <kbd>Tab</kbd> to navigate between accordion items</li>
220
+ <li>Press <kbd>Enter</kbd> or <kbd>Space</kbd> to toggle items</li>
221
+ <li>Proper ARIA attributes for screen readers</li>
222
+ </ul>
223
+ </bd-accordion-bg-item>
224
+
225
+ <bd-accordion-bg-item title="Screen Reader Support">
226
+ <p>All accordion items include proper ARIA attributes:</p>
227
+ <ul>
228
+ <li><code>role="button"</code> for the clickable header</li>
229
+ <li><code>aria-expanded</code> to indicate state</li>
230
+ <li><code>aria-controls</code> to associate with content</li>
231
+ <li><code>role="region"</code> for the content area</li>
232
+ </ul>
233
+ </bd-accordion-bg-item>
234
+
235
+ <bd-accordion-bg-item title="Focus Management">
236
+ <p>Focus indicators are clearly visible for keyboard users:</p>
237
+ <ul>
238
+ <li>Clear focus outline</li>
239
+ <li>High contrast colors</li>
240
+ <li>Smooth transitions</li>
241
+ </ul>
242
+ </bd-accordion-bg-item>
243
+ </bd-accordion-bg>
244
+ `;
245
+ AccessibilityDemo.parameters = {
246
+ docs: {
247
+ description: {
248
+ story: 'Demonstration of accessibility features including keyboard navigation and ARIA attributes.'
249
+ }
250
+ }
251
+ };