@sapudex/web-components 2.4.0 → 2.4.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 (119) hide show
  1. package/dist/AssetsVariables.js +6 -1
  2. package/dist/AssetsVariables.js.map +1 -1
  3. package/dist/MastheadCountrySelector.d.ts +6 -0
  4. package/dist/MastheadCountrySelector.js +8 -2
  5. package/dist/MastheadCountrySelector.js.map +1 -1
  6. package/dist/MastheadItem.d.ts +12 -7
  7. package/dist/MastheadItem.js +18 -16
  8. package/dist/MastheadItem.js.map +1 -1
  9. package/dist/MastheadMenu.d.ts +3 -0
  10. package/dist/MastheadMenu.js +3 -0
  11. package/dist/MastheadMenu.js.map +1 -1
  12. package/dist/MastheadMenuItem.d.ts +1 -1
  13. package/dist/MastheadMenuItem.js +1 -1
  14. package/dist/MastheadMenuItem.js.map +1 -1
  15. package/dist/MastheadMobileMenu.d.ts +6 -0
  16. package/dist/MastheadMobileMenu.js +13 -2
  17. package/dist/MastheadMobileMenu.js.map +1 -1
  18. package/dist/MastheadProfileMenu.d.ts +4 -4
  19. package/dist/MastheadProfileMenu.js +7 -0
  20. package/dist/MastheadProfileMenu.js.map +1 -1
  21. package/dist/MastheadShell.d.ts +12 -4
  22. package/dist/MastheadShell.js +19 -10
  23. package/dist/MastheadShell.js.map +1 -1
  24. package/dist/MessageStripTemplate.js +1 -1
  25. package/dist/MessageStripTemplate.js.map +1 -1
  26. package/dist/assets/{InputSuggestions-CYW_6A8K.js → InputSuggestions-B7dpC1q9.js} +1 -1
  27. package/dist/assets/{ListItemStandardExpandableTextTemplate-BDrgWGjT.js → ListItemStandardExpandableTextTemplate-BF6mHEec.js} +1 -1
  28. package/dist/assets/{bundle.esm-DRCvw6Ji.js → bundle.esm-BFePNrxi.js} +238 -233
  29. package/dist/assets/messagebundle_en-DXEe5nWA.js +1 -0
  30. package/dist/css/themes/Button.css +1 -1
  31. package/dist/css/themes/MastheadProfileMenu.css +1 -1
  32. package/dist/css/themes/RatingIndicator.css +1 -1
  33. package/dist/css/themes/Search.css +1 -1
  34. package/dist/css/themes/Slider.css +1 -1
  35. package/dist/css/themes/TabInOverflow.css +1 -1
  36. package/dist/custom-elements-internal.json +156 -143
  37. package/dist/custom-elements.json +140 -127
  38. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  39. package/dist/generated/i18n/i18n-defaults.d.ts +2 -1
  40. package/dist/generated/i18n/i18n-defaults.js +2 -1
  41. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  42. package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js +3 -3
  43. package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js.map +1 -1
  44. package/dist/generated/templates/MastheadMenuItemTemplate.lit.js +1 -1
  45. package/dist/generated/templates/MastheadMenuItemTemplate.lit.js.map +1 -1
  46. package/dist/generated/templates/MastheadMenuTemplate.lit.js +2 -2
  47. package/dist/generated/templates/MastheadMenuTemplate.lit.js.map +1 -1
  48. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js +14 -14
  49. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js.map +1 -1
  50. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js +1 -1
  51. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js.map +1 -1
  52. package/dist/generated/templates/MastheadShellTemplate.lit.js +2 -2
  53. package/dist/generated/templates/MastheadShellTemplate.lit.js.map +1 -1
  54. package/dist/generated/themes/Button.css.d.ts +1 -1
  55. package/dist/generated/themes/Button.css.js +1 -1
  56. package/dist/generated/themes/Button.css.js.map +1 -1
  57. package/dist/generated/themes/MastheadProfileMenu.css.d.ts +1 -1
  58. package/dist/generated/themes/MastheadProfileMenu.css.js +1 -1
  59. package/dist/generated/themes/MastheadProfileMenu.css.js.map +1 -1
  60. package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
  61. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  62. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  63. package/dist/generated/themes/Search.css.d.ts +1 -1
  64. package/dist/generated/themes/Search.css.js +1 -1
  65. package/dist/generated/themes/Search.css.js.map +1 -1
  66. package/dist/generated/themes/Slider.css.d.ts +1 -1
  67. package/dist/generated/themes/Slider.css.js +1 -1
  68. package/dist/generated/themes/Slider.css.js.map +1 -1
  69. package/dist/generated/themes/TabInOverflow.css.d.ts +1 -1
  70. package/dist/generated/themes/TabInOverflow.css.js +1 -1
  71. package/dist/generated/themes/TabInOverflow.css.js.map +1 -1
  72. package/dist/messagebundle.properties +3 -0
  73. package/dist/messagebundle_en.properties +1 -0
  74. package/dist/types/AnalyticsName.d.ts +5 -0
  75. package/dist/types/AnalyticsName.js +7 -0
  76. package/dist/types/AnalyticsName.js.map +1 -0
  77. package/dist/types/EventRibbon.d.ts +38 -13
  78. package/dist/types/EventRibbon.js +39 -12
  79. package/dist/types/EventRibbon.js.map +1 -1
  80. package/dist/vscode.html-custom-data.json +6 -25
  81. package/dist/web-types.json +13 -15
  82. package/package.json +1 -1
  83. package/src/AssetsVariables.ts +6 -1
  84. package/src/MastheadCountrySelector.hbs +3 -0
  85. package/src/MastheadCountrySelector.ts +13 -3
  86. package/src/MastheadItem.ts +28 -19
  87. package/src/MastheadMenu.hbs +6 -1
  88. package/src/MastheadMenu.ts +5 -0
  89. package/src/MastheadMenuItem.hbs +1 -1
  90. package/src/MastheadMenuItem.ts +2 -2
  91. package/src/MastheadMobileMenu.hbs +24 -9
  92. package/src/MastheadMobileMenu.ts +19 -3
  93. package/src/MastheadProfileMenu.hbs +2 -0
  94. package/src/MastheadProfileMenu.ts +11 -5
  95. package/src/MastheadShell.hbs +2 -0
  96. package/src/MastheadShell.ts +31 -14
  97. package/src/MessageStripTemplate.tsx +1 -0
  98. package/src/generated/i18n/i18n-defaults.ts +2 -2
  99. package/src/generated/templates/MastheadCountrySelectorTemplate.lit.ts +3 -3
  100. package/src/generated/templates/MastheadMenuItemTemplate.lit.ts +1 -1
  101. package/src/generated/templates/MastheadMenuTemplate.lit.ts +2 -2
  102. package/src/generated/templates/MastheadMobileMenuTemplate.lit.ts +14 -14
  103. package/src/generated/templates/MastheadProfileMenuTemplate.lit.ts +1 -1
  104. package/src/generated/templates/MastheadShellTemplate.lit.ts +2 -2
  105. package/src/generated/themes/Button.css.ts +1 -1
  106. package/src/generated/themes/MastheadProfileMenu.css.ts +1 -1
  107. package/src/generated/themes/RatingIndicator.css.ts +1 -1
  108. package/src/generated/themes/Search.css.ts +1 -1
  109. package/src/generated/themes/Slider.css.ts +1 -1
  110. package/src/generated/themes/TabInOverflow.css.ts +1 -1
  111. package/src/i18n/messagebundle.properties +3 -0
  112. package/src/i18n/messagebundle_en.properties +1 -0
  113. package/src/themes/Button.css +1 -0
  114. package/src/themes/MastheadProfileMenu.css +2 -1
  115. package/src/themes/Search.css +2 -1
  116. package/src/themes/TabInOverflow.css +1 -1
  117. package/src/types/AnalyticsName.ts +6 -0
  118. package/src/types/EventRibbon.ts +38 -13
  119. package/dist/assets/messagebundle_en-BK8-Eyic.js +0 -1
@@ -11,7 +11,7 @@ import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
11
11
  import { isEscape } from "@ui5/webcomponents-base/dist/Keys.js";
12
12
  import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
13
13
  import {
14
- OPENS_IN_A_NEW_WINDOW, PROFILE, CART, COUNTRY_SELECTOR, SUPPORT,
14
+ OPENS_IN_A_NEW_WINDOW, PROFILE, CART, COUNTRY_SELECTOR, SUPPORT, SEARCH,
15
15
  } from "./generated/i18n/i18n-defaults.js";
16
16
  import UDExMastheadMenu from "./MastheadMenu.js";
17
17
  import type UDExAvatar from "./Avatar.js";
@@ -21,6 +21,7 @@ import MastheadItemTemplate from "./generated/templates/MastheadItemTemplate.lit
21
21
  import { UDExTarget } from "./types/common.js";
22
22
  import { BreakpointUtils } from "./utils/Breakpoints.js";
23
23
  import parseArrayFromString from "./utils/parseArrayFromString.js";
24
+ import AnalyticsName from "./types/AnalyticsName.js";
24
25
 
25
26
  // Styles
26
27
  import MastheadItemCss from "./generated/themes/MastheadItem.css.js";
@@ -58,11 +59,14 @@ export type MenuItem = {
58
59
  type UDExMastheadItemItemClickEventDetail = {
59
60
  originalEvent: PointerEvent,
60
61
  item: UDExMastheadItem,
62
+ analyticsName: AnalyticsName,
63
+ sourceNode: HTMLElement,
61
64
  }
62
65
 
63
66
  export type UDExMastheadDropdownEventDetail = {
64
67
  title: string,
65
68
  action: UDExMastheadDropdownItemAction,
69
+ analyticsName: AnalyticsName,
66
70
  }
67
71
 
68
72
  /**
@@ -142,15 +146,6 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
142
146
  @property({ type: String })
143
147
  menuTitle: string = "";
144
148
 
145
- /**
146
- * Defines the text of item.
147
- *
148
- * @public
149
- * @default ""
150
- */
151
- @property({ type: String })
152
- text: string = "";
153
-
154
149
  /**
155
150
  * Defines the selected item.
156
151
  *
@@ -264,6 +259,14 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
264
259
  @property({ type: Boolean })
265
260
  _isMobileMode!: boolean;
266
261
 
262
+ /**
263
+ * Defines the label for analytics
264
+ *
265
+ * @public
266
+ */
267
+ @property({ type: String })
268
+ label!: string;
269
+
267
270
  /**
268
271
  * Slot for the dropdown
269
272
  *
@@ -295,6 +298,10 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
295
298
  }
296
299
  }
297
300
 
301
+ onBeforeRendering(): void {
302
+ this.label = this.eventItemTitle;
303
+ }
304
+
298
305
  onAfterRendering(): void {
299
306
  this._profileAvatar = this.profileAvatar;
300
307
  this._mastheadShell = this.mastheadShell;
@@ -381,17 +388,19 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
381
388
  }
382
389
 
383
390
  fireDropdownCloseEvent(title: string, action: UDExMastheadDropdownItemAction): void {
384
- this.fireDecoratorEvent("dropdown-closed", { title, action });
391
+ this.fireDecoratorEvent("dropdown-closed", { title, action, analyticsName: AnalyticsName.Header });
385
392
  }
386
393
 
387
394
  fireDropdownOpenEvent(title: string, action: UDExMastheadDropdownItemAction): void {
388
- this.fireDecoratorEvent("dropdown-opened", { title, action });
395
+ this.fireDecoratorEvent("dropdown-opened", { title, action, analyticsName: AnalyticsName.Header });
389
396
  }
390
397
 
391
398
  fireItemClickEvent(e: PointerEvent): void {
392
399
  this.fireDecoratorEvent("item-click", {
393
400
  item: this,
394
401
  originalEvent: e,
402
+ analyticsName: AnalyticsName.Header,
403
+ sourceNode: e.currentTarget as HTMLElement,
395
404
  });
396
405
  }
397
406
 
@@ -442,7 +451,7 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
442
451
 
443
452
  closeDropdown(): void {
444
453
  this.selected = false;
445
- this.fireDropdownCloseEvent(this.eventItemTitle, UDExMastheadDropdownItemAction.Close);
454
+ this.fireDropdownCloseEvent(this.accessibleName || this.eventItemTitle, UDExMastheadDropdownItemAction.Close);
446
455
  }
447
456
 
448
457
  getDomElement(selector: string): HTMLElement | undefined | null {
@@ -532,6 +541,10 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
532
541
  return this.getAttribute("slot") === "cart";
533
542
  }
534
543
 
544
+ get isSearchBtn(): boolean {
545
+ return this.icon === "search";
546
+ }
547
+
535
548
  get isSupportBtn(): boolean {
536
549
  return this.getAttribute("slot") === "support";
537
550
  }
@@ -553,22 +566,18 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
553
566
  }
554
567
 
555
568
  get eventItemTitle(): string {
556
- if (this.accessibleName) {
557
- return this.accessibleName.trim();
569
+ if (this.isSearchBtn) {
570
+ return UDExMastheadItem.i18nBundle.getText(SEARCH);
558
571
  }
559
-
560
572
  if (this.isCartBtn) {
561
573
  return UDExMastheadItem.i18nBundle.getText(CART);
562
574
  }
563
-
564
575
  if (this.isProfileBtn) {
565
576
  return UDExMastheadItem.i18nBundle.getText(PROFILE);
566
577
  }
567
-
568
578
  if (this.isCountrySelectorBtn) {
569
579
  return UDExMastheadItem.i18nBundle.getText(COUNTRY_SELECTOR);
570
580
  }
571
-
572
581
  if (this.isSupportBtn) {
573
582
  return UDExMastheadItem.i18nBundle.getText(SUPPORT);
574
583
  }
@@ -22,6 +22,8 @@
22
22
  {{#*inline "header"}}
23
23
  <div class="udex-masthead-menu__header">
24
24
  <udex-masthead-menu-item
25
+ part="menu-item"
26
+ exportparts="menu-item"
25
27
  id="category-{{categoryId}}"
26
28
  @click="{{../../handleMenuItemClick}}"
27
29
  url="{{this.url}}"
@@ -42,11 +44,14 @@
42
44
  <li>
43
45
  {{#if this.url}}
44
46
  <udex-masthead-menu-item
47
+ part="menu-item"
48
+ exportparts="menu-item"
45
49
  @click="{{../../../handleMenuItemClick}}"
46
50
  badge="{{this.badge}}"
47
51
  ?external-link="{{this.externalLink}}"
48
52
  url="{{this.url}}"
49
- label="{{this.title}}">
53
+ label="{{this.title}}"
54
+ exportparts="badge">
50
55
  </udex-masthead-menu-item>
51
56
  {{else}}
52
57
  <udex-divider class="udex-masthead-menu__item-divider"></udex-divider>
@@ -12,6 +12,7 @@ import UDExMastheadMenuItem, { UDExItemType } from "./MastheadMenuItem.js";
12
12
  import UDExDivider from "./Divider.js";
13
13
  import MastheadMenuTemplate from "./generated/templates/MastheadMenuTemplate.lit.js";
14
14
  import parseArrayFromString from "./utils/parseArrayFromString.js";
15
+ import AnalyticsName from "./types/AnalyticsName.js";
15
16
 
16
17
  // Styles
17
18
  import MastheadMenuCss from "./generated/themes/MastheadMenu.css.js";
@@ -39,6 +40,8 @@ type UDExMastheadMenuMenuItemClickEventDetail = {
39
40
  category?: string,
40
41
  originalEvent: PointerEvent,
41
42
  item: UDExMastheadMenuItem,
43
+ analyticsName: AnalyticsName,
44
+ sourceNode: HTMLElement,
42
45
  }
43
46
 
44
47
  /**
@@ -131,6 +134,8 @@ class UDExMastheadMenu extends UI5Element {
131
134
  if (url?.length) {
132
135
  const list = item.closest(".udex-masthead-menu__list") as HTMLElement;
133
136
  this.fireDecoratorEvent("menu-item-click", {
137
+ sourceNode: item.shadowRoot?.querySelector(".udex-masthead-menu-item") as HTMLElement,
138
+ analyticsName: AnalyticsName.Header,
134
139
  item,
135
140
  originalEvent: e,
136
141
  ...(type !== UDExItemType.Heading && { category: list?.getAttribute("category") || "" }),
@@ -41,7 +41,7 @@
41
41
  class="udex-masthead-menu-item {{rootClass}}"
42
42
  part="menu-item-button"
43
43
  aria-haspopup="{{ariaHasPopup}}"
44
- role="button"
44
+ role="{{accessibleRoleText}}"
45
45
  tabindex="{{_tabIndex}}">
46
46
  {{#if iconStart}}
47
47
  {{>arrow-left}}
@@ -225,8 +225,8 @@ class UDExMastheadMenuItem extends UI5Element {
225
225
  return this.externalLink ? "new-win-desc" : null;
226
226
  }
227
227
 
228
- get accessibleRoleText(): string | null {
229
- return this.accessibleRole ? this.accessibleRole : null;
228
+ get accessibleRoleText(): string {
229
+ return this.accessibleRole ? this.accessibleRole : "menuitem";
230
230
  }
231
231
 
232
232
  get partAttr(): string {
@@ -10,9 +10,10 @@
10
10
  {{>nav-items}}
11
11
  {{/if}}
12
12
  {{#if _showCategories}}
13
- <li class="udex-masthead-mobile-menu__list-item" role="menuitem">
13
+ <li class="udex-masthead-mobile-menu__list-item" role="none">
14
14
  {{#if _hideExploreSapBtn}}
15
15
  <udex-masthead-menu-item
16
+ part="menu-item"
16
17
  class="udex-masthead-mobile-menu__back-item"
17
18
  @click="{{handleExploreBackToMenuItems}}"
18
19
  label="{{_clickedItem.innerText}}"
@@ -24,6 +25,7 @@
24
25
  {{else}}
25
26
  {{#if isNotMultipleMode}}
26
27
  <udex-masthead-menu-item
28
+ part="menu-item"
27
29
  class="udex-masthead-mobile-menu__heading"
28
30
  label="{{_clickedItem.innerText}}"
29
31
  type="Heading"
@@ -31,9 +33,11 @@
31
33
  </udex-masthead-menu-item>
32
34
  {{else}}
33
35
  <udex-masthead-menu-item
36
+ part="menu-item"
34
37
  class="udex-masthead-mobile-menu__back-item"
35
38
  @click="{{handleBackToMenuItems}}"
36
39
  label="{{_clickedItem.innerText}}"
40
+ aria-has-popup="true"
37
41
  type="Button"
38
42
  has-border
39
43
  icon-start
@@ -45,12 +49,14 @@
45
49
  {{>categories}}
46
50
  {{/if}}
47
51
  {{#if _showCategoryItems}}
48
- <li class="udex-masthead-mobile-menu__list-item" role="menuitem">
52
+ <li class="udex-masthead-mobile-menu__list-item" role="none">
49
53
  <udex-masthead-menu-item
54
+ part="menu-item"
50
55
  class="udex-masthead-mobile-menu__back-item"
51
56
  @click="{{handleBackToCategories}}"
52
57
  label="{{_category.category}}"
53
58
  type="Button"
59
+ aria-has-popup="true"
54
60
  has-border
55
61
  icon-start
56
62
  is-back-to-categories>
@@ -62,11 +68,13 @@
62
68
  </div>
63
69
  {{#if showExploreBtn}}
64
70
  <udex-masthead-menu-item
71
+ part="menu-item"
65
72
  class="udex-masthead-mobile-menu__explore-btn"
66
73
  id="{{exploreItem._id}}"
67
74
  @click="{{handleExploreSapClick}}"
68
75
  @keydown="{{handleLeftRightKeys}}"
69
- accessible-role="button"
76
+ accessible-role-text="button"
77
+ aria-has-popup="true"
70
78
  type="Button"
71
79
  first-level
72
80
  icon-end
@@ -78,9 +86,10 @@
78
86
 
79
87
  {{#*inline "nav-items"}}
80
88
  {{#each items}}
81
- <li class="udex-masthead-mobile-menu__list-item" role="menuitem">
89
+ <li class="udex-masthead-mobile-menu__list-item" role="none">
82
90
  {{#if this.subItems}}
83
91
  <udex-masthead-menu-item
92
+ part="menu-item"
84
93
  @click="{{../handleMenuItemClick}}"
85
94
  label="{{this.innerText}}"
86
95
  aria-has-popup="true"
@@ -92,6 +101,7 @@
92
101
  </udex-masthead-menu-item>
93
102
  {{else}}
94
103
  <udex-masthead-menu-item
104
+ part="menu-item"
95
105
  @click="{{../handleMobileItemEvent}}"
96
106
  url="{{this.href}}"
97
107
  label="{{this.innerText}}"
@@ -105,8 +115,9 @@
105
115
 
106
116
  {{#*inline "categories"}}
107
117
  {{#if _clickedItem.href}}
108
- <li class="udex-masthead-mobile-menu__list-item" role="menuitem">
118
+ <li class="udex-masthead-mobile-menu__list-item" role="none">
109
119
  <udex-masthead-menu-item
120
+ part="menu-item"
110
121
  url="{{_clickedItem.href}}"
111
122
  label="{{overviewLinkText}}"
112
123
  @click="{{handleMobileItemEvent}}"
@@ -116,8 +127,9 @@
116
127
  {{/if}}
117
128
  {{#each _categories}}
118
129
  {{#if this.category}}
119
- <li class="udex-masthead-mobile-menu__list-item" role="menuitem">
130
+ <li class="udex-masthead-mobile-menu__list-item" role="none">
120
131
  <udex-masthead-menu-item
132
+ part="menu-item"
121
133
  @click="{{../handleMenuCategoryClick}}"
122
134
  url="{{this.url}}"
123
135
  id="{{@index}}"
@@ -131,8 +143,9 @@
131
143
  </li>
132
144
  {{else}}
133
145
  {{#each this.items}}
134
- <li class="udex-masthead-mobile-menu__list-item" role="menuitem">
146
+ <li class="udex-masthead-mobile-menu__list-item" role="none">
135
147
  <udex-masthead-menu-item
148
+ part="menu-item"
136
149
  @click="{{../handleMobileItemEvent}}"
137
150
  url="{{this.url}}"
138
151
  label="{{this.title}}"
@@ -146,8 +159,9 @@
146
159
 
147
160
  {{#*inline "category-items"}}
148
161
  {{#if _category.url}}
149
- <li class="udex-masthead-mobile-menu__list-item" role="menuitem">
162
+ <li class="udex-masthead-mobile-menu__list-item" role="none">
150
163
  <udex-masthead-menu-item
164
+ part="menu-item"
151
165
  @click="{{../handleMobileCategoryItemEvent}}"
152
166
  url="{{this._category.url}}"
153
167
  label="{{overviewLinkText}}"
@@ -157,8 +171,9 @@
157
171
  {{/if}}
158
172
  {{#each _category.items}}
159
173
  {{#if this.url}}
160
- <li class="udex-masthead-mobile-menu__list-item" role="menuitem">
174
+ <li class="udex-masthead-mobile-menu__list-item" role="none">
161
175
  <udex-masthead-menu-item
176
+ part="menu-item"
162
177
  @click="{{../handleMobileCategoryItemEvent}}"
163
178
  label="{{this.title}}"
164
179
  url="{{this.url}}"
@@ -13,7 +13,7 @@ import type { MenuItem, SubMenuLinkItem } from "./MastheadItem.js";
13
13
  import type UDExMastheadItem from "./MastheadItem.js";
14
14
  import UDExMastheadMenuItem, { UDExItemType } from "./MastheadMenuItem.js";
15
15
  import { OVERVIEW } from "./generated/i18n/i18n-defaults.js";
16
-
16
+ import AnalyticsName from "./types/AnalyticsName.js";
17
17
  import MastheadMobileMenuTemplate from "./generated/templates/MastheadMobileMenuTemplate.lit.js";
18
18
 
19
19
  // Styles
@@ -24,10 +24,14 @@ type UDExMastheadMobileMenuItemClickEventDetail = {
24
24
  item: UDExMastheadMenuItem,
25
25
  category?: string,
26
26
  isMobile: boolean,
27
+ analyticsName: AnalyticsName,
28
+ sourceNode: HTMLElement,
27
29
  }
28
30
 
29
31
  type UDExMastheadMobileMenuExploreClickEventDetail = {
30
32
  originalEvent: PointerEvent | KeyboardEvent,
33
+ analyticsName: AnalyticsName,
34
+ sourceNode: HTMLElement,
31
35
  }
32
36
 
33
37
  /**
@@ -151,7 +155,7 @@ class UDExMastheadMobileMenu extends UI5Element {
151
155
  e.preventDefault();
152
156
  this.openExploreSapMenu(e);
153
157
  this.setFocusItemByIndex(0);
154
- this.fireDecoratorEvent("explorer-menu-click", { originalEvent: e });
158
+ this.fireExploreSapMobileButton(e);
155
159
  }
156
160
 
157
161
  handleBackToMenuItems(e: PointerEvent) {
@@ -411,14 +415,26 @@ class UDExMastheadMobileMenu extends UI5Element {
411
415
  }
412
416
 
413
417
  fireMobileItemEvent(e: PointerEvent | KeyboardEvent, category?: string) {
418
+ const item = e.target as UDExMastheadMenuItem;
419
+
414
420
  this.fireDecoratorEvent("item-click", {
415
421
  isMobile: true,
416
- item: e.target as UDExMastheadMenuItem,
422
+ item,
417
423
  originalEvent: e,
424
+ analyticsName: AnalyticsName.Header,
425
+ sourceNode: item.shadowRoot?.querySelector(".udex-masthead-menu-item") as HTMLElement,
418
426
  ...(category && { category }),
419
427
  });
420
428
  }
421
429
 
430
+ fireExploreSapMobileButton(e: PointerEvent | KeyboardEvent) {
431
+ this.fireDecoratorEvent("explorer-menu-click", {
432
+ originalEvent: e,
433
+ analyticsName: AnalyticsName.Header,
434
+ sourceNode: (e.target as HTMLElement).shadowRoot?.querySelector(".udex-masthead-menu-item") as HTMLElement,
435
+ });
436
+ }
437
+
422
438
  setFocusItemByIndex(index: number) {
423
439
  this._shouldFocusItemByIndex = true;
424
440
  this._focusedItemIndex = index;
@@ -22,6 +22,8 @@
22
22
  {{/if}}
23
23
  <div class="udex-masthead-profile-menu__links">
24
24
  <udex-masthead-menu
25
+ part="menu"
26
+ exportparts="badge, menu-item"
25
27
  sub-items='{{linksList}}'
26
28
  @ui5-menu-item-click="{{handleProfileMenuItemClick}}">
27
29
  </udex-masthead-menu>
@@ -11,6 +11,7 @@ import UDExMastheadMenu from "./MastheadMenu.js";
11
11
  import MastheadProfileMenuTemplate from "./generated/templates/MastheadProfileMenuTemplate.lit.js";
12
12
  import type UDExMastheadMenuItem from "./MastheadMenuItem.js";
13
13
  import parseArrayFromString from "./utils/parseArrayFromString.js";
14
+ import AnalyticsName from "./types/AnalyticsName.js";
14
15
 
15
16
  // Styles
16
17
  import MastheadProfileMenuCss from "./generated/themes/MastheadProfileMenu.css.js";
@@ -23,13 +24,11 @@ interface UserData {
23
24
  avatarInitials?: string
24
25
  }
25
26
 
26
- type UDExMastheadProfileMenuLogoutClickEventDetail = {
27
- originalEvent: PointerEvent,
28
- }
29
-
30
27
  type UDExMastheadProfileMenuItemClickEventDetail = {
31
28
  item: UDExMastheadMenuItem,
32
29
  originalEvent: PointerEvent,
30
+ analyticsName: AnalyticsName,
31
+ sourceNode: HTMLElement,
33
32
  }
34
33
 
35
34
  /**
@@ -72,7 +71,7 @@ type UDExMastheadProfileMenuItemClickEventDetail = {
72
71
 
73
72
  class UDExMastheadProfileMenu extends UI5Element {
74
73
  eventDetails!: {
75
- "logout": UDExMastheadProfileMenuLogoutClickEventDetail,
74
+ "logout": UDExMastheadProfileMenuItemClickEventDetail,
76
75
  "profile-item-click": UDExMastheadProfileMenuItemClickEventDetail
77
76
  };
78
77
  /**
@@ -122,8 +121,13 @@ class UDExMastheadProfileMenu extends UI5Element {
122
121
  static i18nBundle: I18nBundle;
123
122
 
124
123
  handleUserLogoutItemClick(e: PointerEvent): void {
124
+ const item = e.target as UDExMastheadMenuItem;
125
+
125
126
  this.fireDecoratorEvent("logout", {
127
+ item,
128
+ sourceNode: item.shadowRoot?.querySelector(".udex-masthead-menu-item") as HTMLElement,
126
129
  originalEvent: e,
130
+ analyticsName: AnalyticsName.Header,
127
131
  });
128
132
  }
129
133
 
@@ -133,6 +137,8 @@ class UDExMastheadProfileMenu extends UI5Element {
133
137
  this.fireDecoratorEvent("profile-item-click", {
134
138
  item,
135
139
  originalEvent,
140
+ analyticsName: AnalyticsName.Header,
141
+ sourceNode: item.shadowRoot.querySelector(".udex-masthead-menu-item") as HTMLElement,
136
142
  });
137
143
  }
138
144
 
@@ -39,6 +39,7 @@
39
39
  class="udex-masthead-shell__close-search-btn"
40
40
  size="Small"
41
41
  icon="decline"
42
+ part="search-close-button"
42
43
  tooltip="{{closeButtonAccessibleName}}"
43
44
  accessible-name="{{closeButtonAccessibleName}}"
44
45
  @click="{{handleCloseSearch}}">
@@ -71,6 +72,7 @@
71
72
  <udex-masthead-item
72
73
  class="udex-masthead-shell__search-btn"
73
74
  icon="search"
75
+ part="search-button"
74
76
  @click="{{handleSearchClick}}"
75
77
  accessible-name="search">
76
78
  </udex-masthead-item>
@@ -25,6 +25,7 @@ import type UDExMastheadProfileMenu from "./MastheadProfileMenu.js";
25
25
  import type UDExMastheadCountrySelector from "./MastheadCountrySelector.js";
26
26
  import MastheadShellTemplate from "./generated/templates/MastheadShellTemplate.lit.js";
27
27
  import { BreakpointUtils } from "./utils/Breakpoints.js";
28
+ import AnalyticsName from "./types/AnalyticsName.js";
28
29
 
29
30
  // Styles
30
31
  import MastheadShellCss from "./generated/themes/MastheadShell.css.js";
@@ -35,6 +36,13 @@ type MastheadItemType = UDExMastheadItem | null | undefined;
35
36
 
36
37
  type UDExMastheadShellBaseEventDetail = {
37
38
  originalEvent: PointerEvent,
39
+ analyticsName: AnalyticsName,
40
+ sourceNode: HTMLElement,
41
+ item?: UDExMastheadItem,
42
+ }
43
+
44
+ type UDExMastheadShellAnalyticsNameEventDetail = {
45
+ analyticsName: AnalyticsName,
38
46
  }
39
47
 
40
48
  /**
@@ -155,10 +163,10 @@ type UDExMastheadShellBaseEventDetail = {
155
163
 
156
164
  class UDExMastheadShell extends UI5Element {
157
165
  eventDetails!: {
158
- "mobile-menu-open": void,
159
- "mobile-menu-close": void,
160
- "search-opened": void,
161
- "search-closed": void,
166
+ "mobile-menu-open": UDExMastheadShellAnalyticsNameEventDetail,
167
+ "mobile-menu-close": UDExMastheadShellAnalyticsNameEventDetail,
168
+ "search-opened": UDExMastheadShellAnalyticsNameEventDetail,
169
+ "search-closed": UDExMastheadShellAnalyticsNameEventDetail,
162
170
  "cart-click": UDExMastheadShellBaseEventDetail,
163
171
  "support-click": UDExMastheadShellBaseEventDetail,
164
172
  "profile-click": UDExMastheadShellBaseEventDetail,
@@ -498,37 +506,37 @@ class UDExMastheadShell extends UI5Element {
498
506
  }
499
507
 
500
508
  handleLogoClick(e: PointerEvent): void {
501
- this.fireDecoratorEvent("logo-click", { originalEvent: e });
509
+ this.fireMastheadEvent("logo-click", e);
502
510
  }
503
511
 
504
512
  handleSiteLabelClick(e: PointerEvent): void {
505
- this.fireDecoratorEvent("site-label-click", { originalEvent: e });
513
+ this.fireMastheadEvent("site-label-click", e);
506
514
  }
507
515
 
508
516
  handleSearchClick(e: PointerEvent): void {
509
517
  e.stopPropagation();
510
- this.fireDecoratorEvent("search-click", { originalEvent: e });
518
+ this.fireMastheadEvent("search-click", e);
511
519
  this.openSearch();
512
520
  }
513
521
 
514
522
  handleCartClick(e: PointerEvent): void {
515
523
  e.stopPropagation();
516
- this.fireDecoratorEvent("cart-click", { originalEvent: e });
524
+ this.fireMastheadEvent("cart-click", e);
517
525
  }
518
526
 
519
527
  handleProfileClick(e: PointerEvent): void {
520
528
  e.stopPropagation();
521
- this.fireDecoratorEvent("profile-click", { originalEvent: e });
529
+ this.fireMastheadEvent("profile-click", e);
522
530
  }
523
531
 
524
532
  handleSupportClick(e: PointerEvent): void {
525
533
  e.stopPropagation();
526
- this.fireDecoratorEvent("support-click", { originalEvent: e });
534
+ this.fireMastheadEvent("support-click", e);
527
535
  }
528
536
 
529
537
  handleCountrySelectorClick(e: PointerEvent): void {
530
538
  e.stopPropagation();
531
- this.fireDecoratorEvent("country-selector-click", { originalEvent: e });
539
+ this.fireMastheadEvent("country-selector-click", e);
532
540
  }
533
541
 
534
542
  handleOpenMobileMenu(): void {
@@ -549,7 +557,7 @@ class UDExMastheadShell extends UI5Element {
549
557
 
550
558
  handleCloseSearch(e: PointerEvent): void {
551
559
  this._closeBtnClicked = true;
552
- this.fireDecoratorEvent("search-close-click", { originalEvent: e });
560
+ this.fireMastheadEvent("search-close-click", e);
553
561
  this.closeSearch();
554
562
  }
555
563
 
@@ -736,13 +744,22 @@ class UDExMastheadShell extends UI5Element {
736
744
  });
737
745
  }
738
746
 
747
+ fireMastheadEvent(eventName: keyof this["eventDetails"], e?: PointerEvent): void {
748
+ const eventDetails = {
749
+ analyticsName: AnalyticsName.Header,
750
+ ...(e && { originalEvent: e }),
751
+ ...(e && { sourceNode: e.currentTarget as HTMLElement }),
752
+ } as this["eventDetails"][typeof eventName];
753
+ this.fireDecoratorEvent(eventName, eventDetails);
754
+ }
755
+
739
756
  /**
740
757
  * Close the search panel.
741
758
  * @public
742
759
  */
743
760
  closeSearch(): void {
744
761
  this._isSearchOpened = false;
745
- this.fireDecoratorEvent("search-closed");
762
+ this.fireMastheadEvent("search-closed");
746
763
  }
747
764
 
748
765
  /**
@@ -766,7 +783,7 @@ class UDExMastheadShell extends UI5Element {
766
783
  this._searchOpener.selected = false;
767
784
  }
768
785
 
769
- this.fireDecoratorEvent("search-opened");
786
+ this.fireMastheadEvent("search-opened");
770
787
  }
771
788
 
772
789
  /**
@@ -52,6 +52,7 @@ export default function MessageStripTemplate(this: UDExMessageStrip) {
52
52
  design="Tertiary"
53
53
  onClick={this._closeClick}
54
54
  tooltip={this._closeButtonText}
55
+ part="close-button"
55
56
  />
56
57
  )}
57
58
  </div>