@sapudex/web-components 2.30.0 → 2.32.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/Breadcrumbs.cy.tsx +26 -0
- package/cypress/specs/ListItem.cy.tsx +22 -26
- package/cypress/specs/MediaPlayer.cy.tsx +209 -0
- package/cypress/specs/PromoTile.cy.tsx +10 -0
- package/cypress/specs/SecondaryNavigationDesktop.cy.tsx +74 -21
- package/cypress/specs/SecondaryNavigationMobile.cy.tsx +58 -1
- package/cypress/specs/SelectBox.cy.tsx +76 -0
- package/cypress/specs/TabNavigation.cy.tsx +603 -39
- package/cypress/support/component-imports.instrumented.ts +2 -0
- package/cypress/support/component-imports.src.ts +2 -0
- package/dist/Breadcrumbs.d.ts +5 -4
- package/dist/Breadcrumbs.js +15 -17
- package/dist/Breadcrumbs.js.map +1 -1
- package/dist/BreadcrumbsTemplate.js +1 -1
- package/dist/BreadcrumbsTemplate.js.map +1 -1
- package/dist/List.js +3 -3
- package/dist/List.js.map +1 -1
- package/dist/ListItemBase.d.ts +0 -2
- package/dist/ListItemBase.js +0 -6
- package/dist/ListItemBase.js.map +1 -1
- package/dist/MastheadCountrySelector.d.ts +3 -15
- package/dist/MastheadCountrySelector.js +28 -72
- package/dist/MastheadCountrySelector.js.map +1 -1
- package/dist/MastheadItem.d.ts +1 -0
- package/dist/MastheadItem.js +12 -4
- package/dist/MastheadItem.js.map +1 -1
- package/dist/MastheadMenuItem.d.ts +7 -0
- package/dist/MastheadMenuItem.js +3 -0
- package/dist/MastheadMenuItem.js.map +1 -1
- package/dist/MastheadMobileMenu.d.ts +2 -12
- package/dist/MastheadMobileMenu.js +31 -116
- package/dist/MastheadMobileMenu.js.map +1 -1
- package/dist/MastheadProfileMenu.js +1 -1
- package/dist/MastheadProfileMenu.js.map +1 -1
- package/dist/MastheadShell.d.ts +1 -6
- package/dist/MastheadShell.js +7 -44
- package/dist/MastheadShell.js.map +1 -1
- package/dist/MediaPlayer.d.ts +15 -0
- package/dist/MediaPlayer.js +28 -0
- package/dist/MediaPlayer.js.map +1 -1
- package/dist/Pagination.d.ts +14 -1
- package/dist/Pagination.js +39 -6
- package/dist/Pagination.js.map +1 -1
- package/dist/PromoTile.d.ts +8 -0
- package/dist/PromoTile.js +4 -0
- package/dist/PromoTile.js.map +1 -1
- package/dist/PromoTileTemplate.js +3 -1
- package/dist/PromoTileTemplate.js.map +1 -1
- package/dist/SecondaryNavigation.d.ts +12 -2
- package/dist/SecondaryNavigation.js +59 -8
- package/dist/SecondaryNavigation.js.map +1 -1
- package/dist/SecondaryNavigationItem.d.ts +0 -1
- package/dist/SecondaryNavigationItem.js +7 -5
- package/dist/SecondaryNavigationItem.js.map +1 -1
- package/dist/SecondaryNavigationSubItem.js +1 -1
- package/dist/SecondaryNavigationSubItem.js.map +1 -1
- package/dist/SelectBase.js +28 -7
- package/dist/SelectBase.js.map +1 -1
- package/dist/Tab.d.ts +1 -1
- package/dist/Tab.js +3 -3
- package/dist/Tab.js.map +1 -1
- package/dist/TabNavigation.d.ts +64 -0
- package/dist/TabNavigation.js +124 -1
- package/dist/TabNavigation.js.map +1 -1
- package/dist/assets/{InputSuggestions-CaAXs3ok.js → InputSuggestions-CHLLTki3.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-CPqUBd--.js → ListItemStandardExpandableTextTemplate-vM1eIFe4.js} +1 -1
- package/dist/assets/{bundle.esm-L-7H6J4f.js → bundle.esm-fUZ1I3qm.js} +218 -218
- package/dist/assets/messagebundle_en-iNqRB1VZ.js +1 -0
- package/dist/css/themes/BreadcrumbsPopover.css +1 -1
- package/dist/css/themes/Dropdown.css +1 -1
- package/dist/css/themes/Link.css +1 -1
- package/dist/css/themes/ListGroupHeader.css +1 -1
- package/dist/css/themes/MastheadCountrySelector.css +1 -1
- package/dist/css/themes/MastheadItem.css +1 -1
- package/dist/css/themes/MastheadShell.css +1 -1
- package/dist/css/themes/RatingIndicator.css +1 -1
- package/dist/css/themes/SecondaryNavigation.css +1 -1
- package/dist/css/themes/SecondaryNavigationItem.css +1 -1
- package/dist/css/themes/SecondaryNavigationSubItem.css +1 -1
- package/dist/css/themes/Slider.css +1 -1
- package/dist/css/themes/TabNavigation.css +1 -1
- package/dist/custom-elements-internal.json +407 -167
- package/dist/custom-elements.json +320 -152
- 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 +3 -2
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.js +12 -16
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.js.map +1 -1
- package/dist/generated/templates/ListItemTemplate.lit.js +32 -36
- package/dist/generated/templates/ListItemTemplate.lit.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/MastheadMenuItemTemplate.lit.js +1 -1
- package/dist/generated/templates/MastheadMenuItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js +1 -1
- package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadShellTemplate.lit.js +9 -10
- 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/templates/TabNavigationTemplate.lit.js +10 -8
- package/dist/generated/templates/TabNavigationTemplate.lit.js.map +1 -1
- package/dist/generated/themes/BreadcrumbsPopover.css.d.ts +1 -1
- package/dist/generated/themes/BreadcrumbsPopover.css.js +1 -1
- package/dist/generated/themes/BreadcrumbsPopover.css.js.map +1 -1
- package/dist/generated/themes/Dropdown.css.d.ts +1 -1
- package/dist/generated/themes/Dropdown.css.js +1 -1
- package/dist/generated/themes/Dropdown.css.js.map +1 -1
- package/dist/generated/themes/Link.css.d.ts +1 -1
- package/dist/generated/themes/Link.css.js +1 -1
- package/dist/generated/themes/Link.css.js.map +1 -1
- package/dist/generated/themes/ListGroupHeader.css.d.ts +1 -1
- package/dist/generated/themes/ListGroupHeader.css.js +1 -1
- package/dist/generated/themes/ListGroupHeader.css.js.map +1 -1
- package/dist/generated/themes/MastheadCountrySelector.css.d.ts +1 -1
- package/dist/generated/themes/MastheadCountrySelector.css.js +1 -1
- package/dist/generated/themes/MastheadCountrySelector.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/MastheadShell.css.d.ts +1 -1
- package/dist/generated/themes/MastheadShell.css.js +1 -1
- package/dist/generated/themes/MastheadShell.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/SecondaryNavigation.css.d.ts +1 -1
- package/dist/generated/themes/SecondaryNavigation.css.js +1 -1
- package/dist/generated/themes/SecondaryNavigation.css.js.map +1 -1
- package/dist/generated/themes/SecondaryNavigationItem.css.d.ts +1 -1
- package/dist/generated/themes/SecondaryNavigationItem.css.js +1 -1
- package/dist/generated/themes/SecondaryNavigationItem.css.js.map +1 -1
- package/dist/generated/themes/SecondaryNavigationSubItem.css.d.ts +1 -1
- package/dist/generated/themes/SecondaryNavigationSubItem.css.js +1 -1
- package/dist/generated/themes/SecondaryNavigationSubItem.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/TabNavigation.css.d.ts +1 -1
- package/dist/generated/themes/TabNavigation.css.js +1 -1
- package/dist/generated/themes/TabNavigation.css.js.map +1 -1
- package/dist/messagebundle.properties +4 -1
- package/dist/messagebundle_en.properties +2 -1
- package/dist/types/List.d.ts +0 -2
- package/dist/types/List.js +0 -2
- package/dist/types/List.js.map +1 -1
- package/dist/vscode.html-custom-data.json +45 -76
- package/dist/web-types.json +96 -76
- package/package.json +2 -1
- package/src/Breadcrumbs.ts +17 -21
- package/src/BreadcrumbsTemplate.tsx +1 -1
- package/src/List.ts +3 -3
- package/src/ListGroupHeader.hbs +7 -11
- package/src/ListItem.hbs +0 -2
- package/src/ListItemBase.ts +0 -8
- package/src/MastheadCountrySelector.hbs +5 -2
- package/src/MastheadCountrySelector.ts +31 -85
- package/src/MastheadItem.ts +13 -4
- package/src/MastheadMenuItem.hbs +1 -0
- package/src/MastheadMenuItem.ts +9 -0
- package/src/MastheadMobileMenu.hbs +0 -1
- package/src/MastheadMobileMenu.ts +34 -130
- package/src/MastheadProfileMenu.ts +1 -1
- package/src/MastheadShell.hbs +9 -11
- package/src/MastheadShell.ts +8 -50
- package/src/MediaPlayer.ts +35 -0
- package/src/Pagination.ts +51 -7
- package/src/PromoTile.ts +10 -0
- package/src/PromoTileTemplate.tsx +4 -1
- package/src/SecondaryNavigation.hbs +1 -0
- package/src/SecondaryNavigation.ts +77 -9
- package/src/SecondaryNavigationItem.ts +1 -8
- package/src/SecondaryNavigationSubItem.ts +1 -1
- package/src/SelectBase.ts +33 -7
- package/src/Tab.ts +4 -4
- package/src/TabNavigation.hbs +15 -0
- package/src/TabNavigation.ts +134 -1
- package/src/generated/i18n/i18n-defaults.ts +2 -2
- package/src/generated/templates/ListGroupHeaderTemplate.lit.ts +12 -16
- package/src/generated/templates/ListItemTemplate.lit.ts +32 -36
- package/src/generated/templates/MastheadCountrySelectorTemplate.lit.ts +3 -3
- package/src/generated/templates/MastheadMenuItemTemplate.lit.ts +1 -1
- package/src/generated/templates/MastheadMobileMenuTemplate.lit.ts +1 -1
- package/src/generated/templates/MastheadShellTemplate.lit.ts +9 -10
- package/src/generated/templates/SecondaryNavigationTemplate.lit.ts +1 -1
- package/src/generated/templates/TabNavigationTemplate.lit.ts +10 -8
- package/src/generated/themes/BreadcrumbsPopover.css.ts +1 -1
- package/src/generated/themes/Dropdown.css.ts +1 -1
- package/src/generated/themes/Link.css.ts +1 -1
- package/src/generated/themes/ListGroupHeader.css.ts +1 -1
- package/src/generated/themes/MastheadCountrySelector.css.ts +1 -1
- package/src/generated/themes/MastheadItem.css.ts +1 -1
- package/src/generated/themes/MastheadShell.css.ts +1 -1
- package/src/generated/themes/RatingIndicator.css.ts +1 -1
- package/src/generated/themes/SecondaryNavigation.css.ts +1 -1
- package/src/generated/themes/SecondaryNavigationItem.css.ts +1 -1
- package/src/generated/themes/SecondaryNavigationSubItem.css.ts +1 -1
- package/src/generated/themes/Slider.css.ts +1 -1
- package/src/generated/themes/TabNavigation.css.ts +1 -1
- package/src/i18n/messagebundle.properties +4 -1
- package/src/i18n/messagebundle_en.properties +2 -1
- package/src/themes/BreadcrumbsPopover.css +4 -2
- package/src/themes/Dropdown.css +5 -1
- package/src/themes/Link.css +2 -3
- package/src/themes/ListGroupHeader.css +3 -11
- package/src/themes/MastheadCountrySelector.css +2 -2
- package/src/themes/MastheadItem.css +57 -0
- package/src/themes/MastheadShell.css +0 -2
- package/src/themes/SecondaryNavigation.css +6 -3
- package/src/themes/SecondaryNavigationItem.css +11 -10
- package/src/themes/SecondaryNavigationSubItem.css +3 -2
- package/src/themes/TabNavigation.css +27 -16
- package/src/types/List.ts +0 -2
- package/dist/assets/messagebundle_en-J-MHTtdL.js +0 -1
|
@@ -9,7 +9,7 @@ import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
|
9
9
|
import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
|
|
10
10
|
import "@ui5/webcomponents-icons/dist/slim-arrow-right.js";
|
|
11
11
|
import {
|
|
12
|
-
|
|
12
|
+
isEnd, isHome, isTabNext, isTabPrevious,
|
|
13
13
|
} from "@ui5/webcomponents-base/dist/Keys.js";
|
|
14
14
|
import UDExMastheadMenuItem from "./MastheadMenuItem.js";
|
|
15
15
|
import UDExSearch, { Mode as UDExSearchMode } from "./Search.js";
|
|
@@ -17,7 +17,7 @@ import MastheadCountrySelectorTemplate from "./generated/templates/MastheadCount
|
|
|
17
17
|
import AnalyticsName from "./types/AnalyticsName.js";
|
|
18
18
|
import { BreakpointUtils } from "./utils/Breakpoints.js";
|
|
19
19
|
import type UDExMastheadShell from "./MastheadShell.js";
|
|
20
|
-
import { NO_MATCHES_FOUND, RESULT_RETURNED } from "./generated/i18n/i18n-defaults.js";
|
|
20
|
+
import { NO_MATCHES_FOUND, RESULT_RETURNED, BACK_TO_REGION_LIST } from "./generated/i18n/i18n-defaults.js";
|
|
21
21
|
import translate from "./utils/translate.js";
|
|
22
22
|
|
|
23
23
|
// Styles
|
|
@@ -217,14 +217,6 @@ class UDExMastheadCountrySelector extends UI5Element {
|
|
|
217
217
|
@property({ type: Boolean })
|
|
218
218
|
_isMobileMode!: boolean;
|
|
219
219
|
|
|
220
|
-
/**
|
|
221
|
-
* Defines direction of the component.
|
|
222
|
-
*
|
|
223
|
-
* @private
|
|
224
|
-
*/
|
|
225
|
-
@property({ type: String })
|
|
226
|
-
_direction!: string;
|
|
227
|
-
|
|
228
220
|
@property({ type: Boolean, noAttribute: true })
|
|
229
221
|
_requestRender = false;
|
|
230
222
|
|
|
@@ -250,7 +242,6 @@ class UDExMastheadCountrySelector extends UI5Element {
|
|
|
250
242
|
this._mastheadShell = this.mastheadShell;
|
|
251
243
|
this.handleFocusItem();
|
|
252
244
|
this.setTabIndexForItems();
|
|
253
|
-
this.handleDirection();
|
|
254
245
|
this.handleOutsideClick();
|
|
255
246
|
|
|
256
247
|
if (this.isSingleMode) {
|
|
@@ -283,55 +274,23 @@ class UDExMastheadCountrySelector extends UI5Element {
|
|
|
283
274
|
handleKeyDown(e: KeyboardEvent): void {
|
|
284
275
|
const item = e.target as UDExMastheadMenuItem;
|
|
285
276
|
|
|
286
|
-
if (item.hasAttribute("is-back")) {
|
|
287
|
-
this.handleBackKeyboard(e);
|
|
288
|
-
return;
|
|
289
|
-
}
|
|
290
|
-
|
|
291
277
|
if (item.hasAttribute("is-nav-item")) {
|
|
292
|
-
this.
|
|
293
|
-
this.
|
|
294
|
-
|
|
295
|
-
|
|
278
|
+
const isFirstItem = item === this.items[0];
|
|
279
|
+
const isLastItem = item === this.items[this.items.length - 1];
|
|
280
|
+
|
|
281
|
+
if (isTabNext(e) && !isLastItem) {
|
|
282
|
+
e.preventDefault();
|
|
283
|
+
this.focusNextItem(item);
|
|
284
|
+
}
|
|
285
|
+
if (isTabPrevious(e) && !isFirstItem) {
|
|
286
|
+
e.preventDefault();
|
|
287
|
+
this.focusPreviousItem(item);
|
|
288
|
+
}
|
|
296
289
|
this.handleHomeKey(e);
|
|
297
290
|
this.handleEndKey(e);
|
|
298
291
|
}
|
|
299
292
|
}
|
|
300
293
|
|
|
301
|
-
handleBackKeyboard(e: KeyboardEvent): void {
|
|
302
|
-
if ((isLeft(e) && !this.isRtlDirection) || (isRight(e) && this.isRtlDirection)) {
|
|
303
|
-
this.backToRegions();
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
handleRightArrow(e: KeyboardEvent): void {
|
|
308
|
-
if (isRight(e) && !this.isRtlDirection) {
|
|
309
|
-
this.openCountriesByRegion(e);
|
|
310
|
-
this.fireEventRegionItemClick(e);
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
handleLeftArrow(e: KeyboardEvent): void {
|
|
315
|
-
if (isLeft(e) && this.isRtlDirection) {
|
|
316
|
-
this.openCountriesByRegion(e);
|
|
317
|
-
this.fireEventRegionItemClick(e);
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
handleUpArrow(e: KeyboardEvent): void {
|
|
322
|
-
if (isUp(e)) {
|
|
323
|
-
e.preventDefault();
|
|
324
|
-
this.focusPreviousItem(e);
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
handleDownArrow(e: KeyboardEvent): void {
|
|
329
|
-
if (isDown(e)) {
|
|
330
|
-
e.preventDefault();
|
|
331
|
-
this.focusNextItem(e);
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
|
|
335
294
|
handleSearch(e: CustomEvent): void {
|
|
336
295
|
const searchTerm = e.detail.value.toLowerCase().trim() as string;
|
|
337
296
|
|
|
@@ -377,17 +336,6 @@ class UDExMastheadCountrySelector extends UI5Element {
|
|
|
377
336
|
this._requestRender = !this._requestRender;
|
|
378
337
|
}
|
|
379
338
|
|
|
380
|
-
handleDirection() {
|
|
381
|
-
const directionStyles: string = window
|
|
382
|
-
.getComputedStyle(this)
|
|
383
|
-
.getPropertyValue("direction");
|
|
384
|
-
if (!directionStyles) {
|
|
385
|
-
this._direction = "ltr";
|
|
386
|
-
} else {
|
|
387
|
-
this._direction = directionStyles;
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
|
|
391
339
|
handleOutsideClick(): void {
|
|
392
340
|
document.addEventListener("mousedown", (e: Event): void => {
|
|
393
341
|
if (e.target !== this && !this.isMobile) {
|
|
@@ -415,21 +363,9 @@ class UDExMastheadCountrySelector extends UI5Element {
|
|
|
415
363
|
this._shouldFocusRegionByIndex = true;
|
|
416
364
|
}
|
|
417
365
|
|
|
418
|
-
|
|
419
|
-
const currentIndex =
|
|
420
|
-
const
|
|
421
|
-
const prevIndex = currentIndex - 1 < 0 ? lastItemIndex : currentIndex - 1;
|
|
422
|
-
const prevItem = this.items[prevIndex];
|
|
423
|
-
this.items[currentIndex]._tabIndex = "-1";
|
|
424
|
-
prevItem._tabIndex = "0";
|
|
425
|
-
prevItem.scrollIntoView({ block: "center" });
|
|
426
|
-
prevItem.focus({ preventScroll: true });
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
focusNextItem(e: KeyboardEvent): void {
|
|
430
|
-
const currentIndex = (e.target as UDExMastheadMenuItem).index;
|
|
431
|
-
const lastItemIndex = this.items.length - 1;
|
|
432
|
-
const nextIndex = currentIndex + 1 > lastItemIndex ? 0 : currentIndex + 1;
|
|
366
|
+
focusNextItem(currentItem: UDExMastheadMenuItem): void {
|
|
367
|
+
const currentIndex = currentItem.index;
|
|
368
|
+
const nextIndex = currentIndex + 1;
|
|
433
369
|
const nextItem = this.items[nextIndex];
|
|
434
370
|
this.items[currentIndex]._tabIndex = "-1";
|
|
435
371
|
nextItem._tabIndex = "0";
|
|
@@ -437,6 +373,16 @@ class UDExMastheadCountrySelector extends UI5Element {
|
|
|
437
373
|
nextItem.focus({ preventScroll: true });
|
|
438
374
|
}
|
|
439
375
|
|
|
376
|
+
focusPreviousItem(currentItem: UDExMastheadMenuItem): void {
|
|
377
|
+
const currentIndex = currentItem.index;
|
|
378
|
+
const prevIndex = currentIndex - 1;
|
|
379
|
+
const prevItem = this.items[prevIndex];
|
|
380
|
+
this.items[currentIndex]._tabIndex = "-1";
|
|
381
|
+
prevItem._tabIndex = "0";
|
|
382
|
+
prevItem.scrollIntoView({ block: "center" });
|
|
383
|
+
prevItem.focus({ preventScroll: true });
|
|
384
|
+
}
|
|
385
|
+
|
|
440
386
|
focusLastItem(e: KeyboardEvent): void {
|
|
441
387
|
const currentIndex = (e.target as UDExMastheadMenuItem).index;
|
|
442
388
|
const lastItemIndex = this.items.length - 1;
|
|
@@ -564,7 +510,7 @@ class UDExMastheadCountrySelector extends UI5Element {
|
|
|
564
510
|
}
|
|
565
511
|
|
|
566
512
|
handleCountryListShadowVisible(): void {
|
|
567
|
-
if (this.scrollBottomCountriesList
|
|
513
|
+
if (this.scrollBottomCountriesList <= 1) {
|
|
568
514
|
this.removeScrollableClassInCountryList();
|
|
569
515
|
} else {
|
|
570
516
|
this.addScrollableClassToCountryList();
|
|
@@ -623,10 +569,6 @@ class UDExMastheadCountrySelector extends UI5Element {
|
|
|
623
569
|
}));
|
|
624
570
|
}
|
|
625
571
|
|
|
626
|
-
get isRtlDirection(): boolean {
|
|
627
|
-
return this._direction === "rtl";
|
|
628
|
-
}
|
|
629
|
-
|
|
630
572
|
get homeSearchMode(): UDExSearchMode {
|
|
631
573
|
return UDExSearchMode.HomeSearch;
|
|
632
574
|
}
|
|
@@ -642,6 +584,10 @@ class UDExMastheadCountrySelector extends UI5Element {
|
|
|
642
584
|
get mastheadShell(): UDExMastheadShell {
|
|
643
585
|
return document.querySelector<UDExMastheadShell>("[udex-masthead-shell]")!;
|
|
644
586
|
}
|
|
587
|
+
|
|
588
|
+
get backToRegionListAccessibleName(): string {
|
|
589
|
+
return `${this._activeRegion?.title} ${translate(UDExMastheadCountrySelector, BACK_TO_REGION_LIST)}`;
|
|
590
|
+
}
|
|
645
591
|
}
|
|
646
592
|
|
|
647
593
|
UDExMastheadCountrySelector.define();
|
package/src/MastheadItem.ts
CHANGED
|
@@ -481,8 +481,17 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
481
481
|
}
|
|
482
482
|
}
|
|
483
483
|
|
|
484
|
+
recalculateDropdownPosition(): void {
|
|
485
|
+
const dropdown = this.dropdownHolder;
|
|
486
|
+
if (dropdown) {
|
|
487
|
+
dropdown.style.marginInlineStart = "";
|
|
488
|
+
this.setDropdownInsetStart();
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
|
|
484
492
|
calculateMarginInlineStart(rect: DOMRect): number | null {
|
|
485
493
|
const { left, right } = rect;
|
|
494
|
+
const viewportWidth = document.documentElement.clientWidth;
|
|
486
495
|
|
|
487
496
|
if (this.isLtrDirection && left < 0) {
|
|
488
497
|
return left * -1 + 15;
|
|
@@ -492,12 +501,12 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
492
501
|
return left - 15;
|
|
493
502
|
}
|
|
494
503
|
|
|
495
|
-
if (this.isRtlDirection && right >
|
|
496
|
-
return right -
|
|
504
|
+
if (this.isRtlDirection && right > viewportWidth) {
|
|
505
|
+
return right - viewportWidth + 15;
|
|
497
506
|
}
|
|
498
507
|
|
|
499
|
-
if (this.isLtrDirection && right >
|
|
500
|
-
return
|
|
508
|
+
if (this.isLtrDirection && right > viewportWidth) {
|
|
509
|
+
return viewportWidth - right - 15;
|
|
501
510
|
}
|
|
502
511
|
|
|
503
512
|
return null;
|
package/src/MastheadMenuItem.hbs
CHANGED
package/src/MastheadMenuItem.ts
CHANGED
|
@@ -162,6 +162,15 @@ class UDExMastheadMenuItem extends UI5Element {
|
|
|
162
162
|
@property()
|
|
163
163
|
target: `${UDExTarget}` = UDExTarget._self;
|
|
164
164
|
|
|
165
|
+
/**
|
|
166
|
+
* Defines the accessible name of the item.
|
|
167
|
+
*
|
|
168
|
+
* @default undefined
|
|
169
|
+
* @private
|
|
170
|
+
*/
|
|
171
|
+
@property()
|
|
172
|
+
_accessibleName?: string;
|
|
173
|
+
|
|
165
174
|
/**
|
|
166
175
|
* Defines the tabindex attribute for the item.
|
|
167
176
|
*
|
|
@@ -7,7 +7,7 @@ import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
|
7
7
|
import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
|
|
8
8
|
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
9
9
|
import {
|
|
10
|
-
|
|
10
|
+
isHome, isEnd, isTabNext, isTabPrevious,
|
|
11
11
|
} from "@ui5/webcomponents-base/dist/Keys.js";
|
|
12
12
|
import type { MenuItem, SubMenuLinkItem } from "./MastheadItem.js";
|
|
13
13
|
import type UDExMastheadItem from "./MastheadItem.js";
|
|
@@ -134,9 +134,6 @@ class UDExMastheadMobileMenu extends UI5Element {
|
|
|
134
134
|
@property({ type: Boolean })
|
|
135
135
|
_showCategoryItems!: boolean;
|
|
136
136
|
|
|
137
|
-
@property({ type: String })
|
|
138
|
-
_direction?: string;
|
|
139
|
-
|
|
140
137
|
@i18n("@sapudex/web-components")
|
|
141
138
|
static i18nBundle: I18nBundle;
|
|
142
139
|
|
|
@@ -202,63 +199,51 @@ class UDExMastheadMobileMenu extends UI5Element {
|
|
|
202
199
|
}
|
|
203
200
|
|
|
204
201
|
handlePressKey(e: KeyboardEvent) {
|
|
205
|
-
|
|
206
|
-
this.
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
this.handleEndKey(e);
|
|
210
|
-
}
|
|
202
|
+
const currentItem = e.target as UDExMastheadMenuItem;
|
|
203
|
+
const items = this.navigationItems;
|
|
204
|
+
const isFirstItem = currentItem === items[0];
|
|
205
|
+
const isLastItem = currentItem === items[items.length - 1];
|
|
211
206
|
|
|
212
|
-
|
|
213
|
-
this.handleRightArrow(e);
|
|
214
|
-
this.handleLeftArrow(e);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
handleRightArrow(e: KeyboardEvent) {
|
|
218
|
-
if (isRight(e)) {
|
|
207
|
+
if (isTabNext(e) && !isLastItem) {
|
|
219
208
|
e.preventDefault();
|
|
220
|
-
this.
|
|
221
|
-
if (this.isRtlDirection) {
|
|
222
|
-
this.moveToBackWithKeyboard(e);
|
|
223
|
-
} else {
|
|
224
|
-
this.moveToNextLevelWithKeyboard(e);
|
|
225
|
-
}
|
|
209
|
+
this.focusNextItem(currentItem);
|
|
226
210
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
handleLeftArrow(e: KeyboardEvent) {
|
|
230
|
-
if (isLeft(e)) {
|
|
211
|
+
if (isTabPrevious(e) && !isFirstItem) {
|
|
231
212
|
e.preventDefault();
|
|
232
|
-
this.
|
|
233
|
-
if (this.isRtlDirection) {
|
|
234
|
-
this.moveToNextLevelWithKeyboard(e);
|
|
235
|
-
} else {
|
|
236
|
-
this.moveToBackWithKeyboard(e);
|
|
237
|
-
}
|
|
213
|
+
this.focusPreviousItem(currentItem);
|
|
238
214
|
}
|
|
215
|
+
this.handleHomeKey(e);
|
|
216
|
+
this.handleEndKey(e);
|
|
239
217
|
}
|
|
240
218
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
}
|
|
219
|
+
focusNextItem(currentItem: UDExMastheadMenuItem): void {
|
|
220
|
+
const currentIndex = this.getCurrentIndex(currentItem);
|
|
221
|
+
const nextIndex = currentIndex + 1;
|
|
222
|
+
const currentListItem = this.getListItemByIndex(currentIndex);
|
|
223
|
+
let nextItem = this.getListItemByIndex(nextIndex);
|
|
247
224
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
e.preventDefault();
|
|
251
|
-
this.focusNextItem(e);
|
|
225
|
+
if (nextItem.type === UDExItemType.Heading) {
|
|
226
|
+
nextItem = this.getListItemByIndex(nextIndex + 1);
|
|
252
227
|
}
|
|
228
|
+
|
|
229
|
+
currentListItem._tabIndex = "-1";
|
|
230
|
+
nextItem._tabIndex = "0";
|
|
231
|
+
nextItem.focus();
|
|
253
232
|
}
|
|
254
233
|
|
|
255
|
-
|
|
256
|
-
const
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
234
|
+
focusPreviousItem(currentItem: UDExMastheadMenuItem): void {
|
|
235
|
+
const currentIndex = this.getCurrentIndex(currentItem);
|
|
236
|
+
const previousIndex = currentIndex - 1;
|
|
237
|
+
const currentListItem = this.getListItemByIndex(currentIndex);
|
|
238
|
+
let prevItem = this.getListItemByIndex(previousIndex);
|
|
239
|
+
|
|
240
|
+
if (prevItem.type === UDExItemType.Heading) {
|
|
241
|
+
prevItem = this.getListItemByIndex(this.navigationItems.length - 1);
|
|
261
242
|
}
|
|
243
|
+
|
|
244
|
+
currentListItem._tabIndex = "-1";
|
|
245
|
+
prevItem._tabIndex = "0";
|
|
246
|
+
prevItem.focus();
|
|
262
247
|
}
|
|
263
248
|
|
|
264
249
|
handleMobileItemEvent(e: PointerEvent) {
|
|
@@ -291,51 +276,6 @@ class UDExMastheadMobileMenu extends UI5Element {
|
|
|
291
276
|
}
|
|
292
277
|
}
|
|
293
278
|
|
|
294
|
-
moveToBackWithKeyboard(e: KeyboardEvent) {
|
|
295
|
-
const target = e.target as UDExMastheadMenuItem;
|
|
296
|
-
if (target.hasAttribute("is-back-to-nav")) {
|
|
297
|
-
this.showFirstLevelMenu();
|
|
298
|
-
this.setFocusItemByIndex(this.items.indexOf(this._clickedItem));
|
|
299
|
-
this.fireMobileItemEvent(e);
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
if (target.hasAttribute("is-back-to-categories")) {
|
|
303
|
-
this.showCategories();
|
|
304
|
-
this.setFocusItemByIndex(this._category.index);
|
|
305
|
-
this.fireMobileItemEvent(e);
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
if (target.hasAttribute("is-explore-back")) {
|
|
309
|
-
this.showFirstLevelMenu();
|
|
310
|
-
this.setFocusExploreBtn();
|
|
311
|
-
this._focusedItemIndex = 0;
|
|
312
|
-
this.fireMobileItemEvent(e);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
moveToNextLevelWithKeyboard(e: KeyboardEvent) {
|
|
317
|
-
const target = e.target as UDExMastheadItem;
|
|
318
|
-
const item = this.getClickedItem(e.target as UDExMastheadItem);
|
|
319
|
-
|
|
320
|
-
if (target.hasAttribute("is-explore")) {
|
|
321
|
-
this._hideExploreSapBtn = true;
|
|
322
|
-
this._showCategoryItems = false;
|
|
323
|
-
this.fireMobileItemEvent(e);
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
if (target.hasAttribute("first-level-btn")) {
|
|
327
|
-
this.openCategories(item);
|
|
328
|
-
this.fireMobileItemEvent(e);
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
if (target.hasAttribute("second-level-btn")) {
|
|
332
|
-
this.openCategoryItems(e);
|
|
333
|
-
this.fireMobileItemEvent(e);
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
this.setFocusItemByIndex(0);
|
|
337
|
-
}
|
|
338
|
-
|
|
339
279
|
focusItemByIndex(index: number): void {
|
|
340
280
|
this.getListItemByIndex(index)?.focus();
|
|
341
281
|
this._shouldFocusItemByIndex = false;
|
|
@@ -346,38 +286,6 @@ class UDExMastheadMobileMenu extends UI5Element {
|
|
|
346
286
|
this._shouldFocusExploreBtn = false;
|
|
347
287
|
}
|
|
348
288
|
|
|
349
|
-
focusPreviousItem(e: KeyboardEvent): void {
|
|
350
|
-
const currentIndex = this.getCurrentIndex(e.target as UDExMastheadMenuItem);
|
|
351
|
-
const lastIndex = this.navigationItems.length - 1;
|
|
352
|
-
const previousIndex = currentIndex - 1 < 0 ? lastIndex : currentIndex - 1;
|
|
353
|
-
const currentItem = this.getListItemByIndex(currentIndex);
|
|
354
|
-
let prevItem = this.getListItemByIndex(previousIndex);
|
|
355
|
-
|
|
356
|
-
if (prevItem.type === UDExItemType.Heading) {
|
|
357
|
-
prevItem = this.getListItemByIndex(lastIndex);
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
currentItem._tabIndex = "-1";
|
|
361
|
-
prevItem._tabIndex = "0";
|
|
362
|
-
prevItem.focus();
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
focusNextItem(e: KeyboardEvent): void {
|
|
366
|
-
const currentIndex = this.getCurrentIndex(e.target as UDExMastheadMenuItem);
|
|
367
|
-
const navLength = this.navigationItems.length;
|
|
368
|
-
const nextIndex = currentIndex + 1 > navLength - 1 ? 0 : currentIndex + 1;
|
|
369
|
-
const currentItem = this.getListItemByIndex(currentIndex);
|
|
370
|
-
let nextItem = this.getListItemByIndex(nextIndex);
|
|
371
|
-
|
|
372
|
-
if (nextItem.type === UDExItemType.Heading) {
|
|
373
|
-
nextItem = this.getListItemByIndex(nextIndex + 1);
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
currentItem._tabIndex = "-1";
|
|
377
|
-
nextItem._tabIndex = "0";
|
|
378
|
-
nextItem.focus();
|
|
379
|
-
}
|
|
380
|
-
|
|
381
289
|
handleEndKey(e: KeyboardEvent): void {
|
|
382
290
|
if (isEnd(e)) {
|
|
383
291
|
e.preventDefault();
|
|
@@ -572,10 +480,6 @@ class UDExMastheadMobileMenu extends UI5Element {
|
|
|
572
480
|
return this.shadowRoot!.querySelector<UDExMastheadMenuItem>(".udex-masthead-mobile-menu__explore-btn")!;
|
|
573
481
|
}
|
|
574
482
|
|
|
575
|
-
get isRtlDirection(): boolean {
|
|
576
|
-
return this._direction === "rtl";
|
|
577
|
-
}
|
|
578
|
-
|
|
579
483
|
get navigationItems(): Array<UDExMastheadMenuItem> {
|
|
580
484
|
return Array.from(this.shadowRoot!.querySelectorAll<UDExMastheadMenuItem>("ul [udex-masthead-menu-item]"));
|
|
581
485
|
}
|
|
@@ -418,7 +418,7 @@ class UDExMastheadProfileMenu extends UI5Element {
|
|
|
418
418
|
}
|
|
419
419
|
|
|
420
420
|
toggleScrollableClass(el: HTMLElement, className: string, scrollBottom: number): void {
|
|
421
|
-
if (scrollBottom
|
|
421
|
+
if (scrollBottom <= 1) {
|
|
422
422
|
el.classList.remove(`${className}_scrollable`);
|
|
423
423
|
} else {
|
|
424
424
|
el.classList.add(`${className}_scrollable`);
|
package/src/MastheadShell.hbs
CHANGED
|
@@ -53,17 +53,6 @@
|
|
|
53
53
|
{{/if}}
|
|
54
54
|
|
|
55
55
|
<div class="{{rightMenuClass}}">
|
|
56
|
-
{{#if hasMobileMenuButtons}}
|
|
57
|
-
<udex-masthead-item
|
|
58
|
-
@ui5-item-click="{{handleOpenMobileMenu}}"
|
|
59
|
-
class="udex-masthead-shell__menu-btn"
|
|
60
|
-
accessible-role="button"
|
|
61
|
-
icon="menu2"
|
|
62
|
-
part="menu-open-btn"
|
|
63
|
-
accessible-name="menu">
|
|
64
|
-
<slot slot="dropdown" name="mobileMenu"></slot>
|
|
65
|
-
</udex-masthead-item>
|
|
66
|
-
{{/if}}
|
|
67
56
|
{{#if hasExploreSAP}}
|
|
68
57
|
<div
|
|
69
58
|
class="udex-masthead-shell__explore"
|
|
@@ -124,6 +113,15 @@
|
|
|
124
113
|
</div>
|
|
125
114
|
{{/if}}
|
|
126
115
|
{{#if hasMobileMenuButtons}}
|
|
116
|
+
<udex-masthead-item
|
|
117
|
+
@ui5-item-click="{{handleOpenMobileMenu}}"
|
|
118
|
+
class="udex-masthead-shell__menu-btn"
|
|
119
|
+
accessible-role="button"
|
|
120
|
+
icon="menu2"
|
|
121
|
+
part="menu-open-btn"
|
|
122
|
+
accessible-name="menu">
|
|
123
|
+
<slot slot="dropdown" name="mobileMenu"></slot>
|
|
124
|
+
</udex-masthead-item>
|
|
127
125
|
<udex-masthead-item
|
|
128
126
|
@keydown="{{handleEnterAndSpaceOnCloseBtn}}"
|
|
129
127
|
@ui5-item-click="{{closeMobileMenu}}"
|
package/src/MastheadShell.ts
CHANGED
|
@@ -9,7 +9,7 @@ import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
|
|
|
9
9
|
import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
10
10
|
import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
11
11
|
import {
|
|
12
|
-
|
|
12
|
+
isSpace, isEnter, isEscape,
|
|
13
13
|
} from "@ui5/webcomponents-base/dist/Keys.js";
|
|
14
14
|
import "@ui5/webcomponents-icons/dist/decline.js";
|
|
15
15
|
import "@ui5/webcomponents-icons/dist/menu2.js";
|
|
@@ -617,9 +617,16 @@ class UDExMastheadShell extends UI5Element {
|
|
|
617
617
|
this.setProfileMobileMode();
|
|
618
618
|
}
|
|
619
619
|
|
|
620
|
+
this.recalculateOpenDropdownPosition();
|
|
620
621
|
this._shouldHandleResize = true;
|
|
621
622
|
}
|
|
622
623
|
|
|
624
|
+
recalculateOpenDropdownPosition(): void {
|
|
625
|
+
this.getSelectedItems()
|
|
626
|
+
.filter(item => item.hasDropdownSlot && !item.isMobile && !item.isExploreBtn)
|
|
627
|
+
.forEach(item => item.recalculateDropdownPosition());
|
|
628
|
+
}
|
|
629
|
+
|
|
623
630
|
handleMobileMode(): void {
|
|
624
631
|
const rootHolder = this.getDomRef();
|
|
625
632
|
if (rootHolder) {
|
|
@@ -641,8 +648,6 @@ class UDExMastheadShell extends UI5Element {
|
|
|
641
648
|
|
|
642
649
|
handleKeyDown(e: KeyboardEvent): void {
|
|
643
650
|
e.stopPropagation();
|
|
644
|
-
this.handleLeftArrow(e);
|
|
645
|
-
this.handleRightArrow(e);
|
|
646
651
|
}
|
|
647
652
|
|
|
648
653
|
handleSearchKeyDown(e: CustomEvent): void {
|
|
@@ -658,30 +663,6 @@ class UDExMastheadShell extends UI5Element {
|
|
|
658
663
|
}
|
|
659
664
|
}
|
|
660
665
|
|
|
661
|
-
handleLeftArrow(e: KeyboardEvent): void {
|
|
662
|
-
if (isLeft(e)) {
|
|
663
|
-
const currentItem = e.target as UDExMastheadItem;
|
|
664
|
-
if (this.isNavigationItem(currentItem)) {
|
|
665
|
-
if (currentItem.selected) {
|
|
666
|
-
currentItem.closeDropdown();
|
|
667
|
-
}
|
|
668
|
-
this.focusPreviousMenuItem(currentItem);
|
|
669
|
-
}
|
|
670
|
-
}
|
|
671
|
-
}
|
|
672
|
-
|
|
673
|
-
handleRightArrow(e: KeyboardEvent): void {
|
|
674
|
-
if (isRight(e)) {
|
|
675
|
-
const currentItem = e.target as UDExMastheadItem;
|
|
676
|
-
if (this.isNavigationItem(currentItem)) {
|
|
677
|
-
if (currentItem.selected) {
|
|
678
|
-
currentItem.closeDropdown();
|
|
679
|
-
}
|
|
680
|
-
this.focusNextMenuItem(currentItem);
|
|
681
|
-
}
|
|
682
|
-
}
|
|
683
|
-
}
|
|
684
|
-
|
|
685
666
|
handleLogoClick(e: PointerEvent): void {
|
|
686
667
|
this.fireMastheadEvent("logo-click", e);
|
|
687
668
|
}
|
|
@@ -765,21 +746,6 @@ class UDExMastheadShell extends UI5Element {
|
|
|
765
746
|
input?.focus();
|
|
766
747
|
}
|
|
767
748
|
|
|
768
|
-
focusPreviousMenuItem(item: UDExMastheadItem): void {
|
|
769
|
-
const menuItems = this.menuItems;
|
|
770
|
-
const lastItemIndex = menuItems.length - 1;
|
|
771
|
-
const currentSelectedIndex = this.getCurrentIndex(item);
|
|
772
|
-
const previousSelectIndex = currentSelectedIndex - 1 < 0 ? lastItemIndex : currentSelectedIndex - 1;
|
|
773
|
-
menuItems[previousSelectIndex].focus();
|
|
774
|
-
}
|
|
775
|
-
|
|
776
|
-
focusNextMenuItem(item: UDExMastheadItem): void {
|
|
777
|
-
const menuItems = this.menuItems;
|
|
778
|
-
const currentSelectedIndex = this.getCurrentIndex(item);
|
|
779
|
-
const nextSelectIndex = currentSelectedIndex + 1 > menuItems.length - 1 ? 0 : currentSelectedIndex + 1;
|
|
780
|
-
menuItems[nextSelectIndex].focus();
|
|
781
|
-
}
|
|
782
|
-
|
|
783
749
|
resetSelectedItems(clickedId?: string): void {
|
|
784
750
|
this.getSelectedItems().forEach(item => {
|
|
785
751
|
if (item._id !== clickedId && item.selected) {
|
|
@@ -811,10 +777,6 @@ class UDExMastheadShell extends UI5Element {
|
|
|
811
777
|
}
|
|
812
778
|
}
|
|
813
779
|
|
|
814
|
-
getCurrentIndex(item: UDExMastheadItem): number {
|
|
815
|
-
return this.menuItems.indexOf(item);
|
|
816
|
-
}
|
|
817
|
-
|
|
818
780
|
getSelectedItems(): Array<UDExMastheadItem> {
|
|
819
781
|
const buttonsArray: Array<UDExMastheadItem> = [
|
|
820
782
|
...this.menuItems,
|
|
@@ -920,10 +882,6 @@ class UDExMastheadShell extends UI5Element {
|
|
|
920
882
|
return window.getComputedStyle(this.getDomRef()!).getPropertyValue(`${variableName}`);
|
|
921
883
|
}
|
|
922
884
|
|
|
923
|
-
isNavigationItem(item: UDExMastheadItem): boolean {
|
|
924
|
-
return this.menuItems.some(menuItem => menuItem === item);
|
|
925
|
-
}
|
|
926
|
-
|
|
927
885
|
setOverflowBody() {
|
|
928
886
|
const { body: { style } } = document;
|
|
929
887
|
this._shouldHandleResize = false;
|