@sapudex/web-components 2.0.0 → 2.1.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/cypress/specs/CountrySelector.cy.tsx +215 -0
- package/cypress/specs/Table.cy.tsx +361 -0
- package/cypress/specs/Upload.cy.tsx +17 -0
- package/dist/AssetsVariables.js +1 -1
- package/dist/AssetsVariables.js.map +1 -1
- package/dist/FilterMenu.d.ts +7 -0
- package/dist/FilterMenu.js +3 -0
- package/dist/FilterMenu.js.map +1 -1
- package/dist/MastheadItem.d.ts +21 -2
- package/dist/MastheadItem.js +95 -13
- package/dist/MastheadItem.js.map +1 -1
- package/dist/MastheadMenu.d.ts +1 -0
- package/dist/MastheadMenu.js +11 -5
- package/dist/MastheadMenu.js.map +1 -1
- package/dist/MastheadMobileMenu.d.ts +8 -2
- package/dist/MastheadMobileMenu.js +8 -2
- package/dist/MastheadMobileMenu.js.map +1 -1
- package/dist/MastheadShell.d.ts +24 -12
- package/dist/MastheadShell.js +75 -26
- package/dist/MastheadShell.js.map +1 -1
- package/dist/SecondaryNavigation.d.ts +6 -5
- package/dist/SecondaryNavigation.js +8 -6
- package/dist/SecondaryNavigation.js.map +1 -1
- package/dist/SecondaryNavigationItem.d.ts +9 -6
- package/dist/SecondaryNavigationItem.js +19 -13
- package/dist/SecondaryNavigationItem.js.map +1 -1
- package/dist/SecondaryNavigationSubItem.d.ts +8 -4
- package/dist/SecondaryNavigationSubItem.js +6 -5
- package/dist/SecondaryNavigationSubItem.js.map +1 -1
- package/dist/Table.d.ts +1 -1
- package/dist/Table.js +1 -1
- package/dist/Table.js.map +1 -1
- package/dist/Upload.d.ts +12 -2
- package/dist/Upload.js +25 -1
- package/dist/Upload.js.map +1 -1
- package/dist/assets/{InputSuggestions-pMcXiozG.js → InputSuggestions-DoWo0hwS.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-BoB9C9hl.js → ListItemStandardExpandableTextTemplate-BymOTLVD.js} +1 -1
- package/dist/assets/{bundle.esm-4ejJpC9l.js → bundle.esm-D10tX-qa.js} +196 -196
- package/dist/assets/messagebundle_en-CVKgy_9L.js +1 -0
- package/dist/css/themes/MastheadItem.css +1 -1
- package/dist/css/themes/RatingIndicator.css +1 -1
- package/dist/css/themes/Slider.css +1 -1
- package/dist/css/themes/Upload.css +1 -1
- package/dist/custom-elements-internal.json +132 -11
- package/dist/custom-elements.json +93 -7
- 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/SecondaryNavigationItemTemplate.lit.js +1 -1
- package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/UploadTemplate.lit.js +2 -2
- package/dist/generated/templates/UploadTemplate.lit.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/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/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/Upload.css.d.ts +1 -1
- package/dist/generated/themes/Upload.css.js +1 -1
- package/dist/generated/themes/Upload.css.js.map +1 -1
- package/dist/messagebundle.properties +9 -1
- package/dist/messagebundle_en.properties +4 -1
- package/dist/vscode.html-custom-data.json +14 -4
- package/dist/web-types.json +80 -11
- package/package.json +1 -1
- package/src/AssetsVariables.ts +1 -1
- package/src/FilterMenu.hbs +1 -0
- package/src/FilterMenu.ts +8 -0
- package/src/MastheadItem.hbs +2 -2
- package/src/MastheadItem.ts +119 -15
- package/src/MastheadMenu.hbs +4 -1
- package/src/MastheadMenu.ts +12 -5
- package/src/MastheadMobileMenu.hbs +2 -2
- package/src/MastheadMobileMenu.ts +16 -3
- package/src/MastheadShell.hbs +14 -3
- package/src/MastheadShell.ts +98 -36
- package/src/SecondaryNavigation.ts +14 -10
- package/src/SecondaryNavigationItem.hbs +1 -1
- package/src/SecondaryNavigationItem.ts +25 -16
- package/src/SecondaryNavigationSubItem.ts +13 -7
- package/src/Table.ts +2 -2
- package/src/Upload.hbs +4 -4
- package/src/Upload.ts +24 -3
- 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/SecondaryNavigationItemTemplate.lit.ts +1 -1
- package/src/generated/templates/UploadTemplate.lit.ts +2 -2
- package/src/generated/themes/MastheadItem.css.ts +1 -1
- package/src/generated/themes/RatingIndicator.css.ts +1 -1
- package/src/generated/themes/Slider.css.ts +1 -1
- package/src/generated/themes/Upload.css.ts +1 -1
- package/src/i18n/messagebundle.properties +9 -1
- package/src/i18n/messagebundle_en.properties +4 -1
- package/src/themes/MastheadItem.css +9 -3
- package/src/themes/Upload.css +10 -2
- package/dist/assets/messagebundle_en-BYIX4tmE.js +0 -1
package/src/MastheadShell.ts
CHANGED
|
@@ -8,16 +8,15 @@ import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
|
|
|
8
8
|
import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
9
9
|
import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
10
10
|
import {
|
|
11
|
-
isLeft, isRight, isSpace, isEnter,
|
|
11
|
+
isLeft, isRight, isSpace, isEnter, isEscape,
|
|
12
12
|
} from "@ui5/webcomponents-base/dist/Keys.js";
|
|
13
13
|
import "@ui5/webcomponents-icons/dist/decline.js";
|
|
14
14
|
import "@ui5/webcomponents-icons/dist/menu2.js";
|
|
15
15
|
import "@ui5/webcomponents-icons/dist/search.js";
|
|
16
|
-
import "@ui5/webcomponents-icons/dist/cart.js";
|
|
17
16
|
import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
|
|
18
17
|
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
19
18
|
import { MAIN_LINKS } from "./generated/i18n/i18n-defaults.js";
|
|
20
|
-
import UDExMastheadItem from "./MastheadItem.js";
|
|
19
|
+
import UDExMastheadItem, { UDExMastheadDropdownItemAction } from "./MastheadItem.js";
|
|
21
20
|
import UDExMastheadMenu from "./MastheadMenu.js";
|
|
22
21
|
import UDExControlButton from "./ControlButton.js";
|
|
23
22
|
import type UDExSearch from "./Search.js";
|
|
@@ -91,6 +90,27 @@ type UDExMastheadShellBaseEventDetail = {
|
|
|
91
90
|
*/
|
|
92
91
|
@event("search-click", { bubbles: true })
|
|
93
92
|
|
|
93
|
+
/**
|
|
94
|
+
* Fired event when the user clicks the search close button.
|
|
95
|
+
*
|
|
96
|
+
* @public
|
|
97
|
+
*/
|
|
98
|
+
@event("search-close-click", { bubbles: true })
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Fired event when the search panel is opened.
|
|
102
|
+
*
|
|
103
|
+
* @public
|
|
104
|
+
*/
|
|
105
|
+
@event("search-opened", { bubbles: true })
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Fired event when the search panel is closed.
|
|
109
|
+
*
|
|
110
|
+
* @public
|
|
111
|
+
*/
|
|
112
|
+
@event("search-closed", { bubbles: true })
|
|
113
|
+
|
|
94
114
|
/**
|
|
95
115
|
* Fired event when the user clicks the cart button trigger.
|
|
96
116
|
*
|
|
@@ -98,6 +118,13 @@ type UDExMastheadShellBaseEventDetail = {
|
|
|
98
118
|
*/
|
|
99
119
|
@event("cart-click", { bubbles: true })
|
|
100
120
|
|
|
121
|
+
/**
|
|
122
|
+
* Fired event when the user clicks the support button trigger.
|
|
123
|
+
*
|
|
124
|
+
* @public
|
|
125
|
+
*/
|
|
126
|
+
@event("support-click", { bubbles: true })
|
|
127
|
+
|
|
101
128
|
/**
|
|
102
129
|
* Fired event when the user clicks the profile button trigger.
|
|
103
130
|
*
|
|
@@ -130,10 +157,14 @@ class UDExMastheadShell extends UI5Element {
|
|
|
130
157
|
eventDetails!: {
|
|
131
158
|
"mobile-menu-open": void,
|
|
132
159
|
"mobile-menu-close": void,
|
|
133
|
-
"search-
|
|
134
|
-
"
|
|
135
|
-
"
|
|
136
|
-
"
|
|
160
|
+
"search-opened": void,
|
|
161
|
+
"search-closed": void,
|
|
162
|
+
"cart-click": UDExMastheadShellBaseEventDetail,
|
|
163
|
+
"support-click": UDExMastheadShellBaseEventDetail,
|
|
164
|
+
"profile-click": UDExMastheadShellBaseEventDetail,
|
|
165
|
+
"country-selector-click": UDExMastheadShellBaseEventDetail,
|
|
166
|
+
"search-click": UDExMastheadShellBaseEventDetail,
|
|
167
|
+
"search-close-click": UDExMastheadShellBaseEventDetail,
|
|
137
168
|
"logo-click": UDExMastheadShellBaseEventDetail,
|
|
138
169
|
"site-label-click": UDExMastheadShellBaseEventDetail,
|
|
139
170
|
};
|
|
@@ -195,6 +226,14 @@ class UDExMastheadShell extends UI5Element {
|
|
|
195
226
|
@slot({ type: HTMLElement })
|
|
196
227
|
profile!: Array<UDExMastheadItem>;
|
|
197
228
|
|
|
229
|
+
/**
|
|
230
|
+
* Slot for support
|
|
231
|
+
*
|
|
232
|
+
* @public
|
|
233
|
+
*/
|
|
234
|
+
@slot({ type: HTMLElement })
|
|
235
|
+
support!: Array<UDExMastheadItem>;
|
|
236
|
+
|
|
198
237
|
/**
|
|
199
238
|
* Defines URL to homepage. It will be used as a link on a logo and a site label
|
|
200
239
|
*
|
|
@@ -353,8 +392,6 @@ class UDExMastheadShell extends UI5Element {
|
|
|
353
392
|
this._searchOpener = this.searchOpener;
|
|
354
393
|
this._mobileMenu = this.mastheadMobileMenu;
|
|
355
394
|
|
|
356
|
-
this.handleOutsideClick();
|
|
357
|
-
|
|
358
395
|
if (this._isSearchOpened) {
|
|
359
396
|
this.focusSearchInput();
|
|
360
397
|
}
|
|
@@ -383,6 +420,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
383
420
|
|
|
384
421
|
if (this._shouldHandleResize && this._isMobileMenuOpen) {
|
|
385
422
|
this.closeMobileMenu();
|
|
423
|
+
this.resetSelectedItems();
|
|
386
424
|
return;
|
|
387
425
|
}
|
|
388
426
|
|
|
@@ -412,6 +450,19 @@ class UDExMastheadShell extends UI5Element {
|
|
|
412
450
|
this.handleRightArrow(e);
|
|
413
451
|
}
|
|
414
452
|
|
|
453
|
+
handleSearchKeyDown(e: CustomEvent): void {
|
|
454
|
+
e.stopPropagation();
|
|
455
|
+
const keyEvent = e.detail.e as KeyboardEvent;
|
|
456
|
+
|
|
457
|
+
if (isEscape(keyEvent)) {
|
|
458
|
+
if (this.showSearchByDefault && this.isAtLeastBreakpointSizeM) {
|
|
459
|
+
return;
|
|
460
|
+
}
|
|
461
|
+
this.closeSearch();
|
|
462
|
+
this.focusSearchBtn();
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
|
|
415
466
|
handleLeftArrow(e: KeyboardEvent): void {
|
|
416
467
|
if (isLeft(e)) {
|
|
417
468
|
const currentItem = e.target as UDExMastheadItem;
|
|
@@ -444,25 +495,30 @@ class UDExMastheadShell extends UI5Element {
|
|
|
444
495
|
this.fireDecoratorEvent("site-label-click", { originalEvent: e });
|
|
445
496
|
}
|
|
446
497
|
|
|
447
|
-
handleSearchClick(e:
|
|
498
|
+
handleSearchClick(e: PointerEvent): void {
|
|
448
499
|
e.stopPropagation();
|
|
500
|
+
this.fireDecoratorEvent("search-click", { originalEvent: e });
|
|
449
501
|
this.openSearch();
|
|
450
|
-
this.fireEvent("search-click");
|
|
451
502
|
}
|
|
452
503
|
|
|
453
|
-
handleCartClick(e:
|
|
504
|
+
handleCartClick(e: PointerEvent): void {
|
|
505
|
+
e.stopPropagation();
|
|
506
|
+
this.fireDecoratorEvent("cart-click", { originalEvent: e });
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
handleProfileClick(e: PointerEvent): void {
|
|
454
510
|
e.stopPropagation();
|
|
455
|
-
this.fireDecoratorEvent("
|
|
511
|
+
this.fireDecoratorEvent("profile-click", { originalEvent: e });
|
|
456
512
|
}
|
|
457
513
|
|
|
458
|
-
|
|
514
|
+
handleSupportClick(e: PointerEvent): void {
|
|
459
515
|
e.stopPropagation();
|
|
460
|
-
this.fireDecoratorEvent("
|
|
516
|
+
this.fireDecoratorEvent("support-click", { originalEvent: e });
|
|
461
517
|
}
|
|
462
518
|
|
|
463
|
-
handleCountrySelectorClick(e:
|
|
519
|
+
handleCountrySelectorClick(e: PointerEvent): void {
|
|
464
520
|
e.stopPropagation();
|
|
465
|
-
this.fireDecoratorEvent("country-selector-click");
|
|
521
|
+
this.fireDecoratorEvent("country-selector-click", { originalEvent: e });
|
|
466
522
|
}
|
|
467
523
|
|
|
468
524
|
handleOpenMobileMenu(): void {
|
|
@@ -481,9 +537,10 @@ class UDExMastheadShell extends UI5Element {
|
|
|
481
537
|
this.fireDecoratorEvent("mobile-menu-open");
|
|
482
538
|
}
|
|
483
539
|
|
|
484
|
-
handleCloseSearch(): void {
|
|
485
|
-
this.closeSearch();
|
|
540
|
+
handleCloseSearch(e: PointerEvent): void {
|
|
486
541
|
this._closeBtnClicked = true;
|
|
542
|
+
this.fireDecoratorEvent("search-close-click", { originalEvent: e });
|
|
543
|
+
this.closeSearch();
|
|
487
544
|
}
|
|
488
545
|
|
|
489
546
|
handleEnterAndSpaceOnCloseBtn(e: KeyboardEvent): void {
|
|
@@ -494,17 +551,6 @@ class UDExMastheadShell extends UI5Element {
|
|
|
494
551
|
}
|
|
495
552
|
}
|
|
496
553
|
|
|
497
|
-
handleOutsideClick(): void {
|
|
498
|
-
document.addEventListener("click", (e: MouseEvent) => {
|
|
499
|
-
const el = e.target as UDExMastheadItem;
|
|
500
|
-
const isMobile = window.innerWidth < 1280 || this._isMobileMode;
|
|
501
|
-
const isDropdownSlot = el.getAttribute("slot") === "dropdown";
|
|
502
|
-
if (!isDropdownSlot && !el.isMenuItem && !isMobile) {
|
|
503
|
-
this.resetSelectedItems();
|
|
504
|
-
}
|
|
505
|
-
});
|
|
506
|
-
}
|
|
507
|
-
|
|
508
554
|
focusSearchInput(): void {
|
|
509
555
|
const searchSlot = this.querySelector<UDExSearch>("[udex-search]");
|
|
510
556
|
if (searchSlot) {
|
|
@@ -530,7 +576,10 @@ class UDExMastheadShell extends UI5Element {
|
|
|
530
576
|
|
|
531
577
|
resetSelectedItems(clickedId?: string): void {
|
|
532
578
|
this.getSelectedItems().forEach(item => {
|
|
533
|
-
if (item._id !== clickedId) {
|
|
579
|
+
if (item._id !== clickedId && item.selected) {
|
|
580
|
+
if (item.hasDropdownSlot) {
|
|
581
|
+
item.fireDropdownCloseEvent(item.eventItemTitle, UDExMastheadDropdownItemAction.ClickOutside);
|
|
582
|
+
}
|
|
534
583
|
item.selected = false;
|
|
535
584
|
}
|
|
536
585
|
});
|
|
@@ -559,6 +608,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
559
608
|
...this.menuItems,
|
|
560
609
|
...this.exploreSAP,
|
|
561
610
|
...this.cart,
|
|
611
|
+
...this.support,
|
|
562
612
|
...this.profile,
|
|
563
613
|
...this.countrySelector,
|
|
564
614
|
...(this.mobileBtn && this.closeBtn ? [this.mobileBtn, this.closeBtn] : []),
|
|
@@ -676,6 +726,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
676
726
|
*/
|
|
677
727
|
closeSearch(): void {
|
|
678
728
|
this._isSearchOpened = false;
|
|
729
|
+
this.fireDecoratorEvent("search-closed");
|
|
679
730
|
}
|
|
680
731
|
|
|
681
732
|
/**
|
|
@@ -686,7 +737,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
686
737
|
const shouldPreventOpeningSearch = this._isSearchOpened
|
|
687
738
|
|| (this.isBreakpointSizeM && !this.showSearchByDefault)
|
|
688
739
|
|| this._isMobileMode
|
|
689
|
-
|| (this.
|
|
740
|
+
|| (this.isAtLeastBreakpointSizeM && this.showSearchByDefault);
|
|
690
741
|
|
|
691
742
|
if (shouldPreventOpeningSearch) {
|
|
692
743
|
return;
|
|
@@ -698,6 +749,8 @@ class UDExMastheadShell extends UI5Element {
|
|
|
698
749
|
if (this._searchOpener) {
|
|
699
750
|
this._searchOpener.selected = false;
|
|
700
751
|
}
|
|
752
|
+
|
|
753
|
+
this.fireDecoratorEvent("search-opened");
|
|
701
754
|
}
|
|
702
755
|
|
|
703
756
|
/**
|
|
@@ -706,7 +759,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
706
759
|
*/
|
|
707
760
|
openMobileMenu(): void {
|
|
708
761
|
if (!this._isMobileMenuOpen && (this._isMobileMode || this.isBreakpointSizeM)) {
|
|
709
|
-
|
|
762
|
+
this.mobileBtn?.handleSelectedChange();
|
|
710
763
|
this.handleOpenMobileMenu();
|
|
711
764
|
}
|
|
712
765
|
}
|
|
@@ -720,15 +773,15 @@ class UDExMastheadShell extends UI5Element {
|
|
|
720
773
|
return;
|
|
721
774
|
}
|
|
722
775
|
|
|
776
|
+
(this.mobileBtn as UDExMastheadItem).selected = false;
|
|
723
777
|
this._isMobileMenuOpen = false;
|
|
724
|
-
this.resetSelectedItems();
|
|
725
778
|
this._mobileMenu?.showFirstLevelMenu();
|
|
726
779
|
|
|
727
780
|
if (this.bodyOverflow) {
|
|
728
781
|
this.removeOverflowBody();
|
|
729
782
|
}
|
|
730
783
|
|
|
731
|
-
this.
|
|
784
|
+
this.fireDecoratorEvent("mobile-menu-close");
|
|
732
785
|
}
|
|
733
786
|
|
|
734
787
|
get slottedItems(): (MastheadSlottedItem)[] {
|
|
@@ -736,6 +789,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
736
789
|
this.profileItem,
|
|
737
790
|
this.profileMenu,
|
|
738
791
|
this.cartItem,
|
|
792
|
+
this.supportItem,
|
|
739
793
|
this.profileMenu,
|
|
740
794
|
this.profileMenuLinks,
|
|
741
795
|
this.countrySelectorItem,
|
|
@@ -775,6 +829,10 @@ class UDExMastheadShell extends UI5Element {
|
|
|
775
829
|
return this.getSlottedNodes<UDExMastheadItem>("cart")[0];
|
|
776
830
|
}
|
|
777
831
|
|
|
832
|
+
get supportItem(): MastheadItemType {
|
|
833
|
+
return this.getSlottedNodes<UDExMastheadItem>("support")[0];
|
|
834
|
+
}
|
|
835
|
+
|
|
778
836
|
get profileMenu(): UDExMastheadProfileMenu {
|
|
779
837
|
return this.querySelector("[udex-masthead-profile-menu]")!;
|
|
780
838
|
}
|
|
@@ -807,6 +865,10 @@ class UDExMastheadShell extends UI5Element {
|
|
|
807
865
|
return !!this.countrySelector.length;
|
|
808
866
|
}
|
|
809
867
|
|
|
868
|
+
get hasSupport(): boolean {
|
|
869
|
+
return !!this.support.length;
|
|
870
|
+
}
|
|
871
|
+
|
|
810
872
|
get hasMobileMenuButtons(): boolean {
|
|
811
873
|
return !!this.mobileMenu.length;
|
|
812
874
|
}
|
|
@@ -815,7 +877,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
815
877
|
return BreakpointUtils.isAtMost("M");
|
|
816
878
|
}
|
|
817
879
|
|
|
818
|
-
get
|
|
880
|
+
get isAtLeastBreakpointSizeM(): boolean {
|
|
819
881
|
return BreakpointUtils.isAtLeast("M");
|
|
820
882
|
}
|
|
821
883
|
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
isEscape, isLeft, isRight, isDown,
|
|
11
11
|
} from "@ui5/webcomponents-base/dist/Keys.js";
|
|
12
12
|
import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
13
|
+
import type { UDExSecondaryNavigationItemClickEventDetail, UDExSecondaryNavigationItemSubItemClickEventDetail } from "./SecondaryNavigationItem.js";
|
|
13
14
|
import UDExSecondaryNavigationItem from "./SecondaryNavigationItem.js";
|
|
14
15
|
import type UDExSecondaryNavigationSubItem from "./SecondaryNavigationSubItem.js";
|
|
15
16
|
import type { NavItem } from "./SecondaryNavigationItemBase.js";
|
|
@@ -25,7 +26,7 @@ import SecondaryNavigationCss from "./generated/themes/SecondaryNavigation.css.j
|
|
|
25
26
|
const canvasContentFont: string = "16px / 17.6px '72 Brand Variable'";
|
|
26
27
|
const rootClass = "udex-secondary-navigation__root";
|
|
27
28
|
|
|
28
|
-
type
|
|
29
|
+
type UDExSecondaryNavigationClickEventDetail = {
|
|
29
30
|
originalEvent: Event,
|
|
30
31
|
clickedItem: NavItem;
|
|
31
32
|
clickedIndex: number;
|
|
@@ -66,7 +67,7 @@ type UDExSecondaryNavigationItemClickEventDetail = {
|
|
|
66
67
|
|
|
67
68
|
class UDExSecondaryNavigation extends UI5Element {
|
|
68
69
|
eventDetails!: {
|
|
69
|
-
"item-click":
|
|
70
|
+
"item-click": UDExSecondaryNavigationClickEventDetail,
|
|
70
71
|
};
|
|
71
72
|
/**
|
|
72
73
|
* Defines an aria label for the mobile menu opener
|
|
@@ -234,7 +235,7 @@ class UDExSecondaryNavigation extends UI5Element {
|
|
|
234
235
|
return item.closeDropdown();
|
|
235
236
|
}
|
|
236
237
|
if (isDown(e) && item.hasNestedItems) {
|
|
237
|
-
item.openDropdown();
|
|
238
|
+
item.openDropdown(e);
|
|
238
239
|
}
|
|
239
240
|
}
|
|
240
241
|
|
|
@@ -282,13 +283,14 @@ class UDExSecondaryNavigation extends UI5Element {
|
|
|
282
283
|
return this.domNavItems.indexOf(item);
|
|
283
284
|
}
|
|
284
285
|
|
|
285
|
-
handleItemClick(e: CustomEvent): void {
|
|
286
|
-
const
|
|
286
|
+
handleItemClick(e: CustomEvent<UDExSecondaryNavigationItemClickEventDetail>): void {
|
|
287
|
+
const { index, item, originalEvent: actualOriginalEvent } = e.detail;
|
|
288
|
+
const clickedItem = item as UDExSecondaryNavigationItem;
|
|
287
289
|
const {
|
|
288
290
|
path, target, title, active, subItems, _id, mobileLinkTitle,
|
|
289
291
|
} = clickedItem;
|
|
290
292
|
|
|
291
|
-
const prevented = !this.fireEventItemClick(
|
|
293
|
+
const prevented = !this.fireEventItemClick(actualOriginalEvent, index, {
|
|
292
294
|
path,
|
|
293
295
|
target,
|
|
294
296
|
title,
|
|
@@ -310,10 +312,11 @@ class UDExSecondaryNavigation extends UI5Element {
|
|
|
310
312
|
}
|
|
311
313
|
}
|
|
312
314
|
|
|
313
|
-
handleSubItemClick(e: CustomEvent): void {
|
|
315
|
+
handleSubItemClick(e: CustomEvent<UDExSecondaryNavigationItemSubItemClickEventDetail>): void {
|
|
316
|
+
const { originalEvent: actualOriginalEvent, index } = e.detail;
|
|
314
317
|
const item = e.detail.item as UDExSecondaryNavigationSubItem;
|
|
315
318
|
const { items } = item as NavItem;
|
|
316
|
-
const prevented = !this.fireEventItemClick(
|
|
319
|
+
const prevented = !this.fireEventItemClick(actualOriginalEvent, index, item);
|
|
317
320
|
|
|
318
321
|
if (prevented) {
|
|
319
322
|
e.preventDefault();
|
|
@@ -331,7 +334,8 @@ class UDExSecondaryNavigation extends UI5Element {
|
|
|
331
334
|
}
|
|
332
335
|
|
|
333
336
|
fireEventItemClick(
|
|
334
|
-
e:
|
|
337
|
+
e: PointerEvent | KeyboardEvent,
|
|
338
|
+
clickedIndex: number,
|
|
335
339
|
{
|
|
336
340
|
items, target, path, title, active, mobileLinkTitle,
|
|
337
341
|
}: NavItem,
|
|
@@ -346,7 +350,7 @@ class UDExSecondaryNavigation extends UI5Element {
|
|
|
346
350
|
target,
|
|
347
351
|
title,
|
|
348
352
|
},
|
|
349
|
-
clickedIndex
|
|
353
|
+
clickedIndex,
|
|
350
354
|
});
|
|
351
355
|
}
|
|
352
356
|
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
<li role="none">
|
|
49
49
|
<udex-secondary-navigation-sub-item
|
|
50
50
|
index="{{@index}}"
|
|
51
|
-
@ui5-sub-item-click="{{../
|
|
51
|
+
@ui5-sub-item-click="{{../handleSubItemClick}}"
|
|
52
52
|
@ui5-back-item-click="{{../onBackClick}}"
|
|
53
53
|
is-back="{{this.isBack}}"
|
|
54
54
|
label="{{this.title}}"
|
|
@@ -30,14 +30,16 @@ import SecondaryNavigationItemCss from "./generated/themes/SecondaryNavigationIt
|
|
|
30
30
|
|
|
31
31
|
export const menuItemRole: string = "menuitem";
|
|
32
32
|
|
|
33
|
-
type UDExSecondaryNavigationItemClickEventDetail = {
|
|
33
|
+
export type UDExSecondaryNavigationItemClickEventDetail = {
|
|
34
34
|
item: HTMLElement,
|
|
35
35
|
index: number,
|
|
36
|
+
originalEvent: PointerEvent | KeyboardEvent
|
|
36
37
|
};
|
|
37
38
|
|
|
38
|
-
type UDExSecondaryNavigationItemSubItemClickEventDetail = {
|
|
39
|
-
item:
|
|
39
|
+
export type UDExSecondaryNavigationItemSubItemClickEventDetail = {
|
|
40
|
+
item: NavItem,
|
|
40
41
|
index: number,
|
|
42
|
+
originalEvent: PointerEvent
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
/**
|
|
@@ -72,7 +74,7 @@ type UDExSecondaryNavigationItemSubItemClickEventDetail = {
|
|
|
72
74
|
* @allowPreventDefault
|
|
73
75
|
* @public
|
|
74
76
|
*/
|
|
75
|
-
@event("nav-item-click", { bubbles: true })
|
|
77
|
+
@event("nav-item-click", { bubbles: true, cancelable: true })
|
|
76
78
|
|
|
77
79
|
/**
|
|
78
80
|
* Fires when dropdown item is clicked
|
|
@@ -80,7 +82,7 @@ type UDExSecondaryNavigationItemSubItemClickEventDetail = {
|
|
|
80
82
|
* @allowPreventDefault
|
|
81
83
|
* @public
|
|
82
84
|
*/
|
|
83
|
-
@event("sub-item-click", { bubbles: true })
|
|
85
|
+
@event("sub-item-click", { bubbles: true, cancelable: true })
|
|
84
86
|
|
|
85
87
|
class UDExSecondaryNavigationItem extends UDExSecondaryNavigationItemBase {
|
|
86
88
|
eventDetails!: {
|
|
@@ -178,7 +180,8 @@ class UDExSecondaryNavigationItem extends UDExSecondaryNavigationItemBase {
|
|
|
178
180
|
this._subTitle = this.subActiveItemTitle || this._subTitle;
|
|
179
181
|
}
|
|
180
182
|
|
|
181
|
-
|
|
183
|
+
handleSubItemClick(e: CustomEvent | KeyboardEvent): void {
|
|
184
|
+
const { originalEvent } = e.detail;
|
|
182
185
|
const { index } = e.target as UDExSecondaryNavigationSubItem;
|
|
183
186
|
const clickedItem = this._processedItems[index];
|
|
184
187
|
|
|
@@ -188,24 +191,21 @@ class UDExSecondaryNavigationItem extends UDExSecondaryNavigationItemBase {
|
|
|
188
191
|
this.onShouldFocusFirstSubItem();
|
|
189
192
|
}
|
|
190
193
|
|
|
191
|
-
this.
|
|
192
|
-
item: clickedItem,
|
|
193
|
-
index,
|
|
194
|
-
});
|
|
194
|
+
this.fireSubItemClickEvent(originalEvent as PointerEvent, clickedItem, index);
|
|
195
195
|
}
|
|
196
196
|
|
|
197
197
|
onBackClick(): void {
|
|
198
198
|
this.setPrevNestedItems();
|
|
199
199
|
}
|
|
200
200
|
|
|
201
|
-
openDropdown(): void {
|
|
201
|
+
openDropdown(e: PointerEvent | KeyboardEvent): void {
|
|
202
202
|
if (this.hasNestedItems) {
|
|
203
203
|
this.setDropdownItems();
|
|
204
204
|
this.isOpen = !this.isOpen;
|
|
205
205
|
this.onShouldFocusFirstSubItem();
|
|
206
206
|
}
|
|
207
207
|
|
|
208
|
-
this.fireNavItemClickEvent();
|
|
208
|
+
this.fireNavItemClickEvent(e);
|
|
209
209
|
}
|
|
210
210
|
|
|
211
211
|
closeDropdown(): void {
|
|
@@ -214,7 +214,7 @@ class UDExSecondaryNavigationItem extends UDExSecondaryNavigationItemBase {
|
|
|
214
214
|
|
|
215
215
|
handleItemLinkKeyDown(e: KeyboardEvent): void {
|
|
216
216
|
if (isSpace(e)) {
|
|
217
|
-
this.fireNavItemClickEvent();
|
|
217
|
+
this.fireNavItemClickEvent(e);
|
|
218
218
|
}
|
|
219
219
|
}
|
|
220
220
|
|
|
@@ -303,7 +303,7 @@ class UDExSecondaryNavigationItem extends UDExSecondaryNavigationItemBase {
|
|
|
303
303
|
handleRightArrow(e: KeyboardEvent): void {
|
|
304
304
|
const { hasItems, isBack, index } = e.target as UDExSecondaryNavigationSubItem;
|
|
305
305
|
if (hasItems && !isBack) {
|
|
306
|
-
this.
|
|
306
|
+
this.handleSubItemClick(e);
|
|
307
307
|
this.unsetTabIndex(this.domNavItems[index]);
|
|
308
308
|
}
|
|
309
309
|
}
|
|
@@ -316,7 +316,7 @@ class UDExSecondaryNavigationItem extends UDExSecondaryNavigationItemBase {
|
|
|
316
316
|
return;
|
|
317
317
|
}
|
|
318
318
|
|
|
319
|
-
this.
|
|
319
|
+
this.handleSubItemClick(e);
|
|
320
320
|
|
|
321
321
|
if (hasItems) {
|
|
322
322
|
this.onShouldFocusFirstSubItem();
|
|
@@ -331,10 +331,19 @@ class UDExSecondaryNavigationItem extends UDExSecondaryNavigationItemBase {
|
|
|
331
331
|
this.focus();
|
|
332
332
|
}
|
|
333
333
|
|
|
334
|
-
fireNavItemClickEvent(): void {
|
|
334
|
+
fireNavItemClickEvent(e: PointerEvent | KeyboardEvent): void {
|
|
335
335
|
this.fireDecoratorEvent("nav-item-click", {
|
|
336
336
|
item: this,
|
|
337
337
|
index: this.index,
|
|
338
|
+
originalEvent: e,
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
fireSubItemClickEvent(e: PointerEvent, clickedItem: NavItem, index: number): void {
|
|
343
|
+
this.fireDecoratorEvent("sub-item-click", {
|
|
344
|
+
item: clickedItem,
|
|
345
|
+
index,
|
|
346
|
+
originalEvent: e,
|
|
338
347
|
});
|
|
339
348
|
}
|
|
340
349
|
|
|
@@ -15,8 +15,13 @@ import SecondaryNavigationSubItemTemplate from "./generated/templates/SecondaryN
|
|
|
15
15
|
// Styles
|
|
16
16
|
import SecondaryNavigationSubItemCss from "./generated/themes/SecondaryNavigationSubItem.css.js";
|
|
17
17
|
|
|
18
|
-
type UDExSecondaryNavigationSubItemClickEventDetail = {
|
|
18
|
+
export type UDExSecondaryNavigationSubItemClickEventDetail = {
|
|
19
19
|
item: UDExSecondaryNavigationSubItem,
|
|
20
|
+
originalEvent: PointerEvent
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export type UDExSecondaryNavigationSubItemBackClickEventDetail = {
|
|
24
|
+
originalEvent: PointerEvent
|
|
20
25
|
}
|
|
21
26
|
|
|
22
27
|
/**
|
|
@@ -51,7 +56,7 @@ type UDExSecondaryNavigationSubItemClickEventDetail = {
|
|
|
51
56
|
* @allowPreventDefault
|
|
52
57
|
* @public
|
|
53
58
|
*/
|
|
54
|
-
@event("sub-item-click", { bubbles: true })
|
|
59
|
+
@event("sub-item-click", { bubbles: true, cancelable: true })
|
|
55
60
|
|
|
56
61
|
/**
|
|
57
62
|
* Fires when back item is clicked
|
|
@@ -59,12 +64,12 @@ type UDExSecondaryNavigationSubItemClickEventDetail = {
|
|
|
59
64
|
* @allowPreventDefault
|
|
60
65
|
* @public
|
|
61
66
|
*/
|
|
62
|
-
@event("back-item-click", { bubbles: true })
|
|
67
|
+
@event("back-item-click", { bubbles: true, cancelable: true })
|
|
63
68
|
|
|
64
69
|
class UDExSecondaryNavigationSubItem extends UDExSecondaryNavigationItemBase {
|
|
65
70
|
eventDetails!: {
|
|
66
71
|
"sub-item-click": UDExSecondaryNavigationSubItemClickEventDetail,
|
|
67
|
-
"back-item-click":
|
|
72
|
+
"back-item-click": UDExSecondaryNavigationSubItemBackClickEventDetail,
|
|
68
73
|
};
|
|
69
74
|
/**
|
|
70
75
|
* Defines back item.
|
|
@@ -90,14 +95,15 @@ class UDExSecondaryNavigationSubItem extends UDExSecondaryNavigationItemBase {
|
|
|
90
95
|
@i18n("@sapudex/web-components")
|
|
91
96
|
static i18nBundle: I18nBundle;
|
|
92
97
|
|
|
93
|
-
onItemClick(): void {
|
|
98
|
+
onItemClick(e: PointerEvent): void {
|
|
94
99
|
this.fireDecoratorEvent("sub-item-click", {
|
|
95
100
|
item: this,
|
|
101
|
+
originalEvent: e,
|
|
96
102
|
});
|
|
97
103
|
}
|
|
98
104
|
|
|
99
|
-
onBackItemClick(): void {
|
|
100
|
-
this.fireDecoratorEvent("back-item-click");
|
|
105
|
+
onBackItemClick(e: PointerEvent): void {
|
|
106
|
+
this.fireDecoratorEvent("back-item-click", { originalEvent: e });
|
|
101
107
|
}
|
|
102
108
|
|
|
103
109
|
get hasItems(): boolean {
|
package/src/Table.ts
CHANGED
|
@@ -98,8 +98,8 @@ class UDExTable extends UI5Element {
|
|
|
98
98
|
* @default false
|
|
99
99
|
* @public
|
|
100
100
|
*/
|
|
101
|
-
@property({ type:
|
|
102
|
-
loading!:
|
|
101
|
+
@property({ type: Boolean })
|
|
102
|
+
loading!: boolean;
|
|
103
103
|
|
|
104
104
|
/**
|
|
105
105
|
* Defines the delay in milliseconds, after which the loading indicator will show up for this component.
|
package/src/Upload.hbs
CHANGED
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
<p class="udex-upload__additional-text">{{additionalText}}</p>
|
|
7
7
|
{{/if}}
|
|
8
8
|
<div class="udex-upload__upload-button-container">
|
|
9
|
-
<ui5-file-uploader id="fileUploader" hide-input accept="{{accept}}" ?multiple="{{multiple}}" @change="{{handleUploadFile}}" @click="{{handleUploadClick}}">
|
|
10
|
-
<udex-button design="Secondary" aria-label="{{uploadButtonAriaLabel}}" size="{{_buttonSize}}">{{uploadButtonText}}</udex-button>
|
|
9
|
+
<ui5-file-uploader ?disabled="{{disabled}}" id="fileUploader" hide-input accept="{{accept}}" ?multiple="{{multiple}}" @change="{{handleUploadFile}}" @click="{{handleUploadClick}}">
|
|
10
|
+
<udex-button ?disabled="{{disabled}}" aria-disabled="{{disabled}}" design="Secondary" aria-label="{{uploadButtonAriaLabel}}" size="{{_buttonSize}}">{{uploadButtonText}}</udex-button>
|
|
11
11
|
</ui5-file-uploader>
|
|
12
|
-
{{#if
|
|
13
|
-
<p class="
|
|
12
|
+
{{#if showSupportingText}}
|
|
13
|
+
<p class="{{supportingTextClasses}}">{{supportingText}}</p>
|
|
14
14
|
{{/if}}
|
|
15
15
|
</div>
|
|
16
16
|
<div class="udex-upload__files-wrapper">
|
package/src/Upload.ts
CHANGED
|
@@ -114,12 +114,14 @@ class UDExUpload extends UI5Element {
|
|
|
114
114
|
uploadTitle!: string;
|
|
115
115
|
|
|
116
116
|
/**
|
|
117
|
-
* Defines
|
|
117
|
+
* Defines an optional upporting message shown in 2 cases, both in single uplaod mode.
|
|
118
|
+
* 1) When more than one file is uploaded and the button for uploading is clicked.
|
|
119
|
+
* 2) When the button for uploading is disabled and a file has already been uploaded.
|
|
118
120
|
*
|
|
119
121
|
* @public
|
|
120
122
|
*/
|
|
121
123
|
@property({ type: String })
|
|
122
|
-
|
|
124
|
+
supportingText!: string;
|
|
123
125
|
|
|
124
126
|
/**
|
|
125
127
|
* Defines if uploader is required.
|
|
@@ -127,7 +129,15 @@ class UDExUpload extends UI5Element {
|
|
|
127
129
|
* @public
|
|
128
130
|
*/
|
|
129
131
|
@property({ type: Boolean })
|
|
130
|
-
required
|
|
132
|
+
required: boolean = false;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Defines if the button for uploading is disabled.
|
|
136
|
+
*
|
|
137
|
+
* @public
|
|
138
|
+
*/
|
|
139
|
+
@property({ type: Boolean })
|
|
140
|
+
disabled: boolean = false;
|
|
131
141
|
|
|
132
142
|
/**
|
|
133
143
|
* Defines if uploading multiple files is allowed.
|
|
@@ -320,6 +330,17 @@ class UDExUpload extends UI5Element {
|
|
|
320
330
|
return duplicateFiles;
|
|
321
331
|
}
|
|
322
332
|
|
|
333
|
+
get showSupportingText(): boolean {
|
|
334
|
+
return this.disabled || this._filesFull;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
get supportingTextClasses(): string {
|
|
338
|
+
if (this.disabled && !!this.supportingText) {
|
|
339
|
+
return "udex-upload__supporting-text";
|
|
340
|
+
}
|
|
341
|
+
return "udex-upload__supporting-error-text";
|
|
342
|
+
}
|
|
343
|
+
|
|
323
344
|
get fileUploader(): HTMLInputElement {
|
|
324
345
|
const uploader = this.shadowRoot!.querySelector<FileUploader>("[ui5-file-uploader]")!;
|
|
325
346
|
return uploader.shadowRoot!.querySelector("input")!;
|