@sapudex/web-components 2.20.1 → 2.22.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 (253) hide show
  1. package/bundle.esm.js +4 -0
  2. package/cypress/specs/Feed.cy.tsx +72 -0
  3. package/cypress/specs/FeedItem.cy.tsx +82 -0
  4. package/cypress/specs/Footer.cy.tsx +45 -1
  5. package/cypress/specs/ImageGridCloud.cy.tsx +78 -0
  6. package/cypress/specs/ImageGridCloudItem.cy.tsx +29 -0
  7. package/cypress/support/component-imports.instrumented.ts +8 -0
  8. package/cypress/support/component-imports.src.ts +8 -0
  9. package/dist/Accordion.js +1 -0
  10. package/dist/Accordion.js.map +1 -1
  11. package/dist/AccordionItem.js +2 -0
  12. package/dist/AccordionItem.js.map +1 -1
  13. package/dist/AssetsVariables.js +5 -0
  14. package/dist/AssetsVariables.js.map +1 -1
  15. package/dist/Breadcrumbs.js +5 -0
  16. package/dist/Breadcrumbs.js.map +1 -1
  17. package/dist/ContactItem.js +2 -0
  18. package/dist/ContactItem.js.map +1 -1
  19. package/dist/CountrySelector.js +1 -0
  20. package/dist/CountrySelector.js.map +1 -1
  21. package/dist/DatePicker.js +2 -1
  22. package/dist/DatePicker.js.map +1 -1
  23. package/dist/Feed.d.ts +88 -0
  24. package/dist/Feed.js +103 -0
  25. package/dist/Feed.js.map +1 -0
  26. package/dist/FeedItem.d.ts +114 -0
  27. package/dist/FeedItem.js +131 -0
  28. package/dist/FeedItem.js.map +1 -0
  29. package/dist/FeedItemTemplate.d.ts +2 -0
  30. package/dist/FeedItemTemplate.js +16 -0
  31. package/dist/FeedItemTemplate.js.map +1 -0
  32. package/dist/FeedTemplate.d.ts +2 -0
  33. package/dist/FeedTemplate.js +19 -0
  34. package/dist/FeedTemplate.js.map +1 -0
  35. package/dist/FilterMenu.js +2 -0
  36. package/dist/FilterMenu.js.map +1 -1
  37. package/dist/Footer.d.ts +14 -2
  38. package/dist/Footer.js +37 -4
  39. package/dist/Footer.js.map +1 -1
  40. package/dist/FooterTemplate.js +3 -3
  41. package/dist/FooterTemplate.js.map +1 -1
  42. package/dist/ImageGridCloud.d.ts +76 -0
  43. package/dist/ImageGridCloud.js +153 -0
  44. package/dist/ImageGridCloud.js.map +1 -0
  45. package/dist/ImageGridCloudItem.d.ts +35 -0
  46. package/dist/ImageGridCloudItem.js +49 -0
  47. package/dist/ImageGridCloudItem.js.map +1 -0
  48. package/dist/ImageGridCloudItemTemplate.d.ts +2 -0
  49. package/dist/ImageGridCloudItemTemplate.js +5 -0
  50. package/dist/ImageGridCloudItemTemplate.js.map +1 -0
  51. package/dist/ImageGridCloudTemplate.d.ts +2 -0
  52. package/dist/ImageGridCloudTemplate.js +6 -0
  53. package/dist/ImageGridCloudTemplate.js.map +1 -0
  54. package/dist/ImageGridTicker.d.ts +2 -2
  55. package/dist/ImageGridTicker.js +1 -8
  56. package/dist/ImageGridTicker.js.map +1 -1
  57. package/dist/LinkListItem.js +1 -0
  58. package/dist/LinkListItem.js.map +1 -1
  59. package/dist/List.js +3 -0
  60. package/dist/List.js.map +1 -1
  61. package/dist/ListGroupHeader.js +1 -0
  62. package/dist/ListGroupHeader.js.map +1 -1
  63. package/dist/ListItem.js +2 -0
  64. package/dist/ListItem.js.map +1 -1
  65. package/dist/ListItemBase.js +4 -0
  66. package/dist/ListItemBase.js.map +1 -1
  67. package/dist/ListSelectAll.js +1 -0
  68. package/dist/ListSelectAll.js.map +1 -1
  69. package/dist/MastheadCountrySelector.js +15 -0
  70. package/dist/MastheadCountrySelector.js.map +1 -1
  71. package/dist/MastheadItem.js +10 -0
  72. package/dist/MastheadItem.js.map +1 -1
  73. package/dist/MastheadMenu.js +6 -0
  74. package/dist/MastheadMenu.js.map +1 -1
  75. package/dist/MastheadMobileMenu.js +11 -0
  76. package/dist/MastheadMobileMenu.js.map +1 -1
  77. package/dist/MastheadProfileMenu.js +11 -0
  78. package/dist/MastheadProfileMenu.js.map +1 -1
  79. package/dist/MastheadShell.js +41 -0
  80. package/dist/MastheadShell.js.map +1 -1
  81. package/dist/MediaPlayer.js +1 -0
  82. package/dist/MediaPlayer.js.map +1 -1
  83. package/dist/MediaPlayerVimeo.d.ts +3 -3
  84. package/dist/MediaPlayerVimeo.js +1 -0
  85. package/dist/MediaPlayerVimeo.js.map +1 -1
  86. package/dist/MediaPlayerYoutube.js +3 -0
  87. package/dist/MediaPlayerYoutube.js.map +1 -1
  88. package/dist/Pagination.js +1 -1
  89. package/dist/Pagination.js.map +1 -1
  90. package/dist/Search.d.ts +2 -1
  91. package/dist/Search.js +18 -3
  92. package/dist/Search.js.map +1 -1
  93. package/dist/SearchTemplate.d.ts +2 -0
  94. package/dist/SearchTemplate.js +48 -0
  95. package/dist/SearchTemplate.js.map +1 -0
  96. package/dist/SearchableListBase.d.ts +3 -0
  97. package/dist/SearchableListBase.js +10 -0
  98. package/dist/SearchableListBase.js.map +1 -1
  99. package/dist/SecondaryNavigation.js +19 -0
  100. package/dist/SecondaryNavigation.js.map +1 -1
  101. package/dist/SecondaryNavigationItem.js +6 -0
  102. package/dist/SecondaryNavigationItem.js.map +1 -1
  103. package/dist/SecondaryNavigationSubItem.js +3 -0
  104. package/dist/SecondaryNavigationSubItem.js.map +1 -1
  105. package/dist/SelectBox.js +1 -0
  106. package/dist/SelectBox.js.map +1 -1
  107. package/dist/SocialMediaButton.js +2 -0
  108. package/dist/SocialMediaButton.js.map +1 -1
  109. package/dist/StepInput.js +2 -0
  110. package/dist/StepInput.js.map +1 -1
  111. package/dist/TabNavigation.js +3 -0
  112. package/dist/TabNavigation.js.map +1 -1
  113. package/dist/Tag.js +1 -0
  114. package/dist/Tag.js.map +1 -1
  115. package/dist/TagGroup.js +3 -0
  116. package/dist/TagGroup.js.map +1 -1
  117. package/dist/TextField.js +1 -0
  118. package/dist/TextField.js.map +1 -1
  119. package/dist/Tile.js +1 -0
  120. package/dist/Tile.js.map +1 -1
  121. package/dist/Upload.js +5 -0
  122. package/dist/Upload.js.map +1 -1
  123. package/dist/assets/{InputSuggestions-yR1p8cXL.js → InputSuggestions-By00xQan.js} +1 -1
  124. package/dist/assets/{ListItemStandardExpandableTextTemplate-BovnAV24.js → ListItemStandardExpandableTextTemplate-BGtoxRbA.js} +1 -1
  125. package/dist/assets/{bundle.esm-C7AybWk0.js → bundle.esm-9yDdQqR5.js} +223 -214
  126. package/dist/assets/messagebundle_en-D_yCmNrd.js +1 -0
  127. package/dist/css/themes/Feed.css +1 -0
  128. package/dist/css/themes/FeedItem.css +1 -0
  129. package/dist/css/themes/Footer.css +1 -1
  130. package/dist/css/themes/ImageGridCloud.css +1 -0
  131. package/dist/css/themes/ImageGridCloudItem.css +1 -0
  132. package/dist/css/themes/MediaPlayer.css +1 -1
  133. package/dist/css/themes/Pagination.css +1 -1
  134. package/dist/css/themes/RatingIndicator.css +1 -1
  135. package/dist/css/themes/Slider.css +1 -1
  136. package/dist/custom-elements-internal.json +4455 -456
  137. package/dist/custom-elements.json +1411 -288
  138. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  139. package/dist/generated/i18n/i18n-defaults.d.ts +2 -1
  140. package/dist/generated/i18n/i18n-defaults.js +2 -1
  141. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  142. package/dist/generated/themes/Feed.css.d.ts +2 -0
  143. package/dist/generated/themes/Feed.css.js +8 -0
  144. package/dist/generated/themes/Feed.css.js.map +1 -0
  145. package/dist/generated/themes/FeedItem.css.d.ts +2 -0
  146. package/dist/generated/themes/FeedItem.css.js +8 -0
  147. package/dist/generated/themes/FeedItem.css.js.map +1 -0
  148. package/dist/generated/themes/Footer.css.d.ts +1 -1
  149. package/dist/generated/themes/Footer.css.js +1 -1
  150. package/dist/generated/themes/Footer.css.js.map +1 -1
  151. package/dist/generated/themes/ImageGridCloud.css.d.ts +2 -0
  152. package/dist/generated/themes/ImageGridCloud.css.js +8 -0
  153. package/dist/generated/themes/ImageGridCloud.css.js.map +1 -0
  154. package/dist/generated/themes/ImageGridCloudItem.css.d.ts +2 -0
  155. package/dist/generated/themes/ImageGridCloudItem.css.js +8 -0
  156. package/dist/generated/themes/ImageGridCloudItem.css.js.map +1 -0
  157. package/dist/generated/themes/MediaPlayer.css.d.ts +1 -1
  158. package/dist/generated/themes/MediaPlayer.css.js +1 -1
  159. package/dist/generated/themes/MediaPlayer.css.js.map +1 -1
  160. package/dist/generated/themes/Pagination.css.d.ts +1 -1
  161. package/dist/generated/themes/Pagination.css.js +1 -1
  162. package/dist/generated/themes/Pagination.css.js.map +1 -1
  163. package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
  164. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  165. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  166. package/dist/generated/themes/Slider.css.d.ts +1 -1
  167. package/dist/generated/themes/Slider.css.js +1 -1
  168. package/dist/generated/themes/Slider.css.js.map +1 -1
  169. package/dist/messagebundle.properties +3 -0
  170. package/dist/messagebundle_en.properties +1 -0
  171. package/dist/vscode.html-custom-data.json +130 -1
  172. package/dist/web-types.json +305 -4
  173. package/package.json +1 -1
  174. package/src/Accordion.ts +1 -0
  175. package/src/AccordionItem.ts +2 -0
  176. package/src/AssetsVariables.ts +5 -0
  177. package/src/Breadcrumbs.ts +5 -0
  178. package/src/ContactItem.ts +2 -0
  179. package/src/CountrySelector.ts +1 -0
  180. package/src/DatePicker.ts +2 -1
  181. package/src/Feed.ts +144 -0
  182. package/src/FeedItem.ts +198 -0
  183. package/src/FeedItemTemplate.tsx +60 -0
  184. package/src/FeedTemplate.tsx +66 -0
  185. package/src/FilterMenu.ts +2 -0
  186. package/src/Footer.ts +47 -4
  187. package/src/FooterTemplate.tsx +29 -39
  188. package/src/ImageGridCloud.ts +188 -0
  189. package/src/ImageGridCloudItem.ts +57 -0
  190. package/src/ImageGridCloudItemTemplate.tsx +11 -0
  191. package/src/ImageGridCloudTemplate.tsx +16 -0
  192. package/src/ImageGridTicker.ts +3 -3
  193. package/src/LinkListItem.ts +1 -0
  194. package/src/List.ts +3 -0
  195. package/src/ListGroupHeader.ts +1 -0
  196. package/src/ListItem.ts +2 -0
  197. package/src/ListItemBase.ts +4 -0
  198. package/src/ListSelectAll.ts +1 -0
  199. package/src/MastheadCountrySelector.ts +15 -0
  200. package/src/MastheadItem.ts +10 -0
  201. package/src/MastheadMenu.ts +6 -0
  202. package/src/MastheadMobileMenu.ts +11 -0
  203. package/src/MastheadProfileMenu.ts +11 -0
  204. package/src/MastheadShell.ts +41 -0
  205. package/src/MediaPlayer.ts +1 -0
  206. package/src/MediaPlayerVimeo.ts +4 -3
  207. package/src/MediaPlayerYoutube.ts +3 -0
  208. package/src/Pagination.ts +1 -1
  209. package/src/Search.ts +20 -4
  210. package/src/SearchTemplate.tsx +353 -0
  211. package/src/SearchableListBase.ts +10 -0
  212. package/src/SecondaryNavigation.ts +19 -0
  213. package/src/SecondaryNavigationItem.ts +6 -0
  214. package/src/SecondaryNavigationSubItem.ts +3 -0
  215. package/src/SelectBox.ts +1 -0
  216. package/src/SocialMediaButton.ts +2 -0
  217. package/src/StepInput.ts +2 -0
  218. package/src/TabNavigation.ts +3 -0
  219. package/src/Tag.ts +1 -0
  220. package/src/TagGroup.ts +3 -0
  221. package/src/TextField.ts +1 -0
  222. package/src/Tile.ts +1 -0
  223. package/src/Upload.ts +5 -0
  224. package/src/generated/i18n/i18n-defaults.ts +2 -2
  225. package/src/generated/themes/Feed.css.ts +9 -0
  226. package/src/generated/themes/FeedItem.css.ts +9 -0
  227. package/src/generated/themes/Footer.css.ts +1 -1
  228. package/src/generated/themes/ImageGridCloud.css.ts +9 -0
  229. package/src/generated/themes/ImageGridCloudItem.css.ts +9 -0
  230. package/src/generated/themes/MediaPlayer.css.ts +1 -1
  231. package/src/generated/themes/Pagination.css.ts +1 -1
  232. package/src/generated/themes/RatingIndicator.css.ts +1 -1
  233. package/src/generated/themes/Slider.css.ts +1 -1
  234. package/src/i18n/messagebundle.properties +3 -0
  235. package/src/i18n/messagebundle_en.properties +1 -0
  236. package/src/themes/Feed.css +51 -0
  237. package/src/themes/FeedItem.css +60 -0
  238. package/src/themes/Footer.css +9 -5
  239. package/src/themes/ImageGridCloud.css +55 -0
  240. package/src/themes/ImageGridCloudItem.css +10 -0
  241. package/src/themes/MediaPlayer.css +1 -1
  242. package/src/themes/Pagination.css +1 -1
  243. package/dist/assets/messagebundle_en-BhTYnZbC.js +0 -1
  244. package/dist/generated/templates/SearchSuggestionsTemplate.lit.d.ts +0 -3
  245. package/dist/generated/templates/SearchSuggestionsTemplate.lit.js +0 -17
  246. package/dist/generated/templates/SearchSuggestionsTemplate.lit.js.map +0 -1
  247. package/dist/generated/templates/SearchTemplate.lit.d.ts +0 -3
  248. package/dist/generated/templates/SearchTemplate.lit.js +0 -28
  249. package/dist/generated/templates/SearchTemplate.lit.js.map +0 -1
  250. package/src/Search.hbs +0 -155
  251. package/src/SearchSuggestions.hbs +0 -91
  252. package/src/generated/templates/SearchSuggestionsTemplate.lit.ts +0 -21
  253. package/src/generated/templates/SearchTemplate.lit.ts +0 -32
@@ -150,9 +150,7 @@ export default function FooterTemplate(this: Footer) {
150
150
  )}
151
151
  </div>
152
152
 
153
- {this.isContactContainerVisible && (
154
- <UDExDivider class={`${rootClass}__divider`}></UDExDivider>
155
- )}
153
+ <UDExDivider class={`${rootClass}__divider`} accessibleRole="none"></UDExDivider>
156
154
 
157
155
  {this._shouldRenderMobileMenu ? (
158
156
  mobileNavigation.call(this, rootClass)
@@ -160,20 +158,20 @@ export default function FooterTemplate(this: Footer) {
160
158
  desktopNavigation.call(this, rootClass)
161
159
  )}
162
160
 
163
- <UDExDivider class={`${rootClass}__divider`}></UDExDivider>
161
+ <UDExDivider class={`${rootClass}__divider`} accessibleRole="none"></UDExDivider>
164
162
 
165
163
  <div className={`${rootClass}__copyright`}>
166
164
  {this.isChineseLang && (
167
165
  <span className={`${rootClass}__copyright-chinese-text`}>
168
166
  <a
169
167
  href={this.chineseIcpNumberLink}
170
- title={this.chineseICPNumber}
168
+ title={this.chineseICPNumberText}
171
169
  className={`${rootClass}__copyright-chinese-link`}
172
170
  target="_blank"
173
171
  rel="noopener noreferrer">
174
- {this.chineseICPNumber}
172
+ {this.chineseICPNumberText}
175
173
  </a>
176
- {this.chineseSecurityNetworkNumber}
174
+ {this.chineseSecurityNetworkNumberText}
177
175
  </span>
178
176
  )}
179
177
  <span className={`${rootClass}__copyright-text`}>{this.copyrightText}</span>
@@ -228,7 +226,6 @@ function mobileNavigation(this: Footer, rootClass: string) {
228
226
  <li key={index}>
229
227
  <a
230
228
  target={link.target}
231
- aria-describedby={`${rootClass}__quick-links`}
232
229
  href={link.url}
233
230
  data-id={link.id}
234
231
  onClick={this._onQuickLinksClick}
@@ -238,9 +235,9 @@ function mobileNavigation(this: Footer, rootClass: string) {
238
235
  </li>
239
236
  ))}
240
237
  </ul>
241
- <h3 className={`${rootClass}__links-item hidden`} aria-hidden="true" id={`${rootClass}__quick-links`}>
238
+ <h6 className={`${rootClass}__links-item hidden`} aria-hidden="true" id={`${rootClass}__quick-links`}>
242
239
  {this._quickLinksTitle}
243
- </h3>
240
+ </h6>
244
241
  </UDExAccordionItem>
245
242
  </>
246
243
  )}
@@ -253,7 +250,6 @@ function mobileNavigation(this: Footer, rootClass: string) {
253
250
  <li key={index}>
254
251
  <a
255
252
  target={link.target}
256
- aria-describedby={`${rootClass}__footer__trending`}
257
253
  href={link.url}
258
254
  data-id={link.id}
259
255
  onClick={this._onTrendingClick}
@@ -263,9 +259,9 @@ function mobileNavigation(this: Footer, rootClass: string) {
263
259
  </li>
264
260
  ))}
265
261
  </ul>
266
- <h3 className={`${rootClass}__links-item hidden`} aria-hidden="true" id={`${rootClass}__trending`}>
262
+ <h6 className={`${rootClass}__links-item hidden`} aria-hidden="true" id={`${rootClass}__trending`}>
267
263
  {this._trendingTitle}
268
- </h3>
264
+ </h6>
269
265
  </UDExAccordionItem>
270
266
  </>
271
267
  )}
@@ -278,7 +274,6 @@ function mobileNavigation(this: Footer, rootClass: string) {
278
274
  <li key={index}>
279
275
  <a
280
276
  target={link.target}
281
- aria-describedby={`${rootClass}__about`}
282
277
  href={link.url}
283
278
  data-id={link.id}
284
279
  onClick={this._onAboutSapClick}
@@ -288,9 +283,9 @@ function mobileNavigation(this: Footer, rootClass: string) {
288
283
  </li>
289
284
  ))}
290
285
  </ul>
291
- <h3 className={`${rootClass}__links-item hidden`} aria-hidden="true" id={`${rootClass}__about`}>
286
+ <h6 className={`${rootClass}__links-item hidden`} aria-hidden="true" id={`${rootClass}__about`}>
292
287
  {this._aboutSapTitle}
293
- </h3>
288
+ </h6>
294
289
  </UDExAccordionItem>
295
290
  </>
296
291
  )}
@@ -303,7 +298,6 @@ function mobileNavigation(this: Footer, rootClass: string) {
303
298
  <li key={index}>
304
299
  <a
305
300
  target={link.target}
306
- aria-describedby={`${rootClass}__site-information`}
307
301
  href={link.url}
308
302
  data-id={link.id}
309
303
  onClick={this._onSiteInformationClick}
@@ -313,9 +307,9 @@ function mobileNavigation(this: Footer, rootClass: string) {
313
307
  </li>
314
308
  ))}
315
309
  </ul>
316
- <h3 className={`${rootClass}__links-item hidden`} aria-hidden="true" id={`${rootClass}__site-information`}>
310
+ <h6 className={`${rootClass}__links-item hidden`} aria-hidden="true" id={`${rootClass}__site-information`}>
317
311
  {this._siteInformationTitle}
318
- </h3>
312
+ </h6>
319
313
  </UDExAccordionItem>
320
314
  </>
321
315
  )}
@@ -328,16 +322,15 @@ function desktopNavigation(this: Footer, rootClass: string) {
328
322
  <div className={`${rootClass}__links`}>
329
323
  {this.quickLinksArray.length > 0 && (
330
324
  <div className={`${rootClass}__links-group ${rootClass}__quick-links`}>
331
- <h3 className={`${rootClass}__links-item`} id={`${rootClass}__quick-links`}>
325
+ <h6 className={`${rootClass}__links-item`} id={`${rootClass}__quick-links`}>
332
326
  {this._quickLinksTitle}
333
- </h3>
334
- <nav aria-labelledby={`${rootClass}__quick-links`}>
335
- <ul className={`${rootClass}__links-list ${rootClass}__links-list--desktop`}>
327
+ </h6>
328
+ <nav>
329
+ <ul aria-labelledby={`${rootClass}__quick-links`} className={`${rootClass}__links-list ${rootClass}__links-list--desktop`}>
336
330
  {this.quickLinksArray.map((link, index) => (
337
331
  <li key={index}>
338
332
  <a
339
333
  target={link.target}
340
- aria-describedby={`${rootClass}__quick-links`}
341
334
  data-id={link.id}
342
335
  href={link.url}
343
336
  onClick={this._onQuickLinksClick}
@@ -352,16 +345,15 @@ function desktopNavigation(this: Footer, rootClass: string) {
352
345
  )}
353
346
  {this.trendingLinksArray.length > 0 && (
354
347
  <div className={`${rootClass}__links-group ${rootClass}__trending-links`}>
355
- <h3 className={`${rootClass}__links-item`} id={`${rootClass}__trending`}>
348
+ <h6 className={`${rootClass}__links-item`} id={`${rootClass}__trending`}>
356
349
  {this._trendingTitle}
357
- </h3>
358
- <nav aria-labelledby={`${rootClass}__trending`}>
359
- <ul className={`${rootClass}__links-list ${rootClass}__links-list--desktop`}>
350
+ </h6>
351
+ <nav>
352
+ <ul aria-labelledby={`${rootClass}__trending`} className={`${rootClass}__links-list ${rootClass}__links-list--desktop`}>
360
353
  {this.trendingLinksArray.map((link, index) => (
361
354
  <li key={index}>
362
355
  <a
363
356
  target={link.target}
364
- aria-describedby={`${rootClass}__footer__trending`}
365
357
  data-id={link.id}
366
358
  href={link.url}
367
359
  onClick={this._onTrendingClick}
@@ -376,16 +368,15 @@ function desktopNavigation(this: Footer, rootClass: string) {
376
368
  )}
377
369
  {this.aboutLinksArray.length > 0 && (
378
370
  <div className={`${rootClass}__links-group ${rootClass}__about-links`}>
379
- <h3 className={`${rootClass}__links-item`} id={`${rootClass}__about`}>
371
+ <h6 className={`${rootClass}__links-item`} id={`${rootClass}__about`}>
380
372
  {this._aboutSapTitle}
381
- </h3>
382
- <nav aria-labelledby={`${rootClass}__about`}>
383
- <ul className={`${rootClass}__links-list ${rootClass}__links-list--desktop`}>
373
+ </h6>
374
+ <nav>
375
+ <ul aria-labelledby={`${rootClass}__about`} className={`${rootClass}__links-list ${rootClass}__links-list--desktop`}>
384
376
  {this.aboutLinksArray.map((link, index) => (
385
377
  <li key={index}>
386
378
  <a
387
379
  target={link.target}
388
- aria-describedby={`${rootClass}__about`}
389
380
  data-id={link.id}
390
381
  href={link.url}
391
382
  onClick={this._onAboutSapClick}
@@ -400,16 +391,15 @@ function desktopNavigation(this: Footer, rootClass: string) {
400
391
  )}
401
392
  {this.siteInformationLinksArray.length > 0 && (
402
393
  <div className={`${rootClass}__links-group ${rootClass}__site-information-links`}>
403
- <h3 className={`${rootClass}__links-item`} id={`${rootClass}__site-information`}>
394
+ <h6 className={`${rootClass}__links-item`} id={`${rootClass}__site-information`}>
404
395
  {this._siteInformationTitle}
405
- </h3>
406
- <nav aria-labelledby={`${rootClass}__site-information`}>
407
- <ul className={`${rootClass}__links-list ${rootClass}__links-list--desktop`}>
396
+ </h6>
397
+ <nav>
398
+ <ul aria-labelledby={`${rootClass}__site-information`} className={`${rootClass}__links-list ${rootClass}__links-list--desktop`}>
408
399
  {this.siteInformationLinksArray.map((link, index) => (
409
400
  <li key={index}>
410
401
  <a
411
402
  target={link.target}
412
- aria-describedby={`${rootClass}__site-information`}
413
403
  data-id={link.id}
414
404
  href={link.url}
415
405
  onClick={this._onSiteInformationClick}
@@ -0,0 +1,188 @@
1
+ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
+ import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
3
+ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
4
+ import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
5
+ import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
6
+ import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
7
+ import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
8
+ import ImageGridCloudTemplate from "./ImageGridCloudTemplate.js";
9
+ import type UDExImageGridCloudItem from "./ImageGridCloudItem.js";
10
+
11
+ // Styles
12
+ import ImageGridCloudCss from "./generated/themes/ImageGridCloud.css.js";
13
+ import { BreakpointUtils } from "./utils/Breakpoints.js";
14
+
15
+ export enum UDExImageGridCloudVariable {
16
+ itemGapL = "--udex-image-grid-cloud-item-gap-l",
17
+ itemGapS = "--udex-image-grid-cloud-item-gap-s",
18
+ itemWidthL = "--udex-image-grid-cloud-item-width-l",
19
+ itemWidthS = "--udex-image-grid-cloud-item-width-s",
20
+ itemBorderWidth = "--udex-image-grid-cloud-item-border-width",
21
+ }
22
+
23
+ export enum UDExImageGridCloudSize {
24
+ Small = "Small",
25
+ Large = "Large",
26
+ }
27
+
28
+ /**
29
+ * @class
30
+ *
31
+ * <h3 class="comment-api-title">Overview</h3>
32
+ *
33
+ *
34
+ * <h3>Usage</h3>
35
+ *
36
+ * For the <code>udex-image-grid-cloud</code>
37
+ * <h3>ES6 Module Import</h3>
38
+ *
39
+ * <code>import "@sapudex/web-components/dist/ImageGridCloud.js";</code>
40
+ *
41
+ * @constructor
42
+ * @extends UI5Element
43
+ * @public
44
+ */
45
+ @customElement({
46
+ tag: "udex-image-grid-cloud",
47
+ renderer: jsxRenderer,
48
+ styles: ImageGridCloudCss,
49
+ template: ImageGridCloudTemplate,
50
+ })
51
+
52
+ class UDExImageGridCloud extends UI5Element {
53
+ /**
54
+ * Grayscale mode enhances visual harmony and can be used for minimal,
55
+ * professional layouts or to de-emphasize logos.
56
+ *
57
+ * @default undefined
58
+ * @public
59
+ */
60
+ @property({ type: Boolean })
61
+ grayscale?: boolean;
62
+
63
+ /**
64
+ * Defines the size of the items.
65
+ *
66
+ * @default "Large"
67
+ * @private
68
+ */
69
+ @property({ type: String })
70
+ size: `${UDExImageGridCloudSize}` = UDExImageGridCloudSize.Large;
71
+
72
+ /**
73
+ * Slot for image grid cloud items.
74
+ *
75
+ * @slot
76
+ * @public
77
+ */
78
+ @slot({ type: HTMLElement, "default": true })
79
+ items!: Array<UDExImageGridCloudItem>;
80
+
81
+ _rootId = "udex-image-grid-cloud";
82
+ _rowClassName = "udex-image-grid-cloud__row";
83
+ _container!: HTMLElement;
84
+ _items: Array<Element> = [];
85
+
86
+ _handleResizeBound: ResizeObserverCallback;
87
+
88
+ constructor() {
89
+ super();
90
+ this._handleResizeBound = this.handleResize.bind(this);
91
+ }
92
+
93
+ onEnterDOM(): void {
94
+ ResizeHandler.register(this, this._handleResizeBound);
95
+ }
96
+
97
+ onExitDOM(): void {
98
+ ResizeHandler.deregister(this, this._handleResizeBound);
99
+ }
100
+
101
+ onAfterRendering() {
102
+ this._container = this.containerElement;
103
+ this._items = this.itemsElements;
104
+ this.renderLayout();
105
+ }
106
+
107
+ handleResize(): void {
108
+ this.renderLayout();
109
+ }
110
+
111
+ renderLayout() {
112
+ if (this.isContainerEmpty) {
113
+ return;
114
+ }
115
+
116
+ const ITEM_WIDTH = this.itemWidth + this.itemHorizontalBorderWidth;
117
+ const GAP = this.itemGap;
118
+
119
+ const existingRows = Array.from(this._container.querySelectorAll(`.${this._rowClassName}`));
120
+ existingRows.forEach(row => row.remove());
121
+
122
+ const containerWidth = this._container.clientWidth;
123
+ const itemsPerRow = Math.max(Math.floor((containerWidth + GAP) / (ITEM_WIDTH + GAP)) || 0, 1);
124
+
125
+ let index = 0;
126
+ let rowIndex = 0;
127
+
128
+ while (index < this._items.length) {
129
+ const count = rowIndex % 2 === 0 ? itemsPerRow : Math.max(itemsPerRow - 1, 1);
130
+ const row = document.createElement("div");
131
+ row.className = this._rowClassName;
132
+
133
+ for (let i = 0; i < count && index < this._items.length; i++, index++) {
134
+ row.appendChild(this._items[index]);
135
+ }
136
+
137
+ this._container.appendChild(row);
138
+ rowIndex++;
139
+ }
140
+ }
141
+
142
+ _getVariableValue(variableName: string): string {
143
+ return window.getComputedStyle(this).getPropertyValue(`${variableName}`);
144
+ }
145
+
146
+ get itemWidth(): number {
147
+ const variableName = this.isSmallSize || this.isMobile
148
+ ? UDExImageGridCloudVariable.itemWidthS
149
+ : UDExImageGridCloudVariable.itemWidthL;
150
+ return parseInt(this._getVariableValue(variableName));
151
+ }
152
+
153
+ get itemGap(): number {
154
+ const variableName = this.isSmallSize || this.isMobile
155
+ ? UDExImageGridCloudVariable.itemGapS
156
+ : UDExImageGridCloudVariable.itemGapL;
157
+ return parseInt(this._getVariableValue(variableName));
158
+ }
159
+
160
+ get itemHorizontalBorderWidth(): number {
161
+ const border = parseInt(this._getVariableValue(UDExImageGridCloudVariable.itemBorderWidth));
162
+ return border * 2;
163
+ }
164
+
165
+ get isSmallSize(): boolean {
166
+ return this.size === UDExImageGridCloudSize.Small;
167
+ }
168
+
169
+ get containerElement(): HTMLElement {
170
+ return this.shadowRoot!.getElementById(this._rootId)!;
171
+ }
172
+
173
+ get itemsElements(): Array<Element> {
174
+ return Array.from(this.containerElement.children);
175
+ }
176
+
177
+ get isMobile(): boolean {
178
+ return BreakpointUtils.isAtMost("S");
179
+ }
180
+
181
+ get isContainerEmpty(): boolean {
182
+ return !this._container || this._items.length === 0;
183
+ }
184
+ }
185
+
186
+ UDExImageGridCloud.define();
187
+
188
+ export default UDExImageGridCloud;
@@ -0,0 +1,57 @@
1
+ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
+ import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
3
+ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
4
+ import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
5
+
6
+ import ImageGridCloudItemTemplate from "./ImageGridCloudItemTemplate.js";
7
+
8
+ // Styles
9
+ import ImageGridCloudItemCss from "./generated/themes/ImageGridCloudItem.css.js";
10
+
11
+ /**
12
+ * @class
13
+ *
14
+ * <h3 class="comment-api-title">Overview</h3>
15
+ *
16
+ *
17
+ * <h3>Usage</h3>
18
+ *
19
+ * For the <code>udex-image-grid-cloud-item</code>
20
+ * <h3>ES6 Module Import</h3>
21
+ *
22
+ * <code>import "@sapudex/web-components/dist/ImageGridCloudItem.js";</code>
23
+ *
24
+ * @constructor
25
+ * @extends UI5Element
26
+ * @public
27
+ */
28
+ @customElement({
29
+ tag: "udex-image-grid-cloud-item",
30
+ renderer: jsxRenderer,
31
+ styles: ImageGridCloudItemCss,
32
+ template: ImageGridCloudItemTemplate,
33
+ })
34
+
35
+ class UDExImageGridCloudItem extends UI5Element {
36
+ /**
37
+ * Defines the source URL
38
+ *
39
+ * @default ""
40
+ * @public
41
+ */
42
+ @property({ type: String })
43
+ src!: string;
44
+
45
+ /**
46
+ * Defines image alt text
47
+ *
48
+ * @default ""
49
+ * @public
50
+ */
51
+ @property({ type: String })
52
+ alt!: string;
53
+ }
54
+
55
+ UDExImageGridCloudItem.define();
56
+
57
+ export default UDExImageGridCloudItem;
@@ -0,0 +1,11 @@
1
+ import type ImageGridCloudItem from "./ImageGridCloudItem.js";
2
+
3
+ export default function ImageGridCloudItemTemplate(this: ImageGridCloudItem) {
4
+ return (
5
+ <img
6
+ class="udex-image-grid-cloud-item-img"
7
+ src={this.src}
8
+ alt={this.alt}
9
+ />
10
+ );
11
+ }
@@ -0,0 +1,16 @@
1
+ import type ImageGridCloud from "./ImageGridCloud.js";
2
+ import UDExImageGridCloudItem from "./ImageGridCloudItem.js";
3
+
4
+ export default function ImageGridCloudTemplate(this: ImageGridCloud) {
5
+ return (
6
+ <div id="udex-image-grid-cloud">
7
+ {this.items.map(({ src, alt }) =>
8
+ <UDExImageGridCloudItem
9
+ class="udex-image-grid-cloud__item"
10
+ src={src}
11
+ alt={alt}>
12
+ </UDExImageGridCloudItem>
13
+ )}
14
+ </div>
15
+ );
16
+ }
@@ -57,6 +57,7 @@ type UDExImageGridTickerPlayBtnClickEventDetail = {
57
57
  * Fired event when the user click on a play/paused button.
58
58
  *
59
59
  * @public
60
+ * @param {boolean} isPaused - Indicates whether the animation is paused.
60
61
  */
61
62
  @event("play-button-click", { bubbles: true })
62
63
 
@@ -78,12 +79,11 @@ class UDExImageGridTicker extends UI5Element {
78
79
  * Grayscale mode enhances visual harmony and can be used for minimal,
79
80
  * professional layouts or to de-emphasize logos.
80
81
  *
81
- * @default false
82
+ * @default undefined
82
83
  * @public
83
84
  */
84
85
  @property({ type: Boolean })
85
- grayscale = false;
86
-
86
+ grayscale?: boolean;
87
87
  /**
88
88
  * Indicates whether the image grid ticker is scrollable.
89
89
  *
@@ -42,6 +42,7 @@ type UDExListLinkItemClickEventDetail = {
42
42
  /**
43
43
  * Triggered when the user clicks on an item.
44
44
  * @public
45
+ * @param {Event} originalEvent the original event object
45
46
  */
46
47
  @event("item-click", { bubbles: true })
47
48
 
package/src/List.ts CHANGED
@@ -63,6 +63,9 @@ type UDExListSelectionChangeEventDetail = {
63
63
  * Fired when selection is changed by user interaction
64
64
  *
65
65
  * @public
66
+ * @param {Array<UDExListItemBase>} listItems All items inside the list
67
+ * @param {Array<UDExListItemBase>} selectedItems Currently selected items
68
+ * @param {HTMLElement} item The item that triggered the event
66
69
  */
67
70
  @event("selection-change", { bubbles: true })
68
71
 
@@ -48,6 +48,7 @@ type UDExListGroupHeaderBaseHeaderPressEventDetail = {
48
48
  * Fired when selectable group header is pressed
49
49
  *
50
50
  * @public
51
+ * @param {HTMLElement} item The pressed group header item
51
52
  */
52
53
  @event("header-press", { bubbles: true })
53
54
 
package/src/ListItem.ts CHANGED
@@ -78,12 +78,14 @@ type UDExListItemItemPressEventDetail = {
78
78
  * Fired event when the user click on a list item.
79
79
  *
80
80
  * @public
81
+ * @param {boolean} selected Indicates whether the item is selected or not
81
82
  */
82
83
  @event("item-press", { bubbles: true })
83
84
  /**
84
85
  * Fired event when the user focuses on a list item.
85
86
  *
86
87
  * @public
88
+ * @param {HTMLElement} item The focused list item
87
89
  */
88
90
  @event("item-focus", { bubbles: true })
89
91
 
@@ -34,12 +34,16 @@ type UDExListItemBaseEventDetail = {
34
34
  * Fired event when the user click on a first icon.
35
35
  *
36
36
  * @public
37
+ * @param { PointerEvent } originalEvent The original event object
38
+ * @param { HTMLElement } item The list item
37
39
  */
38
40
  @event("first-icon-click", { bubbles: true })
39
41
  /**
40
42
  * Fired event when the user click on a second icon.
41
43
  *
42
44
  * @public
45
+ * @param { PointerEvent } originalEvent The original event object
46
+ * @param { HTMLElement } item The list item
43
47
  */
44
48
  @event("second-icon-click", { bubbles: true })
45
49
 
@@ -49,6 +49,7 @@ type UDExListSelectAllSelectAllEventDetail = {
49
49
  * Fired when the user clicks on the Select All header.
50
50
  *
51
51
  * @public
52
+ * @param {HTMLElement} item The select all item
52
53
  */
53
54
  @event("select-all", { bubbles: true })
54
55
 
@@ -88,6 +88,12 @@ type UDExMastheadCountrySelectorSearchEventDetail = {
88
88
  * Fires when region item is clicked
89
89
  *
90
90
  * @public
91
+ * @param {Event} originalEvent the original event object
92
+ * @param {Object} item the clicked region item
93
+ * @param {string} item.title the title of the region
94
+ * @param {Array} item.countries the countries of the region
95
+ * @param {AnalyticsName} analyticsName The analytics name for the event
96
+ * @param {HTMLElement} sourceNode The source node which triggered the event
91
97
  */
92
98
  @event("region-item-click", { bubbles: true })
93
99
 
@@ -95,6 +101,13 @@ type UDExMastheadCountrySelectorSearchEventDetail = {
95
101
  * Fires when region item is clicked
96
102
  *
97
103
  * @public
104
+ * @param {Event} originalEvent the original event object
105
+ * @param {Object} item the clicked country item
106
+ * @param {string} item.displayTitle the display title of the country
107
+ * @param {string} item.countryCode the country code of the country
108
+ * @param {string} item.url the url of the country
109
+ * @param {AnalyticsName} analyticsName The analytics name for the event
110
+ * @param {HTMLElement} sourceNode The source node which triggered the event
98
111
  */
99
112
  @event("country-item-click", { bubbles: true })
100
113
 
@@ -102,6 +115,8 @@ type UDExMastheadCountrySelectorSearchEventDetail = {
102
115
  * Fired event when the user typed to search field.
103
116
  *
104
117
  * @public
118
+ * @param {string} value The search value
119
+ * @param {AnalyticsName} analyticsName The analytics name for the event
105
120
  */
106
121
  @event("country-selector-search", { bubbles: true })
107
122
 
@@ -105,6 +105,10 @@ type UDExMastheadDropdownEventDetail = {
105
105
  *
106
106
  * @allowPreventDefault
107
107
  * @public
108
+ * @param {Event} originalEvent the original event object
109
+ * @param {UDExMastheadItem} item the clicked item
110
+ * @param {AnalyticsName} analyticsName the analytics name
111
+ * @param {HTMLElement} sourceNode the source node
108
112
  */
109
113
  @event("item-click", { bubbles: true })
110
114
 
@@ -113,6 +117,9 @@ type UDExMastheadDropdownEventDetail = {
113
117
  *
114
118
  * @allowPreventDefault
115
119
  * @public
120
+ * @param {string} title the title of the item
121
+ * @param {UDExMastheadDropdownItemAction} action the action that caused the event
122
+ * @param {AnalyticsName} analyticsName the analytics name
116
123
  */
117
124
  @event("dropdown-closed", { bubbles: true })
118
125
 
@@ -121,6 +128,9 @@ type UDExMastheadDropdownEventDetail = {
121
128
  *
122
129
  * @allowPreventDefault
123
130
  * @public
131
+ * @param {string} title the title of the item
132
+ * @param {UDExMastheadDropdownItemAction} action the action that caused the event
133
+ * @param {AnalyticsName} analyticsName the analytics name
124
134
  */
125
135
  @event("dropdown-opened", { bubbles: true })
126
136
 
@@ -77,6 +77,12 @@ type UDExMastheadMenuMenuItemClickEventDetail = {
77
77
  *
78
78
  * @allowPreventDefault
79
79
  * @public
80
+ * @param {string} category The category of the clicked menu item
81
+ * @param {Array<string>} analyticsPath The analytics path for the clicked menu item
82
+ * @param {AnalyticsName} analyticsName The analytics name for the clicked menu item
83
+ * @param {PointerEvent} originalEvent The original event object
84
+ * @param {UDExMastheadMenuItem} item The clicked menu item
85
+ * @param {HTMLElement} sourceNode The source node of the clicked menu item
80
86
  */
81
87
  @event("menu-item-click", { bubbles: true })
82
88
 
@@ -70,6 +70,14 @@ type UDExMastheadMobileMenuExploreClickEventDetail = {
70
70
  *
71
71
  * @allowPreventDefault
72
72
  * @public
73
+ * @param {PointerEvent | KeyboardEvent} originalEvent The original event object
74
+ * @param {UDExMastheadMenuItem} item The clicked item
75
+ * @param {string} [category] The category of the clicked item
76
+ * @param {boolean} isMobile Indicates whether the click happened in mobile menu
77
+ * @param {boolean} isBack Indicates whether the clicked item is a back button
78
+ * @param {AnalyticsName} analyticsName The analytics name for the clicked item
79
+ * @param {Array<string>} analyticsPath The analytics path for the clicked item
80
+ * @param {HTMLElement} sourceNode The source node of the clicked item
73
81
  */
74
82
  @event("item-click", { cancelable: true, bubbles: false })
75
83
 
@@ -78,6 +86,9 @@ type UDExMastheadMobileMenuExploreClickEventDetail = {
78
86
  *
79
87
  * @allowPreventDefault
80
88
  * @public
89
+ * @param {PointerEvent | KeyboardEvent} originalEvent The original event object
90
+ * @param {AnalyticsName} analyticsName The analytics name for the clicked item
91
+ * @param {HTMLElement} sourceNode The source node of the clicked item
81
92
  */
82
93
  @event("explorer-menu-click", { bubbles: true })
83
94