@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
@@ -0,0 +1,128 @@
1
+ import type UDExPhoneNumberField from "./PhoneNumberField.js";
2
+ import UDExDropdown from "./Dropdown.js";
3
+ import UDExList from "./List.js";
4
+ import UDExListItem from "./ListItem.js";
5
+ import UDExButton from "./Button.js";
6
+ import UDExStatusMessage from "./StatusMessage.js";
7
+ import UDExButtonDesign from "./types/ButtonDesign.js";
8
+ import UDExButtonSize from "./types/ButtonSize.js";
9
+
10
+ export default function PhoneNumberFieldTemplate(this: UDExPhoneNumberField) {
11
+ return (
12
+ <>
13
+ <div
14
+ class="udex-phone-number-field"
15
+ onui5-selection-change={this.handleSelect}>
16
+ {this.label && (
17
+ <label
18
+ id="udex-phone-number-field__label"
19
+ class="udex-phone-number-field__label"
20
+ htmlFor={`${this._id}-phone`}>
21
+ {this.label}
22
+ {this.required && " *"}
23
+ </label>
24
+ )}
25
+ <UDExDropdown
26
+ class="udex-phone-number-field__dropdown"
27
+ opener={`udex-${this._id}-phone-number__opener`}
28
+ id={`${this._id}_dropdown-menu`}
29
+ onui5-before-open={this.dropdownBeforeOpen}
30
+ onui5-before-close={this.dropdownBeforeClose}
31
+ horizontalAlign="Start"
32
+ height={this.height}>
33
+ <UDExList>
34
+ {this.countriesList.map(country => (
35
+ <UDExListItem
36
+ id={country.iso}
37
+ selected={country.selected}>
38
+ <div class="udex-phone-number-field__dropdown-list-item">
39
+ <div
40
+ class="udex-phone-number-field__flag"
41
+ style={{ backgroundPositionX: country.flagX, backgroundPositionY: country.flagY }}
42
+ ></div>
43
+ <span class="udex-phone-number-field__country-name">
44
+ {country.countryName}
45
+ {country.localName && ` (${country.localName})`}
46
+ {" "}{country.phonePrefix}
47
+ </span>
48
+ </div>
49
+ </UDExListItem>
50
+ ))}
51
+ </UDExList>
52
+ </UDExDropdown>
53
+ <div class="udex-phone-number-field__input-wrapper">
54
+ {!this.displayonly && (
55
+ <UDExButton
56
+ id={`udex-${this._id}-phone-number__opener`}
57
+ class="udex-phone-number-field__open-button"
58
+ role="combobox"
59
+ aria-haspopup="true"
60
+ design={UDExButtonDesign.Tertiary}
61
+ size={UDExButtonSize.Large}
62
+ endIcon={this.buttonIcon}
63
+ disabled={this.isButtonDisabled}
64
+ accessibleNameRef={`${this._id}-countrySelectorAriaLabel ${this.ariaDescribedById}`}
65
+ aria-label={this.countrySelectorAriaLabel}
66
+ aria-expanded={this._dropdownExpanded}
67
+ aria-controls={`${this._id}_dropdown-menu`}
68
+ onClick={this.openDropdown}>
69
+ <div class="udex-phone-number-field__open-button-text">
70
+ {this.selectedCountryName} {this.selectedPhonePrefix}
71
+ </div>
72
+ <div class="udex-phone-number-field__button-content">
73
+ <span
74
+ class="udex-phone-number-field__flag"
75
+ aria-label={this.selectedCountryName}
76
+ style={{ backgroundPositionX: this.selectedFlagBackgroundPosition.x, backgroundPositionY: this.selectedFlagBackgroundPosition.y }}
77
+ />
78
+ </div>
79
+ </UDExButton>
80
+ )}
81
+ <input
82
+ id={`${this._id}-phone`}
83
+ class="udex-phone-number-field__input"
84
+ type="tel"
85
+ value={this.value}
86
+ placeholder={this.phoneFormat}
87
+ maxLength={this.maxlength}
88
+ disabled={this.disabled}
89
+ readonly={this.isInputReadonly}
90
+ required={this.required}
91
+ autoComplete="tel"
92
+ aria-label={this.accessibleName}
93
+ aria-labelledby={this.accessibleName}
94
+ aria-required={this.required}
95
+ aria-readonly={this.isInputReadonly}
96
+ aria-disabled={this.disabled}
97
+ aria-invalid={(this.ariaInvalid ?? undefined) as "true" | undefined}
98
+ aria-describedby={this.ariaDescribedById}
99
+ onInput={this.handleInput}
100
+ onClick={this.handleClick}
101
+ onFocus={this.handleFocus}
102
+ onBlur={this.handleBlur}
103
+ onKeyDown={this.handleKeyDown}
104
+ onKeyUp={this.handleKeyUp}
105
+ tabIndex={this.inputTabIndex}
106
+ />
107
+ </div>
108
+ </div>
109
+ {this.supportingText && (
110
+ <UDExStatusMessage
111
+ disabled={this.disabled}
112
+ supportingText={this.supportingText}
113
+ valueState={this.valueState}>
114
+ </UDExStatusMessage>
115
+ )}
116
+ {this.supportingText && (
117
+ <span id={`${this._id}-supportingTextDesc`} class="hidden-text">{this.supportingText}</span>
118
+ )}
119
+ {this.hasValueState && (
120
+ <span id={`${this._id}-valueStateDesc`} class="hidden-text">{this.valueStateText}</span>
121
+ )}
122
+ {this.readonly && (
123
+ <span id={`${this._id}-stateReadOnlyDesc`} class="hidden-text">{this.readOnlyStateText}</span>
124
+ )}
125
+ <span id={`${this._id}-countrySelectorAriaLabel`} class="hidden-text">{this.countrySelectorAriaLabel}</span>
126
+ </>
127
+ );
128
+ }
package/src/Search.ts CHANGED
@@ -188,6 +188,18 @@ type UDExSearchKeydownEventDetail = {
188
188
  * @param {KeyboardEvent} e The keyboard event object
189
189
  */
190
190
  @event("search-keydown", { bubbles: true })
191
+ /**
192
+ * Fired when the suggestions popover opens.
193
+ *
194
+ * @public
195
+ */
196
+ @event("suggestion-popover-opened", { bubbles: true })
197
+ /**
198
+ * Fired when the suggestions popover closes.
199
+ *
200
+ * @public
201
+ */
202
+ @event("suggestion-popover-closed", { bubbles: true })
191
203
  class UDExSearch extends UI5Element {
192
204
  eventDetails!: {
193
205
  "submit-search-value": UDExSearchBaseEventDetail,
@@ -196,7 +208,8 @@ class UDExSearch extends UI5Element {
196
208
  "search-keydown": UDExSearchKeydownEventDetail,
197
209
  "dropdown-item-click": UDExSearchBaseEventDetail,
198
210
  "prefix-item-click": UDExSearchPrefixItemClickEventDetail,
199
-
211
+ "suggestion-popover-opened": void,
212
+ "suggestion-popover-closed": void,
200
213
  };
201
214
  _labelActiveClassName = "udex-search__label--active";
202
215
  _labelAnimationClassName = "udex-search__label--animation-enabled";
@@ -856,6 +869,7 @@ class UDExSearch extends UI5Element {
856
869
  retryUntilSuccessful(() => this.Suggestion, this.retryDelay, this.maxRetryAttempts, this.unsuccessfulRetryMessage)
857
870
  .then(() => {
858
871
  this.Suggestion!.open();
872
+ this.fireDecoratorEvent("suggestion-popover-opened");
859
873
  })
860
874
  .catch(error => {
861
875
  console.warn(error.message);
@@ -863,6 +877,7 @@ class UDExSearch extends UI5Element {
863
877
  } else {
864
878
  this.open = true;
865
879
  this.Suggestion.open();
880
+ this.fireDecoratorEvent("suggestion-popover-opened");
866
881
  }
867
882
  this.handleAriaExpanded();
868
883
  }
@@ -873,6 +888,7 @@ class UDExSearch extends UI5Element {
873
888
  this.Suggestion!.close();
874
889
  this.handleAriaExpanded();
875
890
  this.open = false;
891
+ this.fireDecoratorEvent("suggestion-popover-closed");
876
892
  }
877
893
  }
878
894
 
@@ -951,6 +967,9 @@ class UDExSearch extends UI5Element {
951
967
 
952
968
  if (mutation.attributeName === "open" && newValue !== oldValue && !ingoreOpenState) {
953
969
  this.open = popover?.open || false;
970
+ if (!popover?.open) {
971
+ this.fireDecoratorEvent("suggestion-popover-closed");
972
+ }
954
973
  }
955
974
  });
956
975
  });
@@ -1053,6 +1072,7 @@ class UDExSearch extends UI5Element {
1053
1072
  if (isEscape(e)) {
1054
1073
  if (this.open) {
1055
1074
  this.Suggestion?.onEscape(e);
1075
+ this.fireDecoratorEvent("suggestion-popover-closed");
1056
1076
  }
1057
1077
  }
1058
1078
  }
@@ -345,6 +345,14 @@ class UDExSearchableListBase extends UI5Element {
345
345
  this.fireSelectionChange(id);
346
346
  }
347
347
 
348
+ handleAccordionIconClick(e: CustomEvent<{ collapsed: boolean }>): void {
349
+ const target = e.target as HTMLElement;
350
+ const originalItem = this._validItems.find(item => item._id === target.id) as (UDExListGroupHeaderBase & { setCollapsedItems?(): void }) | undefined;
351
+ if (!originalItem) { return; }
352
+ originalItem.collapsed = e.detail.collapsed;
353
+ originalItem.setCollapsedItems?.();
354
+ }
355
+
348
356
  onSelectAllHeaderPress(e:CustomEvent) {
349
357
  const item = e.detail.item as UDExListItemBase;
350
358
  const id = this.getDataTokenId(item);
@@ -570,20 +578,67 @@ class UDExSearchableListBase extends UI5Element {
570
578
  this.getPopoverPart(UDExPopoverPart.Content)?.scrollTo({ top: 0 });
571
579
  }
572
580
 
581
+ _expandCollapsedGroupsWithSelection() {
582
+ this._validItems
583
+ .filter(item => item.isGroup)
584
+ .forEach(group => {
585
+ const header = group as UDExListGroupHeaderBase & { setCollapsedItems?(): void };
586
+ if (!header.collapsible) { return; }
587
+ // The rendered element may have been manually collapsed by the user, which
588
+ // only updates the rendered copy. handleAccordionIconClick syncs the original
589
+ // going forward, but we also check the rendered element as a safety net
590
+ // (e.g. if the event wasn't caught, or for the current open cycle).
591
+ const rendered = this.shadowRoot?.querySelector<HTMLElement & { collapsed?: boolean; setCollapsedItems?(): void }>(`[udex-list-group-header][id="${header._id}"]`);
592
+ const isCollapsed = header.collapsed || !!rendered?.hasAttribute("collapsed");
593
+ if (!isCollapsed) { return; }
594
+ const hasSelectedChild = (header.items as UDExListItemBase[]).some(child => child.selected);
595
+ if (hasSelectedChild) {
596
+ header.collapsed = false;
597
+ header.setCollapsedItems?.();
598
+ // Also reset the rendered element directly so it takes effect
599
+ // immediately, regardless of whether a template re-render is pending.
600
+ if (rendered) {
601
+ rendered.collapsed = false;
602
+ rendered.setCollapsedItems?.();
603
+ }
604
+ }
605
+ });
606
+ }
607
+
573
608
  _dropdownScrollToSelectedItem() {
574
609
  const content = this.getPopoverPart(UDExPopoverPart.Content);
610
+ if (!content) { return; }
575
611
  const activeItem = this.activeItem;
576
- if (!content || !activeItem) { return; }
577
- const itemRect = activeItem.getBoundingClientRect();
578
- const contentRect = content.getBoundingClientRect();
579
- content.scrollTop += itemRect.top - contentRect.top + itemRect.height / 2 - content.clientHeight / 2;
612
+ if (!activeItem) {
613
+ this._dropdownScrollToTop();
614
+ return;
615
+ }
616
+ // Refresh max-height on expanded collapsible groups before measuring.
617
+ // setContentHeight() may have run while the popup was closed (scrollHeight=0
618
+ // for hidden elements), leaving --udex-list-content-max-height at 0px.
619
+ // With that stale 0px value, getBoundingClientRect on slotted items inside
620
+ // the overflow:hidden container returns the container top rather than the
621
+ // item's natural position, producing an incorrect scroll delta.
622
+ // removeProperty → setContentHeight() avoids the CSS transition because
623
+ // browsers do not interpolate to/from the `none` fallback value.
624
+ this.shadowRoot?.querySelectorAll<HTMLElement & { setContentHeight(): void }>("[udex-list-group-header]")
625
+ .forEach(header => {
626
+ if (header.hasAttribute("collapsible") && !header.hasAttribute("collapsed")) {
627
+ header.style.removeProperty("--udex-list-content-max-height");
628
+ header.setContentHeight();
629
+ }
630
+ });
631
+ // Reset to top before measuring so getBoundingClientRect reads from a stable
632
+ // baseline regardless of the scroll state left by previous open/close cycles.
633
+ content.scrollTop = 0;
634
+ const delta = activeItem.getBoundingClientRect().top - content.getBoundingClientRect().top;
635
+ content.scrollTop = delta;
580
636
  }
581
637
 
582
638
  _handleDropdownScroll() {
583
- if (this.modeMultiSelect) {
639
+ if (this.modeMultiSelect || !this.activeItem) {
584
640
  this._dropdownScrollToTop();
585
- }
586
- if (this.modeSingleSelect) {
641
+ } else if (this.modeSingleSelect) {
587
642
  this._dropdownScrollToSelectedItem();
588
643
  }
589
644
  }
@@ -132,6 +132,7 @@ function renderGroupHeader(this: UDExSearchableListBase, processedItem: UDExProc
132
132
  selected={item.selected}
133
133
  onFirstIconClick={this.fireFirstIconClickEvent}
134
134
  onSecondIconClick={this.fireSecondIconClickEvent}
135
+ onAccordionIconClick={this.handleAccordionIconClick}
135
136
  indeterminate={header.indeterminate}>
136
137
  {groupItems.map((child, i) =>
137
138
  renderListItem(child as UDExListItem, i, "none", childAccessibleRole, this.fireFirstIconClickEvent, this.fireSecondIconClickEvent, this._activeDescendantMode, this.isTreeStructure, this.modeMultiSelect)
package/src/SelectBase.ts CHANGED
@@ -781,28 +781,21 @@ class UDExSelectBase extends UDExSearchableListBase {
781
781
  }
782
782
 
783
783
  handleDropdownOpen() {
784
- // Scroll to the previously selected/active item if there is one,
785
- // otherwise scroll to top. Do NOT pre-activate any item — that is done
786
- // by the first ArrowDown so that ArrowDown[1]=item[0], ArrowDown[2]=item[1].
787
- if (this.activeItem) {
788
- const items = this._list?.getKeyboardNavigationItems();
789
- const active = items?.find(i => !i.isGroup && (i as any).selected);
790
- if (active && this._list?._scrollIntoView) {
791
- this._list.scrollToItem(active);
792
- } else {
793
- this._dropdownScrollToTop();
794
- }
795
- } else {
796
- this._dropdownScrollToTop();
797
- }
798
-
799
- // Announce the visually focused item (fake focus outline on first item).
800
- // Using polite politeness — it waits for the AT to finish announcing
801
- // "expanded" before reading the item, so no timeout is needed.
802
- // Clear first so the mutation fires even if the text is unchanged from
803
- // the previous open, then populate after render completes.
784
+ // Clear first so the live-region mutation fires even if text is unchanged.
804
785
  this._liveRegionText = "";
805
- renderFinished().then(() => this._announceCurrentOrFirst()).catch(() => {});
786
+ // Defer scroll and announcement until rendering settles.
787
+ // Calling _handleDropdownScroll synchronously causes getBoundingClientRect
788
+ // to read mid-transition positions (e.g. the max-height animation on
789
+ // collapsible group headers), producing an incorrect scroll offset.
790
+ // The expand step modifies reactive properties that trigger a new render,
791
+ // so a second renderFinished is needed before measuring scroll positions.
792
+ renderFinished().then(() => {
793
+ this._expandCollapsedGroupsWithSelection();
794
+ return renderFinished();
795
+ }).then(() => {
796
+ this._handleDropdownScroll();
797
+ this._announceCurrentOrFirst();
798
+ }).catch(() => {});
806
799
 
807
800
  this.fireEventDropdownOpen();
808
801
  }
package/src/SelectBox.ts CHANGED
@@ -232,6 +232,40 @@ class UDExSelectBox extends UDExSelectBase {
232
232
  const isSearchInput = relatedTarget === this._search;
233
233
  const hasTags = this.tokenizer?.tokens.length > 0;
234
234
 
235
+ // When focus moves to the body div of a collapsible single-select group header
236
+ // (which is focusable via tabindex="0" but has no click→header-press wiring),
237
+ // set it as the active descendant and redirect DOM focus back to the input so
238
+ // the combobox pattern is preserved and subsequent arrow navigation works.
239
+ //
240
+ // The focusout handler sits on div.udex-text-field__input (SelectBox's shadow DOM).
241
+ // Shadow DOM retargeting means relatedTarget is either:
242
+ // (a) the body div itself (.udex-list__group-content) — if caught at a lower boundary
243
+ // (b) the UDExListGroupHeader HOST — the common case when the event bubbles to this div
244
+ const rtAsItem = relatedTarget as UDExListItemBase | null;
245
+ const isGroupHeaderBodyDiv = this._popover?.open
246
+ && !!relatedTarget?.classList.contains("udex-list__group-content");
247
+ const isGroupHeaderHost = this._popover?.open
248
+ && !!rtAsItem?.isGroup
249
+ && !!rtAsItem?.collapsible
250
+ && !rtAsItem?.modeMultiSelect;
251
+ if (isGroupHeaderBodyDiv || isGroupHeaderHost) {
252
+ const groupHeaderHost: UDExListItemBase | null = isGroupHeaderBodyDiv
253
+ ? ((relatedTarget.getRootNode() as ShadowRoot | null)?.host as UDExListItemBase | null)
254
+ : rtAsItem;
255
+ if (groupHeaderHost?.isGroup) {
256
+ const navItems = this._list?.getKeyboardNavigationItems();
257
+ const tokenId = this.getDataTokenId(groupHeaderHost);
258
+ const renderedItem = navItems?.find(
259
+ i => (i.getAttribute("data-token-id") ?? i._id) === tokenId,
260
+ );
261
+ if (renderedItem) {
262
+ this._setActiveDescendant(renderedItem);
263
+ }
264
+ }
265
+ (this._search as HTMLElement).focus();
266
+ return;
267
+ }
268
+
235
269
  if (!isInsideComponent && !isFooterElement && !isIconButton && !isSearchInput) {
236
270
  this.closeDropdown();
237
271
  this.resetSearchState();
@@ -7,6 +7,7 @@ import UI5Popover from "@ui5/webcomponents/dist/Popover.js";
7
7
  import UI5PopoverPlacement from "@ui5/webcomponents/dist/types/PopoverPlacement.js";
8
8
  import UI5PopoverHAlign from "@ui5/webcomponents/dist/types/PopoverHorizontalAlign.js";
9
9
  import { cleanLabel } from "./utils/listItemLabelUtils.js";
10
+ import PopupAccessibleRole from "@ui5/webcomponents/dist/types/PopupAccessibleRole.js";
10
11
 
11
12
  export default function SelectBoxTemplate(this: UDExSelectBox) {
12
13
  return (
@@ -77,6 +78,7 @@ export default function SelectBoxTemplate(this: UDExSelectBox) {
77
78
  )}
78
79
  <UI5Popover
79
80
  id={this.popoverId}
81
+ accessibleRole={PopupAccessibleRole.None}
80
82
  allow-target-overlap={this.allowTargetOverlap}
81
83
  onKeyDown={this.handleKeyDownDropdown}
82
84
  {...({
@@ -104,7 +106,7 @@ export default function SelectBoxTemplate(this: UDExSelectBox) {
104
106
  </div>
105
107
  {this.supportingText && (
106
108
  <UDExStatusMessage
107
- disabled={this.disabled ? "true" : undefined}
109
+ disabled={this.disabled}
108
110
  supporting-text={this.supportingText}
109
111
  value-state={this.valueState}>
110
112
  </UDExStatusMessage>
@@ -67,11 +67,12 @@ class UDExStatusMessage extends UI5Element {
67
67
  /**
68
68
  * Defines if component should have disabled styles.
69
69
  *
70
- * @default ""
70
+ * @default false
71
71
  * @public
72
72
  */
73
- @property({ type: String })
74
- disabled!: string;
73
+ @property({ type: Boolean })
74
+ disabled!: boolean;
75
+
75
76
  /**
76
77
  * Defines the value state of the component.
77
78
  *
@@ -45,7 +45,7 @@ export default function TextAreaTemplate(this: TextArea) {
45
45
  supporting-text={this._supportingText}
46
46
  supporting-text-alignment="Right"
47
47
  value-state={this.valueState}
48
- disabled={this.disabled ? "true" : undefined}>
48
+ disabled={this.disabled}>
49
49
  </UDExStatusMessage>
50
50
  <span id={`${this._id}-supportingTextDesc`} class={hiddenClass}>
51
51
  {this._supportingText}
@@ -70,7 +70,7 @@ export default function TextFieldTemplate(this: TextField) {
70
70
  <UDExStatusMessage
71
71
  supporting-text={this.supportingText}
72
72
  value-state={this.valueState}
73
- disabled={this.disabled ? "true" : undefined}>
73
+ disabled={this.disabled}>
74
74
  </UDExStatusMessage>
75
75
  <span id={`${this._id}-supportingTextDesc`} class={hiddenClass}>
76
76
  {this.supportingText}
package/src/Upload.ts CHANGED
@@ -1,29 +1,26 @@
1
1
  import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
  import type { DefaultSlot } from "@ui5/webcomponents-base/dist/UI5Element.js";
3
-
4
3
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
5
4
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
6
- import { slot } from "@ui5/webcomponents-base/dist/decorators.js";
5
+ import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
7
6
  import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
8
7
  import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
9
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
8
+ import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
10
9
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
11
- import FileUploader from "@ui5/webcomponents/dist/FileUploader.js";
10
+ import type FileUploader from "@ui5/webcomponents/dist/FileUploader.js";
12
11
  import type { FileUploaderChangeEventDetail } from "@ui5/webcomponents/dist/FileUploader.js";
13
12
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
14
13
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
15
14
  import { UPLOAD_BUTTON_LABEL } from "./generated/i18n/i18n-defaults.js";
16
- import UDExButton from "./Button.js";
17
15
  import UDExButtonSize from "./types/ButtonSize.js";
18
- import UDExList from "./List.js";
19
16
  import UDExUploadItem from "./UploadItem.js";
20
- import UploadTemplate from "./generated/templates/UploadTemplate.lit.js";
17
+ import UploadTemplate from "./UploadTemplate.js";
21
18
  import type FileData from "./types/FileData.js";
22
19
  import translate from "./utils/translate.js";
20
+ import { BreakpointUtils } from "./utils/Breakpoints.js";
23
21
 
24
22
  // Styles
25
23
  import UploadCss from "./generated/themes/Upload.css.js";
26
- import { BreakpointUtils } from "./utils/Breakpoints.js";
27
24
 
28
25
  const convertBytesToMegabytes = (bytes: number) => (bytes / 1024) / 1024;
29
26
 
@@ -58,10 +55,10 @@ type UDExUploadFileChangeEventDetail = {
58
55
  */
59
56
  @customElement({
60
57
  tag: "udex-upload",
61
- renderer: litRender,
58
+ renderer: jsxRenderer,
62
59
  styles: UploadCss,
63
60
  template: UploadTemplate,
64
- dependencies: [FileUploader, UDExList, UDExButton, UDExUploadItem],
61
+ dependencies: [UDExUploadItem],
65
62
  })
66
63
 
67
64
  /**
package/src/UploadItem.ts CHANGED
@@ -1,9 +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 { slot } from "@ui5/webcomponents-base/dist/decorators.js";
3
+ import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
4
4
  import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
5
5
  import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
6
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
6
+ import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
7
7
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
8
8
  import ValueState from "@ui5/webcomponents-base/dist/types/ValueState.js";
9
9
  import { isEnter, isSpace } from "@ui5/webcomponents-base/dist/Keys.js";
@@ -12,11 +12,9 @@ import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
12
12
  import { UDExTarget } from "./types/common.js";
13
13
  import { REMOVE_FILE_TEXT, TERMINATED_FILE_STATUS_TEXT, UPLOADING_FILE_STATUS_TEXT } from "./generated/i18n/i18n-defaults.js";
14
14
  import UDExListItem from "./ListItem.js";
15
- import UDExProgressBar from "./ProgressBar.js";
16
- import UDExLink from "./Link.js";
17
- import UDExButton from "./Button.js";
15
+ import type UDExLink from "./Link.js";
18
16
  import UDExButtonSize from "./types/ButtonSize.js";
19
- import UploadItemTemplate from "./generated/templates/UploadItemTemplate.lit.js";
17
+ import UploadItemTemplate from "./UploadItemTemplate.js";
20
18
  import translate from "./utils/translate.js";
21
19
 
22
20
  // Styles
@@ -41,15 +39,15 @@ const BreakpointSizeM: number = 1279;
41
39
  * <code>import "@sapudex/web-components/dist/UploadItem.js";</code>
42
40
  *
43
41
  * @constructor
44
- * @extends UDExListItemBase
42
+ * @extends UDExListItem
45
43
  * @public
46
44
  */
47
45
  @customElement({
48
46
  tag: "udex-upload-item",
49
- renderer: litRender,
47
+ renderer: jsxRenderer,
50
48
  styles: UploadItemCss,
51
49
  template: UploadItemTemplate,
52
- dependencies: [UDExLink, UDExListItem, UDExProgressBar, UDExButton],
50
+ dependencies: [UDExListItem],
53
51
  })
54
52
 
55
53
  /**
@@ -0,0 +1,62 @@
1
+ import type UploadItem from "./UploadItem.js";
2
+ import UDExLink from "./Link.js";
3
+ import UDExButton from "./Button.js";
4
+ import UDExProgressBar from "./ProgressBar.js";
5
+ import UDExButtonDesign from "./types/ButtonDesign.js";
6
+ import decline from "@ui5/webcomponents-icons/dist/decline.js";
7
+
8
+ export default function UploadItemTemplate(this: UploadItem) {
9
+ const rootClass = "udex-upload-item";
10
+
11
+ return (
12
+ <div className={`${rootClass}__wrapper`}>
13
+ <div className={`${rootClass}__info ${this.uploadItemClasses}`}>
14
+ <div>
15
+ {this.fileInteractive ? (
16
+ <UDExLink
17
+ href={this.fileLink}
18
+ target={this.fileTarget}>
19
+ {this.fileName}
20
+ </UDExLink>
21
+ ) : (
22
+ <p className={`${rootClass}__name`}>{this.fileName}</p>
23
+ )}
24
+ <div className={this.additionalInfoClasses}>
25
+ <slot></slot>
26
+ </div>
27
+ </div>
28
+ {this._breakpointM && deleteButton.call(this)}
29
+ </div>
30
+ <div className={`${rootClass}__progress-info-wrapper`}>
31
+ {this.showUploadProgress && (
32
+ <div className={`${rootClass}__progress-info`}>
33
+ <UDExProgressBar
34
+ role="progressbar"
35
+ aria-valuemin={0}
36
+ aria-valuemax={100}
37
+ aria-valuenow={this.uploadPercentage}
38
+ value={this.uploadPercentage}
39
+ value-state={this.uploadProgressState}
40
+ hide-value>
41
+ </UDExProgressBar>
42
+ <p className={`${rootClass}__progress-status`}>{this.uploadStatus}</p>
43
+ </div>
44
+ )}
45
+ {this._breakpointL && deleteButton.call(this)}
46
+ </div>
47
+ </div>
48
+ );
49
+ }
50
+
51
+ function deleteButton(this: UploadItem) {
52
+ return (
53
+ <UDExButton
54
+ accessible-name={this.removeButtonAccessibleName}
55
+ onKeyDown={this.handleButtonKeydown}
56
+ onClick={this.handleButtonClick}
57
+ size={this._buttonSize}
58
+ design={UDExButtonDesign.Tertiary}
59
+ icon={decline}>
60
+ </UDExButton>
61
+ );
62
+ }
@@ -0,0 +1,53 @@
1
+ import FileUploader from "@ui5/webcomponents/dist/FileUploader.js";
2
+ import type Upload from "./Upload.js";
3
+ import UDExButton from "./Button.js";
4
+ import UDExList from "./List.js";
5
+ import UDExButtonDesign from "./types/ButtonDesign.js";
6
+ import { UDExListMode } from "./types/List.js";
7
+
8
+ export default function UploadTemplate(this: Upload) {
9
+ const rootClass = "udex-upload";
10
+
11
+ return (
12
+ <div
13
+ className={`${rootClass}__wrapper`}
14
+ onui5-request-delete={this.handleRemoveFile}>
15
+ {this.uploadTitle && (
16
+ <h1 className={`${rootClass}__title`}>{this.uploadTitle}</h1>
17
+ )}
18
+ {this.additionalText && (
19
+ <p className={`${rootClass}__additional-text`}>{this.additionalText}</p>
20
+ )}
21
+ <div className={`${rootClass}__upload-button-container`}>
22
+ <FileUploader
23
+ id="fileUploader"
24
+ disabled={this.disabled}
25
+ accept={this.accept}
26
+ multiple={this.multiple}
27
+ onChange={this.handleUploadFile}
28
+ onClick={this.handleUploadClick}
29
+ hide-input>
30
+ <UDExButton
31
+ aria-label={this.uploadButtonAriaLabel}
32
+ disabled={this.disabled}
33
+ aria-disabled={this.disabled}
34
+ design={UDExButtonDesign.Secondary}
35
+ size={this._buttonSize}>
36
+ {this.uploadButtonText}
37
+ </UDExButton>
38
+ </FileUploader>
39
+ {this.showSupportingText && (
40
+ <p className={this.supportingTextClasses}>{this.supportingText}</p>
41
+ )}
42
+ </div>
43
+ <div className={`${rootClass}__files-wrapper`}>
44
+ <UDExList
45
+ mode={UDExListMode.MultiSelect}
46
+ aria-busy={this.listBusy}
47
+ onui5-selection-change={this.handleSelectionChange}>
48
+ <slot></slot>
49
+ </UDExList>
50
+ </div>
51
+ </div>
52
+ );
53
+ }