@sapudex/web-components 2.48.0 → 2.50.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 (341) hide show
  1. package/bundle.esm.js +2 -0
  2. package/cypress/specs/AccordionSpotlight.cy.tsx +402 -0
  3. package/cypress/specs/BusyIndicator.cy.tsx +15 -0
  4. package/cypress/specs/Carousel.cy.tsx +142 -0
  5. package/cypress/specs/FilterMenu.cy.tsx +968 -10
  6. package/cypress/specs/List.cy.tsx +106 -0
  7. package/cypress/specs/ListItem.cy.tsx +291 -1
  8. package/cypress/specs/MediaPlayer.cy.tsx +32 -0
  9. package/cypress/specs/SelectBox.cy.tsx +134 -3
  10. package/cypress/specs/TabNavigation.cy.tsx +56 -0
  11. package/cypress/support/component-imports.instrumented.ts +6 -0
  12. package/cypress/support/component-imports.src.ts +6 -0
  13. package/dist/AccordionSpotlight.d.ts +149 -0
  14. package/dist/AccordionSpotlight.js +284 -0
  15. package/dist/AccordionSpotlight.js.map +1 -0
  16. package/dist/AccordionSpotlightItem.d.ts +76 -0
  17. package/dist/AccordionSpotlightItem.js +115 -0
  18. package/dist/AccordionSpotlightItem.js.map +1 -0
  19. package/dist/AccordionSpotlightItemTemplate.d.ts +2 -0
  20. package/dist/AccordionSpotlightItemTemplate.js +5 -0
  21. package/dist/AccordionSpotlightItemTemplate.js.map +1 -0
  22. package/dist/AccordionSpotlightTemplate.d.ts +2 -0
  23. package/dist/AccordionSpotlightTemplate.js +10 -0
  24. package/dist/AccordionSpotlightTemplate.js.map +1 -0
  25. package/dist/BusyIndicator.d.ts +9 -0
  26. package/dist/BusyIndicator.js +7 -1
  27. package/dist/BusyIndicator.js.map +1 -1
  28. package/dist/Carousel.d.ts +26 -15
  29. package/dist/Carousel.js +71 -55
  30. package/dist/Carousel.js.map +1 -1
  31. package/dist/FilterMenu.d.ts +12 -2
  32. package/dist/FilterMenu.js +24 -4
  33. package/dist/FilterMenu.js.map +1 -1
  34. package/dist/FilterMenuTemplate.js +1 -1
  35. package/dist/FilterMenuTemplate.js.map +1 -1
  36. package/dist/HeroBanner.d.ts +18 -9
  37. package/dist/HeroBanner.js +38 -35
  38. package/dist/HeroBanner.js.map +1 -1
  39. package/dist/HeroBannerTemplate.js +2 -2
  40. package/dist/HeroBannerTemplate.js.map +1 -1
  41. package/dist/List.d.ts +1 -0
  42. package/dist/List.js +24 -11
  43. package/dist/List.js.map +1 -1
  44. package/dist/ListGroupHeader.js +5 -1
  45. package/dist/ListGroupHeader.js.map +1 -1
  46. package/dist/ListGroupHeaderBase.d.ts +22 -0
  47. package/dist/ListGroupHeaderBase.js +44 -0
  48. package/dist/ListGroupHeaderBase.js.map +1 -1
  49. package/dist/ListItem.d.ts +4 -0
  50. package/dist/ListItem.js +32 -0
  51. package/dist/ListItem.js.map +1 -1
  52. package/dist/MediaPlayer.d.ts +2 -0
  53. package/dist/MediaPlayer.js +12 -0
  54. package/dist/MediaPlayer.js.map +1 -1
  55. package/dist/PromoTile.js +1 -1
  56. package/dist/PromoTile.js.map +1 -1
  57. package/dist/SearchableListBase.d.ts +10 -1
  58. package/dist/SearchableListBase.js +23 -7
  59. package/dist/SearchableListBase.js.map +1 -1
  60. package/dist/SearchableListBaseTemplate.js +3 -2
  61. package/dist/SearchableListBaseTemplate.js.map +1 -1
  62. package/dist/SelectBase.d.ts +14 -0
  63. package/dist/SelectBase.js +56 -3
  64. package/dist/SelectBase.js.map +1 -1
  65. package/dist/SelectBoxTemplate.js +1 -1
  66. package/dist/SelectBoxTemplate.js.map +1 -1
  67. package/dist/TabNavigation.d.ts +7 -1
  68. package/dist/TabNavigation.js +8 -2
  69. package/dist/TabNavigation.js.map +1 -1
  70. package/dist/Wizard.d.ts +5 -0
  71. package/dist/Wizard.js +11 -0
  72. package/dist/Wizard.js.map +1 -1
  73. package/dist/assets/{InputSuggestions-BcK6O4Bk.js → InputSuggestions-DZR626c7.js} +1 -1
  74. package/dist/assets/{ListItemStandardExpandableTextTemplate-u600dmHC.js → ListItemStandardExpandableTextTemplate-D_5VXMzU.js} +1 -1
  75. package/dist/assets/{bundle-JYo3bV8v.css → bundle-CkxyEA8c.css} +1 -1
  76. package/dist/assets/{bundle.esm-C6Ie2WeI.js → bundle.esm-DuQLY8Jz.js} +241 -238
  77. package/dist/assets/messagebundle_ar-BUZ_gTvQ.js +1 -0
  78. package/dist/assets/messagebundle_no-BZQfeWxT.js +1 -0
  79. package/dist/css/themes/Accordion.css +1 -1
  80. package/dist/css/themes/AccordionItem.css +1 -1
  81. package/dist/css/themes/AccordionSpotlight.css +1 -0
  82. package/dist/css/themes/AccordionSpotlightItem.css +1 -0
  83. package/dist/css/themes/Badge.css +1 -1
  84. package/dist/css/themes/BusyIndicator.css +1 -0
  85. package/dist/css/themes/Button.css +1 -1
  86. package/dist/css/themes/Divider.css +1 -1
  87. package/dist/css/themes/Dropdown.css +1 -1
  88. package/dist/css/themes/FilterMenu.css +1 -1
  89. package/dist/css/themes/Footer.css +1 -1
  90. package/dist/css/themes/HeroBanner.css +1 -1
  91. package/dist/css/themes/ImageGridTableItem.css +1 -1
  92. package/dist/css/themes/InputGroup.css +1 -1
  93. package/dist/css/themes/MastheadShell.css +1 -1
  94. package/dist/css/themes/MediaPlayer.css +1 -1
  95. package/dist/css/themes/PhoneNumberField.css +1 -1
  96. package/dist/css/themes/ProgressBar.css +1 -1
  97. package/dist/css/themes/PromoTile.css +1 -1
  98. package/dist/css/themes/RadioButton.css +1 -1
  99. package/dist/css/themes/Review.css +1 -1
  100. package/dist/css/themes/ReviewItem.css +1 -1
  101. package/dist/css/themes/Search.css +1 -1
  102. package/dist/css/themes/SelectBase.css +1 -1
  103. package/dist/css/themes/SelectBox.css +1 -1
  104. package/dist/css/themes/SideNavigation.css +1 -1
  105. package/dist/css/themes/SideNavigationGroup.css +1 -1
  106. package/dist/css/themes/SocialMediaButton.css +1 -1
  107. package/dist/css/themes/StepInput.css +1 -1
  108. package/dist/css/themes/Switch.css +1 -1
  109. package/dist/css/themes/TabNavigation.css +1 -1
  110. package/dist/css/themes/Tag.css +1 -1
  111. package/dist/css/themes/TagGroup.css +1 -1
  112. package/dist/css/themes/TextArea.css +1 -1
  113. package/dist/css/themes/TextField.css +1 -1
  114. package/dist/css/themes/Toast.css +1 -1
  115. package/dist/custom-elements-internal.json +508 -42
  116. package/dist/custom-elements.json +407 -52
  117. package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
  118. package/dist/generated/assets/i18n/messagebundle_no.json +1 -1
  119. package/dist/generated/templates/ListGroupHeaderTemplate.lit.js +24 -21
  120. package/dist/generated/templates/ListGroupHeaderTemplate.lit.js.map +1 -1
  121. package/dist/generated/templates/ListItemTemplate.lit.js +2 -2
  122. package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
  123. package/dist/generated/templates/TabNavigationTemplate.lit.js +1 -1
  124. package/dist/generated/templates/TabNavigationTemplate.lit.js.map +1 -1
  125. package/dist/generated/themes/Accordion.css.d.ts +1 -1
  126. package/dist/generated/themes/Accordion.css.js +1 -1
  127. package/dist/generated/themes/Accordion.css.js.map +1 -1
  128. package/dist/generated/themes/AccordionItem.css.d.ts +1 -1
  129. package/dist/generated/themes/AccordionItem.css.js +1 -1
  130. package/dist/generated/themes/AccordionItem.css.js.map +1 -1
  131. package/dist/generated/themes/AccordionSpotlight.css.d.ts +2 -0
  132. package/dist/generated/themes/AccordionSpotlight.css.js +8 -0
  133. package/dist/generated/themes/AccordionSpotlight.css.js.map +1 -0
  134. package/dist/generated/themes/AccordionSpotlightItem.css.d.ts +2 -0
  135. package/dist/generated/themes/AccordionSpotlightItem.css.js +8 -0
  136. package/dist/generated/themes/AccordionSpotlightItem.css.js.map +1 -0
  137. package/dist/generated/themes/Badge.css.d.ts +1 -1
  138. package/dist/generated/themes/Badge.css.js +1 -1
  139. package/dist/generated/themes/Badge.css.js.map +1 -1
  140. package/dist/generated/themes/BusyIndicator.css.d.ts +2 -0
  141. package/dist/generated/themes/BusyIndicator.css.js +8 -0
  142. package/dist/generated/themes/BusyIndicator.css.js.map +1 -0
  143. package/dist/generated/themes/Button.css.d.ts +1 -1
  144. package/dist/generated/themes/Button.css.js +1 -1
  145. package/dist/generated/themes/Button.css.js.map +1 -1
  146. package/dist/generated/themes/Divider.css.d.ts +1 -1
  147. package/dist/generated/themes/Divider.css.js +1 -1
  148. package/dist/generated/themes/Divider.css.js.map +1 -1
  149. package/dist/generated/themes/Dropdown.css.d.ts +1 -1
  150. package/dist/generated/themes/Dropdown.css.js +1 -1
  151. package/dist/generated/themes/Dropdown.css.js.map +1 -1
  152. package/dist/generated/themes/FilterMenu.css.d.ts +1 -1
  153. package/dist/generated/themes/FilterMenu.css.js +1 -1
  154. package/dist/generated/themes/FilterMenu.css.js.map +1 -1
  155. package/dist/generated/themes/Footer.css.d.ts +1 -1
  156. package/dist/generated/themes/Footer.css.js +1 -1
  157. package/dist/generated/themes/Footer.css.js.map +1 -1
  158. package/dist/generated/themes/HeroBanner.css.d.ts +1 -1
  159. package/dist/generated/themes/HeroBanner.css.js +1 -1
  160. package/dist/generated/themes/HeroBanner.css.js.map +1 -1
  161. package/dist/generated/themes/ImageGridTableItem.css.d.ts +1 -1
  162. package/dist/generated/themes/ImageGridTableItem.css.js +1 -1
  163. package/dist/generated/themes/ImageGridTableItem.css.js.map +1 -1
  164. package/dist/generated/themes/InputGroup.css.d.ts +1 -1
  165. package/dist/generated/themes/InputGroup.css.js +1 -1
  166. package/dist/generated/themes/InputGroup.css.js.map +1 -1
  167. package/dist/generated/themes/MastheadShell.css.d.ts +1 -1
  168. package/dist/generated/themes/MastheadShell.css.js +1 -1
  169. package/dist/generated/themes/MastheadShell.css.js.map +1 -1
  170. package/dist/generated/themes/MediaPlayer.css.d.ts +1 -1
  171. package/dist/generated/themes/MediaPlayer.css.js +1 -1
  172. package/dist/generated/themes/MediaPlayer.css.js.map +1 -1
  173. package/dist/generated/themes/PhoneNumberField.css.d.ts +1 -1
  174. package/dist/generated/themes/PhoneNumberField.css.js +1 -1
  175. package/dist/generated/themes/PhoneNumberField.css.js.map +1 -1
  176. package/dist/generated/themes/ProgressBar.css.d.ts +1 -1
  177. package/dist/generated/themes/ProgressBar.css.js +1 -1
  178. package/dist/generated/themes/ProgressBar.css.js.map +1 -1
  179. package/dist/generated/themes/PromoTile.css.d.ts +1 -1
  180. package/dist/generated/themes/PromoTile.css.js +1 -1
  181. package/dist/generated/themes/PromoTile.css.js.map +1 -1
  182. package/dist/generated/themes/RadioButton.css.d.ts +1 -1
  183. package/dist/generated/themes/RadioButton.css.js +1 -1
  184. package/dist/generated/themes/RadioButton.css.js.map +1 -1
  185. package/dist/generated/themes/Review.css.d.ts +1 -1
  186. package/dist/generated/themes/Review.css.js +1 -1
  187. package/dist/generated/themes/Review.css.js.map +1 -1
  188. package/dist/generated/themes/ReviewItem.css.d.ts +1 -1
  189. package/dist/generated/themes/ReviewItem.css.js +1 -1
  190. package/dist/generated/themes/ReviewItem.css.js.map +1 -1
  191. package/dist/generated/themes/Search.css.d.ts +1 -1
  192. package/dist/generated/themes/Search.css.js +1 -1
  193. package/dist/generated/themes/Search.css.js.map +1 -1
  194. package/dist/generated/themes/SelectBase.css.d.ts +1 -1
  195. package/dist/generated/themes/SelectBase.css.js +1 -1
  196. package/dist/generated/themes/SelectBase.css.js.map +1 -1
  197. package/dist/generated/themes/SelectBox.css.d.ts +1 -1
  198. package/dist/generated/themes/SelectBox.css.js +1 -1
  199. package/dist/generated/themes/SelectBox.css.js.map +1 -1
  200. package/dist/generated/themes/SideNavigation.css.d.ts +1 -1
  201. package/dist/generated/themes/SideNavigation.css.js +1 -1
  202. package/dist/generated/themes/SideNavigation.css.js.map +1 -1
  203. package/dist/generated/themes/SideNavigationGroup.css.d.ts +1 -1
  204. package/dist/generated/themes/SideNavigationGroup.css.js +1 -1
  205. package/dist/generated/themes/SideNavigationGroup.css.js.map +1 -1
  206. package/dist/generated/themes/SocialMediaButton.css.d.ts +1 -1
  207. package/dist/generated/themes/SocialMediaButton.css.js +1 -1
  208. package/dist/generated/themes/SocialMediaButton.css.js.map +1 -1
  209. package/dist/generated/themes/StepInput.css.d.ts +1 -1
  210. package/dist/generated/themes/StepInput.css.js +1 -1
  211. package/dist/generated/themes/StepInput.css.js.map +1 -1
  212. package/dist/generated/themes/Switch.css.d.ts +1 -1
  213. package/dist/generated/themes/Switch.css.js +1 -1
  214. package/dist/generated/themes/Switch.css.js.map +1 -1
  215. package/dist/generated/themes/TabNavigation.css.d.ts +1 -1
  216. package/dist/generated/themes/TabNavigation.css.js +1 -1
  217. package/dist/generated/themes/TabNavigation.css.js.map +1 -1
  218. package/dist/generated/themes/Tag.css.d.ts +1 -1
  219. package/dist/generated/themes/Tag.css.js +1 -1
  220. package/dist/generated/themes/Tag.css.js.map +1 -1
  221. package/dist/generated/themes/TagGroup.css.d.ts +1 -1
  222. package/dist/generated/themes/TagGroup.css.js +1 -1
  223. package/dist/generated/themes/TagGroup.css.js.map +1 -1
  224. package/dist/generated/themes/TextArea.css.d.ts +1 -1
  225. package/dist/generated/themes/TextArea.css.js +1 -1
  226. package/dist/generated/themes/TextArea.css.js.map +1 -1
  227. package/dist/generated/themes/TextField.css.d.ts +1 -1
  228. package/dist/generated/themes/TextField.css.js +1 -1
  229. package/dist/generated/themes/TextField.css.js.map +1 -1
  230. package/dist/generated/themes/Toast.css.d.ts +1 -1
  231. package/dist/generated/themes/Toast.css.js +1 -1
  232. package/dist/generated/themes/Toast.css.js.map +1 -1
  233. package/dist/messagebundle_ar.properties +99 -0
  234. package/dist/messagebundle_no.properties +126 -1
  235. package/dist/vscode.html-custom-data.json +79 -14
  236. package/dist/web-types.json +211 -32
  237. package/package.json +1 -1
  238. package/src/AccordionSpotlight.ts +321 -0
  239. package/src/AccordionSpotlightItem.ts +117 -0
  240. package/src/AccordionSpotlightItemTemplate.tsx +7 -0
  241. package/src/AccordionSpotlightTemplate.tsx +107 -0
  242. package/src/BusyIndicator.ts +17 -2
  243. package/src/Carousel.ts +118 -80
  244. package/src/FilterMenu.ts +25 -4
  245. package/src/FilterMenuTemplate.tsx +1 -1
  246. package/src/HeroBanner.ts +60 -46
  247. package/src/HeroBannerTemplate.tsx +35 -22
  248. package/src/List.ts +23 -11
  249. package/src/ListGroupHeader.hbs +11 -10
  250. package/src/ListGroupHeader.ts +5 -1
  251. package/src/ListGroupHeaderBase.ts +48 -0
  252. package/src/ListItem.hbs +5 -1
  253. package/src/ListItem.ts +36 -0
  254. package/src/MediaPlayer.ts +11 -0
  255. package/src/PromoTile.ts +1 -1
  256. package/src/SearchableListBase.ts +24 -7
  257. package/src/SearchableListBaseTemplate.tsx +5 -2
  258. package/src/SelectBase.ts +58 -3
  259. package/src/SelectBoxTemplate.tsx +1 -0
  260. package/src/TabNavigation.hbs +1 -1
  261. package/src/TabNavigation.ts +8 -1
  262. package/src/Wizard.ts +15 -1
  263. package/src/generated/templates/ListGroupHeaderTemplate.lit.ts +24 -21
  264. package/src/generated/templates/ListItemTemplate.lit.ts +2 -2
  265. package/src/generated/templates/TabNavigationTemplate.lit.ts +1 -1
  266. package/src/generated/themes/Accordion.css.ts +1 -1
  267. package/src/generated/themes/AccordionItem.css.ts +1 -1
  268. package/src/generated/themes/AccordionSpotlight.css.ts +9 -0
  269. package/src/generated/themes/AccordionSpotlightItem.css.ts +9 -0
  270. package/src/generated/themes/Badge.css.ts +1 -1
  271. package/src/generated/themes/BusyIndicator.css.ts +9 -0
  272. package/src/generated/themes/Button.css.ts +1 -1
  273. package/src/generated/themes/Divider.css.ts +1 -1
  274. package/src/generated/themes/Dropdown.css.ts +1 -1
  275. package/src/generated/themes/FilterMenu.css.ts +1 -1
  276. package/src/generated/themes/Footer.css.ts +1 -1
  277. package/src/generated/themes/HeroBanner.css.ts +1 -1
  278. package/src/generated/themes/ImageGridTableItem.css.ts +1 -1
  279. package/src/generated/themes/InputGroup.css.ts +1 -1
  280. package/src/generated/themes/MastheadShell.css.ts +1 -1
  281. package/src/generated/themes/MediaPlayer.css.ts +1 -1
  282. package/src/generated/themes/PhoneNumberField.css.ts +1 -1
  283. package/src/generated/themes/ProgressBar.css.ts +1 -1
  284. package/src/generated/themes/PromoTile.css.ts +1 -1
  285. package/src/generated/themes/RadioButton.css.ts +1 -1
  286. package/src/generated/themes/Review.css.ts +1 -1
  287. package/src/generated/themes/ReviewItem.css.ts +1 -1
  288. package/src/generated/themes/Search.css.ts +1 -1
  289. package/src/generated/themes/SelectBase.css.ts +1 -1
  290. package/src/generated/themes/SelectBox.css.ts +1 -1
  291. package/src/generated/themes/SideNavigation.css.ts +1 -1
  292. package/src/generated/themes/SideNavigationGroup.css.ts +1 -1
  293. package/src/generated/themes/SocialMediaButton.css.ts +1 -1
  294. package/src/generated/themes/StepInput.css.ts +1 -1
  295. package/src/generated/themes/Switch.css.ts +1 -1
  296. package/src/generated/themes/TabNavigation.css.ts +1 -1
  297. package/src/generated/themes/Tag.css.ts +1 -1
  298. package/src/generated/themes/TagGroup.css.ts +1 -1
  299. package/src/generated/themes/TextArea.css.ts +1 -1
  300. package/src/generated/themes/TextField.css.ts +1 -1
  301. package/src/generated/themes/Toast.css.ts +1 -1
  302. package/src/i18n/messagebundle_ar.properties +99 -0
  303. package/src/i18n/messagebundle_no.properties +126 -1
  304. package/src/themes/Accordion.css +1 -1
  305. package/src/themes/AccordionItem.css +4 -4
  306. package/src/themes/AccordionSpotlight.css +264 -0
  307. package/src/themes/AccordionSpotlightItem.css +3 -0
  308. package/src/themes/Badge.css +7 -7
  309. package/src/themes/BusyIndicator.css +24 -0
  310. package/src/themes/Button.css +57 -57
  311. package/src/themes/Divider.css +1 -1
  312. package/src/themes/Dropdown.css +1 -1
  313. package/src/themes/FilterMenu.css +2 -2
  314. package/src/themes/Footer.css +1 -1
  315. package/src/themes/HeroBanner.css +2 -0
  316. package/src/themes/ImageGridTableItem.css +1 -1
  317. package/src/themes/InputGroup.css +1 -1
  318. package/src/themes/MastheadShell.css +2 -2
  319. package/src/themes/MediaPlayer.css +5 -34
  320. package/src/themes/PhoneNumberField.css +6 -6
  321. package/src/themes/ProgressBar.css +4 -0
  322. package/src/themes/PromoTile.css +160 -4
  323. package/src/themes/RadioButton.css +2 -2
  324. package/src/themes/Review.css +2 -2
  325. package/src/themes/ReviewItem.css +2 -2
  326. package/src/themes/Search.css +5 -5
  327. package/src/themes/SelectBase.css +14 -14
  328. package/src/themes/SelectBox.css +1 -1
  329. package/src/themes/SideNavigation.css +1 -1
  330. package/src/themes/SideNavigationGroup.css +1 -1
  331. package/src/themes/SocialMediaButton.css +2 -2
  332. package/src/themes/StepInput.css +8 -8
  333. package/src/themes/Switch.css +9 -9
  334. package/src/themes/TabNavigation.css +1 -1
  335. package/src/themes/Tag.css +4 -4
  336. package/src/themes/TagGroup.css +1 -0
  337. package/src/themes/TextArea.css +4 -4
  338. package/src/themes/TextField.css +13 -13
  339. package/src/themes/Toast.css +1 -1
  340. package/dist/assets/messagebundle_ar-BNhVFt1-.js +0 -1
  341. package/dist/assets/messagebundle_no-BIUfmTWJ.js +0 -1
@@ -704,18 +704,21 @@ describe("SelectBox", () => {
704
704
 
705
705
  cy.get("#select-box").shadow()
706
706
  .find("udex-list-item").eq(0)
707
+ .shadow().find("[part=item]")
707
708
  .should("be.focused");
708
709
 
709
710
  cy.realPress("ArrowDown");
710
711
 
711
712
  cy.get("#select-box").shadow()
712
713
  .find("udex-list-item").eq(1)
714
+ .shadow().find("[part=item]")
713
715
  .should("be.focused");
714
716
 
715
717
  cy.realPress("ArrowUp");
716
718
 
717
719
  cy.get("#select-box").shadow()
718
720
  .find("udex-list-item").eq(0)
721
+ .shadow().find("[part=item]")
719
722
  .should("be.focused");
720
723
  });
721
724
 
@@ -727,34 +730,88 @@ describe("SelectBox", () => {
727
730
 
728
731
  cy.get("#select-box").shadow()
729
732
  .find("udex-list-group-header").shadow()
730
- .find(".udex-list__group-header-wrap")
733
+ .find(".udex-list__group-header-wrap").shadow()
734
+ .find("[part=item]")
731
735
  .should("be.focused");
732
736
 
733
737
  cy.realPress("ArrowDown");
734
738
 
735
739
  cy.get("#select-box").shadow()
736
740
  .find("udex-list-item").eq(0)
741
+ .shadow().find("[part=item]")
737
742
  .should("be.focused");
738
743
 
739
744
  cy.realPress("ArrowDown");
740
745
 
741
746
  cy.get("#select-box").shadow()
742
747
  .find("udex-list-item").eq(1)
748
+ .shadow().find("[part=item]")
743
749
  .should("be.focused");
744
750
 
745
751
  cy.realPress("ArrowUp");
746
752
 
747
753
  cy.get("#select-box").shadow()
748
754
  .find("udex-list-item").eq(0)
755
+ .shadow().find("[part=item]")
749
756
  .should("be.focused");
750
757
 
751
758
  cy.realPress("ArrowUp");
752
759
 
753
760
  cy.get("#select-box").shadow()
754
761
  .find("udex-list-group-header").shadow()
755
- .find(".udex-list__group-header-wrap")
762
+ .find(".udex-list__group-header-wrap").shadow()
763
+ .find("[part=item]")
756
764
  .should("be.focused");
757
765
  });
766
+
767
+ it("MultiSelect mode - Left arrow collapses a collapsible group header, Right arrow expands it", () => {
768
+ cy.mount(groupHeaderCollapsible);
769
+
770
+ cy.get("#select-box").shadow().find(".udex-text-field__search").click();
771
+ cy.realPress("ArrowDown");
772
+
773
+ // Focus the collapsible group header wrapper.
774
+ cy.get("#select-box").shadow()
775
+ .find("udex-list-group-header").shadow()
776
+ .find(".udex-list__group-header-wrap").shadow()
777
+ .find("[part=item]")
778
+ .should("be.focused");
779
+
780
+ // Fixture starts expanded: neither the header host nor its children are collapsed.
781
+ cy.get("#select-box").shadow()
782
+ .find("udex-list-group-header")
783
+ .should("not.have.attr", "collapsed");
784
+ cy.get("#select-box").shadow()
785
+ .find("udex-list-item")
786
+ .should("have.length", 2)
787
+ .each($item => {
788
+ cy.wrap($item).should("not.have.attr", "collapsed");
789
+ });
790
+
791
+ // Left arrow collapses the group.
792
+ cy.realPress("ArrowLeft");
793
+
794
+ cy.get("#select-box").shadow()
795
+ .find("udex-list-group-header")
796
+ .should("have.attr", "collapsed");
797
+ cy.get("#select-box").shadow()
798
+ .find("udex-list-item")
799
+ .each($item => {
800
+ cy.wrap($item).should("have.attr", "collapsed");
801
+ });
802
+
803
+ // Right arrow expands the group again.
804
+ cy.realPress("ArrowRight");
805
+
806
+ cy.get("#select-box").shadow()
807
+ .find("udex-list-group-header")
808
+ .should("not.have.attr", "collapsed");
809
+ cy.get("#select-box").shadow()
810
+ .find("udex-list-item")
811
+ .each($item => {
812
+ cy.wrap($item).should("not.have.attr", "collapsed");
813
+ });
814
+ });
758
815
  });
759
816
 
760
817
  describe("Select Box focus tests", () => {
@@ -1488,6 +1545,7 @@ describe("SelectBox", () => {
1488
1545
  cy.get("#select-box").shadow()
1489
1546
  .find("udex-list-item")
1490
1547
  .last()
1548
+ .shadow().find("[part=item]")
1491
1549
  .should("be.focused");
1492
1550
  });
1493
1551
 
@@ -1508,7 +1566,8 @@ describe("SelectBox", () => {
1508
1566
 
1509
1567
  // A list item should now be focused (not the search input).
1510
1568
  cy.get("#select-box").shadow()
1511
- .find("udex-list-item").eq(0)
1569
+ .find("udex-list-item").eq(0).shadow()
1570
+ .find("[part=item]")
1512
1571
  .should("be.focused");
1513
1572
 
1514
1573
  // Tab should be intercepted and focus redirected into the footer.
@@ -1883,6 +1942,7 @@ describe("SelectBox", () => {
1883
1942
 
1884
1943
  cy.get("#select-box").shadow()
1885
1944
  .find("udex-list-item").eq(0)
1945
+ .shadow().find("[part=item]")
1886
1946
  .should("be.focused");
1887
1947
  });
1888
1948
 
@@ -1895,6 +1955,7 @@ describe("SelectBox", () => {
1895
1955
 
1896
1956
  cy.get("#select-box").shadow()
1897
1957
  .find("udex-list-item").eq(1)
1958
+ .shadow().find("[part=item]")
1898
1959
  .should("be.focused");
1899
1960
  });
1900
1961
 
@@ -1907,6 +1968,7 @@ describe("SelectBox", () => {
1907
1968
 
1908
1969
  cy.get("#select-box").shadow()
1909
1970
  .find("udex-list-item").last()
1971
+ .shadow().find("[part=item]")
1910
1972
  .should("be.focused");
1911
1973
  });
1912
1974
 
@@ -1920,6 +1982,7 @@ describe("SelectBox", () => {
1920
1982
 
1921
1983
  cy.get("#select-box").shadow()
1922
1984
  .find("udex-list-item").eq(1)
1985
+ .shadow().find("[part=item]")
1923
1986
  .should("be.focused");
1924
1987
  });
1925
1988
 
@@ -2304,4 +2367,72 @@ describe("SelectBox", () => {
2304
2367
  .should("be.greaterThan", 0);
2305
2368
  });
2306
2369
  });
2370
+
2371
+ // Added: regression coverage for the WCAG 4.1.2 Treeview Checkbox pattern
2372
+ // in SearchableListBase. SelectBox sets defaultAccessibleRole = "listbox",
2373
+ // so it must NOT switch to the tree pattern even in MultiSelect + groups.
2374
+ describe("Tree accessibility pattern regression", () => {
2375
+ const selectBoxMultiSelectGroup = <div style="width: 350px; position:relative;">
2376
+ <UDExSelectBox
2377
+ id="select-box-tree-regression"
2378
+ mode={UDExListMode.MultiSelect}
2379
+ label="Programming languages">
2380
+ <UDExSelectBoxGroupHeader label="Programming Languages">
2381
+ <UDExSelectBoxItem label="JavaScript"></UDExSelectBoxItem>
2382
+ <UDExSelectBoxItem label="Python"></UDExSelectBoxItem>
2383
+ </UDExSelectBoxGroupHeader>
2384
+ </UDExSelectBox>
2385
+ </div>;
2386
+
2387
+ beforeEach(() => {
2388
+ cy.mount(selectBoxMultiSelectGroup);
2389
+ cy.get("#select-box-tree-regression").shadow()
2390
+ .find(".udex-text-field__trigger").click();
2391
+ });
2392
+
2393
+ it("host [udex-list] has NO aria-multiselectable attribute", () => {
2394
+ cy.get("#select-box-tree-regression").shadow()
2395
+ .find("[udex-list]").should("not.have.attr", "aria-multiselectable");
2396
+ });
2397
+
2398
+ // Updated: `accessibleRoleForList` no longer collapses to `"group"` for grouped
2399
+ // non-tree mode — it now returns `defaultAccessibleRole` (`"listbox"` for SelectBox)
2400
+ // in every non-tree case. This aligns with the test's original intent (title says
2401
+ // "keeps role=\"listbox\""); the prior `role="group"` assertion was already stale.
2402
+ it("inner list div keeps role=\"listbox\" (not \"tree\")", () => {
2403
+ cy.get("#select-box-tree-regression").shadow()
2404
+ .find("[udex-list]").shadow()
2405
+ .find("#udex-list").should("have.attr", "role", "listbox");
2406
+ });
2407
+
2408
+ // Updated: `accessibleRole` string property on udex-list-group-header was replaced
2409
+ // by a `_treeMode` boolean (reflected as the `_tree-mode` attribute). SelectBox is
2410
+ // not tree-capable so the boolean must stay false and the attribute must be absent.
2411
+ it("group header host has NO _tree-mode attribute", () => {
2412
+ cy.get("#select-box-tree-regression").shadow()
2413
+ .find("udex-list-group-header")
2414
+ .should("not.have.attr", "_tree-mode");
2415
+ });
2416
+
2417
+ it("child items have role=\"option\", not \"treeitem\"", () => {
2418
+ cy.get("#select-box-tree-regression").shadow()
2419
+ .find("udex-list-group-header")
2420
+ .find("udex-list-item").eq(0).shadow()
2421
+ .find("[part=item]").should("have.attr", "role", "option");
2422
+ });
2423
+
2424
+ it("child items have NO aria-checked (roleItem !== treeitem)", () => {
2425
+ cy.get("#select-box-tree-regression").shadow()
2426
+ .find("udex-list-group-header")
2427
+ .find("udex-list-item").eq(0).shadow()
2428
+ .find("[part=item]").should("not.have.attr", "aria-checked");
2429
+ });
2430
+
2431
+ it("child items' checkbox is NOT aria-hidden (JAWS double-announce guard only applies to tree)", () => {
2432
+ cy.get("#select-box-tree-regression").shadow()
2433
+ .find("udex-list-group-header")
2434
+ .find("udex-list-item").eq(0).shadow()
2435
+ .find("udex-checkbox").should("not.have.attr", "aria-hidden");
2436
+ });
2437
+ });
2307
2438
  });
@@ -1927,6 +1927,62 @@ describe("Tab Navigation component", () => {
1927
1927
  });
1928
1928
  });
1929
1929
 
1930
+ describe("Overflow menu — tab-select event", () => {
1931
+ const mountOverflowNav = (onTabSelect: (...args: any[]) => void) => {
1932
+ cy.mount(
1933
+ <UDExTabNavigation id="overflow-tab-nav" onTabSelect={onTabSelect}>
1934
+ <UDExTab text="Tab 1" selected><div>Content 1</div></UDExTab>
1935
+ <UDExTab text="Tab 2"><div>Content 2</div></UDExTab>
1936
+ <UDExTab text="Tab 3"><div>Content 3</div></UDExTab>
1937
+ </UDExTabNavigation>
1938
+ );
1939
+ };
1940
+
1941
+ it("fires tab-select when onItemSelect is called (overflow click path)", () => {
1942
+ const tabSelectHandler = cy.stub().as("tabSelect");
1943
+ mountOverflowNav(tabSelectHandler);
1944
+
1945
+ cy.get("[udex-tab-navigation]").then($el => {
1946
+ const nav = $el[0] as any;
1947
+ nav.onItemSelect(nav.items[1].__id);
1948
+ });
1949
+
1950
+ cy.get("@tabSelect").should("have.been.called");
1951
+ });
1952
+
1953
+ it("tab-select detail contains tab and tabIndex when triggered via onItemSelect", () => {
1954
+ const tabSelectHandler = cy.stub().as("tabSelect");
1955
+ mountOverflowNav(tabSelectHandler);
1956
+
1957
+ cy.get("[udex-tab-navigation]").then($el => {
1958
+ const nav = $el[0] as any;
1959
+ nav.onItemSelect(nav.items[1].__id);
1960
+ });
1961
+
1962
+ cy.get("@tabSelect").should("have.been.calledOnce").then(() => {
1963
+ const event: CustomEvent = tabSelectHandler.firstCall.args[0];
1964
+ expect(event.detail).to.have.property("tab");
1965
+ expect(event.detail).to.have.property("tabIndex");
1966
+ expect(event.detail.tabIndex).to.equal(1);
1967
+ });
1968
+ });
1969
+
1970
+ it("tab-select fires with correct tabIndex for each tab via onItemSelect", () => {
1971
+ const tabSelectHandler = cy.stub().as("tabSelect");
1972
+ mountOverflowNav(tabSelectHandler);
1973
+
1974
+ cy.get("[udex-tab-navigation]").then($el => {
1975
+ const nav = $el[0] as any;
1976
+ nav.onItemSelect(nav.items[2].__id);
1977
+ });
1978
+
1979
+ cy.get("@tabSelect").should("have.been.calledOnce").then(() => {
1980
+ const event: CustomEvent = tabSelectHandler.firstCall.args[0];
1981
+ expect(event.detail.tabIndex).to.equal(2);
1982
+ });
1983
+ });
1984
+ });
1985
+
1930
1986
  // ── Process Tab variant ──────────────────────────────────────────────────────
1931
1987
 
1932
1988
  describe("TabNavigation - Process Tab variant", () => {
@@ -1,5 +1,7 @@
1
1
  import UDExAccordion from "../../instrumented/Accordion.js";
2
2
  import UDExAccordionItem from "../../instrumented/AccordionItem.js";
3
+ import UDExAccordionSpotlight from "../../instrumented/AccordionSpotlight.js";
4
+ import UDExAccordionSpotlightItem from "../../instrumented/AccordionSpotlightItem.js";
3
5
  import UDExAvatar from "../../instrumented/Avatar.js";
4
6
  import UDExAvatarGroup from "../../instrumented/AvatarGroup.js";
5
7
  import UDExBadge from "../../instrumented/Badge.js";
@@ -7,6 +9,7 @@ import UDExBreadcrumbs from "../../instrumented/Breadcrumbs.js";
7
9
  import UDExBreadcrumbsItem from "../../instrumented/BreadcrumbsItem.js";
8
10
  import UDExBusyIndicator from "../../instrumented/BusyIndicator.js";
9
11
  import UDExButton from "../../instrumented/Button.js";
12
+ import UDExCarousel from "../../instrumented/Carousel.js";
10
13
  import UDExCheckbox from "../../instrumented/Checkbox.js";
11
14
  import UDExContact from "../../instrumented/Contact.js";
12
15
  import UDExContactItem from "../../instrumented/ContactItem.js";
@@ -89,6 +92,8 @@ import UDExWizardStep from "../../instrumented/WizardStep.js";
89
92
  export {
90
93
  UDExAccordion,
91
94
  UDExAccordionItem,
95
+ UDExAccordionSpotlight,
96
+ UDExAccordionSpotlightItem,
92
97
  UDExAvatar,
93
98
  UDExAvatarGroup,
94
99
  UDExBadge,
@@ -96,6 +101,7 @@ export {
96
101
  UDExBreadcrumbsItem,
97
102
  UDExBusyIndicator,
98
103
  UDExButton,
104
+ UDExCarousel,
99
105
  UDExCheckbox,
100
106
  UDExContact,
101
107
  UDExContactItem,
@@ -1,5 +1,7 @@
1
1
  import UDExAccordion from "../../src/Accordion.js";
2
2
  import UDExAccordionItem from "../../src/AccordionItem.js";
3
+ import UDExAccordionSpotlight from "../../src/AccordionSpotlight.js";
4
+ import UDExAccordionSpotlightItem from "../../src/AccordionSpotlightItem.js";
3
5
  import UDExAvatar from "../../src/Avatar.js";
4
6
  import UDExAvatarGroup from "../../src/AvatarGroup.js";
5
7
  import UDExBadge from "../../src/Badge.js";
@@ -7,6 +9,7 @@ import UDExBreadcrumbs from "../../src/Breadcrumbs.js";
7
9
  import UDExBreadcrumbsItem from "../../src/BreadcrumbsItem.js";
8
10
  import UDExBusyIndicator from "../../src/BusyIndicator.js";
9
11
  import UDExButton from "../../src/Button.js";
12
+ import UDExCarousel from "../../src/Carousel.js";
10
13
  import UDExCheckbox from "../../src/Checkbox.js";
11
14
  import UDExContact from "../../src/Contact.js";
12
15
  import UDExContactItem from "../../src/ContactItem.js";
@@ -89,6 +92,8 @@ import UDExWizardStep from "../../src/WizardStep.js";
89
92
  export {
90
93
  UDExAccordion,
91
94
  UDExAccordionItem,
95
+ UDExAccordionSpotlight,
96
+ UDExAccordionSpotlightItem,
92
97
  UDExAvatar,
93
98
  UDExAvatarGroup,
94
99
  UDExBadge,
@@ -96,6 +101,7 @@ export {
96
101
  UDExBreadcrumbsItem,
97
102
  UDExBusyIndicator,
98
103
  UDExButton,
104
+ UDExCarousel,
99
105
  UDExCheckbox,
100
106
  UDExContact,
101
107
  UDExContactItem,
@@ -0,0 +1,149 @@
1
+ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
+ import type { DefaultSlot, Slot } from "@ui5/webcomponents-base/dist/UI5Element.js";
3
+ import AccordionSpotlightItem from "./AccordionSpotlightItem.js";
4
+ import "@ui5/webcomponents-icons/dist/play.js";
5
+ import "@ui5/webcomponents-icons/dist/pause.js";
6
+ import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
7
+ export declare enum UDExAccordionSpotlightVerticalAlignment {
8
+ Top = "Top",
9
+ Center = "Center"
10
+ }
11
+ export declare enum UDExAccordionSpotlightPlacement {
12
+ Start = "Start",
13
+ End = "End"
14
+ }
15
+ export declare enum UDExAccordionSpotlightMediaMode {
16
+ Dynamic = "Dynamic",
17
+ Static = "Static"
18
+ }
19
+ /**
20
+ * @class
21
+ *
22
+ * <h3 class="comment-api-title">Overview</h3>
23
+ *
24
+ * Vertical accordion navigation with spotlight layout. Items are listed on the
25
+ * left; the expanded panel is displayed on the right (desktop) or inline below
26
+ * the heading (mobile). Follows the WAI-ARIA APG Accordion pattern.
27
+ *
28
+ * <h3>Usage</h3>
29
+ *
30
+ * For the <code>udex-accordion-spotlight</code>
31
+ * <h3>ES6 Module Import</h3>
32
+ *
33
+ * <code>import "@sapudex/web-components/dist/AccordionSpotlight.js";</code>
34
+ *
35
+ * @constructor
36
+ * @extends UI5Element
37
+ * @public
38
+ */
39
+ declare class UDExAccordionSpotlight extends UI5Element {
40
+ eventDetails: {
41
+ "item-click": {
42
+ item: AccordionSpotlightItem;
43
+ };
44
+ };
45
+ /**
46
+ * The index of the currently expanded item (0-based).
47
+ * Derived from items' <code>selected</code> attribute; kept in sync by the parent.
48
+ *
49
+ * @private
50
+ */
51
+ _selectedIndex: number;
52
+ /**
53
+ * Vertical alignment of the navigation sidebar relative to the content panel.
54
+ *
55
+ * @default "Top"
56
+ * @public
57
+ */
58
+ verticalAlignment: `${UDExAccordionSpotlightVerticalAlignment}`;
59
+ /**
60
+ * Placement of the navigation sidebar — "Start" (left) or "End" (right).
61
+ *
62
+ * @default "Start"
63
+ * @public
64
+ */
65
+ placement: `${UDExAccordionSpotlightPlacement}`;
66
+ /**
67
+ * Enables automatic cycling through items on an interval.
68
+ *
69
+ * @default false
70
+ * @public
71
+ */
72
+ autoPlay: boolean;
73
+ /**
74
+ * Interval in milliseconds between automatic item advances. Applies only when autoPlay is enabled.
75
+ *
76
+ * @default 5000
77
+ * @public
78
+ */
79
+ autoPlayInterval: number;
80
+ /**
81
+ * Defines the width of the navigation panel.
82
+ *
83
+ * @default "auto"
84
+ * @public
85
+ */
86
+ tabWidth: string;
87
+ /**
88
+ * Controls how the media area behaves. In <code>Static</code> mode a single
89
+ * persistent media element (image or video) is displayed alongside the nav
90
+ * list and never changes when items are expanded. In <code>Dynamic</code>
91
+ * mode (default) each item provides its own content panel.
92
+ *
93
+ * @default "Dynamic"
94
+ * @public
95
+ */
96
+ mediaMode: `${UDExAccordionSpotlightMediaMode}`;
97
+ /**
98
+ * @private
99
+ */
100
+ _isMobile: boolean;
101
+ /**
102
+ * @private
103
+ */
104
+ _isPaused: boolean;
105
+ /**
106
+ * The slotted AccordionSpotlightItem elements.
107
+ *
108
+ * @public
109
+ */
110
+ items: DefaultSlot<AccordionSpotlightItem>;
111
+ /**
112
+ * Defines optional content rendered below the navigation items.
113
+ * Use to place a button or any action element beneath the items.
114
+ *
115
+ * @slot footer
116
+ * @public
117
+ */
118
+ footer: Slot<HTMLElement>;
119
+ /**
120
+ * Persistent media area shown in <code>Static</code> media mode.
121
+ * Place an <code>&lt;img&gt;</code> or <code>&lt;video&gt;</code> element here;
122
+ * it remains visible regardless of which item is currently expanded.
123
+ *
124
+ * @slot media
125
+ * @public
126
+ */
127
+ media: Slot<HTMLElement>;
128
+ _handleResizeBound: ResizeObserverCallback;
129
+ _autoPlayTimer?: number;
130
+ constructor();
131
+ onBeforeRendering(): void;
132
+ onAfterRendering(): void;
133
+ onEnterDOM(): void;
134
+ onExitDOM(): void;
135
+ _handleResize(): void;
136
+ _checkMobile(): void;
137
+ _syncItemStates(): void;
138
+ _startAutoPlay(): void;
139
+ _stopAutoPlay(): void;
140
+ _advanceItem(): void;
141
+ onPlayButtonClick(): void;
142
+ handleNavItemClick(e: MouseEvent): void;
143
+ private _selectItem;
144
+ get playBtnIcon(): string;
145
+ get showFooterSlot(): boolean;
146
+ get isStaticMedia(): boolean;
147
+ get showMediaSlot(): boolean;
148
+ }
149
+ export default UDExAccordionSpotlight;