@sapudex/web-components 2.53.0 → 2.54.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.
Files changed (208) hide show
  1. package/cypress/specs/FilterMenu.cy.tsx +34 -0
  2. package/cypress/specs/SelectBox.cy.tsx +43 -0
  3. package/dist/Accordion.js +1 -1
  4. package/dist/Accordion.js.map +1 -1
  5. package/dist/AccordionItem.js +1 -1
  6. package/dist/AccordionItem.js.map +1 -1
  7. package/dist/Avatar.d.ts +2 -2
  8. package/dist/Avatar.js +1 -1
  9. package/dist/Avatar.js.map +1 -1
  10. package/dist/Badge.js +1 -1
  11. package/dist/Badge.js.map +1 -1
  12. package/dist/Breadcrumbs.js +1 -1
  13. package/dist/Breadcrumbs.js.map +1 -1
  14. package/dist/Carousel.js +1 -1
  15. package/dist/Carousel.js.map +1 -1
  16. package/dist/Contact.js +1 -1
  17. package/dist/Contact.js.map +1 -1
  18. package/dist/ContactItem.js +1 -1
  19. package/dist/ContactItem.js.map +1 -1
  20. package/dist/Feed.d.ts +2 -1
  21. package/dist/Feed.js +1 -1
  22. package/dist/Feed.js.map +1 -1
  23. package/dist/FeedItem.d.ts +2 -1
  24. package/dist/FeedItem.js +1 -1
  25. package/dist/FeedItem.js.map +1 -1
  26. package/dist/FilterMenuGroupHeader.js +1 -1
  27. package/dist/FilterMenuGroupHeader.js.map +1 -1
  28. package/dist/Footer.d.ts +2 -1
  29. package/dist/Footer.js +1 -1
  30. package/dist/Footer.js.map +1 -1
  31. package/dist/ImageGridCloud.js +1 -1
  32. package/dist/ImageGridCloud.js.map +1 -1
  33. package/dist/ImageGridTable.js +1 -1
  34. package/dist/ImageGridTable.js.map +1 -1
  35. package/dist/ImageGridTableItem.js +1 -1
  36. package/dist/ImageGridTableItem.js.map +1 -1
  37. package/dist/ImageGridTicker.js +1 -1
  38. package/dist/ImageGridTicker.js.map +1 -1
  39. package/dist/InputGroup.js +1 -1
  40. package/dist/InputGroup.js.map +1 -1
  41. package/dist/LinkList.js +1 -1
  42. package/dist/LinkList.js.map +1 -1
  43. package/dist/List.js +1 -1
  44. package/dist/List.js.map +1 -1
  45. package/dist/ListGroupHeaderBase.js +1 -1
  46. package/dist/ListGroupHeaderBase.js.map +1 -1
  47. package/dist/ListItem.d.ts +3 -3
  48. package/dist/ListItem.js +1 -1
  49. package/dist/ListItem.js.map +1 -1
  50. package/dist/MastheadItem.d.ts +3 -3
  51. package/dist/MastheadItem.js +1 -1
  52. package/dist/MastheadItem.js.map +1 -1
  53. package/dist/MastheadMobileMenu.d.ts +3 -3
  54. package/dist/MastheadMobileMenu.js +1 -1
  55. package/dist/MastheadMobileMenu.js.map +1 -1
  56. package/dist/MastheadProfileMenu.d.ts +3 -2
  57. package/dist/MastheadProfileMenu.js +1 -1
  58. package/dist/MastheadProfileMenu.js.map +1 -1
  59. package/dist/MastheadShell.d.ts +9 -9
  60. package/dist/MastheadShell.js +1 -1
  61. package/dist/MastheadShell.js.map +1 -1
  62. package/dist/MediaPlayer.d.ts +1 -1
  63. package/dist/MediaPlayer.js +5 -3
  64. package/dist/MediaPlayer.js.map +1 -1
  65. package/dist/MediaPlayerVimeo.d.ts +6 -0
  66. package/dist/MediaPlayerVimeo.js +27 -6
  67. package/dist/MediaPlayerVimeo.js.map +1 -1
  68. package/dist/MediaPlayerYoutube.d.ts +3 -0
  69. package/dist/MediaPlayerYoutube.js +24 -5
  70. package/dist/MediaPlayerYoutube.js.map +1 -1
  71. package/dist/MessageStrip.d.ts +2 -1
  72. package/dist/MessageStrip.js +1 -1
  73. package/dist/MessageStrip.js.map +1 -1
  74. package/dist/Modal.d.ts +2 -0
  75. package/dist/Modal.js +10 -3
  76. package/dist/Modal.js.map +1 -1
  77. package/dist/PromoTile.d.ts +2 -2
  78. package/dist/PromoTile.js +1 -1
  79. package/dist/PromoTile.js.map +1 -1
  80. package/dist/Quote.d.ts +4 -4
  81. package/dist/Quote.js +1 -1
  82. package/dist/Quote.js.map +1 -1
  83. package/dist/Review.d.ts +3 -3
  84. package/dist/Review.js +1 -1
  85. package/dist/Review.js.map +1 -1
  86. package/dist/ReviewItem.d.ts +4 -3
  87. package/dist/ReviewItem.js +1 -1
  88. package/dist/ReviewItem.js.map +1 -1
  89. package/dist/Search.js +1 -1
  90. package/dist/Search.js.map +1 -1
  91. package/dist/SearchableListBase.js +5 -1
  92. package/dist/SearchableListBase.js.map +1 -1
  93. package/dist/SecondaryNavigation.d.ts +3 -3
  94. package/dist/SecondaryNavigation.js +1 -1
  95. package/dist/SecondaryNavigation.js.map +1 -1
  96. package/dist/SecondaryNavigationItem.d.ts +2 -1
  97. package/dist/SecondaryNavigationItem.js +1 -1
  98. package/dist/SecondaryNavigationItem.js.map +1 -1
  99. package/dist/SelectBase.js +1 -1
  100. package/dist/SelectBase.js.map +1 -1
  101. package/dist/SelectBoxGroupHeader.js +1 -1
  102. package/dist/SelectBoxGroupHeader.js.map +1 -1
  103. package/dist/SelectBoxItem.d.ts +3 -3
  104. package/dist/SelectBoxItem.js +1 -1
  105. package/dist/SelectBoxItem.js.map +1 -1
  106. package/dist/SideNavigationMobile.d.ts +2 -2
  107. package/dist/SideNavigationMobile.js +1 -1
  108. package/dist/SideNavigationMobile.js.map +1 -1
  109. package/dist/SocialMediaButton.js +1 -1
  110. package/dist/SocialMediaButton.js.map +1 -1
  111. package/dist/Tab.d.ts +2 -2
  112. package/dist/Tab.js +1 -1
  113. package/dist/Tab.js.map +1 -1
  114. package/dist/TabNavigation.d.ts +2 -2
  115. package/dist/TabNavigation.js +1 -1
  116. package/dist/TabNavigation.js.map +1 -1
  117. package/dist/Table.d.ts +5 -5
  118. package/dist/Table.js +1 -1
  119. package/dist/Table.js.map +1 -1
  120. package/dist/TableCellBase.js +1 -1
  121. package/dist/TableCellBase.js.map +1 -1
  122. package/dist/TableGroupRow.js +1 -1
  123. package/dist/TableGroupRow.js.map +1 -1
  124. package/dist/TableRowBase.js +1 -1
  125. package/dist/TableRowBase.js.map +1 -1
  126. package/dist/TagGroup.js +1 -1
  127. package/dist/TagGroup.js.map +1 -1
  128. package/dist/Tile.d.ts +2 -1
  129. package/dist/Tile.js +1 -1
  130. package/dist/Tile.js.map +1 -1
  131. package/dist/Tooltip.d.ts +2 -1
  132. package/dist/Tooltip.js +1 -1
  133. package/dist/Tooltip.js.map +1 -1
  134. package/dist/Wizard.js +1 -1
  135. package/dist/Wizard.js.map +1 -1
  136. package/dist/assets/{InputSuggestions-0yCPXAmq.js → InputSuggestions-CqOrRXxa.js} +1 -1
  137. package/dist/assets/{ListItemStandardExpandableTextTemplate-DjZEnCXN.js → ListItemStandardExpandableTextTemplate-DKUm4L2B.js} +1 -1
  138. package/dist/assets/{bundle.esm-DJuMR5ko.js → bundle.esm-CI60uvdr.js} +229 -229
  139. package/dist/css/themes/AccordionItem.css +1 -1
  140. package/dist/css/themes/Footer.css +1 -1
  141. package/dist/custom-elements-internal.json +185 -163
  142. package/dist/custom-elements.json +153 -139
  143. package/dist/generated/themes/AccordionItem.css.d.ts +1 -1
  144. package/dist/generated/themes/AccordionItem.css.js +1 -1
  145. package/dist/generated/themes/AccordionItem.css.js.map +1 -1
  146. package/dist/generated/themes/Footer.css.d.ts +1 -1
  147. package/dist/generated/themes/Footer.css.js +1 -1
  148. package/dist/generated/themes/Footer.css.js.map +1 -1
  149. package/dist/vscode.html-custom-data.json +2 -2
  150. package/dist/web-types.json +23 -7
  151. package/package.json +1 -1
  152. package/src/Accordion.ts +1 -1
  153. package/src/AccordionItem.ts +1 -1
  154. package/src/Avatar.ts +3 -3
  155. package/src/Badge.ts +1 -1
  156. package/src/Breadcrumbs.ts +1 -1
  157. package/src/Carousel.ts +1 -1
  158. package/src/Contact.ts +1 -1
  159. package/src/ContactItem.ts +1 -1
  160. package/src/Feed.ts +3 -2
  161. package/src/FeedItem.ts +3 -2
  162. package/src/FilterMenuGroupHeader.ts +1 -1
  163. package/src/Footer.ts +3 -2
  164. package/src/ImageGridCloud.ts +1 -1
  165. package/src/ImageGridTable.ts +1 -1
  166. package/src/ImageGridTableItem.ts +1 -1
  167. package/src/ImageGridTicker.ts +1 -1
  168. package/src/InputGroup.ts +1 -1
  169. package/src/LinkList.ts +1 -1
  170. package/src/List.ts +1 -1
  171. package/src/ListGroupHeaderBase.ts +1 -1
  172. package/src/ListItem.ts +4 -4
  173. package/src/MastheadItem.ts +4 -4
  174. package/src/MastheadMobileMenu.ts +4 -4
  175. package/src/MastheadProfileMenu.ts +4 -3
  176. package/src/MastheadShell.ts +10 -10
  177. package/src/MediaPlayer.ts +5 -4
  178. package/src/MediaPlayerVimeo.ts +31 -6
  179. package/src/MediaPlayerYoutube.ts +24 -5
  180. package/src/MessageStrip.ts +3 -2
  181. package/src/Modal.ts +18 -3
  182. package/src/PromoTile.ts +3 -3
  183. package/src/Quote.ts +5 -5
  184. package/src/Review.ts +4 -4
  185. package/src/ReviewItem.ts +5 -4
  186. package/src/Search.ts +1 -1
  187. package/src/SearchableListBase.ts +6 -1
  188. package/src/SecondaryNavigation.ts +4 -4
  189. package/src/SecondaryNavigationItem.ts +3 -2
  190. package/src/SelectBase.ts +1 -1
  191. package/src/SelectBoxGroupHeader.ts +1 -1
  192. package/src/SelectBoxItem.ts +4 -4
  193. package/src/SideNavigationMobile.ts +3 -3
  194. package/src/SocialMediaButton.ts +1 -1
  195. package/src/Tab.ts +3 -3
  196. package/src/TabNavigation.ts +3 -3
  197. package/src/Table.ts +6 -6
  198. package/src/TableCellBase.ts +1 -1
  199. package/src/TableGroupRow.ts +1 -1
  200. package/src/TableRowBase.ts +1 -1
  201. package/src/TagGroup.ts +1 -1
  202. package/src/Tile.ts +3 -2
  203. package/src/Tooltip.ts +3 -2
  204. package/src/Wizard.ts +1 -1
  205. package/src/generated/themes/AccordionItem.css.ts +1 -1
  206. package/src/generated/themes/Footer.css.ts +1 -1
  207. package/src/themes/AccordionItem.css +2 -2
  208. package/src/themes/Footer.css +1 -1
package/src/ListItem.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
2
2
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
3
- import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
3
+ import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
4
4
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
5
5
  import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
6
6
  import { isEnter, isSpace } from "@ui5/webcomponents-base/dist/Keys.js";
@@ -28,7 +28,7 @@ import ListItemTemplate from "./generated/templates/ListItemTemplate.lit.js";
28
28
 
29
29
  // Styles
30
30
  import ListItemCss from "./generated/themes/ListItem.css.js";
31
- import type { DefaultSlot } from "@ui5/webcomponents-base/dist/UI5Element.js";
31
+ import type { DefaultSlot, Slot } from "@ui5/webcomponents-base/dist/UI5Element.js";
32
32
 
33
33
  const listItemClass: string = "udex-list__item";
34
34
  const listItemRole: string = "option";
@@ -215,7 +215,7 @@ class UDExListItem extends UDExListItemBase {
215
215
  * @public
216
216
  */
217
217
  @slot({ type: UDExButton })
218
- firstIcon!: Array<UDExButton>;
218
+ firstIcon!: Slot<UDExButton>;
219
219
 
220
220
  /**
221
221
  * Slot for second icon.
@@ -224,7 +224,7 @@ class UDExListItem extends UDExListItemBase {
224
224
  * @public
225
225
  */
226
226
  @slot({ type: UDExButton })
227
- secondIcon!: Array<UDExButton>;
227
+ secondIcon!: Slot<UDExButton>;
228
228
 
229
229
  /**
230
230
  * Defines the role attribute of component
@@ -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?: Array<HTMLElement>;
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?: DefaultSlot<HTMLElement>;
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!: Array<Node>;
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?: UDExMastheadItem;
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!: Array<Node>;
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!: Array<Node>;
227
+ logoutButton!: Slot<Node>;
227
228
 
228
229
  @i18n("@sapudex/web-components")
229
230
  static i18nBundle: I18nBundle;
@@ -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!: Array<UDExMastheadItem>;
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!: Array<Node>;
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!: Array<Node>;
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!: Array<UDExMastheadItem>;
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!: Array<UDExMastheadItem>;
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!: Array<UDExMastheadItem>;
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!: Array<UDExMastheadItem>;
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!: Array<UDExMastheadItem>;
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
@@ -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
- videoStart!: boolean;
267
+ _embedVideoStartFired = false;
268
268
  videoReady!: boolean;
269
269
  videoProgress!: number;
270
270
  private _pendingPlugins: Array<{ name: string; plugin: (...args: any[]) => any }> = [];
@@ -611,15 +611,16 @@ class UDExMediaPlayer extends UI5Element {
611
611
  }
612
612
 
613
613
  handleEmbedVideoPlaying = (embedEvent: CustomEvent) => {
614
- if (!this.videoStart) {
614
+ if (!this._embedVideoStartFired) {
615
615
  this.fireDecoratorEvent("videoStart");
616
- this.videoStart = true;
616
+ this._embedVideoStartFired = true;
617
617
  }
618
618
  const playedTime = Math.round(embedEvent.detail.percentPlayed as number);
619
619
  this.calculateVideoProgress(playedTime);
620
620
  };
621
621
 
622
622
  handleEmbedVideoEnded() {
623
+ this._embedVideoStartFired = false;
623
624
  this.fireDecoratorEvent("videoComplete");
624
625
  }
625
626
 
@@ -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 && !this.checkInterval) {
225
- this.checkInterval = window.setInterval(() => {
226
- this.checkVideoProgress();
227
- }, CHECK_INTERVAL_TIME);
228
- } else if (data !== PLAYING && this.checkInterval) {
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
 
@@ -1,6 +1,7 @@
1
1
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
2
2
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
3
- import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
3
+ import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
4
+ import type { Slot } from "@ui5/webcomponents-base/dist/UI5Element.js";
4
5
  import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
5
6
  import MessageStrip from "@ui5/webcomponents/dist/MessageStrip.js";
6
7
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
@@ -123,7 +124,7 @@ class UDExMessageStrip extends MessageStrip {
123
124
  * @slot
124
125
  * @public
125
126
  */
126
- @slot({ type: Node }) default!: Node;
127
+ @slot({ type: Node }) default!: Slot<Node>;
127
128
 
128
129
  @i18n("@sapudex/web-components")
129
130
  static i18nBundle: I18nBundle;
package/src/Modal.ts CHANGED
@@ -38,6 +38,7 @@ export enum UDExModalType {
38
38
  getEffectiveScrollbarStyle(),
39
39
  ],
40
40
  })
41
+
41
42
  class UDExModal extends Dialog {
42
43
  /**
43
44
  * Defines modal display type
@@ -51,12 +52,26 @@ class UDExModal extends Dialog {
51
52
  type: `${UDExModalType}` = UDExModalType.default;
52
53
 
53
54
  onAfterRendering() {
54
- const content = this.shadowRoot?.querySelector<HTMLElement>(".ui5-popup-content");
55
+ super.onAfterRendering();
56
+ const content = this._getPopupContent();
57
+
55
58
  if (content) {
56
- const gutterWidth = content.offsetWidth - content.clientWidth;
57
- this.style.setProperty("--udex-modal-scrollbar-width", `${gutterWidth}px`);
59
+ this._setScrollbarWidth(content);
58
60
  }
59
61
  }
62
+
63
+ _setScrollbarWidth(content: HTMLElement) {
64
+ const scrollbarWidth = content.offsetWidth - content.clientWidth;
65
+
66
+ this.style.setProperty(
67
+ "--udex-modal-scrollbar-width",
68
+ `${scrollbarWidth}px`,
69
+ );
70
+ }
71
+
72
+ _getPopupContent(): HTMLElement | null {
73
+ return this.shadowRoot?.querySelector<HTMLElement>(".ui5-popup-content") ?? null;
74
+ }
60
75
  }
61
76
 
62
77
  UDExModal.define();
package/src/PromoTile.ts CHANGED
@@ -1,8 +1,8 @@
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
- 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 event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
7
7
  import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
8
8
  import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
@@ -80,7 +80,7 @@ class UDExPromoTile extends UI5Element {
80
80
  * @public
81
81
  */
82
82
  @slot({ type: HTMLElement })
83
- pictogram?: Array<HTMLElement>;
83
+ pictogram!: Slot<HTMLElement>;
84
84
 
85
85
  /**
86
86
  * Allows control over setting the CSS gradient.
package/src/Quote.ts CHANGED
@@ -1,8 +1,8 @@
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
- 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 jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
7
7
  import QuoteTemplate from "./QuoteTemplate.js";
8
8
 
@@ -59,7 +59,7 @@ class UDExQuote extends UI5Element {
59
59
  * @public
60
60
  */
61
61
  @slot()
62
- link!: Array<HTMLElement>;
62
+ link!: Slot<HTMLElement>;
63
63
 
64
64
  /**
65
65
  * Defines author's name and company
@@ -68,7 +68,7 @@ class UDExQuote extends UI5Element {
68
68
  * @slot
69
69
  */
70
70
  @slot()
71
- author!: Array<HTMLElement>;
71
+ author!: Slot<HTMLElement>;
72
72
 
73
73
  /**
74
74
  * Defines image near quote text
@@ -77,7 +77,7 @@ class UDExQuote extends UI5Element {
77
77
  * @slot
78
78
  */
79
79
  @slot()
80
- image!: Array<HTMLElement>;
80
+ image!: Slot<HTMLElement>;
81
81
 
82
82
  /**
83
83
  * Defines image (Avatar or company logo) size
package/src/Review.ts CHANGED
@@ -1,8 +1,8 @@
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
- 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 jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.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";
@@ -66,7 +66,7 @@ class UDExReview extends UI5Element {
66
66
  * @public
67
67
  */
68
68
  @slot({ type: HTMLElement })
69
- reviewButton!: UDExButton;
69
+ reviewButton!: Slot<UDExButton>;
70
70
 
71
71
  /**
72
72
  * Slot for the default text when there are no reviews or rating.
@@ -75,7 +75,7 @@ class UDExReview extends UI5Element {
75
75
  * @public
76
76
  */
77
77
  @slot({ type: HTMLElement })
78
- defaultText!: HTMLElement;
78
+ defaultText!: Slot<HTMLElement>;
79
79
 
80
80
  /**
81
81
  * Slot for rating bars.
package/src/ReviewItem.ts CHANGED
@@ -1,8 +1,9 @@
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
5
  import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
5
- import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
6
+ import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
6
7
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
7
8
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
8
9
  import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
@@ -104,7 +105,7 @@ class UDExReviewItem extends UI5Element {
104
105
  * @slot
105
106
  */
106
107
  @slot()
107
- author!: Array<HTMLElement>;
108
+ author!: Slot<HTMLElement>;
108
109
 
109
110
  /**
110
111
  * Defines the date of the review.
@@ -113,7 +114,7 @@ class UDExReviewItem extends UI5Element {
113
114
  * @slot
114
115
  */
115
116
  @slot()
116
- date!: Array<HTMLElement>;
117
+ date!: Slot<HTMLElement>;
117
118
 
118
119
  /**
119
120
  * Slot for custom content.
@@ -121,7 +122,7 @@ class UDExReviewItem extends UI5Element {
121
122
  * @slot
122
123
  */
123
124
  @slot()
124
- content?: Array<HTMLElement>;
125
+ content!: Slot<HTMLElement>;
125
126
 
126
127
  @i18n("@sapudex/web-components")
127
128
  static i18nBundle: I18nBundle;
package/src/Search.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { DefaultSlot, ChangeInfo } from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
  import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
3
3
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.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 property from "@ui5/webcomponents-base/dist/decorators/property.js";
6
6
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
7
7
  import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
@@ -2,7 +2,7 @@ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
  import type { DefaultSlot } from "@ui5/webcomponents-base/dist/UI5Element.js";
3
3
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.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 { cleanLabel } from "./utils/listItemLabelUtils.js";
8
8
  import { UDExListMode, UDExListStyleType } from "./types/List.js";
@@ -531,6 +531,11 @@ class UDExSearchableListBase extends UI5Element {
531
531
  const item = this.items[i];
532
532
 
533
533
  if (item.isGroup) {
534
+ if (item._id === itemId) {
535
+ menuItem = item;
536
+ break;
537
+ }
538
+
534
539
  const groupItems = (item as UDExListGroupHeaderBase).getItems();
535
540
  menuItem = groupItems.find(({ _id }) => _id === itemId);
536
541
 
@@ -1,9 +1,9 @@
1
- import type { ChangeInfo } from "@ui5/webcomponents-base/dist/UI5Element.js";
1
+ import type { ChangeInfo, Slot } from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
  import UI5Element 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 event from "@ui5/webcomponents-base/dist/decorators/event-strict.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 litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
8
8
  import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
9
9
  import { isEscape } from "@ui5/webcomponents-base/dist/Keys.js";
@@ -145,7 +145,7 @@ class UDExSecondaryNavigation extends UI5Element {
145
145
  * @public
146
146
  */
147
147
  @slot({ type: HTMLElement })
148
- breadcrumbs!: Array<HTMLElement>;
148
+ breadcrumbs!: Slot<HTMLElement>;
149
149
 
150
150
  /**
151
151
  * Slot for action buttons.
@@ -154,7 +154,7 @@ class UDExSecondaryNavigation extends UI5Element {
154
154
  * @public
155
155
  */
156
156
  @slot({ type: HTMLElement })
157
- buttons!: Array<HTMLElement>;
157
+ buttons!: Slot<HTMLElement>;
158
158
 
159
159
  /**
160
160
  * Defines the heading of the component.
@@ -1,6 +1,7 @@
1
1
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
2
2
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
3
- import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
3
+ import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
4
+ import type { Slot } from "@ui5/webcomponents-base/dist/UI5Element.js";
4
5
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
5
6
  import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
6
7
  import UI5Icon from "@ui5/webcomponents/dist/Icon.js";
@@ -109,7 +110,7 @@ class UDExSecondaryNavigationItem extends UDExSecondaryNavigationItemBase {
109
110
  * @public
110
111
  */
111
112
  @slot({ type: HTMLElement })
112
- buttons!: Array<HTMLElement>;
113
+ buttons!: Slot<HTMLElement>;
113
114
 
114
115
  /**
115
116
  * List of the sub items
package/src/SelectBase.ts CHANGED
@@ -1222,7 +1222,7 @@ class UDExSelectBase extends UDExSearchableListBase {
1222
1222
  }
1223
1223
 
1224
1224
  get listboxRole(): AriaHasPopup {
1225
- return this._listBoxRole;
1225
+ return this.isTreeStructure ? "tree" : this._listBoxRole;
1226
1226
  }
1227
1227
 
1228
1228
  get listAriaControlsId(): string {
@@ -1,6 +1,6 @@
1
1
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
2
2
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
3
- import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
3
+ import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
4
4
  import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
5
5
  import UDExListGroupHeaderBase from "./ListGroupHeaderBase.js";
6
6
  import UDExSelectBoxItem from "./SelectBoxItem.js";