@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,228 @@
1
+ import type UDExMastheadShell from "./MastheadShell.js";
2
+ import UDExMastheadItem from "./MastheadItem.js";
3
+ import UDExControlButton from "./ControlButton.js";
4
+ import UDExButtonSize from "./types/ButtonSize.js";
5
+ import declineIcon from "@ui5/webcomponents-icons/dist/decline.js";
6
+ import searchIcon from "@ui5/webcomponents-icons/dist/search.js";
7
+ import menuIcon from "@ui5/webcomponents-icons/dist/menu2.js";
8
+
9
+ export default function MastheadShellTemplate(this: UDExMastheadShell) {
10
+ return (
11
+ <header
12
+ className={this.mainClass}
13
+ onKeyDown={this.handleKeyDown}>
14
+ <div className="udex-masthead-shell__main-content">
15
+ <div className="udex-masthead-shell__landing-wrap">
16
+ {this.logoUrl && logo.call(this)}
17
+ {this.siteLabel && siteLabel.call(this)}
18
+ {this.coBrandImage && coBrand.call(this)}
19
+ </div>
20
+
21
+ {this.isMainMenuVisible && (
22
+ <nav
23
+ className="udex-masthead-shell__nav"
24
+ aria-label={this.mainNavigationAriaLabel}>
25
+ <ul
26
+ className="udex-masthead-shell__main-menu"
27
+ aria-label={this.mainNavigationAriaLabel}>
28
+ {this.menuItems.map(item => (
29
+ <li
30
+ key={item._id}
31
+ className="udex-masthead-shell__item"
32
+ onui5-item-click={this.setSelectedItem}>
33
+ <slot name={item._individualSlot}></slot>
34
+ </li>
35
+ ))}
36
+ </ul>
37
+ </nav>
38
+ )}
39
+ </div>
40
+
41
+ {this.isSearchVisible && (
42
+ <>
43
+ <div
44
+ className="udex-masthead-shell__search-container"
45
+ onui5-search-keydown={this.handleSearchKeyDown}>
46
+ <slot name="search"></slot>
47
+ </div>
48
+ {this._isSearchOpened && (
49
+ <div className="udex-masthead-shell__btn-holder">
50
+ <UDExControlButton
51
+ class="udex-masthead-shell__close-search-btn"
52
+ part="search-close-button"
53
+ size={UDExButtonSize.Small}
54
+ icon={declineIcon}
55
+ tooltip={this.closeButtonAccessibleName}
56
+ accessible-name={this.closeButtonAccessibleName}
57
+ onClick={this.handleCloseSearch as any}>
58
+ </UDExControlButton>
59
+ </div>
60
+ )}
61
+ </>
62
+ )}
63
+
64
+ <div className={this.rightMenuClass}>
65
+ {this.hasExploreSAP && (
66
+ <div
67
+ className="udex-masthead-shell__explore"
68
+ onui5-item-click={this.setSelectedItem}>
69
+ <slot name="exploreSAP"></slot>
70
+ </div>
71
+ )}
72
+ {this.hasSearch && (
73
+ <div className="udex-masthead-shell__search-icon udex-masthead-shell__item_icon">
74
+ <UDExMastheadItem
75
+ class="udex-masthead-shell__search-btn"
76
+ part="search-button"
77
+ icon={searchIcon}
78
+ onClick={this.handleSearchClick as any}
79
+ accessible-name={this.openSearchButtonAccessibleNameText}
80
+ icon-alt={this.openSearchButtonAccessibleNameText}>
81
+ </UDExMastheadItem>
82
+ </div>
83
+ )}
84
+ {this.hasJoule && (
85
+ <div
86
+ className="udex-masthead-shell__joule udex-masthead-shell__item_icon"
87
+ onui5-item-click={this.setSelectedItem}
88
+ onClick={this.handleJouleClick as any}>
89
+ <slot name="joule"></slot>
90
+ </div>
91
+ )}
92
+ {this.hasCart && (
93
+ <div
94
+ className="udex-masthead-shell__cart udex-masthead-shell__item_icon"
95
+ onui5-item-click={this.setSelectedItem}
96
+ onClick={this.handleCartClick as any}>
97
+ <slot name="cart"></slot>
98
+ </div>
99
+ )}
100
+ {this.hasSupport && (
101
+ <div
102
+ className="udex-masthead-shell__support udex-masthead-shell__item_icon"
103
+ onui5-item-click={this.setSelectedItem}
104
+ onClick={this.handleSupportClick as any}>
105
+ <slot name="support"></slot>
106
+ </div>
107
+ )}
108
+ {this.hasProfile && (
109
+ <div
110
+ className="udex-masthead-shell__profile udex-masthead-shell__item_icon"
111
+ onui5-item-click={this.setSelectedItem}
112
+ onclick-default={this.handleProfileClick}>
113
+ <slot name="profile"></slot>
114
+ </div>
115
+ )}
116
+ {this.hasCountrySelector && (
117
+ <div
118
+ className="udex-masthead-shell__country-selector udex-masthead-shell__item_icon"
119
+ onui5-item-click={this.setSelectedItem}
120
+ onClick={this.handleCountrySelectorClick as any}>
121
+ <slot name="countrySelector"></slot>
122
+ </div>
123
+ )}
124
+ {this.hasMobileMenuButtons && (
125
+ <>
126
+ <UDExMastheadItem
127
+ class="udex-masthead-shell__menu-btn"
128
+ accessible-role="button"
129
+ part="menu-open-btn"
130
+ accessible-name="menu"
131
+ icon={menuIcon}
132
+ onui5-item-click={this.handleOpenMobileMenu}
133
+ {...{ "_is-menu-open-btn": "" }}>
134
+ <slot slot="dropdown" name="mobileMenu"></slot>
135
+ </UDExMastheadItem>
136
+ <UDExMastheadItem
137
+ class="udex-masthead-shell__close-btn"
138
+ accessible-role="button"
139
+ part="menu-close-btn"
140
+ onKeyDown={this.handleEnterAndSpaceOnCloseBtn}
141
+ onui5-item-click={this.closeMobileMenu}
142
+ icon={declineIcon}
143
+ accessible-name={this.mobileCloseButtonAccessibleName}
144
+ hide-active-border
145
+ {...{ "_is-menu-close-btn": "" }}>
146
+ </UDExMastheadItem>
147
+ </>
148
+ )}
149
+ </div>
150
+ </header>
151
+ );
152
+ }
153
+
154
+ function logo(this: UDExMastheadShell) {
155
+ return this.homeUrl ? (
156
+ <a
157
+ className="udex-masthead-shell__logo udex-masthead-shell__logo--link"
158
+ target="_self"
159
+ role="link"
160
+ tabindex={0}
161
+ onClick={this.handleLogoClick as any}
162
+ href={this.homeUrl}
163
+ title={this.logoTitle}
164
+ aria-label={this.homepageAriaLabel}>
165
+ <img
166
+ className="udex-masthead-shell__logo-image"
167
+ src={this.logoUrl}
168
+ alt={this.logoAlt}
169
+ />
170
+ </a>
171
+ ) : (
172
+ <div className="udex-masthead-shell__logo">
173
+ <img
174
+ className="udex-masthead-shell__logo-image"
175
+ src={this.logoUrl}
176
+ alt={this.logoAlt}
177
+ />
178
+ </div>
179
+ );
180
+ }
181
+
182
+ function siteLabel(this: UDExMastheadShell) {
183
+ return this.siteLabelUrl ? (
184
+ <a
185
+ className="udex-masthead-shell__site-label udex-masthead-shell__site-label--link"
186
+ role="link"
187
+ target="_self"
188
+ onClick={this.handleSiteLabelClick as any}
189
+ href={this.siteLabelUrl}
190
+ tabindex={0}
191
+ title={this.siteLabelTitle}
192
+ aria-label={this.siteLabelAriaLabel}>
193
+ {this.siteLabel}
194
+ </a>
195
+ ) : (
196
+ <div className="udex-masthead-shell__site-label">{this.siteLabel}</div>
197
+ );
198
+ }
199
+
200
+ function coBrand(this: UDExMastheadShell) {
201
+ return this.coBrandUrl ? (
202
+ <div className="udex-masthead-shell__co-brand">
203
+ <a
204
+ className="udex-masthead-shell__co-brand-link"
205
+ target="_self"
206
+ role="link"
207
+ onClick={this.handleCoBrandClick as any}
208
+ href={this.coBrandUrl}
209
+ tabindex={0}
210
+ title={this.coBrandTitle}
211
+ aria-label={this.coBrandAriaLabel}>
212
+ <img
213
+ className="udex-masthead-shell__co-brand-image"
214
+ src={this.coBrandImage}
215
+ alt={this.coBrandAlt}
216
+ />
217
+ </a>
218
+ </div>
219
+ ) : (
220
+ <div className="udex-masthead-shell__co-brand">
221
+ <img
222
+ className="udex-masthead-shell__co-brand-image"
223
+ src={this.coBrandImage}
224
+ alt={this.coBrandAlt}
225
+ />
226
+ </div>
227
+ );
228
+ }
@@ -17,7 +17,9 @@ import type UDExListItem from "./ListItem.js";
17
17
  import type UDExFilterMenuItem from "./FilterMenuItem.js";
18
18
  import type UDExSelectBoxItem from "./SelectBoxItem.js";
19
19
  import { SHOW_SEARCH_AFTER_COUNT, UDExPopoverPart } from "./types/SearchableListBase.js";
20
- import { NO_MATCHES_FOUND, RESULT_RETURNED, STARS } from "./generated/i18n/i18n-defaults.js";
20
+ import {
21
+ NO_MATCHES_FOUND, RESULT_RETURNED, STARS,
22
+ } from "./generated/i18n/i18n-defaults.js";
21
23
  import translate from "./utils/translate.js";
22
24
 
23
25
  export type UDExItemFromList = UDExListItemBase | UDExListGroupHeaderBase | null | undefined;
@@ -351,6 +353,17 @@ class UDExSearchableListBase extends UI5Element {
351
353
  if (!originalItem) { return; }
352
354
  originalItem.collapsed = e.detail.collapsed;
353
355
  originalItem.setCollapsedItems?.();
356
+ // NOTE: no dynamic screen-reader announcement of the new expanded/collapsed state
357
+ // is emitted here. JAWS announces it natively — the list uses role="tree" (see
358
+ // List._hasCollapsibleGroups) so JAWS enters application mode and reads the focused
359
+ // header's aria-expanded on every arrow toggle. VoiceOver, however, refuses to
360
+ // re-announce aria-expanded on a treeitem whose children role="group" is a sibling
361
+ // rather than a DOM descendant (unavoidable across the shadow boundary; aria-owns
362
+ // can't bridge the nested shadow roots in multi-select). Every aria-live approach
363
+ // (a shadow-local span, UI5's top-level InvisibleMessage) is dropped by VoiceOver
364
+ // inside this teleported popover, and a same-element focus re-read is suppressed by
365
+ // VoiceOver. VoiceOver still reads the full state when focus first lands on the
366
+ // header. This is a documented VoiceOver-specific limitation.
354
367
  }
355
368
 
356
369
  onSelectAllHeaderPress(e:CustomEvent) {
@@ -847,9 +860,32 @@ class UDExSearchableListBase extends UI5Element {
847
860
  if (this.isTreeStructure) {
848
861
  return "tree";
849
862
  }
863
+ if (this.isPerGroupListbox) {
864
+ // Each group is its own role="listbox" (see ListGroupHeaderTemplate); the outer
865
+ // container must be transparent, otherwise the per-group listboxes would be nested
866
+ // inside a listbox (invalid, and JAWS would fall back to one flat count).
867
+ return "presentation";
868
+ }
850
869
  return this.defaultAccessibleRole;
851
870
  }
852
871
 
872
+ /**
873
+ * FilterMenu real-focus SingleSelect where EVERY top-level item is a group.
874
+ * Renders each group as its own role="listbox" so JAWS counts options natively
875
+ * per group ("1 of 4"): JAWS ignores role="group" boundaries and author
876
+ * aria-posinset within a single listbox, but counts reliably within a flat
877
+ * listbox. Not engaged for aria-activedescendant widgets (SelectBox), trees,
878
+ * MultiSelect/RadioGroup, or mixed grouped+ungrouped lists (ungrouped options
879
+ * would be orphaned once the outer listbox role is dropped).
880
+ */
881
+ get isPerGroupListbox(): boolean {
882
+ if (this.isTreeStructure || this._activeDescendantMode || !this.modeSingleSelect) {
883
+ return false;
884
+ }
885
+ const items = this.items;
886
+ return items.length > 0 && items.every(item => item.isGroup);
887
+ }
888
+
853
889
  get listItemRole(): string {
854
890
  if (this.isTreeStructure) {
855
891
  return "treeitem";
@@ -100,8 +100,26 @@ function renderGroupHeader(this: UDExSearchableListBase, processedItem: UDExProc
100
100
  const { item, groupItems } = processedItem;
101
101
  const header = item as UDExListGroupHeaderBase;
102
102
  const childAccessibleRole = this.isTreeStructure ? "treeitem" : undefined;
103
+ // Position among sibling group headers, for the explicit tree-position attributes below.
104
+ const treeGroups = this.isTreeStructure ? this._filteredItems.filter(p => p.isGroup) : [];
105
+ const groupPosInSet = treeGroups.indexOf(processedItem) + 1;
106
+ const groupSetSize = treeGroups.length;
107
+ // Explicit per-group tree position for the FilterMenu (real-focus) treeitems. Scoped to
108
+ // MultiSelect only: the SingleSelect tree is now conformantly nested (role="group" inside
109
+ // the parent treeitem) so JAWS/NVDA count children natively — explicit values there just
110
+ // confuse JAWS. MultiSelect still uses the malformed sibling structure until Phase 2, so it
111
+ // keeps the explicit override. Not applied in aria-activedescendant mode (SelectBox announces
112
+ // position via its own live region — see [[project_selectbox_aria_live_region]]).
113
+ const treePositionAttrs = (!this._activeDescendantMode && this.isTreeStructure && this.modeMultiSelect) ? {
114
+ "_aria-pos-in-set": groupPosInSet,
115
+ "_aria-set-size": groupSetSize,
116
+ } : {};
103
117
  // In aria-activedescendant mode (SelectBox), each group header host element
104
118
  // must carry role + ARIA state so screen readers can reach them via the pointer.
119
+ // In real-focus mode (FilterMenu) the host is always transparent (role="none"):
120
+ // the shadow DOM's div.udex-list__group provides the single role="group" with
121
+ // aria-labelledby="group-heading" in non-tree mode; in tree mode the treeitem is
122
+ // on the focusable div inside the shadow.
105
123
  const hostAriaAttrs = this._activeDescendantMode ? {
106
124
  role: (this.isTreeStructure ? "treeitem" : "option") as AriaRole,
107
125
  "aria-label": cleanLabel(item.label ?? ""),
@@ -110,13 +128,15 @@ function renderGroupHeader(this: UDExSearchableListBase, processedItem: UDExProc
110
128
  "aria-disabled": item.disabled ? "true" as string : undefined,
111
129
  "aria-expanded": header.collapsible ? (header.expanded ? "true" as string : "false" as string) : undefined,
112
130
  "_use-host-aria-role": true,
113
- } : { role: (this.isTreeStructure ? "none" : "group") as AriaRole };
131
+ } : { role: "none" as AriaRole };
114
132
  return (
115
133
  <UDExListGroupHeader
116
134
  key={index}
117
135
  id={item._id}
118
136
  {...hostAriaAttrs}
137
+ {...treePositionAttrs}
119
138
  _tree-mode={this.isTreeStructure || undefined}
139
+ _group-as-listbox={this.isPerGroupListbox || undefined}
120
140
  {...(index === 0 ? { "_no-border": "" } : {})}
121
141
  _additional-class-name="udex-searchable-list__header"
122
142
  class={this.groupClassName}
@@ -135,7 +155,7 @@ function renderGroupHeader(this: UDExSearchableListBase, processedItem: UDExProc
135
155
  onAccordionIconClick={this.handleAccordionIconClick}
136
156
  indeterminate={header.indeterminate}>
137
157
  {groupItems.map((child, i) =>
138
- renderListItem(child as UDExListItem, i, "none", childAccessibleRole, this.fireFirstIconClickEvent, this.fireSecondIconClickEvent, this._activeDescendantMode, this.isTreeStructure, this.modeMultiSelect)
158
+ renderListItem(child as UDExListItem, i, "none", childAccessibleRole, this.fireFirstIconClickEvent, this.fireSecondIconClickEvent, this._activeDescendantMode, this.isTreeStructure, this.modeMultiSelect, i + 1, groupItems.length)
139
159
  )}
140
160
  </UDExListGroupHeader>
141
161
  );
@@ -151,6 +171,8 @@ function renderListItem(
151
171
  activeDescendantMode?: boolean,
152
172
  isTreeStructure?: boolean,
153
173
  modeMultiSelect?: boolean,
174
+ posInSet?: number,
175
+ setSize?: number,
154
176
  ) {
155
177
  // In aria-activedescendant mode (SelectBox), role + ARIA state must be on the
156
178
  // host element so screen readers can reach them via the aria-activedescendant pointer.
@@ -167,6 +189,19 @@ function renderListItem(
167
189
  } : {
168
190
  ...(accessibleRole ? { "accessible-role": accessibleRole } : {}),
169
191
  };
192
+ // Explicit per-group position for FilterMenu real-focus items. Applied whenever
193
+ // posInSet/setSize are provided (i.e. items inside a group header), across all
194
+ // modes except aria-activedescendant (SelectBox uses its own live region):
195
+ // • Non-tree grouped listbox (SingleSelect non-collapsible): options get per-group
196
+ // counts since native shadow-DOM counting is unreliable for nested custom elements.
197
+ // • SingleSelect conformant-nested tree: explicit values match the native structural
198
+ // count, so JAWS trusts and re-announces on every arrow step (not just group entry).
199
+ // • MultiSelect sibling tree (Phase 2 pending): keeps the fix-20 override.
200
+ // Not applied in aria-activedescendant mode (SelectBox — see [[project_selectbox_aria_live_region]]).
201
+ const treePositionAttrs = (!activeDescendantMode && posInSet != null && setSize != null) ? {
202
+ "_aria-pos-in-set": posInSet,
203
+ "_aria-set-size": setSize,
204
+ } : {};
170
205
  return (
171
206
  <UDExListItem
172
207
  key={index}
@@ -198,6 +233,7 @@ function renderListItem(
198
233
  size={item.size}
199
234
  type={item.type}
200
235
  {...hostAriaAttrs}
236
+ {...treePositionAttrs}
201
237
  {...((item as any).innerHTML ? { dangerouslySetInnerHTML: { __html: (item as any).innerHTML } } : {})}>
202
238
  </UDExListItem>
203
239
  );
@@ -25,8 +25,9 @@ import translate from "./utils/translate.js";
25
25
  // Styles
26
26
  import SecondaryNavigationCss from "./generated/themes/SecondaryNavigation.css.js";
27
27
 
28
- const canvasContentFont: string = "16px / 17.6px '72 Brand Variable'";
28
+ const canvasContentFont: string = "14px '72 Brand Variable'";
29
29
  const rootClass = "udex-secondary-navigation__root";
30
+ const ITEM_ICON_WIDTH = 20;
30
31
 
31
32
  type UDExSecondaryNavigationClickEventDetail = {
32
33
  originalEvent: Event,
@@ -268,7 +269,10 @@ class UDExSecondaryNavigation extends UI5Element {
268
269
  }
269
270
 
270
271
  reflowItems(): void {
271
- const availableWidth = this.rootHolder.offsetWidth - (this.headingHolder?.offsetWidth || 0) - (this.optionalButtons?.offsetWidth || 0);
272
+ const headingWidth = this.headingHolder
273
+ ? this.headingHolder.offsetWidth + (parseFloat(getComputedStyle(this.headingHolder).marginInlineEnd) || 0)
274
+ : 0;
275
+ const availableWidth = this.rootHolder.offsetWidth - headingWidth - (this.optionalButtons?.offsetWidth || 0);
272
276
  const moreButtonWidth = this.getMoreButtonWidth();
273
277
  const itemsGap = 20;
274
278
  const widths = this.parsedItems.map(item => this.getItemWidth(item));
@@ -306,16 +310,27 @@ class UDExSecondaryNavigation extends UI5Element {
306
310
 
307
311
  getItemWidth(item: NavItem): number {
308
312
  const context = this.getCanvasContext();
309
- context.font = canvasContentFont;
313
+ context.font = this.getCanvasFont();
314
+ const iconWidth = item.items?.length ? ITEM_ICON_WIDTH : 0;
310
315
 
311
- return Math.ceil(context.measureText(item.title).width);
316
+ return Math.ceil(context.measureText(item.title).width) + iconWidth;
312
317
  }
313
318
 
314
319
  getMoreButtonWidth(): number {
315
320
  const context = this.getCanvasContext();
316
- context.font = canvasContentFont;
321
+ context.font = this.getCanvasFont();
317
322
 
318
- return Math.ceil(context.measureText(this.moreButtonText).width);
323
+ return Math.ceil(context.measureText(this.moreButtonText).width) + ITEM_ICON_WIDTH;
324
+ }
325
+
326
+ getCanvasFont(): string {
327
+ const navItem = this.domNavItems[0];
328
+ const btn = navItem?.shadowRoot?.querySelector<HTMLElement>(".udex-secondary-navigation__item");
329
+ if (btn) {
330
+ const cs = getComputedStyle(btn);
331
+ return `${cs.fontWeight} ${cs.fontSize} ${cs.fontFamily}`;
332
+ }
333
+ return canvasContentFont;
319
334
  }
320
335
 
321
336
  getCanvasContext(): CanvasRenderingContext2D {
package/src/SelectBase.ts CHANGED
@@ -14,7 +14,7 @@ import type UDExSearch from "./Search.js";
14
14
  import "@ui5/webcomponents-icons/dist/decline.js";
15
15
  import "@ui5/webcomponents-icons/dist/navigation-down-arrow.js";
16
16
  import {
17
- COUNTRY_SELECT, STARS, SELECTED, UNSELECTED, INDETERMINATE, DISABLED,
17
+ COUNTRY_SELECT, STARS, SELECTED, UNSELECTED, INDETERMINATE, DISABLED, EXPANDED, COLLAPSED,
18
18
  } from "./generated/i18n/i18n-defaults.js";
19
19
  import SearchableListBaseTemplate from "./SearchableListBaseTemplate.js";
20
20
  import CountrySelectorTemplate from "./CountrySelectorTemplate.js";
@@ -697,6 +697,12 @@ class UDExSelectBase extends UDExSearchableListBase {
697
697
  e.preventDefault();
698
698
  const activeItem = this._activeDescendantItem;
699
699
  if (activeItem.isGroup) {
700
+ // Group-header selection is "select all" — only meaningful in MultiSelect.
701
+ // In SingleSelect (and RadioGroup) a group header is not a selectable option,
702
+ // so Enter/Space must do nothing (collapse/expand stays on Left/Right + chevron).
703
+ if (!this.modeMultiSelect) {
704
+ return;
705
+ }
700
706
  // Group header: fire header-press (same event the click handler fires) so
701
707
  // handleHeaderPress → onHeaderPress → handleGroupHeaderSelection runs.
702
708
  activeItem.fireDecoratorEvent("header-press", { item: activeItem });
@@ -1138,8 +1144,7 @@ class UDExSelectBase extends UDExSearchableListBase {
1138
1144
  const parts: string[] = [];
1139
1145
 
1140
1146
  if (item.collapsible) {
1141
- // Use plain English — matches what AT announce for aria-expanded.
1142
- parts.push(item.expanded ? "expanded" : "collapsed");
1147
+ parts.push(translate(UDExSearchableListBase, item.expanded ? EXPANDED : COLLAPSED));
1143
1148
  }
1144
1149
 
1145
1150
  if (item.disabled) {
package/src/Tab.ts CHANGED
@@ -3,21 +3,18 @@ import type { DefaultSlot, Slot } from "@ui5/webcomponents-base/dist/UI5Element.
3
3
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
4
4
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
5
5
  import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
6
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
7
- import executeTemplate from "@ui5/webcomponents-base/dist/renderer/executeTemplate.js";
6
+ import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
8
7
  import TabNavigation from "./TabNavigation.js";
9
8
  import UDExBadge from "./Badge.js";
10
9
  import { UDExTarget } from "./types/common.js";
11
- import TabTemplate from "./generated/templates/TabTemplate.lit.js";
12
- import TabHeaderTemplate from "./generated/templates/TabHeaderTemplate.lit.js";
13
- import TabInOverflowTemplate from "./generated/templates/TabInOverflowTemplate.lit.js";
10
+ import TabTemplate from "./TabTemplate.js";
14
11
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
15
12
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
16
13
  import { ATTENTION_BADGE } from "./generated/i18n/i18n-defaults.js";
14
+ import translate from "./utils/translate.js";
17
15
 
18
16
  // Styles
19
17
  import TabInOverflowCss from "./generated/themes/TabInOverflow.css.js";
20
- import translate from "./utils/translate.js";
21
18
 
22
19
  export interface ITab extends UI5Element {
23
20
  getTabInHeaderDomRef: () => ITab | null;
@@ -40,7 +37,6 @@ export interface ITab extends UI5Element {
40
37
  hasNotHref: boolean;
41
38
  hasLinkSlot: boolean;
42
39
  selectedClass: string;
43
- tabNavigation: any;
44
40
  _individualSlot: string;
45
41
  _effectiveSlotName: string;
46
42
  _slotName: string;
@@ -79,7 +75,7 @@ export interface ITab extends UI5Element {
79
75
  */
80
76
  @customElement({
81
77
  tag: "udex-tab",
82
- renderer: litRender,
78
+ renderer: jsxRenderer,
83
79
  template: TabTemplate,
84
80
  dependencies: [UDExBadge],
85
81
  })
@@ -409,22 +405,6 @@ class UDExTab extends UI5Element implements ITab {
409
405
  }
410
406
  return "";
411
407
  }
412
-
413
- get tabNavigation() {
414
- return executeTemplate(UDExTab.headerTemplate, this);
415
- }
416
-
417
- get tabInOverflow() {
418
- return executeTemplate(UDExTab.overflowTemplate, this);
419
- }
420
-
421
- static get headerTemplate() {
422
- return TabHeaderTemplate;
423
- }
424
-
425
- static get overflowTemplate() {
426
- return TabInOverflowTemplate;
427
- }
428
408
  }
429
409
 
430
410
  UDExTab.define();