@sapudex/web-components 2.56.0 → 2.58.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 (425) hide show
  1. package/README.md +258 -0
  2. package/cypress/specs/FilterMenu.cy.tsx +209 -19
  3. package/cypress/specs/List.cy.tsx +67 -4
  4. package/cypress/specs/ListItem.cy.tsx +35 -9
  5. package/cypress/specs/SelectBox.cy.tsx +100 -0
  6. package/cypress/specs/TabNavigation.cy.tsx +297 -21
  7. package/cypress/specs/TagGroup.cy.tsx +35 -0
  8. package/dist/Carousel.d.ts +9 -3
  9. package/dist/Carousel.js +35 -6
  10. package/dist/Carousel.js.map +1 -1
  11. package/dist/CarouselTemplate.js +3 -3
  12. package/dist/CarouselTemplate.js.map +1 -1
  13. package/dist/List.d.ts +15 -1
  14. package/dist/List.js +23 -2
  15. package/dist/List.js.map +1 -1
  16. package/dist/ListGroupHeaderBase.d.ts +13 -0
  17. package/dist/ListGroupHeaderBase.js +43 -2
  18. package/dist/ListGroupHeaderBase.js.map +1 -1
  19. package/dist/ListGroupHeaderTemplate.js +26 -7
  20. package/dist/ListGroupHeaderTemplate.js.map +1 -1
  21. package/dist/ListItem.d.ts +0 -3
  22. package/dist/ListItem.js +18 -12
  23. package/dist/ListItem.js.map +1 -1
  24. package/dist/ListItemBase.d.ts +17 -0
  25. package/dist/ListItemBase.js +15 -0
  26. package/dist/ListItemBase.js.map +1 -1
  27. package/dist/ListItemTemplate.js +2 -2
  28. package/dist/ListItemTemplate.js.map +1 -1
  29. package/dist/MastheadCountrySelector.js +5 -5
  30. package/dist/MastheadCountrySelector.js.map +1 -1
  31. package/dist/MastheadCountrySelectorTemplate.d.ts +2 -0
  32. package/dist/MastheadCountrySelectorTemplate.js +15 -0
  33. package/dist/MastheadCountrySelectorTemplate.js.map +1 -0
  34. package/dist/MastheadItem.d.ts +0 -3
  35. package/dist/MastheadItem.js +3 -6
  36. package/dist/MastheadItem.js.map +1 -1
  37. package/dist/MastheadItemTemplate.d.ts +2 -0
  38. package/dist/MastheadItemTemplate.js +41 -0
  39. package/dist/MastheadItemTemplate.js.map +1 -0
  40. package/dist/MastheadMenu.d.ts +1 -0
  41. package/dist/MastheadMenu.js +4 -6
  42. package/dist/MastheadMenu.js.map +1 -1
  43. package/dist/MastheadMenuItem.d.ts +0 -3
  44. package/dist/MastheadMenuItem.js +3 -6
  45. package/dist/MastheadMenuItem.js.map +1 -1
  46. package/dist/MastheadMenuItemTemplate.d.ts +2 -0
  47. package/dist/MastheadMenuItemTemplate.js +36 -0
  48. package/dist/MastheadMenuItemTemplate.js.map +1 -0
  49. package/dist/MastheadMenuTemplate.d.ts +2 -0
  50. package/dist/MastheadMenuTemplate.js +13 -0
  51. package/dist/MastheadMenuTemplate.js.map +1 -0
  52. package/dist/MastheadMobileMenu.js +3 -3
  53. package/dist/MastheadMobileMenu.js.map +1 -1
  54. package/dist/MastheadMobileMenuTemplate.d.ts +2 -0
  55. package/dist/MastheadMobileMenuTemplate.js +33 -0
  56. package/dist/MastheadMobileMenuTemplate.js.map +1 -0
  57. package/dist/MastheadProfileMenu.d.ts +2 -4
  58. package/dist/MastheadProfileMenu.js +5 -20
  59. package/dist/MastheadProfileMenu.js.map +1 -1
  60. package/dist/MastheadProfileMenuTemplate.d.ts +2 -0
  61. package/dist/MastheadProfileMenuTemplate.js +24 -0
  62. package/dist/MastheadProfileMenuTemplate.js.map +1 -0
  63. package/dist/MastheadShell.js +3 -5
  64. package/dist/MastheadShell.js.map +1 -1
  65. package/dist/MastheadShellTemplate.d.ts +2 -0
  66. package/dist/MastheadShellTemplate.js +20 -0
  67. package/dist/MastheadShellTemplate.js.map +1 -0
  68. package/dist/SearchableListBase.d.ts +10 -0
  69. package/dist/SearchableListBase.js +34 -1
  70. package/dist/SearchableListBase.js.map +1 -1
  71. package/dist/SearchableListBaseTemplate.js +35 -4
  72. package/dist/SearchableListBaseTemplate.js.map +1 -1
  73. package/dist/SecondaryNavigation.d.ts +1 -0
  74. package/dist/SecondaryNavigation.js +20 -6
  75. package/dist/SecondaryNavigation.js.map +1 -1
  76. package/dist/SelectBase.js +8 -3
  77. package/dist/SelectBase.js.map +1 -1
  78. package/dist/Tab.d.ts +0 -7
  79. package/dist/Tab.js +4 -19
  80. package/dist/Tab.js.map +1 -1
  81. package/dist/TabHeaderTemplate.d.ts +2 -0
  82. package/dist/TabHeaderTemplate.js +15 -0
  83. package/dist/TabHeaderTemplate.js.map +1 -0
  84. package/dist/TabInOverflowTemplate.d.ts +2 -0
  85. package/dist/TabInOverflowTemplate.js +7 -0
  86. package/dist/TabInOverflowTemplate.js.map +1 -0
  87. package/dist/TabNavigation.d.ts +6 -6
  88. package/dist/TabNavigation.js +56 -42
  89. package/dist/TabNavigation.js.map +1 -1
  90. package/dist/TabNavigationPopoverTemplate.d.ts +2 -0
  91. package/dist/TabNavigationPopoverTemplate.js +9 -0
  92. package/dist/TabNavigationPopoverTemplate.js.map +1 -0
  93. package/dist/TabNavigationTemplate.d.ts +2 -0
  94. package/dist/TabNavigationTemplate.js +10 -0
  95. package/dist/TabNavigationTemplate.js.map +1 -0
  96. package/dist/TabTemplate.d.ts +2 -0
  97. package/dist/TabTemplate.js +5 -0
  98. package/dist/TabTemplate.js.map +1 -0
  99. package/dist/Tag.d.ts +1 -0
  100. package/dist/Tag.js +6 -0
  101. package/dist/Tag.js.map +1 -1
  102. package/dist/TagGroup.js +4 -2
  103. package/dist/TagGroup.js.map +1 -1
  104. package/dist/assets/{InputSuggestions-ChhTxYh4.js → InputSuggestions-CMYjJsHw.js} +1 -1
  105. package/dist/assets/{ListItemStandardExpandableTextTemplate-Bh1HxZfH.js → ListItemStandardExpandableTextTemplate-D2i8wWuR.js} +1 -1
  106. package/dist/assets/{bundle.esm-DCX_ohoZ.js → bundle.esm-BjN47C_y.js} +242 -242
  107. package/dist/assets/messagebundle_ar-BvIvqOKJ.js +1 -0
  108. package/dist/assets/messagebundle_bg-CbE9TJP3.js +1 -0
  109. package/dist/assets/messagebundle_cs-D7sDCnrw.js +1 -0
  110. package/dist/assets/messagebundle_da-BKcG2gb3.js +1 -0
  111. package/dist/assets/messagebundle_de-CqojOAqG.js +1 -0
  112. package/dist/assets/messagebundle_el-DLfp0_Vm.js +1 -0
  113. package/dist/assets/messagebundle_en-B7YJOdQz.js +1 -0
  114. package/dist/assets/messagebundle_es-dcaagZn0.js +1 -0
  115. package/dist/assets/messagebundle_et-XYXhCdvm.js +1 -0
  116. package/dist/assets/messagebundle_fi-Dffg0zEq.js +1 -0
  117. package/dist/assets/messagebundle_fr-CW8ENL86.js +1 -0
  118. package/dist/assets/messagebundle_hr-onMgZwRd.js +1 -0
  119. package/dist/assets/messagebundle_hu-BPDuHAe0.js +1 -0
  120. package/dist/assets/messagebundle_it-BcfXVW1A.js +1 -0
  121. package/dist/assets/messagebundle_ja-EWp-Nkd9.js +1 -0
  122. package/dist/assets/messagebundle_ko-BKQ27UJW.js +1 -0
  123. package/dist/assets/messagebundle_lt-A-f2EeMY.js +1 -0
  124. package/dist/assets/messagebundle_lv-CHVU_rnx.js +1 -0
  125. package/dist/assets/messagebundle_nl-gmf1np1i.js +1 -0
  126. package/dist/assets/messagebundle_no-CazfcIRA.js +1 -0
  127. package/dist/assets/messagebundle_pl-iv_zMkL4.js +1 -0
  128. package/dist/assets/messagebundle_pt-usY49ESJ.js +1 -0
  129. package/dist/assets/messagebundle_pt_PT-DTLEUiTC.js +1 -0
  130. package/dist/assets/messagebundle_ro-BHeGIHaV.js +1 -0
  131. package/dist/assets/messagebundle_ru-DJB1z_R0.js +1 -0
  132. package/dist/assets/messagebundle_sk-DlNIpzr3.js +1 -0
  133. package/dist/assets/messagebundle_sl-Day075Cf.js +1 -0
  134. package/dist/assets/messagebundle_sr-iI_TwIHf.js +1 -0
  135. package/dist/assets/messagebundle_sv-BPj73b5X.js +1 -0
  136. package/dist/assets/messagebundle_tr-DpdBqQtI.js +1 -0
  137. package/dist/assets/messagebundle_uk-CT4EqEBF.js +1 -0
  138. package/dist/assets/messagebundle_zh_CN-B_42cWcu.js +1 -0
  139. package/dist/assets/messagebundle_zh_TW-D25iNCcy.js +1 -0
  140. package/dist/css/themes/Button.css +1 -1
  141. package/dist/css/themes/Carousel.css +1 -1
  142. package/dist/css/themes/ListGroupHeader.css +1 -1
  143. package/dist/css/themes/PromoTile.css +1 -1
  144. package/dist/css/themes/Switch.css +1 -1
  145. package/dist/css/themes/TabInOverflow.css +1 -1
  146. package/dist/css/themes/TabNavigation.css +1 -1
  147. package/dist/css/themes/Tooltip.css +1 -1
  148. package/dist/custom-elements-internal.json +12 -12
  149. package/dist/custom-elements.json +12 -12
  150. package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
  151. package/dist/generated/assets/i18n/messagebundle_bg.json +1 -1
  152. package/dist/generated/assets/i18n/messagebundle_cs.json +1 -1
  153. package/dist/generated/assets/i18n/messagebundle_da.json +1 -1
  154. package/dist/generated/assets/i18n/messagebundle_de.json +1 -1
  155. package/dist/generated/assets/i18n/messagebundle_el.json +1 -1
  156. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  157. package/dist/generated/assets/i18n/messagebundle_es.json +1 -1
  158. package/dist/generated/assets/i18n/messagebundle_et.json +1 -1
  159. package/dist/generated/assets/i18n/messagebundle_fi.json +1 -1
  160. package/dist/generated/assets/i18n/messagebundle_fr.json +1 -1
  161. package/dist/generated/assets/i18n/messagebundle_hr.json +1 -1
  162. package/dist/generated/assets/i18n/messagebundle_hu.json +1 -1
  163. package/dist/generated/assets/i18n/messagebundle_it.json +1 -1
  164. package/dist/generated/assets/i18n/messagebundle_ja.json +1 -1
  165. package/dist/generated/assets/i18n/messagebundle_ko.json +1 -1
  166. package/dist/generated/assets/i18n/messagebundle_lt.json +1 -1
  167. package/dist/generated/assets/i18n/messagebundle_lv.json +1 -1
  168. package/dist/generated/assets/i18n/messagebundle_nl.json +1 -1
  169. package/dist/generated/assets/i18n/messagebundle_no.json +1 -1
  170. package/dist/generated/assets/i18n/messagebundle_pl.json +1 -1
  171. package/dist/generated/assets/i18n/messagebundle_pt.json +1 -1
  172. package/dist/generated/assets/i18n/messagebundle_pt_PT.json +1 -1
  173. package/dist/generated/assets/i18n/messagebundle_ro.json +1 -1
  174. package/dist/generated/assets/i18n/messagebundle_ru.json +1 -1
  175. package/dist/generated/assets/i18n/messagebundle_sk.json +1 -1
  176. package/dist/generated/assets/i18n/messagebundle_sl.json +1 -1
  177. package/dist/generated/assets/i18n/messagebundle_sr.json +1 -1
  178. package/dist/generated/assets/i18n/messagebundle_sv.json +1 -1
  179. package/dist/generated/assets/i18n/messagebundle_tr.json +1 -1
  180. package/dist/generated/assets/i18n/messagebundle_uk.json +1 -1
  181. package/dist/generated/assets/i18n/messagebundle_zh_CN.json +1 -1
  182. package/dist/generated/assets/i18n/messagebundle_zh_TW.json +1 -1
  183. package/dist/generated/i18n/i18n-defaults.d.ts +3 -9
  184. package/dist/generated/i18n/i18n-defaults.js +3 -9
  185. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  186. package/dist/generated/themes/Button.css.d.ts +1 -1
  187. package/dist/generated/themes/Button.css.js +1 -1
  188. package/dist/generated/themes/Button.css.js.map +1 -1
  189. package/dist/generated/themes/Carousel.css.d.ts +1 -1
  190. package/dist/generated/themes/Carousel.css.js +1 -1
  191. package/dist/generated/themes/Carousel.css.js.map +1 -1
  192. package/dist/generated/themes/ListGroupHeader.css.d.ts +1 -1
  193. package/dist/generated/themes/ListGroupHeader.css.js +1 -1
  194. package/dist/generated/themes/ListGroupHeader.css.js.map +1 -1
  195. package/dist/generated/themes/PromoTile.css.d.ts +1 -1
  196. package/dist/generated/themes/PromoTile.css.js +1 -1
  197. package/dist/generated/themes/PromoTile.css.js.map +1 -1
  198. package/dist/generated/themes/Switch.css.d.ts +1 -1
  199. package/dist/generated/themes/Switch.css.js +1 -1
  200. package/dist/generated/themes/Switch.css.js.map +1 -1
  201. package/dist/generated/themes/TabInOverflow.css.d.ts +1 -1
  202. package/dist/generated/themes/TabInOverflow.css.js +1 -1
  203. package/dist/generated/themes/TabInOverflow.css.js.map +1 -1
  204. package/dist/generated/themes/TabNavigation.css.d.ts +1 -1
  205. package/dist/generated/themes/TabNavigation.css.js +1 -1
  206. package/dist/generated/themes/TabNavigation.css.js.map +1 -1
  207. package/dist/generated/themes/Tooltip.css.d.ts +1 -1
  208. package/dist/generated/themes/Tooltip.css.js +1 -1
  209. package/dist/generated/themes/Tooltip.css.js.map +1 -1
  210. package/dist/messagebundle.properties +4 -10
  211. package/dist/messagebundle_ar.properties +0 -6
  212. package/dist/messagebundle_bg.properties +0 -8
  213. package/dist/messagebundle_cs.properties +0 -8
  214. package/dist/messagebundle_da.properties +0 -8
  215. package/dist/messagebundle_de.properties +0 -8
  216. package/dist/messagebundle_el.properties +0 -8
  217. package/dist/messagebundle_en.properties +2 -8
  218. package/dist/messagebundle_es.properties +0 -8
  219. package/dist/messagebundle_et.properties +0 -8
  220. package/dist/messagebundle_fi.properties +0 -8
  221. package/dist/messagebundle_fr.properties +0 -8
  222. package/dist/messagebundle_hr.properties +0 -8
  223. package/dist/messagebundle_hu.properties +0 -8
  224. package/dist/messagebundle_it.properties +0 -8
  225. package/dist/messagebundle_ja.properties +0 -8
  226. package/dist/messagebundle_ko.properties +0 -8
  227. package/dist/messagebundle_lt.properties +0 -8
  228. package/dist/messagebundle_lv.properties +0 -8
  229. package/dist/messagebundle_nl.properties +0 -8
  230. package/dist/messagebundle_no.properties +0 -8
  231. package/dist/messagebundle_pl.properties +0 -8
  232. package/dist/messagebundle_pt.properties +0 -8
  233. package/dist/messagebundle_pt_PT.properties +0 -8
  234. package/dist/messagebundle_ro.properties +0 -8
  235. package/dist/messagebundle_ru.properties +0 -8
  236. package/dist/messagebundle_sk.properties +0 -8
  237. package/dist/messagebundle_sl.properties +0 -7
  238. package/dist/messagebundle_sr.properties +0 -8
  239. package/dist/messagebundle_sv.properties +0 -8
  240. package/dist/messagebundle_tr.properties +0 -8
  241. package/dist/messagebundle_uk.properties +0 -8
  242. package/dist/messagebundle_zh_CN.properties +0 -8
  243. package/dist/messagebundle_zh_TW.properties +0 -8
  244. package/dist/vscode.html-custom-data.json +10 -2
  245. package/dist/web-types.json +6 -6
  246. package/package.json +1 -1
  247. package/src/Carousel.ts +51 -8
  248. package/src/CarouselTemplate.tsx +7 -7
  249. package/src/List.ts +24 -2
  250. package/src/ListGroupHeaderBase.ts +44 -2
  251. package/src/ListGroupHeaderTemplate.tsx +74 -23
  252. package/src/ListItem.ts +18 -15
  253. package/src/ListItemBase.ts +30 -0
  254. package/src/ListItemTemplate.tsx +4 -4
  255. package/src/MastheadCountrySelector.ts +5 -5
  256. package/src/MastheadCountrySelectorTemplate.tsx +98 -0
  257. package/src/MastheadItem.ts +3 -6
  258. package/src/MastheadItemTemplate.tsx +178 -0
  259. package/src/MastheadMenu.ts +5 -6
  260. package/src/MastheadMenuItem.ts +3 -7
  261. package/src/MastheadMenuItemTemplate.tsx +123 -0
  262. package/src/MastheadMenuTemplate.tsx +142 -0
  263. package/src/MastheadMobileMenu.ts +3 -3
  264. package/src/MastheadMobileMenuTemplate.tsx +274 -0
  265. package/src/MastheadProfileMenu.ts +10 -23
  266. package/src/MastheadProfileMenuTemplate.tsx +143 -0
  267. package/src/MastheadShell.ts +3 -5
  268. package/src/MastheadShellTemplate.tsx +228 -0
  269. package/src/SearchableListBase.ts +37 -1
  270. package/src/SearchableListBaseTemplate.tsx +38 -2
  271. package/src/SecondaryNavigation.ts +21 -6
  272. package/src/SelectBase.ts +8 -3
  273. package/src/Tab.ts +4 -24
  274. package/src/TabHeaderTemplate.tsx +153 -0
  275. package/src/TabInOverflowTemplate.tsx +68 -0
  276. package/src/TabNavigation.ts +64 -46
  277. package/src/TabNavigationPopoverTemplate.tsx +27 -0
  278. package/src/TabNavigationTemplate.tsx +98 -0
  279. package/src/TabTemplate.tsx +7 -0
  280. package/src/Tag.ts +7 -0
  281. package/src/TagGroup.ts +4 -2
  282. package/src/generated/i18n/i18n-defaults.ts +2 -2
  283. package/src/generated/themes/Button.css.ts +1 -1
  284. package/src/generated/themes/Carousel.css.ts +1 -1
  285. package/src/generated/themes/ListGroupHeader.css.ts +1 -1
  286. package/src/generated/themes/PromoTile.css.ts +1 -1
  287. package/src/generated/themes/Switch.css.ts +1 -1
  288. package/src/generated/themes/TabInOverflow.css.ts +1 -1
  289. package/src/generated/themes/TabNavigation.css.ts +1 -1
  290. package/src/generated/themes/Tooltip.css.ts +1 -1
  291. package/src/i18n/messagebundle.properties +4 -10
  292. package/src/i18n/messagebundle_ar.properties +0 -6
  293. package/src/i18n/messagebundle_bg.properties +0 -8
  294. package/src/i18n/messagebundle_cs.properties +0 -8
  295. package/src/i18n/messagebundle_da.properties +0 -8
  296. package/src/i18n/messagebundle_de.properties +0 -8
  297. package/src/i18n/messagebundle_el.properties +0 -8
  298. package/src/i18n/messagebundle_en.properties +2 -8
  299. package/src/i18n/messagebundle_es.properties +0 -8
  300. package/src/i18n/messagebundle_et.properties +0 -8
  301. package/src/i18n/messagebundle_fi.properties +0 -8
  302. package/src/i18n/messagebundle_fr.properties +0 -8
  303. package/src/i18n/messagebundle_hr.properties +0 -8
  304. package/src/i18n/messagebundle_hu.properties +0 -8
  305. package/src/i18n/messagebundle_it.properties +0 -8
  306. package/src/i18n/messagebundle_ja.properties +0 -8
  307. package/src/i18n/messagebundle_ko.properties +0 -8
  308. package/src/i18n/messagebundle_lt.properties +0 -8
  309. package/src/i18n/messagebundle_lv.properties +0 -8
  310. package/src/i18n/messagebundle_nl.properties +0 -8
  311. package/src/i18n/messagebundle_no.properties +0 -8
  312. package/src/i18n/messagebundle_pl.properties +0 -8
  313. package/src/i18n/messagebundle_pt.properties +0 -8
  314. package/src/i18n/messagebundle_pt_PT.properties +0 -8
  315. package/src/i18n/messagebundle_ro.properties +0 -8
  316. package/src/i18n/messagebundle_ru.properties +0 -8
  317. package/src/i18n/messagebundle_sk.properties +0 -8
  318. package/src/i18n/messagebundle_sl.properties +0 -7
  319. package/src/i18n/messagebundle_sr.properties +0 -8
  320. package/src/i18n/messagebundle_sv.properties +0 -8
  321. package/src/i18n/messagebundle_tr.properties +0 -8
  322. package/src/i18n/messagebundle_uk.properties +0 -8
  323. package/src/i18n/messagebundle_zh_CN.properties +0 -8
  324. package/src/i18n/messagebundle_zh_TW.properties +0 -8
  325. package/src/themes/Button.css +2 -1
  326. package/src/themes/Carousel.css +17 -10
  327. package/src/themes/ListGroupHeader.css +50 -7
  328. package/src/themes/PromoTile.css +1 -0
  329. package/src/themes/Switch.css +2 -2
  330. package/src/themes/TabInOverflow.css +9 -4
  331. package/src/themes/TabNavigation.css +1 -0
  332. package/src/themes/Tooltip.css +5 -4
  333. package/dist/assets/messagebundle_ar-BUZ_gTvQ.js +0 -1
  334. package/dist/assets/messagebundle_bg-4ainC3nj.js +0 -1
  335. package/dist/assets/messagebundle_cs-CFtmLavu.js +0 -1
  336. package/dist/assets/messagebundle_da-BHL-qTPd.js +0 -1
  337. package/dist/assets/messagebundle_de-SMiMT-ST.js +0 -1
  338. package/dist/assets/messagebundle_el-ChAszJ4A.js +0 -1
  339. package/dist/assets/messagebundle_en-B0P3kkb6.js +0 -1
  340. package/dist/assets/messagebundle_es-LGmRBKqB.js +0 -1
  341. package/dist/assets/messagebundle_et-yYsmBPXN.js +0 -1
  342. package/dist/assets/messagebundle_fi-DeMNrHC9.js +0 -1
  343. package/dist/assets/messagebundle_fr-qEm5Eykz.js +0 -1
  344. package/dist/assets/messagebundle_hr-NBdiYo-T.js +0 -1
  345. package/dist/assets/messagebundle_hu-CBV3ISbF.js +0 -1
  346. package/dist/assets/messagebundle_it-BML2SC0W.js +0 -1
  347. package/dist/assets/messagebundle_ja-zyFfZHcj.js +0 -1
  348. package/dist/assets/messagebundle_ko-BCPaSqNp.js +0 -1
  349. package/dist/assets/messagebundle_lt-DB4b6FVx.js +0 -1
  350. package/dist/assets/messagebundle_lv-tAOia5tU.js +0 -1
  351. package/dist/assets/messagebundle_nl-BKUpVV-D.js +0 -1
  352. package/dist/assets/messagebundle_no-BZQfeWxT.js +0 -1
  353. package/dist/assets/messagebundle_pl-CsXeN1y6.js +0 -1
  354. package/dist/assets/messagebundle_pt-D9rap3lj.js +0 -1
  355. package/dist/assets/messagebundle_pt_PT-CQ5YAsmx.js +0 -1
  356. package/dist/assets/messagebundle_ro-BTNJ9YdP.js +0 -1
  357. package/dist/assets/messagebundle_ru-BTDmH8CB.js +0 -1
  358. package/dist/assets/messagebundle_sk-Lb4jvtpc.js +0 -1
  359. package/dist/assets/messagebundle_sl-BZi2bKSy.js +0 -1
  360. package/dist/assets/messagebundle_sr-B9TYgxO1.js +0 -1
  361. package/dist/assets/messagebundle_sv-DWlY9RTQ.js +0 -1
  362. package/dist/assets/messagebundle_tr-DOeCmUdx.js +0 -1
  363. package/dist/assets/messagebundle_uk-CCv57GhV.js +0 -1
  364. package/dist/assets/messagebundle_zh_CN-CHwH3F3-.js +0 -1
  365. package/dist/assets/messagebundle_zh_TW-FO0BCkub.js +0 -1
  366. package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.d.ts +0 -3
  367. package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js +0 -13
  368. package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js.map +0 -1
  369. package/dist/generated/templates/MastheadItemTemplate.lit.d.ts +0 -3
  370. package/dist/generated/templates/MastheadItemTemplate.lit.js +0 -43
  371. package/dist/generated/templates/MastheadItemTemplate.lit.js.map +0 -1
  372. package/dist/generated/templates/MastheadMenuItemTemplate.lit.d.ts +0 -3
  373. package/dist/generated/templates/MastheadMenuItemTemplate.lit.js +0 -21
  374. package/dist/generated/templates/MastheadMenuItemTemplate.lit.js.map +0 -1
  375. package/dist/generated/templates/MastheadMenuTemplate.lit.d.ts +0 -3
  376. package/dist/generated/templates/MastheadMenuTemplate.lit.js +0 -25
  377. package/dist/generated/templates/MastheadMenuTemplate.lit.js.map +0 -1
  378. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.d.ts +0 -3
  379. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js +0 -37
  380. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js.map +0 -1
  381. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.d.ts +0 -3
  382. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js +0 -18
  383. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js.map +0 -1
  384. package/dist/generated/templates/MastheadShellTemplate.lit.d.ts +0 -3
  385. package/dist/generated/templates/MastheadShellTemplate.lit.js +0 -28
  386. package/dist/generated/templates/MastheadShellTemplate.lit.js.map +0 -1
  387. package/dist/generated/templates/TabHeaderTemplate.lit.d.ts +0 -3
  388. package/dist/generated/templates/TabHeaderTemplate.lit.js +0 -52
  389. package/dist/generated/templates/TabHeaderTemplate.lit.js.map +0 -1
  390. package/dist/generated/templates/TabInOverflowTemplate.lit.d.ts +0 -3
  391. package/dist/generated/templates/TabInOverflowTemplate.lit.js +0 -15
  392. package/dist/generated/templates/TabInOverflowTemplate.lit.js.map +0 -1
  393. package/dist/generated/templates/TabNavigationPopoverTemplate.lit.d.ts +0 -3
  394. package/dist/generated/templates/TabNavigationPopoverTemplate.lit.js +0 -8
  395. package/dist/generated/templates/TabNavigationPopoverTemplate.lit.js.map +0 -1
  396. package/dist/generated/templates/TabNavigationTemplate.lit.d.ts +0 -3
  397. package/dist/generated/templates/TabNavigationTemplate.lit.js +0 -16
  398. package/dist/generated/templates/TabNavigationTemplate.lit.js.map +0 -1
  399. package/dist/generated/templates/TabTemplate.lit.d.ts +0 -3
  400. package/dist/generated/templates/TabTemplate.lit.js +0 -7
  401. package/dist/generated/templates/TabTemplate.lit.js.map +0 -1
  402. package/src/MastheadCountrySelector.hbs +0 -76
  403. package/src/MastheadItem.hbs +0 -136
  404. package/src/MastheadMenu.hbs +0 -131
  405. package/src/MastheadMenuItem.hbs +0 -102
  406. package/src/MastheadMobileMenu.hbs +0 -253
  407. package/src/MastheadProfileMenu.hbs +0 -121
  408. package/src/MastheadShell.hbs +0 -223
  409. package/src/Tab.hbs +0 -1
  410. package/src/TabHeader.hbs +0 -141
  411. package/src/TabInOverflow.hbs +0 -59
  412. package/src/TabNavigation.hbs +0 -86
  413. package/src/TabNavigationPopover.hbs +0 -18
  414. package/src/generated/templates/MastheadCountrySelectorTemplate.lit.ts +0 -17
  415. package/src/generated/templates/MastheadItemTemplate.lit.ts +0 -47
  416. package/src/generated/templates/MastheadMenuItemTemplate.lit.ts +0 -25
  417. package/src/generated/templates/MastheadMenuTemplate.lit.ts +0 -29
  418. package/src/generated/templates/MastheadMobileMenuTemplate.lit.ts +0 -41
  419. package/src/generated/templates/MastheadProfileMenuTemplate.lit.ts +0 -22
  420. package/src/generated/templates/MastheadShellTemplate.lit.ts +0 -32
  421. package/src/generated/templates/TabHeaderTemplate.lit.ts +0 -56
  422. package/src/generated/templates/TabInOverflowTemplate.lit.ts +0 -19
  423. package/src/generated/templates/TabNavigationPopoverTemplate.lit.ts +0 -12
  424. package/src/generated/templates/TabNavigationTemplate.lit.ts +0 -20
  425. package/src/generated/templates/TabTemplate.lit.ts +0 -11
@@ -0,0 +1,153 @@
1
+ import type UDExTab from "./Tab.js";
2
+ import type { ITab } from "./Tab.js";
3
+ import Icon from "@ui5/webcomponents/dist/Icon.js";
4
+ import UDExBadge from "./Badge.js";
5
+ import { UDExNumberBadgeDesign, UDExSizeBadgeDesign, UDExTypeBadgeDesign } from "./types/BadgeDesign.js";
6
+
7
+ export default function TabHeaderTemplate(this: UDExTab) {
8
+ const tab = this as unknown as ITab;
9
+
10
+ if (this.hasBodyTextOrLink) {
11
+ return (
12
+ <div
13
+ class="udex-tab-navigation__tab-wrapper"
14
+ role="presentation"
15
+ style={this.widthStyle || undefined}>
16
+ {this.hasNotHref ? (
17
+ <button
18
+ id={this._id}
19
+ type="button"
20
+ role="tab"
21
+ class={`udex-tab-navigation__button-tab ${this.selectedClass} ${this.classWithIconWithoutBackground} ${this.buttonClassWithIcon} ${this.processTabClass}`}
22
+ tabindex={Number(this._tabIndex)}
23
+ aria-posinset={tab._posinset}
24
+ aria-setsize={tab._setsize}
25
+ aria-controls={tab._contentId}
26
+ aria-selected={this.effectiveSelected}
27
+ aria-disabled={this.ariaDisabled ? "true" : undefined}>
28
+ {tabContent.call(this)}
29
+ {this.ariaDescribedByBodyText && (
30
+ <span class="visually-hidden">{this.bodyText}</span>
31
+ )}
32
+ </button>
33
+ ) : (
34
+ <a
35
+ id={this._id}
36
+ role="tab"
37
+ class={`udex-tab-navigation__button-tab ${this.selectedClass} ${this.classWithIconWithoutBackground} ${this.buttonClassWithIcon} ${this.processTabClass}`}
38
+ href={this.href}
39
+ target={this.target}
40
+ tabindex={Number(this.linkTabIndex)}
41
+ aria-posinset={tab._posinset}
42
+ aria-setsize={tab._setsize}
43
+ aria-disabled={this.ariaDisabled ? "true" : undefined}>
44
+ {tabContent.call(this)}
45
+ {this.ariaDescribedByBodyText && (
46
+ <span class="visually-hidden">{this.bodyText}</span>
47
+ )}
48
+ </a>
49
+ )}
50
+ {this.hasBodyText && (
51
+ <p class="udex-tab-navigation__button-body-text">{this.bodyText}</p>
52
+ )}
53
+ {this.hasLinkSlot && (
54
+ <div class="udex-tab-navigation__button-links" {...({ innerHTML: this.linkSlotHtml } as object)}></div>
55
+ )}
56
+ </div>
57
+ );
58
+ }
59
+
60
+ return this.hasNotHref ? (
61
+ <button
62
+ id={this._id}
63
+ type="button"
64
+ role="tab"
65
+ class={`udex-tab-navigation__button-tab ${this.selectedClass} ${this.classWithIconWithoutBackground} ${this.buttonClassWithIcon} ${this.processTabClass}`}
66
+ tabindex={Number(this._tabIndex)}
67
+ aria-describedby={`udex-tab-navigation__${this._id}__accessible-name`}
68
+ aria-posinset={tab._posinset}
69
+ aria-setsize={tab._setsize}
70
+ aria-controls={tab._contentId}
71
+ aria-selected={this.effectiveSelected}
72
+ aria-disabled={this.ariaDisabled ? "true" : undefined}
73
+ style={this.widthStyle || undefined}>
74
+ {tabContent.call(this)}
75
+ </button>
76
+ ) : (
77
+ <a
78
+ id={this._id}
79
+ role="tab"
80
+ class={`udex-tab-navigation__button-tab ${this.selectedClass} ${this.classWithIconWithoutBackground} ${this.buttonClassWithIcon} ${this.processTabClass}`}
81
+ tabindex={Number(this.linkTabIndex)}
82
+ aria-posinset={tab._posinset}
83
+ aria-setsize={tab._setsize}
84
+ href={this.href}
85
+ target={this.target}
86
+ aria-disabled={this.ariaDisabled ? "true" : undefined}
87
+ style={this.widthStyle || undefined}>
88
+ {tabContent.call(this)}
89
+ </a>
90
+ );
91
+ }
92
+
93
+ function tabContent(this: UDExTab) {
94
+ return (
95
+ <>
96
+ {this.hasIcon && (
97
+ <span
98
+ class="udex-tab-navigation__button-icon-outer"
99
+ role="presentation"
100
+ aria-hidden="true">
101
+ <Icon
102
+ class="udex-tab-navigation__button-icon"
103
+ name={this.icon}>
104
+ </Icon>
105
+ {this.showAttentionBadge && (
106
+ <span class="udex-tab-navigation__button-badge"></span>
107
+ )}
108
+ </span>
109
+ )}
110
+ {this._isProcessTab ? (
111
+ <span class="udex-tab-navigation__button-text-block">
112
+ <span class="udex-tab-navigation__button-item-count">{this.effectiveItemCountText}</span>
113
+ <p class={`udex-tab-navigation__button-text ${this.classWithIcon}`}>
114
+ {this.text}
115
+ {this.numberBadge && (
116
+ <UDExBadge
117
+ class="udex-tab-navigation__badge"
118
+ type={UDExTypeBadgeDesign.Number}
119
+ number-design={UDExNumberBadgeDesign.Blue}
120
+ size={UDExSizeBadgeDesign.Medium}>
121
+ {this.numberBadge}
122
+ </UDExBadge>
123
+ )}
124
+ {this.hasNotIcon && (
125
+ <span class="udex-tab-navigation__button-badge"></span>
126
+ )}
127
+ </p>
128
+ </span>
129
+ ) : (
130
+ <p class={`udex-tab-navigation__button-text ${this.classWithIcon}`}>
131
+ {this.text}
132
+ {this.numberBadge && (
133
+ <UDExBadge
134
+ class="udex-tab-navigation__badge"
135
+ type={UDExTypeBadgeDesign.Number}
136
+ number-design={UDExNumberBadgeDesign.Blue}
137
+ size={UDExSizeBadgeDesign.Medium}>
138
+ {this.numberBadge}
139
+ </UDExBadge>
140
+ )}
141
+ {this.hasNotIcon && (
142
+ <span class="udex-tab-navigation__button-badge"></span>
143
+ )}
144
+ </p>
145
+ )}
146
+ <span
147
+ class="visually-hidden"
148
+ id={`udex-tab-navigation__${this._id}__accessible-name`}>
149
+ {this.accessibleNameText}
150
+ </span>
151
+ </>
152
+ );
153
+ }
@@ -0,0 +1,68 @@
1
+ import type UDExTab from "./Tab.js";
2
+ import type { ITab } from "./Tab.js";
3
+ import Icon from "@ui5/webcomponents/dist/Icon.js";
4
+
5
+ export default function TabInOverflowTemplate(this: UDExTab) {
6
+ const tab = this as unknown as ITab;
7
+
8
+ return this.hasNotHref ? (
9
+ <button
10
+ id={this._id}
11
+ class="udex-tab-overflow__button"
12
+ role="tab"
13
+ aria-selected={this.effectiveSelected}
14
+ aria-disabled={this.ariaDisabled ? "true" : undefined}
15
+ disabled={!!this.ariaDisabled}
16
+ tabindex={Number(tab._tabIndex)}>
17
+ {this.hasIcon && (
18
+ <span
19
+ class="udex-tab-overflow__button-icon"
20
+ role="presentation"
21
+ aria-hidden="true">
22
+ <Icon name={this.icon}></Icon>
23
+ {this.showAttentionBadge && (
24
+ <span class="udex-tab-overflow__button-badge"></span>
25
+ )}
26
+ </span>
27
+ )}
28
+ {this.text}
29
+ {this.hasNotIcon && (
30
+ <span
31
+ class="udex-tab-overflow__button-badge"
32
+ role="presentation"
33
+ aria-hidden="true">
34
+ </span>
35
+ )}
36
+ </button>
37
+ ) : (
38
+ <a
39
+ id={this._id}
40
+ href={this.ariaDisabled ? undefined : this.href}
41
+ target={this.target}
42
+ class="udex-tab-overflow__button"
43
+ role="tab"
44
+ aria-selected={this.effectiveSelected}
45
+ aria-disabled={this.ariaDisabled ? "true" : undefined}
46
+ tabindex={Number(tab._tabIndex)}>
47
+ {this.hasIcon && (
48
+ <span
49
+ class="udex-tab-overflow__button-icon"
50
+ role="presentation"
51
+ aria-hidden="true">
52
+ <Icon name={this.icon}></Icon>
53
+ {this.showAttentionBadge && (
54
+ <span class="udex-tab-overflow__button-badge"></span>
55
+ )}
56
+ </span>
57
+ )}
58
+ {this.text}
59
+ {this.hasNotIcon && (
60
+ <span
61
+ class="udex-tab-overflow__button-badge"
62
+ role="presentation"
63
+ aria-hidden="true">
64
+ </span>
65
+ )}
66
+ </a>
67
+ );
68
+ }
@@ -5,10 +5,9 @@ import type { StyleData } from "@ui5/webcomponents-base/dist/types.js";
5
5
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
6
6
  import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
7
7
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
8
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
8
+ import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
9
9
  import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
10
10
  import Popover from "@ui5/webcomponents/dist/Popover.js";
11
- import executeTemplate from "@ui5/webcomponents-base/dist/renderer/executeTemplate.js";
12
11
  import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
13
12
  import {
14
13
  isUp, isDown, isRight, isLeft, isEnter, isSpace, isEscape, isHome, isEnd, isTabNext, isTabPrevious,
@@ -25,15 +24,15 @@ import "@ui5/webcomponents-icons/dist/slim-arrow-right.js";
25
24
  import "@ui5/webcomponents-icons/dist/play.js";
26
25
  import "@ui5/webcomponents-icons/dist/pause.js";
27
26
  import UDExButton from "./Button.js";
27
+ import UDExButtonSize from "./types/ButtonSize.js";
28
+ import translate from "./utils/translate.js";
28
29
 
29
30
  // Templates
30
- import TabNavigationTemplate from "./generated/templates/TabNavigationTemplate.lit.js";
31
- import TabNavigationPopoverTemplate from "./generated/templates/TabNavigationPopoverTemplate.lit.js";
31
+ import TabNavigationTemplate from "./TabNavigationTemplate.js";
32
32
 
33
33
  // Styles
34
34
  import TabNavigationCss from "./generated/themes/TabNavigation.css.js";
35
35
  import TabInOverflowCss from "./generated/themes/TabInOverflow.css.js";
36
- import translate from "./utils/translate.js";
37
36
 
38
37
  const staticAreaTabStyles: Array<StyleData> = [];
39
38
 
@@ -91,7 +90,7 @@ type UDExTabContainerTabSelectEventDetail = {
91
90
  */
92
91
  @customElement({
93
92
  tag: "udex-tab-navigation",
94
- renderer: litRender,
93
+ renderer: jsxRenderer,
95
94
  styles: [TabNavigationCss, TabInOverflowCss],
96
95
  template: TabNavigationTemplate,
97
96
  dependencies: [Popover, Icon, UDExButton],
@@ -122,10 +121,10 @@ class UDExTabNavigation extends UI5Element {
122
121
  * Defines the size of the "More" button.
123
122
  *
124
123
  * @public
125
- * @default "Small"
124
+ * @default "Medium"
126
125
  */
127
126
  @property()
128
- sizeMoreButton: `${UDExSizeMoreButton}` = "Small";
127
+ sizeMoreButton: `${UDExButtonSize}` = UDExButtonSize.Medium;
129
128
 
130
129
  /**
131
130
  * Defines the mode of the component.
@@ -279,6 +278,7 @@ class UDExTabNavigation extends UI5Element {
279
278
  _maxTitleLength: number = 25;
280
279
  _maxTitleLengthInSecondLines: number = this._maxTitleLength * 2;
281
280
  _autoPlayTimer?: number;
281
+ _focusSelectedTabAfterRender: boolean = false;
282
282
 
283
283
  constructor() {
284
284
  super();
@@ -296,6 +296,11 @@ class UDExTabNavigation extends UI5Element {
296
296
  }
297
297
  this.initOutsideClick();
298
298
  this.applyTabWidthToVerticalTabs();
299
+
300
+ if (this._focusSelectedTabAfterRender) {
301
+ this._focusSelectedTabAfterRender = false;
302
+ this._selectedTab?.getTabInHeaderDomRef()?.focus();
303
+ }
299
304
  }
300
305
 
301
306
  onEnterDOM(): void {
@@ -666,10 +671,6 @@ class UDExTabNavigation extends UI5Element {
666
671
  .filter(tab => !tab.disabled)
667
672
  .map(tab => tab.getTabInHeaderDomRef()!)
668
673
  .filter(tab => !tab.hasAttribute("hidden"));
669
-
670
- if (!this.getMoreButton().hasAttribute("hidden")) {
671
- this._visibleTabs.push(this.getMoreButton());
672
- }
673
674
  }
674
675
 
675
676
  applyTabIndex() {
@@ -688,15 +689,32 @@ class UDExTabNavigation extends UI5Element {
688
689
  }
689
690
 
690
691
  handleOverflowItemClick(e: Event) {
691
- if ((e.target as HTMLElement).localName === "button") {
692
- const targetId = (e.target as HTMLElement).id;
693
- const [targetTab] = this.items.filter(item => item.__id === targetId);
694
- if (!targetTab?.disabled) {
695
- e.preventDefault();
696
- this.onItemSelect(targetId);
697
- }
692
+ const target = e.target as HTMLElement;
693
+ const { localName } = target;
694
+
695
+ if (localName !== "button" && localName !== "a") {
696
+ this.handleClosePopover();
697
+ return;
698
698
  }
699
+
700
+ const targetId = target.id;
701
+ const [targetTab] = this.items.filter(item => item.__id === targetId);
702
+
703
+ if (targetTab?.disabled) {
704
+ e.preventDefault();
705
+ e.stopPropagation();
706
+ return;
707
+ }
708
+
709
+ if (localName === "button") {
710
+ e.preventDefault();
711
+ this.onItemSelect(targetId);
712
+ }
713
+
699
714
  this.handleClosePopover();
715
+ if (localName === "button") {
716
+ this._focusSelectedTabAfterRender = true;
717
+ }
700
718
  }
701
719
 
702
720
  onItemSelect(selectedId: string) {
@@ -856,7 +874,6 @@ class UDExTabNavigation extends UI5Element {
856
874
  }
857
875
 
858
876
  handleFocusMoreButton(e: KeyboardEvent) {
859
- this.handleDownMoreButton(e);
860
877
  this.handleHomeKeyMoreButton(e);
861
878
  this.handleEnterKeyMoreButton(e);
862
879
  }
@@ -878,20 +895,12 @@ class UDExTabNavigation extends UI5Element {
878
895
  }
879
896
  }
880
897
 
881
- handleDownMoreButton(e: KeyboardEvent) {
882
- if (isDown(e) || isEnter(e)) {
883
- this._popover = this.getResponsePopover();
884
- this.handleOpenPopover();
885
- this.updateOverflowItems();
886
- }
887
- }
888
-
889
898
  onFocusFirstItemPopover() {
890
899
  if (this._popover?.open) {
891
900
  const popoverItems = this.getItemsFromPopover();
892
- const firstPopoverItem = popoverItems[0];
893
- firstPopoverItem.setAttribute("tabindex", "0");
894
- firstPopoverItem.focus();
901
+ const firstActiveItem = popoverItems.find(item => !this.isPopoverItemDisabled(item)) ?? popoverItems[0];
902
+ firstActiveItem.setAttribute("tabindex", "0");
903
+ firstActiveItem.focus();
895
904
  }
896
905
  }
897
906
 
@@ -921,8 +930,7 @@ class UDExTabNavigation extends UI5Element {
921
930
  onPreviousItemInPopover(target: HTMLElement) {
922
931
  const popoverItems = this.getItemsFromPopover();
923
932
  const currentSelectedTabIndex = this.getPopoverTabIndexById(popoverItems, target.id);
924
- const previousSelectIndex = currentSelectedTabIndex - 1 < 0 ? popoverItems.length - 1 : currentSelectedTabIndex - 1;
925
- const prevItem = popoverItems[previousSelectIndex];
933
+ const prevItem = this.findNextEnabledPopoverItem(popoverItems, currentSelectedTabIndex, -1);
926
934
 
927
935
  this.resetTabIndexItem(popoverItems[currentSelectedTabIndex]);
928
936
  prevItem.setAttribute("tabIndex", "0");
@@ -932,14 +940,29 @@ class UDExTabNavigation extends UI5Element {
932
940
  onNextItemInPopover(target: HTMLElement) {
933
941
  const popoverItems = this.getItemsFromPopover();
934
942
  const currentSelectedTabIndex = this.getPopoverTabIndexById(popoverItems, target.id);
935
- const nextSelectIndex = currentSelectedTabIndex + 1 > popoverItems.length - 1 ? 0 : currentSelectedTabIndex + 1;
936
- const nextItem = popoverItems[nextSelectIndex];
943
+ const nextItem = this.findNextEnabledPopoverItem(popoverItems, currentSelectedTabIndex, 1);
937
944
 
938
945
  this.resetTabIndexItem(popoverItems[currentSelectedTabIndex]);
939
946
  nextItem.setAttribute("tabIndex", "0");
940
947
  nextItem.focus();
941
948
  }
942
949
 
950
+ private isPopoverItemDisabled(item: HTMLElement): boolean {
951
+ return item.getAttribute("aria-disabled") === "true";
952
+ }
953
+
954
+ private findNextEnabledPopoverItem(items: HTMLElement[], currentIndex: number, direction: 1 | -1): HTMLElement {
955
+ const len = items.length;
956
+ let index = (currentIndex + direction + len) % len;
957
+ while (index !== currentIndex) {
958
+ if (!this.isPopoverItemDisabled(items[index])) {
959
+ return items[index];
960
+ }
961
+ index = (index + direction + len) % len;
962
+ }
963
+ return items[currentIndex];
964
+ }
965
+
943
966
  resetTabIndexItem(item: HTMLElement): void {
944
967
  item.setAttribute("tabIndex", "-1");
945
968
  }
@@ -968,6 +991,7 @@ class UDExTabNavigation extends UI5Element {
968
991
  if (!targetTab?.disabled) {
969
992
  this.onItemSelect(targetId);
970
993
  this.handleClosePopover();
994
+ this._focusSelectedTabAfterRender = true;
971
995
  }
972
996
  }
973
997
  }
@@ -976,7 +1000,7 @@ class UDExTabNavigation extends UI5Element {
976
1000
  if (isEscape(e)) {
977
1001
  e.preventDefault();
978
1002
  this.handleClosePopover();
979
- this._visibleTabs![this._visibleTabs!.length - 1].focus();
1003
+ this.getMoreButton().focus();
980
1004
  }
981
1005
  }
982
1006
 
@@ -984,7 +1008,8 @@ class UDExTabNavigation extends UI5Element {
984
1008
  if (isHome(e)) {
985
1009
  e.preventDefault();
986
1010
  const popoverItems = this.getItemsFromPopover();
987
- popoverItems[0].focus();
1011
+ const firstActiveItem = popoverItems.find(item => !this.isPopoverItemDisabled(item)) ?? popoverItems[0];
1012
+ firstActiveItem.focus();
988
1013
  }
989
1014
  }
990
1015
 
@@ -993,7 +1018,8 @@ class UDExTabNavigation extends UI5Element {
993
1018
  e.preventDefault();
994
1019
  e.stopPropagation();
995
1020
  const popoverItems = this.getItemsFromPopover();
996
- popoverItems[popoverItems.length - 1].focus();
1021
+ const lastActiveItem = [...popoverItems].reverse().find(item => !this.isPopoverItemDisabled(item)) ?? popoverItems[popoverItems.length - 1];
1022
+ lastActiveItem.focus();
997
1023
  }
998
1024
  }
999
1025
 
@@ -1025,14 +1051,6 @@ class UDExTabNavigation extends UI5Element {
1025
1051
  staticAreaTabStyles.push(styles);
1026
1052
  }
1027
1053
 
1028
- static get tabNavigationPopoverTemplate() {
1029
- return TabNavigationPopoverTemplate;
1030
- }
1031
-
1032
- get tabNavigationPopover() {
1033
- return executeTemplate(UDExTabNavigation.tabNavigationPopoverTemplate, this);
1034
- }
1035
-
1036
1054
  applyTabWidthToVerticalTabs(): void {
1037
1055
  if (this.isVertical && this.tabWidth && this.tabWidth !== "auto") {
1038
1056
  this.style.setProperty("--udex-tab-header-width", this.tabWidth);
@@ -0,0 +1,27 @@
1
+ import type UDExTabNavigation from "./TabNavigation.js";
2
+ import type UDExTab from "./Tab.js";
3
+ import Popover from "@ui5/webcomponents/dist/Popover.js";
4
+ import UI5PopoverHAlign from "@ui5/webcomponents/dist/types/PopoverHorizontalAlign.js";
5
+ import UI5PopoverPlacement from "@ui5/webcomponents/dist/types/PopoverPlacement.js";
6
+ import TabInOverflowTemplate from "./TabInOverflowTemplate.js";
7
+
8
+ export default function TabNavigationPopoverTemplate(this: UDExTabNavigation) {
9
+ return (
10
+ <Popover
11
+ id={`${this._id}-overflow-popover`}
12
+ aria-orientation="vertical"
13
+ horizontal-align={UI5PopoverHAlign.End}
14
+ placement={UI5PopoverPlacement.Bottom}
15
+ onui5-open={this.onFocusFirstItemPopover}
16
+ hide-arrow
17
+ {...({ _hideHeader: true } as object)}>
18
+ <div
19
+ class="tab-navigation-popover"
20
+ onClick={this.handleOverflowItemClick}
21
+ onKeyDown={this.handleFocusPopover}
22
+ role="tablist">
23
+ {this._overflowItems.map(item => TabInOverflowTemplate.call(item as unknown as UDExTab))}
24
+ </div>
25
+ </Popover>
26
+ );
27
+ }
@@ -0,0 +1,98 @@
1
+ import type UDExTabNavigation from "./TabNavigation.js";
2
+ import type UDExTab from "./Tab.js";
3
+ import UDExButton from "./Button.js";
4
+ import UDExButtonSize from "./types/ButtonSize.js";
5
+ import UDExButtonDesign from "./types/ButtonDesign.js";
6
+ import TabNavigationPopoverTemplate from "./TabNavigationPopoverTemplate.js";
7
+ import TabHeaderTemplate from "./TabHeaderTemplate.js";
8
+
9
+ export default function TabNavigationTemplate(this: UDExTabNavigation) {
10
+ return (
11
+ <div className="udex-tab-navigation__root">
12
+ <div
13
+ id={`${this._id}-header`}
14
+ className="udex-tab-navigation__header"
15
+ part="tab-navigation-header">
16
+ {this.showPlayButton && (
17
+ <UDExButton
18
+ class="udex-tab-navigation__play-button"
19
+ design={UDExButtonDesign.Tertiary}
20
+ size={UDExButtonSize.Large}
21
+ icon={this.playBtnIcon}
22
+ tooltip={this.playBtnTooltipText}
23
+ onClick={this.onPlayButtonClick}>
24
+ </UDExButton>
25
+ )}
26
+ <div
27
+ id={`${this._id}-header-tabs`}
28
+ className="udex-tab-navigation__header-tabs"
29
+ role="tablist"
30
+ aria-labelledby={`tablist-${this._id}`}
31
+ aria-orientation={this.ariaOrientationValue as "horizontal" | "vertical"}
32
+ part="tab-navigation-header-tabs"
33
+ onClick={this.onTabClick}
34
+ onKeyDown={this.handleKeyDown}>
35
+ {this.items.map(item => (
36
+ <>
37
+ {TabHeaderTemplate.call(item as unknown as UDExTab)}
38
+ {(item as unknown as UDExTab).isMobileVertical && item.selected && (
39
+ <div
40
+ className="udex-tab-navigation__content"
41
+ part="tab-navigation-content">
42
+ <div
43
+ className="udex-tab-navigation__content-item"
44
+ id={`${item._contentId}-mobile`}
45
+ role="tabpanel"
46
+ aria-labelledby={item._id}>
47
+ <slot name={item._slotName}></slot>
48
+ </div>
49
+ </div>
50
+ )}
51
+ </>
52
+ ))}
53
+ </div>
54
+ <UDExButton
55
+ class="udex-tab-navigation__button-more"
56
+ end-icon="navigation-down-arrow"
57
+ aria-haspopup="menu"
58
+ design={UDExButtonDesign.Tertiary}
59
+ size={this.sizeMoreButton}
60
+ onClick={this.handleMoreButton}
61
+ onKeyDown={this.handleFocusMoreButton}
62
+ aria-expanded={this._isExpanded}
63
+ hidden>
64
+ {this.moreButtonText}
65
+ </UDExButton>
66
+ {!!this._overflowItems.length && TabNavigationPopoverTemplate.call(this)}
67
+ {this.showFooterSlot && (
68
+ <div className="udex-tab-navigation__footer" part="tab-navigation-footer">
69
+ <slot name="footer"></slot>
70
+ </div>
71
+ )}
72
+ </div>
73
+ <div
74
+ className="udex-tab-navigation__content"
75
+ id={`udex-${this._id}-content`}
76
+ part="tab-navigation-content">
77
+ {this.items.map(item => (
78
+ item.selected ? (
79
+ <div
80
+ className="udex-tab-navigation__content-item"
81
+ id={item._contentId}
82
+ aria-hidden={item.isMobile}
83
+ role="tabpanel"
84
+ aria-labelledby={item._id}>
85
+ <slot name={item._slotName}></slot>
86
+ </div>
87
+ ) : (
88
+ <div
89
+ className="udex-tab-navigation__content-item"
90
+ id={item._contentId}>
91
+ <slot name={item._slotName}></slot>
92
+ </div>
93
+ )
94
+ ))}
95
+ </div>
96
+ </div>
97
+ );
98
+ }
@@ -0,0 +1,7 @@
1
+ import type UDExTab from "./Tab.js";
2
+
3
+ export default function TabTemplate(this: UDExTab) {
4
+ return (
5
+ <slot></slot>
6
+ );
7
+ }
package/src/Tag.ts CHANGED
@@ -289,6 +289,13 @@ class UDExTag extends UI5Element {
289
289
  this.focused = !this.focused;
290
290
  }
291
291
 
292
+ override getFocusDomRef(): HTMLElement | undefined {
293
+ if (this.nonSelectable) {
294
+ return this.getDomRef()?.querySelector<HTMLElement>("button") ?? undefined;
295
+ }
296
+ return super.getFocusDomRef();
297
+ }
298
+
292
299
  get tagClasses(): string {
293
300
  const hasIconClass = this.hasIcon ? "udex-tag--has-icon" : "";
294
301
  const readOnlyClass = this.readOnly ? "udex-tag--readonly" : "";
package/src/TagGroup.ts CHANGED
@@ -251,9 +251,11 @@ class UDExTagGroup extends UI5Element {
251
251
  const active = getActiveElement();
252
252
  const moreLink = this._tokenizer.moreLink;
253
253
  if (active === moreLink) {
254
- e.preventDefault();
255
254
  const focusDomRef = this._lastVisibleTag?.getFocusDomRef();
256
- focusDomRef?.focus();
255
+ if (focusDomRef) {
256
+ e.preventDefault();
257
+ focusDomRef.focus();
258
+ }
257
259
  }
258
260
  }
259
261
  }