@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
@@ -5,14 +5,11 @@ OVERVIEW=概览
5
5
  LOGOUT=退出
6
6
  MAIN_LINKS=主要链接
7
7
  BACK_TO_TOP=返回顶部
8
- COUNT=计数
9
8
  OF=/
10
9
  PAGINATION_PAGE=页码
11
10
  SELECTED=已选定
12
11
  UNSELECTED=未选择
13
12
  INDETERMINATE=不确定
14
- EDIT_BUTTON=编辑
15
- DELETE_BUTTON=删除
16
13
  BACK_TO_REGION_LIST=返回到地区列表
17
14
  BUTTON_ARIA_TYPE_PRIMARY=一级
18
15
  BUTTON_ARIA_TYPE_SECONDARY=二级
@@ -26,8 +23,6 @@ BUTTON_ARIA_TRANSPARENT=透明
26
23
  BUTTON_ARIA_ATTENTION=注意
27
24
  DATEPICKER_DATE_DESCRIPTION=数据输入
28
25
  TOGGLED=切换
29
- FIRST_PAGE=第一页
30
- LAST_PAGE=最后一页
31
26
  PREVIOUS_PAGE=上一页
32
27
  NEXT_PAGE=下一页
33
28
  CURRENT_PAGE=当前页面
@@ -70,7 +65,6 @@ TEXTAREA_CHARACTERS_LEFT=剩余 {0} 个字符
70
65
  VALUE_STATE_TYPE_ERROR=字段状态"错误"
71
66
  VALUE_STATE_TYPE_WARNING=字段状态"警告"
72
67
  VALUE_STATE_TYPE_SUCCESS=字段状态"成功"
73
- VALUE_STATE_TYPE_STANDARD=字段状态"标准"
74
68
  CAROUSEL_PREVIOUS_ARROW_TEXT=上一页
75
69
  CAROUSEL_NEXT_ARROW_TEXT=下一页
76
70
  NO_MATCHES_FOUND=没有找到匹配项。
@@ -101,8 +95,6 @@ ABOUT_SAP=关于 SAP
101
95
  SITE_INFORMATION=网站信息
102
96
  AVATAR_TEXT=头像
103
97
  CALENDAR_ICON=打开日历图标
104
- LIST_ITEM_EDIT_ICON=编辑列表项记录
105
- LIST_ITEM_DELETE_ICON=删除列表项记录
106
98
  BACK_BUTTON_LABEL=返回按钮
107
99
  STATUS_BADGE_TEXT=状态标记
108
100
  STATUS_BADGE_EDIT_TITLE=点击编辑个人资料
@@ -3,14 +3,11 @@ OVERVIEW=概覽
3
3
  LOGOUT=登出
4
4
  MAIN_LINKS=主要連結
5
5
  BACK_TO_TOP=返回頂部
6
- COUNT=數量
7
6
  OF=/
8
7
  PAGINATION_PAGE=頁面
9
8
  SELECTED=已選取
10
9
  UNSELECTED=未選取
11
10
  INDETERMINATE=不確定
12
- EDIT_BUTTON=編輯
13
- DELETE_BUTTON=刪除
14
11
  BACK_TO_REGION_LIST=返回地區清單
15
12
  BUTTON_ARIA_TYPE_PRIMARY=主要
16
13
  BUTTON_ARIA_TYPE_SECONDARY=次要
@@ -24,8 +21,6 @@ BUTTON_ARIA_TRANSPARENT=透明化
24
21
  BUTTON_ARIA_ATTENTION=注意
25
22
  DATEPICKER_DATE_DESCRIPTION=資料輸入
26
23
  TOGGLED=已切換
27
- FIRST_PAGE=第一頁
28
- LAST_PAGE=最後一頁
29
24
  PREVIOUS_PAGE=上一頁
30
25
  NEXT_PAGE=下一頁
31
26
  CURRENT_PAGE=目前頁面
@@ -68,7 +63,6 @@ TEXTAREA_CHARACTERS_LEFT=剩餘 {0} 個字元
68
63
  VALUE_STATE_TYPE_ERROR=欄位狀態錯誤
69
64
  VALUE_STATE_TYPE_WARNING=欄位狀態警告
70
65
  VALUE_STATE_TYPE_SUCCESS=欄位狀態成功
71
- VALUE_STATE_TYPE_STANDARD=欄位狀態標準
72
66
  CAROUSEL_PREVIOUS_ARROW_TEXT=上一頁
73
67
  CAROUSEL_NEXT_ARROW_TEXT=下一頁
74
68
  NO_MATCHES_FOUND=找不到符合項目。
@@ -99,8 +93,6 @@ ABOUT_SAP=關於 SAP
99
93
  SITE_INFORMATION=網站資訊
100
94
  AVATAR_TEXT=頭像
101
95
  CALENDAR_ICON=開啟行事曆圖示
102
- LIST_ITEM_EDIT_ICON=編輯清單項目輸入項
103
- LIST_ITEM_DELETE_ICON=刪除清單項目輸入項
104
96
  BACK_BUTTON_LABEL=返回按鈕
105
97
  STATUS_BADGE_TEXT=狀態徽章
106
98
  STATUS_BADGE_EDIT_TITLE=按一下以編輯個人資料
@@ -383,7 +383,11 @@
383
383
  {
384
384
  "name": "page-indicator-type",
385
385
  "description": "Defines the style of the page indicator.\nAvailable options are:\n\n- `Default` - The page indicator will be visualized as dots if there are fewer than 9 pages. If there are more pages, the page indicator will switch to displaying the current page and the total number of pages. (e.g. X of Y)\n- `Numeric` - The page indicator will display the current page and the total number of pages. (e.g. X of Y)",
386
- "values": [{ "name": "Default" }, { "name": "Numeric" }]
386
+ "values": [
387
+ { "name": "Default" },
388
+ { "name": "None" },
389
+ { "name": "Numeric" }
390
+ ]
387
391
  }
388
392
  ],
389
393
  "references": []
@@ -4637,7 +4641,11 @@
4637
4641
  {
4638
4642
  "name": "size-more-button",
4639
4643
  "description": "Defines the size of the \"More\" button.",
4640
- "values": [{ "name": "Medium" }, { "name": "Small" }]
4644
+ "values": [
4645
+ { "name": "Medium" },
4646
+ { "name": "Small" },
4647
+ { "name": "Large" }
4648
+ ]
4641
4649
  },
4642
4650
  {
4643
4651
  "name": "vertical-alignment",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json",
3
3
  "name": "@sapudex/web-components",
4
- "version": "2.56.0",
4
+ "version": "2.58.0",
5
5
  "description-markup": "markdown",
6
6
  "contributions": {
7
7
  "html": {
@@ -789,7 +789,7 @@
789
789
  "name": "page-indicator-type",
790
790
  "description": "Defines the style of the page indicator.\nAvailable options are:\n\n- `Default` - The page indicator will be visualized as dots if there are fewer than 9 pages. If there are more pages, the page indicator will switch to displaying the current page and the total number of pages. (e.g. X of Y)\n- `Numeric` - The page indicator will display the current page and the total number of pages. (e.g. X of Y)",
791
791
  "value": {
792
- "type": "\"Default\" | \"Numeric\"",
792
+ "type": "\"Default\" | \"None\" | \"Numeric\"",
793
793
  "default": "\"Default\""
794
794
  }
795
795
  }
@@ -845,7 +845,7 @@
845
845
  {
846
846
  "name": "page-indicator-type",
847
847
  "description": "Defines the style of the page indicator.\nAvailable options are:\n\n- `Default` - The page indicator will be visualized as dots if there are fewer than 9 pages. If there are more pages, the page indicator will switch to displaying the current page and the total number of pages. (e.g. X of Y)\n- `Numeric` - The page indicator will display the current page and the total number of pages. (e.g. X of Y)",
848
- "value": { "type": "\"Default\" | \"Numeric\"" }
848
+ "value": { "type": "\"Default\" | \"None\" | \"Numeric\"" }
849
849
  }
850
850
  ],
851
851
  "events": [
@@ -9846,8 +9846,8 @@
9846
9846
  "name": "size-more-button",
9847
9847
  "description": "Defines the size of the \"More\" button.",
9848
9848
  "value": {
9849
- "type": "\"Medium\" | \"Small\"",
9850
- "default": "\"Small\""
9849
+ "type": "\"Medium\" | \"Small\" | \"Large\"",
9850
+ "default": "\"Medium\""
9851
9851
  }
9852
9852
  },
9853
9853
  {
@@ -9916,7 +9916,7 @@
9916
9916
  {
9917
9917
  "name": "size-more-button",
9918
9918
  "description": "Defines the size of the \"More\" button.",
9919
- "value": { "type": "\"Medium\" | \"Small\"" }
9919
+ "value": { "type": "\"Medium\" | \"Small\" | \"Large\"" }
9920
9920
  },
9921
9921
  {
9922
9922
  "name": "vertical-alignment",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@sapudex/web-components",
4
- "version": "2.56.0",
4
+ "version": "2.58.0",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
7
7
  },
package/src/Carousel.ts CHANGED
@@ -21,6 +21,7 @@ import {
21
21
  import redirectAttributes from "./utils/redirectAttributes.js";
22
22
  import type UI5Carousel from "@ui5/webcomponents/dist/Carousel.js";
23
23
  import type { CarouselNavigateEventDetail } from "@ui5/webcomponents/dist/Carousel.js";
24
+ import type CarouselPageIndicatorType from "@ui5/webcomponents/dist/types/CarouselPageIndicatorType.js";
24
25
  import type { UI5CustomEvent } from "@ui5/webcomponents-base";
25
26
  import translate from "./utils/translate.js";
26
27
 
@@ -28,13 +29,18 @@ import CarouselTemplate from "./CarouselTemplate.js";
28
29
 
29
30
  // Styles
30
31
  import CarouselCss from "./generated/themes/Carousel.css.js";
31
- import type CarouselPageIndicatorType from "@ui5/webcomponents/dist/types/CarouselPageIndicatorType.js";
32
32
 
33
33
  export enum UDExCarouselNavigationPosition {
34
34
  top = "top",
35
35
  bottom = "bottom",
36
36
  }
37
37
 
38
+ export enum UDExCarouselPageIndicatorType {
39
+ Default = "Default",
40
+ Numeric = "Numeric",
41
+ None = "None"
42
+ }
43
+
38
44
  export enum UDExCarouselButtonDesign {
39
45
  Secondary = "Secondary",
40
46
  Tertiary = "Tertiary",
@@ -167,7 +173,7 @@ class UDExCarousel extends UI5Element {
167
173
  * @public
168
174
  */
169
175
  @property()
170
- pageIndicatorType: `${CarouselPageIndicatorType}` = "Default";
176
+ pageIndicatorType: `${UDExCarouselPageIndicatorType}` = "Default";
171
177
 
172
178
  /**
173
179
  * Defines the prev button is disabled
@@ -347,7 +353,7 @@ class UDExCarousel extends UI5Element {
347
353
  return;
348
354
  }
349
355
 
350
- this._carousel.navigateLeft();
356
+ this._carousel.navigateArrowLeft();
351
357
  this._calculateDisabledButtonsState();
352
358
  }
353
359
 
@@ -356,7 +362,7 @@ class UDExCarousel extends UI5Element {
356
362
  return;
357
363
  }
358
364
 
359
- this._carousel.navigateRight();
365
+ this._carousel.navigateArrowRight();
360
366
  this._calculateDisabledButtonsState();
361
367
  }
362
368
 
@@ -381,9 +387,18 @@ class UDExCarousel extends UI5Element {
381
387
  }
382
388
 
383
389
  get carouselClass(): string {
384
- const classes = "udex-carousel";
390
+ let classes = "udex-carousel";
385
391
 
386
- return `${classes} udex-carousel__navigation--${this.navigationPlacement}`;
392
+ classes += ` udex-carousel__navigation--${this.navigationPlacement}`;
393
+
394
+ if (
395
+ this.navigationPlacement === UDExCarouselNavigationPosition.bottom
396
+ && this.pageIndicatorType === UDExCarouselPageIndicatorType.None
397
+ ) {
398
+ classes += " udex-carousel__navigation--bottom-buttons-only";
399
+ }
400
+
401
+ return classes;
387
402
  }
388
403
 
389
404
  get navigationWrapperClass(): string {
@@ -407,6 +422,13 @@ class UDExCarousel extends UI5Element {
407
422
  }
408
423
 
409
424
  get buttonDesign(): UDExCarouselButtonDesign {
425
+ if (
426
+ this.navigationPlacement === UDExCarouselNavigationPosition.bottom
427
+ && this.pageIndicatorType === UDExCarouselPageIndicatorType.None
428
+ ) {
429
+ return UDExCarouselButtonDesign.Secondary;
430
+ }
431
+
410
432
  return this.navigationPlacement === UDExCarouselNavigationPosition.top
411
433
  ? UDExCarouselButtonDesign.Secondary
412
434
  : UDExCarouselButtonDesign.Tertiary;
@@ -420,6 +442,13 @@ class UDExCarousel extends UI5Element {
420
442
  }
421
443
 
422
444
  get _hidePageIndicator(): boolean {
445
+ if (
446
+ this.navigationPlacement === UDExCarouselNavigationPosition.bottom
447
+ && this.pageIndicatorType === UDExCarouselPageIndicatorType.None
448
+ ) {
449
+ return true;
450
+ }
451
+
423
452
  return this.navigationPlacement === UDExCarouselNavigationPosition.top;
424
453
  }
425
454
 
@@ -427,8 +456,14 @@ class UDExCarousel extends UI5Element {
427
456
  return this.shadowRoot!.querySelector<UI5Carousel>("[ui5-carousel]");
428
457
  }
429
458
 
430
- get _isBottomNavigation(): boolean {
431
- return this.navigationPlacement === UDExCarouselNavigationPosition.bottom;
459
+ get _isBottomDotNavigation(): boolean {
460
+ if (
461
+ this.navigationPlacement === UDExCarouselNavigationPosition.bottom
462
+ && this.pageIndicatorType !== UDExCarouselPageIndicatorType.None
463
+ ) {
464
+ return true;
465
+ }
466
+ return false;
432
467
  }
433
468
 
434
469
  get autoplayToggleButtonTooltipText(): string {
@@ -436,6 +471,14 @@ class UDExCarousel extends UI5Element {
436
471
  ? translate(UDExCarousel, CAROUSEL_AUTOPLAY_TOGGLE_START)
437
472
  : translate(UDExCarousel, CAROUSEL_AUTOPLAY_TOGGLE_STOP);
438
473
  }
474
+
475
+ get sanitizedPageIndicatorType(): `${CarouselPageIndicatorType}` {
476
+ if (this.pageIndicatorType === UDExCarouselPageIndicatorType.None) {
477
+ return UDExCarouselPageIndicatorType.Default;
478
+ }
479
+
480
+ return this.pageIndicatorType;
481
+ }
439
482
  }
440
483
 
441
484
  UDExCarousel.define();
@@ -17,7 +17,7 @@ export default function CarouselTemplate(this: Carousel) {
17
17
 
18
18
  <UI5Carousel
19
19
  itemsPerPage={this.itemsPerPage}
20
- pageIndicatorType={this.pageIndicatorType}
20
+ pageIndicatorType={this.sanitizedPageIndicatorType}
21
21
  id="carousel"
22
22
  hideNavigationArrows
23
23
  arrowsPlacement={CarouselArrowsPlacement.Navigation}
@@ -70,11 +70,11 @@ function navigation(this: Carousel) {
70
70
  design={this.buttonDesign}
71
71
  tooltip={this.previousPageText}
72
72
  onClick={this._prevButtonClick}
73
- part="prev-button">
74
- </UDExButton>
73
+ part="prev-button"
74
+ ></UDExButton>
75
75
 
76
76
  {
77
- this._isBottomNavigation &&
77
+ this._isBottomDotNavigation &&
78
78
  <div className="udex-carousel__navigation-page-indicator-spacer" />
79
79
  }
80
80
 
@@ -87,12 +87,12 @@ function navigation(this: Carousel) {
87
87
  design={this.buttonDesign}
88
88
  tooltip={this.nextPageText}
89
89
  onClick={this._nextButtonClick}
90
- part="next-button">
91
- </UDExButton>
90
+ part="next-button"
91
+ ></UDExButton>
92
92
  </div>
93
93
 
94
94
  {
95
- this.autoplay && this._isBottomNavigation &&
95
+ this.autoplay && this._isBottomDotNavigation &&
96
96
  <div className="udex-carousel__navigation-spacer"></div>
97
97
  }
98
98
  </div>
package/src/List.ts CHANGED
@@ -215,6 +215,7 @@ class UDExList extends UI5Element {
215
215
  if (target.isGroup && target.hasAttribute("collapsible") && target.collapsed) {
216
216
  target.collapsed = false;
217
217
  this.setCollapsedItems(false, target);
218
+ this.fireAccordionToggle(target);
218
219
  }
219
220
  }
220
221
 
@@ -223,9 +224,25 @@ class UDExList extends UI5Element {
223
224
  if (target.isGroup && target.hasAttribute("collapsible") && !target.collapsed) {
224
225
  target.collapsed = true;
225
226
  this.setCollapsedItems(true, target);
227
+ this.fireAccordionToggle(target);
226
228
  }
227
229
  }
228
230
 
231
+ /**
232
+ * Arrow-key expand/collapse toggles `collapsed` directly here (multi-select
233
+ * headers deliver Left/Right to the List, not to the header's own key handler),
234
+ * so the `accordion-icon-click` event that drives the collapse/expand live-region
235
+ * announcement is never fired on this path. Re-emit it from the header so
236
+ * SearchableListBase announces the new state to screen readers, matching the
237
+ * chevron/pointer and single-select paths.
238
+ */
239
+ fireAccordionToggle(target: UDExListItemBase): void {
240
+ target.dispatchEvent(new CustomEvent("accordion-icon-click", {
241
+ bubbles: true,
242
+ detail: { collapsed: target.collapsed },
243
+ }));
244
+ }
245
+
229
246
  handleUpArrow(e: KeyboardEvent): void {
230
247
  e.preventDefault();
231
248
  const items = this.getKeyboardNavigationItems();
@@ -606,9 +623,14 @@ class UDExList extends UI5Element {
606
623
  return this.accessibleRole !== "listbox" ? this.accessibleRole : "list";
607
624
  }
608
625
 
609
- /** aria-multiselectable exposed only for MultiSelect tree (collapsible groups). */
626
+ /**
627
+ * aria-multiselectable is exposed for every MultiSelect list — the flat listbox
628
+ * and the collapsible tree alike. It is required so the screen reader announces
629
+ * each option's selected / not-selected state (from aria-selected) instead of
630
+ * treating the container as single-select and announcing only the active option.
631
+ */
610
632
  get _listAriaMultiSelectable(): string | undefined {
611
- return (this._hasCollapsibleGroups && this.modeMultiSelect) ? "true" : undefined;
633
+ return this.modeMultiSelect ? "true" : undefined;
612
634
  }
613
635
  }
614
636
 
@@ -46,6 +46,19 @@ class UDExListGroupHeaderBase extends UDExListItemBase {
46
46
  @property({ type: Boolean })
47
47
  _treeMode: boolean = false;
48
48
 
49
+ /**
50
+ * Marks the group as a self-contained role="listbox" (FilterMenu real-focus
51
+ * SingleSelect, non-collapsible groups). When true, this group's options are
52
+ * wrapped in their own listbox so JAWS counts them natively per group. Set by
53
+ * the parent (SearchableListBase.isPerGroupListbox) only when the whole list is
54
+ * grouped; the outer #udex-list drops its listbox role in that case.
55
+ *
56
+ * @default false
57
+ * @private
58
+ */
59
+ @property({ type: Boolean })
60
+ _groupAsListbox: boolean = false;
61
+
49
62
  /**
50
63
  * Slot for group header list items.
51
64
  *
@@ -210,10 +223,29 @@ class UDExListGroupHeaderBase extends UDExListItemBase {
210
223
  return this._treeMode;
211
224
  }
212
225
 
226
+ // FilterMenu real-focus SingleSelect non-collapsible group: its options are
227
+ // rendered inside their own role="listbox" so JAWS counts them natively per
228
+ // group ("1 of 4"). JAWS ignores role="group" boundaries and author
229
+ // aria-posinset within a single listbox, but counts reliably within a flat
230
+ // listbox. Excludes SelectBox (_useHostAriaRole) and tree mode.
231
+ get isPerGroupListbox(): boolean {
232
+ return this._groupAsListbox && !this._useHostAriaRole && !this._treeMode;
233
+ }
234
+
213
235
  get singleCollapsibleHeaderRole(): string {
214
236
  return this._treeMode ? "treeitem" : "button";
215
237
  }
216
238
 
239
+ // Pins the collapsible header's accessible name to its heading (+ supporting text)
240
+ // so the decorative expand/collapse chevron button — a child of the header — does
241
+ // not fold its "Expand"/"Collapse" label into the header's name. The chevron is a
242
+ // mouse affordance only (tabindex=-1); its state is already conveyed by
243
+ // aria-expanded, so excluding its name avoids announcing "Collapse" alongside the
244
+ // spoken "expanded"/"collapsed" state.
245
+ get collapsibleHeaderLabelledBy(): string {
246
+ return this.supportingText ? "group-heading group-supporting-text" : "group-heading";
247
+ }
248
+
217
249
  get collapsibleHeaderAccessibleRole(): string {
218
250
  return this._treeMode ? "treeitem" : "button";
219
251
  }
@@ -222,7 +254,13 @@ class UDExListGroupHeaderBase extends UDExListItemBase {
222
254
  if (this._useHostAriaRole) {
223
255
  return "presentation";
224
256
  }
225
- return this._treeMode ? "none" : "group";
257
+ // Tree mode keeps the treeitem/group nesting; per-group-listbox mode moves the
258
+ // single labelled role="listbox" onto the inner options wrapper — the outer div
259
+ // is transparent so screen readers don't announce a redundant "group" around it.
260
+ if (this._treeMode || this.isPerGroupListbox) {
261
+ return "none";
262
+ }
263
+ return "group";
226
264
  }
227
265
 
228
266
  get contentRegionRole(): string {
@@ -230,7 +268,11 @@ class UDExListGroupHeaderBase extends UDExListItemBase {
230
268
  }
231
269
 
232
270
  get nonCollapsibleContainerRole(): string {
233
- return "group";
271
+ // The single role="group" for non-collapsible headers lives on the outer
272
+ // div.udex-list__group wrapper (groupWrapperRole = "group" in non-tree mode,
273
+ // labelled by aria-labelledby="group-heading"). This container div must be
274
+ // transparent so that extra "group group" announcements are avoided.
275
+ return "none";
234
276
  }
235
277
 
236
278
  get nonCollapsibleHeaderAccessibleRole(): string | undefined {
@@ -35,18 +35,11 @@ function SingleGroupHeader(this: UDExListGroupHeader) {
35
35
  );
36
36
  }
37
37
 
38
- function SingleGroupHeaderCollapsible(this: UDExListGroupHeader) {
38
+ // The visible header row of the single-select collapsible group: number/icon,
39
+ // heading + supporting text, and the expand/collapse chevron.
40
+ function SingleCollapsibleHeaderRow(this: UDExListGroupHeader) {
39
41
  return (
40
- <div
41
- class={`udex-list__group-content udex-list__group-header-wrap ${this.sizeClass}`}
42
- part="group-item"
43
- id={`${this._id}_group-content__focusable`}
44
- role={this.singleCollapsibleHeaderRole as AriaRole}
45
- tabIndex={0}
46
- onKeyDown={this.handleKeyDown}
47
- aria-expanded={this.expanded}
48
- aria-controls={this.ariaControlsId}
49
- _tab-index={Number(this._effectiveTabIndex)}>
42
+ <>
50
43
  {this.typeNumber && <span class="udex-list__number">{this.numberOfItem}.</span>}
51
44
  {this.typeCircle && <span class="udex-list__circle">&#x2022;</span>}
52
45
  {this.typeIcon && (
@@ -65,7 +58,7 @@ function SingleGroupHeaderCollapsible(this: UDExListGroupHeader) {
65
58
  {...({ innerHTML: this.label } as object)}>
66
59
  </span>
67
60
  {this.supportingText && (
68
- <span class={`udex-list__supporting-text ${this.sizeClass}`}>{this.supportingText}</span>
61
+ <span id="group-supporting-text" class={`udex-list__supporting-text ${this.sizeClass}`}>{this.supportingText}</span>
69
62
  )}
70
63
  </div>
71
64
  <div class="udex-list__group-heading__icon-wrapper">
@@ -74,12 +67,48 @@ function SingleGroupHeaderCollapsible(this: UDExListGroupHeader) {
74
67
  design="Tertiary"
75
68
  class="udex-list__group-heading__icon"
76
69
  onClick={this.handleCollapseIconClick as unknown as EventListener}
70
+ onMouseDown={this.handleCollapseIconMouseDown}
77
71
  tabindex={-1}
78
72
  accessible-name={this.expandButtonAccessibleName}
79
73
  icon={slimArrowRight}
80
74
  {...({ "mode": "Interactive" } as object)}
81
75
  />
82
76
  </div>
77
+ </>
78
+ );
79
+ }
80
+
81
+ function SingleGroupHeaderCollapsible(this: UDExListGroupHeader) {
82
+ // Conformant WAI-ARIA tree (FilterMenu real focus): nest the child role="group"
83
+ // INSIDE this treeitem so screen readers count children per group natively — no
84
+ // explicit aria-posinset/aria-setsize (which JAWS distrusts). Excludes SelectBox
85
+ // (aria-activedescendant, _useHostAriaRole) and non-tree modes, which keep the flat
86
+ // structure with the content region emitted as a sibling by the template body.
87
+ const nested = this.isTreeAccessibleRole && !this._useHostAriaRole;
88
+ return (
89
+ <div
90
+ class={`udex-list__group-content ${nested ? "udex-list__group-content--nested " : ""}udex-list__group-header-wrap ${this.sizeClass}`}
91
+ part="group-item"
92
+ id={`${this._id}_group-content__focusable`}
93
+ role={this.singleCollapsibleHeaderRole as AriaRole}
94
+ tabIndex={0}
95
+ onKeyDown={this.handleKeyDown}
96
+ aria-expanded={this.expanded}
97
+ aria-controls={this.ariaControlsId}
98
+ aria-labelledby={this.collapsibleHeaderLabelledBy}
99
+ _tab-index={Number(this._effectiveTabIndex)}>
100
+ {nested ? (
101
+ <>
102
+ <div class="udex-list__group-header-row">
103
+ {SingleCollapsibleHeaderRow.call(this)}
104
+ </div>
105
+ <div id={this.ariaControlsId} role={this.contentRegionRole as AriaRole} class="udex-list__group-list__content">
106
+ <slot></slot>
107
+ </div>
108
+ </>
109
+ ) : (
110
+ SingleCollapsibleHeaderRow.call(this)
111
+ )}
83
112
  </div>
84
113
  );
85
114
  }
@@ -116,6 +145,8 @@ function MultiOrRadioGroupHeader(this: UDExListGroupHeader) {
116
145
  accessible-role={this.nonCollapsibleHeaderAccessibleRole}
117
146
  _additional-class-name={this._additionalClassName}
118
147
  _tab-index={Number(this._effectiveTabIndex)}
148
+ _aria-pos-in-set={this._ariaPosInSet}
149
+ _aria-set-size={this._ariaSetSize}
119
150
  _icon={this._icon}
120
151
  _filtered={this._filtered}
121
152
  />
@@ -177,6 +208,8 @@ function MultiOrRadioGroupHeaderCollapsible(this: UDExListGroupHeader) {
177
208
  onAccordionIconClick={this.handleCollapseIconClick as EventListener}
178
209
  _additional-class-name={this._additionalClassName}
179
210
  _tab-index={Number(this._effectiveTabIndex)}
211
+ _aria-pos-in-set={this._ariaPosInSet}
212
+ _aria-set-size={this._ariaSetSize}
180
213
  _icon={this._icon}
181
214
  _filtered={this._filtered}
182
215
  />
@@ -184,12 +217,16 @@ function MultiOrRadioGroupHeaderCollapsible(this: UDExListGroupHeader) {
184
217
  }
185
218
 
186
219
  export default function ListGroupHeaderTemplate(this: UDExListGroupHeader) {
220
+ // Single-select real-focus tree: SingleGroupHeaderCollapsible now emits the
221
+ // role="group" content region as a CHILD of the treeitem (conformant nesting),
222
+ // so the template body must not also emit it as a sibling.
223
+ const singleSelectNested = this.isTreeAccessibleRole && !this.useListItemHeader && !this._useHostAriaRole;
187
224
  return (
188
225
  <div
189
226
  part="item"
190
227
  class="udex-list__group"
191
228
  role={this.groupWrapperRole as AriaRole}
192
- aria-labelledby={!this.isTreeAccessibleRole ? "group-heading" : undefined}>
229
+ aria-labelledby={(!this.isTreeAccessibleRole && !this.isPerGroupListbox) ? "group-heading" : undefined}>
193
230
  {this.collapsible ? (
194
231
  <div
195
232
  class="udex-list__group-list"
@@ -199,28 +236,42 @@ export default function ListGroupHeaderTemplate(this: UDExListGroupHeader) {
199
236
  ? MultiOrRadioGroupHeaderCollapsible.call(this)
200
237
  : SingleGroupHeaderCollapsible.call(this)
201
238
  }
202
- <div id={this.ariaControlsId} role={this.contentRegionRole as AriaRole} class="udex-list__group-list__content">
203
- {this.isTreeAccessibleRole ? (
204
- <slot></slot>
205
- ) : (
206
- <div role="listbox" aria-label="group">
239
+ {!singleSelectNested && (
240
+ <div id={this.ariaControlsId} role={this.contentRegionRole as AriaRole} class="udex-list__group-list__content">
241
+ {this.isTreeAccessibleRole ? (
207
242
  <slot></slot>
208
- </div>
209
- )}
210
- </div>
243
+ ) : (
244
+ <div role="listbox" aria-label="group">
245
+ <slot></slot>
246
+ </div>
247
+ )}
248
+ </div>
249
+ )}
211
250
  </div>
212
251
  ) : (
213
252
  <div
214
253
  role={this.nonCollapsibleContainerRole as AriaRole}
215
254
  class="udex-list__group-list"
216
- aria-label="group"
217
255
  onui5-item-press={this.getHandleGroupItemsClick}
218
256
  {...({ name: "group" } as object)}>
219
257
  {this.modeMultiSelectOrRadioGroup
220
258
  ? MultiOrRadioGroupHeader.call(this)
221
259
  : SingleGroupHeader.call(this)
222
260
  }
223
- <slot></slot>
261
+ {this.isTreeAccessibleRole ? (
262
+ <div role="group">
263
+ <slot></slot>
264
+ </div>
265
+ ) : this.isPerGroupListbox ? (
266
+ // Each group is its own labelled listbox: JAWS counts the options natively
267
+ // per group ("Python, 1 of 4"). The outer #udex-list is presentational
268
+ // (SearchableListBase.isPerGroupListbox) so this is not a nested listbox.
269
+ <div role="listbox" aria-labelledby="group-heading">
270
+ <slot></slot>
271
+ </div>
272
+ ) : (
273
+ <slot></slot>
274
+ )}
224
275
  </div>
225
276
  )}
226
277
  </div>