@sapudex/web-components 0.224.0 → 0.226.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.
- package/dist/FilterMenu.d.ts +7 -0
- package/dist/FilterMenu.js +3 -0
- package/dist/FilterMenu.js.map +1 -1
- package/dist/HeroBanner.js.map +1 -1
- package/dist/MastheadItem.d.ts +49 -2
- package/dist/MastheadItem.js +112 -23
- package/dist/MastheadItem.js.map +1 -1
- package/dist/MastheadMenu.d.ts +1 -0
- package/dist/MastheadMenu.js +14 -5
- package/dist/MastheadMenu.js.map +1 -1
- package/dist/MastheadMobileMenu.d.ts +4 -1
- package/dist/MastheadMobileMenu.js +15 -3
- package/dist/MastheadMobileMenu.js.map +1 -1
- package/dist/MastheadShell.d.ts +26 -4
- package/dist/MastheadShell.js +86 -43
- package/dist/MastheadShell.js.map +1 -1
- package/dist/PasswordField.d.ts +12 -0
- package/dist/PasswordField.js +13 -0
- package/dist/PasswordField.js.map +1 -1
- package/dist/SecondaryNavigation.d.ts +1 -1
- package/dist/SecondaryNavigation.js +8 -6
- package/dist/SecondaryNavigation.js.map +1 -1
- package/dist/SecondaryNavigationItem.d.ts +4 -3
- package/dist/SecondaryNavigationItem.js +15 -9
- package/dist/SecondaryNavigationItem.js.map +1 -1
- package/dist/SecondaryNavigationSubItem.d.ts +2 -2
- package/dist/SecondaryNavigationSubItem.js +5 -4
- package/dist/SecondaryNavigationSubItem.js.map +1 -1
- package/dist/Table.d.ts +5 -0
- package/dist/Table.js +4 -1
- package/dist/Table.js.map +1 -1
- package/dist/TextField.d.ts +8 -0
- package/dist/TextField.js +9 -0
- package/dist/TextField.js.map +1 -1
- package/dist/assets/{bundle.esm-fe0b0d94.js → bundle.esm-740278cc.js} +194 -193
- package/dist/assets/messagebundle_en-f0b5e0d9.js +1 -0
- package/dist/css/themes/MastheadItem.css +1 -1
- package/dist/css/themes/PasswordField.css +1 -0
- package/dist/css/themes/RatingIndicator.css +1 -1
- package/dist/css/themes/Slider.css +1 -1
- package/dist/custom-elements-internal.json +148 -0
- package/dist/custom-elements.json +125 -0
- package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +4 -1
- package/dist/generated/i18n/i18n-defaults.js +4 -1
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/templates/FilterMenuTemplate.lit.js +1 -1
- package/dist/generated/templates/FilterMenuTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadItemTemplate.lit.js +2 -2
- package/dist/generated/templates/MastheadItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadMenuTemplate.lit.js +1 -1
- package/dist/generated/templates/MastheadMenuTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js +2 -2
- package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadShellTemplate.lit.js +6 -5
- package/dist/generated/templates/MastheadShellTemplate.lit.js.map +1 -1
- package/dist/generated/templates/PasswordFieldTemplate.lit.js +1 -1
- package/dist/generated/templates/PasswordFieldTemplate.lit.js.map +1 -1
- package/dist/generated/templates/TextFieldTemplate.lit.js +1 -1
- package/dist/generated/templates/TextFieldTemplate.lit.js.map +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/PasswordField.css.d.ts +3 -0
- package/dist/generated/themes/PasswordField.css.js +9 -0
- package/dist/generated/themes/PasswordField.css.js.map +1 -0
- package/dist/generated/themes/RatingIndicator.css.js +1 -1
- package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
- package/dist/generated/themes/Slider.css.js +1 -1
- package/dist/generated/themes/Slider.css.js.map +1 -1
- package/dist/i18n/messagebundle.properties +10 -2
- package/dist/i18n/messagebundle_en.properties +4 -1
- package/dist/vscode.html-custom-data.json +22 -2
- package/dist/web-types.json +93 -4
- package/package.json +1 -1
- package/src/FilterMenu.hbs +1 -0
- package/src/FilterMenu.ts +9 -0
- package/src/HeroBanner.ts +1 -1
- package/src/MastheadItem.hbs +2 -2
- package/src/MastheadItem.ts +136 -25
- package/src/MastheadMenu.hbs +4 -1
- package/src/MastheadMenu.ts +16 -5
- package/src/MastheadMobileMenu.hbs +2 -2
- package/src/MastheadMobileMenu.ts +18 -3
- package/src/MastheadShell.hbs +14 -3
- package/src/MastheadShell.ts +98 -45
- package/src/PasswordField.hbs +1 -0
- package/src/PasswordField.ts +19 -1
- package/src/SecondaryNavigation.ts +9 -6
- package/src/SecondaryNavigationItem.ts +17 -10
- package/src/SecondaryNavigationSubItem.ts +5 -4
- package/src/Table.ts +8 -1
- package/src/TextField.hbs +2 -0
- package/src/TextField.ts +16 -0
- package/src/generated/i18n/i18n-defaults.ts +2 -2
- package/src/generated/templates/FilterMenuTemplate.lit.ts +1 -1
- package/src/generated/templates/MastheadItemTemplate.lit.ts +2 -2
- package/src/generated/templates/MastheadMenuTemplate.lit.ts +1 -1
- package/src/generated/templates/MastheadMobileMenuTemplate.lit.ts +2 -2
- package/src/generated/templates/MastheadShellTemplate.lit.ts +6 -5
- package/src/generated/templates/PasswordFieldTemplate.lit.ts +1 -1
- package/src/generated/templates/TextFieldTemplate.lit.ts +1 -1
- package/src/generated/themes/MastheadItem.css.ts +1 -1
- package/src/generated/themes/PasswordField.css.ts +13 -0
- package/src/generated/themes/RatingIndicator.css.ts +1 -1
- package/src/generated/themes/Slider.css.ts +1 -1
- package/src/i18n/messagebundle.properties +10 -2
- package/src/i18n/messagebundle_en.properties +4 -1
- package/src/themes/MastheadItem.css +9 -3
- package/src/themes/PasswordField.css +3 -0
- package/dist/assets/messagebundle_en-d1666c5e.js +0 -1
|
@@ -19,6 +19,8 @@ import MastheadMobileMenuTemplate from "./generated/templates/MastheadMobileMenu
|
|
|
19
19
|
import MastheadMobileMenuCss from "./generated/themes/MastheadMobileMenu.css.js";
|
|
20
20
|
|
|
21
21
|
export type MobileItemClickEventDetail = {
|
|
22
|
+
category?: string,
|
|
23
|
+
isMobile: boolean,
|
|
22
24
|
originalEvent: Event,
|
|
23
25
|
item: UDExMastheadMenuItem,
|
|
24
26
|
}
|
|
@@ -71,7 +73,13 @@ export type MobileItemClickEventDetail = {
|
|
|
71
73
|
* @allowPreventDefault
|
|
72
74
|
* @public
|
|
73
75
|
*/
|
|
74
|
-
@event("explorer-menu-click"
|
|
76
|
+
@event("explorer-menu-click", {
|
|
77
|
+
detail: {
|
|
78
|
+
originalEvent: {
|
|
79
|
+
type: Event,
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
})
|
|
75
83
|
|
|
76
84
|
class UDExMastheadMobileMenu extends UI5Element {
|
|
77
85
|
/**
|
|
@@ -152,7 +160,7 @@ class UDExMastheadMobileMenu extends UI5Element {
|
|
|
152
160
|
e.preventDefault();
|
|
153
161
|
this.openExploreSapMenu(e);
|
|
154
162
|
this.setFocusItemByIndex(0);
|
|
155
|
-
this.fireEvent("explorer-menu-click");
|
|
163
|
+
this.fireEvent("explorer-menu-click", { originalEvent: e });
|
|
156
164
|
}
|
|
157
165
|
|
|
158
166
|
handleBackToMenuItems(e: Event) {
|
|
@@ -239,6 +247,11 @@ class UDExMastheadMobileMenu extends UI5Element {
|
|
|
239
247
|
this.fireMobileItemEvent(e);
|
|
240
248
|
}
|
|
241
249
|
|
|
250
|
+
handleMobileCategoryItemEvent(e: PointerEvent) {
|
|
251
|
+
e.stopPropagation();
|
|
252
|
+
this.fireMobileItemEvent(e, this._category.category);
|
|
253
|
+
}
|
|
254
|
+
|
|
242
255
|
handleMenuMode() {
|
|
243
256
|
if (this.isNoMenuItemsMode && this.hasExploreBtnSlot) {
|
|
244
257
|
this.openCategories(this.exploreItem);
|
|
@@ -406,8 +419,10 @@ class UDExMastheadMobileMenu extends UI5Element {
|
|
|
406
419
|
this._showCategoryItems = false;
|
|
407
420
|
}
|
|
408
421
|
|
|
409
|
-
fireMobileItemEvent(e: Event) {
|
|
422
|
+
fireMobileItemEvent(e: Event, category?: string) {
|
|
410
423
|
this.fireEvent<MobileItemClickEventDetail>("item-click", {
|
|
424
|
+
...(category && { category }),
|
|
425
|
+
isMobile: true,
|
|
411
426
|
item: e.target as UDExMastheadMenuItem,
|
|
412
427
|
originalEvent: e,
|
|
413
428
|
}, true, false);
|
package/src/MastheadShell.hbs
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
<header
|
|
1
|
+
<header
|
|
2
|
+
class="udex-masthead-shell"
|
|
3
|
+
@keydown="{{handleKeyDown}}">
|
|
2
4
|
<div class="udex-masthead-shell__main-content">
|
|
3
5
|
<div class="udex-masthead-shell__landing-wrap">
|
|
4
6
|
{{#if logoUrl}}
|
|
@@ -26,7 +28,9 @@
|
|
|
26
28
|
</div>
|
|
27
29
|
|
|
28
30
|
{{#if isSearchVisible}}
|
|
29
|
-
<div
|
|
31
|
+
<div
|
|
32
|
+
class="udex-masthead-shell__search-container"
|
|
33
|
+
@ui5-search-keydown="{{handleSearchKeyDown}}">
|
|
30
34
|
<slot name="search"></slot>
|
|
31
35
|
</div>
|
|
32
36
|
{{#if _isSearchOpened}}
|
|
@@ -80,6 +84,14 @@
|
|
|
80
84
|
<slot name="cart"></slot>
|
|
81
85
|
</div>
|
|
82
86
|
{{/if}}
|
|
87
|
+
{{#if hasSupport}}
|
|
88
|
+
<div
|
|
89
|
+
class="udex-masthead-shell__support udex-masthead-shell__item_icon"
|
|
90
|
+
@ui5-item-click="{{setSelectedItem}}"
|
|
91
|
+
@click="{{handleSupportClick}}">
|
|
92
|
+
<slot name="support"></slot>
|
|
93
|
+
</div>
|
|
94
|
+
{{/if}}
|
|
83
95
|
{{#if hasProfile}}
|
|
84
96
|
<div
|
|
85
97
|
class="udex-masthead-shell__profile udex-masthead-shell__item_icon"
|
|
@@ -96,7 +108,6 @@
|
|
|
96
108
|
<slot name="countrySelector"></slot>
|
|
97
109
|
</div>
|
|
98
110
|
{{/if}}
|
|
99
|
-
|
|
100
111
|
{{#if hasMobileMenuButtons}}
|
|
101
112
|
<udex-masthead-item
|
|
102
113
|
@keydown="{{handleEnterAndSpaceOnCloseBtn}}"
|
package/src/MastheadShell.ts
CHANGED
|
@@ -7,16 +7,15 @@ import UI5Icon from "@ui5/webcomponents/dist/Icon.js";
|
|
|
7
7
|
import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
|
|
8
8
|
import ResizeHandler, { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
9
9
|
import {
|
|
10
|
-
isLeft, isRight, isSpace, isEnter,
|
|
10
|
+
isLeft, isRight, isSpace, isEnter, isEscape,
|
|
11
11
|
} from "@ui5/webcomponents-base/dist/Keys.js";
|
|
12
12
|
import "@ui5/webcomponents-icons/dist/decline.js";
|
|
13
13
|
import "@ui5/webcomponents-icons/dist/menu2.js";
|
|
14
14
|
import "@ui5/webcomponents-icons/dist/search.js";
|
|
15
|
-
import "@ui5/webcomponents-icons/dist/cart.js";
|
|
16
15
|
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
17
16
|
import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
18
17
|
import { MAIN_LINKS } from "./generated/i18n/i18n-defaults.js";
|
|
19
|
-
import UDExMastheadItem from "./MastheadItem.js";
|
|
18
|
+
import UDExMastheadItem, { DropdownItemAction } from "./MastheadItem.js";
|
|
20
19
|
import UDExMastheadMenu from "./MastheadMenu.js";
|
|
21
20
|
import UDExControlButton from "./ControlButton.js";
|
|
22
21
|
import UDExSearch from "./Search.js";
|
|
@@ -32,6 +31,12 @@ import MastheadShellCss from "./generated/themes/MastheadShell.css.js";
|
|
|
32
31
|
const canvasContentFont = "16px '72 Brand Variable'";
|
|
33
32
|
type MastheadSlottedItem = UDExMastheadItem | UDExMastheadProfileMenu | UDExMastheadMenu | UDExMastheadCountrySelector | undefined | null;
|
|
34
33
|
type MastheadItemType = UDExMastheadItem | null | undefined;
|
|
34
|
+
export const MastheadOriginalEvent = {
|
|
35
|
+
detail: {
|
|
36
|
+
originalEvent: { type: Event },
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
|
|
35
40
|
/**
|
|
36
41
|
* @class
|
|
37
42
|
*
|
|
@@ -83,54 +88,71 @@ type MastheadItemType = UDExMastheadItem | null | undefined;
|
|
|
83
88
|
*
|
|
84
89
|
* @public
|
|
85
90
|
*/
|
|
86
|
-
@event("search-click")
|
|
91
|
+
@event("search-click", MastheadOriginalEvent)
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Fired event when the user clicks the search close button.
|
|
95
|
+
*
|
|
96
|
+
* @public
|
|
97
|
+
*/
|
|
98
|
+
@event("search-close-click", MastheadOriginalEvent)
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Fired event when the search panel is opened.
|
|
102
|
+
*
|
|
103
|
+
* @public
|
|
104
|
+
*/
|
|
105
|
+
@event("search-opened")
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Fired event when the search panel is closed.
|
|
109
|
+
*
|
|
110
|
+
* @public
|
|
111
|
+
*/
|
|
112
|
+
@event("search-closed")
|
|
87
113
|
|
|
88
114
|
/**
|
|
89
115
|
* Fired event when the user clicks the cart button trigger.
|
|
90
116
|
*
|
|
91
117
|
* @public
|
|
92
118
|
*/
|
|
93
|
-
@event("cart-click")
|
|
119
|
+
@event("cart-click", MastheadOriginalEvent)
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Fired event when the user clicks the support button trigger.
|
|
123
|
+
*
|
|
124
|
+
* @public
|
|
125
|
+
*/
|
|
126
|
+
@event("support-click", MastheadOriginalEvent)
|
|
94
127
|
|
|
95
128
|
/**
|
|
96
129
|
* Fired event when the user clicks the profile button trigger.
|
|
97
130
|
*
|
|
98
131
|
* @public
|
|
99
132
|
*/
|
|
100
|
-
@event("profile-click")
|
|
133
|
+
@event("profile-click", MastheadOriginalEvent)
|
|
101
134
|
|
|
102
135
|
/**
|
|
103
136
|
* Fired event when the user clicks the country selector button trigger.
|
|
104
137
|
*
|
|
105
138
|
* @public
|
|
106
139
|
*/
|
|
107
|
-
@event("country-selector-click")
|
|
140
|
+
@event("country-selector-click", MastheadOriginalEvent)
|
|
108
141
|
|
|
109
142
|
/**
|
|
110
143
|
* Fired event when the user clicks the logo.
|
|
111
144
|
*
|
|
112
145
|
* @public
|
|
113
146
|
*/
|
|
114
|
-
@event("logo-click",
|
|
115
|
-
detail: {
|
|
116
|
-
originalEvent: {
|
|
117
|
-
type: Event,
|
|
118
|
-
},
|
|
119
|
-
},
|
|
120
|
-
})
|
|
147
|
+
@event("logo-click", MastheadOriginalEvent)
|
|
121
148
|
|
|
122
149
|
/**
|
|
123
150
|
* Fired event when the user clicks the site label.
|
|
124
151
|
*
|
|
125
152
|
* @public
|
|
153
|
+
* @public
|
|
126
154
|
*/
|
|
127
|
-
@event("site-label-click",
|
|
128
|
-
detail: {
|
|
129
|
-
originalEvent: {
|
|
130
|
-
type: Event,
|
|
131
|
-
},
|
|
132
|
-
},
|
|
133
|
-
})
|
|
155
|
+
@event("site-label-click", MastheadOriginalEvent)
|
|
134
156
|
|
|
135
157
|
class UDExMastheadShell extends UI5Element {
|
|
136
158
|
/**
|
|
@@ -191,6 +213,14 @@ class UDExMastheadShell extends UI5Element {
|
|
|
191
213
|
@slot({ type: HTMLElement })
|
|
192
214
|
profile!: Array<UDExMastheadItem>;
|
|
193
215
|
|
|
216
|
+
/**
|
|
217
|
+
* Slot for support
|
|
218
|
+
*
|
|
219
|
+
* @public
|
|
220
|
+
*/
|
|
221
|
+
@slot({ type: HTMLElement })
|
|
222
|
+
support!: Array<UDExMastheadItem>;
|
|
223
|
+
|
|
194
224
|
/**
|
|
195
225
|
* Defines URL to homepage. It will be used as a link on a logo and a site label
|
|
196
226
|
*
|
|
@@ -350,8 +380,6 @@ class UDExMastheadShell extends UI5Element {
|
|
|
350
380
|
this._searchOpener = this.searchOpener;
|
|
351
381
|
this._mobileMenu = this.mastheadMobileMenu;
|
|
352
382
|
|
|
353
|
-
this.handleOutsideClick();
|
|
354
|
-
|
|
355
383
|
if (this._isSearchOpened) {
|
|
356
384
|
this.focusSearchInput();
|
|
357
385
|
}
|
|
@@ -380,6 +408,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
380
408
|
|
|
381
409
|
if (this._shouldHandleResize && this._isMobileMenuOpen) {
|
|
382
410
|
this.closeMobileMenu();
|
|
411
|
+
this.resetSelectedItems();
|
|
383
412
|
return;
|
|
384
413
|
}
|
|
385
414
|
|
|
@@ -409,6 +438,19 @@ class UDExMastheadShell extends UI5Element {
|
|
|
409
438
|
this.handleRightArrow(e);
|
|
410
439
|
}
|
|
411
440
|
|
|
441
|
+
handleSearchKeyDown(e: CustomEvent): void {
|
|
442
|
+
e.stopPropagation();
|
|
443
|
+
const keyEvent = e.detail as KeyboardEvent;
|
|
444
|
+
|
|
445
|
+
if (isEscape(keyEvent)) {
|
|
446
|
+
if (this.showSearchByDefault && this.isAtLeastBreakpointSizeM) {
|
|
447
|
+
return;
|
|
448
|
+
}
|
|
449
|
+
this.closeSearch();
|
|
450
|
+
this.focusSearchBtn();
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
|
|
412
454
|
handleLeftArrow(e: KeyboardEvent): void {
|
|
413
455
|
if (isLeft(e)) {
|
|
414
456
|
const currentItem = e.target as UDExMastheadItem;
|
|
@@ -443,23 +485,28 @@ class UDExMastheadShell extends UI5Element {
|
|
|
443
485
|
|
|
444
486
|
handleSearchClick(e: CustomEvent): void {
|
|
445
487
|
e.stopPropagation();
|
|
488
|
+
this.fireEvent("search-click", { originalEvent: e });
|
|
446
489
|
this.openSearch();
|
|
447
|
-
this.fireEvent("search-click");
|
|
448
490
|
}
|
|
449
491
|
|
|
450
492
|
handleCartClick(e: CustomEvent): void {
|
|
451
493
|
e.stopPropagation();
|
|
452
|
-
this.fireEvent("cart-click");
|
|
494
|
+
this.fireEvent("cart-click", { originalEvent: e });
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
handleSupportClick(e: CustomEvent): void {
|
|
498
|
+
e.stopPropagation();
|
|
499
|
+
this.fireEvent("support-click", { originalEvent: e });
|
|
453
500
|
}
|
|
454
501
|
|
|
455
502
|
handleProfileClick(e: CustomEvent): void {
|
|
456
503
|
e.stopPropagation();
|
|
457
|
-
this.fireEvent("profile-click");
|
|
504
|
+
this.fireEvent("profile-click", { originalEvent: e });
|
|
458
505
|
}
|
|
459
506
|
|
|
460
507
|
handleCountrySelectorClick(e: CustomEvent): void {
|
|
461
508
|
e.stopPropagation();
|
|
462
|
-
this.fireEvent("country-selector-click");
|
|
509
|
+
this.fireEvent("country-selector-click", { originalEvent: e });
|
|
463
510
|
}
|
|
464
511
|
|
|
465
512
|
handleOpenMobileMenu(): void {
|
|
@@ -478,9 +525,10 @@ class UDExMastheadShell extends UI5Element {
|
|
|
478
525
|
this.fireEvent("mobile-menu-open");
|
|
479
526
|
}
|
|
480
527
|
|
|
481
|
-
handleCloseSearch(): void {
|
|
482
|
-
this.closeSearch();
|
|
528
|
+
handleCloseSearch(e: CustomEvent): void {
|
|
483
529
|
this._closeBtnClicked = true;
|
|
530
|
+
this.fireEvent("search-close-click", { originalEvent: e });
|
|
531
|
+
this.closeSearch();
|
|
484
532
|
}
|
|
485
533
|
|
|
486
534
|
handleEnterAndSpaceOnCloseBtn(e: KeyboardEvent): void {
|
|
@@ -491,17 +539,6 @@ class UDExMastheadShell extends UI5Element {
|
|
|
491
539
|
}
|
|
492
540
|
}
|
|
493
541
|
|
|
494
|
-
handleOutsideClick(): void {
|
|
495
|
-
document.addEventListener("click", (e: Event) => {
|
|
496
|
-
const el = e.target as UDExMastheadItem;
|
|
497
|
-
const isMobile = window.innerWidth < 1280 || this._isMobileMode;
|
|
498
|
-
const isDropdownSlot = el.getAttribute("slot") === "dropdown";
|
|
499
|
-
if (!isDropdownSlot && !el.isMenuItem && !isMobile) {
|
|
500
|
-
this.resetSelectedItems();
|
|
501
|
-
}
|
|
502
|
-
});
|
|
503
|
-
}
|
|
504
|
-
|
|
505
542
|
focusSearchInput(): void {
|
|
506
543
|
const searchSlot = this.querySelector<UDExSearch>("[udex-search]");
|
|
507
544
|
if (searchSlot) {
|
|
@@ -527,7 +564,10 @@ class UDExMastheadShell extends UI5Element {
|
|
|
527
564
|
|
|
528
565
|
resetSelectedItems(clickedId?: string): void {
|
|
529
566
|
this.getSelectedItems().forEach(item => {
|
|
530
|
-
if (item._id !== clickedId) {
|
|
567
|
+
if (item._id !== clickedId && item.selected) {
|
|
568
|
+
if (item.hasDropdownSlot) {
|
|
569
|
+
item.fireDropdownCloseEvent(item.eventItemTitle, DropdownItemAction.ClickOutside);
|
|
570
|
+
}
|
|
531
571
|
item.selected = false;
|
|
532
572
|
}
|
|
533
573
|
});
|
|
@@ -556,6 +596,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
556
596
|
...this.menuItems,
|
|
557
597
|
...this.exploreSAP,
|
|
558
598
|
...this.cart,
|
|
599
|
+
...this.support,
|
|
559
600
|
...this.profile,
|
|
560
601
|
...this.countrySelector,
|
|
561
602
|
...(this.mobileBtn && this.closeBtn ? [this.mobileBtn, this.closeBtn] : []),
|
|
@@ -673,6 +714,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
673
714
|
*/
|
|
674
715
|
closeSearch(): void {
|
|
675
716
|
this._isSearchOpened = false;
|
|
717
|
+
this.fireEvent("search-closed");
|
|
676
718
|
}
|
|
677
719
|
|
|
678
720
|
/**
|
|
@@ -683,7 +725,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
683
725
|
const shouldPreventOpeningSearch = this._isSearchOpened
|
|
684
726
|
|| (this.isBreakpointSizeM && !this.showSearchByDefault)
|
|
685
727
|
|| this._isMobileMode
|
|
686
|
-
|| (this.
|
|
728
|
+
|| (this.isAtLeastBreakpointSizeM && this.showSearchByDefault);
|
|
687
729
|
|
|
688
730
|
if (shouldPreventOpeningSearch) {
|
|
689
731
|
return;
|
|
@@ -695,6 +737,8 @@ class UDExMastheadShell extends UI5Element {
|
|
|
695
737
|
if (this._searchOpener) {
|
|
696
738
|
this._searchOpener.selected = false;
|
|
697
739
|
}
|
|
740
|
+
|
|
741
|
+
this.fireEvent("search-opened");
|
|
698
742
|
}
|
|
699
743
|
|
|
700
744
|
/**
|
|
@@ -703,7 +747,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
703
747
|
*/
|
|
704
748
|
openMobileMenu(): void {
|
|
705
749
|
if (!this._isMobileMenuOpen && (this._isMobileMode || this.isBreakpointSizeM)) {
|
|
706
|
-
|
|
750
|
+
this.mobileBtn?.handleSelectedChange();
|
|
707
751
|
this.handleOpenMobileMenu();
|
|
708
752
|
}
|
|
709
753
|
}
|
|
@@ -717,8 +761,8 @@ class UDExMastheadShell extends UI5Element {
|
|
|
717
761
|
return;
|
|
718
762
|
}
|
|
719
763
|
|
|
764
|
+
(this.mobileBtn as UDExMastheadItem).selected = false;
|
|
720
765
|
this._isMobileMenuOpen = false;
|
|
721
|
-
this.resetSelectedItems();
|
|
722
766
|
this._mobileMenu?.showFirstLevelMenu();
|
|
723
767
|
|
|
724
768
|
if (this.bodyOverflow) {
|
|
@@ -733,6 +777,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
733
777
|
this.profileItem,
|
|
734
778
|
this.profileMenu,
|
|
735
779
|
this.cartItem,
|
|
780
|
+
this.supportItem,
|
|
736
781
|
this.profileMenu,
|
|
737
782
|
this.profileMenuLinks,
|
|
738
783
|
this.countrySelectorItem,
|
|
@@ -772,6 +817,10 @@ class UDExMastheadShell extends UI5Element {
|
|
|
772
817
|
return this.getSlottedNodes<UDExMastheadItem>("cart")[0];
|
|
773
818
|
}
|
|
774
819
|
|
|
820
|
+
get supportItem(): MastheadItemType {
|
|
821
|
+
return this.getSlottedNodes<UDExMastheadItem>("support")[0];
|
|
822
|
+
}
|
|
823
|
+
|
|
775
824
|
get profileMenu(): UDExMastheadProfileMenu {
|
|
776
825
|
return this.querySelector("[udex-masthead-profile-menu]")!;
|
|
777
826
|
}
|
|
@@ -804,6 +853,10 @@ class UDExMastheadShell extends UI5Element {
|
|
|
804
853
|
return !!this.countrySelector.length;
|
|
805
854
|
}
|
|
806
855
|
|
|
856
|
+
get hasSupport(): boolean {
|
|
857
|
+
return !!this.support.length;
|
|
858
|
+
}
|
|
859
|
+
|
|
807
860
|
get hasMobileMenuButtons(): boolean {
|
|
808
861
|
return !!this.mobileMenu.length;
|
|
809
862
|
}
|
|
@@ -812,7 +865,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
812
865
|
return BreakpointUtils.isAtMost("M");
|
|
813
866
|
}
|
|
814
867
|
|
|
815
|
-
get
|
|
868
|
+
get isAtLeastBreakpointSizeM(): boolean {
|
|
816
869
|
return BreakpointUtils.isAtLeast("M");
|
|
817
870
|
}
|
|
818
871
|
|
package/src/PasswordField.hbs
CHANGED
package/src/PasswordField.ts
CHANGED
|
@@ -7,9 +7,18 @@ import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
|
7
7
|
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
8
8
|
import UDExTextField from "./TextField.js";
|
|
9
9
|
import ValueState from "./types/common.js";
|
|
10
|
-
|
|
10
|
+
import "@ui5/webcomponents-icons/dist/hide.js";
|
|
11
|
+
import "@ui5/webcomponents-icons/dist/show.js";
|
|
11
12
|
import PasswordFieldTemplate from "./generated/templates/PasswordFieldTemplate.lit.js";
|
|
12
13
|
|
|
14
|
+
// Styles
|
|
15
|
+
import PasswordFieldCss from "./generated/themes/PasswordField.css";
|
|
16
|
+
|
|
17
|
+
export enum PasswordFieldAutoComplete {
|
|
18
|
+
On = "on",
|
|
19
|
+
Off = "off",
|
|
20
|
+
}
|
|
21
|
+
|
|
13
22
|
export enum InputType {
|
|
14
23
|
Password = "password",
|
|
15
24
|
Text = "text",
|
|
@@ -40,6 +49,7 @@ export enum IconType {
|
|
|
40
49
|
@customElement({
|
|
41
50
|
tag: "udex-password-field",
|
|
42
51
|
renderer: litRender,
|
|
52
|
+
styles: PasswordFieldCss,
|
|
43
53
|
template: PasswordFieldTemplate,
|
|
44
54
|
dependencies: [UDExTextField],
|
|
45
55
|
})
|
|
@@ -54,6 +64,14 @@ class UDExPasswordField extends UI5Element {
|
|
|
54
64
|
@property({ type: String, noAttribute: true, defaultValue: InputType.Password })
|
|
55
65
|
type!: InputType;
|
|
56
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Defines the behaviour of autocomplete.
|
|
69
|
+
*
|
|
70
|
+
* @public
|
|
71
|
+
*/
|
|
72
|
+
@property({ type: String, defaultValue: PasswordFieldAutoComplete.Off })
|
|
73
|
+
autocomplete!: `${PasswordFieldAutoComplete}`;
|
|
74
|
+
|
|
57
75
|
/**
|
|
58
76
|
* Defines whether the component is in disabled state.
|
|
59
77
|
* <br><br>
|
|
@@ -244,7 +244,7 @@ class UDExSecondaryNavigation extends UI5Element {
|
|
|
244
244
|
return item.closeDropdown();
|
|
245
245
|
}
|
|
246
246
|
if (isDown(e) && item.hasNestedItems) {
|
|
247
|
-
item.openDropdown();
|
|
247
|
+
item.openDropdown(e);
|
|
248
248
|
}
|
|
249
249
|
}
|
|
250
250
|
|
|
@@ -293,12 +293,13 @@ class UDExSecondaryNavigation extends UI5Element {
|
|
|
293
293
|
}
|
|
294
294
|
|
|
295
295
|
handleItemClick(e: CustomEvent): void {
|
|
296
|
-
const
|
|
296
|
+
const { index, item: detailItem, originalEvent: actualOriginalEvent } = e.detail;
|
|
297
|
+
const clickedItem = detailItem as UDExSecondaryNavigationItem;
|
|
297
298
|
const {
|
|
298
299
|
path, target, title, active, subItems, _id, mobileLinkTitle,
|
|
299
300
|
} = clickedItem;
|
|
300
301
|
|
|
301
|
-
const prevented = !this.fireEventItemClick(
|
|
302
|
+
const prevented = !this.fireEventItemClick(actualOriginalEvent as Event, index as number, {
|
|
302
303
|
path,
|
|
303
304
|
target,
|
|
304
305
|
title,
|
|
@@ -321,9 +322,10 @@ class UDExSecondaryNavigation extends UI5Element {
|
|
|
321
322
|
}
|
|
322
323
|
|
|
323
324
|
handleSubItemClick(e: CustomEvent): void {
|
|
325
|
+
const { originalEvent: actualOriginalEvent, index } = e.detail;
|
|
324
326
|
const item = e.detail.item as UDExSecondaryNavigationSubItem;
|
|
325
327
|
const { items } = item as NavItem;
|
|
326
|
-
const prevented = !this.fireEventItemClick(
|
|
328
|
+
const prevented = !this.fireEventItemClick(actualOriginalEvent as Event, index as number, item);
|
|
327
329
|
|
|
328
330
|
if (prevented) {
|
|
329
331
|
e.preventDefault();
|
|
@@ -341,7 +343,8 @@ class UDExSecondaryNavigation extends UI5Element {
|
|
|
341
343
|
}
|
|
342
344
|
|
|
343
345
|
fireEventItemClick(
|
|
344
|
-
e:
|
|
346
|
+
e: Event,
|
|
347
|
+
clickedIndex: number,
|
|
345
348
|
{
|
|
346
349
|
items, target, path, title, active, mobileLinkTitle,
|
|
347
350
|
}: NavItem,
|
|
@@ -356,7 +359,7 @@ class UDExSecondaryNavigation extends UI5Element {
|
|
|
356
359
|
target,
|
|
357
360
|
title,
|
|
358
361
|
},
|
|
359
|
-
clickedIndex
|
|
362
|
+
clickedIndex,
|
|
360
363
|
}, true);
|
|
361
364
|
}
|
|
362
365
|
|
|
@@ -173,7 +173,8 @@ class UDExSecondaryNavigationItem extends UDExSecondaryNavigationItemBase {
|
|
|
173
173
|
this._subTitle = this.subActiveItemTitle || this._subTitle;
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
-
onSubItemClick(e:
|
|
176
|
+
onSubItemClick(e: CustomEvent | KeyboardEvent): void {
|
|
177
|
+
const { originalEvent } = e.detail;
|
|
177
178
|
const { index } = e.target as UDExSecondaryNavigationSubItem;
|
|
178
179
|
const clickedItem = this._processedItems[index];
|
|
179
180
|
|
|
@@ -183,24 +184,21 @@ class UDExSecondaryNavigationItem extends UDExSecondaryNavigationItemBase {
|
|
|
183
184
|
this.onShouldFocusFirstSubItem();
|
|
184
185
|
}
|
|
185
186
|
|
|
186
|
-
this.
|
|
187
|
-
item: clickedItem,
|
|
188
|
-
index,
|
|
189
|
-
});
|
|
187
|
+
this.fireSubItemClickEvent(originalEvent as PointerEvent, clickedItem, index);
|
|
190
188
|
}
|
|
191
189
|
|
|
192
190
|
onBackClick(): void {
|
|
193
191
|
this.setPrevNestedItems();
|
|
194
192
|
}
|
|
195
193
|
|
|
196
|
-
openDropdown(): void {
|
|
194
|
+
openDropdown(e: PointerEvent | KeyboardEvent): void {
|
|
197
195
|
if (this.hasNestedItems) {
|
|
198
196
|
this.setDropdownItems();
|
|
199
197
|
this.isOpen = !this.isOpen;
|
|
200
198
|
this.onShouldFocusFirstSubItem();
|
|
201
199
|
}
|
|
202
200
|
|
|
203
|
-
this.fireNavItemClickEvent();
|
|
201
|
+
this.fireNavItemClickEvent(e);
|
|
204
202
|
}
|
|
205
203
|
|
|
206
204
|
closeDropdown(): void {
|
|
@@ -209,7 +207,7 @@ class UDExSecondaryNavigationItem extends UDExSecondaryNavigationItemBase {
|
|
|
209
207
|
|
|
210
208
|
handleItemLinkKeyDown(e: KeyboardEvent): void {
|
|
211
209
|
if (isEnter(e) || isSpace(e)) {
|
|
212
|
-
this.
|
|
210
|
+
this.fireNavItemClickEvent(e);
|
|
213
211
|
}
|
|
214
212
|
}
|
|
215
213
|
|
|
@@ -326,11 +324,20 @@ class UDExSecondaryNavigationItem extends UDExSecondaryNavigationItemBase {
|
|
|
326
324
|
this.focus();
|
|
327
325
|
}
|
|
328
326
|
|
|
329
|
-
fireNavItemClickEvent(): void {
|
|
327
|
+
fireNavItemClickEvent(e: PointerEvent | KeyboardEvent): void {
|
|
330
328
|
this.fireEvent("nav-item-click", {
|
|
331
329
|
item: this,
|
|
332
330
|
index: this.index,
|
|
333
|
-
|
|
331
|
+
originalEvent: e,
|
|
332
|
+
}, true);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
fireSubItemClickEvent(e: PointerEvent, clickedItem: NavItem, index: number): void {
|
|
336
|
+
this.fireEvent("sub-item-click", {
|
|
337
|
+
item: clickedItem,
|
|
338
|
+
index,
|
|
339
|
+
originalEvent: e,
|
|
340
|
+
}, true);
|
|
334
341
|
}
|
|
335
342
|
|
|
336
343
|
setDropdownHistory(): void {
|
|
@@ -88,14 +88,15 @@ class UDExSecondaryNavigationSubItem extends UDExSecondaryNavigationItemBase {
|
|
|
88
88
|
UDExSecondaryNavigationSubItem.i18nBundle = await getI18nBundle("@sapudex/web-components");
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
onItemClick(): void {
|
|
91
|
+
onItemClick(e: PointerEvent): void {
|
|
92
92
|
this.fireEvent("sub-item-click", {
|
|
93
93
|
item: this,
|
|
94
|
-
|
|
94
|
+
originalEvent: e,
|
|
95
|
+
}, true);
|
|
95
96
|
}
|
|
96
97
|
|
|
97
|
-
onBackItemClick(): void {
|
|
98
|
-
this.fireEvent("back-item-click");
|
|
98
|
+
onBackItemClick(e: PointerEvent): void {
|
|
99
|
+
this.fireEvent("back-item-click", { originalEvent: e }, true);
|
|
99
100
|
}
|
|
100
101
|
|
|
101
102
|
get hasItems(): boolean {
|
package/src/Table.ts
CHANGED
|
@@ -163,6 +163,13 @@ class UDExTable extends UI5Element {
|
|
|
163
163
|
@slot()
|
|
164
164
|
footnotes!: Array<HTMLElement>;
|
|
165
165
|
|
|
166
|
+
/**
|
|
167
|
+
* Defines the rows of the table.
|
|
168
|
+
* @public
|
|
169
|
+
*/
|
|
170
|
+
@property({ type: String })
|
|
171
|
+
customColumns!: string;
|
|
172
|
+
|
|
166
173
|
/**
|
|
167
174
|
* Defines the table has vertical scrolling.
|
|
168
175
|
*
|
|
@@ -382,7 +389,7 @@ class UDExTable extends UI5Element {
|
|
|
382
389
|
|
|
383
390
|
return {
|
|
384
391
|
table: {
|
|
385
|
-
"grid-template-columns": this._gridTemplateColumns,
|
|
392
|
+
"grid-template-columns": this.customColumns || this._gridTemplateColumns,
|
|
386
393
|
"max-height": this._tableMaxHeight,
|
|
387
394
|
...headerStyleMap,
|
|
388
395
|
},
|
package/src/TextField.hbs
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
@click="{{handleClick}}"
|
|
20
20
|
@keydown="{{handleKeydown}}"
|
|
21
21
|
maxlength="{{maxlength}}"
|
|
22
|
+
autocomplete="{{autocomplete}}"
|
|
22
23
|
?disabled="{{disabled}}"
|
|
23
24
|
?readonly="{{isInputReadonly}}"
|
|
24
25
|
?required="{{required}}"
|
|
@@ -30,6 +31,7 @@
|
|
|
30
31
|
aria-haspopup="{{accInfo.ariaHasPopup}}"
|
|
31
32
|
aria-label="{{accInfo.ariaLabel}}"
|
|
32
33
|
aria-labelledby="{{accInfo.ariaLabelledBy}}"
|
|
34
|
+
role="{{inputRole}}"
|
|
33
35
|
part="textfield-input"
|
|
34
36
|
min="{{min}}"
|
|
35
37
|
max="{{max}}"
|
package/src/TextField.ts
CHANGED
|
@@ -228,6 +228,14 @@ class UDExTextField extends UI5Element {
|
|
|
228
228
|
@property({ type: String, noAttribute: true, defaultValue: "" })
|
|
229
229
|
labelActiveClass!: string;
|
|
230
230
|
|
|
231
|
+
/**
|
|
232
|
+
* Defines the behaviour of autocomplete.
|
|
233
|
+
* @default "off"
|
|
234
|
+
* @public
|
|
235
|
+
*/
|
|
236
|
+
@property({ type: String, defaultValue: "off" })
|
|
237
|
+
autocomplete!: string;
|
|
238
|
+
|
|
231
239
|
/**
|
|
232
240
|
* Defines the inner stored value of the readonly attribute of the input.
|
|
233
241
|
*
|
|
@@ -358,6 +366,14 @@ class UDExTextField extends UI5Element {
|
|
|
358
366
|
};
|
|
359
367
|
}
|
|
360
368
|
|
|
369
|
+
get inputRole(): string | undefined {
|
|
370
|
+
return this.isAutoCompleteDisabled ? "presentation" : undefined;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
get isAutoCompleteDisabled(): boolean {
|
|
374
|
+
return this.autocomplete === "off" || this.autocomplete === "new-password";
|
|
375
|
+
}
|
|
376
|
+
|
|
361
377
|
handleKeydown(e: KeyboardEvent): void {
|
|
362
378
|
e.stopPropagation();
|
|
363
379
|
this.fireEvent<KeyboardEvent>("keydown", e);
|