@sapudex/web-components 2.57.0 → 2.59.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 (645) hide show
  1. package/cypress/specs/FilterMenu.cy.tsx +209 -19
  2. package/cypress/specs/List.cy.tsx +67 -4
  3. package/cypress/specs/ListItem.cy.tsx +35 -9
  4. package/cypress/specs/SelectBox.cy.tsx +101 -1
  5. package/cypress/specs/TabNavigation.cy.tsx +351 -21
  6. package/cypress/specs/TagGroup.cy.tsx +1 -1
  7. package/dist/List.d.ts +15 -1
  8. package/dist/List.js +23 -2
  9. package/dist/List.js.map +1 -1
  10. package/dist/ListGroupHeaderBase.d.ts +13 -0
  11. package/dist/ListGroupHeaderBase.js +43 -2
  12. package/dist/ListGroupHeaderBase.js.map +1 -1
  13. package/dist/ListGroupHeaderTemplate.js +26 -7
  14. package/dist/ListGroupHeaderTemplate.js.map +1 -1
  15. package/dist/ListItem.d.ts +0 -3
  16. package/dist/ListItem.js +18 -12
  17. package/dist/ListItem.js.map +1 -1
  18. package/dist/ListItemBase.d.ts +17 -0
  19. package/dist/ListItemBase.js +15 -0
  20. package/dist/ListItemBase.js.map +1 -1
  21. package/dist/ListItemTemplate.js +2 -2
  22. package/dist/ListItemTemplate.js.map +1 -1
  23. package/dist/MastheadCountrySelector.js +5 -5
  24. package/dist/MastheadCountrySelector.js.map +1 -1
  25. package/dist/MastheadCountrySelectorTemplate.d.ts +2 -0
  26. package/dist/MastheadCountrySelectorTemplate.js +15 -0
  27. package/dist/MastheadCountrySelectorTemplate.js.map +1 -0
  28. package/dist/MastheadItem.d.ts +0 -3
  29. package/dist/MastheadItem.js +3 -6
  30. package/dist/MastheadItem.js.map +1 -1
  31. package/dist/MastheadItemTemplate.d.ts +2 -0
  32. package/dist/MastheadItemTemplate.js +41 -0
  33. package/dist/MastheadItemTemplate.js.map +1 -0
  34. package/dist/MastheadMenu.d.ts +1 -0
  35. package/dist/MastheadMenu.js +4 -6
  36. package/dist/MastheadMenu.js.map +1 -1
  37. package/dist/MastheadMenuItem.d.ts +0 -3
  38. package/dist/MastheadMenuItem.js +3 -6
  39. package/dist/MastheadMenuItem.js.map +1 -1
  40. package/dist/MastheadMenuItemTemplate.d.ts +2 -0
  41. package/dist/MastheadMenuItemTemplate.js +36 -0
  42. package/dist/MastheadMenuItemTemplate.js.map +1 -0
  43. package/dist/MastheadMenuTemplate.d.ts +2 -0
  44. package/dist/MastheadMenuTemplate.js +13 -0
  45. package/dist/MastheadMenuTemplate.js.map +1 -0
  46. package/dist/MastheadMobileMenu.js +3 -3
  47. package/dist/MastheadMobileMenu.js.map +1 -1
  48. package/dist/MastheadMobileMenuTemplate.d.ts +2 -0
  49. package/dist/MastheadMobileMenuTemplate.js +33 -0
  50. package/dist/MastheadMobileMenuTemplate.js.map +1 -0
  51. package/dist/MastheadProfileMenu.d.ts +2 -4
  52. package/dist/MastheadProfileMenu.js +5 -20
  53. package/dist/MastheadProfileMenu.js.map +1 -1
  54. package/dist/MastheadProfileMenuTemplate.d.ts +2 -0
  55. package/dist/MastheadProfileMenuTemplate.js +24 -0
  56. package/dist/MastheadProfileMenuTemplate.js.map +1 -0
  57. package/dist/MastheadShell.js +3 -5
  58. package/dist/MastheadShell.js.map +1 -1
  59. package/dist/MastheadShellTemplate.d.ts +2 -0
  60. package/dist/MastheadShellTemplate.js +20 -0
  61. package/dist/MastheadShellTemplate.js.map +1 -0
  62. package/dist/RatingIndicatorTemplate.js +1 -1
  63. package/dist/RatingIndicatorTemplate.js.map +1 -1
  64. package/dist/SearchableListBase.d.ts +10 -0
  65. package/dist/SearchableListBase.js +34 -1
  66. package/dist/SearchableListBase.js.map +1 -1
  67. package/dist/SearchableListBaseTemplate.js +35 -4
  68. package/dist/SearchableListBaseTemplate.js.map +1 -1
  69. package/dist/SecondaryNavigation.d.ts +1 -0
  70. package/dist/SecondaryNavigation.js +23 -9
  71. package/dist/SecondaryNavigation.js.map +1 -1
  72. package/dist/SecondaryNavigationItem.d.ts +0 -1
  73. package/dist/SecondaryNavigationItem.js +4 -6
  74. package/dist/SecondaryNavigationItem.js.map +1 -1
  75. package/dist/SecondaryNavigationItemBase.js +2 -2
  76. package/dist/SecondaryNavigationItemBase.js.map +1 -1
  77. package/dist/SecondaryNavigationItemTemplate.d.ts +2 -0
  78. package/dist/SecondaryNavigationItemTemplate.js +12 -0
  79. package/dist/SecondaryNavigationItemTemplate.js.map +1 -0
  80. package/dist/SecondaryNavigationSubItem.d.ts +0 -2
  81. package/dist/SecondaryNavigationSubItem.js +3 -7
  82. package/dist/SecondaryNavigationSubItem.js.map +1 -1
  83. package/dist/SecondaryNavigationSubItemTemplate.d.ts +2 -0
  84. package/dist/SecondaryNavigationSubItemTemplate.js +16 -0
  85. package/dist/SecondaryNavigationSubItemTemplate.js.map +1 -0
  86. package/dist/SecondaryNavigationTemplate.d.ts +2 -0
  87. package/dist/SecondaryNavigationTemplate.js +7 -0
  88. package/dist/SecondaryNavigationTemplate.js.map +1 -0
  89. package/dist/SelectBase.js +8 -3
  90. package/dist/SelectBase.js.map +1 -1
  91. package/dist/SideNavigationMobile.d.ts +2 -3
  92. package/dist/SideNavigationMobile.js +22 -16
  93. package/dist/SideNavigationMobile.js.map +1 -1
  94. package/dist/SideNavigationMobileTemplate.d.ts +2 -0
  95. package/dist/SideNavigationMobileTemplate.js +11 -0
  96. package/dist/SideNavigationMobileTemplate.js.map +1 -0
  97. package/dist/Tab.d.ts +0 -7
  98. package/dist/Tab.js +4 -19
  99. package/dist/Tab.js.map +1 -1
  100. package/dist/TabHeaderTemplate.d.ts +2 -0
  101. package/dist/TabHeaderTemplate.js +15 -0
  102. package/dist/TabHeaderTemplate.js.map +1 -0
  103. package/dist/TabInOverflowTemplate.d.ts +2 -0
  104. package/dist/TabInOverflowTemplate.js +7 -0
  105. package/dist/TabInOverflowTemplate.js.map +1 -0
  106. package/dist/TabNavigation.d.ts +15 -4
  107. package/dist/TabNavigation.js +70 -40
  108. package/dist/TabNavigation.js.map +1 -1
  109. package/dist/TabNavigationPopoverTemplate.d.ts +2 -0
  110. package/dist/TabNavigationPopoverTemplate.js +9 -0
  111. package/dist/TabNavigationPopoverTemplate.js.map +1 -0
  112. package/dist/TabNavigationTemplate.d.ts +2 -0
  113. package/dist/TabNavigationTemplate.js +10 -0
  114. package/dist/TabNavigationTemplate.js.map +1 -0
  115. package/dist/TabTemplate.d.ts +2 -0
  116. package/dist/TabTemplate.js +5 -0
  117. package/dist/TabTemplate.js.map +1 -0
  118. package/dist/TagGroup.d.ts +2 -2
  119. package/dist/TagGroup.js +14 -3
  120. package/dist/TagGroup.js.map +1 -1
  121. package/dist/assets/InputSuggestions-CloTVyrf.js +2 -0
  122. package/dist/assets/{ListItemStandardExpandableTextTemplate-BQtSr7yg.js → ListItemStandardExpandableTextTemplate-DpquSMb2.js} +1 -1
  123. package/dist/assets/{ar-6UKwJun6.js → ar-CMU2PGtw.js} +1 -1
  124. package/dist/assets/{ar_EG-BTSal4jr.js → ar_EG-Bi2CIb24.js} +1 -1
  125. package/dist/assets/{ar_SA-Ck13AOrQ.js → ar_SA-BXTzBfWR.js} +1 -1
  126. package/dist/assets/{bg-fF9FXKHH.js → bg-B6_PMtzW.js} +1 -1
  127. package/dist/assets/{bundle.esm-GvPkDyXP.js → bundle.esm-Cyz8a5IX.js} +244 -262
  128. package/dist/assets/{ca-ZuvXTynI.js → ca-DFP6ILMq.js} +1 -1
  129. package/dist/assets/{cnr-CiidS6E_.js → cnr-Grlu3JuX.js} +1 -1
  130. package/dist/assets/{cs-CKH0PBiM.js → cs-lgNqqL4u.js} +1 -1
  131. package/dist/assets/{da-DLJy-V4w.js → da-ZKggtzGq.js} +1 -1
  132. package/dist/assets/{de-0N92OkSB.js → de-DL1zgfsi.js} +1 -1
  133. package/dist/assets/{de_AT-D8g7Tth2.js → de_AT-CmarUHhe.js} +1 -1
  134. package/dist/assets/{de_CH-DYTcKEqU.js → de_CH-CFp86jVo.js} +1 -1
  135. package/dist/assets/{el-OYZuNIHv.js → el-FdvefiDT.js} +1 -1
  136. package/dist/assets/{el_CY-D79vuMAa.js → el_CY-BJPkkKi8.js} +1 -1
  137. package/dist/assets/{en-CllNN7YY.js → en-B1Q_JFFb.js} +1 -1
  138. package/dist/assets/{en_AU-Ddrviu44.js → en_AU-Bm6lcfFm.js} +1 -1
  139. package/dist/assets/{en_GB-B9eSErHy.js → en_GB-CCipb5dG.js} +1 -1
  140. package/dist/assets/{en_HK-FdAjB4tQ.js → en_HK-Bu8Js72H.js} +1 -1
  141. package/dist/assets/{en_IE-zdmtzUDu.js → en_IE-BZXJHeYM.js} +1 -1
  142. package/dist/assets/{en_IN-DJJRjMIF.js → en_IN-Dh3537uv.js} +1 -1
  143. package/dist/assets/{en_NZ-BY--qj4s.js → en_NZ-Bx3mG4fb.js} +1 -1
  144. package/dist/assets/{en_PG-RcJi2hvJ.js → en_PG-CyRO9VGd.js} +1 -1
  145. package/dist/assets/{en_SG-BUtJMBS2.js → en_SG-BEsuw651.js} +1 -1
  146. package/dist/assets/{en_ZA-D-uqJ4Za.js → en_ZA-i0tdkruX.js} +1 -1
  147. package/dist/assets/{es-DgitLRHt.js → es-BKtAFDBk.js} +1 -1
  148. package/dist/assets/{es_AR-7a81KXAl.js → es_AR-Cgh6Q2W_.js} +1 -1
  149. package/dist/assets/{es_BO-CdNGyTgv.js → es_BO-CaK9OOQC.js} +1 -1
  150. package/dist/assets/{es_CL-DuHBIVFo.js → es_CL-u6fJ6PPk.js} +1 -1
  151. package/dist/assets/{es_CO-C0CJWwB-.js → es_CO-DAO-13dw.js} +1 -1
  152. package/dist/assets/{es_MX-DtPgyxGD.js → es_MX-D1KhXUy4.js} +1 -1
  153. package/dist/assets/{es_PE-DGF7Yjrt.js → es_PE-DEUen4VG.js} +1 -1
  154. package/dist/assets/{es_UY-fD9lVhfR.js → es_UY-CPBMwHSz.js} +1 -1
  155. package/dist/assets/{es_VE-BX3pigg8.js → es_VE-CNZouG2K.js} +1 -1
  156. package/dist/assets/{et-BMj4rjsT.js → et-DNQPssPo.js} +1 -1
  157. package/dist/assets/{fa-CQhbGi8S.js → fa-4zj1zCg1.js} +1 -1
  158. package/dist/assets/{fi-DBKA9_K5.js → fi-C6HFNTL6.js} +1 -1
  159. package/dist/assets/{fr-CMQtkd4R.js → fr-BydrHZkq.js} +1 -1
  160. package/dist/assets/{fr_BE-Bl0FruWm.js → fr_BE-C8hcZNOL.js} +1 -1
  161. package/dist/assets/{fr_CA-DFlIL_d4.js → fr_CA-Cw2zy44G.js} +1 -1
  162. package/dist/assets/{fr_CH-C8lyCDBe.js → fr_CH-BbCQFx3s.js} +1 -1
  163. package/dist/assets/{fr_LU-CG5r3b1-.js → fr_LU-BpH6nMiI.js} +1 -1
  164. package/dist/assets/{he-D3P1Q9GQ.js → he-CfKmVVrF.js} +1 -1
  165. package/dist/assets/{hi-B3yky8gy.js → hi-D1WBUmI6.js} +1 -1
  166. package/dist/assets/{hr-cQ9G2h7E.js → hr-pnk2hlkB.js} +1 -1
  167. package/dist/assets/{hu-D0ywysYs.js → hu-CCzBj3iT.js} +1 -1
  168. package/dist/assets/{id-B-yAWgiT.js → id-BeGrqJpK.js} +1 -1
  169. package/dist/assets/{it-DLzjbv-9.js → it-B6Mz1czr.js} +1 -1
  170. package/dist/assets/{it_CH-DKz1oDNC.js → it_CH-CwPXoj3N.js} +1 -1
  171. package/dist/assets/{ja-C8zg_Zor.js → ja-BILluLT2.js} +1 -1
  172. package/dist/assets/{kk-DZZOQ4wh.js → kk-YSUtf5Jy.js} +1 -1
  173. package/dist/assets/{ko-BEJWYeL9.js → ko-DUlXl0QQ.js} +1 -1
  174. package/dist/assets/{lt-Cji-Zk_r.js → lt-Dn5sAAtt.js} +1 -1
  175. package/dist/assets/{lv-rjxWTRTn.js → lv-D_k8IElJ.js} +1 -1
  176. package/dist/assets/messagebundle_ar-C3EXytoC.js +1 -0
  177. package/dist/assets/messagebundle_ar-DmZrrjEF.js +1 -0
  178. package/dist/assets/messagebundle_bg-BaZ97Q_b.js +1 -0
  179. package/dist/assets/messagebundle_bg-CgU7GPvK.js +1 -0
  180. package/dist/assets/messagebundle_ca-BwjVUbUA.js +1 -0
  181. package/dist/assets/messagebundle_ca-YiUGbO_8.js +1 -0
  182. package/dist/assets/messagebundle_cnr-CN2hPZIN.js +1 -0
  183. package/dist/assets/messagebundle_cnr-zdEdPJvc.js +1 -0
  184. package/dist/assets/messagebundle_cs-CGbnEjza.js +1 -0
  185. package/dist/assets/messagebundle_cs-DmRWH--o.js +1 -0
  186. package/dist/assets/messagebundle_cy-BF0YH9Iz.js +1 -0
  187. package/dist/assets/messagebundle_cy-CUiGsjO6.js +1 -0
  188. package/dist/assets/messagebundle_da-CWKLQJiq.js +1 -0
  189. package/dist/assets/messagebundle_da-bTkr4pUc.js +1 -0
  190. package/dist/assets/messagebundle_de-BmnClk4G.js +1 -0
  191. package/dist/assets/messagebundle_de-vB6qhgvG.js +1 -0
  192. package/dist/assets/messagebundle_el-DKdItEgW.js +1 -0
  193. package/dist/assets/messagebundle_el-Gv1Ly8aj.js +1 -0
  194. package/dist/assets/messagebundle_en-B7YJOdQz.js +1 -0
  195. package/dist/assets/messagebundle_en-DbKo-Dkl.js +1 -0
  196. package/dist/assets/messagebundle_en-DcV886MF.js +1 -0
  197. package/dist/assets/messagebundle_en_GB-Be93_Z4H.js +1 -0
  198. package/dist/assets/messagebundle_en_GB-CFh7e8hQ.js +1 -0
  199. package/dist/assets/messagebundle_en_US_sappsd-HCarC-Yr.js +1 -0
  200. package/dist/assets/messagebundle_en_US_sappsd-Se8GgI58.js +1 -0
  201. package/dist/assets/messagebundle_en_US_saprigi-CCHFk7YZ.js +1 -0
  202. package/dist/assets/messagebundle_en_US_saprigi-CbfvaHUL.js +1 -0
  203. package/dist/assets/messagebundle_en_US_saptrc-B8AIRzlo.js +1 -0
  204. package/dist/assets/messagebundle_en_US_saptrc-yJ3PcdEm.js +1 -0
  205. package/dist/assets/messagebundle_es-BH-a8BxO.js +1 -0
  206. package/dist/assets/messagebundle_es-Dt93wbGV.js +1 -0
  207. package/dist/assets/messagebundle_es_MX-BedlYlF3.js +1 -0
  208. package/dist/assets/messagebundle_es_MX-COPqooo9.js +1 -0
  209. package/dist/assets/messagebundle_et-BsYgDw46.js +1 -0
  210. package/dist/assets/messagebundle_et-UwpqUE-p.js +1 -0
  211. package/dist/assets/messagebundle_fi-BN3UWEz0.js +1 -0
  212. package/dist/assets/messagebundle_fi-Cwf7Puui.js +1 -0
  213. package/dist/assets/messagebundle_fr-43w09LAE.js +1 -0
  214. package/dist/assets/messagebundle_fr-CVRaf9_H.js +1 -0
  215. package/dist/assets/messagebundle_fr_CA-BM04X6xU.js +1 -0
  216. package/dist/assets/messagebundle_fr_CA-CdnVYumi.js +1 -0
  217. package/dist/assets/messagebundle_hi-DfeonbAH.js +1 -0
  218. package/dist/assets/messagebundle_hi-JRJlP9Uh.js +1 -0
  219. package/dist/assets/messagebundle_hr-CKOnn34q.js +1 -0
  220. package/dist/assets/messagebundle_hr-CbyIBlH3.js +1 -0
  221. package/dist/assets/messagebundle_hu-DF1gQudE.js +1 -0
  222. package/dist/assets/messagebundle_hu-D_IQ9kTy.js +1 -0
  223. package/dist/assets/messagebundle_id-B0K1usj4.js +1 -0
  224. package/dist/assets/messagebundle_id-gDJYoaGq.js +1 -0
  225. package/dist/assets/messagebundle_it-B80_R2Ih.js +1 -0
  226. package/dist/assets/messagebundle_it-CVqU4g6t.js +1 -0
  227. package/dist/assets/messagebundle_iw-BoelOIS4.js +1 -0
  228. package/dist/assets/messagebundle_iw-iMDtLxaa.js +1 -0
  229. package/dist/assets/messagebundle_ja-BlRbv4vb.js +1 -0
  230. package/dist/assets/messagebundle_ja-BrDH-19-.js +1 -0
  231. package/dist/assets/messagebundle_kk-C7VPek1-.js +1 -0
  232. package/dist/assets/messagebundle_kk-DhAT_bim.js +1 -0
  233. package/dist/assets/messagebundle_ko-CIqP8x6n.js +1 -0
  234. package/dist/assets/messagebundle_ko-DgD6uyZ5.js +1 -0
  235. package/dist/assets/messagebundle_lt-BGK5mpcm.js +1 -0
  236. package/dist/assets/messagebundle_lt-BV0kKrY0.js +1 -0
  237. package/dist/assets/messagebundle_lv-5IcjoxWD.js +1 -0
  238. package/dist/assets/messagebundle_lv-DDBi7iKe.js +1 -0
  239. package/dist/assets/messagebundle_mk-BUrn04sZ.js +1 -0
  240. package/dist/assets/messagebundle_mk-P5veRdg2.js +1 -0
  241. package/dist/assets/messagebundle_ms-9VDLR5en.js +1 -0
  242. package/dist/assets/messagebundle_ms-CB8sQUg2.js +1 -0
  243. package/dist/assets/messagebundle_nl-BaAgPO7h.js +1 -0
  244. package/dist/assets/messagebundle_nl-f1Up3dB9.js +1 -0
  245. package/dist/assets/messagebundle_no-C-_ldp7o.js +1 -0
  246. package/dist/assets/messagebundle_no-DRSqWQ-C.js +1 -0
  247. package/dist/assets/messagebundle_pl-BQoPaokq.js +1 -0
  248. package/dist/assets/messagebundle_pl-DBO1atMe.js +1 -0
  249. package/dist/assets/messagebundle_pt-BNEglYxa.js +1 -0
  250. package/dist/assets/messagebundle_pt-DgAMHmW-.js +1 -0
  251. package/dist/assets/messagebundle_pt_PT-BtYzp9KB.js +1 -0
  252. package/dist/assets/messagebundle_pt_PT-D1Ef8kUU.js +1 -0
  253. package/dist/assets/messagebundle_ro-CuDPp2fe.js +1 -0
  254. package/dist/assets/messagebundle_ro-D591wJ6f.js +1 -0
  255. package/dist/assets/messagebundle_ru-D0NridWi.js +1 -0
  256. package/dist/assets/messagebundle_ru-I8YLCfrn.js +1 -0
  257. package/dist/assets/messagebundle_sh-BswdbSRi.js +1 -0
  258. package/dist/assets/messagebundle_sh-Dw2y_oct.js +1 -0
  259. package/dist/assets/messagebundle_sk-BG4S4ZVk.js +1 -0
  260. package/dist/assets/messagebundle_sk-CXOF1RuF.js +1 -0
  261. package/dist/assets/messagebundle_sl-CAnJO_8X.js +1 -0
  262. package/dist/assets/messagebundle_sl-kpVWxIp_.js +1 -0
  263. package/dist/assets/messagebundle_sr-BTWvO8VQ.js +1 -0
  264. package/dist/assets/messagebundle_sr-VJmRSdj4.js +1 -0
  265. package/dist/assets/messagebundle_sv-B-RCgnW_.js +1 -0
  266. package/dist/assets/messagebundle_sv-Bd4wCcDb.js +1 -0
  267. package/dist/assets/messagebundle_th-CMHmLdI3.js +1 -0
  268. package/dist/assets/messagebundle_th-CZ1imsCy.js +1 -0
  269. package/dist/assets/messagebundle_tr-BfWAYIdW.js +1 -0
  270. package/dist/assets/messagebundle_tr-D-BnBirv.js +1 -0
  271. package/dist/assets/messagebundle_uk-DhxIThVl.js +1 -0
  272. package/dist/assets/messagebundle_uk-HU8hI0yj.js +1 -0
  273. package/dist/assets/messagebundle_vi-BUTqUKd4.js +1 -0
  274. package/dist/assets/messagebundle_vi-D1El4_Wj.js +1 -0
  275. package/dist/assets/messagebundle_zh_CN-Dt0azUea.js +1 -0
  276. package/dist/assets/messagebundle_zh_CN-Ofgx2uXY.js +1 -0
  277. package/dist/assets/messagebundle_zh_TW-5lv7yYS1.js +1 -0
  278. package/dist/assets/messagebundle_zh_TW-LSErOAsd.js +1 -0
  279. package/dist/assets/{mk-9_dtu4u_.js → mk-DTLhuyCG.js} +1 -1
  280. package/dist/assets/{ms-9b0nct8m.js → ms-BrLiVOVI.js} +1 -1
  281. package/dist/assets/{nb-CbGeVRux.js → nb-BeQEL0TR.js} +1 -1
  282. package/dist/assets/{nl-C0vlsmuT.js → nl-CGAh49hZ.js} +1 -1
  283. package/dist/assets/{nl_BE-Cteh34au.js → nl_BE-CxJbQu5q.js} +1 -1
  284. package/dist/assets/{parameters-bundle.css-D7WciSOr.js → parameters-bundle.css-B68EyCuR.js} +2 -0
  285. package/dist/assets/{parameters-bundle.css-CT-eTeTy.js → parameters-bundle.css-BkJSEiFx.js} +2 -0
  286. package/dist/assets/{parameters-bundle.css-BXQ-0CBp.js → parameters-bundle.css-C5V2Zp_F.js} +2 -0
  287. package/dist/assets/{parameters-bundle.css-XYDTPt-n.js → parameters-bundle.css-COeynv6D.js} +3 -1
  288. package/dist/assets/parameters-bundle.css-CnIzAMdG.js +3 -0
  289. package/dist/assets/parameters-bundle.css-CsV5qbZp.js +3 -0
  290. package/dist/assets/{parameters-bundle.css-C7KCPeJ8.js → parameters-bundle.css-DCvHNL3s.js} +1 -1
  291. package/dist/assets/{parameters-bundle.css-CQFZmxYm.js → parameters-bundle.css-DK40uKOQ.js} +1 -1
  292. package/dist/assets/parameters-bundle.css-DMfTAqMv.js +2 -0
  293. package/dist/assets/parameters-bundle.css-DO35k9r0.js +2 -0
  294. package/dist/assets/parameters-bundle.css-Df7wtRW4.js +2 -0
  295. package/dist/assets/{parameters-bundle.css-CxjtOlRD.js → parameters-bundle.css-DmEWEk0u.js} +36 -28
  296. package/dist/assets/{parameters-bundle.css-CSUOmZKr.js → parameters-bundle.css-DvAfqdlT.js} +1 -1
  297. package/dist/assets/{parameters-bundle.css-DPz62M1p.js → parameters-bundle.css-K-MvKimD.js} +3 -1
  298. package/dist/assets/parameters-bundle.css-KoXGNyLG.js +3 -0
  299. package/dist/assets/{parameters-bundle.css-CLLnzh9T.js → parameters-bundle.css-P_M_rm9z.js} +1 -1
  300. package/dist/assets/parameters-bundle.css-UJIxXHL5.js +2 -0
  301. package/dist/assets/{parameters-bundle.css-V2I5eOdH.js → parameters-bundle.css-co26r5Nz.js} +1 -1
  302. package/dist/assets/parameters-bundle.css-uT62L0va.js +3 -0
  303. package/dist/assets/{parameters-bundle.css-Cmk27zY9.js → parameters-bundle.css-vNsSPPU5.js} +38 -31
  304. package/dist/assets/{pl-CDjXMBDR.js → pl-DaZJCEN3.js} +1 -1
  305. package/dist/assets/{pt-BXklB5_T.js → pt-RxoGfR56.js} +1 -1
  306. package/dist/assets/{pt_PT-DEzSdlMb.js → pt_PT-CuC22O4H.js} +1 -1
  307. package/dist/assets/{ro-bFLE5ZuX.js → ro-kcCACdbI.js} +1 -1
  308. package/dist/assets/{ru-DuGdFJZn.js → ru-BQzoU2Gq.js} +1 -1
  309. package/dist/assets/{ru_UA-DujiLlPN.js → ru_UA-BtdbuqWW.js} +1 -1
  310. package/dist/assets/{sk-GkzEgQor.js → sk-D4C2H17S.js} +1 -1
  311. package/dist/assets/{sl-BhuoMxwQ.js → sl-7ESgddjQ.js} +1 -1
  312. package/dist/assets/{sr-Bb668mIq.js → sr-m2FCxV00.js} +1 -1
  313. package/dist/assets/{sr_Latn-C61cXg9o.js → sr_Latn-Dh8ru1_a.js} +1 -1
  314. package/dist/assets/{sv-yft9g0aL.js → sv-DkcDHqsr.js} +1 -1
  315. package/dist/assets/{th-BiAki51N.js → th-sJeg9F0h.js} +1 -1
  316. package/dist/assets/{tr-DDt0vBOs.js → tr-C2e7ABy0.js} +1 -1
  317. package/dist/assets/{uk-A-zqF2vZ.js → uk-Cdp63d6T.js} +1 -1
  318. package/dist/assets/{vi-Bleu1lwm.js → vi-DuFuMCO2.js} +1 -1
  319. package/dist/assets/{zh_CN-kJCGkFOs.js → zh_CN-BOAGYFIg.js} +1 -1
  320. package/dist/assets/{zh_HK-BJMkT2Ze.js → zh_HK-Bmft66uR.js} +1 -1
  321. package/dist/assets/{zh_SG-Lz9Li7LQ.js → zh_SG-ChcB0A9F.js} +1 -1
  322. package/dist/assets/{zh_TW-P8-QBSyv.js → zh_TW-C8FI5AC8.js} +1 -1
  323. package/dist/css/themes/AccordionSpotlight.css +1 -1
  324. package/dist/css/themes/Button.css +1 -1
  325. package/dist/css/themes/Checkbox.css +1 -1
  326. package/dist/css/themes/Footer.css +1 -1
  327. package/dist/css/themes/ListGroupHeader.css +1 -1
  328. package/dist/css/themes/PromoTile.css +1 -1
  329. package/dist/css/themes/RatingIndicator.css +1 -1
  330. package/dist/css/themes/SecondaryNavigation.css +1 -1
  331. package/dist/css/themes/SecondaryNavigationItem.css +1 -1
  332. package/dist/css/themes/SecondaryNavigationSubItem.css +1 -1
  333. package/dist/css/themes/TabInOverflow.css +1 -1
  334. package/dist/css/themes/WizardTab.css +1 -1
  335. package/dist/custom-elements-internal.json +19 -0
  336. package/dist/custom-elements.json +52 -0
  337. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  338. package/dist/generated/i18n/i18n-defaults.d.ts +3 -1
  339. package/dist/generated/i18n/i18n-defaults.js +3 -1
  340. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  341. package/dist/generated/themes/AccordionSpotlight.css.d.ts +1 -1
  342. package/dist/generated/themes/AccordionSpotlight.css.js +1 -1
  343. package/dist/generated/themes/AccordionSpotlight.css.js.map +1 -1
  344. package/dist/generated/themes/Button.css.d.ts +1 -1
  345. package/dist/generated/themes/Button.css.js +1 -1
  346. package/dist/generated/themes/Button.css.js.map +1 -1
  347. package/dist/generated/themes/Checkbox.css.d.ts +1 -1
  348. package/dist/generated/themes/Checkbox.css.js +1 -1
  349. package/dist/generated/themes/Checkbox.css.js.map +1 -1
  350. package/dist/generated/themes/Footer.css.d.ts +1 -1
  351. package/dist/generated/themes/Footer.css.js +1 -1
  352. package/dist/generated/themes/Footer.css.js.map +1 -1
  353. package/dist/generated/themes/ListGroupHeader.css.d.ts +1 -1
  354. package/dist/generated/themes/ListGroupHeader.css.js +1 -1
  355. package/dist/generated/themes/ListGroupHeader.css.js.map +1 -1
  356. package/dist/generated/themes/PromoTile.css.d.ts +1 -1
  357. package/dist/generated/themes/PromoTile.css.js +1 -1
  358. package/dist/generated/themes/PromoTile.css.js.map +1 -1
  359. package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
  360. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  361. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  362. package/dist/generated/themes/SecondaryNavigation.css.d.ts +1 -1
  363. package/dist/generated/themes/SecondaryNavigation.css.js +1 -1
  364. package/dist/generated/themes/SecondaryNavigation.css.js.map +1 -1
  365. package/dist/generated/themes/SecondaryNavigationItem.css.d.ts +1 -1
  366. package/dist/generated/themes/SecondaryNavigationItem.css.js +1 -1
  367. package/dist/generated/themes/SecondaryNavigationItem.css.js.map +1 -1
  368. package/dist/generated/themes/SecondaryNavigationSubItem.css.d.ts +1 -1
  369. package/dist/generated/themes/SecondaryNavigationSubItem.css.js +1 -1
  370. package/dist/generated/themes/SecondaryNavigationSubItem.css.js.map +1 -1
  371. package/dist/generated/themes/TabInOverflow.css.d.ts +1 -1
  372. package/dist/generated/themes/TabInOverflow.css.js +1 -1
  373. package/dist/generated/themes/TabInOverflow.css.js.map +1 -1
  374. package/dist/generated/themes/WizardTab.css.d.ts +1 -1
  375. package/dist/generated/themes/WizardTab.css.js +1 -1
  376. package/dist/generated/themes/WizardTab.css.js.map +1 -1
  377. package/dist/messagebundle.properties +4 -0
  378. package/dist/messagebundle_en.properties +2 -0
  379. package/dist/utils/Breakpoints.d.ts +20 -1
  380. package/dist/utils/Breakpoints.js +38 -8
  381. package/dist/utils/Breakpoints.js.map +1 -1
  382. package/dist/vscode.html-custom-data.json +115 -456
  383. package/dist/web-types.json +11 -1
  384. package/package.json +8 -8
  385. package/src/List.ts +24 -2
  386. package/src/ListGroupHeaderBase.ts +44 -2
  387. package/src/ListGroupHeaderTemplate.tsx +74 -23
  388. package/src/ListItem.ts +18 -15
  389. package/src/ListItemBase.ts +30 -0
  390. package/src/ListItemTemplate.tsx +4 -4
  391. package/src/MastheadCountrySelector.ts +5 -5
  392. package/src/MastheadCountrySelectorTemplate.tsx +98 -0
  393. package/src/MastheadItem.ts +3 -6
  394. package/src/MastheadItemTemplate.tsx +178 -0
  395. package/src/MastheadMenu.ts +5 -6
  396. package/src/MastheadMenuItem.ts +3 -7
  397. package/src/MastheadMenuItemTemplate.tsx +123 -0
  398. package/src/MastheadMenuTemplate.tsx +142 -0
  399. package/src/MastheadMobileMenu.ts +3 -3
  400. package/src/MastheadMobileMenuTemplate.tsx +274 -0
  401. package/src/MastheadProfileMenu.ts +10 -23
  402. package/src/MastheadProfileMenuTemplate.tsx +143 -0
  403. package/src/MastheadShell.ts +3 -5
  404. package/src/MastheadShellTemplate.tsx +228 -0
  405. package/src/RatingIndicatorTemplate.tsx +0 -1
  406. package/src/SearchableListBase.ts +37 -1
  407. package/src/SearchableListBaseTemplate.tsx +38 -2
  408. package/src/SecondaryNavigation.ts +24 -9
  409. package/src/SecondaryNavigationItem.ts +4 -6
  410. package/src/SecondaryNavigationItemBase.ts +2 -2
  411. package/src/SecondaryNavigationItemTemplate.tsx +80 -0
  412. package/src/SecondaryNavigationSubItem.ts +3 -7
  413. package/src/SecondaryNavigationSubItemTemplate.tsx +63 -0
  414. package/src/SecondaryNavigationTemplate.tsx +90 -0
  415. package/src/SelectBase.ts +8 -3
  416. package/src/SideNavigationMobile.ts +24 -17
  417. package/src/SideNavigationMobileTemplate.tsx +59 -0
  418. package/src/Tab.ts +4 -24
  419. package/src/TabHeaderTemplate.tsx +153 -0
  420. package/src/TabInOverflowTemplate.tsx +68 -0
  421. package/src/TabNavigation.ts +78 -44
  422. package/src/TabNavigationPopoverTemplate.tsx +27 -0
  423. package/src/TabNavigationTemplate.tsx +98 -0
  424. package/src/TabTemplate.tsx +7 -0
  425. package/src/TagGroup.ts +16 -5
  426. package/src/generated/i18n/i18n-defaults.ts +2 -2
  427. package/src/generated/themes/AccordionSpotlight.css.ts +1 -1
  428. package/src/generated/themes/Button.css.ts +1 -1
  429. package/src/generated/themes/Checkbox.css.ts +1 -1
  430. package/src/generated/themes/Footer.css.ts +1 -1
  431. package/src/generated/themes/ListGroupHeader.css.ts +1 -1
  432. package/src/generated/themes/PromoTile.css.ts +1 -1
  433. package/src/generated/themes/RatingIndicator.css.ts +1 -1
  434. package/src/generated/themes/SecondaryNavigation.css.ts +1 -1
  435. package/src/generated/themes/SecondaryNavigationItem.css.ts +1 -1
  436. package/src/generated/themes/SecondaryNavigationSubItem.css.ts +1 -1
  437. package/src/generated/themes/TabInOverflow.css.ts +1 -1
  438. package/src/generated/themes/WizardTab.css.ts +1 -1
  439. package/src/i18n/messagebundle.properties +4 -0
  440. package/src/i18n/messagebundle_en.properties +2 -0
  441. package/src/themes/AccordionSpotlight.css +1 -1
  442. package/src/themes/Button.css +2 -1
  443. package/src/themes/Checkbox.css +5 -1
  444. package/src/themes/Footer.css +4 -4
  445. package/src/themes/ListGroupHeader.css +50 -7
  446. package/src/themes/PromoTile.css +1 -0
  447. package/src/themes/RatingIndicator.css +6 -1
  448. package/src/themes/SecondaryNavigation.css +3 -3
  449. package/src/themes/SecondaryNavigationItem.css +2 -2
  450. package/src/themes/SecondaryNavigationSubItem.css +2 -2
  451. package/src/themes/TabInOverflow.css +9 -4
  452. package/src/themes/WizardTab.css +6 -1
  453. package/src/utils/Breakpoints.ts +39 -8
  454. package/dist/assets/InputSuggestions-C8grDr_8.js +0 -2
  455. package/dist/assets/messagebundle_ar-BRkfjlVF.js +0 -1
  456. package/dist/assets/messagebundle_ar-D5A573iZ.js +0 -1
  457. package/dist/assets/messagebundle_bg-ByA8yRlQ.js +0 -1
  458. package/dist/assets/messagebundle_bg-CIVFOczQ.js +0 -1
  459. package/dist/assets/messagebundle_ca-BR3XuU9o.js +0 -1
  460. package/dist/assets/messagebundle_ca-CnMQ87v0.js +0 -1
  461. package/dist/assets/messagebundle_cnr-C6YhRiS7.js +0 -1
  462. package/dist/assets/messagebundle_cnr-CKZii51E.js +0 -1
  463. package/dist/assets/messagebundle_cs-DcOu8IOK.js +0 -1
  464. package/dist/assets/messagebundle_cs-I7yYpbsI.js +0 -1
  465. package/dist/assets/messagebundle_cy-BxrFUGJ9.js +0 -1
  466. package/dist/assets/messagebundle_cy-iXD_sJ-H.js +0 -1
  467. package/dist/assets/messagebundle_da-BVQHPgwf.js +0 -1
  468. package/dist/assets/messagebundle_da-CMGObFa5.js +0 -1
  469. package/dist/assets/messagebundle_de-CSl05u5u.js +0 -1
  470. package/dist/assets/messagebundle_de-Ca8NttFO.js +0 -1
  471. package/dist/assets/messagebundle_el-Cqfj_U5v.js +0 -1
  472. package/dist/assets/messagebundle_el-D9Zgq5tn.js +0 -1
  473. package/dist/assets/messagebundle_en-D0JTZvAf.js +0 -1
  474. package/dist/assets/messagebundle_en-DBpf5Il2.js +0 -1
  475. package/dist/assets/messagebundle_en-DWqF0cay.js +0 -1
  476. package/dist/assets/messagebundle_en_GB-CGB_FKp4.js +0 -1
  477. package/dist/assets/messagebundle_en_GB-Cl7ekzz2.js +0 -1
  478. package/dist/assets/messagebundle_en_US_sappsd-7UdOh8vN.js +0 -1
  479. package/dist/assets/messagebundle_en_US_sappsd-B8rqsyFQ.js +0 -1
  480. package/dist/assets/messagebundle_en_US_saprigi-9VCo5QY0.js +0 -1
  481. package/dist/assets/messagebundle_en_US_saprigi-DfLzOCPY.js +0 -1
  482. package/dist/assets/messagebundle_en_US_saptrc-DZqYka05.js +0 -1
  483. package/dist/assets/messagebundle_en_US_saptrc-Wh_IysAB.js +0 -1
  484. package/dist/assets/messagebundle_es-DKn8EzzP.js +0 -1
  485. package/dist/assets/messagebundle_es-lf5AJZNW.js +0 -1
  486. package/dist/assets/messagebundle_es_MX-DyYZGjON.js +0 -1
  487. package/dist/assets/messagebundle_es_MX-yBTcvu7u.js +0 -1
  488. package/dist/assets/messagebundle_et-Dz8Ohhcp.js +0 -1
  489. package/dist/assets/messagebundle_et-rMWbS-Nu.js +0 -1
  490. package/dist/assets/messagebundle_fi-Bfbyhuuz.js +0 -1
  491. package/dist/assets/messagebundle_fi-DnXm7LPH.js +0 -1
  492. package/dist/assets/messagebundle_fr-BvbeCfZ-.js +0 -1
  493. package/dist/assets/messagebundle_fr-KQhoZEew.js +0 -1
  494. package/dist/assets/messagebundle_fr_CA-CE2lzYx5.js +0 -1
  495. package/dist/assets/messagebundle_fr_CA-CIhDzHAJ.js +0 -1
  496. package/dist/assets/messagebundle_hi-BRQ9tZ6F.js +0 -1
  497. package/dist/assets/messagebundle_hi-DPwH9vag.js +0 -1
  498. package/dist/assets/messagebundle_hr-BSKQ6zHT.js +0 -1
  499. package/dist/assets/messagebundle_hr-D3gQg5JN.js +0 -1
  500. package/dist/assets/messagebundle_hu-CAA4oM1C.js +0 -1
  501. package/dist/assets/messagebundle_hu-CZNs1K9T.js +0 -1
  502. package/dist/assets/messagebundle_id-9H0uJyXB.js +0 -1
  503. package/dist/assets/messagebundle_id-m6iosVVP.js +0 -1
  504. package/dist/assets/messagebundle_it-BWzxa-Mi.js +0 -1
  505. package/dist/assets/messagebundle_it-Cm_0HF21.js +0 -1
  506. package/dist/assets/messagebundle_iw-DpB2YXTa.js +0 -1
  507. package/dist/assets/messagebundle_iw-NfqePNtD.js +0 -1
  508. package/dist/assets/messagebundle_ja-BCSZcI8t.js +0 -1
  509. package/dist/assets/messagebundle_ja-C-qqwzFf.js +0 -1
  510. package/dist/assets/messagebundle_kk--PGqyTVS.js +0 -1
  511. package/dist/assets/messagebundle_kk-DAlCQkFU.js +0 -1
  512. package/dist/assets/messagebundle_ko-D8mIkPe1.js +0 -1
  513. package/dist/assets/messagebundle_ko-qoWc4ZGG.js +0 -1
  514. package/dist/assets/messagebundle_lt-BIEH02V4.js +0 -1
  515. package/dist/assets/messagebundle_lt-ruMxSuY-.js +0 -1
  516. package/dist/assets/messagebundle_lv-C2om7wu0.js +0 -1
  517. package/dist/assets/messagebundle_lv-Dfrbh1ci.js +0 -1
  518. package/dist/assets/messagebundle_mk-DHvZle6t.js +0 -1
  519. package/dist/assets/messagebundle_mk-l_Kubx1p.js +0 -1
  520. package/dist/assets/messagebundle_ms-CKCmj1p_.js +0 -1
  521. package/dist/assets/messagebundle_ms-IhSEK5ij.js +0 -1
  522. package/dist/assets/messagebundle_nl-BiIb6e5c.js +0 -1
  523. package/dist/assets/messagebundle_nl-DquG38Cj.js +0 -1
  524. package/dist/assets/messagebundle_no-CX23v_jg.js +0 -1
  525. package/dist/assets/messagebundle_no-DFdvykvP.js +0 -1
  526. package/dist/assets/messagebundle_pl-BAeue3mo.js +0 -1
  527. package/dist/assets/messagebundle_pl-iHE_prgN.js +0 -1
  528. package/dist/assets/messagebundle_pt-BpQnTLvl.js +0 -1
  529. package/dist/assets/messagebundle_pt-C_bG3Erm.js +0 -1
  530. package/dist/assets/messagebundle_pt_PT-CR7qXFK-.js +0 -1
  531. package/dist/assets/messagebundle_pt_PT-DyseXKQQ.js +0 -1
  532. package/dist/assets/messagebundle_ro-CHU1E6hv.js +0 -1
  533. package/dist/assets/messagebundle_ro-C_amsd63.js +0 -1
  534. package/dist/assets/messagebundle_ru-Cab4H6Ud.js +0 -1
  535. package/dist/assets/messagebundle_ru-D6JMraBp.js +0 -1
  536. package/dist/assets/messagebundle_sh-DusYn00L.js +0 -1
  537. package/dist/assets/messagebundle_sh-hThvw_lF.js +0 -1
  538. package/dist/assets/messagebundle_sk-BqiUMEcX.js +0 -1
  539. package/dist/assets/messagebundle_sk-CZHfFNQ_.js +0 -1
  540. package/dist/assets/messagebundle_sl-B79d3kfY.js +0 -1
  541. package/dist/assets/messagebundle_sl-SfAn6n6j.js +0 -1
  542. package/dist/assets/messagebundle_sr-4iz7n4Te.js +0 -1
  543. package/dist/assets/messagebundle_sr-DxELdG62.js +0 -1
  544. package/dist/assets/messagebundle_sv-CPOHCrxs.js +0 -1
  545. package/dist/assets/messagebundle_sv-i6GuWK0l.js +0 -1
  546. package/dist/assets/messagebundle_th-D-kPI3tt.js +0 -1
  547. package/dist/assets/messagebundle_th-D64J-JvN.js +0 -1
  548. package/dist/assets/messagebundle_tr-CuE9DqZT.js +0 -1
  549. package/dist/assets/messagebundle_tr-gTuGftNt.js +0 -1
  550. package/dist/assets/messagebundle_uk-C6JSX-jF.js +0 -1
  551. package/dist/assets/messagebundle_uk-IKxyo-LT.js +0 -1
  552. package/dist/assets/messagebundle_vi-BRdRT5L6.js +0 -1
  553. package/dist/assets/messagebundle_vi-rZGL12-x.js +0 -1
  554. package/dist/assets/messagebundle_zh_CN-L55Y4Dfs.js +0 -1
  555. package/dist/assets/messagebundle_zh_CN-ZalS15WG.js +0 -1
  556. package/dist/assets/messagebundle_zh_TW-BcMzZCW2.js +0 -1
  557. package/dist/assets/messagebundle_zh_TW-sRVDBYOx.js +0 -1
  558. package/dist/assets/parameters-bundle.css-8pAQYERs.js +0 -3
  559. package/dist/assets/parameters-bundle.css-B_KvbSAR.js +0 -2
  560. package/dist/assets/parameters-bundle.css-Ciey0vhA.js +0 -2
  561. package/dist/assets/parameters-bundle.css-D7Hj83QD.js +0 -2
  562. package/dist/assets/parameters-bundle.css-DJgsxqD8.js +0 -2
  563. package/dist/assets/parameters-bundle.css-DMVuljH3.js +0 -3
  564. package/dist/assets/parameters-bundle.css-DkHyiuRq.js +0 -3
  565. package/dist/assets/parameters-bundle.css-Dvgwa73x.js +0 -3
  566. package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.d.ts +0 -3
  567. package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js +0 -13
  568. package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js.map +0 -1
  569. package/dist/generated/templates/MastheadItemTemplate.lit.d.ts +0 -3
  570. package/dist/generated/templates/MastheadItemTemplate.lit.js +0 -43
  571. package/dist/generated/templates/MastheadItemTemplate.lit.js.map +0 -1
  572. package/dist/generated/templates/MastheadMenuItemTemplate.lit.d.ts +0 -3
  573. package/dist/generated/templates/MastheadMenuItemTemplate.lit.js +0 -21
  574. package/dist/generated/templates/MastheadMenuItemTemplate.lit.js.map +0 -1
  575. package/dist/generated/templates/MastheadMenuTemplate.lit.d.ts +0 -3
  576. package/dist/generated/templates/MastheadMenuTemplate.lit.js +0 -25
  577. package/dist/generated/templates/MastheadMenuTemplate.lit.js.map +0 -1
  578. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.d.ts +0 -3
  579. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js +0 -37
  580. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js.map +0 -1
  581. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.d.ts +0 -3
  582. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js +0 -18
  583. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js.map +0 -1
  584. package/dist/generated/templates/MastheadShellTemplate.lit.d.ts +0 -3
  585. package/dist/generated/templates/MastheadShellTemplate.lit.js +0 -28
  586. package/dist/generated/templates/MastheadShellTemplate.lit.js.map +0 -1
  587. package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.d.ts +0 -3
  588. package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.js +0 -13
  589. package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.js.map +0 -1
  590. package/dist/generated/templates/SecondaryNavigationSubItemTemplate.lit.d.ts +0 -3
  591. package/dist/generated/templates/SecondaryNavigationSubItemTemplate.lit.js +0 -12
  592. package/dist/generated/templates/SecondaryNavigationSubItemTemplate.lit.js.map +0 -1
  593. package/dist/generated/templates/SecondaryNavigationTemplate.lit.d.ts +0 -3
  594. package/dist/generated/templates/SecondaryNavigationTemplate.lit.js +0 -15
  595. package/dist/generated/templates/SecondaryNavigationTemplate.lit.js.map +0 -1
  596. package/dist/generated/templates/SideNavigationMobileTemplate.lit.d.ts +0 -3
  597. package/dist/generated/templates/SideNavigationMobileTemplate.lit.js +0 -10
  598. package/dist/generated/templates/SideNavigationMobileTemplate.lit.js.map +0 -1
  599. package/dist/generated/templates/TabHeaderTemplate.lit.d.ts +0 -3
  600. package/dist/generated/templates/TabHeaderTemplate.lit.js +0 -52
  601. package/dist/generated/templates/TabHeaderTemplate.lit.js.map +0 -1
  602. package/dist/generated/templates/TabInOverflowTemplate.lit.d.ts +0 -3
  603. package/dist/generated/templates/TabInOverflowTemplate.lit.js +0 -15
  604. package/dist/generated/templates/TabInOverflowTemplate.lit.js.map +0 -1
  605. package/dist/generated/templates/TabNavigationPopoverTemplate.lit.d.ts +0 -3
  606. package/dist/generated/templates/TabNavigationPopoverTemplate.lit.js +0 -8
  607. package/dist/generated/templates/TabNavigationPopoverTemplate.lit.js.map +0 -1
  608. package/dist/generated/templates/TabNavigationTemplate.lit.d.ts +0 -3
  609. package/dist/generated/templates/TabNavigationTemplate.lit.js +0 -16
  610. package/dist/generated/templates/TabNavigationTemplate.lit.js.map +0 -1
  611. package/dist/generated/templates/TabTemplate.lit.d.ts +0 -3
  612. package/dist/generated/templates/TabTemplate.lit.js +0 -7
  613. package/dist/generated/templates/TabTemplate.lit.js.map +0 -1
  614. package/src/MastheadCountrySelector.hbs +0 -76
  615. package/src/MastheadItem.hbs +0 -136
  616. package/src/MastheadMenu.hbs +0 -131
  617. package/src/MastheadMenuItem.hbs +0 -102
  618. package/src/MastheadMobileMenu.hbs +0 -253
  619. package/src/MastheadProfileMenu.hbs +0 -121
  620. package/src/MastheadShell.hbs +0 -223
  621. package/src/SecondaryNavigation.hbs +0 -87
  622. package/src/SecondaryNavigationItem.hbs +0 -68
  623. package/src/SecondaryNavigationSubItem.hbs +0 -47
  624. package/src/SideNavigationMobile.hbs +0 -41
  625. package/src/Tab.hbs +0 -1
  626. package/src/TabHeader.hbs +0 -141
  627. package/src/TabInOverflow.hbs +0 -59
  628. package/src/TabNavigation.hbs +0 -88
  629. package/src/TabNavigationPopover.hbs +0 -18
  630. package/src/generated/templates/MastheadCountrySelectorTemplate.lit.ts +0 -17
  631. package/src/generated/templates/MastheadItemTemplate.lit.ts +0 -47
  632. package/src/generated/templates/MastheadMenuItemTemplate.lit.ts +0 -25
  633. package/src/generated/templates/MastheadMenuTemplate.lit.ts +0 -29
  634. package/src/generated/templates/MastheadMobileMenuTemplate.lit.ts +0 -41
  635. package/src/generated/templates/MastheadProfileMenuTemplate.lit.ts +0 -22
  636. package/src/generated/templates/MastheadShellTemplate.lit.ts +0 -32
  637. package/src/generated/templates/SecondaryNavigationItemTemplate.lit.ts +0 -17
  638. package/src/generated/templates/SecondaryNavigationSubItemTemplate.lit.ts +0 -16
  639. package/src/generated/templates/SecondaryNavigationTemplate.lit.ts +0 -19
  640. package/src/generated/templates/SideNavigationMobileTemplate.lit.ts +0 -14
  641. package/src/generated/templates/TabHeaderTemplate.lit.ts +0 -56
  642. package/src/generated/templates/TabInOverflowTemplate.lit.ts +0 -19
  643. package/src/generated/templates/TabNavigationPopoverTemplate.lit.ts +0 -12
  644. package/src/generated/templates/TabNavigationTemplate.lit.ts +0 -20
  645. package/src/generated/templates/TabTemplate.lit.ts +0 -11
@@ -104,6 +104,23 @@ filter-name="Filter Name">
104
104
  </UDExFilterMenuGroupHeader>
105
105
  </UDExFilterMenu>
106
106
 
107
+ const filterMenuTwoGroups = <UDExFilterMenu
108
+ id="filter-menu-two-groups"
109
+ mode={UDExListMode.MultiSelect}
110
+ filter-name="Filter Name">
111
+ <UDExFilterMenuGroupHeader collapsible label="Backend Languages">
112
+ <UDExFilterMenuItem label="Python"></UDExFilterMenuItem>
113
+ <UDExFilterMenuItem label="Ruby"></UDExFilterMenuItem>
114
+ <UDExFilterMenuItem label="Node.js"></UDExFilterMenuItem>
115
+ </UDExFilterMenuGroupHeader>
116
+ <UDExFilterMenuGroupHeader collapsible label="Frontend Languages">
117
+ <UDExFilterMenuItem label="JavaScript"></UDExFilterMenuItem>
118
+ <UDExFilterMenuItem label="Swift"></UDExFilterMenuItem>
119
+ <UDExFilterMenuItem label="HTML"></UDExFilterMenuItem>
120
+ <UDExFilterMenuItem label="CSS"></UDExFilterMenuItem>
121
+ </UDExFilterMenuGroupHeader>
122
+ </UDExFilterMenu>
123
+
107
124
  const filterMenuRadioGroup = <UDExFilterMenu
108
125
  id="filter-menu-radio-group"
109
126
  disable-target-overlap="true"
@@ -576,6 +593,51 @@ describe("Filter Menu component", () => {
576
593
  });
577
594
  });
578
595
 
596
+ describe("Filter Menu grouped tree — per-group position", () => {
597
+ beforeEach(() => {
598
+ cy.mount(filterMenuTwoGroups);
599
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").click();
600
+ });
601
+
602
+ // Regression: the sibling-group tree markup makes JAWS/NVDA compute a flattened
603
+ // posinset/setsize across every group's children (e.g. "5 of 7" instead of
604
+ // "1 of 4"). Explicit per-group aria-posinset/aria-setsize on each child treeitem
605
+ // restores the within-group count. Two groups of different sizes (Backend x3,
606
+ // Frontend x4) prove the count restarts per group rather than spanning all 7.
607
+ it('exposes per-group aria-posinset/aria-setsize on child treeitems so screen readers count within each group', () => {
608
+ // Backend Languages children: 1..3 within their own group of 3.
609
+ cy.get("[udex-filter-menu]").shadow().find("udex-list-group-header").eq(0)
610
+ .find("udex-list-item").then($items => {
611
+ expect($items).to.have.length(3);
612
+ });
613
+ cy.get("[udex-filter-menu]").shadow().find("udex-list-group-header").eq(0)
614
+ .find("udex-list-item").eq(0).shadow().find("[part=item]")
615
+ .should("have.attr", "aria-posinset", "1").and("have.attr", "aria-setsize", "3");
616
+ cy.get("[udex-filter-menu]").shadow().find("udex-list-group-header").eq(0)
617
+ .find("udex-list-item").eq(2).shadow().find("[part=item]")
618
+ .should("have.attr", "aria-posinset", "3").and("have.attr", "aria-setsize", "3");
619
+
620
+ // Frontend Languages children: count restarts at 1 with its own setsize (4),
621
+ // NOT continued as "4 of 7" across both groups.
622
+ cy.get("[udex-filter-menu]").shadow().find("udex-list-group-header").eq(1)
623
+ .find("udex-list-item").eq(0).shadow().find("[part=item]")
624
+ .should("have.attr", "aria-posinset", "1").and("have.attr", "aria-setsize", "4");
625
+ cy.get("[udex-filter-menu]").shadow().find("udex-list-group-header").eq(1)
626
+ .find("udex-list-item").eq(3).shadow().find("[part=item]")
627
+ .should("have.attr", "aria-posinset", "4").and("have.attr", "aria-setsize", "4");
628
+ });
629
+
630
+ it('positions each group header among the groups (N of group count)', () => {
631
+ // The collapsible MultiSelect header treeitem is the inner list-item's [part=item].
632
+ cy.get("[udex-filter-menu]").shadow().find("udex-list-group-header").eq(0)
633
+ .shadow().find("udex-list-item").shadow().find("[part=item]")
634
+ .should("have.attr", "aria-posinset", "1").and("have.attr", "aria-setsize", "2");
635
+ cy.get("[udex-filter-menu]").shadow().find("udex-list-group-header").eq(1)
636
+ .shadow().find("udex-list-item").shadow().find("[part=item]")
637
+ .should("have.attr", "aria-posinset", "2").and("have.attr", "aria-setsize", "2");
638
+ });
639
+ });
640
+
579
641
  describe("Filter Menu Single with search", () => {
580
642
  beforeEach(() => {
581
643
  cy.mount(filterMenuSingleWithSearch);
@@ -1597,6 +1659,16 @@ describe("Filter Menu component", () => {
1597
1659
  .find(".udex-list__group-list__content [role=listbox]").should("not.exist");
1598
1660
  });
1599
1661
 
1662
+ it("content region (role=\"group\") is a sibling of the header list-item, not nested in its subtree slot", () => {
1663
+ // Sibling-group structure: the content region is emitted alongside the
1664
+ // header list-item inside .udex-list__group-list, and the header item
1665
+ // carries no _subtree marker (no nested composition).
1666
+
1667
+ cy.get("#filter-menu-tree-collapsible").shadow()
1668
+ .find("udex-list-group-header").shadow()
1669
+ .find(".udex-list__group-list > .udex-list__group-list__content[role='group']").should("exist");
1670
+ });
1671
+
1600
1672
  // Updated: host udex-list-item has role="none"; the treeitem role is set via
1601
1673
  // accessible-role on the host (which the template renders onto [part=item]).
1602
1674
  it("child items get accessible-role=\"treeitem\" on their host element", () => {
@@ -1687,10 +1759,28 @@ describe("Filter Menu component", () => {
1687
1759
  .find("#udex-list").should("have.attr", "role", "tree");
1688
1760
  });
1689
1761
 
1690
- it("non-collapsible group's list container has role=\"group\" (not \"listbox\") in tree mode", () => {
1762
+ it("non-collapsible group's list container is transparent (role=\"none\") in tree mode so the header sits at the top level", () => {
1691
1763
  cy.get("#filter-menu-tree-non-collapsible").shadow()
1692
1764
  .find("udex-list-group-header").shadow()
1693
- .find(".udex-list__group-list").should("have.attr", "role", "group");
1765
+ .find(".udex-list__group-list").should("have.attr", "role", "none");
1766
+ });
1767
+
1768
+ it("children are wrapped in a nested role=\"group\" that sits as a sibling of the header treeitem", () => {
1769
+ // Sibling-group structure: the role="group" container is emitted alongside
1770
+ // the header inside .udex-list__group-list; the header item is not composed
1771
+ // into a subtree slot.
1772
+ cy.get("#filter-menu-tree-non-collapsible").shadow()
1773
+ .find("udex-list-group-header").shadow()
1774
+ .find(".udex-list__group-list > [role='group']").should("exist");
1775
+
1776
+ cy.get("#filter-menu-tree-non-collapsible").shadow()
1777
+ .find("udex-list-group-header").shadow()
1778
+ .find("udex-list-item").should("not.have.attr", "_subtree");
1779
+
1780
+ cy.get("#filter-menu-tree-non-collapsible").shadow()
1781
+ .find("udex-list-group-header").shadow()
1782
+ .find("udex-list-item").shadow()
1783
+ .find("[part=item] slot[name='subtree']").should("not.exist");
1694
1784
  });
1695
1785
 
1696
1786
  it("non-collapsible active header's inner udex-list-item has accessible-role=\"treeitem\"", () => {
@@ -1707,6 +1797,8 @@ describe("Filter Menu component", () => {
1707
1797
  .should("have.attr", "role", "treeitem")
1708
1798
  .and("have.attr", "aria-checked", "false");
1709
1799
  });
1800
+
1801
+
1710
1802
  });
1711
1803
 
1712
1804
  describe("Non-interactive group header in tree mode", () => {
@@ -1799,6 +1891,69 @@ describe("Filter Menu component", () => {
1799
1891
  .should("have.attr", "role", "treeitem");
1800
1892
  });
1801
1893
 
1894
+ it("nests the content region (role=\"group\") inside the treeitem div (conformant tree)", () => {
1895
+ // Conformant nesting: the role="group" content region is a DESCENDANT of the
1896
+ // .udex-list__group-content treeitem, so screen readers count children per group
1897
+ // natively (no author aria-posinset needed — matches the List component). This is
1898
+ // what restores JAWS per-item counting under arrow navigation.
1899
+ cy.get("#filter-menu-single-tree-collapsible").shadow()
1900
+ .find("udex-list-group-header").shadow()
1901
+ .find(".udex-list__group-list > .udex-list__group-content--nested[role='treeitem']").should("exist");
1902
+
1903
+ cy.get("#filter-menu-single-tree-collapsible").shadow()
1904
+ .find("udex-list-group-header").shadow()
1905
+ .find(".udex-list__group-content--nested[role='treeitem'] .udex-list__group-list__content[role='group']").should("exist");
1906
+
1907
+ // The content region is no longer emitted as a sibling of the treeitem.
1908
+ cy.get("#filter-menu-single-tree-collapsible").shadow()
1909
+ .find("udex-list-group-header").shadow()
1910
+ .find(".udex-list__group-list > .udex-list__group-list__content[role='group']").should("not.exist");
1911
+
1912
+ // The visible header row wrapper now sits inside the treeitem (ring/layout target).
1913
+ cy.get("#filter-menu-single-tree-collapsible").shadow()
1914
+ .find("udex-list-group-header").shadow()
1915
+ .find(".udex-list__group-content--nested[role='treeitem'] > .udex-list__group-header-row").should("exist");
1916
+ });
1917
+
1918
+ it("emits explicit aria-posinset/aria-setsize on single-select child treeitems (forces JAWS re-announcement)", () => {
1919
+ // Conformant nesting makes the structural count match the explicit values, so
1920
+ // JAWS trusts and re-announces on every arrow step — not just on group entry.
1921
+ cy.get("#filter-menu-single-tree-collapsible").shadow()
1922
+ .find("udex-list-group-header")
1923
+ .find("udex-list-item").eq(0).shadow()
1924
+ .find("[part=item]").should("have.attr", "aria-posinset", "1");
1925
+
1926
+ cy.get("#filter-menu-single-tree-collapsible").shadow()
1927
+ .find("udex-list-group-header")
1928
+ .find("udex-list-item").eq(0).shadow()
1929
+ .find("[part=item]").should("have.attr", "aria-setsize");
1930
+ });
1931
+
1932
+
1933
+ it("group header div does NOT render a -treeposition describedby node", () => {
1934
+ cy.get("#filter-menu-single-tree-collapsible").shadow()
1935
+ .find("udex-list-group-header").shadow()
1936
+ .find("[id$=-treeposition]").should("not.exist");
1937
+
1938
+ cy.get("#filter-menu-single-tree-collapsible").shadow()
1939
+ .find("udex-list-group-header").shadow()
1940
+ .find(".udex-list__group-content")
1941
+ .should("not.have.attr", "aria-describedby");
1942
+ });
1943
+
1944
+ // The chevron button inside the collapsible header carries an "Expand"/"Collapse"
1945
+ // accessible-name (a mouse affordance). Without an explicit aria-labelledby, that
1946
+ // label folds into the treeitem's computed name, so VoiceOver announces the state
1947
+ // twice ("… Collapse … expanded"). Pinning the name to the heading (+ supporting
1948
+ // text) keeps the chevron's label out; aria-expanded still conveys the state.
1949
+ it("group header div pins its accessible name to the heading (excludes the chevron's label)", () => {
1950
+ cy.get("#filter-menu-single-tree-collapsible").shadow()
1951
+ .find("udex-list-group-header").shadow()
1952
+ .find(".udex-list__group-content")
1953
+ .should("have.attr", "aria-labelledby")
1954
+ .and("match", /^group-heading/);
1955
+ });
1956
+
1802
1957
  it("group header div has aria-expanded=\"true\" when expanded (default)", () => {
1803
1958
  cy.get("#filter-menu-single-tree-collapsible").shadow()
1804
1959
  .find("udex-list-group-header").shadow()
@@ -1923,7 +2078,7 @@ describe("Filter Menu component", () => {
1923
2078
  it("clicking the header body does NOT select any child", () => {
1924
2079
  cy.get("#filter-menu-single-tree-collapsible").shadow()
1925
2080
  .find("udex-list-group-header").shadow()
1926
- .find(".udex-list__group-content").click();
2081
+ .find(".udex-list__group-header-row").click();
1927
2082
 
1928
2083
  cy.get("#filter-menu-single-tree-collapsible").shadow()
1929
2084
  .find("udex-list-group-header")
@@ -2000,6 +2155,16 @@ describe("Filter Menu component", () => {
2000
2155
  .find("udex-list-group-header").shadow()
2001
2156
  .find(".udex-list__group-content");
2002
2157
 
2158
+ // The visible header body. In the conformant nested tree the treeitem div
2159
+ // (.udex-list__group-content) wraps the whole subtree, so its geometric centre is
2160
+ // over a child item — clicking it is "covered". The header row is the actual body
2161
+ // (it sits above the children), so clicks target it while attribute assertions stay
2162
+ // on the treeitem div above.
2163
+ const headerRow = () =>
2164
+ cy.get("#filter-menu-single-tree-collapsible").shadow()
2165
+ .find("udex-list-group-header").shadow()
2166
+ .find(".udex-list__group-header-row");
2167
+
2003
2168
  const arrowButton = () =>
2004
2169
  cy.get("#filter-menu-single-tree-collapsible").shadow()
2005
2170
  .find("udex-list-group-header").shadow()
@@ -2020,14 +2185,14 @@ describe("Filter Menu component", () => {
2020
2185
  headerDiv().should("not.have.attr", "aria-selected");
2021
2186
  headerDiv().should("not.have.attr", "aria-checked");
2022
2187
 
2023
- headerDiv().click();
2188
+ headerRow().click();
2024
2189
 
2025
2190
  headerDiv().should("not.have.attr", "aria-selected");
2026
2191
  headerDiv().should("not.have.attr", "aria-checked");
2027
2192
  });
2028
2193
 
2029
2194
  it("clicking the header body does NOT set the selected property on the host group header", () => {
2030
- headerDiv().click();
2195
+ headerRow().click();
2031
2196
 
2032
2197
  cy.get("#filter-menu-single-tree-collapsible").shadow()
2033
2198
  .find("udex-list-group-header").then($gh => {
@@ -2036,7 +2201,7 @@ describe("Filter Menu component", () => {
2036
2201
  });
2037
2202
 
2038
2203
  it("clicking the header body does NOT select any child item", () => {
2039
- headerDiv().click();
2204
+ headerRow().click();
2040
2205
 
2041
2206
  childItems().each($item => {
2042
2207
  cy.wrap($item).shadow()
@@ -2049,7 +2214,7 @@ describe("Filter Menu component", () => {
2049
2214
  it("clicking the header body does NOT collapse the group", () => {
2050
2215
  headerDiv().should("have.attr", "aria-expanded", "true");
2051
2216
 
2052
- headerDiv().click();
2217
+ headerRow().click();
2053
2218
 
2054
2219
  headerDiv().should("have.attr", "aria-expanded", "true");
2055
2220
  cy.get("#filter-menu-single-tree-collapsible").shadow()
@@ -2143,24 +2308,49 @@ describe("Filter Menu component", () => {
2143
2308
  .find("[udex-list]").should("not.have.attr", "aria-multiselectable");
2144
2309
  });
2145
2310
 
2146
- // Updated: `accessibleRoleForList` no longer collapses to `"group"` for grouped
2147
- // non-tree mode — it now returns `defaultAccessibleRole` (`"listbox"`) in every
2148
- // non-tree case. JAWS enters forms mode on `role="listbox"` but stays in virtual
2149
- // buffer mode on `role="group"`, so the fix is to keep the widget role stable.
2150
- it("inner list div has role=\"listbox\", not \"tree\"", () => {
2311
+ // Per-group-listbox pattern: JAWS ignores role="group" boundaries and author
2312
+ // aria-posinset within a single listbox (it read the flat total "1 of 8" instead of
2313
+ // "1 of 4"), but counts options natively within a flat listbox. So each group becomes
2314
+ // its own role="listbox" and the outer #udex-list drops its listbox role (it would
2315
+ // otherwise be an invalid nested listbox). Not a tree.
2316
+ it("inner list div is presentational (role=\"presentation\"), not listbox or tree", () => {
2151
2317
  cy.get("#filter-menu-single-group").shadow()
2152
2318
  .find("[udex-list]").shadow()
2153
- .find("#udex-list").should("have.attr", "role", "listbox");
2319
+ .find("#udex-list")
2320
+ .should("have.attr", "role", "presentation");
2321
+ });
2322
+
2323
+ it("each group renders its own role=\"listbox\" labelled by its heading", () => {
2324
+ cy.get("#filter-menu-single-group").shadow()
2325
+ .find("udex-list-group-header").shadow()
2326
+ .find("[role=listbox]")
2327
+ .should("have.attr", "aria-labelledby", "group-heading");
2154
2328
  });
2155
2329
 
2156
- // Updated: `accessible-role="tree"` on the group header host was replaced by the
2157
- // `_tree-mode` boolean attribute. SingleSelect must not activate tree mode, so the
2158
- // attribute must be absent (and the host role stays "group" for non-tree grouped
2159
- // mode).
2160
- it("group header host has role=\"group\" and no _tree-mode attribute", () => {
2330
+ it("the outer group wrapper is transparent (role=\"none\") so the label is not announced twice", () => {
2331
+ cy.get("#filter-menu-single-group").shadow()
2332
+ .find("udex-list-group-header").shadow()
2333
+ .find(".udex-list__group")
2334
+ .should("have.attr", "role", "none")
2335
+ .and("not.have.attr", "aria-labelledby");
2336
+ });
2337
+
2338
+ it("group child items have role=\"option\" (inside the per-group listbox), not treeitem", () => {
2339
+ cy.get("#filter-menu-single-group").shadow()
2340
+ .find("udex-list-group-header")
2341
+ .find("udex-list-item").eq(0).shadow()
2342
+ .find("[part=item]")
2343
+ .should("have.attr", "role", "option")
2344
+ .and("not.have.attr", "role", "treeitem");
2345
+ });
2346
+
2347
+ // The group header host stays role="none" (transparent). The widget role now lives on
2348
+ // the inner per-group role="listbox" (asserted above), not on the host or the outer
2349
+ // div.udex-list__group, so the heading is announced once.
2350
+ it("group header host has role=\"none\" and no _tree-mode attribute", () => {
2161
2351
  cy.get("#filter-menu-single-group").shadow()
2162
2352
  .find("udex-list-group-header")
2163
- .should("have.attr", "role", "group")
2353
+ .should("have.attr", "role", "none")
2164
2354
  .and("not.have.attr", "_tree-mode");
2165
2355
  });
2166
2356
 
@@ -45,8 +45,10 @@ const collapsibleListRadioGroup = <UDExList id="list-group-header-collapsible" m
45
45
  </UDExList>;
46
46
 
47
47
  // Regression fixture: grouped MultiSelect list WITHOUT any collapsible group header.
48
- // This must stay on the listbox pattern (role="listbox", no aria-multiselectable, items
49
- // role="option") because _hasCollapsibleGroups is false.
48
+ // This stays on the listbox pattern (role="listbox", items role="option") because
49
+ // _hasCollapsibleGroups is false — it does NOT enter the tree pattern. As a
50
+ // MultiSelect listbox it still exposes aria-multiselectable="true" so each option's
51
+ // aria-selected state is announced.
50
52
  const nonCollapsibleList = <UDExList id="list-group-header-non-collapsible" mode="MultiSelect">
51
53
  <UDExListGroupHeader id="group-header-non-collapsible" supporting-text="Supporting text" label="Group Header">
52
54
  <UDExListItem>List Item1</UDExListItem>
@@ -344,6 +346,14 @@ describe("List - collapsible group header uses tree pattern", () => {
344
346
  .and("have.attr", "aria-expanded", "true");
345
347
  });
346
348
 
349
+ it("MultiSelect collapsible header: renders the role=\"group\" content region as a sibling of the header (not nested in the item)", () => {
350
+ cy.mount(collapsibleList);
351
+ cy.get("#group-header-collapsible").shadow()
352
+ .find("udex-list-item").should("not.have.attr", "_subtree");
353
+ cy.get("#group-header-collapsible").shadow()
354
+ .find(".udex-list__group-list > .udex-list__group-list__content[role='group']").should("exist");
355
+ });
356
+
347
357
  it("SingleSelect collapsible header: plain div gets role=\"treeitem\"", () => {
348
358
  cy.mount(collapsibleListSingleSelect);
349
359
  // SingleSelect => useListItemHeader=false => plain .udex-list__group-content <div>,
@@ -352,6 +362,20 @@ describe("List - collapsible group header uses tree pattern", () => {
352
362
  .find(".udex-list__group-content").should("have.attr", "role", "treeitem");
353
363
  });
354
364
 
365
+ it("SingleSelect collapsible header: nests the role=\"group\" content region inside the treeitem (conformant tree)", () => {
366
+ cy.mount(collapsibleListSingleSelect);
367
+ cy.get("#group-header-collapsible").shadow()
368
+ .find(".udex-list__group-list > .udex-list__group-content--nested[role='treeitem']").should("exist");
369
+ // The content region is a descendant of the treeitem, not a sibling.
370
+ cy.get("#group-header-collapsible").shadow()
371
+ .find(".udex-list__group-content--nested[role='treeitem'] .udex-list__group-list__content[role='group']").should("exist");
372
+ cy.get("#group-header-collapsible").shadow()
373
+ .find(".udex-list__group-list > .udex-list__group-list__content[role='group']").should("not.exist");
374
+ // The visible header row wrapper now sits inside the treeitem.
375
+ cy.get("#group-header-collapsible").shadow()
376
+ .find(".udex-list__group-content--nested[role='treeitem'] > .udex-list__group-header-row").should("exist");
377
+ });
378
+
355
379
  it("child items expose accessible-role=\"treeitem\" on the host", () => {
356
380
  cy.mount(collapsibleList);
357
381
  cy.get("#group-header-collapsible").find("udex-list-item")
@@ -372,9 +396,9 @@ describe("List - collapsible group header uses tree pattern", () => {
372
396
  innerList().should("have.attr", "role", "listbox");
373
397
  });
374
398
 
375
- it("non-collapsible grouped list has no aria-multiselectable and no _tree-mode", () => {
399
+ it("non-collapsible MultiSelect list exposes aria-multiselectable=\"true\" but stays out of tree mode", () => {
376
400
  cy.mount(nonCollapsibleList);
377
- innerList().should("not.have.attr", "aria-multiselectable");
401
+ innerList().should("have.attr", "aria-multiselectable", "true");
378
402
  cy.get("#group-header-non-collapsible").should("not.have.attr", "_tree-mode");
379
403
  });
380
404
 
@@ -385,6 +409,45 @@ describe("List - collapsible group header uses tree pattern", () => {
385
409
  });
386
410
  });
387
411
 
412
+ // Added: flat MultiSelect list follows the WAI-ARIA multi-select listbox pattern —
413
+ // the listbox is aria-multiselectable and each option carries aria-selected (instead
414
+ // of relying on the decorative checkbox for state). This makes the screen reader
415
+ // announce the selected/not-selected state ONCE (no duplicate from the checkbox) and,
416
+ // crucially, re-announce it when Enter/Space toggles the focused option.
417
+ describe("List - flat MultiSelect selection announcement", () => {
418
+ const flatMultiSelect = (
419
+ <UDExList id="flat-multi" mode="MultiSelect">
420
+ <UDExListItem id="flat-multi-item-1">List Item1</UDExListItem>
421
+ <UDExListItem id="flat-multi-item-2">List Item2</UDExListItem>
422
+ </UDExList>
423
+ );
424
+
425
+ it("options expose aria-selected and the checkbox is aria-hidden (no double state announcement)", () => {
426
+ cy.mount(flatMultiSelect);
427
+
428
+ cy.get("#flat-multi-item-1").shadow().find("[part=item]")
429
+ .should("have.attr", "role", "option")
430
+ .and("have.attr", "aria-selected", "false");
431
+ cy.get("#flat-multi-item-1").shadow().find("udex-checkbox")
432
+ .should("have.attr", "aria-hidden");
433
+ });
434
+
435
+ it("Enter on a focused option flips its aria-selected (state change is announced)", () => {
436
+ cy.mount(flatMultiSelect);
437
+
438
+ cy.get("#flat-multi-item-1").shadow().find("[part=item]").focus();
439
+ cy.realPress("Enter");
440
+
441
+ cy.get("#flat-multi-item-1").shadow().find("[part=item]")
442
+ .should("have.attr", "aria-selected", "true");
443
+
444
+ cy.realPress("Enter");
445
+
446
+ cy.get("#flat-multi-item-1").shadow().find("[part=item]")
447
+ .should("have.attr", "aria-selected", "false");
448
+ });
449
+ });
450
+
388
451
  describe("List component - SingleContent accessible name", () => {
389
452
  it("uses accessible-name as aria-label when only accessible-name is set", () => {
390
453
  cy.mount(
@@ -222,9 +222,11 @@ describe("ListItem", () => {
222
222
  });
223
223
  });
224
224
 
225
- // Added: unit-level coverage for the WCAG 4.1.2 Treeview Checkbox pattern getters
226
- // (ariaCheckedValue / checkboxAriaHidden). These only activate when the item's
227
- // accessible-role === "treeitem" (set by SearchableListBase in the tree pattern).
225
+ // Added: unit-level coverage for the WCAG 4.1.2 Treeview Checkbox pattern getter
226
+ // (ariaCheckedValue). It only activates when the item's accessible-role ===
227
+ // "treeitem" (set by SearchableListBase in the tree pattern). The inner checkbox
228
+ // is always aria-hidden in MultiSelect (a visual affordance only) — state is
229
+ // announced by the item's own aria-checked (tree) / aria-selected (flat option).
228
230
  describe("Tree accessibility pattern (accessible-role=\"treeitem\")", () => {
229
231
  it("[part=item] has role=\"treeitem\" and aria-checked=\"false\" when unselected", () => {
230
232
  cy.mount(<UDExListItem
@@ -439,9 +441,11 @@ describe("ListItem", () => {
439
441
  .find("[part=item]").should("have.attr", "aria-selected", "true");
440
442
  });
441
443
 
442
- // Regression: aria-selected must be absent when the item is NOT a treeitem
443
- // (default listbox/option role). ariaSelectedValue guards on roleItem === "treeitem".
444
- it("no aria-selected when accessible-role is not \"treeitem\" (SingleSelect default option)", () => {
444
+ // Updated: a SingleSelect option (default listbox role) now also exposes
445
+ // aria-selected so the screen reader announces its selected state natively.
446
+ // Previously options relied on a describedby state string, which made
447
+ // VoiceOver announce a phantom "selected" for every focused option.
448
+ it("SingleSelect default option exposes aria-selected", () => {
445
449
  cy.mount(<UDExListItem
446
450
  id="single-opt-item"
447
451
  mode={UDExListMode.SingleSelect}
@@ -450,7 +454,9 @@ describe("ListItem", () => {
450
454
  </UDExListItem>);
451
455
 
452
456
  cy.get("#single-opt-item").shadow()
453
- .find("[part=item]").should("not.have.attr", "aria-selected");
457
+ .find("[part=item]")
458
+ .should("have.attr", "role", "option")
459
+ .and("have.attr", "aria-selected", "true");
454
460
  });
455
461
  });
456
462
 
@@ -485,7 +491,7 @@ describe("ListItem", () => {
485
491
  .find("[part=item]").should("not.have.attr", "aria-checked");
486
492
  });
487
493
 
488
- it("inner udex-checkbox is NOT aria-hidden when not in tree mode", () => {
494
+ it("inner udex-checkbox is aria-hidden in flat MultiSelect (state announced via the option's aria-selected)", () => {
489
495
  cy.mount(<UDExListItem
490
496
  id="opt-item-checkbox"
491
497
  mode={UDExListMode.MultiSelect}
@@ -493,7 +499,27 @@ describe("ListItem", () => {
493
499
  </UDExListItem>);
494
500
 
495
501
  cy.get("#opt-item-checkbox").shadow()
496
- .find("udex-checkbox").should("not.have.attr", "aria-hidden");
502
+ .find("udex-checkbox").should("have.attr", "aria-hidden");
503
+ });
504
+
505
+ it("MultiSelect option exposes aria-selected reflecting selection (unselected -> selected)", () => {
506
+ cy.mount(<UDExListItem
507
+ id="opt-item-selected"
508
+ mode={UDExListMode.MultiSelect}
509
+ label="JavaScript">
510
+ </UDExListItem>);
511
+
512
+ cy.get("#opt-item-selected").shadow()
513
+ .find("[part=item]")
514
+ .should("have.attr", "role", "option")
515
+ .and("have.attr", "aria-selected", "false");
516
+
517
+ cy.get("#opt-item-selected").then($el => {
518
+ ($el[0] as UDExListItem).selected = true;
519
+ });
520
+
521
+ cy.get("#opt-item-selected").shadow()
522
+ .find("[part=item]").should("have.attr", "aria-selected", "true");
497
523
  });
498
524
 
499
525
  it("explicit non-tree accessible-role (e.g. \"option\") still suppresses aria-checked", () => {
@@ -609,7 +609,7 @@ describe("SelectBox", () => {
609
609
  .find("udex-tag-group").shadow()
610
610
  .find(".udex-tag-group__tokenizer").shadow()
611
611
  .find(".ui5-tokenizer-more-text")
612
- .should("have.text", "2 more");
612
+ .should("have.text", "3 more");
613
613
  });
614
614
 
615
615
  it("MultiSelect mode - open dropdown after clicking on the more button", () => {
@@ -768,6 +768,25 @@ describe("SelectBox", () => {
768
768
  .should("have.attr", "_active-descendant");
769
769
  });
770
770
 
771
+ it("MultiSelect collapsible group keeps the host-aria sibling layout (no structural nesting)", () => {
772
+ cy.mount(groupHeaderCollapsible);
773
+
774
+ cy.get("#select-box").shadow().find(".udex-text-field__search").click();
775
+
776
+ // Fix 18 regression guard: SelectBox uses the aria-activedescendant model, so a
777
+ // collapsible group header must NOT structurally nest its items (fix 16 nesting is
778
+ // for the real-DOM-focus tree components only). Nesting would reflow the header
779
+ // container to wrap its items and spread the header focus ring over the whole group.
780
+ // The header's inner list-item must not own a subtree, and the items must remain in
781
+ // the sibling content region.
782
+
783
+ cy.get("#select-box").shadow()
784
+ .find("udex-list-group-header").first()
785
+ .shadow()
786
+ .find(".udex-list__group-list__content")
787
+ .should("exist");
788
+ });
789
+
771
790
  it("MultiSelect mode - Left arrow collapses a collapsible group header, Right arrow expands it", () => {
772
791
  cy.mount(groupHeaderCollapsible);
773
792
 
@@ -2530,6 +2549,23 @@ describe("SelectBox", () => {
2530
2549
  .should("be.greaterThan", 0);
2531
2550
  });
2532
2551
 
2552
+ it("SingleSelect collapsible group keeps the host-aria sibling layout (no structural nesting)", () => {
2553
+ cy.mount(groupHeaderCollapsibleSingleSelect);
2554
+ cy.get("#select-box").shadow().find(".udex-text-field__trigger").click();
2555
+
2556
+ cy.get("#select-box").shadow()
2557
+ .find("udex-list-group-header").first()
2558
+ .shadow()
2559
+ .find(".udex-list__group-list__content")
2560
+ .should("exist");
2561
+
2562
+ cy.get("#select-box").shadow()
2563
+ .find("udex-list-group-header").first()
2564
+ .shadow()
2565
+ .find(".udex-list__group-content")
2566
+ .should("not.have.class", "udex-list__group-content--nested");
2567
+ });
2568
+
2533
2569
  const collapsedGroupWithSelectionFixture = <div style="width: 350px; position:relative;">
2534
2570
  <UDExSelectBox id="select-box" height="200px" label="Languages">
2535
2571
  <UDExSelectBoxGroupHeader label="Backend Languages" collapsible collapsed>
@@ -2595,6 +2631,70 @@ describe("SelectBox", () => {
2595
2631
  });
2596
2632
  });
2597
2633
 
2634
+ describe("SingleSelect collapsible group headers", () => {
2635
+ // Two collapsible groups; the second sits below the fold so its chevron is a
2636
+ // "lower" header (the failing case in the original bug). No pre-selection needed.
2637
+ const twoCollapsibleGroupsFixture = <div style="width: 350px; position:relative;">
2638
+ <UDExSelectBox id="select-box" height="200px" label="Languages">
2639
+ <UDExSelectBoxGroupHeader label="Backend Languages" collapsible>
2640
+ <UDExSelectBoxItem label="Java"></UDExSelectBoxItem>
2641
+ <UDExSelectBoxItem label="Python"></UDExSelectBoxItem>
2642
+ <UDExSelectBoxItem label="Go"></UDExSelectBoxItem>
2643
+ <UDExSelectBoxItem label="Ruby"></UDExSelectBoxItem>
2644
+ <UDExSelectBoxItem label="Rust"></UDExSelectBoxItem>
2645
+ </UDExSelectBoxGroupHeader>
2646
+ <UDExSelectBoxGroupHeader label="Frontend Languages" collapsible>
2647
+ <UDExSelectBoxItem label="JavaScript"></UDExSelectBoxItem>
2648
+ <UDExSelectBoxItem label="TypeScript"></UDExSelectBoxItem>
2649
+ </UDExSelectBoxGroupHeader>
2650
+ </UDExSelectBox>
2651
+ </div>;
2652
+
2653
+ it("collapses a lower group header on a single chevron click (no focus-steal double click)", () => {
2654
+ cy.mount(twoCollapsibleGroupsFixture);
2655
+ cy.get("#select-box").shadow().find(".udex-text-field__trigger").click();
2656
+ cy.get("#select-box").shadow().find(".udex-select-box__dropdown").should("have.attr", "open");
2657
+
2658
+ // The second (lower) group starts expanded.
2659
+ cy.get("#select-box").shadow()
2660
+ .find("[udex-list-group-header]").eq(1)
2661
+ .should("not.have.attr", "collapsed");
2662
+
2663
+ // A single click on its chevron must collapse it. Previously DOM focus jumped to
2664
+ // the header body div, triggering a focusout→refocus + scroll-into-view that shifted
2665
+ // the chevron and ate the first click, so the group only collapsed on the second.
2666
+ cy.get("#select-box").shadow()
2667
+ .find("[udex-list-group-header]").eq(1).shadow()
2668
+ .find(".udex-list__group-heading__icon").click();
2669
+
2670
+ cy.get("#select-box").shadow()
2671
+ .find("[udex-list-group-header]").eq(1)
2672
+ .should("have.attr", "collapsed");
2673
+ });
2674
+
2675
+ it("Enter on a group header does not select its items", () => {
2676
+ cy.mount(groupHeaderCollapsibleSingleSelect);
2677
+ cy.get("#select-box").shadow().find(".udex-text-field__search").click();
2678
+ cy.realPress("ArrowDown");
2679
+
2680
+ // The collapsible group header is the active descendant (DOM focus stays on input).
2681
+ cy.get("#select-box").shadow()
2682
+ .find("udex-list-group-header")
2683
+ .should("have.attr", "_active-descendant");
2684
+
2685
+ cy.realPress("Enter");
2686
+
2687
+ // A SingleSelect group header is not a selectable option: Enter must select nothing.
2688
+ cy.get("[udex-select-box-item]").each($item => {
2689
+ cy.wrap($item).should("not.have.attr", "selected");
2690
+ });
2691
+
2692
+ // The dropdown stays open (Enter did not commit a selection or close it).
2693
+ cy.get("#select-box").shadow()
2694
+ .find(".udex-select-box__dropdown").should("have.attr", "open");
2695
+ });
2696
+ });
2697
+
2598
2698
  // Tree accessibility pattern: SelectBox uses tree pattern when group headers are present.
2599
2699
  describe("Tree accessibility pattern with group headers", () => {
2600
2700
  const selectBoxMultiSelectGroup = <div style="width: 350px; position:relative;">