@sapudex/web-components 2.57.0 → 2.58.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 (222) hide show
  1. package/cypress/specs/FilterMenu.cy.tsx +209 -19
  2. package/cypress/specs/List.cy.tsx +67 -4
  3. package/cypress/specs/ListItem.cy.tsx +35 -9
  4. package/cypress/specs/SelectBox.cy.tsx +100 -0
  5. package/cypress/specs/TabNavigation.cy.tsx +297 -21
  6. package/dist/List.d.ts +15 -1
  7. package/dist/List.js +23 -2
  8. package/dist/List.js.map +1 -1
  9. package/dist/ListGroupHeaderBase.d.ts +13 -0
  10. package/dist/ListGroupHeaderBase.js +43 -2
  11. package/dist/ListGroupHeaderBase.js.map +1 -1
  12. package/dist/ListGroupHeaderTemplate.js +26 -7
  13. package/dist/ListGroupHeaderTemplate.js.map +1 -1
  14. package/dist/ListItem.d.ts +0 -3
  15. package/dist/ListItem.js +18 -12
  16. package/dist/ListItem.js.map +1 -1
  17. package/dist/ListItemBase.d.ts +17 -0
  18. package/dist/ListItemBase.js +15 -0
  19. package/dist/ListItemBase.js.map +1 -1
  20. package/dist/ListItemTemplate.js +2 -2
  21. package/dist/ListItemTemplate.js.map +1 -1
  22. package/dist/MastheadCountrySelector.js +5 -5
  23. package/dist/MastheadCountrySelector.js.map +1 -1
  24. package/dist/MastheadCountrySelectorTemplate.d.ts +2 -0
  25. package/dist/MastheadCountrySelectorTemplate.js +15 -0
  26. package/dist/MastheadCountrySelectorTemplate.js.map +1 -0
  27. package/dist/MastheadItem.d.ts +0 -3
  28. package/dist/MastheadItem.js +3 -6
  29. package/dist/MastheadItem.js.map +1 -1
  30. package/dist/MastheadItemTemplate.d.ts +2 -0
  31. package/dist/MastheadItemTemplate.js +41 -0
  32. package/dist/MastheadItemTemplate.js.map +1 -0
  33. package/dist/MastheadMenu.d.ts +1 -0
  34. package/dist/MastheadMenu.js +4 -6
  35. package/dist/MastheadMenu.js.map +1 -1
  36. package/dist/MastheadMenuItem.d.ts +0 -3
  37. package/dist/MastheadMenuItem.js +3 -6
  38. package/dist/MastheadMenuItem.js.map +1 -1
  39. package/dist/MastheadMenuItemTemplate.d.ts +2 -0
  40. package/dist/MastheadMenuItemTemplate.js +36 -0
  41. package/dist/MastheadMenuItemTemplate.js.map +1 -0
  42. package/dist/MastheadMenuTemplate.d.ts +2 -0
  43. package/dist/MastheadMenuTemplate.js +13 -0
  44. package/dist/MastheadMenuTemplate.js.map +1 -0
  45. package/dist/MastheadMobileMenu.js +3 -3
  46. package/dist/MastheadMobileMenu.js.map +1 -1
  47. package/dist/MastheadMobileMenuTemplate.d.ts +2 -0
  48. package/dist/MastheadMobileMenuTemplate.js +33 -0
  49. package/dist/MastheadMobileMenuTemplate.js.map +1 -0
  50. package/dist/MastheadProfileMenu.d.ts +2 -4
  51. package/dist/MastheadProfileMenu.js +5 -20
  52. package/dist/MastheadProfileMenu.js.map +1 -1
  53. package/dist/MastheadProfileMenuTemplate.d.ts +2 -0
  54. package/dist/MastheadProfileMenuTemplate.js +24 -0
  55. package/dist/MastheadProfileMenuTemplate.js.map +1 -0
  56. package/dist/MastheadShell.js +3 -5
  57. package/dist/MastheadShell.js.map +1 -1
  58. package/dist/MastheadShellTemplate.d.ts +2 -0
  59. package/dist/MastheadShellTemplate.js +20 -0
  60. package/dist/MastheadShellTemplate.js.map +1 -0
  61. package/dist/SearchableListBase.d.ts +10 -0
  62. package/dist/SearchableListBase.js +34 -1
  63. package/dist/SearchableListBase.js.map +1 -1
  64. package/dist/SearchableListBaseTemplate.js +35 -4
  65. package/dist/SearchableListBaseTemplate.js.map +1 -1
  66. package/dist/SecondaryNavigation.d.ts +1 -0
  67. package/dist/SecondaryNavigation.js +20 -6
  68. package/dist/SecondaryNavigation.js.map +1 -1
  69. package/dist/SelectBase.js +8 -3
  70. package/dist/SelectBase.js.map +1 -1
  71. package/dist/Tab.d.ts +0 -7
  72. package/dist/Tab.js +4 -19
  73. package/dist/Tab.js.map +1 -1
  74. package/dist/TabHeaderTemplate.d.ts +2 -0
  75. package/dist/TabHeaderTemplate.js +15 -0
  76. package/dist/TabHeaderTemplate.js.map +1 -0
  77. package/dist/TabInOverflowTemplate.d.ts +2 -0
  78. package/dist/TabInOverflowTemplate.js +7 -0
  79. package/dist/TabInOverflowTemplate.js.map +1 -0
  80. package/dist/TabNavigation.d.ts +3 -4
  81. package/dist/TabNavigation.js +53 -40
  82. package/dist/TabNavigation.js.map +1 -1
  83. package/dist/TabNavigationPopoverTemplate.d.ts +2 -0
  84. package/dist/TabNavigationPopoverTemplate.js +9 -0
  85. package/dist/TabNavigationPopoverTemplate.js.map +1 -0
  86. package/dist/TabNavigationTemplate.d.ts +2 -0
  87. package/dist/TabNavigationTemplate.js +10 -0
  88. package/dist/TabNavigationTemplate.js.map +1 -0
  89. package/dist/TabTemplate.d.ts +2 -0
  90. package/dist/TabTemplate.js +5 -0
  91. package/dist/TabTemplate.js.map +1 -0
  92. package/dist/assets/{InputSuggestions-C8grDr_8.js → InputSuggestions-CMYjJsHw.js} +1 -1
  93. package/dist/assets/{ListItemStandardExpandableTextTemplate-BQtSr7yg.js → ListItemStandardExpandableTextTemplate-D2i8wWuR.js} +1 -1
  94. package/dist/assets/{bundle.esm-GvPkDyXP.js → bundle.esm-BjN47C_y.js} +242 -242
  95. package/dist/assets/messagebundle_en-B7YJOdQz.js +1 -0
  96. package/dist/css/themes/Button.css +1 -1
  97. package/dist/css/themes/ListGroupHeader.css +1 -1
  98. package/dist/css/themes/PromoTile.css +1 -1
  99. package/dist/css/themes/TabInOverflow.css +1 -1
  100. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  101. package/dist/generated/i18n/i18n-defaults.d.ts +3 -1
  102. package/dist/generated/i18n/i18n-defaults.js +3 -1
  103. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  104. package/dist/generated/themes/Button.css.d.ts +1 -1
  105. package/dist/generated/themes/Button.css.js +1 -1
  106. package/dist/generated/themes/Button.css.js.map +1 -1
  107. package/dist/generated/themes/ListGroupHeader.css.d.ts +1 -1
  108. package/dist/generated/themes/ListGroupHeader.css.js +1 -1
  109. package/dist/generated/themes/ListGroupHeader.css.js.map +1 -1
  110. package/dist/generated/themes/PromoTile.css.d.ts +1 -1
  111. package/dist/generated/themes/PromoTile.css.js +1 -1
  112. package/dist/generated/themes/PromoTile.css.js.map +1 -1
  113. package/dist/generated/themes/TabInOverflow.css.d.ts +1 -1
  114. package/dist/generated/themes/TabInOverflow.css.js +1 -1
  115. package/dist/generated/themes/TabInOverflow.css.js.map +1 -1
  116. package/dist/messagebundle.properties +4 -0
  117. package/dist/messagebundle_en.properties +2 -0
  118. package/dist/web-types.json +1 -1
  119. package/package.json +1 -1
  120. package/src/List.ts +24 -2
  121. package/src/ListGroupHeaderBase.ts +44 -2
  122. package/src/ListGroupHeaderTemplate.tsx +74 -23
  123. package/src/ListItem.ts +18 -15
  124. package/src/ListItemBase.ts +30 -0
  125. package/src/ListItemTemplate.tsx +4 -4
  126. package/src/MastheadCountrySelector.ts +5 -5
  127. package/src/MastheadCountrySelectorTemplate.tsx +98 -0
  128. package/src/MastheadItem.ts +3 -6
  129. package/src/MastheadItemTemplate.tsx +178 -0
  130. package/src/MastheadMenu.ts +5 -6
  131. package/src/MastheadMenuItem.ts +3 -7
  132. package/src/MastheadMenuItemTemplate.tsx +123 -0
  133. package/src/MastheadMenuTemplate.tsx +142 -0
  134. package/src/MastheadMobileMenu.ts +3 -3
  135. package/src/MastheadMobileMenuTemplate.tsx +274 -0
  136. package/src/MastheadProfileMenu.ts +10 -23
  137. package/src/MastheadProfileMenuTemplate.tsx +143 -0
  138. package/src/MastheadShell.ts +3 -5
  139. package/src/MastheadShellTemplate.tsx +228 -0
  140. package/src/SearchableListBase.ts +37 -1
  141. package/src/SearchableListBaseTemplate.tsx +38 -2
  142. package/src/SecondaryNavigation.ts +21 -6
  143. package/src/SelectBase.ts +8 -3
  144. package/src/Tab.ts +4 -24
  145. package/src/TabHeaderTemplate.tsx +153 -0
  146. package/src/TabInOverflowTemplate.tsx +68 -0
  147. package/src/TabNavigation.ts +61 -44
  148. package/src/TabNavigationPopoverTemplate.tsx +27 -0
  149. package/src/TabNavigationTemplate.tsx +98 -0
  150. package/src/TabTemplate.tsx +7 -0
  151. package/src/generated/i18n/i18n-defaults.ts +2 -2
  152. package/src/generated/themes/Button.css.ts +1 -1
  153. package/src/generated/themes/ListGroupHeader.css.ts +1 -1
  154. package/src/generated/themes/PromoTile.css.ts +1 -1
  155. package/src/generated/themes/TabInOverflow.css.ts +1 -1
  156. package/src/i18n/messagebundle.properties +4 -0
  157. package/src/i18n/messagebundle_en.properties +2 -0
  158. package/src/themes/Button.css +2 -1
  159. package/src/themes/ListGroupHeader.css +50 -7
  160. package/src/themes/PromoTile.css +1 -0
  161. package/src/themes/TabInOverflow.css +9 -4
  162. package/dist/assets/messagebundle_en-DBpf5Il2.js +0 -1
  163. package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.d.ts +0 -3
  164. package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js +0 -13
  165. package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js.map +0 -1
  166. package/dist/generated/templates/MastheadItemTemplate.lit.d.ts +0 -3
  167. package/dist/generated/templates/MastheadItemTemplate.lit.js +0 -43
  168. package/dist/generated/templates/MastheadItemTemplate.lit.js.map +0 -1
  169. package/dist/generated/templates/MastheadMenuItemTemplate.lit.d.ts +0 -3
  170. package/dist/generated/templates/MastheadMenuItemTemplate.lit.js +0 -21
  171. package/dist/generated/templates/MastheadMenuItemTemplate.lit.js.map +0 -1
  172. package/dist/generated/templates/MastheadMenuTemplate.lit.d.ts +0 -3
  173. package/dist/generated/templates/MastheadMenuTemplate.lit.js +0 -25
  174. package/dist/generated/templates/MastheadMenuTemplate.lit.js.map +0 -1
  175. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.d.ts +0 -3
  176. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js +0 -37
  177. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js.map +0 -1
  178. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.d.ts +0 -3
  179. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js +0 -18
  180. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js.map +0 -1
  181. package/dist/generated/templates/MastheadShellTemplate.lit.d.ts +0 -3
  182. package/dist/generated/templates/MastheadShellTemplate.lit.js +0 -28
  183. package/dist/generated/templates/MastheadShellTemplate.lit.js.map +0 -1
  184. package/dist/generated/templates/TabHeaderTemplate.lit.d.ts +0 -3
  185. package/dist/generated/templates/TabHeaderTemplate.lit.js +0 -52
  186. package/dist/generated/templates/TabHeaderTemplate.lit.js.map +0 -1
  187. package/dist/generated/templates/TabInOverflowTemplate.lit.d.ts +0 -3
  188. package/dist/generated/templates/TabInOverflowTemplate.lit.js +0 -15
  189. package/dist/generated/templates/TabInOverflowTemplate.lit.js.map +0 -1
  190. package/dist/generated/templates/TabNavigationPopoverTemplate.lit.d.ts +0 -3
  191. package/dist/generated/templates/TabNavigationPopoverTemplate.lit.js +0 -8
  192. package/dist/generated/templates/TabNavigationPopoverTemplate.lit.js.map +0 -1
  193. package/dist/generated/templates/TabNavigationTemplate.lit.d.ts +0 -3
  194. package/dist/generated/templates/TabNavigationTemplate.lit.js +0 -16
  195. package/dist/generated/templates/TabNavigationTemplate.lit.js.map +0 -1
  196. package/dist/generated/templates/TabTemplate.lit.d.ts +0 -3
  197. package/dist/generated/templates/TabTemplate.lit.js +0 -7
  198. package/dist/generated/templates/TabTemplate.lit.js.map +0 -1
  199. package/src/MastheadCountrySelector.hbs +0 -76
  200. package/src/MastheadItem.hbs +0 -136
  201. package/src/MastheadMenu.hbs +0 -131
  202. package/src/MastheadMenuItem.hbs +0 -102
  203. package/src/MastheadMobileMenu.hbs +0 -253
  204. package/src/MastheadProfileMenu.hbs +0 -121
  205. package/src/MastheadShell.hbs +0 -223
  206. package/src/Tab.hbs +0 -1
  207. package/src/TabHeader.hbs +0 -141
  208. package/src/TabInOverflow.hbs +0 -59
  209. package/src/TabNavigation.hbs +0 -88
  210. package/src/TabNavigationPopover.hbs +0 -18
  211. package/src/generated/templates/MastheadCountrySelectorTemplate.lit.ts +0 -17
  212. package/src/generated/templates/MastheadItemTemplate.lit.ts +0 -47
  213. package/src/generated/templates/MastheadMenuItemTemplate.lit.ts +0 -25
  214. package/src/generated/templates/MastheadMenuTemplate.lit.ts +0 -29
  215. package/src/generated/templates/MastheadMobileMenuTemplate.lit.ts +0 -41
  216. package/src/generated/templates/MastheadProfileMenuTemplate.lit.ts +0 -22
  217. package/src/generated/templates/MastheadShellTemplate.lit.ts +0 -32
  218. package/src/generated/templates/TabHeaderTemplate.lit.ts +0 -56
  219. package/src/generated/templates/TabInOverflowTemplate.lit.ts +0 -19
  220. package/src/generated/templates/TabNavigationPopoverTemplate.lit.ts +0 -12
  221. package/src/generated/templates/TabNavigationTemplate.lit.ts +0 -20
  222. package/src/generated/templates/TabTemplate.lit.ts +0 -11
@@ -7,21 +7,18 @@ import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
7
7
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
8
8
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
9
9
  import UI5Icon from "@ui5/webcomponents/dist/Icon.js";
10
- import "@ui5/webcomponents-icons/dist/search.js";
11
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
10
+ import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
12
11
  import { isEscape, isTabNext } from "@ui5/webcomponents-base/dist/Keys.js";
13
12
  import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
14
13
  import {
15
14
  OPENS_IN_A_NEW_WINDOW, PROFILE, CART, COUNTRY_SELECTOR, SUPPORT, SEARCH,
16
15
  } from "./generated/i18n/i18n-defaults.js";
17
16
  import UDExMastheadMenu from "./MastheadMenu.js";
18
- import "@ui5/webcomponents-icons/dist/slim-arrow-down.js";
19
- import "@ui5/webcomponents-icons/dist/world.js";
20
17
  import type UDExAvatar from "./Avatar.js";
21
18
  import type UDExMastheadShell from "./MastheadShell.js";
22
19
  import type UDExMastheadProfileMenu from "./MastheadProfileMenu.js";
23
20
  import type UDExMastheadMobileMenu from "./MastheadMobileMenu.js";
24
- import MastheadItemTemplate from "./generated/templates/MastheadItemTemplate.lit.js";
21
+ import MastheadItemTemplate from "./MastheadItemTemplate.js";
25
22
  import { UDExTarget } from "./types/common.js";
26
23
  import { BreakpointUtils } from "./utils/Breakpoints.js";
27
24
  import parseArrayFromString from "./utils/parseArrayFromString.js";
@@ -94,7 +91,7 @@ type UDExMastheadDropdownEventDetail = {
94
91
  */
95
92
  @customElement({
96
93
  tag: "udex-masthead-item",
97
- renderer: litRender,
94
+ renderer: jsxRenderer,
98
95
  languageAware: true,
99
96
  styles: MastheadItemCss,
100
97
  template: MastheadItemTemplate,
@@ -0,0 +1,178 @@
1
+ import type UDExMastheadItem from "./MastheadItem.js";
2
+ import type { AriaRole } from "@ui5/webcomponents-base";
3
+ import UI5Icon from "@ui5/webcomponents/dist/Icon.js";
4
+ import IconMode from "@ui5/webcomponents/dist/types/IconMode.js";
5
+ import UDExBadge from "./Badge.js";
6
+ import arrowDownIcon from "@ui5/webcomponents-icons/dist/slim-arrow-down.js";
7
+ import worldIcon from "@ui5/webcomponents-icons/dist/world.js";
8
+ import { UDExNumberBadgeDesign, UDExSizeBadgeDesign, UDExTypeBadgeDesign } from "./types/BadgeDesign.js";
9
+
10
+ export default function MastheadItemTemplate(this: UDExMastheadItem) {
11
+ if (this.hasHref) {
12
+ return link.call(this);
13
+ }
14
+ if (this.isProfileBtn) {
15
+ return profileButton.call(this);
16
+ }
17
+ return button.call(this);
18
+ }
19
+
20
+ function link(this: UDExMastheadItem) {
21
+ return (
22
+ <>
23
+ <a
24
+ id={this._id}
25
+ class={this.additionalClass}
26
+ role={this.accessibleRoleName as AriaRole}
27
+ aria-label={this.accessibleLabel}
28
+ target={this.target}
29
+ href={this.href}
30
+ aria-describedby={this.ariaDescribedBy}
31
+ onClick={this.handleItemClick as any}
32
+ onMouseDown={this.handleMouseDown}
33
+ onMouseUp={this.handleMouseUp}
34
+ tabindex={0}>
35
+ {content.call(this)}
36
+ {badge.call(this)}
37
+ </a>
38
+ {this.isTargetBlank && (
39
+ <span id="new-win-desc" class="udex-masthead-hidden-text">
40
+ {this.openInNewWindowText}
41
+ </span>
42
+ )}
43
+ </>
44
+ );
45
+ }
46
+
47
+ function profileButton(this: UDExMastheadItem) {
48
+ return (
49
+ <>
50
+ <button
51
+ class={`udex-masthead-item__btn udex-masthead-item__profile-btn ${this.additionalClass}`}
52
+ id={this._id}
53
+ tabindex={0}
54
+ aria-expanded={this.buttonAriaExpanded}
55
+ aria-describedby={this.ariaDescribedBy}
56
+ aria-controls={`${this._id}_dropdown`}
57
+ aria-label={this.accessibleLabel}
58
+ onKeyDown={this.handleKeyDown}
59
+ onClick={this.handleItemClick as any}
60
+ onclick-default={this.handleItemClick}
61
+ onMouseDown={this.handleMouseDown}
62
+ onMouseUp={this.handleMouseUp}>
63
+ {content.call(this)}
64
+ {badge.call(this)}
65
+ </button>
66
+ {dropdown.call(this)}
67
+ </>
68
+ );
69
+ }
70
+
71
+ function button(this: UDExMastheadItem) {
72
+ return (
73
+ <>
74
+ <button
75
+ role={this.accessibleRoleName as AriaRole}
76
+ id={this._id}
77
+ class={`udex-masthead-item__btn ${this.additionalClass}`}
78
+ tabindex={0}
79
+ aria-expanded={this.buttonAriaExpanded}
80
+ aria-controls={`${this._id}_dropdown`}
81
+ aria-describedby={this.ariaDescribedBy}
82
+ aria-label={this.accessibleLabel}
83
+ onKeyDown={this.handleKeyDown}
84
+ onMouseDown={this.handleMouseDown}
85
+ onMouseUp={this.handleMouseUp}
86
+ onClick={this.handleItemClick as any}>
87
+ {content.call(this)}
88
+ {badge.call(this)}
89
+ </button>
90
+ {dropdown.call(this)}
91
+ </>
92
+ );
93
+ }
94
+
95
+ function content(this: UDExMastheadItem) {
96
+ if (this.icon) {
97
+ return (
98
+ <UI5Icon
99
+ class="udex-masthead-item__icon"
100
+ name={this.icon}
101
+ show-tooltip={this.iconAltText}
102
+ accessible-name={this.iconAltText}
103
+ mode={IconMode.Decorative}>
104
+ </UI5Icon>
105
+ );
106
+ }
107
+
108
+ if (this.image) {
109
+ return (
110
+ <>
111
+ {this.imageLoadError ? (
112
+ <UI5Icon
113
+ class="udex-masthead-item__icon"
114
+ name={worldIcon}
115
+ mode={IconMode.Decorative}>
116
+ </UI5Icon>
117
+ ) : (
118
+ <div class="udex-masthead-item__image-wrap">
119
+ <img
120
+ class="udex-masthead-item__image"
121
+ id={`${this._id}_image-alt`}
122
+ src={this.image}
123
+ aria-hidden={this.isCountrySelectorBtn}
124
+ alt={this.imageAlt}
125
+ onError={this.handleImageError}
126
+ />
127
+ </div>
128
+ )}
129
+ {this.imageAlt && (
130
+ <span id="image-desc" class="udex-masthead-hidden-text">
131
+ {this.imageAlt}
132
+ </span>
133
+ )}
134
+ </>
135
+ );
136
+ }
137
+
138
+ return (
139
+ <span class="udex-masthead-item__text">
140
+ <slot></slot>
141
+ {this.hasArrowDown && (
142
+ <UI5Icon
143
+ class="udex-masthead-item__dropdown-icon"
144
+ name={arrowDownIcon}
145
+ mode={IconMode.Decorative}>
146
+ </UI5Icon>
147
+ )}
148
+ </span>
149
+ );
150
+ }
151
+
152
+ function dropdown(this: UDExMastheadItem) {
153
+ return this.isDropdownOpened ? (
154
+ <div
155
+ class="udex-masthead-item__dropdown"
156
+ id={`${this._id}_dropdown`}
157
+ onKeyDown={this.handleKeyDown}
158
+ onFocusOut={this.handleFocusout}>
159
+ <div class="udex-masthead-item__dropdown-holder">
160
+ <slot name="dropdown"></slot>
161
+ </div>
162
+ </div>
163
+ ) : (
164
+ <div id={`${this._id}_dropdown`}></div>
165
+ );
166
+ }
167
+
168
+ function badge(this: UDExMastheadItem) {
169
+ return this.numberBadge ? (
170
+ <UDExBadge
171
+ class="udex-masthead-item__badge"
172
+ type={UDExTypeBadgeDesign.Number}
173
+ numberDesign={UDExNumberBadgeDesign.Red}
174
+ size={UDExSizeBadgeDesign.Small}>
175
+ {this.numberBadge}
176
+ </UDExBadge>
177
+ ) : undefined;
178
+ }
@@ -1,7 +1,7 @@
1
1
  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
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
4
+ import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
5
5
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
6
6
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
7
7
  import Icon from "@ui5/webcomponents/dist/Icon.js";
@@ -11,11 +11,9 @@ import "@ui5/webcomponents-icons/dist/action.js";
11
11
  import {
12
12
  isTabNext, isTabPrevious, isHome, isEnd,
13
13
  } from "@ui5/webcomponents-base/dist/Keys.js";
14
- import UDExBadge from "./Badge.js";
15
14
  import UDExMastheadMenuItem, { UDExItemType } from "./MastheadMenuItem.js";
16
15
  import type UDExMastheadItem from "./MastheadItem.js";
17
- import UDExDivider from "./Divider.js";
18
- import MastheadMenuTemplate from "./generated/templates/MastheadMenuTemplate.lit.js";
16
+ import MastheadMenuTemplate from "./MastheadMenuTemplate.js";
19
17
  import parseArrayFromString from "./utils/parseArrayFromString.js";
20
18
  import AnalyticsName from "./types/AnalyticsName.js";
21
19
  import { OVERVIEW } from "./generated/i18n/i18n-defaults.js";
@@ -31,6 +29,7 @@ export type Item = {
31
29
  title: string;
32
30
  url?: string;
33
31
  externalLink: boolean;
32
+ badge?: string;
34
33
  isDivider?: boolean;
35
34
  subItems?: Item[];
36
35
  };
@@ -74,10 +73,10 @@ type UDExMastheadMenuMenuItemClickEventDetail = {
74
73
  */
75
74
  @customElement({
76
75
  tag: "udex-masthead-menu",
77
- renderer: litRender,
76
+ renderer: jsxRenderer,
78
77
  styles: MastheadMenuCss,
79
78
  template: MastheadMenuTemplate,
80
- dependencies: [Icon, UDExBadge, UDExMastheadMenuItem, UDExDivider],
79
+ dependencies: [Icon, UDExMastheadMenuItem],
81
80
  })
82
81
 
83
82
  /**
@@ -1,20 +1,16 @@
1
1
  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
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
4
+ import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
5
5
  import Icon from "@ui5/webcomponents/dist/Icon.js";
6
6
  import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
7
7
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
8
8
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
9
- import "@ui5/webcomponents-icons/dist/action.js";
10
-
11
- import "@ui5/webcomponents-icons/dist/slim-arrow-right.js";
12
- import "@ui5/webcomponents-icons/dist/slim-arrow-left.js";
13
9
  import { OPENS_IN_A_NEW_WINDOW } from "./generated/i18n/i18n-defaults.js";
14
10
  import { UDExTarget } from "./types/common.js";
15
11
  import translate from "./utils/translate.js";
16
12
 
17
- import MastheadMenuItemTemplate from "./generated/templates/MastheadMenuItemTemplate.lit.js";
13
+ import MastheadMenuItemTemplate from "./MastheadMenuItemTemplate.js";
18
14
 
19
15
  // Styles
20
16
  import MastheadMenuItemCss from "./generated/themes/MastheadMenuItem.css.js";
@@ -45,7 +41,7 @@ export enum UDExItemType {
45
41
  @customElement({
46
42
  tag: "udex-masthead-menu-item",
47
43
  languageAware: true,
48
- renderer: litRender,
44
+ renderer: jsxRenderer,
49
45
  styles: MastheadMenuItemCss,
50
46
  template: MastheadMenuItemTemplate,
51
47
  dependencies: [Icon],
@@ -0,0 +1,123 @@
1
+ import type UDExMastheadMenuItem from "./MastheadMenuItem.js";
2
+ import type { AriaRole } from "@ui5/webcomponents-base";
3
+ import UI5Icon from "@ui5/webcomponents/dist/Icon.js";
4
+ import IconMode from "@ui5/webcomponents/dist/types/IconMode.js";
5
+ import UDExBadge from "./Badge.js";
6
+ import { UDExNumberBadgeDesign, UDExSizeBadgeDesign, UDExTypeBadgeDesign } from "./types/BadgeDesign.js";
7
+ import actionIcon from "@ui5/webcomponents-icons/dist/action.js";
8
+ import slimArrowRightIcon from "@ui5/webcomponents-icons/dist/slim-arrow-right.js";
9
+ import slimArrowLeftIcon from "@ui5/webcomponents-icons/dist/slim-arrow-left.js";
10
+ import type { Booleanish } from "@ui5/webcomponents-base/thirdparty/preact/jsx.js";
11
+
12
+ export default function MastheadMenuItemTemplate(this: UDExMastheadMenuItem) {
13
+ if (this.isActive) {
14
+ return activeItem.call(this);
15
+ }
16
+ if (this.isButtonType) {
17
+ return buttonItem.call(this);
18
+ }
19
+ return spanItem.call(this);
20
+ }
21
+
22
+ function activeItem(this: UDExMastheadMenuItem) {
23
+ return (
24
+ <>
25
+ <a
26
+ class={`udex-masthead-menu-item ${this.rootClass}`}
27
+ aria-describedby={this.ariaDescribedby || undefined}
28
+ role={this.accessibleRoleText as AriaRole}
29
+ href={this.url}
30
+ part={this.partAttr}
31
+ target={this.targetLink}
32
+ tabindex={Number(this._tabIndex)}>
33
+ {this.iconStart && arrowLeft()}
34
+ <span class={this.labelClass}>
35
+ {label.call(this)}
36
+ </span>
37
+ {this.iconEnd && arrowRight()}
38
+ </a>
39
+ {this.externalLink && (
40
+ <span id="new-win-desc" class="udex-masthead-hidden-text">
41
+ {this.openInNewWindowText}
42
+ </span>
43
+ )}
44
+ {this.badge && (
45
+ <UDExBadge
46
+ class="udex-masthead-menu-item-badge"
47
+ part="badge"
48
+ type={UDExTypeBadgeDesign.Number}
49
+ number-design={UDExNumberBadgeDesign.Blue}
50
+ size={UDExSizeBadgeDesign.Small}>
51
+ {this.badge}
52
+ </UDExBadge>
53
+ )}
54
+ </>
55
+ );
56
+ }
57
+
58
+ function buttonItem(this: UDExMastheadMenuItem) {
59
+ return (
60
+ <button
61
+ {...{ "_id": this.id }}
62
+ part="menu-item-button"
63
+ class={`udex-masthead-menu-item ${this.rootClass}`}
64
+ aria-label={this._accessibleName}
65
+ aria-haspopup={this.ariaHasPopup as Booleanish}
66
+ role={this.accessibleRoleText as AriaRole}
67
+ tabindex={Number(this._tabIndex)}>
68
+ {this.iconStart && arrowLeft()}
69
+ {this.label}
70
+ {this.iconEnd && arrowRight()}
71
+ </button>
72
+ );
73
+ }
74
+
75
+ function spanItem(this: UDExMastheadMenuItem) {
76
+ return (
77
+ <span class={`udex-masthead-menu-item ${this.rootClass}`} part="menu-item">
78
+ {this.iconStart && arrowLeft()}
79
+ {this.label}
80
+ {this.iconEnd && arrowRight()}
81
+ </span>
82
+ );
83
+ }
84
+
85
+ function label(this: UDExMastheadMenuItem) {
86
+ return this.externalLink ? (
87
+ <>
88
+ {this.leadingWordsOfLabel}
89
+ <span class="udex-masthead-menu-item__text-with-icon">
90
+ {this.lastWordOfLabel}
91
+ <UI5Icon
92
+ class="udex-masthead-menu-item__icon udex-masthead-menu-item_icon-action"
93
+ name={actionIcon}
94
+ mode={IconMode.Decorative}>
95
+ </UI5Icon>
96
+ </span>
97
+ </>
98
+ ) : (
99
+ <span>{this.label}</span>
100
+ );
101
+ }
102
+
103
+ function arrowLeft() {
104
+ return (
105
+ <UI5Icon
106
+ class="udex-masthead-menu-item__icon udex-masthead-menu-item_icon-left"
107
+ part="left"
108
+ name={slimArrowLeftIcon}
109
+ mode={IconMode.Decorative}>
110
+ </UI5Icon>
111
+ );
112
+ }
113
+
114
+ function arrowRight() {
115
+ return (
116
+ <UI5Icon
117
+ class="udex-masthead-menu-item__icon udex-masthead-menu-item_icon-right"
118
+ part="right"
119
+ name={slimArrowRightIcon}
120
+ mode={IconMode.Decorative}>
121
+ </UI5Icon>
122
+ );
123
+ }
@@ -0,0 +1,142 @@
1
+ import type UDExMastheadMenu from "./MastheadMenu.js";
2
+ import type { SubMenuLinkItem } from "./MastheadMenu.js";
3
+ import UDExMastheadMenuItem from "./MastheadMenuItem.js";
4
+ import UDExDivider from "./Divider.js";
5
+
6
+ export default function MastheadMenuTemplate(this: UDExMastheadMenu) {
7
+ return (
8
+ <div
9
+ class={`udex-masthead-menu ${this.oneRowClass}`}
10
+ part="menu"
11
+ onKeyDown={this.handleKeyDown}>
12
+ {this.menuTitle && (
13
+ <div class="udex-masthead-menu__title">{this.menuTitle}</div>
14
+ )}
15
+ {this.itemsList.map((mainItem, index) => (
16
+ <div class="udex-masthead-menu__row" key={index}>
17
+ {mainItem.subMenuLinkItems.map(subMenu => (
18
+ <div class="udex-masthead-menu__column" part="column" key={subMenu.categoryId}>
19
+ {subMenu.category && header.call(this, subMenu)}
20
+ {list.call(this, subMenu)}
21
+ </div>
22
+ ))}
23
+ </div>
24
+ ))}
25
+ </div>
26
+ );
27
+ }
28
+
29
+ function header(this: UDExMastheadMenu, subMenu: SubMenuLinkItem) {
30
+ return (
31
+ <div class="udex-masthead-menu__header">
32
+ {subMenu.url ? (
33
+ this._isMobileMode ? (
34
+ <>
35
+ <UDExMastheadMenuItem
36
+ id={`category-${subMenu.categoryId}`}
37
+ type="Heading"
38
+ part="menu-item"
39
+ exportparts="menu-item"
40
+ label={subMenu.category}
41
+ has-border={true}>
42
+ </UDExMastheadMenuItem>
43
+ <UDExMastheadMenuItem
44
+ part="menu-item"
45
+ accessible-role="link"
46
+ exportparts="menu-item"
47
+ label={this.overviewHeaderLinkText}
48
+ url={subMenu.url}
49
+ has-border={true}>
50
+ </UDExMastheadMenuItem>
51
+ </>
52
+ ) : (
53
+ <UDExMastheadMenuItem
54
+ id={`category-${subMenu.categoryId}`}
55
+ type="Heading"
56
+ part="menu-item"
57
+ exportparts="menu-item"
58
+ accessible-role="link"
59
+ onClick={this.handleMenuItemClick as any}
60
+ url={subMenu.url}
61
+ label={subMenu.category}
62
+ icon-end={true}
63
+ has-border={true}>
64
+ </UDExMastheadMenuItem>
65
+ )
66
+ ) : (
67
+ <UDExMastheadMenuItem
68
+ id={`category-${subMenu.categoryId}`}
69
+ type="Heading"
70
+ part="menu-item"
71
+ exportparts="menu-item"
72
+ label={subMenu.category}
73
+ has-border={true}>
74
+ </UDExMastheadMenuItem>
75
+ )}
76
+ </div>
77
+ );
78
+ }
79
+
80
+ function list(this: UDExMastheadMenu, subMenu: SubMenuLinkItem) {
81
+ return (
82
+ <ul
83
+ class="udex-masthead-menu__list"
84
+ aria-labelledby={`category-${subMenu.categoryId}`}
85
+ {...{ category: subMenu.category }}>
86
+ {subMenu.items.map((item, index) => (
87
+ <li key={index}>
88
+ {item.isDivider ? (
89
+ <UDExDivider class="udex-masthead-menu__item-divider"></UDExDivider>
90
+ ) : item.subItems ? (
91
+ <>
92
+ {item.url ? (
93
+ <UDExMastheadMenuItem
94
+ part="menu-item"
95
+ accessible-role="link"
96
+ exportparts="menu-item"
97
+ onClick={this.handleMenuItemClick as any}
98
+ url={item.url}
99
+ label={item.title}
100
+ class="udex-masthead-menu__sub-category">
101
+ </UDExMastheadMenuItem>
102
+ ) : (
103
+ <span class="udex-masthead-menu__sub-category">{item.title}</span>
104
+ )}
105
+ <ul class="udex-masthead-menu__sub-list" aria-label={item.title}>
106
+ {item.subItems.map((subItem, subIndex) => (
107
+ <li key={subIndex}>
108
+ {subItem.isDivider ? (
109
+ <UDExDivider class="udex-masthead-menu__item-divider"></UDExDivider>
110
+ ) : (
111
+ <UDExMastheadMenuItem
112
+ part="menu-item"
113
+ accessible-role="link"
114
+ exportparts="badge"
115
+ onClick={this.handleMenuItemClick as any}
116
+ badge={subItem.badge}
117
+ external-link={subItem.externalLink}
118
+ url={subItem.url}
119
+ label={subItem.title}>
120
+ </UDExMastheadMenuItem>
121
+ )}
122
+ </li>
123
+ ))}
124
+ </ul>
125
+ </>
126
+ ) : (
127
+ <UDExMastheadMenuItem
128
+ part="menu-item"
129
+ accessible-role="link"
130
+ exportparts="badge"
131
+ onClick={this.handleMenuItemClick as any}
132
+ badge={item.badge}
133
+ external-link={item.externalLink}
134
+ url={item.url}
135
+ label={item.title}>
136
+ </UDExMastheadMenuItem>
137
+ )}
138
+ </li>
139
+ ))}
140
+ </ul>
141
+ );
142
+ }
@@ -2,7 +2,7 @@ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
  import type { DefaultSlot, Slot } from "@ui5/webcomponents-base/dist/UI5Element.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
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
5
+ import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
6
6
  import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
7
7
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
8
8
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
@@ -16,7 +16,7 @@ import type UDExSearch from "./Search.js";
16
16
  import UDExMastheadMenuItem, { UDExItemType } from "./MastheadMenuItem.js";
17
17
  import { OVERVIEW } from "./generated/i18n/i18n-defaults.js";
18
18
  import AnalyticsName from "./types/AnalyticsName.js";
19
- import MastheadMobileMenuTemplate from "./generated/templates/MastheadMobileMenuTemplate.lit.js";
19
+ import MastheadMobileMenuTemplate from "./MastheadMobileMenuTemplate.js";
20
20
  import type UDExMastheadShell from "./MastheadShell.js";
21
21
  import translate from "./utils/translate.js";
22
22
 
@@ -62,7 +62,7 @@ type UDExMastheadMobileMenuExploreClickEventDetail = {
62
62
  */
63
63
  @customElement({
64
64
  tag: "udex-masthead-mobile-menu",
65
- renderer: litRender,
65
+ renderer: jsxRenderer,
66
66
  styles: MastheadMobileMenuCss,
67
67
  template: MastheadMobileMenuTemplate,
68
68
  dependencies: [UDExMastheadMenuItem],