@sapudex/web-components 2.60.0 → 2.62.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 (385) hide show
  1. package/cypress/specs/AccordionSpotlight.cy.tsx +43 -2
  2. package/cypress/specs/Carousel.cy.tsx +134 -0
  3. package/cypress/specs/CountrySelector.cy.tsx +233 -6
  4. package/cypress/specs/FilterMenu.cy.tsx +39 -45
  5. package/cypress/specs/List.cy.tsx +624 -10
  6. package/cypress/specs/ListItem.cy.tsx +50 -0
  7. package/cypress/specs/SecondaryNavigationDesktop.cy.tsx +52 -3
  8. package/cypress/specs/SelectBox.cy.tsx +276 -136
  9. package/cypress/specs/SelectBoxAccessibility.cy.tsx +3109 -0
  10. package/cypress/specs/SideNavigation.cy.tsx +509 -0
  11. package/cypress/specs/Table.cy.tsx +90 -0
  12. package/cypress/specs/TagGroup.cy.tsx +168 -0
  13. package/cypress/support/component-imports.instrumented.ts +6 -0
  14. package/cypress/support/component-imports.src.ts +6 -0
  15. package/dist/AccordionSpotlight.d.ts +7 -2
  16. package/dist/AccordionSpotlight.js +31 -6
  17. package/dist/AccordionSpotlight.js.map +1 -1
  18. package/dist/AccordionSpotlightItem.d.ts +3 -1
  19. package/dist/AccordionSpotlightItem.js +3 -1
  20. package/dist/AccordionSpotlightItem.js.map +1 -1
  21. package/dist/Carousel.d.ts +2 -0
  22. package/dist/Carousel.js +35 -4
  23. package/dist/Carousel.js.map +1 -1
  24. package/dist/CountrySelector.js +1 -3
  25. package/dist/CountrySelector.js.map +1 -1
  26. package/dist/List.d.ts +2 -0
  27. package/dist/List.js +22 -4
  28. package/dist/List.js.map +1 -1
  29. package/dist/ListGroupHeader.js +5 -1
  30. package/dist/ListGroupHeader.js.map +1 -1
  31. package/dist/ListGroupHeaderBase.d.ts +2 -0
  32. package/dist/ListGroupHeaderBase.js +15 -2
  33. package/dist/ListGroupHeaderBase.js.map +1 -1
  34. package/dist/ListGroupHeaderTemplate.js +14 -22
  35. package/dist/ListGroupHeaderTemplate.js.map +1 -1
  36. package/dist/ListItem.d.ts +1 -2
  37. package/dist/ListItem.js +14 -12
  38. package/dist/ListItem.js.map +1 -1
  39. package/dist/ListItemBase.d.ts +5 -0
  40. package/dist/ListItemBase.js +11 -1
  41. package/dist/ListItemBase.js.map +1 -1
  42. package/dist/ListItemTemplate.js +1 -1
  43. package/dist/ListItemTemplate.js.map +1 -1
  44. package/dist/ListSelectAllTemplate.js +1 -1
  45. package/dist/ListSelectAllTemplate.js.map +1 -1
  46. package/dist/ListTemplate.js +2 -1
  47. package/dist/ListTemplate.js.map +1 -1
  48. package/dist/Pagination.d.ts +0 -1
  49. package/dist/Pagination.js +2 -2
  50. package/dist/Pagination.js.map +1 -1
  51. package/dist/Search.d.ts +13 -3
  52. package/dist/Search.js +36 -11
  53. package/dist/Search.js.map +1 -1
  54. package/dist/SearchableListBase.d.ts +2 -0
  55. package/dist/SearchableListBase.js +13 -3
  56. package/dist/SearchableListBase.js.map +1 -1
  57. package/dist/SearchableListBaseTemplate.js +42 -34
  58. package/dist/SearchableListBaseTemplate.js.map +1 -1
  59. package/dist/SecondaryNavigation.d.ts +2 -1
  60. package/dist/SecondaryNavigation.js.map +1 -1
  61. package/dist/SecondaryNavigationItem.js +12 -6
  62. package/dist/SecondaryNavigationItem.js.map +1 -1
  63. package/dist/SecondaryNavigationTemplate.js +1 -2
  64. package/dist/SecondaryNavigationTemplate.js.map +1 -1
  65. package/dist/SelectBase.d.ts +18 -33
  66. package/dist/SelectBase.js +125 -140
  67. package/dist/SelectBase.js.map +1 -1
  68. package/dist/SelectBox.d.ts +3 -0
  69. package/dist/SelectBox.js +19 -7
  70. package/dist/SelectBox.js.map +1 -1
  71. package/dist/SelectBoxTemplate.js +3 -3
  72. package/dist/SelectBoxTemplate.js.map +1 -1
  73. package/dist/SideNavigation.d.ts +23 -0
  74. package/dist/SideNavigation.js +39 -0
  75. package/dist/SideNavigation.js.map +1 -1
  76. package/dist/SideNavigationItem.d.ts +10 -0
  77. package/dist/SideNavigationItem.js +69 -0
  78. package/dist/SideNavigationItem.js.map +1 -1
  79. package/dist/SideNavigationItemTemplate.d.ts +2 -0
  80. package/dist/SideNavigationItemTemplate.js +15 -0
  81. package/dist/SideNavigationItemTemplate.js.map +1 -0
  82. package/dist/SideNavigationMobile.js +1 -2
  83. package/dist/SideNavigationMobile.js.map +1 -1
  84. package/dist/SideNavigationMobileTemplate.js +1 -1
  85. package/dist/SideNavigationMobileTemplate.js.map +1 -1
  86. package/dist/SideNavigationSubItem.d.ts +23 -0
  87. package/dist/SideNavigationSubItem.js +105 -1
  88. package/dist/SideNavigationSubItem.js.map +1 -1
  89. package/dist/SideNavigationSubItemTemplate.d.ts +2 -0
  90. package/dist/SideNavigationSubItemTemplate.js +9 -0
  91. package/dist/SideNavigationSubItemTemplate.js.map +1 -0
  92. package/dist/Table.js +1 -1
  93. package/dist/Table.js.map +1 -1
  94. package/dist/TableCell.d.ts +8 -2
  95. package/dist/TableCell.js +13 -11
  96. package/dist/TableCell.js.map +1 -1
  97. package/dist/TableCellBase.d.ts +2 -1
  98. package/dist/TableCellBase.js +9 -0
  99. package/dist/TableCellBase.js.map +1 -1
  100. package/dist/TableHeaderCell.d.ts +0 -1
  101. package/dist/TableHeaderCell.js +0 -4
  102. package/dist/TableHeaderCell.js.map +1 -1
  103. package/dist/TableRow.d.ts +10 -0
  104. package/dist/TableRow.js +23 -0
  105. package/dist/TableRow.js.map +1 -1
  106. package/dist/TagGroup.d.ts +3 -0
  107. package/dist/TagGroup.js +31 -0
  108. package/dist/TagGroup.js.map +1 -1
  109. package/dist/TagGroupTemplate.js +1 -1
  110. package/dist/TagGroupTemplate.js.map +1 -1
  111. package/dist/UploadItem.js +3 -4
  112. package/dist/UploadItem.js.map +1 -1
  113. package/dist/assets/{InputSuggestions-DyNcKgip.js → InputSuggestions-BPKrPqPb.js} +1 -1
  114. package/dist/assets/{ListItemStandardExpandableTextTemplate-qdKPzaOQ.js → ListItemStandardExpandableTextTemplate-DkdOcCxC.js} +1 -1
  115. package/dist/assets/{bundle.esm-sUYwSJOp.js → bundle.esm-17Yt5gDr.js} +234 -235
  116. package/dist/css/themes/AccordionSpotlight.css +1 -1
  117. package/dist/css/themes/Contact.css +1 -1
  118. package/dist/css/themes/EventRibbon.css +1 -1
  119. package/dist/css/themes/Feed.css +1 -1
  120. package/dist/css/themes/HeroBanner.css +1 -1
  121. package/dist/css/themes/ImageGridCloud.css +1 -1
  122. package/dist/css/themes/ImageGridTicker.css +1 -1
  123. package/dist/css/themes/ImageGridTickerItem.css +1 -1
  124. package/dist/css/themes/LinkList.css +1 -1
  125. package/dist/css/themes/ListGroupHeader.css +1 -1
  126. package/dist/css/themes/MastheadCountrySelector.css +1 -1
  127. package/dist/css/themes/MastheadItem.css +1 -1
  128. package/dist/css/themes/MastheadMenu.css +1 -1
  129. package/dist/css/themes/MastheadMenuItem.css +1 -1
  130. package/dist/css/themes/MastheadMobileMenu.css +1 -1
  131. package/dist/css/themes/MastheadProfileMenu.css +1 -1
  132. package/dist/css/themes/MastheadShell.css +1 -1
  133. package/dist/css/themes/MessageStrip.css +1 -1
  134. package/dist/css/themes/Modal.css +1 -1
  135. package/dist/css/themes/PromoTile.css +1 -1
  136. package/dist/css/themes/Quote.css +1 -1
  137. package/dist/css/themes/Review.css +1 -1
  138. package/dist/css/themes/ReviewItem.css +1 -1
  139. package/dist/css/themes/SecondaryNavigation.css +1 -1
  140. package/dist/css/themes/SecondaryNavigationItem.css +1 -1
  141. package/dist/css/themes/SelectBase.css +1 -1
  142. package/dist/css/themes/SideNavigation.css +1 -1
  143. package/dist/css/themes/SideNavigationItem.css +1 -1
  144. package/dist/css/themes/SideNavigationMobile.css +1 -1
  145. package/dist/css/themes/SideNavigationSubItem.css +1 -1
  146. package/dist/css/themes/TabNavigation.css +1 -1
  147. package/dist/css/themes/Table.css +1 -1
  148. package/dist/css/themes/TableCellBase.css +1 -1
  149. package/dist/css/themes/Upload.css +1 -1
  150. package/dist/css/themes/UploadItem.css +1 -1
  151. package/dist/custom-elements-internal.json +162 -19
  152. package/dist/custom-elements.json +151 -26
  153. package/dist/generated/i18n/i18n-defaults.d.ts +2 -1
  154. package/dist/generated/i18n/i18n-defaults.js +2 -1
  155. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  156. package/dist/generated/themes/AccordionSpotlight.css.d.ts +1 -1
  157. package/dist/generated/themes/AccordionSpotlight.css.js +1 -1
  158. package/dist/generated/themes/AccordionSpotlight.css.js.map +1 -1
  159. package/dist/generated/themes/Contact.css.d.ts +1 -1
  160. package/dist/generated/themes/Contact.css.js +1 -1
  161. package/dist/generated/themes/Contact.css.js.map +1 -1
  162. package/dist/generated/themes/EventRibbon.css.d.ts +1 -1
  163. package/dist/generated/themes/EventRibbon.css.js +1 -1
  164. package/dist/generated/themes/EventRibbon.css.js.map +1 -1
  165. package/dist/generated/themes/Feed.css.d.ts +1 -1
  166. package/dist/generated/themes/Feed.css.js +1 -1
  167. package/dist/generated/themes/Feed.css.js.map +1 -1
  168. package/dist/generated/themes/HeroBanner.css.d.ts +1 -1
  169. package/dist/generated/themes/HeroBanner.css.js +1 -1
  170. package/dist/generated/themes/HeroBanner.css.js.map +1 -1
  171. package/dist/generated/themes/ImageGridCloud.css.d.ts +1 -1
  172. package/dist/generated/themes/ImageGridCloud.css.js +1 -1
  173. package/dist/generated/themes/ImageGridCloud.css.js.map +1 -1
  174. package/dist/generated/themes/ImageGridTicker.css.d.ts +1 -1
  175. package/dist/generated/themes/ImageGridTicker.css.js +1 -1
  176. package/dist/generated/themes/ImageGridTicker.css.js.map +1 -1
  177. package/dist/generated/themes/ImageGridTickerItem.css.d.ts +1 -1
  178. package/dist/generated/themes/ImageGridTickerItem.css.js +1 -1
  179. package/dist/generated/themes/ImageGridTickerItem.css.js.map +1 -1
  180. package/dist/generated/themes/LinkList.css.d.ts +1 -1
  181. package/dist/generated/themes/LinkList.css.js +1 -1
  182. package/dist/generated/themes/LinkList.css.js.map +1 -1
  183. package/dist/generated/themes/ListGroupHeader.css.d.ts +1 -1
  184. package/dist/generated/themes/ListGroupHeader.css.js +1 -1
  185. package/dist/generated/themes/ListGroupHeader.css.js.map +1 -1
  186. package/dist/generated/themes/MastheadCountrySelector.css.d.ts +1 -1
  187. package/dist/generated/themes/MastheadCountrySelector.css.js +1 -1
  188. package/dist/generated/themes/MastheadCountrySelector.css.js.map +1 -1
  189. package/dist/generated/themes/MastheadItem.css.d.ts +1 -1
  190. package/dist/generated/themes/MastheadItem.css.js +1 -1
  191. package/dist/generated/themes/MastheadItem.css.js.map +1 -1
  192. package/dist/generated/themes/MastheadMenu.css.d.ts +1 -1
  193. package/dist/generated/themes/MastheadMenu.css.js +1 -1
  194. package/dist/generated/themes/MastheadMenu.css.js.map +1 -1
  195. package/dist/generated/themes/MastheadMenuItem.css.d.ts +1 -1
  196. package/dist/generated/themes/MastheadMenuItem.css.js +1 -1
  197. package/dist/generated/themes/MastheadMenuItem.css.js.map +1 -1
  198. package/dist/generated/themes/MastheadMobileMenu.css.d.ts +1 -1
  199. package/dist/generated/themes/MastheadMobileMenu.css.js +1 -1
  200. package/dist/generated/themes/MastheadMobileMenu.css.js.map +1 -1
  201. package/dist/generated/themes/MastheadProfileMenu.css.d.ts +1 -1
  202. package/dist/generated/themes/MastheadProfileMenu.css.js +1 -1
  203. package/dist/generated/themes/MastheadProfileMenu.css.js.map +1 -1
  204. package/dist/generated/themes/MastheadShell.css.d.ts +1 -1
  205. package/dist/generated/themes/MastheadShell.css.js +1 -1
  206. package/dist/generated/themes/MastheadShell.css.js.map +1 -1
  207. package/dist/generated/themes/MessageStrip.css.d.ts +1 -1
  208. package/dist/generated/themes/MessageStrip.css.js +1 -1
  209. package/dist/generated/themes/MessageStrip.css.js.map +1 -1
  210. package/dist/generated/themes/Modal.css.d.ts +1 -1
  211. package/dist/generated/themes/Modal.css.js +1 -1
  212. package/dist/generated/themes/Modal.css.js.map +1 -1
  213. package/dist/generated/themes/PromoTile.css.d.ts +1 -1
  214. package/dist/generated/themes/PromoTile.css.js +1 -1
  215. package/dist/generated/themes/PromoTile.css.js.map +1 -1
  216. package/dist/generated/themes/Quote.css.d.ts +1 -1
  217. package/dist/generated/themes/Quote.css.js +1 -1
  218. package/dist/generated/themes/Quote.css.js.map +1 -1
  219. package/dist/generated/themes/Review.css.d.ts +1 -1
  220. package/dist/generated/themes/Review.css.js +1 -1
  221. package/dist/generated/themes/Review.css.js.map +1 -1
  222. package/dist/generated/themes/ReviewItem.css.d.ts +1 -1
  223. package/dist/generated/themes/ReviewItem.css.js +1 -1
  224. package/dist/generated/themes/ReviewItem.css.js.map +1 -1
  225. package/dist/generated/themes/SecondaryNavigation.css.d.ts +1 -1
  226. package/dist/generated/themes/SecondaryNavigation.css.js +1 -1
  227. package/dist/generated/themes/SecondaryNavigation.css.js.map +1 -1
  228. package/dist/generated/themes/SecondaryNavigationItem.css.d.ts +1 -1
  229. package/dist/generated/themes/SecondaryNavigationItem.css.js +1 -1
  230. package/dist/generated/themes/SecondaryNavigationItem.css.js.map +1 -1
  231. package/dist/generated/themes/SelectBase.css.d.ts +1 -1
  232. package/dist/generated/themes/SelectBase.css.js +1 -1
  233. package/dist/generated/themes/SelectBase.css.js.map +1 -1
  234. package/dist/generated/themes/SideNavigation.css.d.ts +1 -1
  235. package/dist/generated/themes/SideNavigation.css.js +1 -1
  236. package/dist/generated/themes/SideNavigation.css.js.map +1 -1
  237. package/dist/generated/themes/SideNavigationItem.css.d.ts +1 -1
  238. package/dist/generated/themes/SideNavigationItem.css.js +1 -1
  239. package/dist/generated/themes/SideNavigationItem.css.js.map +1 -1
  240. package/dist/generated/themes/SideNavigationMobile.css.d.ts +1 -1
  241. package/dist/generated/themes/SideNavigationMobile.css.js +1 -1
  242. package/dist/generated/themes/SideNavigationMobile.css.js.map +1 -1
  243. package/dist/generated/themes/SideNavigationSubItem.css.d.ts +1 -1
  244. package/dist/generated/themes/SideNavigationSubItem.css.js +1 -1
  245. package/dist/generated/themes/SideNavigationSubItem.css.js.map +1 -1
  246. package/dist/generated/themes/TabNavigation.css.d.ts +1 -1
  247. package/dist/generated/themes/TabNavigation.css.js +1 -1
  248. package/dist/generated/themes/TabNavigation.css.js.map +1 -1
  249. package/dist/generated/themes/Table.css.d.ts +1 -1
  250. package/dist/generated/themes/Table.css.js +1 -1
  251. package/dist/generated/themes/Table.css.js.map +1 -1
  252. package/dist/generated/themes/TableCellBase.css.d.ts +1 -1
  253. package/dist/generated/themes/TableCellBase.css.js +1 -1
  254. package/dist/generated/themes/TableCellBase.css.js.map +1 -1
  255. package/dist/generated/themes/Upload.css.d.ts +1 -1
  256. package/dist/generated/themes/Upload.css.js +1 -1
  257. package/dist/generated/themes/Upload.css.js.map +1 -1
  258. package/dist/generated/themes/UploadItem.css.d.ts +1 -1
  259. package/dist/generated/themes/UploadItem.css.js +1 -1
  260. package/dist/generated/themes/UploadItem.css.js.map +1 -1
  261. package/dist/messagebundle.properties +3 -0
  262. package/dist/types/Table.d.ts +6 -2
  263. package/dist/types/Table.js +7 -2
  264. package/dist/types/Table.js.map +1 -1
  265. package/dist/vscode.html-custom-data.json +48 -7
  266. package/dist/web-types.json +88 -14
  267. package/package.json +1 -1
  268. package/run-cypress.js +8 -1
  269. package/src/AccordionSpotlight.ts +35 -6
  270. package/src/AccordionSpotlightItem.ts +3 -1
  271. package/src/Carousel.ts +39 -4
  272. package/src/CountrySelector.ts +1 -3
  273. package/src/List.ts +21 -4
  274. package/src/ListGroupHeader.ts +5 -1
  275. package/src/ListGroupHeaderBase.ts +16 -2
  276. package/src/ListGroupHeaderTemplate.tsx +29 -47
  277. package/src/ListItem.ts +14 -13
  278. package/src/ListItemBase.ts +14 -1
  279. package/src/ListItemTemplate.tsx +4 -4
  280. package/src/ListSelectAllTemplate.tsx +10 -8
  281. package/src/ListTemplate.tsx +14 -10
  282. package/src/Pagination.ts +2 -3
  283. package/src/Search.ts +48 -13
  284. package/src/SearchableListBase.ts +15 -3
  285. package/src/SearchableListBaseTemplate.tsx +51 -37
  286. package/src/SecondaryNavigation.ts +2 -1
  287. package/src/SecondaryNavigationItem.ts +14 -6
  288. package/src/SecondaryNavigationTemplate.tsx +4 -6
  289. package/src/SelectBase.ts +131 -145
  290. package/src/SelectBox.ts +21 -7
  291. package/src/SelectBoxTemplate.tsx +10 -9
  292. package/src/SideNavigation.ts +35 -0
  293. package/src/SideNavigationItem.ts +77 -0
  294. package/src/SideNavigationItemTemplate.tsx +97 -0
  295. package/src/SideNavigationMobile.ts +1 -2
  296. package/src/SideNavigationMobileTemplate.tsx +2 -1
  297. package/src/SideNavigationSubItem.ts +119 -2
  298. package/src/SideNavigationSubItemTemplate.tsx +57 -0
  299. package/src/Table.ts +1 -2
  300. package/src/TableCell.ts +9 -12
  301. package/src/TableCellBase.ts +10 -1
  302. package/src/TableHeaderCell.ts +0 -5
  303. package/src/TableRow.ts +20 -0
  304. package/src/TagGroup.ts +32 -0
  305. package/src/TagGroupTemplate.tsx +1 -1
  306. package/src/UploadItem.ts +3 -5
  307. package/src/generated/i18n/i18n-defaults.ts +2 -2
  308. package/src/generated/themes/AccordionSpotlight.css.ts +1 -1
  309. package/src/generated/themes/Contact.css.ts +1 -1
  310. package/src/generated/themes/EventRibbon.css.ts +1 -1
  311. package/src/generated/themes/Feed.css.ts +1 -1
  312. package/src/generated/themes/HeroBanner.css.ts +1 -1
  313. package/src/generated/themes/ImageGridCloud.css.ts +1 -1
  314. package/src/generated/themes/ImageGridTicker.css.ts +1 -1
  315. package/src/generated/themes/ImageGridTickerItem.css.ts +1 -1
  316. package/src/generated/themes/LinkList.css.ts +1 -1
  317. package/src/generated/themes/ListGroupHeader.css.ts +1 -1
  318. package/src/generated/themes/MastheadCountrySelector.css.ts +1 -1
  319. package/src/generated/themes/MastheadItem.css.ts +1 -1
  320. package/src/generated/themes/MastheadMenu.css.ts +1 -1
  321. package/src/generated/themes/MastheadMenuItem.css.ts +1 -1
  322. package/src/generated/themes/MastheadMobileMenu.css.ts +1 -1
  323. package/src/generated/themes/MastheadProfileMenu.css.ts +1 -1
  324. package/src/generated/themes/MastheadShell.css.ts +1 -1
  325. package/src/generated/themes/MessageStrip.css.ts +1 -1
  326. package/src/generated/themes/Modal.css.ts +1 -1
  327. package/src/generated/themes/PromoTile.css.ts +1 -1
  328. package/src/generated/themes/Quote.css.ts +1 -1
  329. package/src/generated/themes/Review.css.ts +1 -1
  330. package/src/generated/themes/ReviewItem.css.ts +1 -1
  331. package/src/generated/themes/SecondaryNavigation.css.ts +1 -1
  332. package/src/generated/themes/SecondaryNavigationItem.css.ts +1 -1
  333. package/src/generated/themes/SelectBase.css.ts +1 -1
  334. package/src/generated/themes/SideNavigation.css.ts +1 -1
  335. package/src/generated/themes/SideNavigationItem.css.ts +1 -1
  336. package/src/generated/themes/SideNavigationMobile.css.ts +1 -1
  337. package/src/generated/themes/SideNavigationSubItem.css.ts +1 -1
  338. package/src/generated/themes/TabNavigation.css.ts +1 -1
  339. package/src/generated/themes/Table.css.ts +1 -1
  340. package/src/generated/themes/TableCellBase.css.ts +1 -1
  341. package/src/generated/themes/Upload.css.ts +1 -1
  342. package/src/generated/themes/UploadItem.css.ts +1 -1
  343. package/src/i18n/messagebundle.properties +3 -0
  344. package/src/themes/AccordionSpotlight.css +11 -8
  345. package/src/themes/Contact.css +1 -1
  346. package/src/themes/EventRibbon.css +4 -4
  347. package/src/themes/Feed.css +2 -2
  348. package/src/themes/HeroBanner.css +3 -3
  349. package/src/themes/ImageGridCloud.css +1 -1
  350. package/src/themes/ImageGridTicker.css +1 -1
  351. package/src/themes/ImageGridTickerItem.css +1 -1
  352. package/src/themes/LinkList.css +4 -4
  353. package/src/themes/ListGroupHeader.css +2 -43
  354. package/src/themes/MastheadCountrySelector.css +1 -1
  355. package/src/themes/MastheadItem.css +4 -4
  356. package/src/themes/MastheadMenu.css +1 -1
  357. package/src/themes/MastheadMenuItem.css +1 -1
  358. package/src/themes/MastheadMobileMenu.css +2 -2
  359. package/src/themes/MastheadProfileMenu.css +1 -1
  360. package/src/themes/MastheadShell.css +4 -4
  361. package/src/themes/MessageStrip.css +7 -2
  362. package/src/themes/Modal.css +1 -1
  363. package/src/themes/PromoTile.css +4 -3
  364. package/src/themes/Quote.css +2 -2
  365. package/src/themes/Review.css +2 -2
  366. package/src/themes/ReviewItem.css +2 -2
  367. package/src/themes/SecondaryNavigation.css +1 -2
  368. package/src/themes/SecondaryNavigationItem.css +3 -6
  369. package/src/themes/SelectBase.css +1 -1
  370. package/src/themes/SideNavigation.css +31 -8
  371. package/src/themes/SideNavigationItem.css +100 -22
  372. package/src/themes/SideNavigationMobile.css +65 -20
  373. package/src/themes/SideNavigationSubItem.css +15 -54
  374. package/src/themes/TabNavigation.css +2 -2
  375. package/src/themes/Table.css +7 -2
  376. package/src/themes/TableCellBase.css +8 -0
  377. package/src/themes/Upload.css +1 -1
  378. package/src/themes/UploadItem.css +1 -1
  379. package/src/types/Table.ts +6 -2
  380. package/dist/css/themes/SideNavigationMobileDropdown.css +0 -1
  381. package/dist/generated/themes/SideNavigationMobileDropdown.css.d.ts +0 -2
  382. package/dist/generated/themes/SideNavigationMobileDropdown.css.js +0 -8
  383. package/dist/generated/themes/SideNavigationMobileDropdown.css.js.map +0 -1
  384. package/src/generated/themes/SideNavigationMobileDropdown.css.ts +0 -9
  385. package/src/themes/SideNavigationMobileDropdown.css +0 -29
@@ -12,7 +12,7 @@ import { getAllAccessibleNameRefTexts } from "@ui5/webcomponents-base/dist/util/
12
12
  import { cleanLabel } from "./utils/listItemLabelUtils.js";
13
13
  import "@ui5/webcomponents-icons/dist/decline.js";
14
14
  import "@ui5/webcomponents-icons/dist/navigation-down-arrow.js";
15
- import { COUNTRY_SELECT, STARS, SELECTED, UNSELECTED, INDETERMINATE, DISABLED, EXPANDED, COLLAPSED, } from "./generated/i18n/i18n-defaults.js";
15
+ import { COUNTRY_SELECT, STARS, SELECTED, UNSELECTED, INDETERMINATE, EXPANDED, } from "./generated/i18n/i18n-defaults.js";
16
16
  import SearchableListBaseTemplate from "./SearchableListBaseTemplate.js";
17
17
  import CountrySelectorTemplate from "./CountrySelectorTemplate.js";
18
18
  import ResizeHandler from "@ui5/webcomponents-base/delegate/ResizeHandler.js";
@@ -62,10 +62,9 @@ class UDExSelectBase extends UDExSearchableListBase {
62
62
  */
63
63
  this._navigating = false;
64
64
  /**
65
- * Text read by screen readers when the active item changes.
66
- * Announced via an aria-live="assertive" region in the template.
67
- * This works regardless of shadow DOM / popover teleportation because
68
- * the live region lives inside SelectBox's own shadow root.
65
+ * Supplemental status announced by the polite live region.
66
+ * Navigation uses native host semantics only. Opening and explicit selection
67
+ * changes retain feedback without repeating the hierarchy or input token count.
69
68
  *
70
69
  * @private
71
70
  */
@@ -81,6 +80,7 @@ class UDExSelectBase extends UDExSearchableListBase {
81
80
  this._lastSelectedItemId = "";
82
81
  this._listKeyDownListenerAdded = false;
83
82
  this._activeDescendantItem = null;
83
+ this._pendingSelectionAnnouncement = "";
84
84
  this._handleResizeBound = this._handleResize.bind(this);
85
85
  this._handleListKeyDownBound = this._handleListKeyDownCapture.bind(this);
86
86
  }
@@ -141,14 +141,14 @@ class UDExSelectBase extends UDExSearchableListBase {
141
141
  return raw === 0 ? lastIndex : raw - 1;
142
142
  }
143
143
  /**
144
- * Sets or clears the aria-activedescendant on the combobox input and updates
145
- * the aria-live region so JAWS/VoiceOver announce the item name and position.
146
- * The live region is the primary announcement mechanism because aria-activedescendant
147
- * across a UI5 Popover (which teleports content to document.body) is unreliable —
148
- * screen readers cannot follow the ID reference across shadow root boundaries.
144
+ * Sets or clears the aria-activedescendant on the combobox input.
145
+ * The referenced host owns its name, hierarchy and state; do not repeat these
146
+ * in the live region on navigation.
149
147
  */
150
148
  _setActiveDescendant(item, scroll = true) {
151
149
  this._activeDescendantItem = item;
150
+ this._navigating = !!item;
151
+ this._liveRegionText = "";
152
152
  // Query the SelectBox's OWN shadow DOM for all elements bearing the class —
153
153
  // this reaches the rendered udex-list-group-header / udex-list-item elements
154
154
  // regardless of whether they are the current or a previously stale instance.
@@ -159,21 +159,11 @@ class UDExSelectBase extends UDExSearchableListBase {
159
159
  });
160
160
  if (!item) {
161
161
  this._search.removeAttribute("aria-activedescendant");
162
- this._liveRegionText = "";
163
162
  return;
164
163
  }
165
164
  item.classList.add("_udex-active-descendant");
166
165
  item.setAttribute("_active-descendant", "");
167
- this._search.setAttribute("aria-activedescendant", item._id);
168
- // Update the live region with tree-aware position and state so JAWS/VoiceOver
169
- // announce the active item regardless of whether the popover is teleported to document.body.
170
- if (this._list) {
171
- const label = cleanLabel(item.label ?? "");
172
- const supporting = item.supportingText ? cleanLabel(item.supportingText) : "";
173
- const stateParts = this._itemStateLabels(item);
174
- const posText = this._treePositionText(item);
175
- this._liveRegionText = [label, supporting, posText, ...stateParts].filter(Boolean).join(", ");
176
- }
166
+ this._search.setAttribute("aria-activedescendant", item.id);
177
167
  if (scroll && this._list?._scrollIntoView) {
178
168
  // Only scroll if the item is not already fully visible in the dropdown.
179
169
  const popoverContent = this._popover?.shadowRoot?.querySelector("[part=content]");
@@ -190,6 +180,38 @@ class UDExSelectBase extends UDExSearchableListBase {
190
180
  }
191
181
  }
192
182
  }
183
+ /** Announce explicit selection after the rendered host has caught up with source changes. @private */
184
+ _announceSelectionChange() {
185
+ const item = this._activeDescendantItem;
186
+ this._liveRegionText = "";
187
+ renderFinished().then(() => {
188
+ if (this._open && item && this._activeDescendantItem === item) {
189
+ this._liveRegionText = this._selectionAnnouncement(item);
190
+ }
191
+ }).catch(() => { });
192
+ }
193
+ /** Explicit activation feedback is distinct from native navigation announcements. @private */
194
+ _selectionAnnouncement(item) {
195
+ // CountrySelector sources are data objects, not DOM elements.
196
+ const name = item.getAttribute?.("aria-label") || [item.label, item.supportingText, item.getAttribute?.("additional-text"), item.hasRating ? item.ratingAriaLabel : undefined]
197
+ .filter(Boolean).map(text => cleanLabel(text)).join(" ");
198
+ const selectionState = item.selected ? SELECTED : UNSELECTED;
199
+ const state = translate(UDExSelectBase, item.indeterminate ? INDETERMINATE : selectionState);
200
+ return [name, state].filter(Boolean).join(", ");
201
+ }
202
+ /** Close feedback must survive clearing the active descendant. @private */
203
+ _finishDropdownClose() {
204
+ this._setActiveDescendant(null);
205
+ this._open = false;
206
+ this._liveRegionText = this._pendingSelectionAnnouncement;
207
+ this._pendingSelectionAnnouncement = "";
208
+ this.fireEventDropdownClose();
209
+ }
210
+ handleAccordionIconClick(e) {
211
+ super.handleAccordionIconClick(e);
212
+ // The host's aria-expanded owns this feedback; discard stale selection status.
213
+ this._liveRegionText = "";
214
+ }
193
215
  /**
194
216
  * Activates the first navigable item as the aria-activedescendant without moving DOM focus.
195
217
  */
@@ -223,6 +245,7 @@ class UDExSelectBase extends UDExSearchableListBase {
223
245
  if (this.showImageFlags) {
224
246
  this.handleImagePosition(items, targetIndex);
225
247
  }
248
+ return items[targetIndex];
226
249
  }
227
250
  /**
228
251
  * Navigates to the item at the given index, updating aria-activedescendant and _selectedOption.
@@ -370,8 +393,14 @@ class UDExSelectBase extends UDExSearchableListBase {
370
393
  this.resetSearchState();
371
394
  if (this.modeSingleSelect) {
372
395
  // SingleSelect closes the dropdown — clear active descendant.
396
+ const selectedItem = this.getItemFromList(this.getDataTokenId(item));
397
+ if (selectedItem) {
398
+ this._pendingSelectionAnnouncement = this._selectionAnnouncement(selectedItem);
399
+ }
373
400
  this._setActiveDescendant(null);
374
- this._search.focus();
401
+ if (this.shadowRoot?.activeElement !== this._search) {
402
+ this._search.focus();
403
+ }
375
404
  this.closeDropdown();
376
405
  return;
377
406
  }
@@ -388,11 +417,10 @@ class UDExSelectBase extends UDExSearchableListBase {
388
417
  // Return DOM focus to the input so the clicked item loses its :focus ring.
389
418
  // Without this, the browser keeps focus on the item (from the click) and a
390
419
  // second ring appears when arrow keys move _activeDescendantItem elsewhere.
391
- this._search.focus();
392
- // Re-announce with the updated checked/unchecked state. The rendered item's
393
- // `selected` prop is updated on the next render cycle (template re-render),
394
- // so we wait for it before re-reading state labels.
395
- renderFinished().then(() => this._announceCurrentOrFirst()).catch(() => { });
420
+ if (this.shadowRoot?.activeElement !== this._search) {
421
+ this._search.focus();
422
+ }
423
+ this._announceSelectionChange();
396
424
  }
397
425
  onKeyDownSearch(e) {
398
426
  const items = this._list?.getKeyboardNavigationItems();
@@ -437,8 +465,9 @@ class UDExSelectBase extends UDExSearchableListBase {
437
465
  }
438
466
  if (isDownAndPopoverClosed) {
439
467
  e.preventDefault();
468
+ // Opening establishes the active descendant and its visual highlight;
469
+ // DOM focus remains on the input for the combobox interaction pattern.
440
470
  this.openDropdown();
441
- this._activateSelectedOrFirstItem();
442
471
  return;
443
472
  }
444
473
  if (isDownAndPopoverOpened) {
@@ -451,9 +480,9 @@ class UDExSelectBase extends UDExSearchableListBase {
451
480
  this._navigateToIndex(items, nextIndex);
452
481
  }
453
482
  else {
454
- this._activateFirstItem();
483
+ this._activateSelectedOrFirstItem();
455
484
  // Also update _selectedOption so the input reflects the active item.
456
- const activeIdx = (items[0]?.nonInteractive && !items[0]?.collapsible) ? 1 : 0;
485
+ const activeIdx = this._activeDescendantItem ? items.indexOf(this._activeDescendantItem) : firstIndex;
457
486
  this._selectedOption = items[activeIdx].label;
458
487
  if (this.showImageFlags) {
459
488
  this.handleImagePosition(items, activeIdx);
@@ -499,7 +528,15 @@ class UDExSelectBase extends UDExSearchableListBase {
499
528
  }
500
529
  // Group header: fire header-press (same event the click handler fires) so
501
530
  // handleHeaderPress → onHeaderPress → handleGroupHeaderSelection runs.
502
- activeItem.fireDecoratorEvent("header-press", { item: activeItem });
531
+ // List's legacy intersection type omits SelectAll although it is a
532
+ // navigable group. Narrow using its explicit discriminator.
533
+ const selectAllItem = activeItem;
534
+ if (selectAllItem.isSelectAllHeader) {
535
+ selectAllItem.fireDecoratorEvent("select-all", { item: activeItem });
536
+ }
537
+ else {
538
+ activeItem.fireDecoratorEvent("header-press", { item: activeItem });
539
+ }
503
540
  }
504
541
  else {
505
542
  // Leaf item: fire item-press so the list handles selection consistently.
@@ -534,7 +571,7 @@ class UDExSelectBase extends UDExSearchableListBase {
534
571
  return;
535
572
  }
536
573
  // Sync _selectedOption display for the first item (used when popover just opened via click).
537
- if (!this._activeDescendantItem && hasItems) {
574
+ if (popoverOpened && !this._activeDescendantItem && hasItems) {
538
575
  this._selectedOption = items[firstIndex].label;
539
576
  }
540
577
  }
@@ -551,11 +588,10 @@ class UDExSelectBase extends UDExSearchableListBase {
551
588
  }
552
589
  onSearch(value) {
553
590
  super.onSearch(value);
554
- // Route search result count into the shared live region so SelectBox
555
- // only needs one aria-live span (no separate polite span in the template).
556
- if (this._accSearchResultInfo) {
557
- this._liveRegionText = this._accSearchResultInfo;
558
- }
591
+ // Filtering may remove the active item. Announce only the result count until
592
+ // the user navigates to an item in the updated list.
593
+ this._setActiveDescendant(null);
594
+ this._liveRegionText = this._accSearchResultInfo ?? "";
559
595
  }
560
596
  handleDirection() {
561
597
  const directionStyles = window.getComputedStyle(this).getPropertyValue("direction");
@@ -572,9 +608,7 @@ class UDExSelectBase extends UDExSearchableListBase {
572
608
  this.fireEventDropdownBeforeOpen();
573
609
  }
574
610
  handleDropdownOpen() {
575
- // Clear first so the live-region mutation fires even if text is unchanged.
576
- this._liveRegionText = "";
577
- // Defer scroll and announcement until rendering settles.
611
+ // Defer scrolling until rendering settles.
578
612
  // Calling _handleDropdownScroll synchronously causes getBoundingClientRect
579
613
  // to read mid-transition positions (e.g. the max-height animation on
580
614
  // collapsible group headers), producing an incorrect scroll offset.
@@ -584,64 +618,23 @@ class UDExSelectBase extends UDExSearchableListBase {
584
618
  this._expandCollapsedGroupsWithSelection();
585
619
  return renderFinished();
586
620
  }).then(() => {
587
- if (!this._activeDescendantItem) {
588
- this._activateSelectedOrFirstItem();
621
+ // The popup may have closed while its opening render was pending.
622
+ if (!this._open) {
623
+ return;
624
+ }
625
+ if (!this._activeDescendantItem && !this._shouldFilterItems) {
626
+ const activeItem = this._activateSelectedOrFirstItem();
627
+ // JAWS can miss the input's native expanded change when opening also
628
+ // establishes an active descendant. Retain the popup fallback unless an
629
+ // expanded group already supplies native "open"/"expanded" feedback.
630
+ // Never repeat the host's hierarchy or state after the native usage hint.
631
+ this._liveRegionText = activeItem?.getAttribute("aria-expanded") === "true"
632
+ ? "" : translate(UDExSelectBase, EXPANDED);
589
633
  }
590
634
  this._handleDropdownScroll();
591
- this._announceCurrentOrFirst();
592
635
  }).catch(() => { });
593
636
  this.fireEventDropdownOpen();
594
637
  }
595
- /**
596
- * Announces the currently active descendant item (if set), or the first
597
- * navigable item as a fallback. Used on open and after state changes.
598
- */
599
- _announceCurrentOrFirst() {
600
- const items = this._list?.getKeyboardNavigationItems();
601
- if (!items?.length) {
602
- return;
603
- }
604
- const item = this._activeDescendantItem ?? items.find(i => !i.nonInteractive || i.collapsible) ?? items[0];
605
- if (!item) {
606
- return;
607
- }
608
- const label = cleanLabel(item.label ?? "");
609
- const stateParts = this._itemStateLabels(item);
610
- const posText = this._treePositionText(item);
611
- this._liveRegionText = [label, posText, ...stateParts].filter(Boolean).join(", ");
612
- }
613
- /**
614
- * Returns the positional announcement text for an item, tree-aware when the
615
- * list has groups. Matches the JAWS reading pattern of FilterMenu:
616
- * group header → "level 0, X of Y" (Y = total navigable groups)
617
- * group child → "level 1, X of Y" (Y = siblings in that group)
618
- * flat item → "X of Y" (Y = total items, no level prefix)
619
- */
620
- _treePositionText(item) {
621
- if (!this.isTreeStructure) {
622
- const items = this._list?.getKeyboardNavigationItems() ?? [];
623
- const pos = items.indexOf(item);
624
- return pos >= 0 ? `${pos + 1} of ${items.length}` : "";
625
- }
626
- if (item.isGroup) {
627
- // Position among navigable group headers.
628
- const groups = (this._list?.getKeyboardNavigationItems() ?? []).filter(i => i.isGroup);
629
- const pos = groups.indexOf(item);
630
- return pos >= 0 ? `level 0, ${pos + 1} of ${groups.length}` : "level 0";
631
- }
632
- // Child item — find parent group and count siblings visible in navigation.
633
- const parentGroup = item.parentElement;
634
- if (parentGroup?.isGroup) {
635
- const navItems = this._list?.getKeyboardNavigationItems() ?? [];
636
- const siblings = navItems.filter(i => !i.isGroup && i.parentElement === parentGroup);
637
- const pos = siblings.indexOf(item);
638
- return pos >= 0 ? `level 1, ${pos + 1} of ${siblings.length}` : "level 1";
639
- }
640
- // Fallback: flat position.
641
- const all = this._list?.getKeyboardNavigationItems() ?? [];
642
- const pos = all.indexOf(item);
643
- return pos >= 0 ? `${pos + 1} of ${all.length}` : "";
644
- }
645
638
  fireEventDropdownBeforeOClose() {
646
639
  this.fireDecoratorEvent("before-close");
647
640
  }
@@ -672,10 +665,21 @@ class UDExSelectBase extends UDExSearchableListBase {
672
665
  }
673
666
  }
674
667
  openDropdown() {
668
+ if (this._popover.open) {
669
+ return;
670
+ }
671
+ this._pendingSelectionAnnouncement = "";
672
+ // Typing computes its result count before opening; preserve that status.
673
+ if (!this._shouldFilterItems) {
674
+ this._liveRegionText = "";
675
+ }
675
676
  this._popover.opener = this._trigger;
676
- this._popover.open = true;
677
677
  this._open = true;
678
- this._navigating = true;
678
+ this._navigating = false;
679
+ // Expose native state immediately. handleDropdownOpen supplements it after
680
+ // rendering because JAWS may miss this change on the first opening.
681
+ this._search.setAttribute("aria-expanded", "true");
682
+ this._popover.open = true;
679
683
  this._focused = false;
680
684
  }
681
685
  closeDropdown() {
@@ -683,6 +687,7 @@ class UDExSelectBase extends UDExSearchableListBase {
683
687
  this._open = false;
684
688
  this._popover.open = false;
685
689
  this._navigating = false;
690
+ this._search.setAttribute("aria-expanded", "false");
686
691
  }
687
692
  }
688
693
  inputFocusIn() {
@@ -739,16 +744,12 @@ class UDExSelectBase extends UDExSearchableListBase {
739
744
  return false;
740
745
  }
741
746
  // Left only collapses an expanded group; Right only expands a collapsed one.
742
- if (collapse && !header.collapsed) {
743
- header.collapsed = true;
744
- this._list.setCollapsedItems(true, header);
745
- renderFinished().then(() => this._announceCurrentOrFirst()).catch(() => { });
746
- return true;
747
- }
748
- if (!collapse && header.collapsed) {
749
- header.collapsed = false;
750
- this._list.setCollapsedItems(false, header);
751
- renderFinished().then(() => this._announceCurrentOrFirst()).catch(() => { });
747
+ if (header.collapsed !== collapse) {
748
+ header.collapsed = collapse;
749
+ this._list.setCollapsedItems(collapse, header);
750
+ // Synchronize the slotted source header just like a chevron click;
751
+ // UI5 template listeners subscribe to the prefixed decorator event.
752
+ header.fireDecoratorEvent("accordion-icon-click", { collapsed: collapse });
752
753
  return true;
753
754
  }
754
755
  // Target is a collapsible header but already in the requested state — still consume
@@ -900,49 +901,26 @@ class UDExSelectBase extends UDExSearchableListBase {
900
901
  };
901
902
  findAndFocus(this);
902
903
  }
903
- /**
904
- * Builds the state portion of the live region announcement for a navigation item.
905
- * Returns an array of state strings (e.g. ["collapsed", "Checked"]) to be joined
906
- * with the label and position. Handles:
907
- * - collapsible group headers: expanded / collapsed
908
- * - MultiSelect: Checked / Unchecked / Indeterminate
909
- * - SingleSelect (tree): Selected / Unselected
910
- * - disabled: Disabled
911
- */
912
- _itemStateLabels(item) {
913
- const parts = [];
914
- if (item.collapsible) {
915
- parts.push(translate(UDExSearchableListBase, item.expanded ? EXPANDED : COLLAPSED));
916
- }
917
- if (item.disabled) {
918
- parts.push(translate(UDExSearchableListBase, DISABLED));
919
- }
920
- else if (item.modeMultiSelect || (item.isGroup && this.modeMultiSelect)) {
921
- if (item.indeterminate) {
922
- parts.push(translate(UDExSearchableListBase, INDETERMINATE));
923
- }
924
- else {
925
- parts.push(translate(UDExSearchableListBase, item.selected ? SELECTED : UNSELECTED));
926
- }
927
- }
928
- else if (this.isTreeStructure && item.selected) {
929
- // SingleSelect tree: only announce "Selected" when the item is actually selected.
930
- parts.push(translate(UDExSearchableListBase, SELECTED));
931
- }
932
- return parts;
933
- }
934
904
  get ariaDescribedbyText() {
905
+ const descriptions = [this.supportingText];
906
+ // Updating the token-count description while an item is active makes JAWS
907
+ // reread the input instead of the item whose selection just changed.
908
+ if (this._navigating) {
909
+ return descriptions.filter(Boolean).join(" ");
910
+ }
935
911
  if (this.modeSingleSelect) {
936
- return this._navigating ? "" : this._selectedOption;
912
+ descriptions.push(this._selectedOption);
913
+ return descriptions.filter(Boolean).join(" ");
937
914
  }
938
915
  const tags = this.selectedItems.filter(item => !item.isGroup);
939
916
  // Tokenizer.i18nBundle may not be loaded yet on direct page load.
940
917
  // Return empty string until the bundle is available; the component re-renders
941
918
  // once i18n is ready and will pick up the correct text.
942
919
  if (!Tokenizer.i18nBundle) {
943
- return "";
920
+ return descriptions.filter(Boolean).join(" ");
944
921
  }
945
- return getTokensCountText(tags.length);
922
+ descriptions.push(getTokensCountText(tags.length));
923
+ return descriptions.filter(Boolean).join(" ");
946
924
  }
947
925
  get trigger() {
948
926
  return this.shadowRoot.querySelector(".udex-text-field__wrap");
@@ -975,6 +953,9 @@ class UDExSelectBase extends UDExSearchableListBase {
975
953
  "ariaLabel": getAllAccessibleNameRefTexts(this) || this.accessibleName || this.label || translate(UDExSelectBase, COUNTRY_SELECT),
976
954
  };
977
955
  }
956
+ get listAccessibleName() {
957
+ return this.accInfo.ariaLabel;
958
+ }
978
959
  get popoverId() {
979
960
  return `${this._id}_${this._dropdownClass}`;
980
961
  }
@@ -988,7 +969,11 @@ class UDExSelectBase extends UDExSearchableListBase {
988
969
  return true;
989
970
  }
990
971
  get isTreeStructure() {
991
- return this._filteredItems.some(e => e.isGroup);
972
+ // Options flatten their descendants in the accessibility tree. Action
973
+ // buttons therefore need treeitems even in an otherwise flat popup, so
974
+ // their own names, roles and keyboard interaction remain available.
975
+ return this._filteredItems.some(({ isGroup, item }) => isGroup
976
+ || !!item.querySelector?.("[slot='firstIcon'], [slot='secondIcon']"));
992
977
  }
993
978
  get hideDropdownSearch() {
994
979
  return true;