@repobit/dex-system-design 0.23.62 → 0.23.63

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,13 @@
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.63](https://github.com/bitdefender/dex-core/compare/@repobit/dex-system-design@0.23.62...@repobit/dex-system-design@0.23.63) (2026-07-02)
7
+
8
+ ### Bug Fixes
9
+
10
+ * **DEX-1014:** css adjustments for cards4 component
11
+
12
+
6
13
  ## [0.23.62](https://github.com/bitdefender/dex-core/compare/@repobit/dex-system-design@0.23.61...@repobit/dex-system-design@0.23.62) (2026-07-01)
7
14
 
8
15
  ### Bug Fixes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@repobit/dex-system-design",
3
- "version": "0.23.62",
3
+ "version": "0.23.63",
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.58",
74
- "@repobit/dex-store-elements": "1.4.50",
73
+ "@repobit/dex-store": "1.3.59",
74
+ "@repobit/dex-store-elements": "1.4.51",
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": "4742b085d57e9d3c35cfe88763e7bfff91bff6ec"
91
+ "gitHead": "0bc5274bdbaef4a05431b2df49170b11d375aa59"
92
92
  }
@@ -5,14 +5,17 @@ export default css`
5
5
  display: block;
6
6
  --background-card-grey: var(--color-neutral-25);
7
7
  --border-card-grey: var(--color-neutral-50);
8
- padding-top: var(--spacing-32);
9
- padding-bottom: var(--spacing-32);
10
- }
11
- ::slotted([slot="icon"]) {
12
- width: 48px !important;
13
- height: 48px !important;
14
- flex-shrink: 0;
15
- }
8
+ padding-top: var(--spacing-64);
9
+ padding-bottom: var(--spacing-64);
10
+ max-width: 1290px;
11
+ }
12
+
13
+ ::slotted([slot="icon"]) {
14
+ width: 48px !important;
15
+ height: 48px !important;
16
+ flex-shrink: 0;
17
+ }
18
+
16
19
  .bd-section-title-s {
17
20
  font-family: var(--typography-fontFamily-sans);
18
21
  font-weight: var(--typography-fontWeight-semibold);
@@ -77,26 +80,23 @@ export default css`
77
80
  display: flex;
78
81
  flex-direction: column;
79
82
  align-items: start;
80
- justify-content: center;
83
+ justify-content: flex-start;
81
84
  text-align: start;
82
85
  transition: transform 0.2s ease-in-out;
83
- min-height: 135px;
84
86
  position: relative;
85
87
  z-index: 2;
86
88
  scroll-snap-align: start;
87
89
  font-family: var(--typography-fontFamily-sans);
90
+ box-sizing: border-box;
88
91
  }
89
92
 
90
- /* Stiluri pentru carduri fără conținut (doar icon + titlu) */
91
93
  .bd-light-box-no-content {
92
94
  justify-content: center !important;
93
95
  align-items: center !important;
94
96
  text-align: center !important;
95
- min-height: 200px;
96
97
  gap: var(--spacing-32);
97
98
  }
98
99
 
99
- /* Stiluri pentru aliniere center */
100
100
  .bd-light-box-center {
101
101
  align-items: center !important;
102
102
  justify-content: center !important;
@@ -111,7 +111,6 @@ export default css`
111
111
  text-align: start;
112
112
  }
113
113
 
114
- /* Titlu pentru carduri fără conținut */
115
114
  .bd-light-title-no-content h3 {
116
115
  margin: var(--spacing-0) !important;
117
116
  font-size: var(--heading-small) !important;
@@ -141,7 +140,6 @@ export default css`
141
140
  width: var(--spacing-44);
142
141
  }
143
142
 
144
- /* Iconiță pentru carduri fără conținut */
145
143
  .bd-light-box-no-content .bd-light-icon-s {
146
144
  margin: 0 !important;
147
145
  bottom: 0;
@@ -157,14 +155,13 @@ export default css`
157
155
  position: relative;
158
156
  }
159
157
 
160
- /* Header pentru carduri fără conținut */
161
158
  .bd-light-box-no-content .bd-light-box-header-s {
162
159
  align-items: center !important;
163
160
  margin: 0 !important;
164
161
  }
165
162
 
166
163
  .bd-light-box-header-center {
167
- align-items: center !important;
164
+ align-items: center !important;
168
165
  padding-bottom: var(--spacing-16);
169
166
  }
170
167
 
@@ -174,7 +171,6 @@ export default css`
174
171
  gap: var(--spacing-4, 4px);
175
172
  }
176
173
 
177
- /* Container titlu pentru carduri fără conținut */
178
174
  .bd-light-title-no-content {
179
175
  margin: 0 !important;
180
176
  width: 100%;
@@ -186,9 +182,11 @@ export default css`
186
182
  width: 380px;
187
183
  padding: 1.5em;
188
184
  }
185
+
189
186
  .bd-light-box-s h3 {
190
187
  font-size: 1.1em;
191
188
  }
189
+
192
190
  .bd-light-box-s p {
193
191
  font-size: 0.95em;
194
192
  }
@@ -223,11 +221,6 @@ export default css`
223
221
  .bd-light-box-s {
224
222
  width: 100%;
225
223
  padding: 1em;
226
- min-height: 300px;
227
- }
228
-
229
- .bd-light-box-no-content {
230
- min-height: 250px;
231
224
  }
232
225
 
233
226
  .bd-light-box-s h3 {
@@ -10,24 +10,86 @@ class Card extends LitElement {
10
10
 
11
11
  constructor() {
12
12
  super();
13
- this.title = "";
13
+ this.title = "";
14
+ this._resizeObserver = null;
15
+ }
16
+
17
+ _isVisible() {
18
+ return this.offsetWidth > 0 && this.offsetHeight > 0;
19
+ }
20
+
21
+ _equalizeHeights() {
22
+ if (!this._isVisible()) return;
23
+
24
+ const items = Array.from(this.querySelectorAll("bd-card-item"));
25
+ if (!items.length) return;
26
+
27
+ items.forEach(item => {
28
+ const box = item.renderRoot?.querySelector(".bd-light-box-s");
29
+ if (box) {
30
+ box.style.height = "auto";
31
+ box.style.minHeight = "0";
32
+ }
33
+ });
34
+
35
+ requestAnimationFrame(() => {
36
+ let maxH = 0;
37
+ items.forEach(item => {
38
+ const box = item.renderRoot?.querySelector(".bd-light-box-s");
39
+ if (!box) return;
40
+ const h = box.getBoundingClientRect().height;
41
+ if (h > maxH) maxH = h;
42
+ });
43
+
44
+ if (maxH > 0) {
45
+ items.forEach(item => {
46
+ const box = item.renderRoot?.querySelector(".bd-light-box-s");
47
+ if (box) {
48
+ box.style.height = `${maxH}px`;
49
+ box.style.minHeight = `${maxH}px`;
50
+ }
51
+ });
52
+ }
53
+ });
54
+ }
55
+
56
+ async firstUpdated() {
57
+ if (document.fonts?.ready) {
58
+ await document.fonts.ready;
59
+ }
60
+
61
+ await new Promise(r => requestAnimationFrame(() => requestAnimationFrame(r)));
62
+ this._equalizeHeights();
63
+
64
+ const track = this.renderRoot.querySelector(".bd-light-carousel-track-s");
65
+ if (track) {
66
+ this._resizeObserver = new ResizeObserver(() => {
67
+ this._equalizeHeights();
68
+ });
69
+ this._resizeObserver.observe(track);
70
+ }
71
+ }
72
+
73
+ disconnectedCallback() {
74
+ super.disconnectedCallback();
75
+ this._resizeObserver?.disconnect();
14
76
  }
15
77
 
16
78
  render() {
17
79
  return html`
18
- <section class="bd-light-carousel-s">
19
- ${this.title
20
- ? html`
21
- <div class="bd-header-light-carousel-s">
22
- <bd-h as="h1" class="bd-section-title-s">${this.title}</bd-h>
23
- </div>
24
- `
25
- : null}
26
- <div class="bd-light-carousel-track-s">
27
- <slot></slot>
28
- </div>
29
- </section>
30
- `;
80
+ <section class="bd-light-carousel-s">
81
+ ${this.title
82
+ ? html`
83
+ <div class="bd-header-light-carousel-s">
84
+ <bd-h as="h1" class="bd-section-title-s">${this.title}</bd-h>
85
+ </div>
86
+ `
87
+ : null}
88
+ <div class="bd-light-carousel-track-s">
89
+ <slot @slotchange=${() => this._equalizeHeights()}></slot>
90
+ </div>
91
+ </section>
92
+ `;
31
93
  }
32
94
  }
33
95
 
@@ -41,7 +103,7 @@ class CardItem extends LitElement {
41
103
  constructor() {
42
104
  super();
43
105
  this.title = "";
44
- this.icon = "";
106
+ this.icon = "";
45
107
  this.align = "start";
46
108
  }
47
109
 
@@ -79,13 +141,13 @@ class CardItem extends LitElement {
79
141
  const hasContent = this._hasContent();
80
142
 
81
143
  return html`
82
- <div class="bd-light-box-s ${isCentered ? 'bd-light-box-center' : ''} ${!hasContent ? 'bd-light-box-no-content' : ''}">
83
- <div class="bd-light-box-header-s ${isCentered ? 'bd-light-box-header-center' : ''}">
144
+ <div class="bd-light-box-s ${isCentered ? "bd-light-box-center" : ""} ${!hasContent ? "bd-light-box-no-content" : ""}">
145
+ <div class="bd-light-box-header-s ${isCentered ? "bd-light-box-header-center" : ""}">
84
146
  ${this._renderIcon()}
85
147
  </div>
86
148
  ${this.title
87
149
  ? html`
88
- <div class="bd-light-title-badge-wrapper-s ${!hasContent ? 'bd-light-title-no-content' : ''}">
150
+ <div class="bd-light-title-badge-wrapper-s ${!hasContent ? "bd-light-title-no-content" : ""}">
89
151
  <bd-h as="h5" fontWeight="700">${this.title}</bd-h>
90
152
  </div>
91
153
  `
@@ -96,7 +158,7 @@ class CardItem extends LitElement {
96
158
  }
97
159
  }
98
160
 
99
- Card.styles = [tokens, carouselCSS];
161
+ Card.styles = [tokens, carouselCSS];
100
162
  CardItem.styles = [tokens, carouselCSS];
101
163
 
102
164
  customElements.define("bd-card-item", CardItem);
@@ -26,9 +26,10 @@ export default {
26
26
  ### Usage
27
27
  \`\`\`html
28
28
  <bd-card-section title="Why Bitdefender">
29
- <bd-card-item title="AI Protection" align="center">
29
+ <bd-card-item title="AI Protectionn" align="center">
30
30
  <bd-individual-icon slot="icon" width="32" height="32" color="#006DFF"></bd-individual-icon>
31
31
  <bd-p>Powered by machine learning.</bd-p>
32
+ <bd-p>Powered by machine learning.</bd-p>
32
33
  </bd-card-item>
33
34
  </bd-card-section>
34
35
  \`\`\`