@sapudex/web-components 2.54.0 → 2.56.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 (415) hide show
  1. package/cypress/specs/Breadcrumbs.cy.tsx +3 -1
  2. package/cypress/specs/FilterMenu.cy.tsx +34 -2
  3. package/cypress/specs/Footer.cy.tsx +59 -0
  4. package/cypress/specs/HeroBanner.cy.tsx +35 -1
  5. package/cypress/specs/List.cy.tsx +63 -1
  6. package/cypress/specs/ListItem.cy.tsx +44 -0
  7. package/cypress/specs/MastheadShell.cy.tsx +39 -0
  8. package/cypress/specs/MediaPlayer.cy.tsx +58 -0
  9. package/cypress/specs/PhoneNumberField.cy.tsx +29 -1
  10. package/cypress/specs/SecondaryNavigationDesktop.cy.tsx +2 -2
  11. package/cypress/specs/SelectBox.cy.tsx +173 -0
  12. package/dist/BreadcrumbsTemplate.js +1 -1
  13. package/dist/BreadcrumbsTemplate.js.map +1 -1
  14. package/dist/CountrySelectorTemplate.js +1 -1
  15. package/dist/CountrySelectorTemplate.js.map +1 -1
  16. package/dist/FilterMenu.d.ts +1 -1
  17. package/dist/FilterMenu.js +11 -7
  18. package/dist/FilterMenu.js.map +1 -1
  19. package/dist/Footer.d.ts +20 -1
  20. package/dist/Footer.js +40 -3
  21. package/dist/Footer.js.map +1 -1
  22. package/dist/FooterTemplate.js +7 -2
  23. package/dist/FooterTemplate.js.map +1 -1
  24. package/dist/HeroBanner.d.ts +12 -0
  25. package/dist/HeroBanner.js +54 -0
  26. package/dist/HeroBanner.js.map +1 -1
  27. package/dist/List.d.ts +5 -0
  28. package/dist/List.js +13 -6
  29. package/dist/List.js.map +1 -1
  30. package/dist/ListGroupHeader.js +12 -5
  31. package/dist/ListGroupHeader.js.map +1 -1
  32. package/dist/ListGroupHeaderBase.d.ts +1 -1
  33. package/dist/ListGroupHeaderBase.js +2 -2
  34. package/dist/ListGroupHeaderBase.js.map +1 -1
  35. package/dist/ListGroupHeaderTemplate.d.ts +2 -0
  36. package/dist/ListGroupHeaderTemplate.js +33 -0
  37. package/dist/ListGroupHeaderTemplate.js.map +1 -0
  38. package/dist/ListItem.d.ts +1 -1
  39. package/dist/ListItem.js +9 -4
  40. package/dist/ListItem.js.map +1 -1
  41. package/dist/ListItemBase.d.ts +1 -0
  42. package/dist/ListItemBase.js +8 -4
  43. package/dist/ListItemBase.js.map +1 -1
  44. package/dist/ListItemTemplate.d.ts +2 -0
  45. package/dist/ListItemTemplate.js +18 -0
  46. package/dist/ListItemTemplate.js.map +1 -0
  47. package/dist/ListSelectAll.js +4 -5
  48. package/dist/ListSelectAll.js.map +1 -1
  49. package/dist/ListSelectAllTemplate.d.ts +2 -0
  50. package/dist/ListSelectAllTemplate.js +6 -0
  51. package/dist/ListSelectAllTemplate.js.map +1 -0
  52. package/dist/ListTemplate.d.ts +2 -0
  53. package/dist/ListTemplate.js +11 -0
  54. package/dist/ListTemplate.js.map +1 -0
  55. package/dist/MastheadShell.d.ts +7 -0
  56. package/dist/MastheadShell.js +38 -0
  57. package/dist/MastheadShell.js.map +1 -1
  58. package/dist/MediaPlayer.js +6 -0
  59. package/dist/MediaPlayer.js.map +1 -1
  60. package/dist/PhoneNumberField.d.ts +3 -3
  61. package/dist/PhoneNumberField.js +18 -21
  62. package/dist/PhoneNumberField.js.map +1 -1
  63. package/dist/PhoneNumberFieldTemplate.d.ts +2 -0
  64. package/dist/PhoneNumberFieldTemplate.js +12 -0
  65. package/dist/PhoneNumberFieldTemplate.js.map +1 -0
  66. package/dist/Search.d.ts +2 -0
  67. package/dist/Search.js +21 -0
  68. package/dist/Search.js.map +1 -1
  69. package/dist/SearchableListBase.d.ts +4 -0
  70. package/dist/SearchableListBase.js +66 -6
  71. package/dist/SearchableListBase.js.map +1 -1
  72. package/dist/SearchableListBaseTemplate.js +1 -1
  73. package/dist/SearchableListBaseTemplate.js.map +1 -1
  74. package/dist/SelectBase.js +14 -22
  75. package/dist/SelectBase.js.map +1 -1
  76. package/dist/SelectBox.js +31 -0
  77. package/dist/SelectBox.js.map +1 -1
  78. package/dist/SelectBoxTemplate.js +3 -2
  79. package/dist/SelectBoxTemplate.js.map +1 -1
  80. package/dist/StatusMessage.d.ts +2 -2
  81. package/dist/StatusMessage.js +1 -1
  82. package/dist/StatusMessage.js.map +1 -1
  83. package/dist/TextAreaTemplate.js +1 -1
  84. package/dist/TextAreaTemplate.js.map +1 -1
  85. package/dist/TextFieldTemplate.js +1 -1
  86. package/dist/TextFieldTemplate.js.map +1 -1
  87. package/dist/Upload.js +6 -9
  88. package/dist/Upload.js.map +1 -1
  89. package/dist/UploadItem.d.ts +2 -2
  90. package/dist/UploadItem.js +6 -9
  91. package/dist/UploadItem.js.map +1 -1
  92. package/dist/UploadItemTemplate.d.ts +2 -0
  93. package/dist/UploadItemTemplate.js +14 -0
  94. package/dist/UploadItemTemplate.js.map +1 -0
  95. package/dist/UploadTemplate.d.ts +2 -0
  96. package/dist/UploadTemplate.js +11 -0
  97. package/dist/UploadTemplate.js.map +1 -0
  98. package/dist/assets/{InputSuggestions-CqOrRXxa.js → InputSuggestions-ChhTxYh4.js} +1 -1
  99. package/dist/assets/{ListItemStandardExpandableTextTemplate-DKUm4L2B.js → ListItemStandardExpandableTextTemplate-Bh1HxZfH.js} +1 -1
  100. package/dist/assets/{bundle-C7Yft7IG.css → bundle-CdO3MnjQ.css} +1 -1
  101. package/dist/assets/{bundle.esm-CI60uvdr.js → bundle.esm-DCX_ohoZ.js} +277 -265
  102. package/dist/assets/messagebundle_en-B0P3kkb6.js +1 -0
  103. package/dist/assets/messagebundle_it-BML2SC0W.js +1 -0
  104. package/dist/assets/messagebundle_ja-zyFfZHcj.js +1 -0
  105. package/dist/assets/messagebundle_ko-BCPaSqNp.js +1 -0
  106. package/dist/assets/messagebundle_lt-DB4b6FVx.js +1 -0
  107. package/dist/assets/messagebundle_lv-tAOia5tU.js +1 -0
  108. package/dist/assets/messagebundle_uk-CCv57GhV.js +1 -0
  109. package/dist/css/themes/AccordionItem.css +1 -1
  110. package/dist/css/themes/AccordionSpotlight.css +1 -1
  111. package/dist/css/themes/Avatar.css +1 -1
  112. package/dist/css/themes/Breadcrumbs.css +1 -1
  113. package/dist/css/themes/BreadcrumbsPopover.css +1 -1
  114. package/dist/css/themes/CountrySelector.css +1 -1
  115. package/dist/css/themes/EventRibbon.css +1 -1
  116. package/dist/css/themes/FilterMenu.css +1 -1
  117. package/dist/css/themes/Footer.css +1 -1
  118. package/dist/css/themes/HeroBanner.css +1 -1
  119. package/dist/css/themes/ImageGridTicker.css +1 -1
  120. package/dist/css/themes/Link.css +1 -1
  121. package/dist/css/themes/ListGroupHeader.css +1 -1
  122. package/dist/css/themes/ListItem.css +1 -1
  123. package/dist/css/themes/MastheadCountrySelector.css +1 -1
  124. package/dist/css/themes/MastheadItem.css +1 -1
  125. package/dist/css/themes/MastheadProfileMenu.css +1 -1
  126. package/dist/css/themes/MastheadShell.css +1 -1
  127. package/dist/css/themes/MediaPlayer.css +1 -1
  128. package/dist/css/themes/Modal.css +1 -1
  129. package/dist/css/themes/PhoneNumberField.css +1 -1
  130. package/dist/css/themes/Search.css +1 -1
  131. package/dist/css/themes/SecondaryNavigationItem.css +1 -1
  132. package/dist/css/themes/SelectBase.css +1 -1
  133. package/dist/css/themes/StepInput.css +1 -1
  134. package/dist/css/themes/TabInOverflow.css +1 -1
  135. package/dist/css/themes/TabNavigation.css +1 -1
  136. package/dist/css/themes/TableCellBase.css +1 -1
  137. package/dist/css/themes/TagGroup.css +1 -1
  138. package/dist/css/themes/TextArea.css +1 -1
  139. package/dist/css/themes/TextField.css +1 -1
  140. package/dist/css/themes/Wizard.css +1 -1
  141. package/dist/custom-elements-internal.json +1191 -82
  142. package/dist/custom-elements.json +818 -127
  143. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  144. package/dist/generated/assets/i18n/messagebundle_it.json +1 -1
  145. package/dist/generated/assets/i18n/messagebundle_ja.json +1 -1
  146. package/dist/generated/assets/i18n/messagebundle_ko.json +1 -1
  147. package/dist/generated/assets/i18n/messagebundle_lt.json +1 -1
  148. package/dist/generated/assets/i18n/messagebundle_lv.json +1 -1
  149. package/dist/generated/assets/i18n/messagebundle_uk.json +1 -1
  150. package/dist/generated/i18n/i18n-defaults.d.ts +2 -1
  151. package/dist/generated/i18n/i18n-defaults.js +2 -1
  152. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  153. package/dist/generated/themes/AccordionItem.css.d.ts +1 -1
  154. package/dist/generated/themes/AccordionItem.css.js +1 -1
  155. package/dist/generated/themes/AccordionItem.css.js.map +1 -1
  156. package/dist/generated/themes/AccordionSpotlight.css.d.ts +1 -1
  157. package/dist/generated/themes/AccordionSpotlight.css.js +1 -1
  158. package/dist/generated/themes/AccordionSpotlight.css.js.map +1 -1
  159. package/dist/generated/themes/Avatar.css.d.ts +1 -1
  160. package/dist/generated/themes/Avatar.css.js +1 -1
  161. package/dist/generated/themes/Avatar.css.js.map +1 -1
  162. package/dist/generated/themes/Breadcrumbs.css.d.ts +1 -1
  163. package/dist/generated/themes/Breadcrumbs.css.js +1 -1
  164. package/dist/generated/themes/Breadcrumbs.css.js.map +1 -1
  165. package/dist/generated/themes/BreadcrumbsPopover.css.d.ts +1 -1
  166. package/dist/generated/themes/BreadcrumbsPopover.css.js +1 -1
  167. package/dist/generated/themes/BreadcrumbsPopover.css.js.map +1 -1
  168. package/dist/generated/themes/CountrySelector.css.d.ts +1 -1
  169. package/dist/generated/themes/CountrySelector.css.js +1 -1
  170. package/dist/generated/themes/CountrySelector.css.js.map +1 -1
  171. package/dist/generated/themes/EventRibbon.css.d.ts +1 -1
  172. package/dist/generated/themes/EventRibbon.css.js +1 -1
  173. package/dist/generated/themes/EventRibbon.css.js.map +1 -1
  174. package/dist/generated/themes/FilterMenu.css.d.ts +1 -1
  175. package/dist/generated/themes/FilterMenu.css.js +1 -1
  176. package/dist/generated/themes/FilterMenu.css.js.map +1 -1
  177. package/dist/generated/themes/Footer.css.d.ts +1 -1
  178. package/dist/generated/themes/Footer.css.js +1 -1
  179. package/dist/generated/themes/Footer.css.js.map +1 -1
  180. package/dist/generated/themes/HeroBanner.css.d.ts +1 -1
  181. package/dist/generated/themes/HeroBanner.css.js +1 -1
  182. package/dist/generated/themes/HeroBanner.css.js.map +1 -1
  183. package/dist/generated/themes/ImageGridTicker.css.d.ts +1 -1
  184. package/dist/generated/themes/ImageGridTicker.css.js +1 -1
  185. package/dist/generated/themes/ImageGridTicker.css.js.map +1 -1
  186. package/dist/generated/themes/Link.css.d.ts +1 -1
  187. package/dist/generated/themes/Link.css.js +1 -1
  188. package/dist/generated/themes/Link.css.js.map +1 -1
  189. package/dist/generated/themes/ListGroupHeader.css.d.ts +1 -1
  190. package/dist/generated/themes/ListGroupHeader.css.js +1 -1
  191. package/dist/generated/themes/ListGroupHeader.css.js.map +1 -1
  192. package/dist/generated/themes/ListItem.css.d.ts +1 -1
  193. package/dist/generated/themes/ListItem.css.js +1 -1
  194. package/dist/generated/themes/ListItem.css.js.map +1 -1
  195. package/dist/generated/themes/MastheadCountrySelector.css.d.ts +1 -1
  196. package/dist/generated/themes/MastheadCountrySelector.css.js +1 -1
  197. package/dist/generated/themes/MastheadCountrySelector.css.js.map +1 -1
  198. package/dist/generated/themes/MastheadItem.css.d.ts +1 -1
  199. package/dist/generated/themes/MastheadItem.css.js +1 -1
  200. package/dist/generated/themes/MastheadItem.css.js.map +1 -1
  201. package/dist/generated/themes/MastheadProfileMenu.css.d.ts +1 -1
  202. package/dist/generated/themes/MastheadProfileMenu.css.js +1 -1
  203. package/dist/generated/themes/MastheadProfileMenu.css.js.map +1 -1
  204. package/dist/generated/themes/MastheadShell.css.d.ts +1 -1
  205. package/dist/generated/themes/MastheadShell.css.js +1 -1
  206. package/dist/generated/themes/MastheadShell.css.js.map +1 -1
  207. package/dist/generated/themes/MediaPlayer.css.d.ts +1 -1
  208. package/dist/generated/themes/MediaPlayer.css.js +1 -1
  209. package/dist/generated/themes/MediaPlayer.css.js.map +1 -1
  210. package/dist/generated/themes/Modal.css.d.ts +1 -1
  211. package/dist/generated/themes/Modal.css.js +1 -1
  212. package/dist/generated/themes/Modal.css.js.map +1 -1
  213. package/dist/generated/themes/PhoneNumberField.css.d.ts +1 -1
  214. package/dist/generated/themes/PhoneNumberField.css.js +1 -1
  215. package/dist/generated/themes/PhoneNumberField.css.js.map +1 -1
  216. package/dist/generated/themes/Search.css.d.ts +1 -1
  217. package/dist/generated/themes/Search.css.js +1 -1
  218. package/dist/generated/themes/Search.css.js.map +1 -1
  219. package/dist/generated/themes/SecondaryNavigationItem.css.d.ts +1 -1
  220. package/dist/generated/themes/SecondaryNavigationItem.css.js +1 -1
  221. package/dist/generated/themes/SecondaryNavigationItem.css.js.map +1 -1
  222. package/dist/generated/themes/SelectBase.css.d.ts +1 -1
  223. package/dist/generated/themes/SelectBase.css.js +1 -1
  224. package/dist/generated/themes/SelectBase.css.js.map +1 -1
  225. package/dist/generated/themes/StepInput.css.d.ts +1 -1
  226. package/dist/generated/themes/StepInput.css.js +1 -1
  227. package/dist/generated/themes/StepInput.css.js.map +1 -1
  228. package/dist/generated/themes/TabInOverflow.css.d.ts +1 -1
  229. package/dist/generated/themes/TabInOverflow.css.js +1 -1
  230. package/dist/generated/themes/TabInOverflow.css.js.map +1 -1
  231. package/dist/generated/themes/TabNavigation.css.d.ts +1 -1
  232. package/dist/generated/themes/TabNavigation.css.js +1 -1
  233. package/dist/generated/themes/TabNavigation.css.js.map +1 -1
  234. package/dist/generated/themes/TableCellBase.css.d.ts +1 -1
  235. package/dist/generated/themes/TableCellBase.css.js +1 -1
  236. package/dist/generated/themes/TableCellBase.css.js.map +1 -1
  237. package/dist/generated/themes/TagGroup.css.d.ts +1 -1
  238. package/dist/generated/themes/TagGroup.css.js +1 -1
  239. package/dist/generated/themes/TagGroup.css.js.map +1 -1
  240. package/dist/generated/themes/TextArea.css.d.ts +1 -1
  241. package/dist/generated/themes/TextArea.css.js +1 -1
  242. package/dist/generated/themes/TextArea.css.js.map +1 -1
  243. package/dist/generated/themes/TextField.css.d.ts +1 -1
  244. package/dist/generated/themes/TextField.css.js +1 -1
  245. package/dist/generated/themes/TextField.css.js.map +1 -1
  246. package/dist/generated/themes/Wizard.css.d.ts +1 -1
  247. package/dist/generated/themes/Wizard.css.js +1 -1
  248. package/dist/generated/themes/Wizard.css.js.map +1 -1
  249. package/dist/messagebundle.properties +1 -0
  250. package/dist/messagebundle_en.properties +1 -0
  251. package/dist/messagebundle_it.properties +123 -0
  252. package/dist/messagebundle_ja.properties +127 -1
  253. package/dist/messagebundle_ko.properties +126 -0
  254. package/dist/messagebundle_lt.properties +126 -0
  255. package/dist/messagebundle_lv.properties +9 -0
  256. package/dist/messagebundle_uk.properties +8 -0
  257. package/dist/types/FooterAskJoulePosition.d.ts +5 -0
  258. package/dist/types/FooterAskJoulePosition.js +7 -0
  259. package/dist/types/FooterAskJoulePosition.js.map +1 -0
  260. package/dist/utils/searchBackdrop.d.ts +1 -0
  261. package/dist/utils/searchBackdrop.js +23 -0
  262. package/dist/utils/searchBackdrop.js.map +1 -0
  263. package/dist/vscode.html-custom-data.json +176 -3
  264. package/dist/web-types.json +396 -8
  265. package/package.json +1 -1
  266. package/src/BreadcrumbsTemplate.tsx +12 -10
  267. package/src/CountrySelectorTemplate.tsx +2 -2
  268. package/src/FilterMenu.ts +11 -7
  269. package/src/Footer.ts +41 -3
  270. package/src/FooterTemplate.tsx +28 -4
  271. package/src/HeroBanner.ts +66 -0
  272. package/src/List.ts +16 -8
  273. package/src/ListGroupHeader.ts +12 -5
  274. package/src/ListGroupHeaderBase.ts +3 -3
  275. package/src/ListGroupHeaderTemplate.tsx +228 -0
  276. package/src/ListItem.ts +10 -5
  277. package/src/ListItemBase.ts +9 -4
  278. package/src/ListItemTemplate.tsx +193 -0
  279. package/src/ListSelectAll.ts +4 -5
  280. package/src/ListSelectAllTemplate.tsx +38 -0
  281. package/src/ListTemplate.tsx +60 -0
  282. package/src/MastheadShell.ts +44 -0
  283. package/src/MediaPlayer.ts +6 -0
  284. package/src/PhoneNumberField.ts +23 -22
  285. package/src/PhoneNumberFieldTemplate.tsx +128 -0
  286. package/src/Search.ts +21 -1
  287. package/src/SearchableListBase.ts +62 -7
  288. package/src/SearchableListBaseTemplate.tsx +1 -0
  289. package/src/SelectBase.ts +14 -21
  290. package/src/SelectBox.ts +34 -0
  291. package/src/SelectBoxTemplate.tsx +3 -1
  292. package/src/StatusMessage.ts +4 -3
  293. package/src/TextAreaTemplate.tsx +1 -1
  294. package/src/TextFieldTemplate.tsx +1 -1
  295. package/src/Upload.ts +7 -10
  296. package/src/UploadItem.ts +7 -9
  297. package/src/UploadItemTemplate.tsx +62 -0
  298. package/src/UploadTemplate.tsx +53 -0
  299. package/src/generated/i18n/i18n-defaults.ts +2 -2
  300. package/src/generated/themes/AccordionItem.css.ts +1 -1
  301. package/src/generated/themes/AccordionSpotlight.css.ts +1 -1
  302. package/src/generated/themes/Avatar.css.ts +1 -1
  303. package/src/generated/themes/Breadcrumbs.css.ts +1 -1
  304. package/src/generated/themes/BreadcrumbsPopover.css.ts +1 -1
  305. package/src/generated/themes/CountrySelector.css.ts +1 -1
  306. package/src/generated/themes/EventRibbon.css.ts +1 -1
  307. package/src/generated/themes/FilterMenu.css.ts +1 -1
  308. package/src/generated/themes/Footer.css.ts +1 -1
  309. package/src/generated/themes/HeroBanner.css.ts +1 -1
  310. package/src/generated/themes/ImageGridTicker.css.ts +1 -1
  311. package/src/generated/themes/Link.css.ts +1 -1
  312. package/src/generated/themes/ListGroupHeader.css.ts +1 -1
  313. package/src/generated/themes/ListItem.css.ts +1 -1
  314. package/src/generated/themes/MastheadCountrySelector.css.ts +1 -1
  315. package/src/generated/themes/MastheadItem.css.ts +1 -1
  316. package/src/generated/themes/MastheadProfileMenu.css.ts +1 -1
  317. package/src/generated/themes/MastheadShell.css.ts +1 -1
  318. package/src/generated/themes/MediaPlayer.css.ts +1 -1
  319. package/src/generated/themes/Modal.css.ts +1 -1
  320. package/src/generated/themes/PhoneNumberField.css.ts +1 -1
  321. package/src/generated/themes/Search.css.ts +1 -1
  322. package/src/generated/themes/SecondaryNavigationItem.css.ts +1 -1
  323. package/src/generated/themes/SelectBase.css.ts +1 -1
  324. package/src/generated/themes/StepInput.css.ts +1 -1
  325. package/src/generated/themes/TabInOverflow.css.ts +1 -1
  326. package/src/generated/themes/TabNavigation.css.ts +1 -1
  327. package/src/generated/themes/TableCellBase.css.ts +1 -1
  328. package/src/generated/themes/TagGroup.css.ts +1 -1
  329. package/src/generated/themes/TextArea.css.ts +1 -1
  330. package/src/generated/themes/TextField.css.ts +1 -1
  331. package/src/generated/themes/Wizard.css.ts +1 -1
  332. package/src/i18n/messagebundle.properties +1 -0
  333. package/src/i18n/messagebundle_en.properties +1 -0
  334. package/src/i18n/messagebundle_it.properties +123 -0
  335. package/src/i18n/messagebundle_ja.properties +127 -1
  336. package/src/i18n/messagebundle_ko.properties +126 -0
  337. package/src/i18n/messagebundle_lt.properties +126 -0
  338. package/src/i18n/messagebundle_lv.properties +9 -0
  339. package/src/i18n/messagebundle_uk.properties +8 -0
  340. package/src/themes/AccordionItem.css +1 -1
  341. package/src/themes/AccordionSpotlight.css +1 -1
  342. package/src/themes/Avatar.css +1 -1
  343. package/src/themes/Breadcrumbs.css +46 -5
  344. package/src/themes/BreadcrumbsPopover.css +65 -0
  345. package/src/themes/CountrySelector.css +12 -2
  346. package/src/themes/EventRibbon.css +1 -1
  347. package/src/themes/FilterMenu.css +3 -2
  348. package/src/themes/Footer.css +98 -1
  349. package/src/themes/HeroBanner.css +1 -1
  350. package/src/themes/ImageGridTicker.css +1 -1
  351. package/src/themes/Link.css +127 -8
  352. package/src/themes/ListGroupHeader.css +6 -3
  353. package/src/themes/ListItem.css +10 -2
  354. package/src/themes/MastheadCountrySelector.css +1 -1
  355. package/src/themes/MastheadItem.css +1 -1
  356. package/src/themes/MastheadProfileMenu.css +1 -1
  357. package/src/themes/MastheadShell.css +1 -1
  358. package/src/themes/MediaPlayer.css +10 -10
  359. package/src/themes/Modal.css +5 -3
  360. package/src/themes/PhoneNumberField.css +16 -6
  361. package/src/themes/Search.css +9 -9
  362. package/src/themes/SecondaryNavigationItem.css +1 -1
  363. package/src/themes/SelectBase.css +2 -2
  364. package/src/themes/StepInput.css +1 -1
  365. package/src/themes/TabInOverflow.css +2 -2
  366. package/src/themes/TabNavigation.css +7 -7
  367. package/src/themes/TableCellBase.css +1 -1
  368. package/src/themes/TagGroup.css +1 -1
  369. package/src/themes/TextArea.css +1 -1
  370. package/src/themes/TextField.css +1 -1
  371. package/src/themes/Wizard.css +1 -1
  372. package/src/types/FooterAskJoulePosition.ts +6 -0
  373. package/src/utils/searchBackdrop.ts +23 -0
  374. package/dist/assets/messagebundle_en-DoNTK1BE.js +0 -1
  375. package/dist/assets/messagebundle_it-BhrBdOd4.js +0 -1
  376. package/dist/assets/messagebundle_ja-5P5L7sQ1.js +0 -1
  377. package/dist/assets/messagebundle_ko-B9H5YQlC.js +0 -1
  378. package/dist/assets/messagebundle_lt-BJ5gr_LF.js +0 -1
  379. package/dist/assets/messagebundle_lv-D06tlATH.js +0 -1
  380. package/dist/assets/messagebundle_uk-GmdhsMsP.js +0 -1
  381. package/dist/generated/templates/ListGroupHeaderTemplate.lit.d.ts +0 -3
  382. package/dist/generated/templates/ListGroupHeaderTemplate.lit.js +0 -30
  383. package/dist/generated/templates/ListGroupHeaderTemplate.lit.js.map +0 -1
  384. package/dist/generated/templates/ListItemTemplate.lit.d.ts +0 -3
  385. package/dist/generated/templates/ListItemTemplate.lit.js +0 -49
  386. package/dist/generated/templates/ListItemTemplate.lit.js.map +0 -1
  387. package/dist/generated/templates/ListSelectAllTemplate.lit.d.ts +0 -3
  388. package/dist/generated/templates/ListSelectAllTemplate.lit.js +0 -7
  389. package/dist/generated/templates/ListSelectAllTemplate.lit.js.map +0 -1
  390. package/dist/generated/templates/ListTemplate.lit.d.ts +0 -3
  391. package/dist/generated/templates/ListTemplate.lit.js +0 -11
  392. package/dist/generated/templates/ListTemplate.lit.js.map +0 -1
  393. package/dist/generated/templates/PhoneNumberFieldTemplate.lit.d.ts +0 -3
  394. package/dist/generated/templates/PhoneNumberFieldTemplate.lit.js +0 -16
  395. package/dist/generated/templates/PhoneNumberFieldTemplate.lit.js.map +0 -1
  396. package/dist/generated/templates/UploadItemTemplate.lit.d.ts +0 -3
  397. package/dist/generated/templates/UploadItemTemplate.lit.js +0 -12
  398. package/dist/generated/templates/UploadItemTemplate.lit.js.map +0 -1
  399. package/dist/generated/templates/UploadTemplate.lit.d.ts +0 -3
  400. package/dist/generated/templates/UploadTemplate.lit.js +0 -10
  401. package/dist/generated/templates/UploadTemplate.lit.js.map +0 -1
  402. package/src/List.hbs +0 -38
  403. package/src/ListGroupHeader.hbs +0 -188
  404. package/src/ListItem.hbs +0 -166
  405. package/src/ListSelectAll.hbs +0 -31
  406. package/src/PhoneNumberField.hbs +0 -119
  407. package/src/Upload.hbs +0 -21
  408. package/src/UploadItem.hbs +0 -32
  409. package/src/generated/templates/ListGroupHeaderTemplate.lit.ts +0 -34
  410. package/src/generated/templates/ListItemTemplate.lit.ts +0 -53
  411. package/src/generated/templates/ListSelectAllTemplate.lit.ts +0 -11
  412. package/src/generated/templates/ListTemplate.lit.ts +0 -15
  413. package/src/generated/templates/PhoneNumberFieldTemplate.lit.ts +0 -20
  414. package/src/generated/templates/UploadItemTemplate.lit.ts +0 -16
  415. package/src/generated/templates/UploadTemplate.lit.ts +0 -14
package/src/Footer.ts CHANGED
@@ -21,11 +21,13 @@ import UDExDivider from "./Divider.js";
21
21
  import UDExSocialMediaButton from "./SocialMediaButton.js";
22
22
  import type { UDExSocialMediaButtonType } from "./types/SocialMediaButtonType.js";
23
23
  import type { UDExTarget } from "./types/common.js";
24
+ import UDExFooterAskJoulePosition from "./types/FooterAskJoulePosition.js";
24
25
  import { BreakpointUtils } from "./utils/Breakpoints.js";
25
26
  import parseArrayFromString from "./utils/parseArrayFromString.js";
26
27
  import FooterTemplate from "./FooterTemplate.js";
27
28
  import {
28
29
  ABOUT_SAP,
30
+ ASK_JOULE,
29
31
  CHAT_WITH_US,
30
32
  CONTACT_US,
31
33
  EMAIL,
@@ -79,7 +81,7 @@ type UDExFooterBaseEventDetail = {
79
81
  originalEvent: MouseEvent | Event,
80
82
  }
81
83
 
82
- type BaseEvents = "contact-chat-click" | "contact-phone-local-numbers-click" | "contact-email-click" | "contact-phone-click" | "logo-click" | "back-to-top-click";
84
+ type BaseEvents = "contact-chat-click" | "contact-phone-local-numbers-click" | "contact-email-click" | "contact-phone-click" | "logo-click" | "back-to-top-click" | "ask-joule-click";
83
85
 
84
86
  type DetailedEvents = "quick-links-click" | "trending-click" | "about-sap-click" | "site-information-click" | "social-media-link-click";
85
87
 
@@ -152,6 +154,13 @@ type DetailedEvents = "quick-links-click" | "trending-click" | "about-sap-click"
152
154
  * @allowPreventDefault
153
155
  */
154
156
  @event("contact-chat-click", { bubbles: true })
157
+ /**
158
+ * Triggered on click interaction with "Ask Joule" link
159
+ * @public
160
+ * @param { MouseEvent | Event } originalEvent
161
+ * @allowPreventDefault
162
+ */
163
+ @event("ask-joule-click", { bubbles: true })
155
164
  /**
156
165
  * Triggered on click interaction with a link within "Quick Links" category
157
166
  * @public
@@ -218,6 +227,7 @@ class UDExFooter extends UI5Element {
218
227
  "contact-phone-local-numbers-click": UDExFooterBaseEventDetail,
219
228
  "contact-email-click": UDExFooterBaseEventDetail,
220
229
  "contact-phone-click": UDExFooterBaseEventDetail,
230
+ "ask-joule-click": UDExFooterBaseEventDetail,
221
231
  "quick-links-click": UDExFooterDetailedClickEventDetail,
222
232
  "trending-click": UDExFooterDetailedClickEventDetail,
223
233
  "about-sap-click": UDExFooterDetailedClickEventDetail,
@@ -379,6 +389,25 @@ class UDExFooter extends UI5Element {
379
389
  @property({ type: String })
380
390
  chatWithUsLink: string = "";
381
391
 
392
+ /**
393
+ * Defines the Ask Joule link's href
394
+ *
395
+ * @default ""
396
+ * @public
397
+ */
398
+ @property({ type: String })
399
+ askJouleLink: string = "";
400
+
401
+ /**
402
+ * Defines the position of the Ask Joule item within the contact section.
403
+ * Can be "start" (before phone/email/chat) or "end" (after phone/email/chat).
404
+ *
405
+ * @default "start"
406
+ * @public
407
+ */
408
+ @property({ type: String })
409
+ askJoulePosition: UDExFooterAskJoulePosition = UDExFooterAskJoulePosition.Start;
410
+
382
411
  /**
383
412
  * List of the Social links and their icons
384
413
  *
@@ -527,7 +556,7 @@ class UDExFooter extends UI5Element {
527
556
  }
528
557
 
529
558
  get isContactContainerVisible(): boolean {
530
- return !!this.contactNumbersArray.length || !!this.contactUsLink || !!this.chatWithUsLink;
559
+ return !!this.contactNumbersArray.length || !!this.contactUsLink || !!this.chatWithUsLink || !!this.askJouleLink;
531
560
  }
532
561
 
533
562
  get phoneNumberAccessibleName(): string {
@@ -549,6 +578,10 @@ class UDExFooter extends UI5Element {
549
578
  return translate(UDExFooter, CHAT_WITH_US);
550
579
  }
551
580
 
581
+ get askJouleAccessibleName(): string {
582
+ return translate(UDExFooter, ASK_JOULE);
583
+ }
584
+
552
585
  get _quickLinksTitle(): string {
553
586
  return this.quickLinksTitle || translate(UDExFooter, QUICK_LINKS);
554
587
  }
@@ -652,6 +685,10 @@ class UDExFooter extends UI5Element {
652
685
  this.fireFooterBaseEvent(e, "contact-chat-click");
653
686
  }
654
687
 
688
+ _onAskJouleClick(e: MouseEvent): void {
689
+ this.fireFooterBaseEvent(e, "ask-joule-click");
690
+ }
691
+
655
692
  _onQuickLinksClick(e: MouseEvent): void {
656
693
  this.fireFooterDetailedClickEvent(e, "quick-links-click");
657
694
  }
@@ -677,7 +714,8 @@ class UDExFooter extends UI5Element {
677
714
  }
678
715
 
679
716
  fireFooterDetailedClickEvent(e: MouseEvent, eventName: DetailedEvents): void {
680
- const sourceNode = e.composedPath()[0] as HTMLElement;
717
+ const target = e.composedPath()[0] as HTMLElement;
718
+ const sourceNode = (target.closest("a") ?? target);
681
719
  const { innerText, dataset: { id, name } } = sourceNode;
682
720
 
683
721
  this.fireDecoratorEvent(eventName, {
@@ -6,6 +6,7 @@ import headset from "@ui5/webcomponents-icons/dist/headset.js";
6
6
  import email from "@ui5/webcomponents-icons/dist/email.js";
7
7
  import backToTop from "@ui5/webcomponents-icons/dist/back-to-top.js";
8
8
  import discussion from "@ui5/webcomponents-icons/dist/discussion-2.js";
9
+ import da from "@ui5/webcomponents-icons/dist/da.js";
9
10
 
10
11
  import type Footer from "./Footer.js";
11
12
  import UDExLink from "./Link.js";
@@ -16,6 +17,7 @@ import UDExAccordionItem from "./AccordionItem.js";
16
17
  import UDExButton from "./Button.js";
17
18
  import UDExButtonDesign from "./types/ButtonDesign.js";
18
19
  import UDExButtonSize from "./types/ButtonSize.js";
20
+ import UDExFooterAskJoulePosition from "./types/FooterAskJoulePosition.js";
19
21
  import type { AriaRole } from "@ui5/webcomponents-base";
20
22
 
21
23
  export default function FooterTemplate(this: Footer) {
@@ -60,6 +62,7 @@ export default function FooterTemplate(this: Footer) {
60
62
  )}
61
63
  {this.isContactContainerVisible && (
62
64
  <div className={`${rootClass}__contact`}>
65
+ {this.askJouleLink && this.askJoulePosition === UDExFooterAskJoulePosition.Start && askJouleBlock.call(this, rootClass)}
63
66
  {this.contactNumbersArray.length > 0 && (
64
67
  <div className={`${rootClass}__numbers`}>
65
68
  <div className={`${rootClass}__icon-container`}>
@@ -146,6 +149,7 @@ export default function FooterTemplate(this: Footer) {
146
149
  </a>
147
150
  </div>
148
151
  )}
152
+ {this.askJouleLink && this.askJoulePosition === UDExFooterAskJoulePosition.End && askJouleBlock.call(this, rootClass)}
149
153
  </div>
150
154
  )}
151
155
  </div>
@@ -336,7 +340,7 @@ function desktopNavigation(this: Footer, rootClass: string) {
336
340
  href={link.url}
337
341
  onClick={this._onQuickLinksClick}
338
342
  {...(link.role ? { "role": link.role as AriaRole } : {})}>
339
- {link.title}
343
+ <span className="udex-footer__nav-link-text">{link.title}</span>
340
344
  </a>
341
345
  </li>
342
346
  ))}
@@ -359,7 +363,7 @@ function desktopNavigation(this: Footer, rootClass: string) {
359
363
  href={link.url}
360
364
  onClick={this._onTrendingClick}
361
365
  {...(link.role ? { "role": link.role as AriaRole } : {})}>
362
- {link.title}
366
+ <span className="udex-footer__nav-link-text">{link.title}</span>
363
367
  </a>
364
368
  </li>
365
369
  ))}
@@ -382,7 +386,7 @@ function desktopNavigation(this: Footer, rootClass: string) {
382
386
  href={link.url}
383
387
  onClick={this._onAboutSapClick}
384
388
  {...(link.role ? { "role": link.role as AriaRole } : {})}>
385
- {link.title}
389
+ <span className="udex-footer__nav-link-text">{link.title}</span>
386
390
  </a>
387
391
  </li>
388
392
  ))}
@@ -405,7 +409,7 @@ function desktopNavigation(this: Footer, rootClass: string) {
405
409
  href={link.url}
406
410
  onClick={this._onSiteInformationClick}
407
411
  {...(link.role ? { "role": link.role as AriaRole } : {})}>
408
- {link.title}
412
+ <span className="udex-footer__nav-link-text">{link.title}</span>
409
413
  </a>
410
414
  </li>
411
415
  ))}
@@ -416,3 +420,23 @@ function desktopNavigation(this: Footer, rootClass: string) {
416
420
  </div>
417
421
  );
418
422
  }
423
+
424
+ function askJouleBlock(this: Footer, rootClass: string) {
425
+ return (
426
+ <div className={`${rootClass}__ask-joule`}>
427
+ <div className={`${rootClass}__icon-container`}>
428
+ <UI5Icon
429
+ class={`${rootClass}__icon`}
430
+ name={da}
431
+ mode={IconMode.Decorative}>
432
+ </UI5Icon>
433
+ </div>
434
+ <a
435
+ href={this.askJouleLink}
436
+ className={`${rootClass}__ask-joule-link`}
437
+ onClick={this._onAskJouleClick}>
438
+ {this.askJouleAccessibleName}
439
+ </a>
440
+ </div>
441
+ );
442
+ }
package/src/HeroBanner.ts CHANGED
@@ -8,6 +8,7 @@ import { isSpace } from "@ui5/webcomponents-base/dist/Keys.js";
8
8
  import Icon from "@ui5/webcomponents/dist/Icon.js";
9
9
  import HeroBannerTemplate from "./HeroBannerTemplate.js";
10
10
  import type UDExBreadcrumbs from "./Breadcrumbs.js";
11
+ import ensureSearchBackdropStyles from "./utils/searchBackdrop.js";
11
12
 
12
13
  // Styles
13
14
  import HeroBannerCss from "./generated/themes/HeroBanner.css.js";
@@ -155,6 +156,71 @@ class UDExHeroBanner extends UI5Element {
155
156
  this._calculateMediaButtonState();
156
157
  });
157
158
  }
159
+ this._handleSuggestionOpenedBound = this._showSearchBackdrop.bind(this);
160
+ this._handleSuggestionClosedBound = this._hideSearchBackdrop.bind(this);
161
+ this.addEventListener("suggestion-popover-opened", this._handleSuggestionOpenedBound);
162
+ this.addEventListener("suggestion-popover-closed", this._handleSuggestionClosedBound);
163
+ }
164
+
165
+ onExitDOM() {
166
+ this.removeEventListener("suggestion-popover-opened", this._handleSuggestionOpenedBound);
167
+ this.removeEventListener("suggestion-popover-closed", this._handleSuggestionClosedBound);
168
+ this._removeBackdropScrollListener();
169
+ this._bodyBackdropEl?.remove();
170
+ this._bodyBackdropEl = null;
171
+ }
172
+
173
+ _handleSuggestionOpenedBound!: () => void;
174
+ _handleSuggestionClosedBound!: () => void;
175
+ _handleBackdropScrollBound!: () => void;
176
+ _bodyBackdropEl: HTMLElement | null = null;
177
+
178
+ private _getBackdropEl(): HTMLElement {
179
+ if (!this._bodyBackdropEl) {
180
+ ensureSearchBackdropStyles(this.ownerDocument);
181
+ const el = this.ownerDocument.createElement("div");
182
+ el.className = "udex-search-backdrop";
183
+ el.addEventListener("click", () => this.handleBackdropClick());
184
+ this.ownerDocument.body.appendChild(el);
185
+ this._bodyBackdropEl = el;
186
+ }
187
+ return this._bodyBackdropEl;
188
+ }
189
+
190
+ private _updateBackdropTop(): void {
191
+ if (this._bodyBackdropEl) {
192
+ this._bodyBackdropEl.style.top = `${this.getBoundingClientRect().bottom}px`;
193
+ }
194
+ }
195
+
196
+ private _addBackdropScrollListener(): void {
197
+ this._handleBackdropScrollBound = this._updateBackdropTop.bind(this);
198
+ window.addEventListener("scroll", this._handleBackdropScrollBound, { passive: true });
199
+ }
200
+
201
+ private _removeBackdropScrollListener(): void {
202
+ if (this._handleBackdropScrollBound) {
203
+ window.removeEventListener("scroll", this._handleBackdropScrollBound);
204
+ }
205
+ }
206
+
207
+ private _showSearchBackdrop(): void {
208
+ const backdrop = this._getBackdropEl();
209
+ this._updateBackdropTop();
210
+ this._addBackdropScrollListener();
211
+ backdrop.style.display = "block";
212
+ }
213
+
214
+ private _hideSearchBackdrop(): void {
215
+ this._removeBackdropScrollListener();
216
+ if (this._bodyBackdropEl) {
217
+ this._bodyBackdropEl.style.display = "none";
218
+ }
219
+ }
220
+
221
+ handleBackdropClick(): void {
222
+ const search = this.querySelector<any>("[udex-search]");
223
+ search?.onClosePopover?.();
158
224
  }
159
225
 
160
226
  _toggleMediaButton(): void {
package/src/List.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
2
2
  import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
3
- import type { DefaultSlot } from "@ui5/webcomponents-base/dist/UI5Element.js";
4
3
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
4
+ import type { DefaultSlot } from "@ui5/webcomponents-base/dist/UI5Element.js";
5
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
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
7
+ import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
8
8
  import {
9
9
  isUp, isDown, isHome, isEnd, isRight, isLeft,
10
10
  } from "@ui5/webcomponents-base/dist/Keys.js";
@@ -17,15 +17,15 @@ import type UDExUploadItem from "./UploadItem.js";
17
17
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
18
18
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
19
19
  import { ARIA_LABEL_LIST_MULTISELECTABLE, ARIA_LABEL_LIST_SELECTABLE } from "./generated/i18n/i18n-defaults.js";
20
- import ListTemplate from "./generated/templates/ListTemplate.lit.js";
21
20
  import translate from "./utils/translate.js";
22
-
23
- // Styles
24
- import ListCss from "./generated/themes/List.css.js";
25
21
  import isLetterKey from "./utils/isLetterKeyPressed.js";
26
22
  import type { UDExListWithFirstLetterFocus } from "./utils/ListWithFirstLetterFocus.js";
27
23
  import UDExFirstLetterFocusHandler from "./utils/ListWithFirstLetterFocus.js";
28
24
  import getEffectiveScrollbarStyle from "./utils/getEffectiveScrollbarStyle.js";
25
+ import ListTemplate from "./ListTemplate.js";
26
+
27
+ // Styles
28
+ import ListCss from "./generated/themes/List.css.js";
29
29
 
30
30
  export type UDExListItemBase = UDExListItem & UDExListGroupHeader & UDExUploadItem;
31
31
 
@@ -55,11 +55,11 @@ type UDExListSelectionChangeEventDetail = {
55
55
  * @public
56
56
  */
57
57
  @customElement({
58
+ languageAware: true,
58
59
  tag: "udex-list",
59
- renderer: litRender,
60
+ renderer: jsxRenderer,
60
61
  styles: [ListCss, getEffectiveScrollbarStyle()],
61
62
  template: ListTemplate,
62
- dependencies: [],
63
63
  })
64
64
 
65
65
  /**
@@ -598,6 +598,14 @@ class UDExList extends UI5Element {
598
598
  return this._hasCollapsibleGroups ? "tree" : this.accessibleRole;
599
599
  }
600
600
 
601
+ /**
602
+ * Role for SingleContent mode. listbox/option is for selection widgets only;
603
+ * SingleContent is informational so "list"/"listitem" is the correct semantic.
604
+ */
605
+ get singleContentRole(): string {
606
+ return this.accessibleRole !== "listbox" ? this.accessibleRole : "list";
607
+ }
608
+
601
609
  /** aria-multiselectable exposed only for MultiSelect tree (collapsible groups). */
602
610
  get _listAriaMultiSelectable(): string | undefined {
603
611
  return (this._hasCollapsibleGroups && this.modeMultiSelect) ? "true" : undefined;
@@ -1,13 +1,12 @@
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 litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
3
+ import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
4
4
  import {
5
5
  isEnter, isLeft, isRight, isSpace,
6
6
  } from "@ui5/webcomponents-base/dist/Keys.js";
7
- import Icon from "@ui5/webcomponents/dist/Icon.js";
8
7
  import "@ui5/webcomponents-icons/dist/slim-arrow-right.js";
9
8
  import UDExListGroupHeaderBase from "./ListGroupHeaderBase.js";
10
- import ListGroupHeaderTemplate from "./generated/templates/ListGroupHeaderTemplate.lit.js";
9
+ import ListGroupHeaderTemplate from "./ListGroupHeaderTemplate.js";
11
10
  import { UDExListItemSize } from "./types/List.js";
12
11
  import type { UDExListItemBaseEvents } from "./ListItemBase.js";
13
12
  import type UDExListItemBase from "./ListItemBase.js";
@@ -42,10 +41,10 @@ type UDExListGroupHeaderBaseHeaderPressEventDetail = {
42
41
  */
43
42
  @customElement({
44
43
  tag: "udex-list-group-header",
45
- renderer: litRender,
44
+ languageAware: true,
45
+ renderer: jsxRenderer,
46
46
  styles: ListGroupHeaderCss,
47
47
  template: ListGroupHeaderTemplate,
48
- dependencies: [Icon],
49
48
  })
50
49
 
51
50
  /**
@@ -56,6 +55,14 @@ type UDExListGroupHeaderBaseHeaderPressEventDetail = {
56
55
  */
57
56
  @event("header-press", { bubbles: true })
58
57
 
58
+ /**
59
+ * Triggered when the user clicks on an accordion item.
60
+ * @public
61
+ * @param { string } name
62
+ * @param { boolean } expanded
63
+ */
64
+ @event("accordion-icon-click", { bubbles: true })
65
+
59
66
  class UDExListGroupHeader extends UDExListGroupHeaderBase {
60
67
  eventDetails!: {
61
68
  "header-press": UDExListGroupHeaderBaseHeaderPressEventDetail,
@@ -1,9 +1,9 @@
1
1
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
2
+ import type { DefaultSlot } from "@ui5/webcomponents-base/dist/UI5Element.js";
2
3
  import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
3
4
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
4
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
5
+ import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
5
6
  import UDExListItemBase from "./ListItemBase.js";
6
- import type { DefaultSlot } from "@ui5/webcomponents-base/dist/UI5Element.js";
7
7
 
8
8
  const listGroupHeaderClass: string = "udex-list__group-header";
9
9
 
@@ -20,7 +20,7 @@ const listGroupHeaderClass: string = "udex-list__group-header";
20
20
  */
21
21
  @customElement({
22
22
  languageAware: true,
23
- renderer: litRender,
23
+ renderer: jsxRenderer,
24
24
  })
25
25
 
26
26
  class UDExListGroupHeaderBase extends UDExListItemBase {
@@ -0,0 +1,228 @@
1
+ import type { AriaRole } from "@ui5/webcomponents-base/dist/types.js";
2
+ import type UDExListGroupHeader from "./ListGroupHeader.js";
3
+ import UDExListItem from "./ListItem.js";
4
+ import UDExButton from "./Button.js";
5
+ import Icon from "@ui5/webcomponents/dist/Icon.js";
6
+ import UDExButtonSize from "./types/ButtonSize.js";
7
+ import UDExButtonDesign from "./types/ButtonDesign.js";
8
+ import slimArrowRight from "@ui5/webcomponents-icons/dist/slim-arrow-right.js";
9
+
10
+ function SingleGroupHeader(this: UDExListGroupHeader) {
11
+ return (
12
+ <div class={`udex-list__group-content udex-list__group-header-wrap ${this.sizeClass}`} part="group-item">
13
+ {this.typeNumber && <span class="udex-list__number">{this.numberOfItem}.</span>}
14
+ {this.typeCircle && <span class="udex-list__circle">&#x2022;</span>}
15
+ {this.typeIcon && (
16
+ <Icon
17
+ class="udex-list__icon"
18
+ accessible-role="presentation"
19
+ aria-hidden="true"
20
+ part="icon"
21
+ name={this._icon}
22
+ />
23
+ )}
24
+ <div class="udex-list__header">
25
+ <span
26
+ id="group-heading"
27
+ class="udex-list__header-title"
28
+ {...({ innerHTML: this.label } as object)}>
29
+ </span>
30
+ {this.supportingText && (
31
+ <span class={`udex-list__supporting-text ${this.sizeClass}`}>{this.supportingText}</span>
32
+ )}
33
+ </div>
34
+ </div>
35
+ );
36
+ }
37
+
38
+ function SingleGroupHeaderCollapsible(this: UDExListGroupHeader) {
39
+ return (
40
+ <div
41
+ class={`udex-list__group-content udex-list__group-header-wrap ${this.sizeClass}`}
42
+ part="group-item"
43
+ id={`${this._id}_group-content__focusable`}
44
+ role={this.singleCollapsibleHeaderRole as AriaRole}
45
+ tabIndex={0}
46
+ onKeyDown={this.handleKeyDown}
47
+ aria-expanded={this.expanded}
48
+ aria-controls={this.ariaControlsId}
49
+ _tab-index={Number(this._effectiveTabIndex)}>
50
+ {this.typeNumber && <span class="udex-list__number">{this.numberOfItem}.</span>}
51
+ {this.typeCircle && <span class="udex-list__circle">&#x2022;</span>}
52
+ {this.typeIcon && (
53
+ <Icon
54
+ name={this._icon}
55
+ class="udex-list__icon"
56
+ accessible-role="presentation"
57
+ aria-hidden="true"
58
+ part="icon"
59
+ />
60
+ )}
61
+ <div class="udex-list__header">
62
+ <span
63
+ id="group-heading"
64
+ class="udex-list__header-title"
65
+ {...({ innerHTML: this.label } as object)}>
66
+ </span>
67
+ {this.supportingText && (
68
+ <span class={`udex-list__supporting-text ${this.sizeClass}`}>{this.supportingText}</span>
69
+ )}
70
+ </div>
71
+ <div class="udex-list__group-heading__icon-wrapper">
72
+ <UDExButton
73
+ size="Small"
74
+ design="Tertiary"
75
+ class="udex-list__group-heading__icon"
76
+ onClick={this.handleCollapseIconClick as unknown as EventListener}
77
+ tabindex={-1}
78
+ accessible-name={this.expandButtonAccessibleName}
79
+ icon={slimArrowRight}
80
+ {...({ "mode": "Interactive" } as object)}
81
+ />
82
+ </div>
83
+ </div>
84
+ );
85
+ }
86
+
87
+ function MultiOrRadioGroupHeader(this: UDExListGroupHeader) {
88
+ if (this.isNonActiveHeader) {
89
+ return (
90
+ <header id="group-heading" class="udex-list__inactive-header udex-list__group-header-wrap">
91
+ <div class="udex-list__inactive-header-content">
92
+ <span class="udex-list__header-title" {...({ innerHTML: this.label } as object)}></span>
93
+ {this.supportingText && (
94
+ <span class="udex-list__supporting-text">{this.supportingText}</span>
95
+ )}
96
+ </div>
97
+ </header>
98
+ );
99
+ }
100
+ return (
101
+ <UDExListItem
102
+ id="group-heading"
103
+ part="group-item"
104
+ role="none"
105
+ selected={this.selected}
106
+ indeterminate={this.indeterminate}
107
+ class={this.className}
108
+ mode={this.mode}
109
+ controlled={this.controlled}
110
+ onClick={this.handleHeaderPress}
111
+ onKeyDown={this.handleKeyDownPress}
112
+ type={this.type}
113
+ label={this.label}
114
+ size={this.size}
115
+ supportingText={this.supportingText}
116
+ accessible-role={this.nonCollapsibleHeaderAccessibleRole}
117
+ _additional-class-name={this._additionalClassName}
118
+ _tab-index={Number(this._effectiveTabIndex)}
119
+ _icon={this._icon}
120
+ _filtered={this._filtered}
121
+ />
122
+ );
123
+ }
124
+
125
+ function MultiOrRadioGroupHeaderCollapsible(this: UDExListGroupHeader) {
126
+ if (this.isNonActiveHeader) {
127
+ return (
128
+ <header
129
+ role="button"
130
+ id="group-heading"
131
+ class="udex-list__inactive-header udex-list__group-header-wrap"
132
+ tabIndex={Number(this._effectiveTabIndex)}
133
+ aria-expanded={this.expanded}
134
+ aria-controls={this.ariaControlsId}>
135
+ <div class="udex-list__inactive-header-content">
136
+ <span class="udex-list__header-title" {...({ innerHTML: this.label } as object)}></span>
137
+ {this.supportingText && (
138
+ <span class="udex-list__supporting-text">{this.supportingText}</span>
139
+ )}
140
+ </div>
141
+ <div class="udex-list__group-heading__icon-wrapper">
142
+ <UDExButton
143
+ class="udex-list__group-heading__icon"
144
+ size={UDExButtonSize.Small}
145
+ design={UDExButtonDesign.Tertiary}
146
+ tabindex={-1}
147
+ icon={slimArrowRight}
148
+ onClick={this.handleCollapseIconClick as EventListener}
149
+ accessible-name={this.expandButtonAccessibleName}
150
+ {...({ "mode": "Interactive" } as object)}
151
+ />
152
+ </div>
153
+ </header>
154
+ );
155
+ }
156
+ return (
157
+ <UDExListItem
158
+ id="group-heading"
159
+ part="group-item"
160
+ role="none"
161
+ aria-expanded={this.expanded}
162
+ aria-controls={this.ariaControlsId}
163
+ selected={this.selected}
164
+ indeterminate={this.indeterminate}
165
+ collapsible={this.collapsible}
166
+ collapsed={this.collapsed}
167
+ class={this.className}
168
+ mode={this.mode}
169
+ controlled={this.controlled}
170
+ onClick={this.handleHeaderPress}
171
+ onKeyDown={this.handleKeyDownPress}
172
+ type={this.type}
173
+ label={this.label}
174
+ size={this.size}
175
+ supportingText={this.supportingText}
176
+ accessible-role={this.collapsibleHeaderAccessibleRole}
177
+ onAccordionIconClick={this.handleCollapseIconClick as EventListener}
178
+ _additional-class-name={this._additionalClassName}
179
+ _tab-index={Number(this._effectiveTabIndex)}
180
+ _icon={this._icon}
181
+ _filtered={this._filtered}
182
+ />
183
+ );
184
+ }
185
+
186
+ export default function ListGroupHeaderTemplate(this: UDExListGroupHeader) {
187
+ return (
188
+ <div
189
+ part="item"
190
+ class="udex-list__group"
191
+ role={this.groupWrapperRole as AriaRole}
192
+ aria-labelledby={!this.isTreeAccessibleRole ? "group-heading" : undefined}>
193
+ {this.collapsible ? (
194
+ <div
195
+ class="udex-list__group-list"
196
+ onui5-item-press={this.getHandleGroupItemsClick}
197
+ {...({ name: "group" } as object)}>
198
+ {this.useListItemHeader
199
+ ? MultiOrRadioGroupHeaderCollapsible.call(this)
200
+ : SingleGroupHeaderCollapsible.call(this)
201
+ }
202
+ <div id={this.ariaControlsId} role={this.contentRegionRole as AriaRole} class="udex-list__group-list__content">
203
+ {this.isTreeAccessibleRole ? (
204
+ <slot></slot>
205
+ ) : (
206
+ <div role="listbox" aria-label="group">
207
+ <slot></slot>
208
+ </div>
209
+ )}
210
+ </div>
211
+ </div>
212
+ ) : (
213
+ <div
214
+ role={this.nonCollapsibleContainerRole as AriaRole}
215
+ class="udex-list__group-list"
216
+ aria-label="group"
217
+ onui5-item-press={this.getHandleGroupItemsClick}
218
+ {...({ name: "group" } as object)}>
219
+ {this.modeMultiSelectOrRadioGroup
220
+ ? MultiOrRadioGroupHeader.call(this)
221
+ : SingleGroupHeader.call(this)
222
+ }
223
+ <slot></slot>
224
+ </div>
225
+ )}
226
+ </div>
227
+ );
228
+ }
package/src/ListItem.ts CHANGED
@@ -1,8 +1,9 @@
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 jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
4
+ import type { Slot, DefaultSlot } from "@ui5/webcomponents-base/dist/UI5Element.js";
3
5
  import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
4
6
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
5
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
6
7
  import { isEnter, isSpace } from "@ui5/webcomponents-base/dist/Keys.js";
7
8
  import Icon from "@ui5/webcomponents/dist/Icon.js";
8
9
  import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
@@ -24,11 +25,10 @@ import {
24
25
  } from "./generated/i18n/i18n-defaults.js";
25
26
  import translate from "./utils/translate.js";
26
27
 
27
- import ListItemTemplate from "./generated/templates/ListItemTemplate.lit.js";
28
+ import ListItemTemplate from "./ListItemTemplate.js";
28
29
 
29
30
  // Styles
30
31
  import ListItemCss from "./generated/themes/ListItem.css.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";
@@ -64,7 +64,8 @@ type UDExListItemItemPressEventDetail = {
64
64
 
65
65
  @customElement({
66
66
  tag: "udex-list-item",
67
- renderer: litRender,
67
+ languageAware: true,
68
+ renderer: jsxRenderer,
68
69
  styles: ListItemCss,
69
70
  template: ListItemTemplate,
70
71
  dependencies: [
@@ -371,7 +372,11 @@ class UDExListItem extends UDExListItemBase {
371
372
  if (this._useHostAriaRole) {
372
373
  return "presentation";
373
374
  }
374
- return this.accessibleRole.length > 0 ? this.accessibleRole : listItemRole;
375
+ if (this.accessibleRole.length > 0) {
376
+ return this.accessibleRole;
377
+ }
378
+ // SingleContent is informational (not a selection widget) — listitem is semantically correct
379
+ return this.modeSingleContent ? "listitem" : listItemRole;
375
380
  }
376
381
 
377
382
  get effectiveRole(): string {