@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
@@ -1,6 +1,10 @@
1
1
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
2
2
  import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
3
3
  import SideNavigationItem from "@ui5/webcomponents-fiori/dist/SideNavigationItem.js";
4
+ import type SideNavigationItemBase from "@ui5/webcomponents-fiori/dist/SideNavigationItemBase.js";
5
+ import type SideNavigationSelectableItemBase from "@ui5/webcomponents-fiori/dist/SideNavigationSelectableItemBase.js";
6
+ import type UDExSideNavigationSubItem from "./SideNavigationSubItem.js";
7
+ import SideNavigationItemTemplate from "./SideNavigationItemTemplate.js";
4
8
 
5
9
  // Styles
6
10
  import SideNavigationItemCss from "./generated/themes/SideNavigationItem.css.js";
@@ -26,10 +30,83 @@ import { isDesktop } from "@ui5/webcomponents-base";
26
30
  @customElement({
27
31
  tag: "udex-side-navigation-item",
28
32
  renderer: jsxRenderer,
33
+ template: SideNavigationItemTemplate,
29
34
  styles: [SideNavigationItem.styles, SideNavigationItemCss],
30
35
  })
31
36
 
32
37
  class UDExSideNavigationItem extends SideNavigationItem {
38
+ get _selected() {
39
+ if (this.sideNavCollapsed) {
40
+ return this.selected || this.items.some(item => item.selected);
41
+ }
42
+ return this.selected;
43
+ }
44
+
45
+ get focusableItems(): Array<SideNavigationItemBase> {
46
+ // Recurse one level into expanded level-2 sub-items so their level-3 children join
47
+ // the Side Navigation's keyboard focus set (UI5's base getter is flat). Only one level
48
+ // of recursion is needed because the component supports at most three nesting levels.
49
+ if (!this.sideNavCollapsed && this.expanded) {
50
+ return [this, ...this.items.reduce((result, item) => {
51
+ return result.concat((item as UDExSideNavigationSubItem).focusableItems || [item]);
52
+ }, new Array<SideNavigationItemBase>())];
53
+ }
54
+ return super.focusableItems;
55
+ }
56
+
57
+ get selectableItems(): Array<SideNavigationSelectableItemBase> {
58
+ // Recurse one level into level-2 sub-items so their level-3 children are part of the
59
+ // Side Navigation's selection registry (UI5's base getter is flat). Without this the
60
+ // selection sweep in SideNavigation._selectItem never reaches level 3, so selecting a
61
+ // level-3 item would not deselect items at other levels, and vice versa.
62
+ return this.items.reduce((result, item) => {
63
+ return result.concat((item as UDExSideNavigationSubItem).selectableItems || [item]);
64
+ }, new Array<SideNavigationSelectableItemBase>(this));
65
+ }
66
+
67
+ get allItems(): Array<SideNavigationItemBase> {
68
+ // Recurse one level into level-2 sub-items so level-3 children are enumerated by
69
+ // SideNavigation._getAllItems. That loop wires `sideNavigation` (and collapsed state)
70
+ // onto every item; without this, level-3 items never get `sideNavigation` set and
71
+ // their click handler cannot reach SideNavigation._handleItemClick to fire selection-change.
72
+ return this.items.reduce((result, item) => {
73
+ return result.concat((item as UDExSideNavigationSubItem).allItems || [item]);
74
+ }, new Array<SideNavigationItemBase>(this));
75
+ }
76
+
77
+ _initialExpandDone = false;
78
+
79
+ onBeforeRendering() {
80
+ super.onBeforeRendering();
81
+ // Open the group once on initial render if it contains a selected child, so the
82
+ // selection is visible. Do not re-apply on later renders — that would prevent the
83
+ // user from collapsing a group while one of its children stays selected.
84
+ if (!this._initialExpandDone) {
85
+ this._initialExpandDone = true;
86
+ if (!this.sideNavCollapsed && !this.expanded && this.items.some(item => item.selected)) {
87
+ this.expanded = true;
88
+ }
89
+ }
90
+ }
91
+
92
+ _onclick(e: MouseEvent) {
93
+ // A grouping item (one with sub-items) toggles expand/collapse on click and
94
+ // never navigates — a parent with children must not have an href. Only leaf
95
+ // items navigate, so they fall through to the base handler.
96
+ if (this.hasSubItems && !this.sideNavCollapsed) {
97
+ e.preventDefault();
98
+ e.stopPropagation();
99
+ this.expanded = !this.expanded;
100
+ return;
101
+ }
102
+ super._onclick(e);
103
+ }
104
+
105
+ _onToggleClick(e: CustomEvent) {
106
+ e.preventDefault();
107
+ super._onToggleClick(e);
108
+ }
109
+
33
110
  onEnterDOM() {
34
111
  this.setAttribute("id", this._id);
35
112
 
@@ -0,0 +1,97 @@
1
+ import Icon from "@ui5/webcomponents/dist/Icon.js";
2
+ import navRightArrow from "@ui5/webcomponents-icons/dist/navigation-right-arrow.js";
3
+ import arrowRight from "@ui5/webcomponents-icons/dist/arrow-right.js";
4
+ import type UDExSideNavigationItem from "./SideNavigationItem.js";
5
+
6
+ export default function SideNavigationItemTemplate(this: UDExSideNavigationItem) {
7
+ if (this.sideNavCollapsed) {
8
+ return ItemTemplate.call(this);
9
+ }
10
+
11
+ return (
12
+ <li id={this._id} class="ui5-sn-list-li" role="none">
13
+ {ItemTemplate.call(this)}
14
+ </li>
15
+ );
16
+ }
17
+
18
+ function ItemTemplate(this: UDExSideNavigationItem) {
19
+ const EffectiveTag = this._effectiveTag;
20
+
21
+ return (
22
+ <>
23
+ <EffectiveTag
24
+ id={this._id}
25
+ data-sap-focus-ref
26
+ class={`ui5-sn-item ui5-sn-item-level1 ${this._classes}`}
27
+ role={this.ariaRole}
28
+ onKeyDown={this._onkeydown}
29
+ onKeyUp={this._onkeyup}
30
+ onClick={this._onclick}
31
+ onFocusIn={this._onfocusin}
32
+ tabIndex={this.effectiveTabIndex}
33
+ aria-current={this._ariaCurrent}
34
+ aria-selected={this._ariaSelected}
35
+ title={this._tooltip}
36
+ aria-disabled={this.effectiveDisabled}
37
+ href={this._href}
38
+ target={this._target}
39
+ aria-haspopup={this._ariaHasPopup}
40
+ onFocusOut={this._onfocusout}
41
+ onMouseEnter={this._onmouseenter}
42
+ onMouseLeave={this._onmouseleave}
43
+ aria-checked={this._ariaChecked}
44
+ aria-owns={this._groupId}
45
+ aria-label={this._ariaLabel}
46
+ aria-expanded={this._expanded}
47
+ aria-labelledby={this._textId}
48
+ aria-describedby={this._describedBy}>
49
+ {this.sideNavCollapsed ? (
50
+ <Icon class="ui5-sn-item-icon" name={this.icon} />
51
+ ) : (
52
+ this.icon && <Icon class="ui5-sn-item-icon" name={this.icon} />
53
+ )}
54
+ <div class="ui5-sn-item-text" id={this._textId}>{this.text}</div>
55
+ {this.hasTag && (
56
+ <div id={this._tagId} class="ui5-sn-item-tag-slot">
57
+ <slot name="tag" />
58
+ </div>
59
+ )}
60
+ {this.sideNavCollapsed ? (
61
+ !!this.items.length && (
62
+ <div class="ui5-sn-item-toggle-icon-wrap">
63
+ <Icon class="ui5-sn-item-toggle-icon" name={navRightArrow} />
64
+ </div>
65
+ )
66
+ ) : (
67
+ !!this.items.length && (
68
+ <div class="ui5-sn-item-toggle-icon-wrap">
69
+ <Icon
70
+ class="ui5-sn-item-toggle-icon"
71
+ name={navRightArrow}
72
+ accessibleName={this._arrowTooltip}
73
+ showTooltip={true}
74
+ onClick={this._onToggleClick}
75
+ />
76
+ </div>
77
+ )
78
+ )}
79
+ {this.isExternalLink && (
80
+ <Icon class="ui5-sn-item-external-link-icon" name={arrowRight} />
81
+ )}
82
+ </EffectiveTag>
83
+ {!this.sideNavCollapsed && !!this.items.length && (
84
+ <ul
85
+ id={this._groupId}
86
+ class="ui5-sn-item-ul"
87
+ aria-label={this.accessibleName || this.text}
88
+ role="group">
89
+ <slot />
90
+ </ul>
91
+ )}
92
+ {this._selectableItemDescriptionText && (
93
+ <span id={this._selectableItemDescriptionId} class="ui5-hidden-text">{this._selectableItemDescriptionText}</span>
94
+ )}
95
+ </>
96
+ );
97
+ }
@@ -12,7 +12,6 @@ import type UDExSideNavigationGroup from "./SideNavigationGroup.js";
12
12
 
13
13
  // Styles
14
14
  import SideNavigationMobileCss from "./generated/themes/SideNavigationMobile.css.js";
15
- import SideNavigationMobileDropdownCss from "./generated/themes/SideNavigationMobileDropdown.css.js";
16
15
 
17
16
  export type SelectedItem = UDExSideNavigationItem | UDExSideNavigationSubItem | null;
18
17
 
@@ -37,7 +36,7 @@ export type SelectedItem = UDExSideNavigationItem | UDExSideNavigationSubItem |
37
36
  tag: "udex-side-navigation-mobile",
38
37
  renderer: jsxRenderer,
39
38
  template: SideNavigationMobileTemplate,
40
- styles: [SideNavigationMobileCss, SideNavigationMobileDropdownCss],
39
+ styles: [SideNavigationMobileCss],
41
40
  })
42
41
 
43
42
  class UDExSideNavigationMobile extends UI5Element {
@@ -51,7 +51,8 @@ export default function SideNavigationMobileTemplate(this: UDExSideNavigationMob
51
51
  }}>
52
52
  <UDExSideNavigation
53
53
  ref={this._setNavItems}
54
- onSelectionChange={this._handleSelectionChanged as any}>
54
+ onSelectionChange={this._handleSelectionChanged as any}
55
+ {...{ "in-mobile": "" }}>
55
56
  </UDExSideNavigation>
56
57
  </UDExDropdown>
57
58
  </>
@@ -1,9 +1,20 @@
1
1
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
2
2
  import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
3
+ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
4
+ import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
5
+ import type { DefaultSlot } from "@ui5/webcomponents-base/dist/UI5Element.js";
6
+ import {
7
+ isLeft,
8
+ isRight,
9
+ isMinus,
10
+ isPlus,
11
+ } from "@ui5/webcomponents-base/dist/Keys.js";
3
12
  import SideNavigationSubItem from "@ui5/webcomponents-fiori/dist/SideNavigationSubItem.js";
13
+ import SideNavigationSubItemTemplate from "./SideNavigationSubItemTemplate.js";
4
14
 
5
15
  // Styles
6
16
  import SideNavigationSubItemCss from "./generated/themes/SideNavigationSubItem.css.js";
17
+ import SideNavigationItemCss from "./generated/themes/SideNavigationItem.css.js";
7
18
 
8
19
  /**
9
20
  * @class
@@ -25,10 +36,116 @@ import SideNavigationSubItemCss from "./generated/themes/SideNavigationSubItem.c
25
36
  @customElement({
26
37
  tag: "udex-side-navigation-sub-item",
27
38
  renderer: jsxRenderer,
28
- styles: [SideNavigationSubItem.styles, SideNavigationSubItemCss],
39
+ template: SideNavigationSubItemTemplate,
40
+ styles: [SideNavigationSubItem.styles, SideNavigationItemCss, SideNavigationSubItemCss],
41
+ dependencies: [UDExSideNavigationSubItem],
29
42
  })
30
43
 
31
- class UDExSideNavigationSubItem extends SideNavigationSubItem {}
44
+ class UDExSideNavigationSubItem extends SideNavigationSubItem {
45
+ /**
46
+ * Defines whether the sub-item is expanded (shows level-3 children).
47
+ *
48
+ * @default false
49
+ * @public
50
+ */
51
+ @property({ type: Boolean })
52
+ expanded = false;
53
+
54
+ /**
55
+ * Defines the level-3 sub-items slotted inside this sub-item.
56
+ * @public
57
+ */
58
+ @slot({ type: HTMLElement, invalidateOnChildChange: true, "default": true })
59
+ subItems!: DefaultSlot<UDExSideNavigationSubItem>;
60
+
61
+ get hasSubItems() {
62
+ return this.subItems.length > 0;
63
+ }
64
+
65
+ get focusableItems(): Array<UDExSideNavigationSubItem> {
66
+ if (this.hasSubItems && this.expanded) {
67
+ return [this, ...this.subItems];
68
+ }
69
+ return [this];
70
+ }
71
+
72
+ get selectableItems(): Array<UDExSideNavigationSubItem> {
73
+ // Expose this level-2 sub-item plus its level-3 children so the Side Navigation's
74
+ // selection registry (built by UDExSideNavigationItem.selectableItems) reaches level 3.
75
+ return this.hasSubItems ? [this, ...this.subItems] : [this];
76
+ }
77
+
78
+ get allItems(): Array<UDExSideNavigationSubItem> {
79
+ // Expose this sub-item plus its level-3 children so SideNavigation._getAllItems wires
80
+ // `sideNavigation` and collapsed state onto level-3 items. Without it, a level-3 leaf's
81
+ // click handler has no `sideNavigation` reference and cannot fire selection-change.
82
+ return this.hasSubItems ? [this, ...this.subItems] : [this];
83
+ }
84
+
85
+ onBeforeRendering() {
86
+ super.onBeforeRendering();
87
+ this.subItems.forEach(subItem => {
88
+ if (!subItem.hasAttribute("nested")) { subItem.setAttribute("nested", ""); }
89
+ });
90
+ }
91
+
92
+ get _subGroupId(): string | undefined {
93
+ return this.hasSubItems ? `${this._id}-group` : undefined;
94
+ }
95
+
96
+ get _subExpanded(): boolean | undefined {
97
+ return this.hasSubItems ? this.expanded : undefined;
98
+ }
99
+
100
+ _onToggleClick(e: Event) {
101
+ e.stopPropagation();
102
+ e.preventDefault();
103
+ this.expanded = !this.expanded;
104
+ }
105
+
106
+ _onkeydown(e: KeyboardEvent) {
107
+ if (this.hasSubItems && !this.sideNavCollapsed) {
108
+ const isRTL = this.effectiveDir === "rtl";
109
+ if (isLeft(e)) {
110
+ e.preventDefault();
111
+ this.expanded = isRTL;
112
+ return;
113
+ }
114
+ if (isRight(e)) {
115
+ e.preventDefault();
116
+ this.expanded = !isRTL;
117
+ return;
118
+ }
119
+ if (isMinus(e)) {
120
+ e.preventDefault();
121
+ this.expanded = false;
122
+ return;
123
+ }
124
+ if (isPlus(e)) {
125
+ e.preventDefault();
126
+ this.expanded = true;
127
+ return;
128
+ }
129
+ }
130
+ // Level-3 leaves fall through to the base, which activates on Enter and fires
131
+ // selection-change — the same behaviour as level-1 and level-2 leaves.
132
+ super._onkeydown(e);
133
+ }
134
+
135
+ _onclick(e: MouseEvent) {
136
+ // A group sub-item (one with sub-items) toggles expand/collapse and never navigates —
137
+ // a parent with children must not have an href. A leaf (including a level-3 leaf) falls
138
+ // through to the base handler, which fires selection-change and navigates via its href,
139
+ // exactly like level-1 and level-2 leaves.
140
+ if (this.hasSubItems) {
141
+ e.preventDefault();
142
+ e.stopPropagation();
143
+ this.expanded = !this.expanded;
144
+ } else {
145
+ super._onclick(e);
146
+ }
147
+ }
148
+ }
32
149
 
33
150
  UDExSideNavigationSubItem.define();
34
151
 
@@ -0,0 +1,57 @@
1
+ import Icon from "@ui5/webcomponents/dist/Icon.js";
2
+ import arrowRight from "@ui5/webcomponents-icons/dist/arrow-right.js";
3
+ import navRightArrow from "@ui5/webcomponents-icons/dist/navigation-right-arrow.js";
4
+ import type UDExSideNavigationSubItem from "./SideNavigationSubItem.js";
5
+
6
+ export default function SideNavigationSubItemTemplate(this: UDExSideNavigationSubItem) {
7
+ const EffectiveTag = this._effectiveTag;
8
+ return (
9
+ <li id={this._id} class="ui5-sn-list-li" role="none">
10
+ <EffectiveTag
11
+ id={this._id}
12
+ data-sap-focus-ref
13
+ class={`ui5-sn-item ui5-sn-item-level2 ${this._classes}`}
14
+ role={this.ariaRole}
15
+ onKeyDown={this._onkeydown}
16
+ onKeyUp={this._onkeyup}
17
+ onClick={this._onclick}
18
+ onFocusIn={this._onfocusin}
19
+ tabIndex={this.effectiveTabIndex}
20
+ aria-current={this._ariaCurrent}
21
+ aria-selected={this._ariaSelected}
22
+ aria-label={this.accessibleName || undefined}
23
+ title={this._tooltip}
24
+ aria-disabled={this.effectiveDisabled}
25
+ href={this._href}
26
+ target={this._target}
27
+ aria-haspopup={this._ariaHasPopup}
28
+ aria-describedby={this._describedBy}
29
+ aria-expanded={this._subExpanded}
30
+ aria-owns={this._subGroupId}
31
+ >
32
+ {this.icon && <Icon class="ui5-sn-item-icon" name={this.icon} />}
33
+ <div class="ui5-sn-item-text" id={this._textId}>{this.text}</div>
34
+ {this.hasTag && (
35
+ <div id={this._tagId} class="ui5-sn-item-tag-slot">
36
+ <slot name="tag" />
37
+ </div>
38
+ )}
39
+ {this.hasSubItems && (
40
+ <div class="ui5-sn-item-toggle-icon-wrap">
41
+ <Icon
42
+ class="ui5-sn-item-toggle-icon"
43
+ name={navRightArrow}
44
+ onClick={(e: Event) => this._onToggleClick(e)}
45
+ />
46
+ </div>
47
+ )}
48
+ {this.isExternalLink && <Icon class="ui5-sn-item-external-link-icon" name={arrowRight} />}
49
+ </EffectiveTag>
50
+ {this.hasSubItems && (
51
+ <ul id={this._subGroupId} class="ui5-sn-item-ul" role="group">
52
+ <slot />
53
+ </ul>
54
+ )}
55
+ </li>
56
+ );
57
+ }
package/src/Table.ts CHANGED
@@ -15,11 +15,10 @@ import { TABLE_NO_DATA_FOUND } from "./generated/i18n/i18n-defaults.js";
15
15
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
16
16
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
17
17
  import TableTemplate from "./TableTemplate.js";
18
-
18
+ import translate from "./utils/translate.js";
19
19
  // Styles
20
20
  import TableCss from "./generated/themes/Table.css.js";
21
21
  import getEffectiveScrollbarStyle from "./utils/getEffectiveScrollbarStyle.js";
22
- import translate from "./utils/translate.js";
23
22
 
24
23
  export type TableBaseRow = UDExTableHeaderRow | UDExTableRow;
25
24
 
package/src/TableCell.ts CHANGED
@@ -3,6 +3,7 @@ import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
3
3
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
4
4
  import UDExTableCellBase from "./TableCellBase.js";
5
5
  import TableCellTemplate from "./TableCellTemplate.js";
6
+ import { UDExTableCellVerticalAlign } from "./types/Table.js";
6
7
 
7
8
  // Styles
8
9
  import TableCellCss from "./generated/themes/TableCell.css.js";
@@ -50,18 +51,14 @@ class UDExTableCell extends UDExTableCellBase {
50
51
  @property({ type: Boolean })
51
52
  _highlighted?: boolean;
52
53
 
53
- onBeforeRendering() {
54
- super.onBeforeRendering();
55
- this.setJustifyContent();
56
- }
57
-
58
- setJustifyContent(): void {
59
- if (this.horizontalAlign) {
60
- this.style.justifyContent = this.horizontalAlign;
61
- } else {
62
- this.style.justifyContent = `var(--horizontal-align-${(this)._individualSlot})`;
63
- }
64
- }
54
+ /**
55
+ * Determines the vertical alignment of the cell content.
56
+ *
57
+ * @default "Center"
58
+ * @public
59
+ */
60
+ @property()
61
+ verticalAlign: `${UDExTableCellVerticalAlign}` = UDExTableCellVerticalAlign.Center;
65
62
  }
66
63
 
67
64
  UDExTableCell.define();
@@ -4,7 +4,7 @@ import customElement from "@ui5/webcomponents-base/dist/decorators/customElement
4
4
  import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
5
5
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
6
6
  import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
7
- import type UDExTableCellHorizontalAlign from "./types/Table.js";
7
+ import type { UDExTableCellHorizontalAlign } from "./types/Table.js";
8
8
 
9
9
  // Styles
10
10
  import TableCellBaseCss from "./generated/themes/TableCellBase.css.js";
@@ -62,6 +62,15 @@ abstract class UDExTableCellBase extends UI5Element {
62
62
 
63
63
  onBeforeRendering() {
64
64
  this.setAttribute("role", this.ariaRole);
65
+ this.setJustifyContent();
66
+ }
67
+
68
+ setJustifyContent(): void {
69
+ if (this.horizontalAlign) {
70
+ this.style.justifyContent = this.horizontalAlign;
71
+ } else {
72
+ this.style.justifyContent = `var(--horizontal-align-${this._individualSlot})`;
73
+ }
65
74
  }
66
75
  }
67
76
 
@@ -61,11 +61,6 @@ class UDExTableHeaderCell extends UDExTableCellBase {
61
61
 
62
62
  protected ariaRole: string = "columnheader";
63
63
 
64
- onBeforeRendering() {
65
- super.onBeforeRendering();
66
- this.style.justifyContent = `var(--horizontal-align-${this._individualSlot})`;
67
- }
68
-
69
64
  get _hasIcons(): boolean {
70
65
  return this.iconStart.length > 0 || this.iconEnd.length > 0;
71
66
  }
package/src/TableRow.ts CHANGED
@@ -4,6 +4,7 @@ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
4
4
  import UDExTableRowBase from "./TableRowBase.js";
5
5
  import type UDExTableCell from "./TableCell.js";
6
6
  import TableRowTemplate from "./TableRowTemplate.js";
7
+ import { UDExTableCellVerticalAlign } from "./types/Table.js";
7
8
 
8
9
  /**
9
10
  * @class
@@ -48,10 +49,21 @@ class UDExTableRow extends UDExTableRowBase {
48
49
  @property({ type: Boolean })
49
50
  highlighted?: boolean;
50
51
 
52
+ /**
53
+ * Determines the vertical alignment of all cells in the row.
54
+ * Applies to every cell that does not define its own verticalAlign.
55
+ *
56
+ * @default "Center"
57
+ * @public
58
+ */
59
+ @property()
60
+ verticalAlign: `${UDExTableCellVerticalAlign}` = UDExTableCellVerticalAlign.Center;
61
+
51
62
  onBeforeRendering(): void {
52
63
  if (this.highlighted) {
53
64
  this._setHighlightToCells();
54
65
  }
66
+ this._setVerticalAlignToCells();
55
67
  }
56
68
 
57
69
  _setHighlightToCells(): void {
@@ -60,6 +72,14 @@ class UDExTableRow extends UDExTableRowBase {
60
72
  });
61
73
  }
62
74
 
75
+ _setVerticalAlignToCells(): void {
76
+ this.cellsInRow.forEach(cell => {
77
+ if (cell.verticalAlign === UDExTableCellVerticalAlign.Center) {
78
+ cell.verticalAlign = this.verticalAlign;
79
+ }
80
+ });
81
+ }
82
+
63
83
  get isGroup(): boolean {
64
84
  return false;
65
85
  }
package/src/TagGroup.ts CHANGED
@@ -188,6 +188,7 @@ class UDExTagGroup extends UI5Element {
188
188
  _nMoreBtn!: HTMLElement | null;
189
189
  _resizeHandler: () => void;
190
190
  _keydownCaptureHandler: (e: KeyboardEvent) => void;
191
+ _observedTokenizer?: Tokenizer;
191
192
 
192
193
  constructor() {
193
194
  super();
@@ -204,10 +205,18 @@ class UDExTagGroup extends UI5Element {
204
205
  ResizeHandler.deregister(this, this._resizeHandler);
205
206
  this.removeEventListener("keydown", this._keydownCaptureHandler, true);
206
207
  this._nMoreBtn?.removeEventListener("keydown", this._nMoreKeyDownHandler);
208
+ this._observedTokenizer?.detachComponentStateFinalized(this._syncTokenizerAriaAfterRendering);
209
+ this._observedTokenizer = undefined;
207
210
  }
208
211
 
209
212
  onAfterRendering(): void {
210
213
  this._tokenizer = this.tokenizer;
214
+ if (this._observedTokenizer !== this._tokenizer) {
215
+ this._observedTokenizer?.detachComponentStateFinalized(this._syncTokenizerAriaAfterRendering);
216
+ this._observedTokenizer = this._tokenizer;
217
+ this._observedTokenizer.attachComponentStateFinalized(this._syncTokenizerAriaAfterRendering);
218
+ }
219
+ this._syncTokenizerAriaAfterRendering();
211
220
  const prevMoreBtn = this._nMoreBtn;
212
221
  this._nMoreBtn = this._tokenizer.moreLink || null;
213
222
 
@@ -231,6 +240,29 @@ class UDExTagGroup extends UI5Element {
231
240
  }
232
241
  }
233
242
 
243
+ /** @private UI5 exposes an empty listbox when all tokens have overflowed. */
244
+ _syncTokenizerAriaAfterRendering = (): void => {
245
+ const tokenizer = this._observedTokenizer;
246
+ renderFinished().then(() => {
247
+ if (!this.isConnected || !tokenizer || this._observedTokenizer !== tokenizer) {
248
+ return;
249
+ }
250
+ const list = tokenizer.shadowRoot?.querySelector<HTMLElement>(".ui5-tokenizer--list");
251
+ if (!list) {
252
+ return;
253
+ }
254
+ const hasVisibleTokens = tokenizer._tokens.some(token => !token.overflows);
255
+ // Do not hide the tokenizer: its sibling "n more" button must stay
256
+ // accessible. Only the list with no exposed options is presentational.
257
+ list.setAttribute("role", hasVisibleTokens ? "listbox" : "presentation");
258
+ if (hasVisibleTokens) {
259
+ list.setAttribute("aria-label", tokenizer.tokenizerLabel);
260
+ } else {
261
+ ["aria-label", "aria-description", "aria-disabled", "aria-readonly"].forEach(attribute => list.removeAttribute(attribute));
262
+ }
263
+ });
264
+ };
265
+
234
266
  _nMoreKeyDownHandler = (e: KeyboardEvent) => {
235
267
  if (isSpace(e) || isEnter(e)) {
236
268
  this.showMoreItems();
@@ -53,7 +53,7 @@ function tag(this: UDExTagGroup, rootClass: string, item: any, index: number) {
53
53
  key={index}
54
54
  accessibleRole="option"
55
55
  class={`${rootClass}__tag`}
56
- data-id={`${item.id}`}
56
+ data-id={item.getAttribute("data-id") ?? item.id}
57
57
  part={`token-${index}`}
58
58
  read-only={this.isReadOrDisplayOnly}
59
59
  id={`${this._id}-tag-group-tag`}
package/src/UploadItem.ts CHANGED
@@ -16,15 +16,13 @@ import type UDExLink from "./Link.js";
16
16
  import UDExButtonSize from "./types/ButtonSize.js";
17
17
  import UploadItemTemplate from "./UploadItemTemplate.js";
18
18
  import translate from "./utils/translate.js";
19
+ import { BreakpointUtils } from "./utils/Breakpoints.js";
19
20
 
20
21
  // Styles
21
22
  import UploadItemCss from "./generated/themes/UploadItem.css.js";
22
23
  import UDExFileUploadState from "./types/FileUploadState.js";
23
24
  import type { DefaultSlot } from "@ui5/webcomponents-base/dist/UI5Element.js";
24
25
 
25
- const BreakpointSizeS: number = 979;
26
- const BreakpointSizeM: number = 1279;
27
-
28
26
  /**
29
27
  * @class
30
28
  *
@@ -182,8 +180,8 @@ class UDExUploadItem extends UDExListItem {
182
180
  }
183
181
 
184
182
  _handleResize() {
185
- this._buttonSize = window.innerWidth <= BreakpointSizeS ? UDExButtonSize.Medium : UDExButtonSize.Large;
186
- this._breakpointL = window.innerWidth > BreakpointSizeM;
183
+ this._buttonSize = BreakpointUtils.isAtMost("S") ? UDExButtonSize.Medium : UDExButtonSize.Large;
184
+ this._breakpointL = BreakpointUtils.isAtLeast("L");
187
185
  this._breakpointM = !this._breakpointL ? true : !this._breakpointL && this.uploadState === UDExFileUploadState.Uploaded;
188
186
  }
189
187