@sapudex/web-components 0.114.2 → 0.117.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle.esm.js +3 -0
- package/dist/Avatar.d.ts +8 -1
- package/dist/Avatar.js +5 -2
- package/dist/Avatar.js.map +1 -1
- package/dist/CountrySelector.d.ts +1 -0
- package/dist/CountrySelector.js +3 -0
- package/dist/CountrySelector.js.map +1 -1
- package/dist/FilterMenu.d.ts +14 -4
- package/dist/FilterMenu.js +46 -7
- package/dist/FilterMenu.js.map +1 -1
- package/dist/InputGroup.js.map +1 -1
- package/dist/List.d.ts +7 -0
- package/dist/List.js +78 -18
- package/dist/List.js.map +1 -1
- package/dist/ListItem.d.ts +0 -1
- package/dist/ListItem.js +0 -6
- package/dist/ListItem.js.map +1 -1
- package/dist/ListItemBase.d.ts +3 -0
- package/dist/ListItemBase.js +12 -0
- package/dist/ListItemBase.js.map +1 -1
- package/dist/PhoneNumberField.js.map +1 -1
- package/dist/Search.d.ts +3 -0
- package/dist/Search.js +35 -10
- package/dist/Search.js.map +1 -1
- package/dist/SecondaryNavigation.d.ts +34 -46
- package/dist/SecondaryNavigation.js +140 -161
- package/dist/SecondaryNavigation.js.map +1 -1
- package/dist/SecondaryNavigationItem.d.ts +101 -0
- package/dist/SecondaryNavigationItem.js +287 -0
- package/dist/SecondaryNavigationItem.js.map +1 -0
- package/dist/SecondaryNavigationItemBase.d.ts +68 -0
- package/dist/SecondaryNavigationItemBase.js +78 -0
- package/dist/SecondaryNavigationItemBase.js.map +1 -0
- package/dist/SecondaryNavigationSubItem.d.ts +52 -0
- package/dist/SecondaryNavigationSubItem.js +102 -0
- package/dist/SecondaryNavigationSubItem.js.map +1 -0
- package/dist/SelectBox.d.ts +1 -0
- package/dist/SelectBox.js +13 -1
- package/dist/SelectBox.js.map +1 -1
- package/dist/StatusBadge.d.ts +67 -0
- package/dist/StatusBadge.js +104 -0
- package/dist/StatusBadge.js.map +1 -0
- package/dist/Tab.js +1 -1
- package/dist/Tab.js.map +1 -1
- package/dist/assets/{bundle.esm-ab45813e.js → bundle.esm-f65ae7da.js} +187 -184
- package/dist/assets/messagebundle_en-7249941b.js +1 -0
- package/dist/css/themes/Avatar.css +1 -1
- package/dist/css/themes/Checkbox.css +1 -1
- package/dist/css/themes/CountrySelector.css +1 -1
- package/dist/css/themes/Dropdown.css +1 -1
- package/dist/css/themes/FilterMenu.css +1 -1
- package/dist/css/themes/HeroBanner.css +1 -1
- package/dist/css/themes/MediaPlayer.css +1 -1
- package/dist/css/themes/PhoneNumberField.css +1 -1
- package/dist/css/themes/RatingIndicator.css +1 -1
- package/dist/css/themes/Search.css +1 -1
- package/dist/css/themes/SecondaryNavigation.css +1 -1
- package/dist/css/themes/SecondaryNavigationItem.css +1 -0
- package/dist/css/themes/SecondaryNavigationSubItem.css +1 -0
- package/dist/css/themes/Slider.css +1 -1
- package/dist/css/themes/StatusBadge.css +1 -0
- package/dist/custom-elements-internal.json +604 -2
- package/dist/custom-elements.json +574 -2
- package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +8 -1
- package/dist/generated/i18n/i18n-defaults.js +8 -1
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/templates/CountrySelectorTemplate.lit.js +1 -1
- package/dist/generated/templates/CountrySelectorTemplate.lit.js.map +1 -1
- package/dist/generated/templates/DropdownTemplate.lit.js +1 -1
- package/dist/generated/templates/DropdownTemplate.lit.js.map +1 -1
- package/dist/generated/templates/FilterMenuTemplate.lit.js +3 -3
- package/dist/generated/templates/FilterMenuTemplate.lit.js.map +1 -1
- package/dist/generated/templates/HeroBannerTemplate.lit.js +2 -2
- package/dist/generated/templates/HeroBannerTemplate.lit.js.map +1 -1
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.js +4 -4
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.js.map +1 -1
- package/dist/generated/templates/ListItemTemplate.lit.js +1 -1
- package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/ListSelectAllTemplate.lit.js +1 -1
- package/dist/generated/templates/ListSelectAllTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SearchSuggestionsTemplate.lit.js +1 -1
- package/dist/generated/templates/SearchSuggestionsTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SearchTemplate.lit.js +2 -2
- package/dist/generated/templates/SearchTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SearchableListBaseTemplate.lit.js +2 -2
- package/dist/generated/templates/SearchableListBaseTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.d.ts +4 -0
- package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.js +11 -0
- package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.js.map +1 -0
- package/dist/generated/templates/SecondaryNavigationSubItemTemplate.lit.d.ts +4 -0
- package/dist/generated/templates/SecondaryNavigationSubItemTemplate.lit.js +9 -0
- package/dist/generated/templates/SecondaryNavigationSubItemTemplate.lit.js.map +1 -0
- package/dist/generated/templates/SecondaryNavigationTemplate.lit.js +7 -10
- package/dist/generated/templates/SecondaryNavigationTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SelectBoxTemplate.lit.js +1 -1
- package/dist/generated/templates/SelectBoxTemplate.lit.js.map +1 -1
- package/dist/generated/templates/StatusBadgeTemplate.lit.d.ts +4 -0
- package/dist/generated/templates/StatusBadgeTemplate.lit.js +5 -0
- package/dist/generated/templates/StatusBadgeTemplate.lit.js.map +1 -0
- package/dist/generated/themes/Avatar.css.js +1 -1
- package/dist/generated/themes/Avatar.css.js.map +1 -1
- package/dist/generated/themes/Checkbox.css.js +1 -1
- package/dist/generated/themes/Checkbox.css.js.map +1 -1
- package/dist/generated/themes/CountrySelector.css.js +1 -1
- package/dist/generated/themes/CountrySelector.css.js.map +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/FilterMenu.css.js +1 -1
- package/dist/generated/themes/FilterMenu.css.js.map +1 -1
- package/dist/generated/themes/HeroBanner.css.js +1 -1
- package/dist/generated/themes/HeroBanner.css.js.map +1 -1
- package/dist/generated/themes/MediaPlayer.css.js +1 -1
- package/dist/generated/themes/MediaPlayer.css.js.map +1 -1
- package/dist/generated/themes/PhoneNumberField.css.js +1 -1
- package/dist/generated/themes/PhoneNumberField.css.js.map +1 -1
- package/dist/generated/themes/RatingIndicator.css.js +1 -1
- package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
- package/dist/generated/themes/Search.css.js +1 -1
- package/dist/generated/themes/Search.css.js.map +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 +3 -0
- package/dist/generated/themes/SecondaryNavigationItem.css.js +9 -0
- package/dist/generated/themes/SecondaryNavigationItem.css.js.map +1 -0
- package/dist/generated/themes/SecondaryNavigationSubItem.css.d.ts +3 -0
- package/dist/generated/themes/SecondaryNavigationSubItem.css.js +9 -0
- package/dist/generated/themes/SecondaryNavigationSubItem.css.js.map +1 -0
- package/dist/generated/themes/Slider.css.js +1 -1
- package/dist/generated/themes/Slider.css.js.map +1 -1
- package/dist/generated/themes/StatusBadge.css.d.ts +3 -0
- package/dist/generated/themes/StatusBadge.css.js +9 -0
- package/dist/generated/themes/StatusBadge.css.js.map +1 -0
- package/dist/i18n/messagebundle.properties +12 -1
- package/dist/i18n/messagebundle_en.properties +8 -1
- package/dist/vscode.html-custom-data.json +131 -3
- package/dist/web-types.json +203 -5
- package/package.json +1 -1
- package/src/Avatar.ts +12 -3
- package/src/CountrySelector.hbs +2 -1
- package/src/CountrySelector.ts +4 -1
- package/src/Dropdown.hbs +0 -1
- package/src/FilterMenu.hbs +5 -1
- package/src/FilterMenu.ts +60 -10
- package/src/HeroBanner.hbs +24 -21
- package/src/InputGroup.ts +6 -5
- package/src/List.ts +92 -21
- package/src/ListGroupHeader.hbs +9 -5
- package/src/ListItem.hbs +2 -1
- package/src/ListItem.ts +0 -7
- package/src/ListItemBase.ts +14 -0
- package/src/ListSelectAll.hbs +1 -0
- package/src/PhoneNumberField.ts +1 -1
- package/src/Search.hbs +3 -2
- package/src/Search.ts +37 -10
- package/src/SearchSuggestions.hbs +1 -1
- package/src/SearchableListBase.hbs +2 -0
- package/src/SecondaryNavigation.hbs +50 -72
- package/src/SecondaryNavigation.ts +171 -195
- package/src/SecondaryNavigationItem.hbs +63 -0
- package/src/SecondaryNavigationItem.ts +358 -0
- package/src/SecondaryNavigationItemBase.ts +115 -0
- package/src/SecondaryNavigationSubItem.hbs +41 -0
- package/src/SecondaryNavigationSubItem.ts +123 -0
- package/src/SelectBox.hbs +1 -0
- package/src/SelectBox.ts +16 -1
- package/src/StatusBadge.hbs +9 -0
- package/src/StatusBadge.ts +129 -0
- package/src/Tab.ts +1 -1
- package/src/generated/i18n/i18n-defaults.ts +2 -2
- package/src/generated/templates/CountrySelectorTemplate.lit.ts +1 -1
- package/src/generated/templates/DropdownTemplate.lit.ts +1 -1
- package/src/generated/templates/FilterMenuTemplate.lit.ts +3 -3
- package/src/generated/templates/HeroBannerTemplate.lit.ts +2 -2
- package/src/generated/templates/ListGroupHeaderTemplate.lit.ts +4 -4
- package/src/generated/templates/ListItemTemplate.lit.ts +1 -1
- package/src/generated/templates/ListSelectAllTemplate.lit.ts +1 -1
- package/src/generated/templates/SearchSuggestionsTemplate.lit.ts +1 -1
- package/src/generated/templates/SearchTemplate.lit.ts +2 -2
- package/src/generated/templates/SearchableListBaseTemplate.lit.ts +2 -2
- package/src/generated/templates/SecondaryNavigationItemTemplate.lit.ts +16 -0
- package/src/generated/templates/SecondaryNavigationSubItemTemplate.lit.ts +14 -0
- package/src/generated/templates/SecondaryNavigationTemplate.lit.ts +7 -10
- package/src/generated/templates/SelectBoxTemplate.lit.ts +1 -1
- package/src/generated/templates/StatusBadgeTemplate.lit.ts +10 -0
- package/src/generated/themes/Avatar.css.ts +1 -1
- package/src/generated/themes/Checkbox.css.ts +1 -1
- package/src/generated/themes/CountrySelector.css.ts +1 -1
- package/src/generated/themes/Dropdown.css.ts +1 -1
- package/src/generated/themes/FilterMenu.css.ts +1 -1
- package/src/generated/themes/HeroBanner.css.ts +1 -1
- package/src/generated/themes/MediaPlayer.css.ts +1 -1
- package/src/generated/themes/PhoneNumberField.css.ts +1 -1
- package/src/generated/themes/RatingIndicator.css.ts +1 -1
- package/src/generated/themes/Search.css.ts +1 -1
- package/src/generated/themes/SecondaryNavigation.css.ts +1 -1
- package/src/generated/themes/SecondaryNavigationItem.css.ts +13 -0
- package/src/generated/themes/SecondaryNavigationSubItem.css.ts +13 -0
- package/src/generated/themes/Slider.css.ts +1 -1
- package/src/generated/themes/StatusBadge.css.ts +13 -0
- package/src/i18n/messagebundle.properties +12 -1
- package/src/i18n/messagebundle_en.properties +8 -1
- package/src/themes/Avatar.css +20 -0
- package/src/themes/Checkbox.css +12 -0
- package/src/themes/CountrySelector.css +4 -0
- package/src/themes/Dropdown.css +2 -0
- package/src/themes/FilterMenu.css +10 -0
- package/src/themes/HeroBanner.css +42 -6
- package/src/themes/MediaPlayer.css +3 -2
- package/src/themes/PhoneNumberField.css +4 -0
- package/src/themes/Search.css +11 -7
- package/src/themes/SecondaryNavigation.css +44 -302
- package/src/themes/SecondaryNavigationItem.css +220 -0
- package/src/themes/SecondaryNavigationSubItem.css +118 -0
- package/src/themes/StatusBadge.css +135 -0
- package/dist/assets/messagebundle_en-26cd7a92.js +0 -1
package/src/FilterMenu.ts
CHANGED
|
@@ -7,6 +7,7 @@ import "@ui5/webcomponents/dist/Icon.js";
|
|
|
7
7
|
import "@ui5/webcomponents-icons/dist/navigation-down-arrow.js";
|
|
8
8
|
import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
|
|
9
9
|
import Integer from "@ui5/webcomponents-base/dist/types/Integer.js";
|
|
10
|
+
import { isTabPrevious, isTabNext, isEscape } from "@ui5/webcomponents-base/dist/Keys.js";
|
|
10
11
|
import PopupAccessibleRole from "@ui5/webcomponents/dist/types/PopupAccessibleRole.js";
|
|
11
12
|
import UDExDropdown from "./Dropdown.js";
|
|
12
13
|
import UDExList from "./List.js";
|
|
@@ -14,14 +15,15 @@ import UDExListItem from "./ListItem.js";
|
|
|
14
15
|
import UDExListGroupHeader from "./ListGroupHeader.js";
|
|
15
16
|
import UDExFilterMenuItem from "./FilterMenuItem.js";
|
|
16
17
|
import UDExFilterMenuGroupHeader from "./FilterMenuGroupHeader.js";
|
|
17
|
-
import
|
|
18
|
-
import
|
|
18
|
+
import UDExSearch from "./Search.js";
|
|
19
|
+
import UDEButton from "./Button.js";
|
|
19
20
|
import UDExSearchableListBase from "./SearchableListBase.js";
|
|
20
21
|
import { PlacementType, HorizontalAlign } from "./types/Dropdown.js";
|
|
21
22
|
import { ListMode } from "./types/List.js";
|
|
22
23
|
import UDExFilterMenuSelectAll from "./FilterMenuSelectAll.js";
|
|
23
24
|
import UDExListSelectAll from "./ListSelectAll.js";
|
|
24
25
|
import UDExBadge from "./Badge.js";
|
|
26
|
+
import UDExListItemBase from "./ListItemBase.js";
|
|
25
27
|
|
|
26
28
|
import { RESET, SHOW_RESULTS, SELECT_OPTIONS } from "./generated/i18n/i18n-defaults.js";
|
|
27
29
|
import FilterMenuTemplate from "./generated/templates/FilterMenuTemplate.lit.js";
|
|
@@ -64,8 +66,8 @@ import SearchableListCss from "./generated/themes/SearchableList.css.js";
|
|
|
64
66
|
UDExListItem,
|
|
65
67
|
UDExListGroupHeader,
|
|
66
68
|
UDExBadge,
|
|
67
|
-
|
|
68
|
-
|
|
69
|
+
UDExSearch,
|
|
70
|
+
UDEButton,
|
|
69
71
|
],
|
|
70
72
|
})
|
|
71
73
|
|
|
@@ -274,11 +276,13 @@ class UDExFilterMenu extends UDExSearchableListBase {
|
|
|
274
276
|
accessibleRole!: `${PopupAccessibleRole}`;
|
|
275
277
|
|
|
276
278
|
_dropdown!: UDExDropdown;
|
|
277
|
-
_search!:
|
|
279
|
+
_search!: UDExSearch;
|
|
280
|
+
_hasFooterButtons!: boolean;
|
|
278
281
|
|
|
279
282
|
onAfterRendering() {
|
|
280
283
|
this._dropdown = this.getDropdown();
|
|
281
284
|
this._search = this.getSearch();
|
|
285
|
+
this._hasFooterButtons = this.hasFooterButtons;
|
|
282
286
|
}
|
|
283
287
|
|
|
284
288
|
onEnterDOM(): void {
|
|
@@ -300,7 +304,7 @@ class UDExFilterMenu extends UDExSearchableListBase {
|
|
|
300
304
|
this.onItemPress(e);
|
|
301
305
|
|
|
302
306
|
if (this.modeSingleSelect) {
|
|
303
|
-
this.
|
|
307
|
+
this.onDropdownClose();
|
|
304
308
|
}
|
|
305
309
|
}
|
|
306
310
|
|
|
@@ -313,7 +317,7 @@ class UDExFilterMenu extends UDExSearchableListBase {
|
|
|
313
317
|
}
|
|
314
318
|
|
|
315
319
|
handleSubmitSearch() {
|
|
316
|
-
this.
|
|
320
|
+
this.onDropdownClose();
|
|
317
321
|
this.onSubmitSearch();
|
|
318
322
|
}
|
|
319
323
|
|
|
@@ -337,7 +341,37 @@ class UDExFilterMenu extends UDExSearchableListBase {
|
|
|
337
341
|
}
|
|
338
342
|
}
|
|
339
343
|
|
|
340
|
-
|
|
344
|
+
handleKeyDownList(e: KeyboardEvent) {
|
|
345
|
+
const isTabNextPress = isTabNext(e) && !this._hasFooterButtons;
|
|
346
|
+
const isTabPrevPress = isTabPrevious(e) && !this._search;
|
|
347
|
+
|
|
348
|
+
if (isTabNextPress || isTabPrevPress) {
|
|
349
|
+
this.onDropdownClose();
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
handleKeyDownSearch(e: CustomEvent) {
|
|
354
|
+
const keyEvent = e.detail as KeyboardEvent;
|
|
355
|
+
if (isTabPrevious(keyEvent) || isEscape(keyEvent)) {
|
|
356
|
+
this.onDropdownClose();
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
handleKeyDownResultBtn(e: KeyboardEvent) {
|
|
361
|
+
e.stopPropagation();
|
|
362
|
+
if (isTabNext(e) && !this.hasResetBtn) {
|
|
363
|
+
this.onDropdownClose();
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
handleKeyDownResetBtn(e: KeyboardEvent) {
|
|
368
|
+
e.stopPropagation();
|
|
369
|
+
if (isTabNext(e)) {
|
|
370
|
+
this.onDropdownClose();
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
onDropdownClose() {
|
|
341
375
|
if (this._dropdown.open) {
|
|
342
376
|
this._dropdown.onClose();
|
|
343
377
|
}
|
|
@@ -347,8 +381,8 @@ class UDExFilterMenu extends UDExSearchableListBase {
|
|
|
347
381
|
return this.shadowRoot!.querySelector<UDExDropdown>("udex-dropdown")!;
|
|
348
382
|
}
|
|
349
383
|
|
|
350
|
-
getSearch():
|
|
351
|
-
return this.shadowRoot!.querySelector<
|
|
384
|
+
getSearch(): UDExSearch {
|
|
385
|
+
return this.shadowRoot!.querySelector<UDExSearch>("udex-search")!;
|
|
352
386
|
}
|
|
353
387
|
|
|
354
388
|
_dropdownBeforeOpen() {
|
|
@@ -399,6 +433,22 @@ class UDExFilterMenu extends UDExSearchableListBase {
|
|
|
399
433
|
return this.hideResultBtn && this.hideResetBtn;
|
|
400
434
|
}
|
|
401
435
|
|
|
436
|
+
get hasFooterButtons(): boolean {
|
|
437
|
+
return (this.hasResultBtn || this.hasResetBtn) && this.modeMultiSelect;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
get hasResultBtn(): boolean {
|
|
441
|
+
return !this.hideResultBtn && !this.disabledResultBtn;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
get hasResetBtn(): boolean {
|
|
445
|
+
return !this.hideResetBtn;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
getItems(): Array<UDExListItemBase> {
|
|
449
|
+
return this.getSlottedNodes<UDExListItemBase>("items");
|
|
450
|
+
}
|
|
451
|
+
|
|
402
452
|
static get searchableListBaseTemplate() {
|
|
403
453
|
return SearchableListBaseTemplate;
|
|
404
454
|
}
|
package/src/HeroBanner.hbs
CHANGED
|
@@ -1,27 +1,30 @@
|
|
|
1
1
|
<div class="{{heroBannerClasses}}" part="wrapper" style="background-color: {{wrapperBackgroundColor}}">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
<
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
<div class="udex-hero-banner__container">
|
|
3
|
+
{{#if hasCustomBackgroundPicture}}
|
|
4
|
+
<slot name="backgroundPicture"></slot>
|
|
5
|
+
{{else if hasBackgroundImage}}
|
|
6
|
+
<picture>
|
|
7
|
+
<img loading="{{backgroundImageLoadingStrategy}}" src="{{backgroundImage}}" part="background-image" class="udex-hero-banner__background-image" alt="{{backgroundImageLabel}}" />
|
|
8
|
+
</picture>
|
|
9
|
+
{{/if}}
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
11
|
+
{{#if hasBackgroundVideo}}
|
|
12
|
+
<div class="udex-hero-banner__background-video-wrapper" tabindex="0" @keydown={{_handleKeydown}} >
|
|
13
|
+
<video ?autoplay="{{shouldVideoAutoplay}}" muted loop playsinline part="background-video" class="udex-hero-banner__background-video" alt="{{backgroundVideoLabel}}">
|
|
14
|
+
<source src="{{backgroundVideo}}" type="video/mp4" />
|
|
15
|
+
</video>
|
|
16
|
+
<div class="udex-hero-banner__background-video-overlay"></div>
|
|
17
|
+
{{> hero-content}}
|
|
18
|
+
<button class="udex-hero-banner__media-button" aria-label="Play / Pause button" role="button" @click={{_toggleMediaButton}}>
|
|
19
|
+
<ui5-icon name={{mediaButtonIconName}}></ui5-icon>
|
|
20
|
+
</button>
|
|
21
|
+
</div>
|
|
22
|
+
{{else}}
|
|
23
|
+
<div class="udex-hero-banner__content-container">
|
|
24
|
+
{{> hero-content}}
|
|
25
|
+
</div>
|
|
26
|
+
{{/if}}
|
|
20
27
|
</div>
|
|
21
|
-
{{else}}
|
|
22
|
-
{{> hero-content}}
|
|
23
|
-
{{/if}}
|
|
24
|
-
|
|
25
28
|
</div>
|
|
26
29
|
|
|
27
30
|
{{#*inline "hero-content"}}
|
package/src/InputGroup.ts
CHANGED
|
@@ -63,7 +63,7 @@ class UDExInputGroup extends UI5Element {
|
|
|
63
63
|
* @public
|
|
64
64
|
*/
|
|
65
65
|
@property({ type: String })
|
|
66
|
-
|
|
66
|
+
groupName?: string;
|
|
67
67
|
|
|
68
68
|
/**
|
|
69
69
|
* Defines the orientation of the component.
|
|
@@ -72,7 +72,7 @@ class UDExInputGroup extends UI5Element {
|
|
|
72
72
|
* @public
|
|
73
73
|
*/
|
|
74
74
|
@property({ type: Orientation, defaultValue: Orientation.Vertical })
|
|
75
|
-
|
|
75
|
+
orientation!: `${Orientation}`;
|
|
76
76
|
|
|
77
77
|
/**
|
|
78
78
|
* Defines the value state of the component.
|
|
@@ -81,7 +81,7 @@ class UDExInputGroup extends UI5Element {
|
|
|
81
81
|
* @public
|
|
82
82
|
*/
|
|
83
83
|
@property({ type: GroupValueState, defaultValue: GroupValueState.Standard })
|
|
84
|
-
|
|
84
|
+
valueState!: `${GroupValueState}`;
|
|
85
85
|
|
|
86
86
|
/**
|
|
87
87
|
* Defines supporting text under the Input Group.
|
|
@@ -90,7 +90,7 @@ class UDExInputGroup extends UI5Element {
|
|
|
90
90
|
* @public
|
|
91
91
|
*/
|
|
92
92
|
@property({ type: String })
|
|
93
|
-
|
|
93
|
+
supportingText!: string;
|
|
94
94
|
|
|
95
95
|
/**
|
|
96
96
|
* Slot for input elements items.
|
|
@@ -98,7 +98,8 @@ class UDExInputGroup extends UI5Element {
|
|
|
98
98
|
* @slot
|
|
99
99
|
* @public
|
|
100
100
|
*/
|
|
101
|
-
@slot({ type: HTMLElement, "default": true, individualSlots: true })
|
|
101
|
+
@slot({ type: HTMLElement, "default": true, individualSlots: true })
|
|
102
|
+
items!: Array<UDExCheckbox | UDExRadioButton>;
|
|
102
103
|
|
|
103
104
|
static i18nBundle: I18nBundle;
|
|
104
105
|
|
package/src/List.ts
CHANGED
|
@@ -9,6 +9,8 @@ import {
|
|
|
9
9
|
isDown,
|
|
10
10
|
isHome,
|
|
11
11
|
isEnd,
|
|
12
|
+
isEnter,
|
|
13
|
+
isSpace,
|
|
12
14
|
} from "@ui5/webcomponents-base/dist/Keys.js";
|
|
13
15
|
import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
14
16
|
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
@@ -154,25 +156,7 @@ class UDExList extends UI5Element {
|
|
|
154
156
|
|
|
155
157
|
handleItemPress(e: CustomEvent) {
|
|
156
158
|
const clickedItem: UDExListItemBase = e.detail.item;
|
|
157
|
-
|
|
158
|
-
if (this.modeSingleSelect && !this.controlled) {
|
|
159
|
-
this.revertSelectedItems(this.getSelectedItems());
|
|
160
|
-
clickedItem.selected = true;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
if (this.modeRadioGroup && !this.controlled) {
|
|
164
|
-
const groupHeader = clickedItem.parentElement as UDExListGroupHeaderBase;
|
|
165
|
-
const groupItems = groupHeader.getItems() as Array<UDExListItemBase>;
|
|
166
|
-
this.revertSelectedItems(groupItems);
|
|
167
|
-
|
|
168
|
-
clickedItem.selected = true;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
this.fireEvent("selection-change", {
|
|
172
|
-
listItems: this.getItemsFromList(),
|
|
173
|
-
selectedItems: this.getSelectedItems(),
|
|
174
|
-
item: clickedItem,
|
|
175
|
-
});
|
|
159
|
+
this.onItemPress(clickedItem);
|
|
176
160
|
}
|
|
177
161
|
|
|
178
162
|
handleKeyDown(e: KeyboardEvent) {
|
|
@@ -180,6 +164,15 @@ class UDExList extends UI5Element {
|
|
|
180
164
|
this.handleDownArrow(e);
|
|
181
165
|
this.handleHomeKey(e);
|
|
182
166
|
this.handleEndKey(e);
|
|
167
|
+
this.handleEnterOrSpace(e);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
handleEnterOrSpace(e: KeyboardEvent) {
|
|
171
|
+
if (isEnter(e) || isSpace(e)) {
|
|
172
|
+
e.preventDefault();
|
|
173
|
+
const clickedItem = e.target as UDExListItemBase;
|
|
174
|
+
this.onItemPress(clickedItem);
|
|
175
|
+
}
|
|
183
176
|
}
|
|
184
177
|
|
|
185
178
|
handleUpArrow(e: KeyboardEvent) {
|
|
@@ -193,20 +186,28 @@ class UDExList extends UI5Element {
|
|
|
193
186
|
const nonInteractiveHeader = items[previousSelectIndex].nonInteractive;
|
|
194
187
|
|
|
195
188
|
if (nonInteractiveHeader && previousSelectIndex === 0) {
|
|
189
|
+
this.unsetTabIndexByIndex(items, currentSelectedIndex);
|
|
190
|
+
this.setTabIndexByIndex(items, lastItemIndex);
|
|
196
191
|
items[lastItemIndex].focus();
|
|
197
192
|
return;
|
|
198
193
|
}
|
|
199
194
|
|
|
200
195
|
if (nonInteractiveHeader) {
|
|
196
|
+
this.unsetTabIndexByIndex(items, currentSelectedIndex);
|
|
197
|
+
this.setTabIndexByIndex(items, previousSelectIndex - 1);
|
|
201
198
|
items[previousSelectIndex - 1].focus();
|
|
202
199
|
return;
|
|
203
200
|
}
|
|
204
201
|
|
|
205
202
|
if (isHeaderItem) {
|
|
203
|
+
this.unsetTabIndexByIndex(items, currentSelectedIndex);
|
|
204
|
+
this.setTabIndexByIndex(items, previousSelectIndex);
|
|
206
205
|
this.focusHeader(items[previousSelectIndex]);
|
|
207
206
|
return;
|
|
208
207
|
}
|
|
209
208
|
|
|
209
|
+
this.unsetTabIndexByIndex(items, currentSelectedIndex);
|
|
210
|
+
this.setTabIndexByIndex(items, previousSelectIndex);
|
|
210
211
|
items[previousSelectIndex].focus();
|
|
211
212
|
}
|
|
212
213
|
}
|
|
@@ -221,15 +222,21 @@ class UDExList extends UI5Element {
|
|
|
221
222
|
const nonInteractiveHeader = items[nextSelectIndex].nonInteractive;
|
|
222
223
|
|
|
223
224
|
if (nonInteractiveHeader) {
|
|
225
|
+
this.unsetTabIndexByIndex(items, currentSelectedIndex);
|
|
226
|
+
this.setTabIndexByIndex(items, nextSelectIndex + 1);
|
|
224
227
|
items[nextSelectIndex + 1].focus();
|
|
225
228
|
return;
|
|
226
229
|
}
|
|
227
230
|
|
|
228
231
|
if (isHeaderItem) {
|
|
232
|
+
this.unsetTabIndexByIndex(items, currentSelectedIndex);
|
|
233
|
+
this.setTabIndexByIndex(items, nextSelectIndex);
|
|
229
234
|
this.focusHeader(items[nextSelectIndex]);
|
|
230
235
|
return;
|
|
231
236
|
}
|
|
232
237
|
|
|
238
|
+
this.unsetTabIndexByIndex(items, currentSelectedIndex);
|
|
239
|
+
this.setTabIndexByIndex(items, nextSelectIndex);
|
|
233
240
|
items[nextSelectIndex].focus();
|
|
234
241
|
}
|
|
235
242
|
}
|
|
@@ -238,20 +245,27 @@ class UDExList extends UI5Element {
|
|
|
238
245
|
if (isHome(e)) {
|
|
239
246
|
e.preventDefault();
|
|
240
247
|
const items = this.getKeyboardNavigationItems();
|
|
248
|
+
const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);
|
|
241
249
|
const firstItem = items[0];
|
|
242
250
|
const isHeaderItem = firstItem.isGroup;
|
|
243
251
|
const nonInteractiveItem = firstItem.nonInteractive;
|
|
244
252
|
|
|
245
253
|
if (nonInteractiveItem) {
|
|
254
|
+
this.unsetTabIndexByIndex(items, currentSelectedIndex);
|
|
255
|
+
this.setTabIndexByIndex(items, 1);
|
|
246
256
|
items[1].focus();
|
|
247
257
|
return;
|
|
248
258
|
}
|
|
249
259
|
|
|
250
260
|
if (isHeaderItem) {
|
|
261
|
+
this.unsetTabIndexByIndex(items, currentSelectedIndex);
|
|
262
|
+
this.setTabIndexByIndex(items, 0);
|
|
251
263
|
this.focusHeader(items[0]);
|
|
252
264
|
return;
|
|
253
265
|
}
|
|
254
266
|
|
|
267
|
+
this.unsetTabIndexByIndex(items, currentSelectedIndex);
|
|
268
|
+
this.setTabIndexByIndex(items, 0);
|
|
255
269
|
items[0].focus();
|
|
256
270
|
}
|
|
257
271
|
}
|
|
@@ -260,10 +274,37 @@ class UDExList extends UI5Element {
|
|
|
260
274
|
if (isEnd(e)) {
|
|
261
275
|
e.preventDefault();
|
|
262
276
|
const items = this.getKeyboardNavigationItems();
|
|
277
|
+
const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);
|
|
278
|
+
|
|
279
|
+
this.unsetTabIndexByIndex(items, currentSelectedIndex);
|
|
280
|
+
this.setTabIndexByIndex(items, items.length - 1);
|
|
263
281
|
items[items.length - 1].focus();
|
|
264
282
|
}
|
|
265
283
|
}
|
|
266
284
|
|
|
285
|
+
onItemPress(clickedItem :UDExListItemBase) {
|
|
286
|
+
if (this.modeSingleSelect && !this.controlled) {
|
|
287
|
+
this.revertSelectedItems(this.getSelectedItems());
|
|
288
|
+
clickedItem.selected = true;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
if (this.modeRadioGroup && !this.controlled) {
|
|
292
|
+
const groupHeader = clickedItem.parentElement as UDExListGroupHeaderBase;
|
|
293
|
+
const groupItems = groupHeader.getItems() as Array<UDExListItemBase>;
|
|
294
|
+
this.revertSelectedItems(groupItems);
|
|
295
|
+
clickedItem.selected = true;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
this.resetTabIndexes();
|
|
299
|
+
clickedItem._tabIndex = "0";
|
|
300
|
+
|
|
301
|
+
this.fireEvent("selection-change", {
|
|
302
|
+
listItems: this.getItemsFromList(),
|
|
303
|
+
selectedItems: this.getSelectedItems(),
|
|
304
|
+
item: clickedItem,
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
|
|
267
308
|
revertSelectedItems(items: Array<UDExListItemBase>) {
|
|
268
309
|
items.forEach((item: UDExListItemBase) => {
|
|
269
310
|
if (!item.disabled) {
|
|
@@ -277,6 +318,14 @@ class UDExList extends UI5Element {
|
|
|
277
318
|
header.focus();
|
|
278
319
|
}
|
|
279
320
|
|
|
321
|
+
unsetTabIndexByIndex(items: UDExListItemBase[], index: number) {
|
|
322
|
+
items[index]._tabIndex = "-1";
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
setTabIndexByIndex(items: UDExListItemBase[], index: number) {
|
|
326
|
+
items[index]._tabIndex = "0";
|
|
327
|
+
}
|
|
328
|
+
|
|
280
329
|
getItems(): Array<UDExListItemBase> {
|
|
281
330
|
return this.getSlottedNodes<UDExListItemBase>("items");
|
|
282
331
|
}
|
|
@@ -311,15 +360,37 @@ class UDExList extends UI5Element {
|
|
|
311
360
|
}
|
|
312
361
|
|
|
313
362
|
prepareListItemsMode() {
|
|
314
|
-
|
|
315
|
-
slottedItems.forEach(item => {
|
|
363
|
+
this.getItemsFromList().forEach((item, index) => {
|
|
316
364
|
item.mode = this.mode;
|
|
317
365
|
item.controlled = this.controlled;
|
|
318
366
|
item.type = this.type;
|
|
319
367
|
item._icon = this.itemIcon;
|
|
368
|
+
item._tabIndex = this.getTabIndex(index, item);
|
|
320
369
|
});
|
|
321
370
|
}
|
|
322
371
|
|
|
372
|
+
getTabIndex(index: number, item: UDExListItemBase): string {
|
|
373
|
+
if ((item.modeSingleSelect || this.modeRadioGroup) && this.isGroupList && index === 1) {
|
|
374
|
+
return "0";
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
if (this.modeSelected && index === 0) {
|
|
378
|
+
return "0";
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
return "-1";
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
resetTabIndexes() {
|
|
385
|
+
this.getItemsFromList().forEach(item => {
|
|
386
|
+
item._tabIndex = "-1";
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
get isGroupList(): boolean {
|
|
391
|
+
return this.getItemsFromList().some(item => item.isGroup);
|
|
392
|
+
}
|
|
393
|
+
|
|
323
394
|
get ariaLabelModeText(): string {
|
|
324
395
|
if (this.modeSingleSelect || this.modeRadioGroup) {
|
|
325
396
|
return UDExList.i18nBundle.getText(ARIA_LABEL_LIST_SELECTABLE);
|
package/src/ListGroupHeader.hbs
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
<li
|
|
2
2
|
part="item"
|
|
3
|
-
class="udex-list__group"
|
|
3
|
+
class="udex-list__group"
|
|
4
|
+
role="group"
|
|
5
|
+
aria-labelledby="group-heading">
|
|
4
6
|
<ul
|
|
5
7
|
class="udex-list__group-list"
|
|
6
8
|
@ui5-item-press="{{getHandleGroupItemsClick}}">
|
|
@@ -15,7 +17,7 @@
|
|
|
15
17
|
|
|
16
18
|
{{#*inline "multi-or-radio-group-header"}}
|
|
17
19
|
{{#if isNonActiveHeader}}
|
|
18
|
-
<header class="udex-list__inactive-header"
|
|
20
|
+
<header id="group-heading" class="udex-list__inactive-header">
|
|
19
21
|
<span class="udex-list__header-title">{{label}}</span>
|
|
20
22
|
{{#if supportingText}}
|
|
21
23
|
<span class="udex-list__supporting-text ">{{supportingText}}</span>
|
|
@@ -23,11 +25,13 @@
|
|
|
23
25
|
</header>
|
|
24
26
|
{{else}}
|
|
25
27
|
<udex-list-item
|
|
28
|
+
id="group-heading"
|
|
26
29
|
_additional-class-name="{{_additionalClassName}}"
|
|
27
30
|
?selected="{{selected}}"
|
|
31
|
+
_tab-index="{{_effectiveTabIndex}}"
|
|
28
32
|
?indeterminate="{{indeterminate}}"
|
|
29
33
|
part="group-item"
|
|
30
|
-
role="
|
|
34
|
+
role="none"
|
|
31
35
|
class="{{className}}"
|
|
32
36
|
mode="{{mode}}"
|
|
33
37
|
?controlled="{{controlled}}"
|
|
@@ -55,8 +59,8 @@
|
|
|
55
59
|
part="icon">
|
|
56
60
|
</ui5-icon>
|
|
57
61
|
{{/if}}
|
|
58
|
-
<div class="udex-list__header"
|
|
59
|
-
<span class="udex-list__header-title">{{label}}</span>
|
|
62
|
+
<div class="udex-list__header">
|
|
63
|
+
<span id="group-heading" class="udex-list__header-title">{{label}}</span>
|
|
60
64
|
{{#if supportingText}}
|
|
61
65
|
<span class="udex-list__supporting-text {{sizeClass}}">{{supportingText}}</span>
|
|
62
66
|
{{/if}}
|
package/src/ListItem.hbs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<li
|
|
3
3
|
part="item"
|
|
4
4
|
role="{{roleItem}}"
|
|
5
|
-
tabindex="{{
|
|
5
|
+
tabindex="{{_effectiveTabIndex}}"
|
|
6
6
|
aria-disabled="{{_ariaDisabled}}"
|
|
7
7
|
aria-labelledby="{{_accessibleNameRef}}"
|
|
8
8
|
class="{{className}}"
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
@focusin="{{handleFocusIn}}"
|
|
15
15
|
@focusout="{{handleFocusOut}}"
|
|
16
16
|
aria-selected="{{selected}}"
|
|
17
|
+
aria-current="{{selected}}"
|
|
17
18
|
?divider="{{divider}}"
|
|
18
19
|
_id="{{this._id}}">
|
|
19
20
|
{{#if modeMultiSelect}}
|
package/src/ListItem.ts
CHANGED
|
@@ -371,13 +371,6 @@ class UDExListItem extends UDExListItemBase {
|
|
|
371
371
|
return this.disabled ? true : undefined;
|
|
372
372
|
}
|
|
373
373
|
|
|
374
|
-
get _tabIndex() {
|
|
375
|
-
if (this.disabled) {
|
|
376
|
-
return -1;
|
|
377
|
-
}
|
|
378
|
-
return 0;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
374
|
get modeSingleContent() {
|
|
382
375
|
return this.mode === ListMode.SingleContent;
|
|
383
376
|
}
|
package/src/ListItemBase.ts
CHANGED
|
@@ -111,6 +111,16 @@ class UDExListItemBase extends UI5Element {
|
|
|
111
111
|
@property({ type: String, defaultValue: "" })
|
|
112
112
|
_icon?: string;
|
|
113
113
|
|
|
114
|
+
@property({ type: String })
|
|
115
|
+
_tabIndex!: number | string;
|
|
116
|
+
|
|
117
|
+
get _effectiveTabIndex() {
|
|
118
|
+
if (this.disabled) {
|
|
119
|
+
return -1;
|
|
120
|
+
}
|
|
121
|
+
return this._tabIndex;
|
|
122
|
+
}
|
|
123
|
+
|
|
114
124
|
get numberOfItem() {
|
|
115
125
|
return [...this.parentNode!.children].indexOf(this) + 1;
|
|
116
126
|
}
|
|
@@ -127,6 +137,10 @@ class UDExListItemBase extends UI5Element {
|
|
|
127
137
|
return this.mode === ListMode.MultiSelect;
|
|
128
138
|
}
|
|
129
139
|
|
|
140
|
+
get modeSingleSelect() {
|
|
141
|
+
return this.mode === ListMode.SingleSelect;
|
|
142
|
+
}
|
|
143
|
+
|
|
130
144
|
get modeMultiSelectOrRadioGroup() {
|
|
131
145
|
return this.modeMultiSelect || this.modeRadioGroup;
|
|
132
146
|
}
|
package/src/ListSelectAll.hbs
CHANGED
package/src/PhoneNumberField.ts
CHANGED
|
@@ -260,7 +260,7 @@ class UDExPhoneNumberField extends UI5Element {
|
|
|
260
260
|
|
|
261
261
|
static i18nBundle: I18nBundle;
|
|
262
262
|
_dropdown!: UDExDropdown;
|
|
263
|
-
_handleResizeBound: ResizeObserverCallback
|
|
263
|
+
_handleResizeBound: ResizeObserverCallback;
|
|
264
264
|
|
|
265
265
|
static async onDefine() {
|
|
266
266
|
UDExPhoneNumberField.i18nBundle = await getI18nBundle("sap-ui-webcomponents-bundle");
|
package/src/Search.hbs
CHANGED
|
@@ -30,9 +30,10 @@
|
|
|
30
30
|
class="udex-search__field"
|
|
31
31
|
autocomplete="off"
|
|
32
32
|
role="combobox"
|
|
33
|
-
aria-controls="
|
|
33
|
+
aria-controls="{{getAriaControls}}"
|
|
34
34
|
aria-expanded="false"
|
|
35
35
|
aria-haspopup="{{showSuggestedPopover}}"
|
|
36
|
+
aria-label="Search"
|
|
36
37
|
placeholder="{{label}}"
|
|
37
38
|
.value="{{value}}"
|
|
38
39
|
@input="{{handleSearchChange}}"
|
|
@@ -56,7 +57,7 @@
|
|
|
56
57
|
autocomplete="off"
|
|
57
58
|
role="combobox"
|
|
58
59
|
aria-label="{{accInfo.ariaLabel}}"
|
|
59
|
-
aria-controls="
|
|
60
|
+
aria-controls="{{getAriaControls}}"
|
|
60
61
|
aria-expanded="false"
|
|
61
62
|
aria-haspopup="{{showSuggestedPopover}}"
|
|
62
63
|
.value="{{value}}"
|