@sapudex/web-components 0.147.0 → 0.172.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 (471) hide show
  1. package/.eslintignore +1 -0
  2. package/bundle.esm.js +9 -0
  3. package/dist/Badge.d.ts +21 -14
  4. package/dist/Badge.js +20 -26
  5. package/dist/Badge.js.map +1 -1
  6. package/dist/Breadcrumbs.d.ts +23 -21
  7. package/dist/Breadcrumbs.js +58 -40
  8. package/dist/Breadcrumbs.js.map +1 -1
  9. package/dist/BreadcrumbsItem.js +0 -1
  10. package/dist/BreadcrumbsItem.js.map +1 -1
  11. package/dist/Checkbox.js +0 -1
  12. package/dist/Checkbox.js.map +1 -1
  13. package/dist/CountrySelector.d.ts +2 -2
  14. package/dist/CountrySelector.js +20 -12
  15. package/dist/CountrySelector.js.map +1 -1
  16. package/dist/DatePicker.d.ts +2 -2
  17. package/dist/DatePicker.js.map +1 -1
  18. package/dist/Dropdown.js +0 -3
  19. package/dist/Dropdown.js.map +1 -1
  20. package/dist/Footer.d.ts +53 -10
  21. package/dist/Footer.js +41 -11
  22. package/dist/Footer.js.map +1 -1
  23. package/dist/Link.d.ts +2 -5
  24. package/dist/Link.js +4 -8
  25. package/dist/Link.js.map +1 -1
  26. package/dist/List.d.ts +16 -1
  27. package/dist/List.js +154 -100
  28. package/dist/List.js.map +1 -1
  29. package/dist/ListItem.d.ts +1 -0
  30. package/dist/ListItem.js +3 -0
  31. package/dist/ListItem.js.map +1 -1
  32. package/dist/MastheadItem.d.ts +12 -2
  33. package/dist/MastheadItem.js +34 -7
  34. package/dist/MastheadItem.js.map +1 -1
  35. package/dist/MastheadMenu.d.ts +1 -0
  36. package/dist/MastheadMenu.js +13 -4
  37. package/dist/MastheadMenu.js.map +1 -1
  38. package/dist/MastheadMenuItem.d.ts +10 -0
  39. package/dist/MastheadMenuItem.js +24 -3
  40. package/dist/MastheadMenuItem.js.map +1 -1
  41. package/dist/MastheadMobileMenu.js +2 -2
  42. package/dist/MastheadMobileMenu.js.map +1 -1
  43. package/dist/MastheadProfileMenu.js +2 -2
  44. package/dist/MastheadProfileMenu.js.map +1 -1
  45. package/dist/MastheadShell.d.ts +4 -0
  46. package/dist/MastheadShell.js +21 -5
  47. package/dist/MastheadShell.js.map +1 -1
  48. package/dist/Pagination.d.ts +13 -3
  49. package/dist/Pagination.js +90 -57
  50. package/dist/Pagination.js.map +1 -1
  51. package/dist/PhoneNumberField.d.ts +3 -0
  52. package/dist/PhoneNumberField.js +9 -4
  53. package/dist/PhoneNumberField.js.map +1 -1
  54. package/dist/RangeSlider.js +0 -1
  55. package/dist/RangeSlider.js.map +1 -1
  56. package/dist/Search.d.ts +5 -4
  57. package/dist/Search.js +12 -12
  58. package/dist/Search.js.map +1 -1
  59. package/dist/SearchableListBase.d.ts +7 -1
  60. package/dist/SearchableListBase.js +47 -4
  61. package/dist/SearchableListBase.js.map +1 -1
  62. package/dist/SecondaryNavigation.d.ts +2 -2
  63. package/dist/SecondaryNavigation.js +20 -10
  64. package/dist/SecondaryNavigation.js.map +1 -1
  65. package/dist/SecondaryNavigationItem.d.ts +6 -3
  66. package/dist/SecondaryNavigationItem.js +50 -26
  67. package/dist/SecondaryNavigationItem.js.map +1 -1
  68. package/dist/SecondaryNavigationSubItem.d.ts +1 -0
  69. package/dist/SecondaryNavigationSubItem.js +3 -0
  70. package/dist/SecondaryNavigationSubItem.js.map +1 -1
  71. package/dist/SegmentedButton.d.ts +2 -2
  72. package/dist/SegmentedButton.js.map +1 -1
  73. package/dist/SelectBox.js.map +1 -1
  74. package/dist/SideNavigationGroup.js +0 -1
  75. package/dist/SideNavigationGroup.js.map +1 -1
  76. package/dist/SideNavigationItem.js +0 -1
  77. package/dist/SideNavigationItem.js.map +1 -1
  78. package/dist/SideNavigationSubItem.js +0 -1
  79. package/dist/SideNavigationSubItem.js.map +1 -1
  80. package/dist/Slider.js +0 -1
  81. package/dist/Slider.js.map +1 -1
  82. package/dist/TabNavigation.js +2 -2
  83. package/dist/TabNavigation.js.map +1 -1
  84. package/dist/Tag.d.ts +1 -4
  85. package/dist/Tag.js +1 -5
  86. package/dist/Tag.js.map +1 -1
  87. package/dist/Tile.d.ts +1 -1
  88. package/dist/Tile.js +1 -1
  89. package/dist/Tile.js.map +1 -1
  90. package/dist/Toast.d.ts +0 -1
  91. package/dist/Toast.js +4 -3
  92. package/dist/Toast.js.map +1 -1
  93. package/dist/Wizard.js +1 -1
  94. package/dist/Wizard.js.map +1 -1
  95. package/dist/WizardTab.js +0 -1
  96. package/dist/WizardTab.js.map +1 -1
  97. package/dist/assets/{bundle.esm-6e8e301d.js → bundle.esm-981c5cbb.js} +187 -189
  98. package/dist/assets/messagebundle_ar-bb470511.js +1 -0
  99. package/dist/assets/messagebundle_bg-a533dfab.js +1 -0
  100. package/dist/assets/messagebundle_cs-c70a7f36.js +1 -0
  101. package/dist/assets/messagebundle_da-e292cac5.js +1 -0
  102. package/dist/assets/messagebundle_de-5c108de6.js +1 -0
  103. package/dist/assets/messagebundle_el-44746e0b.js +1 -0
  104. package/dist/assets/messagebundle_en-4997b226.js +1 -0
  105. package/dist/assets/messagebundle_es-c0c1060f.js +1 -0
  106. package/dist/assets/messagebundle_et-a5f15d3b.js +1 -0
  107. package/dist/assets/messagebundle_fi-f4b8eb82.js +1 -0
  108. package/dist/assets/messagebundle_fr-af18ac46.js +1 -0
  109. package/dist/assets/messagebundle_hr-d893e46d.js +1 -0
  110. package/dist/assets/messagebundle_hu-230c58c9.js +1 -0
  111. package/dist/assets/messagebundle_it-5bf1436c.js +1 -0
  112. package/dist/assets/messagebundle_iw-dd60afc4.js +1 -0
  113. package/dist/assets/messagebundle_ko-c450bda3.js +1 -0
  114. package/dist/assets/messagebundle_lt-87ab0529.js +1 -0
  115. package/dist/assets/messagebundle_lv-fc413852.js +1 -0
  116. package/dist/assets/messagebundle_nl-34d7e236.js +1 -0
  117. package/dist/assets/messagebundle_no-f22648fb.js +1 -0
  118. package/dist/assets/messagebundle_pl-10303f09.js +1 -0
  119. package/dist/assets/messagebundle_pt-b7a40c67.js +1 -0
  120. package/dist/assets/messagebundle_ro-94628623.js +1 -0
  121. package/dist/assets/messagebundle_ru-1f6595ba.js +1 -0
  122. package/dist/assets/messagebundle_sk-89eabac1.js +1 -0
  123. package/dist/assets/messagebundle_sl-d56532f1.js +1 -0
  124. package/dist/assets/messagebundle_sr-cf7f3b32.js +1 -0
  125. package/dist/assets/messagebundle_sv-3a3b20d3.js +1 -0
  126. package/dist/assets/messagebundle_tr-33b16d09.js +1 -0
  127. package/dist/assets/messagebundle_uk-82e1f2c1.js +1 -0
  128. package/dist/assets/messagebundle_zh_CN-15ca05aa.js +1 -0
  129. package/dist/assets/messagebundle_zh_TW-ad6445e7.js +1 -0
  130. package/dist/css/themes/Badge.css +1 -1
  131. package/dist/css/themes/BreadcrumbsPopover.css +1 -1
  132. package/dist/css/themes/DatePickerPopover.css +1 -1
  133. package/dist/css/themes/FilterMenu.css +1 -1
  134. package/dist/css/themes/Footer.css +1 -1
  135. package/dist/css/themes/MastheadItem.css +1 -1
  136. package/dist/css/themes/MastheadMenu.css +1 -1
  137. package/dist/css/themes/MastheadMenuItem.css +1 -1
  138. package/dist/css/themes/MastheadShell.css +1 -1
  139. package/dist/css/themes/MediaPlayer.css +1 -1
  140. package/dist/css/themes/Modal.css +1 -1
  141. package/dist/css/themes/RatingIndicator.css +1 -1
  142. package/dist/css/themes/Slider.css +1 -1
  143. package/dist/css/themes/TableCell.css +1 -1
  144. package/dist/css/themes/TableCellBase.css +1 -1
  145. package/dist/css/themes/TextArea.css +1 -1
  146. package/dist/custom-elements-internal.json +232 -31
  147. package/dist/custom-elements.json +224 -30
  148. package/dist/features/SearchSuggestionsPopover.d.ts +16 -0
  149. package/dist/features/SearchSuggestionsPopover.js +49 -0
  150. package/dist/features/SearchSuggestionsPopover.js.map +1 -1
  151. package/dist/generated/assets/i18n/messagebundle_ar.json +1 -0
  152. package/dist/generated/assets/i18n/messagebundle_bg.json +1 -0
  153. package/dist/generated/assets/i18n/messagebundle_cs.json +1 -0
  154. package/dist/generated/assets/i18n/messagebundle_da.json +1 -0
  155. package/dist/generated/assets/i18n/messagebundle_de.json +1 -1
  156. package/dist/generated/assets/i18n/messagebundle_el.json +1 -0
  157. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  158. package/dist/generated/assets/i18n/messagebundle_es.json +1 -1
  159. package/dist/generated/assets/i18n/messagebundle_et.json +1 -0
  160. package/dist/generated/assets/i18n/messagebundle_fi.json +1 -0
  161. package/dist/generated/assets/i18n/messagebundle_fr.json +1 -1
  162. package/dist/generated/assets/i18n/messagebundle_hr.json +1 -0
  163. package/dist/generated/assets/i18n/messagebundle_hu.json +1 -0
  164. package/dist/generated/assets/i18n/messagebundle_it.json +1 -0
  165. package/dist/generated/assets/i18n/messagebundle_iw.json +1 -0
  166. package/dist/generated/assets/i18n/messagebundle_ko.json +1 -0
  167. package/dist/generated/assets/i18n/messagebundle_lt.json +1 -0
  168. package/dist/generated/assets/i18n/messagebundle_lv.json +1 -0
  169. package/dist/generated/assets/i18n/messagebundle_nl.json +1 -0
  170. package/dist/generated/assets/i18n/messagebundle_no.json +1 -0
  171. package/dist/generated/assets/i18n/messagebundle_pl.json +1 -0
  172. package/dist/generated/assets/i18n/messagebundle_pt.json +1 -0
  173. package/dist/generated/assets/i18n/messagebundle_ro.json +1 -0
  174. package/dist/generated/assets/i18n/messagebundle_ru.json +1 -0
  175. package/dist/generated/assets/i18n/messagebundle_sk.json +1 -0
  176. package/dist/generated/assets/i18n/messagebundle_sl.json +1 -0
  177. package/dist/generated/assets/i18n/messagebundle_sr.json +1 -0
  178. package/dist/generated/assets/i18n/messagebundle_sv.json +1 -0
  179. package/dist/generated/assets/i18n/messagebundle_tr.json +1 -0
  180. package/dist/generated/assets/i18n/messagebundle_uk.json +1 -0
  181. package/dist/generated/assets/i18n/messagebundle_zh_CN.json +1 -0
  182. package/dist/generated/assets/i18n/messagebundle_zh_TW.json +1 -0
  183. package/dist/generated/i18n/i18n-defaults.d.ts +7 -1
  184. package/dist/generated/i18n/i18n-defaults.js +7 -1
  185. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  186. package/dist/generated/json-imports/i18n-static.js +86 -2
  187. package/dist/generated/json-imports/i18n-static.js.map +1 -1
  188. package/dist/generated/json-imports/i18n.js +58 -2
  189. package/dist/generated/json-imports/i18n.js.map +1 -1
  190. package/dist/generated/templates/BadgeTemplate.lit.js +4 -4
  191. package/dist/generated/templates/BadgeTemplate.lit.js.map +1 -1
  192. package/dist/generated/templates/BreadcrumbsPopoverTemplate.lit.js +3 -3
  193. package/dist/generated/templates/BreadcrumbsPopoverTemplate.lit.js.map +1 -1
  194. package/dist/generated/templates/CountrySelectorTemplate.lit.js +1 -1
  195. package/dist/generated/templates/CountrySelectorTemplate.lit.js.map +1 -1
  196. package/dist/generated/templates/FooterTemplate.lit.js +12 -11
  197. package/dist/generated/templates/FooterTemplate.lit.js.map +1 -1
  198. package/dist/generated/templates/ListItemTemplate.lit.js +2 -2
  199. package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
  200. package/dist/generated/templates/ListTemplate.lit.js +3 -3
  201. package/dist/generated/templates/ListTemplate.lit.js.map +1 -1
  202. package/dist/generated/templates/MastheadItemTemplate.lit.js +17 -16
  203. package/dist/generated/templates/MastheadItemTemplate.lit.js.map +1 -1
  204. package/dist/generated/templates/MastheadMenuItemTemplate.lit.js +15 -14
  205. package/dist/generated/templates/MastheadMenuItemTemplate.lit.js.map +1 -1
  206. package/dist/generated/templates/MastheadMenuTemplate.lit.js +3 -3
  207. package/dist/generated/templates/MastheadMenuTemplate.lit.js.map +1 -1
  208. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js +1 -1
  209. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js.map +1 -1
  210. package/dist/generated/templates/MastheadShellTemplate.lit.js +10 -9
  211. package/dist/generated/templates/MastheadShellTemplate.lit.js.map +1 -1
  212. package/dist/generated/templates/PaginationTemplate.lit.js +3 -3
  213. package/dist/generated/templates/PaginationTemplate.lit.js.map +1 -1
  214. package/dist/generated/templates/PhoneNumberFieldTemplate.lit.js +1 -1
  215. package/dist/generated/templates/PhoneNumberFieldTemplate.lit.js.map +1 -1
  216. package/dist/generated/templates/SearchSuggestionsTemplate.lit.js +1 -1
  217. package/dist/generated/templates/SearchSuggestionsTemplate.lit.js.map +1 -1
  218. package/dist/generated/templates/SearchableListBaseTemplate.lit.js +2 -2
  219. package/dist/generated/templates/SearchableListBaseTemplate.lit.js.map +1 -1
  220. package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.js +3 -3
  221. package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.js.map +1 -1
  222. package/dist/generated/templates/SecondaryNavigationSubItemTemplate.lit.js +3 -3
  223. package/dist/generated/templates/SecondaryNavigationSubItemTemplate.lit.js.map +1 -1
  224. package/dist/generated/templates/SecondaryNavigationTemplate.lit.js +1 -1
  225. package/dist/generated/templates/SecondaryNavigationTemplate.lit.js.map +1 -1
  226. package/dist/generated/templates/StepInputTemplate.lit.js +1 -1
  227. package/dist/generated/templates/StepInputTemplate.lit.js.map +1 -1
  228. package/dist/generated/templates/WizardTemplate.lit.js +1 -1
  229. package/dist/generated/templates/WizardTemplate.lit.js.map +1 -1
  230. package/dist/generated/themes/Badge.css.js +1 -1
  231. package/dist/generated/themes/Badge.css.js.map +1 -1
  232. package/dist/generated/themes/BreadcrumbsPopover.css.js +1 -1
  233. package/dist/generated/themes/BreadcrumbsPopover.css.js.map +1 -1
  234. package/dist/generated/themes/DatePickerPopover.css.js +1 -1
  235. package/dist/generated/themes/DatePickerPopover.css.js.map +1 -1
  236. package/dist/generated/themes/FilterMenu.css.js +1 -1
  237. package/dist/generated/themes/FilterMenu.css.js.map +1 -1
  238. package/dist/generated/themes/Footer.css.js +1 -1
  239. package/dist/generated/themes/Footer.css.js.map +1 -1
  240. package/dist/generated/themes/MastheadItem.css.js +1 -1
  241. package/dist/generated/themes/MastheadItem.css.js.map +1 -1
  242. package/dist/generated/themes/MastheadMenu.css.js +1 -1
  243. package/dist/generated/themes/MastheadMenu.css.js.map +1 -1
  244. package/dist/generated/themes/MastheadMenuItem.css.js +1 -1
  245. package/dist/generated/themes/MastheadMenuItem.css.js.map +1 -1
  246. package/dist/generated/themes/MastheadShell.css.js +1 -1
  247. package/dist/generated/themes/MastheadShell.css.js.map +1 -1
  248. package/dist/generated/themes/MediaPlayer.css.js +1 -1
  249. package/dist/generated/themes/MediaPlayer.css.js.map +1 -1
  250. package/dist/generated/themes/Modal.css.js +1 -1
  251. package/dist/generated/themes/Modal.css.js.map +1 -1
  252. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  253. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  254. package/dist/generated/themes/Slider.css.js +1 -1
  255. package/dist/generated/themes/Slider.css.js.map +1 -1
  256. package/dist/generated/themes/TableCell.css.js +1 -1
  257. package/dist/generated/themes/TableCell.css.js.map +1 -1
  258. package/dist/generated/themes/TableCellBase.css.js +1 -1
  259. package/dist/generated/themes/TableCellBase.css.js.map +1 -1
  260. package/dist/generated/themes/TextArea.css.js +1 -1
  261. package/dist/generated/themes/TextArea.css.js.map +1 -1
  262. package/dist/i18n/messagebundle.properties +10 -0
  263. package/dist/i18n/messagebundle_ar.properties +1 -0
  264. package/dist/i18n/messagebundle_bg.properties +1 -0
  265. package/dist/i18n/messagebundle_cs.properties +1 -0
  266. package/dist/i18n/messagebundle_da.properties +1 -0
  267. package/dist/i18n/messagebundle_de.properties +1 -0
  268. package/dist/i18n/messagebundle_el.properties +1 -0
  269. package/dist/i18n/messagebundle_en.properties +4 -0
  270. package/dist/i18n/messagebundle_es.properties +1 -0
  271. package/dist/i18n/messagebundle_et.properties +1 -0
  272. package/dist/i18n/messagebundle_fi.properties +1 -0
  273. package/dist/i18n/messagebundle_fr.properties +1 -0
  274. package/dist/i18n/messagebundle_hr.properties +1 -0
  275. package/dist/i18n/messagebundle_hu.properties +1 -0
  276. package/dist/i18n/messagebundle_it.properties +1 -0
  277. package/dist/i18n/messagebundle_iw.properties +2 -0
  278. package/dist/i18n/messagebundle_ko.properties +1 -0
  279. package/dist/i18n/messagebundle_lt.properties +1 -0
  280. package/dist/i18n/messagebundle_lv.properties +1 -0
  281. package/dist/i18n/messagebundle_nl.properties +1 -0
  282. package/dist/i18n/messagebundle_no.properties +1 -0
  283. package/dist/i18n/messagebundle_pl.properties +1 -0
  284. package/dist/i18n/messagebundle_pt.properties +1 -0
  285. package/dist/i18n/messagebundle_pt_BR.properties +1 -0
  286. package/dist/i18n/messagebundle_ro.properties +1 -0
  287. package/dist/i18n/messagebundle_ru.properties +1 -0
  288. package/dist/i18n/messagebundle_sk.properties +1 -0
  289. package/dist/i18n/messagebundle_sl.properties +1 -0
  290. package/dist/i18n/messagebundle_sr.properties +2 -0
  291. package/dist/i18n/messagebundle_sv.properties +1 -0
  292. package/dist/i18n/messagebundle_tr.properties +1 -0
  293. package/dist/i18n/messagebundle_uk.properties +1 -0
  294. package/dist/i18n/messagebundle_zh_CN.properties +4 -0
  295. package/dist/i18n/messagebundle_zh_TW.properties +1 -0
  296. package/dist/types/BadgeDesign.d.ts +15 -0
  297. package/dist/types/BadgeDesign.js +18 -0
  298. package/dist/types/BadgeDesign.js.map +1 -0
  299. package/dist/types/IconPlacement.d.ts +5 -0
  300. package/dist/types/IconPlacement.js +7 -0
  301. package/dist/types/IconPlacement.js.map +1 -0
  302. package/dist/types/List.d.ts +8 -0
  303. package/dist/types/List.js.map +1 -1
  304. package/dist/utils/isLetterKeyPressed.d.ts +2 -0
  305. package/dist/utils/isLetterKeyPressed.js +5 -0
  306. package/dist/utils/isLetterKeyPressed.js.map +1 -0
  307. package/dist/utils/listItemLabelStartsWithKeyFocus.d.ts +3 -0
  308. package/dist/utils/listItemLabelStartsWithKeyFocus.js +55 -0
  309. package/dist/utils/listItemLabelStartsWithKeyFocus.js.map +1 -0
  310. package/dist/utils/listItemLabelUtils.d.ts +7 -0
  311. package/dist/utils/listItemLabelUtils.js +36 -0
  312. package/dist/utils/listItemLabelUtils.js.map +1 -0
  313. package/dist/vscode.html-custom-data.json +63 -26
  314. package/dist/web-types.json +113 -38
  315. package/package.json +1 -1
  316. package/src/Badge.hbs +16 -5
  317. package/src/Badge.ts +36 -19
  318. package/src/Breadcrumbs.ts +92 -66
  319. package/src/BreadcrumbsItem.ts +0 -1
  320. package/src/BreadcrumbsPopover.hbs +11 -9
  321. package/src/Checkbox.ts +0 -1
  322. package/src/CountrySelector.hbs +0 -1
  323. package/src/CountrySelector.ts +30 -16
  324. package/src/DatePicker.ts +2 -2
  325. package/src/Dropdown.ts +0 -2
  326. package/src/Footer.hbs +52 -28
  327. package/src/Footer.ts +81 -22
  328. package/src/Link.ts +5 -9
  329. package/src/List.hbs +2 -2
  330. package/src/List.ts +182 -112
  331. package/src/ListItem.hbs +2 -2
  332. package/src/ListItem.ts +4 -0
  333. package/src/MastheadItem.hbs +14 -4
  334. package/src/MastheadItem.ts +42 -9
  335. package/src/MastheadMenu.hbs +4 -4
  336. package/src/MastheadMenu.ts +20 -8
  337. package/src/MastheadMenuItem.hbs +10 -2
  338. package/src/MastheadMenuItem.ts +28 -1
  339. package/src/MastheadMobileMenu.ts +2 -2
  340. package/src/MastheadProfileMenu.hbs +1 -0
  341. package/src/MastheadProfileMenu.ts +3 -2
  342. package/src/MastheadShell.hbs +25 -19
  343. package/src/MastheadShell.ts +25 -5
  344. package/src/Pagination.hbs +3 -2
  345. package/src/Pagination.ts +110 -60
  346. package/src/PhoneNumberField.hbs +3 -3
  347. package/src/PhoneNumberField.ts +16 -8
  348. package/src/RangeSlider.ts +0 -1
  349. package/src/Search.hbs +10 -10
  350. package/src/Search.ts +17 -17
  351. package/src/SearchSuggestions.hbs +1 -0
  352. package/src/SearchableListBase.hbs +3 -1
  353. package/src/SearchableListBase.ts +57 -6
  354. package/src/SecondaryNavigation.hbs +1 -0
  355. package/src/SecondaryNavigation.ts +23 -16
  356. package/src/SecondaryNavigationItem.hbs +10 -7
  357. package/src/SecondaryNavigationItem.ts +58 -28
  358. package/src/SecondaryNavigationSubItem.hbs +3 -0
  359. package/src/SecondaryNavigationSubItem.ts +3 -0
  360. package/src/SegmentedButton.ts +2 -2
  361. package/src/SelectBox.ts +1 -1
  362. package/src/SideNavigationGroup.ts +0 -1
  363. package/src/SideNavigationItem.ts +0 -1
  364. package/src/SideNavigationSubItem.ts +0 -1
  365. package/src/Slider.ts +0 -1
  366. package/src/StepInput.hbs +16 -16
  367. package/src/TabNavigation.ts +2 -2
  368. package/src/Tag.ts +1 -5
  369. package/src/Tile.ts +2 -2
  370. package/src/Toast.ts +4 -3
  371. package/src/Wizard.hbs +1 -0
  372. package/src/Wizard.ts +1 -1
  373. package/src/WizardTab.ts +0 -1
  374. package/src/features/SearchSuggestionsPopover.ts +67 -1
  375. package/src/generated/i18n/i18n-defaults.ts +2 -2
  376. package/src/generated/json-imports/i18n-static.ts +86 -2
  377. package/src/generated/json-imports/i18n.ts +59 -3
  378. package/src/generated/templates/BadgeTemplate.lit.ts +3 -3
  379. package/src/generated/templates/BreadcrumbsPopoverTemplate.lit.ts +3 -3
  380. package/src/generated/templates/CountrySelectorTemplate.lit.ts +1 -1
  381. package/src/generated/templates/FooterTemplate.lit.ts +12 -11
  382. package/src/generated/templates/ListItemTemplate.lit.ts +2 -2
  383. package/src/generated/templates/ListTemplate.lit.ts +3 -3
  384. package/src/generated/templates/MastheadItemTemplate.lit.ts +17 -16
  385. package/src/generated/templates/MastheadMenuItemTemplate.lit.ts +15 -14
  386. package/src/generated/templates/MastheadMenuTemplate.lit.ts +3 -3
  387. package/src/generated/templates/MastheadProfileMenuTemplate.lit.ts +1 -1
  388. package/src/generated/templates/MastheadShellTemplate.lit.ts +10 -9
  389. package/src/generated/templates/PaginationTemplate.lit.ts +3 -3
  390. package/src/generated/templates/PhoneNumberFieldTemplate.lit.ts +1 -1
  391. package/src/generated/templates/SearchSuggestionsTemplate.lit.ts +1 -1
  392. package/src/generated/templates/SearchableListBaseTemplate.lit.ts +2 -2
  393. package/src/generated/templates/SecondaryNavigationItemTemplate.lit.ts +3 -3
  394. package/src/generated/templates/SecondaryNavigationSubItemTemplate.lit.ts +3 -3
  395. package/src/generated/templates/SecondaryNavigationTemplate.lit.ts +1 -1
  396. package/src/generated/templates/StepInputTemplate.lit.ts +1 -1
  397. package/src/generated/templates/WizardTemplate.lit.ts +1 -1
  398. package/src/generated/themes/Badge.css.ts +1 -1
  399. package/src/generated/themes/BreadcrumbsPopover.css.ts +1 -1
  400. package/src/generated/themes/DatePickerPopover.css.ts +1 -1
  401. package/src/generated/themes/FilterMenu.css.ts +1 -1
  402. package/src/generated/themes/Footer.css.ts +1 -1
  403. package/src/generated/themes/MastheadItem.css.ts +1 -1
  404. package/src/generated/themes/MastheadMenu.css.ts +1 -1
  405. package/src/generated/themes/MastheadMenuItem.css.ts +1 -1
  406. package/src/generated/themes/MastheadShell.css.ts +1 -1
  407. package/src/generated/themes/MediaPlayer.css.ts +1 -1
  408. package/src/generated/themes/Modal.css.ts +1 -1
  409. package/src/generated/themes/RatingIndicator.css.ts +1 -1
  410. package/src/generated/themes/Slider.css.ts +1 -1
  411. package/src/generated/themes/TableCell.css.ts +1 -1
  412. package/src/generated/themes/TableCellBase.css.ts +1 -1
  413. package/src/generated/themes/TextArea.css.ts +1 -1
  414. package/src/i18n/messagebundle.properties +10 -0
  415. package/src/i18n/messagebundle_ar.properties +1 -0
  416. package/src/i18n/messagebundle_bg.properties +1 -0
  417. package/src/i18n/messagebundle_cs.properties +1 -0
  418. package/src/i18n/messagebundle_da.properties +1 -0
  419. package/src/i18n/messagebundle_de.properties +1 -0
  420. package/src/i18n/messagebundle_el.properties +1 -0
  421. package/src/i18n/messagebundle_en.properties +4 -0
  422. package/src/i18n/messagebundle_es.properties +1 -0
  423. package/src/i18n/messagebundle_et.properties +1 -0
  424. package/src/i18n/messagebundle_fi.properties +1 -0
  425. package/src/i18n/messagebundle_fr.properties +1 -0
  426. package/src/i18n/messagebundle_hr.properties +1 -0
  427. package/src/i18n/messagebundle_hu.properties +1 -0
  428. package/src/i18n/messagebundle_it.properties +1 -0
  429. package/src/i18n/messagebundle_iw.properties +2 -0
  430. package/src/i18n/messagebundle_ko.properties +1 -0
  431. package/src/i18n/messagebundle_lt.properties +1 -0
  432. package/src/i18n/messagebundle_lv.properties +1 -0
  433. package/src/i18n/messagebundle_nl.properties +1 -0
  434. package/src/i18n/messagebundle_no.properties +1 -0
  435. package/src/i18n/messagebundle_pl.properties +1 -0
  436. package/src/i18n/messagebundle_pt.properties +1 -0
  437. package/src/i18n/messagebundle_pt_BR.properties +1 -0
  438. package/src/i18n/messagebundle_ro.properties +1 -0
  439. package/src/i18n/messagebundle_ru.properties +1 -0
  440. package/src/i18n/messagebundle_sk.properties +1 -0
  441. package/src/i18n/messagebundle_sl.properties +1 -0
  442. package/src/i18n/messagebundle_sr.properties +2 -0
  443. package/src/i18n/messagebundle_sv.properties +1 -0
  444. package/src/i18n/messagebundle_tr.properties +1 -0
  445. package/src/i18n/messagebundle_uk.properties +1 -0
  446. package/src/i18n/messagebundle_zh_CN.properties +4 -0
  447. package/src/i18n/messagebundle_zh_TW.properties +1 -0
  448. package/src/themes/Badge.css +48 -52
  449. package/src/themes/BreadcrumbsPopover.css +1 -0
  450. package/src/themes/DatePickerPopover.css +9 -0
  451. package/src/themes/FilterMenu.css +6 -6
  452. package/src/themes/Footer.css +22 -3
  453. package/src/themes/MastheadItem.css +4 -0
  454. package/src/themes/MastheadMenu.css +1 -1
  455. package/src/themes/MastheadMenuItem.css +4 -0
  456. package/src/themes/MastheadShell.css +5 -0
  457. package/src/themes/MediaPlayer.css +2 -1
  458. package/src/themes/Modal.css +1 -0
  459. package/src/themes/TableCell.css +0 -2
  460. package/src/themes/TableCellBase.css +1 -0
  461. package/src/themes/TextArea.css +1 -1
  462. package/src/types/BadgeDesign.ts +17 -0
  463. package/src/types/IconPlacement.ts +6 -0
  464. package/src/types/List.ts +9 -0
  465. package/src/utils/isLetterKeyPressed.ts +5 -0
  466. package/src/utils/listItemLabelStartsWithKeyFocus.ts +74 -0
  467. package/src/utils/listItemLabelUtils.ts +50 -0
  468. package/dist/assets/messagebundle_de-8158912e.js +0 -1
  469. package/dist/assets/messagebundle_en-c677773a.js +0 -1
  470. package/dist/assets/messagebundle_es-8dab6565.js +0 -1
  471. package/dist/assets/messagebundle_fr-669aca6d.js +0 -1
package/src/List.ts CHANGED
@@ -16,7 +16,7 @@ import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
16
16
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
17
17
  import getEffectiveScrollbarStyle from "@ui5/webcomponents-base/dist/util/getEffectiveScrollbarStyle.js";
18
18
  import UDExListItem from "./ListItem.js";
19
- import { ListStyleType, ListMode } from "./types/List.js";
19
+ import { ListStyleType, ListMode, LetterPressedHandlerObj } from "./types/List.js";
20
20
  import UDExListGroupHeader from "./ListGroupHeader.js";
21
21
  import UDExListGroupHeaderBase from "./ListGroupHeaderBase.js";
22
22
  import {
@@ -27,6 +27,8 @@ import ListTemplate from "./generated/templates/ListTemplate.lit.js";
27
27
 
28
28
  // Styles
29
29
  import ListCss from "./generated/themes/List.css.js";
30
+ import isLetterKey from "./utils/isLetterKeyPressed.js";
31
+ import listItemLabelStartsWithKeyFocus from "./utils/listItemLabelStartsWithKeyFocus.js";
30
32
 
31
33
  export type UDExListItemBase = UDExListItem & UDExListGroupHeader;
32
34
  /**
@@ -146,12 +148,27 @@ class UDExList extends UI5Element {
146
148
 
147
149
  static i18nBundle: I18nBundle;
148
150
 
151
+ _pressedKey!: string;
152
+ _pressedCount!: number;
153
+ _lastFoundPosition!: number;
154
+ _focusableListItems!: Array<UDExListItemBase>;
155
+ _letterKeyHandlerObj!: LetterPressedHandlerObj;
156
+
149
157
  static async onDefine(): Promise<void> {
150
158
  UDExList.i18nBundle = await getI18nBundle("@udex/web-components");
151
159
  }
152
160
 
161
+ resetFocusLetterHandlers(): void {
162
+ this.setPressedCount(0);
163
+ this.setPressedKey("");
164
+ this.setLastFoundPosition(0);
165
+ }
166
+
153
167
  onBeforeRendering(): void {
154
168
  this.prepareListItemsMode();
169
+ this.resetFocusLetterHandlers();
170
+ this._focusableListItems = this.getItemsWithoutHeader();
171
+ this._letterKeyHandlerObj = this.getLetterKeyObjHandler();
155
172
  }
156
173
 
157
174
  handleItemPress(e: CustomEvent): void {
@@ -160,149 +177,159 @@ class UDExList extends UI5Element {
160
177
  }
161
178
 
162
179
  handleKeyDown(e: KeyboardEvent): void {
163
- this.handleUpArrow(e);
164
- this.handleDownArrow(e);
165
- this.handleHomeKey(e);
166
- this.handleEndKey(e);
167
- this.handleEnterOrSpace(e);
180
+ if (isUp(e)) {
181
+ this.handleUpArrow(e);
182
+ }
183
+ if (isDown(e)) {
184
+ this.handleDownArrow(e);
185
+ }
186
+ if (isHome(e)) {
187
+ this.handleHomeKey(e);
188
+ }
189
+ if (isEnd(e)) {
190
+ this.handleEndKey(e);
191
+ }
192
+ if (isEnter(e) || isSpace(e)) {
193
+ this.handleEnterOrSpace(e);
194
+ }
195
+ if (isLetterKey(e.key)) {
196
+ this.handleLetterKey(e);
197
+ }
168
198
  }
169
199
 
170
200
  handleEnterOrSpace(e: KeyboardEvent): void {
171
- if (isEnter(e) || isSpace(e)) {
172
- e.preventDefault();
173
- const clickedItem = e.target as UDExListItemBase;
174
- this.onItemPress(clickedItem);
175
- }
201
+ e.preventDefault();
202
+ const clickedItem = e.target as UDExListItemBase;
203
+ this.onItemPress(clickedItem);
176
204
  }
177
205
 
178
206
  handleUpArrow(e: KeyboardEvent): void {
179
- if (isUp(e)) {
180
- e.preventDefault();
181
- const items = this.getKeyboardNavigationItems();
182
- const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);
183
- const lastItemIndex = items.length - 1;
184
- const previousSelectIndex = currentSelectedIndex - 1 < 0 ? lastItemIndex : currentSelectedIndex - 1;
185
- const isHeaderItem = items[previousSelectIndex].isGroup;
186
- const nonInteractiveHeader = items[previousSelectIndex].nonInteractive;
187
-
188
- if (nonInteractiveHeader && previousSelectIndex === 0) {
189
- this.unsetTabIndexByIndex(items, currentSelectedIndex);
190
- this.setTabIndexByIndex(items, lastItemIndex);
191
- items[lastItemIndex].focus();
192
- return;
193
- }
194
-
195
- if (nonInteractiveHeader) {
196
- this.unsetTabIndexByIndex(items, currentSelectedIndex);
197
- this.setTabIndexByIndex(items, previousSelectIndex - 1);
198
- items[previousSelectIndex - 1].focus();
199
- return;
200
- }
201
-
202
- if (isHeaderItem) {
203
- this.unsetTabIndexByIndex(items, currentSelectedIndex);
204
- this.setTabIndexByIndex(items, previousSelectIndex);
205
- this.focusHeader(items[previousSelectIndex]);
206
- return;
207
- }
207
+ e.preventDefault();
208
+ const items = this.getKeyboardNavigationItems();
209
+ const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);
210
+ const lastItemIndex = items.length - 1;
211
+ const previousSelectIndex = currentSelectedIndex - 1 < 0 ? lastItemIndex : currentSelectedIndex - 1;
212
+ const isHeaderItem = items[previousSelectIndex].isGroup;
213
+ const nonInteractiveHeader = items[previousSelectIndex].nonInteractive;
214
+
215
+ if (nonInteractiveHeader && previousSelectIndex === 0) {
216
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
217
+ this.setTabIndexByIndex(items, lastItemIndex);
218
+ items[lastItemIndex].focus();
219
+ return;
220
+ }
208
221
 
209
- if (this.modeRadioGroup) {
210
- items[currentSelectedIndex].selected = false;
211
- items[previousSelectIndex].selected = true;
212
- }
222
+ if (nonInteractiveHeader) {
223
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
224
+ this.setTabIndexByIndex(items, previousSelectIndex - 1);
225
+ items[previousSelectIndex - 1].focus();
226
+ return;
227
+ }
213
228
 
229
+ if (isHeaderItem) {
214
230
  this.unsetTabIndexByIndex(items, currentSelectedIndex);
215
231
  this.setTabIndexByIndex(items, previousSelectIndex);
216
- items[previousSelectIndex].focus();
232
+ this.focusHeader(items[previousSelectIndex]);
233
+ return;
217
234
  }
218
- }
219
235
 
220
- handleDownArrow(e: KeyboardEvent): void {
221
- if (isDown(e)) {
222
- e.preventDefault();
223
- const items = this.getKeyboardNavigationItems();
224
- const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);
225
- const nextSelectIndex = currentSelectedIndex + 1 > items.length - 1 ? 0 : currentSelectedIndex + 1;
226
- const isHeaderItem = items[nextSelectIndex].isGroup;
227
- const nonInteractiveHeader = items[nextSelectIndex].nonInteractive;
228
-
229
- if (nonInteractiveHeader) {
230
- this.unsetTabIndexByIndex(items, currentSelectedIndex);
231
- this.setTabIndexByIndex(items, nextSelectIndex + 1);
232
- items[nextSelectIndex + 1].focus();
233
- return;
234
- }
236
+ if (this.modeRadioGroup) {
237
+ items[currentSelectedIndex].selected = false;
238
+ items[previousSelectIndex].selected = true;
239
+ }
235
240
 
236
- if (isHeaderItem) {
237
- this.unsetTabIndexByIndex(items, currentSelectedIndex);
238
- this.setTabIndexByIndex(items, nextSelectIndex);
239
- this.focusHeader(items[nextSelectIndex]);
240
- return;
241
- }
241
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
242
+ this.setTabIndexByIndex(items, previousSelectIndex);
243
+ items[previousSelectIndex].focus();
244
+ }
242
245
 
243
- if (this.modeRadioGroup) {
244
- items[currentSelectedIndex].selected = false;
245
- items[nextSelectIndex].selected = true;
246
- }
246
+ handleDownArrow(e: KeyboardEvent): void {
247
+ e.preventDefault();
248
+ const items = this.getKeyboardNavigationItems();
249
+ const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);
250
+ const nextSelectIndex = currentSelectedIndex + 1 > items.length - 1 ? 0 : currentSelectedIndex + 1;
251
+ const isHeaderItem = items[nextSelectIndex].isGroup;
252
+ const nonInteractiveHeader = items[nextSelectIndex].nonInteractive;
253
+
254
+ if (nonInteractiveHeader) {
255
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
256
+ this.setTabIndexByIndex(items, nextSelectIndex + 1);
257
+ items[nextSelectIndex + 1].focus();
258
+ return;
259
+ }
247
260
 
261
+ if (isHeaderItem) {
248
262
  this.unsetTabIndexByIndex(items, currentSelectedIndex);
249
263
  this.setTabIndexByIndex(items, nextSelectIndex);
250
- items[nextSelectIndex].focus();
264
+ this.focusHeader(items[nextSelectIndex]);
265
+ return;
251
266
  }
252
- }
253
267
 
254
- handleHomeKey(e: KeyboardEvent): void {
255
- if (isHome(e)) {
256
- e.preventDefault();
257
- const items = this.getKeyboardNavigationItems();
258
- const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);
259
- const firstItem = items[0];
260
- const isHeaderItem = firstItem.isGroup;
261
- const nonInteractiveItem = firstItem.nonInteractive;
262
-
263
- if (nonInteractiveItem) {
264
- this.unsetTabIndexByIndex(items, currentSelectedIndex);
265
- this.setTabIndexByIndex(items, 1);
266
- items[1].focus();
267
- return;
268
- }
268
+ if (this.modeRadioGroup) {
269
+ items[currentSelectedIndex].selected = false;
270
+ items[nextSelectIndex].selected = true;
271
+ }
269
272
 
270
- if (isHeaderItem) {
271
- this.unsetTabIndexByIndex(items, currentSelectedIndex);
272
- this.setTabIndexByIndex(items, 0);
273
- this.focusHeader(items[0]);
274
- return;
275
- }
273
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
274
+ this.setTabIndexByIndex(items, nextSelectIndex);
275
+ items[nextSelectIndex].focus();
276
+ }
276
277
 
277
- if (this.modeRadioGroup) {
278
- items[currentSelectedIndex].selected = false;
279
- items[0].selected = true;
280
- }
278
+ handleHomeKey(e: KeyboardEvent): void {
279
+ e.preventDefault();
280
+ const items = this.getKeyboardNavigationItems();
281
+ const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);
282
+ const firstItem = items[0];
283
+ const isHeaderItem = firstItem.isGroup;
284
+ const nonInteractiveItem = firstItem.nonInteractive;
285
+
286
+ if (nonInteractiveItem) {
287
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
288
+ this.setTabIndexByIndex(items, 1);
289
+ items[1].focus();
290
+ return;
291
+ }
281
292
 
293
+ if (isHeaderItem) {
282
294
  this.unsetTabIndexByIndex(items, currentSelectedIndex);
283
295
  this.setTabIndexByIndex(items, 0);
284
- items[0].focus();
296
+ this.focusHeader(items[0]);
297
+ return;
298
+ }
299
+
300
+ if (this.modeRadioGroup) {
301
+ items[currentSelectedIndex].selected = false;
302
+ items[0].selected = true;
285
303
  }
304
+
305
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
306
+ this.setTabIndexByIndex(items, 0);
307
+ items[0].focus();
286
308
  }
287
309
 
288
310
  handleEndKey(e: KeyboardEvent): void {
289
- if (isEnd(e)) {
290
- e.preventDefault();
291
- const items = this.getKeyboardNavigationItems();
292
- const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);
311
+ e.preventDefault();
312
+ const items = this.getKeyboardNavigationItems();
313
+ const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);
293
314
 
294
- if (this.modeRadioGroup) {
295
- items[currentSelectedIndex].selected = false;
296
- items[items.length - 1].selected = true;
297
- }
298
-
299
- this.unsetTabIndexByIndex(items, currentSelectedIndex);
300
- this.setTabIndexByIndex(items, items.length - 1);
301
- items[items.length - 1].focus();
315
+ if (this.modeRadioGroup) {
316
+ items[currentSelectedIndex].selected = false;
317
+ items[items.length - 1].selected = true;
302
318
  }
319
+
320
+ this.unsetTabIndexByIndex(items, currentSelectedIndex);
321
+ this.setTabIndexByIndex(items, items.length - 1);
322
+ items[items.length - 1].focus();
303
323
  }
304
324
 
305
- onItemPress(clickedItem :UDExListItemBase): void {
325
+ handleLetterKey(e: KeyboardEvent): void {
326
+ const letterKey = e.key;
327
+ e.stopPropagation();
328
+ e.preventDefault();
329
+ listItemLabelStartsWithKeyFocus(letterKey, this._focusableListItems, this._letterKeyHandlerObj);
330
+ }
331
+
332
+ onItemPress(clickedItem: UDExListItemBase): void {
306
333
  if (this.modeSingleSelect && !this.controlled) {
307
334
  this.revertSelectedItems(this.getSelectedItems());
308
335
  clickedItem.selected = true;
@@ -333,6 +360,14 @@ class UDExList extends UI5Element {
333
360
  });
334
361
  }
335
362
 
363
+ focusSelectedItem(): void {
364
+ const selectedItemIndex = this.items.findIndex(item => item.selected);
365
+ this.resetTabIndexes();
366
+ if (selectedItemIndex !== -1 && this.modeSingleSelect) {
367
+ this.setTabIndexByIndex(this.items, selectedItemIndex);
368
+ }
369
+ }
370
+
336
371
  focusHeader(item: UDExListItemBase): void {
337
372
  const header = item.shadowRoot?.querySelector(".udex-list__group-header") as HTMLElement;
338
373
  header.focus();
@@ -346,6 +381,41 @@ class UDExList extends UI5Element {
346
381
  items[index]._tabIndex = "0";
347
382
  }
348
383
 
384
+ setPressedKey(value:string): void {
385
+ this._pressedKey = value;
386
+ }
387
+
388
+ getPressedKey(): string {
389
+ return this._pressedKey;
390
+ }
391
+
392
+ setPressedCount(value:number): void {
393
+ this._pressedCount = value;
394
+ }
395
+
396
+ getPressedCount() : number {
397
+ return this._pressedCount;
398
+ }
399
+
400
+ setLastFoundPosition(value:number): void {
401
+ this._lastFoundPosition = value;
402
+ }
403
+
404
+ getLastFoundPosition(): number {
405
+ return this._lastFoundPosition;
406
+ }
407
+
408
+ getLetterKeyObjHandler(): LetterPressedHandlerObj {
409
+ return {
410
+ getPressedKey: () => this.getPressedKey(),
411
+ setPressedKey: (arg: string) => this.setPressedKey(arg),
412
+ getPressedCount: () => this.getPressedCount(),
413
+ setPressedCount: (arg: number) => this.setPressedCount(arg),
414
+ getLastFoundPosition: () => this.getLastFoundPosition(),
415
+ setLastFoundPosition: (arg: number) => this.setLastFoundPosition(arg),
416
+ } as LetterPressedHandlerObj;
417
+ }
418
+
349
419
  getItems(): Array<UDExListItemBase> {
350
420
  return this.getSlottedNodes<UDExListItemBase>("items");
351
421
  }
package/src/ListItem.hbs CHANGED
@@ -51,7 +51,7 @@
51
51
  </li>
52
52
  {{/if}}
53
53
  {{#*inline "contentList"}}
54
- <div class="udex-list__content-wrap" _id="{{this._id}}" aria-labelledby="{{this._id}}-invisibleText">
54
+ <div class="udex-list__content-wrap" _id="{{this._id}}" aria-labelledby="{{this._id}}-invisibleText" aria-label="{{accessibleListItemName}}">
55
55
  {{#if flag}}
56
56
  <div class="udex-list__flag-wrap">
57
57
  <span class="udex-list__flag" style="background-position: {{flagPosition}}"></span>
@@ -120,6 +120,6 @@
120
120
  {{/if}}
121
121
  {{/if}}
122
122
  </div>
123
- <div class="hidden" id="{{this._id}}-invisibleText">{{accessibleName}}</div>
123
+ <div class="hidden" id="{{this._id}}-invisibleText">{{accessibleListItemName}}</div>
124
124
  </div>
125
125
  {{/inline}}
package/src/ListItem.ts CHANGED
@@ -393,6 +393,10 @@ class UDExListItem extends UDExListItemBase {
393
393
  return this.size === ListItemSize.Large;
394
394
  }
395
395
 
396
+ get accessibleListItemName(): string {
397
+ return this.accessibleName || this.label;
398
+ }
399
+
396
400
  get stateAccessibleName(): string {
397
401
  if (this.indeterminate) { return UDExListItem.i18nBundle.getText(INDETERMINATE); }
398
402
  return `${this.selected ? UDExListItem.i18nBundle.getText(SELECTED) : UDExListItem.i18nBundle.getText(UNSELECTED)} `;
@@ -1,4 +1,11 @@
1
1
  {{#if hasHref}}
2
+ {{#if isTargetBlank}}
3
+ <span
4
+ id="new-win-desc"
5
+ class="udex-masthead-hidden-text">
6
+ {{openInNewWindowText}}
7
+ </span>
8
+ {{/if}}
2
9
  <a
3
10
  id="{{this._id}}"
4
11
  class="{{additionalClass}}"
@@ -6,8 +13,8 @@
6
13
  role="{{accessibleRoleName}}"
7
14
  target="{{target}}"
8
15
  href="{{href}}"
9
- aria-labelledby="{{ariaLabelledBy}}"
10
16
  aria-label="{{accessibleLabel}}"
17
+ aria-describedby="{{ariaDescribedBy}}"
11
18
  @click="{{handleNavigationItemClick}}">
12
19
  {{> content}}
13
20
  </a>
@@ -17,7 +24,8 @@
17
24
  role="combobox"
18
25
  class="udex-masthead-item__btn {{additionalClass}}"
19
26
  aria-expanded="{{selected}}"
20
- aria-labelledby="{{ariaLabelledBy}}"
27
+ aria-describedby="{{ariaDescribedBy}}"
28
+ aria-controls="{{this._id}}_dropdown"
21
29
  aria-haspopup="{{hasDropdownSlot}}"
22
30
  aria-label="{{accessibleLabel}}"
23
31
  @keydown="{{handleKeyDown}}"
@@ -33,7 +41,7 @@
33
41
  id="{{this._id}}"
34
42
  class="udex-masthead-item__btn {{additionalClass}}"
35
43
  aria-expanded="{{selected}}"
36
- aria-labelledby="{{ariaLabelledBy}}"
44
+ aria-describedby="{{ariaDescribedBy}}"
37
45
  aria-haspopup="{{hasDropdownSlot}}"
38
46
  aria-label="{{accessibleLabel}}"
39
47
  @keydown="{{handleKeyDown}}"
@@ -70,8 +78,10 @@
70
78
 
71
79
  {{#*inline "dropdown"}}
72
80
  <div
81
+ id="{{this._id}}_dropdown"
73
82
  class="udex-masthead-item__dropdown"
74
- @keydown="{{handleKeyDown}}">
83
+ @keydown="{{handleKeyDown}}"
84
+ @focusout="{{handleFocusout}}">
75
85
  <div class="udex-masthead-item__dropdown-holder">
76
86
  <slot name="dropdown"></slot>
77
87
  </div>
@@ -10,7 +10,7 @@ import "@ui5/webcomponents-icons/dist/search.js";
10
10
  import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
11
11
  import { isEscape } from "@ui5/webcomponents-base/dist/Keys.js";
12
12
  import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
13
- import { PROFILE } from "./generated/i18n/i18n-defaults.js";
13
+ import { OPENS_IN_A_NEW_WINDOW, PROFILE } from "./generated/i18n/i18n-defaults.js";
14
14
  import UDExMastheadMenu from "./MastheadMenu.js";
15
15
  import UDExAvatar from "./Avatar.js";
16
16
  import MastheadShell from "./MastheadShell.js";
@@ -53,6 +53,13 @@ export type ItemClickEventDetail = {
53
53
  item: UDExMastheadItem,
54
54
  }
55
55
 
56
+ export enum Target {
57
+ _blank = "_blank",
58
+ _parent = "_parent",
59
+ _self = "_self",
60
+ _top = "_top",
61
+ }
62
+
56
63
  /**
57
64
  * @class
58
65
  *
@@ -73,6 +80,7 @@ export type ItemClickEventDetail = {
73
80
  @customElement({
74
81
  tag: "udex-masthead-item",
75
82
  renderer: litRender,
83
+ languageAware: true,
76
84
  styles: MastheadItemCss,
77
85
  template: MastheadItemTemplate,
78
86
  dependencies: [
@@ -93,7 +101,7 @@ export type ItemClickEventDetail = {
93
101
  type: HTMLElement,
94
102
  },
95
103
  originalEvent: {
96
- type: PointerEvent,
104
+ type: Event,
97
105
  },
98
106
  },
99
107
  })
@@ -157,8 +165,8 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
157
165
  * <b>Note:</b> Standard hyperlink behavior is supported.
158
166
  * @public
159
167
  */
160
- @property({ type: String })
161
- target!: string;
168
+ @property({ type: Target, defaultValue: Target._self })
169
+ target!: Target;
162
170
 
163
171
  /**
164
172
  * Controls the ARIA name of the item
@@ -243,6 +251,15 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
243
251
  }
244
252
  }
245
253
 
254
+ handleFocusout(e: FocusEvent): void {
255
+ const eTarget = e.relatedTarget as HTMLElement;
256
+ const focusedAvatarItem = eTarget?.shadowRoot?.querySelector("[ui5-avatar]");
257
+
258
+ if (!this.isMobile && (!this.isProfileBtn || eTarget === null || focusedAvatarItem)) {
259
+ this.closeDropdown();
260
+ }
261
+ }
262
+
246
263
  handleKeyDown(e: KeyboardEvent): void {
247
264
  if (isEscape(e) && this.hasDropdownSlot) {
248
265
  if (this.isMobile) {
@@ -253,8 +270,8 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
253
270
  }
254
271
  }
255
272
 
256
- handleKeyEscape() {
257
- this.selected = false;
273
+ handleKeyEscape(): void {
274
+ this.closeDropdown();
258
275
  if (this.isProfileBtn) {
259
276
  this._profileAvatar.focus();
260
277
  } else {
@@ -324,6 +341,10 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
324
341
  }
325
342
  }
326
343
 
344
+ closeDropdown(): void {
345
+ this.selected = false;
346
+ }
347
+
327
348
  getDomElement(selector: string): HTMLElement | undefined | null {
328
349
  return this.shadowRoot?.querySelector(`${selector}`);
329
350
  }
@@ -340,7 +361,7 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
340
361
  const iconClass = this.icon ? "udex-masthead-item__button--icon" : "";
341
362
  const profileClass = this.isProfileBtn ? "udex-masthead-item__button--profile" : "";
342
363
  const exploreClass = this.isExploreBtn ? "udex-masthead-item__button--explore" : "";
343
- return `udex-masthead-item ${iconClass} ${profileClass} ${exploreClass}`;
364
+ return `udex-masthead-item ${iconClass} ${profileClass} ${exploreClass}`.trim();
344
365
  }
345
366
 
346
367
  get profileAvatar(): UDExAvatar {
@@ -367,7 +388,7 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
367
388
  return this.selected ? " udex-masthead-item__button--active" : "";
368
389
  }
369
390
 
370
- get ariaLabelledBy(): string {
391
+ get ariaDescribedBy(): string {
371
392
  const labels = [];
372
393
 
373
394
  if (this.text) {
@@ -378,7 +399,11 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
378
399
  labels.push(`${this.__id}-icon`);
379
400
  }
380
401
 
381
- return labels.join(" ");
402
+ if (this.isTargetBlank) {
403
+ labels.push(`new-win-desc`);
404
+ }
405
+
406
+ return labels.join(" ").trim();
382
407
  }
383
408
 
384
409
  get showDropdown(): boolean {
@@ -412,6 +437,14 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
412
437
  get isMobile(): boolean {
413
438
  return window.innerWidth < breakpointSizeM;
414
439
  }
440
+
441
+ get isTargetBlank(): boolean {
442
+ return this.target === Target._blank;
443
+ }
444
+
445
+ get openInNewWindowText(): string {
446
+ return UDExMastheadItem.i18nBundle.getText(OPENS_IN_A_NEW_WINDOW);
447
+ }
415
448
  }
416
449
 
417
450
  UDExMastheadItem.define();
@@ -22,6 +22,7 @@
22
22
  {{#*inline "header"}}
23
23
  <div class="udex-masthead-menu__header">
24
24
  <udex-masthead-menu-item
25
+ id="category-{{categoryId}}"
25
26
  @click="{{../../handleMenuItemClick}}"
26
27
  url="{{this.url}}"
27
28
  label="{{this.category}}"
@@ -33,16 +34,15 @@
33
34
  {{/inline}}
34
35
 
35
36
  {{#*inline "list"}}
36
- <ul class="udex-masthead-menu__list" role="menu">
37
+ <ul class="udex-masthead-menu__list" aria-labelledby="category-{{categoryId}}">
37
38
  {{#each this.items}}
38
- <li role="none">
39
+ <li>
39
40
  <udex-masthead-menu-item
40
41
  @click="{{../../../handleMenuItemClick}}"
41
42
  badge="{{this.badge}}"
42
43
  ?external-link="{{this.externalLink}}"
43
44
  url="{{this.url}}"
44
- label="{{this.title}}"
45
- role="menuitem" >
45
+ label="{{this.title}}">
46
46
  </udex-masthead-menu-item>
47
47
  </li>
48
48
  {{/each}}