@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.
Files changed (38) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/package.json +4 -4
  3. package/src/components/accordion/accordion-bg.css.js +12 -6
  4. package/src/components/accordion/accordion-bg.js +108 -28
  5. package/src/components/accordion/accordion-bg.stories.js +123 -3
  6. package/src/components/accordion/accordion.css.js +25 -15
  7. package/src/components/accordion/accordion.js +38 -29
  8. package/src/components/awards/awards-icon.js +4 -4
  9. package/src/components/awards/awards.css.js +4 -3
  10. package/src/components/awards/awards.js +88 -148
  11. package/src/components/awards/awards.stories.js +11 -51
  12. package/src/components/badge/badge.css.js +0 -17
  13. package/src/components/badge/badge.js +5 -2
  14. package/src/components/footer/footer.css.js +0 -17
  15. package/src/components/footer/footer.js +23 -17
  16. package/src/components/icons/analysis-icon.js +25 -0
  17. package/src/components/icons/arrow-down-icon.js +28 -0
  18. package/src/components/icons/arrow-up-icon.js +28 -0
  19. package/src/components/icons/av-comparatives-icon.js +34 -0
  20. package/src/components/icons/best-brands-icon.js +36 -0
  21. package/src/components/icons/close-icon.js +28 -0
  22. package/src/components/icons/family-icon.js +31 -0
  23. package/src/components/icons/globe-icon.js +28 -0
  24. package/src/components/icons/guide-icon.js +28 -0
  25. package/src/components/icons/icons.stories.js +226 -0
  26. package/src/components/icons/individual-icon.js +29 -0
  27. package/src/components/icons/laurel-icon.js +39 -0
  28. package/src/components/icons/machine-learning-icon.js +26 -0
  29. package/src/components/icons/minus-icon.js +6 -4
  30. package/src/components/icons/pc-mag-2024-icon.js +35 -0
  31. package/src/components/icons/pc-mag-business-icon.js +35 -0
  32. package/src/components/icons/pc-mag-icon.js +35 -0
  33. package/src/components/icons/pc-mag-readers-icon.js +34 -0
  34. package/src/components/icons/plus-icon.js +6 -4
  35. package/src/components/icons/top-product-icon.js +35 -0
  36. package/src/components/light-carousel/light-carousel.stories.js +523 -76
  37. package/src/components/paragraph/paragraph.css.js +1 -0
  38. 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.31",
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.27",
74
- "@repobit/dex-store-elements": "1.4.19",
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": "d19ae77c661138e6155e5ae7868663c85a294712"
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-12);
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-12) 0;
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-12)
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: 90%;
189
+ // width: 100%;
183
190
  margin: auto;
184
- padding-top: var(--spacing-64);
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 : { type: Boolean, reflect: true, attribute: "no-bg" }
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 = false;
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
- <h1 class="bd-accordion-bg-title">${this.title}</h1>
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 : { type: Boolean, reflect: true },
36
- noBg : { type: Boolean, reflect: true, attribute: "no-bg" }
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 = false;
43
- this.noBg = false;
44
- const id = Math.random().toString(36)
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
- /** @type {string} */
49
- this._panelId = `acc-bg-p-${id}`;
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
- static styles = [tokens, accordionCSS];
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
- render() {
127
+ _renderTerms() {
75
128
  return html`
76
- <div
77
- class="bd-accordion-bg-item ${this.open ? "open" : ""} ${this.noBg ? "no-bg" : ""}"
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
- ${this.open
91
- ? html`<bd-minus-icon size="16" color="#006DFF"></minus-icon>`
92
- : html`<bd-plus-icon size="16" color="#006DFF"></plus-icon>`
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-8));
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-8));
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(--bd-acc-title-color-expanded, var(--color-neutral-900));
92
+ color: var(--color-blue-500);
93
93
  }
94
94
 
95
95
  .header[aria-expanded="false"] .title {
96
- color: var(--bd-acc-title-color-collapsed, var(--color-neutral-900));
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
- display: block;
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
- box-sizing: border-box;
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-900);
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-16);
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: inherit;
244
- gap: var(--spacing-6);
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
- ${this.open
57
- ? html`<bd-minus-icon size="16" color="#006DFF"></minus-icon>`
58
- : html`<bd-plus-icon size="16" color="#006DFF"></plus-icon>`
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 : { type: String },
75
- /**
76
- * `small` system requirements, terms (12px triggers, compact panels; Figma accordeon_small).
77
- * `default` neutral-25 section background.
78
- * `default-blue` same accordion as default, section bg `--color-blue-50`.
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
- return html`
94
+ const content = html`
97
95
  ${this.title
98
- ? html`<h2 class="section-title">${this.title}</h2>`
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`<p class="user-guide-link">
103
- <a href=${this.guideHref}>
104
- ${this.guideIcon
105
- ? html`<span class="icon"
106
- ><img src=${this.guideIcon} alt="" /></span
107
- >`
108
- : ""}
109
- ${this.guideLabel}
110
- </a>
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, html, css } from "lit";
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