@sapudex/web-components 2.53.0 → 2.55.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 +3 -1
- package/cypress/specs/FilterMenu.cy.tsx +68 -2
- package/cypress/specs/Footer.cy.tsx +59 -0
- package/cypress/specs/MediaPlayer.cy.tsx +58 -0
- package/cypress/specs/SecondaryNavigationDesktop.cy.tsx +2 -2
- package/cypress/specs/SelectBox.cy.tsx +117 -0
- package/dist/Accordion.js +1 -1
- package/dist/Accordion.js.map +1 -1
- package/dist/AccordionItem.js +1 -1
- package/dist/AccordionItem.js.map +1 -1
- package/dist/Avatar.d.ts +2 -2
- package/dist/Avatar.js +1 -1
- package/dist/Avatar.js.map +1 -1
- package/dist/Badge.js +1 -1
- package/dist/Badge.js.map +1 -1
- package/dist/Breadcrumbs.js +1 -1
- package/dist/Breadcrumbs.js.map +1 -1
- package/dist/BreadcrumbsTemplate.js +1 -1
- package/dist/BreadcrumbsTemplate.js.map +1 -1
- package/dist/Carousel.js +1 -1
- package/dist/Carousel.js.map +1 -1
- package/dist/Contact.js +1 -1
- package/dist/Contact.js.map +1 -1
- package/dist/ContactItem.js +1 -1
- package/dist/ContactItem.js.map +1 -1
- package/dist/Feed.d.ts +2 -1
- package/dist/Feed.js +1 -1
- package/dist/Feed.js.map +1 -1
- package/dist/FeedItem.d.ts +2 -1
- package/dist/FeedItem.js +1 -1
- package/dist/FeedItem.js.map +1 -1
- package/dist/FilterMenu.d.ts +1 -1
- package/dist/FilterMenu.js +6 -6
- package/dist/FilterMenu.js.map +1 -1
- package/dist/FilterMenuGroupHeader.js +1 -1
- package/dist/FilterMenuGroupHeader.js.map +1 -1
- package/dist/Footer.d.ts +22 -2
- package/dist/Footer.js +41 -4
- package/dist/Footer.js.map +1 -1
- package/dist/FooterTemplate.js +7 -2
- package/dist/FooterTemplate.js.map +1 -1
- package/dist/ImageGridCloud.js +1 -1
- package/dist/ImageGridCloud.js.map +1 -1
- package/dist/ImageGridTable.js +1 -1
- package/dist/ImageGridTable.js.map +1 -1
- package/dist/ImageGridTableItem.js +1 -1
- package/dist/ImageGridTableItem.js.map +1 -1
- package/dist/ImageGridTicker.js +1 -1
- package/dist/ImageGridTicker.js.map +1 -1
- package/dist/InputGroup.js +1 -1
- package/dist/InputGroup.js.map +1 -1
- package/dist/LinkList.js +1 -1
- package/dist/LinkList.js.map +1 -1
- package/dist/List.js +7 -7
- package/dist/List.js.map +1 -1
- package/dist/ListGroupHeader.js +12 -5
- package/dist/ListGroupHeader.js.map +1 -1
- package/dist/ListGroupHeaderBase.d.ts +1 -1
- package/dist/ListGroupHeaderBase.js +3 -3
- package/dist/ListGroupHeaderBase.js.map +1 -1
- package/dist/ListGroupHeaderTemplate.d.ts +2 -0
- package/dist/ListGroupHeaderTemplate.js +33 -0
- package/dist/ListGroupHeaderTemplate.js.map +1 -0
- package/dist/ListItem.d.ts +3 -3
- package/dist/ListItem.js +5 -4
- package/dist/ListItem.js.map +1 -1
- package/dist/ListItemBase.d.ts +1 -0
- package/dist/ListItemBase.js +8 -4
- package/dist/ListItemBase.js.map +1 -1
- package/dist/ListItemTemplate.d.ts +2 -0
- package/dist/ListItemTemplate.js +18 -0
- package/dist/ListItemTemplate.js.map +1 -0
- package/dist/ListSelectAll.js +4 -5
- package/dist/ListSelectAll.js.map +1 -1
- package/dist/ListSelectAllTemplate.d.ts +2 -0
- package/dist/ListSelectAllTemplate.js +6 -0
- package/dist/ListSelectAllTemplate.js.map +1 -0
- package/dist/ListTemplate.d.ts +2 -0
- package/dist/ListTemplate.js +11 -0
- package/dist/ListTemplate.js.map +1 -0
- package/dist/MastheadItem.d.ts +3 -3
- package/dist/MastheadItem.js +1 -1
- package/dist/MastheadItem.js.map +1 -1
- package/dist/MastheadMobileMenu.d.ts +3 -3
- package/dist/MastheadMobileMenu.js +1 -1
- package/dist/MastheadMobileMenu.js.map +1 -1
- package/dist/MastheadProfileMenu.d.ts +3 -2
- package/dist/MastheadProfileMenu.js +1 -1
- package/dist/MastheadProfileMenu.js.map +1 -1
- package/dist/MastheadShell.d.ts +9 -9
- package/dist/MastheadShell.js +1 -1
- package/dist/MastheadShell.js.map +1 -1
- package/dist/MediaPlayer.d.ts +1 -1
- package/dist/MediaPlayer.js +11 -3
- package/dist/MediaPlayer.js.map +1 -1
- package/dist/MediaPlayerVimeo.d.ts +6 -0
- package/dist/MediaPlayerVimeo.js +27 -6
- package/dist/MediaPlayerVimeo.js.map +1 -1
- package/dist/MediaPlayerYoutube.d.ts +3 -0
- package/dist/MediaPlayerYoutube.js +24 -5
- package/dist/MediaPlayerYoutube.js.map +1 -1
- package/dist/MessageStrip.d.ts +2 -1
- package/dist/MessageStrip.js +1 -1
- package/dist/MessageStrip.js.map +1 -1
- package/dist/Modal.d.ts +2 -0
- package/dist/Modal.js +10 -3
- package/dist/Modal.js.map +1 -1
- package/dist/PromoTile.d.ts +2 -2
- package/dist/PromoTile.js +1 -1
- package/dist/PromoTile.js.map +1 -1
- package/dist/Quote.d.ts +4 -4
- package/dist/Quote.js +1 -1
- package/dist/Quote.js.map +1 -1
- package/dist/Review.d.ts +3 -3
- package/dist/Review.js +1 -1
- package/dist/Review.js.map +1 -1
- package/dist/ReviewItem.d.ts +4 -3
- package/dist/ReviewItem.js +1 -1
- package/dist/ReviewItem.js.map +1 -1
- package/dist/Search.js +1 -1
- package/dist/Search.js.map +1 -1
- package/dist/SearchableListBase.js +5 -1
- package/dist/SearchableListBase.js.map +1 -1
- package/dist/SecondaryNavigation.d.ts +3 -3
- package/dist/SecondaryNavigation.js +1 -1
- package/dist/SecondaryNavigation.js.map +1 -1
- package/dist/SecondaryNavigationItem.d.ts +2 -1
- package/dist/SecondaryNavigationItem.js +1 -1
- package/dist/SecondaryNavigationItem.js.map +1 -1
- package/dist/SelectBase.js +1 -1
- package/dist/SelectBase.js.map +1 -1
- package/dist/SelectBox.js +31 -0
- package/dist/SelectBox.js.map +1 -1
- package/dist/SelectBoxGroupHeader.js +1 -1
- package/dist/SelectBoxGroupHeader.js.map +1 -1
- package/dist/SelectBoxItem.d.ts +3 -3
- package/dist/SelectBoxItem.js +1 -1
- package/dist/SelectBoxItem.js.map +1 -1
- package/dist/SelectBoxTemplate.js +2 -1
- package/dist/SelectBoxTemplate.js.map +1 -1
- package/dist/SideNavigationMobile.d.ts +2 -2
- package/dist/SideNavigationMobile.js +1 -1
- package/dist/SideNavigationMobile.js.map +1 -1
- package/dist/SocialMediaButton.js +1 -1
- package/dist/SocialMediaButton.js.map +1 -1
- package/dist/Tab.d.ts +2 -2
- package/dist/Tab.js +1 -1
- package/dist/Tab.js.map +1 -1
- package/dist/TabNavigation.d.ts +2 -2
- package/dist/TabNavigation.js +1 -1
- package/dist/TabNavigation.js.map +1 -1
- package/dist/Table.d.ts +5 -5
- package/dist/Table.js +1 -1
- package/dist/Table.js.map +1 -1
- package/dist/TableCellBase.js +1 -1
- package/dist/TableCellBase.js.map +1 -1
- package/dist/TableGroupRow.js +1 -1
- package/dist/TableGroupRow.js.map +1 -1
- package/dist/TableRowBase.js +1 -1
- package/dist/TableRowBase.js.map +1 -1
- package/dist/TagGroup.js +1 -1
- package/dist/TagGroup.js.map +1 -1
- package/dist/Tile.d.ts +2 -1
- package/dist/Tile.js +1 -1
- package/dist/Tile.js.map +1 -1
- package/dist/Tooltip.d.ts +2 -1
- package/dist/Tooltip.js +1 -1
- package/dist/Tooltip.js.map +1 -1
- package/dist/Wizard.js +1 -1
- package/dist/Wizard.js.map +1 -1
- package/dist/assets/{InputSuggestions-0yCPXAmq.js → InputSuggestions-DPiJnNLn.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-DjZEnCXN.js → ListItemStandardExpandableTextTemplate-B-v72jL6.js} +1 -1
- package/dist/assets/{bundle.esm-DJuMR5ko.js → bundle.esm-DPppjwN7.js} +260 -260
- package/dist/assets/messagebundle_en-B0P3kkb6.js +1 -0
- package/dist/assets/messagebundle_it-BML2SC0W.js +1 -0
- package/dist/assets/messagebundle_ja-zyFfZHcj.js +1 -0
- package/dist/assets/messagebundle_ko-BCPaSqNp.js +1 -0
- package/dist/assets/messagebundle_lt-DB4b6FVx.js +1 -0
- package/dist/assets/messagebundle_lv-tAOia5tU.js +1 -0
- package/dist/css/themes/AccordionItem.css +1 -1
- package/dist/css/themes/Breadcrumbs.css +1 -1
- package/dist/css/themes/BreadcrumbsPopover.css +1 -1
- package/dist/css/themes/Footer.css +1 -1
- package/dist/css/themes/Link.css +1 -1
- package/dist/css/themes/ListGroupHeader.css +1 -1
- package/dist/custom-elements-internal.json +267 -157
- package/dist/custom-elements.json +221 -133
- package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_it.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_ja.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_ko.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_lt.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_lv.json +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +2 -1
- package/dist/generated/i18n/i18n-defaults.js +2 -1
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/themes/AccordionItem.css.d.ts +1 -1
- package/dist/generated/themes/AccordionItem.css.js +1 -1
- package/dist/generated/themes/AccordionItem.css.js.map +1 -1
- package/dist/generated/themes/Breadcrumbs.css.d.ts +1 -1
- package/dist/generated/themes/Breadcrumbs.css.js +1 -1
- package/dist/generated/themes/Breadcrumbs.css.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/Footer.css.d.ts +1 -1
- package/dist/generated/themes/Footer.css.js +1 -1
- package/dist/generated/themes/Footer.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/messagebundle.properties +1 -0
- package/dist/messagebundle_en.properties +1 -0
- package/dist/messagebundle_it.properties +123 -0
- package/dist/messagebundle_ja.properties +127 -1
- package/dist/messagebundle_ko.properties +126 -0
- package/dist/messagebundle_lt.properties +126 -0
- package/dist/messagebundle_lv.properties +9 -0
- package/dist/types/FooterAskJoulePosition.d.ts +5 -0
- package/dist/types/FooterAskJoulePosition.js +7 -0
- package/dist/types/FooterAskJoulePosition.js.map +1 -0
- package/dist/vscode.html-custom-data.json +13 -3
- package/dist/web-types.json +56 -9
- package/package.json +1 -1
- package/src/Accordion.ts +1 -1
- package/src/AccordionItem.ts +1 -1
- package/src/Avatar.ts +3 -3
- package/src/Badge.ts +1 -1
- package/src/Breadcrumbs.ts +1 -1
- package/src/BreadcrumbsTemplate.tsx +12 -10
- package/src/Carousel.ts +1 -1
- package/src/Contact.ts +1 -1
- package/src/ContactItem.ts +1 -1
- package/src/Feed.ts +3 -2
- package/src/FeedItem.ts +3 -2
- package/src/FilterMenu.ts +6 -6
- package/src/FilterMenuGroupHeader.ts +1 -1
- package/src/Footer.ts +44 -5
- package/src/FooterTemplate.tsx +28 -4
- package/src/ImageGridCloud.ts +1 -1
- package/src/ImageGridTable.ts +1 -1
- package/src/ImageGridTableItem.ts +1 -1
- package/src/ImageGridTicker.ts +1 -1
- package/src/InputGroup.ts +1 -1
- package/src/LinkList.ts +1 -1
- package/src/List.ts +9 -9
- package/src/ListGroupHeader.ts +12 -5
- package/src/ListGroupHeaderBase.ts +4 -4
- package/src/ListGroupHeaderTemplate.tsx +228 -0
- package/src/ListItem.ts +8 -7
- package/src/ListItemBase.ts +9 -4
- package/src/ListItemTemplate.tsx +193 -0
- package/src/ListSelectAll.ts +4 -5
- package/src/ListSelectAllTemplate.tsx +38 -0
- package/src/ListTemplate.tsx +60 -0
- package/src/MastheadItem.ts +4 -4
- package/src/MastheadMobileMenu.ts +4 -4
- package/src/MastheadProfileMenu.ts +4 -3
- package/src/MastheadShell.ts +10 -10
- package/src/MediaPlayer.ts +11 -4
- package/src/MediaPlayerVimeo.ts +31 -6
- package/src/MediaPlayerYoutube.ts +24 -5
- package/src/MessageStrip.ts +3 -2
- package/src/Modal.ts +18 -3
- package/src/PromoTile.ts +3 -3
- package/src/Quote.ts +5 -5
- package/src/Review.ts +4 -4
- package/src/ReviewItem.ts +5 -4
- package/src/Search.ts +1 -1
- package/src/SearchableListBase.ts +6 -1
- package/src/SecondaryNavigation.ts +4 -4
- package/src/SecondaryNavigationItem.ts +3 -2
- package/src/SelectBase.ts +1 -1
- package/src/SelectBox.ts +34 -0
- package/src/SelectBoxGroupHeader.ts +1 -1
- package/src/SelectBoxItem.ts +4 -4
- package/src/SelectBoxTemplate.tsx +2 -0
- package/src/SideNavigationMobile.ts +3 -3
- package/src/SocialMediaButton.ts +1 -1
- package/src/Tab.ts +3 -3
- package/src/TabNavigation.ts +3 -3
- package/src/Table.ts +6 -6
- package/src/TableCellBase.ts +1 -1
- package/src/TableGroupRow.ts +1 -1
- package/src/TableRowBase.ts +1 -1
- package/src/TagGroup.ts +1 -1
- package/src/Tile.ts +3 -2
- package/src/Tooltip.ts +3 -2
- package/src/Wizard.ts +1 -1
- package/src/generated/i18n/i18n-defaults.ts +2 -2
- package/src/generated/themes/AccordionItem.css.ts +1 -1
- package/src/generated/themes/Breadcrumbs.css.ts +1 -1
- package/src/generated/themes/BreadcrumbsPopover.css.ts +1 -1
- package/src/generated/themes/Footer.css.ts +1 -1
- package/src/generated/themes/Link.css.ts +1 -1
- package/src/generated/themes/ListGroupHeader.css.ts +1 -1
- package/src/i18n/messagebundle.properties +1 -0
- package/src/i18n/messagebundle_en.properties +1 -0
- package/src/i18n/messagebundle_it.properties +123 -0
- package/src/i18n/messagebundle_ja.properties +127 -1
- package/src/i18n/messagebundle_ko.properties +126 -0
- package/src/i18n/messagebundle_lt.properties +126 -0
- package/src/i18n/messagebundle_lv.properties +9 -0
- package/src/themes/AccordionItem.css +2 -2
- package/src/themes/Breadcrumbs.css +46 -5
- package/src/themes/BreadcrumbsPopover.css +65 -0
- package/src/themes/Footer.css +99 -2
- package/src/themes/Link.css +127 -8
- package/src/themes/ListGroupHeader.css +6 -3
- package/src/types/FooterAskJoulePosition.ts +6 -0
- package/dist/assets/messagebundle_en-DoNTK1BE.js +0 -1
- package/dist/assets/messagebundle_it-BhrBdOd4.js +0 -1
- package/dist/assets/messagebundle_ja-5P5L7sQ1.js +0 -1
- package/dist/assets/messagebundle_ko-B9H5YQlC.js +0 -1
- package/dist/assets/messagebundle_lt-BJ5gr_LF.js +0 -1
- package/dist/assets/messagebundle_lv-D06tlATH.js +0 -1
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.js +0 -30
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.js.map +0 -1
- package/dist/generated/templates/ListItemTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/ListItemTemplate.lit.js +0 -49
- package/dist/generated/templates/ListItemTemplate.lit.js.map +0 -1
- package/dist/generated/templates/ListSelectAllTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/ListSelectAllTemplate.lit.js +0 -7
- package/dist/generated/templates/ListSelectAllTemplate.lit.js.map +0 -1
- package/dist/generated/templates/ListTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/ListTemplate.lit.js +0 -11
- package/dist/generated/templates/ListTemplate.lit.js.map +0 -1
- package/src/List.hbs +0 -38
- package/src/ListGroupHeader.hbs +0 -188
- package/src/ListItem.hbs +0 -166
- package/src/ListSelectAll.hbs +0 -31
- package/src/generated/templates/ListGroupHeaderTemplate.lit.ts +0 -34
- package/src/generated/templates/ListItemTemplate.lit.ts +0 -53
- package/src/generated/templates/ListSelectAllTemplate.lit.ts +0 -11
- package/src/generated/templates/ListTemplate.lit.ts +0 -15
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import type { AriaRole } from "@ui5/webcomponents-base/dist/types.js";
|
|
2
|
+
import type UDExListItem from "./ListItem.js";
|
|
3
|
+
import UDExCheckbox from "./Checkbox.js";
|
|
4
|
+
import UDExRadioButton from "./RadioButton.js";
|
|
5
|
+
import Icon from "@ui5/webcomponents/dist/Icon.js";
|
|
6
|
+
import UDExAvatar from "./Avatar.js";
|
|
7
|
+
import UDExStatusBadge from "./StatusBadge.js";
|
|
8
|
+
import UDExRatingIndicator from "./RatingIndicator.js";
|
|
9
|
+
import UDExButton from "./Button.js";
|
|
10
|
+
import UDExButtonSize from "./types/ButtonSize.js";
|
|
11
|
+
import UDExButtonDesign from "./types/ButtonDesign.js";
|
|
12
|
+
import slimArrowRight from "@ui5/webcomponents-icons/dist/slim-arrow-right.js";
|
|
13
|
+
|
|
14
|
+
function ContentList(this: UDExListItem) {
|
|
15
|
+
return (
|
|
16
|
+
<div
|
|
17
|
+
class="udex-list__content-wrap"
|
|
18
|
+
{...({ "_id": this._id } as object)}
|
|
19
|
+
aria-labelledby={`${this._id}-invisibleText`}
|
|
20
|
+
aria-label={this.accessibleListItemName}>
|
|
21
|
+
{this.flag && (
|
|
22
|
+
<div class="udex-list__flag-wrap">
|
|
23
|
+
<span class="udex-list__flag" style={{ backgroundPosition: this.flagPosition }}></span>
|
|
24
|
+
</div>
|
|
25
|
+
)}
|
|
26
|
+
{this.typeNumber && <span class="udex-list__number">{this.numberOfItem}.</span>}
|
|
27
|
+
{this.typeCircle && <span class="udex-list__circle">•</span>}
|
|
28
|
+
{this.typeIcon && (
|
|
29
|
+
<Icon
|
|
30
|
+
name={this._icon}
|
|
31
|
+
class="udex-list__icon"
|
|
32
|
+
accessible-role="presentation"
|
|
33
|
+
aria-hidden="true"
|
|
34
|
+
part="icon"
|
|
35
|
+
/>
|
|
36
|
+
)}
|
|
37
|
+
{this.image && (
|
|
38
|
+
<UDExAvatar
|
|
39
|
+
class="udex-list__avatar"
|
|
40
|
+
part="avatar"
|
|
41
|
+
shape={this.imageShape}
|
|
42
|
+
size={this.imageSize}>
|
|
43
|
+
{this.imageBadgeState && (
|
|
44
|
+
<UDExStatusBadge
|
|
45
|
+
slot="badge"
|
|
46
|
+
value-state={this.imageBadgeState}
|
|
47
|
+
size={this.imageSize}
|
|
48
|
+
/>
|
|
49
|
+
)}
|
|
50
|
+
<img src={this.image} alt={this.imageAlt} />
|
|
51
|
+
</UDExAvatar>
|
|
52
|
+
)}
|
|
53
|
+
<div class="udex-list__content" part="content">
|
|
54
|
+
{this.label ? (
|
|
55
|
+
<>
|
|
56
|
+
<div class="udex-list__text-holder">
|
|
57
|
+
<span part="title" {...({ innerHTML: this.label } as object)}></span>
|
|
58
|
+
{this.supportingText && (
|
|
59
|
+
<span class="udex-list__supporting-text" part="supporting">{this.supportingText}</span>
|
|
60
|
+
)}
|
|
61
|
+
<slot part="content"></slot>
|
|
62
|
+
{this.hasRating && (
|
|
63
|
+
<UDExRatingIndicator
|
|
64
|
+
aria-label={this.ratingAriaLabel}
|
|
65
|
+
value={this.rating !== undefined ? Number(this.rating) : undefined}
|
|
66
|
+
rating-count={this.ratingCount}
|
|
67
|
+
total-count={this.totalCount}
|
|
68
|
+
max={this.ratingMax}
|
|
69
|
+
display={this._displayRating}
|
|
70
|
+
disabled
|
|
71
|
+
readonly
|
|
72
|
+
/>
|
|
73
|
+
)}
|
|
74
|
+
</div>
|
|
75
|
+
{this.additionalText && (
|
|
76
|
+
<div class="udex-list__add-text" part="additional-text">{this.additionalText}</div>
|
|
77
|
+
)}
|
|
78
|
+
<div class="udex-list__btn-wrap">
|
|
79
|
+
{this.hasFirstIcon && <slot name="firstIcon" onClick={this._fireIconClickEvent as EventListener}></slot>}
|
|
80
|
+
{this.hasSecondIcon && <slot name="secondIcon" onClick={this._fireIconClickEvent as EventListener}></slot>}
|
|
81
|
+
</div>
|
|
82
|
+
</>
|
|
83
|
+
) : (
|
|
84
|
+
<>
|
|
85
|
+
<div class="udex-list__text-holder">
|
|
86
|
+
<slot part="content"></slot>
|
|
87
|
+
{this.supportingText && (
|
|
88
|
+
<span class="udex-list__supporting-text" part="supporting">{this.supportingText}</span>
|
|
89
|
+
)}
|
|
90
|
+
{this.hasRating && (
|
|
91
|
+
<UDExRatingIndicator
|
|
92
|
+
aria-label={this.ratingAriaLabel}
|
|
93
|
+
value={this.rating !== undefined ? Number(this.rating) : undefined}
|
|
94
|
+
rating-count={this.ratingCount}
|
|
95
|
+
total-count={this.totalCount}
|
|
96
|
+
max={this.ratingMax}
|
|
97
|
+
display={this._displayRating}
|
|
98
|
+
disabled
|
|
99
|
+
readonly
|
|
100
|
+
/>
|
|
101
|
+
)}
|
|
102
|
+
</div>
|
|
103
|
+
{this.additionalText && (
|
|
104
|
+
<div class="udex-list__add-text" part="additional-text">{this.additionalText}</div>
|
|
105
|
+
)}
|
|
106
|
+
<div class="udex-list__btn-wrap">
|
|
107
|
+
{this.hasFirstIcon && <slot name="firstIcon" onClick={this._fireIconClickEvent as EventListener}></slot>}
|
|
108
|
+
{this.hasSecondIcon && <slot name="secondIcon" onClick={this._fireIconClickEvent as EventListener}></slot>}
|
|
109
|
+
</div>
|
|
110
|
+
</>
|
|
111
|
+
)}
|
|
112
|
+
{this.collapsible && (
|
|
113
|
+
<div class="udex-list__group-heading__icon-wrapper">
|
|
114
|
+
<UDExButton
|
|
115
|
+
class="udex-list__group-heading__icon"
|
|
116
|
+
size={UDExButtonSize.Small}
|
|
117
|
+
design={UDExButtonDesign.Tertiary}
|
|
118
|
+
onMouseDown={this.handleCollapseIconMouseDown}
|
|
119
|
+
onClick={this.handleCollapseIconClick as EventListener}
|
|
120
|
+
tabindex={-1}
|
|
121
|
+
accessible-name={this.expandButtonAccessibleName}
|
|
122
|
+
{...({ "mode": "Interactive" } as object)}
|
|
123
|
+
icon={slimArrowRight}
|
|
124
|
+
/>
|
|
125
|
+
</div>
|
|
126
|
+
)}
|
|
127
|
+
</div>
|
|
128
|
+
<div class="hidden" id={`${this._id}-invisibleText`}>{this.accessibleListItemName}</div>
|
|
129
|
+
<div class="hidden" id={`${this._id}-invisibleText-describedby`}>{this.itemState}</div>
|
|
130
|
+
</div>
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export default function ListItemTemplate(this: UDExListItem) {
|
|
135
|
+
return (
|
|
136
|
+
<>
|
|
137
|
+
{this.modeSelected && (
|
|
138
|
+
<div
|
|
139
|
+
part="item"
|
|
140
|
+
tabIndex={Number(this._effectiveTabIndex)}
|
|
141
|
+
aria-disabled={this._ariaDisabled}
|
|
142
|
+
class={this.className}
|
|
143
|
+
role={this.roleItem as AriaRole}
|
|
144
|
+
aria-checked={this.ariaCheckedValue}
|
|
145
|
+
aria-selected={this.ariaSelectedValue}
|
|
146
|
+
aria-expanded={this.ariaExpandedValue}
|
|
147
|
+
onFocusIn={this.handleFocusIn}
|
|
148
|
+
onFocusOut={this.handleFocusOut}
|
|
149
|
+
onClick={this.handleItemClick}
|
|
150
|
+
onMouseDown={this.handleMouseDown}
|
|
151
|
+
onMouseUp={this.handleMouseUp}
|
|
152
|
+
onKeyUp={this.handleKeyUp}
|
|
153
|
+
onKeyDown={this.handleKeyDown}
|
|
154
|
+
{...({ divider: this.divider, "_id": this._id } as object)}
|
|
155
|
+
data-selected={this.selected}
|
|
156
|
+
aria-describedby={this.itemDescribedBy}>
|
|
157
|
+
{this.modeMultiSelect && (
|
|
158
|
+
<UDExCheckbox
|
|
159
|
+
class="udex-list__checkbox"
|
|
160
|
+
part="checkbox"
|
|
161
|
+
tabindex={-1}
|
|
162
|
+
indeterminate={this.indeterminate}
|
|
163
|
+
accessible-name={`checkbox ${this.stateAccessibleName}`}
|
|
164
|
+
checked={this.selected}
|
|
165
|
+
disabled={this.disabled}
|
|
166
|
+
aria-hidden={this.checkboxAriaHidden ? "true" : undefined}
|
|
167
|
+
/>
|
|
168
|
+
)}
|
|
169
|
+
{this.modeRadioGroup && (
|
|
170
|
+
<UDExRadioButton
|
|
171
|
+
class="udex-list__radio"
|
|
172
|
+
part="radio"
|
|
173
|
+
tabindex={-1}
|
|
174
|
+
accessible-name={`radio ${this.stateAccessibleName}`}
|
|
175
|
+
checked={this.selected}
|
|
176
|
+
disabled={this.disabled}
|
|
177
|
+
/>
|
|
178
|
+
)}
|
|
179
|
+
{ContentList.call(this)}
|
|
180
|
+
</div>
|
|
181
|
+
)}
|
|
182
|
+
{this.modeSingleContent && (
|
|
183
|
+
<div
|
|
184
|
+
part="item"
|
|
185
|
+
role={this.roleItem as AriaRole}
|
|
186
|
+
aria-selected={this.selected}
|
|
187
|
+
class={this.className}>
|
|
188
|
+
{ContentList.call(this)}
|
|
189
|
+
</div>
|
|
190
|
+
)}
|
|
191
|
+
</>
|
|
192
|
+
);
|
|
193
|
+
}
|
package/src/ListSelectAll.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
2
2
|
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
3
|
-
import
|
|
3
|
+
import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
|
|
4
4
|
import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
|
|
5
5
|
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
6
6
|
import { isEnter, isSpace } from "@ui5/webcomponents-base/dist/Keys.js";
|
|
7
7
|
import UDExListGroupHeaderBase from "./ListGroupHeaderBase.js";
|
|
8
8
|
import { UDExListMode } from "./types/List.js";
|
|
9
9
|
import { SELECT_ALL } from "./generated/i18n/i18n-defaults.js";
|
|
10
|
-
import ListSelectAllTemplate from "./
|
|
11
|
-
import UDExListItem from "./ListItem.js";
|
|
10
|
+
import ListSelectAllTemplate from "./ListSelectAllTemplate.js";
|
|
12
11
|
import type { UDExListItemBaseEvents } from "./ListItemBase.js";
|
|
13
12
|
import translate from "./utils/translate.js";
|
|
14
13
|
|
|
@@ -41,10 +40,10 @@ type UDExListSelectAllSelectAllEventDetail = {
|
|
|
41
40
|
*/
|
|
42
41
|
@customElement({
|
|
43
42
|
tag: "udex-list-select-all",
|
|
44
|
-
renderer:
|
|
43
|
+
renderer: jsxRenderer,
|
|
44
|
+
languageAware: true,
|
|
45
45
|
styles: ListGroupHeaderCss,
|
|
46
46
|
template: ListSelectAllTemplate,
|
|
47
|
-
dependencies: [UDExListItem],
|
|
48
47
|
})
|
|
49
48
|
/**
|
|
50
49
|
* Fired when the user clicks on the Select All header.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type UDExListSelectAll from "./ListSelectAll.js";
|
|
2
|
+
import UDExListItem from "./ListItem.js";
|
|
3
|
+
|
|
4
|
+
export default function ListSelectAllTemplate(this: UDExListSelectAll) {
|
|
5
|
+
return (
|
|
6
|
+
<div
|
|
7
|
+
part="item"
|
|
8
|
+
class="udex-list__group"
|
|
9
|
+
role="group"
|
|
10
|
+
aria-labelledby="group-select-all">
|
|
11
|
+
<div
|
|
12
|
+
role="listbox"
|
|
13
|
+
aria-label="select-all-group"
|
|
14
|
+
class={this.groupListClassName}
|
|
15
|
+
onui5-item-press={this.handleSelectAllGroupItemsPress}>
|
|
16
|
+
<UDExListItem
|
|
17
|
+
role="group"
|
|
18
|
+
part="group-item"
|
|
19
|
+
accessible-role="option"
|
|
20
|
+
mode={this.multiselectMode}
|
|
21
|
+
onClick={this.handleSelectAllPress}
|
|
22
|
+
class={this.className}
|
|
23
|
+
selected={this.selected}
|
|
24
|
+
aria-current={this.selected}
|
|
25
|
+
indeterminate={this.indeterminate}
|
|
26
|
+
controlled={this.controlled}
|
|
27
|
+
onKeyDown={this.handleKeyDownPress}
|
|
28
|
+
_tab-index={Number(this._effectiveTabIndex)}
|
|
29
|
+
_additional-class-name={this.additionalClassName}
|
|
30
|
+
supportingText={this.supportingText}
|
|
31
|
+
divider>
|
|
32
|
+
{this.selectAllLabel}
|
|
33
|
+
</UDExListItem>
|
|
34
|
+
<slot></slot>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type UDExList from "./List.js";
|
|
2
|
+
import type { AriaRole } from "@ui5/webcomponents-base/types.js";
|
|
3
|
+
|
|
4
|
+
export default function ListTemplate(this: UDExList) {
|
|
5
|
+
return (
|
|
6
|
+
<>
|
|
7
|
+
{this.modeSelected && (
|
|
8
|
+
<div
|
|
9
|
+
class="udex-list-root"
|
|
10
|
+
onKeyDown={this.handleKeyDown}
|
|
11
|
+
style={{ height: this.holderHeight }}
|
|
12
|
+
onui5-item-press={this.handleItemPress}
|
|
13
|
+
onui5-header-press={this.handleItemPress}>
|
|
14
|
+
<div class="udex-list__scroll-container">
|
|
15
|
+
{HeaderText.call(this)}
|
|
16
|
+
<span id={`${this._id}-mode-label`} class="udex-list__hidden-text">
|
|
17
|
+
{this.ariaLabelModeText}
|
|
18
|
+
</span>
|
|
19
|
+
<div
|
|
20
|
+
id="udex-list"
|
|
21
|
+
class="udex-list"
|
|
22
|
+
role={this.effectiveAccessibleRole as AriaRole}
|
|
23
|
+
aria-labelledby={this.ariaLabelledBy}
|
|
24
|
+
aria-multiselectable={this._listAriaMultiSelectable as "true" | undefined}
|
|
25
|
+
aria-busy={(this.ariaBusy ?? undefined) as "true" | "false" | undefined}>
|
|
26
|
+
<slot></slot>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
)}
|
|
31
|
+
{this.modeSingleContent && (
|
|
32
|
+
<>
|
|
33
|
+
{HeaderText.call(this)}
|
|
34
|
+
<div
|
|
35
|
+
id="udex-list"
|
|
36
|
+
class="udex-list"
|
|
37
|
+
role={this.accessibleRole as AriaRole}
|
|
38
|
+
aria-label={this.singleContentAriaLabel}
|
|
39
|
+
aria-busy={(this.ariaBusy ?? undefined) as "true" | "false" | undefined}>
|
|
40
|
+
<slot></slot>
|
|
41
|
+
</div>
|
|
42
|
+
</>
|
|
43
|
+
)}
|
|
44
|
+
</>
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function HeaderText(this: UDExList) {
|
|
49
|
+
if (!this.headerText) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
return (
|
|
53
|
+
<header
|
|
54
|
+
id={`${this._id}-mode-label`}
|
|
55
|
+
class="udex-list__header-text"
|
|
56
|
+
part="header">
|
|
57
|
+
{this.headerText}
|
|
58
|
+
</header>
|
|
59
|
+
);
|
|
60
|
+
}
|
package/src/MastheadItem.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
2
|
-
import type { DefaultSlot, ChangeInfo } from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
2
|
+
import type { DefaultSlot, Slot, ChangeInfo } from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
3
3
|
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
4
4
|
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
5
|
-
import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
|
|
5
|
+
import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
|
|
6
6
|
import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
|
|
7
7
|
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
8
8
|
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
@@ -299,7 +299,7 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
299
299
|
* @public
|
|
300
300
|
*/
|
|
301
301
|
@slot({ type: HTMLElement })
|
|
302
|
-
dropdown
|
|
302
|
+
dropdown!: Slot<HTMLElement>;
|
|
303
303
|
|
|
304
304
|
/**
|
|
305
305
|
* Slot for any content
|
|
@@ -308,7 +308,7 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
308
308
|
* @public
|
|
309
309
|
*/
|
|
310
310
|
@slot({ type: HTMLElement, "default": true })
|
|
311
|
-
content
|
|
311
|
+
content!: DefaultSlot<HTMLElement>;
|
|
312
312
|
|
|
313
313
|
/**
|
|
314
314
|
* Defines the prevents the item from losing focus.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
2
|
-
import type { DefaultSlot } from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
2
|
+
import type { DefaultSlot, Slot } from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
3
3
|
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
4
4
|
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
5
5
|
import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
|
|
6
|
-
import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
|
|
6
|
+
import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
|
|
7
7
|
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
8
8
|
import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
|
|
9
9
|
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
@@ -106,7 +106,7 @@ class UDExMastheadMobileMenu extends UI5Element {
|
|
|
106
106
|
* @public
|
|
107
107
|
*/
|
|
108
108
|
@slot({ type: Node })
|
|
109
|
-
search!:
|
|
109
|
+
search!: Slot<Node>;
|
|
110
110
|
|
|
111
111
|
/**
|
|
112
112
|
* List of the menu items
|
|
@@ -124,7 +124,7 @@ class UDExMastheadMobileMenu extends UI5Element {
|
|
|
124
124
|
* @public
|
|
125
125
|
*/
|
|
126
126
|
@slot({ type: HTMLElement })
|
|
127
|
-
exploreSapMobileButton
|
|
127
|
+
exploreSapMobileButton!: Slot<UDExMastheadItem>;
|
|
128
128
|
|
|
129
129
|
@property({ type: Boolean })
|
|
130
130
|
_showCategories!: boolean;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
2
|
+
import type { Slot } from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
2
3
|
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
3
4
|
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
4
|
-
import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
|
|
5
|
+
import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
|
|
5
6
|
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
6
7
|
import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
|
|
7
8
|
import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
|
|
@@ -215,7 +216,7 @@ class UDExMastheadProfileMenu extends UI5Element {
|
|
|
215
216
|
* @public
|
|
216
217
|
*/
|
|
217
218
|
@slot({ type: Node, "default": false })
|
|
218
|
-
message!:
|
|
219
|
+
message!: Slot<Node>;
|
|
219
220
|
|
|
220
221
|
/**
|
|
221
222
|
* Slot for logout button.
|
|
@@ -223,7 +224,7 @@ class UDExMastheadProfileMenu extends UI5Element {
|
|
|
223
224
|
* @public
|
|
224
225
|
*/
|
|
225
226
|
@slot({ type: HTMLElement })
|
|
226
|
-
logoutButton!:
|
|
227
|
+
logoutButton!: Slot<Node>;
|
|
227
228
|
|
|
228
229
|
@i18n("@sapudex/web-components")
|
|
229
230
|
static i18nBundle: I18nBundle;
|
package/src/MastheadShell.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
2
2
|
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
3
3
|
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
4
|
-
import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
|
|
4
|
+
import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
|
|
5
5
|
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
6
|
-
import type { DefaultSlot, ChangeInfo } from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
6
|
+
import type { DefaultSlot, Slot, ChangeInfo } from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
7
7
|
import UI5Icon from "@ui5/webcomponents/dist/Icon.js";
|
|
8
8
|
import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
|
|
9
9
|
import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
@@ -259,7 +259,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
259
259
|
* @public
|
|
260
260
|
*/
|
|
261
261
|
@slot({ type: Node })
|
|
262
|
-
countrySelector!:
|
|
262
|
+
countrySelector!: Slot<UDExMastheadItem>;
|
|
263
263
|
|
|
264
264
|
/**
|
|
265
265
|
* Slot for mobile menu
|
|
@@ -267,7 +267,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
267
267
|
* @public
|
|
268
268
|
*/
|
|
269
269
|
@slot({ type: HTMLElement })
|
|
270
|
-
mobileMenu!:
|
|
270
|
+
mobileMenu!: Slot<Node>;
|
|
271
271
|
|
|
272
272
|
/**
|
|
273
273
|
* Slot for main menu items.
|
|
@@ -285,7 +285,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
285
285
|
* @public
|
|
286
286
|
*/
|
|
287
287
|
@slot({ type: Node })
|
|
288
|
-
search!:
|
|
288
|
+
search!: Slot<Node>;
|
|
289
289
|
|
|
290
290
|
/**
|
|
291
291
|
* Slot for 'Explore SAP' menu
|
|
@@ -293,7 +293,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
293
293
|
* @public
|
|
294
294
|
*/
|
|
295
295
|
@slot({ type: HTMLElement })
|
|
296
|
-
exploreSAP!:
|
|
296
|
+
exploreSAP!: Slot<UDExMastheadItem>;
|
|
297
297
|
|
|
298
298
|
/**
|
|
299
299
|
* Slot for cart menu
|
|
@@ -301,7 +301,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
301
301
|
* @public
|
|
302
302
|
*/
|
|
303
303
|
@slot({ type: HTMLElement })
|
|
304
|
-
cart!:
|
|
304
|
+
cart!: Slot<UDExMastheadItem>;
|
|
305
305
|
|
|
306
306
|
/**
|
|
307
307
|
* Slot for joule menu
|
|
@@ -309,7 +309,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
309
309
|
* @public
|
|
310
310
|
*/
|
|
311
311
|
@slot({ type: HTMLElement })
|
|
312
|
-
joule!:
|
|
312
|
+
joule!: Slot<UDExMastheadItem>;
|
|
313
313
|
|
|
314
314
|
/**
|
|
315
315
|
* Slot for avatar
|
|
@@ -317,7 +317,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
317
317
|
* @public
|
|
318
318
|
*/
|
|
319
319
|
@slot({ type: HTMLElement })
|
|
320
|
-
profile!:
|
|
320
|
+
profile!: Slot<UDExMastheadItem>;
|
|
321
321
|
|
|
322
322
|
/**
|
|
323
323
|
* Slot for support
|
|
@@ -325,7 +325,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
325
325
|
* @public
|
|
326
326
|
*/
|
|
327
327
|
@slot({ type: HTMLElement })
|
|
328
|
-
support!:
|
|
328
|
+
support!: Slot<UDExMastheadItem>;
|
|
329
329
|
|
|
330
330
|
/**
|
|
331
331
|
* Defines URL to homepage. It will be used as a link on a logo and a site label
|
package/src/MediaPlayer.ts
CHANGED
|
@@ -5,7 +5,7 @@ import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
|
|
|
5
5
|
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
6
6
|
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
7
7
|
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
8
|
-
import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
|
|
8
|
+
import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
|
|
9
9
|
import type { VimeoPlayer } from "./MediaPlayerVimeo.js";
|
|
10
10
|
import mapLangFile from "./mediaPlayerLanguageMapping.js";
|
|
11
11
|
import type UDExMediaPlayerYoutube from "./MediaPlayerYoutube.js";
|
|
@@ -264,7 +264,7 @@ class UDExMediaPlayer extends UI5Element {
|
|
|
264
264
|
video50!: boolean;
|
|
265
265
|
video75!: boolean;
|
|
266
266
|
videoCompleted!: boolean;
|
|
267
|
-
|
|
267
|
+
_embedVideoStartFired = false;
|
|
268
268
|
videoReady!: boolean;
|
|
269
269
|
videoProgress!: number;
|
|
270
270
|
private _pendingPlugins: Array<{ name: string; plugin: (...args: any[]) => any }> = [];
|
|
@@ -371,6 +371,9 @@ class UDExMediaPlayer extends UI5Element {
|
|
|
371
371
|
});
|
|
372
372
|
|
|
373
373
|
player.on("ended", () => {
|
|
374
|
+
this.video25 = false;
|
|
375
|
+
this.video50 = false;
|
|
376
|
+
this.video75 = false;
|
|
374
377
|
this.fireDecoratorEvent("videoComplete");
|
|
375
378
|
});
|
|
376
379
|
|
|
@@ -611,15 +614,19 @@ class UDExMediaPlayer extends UI5Element {
|
|
|
611
614
|
}
|
|
612
615
|
|
|
613
616
|
handleEmbedVideoPlaying = (embedEvent: CustomEvent) => {
|
|
614
|
-
if (!this.
|
|
617
|
+
if (!this._embedVideoStartFired) {
|
|
615
618
|
this.fireDecoratorEvent("videoStart");
|
|
616
|
-
this.
|
|
619
|
+
this._embedVideoStartFired = true;
|
|
617
620
|
}
|
|
618
621
|
const playedTime = Math.round(embedEvent.detail.percentPlayed as number);
|
|
619
622
|
this.calculateVideoProgress(playedTime);
|
|
620
623
|
};
|
|
621
624
|
|
|
622
625
|
handleEmbedVideoEnded() {
|
|
626
|
+
this._embedVideoStartFired = false;
|
|
627
|
+
this.video25 = false;
|
|
628
|
+
this.video50 = false;
|
|
629
|
+
this.video75 = false;
|
|
623
630
|
this.fireDecoratorEvent("videoComplete");
|
|
624
631
|
}
|
|
625
632
|
|
package/src/MediaPlayerVimeo.ts
CHANGED
|
@@ -39,6 +39,13 @@ type UDExMediaPlayerVimeoPlayingEventDetail = {
|
|
|
39
39
|
styles: [MediaPlayerCss],
|
|
40
40
|
template: MediaPlayerVimeoTemplate,
|
|
41
41
|
})
|
|
42
|
+
/**
|
|
43
|
+
* Fires when video starts playing for the first time or is replayed after ending
|
|
44
|
+
*
|
|
45
|
+
* @allowPreventDefault
|
|
46
|
+
* @public
|
|
47
|
+
*/
|
|
48
|
+
@event("videoStart", { bubbles: true })
|
|
42
49
|
/**
|
|
43
50
|
* Fires when video is ready
|
|
44
51
|
*
|
|
@@ -70,6 +77,7 @@ type UDExMediaPlayerVimeoPlayingEventDetail = {
|
|
|
70
77
|
@event("playing", { bubbles: true })
|
|
71
78
|
class UDExMediaPlayerVimeo extends UI5Element {
|
|
72
79
|
eventDetails!: {
|
|
80
|
+
"videoStart": void,
|
|
73
81
|
"ready": void,
|
|
74
82
|
"ended": void,
|
|
75
83
|
"pause": void,
|
|
@@ -128,6 +136,25 @@ class UDExMediaPlayerVimeo extends UI5Element {
|
|
|
128
136
|
fluidMode!: boolean;
|
|
129
137
|
|
|
130
138
|
player!: Player;
|
|
139
|
+
private _hasStarted = false;
|
|
140
|
+
private _replayPending = false;
|
|
141
|
+
|
|
142
|
+
_onVimeoPlay = () => {
|
|
143
|
+
if (!this._hasStarted || this._replayPending) {
|
|
144
|
+
this.fireDecoratorEvent("videoStart");
|
|
145
|
+
this._hasStarted = true;
|
|
146
|
+
this._replayPending = false;
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
_onVimeoPause = () => {
|
|
151
|
+
this.fireDecoratorEvent("pause");
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
_onVimeoEnded = () => {
|
|
155
|
+
this._replayPending = true;
|
|
156
|
+
this.fireDecoratorEvent("ended");
|
|
157
|
+
};
|
|
131
158
|
|
|
132
159
|
setupPlayer = () => {
|
|
133
160
|
const iframe = this.shadowRoot?.querySelector("iframe");
|
|
@@ -136,17 +163,15 @@ class UDExMediaPlayerVimeo extends UI5Element {
|
|
|
136
163
|
}
|
|
137
164
|
this.player = new Player(iframe);
|
|
138
165
|
|
|
166
|
+
this.player.on("play", this._onVimeoPlay);
|
|
167
|
+
|
|
139
168
|
this.player.on("timeupdate", e => {
|
|
140
169
|
this.fireDecoratorEvent("playing", { percentPlayed: e.percent * 100 });
|
|
141
170
|
});
|
|
142
171
|
|
|
143
|
-
this.player.on("pause",
|
|
144
|
-
this.fireDecoratorEvent("pause");
|
|
145
|
-
});
|
|
172
|
+
this.player.on("pause", this._onVimeoPause);
|
|
146
173
|
|
|
147
|
-
this.player.on("ended",
|
|
148
|
-
this.fireDecoratorEvent("ended");
|
|
149
|
-
});
|
|
174
|
+
this.player.on("ended", this._onVimeoEnded);
|
|
150
175
|
|
|
151
176
|
this.player.on("loaded", () => {
|
|
152
177
|
this.fireDecoratorEvent("ready");
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="youtube" />
|
|
1
2
|
import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
2
3
|
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
3
4
|
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
@@ -61,6 +62,13 @@ type UDExMediaPlayerYoutubeBaseEventDetails = {
|
|
|
61
62
|
styles: [MediaPlayerCss, MediaPlayerYoutubeCss],
|
|
62
63
|
template: MediaPlayerYoutubeTemplate,
|
|
63
64
|
})
|
|
65
|
+
/**
|
|
66
|
+
* Fires when video starts playing for the first time or is replayed after ending
|
|
67
|
+
*
|
|
68
|
+
* @allowPreventDefault
|
|
69
|
+
* @public
|
|
70
|
+
*/
|
|
71
|
+
@event("videoStart", { bubbles: true })
|
|
64
72
|
/**
|
|
65
73
|
* Fires when video is ready
|
|
66
74
|
*
|
|
@@ -94,6 +102,7 @@ type UDExMediaPlayerYoutubeBaseEventDetails = {
|
|
|
94
102
|
@event("playing", { bubbles: true })
|
|
95
103
|
class UDExMediaPlayerYoutube extends UI5Element {
|
|
96
104
|
eventDetails!: {
|
|
105
|
+
"videoStart": void,
|
|
97
106
|
"ready": void,
|
|
98
107
|
"ended": UDExMediaPlayerYoutubeBaseEventDetails,
|
|
99
108
|
"pause": UDExMediaPlayerYoutubeBaseEventDetails,
|
|
@@ -147,6 +156,8 @@ class UDExMediaPlayerYoutube extends UI5Element {
|
|
|
147
156
|
private youtubePlayer!: YT.Player;
|
|
148
157
|
private checkInterval?: number;
|
|
149
158
|
private videoDuration: number = 0;
|
|
159
|
+
private _hasStarted = false;
|
|
160
|
+
private _replayPending = false;
|
|
150
161
|
|
|
151
162
|
get videoId(): string {
|
|
152
163
|
if (!this.source) {
|
|
@@ -221,16 +232,24 @@ class UDExMediaPlayerYoutube extends UI5Element {
|
|
|
221
232
|
const { data } = ytevent;
|
|
222
233
|
const { PLAYING, PAUSED, ENDED } = window.YT.PlayerState;
|
|
223
234
|
|
|
224
|
-
if (data === PLAYING
|
|
225
|
-
this.
|
|
226
|
-
this.
|
|
227
|
-
|
|
228
|
-
|
|
235
|
+
if (data === PLAYING) {
|
|
236
|
+
if (!this._hasStarted || this._replayPending) {
|
|
237
|
+
this.fireDecoratorEvent("videoStart");
|
|
238
|
+
this._hasStarted = true;
|
|
239
|
+
this._replayPending = false;
|
|
240
|
+
}
|
|
241
|
+
if (!this.checkInterval) {
|
|
242
|
+
this.checkInterval = window.setInterval(() => {
|
|
243
|
+
this.checkVideoProgress();
|
|
244
|
+
}, CHECK_INTERVAL_TIME);
|
|
245
|
+
}
|
|
246
|
+
} else if (this.checkInterval) {
|
|
229
247
|
clearInterval(this.checkInterval);
|
|
230
248
|
this.checkInterval = undefined;
|
|
231
249
|
}
|
|
232
250
|
|
|
233
251
|
if (data === ENDED) {
|
|
252
|
+
this._replayPending = true;
|
|
234
253
|
this.fireDecoratorEvent("ended", { ytevent });
|
|
235
254
|
}
|
|
236
255
|
|