@sapudex/web-components 2.4.0 → 2.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AssetsVariables.js +6 -1
- package/dist/AssetsVariables.js.map +1 -1
- package/dist/MastheadCountrySelector.d.ts +9 -0
- package/dist/MastheadCountrySelector.js +16 -3
- package/dist/MastheadCountrySelector.js.map +1 -1
- package/dist/MastheadItem.d.ts +21 -8
- package/dist/MastheadItem.js +52 -22
- package/dist/MastheadItem.js.map +1 -1
- package/dist/MastheadMenu.d.ts +3 -0
- package/dist/MastheadMenu.js +3 -0
- package/dist/MastheadMenu.js.map +1 -1
- package/dist/MastheadMenuItem.d.ts +1 -1
- package/dist/MastheadMenuItem.js +1 -1
- package/dist/MastheadMenuItem.js.map +1 -1
- package/dist/MastheadMobileMenu.d.ts +6 -0
- package/dist/MastheadMobileMenu.js +13 -2
- package/dist/MastheadMobileMenu.js.map +1 -1
- package/dist/MastheadProfileMenu.d.ts +4 -4
- package/dist/MastheadProfileMenu.js +7 -0
- package/dist/MastheadProfileMenu.js.map +1 -1
- package/dist/MastheadShell.d.ts +12 -4
- package/dist/MastheadShell.js +19 -10
- package/dist/MastheadShell.js.map +1 -1
- package/dist/MediaPlayer.d.ts +0 -1
- package/dist/MediaPlayer.js +0 -1
- package/dist/MediaPlayer.js.map +1 -1
- package/dist/MessageStripTemplate.js +1 -1
- package/dist/MessageStripTemplate.js.map +1 -1
- package/dist/SecondaryNavigation.d.ts +11 -0
- package/dist/SecondaryNavigation.js +11 -0
- package/dist/SecondaryNavigation.js.map +1 -1
- package/dist/assets/{InputSuggestions-CYW_6A8K.js → InputSuggestions-BaPMxFm1.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-BDrgWGjT.js → ListItemStandardExpandableTextTemplate-87ypSvqu.js} +1 -1
- package/dist/assets/{bundle.esm-DRCvw6Ji.js → bundle.esm-CoBHnkfj.js} +239 -234
- package/dist/assets/messagebundle_en-DXEe5nWA.js +1 -0
- package/dist/css/themes/Button.css +1 -1
- package/dist/css/themes/MastheadItem.css +1 -1
- package/dist/css/themes/MastheadProfileMenu.css +1 -1
- package/dist/css/themes/Modal.css +1 -1
- package/dist/css/themes/RatingIndicator.css +1 -1
- package/dist/css/themes/Search.css +1 -1
- package/dist/css/themes/Slider.css +1 -1
- package/dist/css/themes/TabInOverflow.css +1 -1
- package/dist/custom-elements-internal.json +151 -138
- package/dist/custom-elements.json +135 -122
- package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +2 -1
- package/dist/generated/i18n/i18n-defaults.js +2 -1
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js +3 -3
- package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadItemTemplate.lit.js +6 -6
- package/dist/generated/templates/MastheadItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadMenuItemTemplate.lit.js +1 -1
- package/dist/generated/templates/MastheadMenuItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadMenuTemplate.lit.js +2 -2
- package/dist/generated/templates/MastheadMenuTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js +14 -14
- package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js +1 -1
- package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadShellTemplate.lit.js +2 -2
- package/dist/generated/templates/MastheadShellTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SecondaryNavigationTemplate.lit.js +1 -1
- package/dist/generated/templates/SecondaryNavigationTemplate.lit.js.map +1 -1
- package/dist/generated/themes/Button.css.d.ts +1 -1
- package/dist/generated/themes/Button.css.js +1 -1
- package/dist/generated/themes/Button.css.js.map +1 -1
- package/dist/generated/themes/MastheadItem.css.d.ts +1 -1
- package/dist/generated/themes/MastheadItem.css.js +1 -1
- package/dist/generated/themes/MastheadItem.css.js.map +1 -1
- package/dist/generated/themes/MastheadProfileMenu.css.d.ts +1 -1
- package/dist/generated/themes/MastheadProfileMenu.css.js +1 -1
- package/dist/generated/themes/MastheadProfileMenu.css.js.map +1 -1
- package/dist/generated/themes/Modal.css.d.ts +1 -1
- package/dist/generated/themes/Modal.css.js +1 -1
- package/dist/generated/themes/Modal.css.js.map +1 -1
- package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
- package/dist/generated/themes/RatingIndicator.css.js +1 -1
- package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
- package/dist/generated/themes/Search.css.d.ts +1 -1
- package/dist/generated/themes/Search.css.js +1 -1
- package/dist/generated/themes/Search.css.js.map +1 -1
- package/dist/generated/themes/Slider.css.d.ts +1 -1
- package/dist/generated/themes/Slider.css.js +1 -1
- package/dist/generated/themes/Slider.css.js.map +1 -1
- package/dist/generated/themes/TabInOverflow.css.d.ts +1 -1
- package/dist/generated/themes/TabInOverflow.css.js +1 -1
- package/dist/generated/themes/TabInOverflow.css.js.map +1 -1
- package/dist/messagebundle.properties +3 -0
- package/dist/messagebundle_en.properties +1 -0
- package/dist/types/AnalyticsName.d.ts +5 -0
- package/dist/types/AnalyticsName.js +7 -0
- package/dist/types/AnalyticsName.js.map +1 -0
- package/dist/types/EventRibbon.d.ts +38 -13
- package/dist/types/EventRibbon.js +39 -12
- package/dist/types/EventRibbon.js.map +1 -1
- package/dist/vscode.html-custom-data.json +6 -25
- package/dist/web-types.json +13 -15
- package/package.json +1 -1
- package/src/AssetsVariables.ts +6 -1
- package/src/MastheadCountrySelector.hbs +3 -0
- package/src/MastheadCountrySelector.ts +24 -4
- package/src/MastheadItem.hbs +22 -14
- package/src/MastheadItem.ts +71 -26
- package/src/MastheadMenu.hbs +6 -1
- package/src/MastheadMenu.ts +5 -0
- package/src/MastheadMenuItem.hbs +1 -1
- package/src/MastheadMenuItem.ts +2 -2
- package/src/MastheadMobileMenu.hbs +24 -9
- package/src/MastheadMobileMenu.ts +19 -3
- package/src/MastheadProfileMenu.hbs +2 -0
- package/src/MastheadProfileMenu.ts +11 -5
- package/src/MastheadShell.hbs +2 -0
- package/src/MastheadShell.ts +31 -14
- package/src/MediaPlayer.ts +0 -1
- package/src/MessageStripTemplate.tsx +1 -0
- package/src/SecondaryNavigation.hbs +6 -1
- package/src/SecondaryNavigation.ts +22 -0
- package/src/generated/i18n/i18n-defaults.ts +2 -2
- package/src/generated/templates/MastheadCountrySelectorTemplate.lit.ts +3 -3
- package/src/generated/templates/MastheadItemTemplate.lit.ts +6 -6
- package/src/generated/templates/MastheadMenuItemTemplate.lit.ts +1 -1
- package/src/generated/templates/MastheadMenuTemplate.lit.ts +2 -2
- package/src/generated/templates/MastheadMobileMenuTemplate.lit.ts +14 -14
- package/src/generated/templates/MastheadProfileMenuTemplate.lit.ts +1 -1
- package/src/generated/templates/MastheadShellTemplate.lit.ts +2 -2
- package/src/generated/templates/SecondaryNavigationTemplate.lit.ts +1 -1
- package/src/generated/themes/Button.css.ts +1 -1
- package/src/generated/themes/MastheadItem.css.ts +1 -1
- package/src/generated/themes/MastheadProfileMenu.css.ts +1 -1
- package/src/generated/themes/Modal.css.ts +1 -1
- package/src/generated/themes/RatingIndicator.css.ts +1 -1
- package/src/generated/themes/Search.css.ts +1 -1
- package/src/generated/themes/Slider.css.ts +1 -1
- package/src/generated/themes/TabInOverflow.css.ts +1 -1
- package/src/i18n/messagebundle.properties +3 -0
- package/src/i18n/messagebundle_en.properties +1 -0
- package/src/themes/Button.css +1 -0
- package/src/themes/MastheadItem.css +15 -0
- package/src/themes/MastheadProfileMenu.css +2 -1
- package/src/themes/Modal.css +2 -2
- package/src/themes/Search.css +2 -1
- package/src/themes/TabInOverflow.css +1 -1
- package/src/types/AnalyticsName.ts +6 -0
- package/src/types/EventRibbon.ts +38 -13
- package/dist/assets/messagebundle_en-BK8-Eyic.js +0 -1
package/dist/web-types.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json",
|
|
3
3
|
"name": "@sapudex/web-components",
|
|
4
|
-
"version": "2.4.
|
|
4
|
+
"version": "2.4.2",
|
|
5
5
|
"description-markup": "markdown",
|
|
6
6
|
"contributions": {
|
|
7
7
|
"html": {
|
|
@@ -1326,7 +1326,7 @@
|
|
|
1326
1326
|
"name": "background-color-scheme",
|
|
1327
1327
|
"description": "Defines the solid background color.",
|
|
1328
1328
|
"value": {
|
|
1329
|
-
"type": "
|
|
1329
|
+
"type": "UDExEventRibbonColorSheme",
|
|
1330
1330
|
"default": "\"Blue\""
|
|
1331
1331
|
}
|
|
1332
1332
|
},
|
|
@@ -1369,9 +1369,7 @@
|
|
|
1369
1369
|
{
|
|
1370
1370
|
"name": "background-color-scheme",
|
|
1371
1371
|
"description": "Defines the solid background color.",
|
|
1372
|
-
"value": {
|
|
1373
|
-
"type": "\"Mango1\" | \"Mango2\" | \"Mango3\" | \"Mango4\" | \"Red1\" | \"Red2\" | \"Red3\" | \"Red4\" | \"Raspberry1\" | \"Raspberry2\" | \"Raspberry3\" | \"Raspberry4\" | \"Pink1\" | \"Pink2\" | \"Pink3\" | \"Pink4\" | ... 19 more ... | \"Grey4\""
|
|
1374
|
-
}
|
|
1372
|
+
"value": { "type": "UDExEventRibbonColorSheme" }
|
|
1375
1373
|
},
|
|
1376
1374
|
{
|
|
1377
1375
|
"name": "background-image",
|
|
@@ -3380,11 +3378,6 @@
|
|
|
3380
3378
|
"description": "Defines a title for sub menu items",
|
|
3381
3379
|
"value": { "type": "string", "default": "\"\"" }
|
|
3382
3380
|
},
|
|
3383
|
-
{
|
|
3384
|
-
"name": "text",
|
|
3385
|
-
"description": "Defines the text of item.",
|
|
3386
|
-
"value": { "type": "string", "default": "\"\"" }
|
|
3387
|
-
},
|
|
3388
3381
|
{
|
|
3389
3382
|
"name": "selected",
|
|
3390
3383
|
"description": "Defines the selected item.",
|
|
@@ -3439,6 +3432,11 @@
|
|
|
3439
3432
|
"name": "hide-active-border",
|
|
3440
3433
|
"description": "Hide active border for item",
|
|
3441
3434
|
"value": { "type": "boolean", "default": "\"\"" }
|
|
3435
|
+
},
|
|
3436
|
+
{
|
|
3437
|
+
"name": "label",
|
|
3438
|
+
"description": "Defines the label for analytics",
|
|
3439
|
+
"value": { "type": "string" }
|
|
3442
3440
|
}
|
|
3443
3441
|
],
|
|
3444
3442
|
"slots": [
|
|
@@ -3471,11 +3469,6 @@
|
|
|
3471
3469
|
"description": "Defines a title for sub menu items",
|
|
3472
3470
|
"value": { "type": "string" }
|
|
3473
3471
|
},
|
|
3474
|
-
{
|
|
3475
|
-
"name": "text",
|
|
3476
|
-
"description": "Defines the text of item.",
|
|
3477
|
-
"value": { "type": "string" }
|
|
3478
|
-
},
|
|
3479
3472
|
{
|
|
3480
3473
|
"name": "selected",
|
|
3481
3474
|
"description": "Defines the selected item.",
|
|
@@ -3530,6 +3523,11 @@
|
|
|
3530
3523
|
"name": "hide-active-border",
|
|
3531
3524
|
"description": "Hide active border for item",
|
|
3532
3525
|
"value": { "type": "boolean" }
|
|
3526
|
+
},
|
|
3527
|
+
{
|
|
3528
|
+
"name": "label",
|
|
3529
|
+
"description": "Defines the label for analytics",
|
|
3530
|
+
"value": { "type": "string" }
|
|
3533
3531
|
}
|
|
3534
3532
|
],
|
|
3535
3533
|
"events": [
|
package/package.json
CHANGED
package/src/AssetsVariables.ts
CHANGED
|
@@ -25,8 +25,13 @@ const variablesOverwrite = `:root {
|
|
|
25
25
|
${getScopedVarName("--_ui5_calendar_header_padding")}: 0;
|
|
26
26
|
${getScopedVarName("--_ui5_calendar_left_right_padding")}: 0;
|
|
27
27
|
${getScopedVarName("--_ui5_calendar_top_bottom_padding")}: 0;
|
|
28
|
+
|
|
29
|
+
/* Avatar */
|
|
30
|
+
[udex-avatar].dark {
|
|
31
|
+
${getScopedVarName("--_ui5_avatar_outline")}: var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--udexColorNeutralWhite, #FFFFFF);
|
|
32
|
+
}
|
|
28
33
|
|
|
29
|
-
udex-search {
|
|
34
|
+
[udex-search] {
|
|
30
35
|
${getScopedVarName("--_ui5_button_pressed_focused_border_color")}: transparent;
|
|
31
36
|
}
|
|
32
37
|
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
@click="{{backToRegions}}"
|
|
10
10
|
label="{{_activeRegion?.title}}"
|
|
11
11
|
type="Button"
|
|
12
|
+
part="menu-item"
|
|
12
13
|
is-back
|
|
13
14
|
icon-start>
|
|
14
15
|
</udex-masthead-menu-item>
|
|
@@ -35,6 +36,7 @@
|
|
|
35
36
|
url="{{this.url}}"
|
|
36
37
|
label="{{this.displayTitle}}"
|
|
37
38
|
index="{{@index}}"
|
|
39
|
+
part="menu-item"
|
|
38
40
|
is-nav-item>
|
|
39
41
|
</udex-masthead-menu-item>
|
|
40
42
|
</li>
|
|
@@ -55,6 +57,7 @@
|
|
|
55
57
|
aria-has-popup="true"
|
|
56
58
|
accessible-role="button"
|
|
57
59
|
type="Button"
|
|
60
|
+
part="menu-item"
|
|
58
61
|
is-nav-item
|
|
59
62
|
has-border
|
|
60
63
|
icon-end
|
|
@@ -11,8 +11,10 @@ import {
|
|
|
11
11
|
} from "@ui5/webcomponents-base/dist/Keys.js";
|
|
12
12
|
import UDExMastheadMenuItem from "./MastheadMenuItem.js";
|
|
13
13
|
import UDExSearch, { Mode as UDExSearchMode } from "./Search.js";
|
|
14
|
-
|
|
15
14
|
import MastheadCountrySelectorTemplate from "./generated/templates/MastheadCountrySelectorTemplate.lit.js";
|
|
15
|
+
import AnalyticsName from "./types/AnalyticsName.js";
|
|
16
|
+
import { BreakpointUtils } from "./utils/Breakpoints.js";
|
|
17
|
+
import type UDExMastheadShell from "./MastheadShell.js";
|
|
16
18
|
|
|
17
19
|
// Styles
|
|
18
20
|
import MastheadCountrySelectorCss from "./generated/themes/MastheadCountrySelector.css.js";
|
|
@@ -23,6 +25,8 @@ type UDExMastheadCountrySelectorRegionClickEventDetail = {
|
|
|
23
25
|
countries: Array<Country>,
|
|
24
26
|
},
|
|
25
27
|
originalEvent: Event,
|
|
28
|
+
analyticsName: AnalyticsName,
|
|
29
|
+
sourceNode: HTMLElement,
|
|
26
30
|
}
|
|
27
31
|
|
|
28
32
|
type UDExMastheadCountrySelectorItemClickEventDetail = {
|
|
@@ -32,10 +36,13 @@ type UDExMastheadCountrySelectorItemClickEventDetail = {
|
|
|
32
36
|
url: string,
|
|
33
37
|
},
|
|
34
38
|
originalEvent: Event,
|
|
39
|
+
analyticsName: AnalyticsName,
|
|
40
|
+
sourceNode: HTMLElement,
|
|
35
41
|
}
|
|
36
42
|
|
|
37
43
|
type UDExMastheadCountrySelectorSearchEventDetail = {
|
|
38
44
|
value: string,
|
|
45
|
+
analyticsName: AnalyticsName,
|
|
39
46
|
}
|
|
40
47
|
|
|
41
48
|
export type Region = {
|
|
@@ -287,6 +294,7 @@ class UDExMastheadCountrySelector extends UI5Element {
|
|
|
287
294
|
this._shouldFocusBackBtn = false;
|
|
288
295
|
this.fireDecoratorEvent("country-selector-search", {
|
|
289
296
|
value: e.detail.value,
|
|
297
|
+
analyticsName: AnalyticsName.Header,
|
|
290
298
|
});
|
|
291
299
|
this.refreshRendering();
|
|
292
300
|
}
|
|
@@ -323,7 +331,7 @@ class UDExMastheadCountrySelector extends UI5Element {
|
|
|
323
331
|
|
|
324
332
|
handleOutsideClick(): void {
|
|
325
333
|
document.addEventListener("mousedown", (e: Event): void => {
|
|
326
|
-
if (e.target !== this) {
|
|
334
|
+
if (e.target !== this && !this.isMobile) {
|
|
327
335
|
this.handleSearchReset();
|
|
328
336
|
this._isActiveRegionOpen = false;
|
|
329
337
|
this.setActiveRegion(null);
|
|
@@ -412,14 +420,16 @@ class UDExMastheadCountrySelector extends UI5Element {
|
|
|
412
420
|
}
|
|
413
421
|
|
|
414
422
|
fireEventRegionItemClick(e: CustomEvent | KeyboardEvent): void {
|
|
415
|
-
const
|
|
423
|
+
const item = e.target as UDExMastheadMenuItem;
|
|
416
424
|
|
|
417
425
|
this.fireDecoratorEvent("region-item-click", {
|
|
418
426
|
item: {
|
|
419
|
-
title: label,
|
|
427
|
+
title: item.label,
|
|
420
428
|
countries: this._activeRegion?.countries || [],
|
|
421
429
|
},
|
|
422
430
|
originalEvent: e,
|
|
431
|
+
analyticsName: AnalyticsName.Header,
|
|
432
|
+
sourceNode: item.shadowRoot?.querySelector(".udex-masthead-menu-item") as HTMLElement,
|
|
423
433
|
});
|
|
424
434
|
}
|
|
425
435
|
|
|
@@ -434,6 +444,8 @@ class UDExMastheadCountrySelector extends UI5Element {
|
|
|
434
444
|
url: url || "",
|
|
435
445
|
},
|
|
436
446
|
originalEvent: e,
|
|
447
|
+
analyticsName: AnalyticsName.Header,
|
|
448
|
+
sourceNode: item.shadowRoot?.querySelector(".udex-masthead-menu-item") as HTMLElement,
|
|
437
449
|
});
|
|
438
450
|
}
|
|
439
451
|
|
|
@@ -476,6 +488,14 @@ class UDExMastheadCountrySelector extends UI5Element {
|
|
|
476
488
|
get isSingleMode(): boolean {
|
|
477
489
|
return this.regionsData.length === 1;
|
|
478
490
|
}
|
|
491
|
+
|
|
492
|
+
get isMobile(): boolean {
|
|
493
|
+
return BreakpointUtils.isAtMost("M") || this.mastheadShell?._isMobileMode;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
get mastheadShell(): UDExMastheadShell {
|
|
497
|
+
return document.querySelector<UDExMastheadShell>("[udex-masthead-shell]")!;
|
|
498
|
+
}
|
|
479
499
|
}
|
|
480
500
|
|
|
481
501
|
UDExMastheadCountrySelector.define();
|
package/src/MastheadItem.hbs
CHANGED
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
href="{{href}}"
|
|
9
9
|
aria-label="{{accessibleLabel}}"
|
|
10
10
|
aria-describedby="{{ariaDescribedBy}}"
|
|
11
|
-
@click="{{handleItemClick}}"
|
|
11
|
+
@click="{{handleItemClick}}"
|
|
12
|
+
@mousedown="{{handleMouseDown}}"
|
|
13
|
+
@mouseup="{{handleMouseUp}}">
|
|
12
14
|
{{> content}}
|
|
13
15
|
</a>
|
|
14
16
|
{{#if isTargetBlank}}
|
|
@@ -28,7 +30,9 @@
|
|
|
28
30
|
aria-haspopup="{{hasDropdownSlot}}"
|
|
29
31
|
aria-label="{{accessibleLabel}}"
|
|
30
32
|
@keydown="{{handleKeyDown}}"
|
|
31
|
-
@click="{{handleItemClick}}"
|
|
33
|
+
@click="{{handleItemClick}}"
|
|
34
|
+
@mousedown="{{handleMouseDown}}"
|
|
35
|
+
@mouseup="{{handleMouseUp}}">
|
|
32
36
|
{{> content}}
|
|
33
37
|
</span>
|
|
34
38
|
{{#if isDropdownOpened}}
|
|
@@ -45,6 +49,8 @@
|
|
|
45
49
|
aria-haspopup="{{hasDropdownSlot}}"
|
|
46
50
|
aria-label="{{accessibleLabel}}"
|
|
47
51
|
@keydown="{{handleKeyDown}}"
|
|
52
|
+
@mousedown="{{handleMouseDown}}"
|
|
53
|
+
@mouseup="{{handleMouseUp}}"
|
|
48
54
|
@click="{{handleItemClick}}">
|
|
49
55
|
{{> content}}
|
|
50
56
|
</button>
|
|
@@ -63,18 +69,20 @@
|
|
|
63
69
|
mode="Decorative">
|
|
64
70
|
</ui5-icon>
|
|
65
71
|
{{else if image}}
|
|
66
|
-
<
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
72
|
+
<div class="udex-masthead-item__image-wrap">
|
|
73
|
+
<img
|
|
74
|
+
class="udex-masthead-item__image"
|
|
75
|
+
id="{{this._id}}_image-alt"
|
|
76
|
+
src="{{image}}"
|
|
77
|
+
alt="{{imageAlt}}"/>
|
|
78
|
+
</div>
|
|
79
|
+
{{#if imageAlt}}
|
|
80
|
+
<span
|
|
81
|
+
id="image-desc"
|
|
82
|
+
class="udex-masthead-hidden-text">
|
|
83
|
+
{{imageAlt}}
|
|
84
|
+
</span>
|
|
85
|
+
{{/if}}
|
|
78
86
|
{{else}}
|
|
79
87
|
<span class="udex-masthead-item__text">
|
|
80
88
|
<slot></slot>
|
package/src/MastheadItem.ts
CHANGED
|
@@ -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
|
*
|
|
@@ -282,12 +285,14 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
282
285
|
@slot({ type: HTMLElement, "default": true })
|
|
283
286
|
content?: Array<HTMLElement>;
|
|
284
287
|
|
|
288
|
+
@property({ type: Boolean })
|
|
289
|
+
_preventFocusOut!: boolean;
|
|
290
|
+
|
|
285
291
|
@i18n("@sapudex/web-components")
|
|
286
292
|
static i18nBundle: I18nBundle;
|
|
287
293
|
|
|
288
294
|
_profileAvatar!: UDExAvatar;
|
|
289
295
|
_mastheadShell!: UDExMastheadShell;
|
|
290
|
-
_isEscPress!: boolean;
|
|
291
296
|
|
|
292
297
|
onEnterDOM(): void {
|
|
293
298
|
if (isDesktop()) {
|
|
@@ -295,6 +300,10 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
295
300
|
}
|
|
296
301
|
}
|
|
297
302
|
|
|
303
|
+
onBeforeRendering(): void {
|
|
304
|
+
this.label = this.eventItemTitle;
|
|
305
|
+
}
|
|
306
|
+
|
|
298
307
|
onAfterRendering(): void {
|
|
299
308
|
this._profileAvatar = this.profileAvatar;
|
|
300
309
|
this._mastheadShell = this.mastheadShell;
|
|
@@ -304,14 +313,13 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
304
313
|
}
|
|
305
314
|
|
|
306
315
|
this.handleOutsideClick();
|
|
307
|
-
this._isEscPress = false;
|
|
308
316
|
}
|
|
309
317
|
|
|
310
318
|
handleOutsideClick(): void {
|
|
311
319
|
document.addEventListener("click", (e: Event) => {
|
|
312
320
|
const target = e.target as HTMLElement;
|
|
313
321
|
const item = target.closest("[udex-masthead-item]");
|
|
314
|
-
if (item !== this && !this.isMobile) {
|
|
322
|
+
if (item !== this && !this.isMobile && this.selected) {
|
|
315
323
|
if (this.isDropdownOpened) {
|
|
316
324
|
this.fireDropdownCloseEvent(this.eventItemTitle, UDExMastheadDropdownItemAction.ClickOutside);
|
|
317
325
|
}
|
|
@@ -321,13 +329,27 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
321
329
|
});
|
|
322
330
|
}
|
|
323
331
|
|
|
332
|
+
handleMouseDown(): void {
|
|
333
|
+
this._preventFocusOut = true;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
handleMouseUp(): void {
|
|
337
|
+
this._preventFocusOut = false;
|
|
338
|
+
}
|
|
339
|
+
|
|
324
340
|
handleFocusout(e: FocusEvent): void {
|
|
325
|
-
if (
|
|
341
|
+
if (this.isFocusOutPrevented(e)) {
|
|
326
342
|
return;
|
|
327
343
|
}
|
|
328
344
|
|
|
329
|
-
|
|
330
|
-
|
|
345
|
+
this.handleFocusOutForDropdowns(e);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
handleFocusOutForDropdowns(e: FocusEvent): void {
|
|
349
|
+
const relatedTarget = e.relatedTarget as HTMLElement;
|
|
350
|
+
const target = e.target as HTMLElement;
|
|
351
|
+
|
|
352
|
+
if (this.shouldCloseDropdown(relatedTarget, target)) {
|
|
331
353
|
this.closeDropdown();
|
|
332
354
|
}
|
|
333
355
|
}
|
|
@@ -343,7 +365,6 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
343
365
|
}
|
|
344
366
|
|
|
345
367
|
handleKeyEscape(): void {
|
|
346
|
-
this._isEscPress = true;
|
|
347
368
|
this.closeDropdown();
|
|
348
369
|
if (this.isProfileBtn) {
|
|
349
370
|
this._profileAvatar.focus();
|
|
@@ -381,17 +402,19 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
381
402
|
}
|
|
382
403
|
|
|
383
404
|
fireDropdownCloseEvent(title: string, action: UDExMastheadDropdownItemAction): void {
|
|
384
|
-
this.fireDecoratorEvent("dropdown-closed", { title, action });
|
|
405
|
+
this.fireDecoratorEvent("dropdown-closed", { title, action, analyticsName: AnalyticsName.Header });
|
|
385
406
|
}
|
|
386
407
|
|
|
387
408
|
fireDropdownOpenEvent(title: string, action: UDExMastheadDropdownItemAction): void {
|
|
388
|
-
this.fireDecoratorEvent("dropdown-opened", { title, action });
|
|
409
|
+
this.fireDecoratorEvent("dropdown-opened", { title, action, analyticsName: AnalyticsName.Header });
|
|
389
410
|
}
|
|
390
411
|
|
|
391
412
|
fireItemClickEvent(e: PointerEvent): void {
|
|
392
413
|
this.fireDecoratorEvent("item-click", {
|
|
393
414
|
item: this,
|
|
394
415
|
originalEvent: e,
|
|
416
|
+
analyticsName: AnalyticsName.Header,
|
|
417
|
+
sourceNode: e.currentTarget as HTMLElement,
|
|
395
418
|
});
|
|
396
419
|
}
|
|
397
420
|
|
|
@@ -442,7 +465,7 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
442
465
|
|
|
443
466
|
closeDropdown(): void {
|
|
444
467
|
this.selected = false;
|
|
445
|
-
this.fireDropdownCloseEvent(this.eventItemTitle, UDExMastheadDropdownItemAction.Close);
|
|
468
|
+
this.fireDropdownCloseEvent(this.accessibleName || this.eventItemTitle, UDExMastheadDropdownItemAction.Close);
|
|
446
469
|
}
|
|
447
470
|
|
|
448
471
|
getDomElement(selector: string): HTMLElement | undefined | null {
|
|
@@ -453,6 +476,28 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
453
476
|
return parseArrayFromString(this.subItems);
|
|
454
477
|
}
|
|
455
478
|
|
|
479
|
+
private isFocusOutPrevented(e: FocusEvent): boolean {
|
|
480
|
+
return this.isMobile || e.relatedTarget === null || this._preventFocusOut;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
private isProfileButtonTarget(relatedTarget: HTMLElement | null): boolean {
|
|
484
|
+
return (relatedTarget?.tagName === "UDEX-AVATAR" || relatedTarget?.tagName === "UDEX-MASTHEAD-ITEM") && this.isProfileBtn;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
private isNavItemTarget(target: HTMLElement): boolean {
|
|
488
|
+
return target.getAttribute("slot") === "dropdown" && !this.isProfileBtn;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
private isRelatedTargetOutside(relatedTarget: HTMLElement | null): boolean {
|
|
492
|
+
return relatedTarget?.closest("[udex-masthead-item]") === null;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
private shouldCloseDropdown(relatedTarget: HTMLElement, target:HTMLElement): boolean {
|
|
496
|
+
return this.isRelatedTargetOutside(relatedTarget)
|
|
497
|
+
|| this.isProfileButtonTarget(relatedTarget)
|
|
498
|
+
|| this.isNavItemTarget(target);
|
|
499
|
+
}
|
|
500
|
+
|
|
456
501
|
get mastheadShell(): UDExMastheadShell {
|
|
457
502
|
return document.querySelector<UDExMastheadShell>("[udex-masthead-shell]")!;
|
|
458
503
|
}
|
|
@@ -532,6 +577,10 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
532
577
|
return this.getAttribute("slot") === "cart";
|
|
533
578
|
}
|
|
534
579
|
|
|
580
|
+
get isSearchBtn(): boolean {
|
|
581
|
+
return this.icon === "search";
|
|
582
|
+
}
|
|
583
|
+
|
|
535
584
|
get isSupportBtn(): boolean {
|
|
536
585
|
return this.getAttribute("slot") === "support";
|
|
537
586
|
}
|
|
@@ -553,22 +602,18 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
553
602
|
}
|
|
554
603
|
|
|
555
604
|
get eventItemTitle(): string {
|
|
556
|
-
if (this.
|
|
557
|
-
return
|
|
605
|
+
if (this.isSearchBtn) {
|
|
606
|
+
return UDExMastheadItem.i18nBundle.getText(SEARCH);
|
|
558
607
|
}
|
|
559
|
-
|
|
560
608
|
if (this.isCartBtn) {
|
|
561
609
|
return UDExMastheadItem.i18nBundle.getText(CART);
|
|
562
610
|
}
|
|
563
|
-
|
|
564
611
|
if (this.isProfileBtn) {
|
|
565
612
|
return UDExMastheadItem.i18nBundle.getText(PROFILE);
|
|
566
613
|
}
|
|
567
|
-
|
|
568
614
|
if (this.isCountrySelectorBtn) {
|
|
569
615
|
return UDExMastheadItem.i18nBundle.getText(COUNTRY_SELECTOR);
|
|
570
616
|
}
|
|
571
|
-
|
|
572
617
|
if (this.isSupportBtn) {
|
|
573
618
|
return UDExMastheadItem.i18nBundle.getText(SUPPORT);
|
|
574
619
|
}
|
package/src/MastheadMenu.hbs
CHANGED
|
@@ -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>
|
package/src/MastheadMenu.ts
CHANGED
|
@@ -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") || "" }),
|
package/src/MastheadMenuItem.hbs
CHANGED
package/src/MastheadMenuItem.ts
CHANGED
|
@@ -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
|
|
229
|
-
return this.accessibleRole ? this.accessibleRole :
|
|
228
|
+
get accessibleRoleText(): string {
|
|
229
|
+
return this.accessibleRole ? this.accessibleRole : "menuitem";
|
|
230
230
|
}
|
|
231
231
|
|
|
232
232
|
get partAttr(): string {
|