@sapudex/web-components 2.15.0 → 2.16.1

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 (190) hide show
  1. package/cypress/specs/HeroBanner.cy.tsx +6 -6
  2. package/cypress/specs/PasswordField.cy.tsx +91 -0
  3. package/cypress/specs/RatingBar.cy.tsx +41 -0
  4. package/cypress/specs/Tooltip.cy.tsx +6 -11
  5. package/cypress/support/component-imports.instrumented.ts +3 -1
  6. package/cypress/support/component-imports.src.ts +3 -1
  7. package/dist/Accordion.js +44 -30
  8. package/dist/Accordion.js.map +1 -1
  9. package/dist/AvatarGroup.d.ts +1 -0
  10. package/dist/AvatarGroup.js +8 -4
  11. package/dist/AvatarGroup.js.map +1 -1
  12. package/dist/Footer.d.ts +17 -21
  13. package/dist/Footer.js +5 -11
  14. package/dist/Footer.js.map +1 -1
  15. package/dist/FooterTemplate.d.ts +2 -0
  16. package/dist/FooterTemplate.js +27 -0
  17. package/dist/FooterTemplate.js.map +1 -0
  18. package/dist/HeroBanner.js +4 -4
  19. package/dist/HeroBanner.js.map +1 -1
  20. package/dist/HeroBannerTemplate.d.ts +2 -0
  21. package/dist/HeroBannerTemplate.js +10 -0
  22. package/dist/HeroBannerTemplate.js.map +1 -0
  23. package/dist/LinkListItemTemplate.js +1 -1
  24. package/dist/LinkListItemTemplate.js.map +1 -1
  25. package/dist/List.js +7 -1
  26. package/dist/List.js.map +1 -1
  27. package/dist/ListGroupHeader.js +7 -1
  28. package/dist/ListGroupHeader.js.map +1 -1
  29. package/dist/ListSelectAll.js +7 -1
  30. package/dist/ListSelectAll.js.map +1 -1
  31. package/dist/PasswordField.d.ts +3 -5
  32. package/dist/PasswordField.js +6 -8
  33. package/dist/PasswordField.js.map +1 -1
  34. package/dist/PasswordFieldTemplate.d.ts +4 -0
  35. package/dist/PasswordFieldTemplate.js +8 -0
  36. package/dist/PasswordFieldTemplate.js.map +1 -0
  37. package/dist/RatingBar.js +3 -3
  38. package/dist/RatingBar.js.map +1 -1
  39. package/dist/RatingBarTemplate.d.ts +2 -0
  40. package/dist/RatingBarTemplate.js +8 -0
  41. package/dist/RatingBarTemplate.js.map +1 -0
  42. package/dist/StatusBadge.js +3 -3
  43. package/dist/StatusBadge.js.map +1 -1
  44. package/dist/StatusBadgeTemplate.d.ts +2 -0
  45. package/dist/StatusBadgeTemplate.js +7 -0
  46. package/dist/StatusBadgeTemplate.js.map +1 -0
  47. package/dist/StatusMessage.js +3 -3
  48. package/dist/StatusMessage.js.map +1 -1
  49. package/dist/StatusMessageTemplate.d.ts +2 -0
  50. package/dist/StatusMessageTemplate.js +8 -0
  51. package/dist/StatusMessageTemplate.js.map +1 -0
  52. package/dist/Switch.d.ts +1 -4
  53. package/dist/Switch.js +4 -8
  54. package/dist/Switch.js.map +1 -1
  55. package/dist/SwitchTemplate.d.ts +2 -0
  56. package/dist/SwitchTemplate.js +12 -0
  57. package/dist/SwitchTemplate.js.map +1 -0
  58. package/dist/TagGroup.d.ts +2 -0
  59. package/dist/TagGroup.js +10 -3
  60. package/dist/TagGroup.js.map +1 -1
  61. package/dist/TextField.d.ts +5 -3
  62. package/dist/TextField.js +5 -3
  63. package/dist/TextField.js.map +1 -1
  64. package/dist/Tooltip.d.ts +5 -0
  65. package/dist/Tooltip.js.map +1 -1
  66. package/dist/assets/{InputSuggestions-D5z6eIC2.js → InputSuggestions-C-OeoyHk.js} +1 -1
  67. package/dist/assets/{ListItemStandardExpandableTextTemplate-BKeYxhnX.js → ListItemStandardExpandableTextTemplate-D05JXl_S.js} +1 -1
  68. package/dist/assets/{bundle.esm-DXwtYGLH.js → bundle.esm-jB2aQPid.js} +208 -208
  69. package/dist/css/themes/AccordionItem.css +1 -1
  70. package/dist/css/themes/CountrySelector.css +1 -1
  71. package/dist/css/themes/Link.css +1 -1
  72. package/dist/css/themes/PhoneNumberField.css +1 -1
  73. package/dist/css/themes/RatingBar.css +1 -1
  74. package/dist/css/themes/RatingIndicator.css +1 -1
  75. package/dist/css/themes/Search.css +1 -1
  76. package/dist/css/themes/SelectBox.css +1 -1
  77. package/dist/css/themes/Slider.css +1 -1
  78. package/dist/css/themes/TextArea.css +1 -1
  79. package/dist/css/themes/TextField.css +1 -1
  80. package/dist/custom-elements-internal.json +214 -141
  81. package/dist/custom-elements.json +187 -126
  82. package/dist/generated/themes/AccordionItem.css.d.ts +1 -1
  83. package/dist/generated/themes/AccordionItem.css.js +1 -1
  84. package/dist/generated/themes/AccordionItem.css.js.map +1 -1
  85. package/dist/generated/themes/CountrySelector.css.d.ts +1 -1
  86. package/dist/generated/themes/CountrySelector.css.js +1 -1
  87. package/dist/generated/themes/CountrySelector.css.js.map +1 -1
  88. package/dist/generated/themes/Link.css.d.ts +1 -1
  89. package/dist/generated/themes/Link.css.js +1 -1
  90. package/dist/generated/themes/Link.css.js.map +1 -1
  91. package/dist/generated/themes/PhoneNumberField.css.d.ts +1 -1
  92. package/dist/generated/themes/PhoneNumberField.css.js +1 -1
  93. package/dist/generated/themes/PhoneNumberField.css.js.map +1 -1
  94. package/dist/generated/themes/RatingBar.css.d.ts +1 -1
  95. package/dist/generated/themes/RatingBar.css.js +1 -1
  96. package/dist/generated/themes/RatingBar.css.js.map +1 -1
  97. package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
  98. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  99. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  100. package/dist/generated/themes/Search.css.d.ts +1 -1
  101. package/dist/generated/themes/Search.css.js +1 -1
  102. package/dist/generated/themes/Search.css.js.map +1 -1
  103. package/dist/generated/themes/SelectBox.css.d.ts +1 -1
  104. package/dist/generated/themes/SelectBox.css.js +1 -1
  105. package/dist/generated/themes/SelectBox.css.js.map +1 -1
  106. package/dist/generated/themes/Slider.css.d.ts +1 -1
  107. package/dist/generated/themes/Slider.css.js +1 -1
  108. package/dist/generated/themes/Slider.css.js.map +1 -1
  109. package/dist/generated/themes/TextArea.css.d.ts +1 -1
  110. package/dist/generated/themes/TextArea.css.js +1 -1
  111. package/dist/generated/themes/TextArea.css.js.map +1 -1
  112. package/dist/generated/themes/TextField.css.d.ts +1 -1
  113. package/dist/generated/themes/TextField.css.js +1 -1
  114. package/dist/generated/themes/TextField.css.js.map +1 -1
  115. package/dist/vscode.html-custom-data.json +21 -3
  116. package/dist/web-types.json +60 -6
  117. package/package.json +1 -1
  118. package/src/Accordion.ts +56 -26
  119. package/src/AvatarGroup.ts +10 -5
  120. package/src/Footer.ts +28 -35
  121. package/src/FooterTemplate.tsx +410 -0
  122. package/src/HeroBanner.ts +4 -4
  123. package/src/HeroBannerTemplate.tsx +101 -0
  124. package/src/LinkListItemTemplate.tsx +4 -1
  125. package/src/List.ts +5 -0
  126. package/src/ListGroupHeader.ts +5 -0
  127. package/src/ListSelectAll.ts +5 -1
  128. package/src/PasswordField.ts +7 -10
  129. package/src/PasswordFieldTemplate.tsx +29 -0
  130. package/src/RatingBar.ts +3 -3
  131. package/src/RatingBarTemplate.tsx +38 -0
  132. package/src/StatusBadge.ts +5 -4
  133. package/src/StatusBadgeTemplate.tsx +18 -0
  134. package/src/StatusMessage.ts +3 -3
  135. package/src/StatusMessageTemplate.tsx +20 -0
  136. package/src/Switch.ts +5 -11
  137. package/src/SwitchTemplate.tsx +50 -0
  138. package/src/TagGroup.ts +13 -3
  139. package/src/TextField.ts +5 -3
  140. package/src/Tooltip.ts +5 -0
  141. package/src/generated/themes/AccordionItem.css.ts +1 -1
  142. package/src/generated/themes/CountrySelector.css.ts +1 -1
  143. package/src/generated/themes/Link.css.ts +1 -1
  144. package/src/generated/themes/PhoneNumberField.css.ts +1 -1
  145. package/src/generated/themes/RatingBar.css.ts +1 -1
  146. package/src/generated/themes/RatingIndicator.css.ts +1 -1
  147. package/src/generated/themes/Search.css.ts +1 -1
  148. package/src/generated/themes/SelectBox.css.ts +1 -1
  149. package/src/generated/themes/Slider.css.ts +1 -1
  150. package/src/generated/themes/TextArea.css.ts +1 -1
  151. package/src/generated/themes/TextField.css.ts +1 -1
  152. package/src/themes/AccordionItem.css +0 -1
  153. package/src/themes/CountrySelector.css +0 -14
  154. package/src/themes/Link.css +11 -4
  155. package/src/themes/PhoneNumberField.css +6 -8
  156. package/src/themes/RatingBar.css +2 -2
  157. package/src/themes/Search.css +3 -3
  158. package/src/themes/SelectBox.css +4 -0
  159. package/src/themes/TextArea.css +6 -6
  160. package/src/themes/TextField.css +6 -10
  161. package/dist/generated/templates/FooterTemplate.lit.d.ts +0 -3
  162. package/dist/generated/templates/FooterTemplate.lit.js +0 -39
  163. package/dist/generated/templates/FooterTemplate.lit.js.map +0 -1
  164. package/dist/generated/templates/PasswordFieldTemplate.lit.d.ts +0 -3
  165. package/dist/generated/templates/PasswordFieldTemplate.lit.js +0 -7
  166. package/dist/generated/templates/PasswordFieldTemplate.lit.js.map +0 -1
  167. package/dist/generated/templates/RatingBarTemplate.lit.d.ts +0 -3
  168. package/dist/generated/templates/RatingBarTemplate.lit.js +0 -8
  169. package/dist/generated/templates/RatingBarTemplate.lit.js.map +0 -1
  170. package/dist/generated/templates/StatusBadgeTemplate.lit.d.ts +0 -3
  171. package/dist/generated/templates/StatusBadgeTemplate.lit.js +0 -7
  172. package/dist/generated/templates/StatusBadgeTemplate.lit.js.map +0 -1
  173. package/dist/generated/templates/StatusMessageTemplate.lit.d.ts +0 -3
  174. package/dist/generated/templates/StatusMessageTemplate.lit.js +0 -8
  175. package/dist/generated/templates/StatusMessageTemplate.lit.js.map +0 -1
  176. package/dist/generated/templates/SwitchTemplate.lit.d.ts +0 -3
  177. package/dist/generated/templates/SwitchTemplate.lit.js +0 -14
  178. package/dist/generated/templates/SwitchTemplate.lit.js.map +0 -1
  179. package/src/Footer.hbs +0 -296
  180. package/src/PasswordField.hbs +0 -18
  181. package/src/RatingBar.hbs +0 -11
  182. package/src/StatusBadge.hbs +0 -9
  183. package/src/StatusMessage.hbs +0 -6
  184. package/src/Switch.hbs +0 -35
  185. package/src/generated/templates/FooterTemplate.lit.ts +0 -43
  186. package/src/generated/templates/PasswordFieldTemplate.lit.ts +0 -11
  187. package/src/generated/templates/RatingBarTemplate.lit.ts +0 -12
  188. package/src/generated/templates/StatusBadgeTemplate.lit.ts +0 -11
  189. package/src/generated/templates/StatusMessageTemplate.lit.ts +0 -12
  190. package/src/generated/templates/SwitchTemplate.lit.ts +0 -18
package/src/Footer.ts CHANGED
@@ -1,13 +1,14 @@
1
1
  import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
2
+ import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
3
3
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
4
4
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
5
5
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
6
6
  import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
7
7
  import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
8
-
9
8
  import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
10
9
  import { getLanguage } from "@ui5/webcomponents-base/dist/config/Language.js";
10
+ import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
11
+ import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
11
12
  import Icon from "@ui5/webcomponents/dist/Icon.js";
12
13
  import UDExAccordionItem from "./AccordionItem.js";
13
14
  import UDExButton from "./Button.js";
@@ -19,14 +20,7 @@ import type { UDExSocialMediaButtonType } from "./types/SocialMediaButtonType.js
19
20
  import type { UDExTarget } from "./types/common.js";
20
21
  import { BreakpointUtils } from "./utils/Breakpoints.js";
21
22
  import parseArrayFromString from "./utils/parseArrayFromString.js";
22
-
23
- // Template
24
- import FooterTemplate from "./generated/templates/FooterTemplate.lit.js";
25
-
26
- // Styles
27
- import FooterCss from "./generated/themes/Footer.css.js";
28
- import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
29
- import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
23
+ import FooterTemplate from "./FooterTemplate.js";
30
24
  import {
31
25
  ABOUT_SAP,
32
26
  CHAT_WITH_US,
@@ -42,15 +36,14 @@ import {
42
36
  PUBLIC_SECURITY_NETWORK_NUMBER,
43
37
  ICP_NUMBER,
44
38
  } from "./generated/i18n/i18n-defaults.js";
45
- import "@ui5/webcomponents-icons/dist/headset.js";
46
- import "@ui5/webcomponents-icons/dist/email.js";
47
- import "@ui5/webcomponents-icons/dist/back-to-top.js";
48
- import "@ui5/webcomponents-icons/dist/discussion-2.js";
49
- import "@ui5/webcomponents-icons/dist/navigation-right-arrow.js";
39
+
40
+ // Styles
41
+ import FooterCss from "./generated/themes/Footer.css.js";
50
42
 
51
43
  export const chineseICPDefaultLink = "https://beian.miit.gov.cn/";
52
44
 
53
45
  export type FooterLink = {
46
+ id: string;
54
47
  title: string;
55
48
  url: string;
56
49
  target: UDExTarget;
@@ -70,14 +63,14 @@ export type FooterContactNumber = {
70
63
  };
71
64
 
72
65
  type UDExFooterDetailedClickEventDetail = {
73
- originalEvent: PointerEvent,
66
+ originalEvent: MouseEvent,
74
67
  name: string | undefined;
75
68
  id?: string;
76
69
  sourceNode: HTMLElement;
77
70
  }
78
71
 
79
72
  type UDExFooterBaseEventDetail = {
80
- originalEvent: PointerEvent,
73
+ originalEvent: MouseEvent | Event,
81
74
  }
82
75
 
83
76
  type BaseEvents = "contact-chat-click" | "contact-phone-local-numbers-click" | "contact-email-click" | "contact-phone-click" | "logo-click" | "back-to-top-click";
@@ -106,7 +99,7 @@ type DetailedEvents = "quick-links-click" | "trending-click" | "about-sap-click"
106
99
  @customElement({
107
100
  languageAware: true,
108
101
  tag: "udex-footer",
109
- renderer: litRender,
102
+ renderer: jsxRenderer,
110
103
  styles: [FooterCss],
111
104
  template: FooterTemplate,
112
105
  dependencies: [UDExAccordion, UDExAccordionItem, Icon, UDExButton, UDExDivider, UDExLink, UDExSocialMediaButton],
@@ -437,7 +430,7 @@ class UDExFooter extends UI5Element {
437
430
  this._shouldRenderMobileMenu = this.isMobile;
438
431
  }
439
432
 
440
- onBackToTopClick(e: PointerEvent): void {
433
+ onBackToTopClick(e: Event): void {
441
434
  this.fireFooterBaseEvent(e, "back-to-top-click");
442
435
 
443
436
  window.scrollTo(0, 0);
@@ -490,19 +483,19 @@ class UDExFooter extends UI5Element {
490
483
  return UDExFooter.i18nBundle.getText(CHAT_WITH_US);
491
484
  }
492
485
 
493
- get _quickLinksTitle() {
486
+ get _quickLinksTitle(): string {
494
487
  return this.quickLinksTitle || UDExFooter.i18nBundle.getText(QUICK_LINKS);
495
488
  }
496
489
 
497
- get _trendingTitle() {
490
+ get _trendingTitle(): string {
498
491
  return this.trendingTitle || UDExFooter.i18nBundle.getText(TRENDING);
499
492
  }
500
493
 
501
- get _aboutSapTitle() {
494
+ get _aboutSapTitle(): string {
502
495
  return this.aboutSapTitle || UDExFooter.i18nBundle.getText(ABOUT_SAP);
503
496
  }
504
497
 
505
- get _siteInformationTitle() {
498
+ get _siteInformationTitle(): string {
506
499
  return this.siteInformationTitle || UDExFooter.i18nBundle.getText(SITE_INFORMATION);
507
500
  }
508
501
 
@@ -568,48 +561,48 @@ class UDExFooter extends UI5Element {
568
561
  return this.isChineseLang && this.chineseLogoUrl ? `${root}-chinese` : root;
569
562
  }
570
563
 
571
- _onLogoClick(e: PointerEvent): void {
564
+ _onLogoClick(e: MouseEvent): void {
572
565
  this.fireFooterBaseEvent(e, "logo-click");
573
566
  }
574
567
 
575
- _onContactPhoneClick(e: PointerEvent): void {
568
+ _onContactPhoneClick(e: MouseEvent): void {
576
569
  this.fireFooterBaseEvent(e, "contact-phone-click");
577
570
  }
578
- _onContactPhoneLocalNumbersClick(e: PointerEvent): void {
571
+ _onContactPhoneLocalNumbersClick(e: Event): void {
579
572
  this.fireFooterBaseEvent(e, "contact-phone-local-numbers-click");
580
573
  }
581
- _onContactEmailClick(e: PointerEvent): void {
574
+ _onContactEmailClick(e: MouseEvent): void {
582
575
  this.fireFooterBaseEvent(e, "contact-email-click");
583
576
  }
584
- _onContactChatClick(e: PointerEvent): void {
577
+ _onContactChatClick(e: MouseEvent): void {
585
578
  this.fireFooterBaseEvent(e, "contact-chat-click");
586
579
  }
587
580
 
588
- _onQuickLinksClick(e: PointerEvent): void {
581
+ _onQuickLinksClick(e: MouseEvent): void {
589
582
  this.fireFooterDetailedClickEvent(e, "quick-links-click");
590
583
  }
591
584
 
592
- _onTrendingClick(e: PointerEvent): void {
585
+ _onTrendingClick(e: MouseEvent): void {
593
586
  this.fireFooterDetailedClickEvent(e, "trending-click");
594
587
  }
595
588
 
596
- _onAboutSapClick(e: PointerEvent): void {
589
+ _onAboutSapClick(e: MouseEvent): void {
597
590
  this.fireFooterDetailedClickEvent(e, "about-sap-click");
598
591
  }
599
592
 
600
- _onSiteInformationClick(e: PointerEvent): void {
593
+ _onSiteInformationClick(e: MouseEvent): void {
601
594
  this.fireFooterDetailedClickEvent(e, "site-information-click");
602
595
  }
603
596
 
604
- _onSocialMediaLinkClick(e: PointerEvent): void {
597
+ _onSocialMediaLinkClick(e: MouseEvent): void {
605
598
  this.fireFooterDetailedClickEvent(e, "social-media-link-click");
606
599
  }
607
600
 
608
- fireFooterBaseEvent(e: PointerEvent, eventName: BaseEvents): void {
601
+ fireFooterBaseEvent(e: MouseEvent | Event, eventName: BaseEvents): void {
609
602
  this.fireDecoratorEvent(eventName, { originalEvent: e });
610
603
  }
611
604
 
612
- fireFooterDetailedClickEvent(e: PointerEvent, eventName: DetailedEvents): void {
605
+ fireFooterDetailedClickEvent(e: MouseEvent, eventName: DetailedEvents): void {
613
606
  const sourceNode = e.composedPath()[0] as HTMLElement;
614
607
  const { innerText, dataset: { id, name } } = sourceNode;
615
608
 
@@ -0,0 +1,410 @@
1
+ import IconMode from "@ui5/webcomponents/dist/types/IconMode.js";
2
+ import UI5Icon from "@ui5/webcomponents/dist/Icon.js";
3
+ import UI5LinkDesign from "@ui5/webcomponents/dist/types/LinkDesign.js";
4
+
5
+ import headset from "@ui5/webcomponents-icons/dist/headset.js";
6
+ import email from "@ui5/webcomponents-icons/dist/email.js";
7
+ import backToTop from "@ui5/webcomponents-icons/dist/back-to-top.js";
8
+ import discussion from "@ui5/webcomponents-icons/dist/discussion-2.js";
9
+
10
+ import type Footer from "./Footer.js";
11
+ import UDExLink from "./Link.js";
12
+ import UDExDivider from "./Divider.js";
13
+ import UDExSocialMediaButton from "./SocialMediaButton.js";
14
+ import UDExAccordion from "./Accordion.js";
15
+ import UDExAccordionItem from "./AccordionItem.js";
16
+ import UDExButton from "./Button.js";
17
+ import UDExButtonDesign from "./types/ButtonDesign.js";
18
+ import UDExButtonSize from "./types/ButtonSize.js";
19
+
20
+ export default function FooterTemplate(this: Footer) {
21
+ const rootClass = "udex-footer";
22
+
23
+ return (
24
+ <footer className={rootClass}>
25
+ <div className={`${rootClass}__content`}>
26
+ <div className={`${rootClass}__contact-social`}>
27
+ {this.hasLogo && (
28
+ <div className={`${rootClass}__logo`}>
29
+ {this.hasLogoLink ? (
30
+ <a
31
+ href={this.logoHref}
32
+ onClick={this._onLogoClick}
33
+ title={this.logoTitle}
34
+ aria-label={this.logoAriaLabel}>
35
+ <img
36
+ id={`${rootClass}__logo-image`}
37
+ src={this.currentLogoUrl}
38
+ className={this.logoClass}
39
+ alt={this.logoAlt}
40
+ />
41
+ </a>
42
+ ) : (
43
+ <img
44
+ id={`${rootClass}__logo-image`}
45
+ src={this.currentLogoUrl}
46
+ className={this.logoClass}
47
+ alt={this.logoAlt}
48
+ />
49
+ )}
50
+ {this.hasTagline && (
51
+ <img
52
+ id={`${rootClass}__tagline-image`}
53
+ src={this.currentTaglineUrl}
54
+ className={this.taglineClass}
55
+ alt={this.taglineAlt}
56
+ />
57
+ )}
58
+ </div>
59
+ )}
60
+ {this.isContactContainerVisible && (
61
+ <div className={`${rootClass}__contact`}>
62
+ {this.contactNumbersArray.length > 0 && (
63
+ <div className={`${rootClass}__numbers`}>
64
+ <div className={`${rootClass}__icon-container`}>
65
+ <UI5Icon
66
+ class={`${rootClass}__icon`}
67
+ name={headset}
68
+ mode={IconMode.Decorative}
69
+ ></UI5Icon>
70
+ </div>
71
+ <div>
72
+ <div className={`${rootClass}__numbers-wrapper`}>
73
+ {this.contactNumbersArray.map((contact, index) => (
74
+ <div key={index}>
75
+ <span
76
+ className="hidden"
77
+ aria-hidden
78
+ id={`${rootClass}__${index}_phone-label`}>
79
+ {`${this.phoneNumberAccessibleName} ${contact.country} : ${contact.number}`}
80
+ </span>
81
+ <p className={`${rootClass}__country`}>{contact.country}</p>
82
+ <a
83
+ href={`tel:${contact.number}`}
84
+ className={`${rootClass}__number`}
85
+ onClick={this._onContactPhoneClick}
86
+ aria-labelledby={`${rootClass}__${index}_phone-label`}>
87
+ {contact.number}
88
+ </a>
89
+ </div>
90
+ ))}
91
+ </div>
92
+ {this.localCountryNumbersLink && (
93
+ <p className={`${rootClass}__remark`}>
94
+ {this.completeListTitle}
95
+ <UDExLink
96
+ class={`${rootClass}__remark-link`}
97
+ onClick={this._onContactPhoneLocalNumbersClick}
98
+ href={this.localCountryNumbersLink}
99
+ design={UI5LinkDesign.Subtle}>
100
+ {this.localCountryTitle}.
101
+ </UDExLink>
102
+ </p>
103
+ )}
104
+ </div>
105
+ </div>
106
+ )}
107
+ {this.contactUsLink && (
108
+ <div className={`${rootClass}__contact-us`}>
109
+ <div className={`${rootClass}__icon-container`}>
110
+ <UI5Icon
111
+ class={`${rootClass}__icon`}
112
+ name={email}
113
+ mode={IconMode.Decorative}>
114
+ </UI5Icon>
115
+ </div>
116
+ <span
117
+ className="hidden"
118
+ aria-hidden
119
+ id={`${rootClass}__contact-us-label`}>
120
+ {this.contactUsAccessibleLabel}
121
+ </span>
122
+ <a
123
+ href={this.contactUsLink}
124
+ className={`${rootClass}__contact-us-link`}
125
+ aria-labelledby={`${rootClass}__contact-us-label`}
126
+ onClick={this._onContactEmailClick}>
127
+ {this.contactUsAccessibleName}
128
+ </a>
129
+ </div>
130
+ )}
131
+ {this.chatWithUsLink && (
132
+ <div className={`${rootClass}__chat-with-us`}>
133
+ <div className={`${rootClass}__icon-container`}>
134
+ <UI5Icon
135
+ class={`${rootClass}__icon`}
136
+ name={discussion}
137
+ mode={IconMode.Decorative}>
138
+ </UI5Icon>
139
+ </div>
140
+ <a
141
+ href={this.chatWithUsLink}
142
+ className={`${rootClass}__chat-with-us-link`}
143
+ onClick={this._onContactChatClick}>
144
+ {this.chatWithUsAccessibleName}
145
+ </a>
146
+ </div>
147
+ )}
148
+ </div>
149
+ )}
150
+ </div>
151
+
152
+ {this.isContactContainerVisible && (
153
+ <UDExDivider class={`${rootClass}__divider`}></UDExDivider>
154
+ )}
155
+
156
+ {this._shouldRenderMobileMenu ? (
157
+ mobileNavigation.call(this, rootClass)
158
+ ) : (
159
+ desktopNavigation.call(this, rootClass)
160
+ )}
161
+
162
+ <UDExDivider class={`${rootClass}__divider`}></UDExDivider>
163
+ </div>
164
+
165
+ <div className={`${rootClass}__copyright`}>
166
+ {this.isChineseLang && (
167
+ <span className={`${rootClass}__copyright-chinese-text`}>
168
+ <a
169
+ href={this.chineseIcpNumberLink}
170
+ title={this.chineseICPNumber}
171
+ className={`${rootClass}__copyright-chinese-link`}
172
+ target="_blank"
173
+ rel="noopener noreferrer">
174
+ {this.chineseICPNumber}
175
+ </a>
176
+ {this.chineseSecurityNetworkNumber}
177
+ </span>
178
+ )}
179
+ <span className={`${rootClass}__copyright-text`}>{this.copyrightText}</span>
180
+ </div>
181
+
182
+ {this.socialLinksArray.length > 0 && (
183
+ <div className={`${rootClass}__social-container`}>
184
+ {this.socialLinksArray.map((social, index) => (
185
+ <UDExSocialMediaButton
186
+ key={index}
187
+ type={social.name}
188
+ url={social.url}
189
+ target={social.target}
190
+ accessible-name={social.accessibleName}
191
+ data-name={social.name}
192
+ data-id={social.id}
193
+ onui5-click={this._onSocialMediaLinkClick}>
194
+ </UDExSocialMediaButton>
195
+ ))}
196
+ </div>
197
+ )}
198
+
199
+ <UDExButton
200
+ class={`${rootClass}__back-to-top-button`}
201
+ icon={backToTop}
202
+ onClick={this.onBackToTopClick}
203
+ design={UDExButtonDesign.Tertiary}
204
+ size={UDExButtonSize.Large}
205
+ accessibleName="back to top">
206
+ </UDExButton>
207
+ </footer>
208
+ );
209
+ }
210
+
211
+ function mobileNavigation(this: Footer, rootClass: string) {
212
+ return (
213
+ <UDExAccordion class={`${rootClass}__accordion`}>
214
+ {this.quickLinksArray.length > 0 && (
215
+ <>
216
+ <UDExAccordionItem label={this._quickLinksTitle} class={`${rootClass}__action-item`}>
217
+ <ul className={`${rootClass}__links-list udex-footer__links-list--mobile`}>
218
+ {this.quickLinksArray.map((link, index) => (
219
+ <li key={index}>
220
+ <a
221
+ target={link.target}
222
+ aria-describedby={`${rootClass}__quick-links`}
223
+ href={link.url}
224
+ data-id={link.id}
225
+ onClick={this._onQuickLinksClick}>
226
+ {link.title}
227
+ </a>
228
+ </li>
229
+ ))}
230
+ </ul>
231
+ <h3 className={`${rootClass}__links-item hidden`} aria-hidden="true" id={`${rootClass}__quick-links`}>
232
+ {this._quickLinksTitle}
233
+ </h3>
234
+ </UDExAccordionItem>
235
+ </>
236
+ )}
237
+
238
+ {this.trendingLinksArray.length > 0 && (
239
+ <>
240
+ <UDExAccordionItem label={this._trendingTitle} class={`${rootClass}__action-item`}>
241
+ <ul className={`${rootClass}__links-list ${rootClass}__links-list--mobile`}>
242
+ {this.trendingLinksArray.map((link, index) => (
243
+ <li key={index}>
244
+ <a
245
+ target={link.target}
246
+ aria-describedby={`${rootClass}__footer__trending`}
247
+ href={link.url}
248
+ data-id={link.id}
249
+ onClick={this._onTrendingClick}>
250
+ {link.title}
251
+ </a>
252
+ </li>
253
+ ))}
254
+ </ul>
255
+ <h3 className={`${rootClass}__links-item hidden`} aria-hidden="true" id={`${rootClass}__trending`}>
256
+ {this._trendingTitle}
257
+ </h3>
258
+ </UDExAccordionItem>
259
+ </>
260
+ )}
261
+
262
+ {this.aboutLinksArray.length > 0 && (
263
+ <>
264
+ <UDExAccordionItem label={this._aboutSapTitle} class={`${rootClass}__action-item`}>
265
+ <ul className={`${rootClass}__links-list ${rootClass}__links-list--mobile`}>
266
+ {this.aboutLinksArray.map((link, index) => (
267
+ <li key={index}>
268
+ <a
269
+ target={link.target}
270
+ aria-describedby={`${rootClass}__about`}
271
+ href={link.url}
272
+ data-id={link.id}
273
+ onClick={this._onAboutSapClick}>
274
+ {link.title}
275
+ </a>
276
+ </li>
277
+ ))}
278
+ </ul>
279
+ <h3 className={`${rootClass}__links-item hidden`} aria-hidden="true" id={`${rootClass}__about`}>
280
+ {this._aboutSapTitle}
281
+ </h3>
282
+ </UDExAccordionItem>
283
+ </>
284
+ )}
285
+
286
+ {this.siteInformationLinksArray.length > 0 && (
287
+ <>
288
+ <UDExAccordionItem label={this._siteInformationTitle} class={`${rootClass}__action-item`}>
289
+ <ul className={`${rootClass}__links-list rootClass__links-list--mobile`}>
290
+ {this.siteInformationLinksArray.map((link, index) => (
291
+ <li key={index}>
292
+ <a
293
+ target={link.target}
294
+ aria-describedby={`${rootClass}__site-information`}
295
+ href={link.url}
296
+ data-id={link.id}
297
+ onClick={this._onSiteInformationClick}>
298
+ {link.title}
299
+ </a>
300
+ </li>
301
+ ))}
302
+ </ul>
303
+ <h3 className={`${rootClass}__links-item hidden`} aria-hidden="true" id={`${rootClass}__site-information`}>
304
+ {this._siteInformationTitle}
305
+ </h3>
306
+ </UDExAccordionItem>
307
+ </>
308
+ )}
309
+ </UDExAccordion>
310
+ );
311
+ }
312
+
313
+ function desktopNavigation(this: Footer, rootClass: string) {
314
+ return (
315
+ <div className={`${rootClass}__links`}>
316
+ {this.quickLinksArray.length > 0 && (
317
+ <div className={`${rootClass}__links-group ${rootClass}__quick-links`}>
318
+ <h3 className={`${rootClass}__links-item`} id={`${rootClass}__quick-links`}>
319
+ {this._quickLinksTitle}
320
+ </h3>
321
+ <nav aria-labelledby={`${rootClass}__quick-links`}>
322
+ <ul className={`${rootClass}__links-list ${rootClass}__links-list--desktop`}>
323
+ {this.quickLinksArray.map((link, index) => (
324
+ <li key={index}>
325
+ <a
326
+ target={link.target}
327
+ aria-describedby={`${rootClass}__quick-links`}
328
+ data-id={link.id}
329
+ href={link.url}
330
+ onClick={this._onQuickLinksClick}>
331
+ {link.title}
332
+ </a>
333
+ </li>
334
+ ))}
335
+ </ul>
336
+ </nav>
337
+ </div>
338
+ )}
339
+ {this.trendingLinksArray.length > 0 && (
340
+ <div className={`${rootClass}__links-group ${rootClass}__trending-links`}>
341
+ <h3 className={`${rootClass}__links-item`} id={`${rootClass}__trending`}>
342
+ {this._trendingTitle}
343
+ </h3>
344
+ <nav aria-labelledby={`${rootClass}__trending`}>
345
+ <ul className={`${rootClass}__links-list ${rootClass}__links-list--desktop`}>
346
+ {this.trendingLinksArray.map((link, index) => (
347
+ <li key={index}>
348
+ <a
349
+ target={link.target}
350
+ aria-describedby={`${rootClass}__footer__trending`}
351
+ data-id={link.id}
352
+ href={link.url}
353
+ onClick={this._onTrendingClick}>
354
+ {link.title}
355
+ </a>
356
+ </li>
357
+ ))}
358
+ </ul>
359
+ </nav>
360
+ </div>
361
+ )}
362
+ {this.aboutLinksArray.length > 0 && (
363
+ <div className={`${rootClass}__links-group ${rootClass}__about-links`}>
364
+ <h3 className={`${rootClass}__links-item`} id={`${rootClass}__about`}>
365
+ {this._aboutSapTitle}
366
+ </h3>
367
+ <nav aria-labelledby={`${rootClass}__about`}>
368
+ <ul className={`${rootClass}__links-list ${rootClass}__links-list--desktop`}>
369
+ {this.aboutLinksArray.map((link, index) => (
370
+ <li key={index}>
371
+ <a
372
+ target={link.target}
373
+ aria-describedby={`${rootClass}__about`}
374
+ data-id={link.id}
375
+ href={link.url}
376
+ onClick={this._onAboutSapClick}>
377
+ {link.title}
378
+ </a>
379
+ </li>
380
+ ))}
381
+ </ul>
382
+ </nav>
383
+ </div>
384
+ )}
385
+ {this.siteInformationLinksArray.length > 0 && (
386
+ <div className={`${rootClass}__links-group ${rootClass}__site-information-links`}>
387
+ <h3 className={`${rootClass}__links-item`} id={`${rootClass}__site-information`}>
388
+ {this._siteInformationTitle}
389
+ </h3>
390
+ <nav aria-labelledby={`${rootClass}__site-information`}>
391
+ <ul className={`${rootClass}__links-list ${rootClass}__links-list--desktop`}>
392
+ {this.siteInformationLinksArray.map((link, index) => (
393
+ <li key={index}>
394
+ <a
395
+ target={link.target}
396
+ aria-describedby={`${rootClass}__site-information`}
397
+ data-id={link.id}
398
+ href={link.url}
399
+ onClick={this._onSiteInformationClick}>
400
+ {link.title}
401
+ </a>
402
+ </li>
403
+ ))}
404
+ </ul>
405
+ </nav>
406
+ </div>
407
+ )}
408
+ </div>
409
+ );
410
+ }
package/src/HeroBanner.ts CHANGED
@@ -2,12 +2,12 @@ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
3
3
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
4
4
  import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
5
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
5
+ import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
6
6
  import { isSpace } from "@ui5/webcomponents-base/dist/Keys.js";
7
7
  import Icon from "@ui5/webcomponents/dist/Icon.js";
8
8
  import "@ui5/webcomponents-icons/dist/media-play.js";
9
9
  import "@ui5/webcomponents-icons/dist/media-pause.js";
10
- import HeroBannerTemplate from "./generated/templates/HeroBannerTemplate.lit.js";
10
+ import HeroBannerTemplate from "./HeroBannerTemplate.js";
11
11
 
12
12
  // Styles
13
13
  import HeroBannerCss from "./generated/themes/HeroBanner.css.js";
@@ -27,7 +27,7 @@ export enum UDExImageLoadingStrategies {
27
27
  */
28
28
  @customElement({
29
29
  tag: "udex-hero-banner",
30
- renderer: litRender,
30
+ renderer: jsxRenderer,
31
31
  styles: HeroBannerCss,
32
32
  template: HeroBannerTemplate,
33
33
  dependencies: [Icon],
@@ -148,7 +148,7 @@ class UDExHeroBanner extends UI5Element {
148
148
  }
149
149
 
150
150
  get wrapperBackgroundImage(): string {
151
- return this.backgroundGradient ? `background-image:${this.backgroundGradient}` : "";
151
+ return this.backgroundGradient ? this.backgroundGradient : "";
152
152
  }
153
153
 
154
154
  /**