@sapudex/web-components 2.9.0 → 2.11.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 (367) hide show
  1. package/bundle.esm.js +2 -0
  2. package/cypress/fixtures/footer-links.ts +32 -33
  3. package/cypress/specs/Accordion.cy.tsx +19 -0
  4. package/cypress/specs/AccordionItem.cy.tsx +9 -0
  5. package/cypress/specs/CountrySelector.cy.tsx +5 -2
  6. package/cypress/specs/FilterMenu.cy.tsx +884 -0
  7. package/cypress/specs/Footer.cy.tsx +54 -18
  8. package/cypress/specs/PromoTile.cy.tsx +124 -0
  9. package/cypress/specs/Quote.cy.tsx +65 -0
  10. package/cypress/specs/SocialMediaButton.cy.tsx +44 -0
  11. package/cypress/specs/Table.cy.tsx +8 -2
  12. package/cypress/specs/TextField.cy.tsx +11 -4
  13. package/cypress/support/component-imports.instrumented.ts +15 -1
  14. package/cypress/support/component-imports.src.ts +15 -1
  15. package/dist/Accordion.d.ts +15 -0
  16. package/dist/Accordion.js +19 -0
  17. package/dist/Accordion.js.map +1 -1
  18. package/dist/AccordionItem.d.ts +19 -0
  19. package/dist/AccordionItem.js +23 -0
  20. package/dist/AccordionItem.js.map +1 -1
  21. package/dist/AccordionItemTemplate.js +7 -2
  22. package/dist/AccordionItemTemplate.js.map +1 -1
  23. package/dist/AccordionTemplate.js +21 -1
  24. package/dist/AccordionTemplate.js.map +1 -1
  25. package/dist/Assets.d.ts +1 -0
  26. package/dist/Assets.js +1 -0
  27. package/dist/Assets.js.map +1 -1
  28. package/dist/CountrySelector.d.ts +2 -2
  29. package/dist/CountrySelector.js +6 -3
  30. package/dist/CountrySelector.js.map +1 -1
  31. package/dist/DatePicker.js +2 -2
  32. package/dist/DatePicker.js.map +1 -1
  33. package/dist/FilterMenu.d.ts +13 -2
  34. package/dist/FilterMenu.js +59 -13
  35. package/dist/FilterMenu.js.map +1 -1
  36. package/dist/Footer.d.ts +50 -6
  37. package/dist/Footer.js +44 -22
  38. package/dist/Footer.js.map +1 -1
  39. package/dist/MastheadItem.d.ts +12 -0
  40. package/dist/MastheadItem.js +6 -0
  41. package/dist/MastheadItem.js.map +1 -1
  42. package/dist/MastheadShell.d.ts +13 -3
  43. package/dist/MastheadShell.js +17 -4
  44. package/dist/MastheadShell.js.map +1 -1
  45. package/dist/PromoTile.d.ts +143 -0
  46. package/dist/PromoTile.js +198 -0
  47. package/dist/PromoTile.js.map +1 -0
  48. package/dist/PromoTileTemplate.d.ts +2 -0
  49. package/dist/PromoTileTemplate.js +22 -0
  50. package/dist/PromoTileTemplate.js.map +1 -0
  51. package/dist/Quote.d.ts +11 -0
  52. package/dist/Quote.js +18 -3
  53. package/dist/Quote.js.map +1 -1
  54. package/dist/Search.d.ts +3 -1
  55. package/dist/Search.js +1 -0
  56. package/dist/Search.js.map +1 -1
  57. package/dist/SelectBox.d.ts +0 -1
  58. package/dist/SelectBox.js +2 -2
  59. package/dist/SelectBox.js.map +1 -1
  60. package/dist/SocialMediaButton.d.ts +73 -0
  61. package/dist/SocialMediaButton.js +135 -0
  62. package/dist/SocialMediaButton.js.map +1 -0
  63. package/dist/SocialMediaButtonTemplate.d.ts +2 -0
  64. package/dist/SocialMediaButtonTemplate.js +6 -0
  65. package/dist/SocialMediaButtonTemplate.js.map +1 -0
  66. package/dist/StepInput.d.ts +2 -1
  67. package/dist/StepInput.js +6 -0
  68. package/dist/StepInput.js.map +1 -1
  69. package/dist/StepInputTemplate.js +1 -1
  70. package/dist/StepInputTemplate.js.map +1 -1
  71. package/dist/TableRow.d.ts +11 -0
  72. package/dist/TableRow.js +16 -0
  73. package/dist/TableRow.js.map +1 -1
  74. package/dist/TextArea.d.ts +3 -8
  75. package/dist/TextArea.js +12 -5
  76. package/dist/TextArea.js.map +1 -1
  77. package/dist/TextField.d.ts +20 -11
  78. package/dist/TextField.js +44 -31
  79. package/dist/TextField.js.map +1 -1
  80. package/dist/assets/{InputSuggestions-BmjyLzkP.js → InputSuggestions-9WQMOg4t.js} +1 -1
  81. package/dist/assets/{ListItemStandardExpandableTextTemplate-CDt3iORy.js → ListItemStandardExpandableTextTemplate-BQaMMo_n.js} +1 -1
  82. package/dist/assets/ar-CUjm9SSI.js +1 -0
  83. package/dist/assets/ar_EG-DQlFzN6x.js +1 -0
  84. package/dist/assets/ar_SA-lp21-ovF.js +1 -0
  85. package/dist/assets/bg-BMgSEqKu.js +1 -0
  86. package/dist/assets/{bundle.esm-Dz11sAJe.js → bundle.esm-ZNiP-jPI.js} +211 -209
  87. package/dist/assets/ca-BEgqToWu.js +1 -0
  88. package/dist/assets/cnr-IJYa9RjY.js +1 -0
  89. package/dist/assets/cs-DcM44PeB.js +1 -0
  90. package/dist/assets/da-D81rJc1N.js +1 -0
  91. package/dist/assets/de-eQRPkDbn.js +1 -0
  92. package/dist/assets/de_AT-Ag3CVI5m.js +1 -0
  93. package/dist/assets/de_CH-DgRYNg0p.js +1 -0
  94. package/dist/assets/el-W3XNt9Wl.js +1 -0
  95. package/dist/assets/el_CY-BfNIiYpU.js +1 -0
  96. package/dist/assets/en-CrBjXhTl.js +1 -0
  97. package/dist/assets/en_AU-Br7ytKW4.js +1 -0
  98. package/dist/assets/en_GB-DfnNoCgD.js +1 -0
  99. package/dist/assets/en_HK-Cyj9DPsW.js +1 -0
  100. package/dist/assets/en_IE-B5FpEUby.js +1 -0
  101. package/dist/assets/en_IN-C3XmKnWe.js +1 -0
  102. package/dist/assets/en_NZ-COJ5ycaE.js +1 -0
  103. package/dist/assets/en_PG-BB-Cmgcm.js +1 -0
  104. package/dist/assets/en_SG-Dfevg5da.js +1 -0
  105. package/dist/assets/en_ZA-BgOSNy0v.js +1 -0
  106. package/dist/assets/es-CRcVj7aR.js +1 -0
  107. package/dist/assets/es_AR-CFf6aWC5.js +1 -0
  108. package/dist/assets/es_BO-DNFEED1o.js +1 -0
  109. package/dist/assets/es_CL-DZhLyidG.js +1 -0
  110. package/dist/assets/es_CO-uWf-1tom.js +1 -0
  111. package/dist/assets/es_MX-C_wDRcT-.js +1 -0
  112. package/dist/assets/es_PE-QQsdF6EB.js +1 -0
  113. package/dist/assets/es_UY-CWhNSkyr.js +1 -0
  114. package/dist/assets/es_VE-hweLK9Ws.js +1 -0
  115. package/dist/assets/et-B3fco2O5.js +1 -0
  116. package/dist/assets/fa-oRguSKlL.js +1 -0
  117. package/dist/assets/fi-Daa_vlE5.js +1 -0
  118. package/dist/assets/fr-CANfYyyO.js +1 -0
  119. package/dist/assets/fr_BE-CCxD_K6m.js +1 -0
  120. package/dist/assets/fr_CA-BEtkRJZv.js +1 -0
  121. package/dist/assets/fr_CH-CrBmdh_n.js +1 -0
  122. package/dist/assets/fr_LU-CDcjZueC.js +1 -0
  123. package/dist/assets/he-CVUhin6m.js +1 -0
  124. package/dist/assets/hi-DF2PyuOw.js +1 -0
  125. package/dist/assets/hr-b6c4wXpD.js +1 -0
  126. package/dist/assets/hu-B7IWSU6b.js +1 -0
  127. package/dist/assets/id-GxIydI_w.js +1 -0
  128. package/dist/assets/it-DAjzvm2X.js +1 -0
  129. package/dist/assets/it_CH-BvNuHKQK.js +1 -0
  130. package/dist/assets/ja-DhVA6Wxm.js +1 -0
  131. package/dist/assets/kk-BSxmnq67.js +1 -0
  132. package/dist/assets/ko-ZT8Z04Uq.js +1 -0
  133. package/dist/assets/lt-BVWqkFr_.js +1 -0
  134. package/dist/assets/lv-DyXyW37Y.js +1 -0
  135. package/dist/assets/messagebundle_en-DwlTjyni.js +1 -0
  136. package/dist/assets/mk-ChbdOzZI.js +1 -0
  137. package/dist/assets/ms-H9bJ42GA.js +1 -0
  138. package/dist/assets/nb-Dgkq7ozi.js +1 -0
  139. package/dist/assets/nl-DZqLtAXS.js +1 -0
  140. package/dist/assets/nl_BE-Dx4AxOFo.js +1 -0
  141. package/dist/assets/pl-MzEgIfvm.js +1 -0
  142. package/dist/assets/pt-2N8dosOm.js +1 -0
  143. package/dist/assets/pt_PT-CIcj5FsJ.js +1 -0
  144. package/dist/assets/ro-CZHCJKTk.js +1 -0
  145. package/dist/assets/ru-BcU9rFqC.js +1 -0
  146. package/dist/assets/ru_UA-aH_wNrwj.js +1 -0
  147. package/dist/assets/sk-DYn5gXzA.js +1 -0
  148. package/dist/assets/sl-RYb_KlOx.js +1 -0
  149. package/dist/assets/sr-Bap_3nyz.js +1 -0
  150. package/dist/assets/sr_Latn-FYOU_tQB.js +1 -0
  151. package/dist/assets/sv-CeQXZ1qM.js +1 -0
  152. package/dist/assets/th-C5mRgAid.js +1 -0
  153. package/dist/assets/tr-vCU3KUkO.js +1 -0
  154. package/dist/assets/uk-CKvdHIrD.js +1 -0
  155. package/dist/assets/vi-0BxthtV1.js +1 -0
  156. package/dist/assets/zh_CN-BV9PXZ7J.js +1 -0
  157. package/dist/assets/zh_HK-kGfo3-wS.js +1 -0
  158. package/dist/assets/zh_SG-B8bEKxnm.js +1 -0
  159. package/dist/assets/zh_TW-BshO-JEe.js +1 -0
  160. package/dist/css/themes/AccordionItem.css +1 -1
  161. package/dist/css/themes/BreadcrumbsPopover.css +1 -1
  162. package/dist/css/themes/CountrySelector.css +1 -1
  163. package/dist/css/themes/DatePicker.css +1 -1
  164. package/dist/css/themes/Divider.css +1 -1
  165. package/dist/css/themes/Dropdown.css +1 -1
  166. package/dist/css/themes/FilterMenu.css +1 -1
  167. package/dist/css/themes/Footer.css +1 -1
  168. package/dist/css/themes/HeroBanner.css +1 -1
  169. package/dist/css/themes/Link.css +1 -1
  170. package/dist/css/themes/MastheadItem.css +1 -1
  171. package/dist/css/themes/MastheadMenu.css +1 -1
  172. package/dist/css/themes/PromoTile.css +1 -0
  173. package/dist/css/themes/Quote.css +1 -1
  174. package/dist/css/themes/RatingIndicator.css +1 -1
  175. package/dist/css/themes/SelectBox.css +1 -1
  176. package/dist/css/themes/Slider.css +1 -1
  177. package/dist/css/themes/SocialMediaButton.css +1 -0
  178. package/dist/css/themes/Tag.css +1 -1
  179. package/dist/css/themes/TextField.css +1 -1
  180. package/dist/custom-elements-internal.json +894 -232
  181. package/dist/custom-elements.json +858 -215
  182. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  183. package/dist/generated/i18n/i18n-defaults.d.ts +4 -2
  184. package/dist/generated/i18n/i18n-defaults.js +4 -2
  185. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  186. package/dist/generated/templates/CountrySelectorTemplate.lit.js +1 -2
  187. package/dist/generated/templates/CountrySelectorTemplate.lit.js.map +1 -1
  188. package/dist/generated/templates/DatePickerTemplate.lit.js +4 -5
  189. package/dist/generated/templates/DatePickerTemplate.lit.js.map +1 -1
  190. package/dist/generated/templates/FilterMenuTemplate.lit.js +2 -2
  191. package/dist/generated/templates/FilterMenuTemplate.lit.js.map +1 -1
  192. package/dist/generated/templates/FooterTemplate.lit.js +33 -32
  193. package/dist/generated/templates/FooterTemplate.lit.js.map +1 -1
  194. package/dist/generated/templates/HeroBannerTemplate.lit.js +1 -1
  195. package/dist/generated/templates/HeroBannerTemplate.lit.js.map +1 -1
  196. package/dist/generated/templates/MastheadItemTemplate.lit.js +3 -3
  197. package/dist/generated/templates/MastheadItemTemplate.lit.js.map +1 -1
  198. package/dist/generated/templates/MastheadShellTemplate.lit.js +1 -1
  199. package/dist/generated/templates/MastheadShellTemplate.lit.js.map +1 -1
  200. package/dist/generated/templates/SearchableListBaseTemplate.lit.js +1 -1
  201. package/dist/generated/templates/SearchableListBaseTemplate.lit.js.map +1 -1
  202. package/dist/generated/templates/SelectBoxTemplate.lit.js +4 -4
  203. package/dist/generated/templates/SelectBoxTemplate.lit.js.map +1 -1
  204. package/dist/generated/templates/TextFieldTemplate.lit.js +2 -2
  205. package/dist/generated/templates/TextFieldTemplate.lit.js.map +1 -1
  206. package/dist/generated/themes/AccordionItem.css.d.ts +1 -1
  207. package/dist/generated/themes/AccordionItem.css.js +1 -1
  208. package/dist/generated/themes/AccordionItem.css.js.map +1 -1
  209. package/dist/generated/themes/BreadcrumbsPopover.css.d.ts +1 -1
  210. package/dist/generated/themes/BreadcrumbsPopover.css.js +1 -1
  211. package/dist/generated/themes/BreadcrumbsPopover.css.js.map +1 -1
  212. package/dist/generated/themes/CountrySelector.css.d.ts +1 -1
  213. package/dist/generated/themes/CountrySelector.css.js +1 -1
  214. package/dist/generated/themes/CountrySelector.css.js.map +1 -1
  215. package/dist/generated/themes/DatePicker.css.d.ts +1 -1
  216. package/dist/generated/themes/DatePicker.css.js +1 -1
  217. package/dist/generated/themes/DatePicker.css.js.map +1 -1
  218. package/dist/generated/themes/Divider.css.d.ts +1 -1
  219. package/dist/generated/themes/Divider.css.js +1 -1
  220. package/dist/generated/themes/Divider.css.js.map +1 -1
  221. package/dist/generated/themes/Dropdown.css.d.ts +1 -1
  222. package/dist/generated/themes/Dropdown.css.js +1 -1
  223. package/dist/generated/themes/Dropdown.css.js.map +1 -1
  224. package/dist/generated/themes/FilterMenu.css.d.ts +1 -1
  225. package/dist/generated/themes/FilterMenu.css.js +1 -1
  226. package/dist/generated/themes/FilterMenu.css.js.map +1 -1
  227. package/dist/generated/themes/Footer.css.d.ts +1 -1
  228. package/dist/generated/themes/Footer.css.js +1 -1
  229. package/dist/generated/themes/Footer.css.js.map +1 -1
  230. package/dist/generated/themes/HeroBanner.css.d.ts +1 -1
  231. package/dist/generated/themes/HeroBanner.css.js +1 -1
  232. package/dist/generated/themes/HeroBanner.css.js.map +1 -1
  233. package/dist/generated/themes/Link.css.d.ts +1 -1
  234. package/dist/generated/themes/Link.css.js +1 -1
  235. package/dist/generated/themes/Link.css.js.map +1 -1
  236. package/dist/generated/themes/MastheadItem.css.d.ts +1 -1
  237. package/dist/generated/themes/MastheadItem.css.js +1 -1
  238. package/dist/generated/themes/MastheadItem.css.js.map +1 -1
  239. package/dist/generated/themes/MastheadMenu.css.d.ts +1 -1
  240. package/dist/generated/themes/MastheadMenu.css.js +1 -1
  241. package/dist/generated/themes/MastheadMenu.css.js.map +1 -1
  242. package/dist/generated/themes/PromoTile.css.d.ts +2 -0
  243. package/dist/generated/themes/PromoTile.css.js +8 -0
  244. package/dist/generated/themes/PromoTile.css.js.map +1 -0
  245. package/dist/generated/themes/Quote.css.d.ts +1 -1
  246. package/dist/generated/themes/Quote.css.js +1 -1
  247. package/dist/generated/themes/Quote.css.js.map +1 -1
  248. package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
  249. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  250. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  251. package/dist/generated/themes/SelectBox.css.d.ts +1 -1
  252. package/dist/generated/themes/SelectBox.css.js +1 -1
  253. package/dist/generated/themes/SelectBox.css.js.map +1 -1
  254. package/dist/generated/themes/Slider.css.d.ts +1 -1
  255. package/dist/generated/themes/Slider.css.js +1 -1
  256. package/dist/generated/themes/Slider.css.js.map +1 -1
  257. package/dist/generated/themes/SocialMediaButton.css.d.ts +2 -0
  258. package/dist/generated/themes/SocialMediaButton.css.js +8 -0
  259. package/dist/generated/themes/SocialMediaButton.css.js.map +1 -0
  260. package/dist/generated/themes/Tag.css.d.ts +1 -1
  261. package/dist/generated/themes/Tag.css.js +1 -1
  262. package/dist/generated/themes/Tag.css.js.map +1 -1
  263. package/dist/generated/themes/TextField.css.d.ts +1 -1
  264. package/dist/generated/themes/TextField.css.js +1 -1
  265. package/dist/generated/themes/TextField.css.js.map +1 -1
  266. package/dist/messagebundle.properties +9 -3
  267. package/dist/messagebundle_en.properties +3 -1
  268. package/dist/types/PromoTile.d.ts +60 -0
  269. package/dist/types/PromoTile.js +63 -0
  270. package/dist/types/PromoTile.js.map +1 -0
  271. package/dist/types/SocialMediaButtonType.d.ts +9 -0
  272. package/dist/types/SocialMediaButtonType.js +11 -0
  273. package/dist/types/SocialMediaButtonType.js.map +1 -0
  274. package/dist/utils/debounce.d.ts +3 -1
  275. package/dist/utils/debounce.js +16 -4
  276. package/dist/utils/debounce.js.map +1 -1
  277. package/dist/vscode.html-custom-data.json +152 -1
  278. package/dist/web-types.json +341 -11
  279. package/package.json +2 -1
  280. package/src/Accordion.ts +19 -0
  281. package/src/AccordionItem.ts +28 -0
  282. package/src/AccordionItemTemplate.tsx +25 -10
  283. package/src/AccordionTemplate.tsx +22 -1
  284. package/src/Assets.ts +1 -0
  285. package/src/CountrySelector.hbs +3 -9
  286. package/src/CountrySelector.ts +7 -4
  287. package/src/DatePicker.hbs +17 -26
  288. package/src/DatePicker.ts +2 -2
  289. package/src/FilterMenu.hbs +33 -37
  290. package/src/FilterMenu.ts +69 -15
  291. package/src/Footer.hbs +39 -43
  292. package/src/Footer.ts +88 -14
  293. package/src/HeroBanner.hbs +0 -1
  294. package/src/MastheadItem.hbs +2 -2
  295. package/src/MastheadItem.ts +18 -0
  296. package/src/MastheadShell.hbs +3 -2
  297. package/src/MastheadShell.ts +28 -7
  298. package/src/PromoTile.ts +290 -0
  299. package/src/PromoTileTemplate.tsx +68 -0
  300. package/src/Quote.ts +17 -3
  301. package/src/Search.ts +1 -0
  302. package/src/SearchableListBase.hbs +1 -1
  303. package/src/SelectBox.hbs +11 -13
  304. package/src/SelectBox.ts +2 -2
  305. package/src/SocialMediaButton.ts +152 -0
  306. package/src/SocialMediaButtonTemplate.tsx +18 -0
  307. package/src/StepInput.ts +8 -1
  308. package/src/StepInputTemplate.tsx +1 -2
  309. package/src/TableRow.ts +27 -1
  310. package/src/TextArea.ts +14 -7
  311. package/src/TextField.hbs +5 -5
  312. package/src/TextField.ts +87 -66
  313. package/src/generated/i18n/i18n-defaults.ts +2 -2
  314. package/src/generated/templates/CountrySelectorTemplate.lit.ts +1 -2
  315. package/src/generated/templates/DatePickerTemplate.lit.ts +4 -5
  316. package/src/generated/templates/FilterMenuTemplate.lit.ts +2 -2
  317. package/src/generated/templates/FooterTemplate.lit.ts +33 -32
  318. package/src/generated/templates/HeroBannerTemplate.lit.ts +1 -1
  319. package/src/generated/templates/MastheadItemTemplate.lit.ts +3 -3
  320. package/src/generated/templates/MastheadShellTemplate.lit.ts +1 -1
  321. package/src/generated/templates/SearchableListBaseTemplate.lit.ts +1 -1
  322. package/src/generated/templates/SelectBoxTemplate.lit.ts +4 -4
  323. package/src/generated/templates/TextFieldTemplate.lit.ts +2 -2
  324. package/src/generated/themes/AccordionItem.css.ts +1 -1
  325. package/src/generated/themes/BreadcrumbsPopover.css.ts +1 -1
  326. package/src/generated/themes/CountrySelector.css.ts +1 -1
  327. package/src/generated/themes/DatePicker.css.ts +1 -1
  328. package/src/generated/themes/Divider.css.ts +1 -1
  329. package/src/generated/themes/Dropdown.css.ts +1 -1
  330. package/src/generated/themes/FilterMenu.css.ts +1 -1
  331. package/src/generated/themes/Footer.css.ts +1 -1
  332. package/src/generated/themes/HeroBanner.css.ts +1 -1
  333. package/src/generated/themes/Link.css.ts +1 -1
  334. package/src/generated/themes/MastheadItem.css.ts +1 -1
  335. package/src/generated/themes/MastheadMenu.css.ts +1 -1
  336. package/src/generated/themes/PromoTile.css.ts +9 -0
  337. package/src/generated/themes/Quote.css.ts +1 -1
  338. package/src/generated/themes/RatingIndicator.css.ts +1 -1
  339. package/src/generated/themes/SelectBox.css.ts +1 -1
  340. package/src/generated/themes/Slider.css.ts +1 -1
  341. package/src/generated/themes/SocialMediaButton.css.ts +9 -0
  342. package/src/generated/themes/Tag.css.ts +1 -1
  343. package/src/generated/themes/TextField.css.ts +1 -1
  344. package/src/i18n/messagebundle.properties +9 -3
  345. package/src/i18n/messagebundle_en.properties +3 -1
  346. package/src/themes/AccordionItem.css +61 -22
  347. package/src/themes/BreadcrumbsPopover.css +2 -1
  348. package/src/themes/CountrySelector.css +4 -0
  349. package/src/themes/DatePicker.css +0 -5
  350. package/src/themes/Divider.css +2 -1
  351. package/src/themes/Dropdown.css +1 -1
  352. package/src/themes/FilterMenu.css +2 -2
  353. package/src/themes/Footer.css +44 -25
  354. package/src/themes/HeroBanner.css +34 -32
  355. package/src/themes/Link.css +4 -1
  356. package/src/themes/MastheadItem.css +2 -1
  357. package/src/themes/MastheadMenu.css +4 -4
  358. package/src/themes/PromoTile.css +152 -0
  359. package/src/themes/Quote.css +21 -24
  360. package/src/themes/SelectBox.css +1 -1
  361. package/src/themes/SocialMediaButton.css +50 -0
  362. package/src/themes/Tag.css +18 -24
  363. package/src/themes/TextField.css +0 -15
  364. package/src/types/PromoTile.ts +61 -0
  365. package/src/types/SocialMediaButtonType.ts +10 -0
  366. package/src/utils/debounce.ts +19 -4
  367. package/dist/assets/messagebundle_en-CKeTZNW3.js +0 -1
@@ -0,0 +1,884 @@
1
+ import {UDExFilterMenu, UDExFilterMenuItem, UDExFilterMenuGroupHeader, UDExFilterMenuSelectAll} from "../support/component-imports.js";
2
+ import {UDExListMode} from "../../src/types/List.js";
3
+
4
+ const filterMenu = <>
5
+ <div id="resetClick"></div>
6
+ <div id="resultClick"></div>
7
+ <UDExFilterMenu
8
+ id="filter-menu"
9
+ filter-name="Filter Name"
10
+ filter-name-prefix="Sort by:">
11
+ <UDExFilterMenuItem label="JavaScript" supporting-text="Frontend web development"></UDExFilterMenuItem>
12
+ <UDExFilterMenuItem disabled label="Python" supporting-text="Used in data analysis"></UDExFilterMenuItem>
13
+ <UDExFilterMenuItem label="Java" supporting-text="Building large-scale applications"></UDExFilterMenuItem>
14
+ <UDExFilterMenuItem label="Swift" supporting-text="iOS app development"></UDExFilterMenuItem>
15
+ </UDExFilterMenu>
16
+ </>
17
+
18
+ const filterMenuWithInitialState = <UDExFilterMenu
19
+ id="filter-menu-with-initial-state"
20
+ filter-name="Filter Name"
21
+ mode={UDExListMode.MultiSelect}
22
+ filter-name-prefix="Sort by:">
23
+ <UDExFilterMenuItem selected label="JavaScript" supporting-text="Frontend web development"></UDExFilterMenuItem>
24
+ <UDExFilterMenuItem selected label="Python" supporting-text="Used in data analysis"></UDExFilterMenuItem>
25
+ <UDExFilterMenuItem label="Java" supporting-text="Building large-scale applications"></UDExFilterMenuItem>
26
+ <UDExFilterMenuItem label="Swift" supporting-text="iOS app development"></UDExFilterMenuItem>
27
+ <UDExFilterMenuItem label="Rust" supporting-text="Focused on safety and speed"></UDExFilterMenuItem>
28
+ <UDExFilterMenuItem label="PHP" supporting-text="Server-side scripting language"></UDExFilterMenuItem>
29
+ <UDExFilterMenuItem label="Go" supporting-text="Statically typed language"></UDExFilterMenuItem>
30
+ <UDExFilterMenuItem label="Kotlin" supporting-text="For Android development"></UDExFilterMenuItem>
31
+ <UDExFilterMenuItem label="TypeScript" supporting-text="Super set of JS with static typing"></UDExFilterMenuItem>
32
+ </UDExFilterMenu>
33
+
34
+ const filterMenuGroupWithSearch = <UDExFilterMenu
35
+ id="filter-menu-group-with-search"
36
+ disable-target-overlap="true"
37
+ badge-value="2"
38
+ mode={UDExListMode.MultiSelect}
39
+ filter-name="Filter Name">
40
+ <UDExFilterMenuGroupHeader label="Programming Languages" supporting-text="Digital Builders">
41
+ <UDExFilterMenuItem label="JavaScript" supporting-text="Frontend web development"></UDExFilterMenuItem>
42
+ <UDExFilterMenuItem label="Python" supporting-text="Used in data analysis"></UDExFilterMenuItem>
43
+ <UDExFilterMenuItem label="Java" supporting-text="Building large-scale applications"></UDExFilterMenuItem>
44
+ <UDExFilterMenuItem label="Swift" supporting-text="iOS app development"></UDExFilterMenuItem>
45
+ <UDExFilterMenuItem label="C#" supporting-text="Object-oriented language"></UDExFilterMenuItem>
46
+ <UDExFilterMenuItem label="Perl" supporting-text="General-purpose scripting language"></UDExFilterMenuItem>
47
+ <UDExFilterMenuItem label="Rust" supporting-text="Focused on safety and speed"></UDExFilterMenuItem>
48
+ <UDExFilterMenuItem label="PHP" supporting-text="Server-side scripting language"></UDExFilterMenuItem>
49
+ <UDExFilterMenuItem label="Go" supporting-text="Statically typed language"></UDExFilterMenuItem>
50
+ <UDExFilterMenuItem label="Kotlin" supporting-text="For Android development"></UDExFilterMenuItem>
51
+ <UDExFilterMenuItem label="TypeScript" supporting-text="Super set of JS with static typing"></UDExFilterMenuItem>
52
+ <UDExFilterMenuItem label="Ruby" supporting-text="Readable and easy-to-use"></UDExFilterMenuItem>
53
+ <UDExFilterMenuItem label="C++" supporting-text="Efficient and flexible language"></UDExFilterMenuItem>
54
+ <UDExFilterMenuItem label="R" supporting-text="Language for statistical computing"></UDExFilterMenuItem>
55
+ </UDExFilterMenuGroupHeader>
56
+ </UDExFilterMenu>
57
+
58
+ const filterMenuGroup = <><UDExFilterMenu
59
+ id="filter-menu-group"
60
+ mode={UDExListMode.MultiSelect}
61
+ filter-name="Filter Name">
62
+ <UDExFilterMenuGroupHeader label="Programming Languages" supporting-text="Digital Builders">
63
+ <UDExFilterMenuItem label="JavaScript" supporting-text="Frontend web development"></UDExFilterMenuItem>
64
+ <UDExFilterMenuItem label="Python" supporting-text="Used in data analysis"></UDExFilterMenuItem>
65
+ <UDExFilterMenuItem label="Java" supporting-text="Building large-scale applications"></UDExFilterMenuItem>
66
+ </UDExFilterMenuGroupHeader>
67
+ </UDExFilterMenu>
68
+ <a id="next-focus" href="#">Next focus</a>
69
+ </>
70
+
71
+ const filterMenuRadioGroup = <UDExFilterMenu
72
+ id="filter-menu-radio-group"
73
+ disable-target-overlap="true"
74
+ mode="RadioGroup"
75
+ filter-name="Filter Name">
76
+ <UDExFilterMenuGroupHeader label="Backend Languages">
77
+ <UDExFilterMenuItem label="Python"></UDExFilterMenuItem>
78
+ <UDExFilterMenuItem label="Node.js"></UDExFilterMenuItem>
79
+ </UDExFilterMenuGroupHeader>
80
+ <UDExFilterMenuGroupHeader label="Programming Languages">
81
+ <UDExFilterMenuItem label="JavaScript" supporting-text="Frontend web development"></UDExFilterMenuItem>
82
+ <UDExFilterMenuItem label="Python" supporting-text="Used in data analysis"></UDExFilterMenuItem>
83
+ <UDExFilterMenuItem label="Java" supporting-text="Building large-scale applications"></UDExFilterMenuItem>
84
+ <UDExFilterMenuItem label="Swift" supporting-text="iOS app development"></UDExFilterMenuItem>
85
+ <UDExFilterMenuItem label="C#" supporting-text="Object-oriented language"></UDExFilterMenuItem>
86
+ <UDExFilterMenuItem label="Perl" supporting-text="General-purpose scripting language"></UDExFilterMenuItem>
87
+ <UDExFilterMenuItem label="Rust" supporting-text="Focused on safety and speed"></UDExFilterMenuItem>
88
+ <UDExFilterMenuItem label="PHP" supporting-text="Server-side scripting language"></UDExFilterMenuItem>
89
+ <UDExFilterMenuItem label="Go" supporting-text="Statically typed language"></UDExFilterMenuItem>
90
+ <UDExFilterMenuItem label="Kotlin" supporting-text="For Android development"></UDExFilterMenuItem>
91
+ <UDExFilterMenuItem label="TypeScript" supporting-text="Super set of JS with static typing"></UDExFilterMenuItem>
92
+ <UDExFilterMenuItem label="Ruby" supporting-text="Readable and easy-to-use"></UDExFilterMenuItem>
93
+ </UDExFilterMenuGroupHeader>
94
+ </UDExFilterMenu>
95
+
96
+ const filterMenuSingleWithSearch = <>
97
+ <span id="selectionChangedItem"></span>
98
+ <span id="selectedItems"></span>
99
+ <span id="changeSearch"></span>
100
+ <span id="resetSearch"></span>
101
+ <span id="resultSubmitSearch"></span>
102
+ <span id="dropdownEvents"></span>
103
+ <UDExFilterMenu
104
+ id="filter-menu-with-search"
105
+ filter-name="Filter Name"
106
+ height="320px">
107
+ <UDExFilterMenuItem label="JavaScript" supporting-text="Frontend web development"></UDExFilterMenuItem>
108
+ <UDExFilterMenuItem label="Python" supporting-text="Used in data analysis"></UDExFilterMenuItem>
109
+ <UDExFilterMenuItem label="Java" supporting-text="Building large-scale applications"></UDExFilterMenuItem>
110
+ <UDExFilterMenuItem label="Swift" supporting-text="iOS app development"></UDExFilterMenuItem>
111
+ <UDExFilterMenuItem label="C#" supporting-text="Object-oriented language"></UDExFilterMenuItem>
112
+ <UDExFilterMenuItem label="Perl" supporting-text="General-purpose scripting language"></UDExFilterMenuItem>
113
+ <UDExFilterMenuItem label="Rust" supporting-text="Focused on safety and speed"></UDExFilterMenuItem>
114
+ <UDExFilterMenuItem label="PHP" supporting-text="Server-side scripting language"></UDExFilterMenuItem>
115
+ <UDExFilterMenuItem label="Go" supporting-text="Statically typed language"></UDExFilterMenuItem>
116
+ <UDExFilterMenuItem label="Kotlin" supporting-text="For Android development"></UDExFilterMenuItem>
117
+ <UDExFilterMenuItem label="TypeScript" supporting-text="Super set of JS with static typing"></UDExFilterMenuItem>
118
+ <UDExFilterMenuItem label="Ruby" supporting-text="Readable and easy-to-use"></UDExFilterMenuItem>
119
+ <UDExFilterMenuItem label="C++" supporting-text="Efficient and flexible language"></UDExFilterMenuItem>
120
+ <UDExFilterMenuItem label="R" supporting-text="Language for statistical computing"></UDExFilterMenuItem>
121
+ </UDExFilterMenu>
122
+ </>
123
+
124
+ const filterMenuSelectAll = <>
125
+ <span id="resultSelectAll"></span>
126
+ <UDExFilterMenu
127
+ id="filter-menu-select-all"
128
+ mode={UDExListMode.MultiSelect}
129
+ filter-name="Filter Name">
130
+ <UDExFilterMenuSelectAll>
131
+ <UDExFilterMenuItem label="JavaScript" supporting-text="Frontend web development"></UDExFilterMenuItem>
132
+ <UDExFilterMenuItem label="Python" supporting-text="Used in data analysis"></UDExFilterMenuItem>
133
+ </UDExFilterMenuSelectAll>
134
+ </UDExFilterMenu>
135
+ </>
136
+
137
+ describe("Filter Menu component", () => {
138
+ describe("Filter Menu", () => {
139
+ beforeEach(() => {
140
+ cy.mount(filterMenu);
141
+ });
142
+
143
+ it("tests if web component is correctly rendered", async () => {
144
+ cy.get("[udex-filter-menu]").shadow().find("#filterMenuTrigger").should("exist")
145
+ });
146
+
147
+ it("renders the correct number of filter menu items", () => {
148
+ cy.get("[udex-filter-menu]").find("udex-filter-menu-item").should("have.length", 4);
149
+ });
150
+
151
+ it("renders the busy indicator", () => {
152
+ cy.get("[udex-filter-menu]").then(($el) => {
153
+ const element = $el[0] as UDExFilterMenu;
154
+ element.busy = true;
155
+ });
156
+ cy.get("[udex-filter-menu]").shadow().find("ui5-busy-indicator").should("exist");
157
+ });
158
+
159
+ it('renders the search input if "showSearchInput" property is set', () => {
160
+ cy.get("[udex-filter-menu]").then(($el) => {
161
+ const element = $el[0] as UDExFilterMenu;
162
+ element.showSearchInput = true;
163
+ });
164
+ cy.get("[udex-filter-menu]").shadow().find("[udex-search]").should("exist");
165
+ });
166
+
167
+ it('checks text for "triggerPrefix" and "triggerName"', () => {
168
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger-name").should("have.text", "Filter Name");
169
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger-prefix").should("have.text", "Sort by:");
170
+ });
171
+
172
+ it("click on trigger opens the dropdown and closes if clicked outside", () => {
173
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
174
+
175
+ cy.get("@triggerBtn").click();
176
+ cy.get("@triggerBtn").should("have.attr", "aria-expanded", "true");
177
+
178
+ cy.get("body").click();
179
+ cy.get("@triggerBtn").should("have.attr", "aria-expanded", "false");
180
+ });
181
+
182
+ it("checks label and supporting text for the item", () => {
183
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").click();
184
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__list")
185
+ .find("udex-list-item").eq(0).as("firstItem");
186
+
187
+ cy.get("@firstItem").shadow().find(".udex-list__text-holder > span").should("contain.text", "JavaScript");
188
+ cy.get("@firstItem").shadow().find(".udex-list__supporting-text").should("have.text", "Frontend web development");
189
+ });
190
+
191
+ it('SingleSelect mode - item is selected and dropdown is closed after click on item', () => {
192
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
193
+
194
+ cy.get("@triggerBtn").click();
195
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__list")
196
+ .find("udex-list-item").eq(0).as("firstItem");
197
+
198
+ cy.get("@firstItem").shadow().find(".udex-list__item").click();
199
+ cy.get("@firstItem").shadow().find(".udex-list__item").should("have.attr", "data-selected", "true");
200
+ cy.get("[udex-filter-menu]").should("not.have.attr", "open");
201
+ });
202
+
203
+ it('MultiSelect mode - has "Show Results" and "Reset" buttons', () => {
204
+ cy.get("[udex-filter-menu]").then(($el) => {
205
+ const element = $el[0] as UDExFilterMenu;
206
+ element.mode = UDExListMode.MultiSelect;
207
+ });
208
+
209
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").click();
210
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__result-btn").should("be.visible");
211
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__reset-btn").should("be.visible");
212
+ });
213
+
214
+ it('MultiSelect mode - "Show Results" and "Reset" buttons default text', () => {
215
+ cy.get("[udex-filter-menu]").then(($el) => {
216
+ const element = $el[0] as UDExFilterMenu;
217
+ element.mode = UDExListMode.MultiSelect;
218
+ });
219
+
220
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").click();
221
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__result-btn").should("have.text", "Show Results");
222
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__reset-btn").should("have.text", "Reset");
223
+ });
224
+
225
+ it("hides the action buttons if properties hide-result-btn and hide-reset-btn are set", () => {
226
+ cy.get("[udex-filter-menu]").then(($el) => {
227
+ const element = $el[0] as UDExFilterMenu;
228
+ element.mode = UDExListMode.MultiSelect;
229
+ element.setAttribute("hide-reset-btn", "");
230
+ });
231
+
232
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
233
+ cy.get("@triggerBtn").click();
234
+
235
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__footer").find("udex-button").should("have.length", 1);
236
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__footer").find("udex-button").should("have.text", "Show Results");
237
+
238
+ cy.get("@triggerBtn").click();
239
+
240
+ cy.get("[udex-filter-menu]").then(($el) => {
241
+ const element = $el[0] as UDExFilterMenu;
242
+ element.setAttribute("hide-result-btn", "");
243
+ });
244
+
245
+ cy.get("@triggerBtn").click();
246
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__footer").should("not.exist");
247
+
248
+ cy.get("[udex-filter-menu]").then(($el) => {
249
+ const element = $el[0] as UDExFilterMenu;
250
+ element.removeAttribute("hide-reset-btn");
251
+ });
252
+
253
+ cy.get("@triggerBtn").click();
254
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__footer").find("udex-button").should("have.length", 1);
255
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__footer").find("udex-button").should("have.text", "Reset");
256
+ });
257
+ })
258
+
259
+ describe("Filter Menu with initial state", () => {
260
+ beforeEach(() => {
261
+ cy.mount(filterMenuWithInitialState);
262
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
263
+ cy.get("@triggerBtn").click();
264
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__list").as("list");
265
+ cy.get("@list").find("udex-list-item").eq(0).shadow().find(".udex-list__item").as("firstItem");
266
+ cy.get("@list").find("udex-list-item").eq(1).shadow().find(".udex-list__item").as("secondItem");
267
+
268
+ cy.get("@firstItem").click();
269
+ cy.get("@secondItem").click();
270
+ });
271
+
272
+ it("keep initial list state after clicking outside", () => {
273
+ cy.get("body").click();
274
+ cy.get("@triggerBtn").click();
275
+
276
+ cy.get("@firstItem").should("have.attr", "data-selected", "true");
277
+ cy.get("@secondItem").should("have.attr", "data-selected", "true");
278
+ });
279
+
280
+ it("unselected all items after clicking reset button", () => {
281
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__reset-btn").click();
282
+ cy.get("@triggerBtn").click();
283
+
284
+ cy.get("@firstItem").should("have.attr", "data-selected", "false");
285
+ cy.get("@secondItem").should("have.attr", "data-selected", "false");
286
+ });
287
+
288
+ it("apply list state after clicking result button", () => {
289
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__result-btn").click();
290
+ cy.get("@triggerBtn").click();
291
+
292
+ cy.get("@firstItem").should("have.attr", "data-selected", "false");
293
+ cy.get("@secondItem").should("have.attr", "data-selected", "false");
294
+ });
295
+ });
296
+
297
+ describe("Filter Menu group with search", () => {
298
+ beforeEach(() => {
299
+ cy.mount(filterMenuGroupWithSearch);
300
+ });
301
+
302
+ it('renders the right badge', () => {
303
+ cy.mount(filterMenuGroupWithSearch);
304
+ cy.get("[udex-filter-menu]").shadow().find("[udex-badge]").should("exist");
305
+ });
306
+
307
+ it('MultiSelect mode - click on the group item header changes to indeterminate', () => {
308
+ cy.mount(filterMenuGroupWithSearch);
309
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").click();
310
+
311
+ cy.get("[udex-filter-menu]").shadow()
312
+ .find("udex-list-item").eq(0).shadow()
313
+ .find(".udex-list__item").click();
314
+
315
+ cy.get("[udex-filter-menu]").shadow()
316
+ .find("udex-list-group-header")
317
+ .should("have.attr", "indeterminate");
318
+ });
319
+
320
+ it('MultiSelect mode - after filtering and clicking on the only item found, the header should be indeterminate', () => {
321
+ cy.mount(filterMenuGroupWithSearch);
322
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").click();
323
+
324
+ cy.get("[udex-filter-menu]")
325
+ .shadow().find("[udex-search]")
326
+ .shadow().find(".udex-search__field")
327
+ .click().type("go");
328
+
329
+ cy.get("[udex-filter-menu]").shadow()
330
+ .find("udex-list-item").eq(0).shadow()
331
+ .find(".udex-list__item").click();
332
+
333
+ cy.get("[udex-filter-menu]").shadow()
334
+ .find("udex-list-group-header")
335
+ .should("have.attr", "indeterminate")
336
+
337
+ cy.get("[udex-filter-menu]").shadow()
338
+ .find("udex-list-group-header")
339
+ .should("have.attr", "selected")
340
+ });
341
+ });
342
+
343
+ describe("Filter Menu group", () => {
344
+ beforeEach(() => {
345
+ cy.mount(filterMenuGroup);
346
+ });
347
+
348
+ it('MultiSelect mode - checks nonInteractive state for the group header', () => {
349
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").click();
350
+
351
+ cy.get("[udex-filter-menu]").shadow()
352
+ .find(".udex-searchable-list__header")
353
+ .as("groupHeader");
354
+
355
+ cy.get("@groupHeader").then(($el) => {
356
+ const element = $el[0] as UDExFilterMenuGroupHeader;
357
+ element.nonInteractive =true;
358
+ });
359
+
360
+ cy.get("@groupHeader").shadow()
361
+ .find(".udex-list__inactive-header")
362
+ .should("be.visible");
363
+ });
364
+
365
+ it('checks label and supporting text for the group header item', () => {
366
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").click();
367
+
368
+ cy.get("[udex-filter-menu]").shadow()
369
+ .find(".udex-searchable-list__header")
370
+ .as("groupHeader");
371
+
372
+ cy.get("@groupHeader").shadow().find("udex-list-item").should(($item) => {
373
+ expect($item).to.have.attr("label", "Programming Languages");
374
+ expect($item).to.have.attr("supporting-text", "Digital Builders");
375
+ });
376
+ });
377
+
378
+ it("unselect all items when user clicks on reset button", () => {
379
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
380
+ cy.get("@triggerBtn").click();
381
+
382
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__list").as("list");
383
+ cy.get("@list").find("udex-list-item").eq(0).shadow().find(".udex-list__item").as("firstItem");
384
+ cy.get("@list").find("udex-list-item").eq(1).shadow().find(".udex-list__item").as("secondItem");
385
+
386
+ cy.get("@firstItem").click();
387
+ cy.get("@secondItem").click();
388
+
389
+ cy.get("@firstItem").should("have.attr", "data-selected", "true");
390
+ cy.get("@secondItem").should("have.attr", "data-selected", "true");
391
+
392
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__reset-btn").click();
393
+
394
+ cy.get("@firstItem").should("have.attr", "data-selected", "false");
395
+ cy.get("@secondItem").should("have.attr", "data-selected", "false");
396
+ });
397
+ });
398
+
399
+ describe("Filter Menu radio group", () => {
400
+ beforeEach(() => {
401
+ cy.mount(filterMenuRadioGroup);
402
+ });
403
+
404
+ it('RadioGroup mode - checks the selection of the item from each group', () => {
405
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
406
+ cy.get("@triggerBtn").click();
407
+
408
+ cy.get("[udex-filter-menu]").shadow().find("udex-list-group-header").eq(0)
409
+ .find("udex-list-item").eq(0).shadow()
410
+ .find(".udex-list__item").as("firstItemOfFirstGroup");
411
+
412
+ cy.get("[udex-filter-menu]").shadow().find("udex-list-group-header").eq(1)
413
+ .find("udex-list-item").eq(0).shadow()
414
+ .find(".udex-list__item").as("secondItemOfSecondGroup");
415
+
416
+ cy.get("@firstItemOfFirstGroup").click();
417
+ cy.get("@secondItemOfSecondGroup").click();
418
+
419
+ cy.get("@firstItemOfFirstGroup").should("have.attr", "data-selected", "true");
420
+ cy.get("@secondItemOfSecondGroup").should("have.attr", "data-selected", "true");
421
+ });
422
+
423
+ it('RadioGroup mode - checks nonInteractive state for the group header', () => {
424
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").click();
425
+
426
+ cy.get("[udex-filter-menu]").shadow()
427
+ .find(".udex-searchable-list__header")
428
+ .as("groupHeader");
429
+
430
+ cy.get("@groupHeader").then(($el) => {
431
+ const element = $el[0] as UDExFilterMenuGroupHeader;
432
+ element.nonInteractive = true;
433
+ });
434
+
435
+ cy.get("@groupHeader").shadow()
436
+ .find(".udex-list__inactive-header")
437
+ .should("be.visible");
438
+ });
439
+
440
+ it('RadioGroup mode - search is hidden for this mode', () => {
441
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").click();
442
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__search").should("not.exist");
443
+ });
444
+ });
445
+
446
+ describe("Filter Menu Single with search", () => {
447
+ beforeEach(() => {
448
+ cy.mount(filterMenuSingleWithSearch);
449
+ });
450
+
451
+ it('shows search if filter has more than 13 items', () => {
452
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
453
+ cy.get("@triggerBtn").click();
454
+
455
+ cy.get("[udex-filter-menu]").find("udex-filter-menu-item").should("have.length", 14);
456
+ cy.get("[udex-filter-menu]").shadow().find("udex-search").should("be.visible");
457
+ });
458
+
459
+ it('should filter items based on input', () => {
460
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
461
+ cy.get("@triggerBtn").click();
462
+
463
+ cy.get("[udex-filter-menu]").shadow().find("udex-search").shadow().find(".udex-search__field").as("searchInput");
464
+ cy.get("@searchInput").click().type("x");
465
+
466
+ cy.get("[udex-filter-menu]").shadow().find(".udex-no-result").should("have.text", "No matches found.");
467
+
468
+ cy.get("@searchInput").type("{backspace}").type("java");
469
+
470
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__list").find("udex-list-item").should("have.length", 2);
471
+
472
+ cy.get("@searchInput").type("s");
473
+
474
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__list").find("udex-list-item").should("have.length", 1);
475
+
476
+ cy.get("[udex-filter-menu]").shadow().find("udex-search").shadow().find(".udex-search__reset-button").click();
477
+
478
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__list").find("udex-list-item").should("have.length", 14);
479
+ });
480
+
481
+ it("test if reset searching value using resetSearch method", () => {
482
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
483
+ cy.get("[udex-filter-menu]").shadow().find("udex-search").shadow().find(".udex-search__field").as("searchInput");
484
+
485
+ cy.get("@triggerBtn").click();
486
+ cy.get("@searchInput").click().type("go");
487
+
488
+ cy.get("[udex-filter-menu]").shadow().find("udex-search").shadow().find(".udex-search__reset-button").as("clearSearchBtn");
489
+
490
+ cy.get("@clearSearchBtn").click();
491
+ cy.get("@triggerBtn").click();
492
+
493
+ cy.get("@searchInput").should("have.value", "");
494
+ });
495
+
496
+ it("focuses on element with corresponding starting letter", () => {
497
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
498
+ cy.get("@triggerBtn").click();
499
+
500
+ cy.get("[udex-filter-menu]")
501
+ .shadow().find("udex-search")
502
+ .shadow().find(".udex-search__container--focus").should("exist");
503
+
504
+ cy.realPress("Tab");
505
+ cy.realPress("s");
506
+
507
+ cy.get("[udex-filter-menu]").shadow().find("udex-list-item").eq(3)
508
+ .should("have.attr", "focused");
509
+ });
510
+
511
+ it("keyboard focus navigation for next(`Tab`) and previous (`Shift + Tab`) element", () => {
512
+ const LIMIT = 4;
513
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
514
+ cy.get("@triggerBtn").click();
515
+
516
+ for (let i = 0; i < LIMIT; i++) {
517
+ cy.realPress("ArrowDown");
518
+ }
519
+ for (let i = 0; i < LIMIT; i++) {
520
+ cy.realPress("ArrowUp");
521
+ }
522
+
523
+ cy.get("[udex-filter-menu]")
524
+ .shadow().find("udex-search")
525
+ .shadow().find(".udex-search__container--focus").should("exist");
526
+ });
527
+ });
528
+
529
+ describe("Filter Menu select all", () => {
530
+ beforeEach(() => {
531
+ cy.mount(filterMenuSelectAll);
532
+ cy.get("[udex-filter-menu]")
533
+ .shadow().find("udex-list-select-all")
534
+ .shadow().find("udex-list-item")
535
+ .shadow().find(".udex-list__header-select-all").as("selectAllHeader");
536
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
537
+ cy.get("@triggerBtn").click();
538
+ });
539
+
540
+ it("render the correct label for the header", () => {
541
+ cy.get("[udex-filter-menu]")
542
+ .shadow().find("udex-list-select-all")
543
+ .shadow().find("udex-list-item").should("have.text", "Select All");
544
+ });
545
+
546
+ it("header is not selected if at least one element is selected", () => {
547
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__list").as("list");
548
+ cy.get("@list").find("udex-list-item").eq(0).shadow().find(".udex-list__item").as("firstItem");
549
+
550
+ cy.get("@firstItem").click();
551
+
552
+ cy.get("@selectAllHeader").should("not.have.attr", "selected");
553
+ });
554
+
555
+ it("unselect all items when user clicks on select all header", () => {
556
+ cy.get("[udex-filter-menu]").shadow()
557
+ .find("udex-list-select-all")
558
+ .find("udex-list-item").as("item");
559
+ cy.get("@item").eq(0).shadow().find(".udex-list__item").as("firstItem");
560
+ cy.get("@item").eq(1).shadow().find(".udex-list__item").as("secondItem");
561
+
562
+ cy.get("[udex-filter-menu]")
563
+ .shadow().find("udex-list-select-all")
564
+ .shadow().find("udex-list-item")
565
+ .shadow().find(".udex-list__item")
566
+ .as("selectAllHeader");
567
+
568
+ cy.get("@firstItem").click();
569
+ cy.get("@secondItem").click();
570
+
571
+ cy.get("@firstItem").should("have.attr", "data-selected", "true");
572
+ cy.get("@secondItem").should("have.attr", "data-selected", "true");
573
+ cy.get("@selectAllHeader").should("have.attr", "data-selected", "false");
574
+
575
+ cy.get("@selectAllHeader").click();
576
+
577
+ cy.get("@firstItem").should("have.attr", "data-selected", "false");
578
+ cy.get("@secondItem").should("have.attr", "data-selected", "false");
579
+ });
580
+
581
+ it("select all header focus on pressed letter", () => {
582
+ cy.realPress("p");
583
+ cy.get("[udex-filter-menu]").shadow().find("udex-list-item").eq(1).should("have.attr", "focused");
584
+ });
585
+ });
586
+
587
+ describe("Filter Menu focus state tests", () => {
588
+ it("focus returns to trigger when pressing Shift+Tab in dropdown with no search", () => {
589
+ cy.mount(filterMenuSelectAll);
590
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
591
+ cy.get("@triggerBtn").click();
592
+
593
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__list").as("list");
594
+ cy.get("@list").find("udex-list-select-all").shadow().find("udex-list-item").as("headerSelectAll");
595
+
596
+ cy.get("@headerSelectAll").click();
597
+ cy.realPress(["Shift", "Tab"]);
598
+
599
+ cy.get("@triggerBtn").should("be.focused");
600
+ });
601
+
602
+ it("focus goes to Reset button when pressing Tab on a list item and Result button", () => {
603
+ cy.mount(filterMenuSelectAll);
604
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
605
+ cy.get("@triggerBtn").click();
606
+
607
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__list").as("list");
608
+ cy.get("@list").find("udex-list-item").eq(0).shadow().find(".udex-list__item").as("listItem");
609
+ cy.get("@listItem").click();
610
+
611
+ cy.realPress("Tab");
612
+ cy.realPress("Tab");
613
+
614
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__reset-btn").shadow().find("button")
615
+ .should("have.focus");
616
+ });
617
+
618
+ it("focus goes to Results button when pressing Tab on a list item and at least one item is selected", () => {
619
+ cy.mount(filterMenuSelectAll);
620
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
621
+ cy.get("@triggerBtn").click();
622
+
623
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__list").find("udex-list-item").eq(0).shadow().find(".udex-list__item").as("listItem");
624
+ cy.get("@listItem").click();
625
+
626
+ cy.realPress("Tab");
627
+
628
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__result-btn").shadow().find("button")
629
+ .should("have.focus");
630
+ });
631
+
632
+ it("focus goes to next interactive element on the page when pressing Tab on a list item and footer buttons are hidden", () => {
633
+ cy.mount(filterMenuGroup);
634
+ cy.get("[udex-filter-menu]").then(($el) => {
635
+ const element = $el[0] as UDExFilterMenu;
636
+ element.hideResetBtn = true;
637
+ element.hideResultBtn = true;
638
+ });
639
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
640
+ cy.get("@triggerBtn").click();
641
+
642
+ cy.realPress("Tab");
643
+
644
+
645
+ cy.get("#next-focus").should("have.focus");
646
+ });
647
+
648
+ it("focus goes to next interactive element on the page when pressing Tab on Reset button", () => {
649
+ cy.mount(filterMenuGroup);
650
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
651
+ cy.get("@triggerBtn").click();
652
+
653
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__list").find("udex-list-item").eq(0).shadow().find(".udex-list__item").as("listItem");
654
+ cy.get("@listItem").click();
655
+
656
+ cy.realPress("Tab");
657
+ cy.realPress("Tab");
658
+ cy.realPress("Tab");
659
+
660
+ cy.get("#next-focus").should("have.focus");
661
+ });
662
+ });
663
+
664
+ describe('Filter menu events tests',async () => {
665
+ it("emit selection-change when list items clicked", () => {
666
+ let selectionChangedItem;
667
+ let selectedItems;
668
+ cy.mount(filterMenuSingleWithSearch);
669
+
670
+ cy.get("[udex-filter-menu]").then(menu => {
671
+ menu.get(0).addEventListener('ui5-selection-change', function(e: CustomEvent) {
672
+ selectionChangedItem = e.detail.item._id;
673
+ selectedItems = e.detail.selectedItems.map((item) => { return item._id }).join("/");
674
+ });
675
+ });
676
+
677
+ const selectedIds: string[] = [];
678
+
679
+ cy.get("[udex-filter-menu]").then(($el) => {
680
+ const element = $el[0] as UDExFilterMenu;
681
+ element.mode = UDExListMode.MultiSelect;
682
+ });
683
+
684
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
685
+ cy.get("@triggerBtn").click();
686
+
687
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__list").as("list");
688
+
689
+ cy.get("@list").find("udex-list-item").eq(0).as("firstItem");
690
+ cy.get("@firstItem").then(($el) => {
691
+ const firstItemId = $el.attr("data-token-id");
692
+ selectedIds.push(firstItemId!);
693
+ });
694
+
695
+ cy.get("@firstItem").shadow().find(".udex-list__item").click( );
696
+
697
+ expect(selectionChangedItem).to.equal(selectedIds[0]);
698
+ });
699
+
700
+ it("emit change-search when search field typing", () => {
701
+ cy.mount(filterMenuSingleWithSearch);
702
+ cy.window().then((win) => {
703
+ win.document.addEventListener('ui5-change-search', (e: CustomEvent) => {
704
+ win.document.getElementById('changeSearch')!.innerText = e.detail.value;
705
+ });
706
+ });
707
+
708
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
709
+ cy.get("@triggerBtn").click();
710
+
711
+ cy.get("[udex-filter-menu]").shadow().find("udex-search").shadow().find(".udex-search__field").as("searchInput");
712
+ cy.get("@searchInput").click().type("java");
713
+
714
+ cy.get("#changeSearch").should("have.text", "java");
715
+
716
+ cy.get("@searchInput").should("have.value", "java");
717
+ });
718
+
719
+ it("emit reset-search when search reset button is clicked", () => {
720
+ cy.mount(filterMenuSingleWithSearch);
721
+
722
+ cy.window().then((win) => {
723
+ win.document.addEventListener('ui5-reset-search', (e: CustomEvent) => {
724
+ win.document.getElementById('resetSearch')!.innerText = e.type;
725
+ });
726
+ });
727
+
728
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
729
+ cy.get("@triggerBtn").click();
730
+
731
+ cy.get("[udex-filter-menu]").shadow().find("udex-search").shadow().find(".udex-search__field").as("searchInput");
732
+ cy.get("@searchInput").click().type("j");
733
+
734
+ cy.get("#changeSearch").should("have.text", "j");
735
+
736
+ cy.get("[udex-filter-menu]").shadow().find("udex-search").shadow().find(".udex-search__reset-button").as("resetButton");
737
+ cy.get("@resetButton").click();
738
+
739
+ cy.get("#resetSearch").should("have.text", "ui5-reset-search");
740
+ });
741
+
742
+ it("emit reset-click when reset button is clicked", () => {
743
+ let resetClickId;
744
+ cy.mount(filterMenu);
745
+
746
+ cy.get("[udex-filter-menu]").then(menu => {
747
+ menu.get(0).addEventListener("ui5-reset-click", event => (e: CustomEvent) => {
748
+ resetClickId = e.detail.item._id;
749
+ });
750
+ });
751
+
752
+ cy.get("[udex-filter-menu]").then(($el) => {
753
+ const element = $el[0] as UDExFilterMenu;
754
+ element.mode = UDExListMode.MultiSelect;
755
+ });
756
+
757
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
758
+ cy.get("@triggerBtn").click();
759
+
760
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__list").find("udex-list-item").eq(0).as("firstItem");
761
+ cy.get("@firstItem").shadow().find(".udex-list__item").click();
762
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__reset-btn").click();
763
+
764
+ cy.get("@firstItem").invoke('attr', 'data-token-id"')
765
+ .then((attrValue) => {
766
+ expect(attrValue).to.equal(resetClickId);
767
+ });
768
+ });
769
+
770
+ it("emit result-click when result button is clicked", () => {
771
+ let resultClickId;
772
+ cy.mount(filterMenu);
773
+ cy.window().then((win) => {
774
+ win.document.addEventListener('ui5-result-click', (e: CustomEvent) => {
775
+ const selectedItems = e.detail.selectedItems;
776
+ win.document.getElementById('resultClick')!.innerHTML = selectedItems.map((item) => item._id).join("/");
777
+ });
778
+ });
779
+
780
+ cy.get("[udex-filter-menu]").then(($el) => {
781
+ const element = $el[0] as UDExFilterMenu;
782
+ element.mode = UDExListMode.MultiSelect;
783
+ });
784
+
785
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
786
+ cy.get("@triggerBtn").click();
787
+
788
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__result-btn").as("resultFilterBtn");
789
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__list").find("udex-list-item").eq(0).as("firstItem");
790
+
791
+ cy.get("@firstItem").then(($el) => {
792
+ resultClickId = $el.attr("data-token-id");
793
+ });
794
+
795
+ cy.get("@firstItem").shadow().find(".udex-list__item").click();
796
+ cy.get("@resultFilterBtn").click();
797
+
798
+ cy.get("#resultClick").should(($el) => {
799
+ expect($el.text()).to.equal(resultClickId);
800
+ });
801
+ });
802
+
803
+ it("emit submit-search when user presses Enter key in the search", () => {
804
+ let selectedIds: string[] = [];
805
+ let selectedItems;
806
+ cy.mount(filterMenuSingleWithSearch);
807
+
808
+ cy.get("[udex-filter-menu]").then(menu => {
809
+ menu.get(0).addEventListener('ui5-submit-search', function(e: CustomEvent) {
810
+ selectedItems = e.detail.selectedItems;
811
+ });
812
+ });
813
+
814
+ it("emit open/close when dropdown opened/closed", () => {
815
+ cy.mount(filterMenuSingleWithSearch);
816
+
817
+ cy.window().then((win) => {
818
+ win.document.addEventListener('ui5-before-open', (e: CustomEvent) => {
819
+ win.document.getElementById('dropdownEvents')!.innerText = e.type;
820
+ });
821
+
822
+ win.document.addEventListener('ui5-after-open', (e: CustomEvent) => {
823
+ win.document.getElementById('dropdownEvents')!.innerText = e.type;
824
+ });
825
+
826
+ win.document.addEventListener('ui5-after-close', (e: CustomEvent) => {
827
+ win.document.getElementById('dropdownEvents')!.innerText = e.type;
828
+ });
829
+ });
830
+
831
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
832
+ cy.get("@triggerBtn").click();
833
+ cy.get("#dropdownEvents").should("have.text", "ui5-before-open");
834
+ cy.get("#dropdownEvents").should("have.text", "ui5-after-open");
835
+ cy.get("@triggerBtn").click();
836
+ cy.get("#dropdownEvents").should("have.text", "ui5-after-close");
837
+ });
838
+
839
+ cy.get("[udex-filter-menu]").then(($el) => {
840
+ const element = $el[0] as UDExFilterMenu;
841
+ element.mode = UDExListMode.MultiSelect;
842
+ });
843
+
844
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
845
+ cy.get("@triggerBtn").click();
846
+
847
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__list").as("list");
848
+ cy.get("@list").find("udex-list-item").eq(0).as("firstItem");
849
+
850
+ cy.get("@firstItem").then(($el) => {
851
+ const firstItemId = $el.attr("data-token-id");
852
+ selectedIds.push(firstItemId!);
853
+ });
854
+
855
+ cy.get("@firstItem").shadow().find(".udex-list__item").click();
856
+
857
+ cy.get("[udex-filter-menu]").shadow().find("udex-search").shadow().find(".udex-search__field").as("searchInput");
858
+ cy.get("@searchInput").click();
859
+ cy.realPress("Enter");
860
+
861
+ expect(selectedItems).to.equal(selectedIds[0]);
862
+ });
863
+
864
+ it("emit select-all when Select All header clicked", () => {
865
+ cy.mount(filterMenuSelectAll);
866
+ cy.window().then((win) => {
867
+ win.document.addEventListener('ui5-select-all', (e: CustomEvent) => {
868
+ win.document.getElementById('resultSelectAll')!.innerText = e.type;
869
+ });
870
+ });
871
+
872
+ cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").as("triggerBtn");
873
+ cy.get("@triggerBtn").click();
874
+
875
+ cy.get("[udex-filter-menu]")
876
+ .shadow().find("udex-list-select-all")
877
+ .shadow().find("udex-list-item")
878
+ .shadow().find(".udex-list__header-select-all").as("selectAllHeader");
879
+ cy.get("@selectAllHeader").click();
880
+
881
+ cy.get("#resultSelectAll").should("have.text", "ui5-select-all");
882
+ });
883
+ });
884
+ });