@repobit/dex-system-design 0.19.2 → 0.21.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.
Files changed (75) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/package.json +2 -3
  3. package/src/components/Button/button.stories.js +51 -51
  4. package/src/components/accordion/accordion-bg.css.js +168 -102
  5. package/src/components/accordion/accordion-bg.js +13 -5
  6. package/src/components/accordion/accordion-bg.stories.js +281 -0
  7. package/src/components/accordion/accordion-light.stories.js +241 -0
  8. package/src/components/anchor/anchor.stories.js +24 -22
  9. package/src/components/back/back.css.js +56 -0
  10. package/src/components/back/back.js +39 -0
  11. package/src/components/back/back.stories.js +184 -0
  12. package/src/components/badge/badge.css.js +44 -6
  13. package/src/components/badge/badge.js +40 -2
  14. package/src/components/badge/badge.stories.js +3 -10
  15. package/src/components/breadcrumb/breadcrumb.css.js +98 -0
  16. package/src/components/breadcrumb/breadcrumb.js +136 -0
  17. package/src/components/breadcrumb/breadcrumb.stories.js +109 -0
  18. package/src/components/cards/card.css.js +245 -0
  19. package/src/components/cards/card.js +80 -0
  20. package/src/components/cards/card.stories.js +512 -0
  21. package/src/components/carousel/carousel.css.js +51 -36
  22. package/src/components/carousel/carousel.js +0 -1
  23. package/src/components/carousel/carousel.stories.js +21 -17
  24. package/src/components/display/display.css.js +68 -0
  25. package/src/components/display/display.js +26 -0
  26. package/src/components/display/display.stories.js +339 -0
  27. package/src/components/divider/divider-horizontal.js +1 -1
  28. package/src/components/footer/footer-links-group.css.js +1 -1
  29. package/src/components/footer/footer-links-group.js +3 -3
  30. package/src/components/footer/footer-lp.stories.js +26 -61
  31. package/src/components/footer/footer-nav-menu.css.js +9 -10
  32. package/src/components/footer/footer.css.js +95 -8
  33. package/src/components/footer/footer.js +31 -65
  34. package/src/components/footer/footer.stories.js +165 -48
  35. package/src/components/header/header.js +11 -11
  36. package/src/components/header/header.stories.js +36 -4
  37. package/src/components/heading/heading.css.js +79 -0
  38. package/src/components/heading/heading.js +79 -0
  39. package/src/components/heading/heading.stories.js +260 -0
  40. package/src/components/highlight/highlight.stories.js +1 -1
  41. package/src/components/image/image.css.js +101 -0
  42. package/src/components/image/image.js +57 -0
  43. package/src/components/image/image.stories.js +245 -0
  44. package/src/components/light-carousel/light-carousel-simple.js +3 -2
  45. package/src/components/light-carousel/light-carousel.js +3 -7
  46. package/src/components/light-carousel/light-carousel.stories.js +15 -16
  47. package/src/components/link/link.css.js +107 -18
  48. package/src/components/link/link.js +16 -12
  49. package/src/components/link/link.stories.js +177 -0
  50. package/src/components/list/list-item/list-item.css.js +106 -0
  51. package/src/components/list/list-item/list-item.js +43 -0
  52. package/src/components/list/list-item/list-item.stories.js +79 -0
  53. package/src/components/list/list.css.js +175 -0
  54. package/src/components/list/list.js +44 -0
  55. package/src/components/modal/modal.js +6 -5
  56. package/src/components/paragraph/paragraph.css.js +41 -11
  57. package/src/components/paragraph/paragraph.js +7 -45
  58. package/src/components/paragraph/paragraph.stories.js +235 -0
  59. package/src/components/picture/picture.css.js +0 -0
  60. package/src/components/picture/picture.js +46 -0
  61. package/src/components/picture/picture.stories.js +275 -0
  62. package/src/components/pricing-cards/pricing-card-actions.js +1 -1
  63. package/src/components/pricing-cards/pricing-card-header.js +9 -7
  64. package/src/components/pricing-cards/pricing-card-pricing.js +11 -12
  65. package/src/components/pricing-cards/pricing-card.css.js +28 -3
  66. package/src/components/pricing-cards/pricing-card.js +38 -50
  67. package/src/components/tabs/tabs.js +44 -47
  68. package/src/components/termsOfUse/terms.js +77 -161
  69. package/src/components/termsOfUse/terms.stories.js +4 -3
  70. package/src/stories/Header.js +6 -6
  71. package/src/tokens/layout.css +3 -3
  72. package/src/tokens/tokens.css +0 -23
  73. package/src/tokens/tokens.stories.js +9 -8
  74. package/src/components/accordion/accordion-no-bg.css.js +0 -114
  75. package/src/components/accordion/accordion-no-bg.js +0 -80
@@ -1,69 +1,34 @@
1
- // BdFooterLP.stories.js
2
1
  import { html } from 'lit';
2
+ import '../divider/divider-horizontal.js';
3
+ import '../divider/divider-vertical.js';
4
+ import '../footer/footer-nav-menu.js';
3
5
  import './footer-lp.js';
4
6
 
5
7
  export default {
6
- title : 'Components/Footer/BdFooterLP',
7
- component: 'bd-footer-lp',
8
- argTypes : {
9
- currentLocale: {
10
- control : 'text',
11
- description: 'Codul de locale curent (ex: en, ro, de-de)',
12
- table : { defaultValue: { summary: 'en' } }
13
- },
14
- maxColumnsPerRow: {
15
- control : { type: 'number', min: 1, max: 4 },
16
- description: 'Numărul maxim de coloane pentru quick links',
17
- table : { defaultValue: { summary: 2 } }
18
- },
19
- selectedCountry: {
20
- control : 'text',
21
- description: 'Țara selectată în footer',
22
- table : { defaultValue: { summary: 'Choose your country' } }
23
- },
24
- _isMobile: {
25
- control : 'boolean',
26
- description: 'Forțează modul mobile pentru testare',
27
- table : { defaultValue: { summary: false } }
28
- },
29
- _countriesOpen: {
30
- control : 'boolean',
31
- description: 'Controlează dacă dropdown-ul cu țări este deschis',
32
- table : { defaultValue: { summary: false } }
33
- }
8
+ title : 'Components/Footer/BdFooterLP',
9
+ component : 'bd-footer-lp',
10
+ parameters: {
11
+ layout: 'fullscreen'
34
12
  }
35
13
  };
36
14
 
37
- const Template = (args) => {
38
- return html`
39
- <bd-footer-lp
40
- .currentLocale=${args.currentLocale}
41
- .maxColumnsPerRow=${args.maxColumnsPerRow}
42
- .selectedCountry=${args.selectedCountry}
43
- ._isMobile=${args._isMobile}
44
- ._countriesOpen=${args._countriesOpen}
45
- >
46
- <span slot="logo">
47
- <img src="/assets/BD_logo.png" alt="Bitdefender Logo" style="height: 40px;" />
48
- </span>
49
-
50
- <div slot="top-right">
51
- <img src="/assets/Bitdefender-Masterbrand.png" alt="Masterbrand" style="height: 40px;" />
52
- </div>
53
-
54
- <div slot="anpc">
55
- <img src="/assets/anpc.png" alt="Certificat ANPC" style="height: 30px;" />
56
- </div>
57
- </bd-footer-lp>
58
- `;
59
- };
60
-
61
- export const Default = Template.bind({});
62
- Default.args = {
63
- currentLocale : 'en',
64
- maxColumnsPerRow: 2,
65
- selectedCountry : 'Choose your country',
66
- _isMobile : false,
67
- _countriesOpen : false
68
- };
15
+ export const Default = () => html`
16
+ <bd-footer-lp maxColumnsPerRow="3">
17
+ <bd-footer-nav slot="secondary-nav">
18
+ <a href="/legal/">Legal Information</a>
19
+ <bd-divider-vertical color="white" height="18px"></bd-divider-vertical>
20
+ <a href="/site/view/legal-privacy-policy-for-bitdefender-websites/">Privacy Policy</a>
21
+ <bd-divider-vertical color="white" height="18px"></bd-divider-vertical>
22
+ <a href="/sitemap/">Site Map</a>
23
+ <bd-divider-vertical color="white" height="18px"></bd-divider-vertical>
24
+ <a href="/company/">Company</a>
25
+ <bd-divider-vertical color="white" height="18px"></bd-divider-vertical>
26
+ <a href="https://www.bitdefender.com/consumer/support/">Contact Us</a>
27
+ <bd-divider-vertical color="white" height="18px"></bd-divider-vertical>
28
+ <a href="#">Privacy Settings</a>
29
+ <bd-divider-vertical color="white" height="18px"></bd-divider-vertical>
30
+ <a href="#" class="impressum-link">Impressum</a>
31
+ </bd-footer-nav>
32
+ </bd-footer-lp>
33
+ `;
69
34
 
@@ -22,17 +22,16 @@ export default css`
22
22
  text-decoration: none;
23
23
  }
24
24
 
25
- /* Stiluri pentru mobil */
26
- @media (max-width: 768px) {
27
- .footer-nav-main {
28
- flex-direction: column;
29
- align-items: flex-start;
30
- gap: var(--spacing-16);
31
- }
25
+ @media (max-width: 767px) {
26
+ .footer-nav-main {
27
+ flex-direction: column;
28
+ align-items: flex-start;
29
+ gap: var(--spacing-16);
30
+ }
32
31
 
33
- .footer-nav-main ::slotted(bd-divider-vertical) {
34
- display: none !important;
35
- }
32
+ .footer-nav-main ::slotted(bd-divider-vertical) {
33
+ display: none !important;
36
34
  }
35
+ }
37
36
 
38
37
  `;
@@ -37,12 +37,6 @@ export default css`
37
37
  padding: 2px 6px;
38
38
  }
39
39
 
40
- // /* Stiluri pentru link-urile din social icons */
41
- // .social-icons a:focus {
42
- // border-radius: 50%;
43
- // padding: 4px;
44
- // }
45
-
46
40
  /* Stiluri pentru link-urile din navigația principală */
47
41
  .footer-nav-main a:focus {
48
42
  padding: 2px 6px;
@@ -227,6 +221,45 @@ bd-footer-links-group a:focus {
227
221
  align-items: center;
228
222
  gap: var(--spacing-8);
229
223
  }
224
+ .leading-icon {
225
+ width: 20px;
226
+ height: 20px;
227
+ display: inline-block;
228
+ background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.25 10C1.25 5.16751 5.16751 1.25 10 1.25C14.8325 1.25 18.75 5.16751 18.75 10C18.75 14.8325 14.8325 18.75 10 18.75C5.16751 18.75 1.25 14.8325 1.25 10ZM10 2.5C9.68262 2.5 9.36983 2.51971 9.06282 2.55799V4.88384C9.06282 5.10767 8.98274 5.32411 8.83705 5.49404L7.13041 7.48466C6.9523 7.6924 6.69232 7.81196 6.41867 7.81196H4.84449L4.62219 8.57915L5.38381 9.44622L6.23342 8.7515C6.62081 8.43474 7.18869 8.47806 7.52354 8.84993L9.9671 11.5636C10.2837 11.9151 10.2887 12.4474 9.97888 12.8049L6.61009 16.692C7.6282 17.2087 8.78009 17.5 10 17.5C13.0594 17.5 15.691 15.6681 16.8577 13.0414L14.6283 15.6137C14.4503 15.8192 14.1918 15.9372 13.9199 15.9372H12.631C11.9827 15.9372 11.5301 15.295 11.7481 14.6844L12.9639 11.2803L11.6036 10.6973C11.1277 10.4933 10.9072 9.94221 11.1112 9.4663L11.8444 7.75544C11.9922 7.41073 12.3311 7.18724 12.7061 7.18724H14.601C14.6608 7.18724 14.7203 7.19296 14.7785 7.2042L14.6138 6.87474H12.5001C11.9823 6.87474 11.5626 6.455 11.5626 5.93724V4.80038C11.5626 4.58106 11.6395 4.36869 11.7799 4.20021L12.7599 3.02412C11.9057 2.68588 10.9746 2.5 10 2.5ZM13.9089 3.59792L12.8126 4.91352V5.62474H14.8069C15.162 5.62474 15.4866 5.82536 15.6455 6.14297L16.3292 7.51038C16.7486 8.34928 15.8126 9.2161 15.0083 8.73354L14.5145 8.43724H12.9122L12.3832 9.67147L13.7263 10.2471C14.1815 10.4422 14.4064 10.9577 14.2399 11.4241L13.0744 14.6872H13.7772L17.4893 10.404C17.4964 10.2702 17.5 10.1355 17.5 10C17.5 7.29005 16.0627 4.91579 13.9089 3.59792ZM7.81282 2.82393C4.98528 3.68463 2.86587 6.17069 2.54281 9.1939C3.18286 9.98092 4.99058 12.3835 5.40842 12.9396C5.58837 13.1791 5.63756 13.4816 5.55863 13.7579L5.07728 15.4426L5.59227 15.9578L8.85346 12.1949L6.79402 9.90779L5.94154 10.6049C5.55068 10.9244 4.97693 10.8771 4.64373 10.4978L3.57 9.27539C3.35876 9.03489 3.28482 8.70323 3.3739 8.39577L3.70923 7.23854C3.82536 6.83775 4.19241 6.56196 4.60969 6.56196H6.27497L7.81282 4.76822V2.82393ZM4.03367 14.5452C3.32557 13.6171 2.82909 12.5189 2.61624 11.3226C3.25918 12.1634 3.97861 13.118 4.31401 13.564L4.03367 14.5452Z" fill="white"/></svg>') no-repeat center;
229
+ background-size: contain;
230
+ }
231
+
232
+ .bd-youtube {
233
+ content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M23.4991 5.66068C23.2223 4.61146 22.4094 3.78802 21.3768 3.50911C19.5049 3 12 3 12 3C12 3 4.49506 3 2.62321 3.50911C1.59063 3.78802 0.777737 4.61146 0.500915 5.66068C0 7.5599 0 11.5177 0 11.5177C0 11.5177 0 15.4755 0.500915 17.3747C0.777737 18.424 1.59063 19.212 2.62321 19.4909C4.49506 20 12 20 12 20C12 20 19.5049 20 21.3768 19.4909C22.4094 19.212 23.2223 18.4195 23.4991 17.3747C24 15.4755 24 11.5177 24 11.5177C24 11.5177 24 7.5599 23.4991 5.66068ZM9.54815 15.1125V7.92292L15.8184 11.5177L9.54815 15.1125Z" fill="white"/></svg>');
234
+ }
235
+ .bd-facebook {
236
+ content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M24 12.0447C24 5.39188 18.6281 0 12 0C5.37188 0 0 5.39188 0 12.0447C0 17.6906 3.87656 22.4332 9.10312 23.7365V15.724H6.62812V12.0447H9.10312V10.4591C9.10312 6.36111 10.95 4.4603 14.9625 4.4603C15.7219 4.4603 17.0344 4.61086 17.5734 4.76142V8.09253C17.2922 8.0643 16.8 8.04548 16.1859 8.04548C14.2172 8.04548 13.4578 8.79357 13.4578 10.7367V12.0447H17.3766L16.7016 15.724H13.4531V24C19.3969 23.2801 24 18.2035 24 12.0447Z" fill="white"/></svg>');
237
+ }
238
+ .bd-instagram {
239
+ content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M12.0025 6.35948C8.88098 6.35948 6.36319 8.87783 6.36319 12C6.36319 15.1222 8.88098 17.6405 12.0025 17.6405C15.1239 17.6405 17.6417 15.1222 17.6417 12C17.6417 8.87783 15.1239 6.35948 12.0025 6.35948ZM12.0025 15.6671C9.98528 15.6671 8.3362 14.0225 8.3362 12C8.3362 9.97746 9.98037 8.33292 12.0025 8.33292C14.0245 8.33292 15.6687 9.97746 15.6687 12C15.6687 14.0225 14.0196 15.6671 12.0025 15.6671ZM19.1877 6.12875C19.1877 6.8602 18.5988 7.44438 17.8724 7.44438C17.1411 7.44438 16.5571 6.85529 16.5571 6.12875C16.5571 5.40221 17.146 4.81312 17.8724 4.81312C18.5988 4.81312 19.1877 5.40221 19.1877 6.12875ZM22.9227 7.46402C22.8393 5.70166 22.4368 4.14058 21.146 2.8544C19.8601 1.56822 18.2994 1.16568 16.5374 1.07732C14.7215 0.974227 9.27853 0.974227 7.46258 1.07732C5.70552 1.16077 4.14479 1.56332 2.85399 2.84949C1.56319 4.13567 1.16564 5.69675 1.0773 7.45911C0.974233 9.27547 0.974233 14.7196 1.0773 16.536C1.16074 18.2983 1.56319 19.8594 2.85399 21.1456C4.14479 22.4318 5.70061 22.8343 7.46258 22.9227C9.27853 23.0258 14.7215 23.0258 16.5374 22.9227C18.2994 22.8392 19.8601 22.4367 21.146 21.1456C22.4319 19.8594 22.8344 18.2983 22.9227 16.536C23.0258 14.7196 23.0258 9.28037 22.9227 7.46402ZM20.5767 18.4849C20.1939 19.4471 19.4528 20.1883 18.4859 20.5761C17.038 21.1505 13.6025 21.018 12.0025 21.018C10.4025 21.018 6.96196 21.1456 5.51902 20.5761C4.55705 20.1932 3.81595 19.452 3.42822 18.4849C2.85399 17.0367 2.9865 13.6004 2.9865 12C2.9865 10.3996 2.8589 6.95838 3.42822 5.51512C3.81104 4.55294 4.55215 3.81167 5.51902 3.42385C6.96687 2.84949 10.4025 2.98204 12.0025 2.98204C13.6025 2.98204 17.0429 2.8544 18.4859 3.42385C19.4479 3.80676 20.189 4.54803 20.5767 5.51512C21.1509 6.96329 21.0184 10.3996 21.0184 12C21.0184 13.6004 21.1509 17.0416 20.5767 18.4849Z" fill="white"/></svg>');
240
+ }
241
+ .bd-linkedin {
242
+ content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M21.4286 1H2.56652C1.70223 1 1 1.71205 1 2.58616V21.4138C1 22.2879 1.70223 23 2.56652 23H21.4286C22.2929 23 23 22.2879 23 21.4138V2.58616C23 1.71205 22.2929 1 21.4286 1ZM7.64911 19.8571H4.38839V9.35804H7.65402V19.8571H7.64911ZM6.01875 7.92411C4.97277 7.92411 4.12812 7.07455 4.12812 6.03348C4.12812 4.99241 4.97277 4.14286 6.01875 4.14286C7.05982 4.14286 7.90937 4.99241 7.90937 6.03348C7.90937 7.07946 7.06473 7.92411 6.01875 7.92411ZM19.8719 19.8571H16.6112V14.75C16.6112 13.5321 16.5866 11.9656 14.917 11.9656C13.2179 11.9656 12.9576 13.2915 12.9576 14.6616V19.8571H9.69688V9.35804H12.825V10.792H12.8692C13.3062 9.96696 14.3719 9.09777 15.958 9.09777C19.258 9.09777 19.8719 11.2732 19.8719 14.1018V19.8571Z" fill="white"/></svg>');
243
+ }
244
+
245
+ .bd-tiktok {
246
+ content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M23 9.84003C20.9356 9.84445 18.922 9.19997 17.2438 7.99766V16.3797C17.2433 17.9321 16.7689 19.4474 15.884 20.7228C14.9991 21.9983 13.7459 22.9731 12.292 23.5169C10.8381 24.0608 9.25287 24.1477 7.74825 23.7661C6.24363 23.3845 4.89139 22.5525 3.87237 21.3815C2.85335 20.2104 2.21614 18.7561 2.04595 17.2131C1.87577 15.6701 2.18073 14.1118 2.92004 12.7468C3.65936 11.3818 4.79778 10.2751 6.18306 9.57468C7.56834 8.87428 9.13443 8.61357 10.6719 8.82743V13.0419C9.96888 12.8206 9.21393 12.8271 8.51483 13.0604C7.81573 13.2938 7.20822 13.742 6.77905 14.3413C6.34987 14.9405 6.12099 15.66 6.12506 16.3971C6.12913 17.1341 6.36596 17.8511 6.80173 18.4455C7.2375 19.04 7.84993 19.4815 8.55157 19.7071C9.2532 19.9327 10.0082 19.9309 10.7087 19.7018C11.4092 19.4727 12.0194 19.0281 12.4522 18.4315C12.8851 17.8349 13.1183 17.1168 13.1188 16.3797V0H17.2438C17.2414 0.348908 17.2712 0.697289 17.3328 1.04073C17.4763 1.80627 17.7743 2.53452 18.2087 3.18097C18.6431 3.82741 19.2048 4.37847 19.8594 4.80047C20.7911 5.41593 21.8834 5.74363 23 5.74275V9.84003Z" fill="white"/></svg>');
247
+ }
248
+
249
+ .bd-twitter {
250
+ content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M4.14286 1C2.40937 1 1 2.40937 1 4.14286V19.8571C1 21.5906 2.40937 23 4.14286 23H19.8571C21.5906 23 23 21.5906 23 19.8571V4.14286C23 2.40937 21.5906 1 19.8571 1H4.14286ZM18.7326 5.125L13.6353 10.9491L19.6312 18.875H14.9366L11.2634 14.0674L7.05491 18.875H4.72232L10.1732 12.6433L4.42277 5.125H9.23527L12.5598 9.52009L16.4 5.125H18.7326ZM16.8763 17.4804L8.53304 6.44598H7.1433L15.5799 17.4804H16.8714H16.8763Z" fill="white"/></svg>');
251
+ }
252
+
253
+ .arrow-up {
254
+ content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path fill-rule="evenodd" clip-rule="evenodd" d="M9.55762 5.80806C9.80169 5.56398 10.1974 5.56398 10.4415 5.80806L17.3165 12.6831L16.4326 13.5669L9.99956 7.13388L3.5665 13.5669L2.68262 12.6831L9.55762 5.80806Z" fill="white"/></svg>');
255
+ }
256
+
257
+ .arrow-down {
258
+ content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path fill-rule="evenodd" clip-rule="evenodd" d="M9.99956 12.8662L3.5665 6.43311L2.68262 7.31699L9.55762 14.192C9.80169 14.4361 10.1974 14.4361 10.4415 14.192L17.3165 7.31699L16.4326 6.43311L9.99956 12.8662Z" fill="white"/></svg>');
259
+ }
260
+ .close-icon {
261
+ content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.18182 9L0.564941 15.6169L2.38322 17.4352L9.00007 10.8183L15.6169 17.4352L17.4352 15.6169L10.8183 9L17.4352 2.38317L15.6169 0.564894L9.00007 7.18174L2.38322 0.564894L0.564941 2.38317L7.18182 9Z" fill="white"/></svg>');
262
+ }
230
263
 
231
264
  a {
232
265
  color: var(--color-neutral-0);
@@ -471,11 +504,13 @@ bd-footer-links-group a:focus {
471
504
  height: var(--dimension-20px);
472
505
  display: block;
473
506
  }
474
- @media (max-width: 768px) {
507
+ @media (max-width: 767px) {
475
508
  :host {
476
509
  font-size: var(--typography-body-small-fontSize);
477
510
  }
478
-
511
+ .footer-address{
512
+ display: none !important;
513
+ }
479
514
  .footer-nav-main {
480
515
  flex-direction: column;
481
516
  align-items: flex-start;
@@ -692,4 +727,56 @@ bd-footer-links-group a:focus {
692
727
  text-align: left;
693
728
  }
694
729
  }
730
+ .tablet-divider {
731
+ display: none;
732
+ }
733
+
734
+ /* Afișează divider-ul doar pe tablete */
735
+ @media (min-width: 768px) and (max-width: 1024px) {
736
+ .tablet-divider {
737
+ display: block;
738
+ order: 2;
739
+ margin: var(--spacing-16) 0;
740
+ width: 100%;
741
+ }
742
+ .footer-address{
743
+ display: none !important;
744
+ }
745
+ .footer-links {
746
+ display: flex;
747
+ flex-direction: column;
748
+ gap: 0 !important;
749
+ padding-bottom: 0 !important;
750
+ }
751
+ .footer-links-left,
752
+ .footer-links-right {
753
+ width: 100%;
754
+ }
755
+
756
+ .footer-links-left {
757
+ order: 1;
758
+ }
759
+
760
+ .footer-links > bd-divider-horizontal {
761
+ order: 2;
762
+ margin: var(--spacing-16) 0;
763
+ width: 100%;
764
+ }
765
+ /* Ascunde ultimul divider (cel din afara .footer-links) pe tablete */
766
+ .footer-links + bd-divider-horizontal {
767
+ display: none !important;
768
+ }
769
+
770
+ .footer-links-right {
771
+ order: 3;
772
+ display: flex;
773
+ margin-top: 0;
774
+ margin-bottom: 0;
775
+ }
776
+ .footer-countries-container {
777
+ display: inline-flex;
778
+ gap: 10rem;
779
+ flex-wrap: wrap;
780
+ }
781
+ }
695
782
  `;
@@ -4,6 +4,7 @@ import '../../components/divider/divider-vertical.js';
4
4
  import '../../components/footer/footer-links-group.js';
5
5
  import '../../components/footer/footer-nav-menu.js';
6
6
  import '../../components/grid/grid.js';
7
+ import '../../components/link/link.js';
7
8
  import { tokens } from "../../tokens/tokens.js";
8
9
  import footerCSS from './footer.css.js';
9
10
  import { localeMap } from './localeMap.js';
@@ -24,7 +25,7 @@ export class BdFooter extends LitElement {
24
25
  this.maxColumnsPerRow = 2;
25
26
  this.currentLocale = 'en';
26
27
  this.selectedCountry = 'Choose your country';
27
- this._isMobile = window.innerWidth <= 768;
28
+ this._isMobile = window.innerWidth <= 767;
28
29
  this._countriesContainer = null;
29
30
  }
30
31
 
@@ -43,8 +44,6 @@ export class BdFooter extends LitElement {
43
44
  firstUpdated() {
44
45
  super.firstUpdated();
45
46
  this._updateNavLinks();
46
- // Obține referința la containerul cu țări
47
- // this._countriesContainer = this.shadowRoot.querySelector('.footer-countries-container');
48
47
  }
49
48
 
50
49
  updated(changedProps) {
@@ -70,10 +69,8 @@ export class BdFooter extends LitElement {
70
69
  const impressumDivider = footerNav.querySelector('bd-divider-vertical + .impressum-link')?.previousElementSibling;
71
70
 
72
71
  if (impressumLink) {
73
- // Ascunde/afișează link-ul Impressum
74
72
  impressumLink.style.display = showImpressum ? '' : 'none';
75
73
 
76
- // Ascunde/afișează și separatorul dinaintea lui
77
74
  if (impressumDivider && impressumDivider.tagName === 'BD-DIVIDER-VERTICAL') {
78
75
  impressumDivider.style.display = showImpressum ? '' : 'none';
79
76
  }
@@ -82,10 +79,8 @@ export class BdFooter extends LitElement {
82
79
  }
83
80
 
84
81
  _scrollToCountries() {
85
- // Obține referința la container doar atunci când este necesar
86
82
  const container = this.shadowRoot.querySelector('.footer-countries-container');
87
83
  if (container) {
88
- // Așteaptă ca render-ul să se finalizeze
89
84
  setTimeout(() => {
90
85
  container.scrollIntoView({
91
86
  behavior: 'smooth',
@@ -96,7 +91,6 @@ export class BdFooter extends LitElement {
96
91
  }
97
92
 
98
93
  _scrollToTop() {
99
- // Scroll smooth către începutul footer-ului
100
94
  this.scrollIntoView({
101
95
  behavior: 'smooth',
102
96
  block : 'start'
@@ -104,8 +98,8 @@ export class BdFooter extends LitElement {
104
98
  }
105
99
 
106
100
  _handleResize() {
107
- this._isMobile = window.innerWidth <= 768;
108
- const newIsMobile = window.innerWidth <= 768;
101
+ this._isMobile = window.innerWidth <= 767;
102
+ const newIsMobile = window.innerWidth <= 767;
109
103
  console.log('Resize - Old isMobile:', this._isMobile, 'New isMobile:', newIsMobile, 'Window width:', window.innerWidth);
110
104
 
111
105
  if (this._isMobile !== newIsMobile) {
@@ -122,27 +116,22 @@ export class BdFooter extends LitElement {
122
116
  return;
123
117
  }
124
118
 
125
- // Creează o versiune normalized a localeMap cu cheile lowercase
126
119
  const normalizedLocaleMap = {};
127
120
  Object.entries(localeMap).forEach(([key, value]) => {
128
121
  normalizedLocaleMap[key.toLowerCase()] = value;
129
122
  });
130
123
 
131
- // Încearcă mai întâi potrivire exactă
132
124
  let country = normalizedLocaleMap[urlLocale];
133
125
 
134
- // Dacă nu găsești potrivire exactă, încearcă să găsești cea mai bună potrivire
135
126
  if (!country && urlLocale) {
136
127
  const localeParts = urlLocale.split('-');
137
128
  const language = localeParts[0];
138
129
  const region = localeParts[1];
139
130
 
140
- // Caută o potrivire care să înceapă cu același limbaj
141
131
  const possibleMatches = Object.entries(normalizedLocaleMap)
142
132
  .filter(([key]) => key.startsWith(language));
143
133
 
144
134
  if (possibleMatches.length > 0) {
145
- // Preferă potrivirea cu aceeași regiune dacă există
146
135
  const exactRegionMatch = possibleMatches.find(([key]) => {
147
136
  const keyParts = key.split('-');
148
137
  const keyRegion = keyParts[1];
@@ -154,13 +143,11 @@ export class BdFooter extends LitElement {
154
143
 
155
144
  if (exactRegionMatch) {
156
145
  country = exactRegionMatch[1];
157
- // Recuperează cheia originală din localeMap
158
146
  const originalKey = Object.keys(localeMap).find(k =>
159
147
  k.toLowerCase() === exactRegionMatch[0]
160
148
  );
161
149
  this.currentLocale = originalKey || exactRegionMatch[0];
162
150
  } else {
163
- // Altfel, ia prima potrivire
164
151
  country = possibleMatches[0][1];
165
152
  const originalKey = Object.keys(localeMap).find(k =>
166
153
  k.toLowerCase() === possibleMatches[0][0]
@@ -170,7 +157,6 @@ export class BdFooter extends LitElement {
170
157
  }
171
158
  }
172
159
 
173
- // Setează valorile pentru țară și locale
174
160
  if (country) {
175
161
  this.selectedCountry = country;
176
162
  }
@@ -182,14 +168,12 @@ export class BdFooter extends LitElement {
182
168
  this.currentLocale = originalKey || urlLocale;
183
169
  }
184
170
 
185
- // Actualizează linkurile de navigație
186
171
  this._updateNavLinks();
187
172
  }
188
173
 
189
174
  _toggleCountries() {
190
175
  this._countriesOpen = !this._countriesOpen;
191
176
 
192
- // Dacă se închide dropdown-ul, fac scroll înapoi sus
193
177
  if (!this._countriesOpen) {
194
178
  this._scrollToTop();
195
179
  }
@@ -198,7 +182,6 @@ export class BdFooter extends LitElement {
198
182
  _closeCountries() {
199
183
  this._countriesOpen = false;
200
184
 
201
- // Doar pentru desktop, facem scroll înapoi sus
202
185
  if (!this._isMobile) {
203
186
  this._scrollToTop();
204
187
  }
@@ -208,7 +191,6 @@ export class BdFooter extends LitElement {
208
191
  e.preventDefault();
209
192
  this._selectCountry(countryLabel);
210
193
 
211
- // Redirect către pagina cu noul locale
212
194
  const newPath = `/${locale.toLowerCase()}/`;
213
195
  window.location.href = newPath;
214
196
  }
@@ -217,7 +199,6 @@ export class BdFooter extends LitElement {
217
199
  this.selectedCountry = countryLabel;
218
200
  this._countriesOpen = false;
219
201
 
220
- // Găsește locale-ul corespunzător pentru țara selectată
221
202
  const localeEntry = Object.entries(localeMap).find(
222
203
  ([, country]) => country === countryLabel
223
204
  );
@@ -237,15 +218,13 @@ export class BdFooter extends LitElement {
237
218
  }));
238
219
  }
239
220
 
240
-
241
-
242
221
  get locale() {
243
222
  const val = (this.currentLocale || 'en').toLowerCase();
244
223
  return val;
245
224
  }
246
225
 
247
226
  _updateSlotStyles() {
248
- const isMobile = window.innerWidth <= 768;
227
+ const isMobile = window.innerWidth <= 767;
249
228
  const slot = this.shadowRoot.querySelector('slot[name="nav"]');
250
229
  const assignedElements = slot.assignedElements();
251
230
 
@@ -261,8 +240,7 @@ export class BdFooter extends LitElement {
261
240
  }
262
241
 
263
242
  _updateNavLinks() {
264
- // Actualizează linkurile care sunt acum în shadow DOM
265
- const links = this.shadowRoot.querySelectorAll('.footer-nav-main a');
243
+ const links = this.shadowRoot.querySelectorAll('.footer-nav-main bd-link');
266
244
  const linkPaths = ['consumer', 'small-business', 'business', 'partners'];
267
245
  const currentLocale = this.locale;
268
246
 
@@ -272,10 +250,10 @@ export class BdFooter extends LitElement {
272
250
  }
273
251
  });
274
252
  }
253
+
275
254
  render() {
276
255
  const year = new Date().getFullYear();
277
256
  const showAnpc = this.locale.startsWith('ro');
278
- const showImpressum = this.locale === 'de-de' || this.locale === 'de';
279
257
  const countriesList = this.getCountriesList();
280
258
 
281
259
  const masterbrandUrl = this._isMobile
@@ -287,36 +265,26 @@ export class BdFooter extends LitElement {
287
265
  : '/assets/anpc.png';
288
266
 
289
267
  const logoUrl = '/assets/BD_logo.png';
290
- const facebookIcon = '/assets/facebook_vector.svg';
291
- const xIcon = '/assets/x_vector.svg';
292
- const linkedinIcon = '/assets/linkedin_vector.svg';
293
- const youtubeIcon = '/assets/youtube_vector.svg';
294
- const instagramIcon = '/assets/instagram_vector.svg';
295
- const tiktokIcon = '/assets/tiktok_vector.svg';
296
- const leadingIcon = '/assets/leading.svg';
297
- const closeIcon = '/assets/close_icon.png';
298
-
299
268
  const chunkSize = Math.ceil(countriesList.length / 3);
300
269
  const countryChunks = [
301
270
  countriesList.slice(0, chunkSize),
302
271
  countriesList.slice(chunkSize, chunkSize * 2),
303
272
  countriesList.slice(chunkSize * 2)
304
273
  ];
305
- // Obține elementele din slot-ul quick-links
274
+
306
275
  const quickLinksSlot = this.shadowRoot?.querySelector('slot[name="quick-links"]');
307
276
  const quickLinksElements = quickLinksSlot?.assignedElements({ flatten: true }) || [];
308
277
 
309
- // Extrage toate componentele bd-footer-links-group din slot
310
278
  const linksGroups = [];
311
279
  quickLinksElements.forEach(el => {
312
280
  if (el.tagName === 'BD-FOOTER-LINKS-GROUP') {
313
281
  linksGroups.push(el);
314
282
  } else {
315
- // Dacă este un container, extrage copiii săi
316
283
  const children = el.querySelectorAll ? el.querySelectorAll('bd-footer-links-group') : [];
317
284
  children.forEach(child => linksGroups.push(child));
318
285
  }
319
286
  });
287
+
320
288
  return html`
321
289
  <div class="footer-top-bleed">
322
290
  <div class="container">
@@ -360,21 +328,21 @@ export class BdFooter extends LitElement {
360
328
  <slot name="quick-links"></slot>
361
329
  </bd-grid>
362
330
  </div>
363
-
331
+ <bd-divider-horizontal class="tablet-divider" width="100%" color="white" opacity="0.25"></bd-divider-horizontal>
364
332
  ${this._isMobile
365
333
  ? html`<bd-divider-horizontal width="100%" color="white" opacity="0.25"></bd-divider-horizontal>`
366
334
  : ''}
367
335
 
368
336
  <div class="footer-links-right social-icons">
369
- <slot name="social-links">
370
- <a href="https://www.facebook.com/bitdefender"><img src="${facebookIcon}" alt="Facebook"></a>
371
- <a href="https://twitter.com/bitdefender"><img src="${xIcon}" alt="X"></a>
372
- <a href="https://www.linkedin.com/company/bitdefender"><img src="${linkedinIcon}" alt="LinkedIn"></a>
373
- <a href="https://www.youtube.com/c/Bitdefender"><img src="${youtubeIcon}" alt="YouTube"></a>
374
- <a href="https://www.instagram.com/bitdefender/"><img src="${instagramIcon}" alt="Instagram"></a>
375
- <a href="https://www.tiktok.com/@bitdefender"><img src="${tiktokIcon}" alt="TikTok"></a>
376
- </slot>
377
- </div>
337
+ <slot name="social-links">
338
+ <bd-link href="https://www.facebook.com/bitdefender" target="_blank" kind="secondary" class="bd-facebook">Facebook</bd-link>
339
+ <bd-link href="https://twitter.com/bitdefender" target="_blank" kind="secondary" class="bd-twitter">Twitter</bd-link>
340
+ <bd-link href="https://www.linkedin.com/company/bitdefender" target="_blank" kind="secondary" class="bd-linkedin">LinkedIn</bd-link>
341
+ <bd-link href="https://www.youtube.com/c/Bitdefender" target="_blank" kind="secondary" class="bd-youtube">YouTube</bd-link>
342
+ <bd-link href="https://www.instagram.com/bitdefender/" target="_blank" kind="secondary" class="bd-instagram">Instagram</bd-link>
343
+ <bd-link href="https://www.tiktok.com/@bitdefender" target="_blank" kind="secondary" class="bd-tiktok">TikTok</bd-link>
344
+ </slot>
345
+ </div>
378
346
  </div>
379
347
 
380
348
  ${!this._isMobile
@@ -420,13 +388,9 @@ export class BdFooter extends LitElement {
420
388
 
421
389
  <div class="footer-countries-toggle">
422
390
  <button class="country-toggle" @click="${this._toggleCountries}">
423
- <img src="${leadingIcon}" alt="Leading icon">
391
+ <span class="leading-icon" role="img" aria-label="Leading icon"></span>
424
392
  ${this.selectedCountry}
425
- <span class="arrow">
426
- ${this._countriesOpen
427
- ? html`<img src="/assets/arrow_up.svg" alt="Arrow up">`
428
- : html`<img src="/assets/arrow_down.svg" alt="Arrow down">`}
429
- </span>
393
+ <span class="arrow ${this._countriesOpen ? 'arrow-up' : 'arrow-down'}"></span>
430
394
  </button>
431
395
  </div>
432
396
  </div>
@@ -434,18 +398,20 @@ export class BdFooter extends LitElement {
434
398
  ${this._countriesOpen
435
399
  ? html`
436
400
  <div class="footer-countries-container">
437
- <button class="close-countries-button" @click="${this._closeCountries}">
438
- <img src="${closeIcon}" alt="Close countries list">
439
- </button>
401
+ <button class="close-countries-button" @click="${this._closeCountries}">
402
+ <span class="close-icon"></span>
403
+ </button>
440
404
  ${countryChunks.map(chunk => html`
441
405
  <bd-footer-links-group slot="countries" title="${chunk === countryChunks[0] ? 'Choose your country' : ''}">
442
406
  ${chunk.map(c => html`
443
- <a href="/${c.locale.toLowerCase()}/"
444
- data-locale="${c.locale}"
445
- class="${this.selectedCountry === c.label ? 'selected' : ''}"
446
- @click="${(e) => this._handleCountryClick(e, c.label, c.locale)}">
407
+ <bd-link
408
+ href="/${c.locale.toLowerCase()}/"
409
+ data-locale="${c.locale}"
410
+ kind="light"
411
+ class="${this.selectedCountry === c.label ? 'selected' : ''}"
412
+ @click="${(e) => this._handleCountryClick(e, c.label, c.locale)}">
447
413
  ${c.label}
448
- </a>
414
+ </bd-link>
449
415
  `)}
450
416
  </bd-footer-links-group>
451
417
  `)}