@ui5/webcomponents-fiori 2.9.0-rc.0 → 2.9.0-rc.2

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 (332) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/cypress/specs/DynamicPage.cy.tsx +38 -0
  3. package/cypress/specs/Search.cy.tsx +817 -0
  4. package/cypress/specs/SearchField.cy.tsx +0 -4
  5. package/cypress/specs/ShellBar.cy.tsx +99 -4
  6. package/cypress/specs/SideNavigation.cy.tsx +52 -0
  7. package/cypress/specs/UserMenu.cy.tsx +66 -9
  8. package/dist/.tsbuildinfo +1 -1
  9. package/dist/DynamicPage.js +12 -0
  10. package/dist/DynamicPage.js.map +1 -1
  11. package/dist/NavigationMenuItem.d.ts +1 -1
  12. package/dist/NavigationMenuItem.js +1 -1
  13. package/dist/NavigationMenuItem.js.map +1 -1
  14. package/dist/NavigationMenuItemTemplate.d.ts +2 -2
  15. package/dist/NavigationMenuItemTemplate.js +2 -12
  16. package/dist/NavigationMenuItemTemplate.js.map +1 -1
  17. package/dist/Search.d.ts +175 -0
  18. package/dist/Search.js +420 -0
  19. package/dist/Search.js.map +1 -0
  20. package/dist/SearchField.d.ts +3 -1
  21. package/dist/SearchField.js +7 -2
  22. package/dist/SearchField.js.map +1 -1
  23. package/dist/SearchFieldScopeOption.d.ts +2 -0
  24. package/dist/SearchFieldScopeOption.js +2 -0
  25. package/dist/SearchFieldScopeOption.js.map +1 -1
  26. package/dist/SearchFieldTemplate.js +1 -1
  27. package/dist/SearchFieldTemplate.js.map +1 -1
  28. package/dist/SearchItem.d.ts +52 -0
  29. package/dist/SearchItem.js +106 -0
  30. package/dist/SearchItem.js.map +1 -0
  31. package/dist/SearchItemGroup.d.ts +17 -0
  32. package/dist/SearchItemGroup.js +39 -0
  33. package/dist/SearchItemGroup.js.map +1 -0
  34. package/dist/SearchItemTemplate.d.ts +2 -0
  35. package/dist/SearchItemTemplate.js +14 -0
  36. package/dist/SearchItemTemplate.js.map +1 -0
  37. package/dist/SearchPopoverTemplate.d.ts +2 -0
  38. package/dist/SearchPopoverTemplate.js +22 -0
  39. package/dist/SearchPopoverTemplate.js.map +1 -0
  40. package/dist/SearchTemplate.d.ts +2 -0
  41. package/dist/SearchTemplate.js +7 -0
  42. package/dist/SearchTemplate.js.map +1 -0
  43. package/dist/ShellBar.d.ts +7 -2
  44. package/dist/ShellBar.js +31 -23
  45. package/dist/ShellBar.js.map +1 -1
  46. package/dist/ShellBarItem.d.ts +24 -0
  47. package/dist/ShellBarItem.js +27 -0
  48. package/dist/ShellBarItem.js.map +1 -1
  49. package/dist/ShellBarPopoverTemplate.js +1 -1
  50. package/dist/ShellBarPopoverTemplate.js.map +1 -1
  51. package/dist/ShellBarTemplate.js +11 -7
  52. package/dist/ShellBarTemplate.js.map +1 -1
  53. package/dist/SideNavigation.d.ts +21 -0
  54. package/dist/SideNavigation.js +22 -0
  55. package/dist/SideNavigation.js.map +1 -1
  56. package/dist/SideNavigationGroup.js +3 -3
  57. package/dist/SideNavigationGroup.js.map +1 -1
  58. package/dist/SideNavigationItem.js +3 -3
  59. package/dist/SideNavigationItem.js.map +1 -1
  60. package/dist/SideNavigationTemplate.js +1 -1
  61. package/dist/SideNavigationTemplate.js.map +1 -1
  62. package/dist/UserMenu.d.ts +6 -2
  63. package/dist/UserMenu.js +17 -14
  64. package/dist/UserMenu.js.map +1 -1
  65. package/dist/UserMenuAccount.d.ts +7 -0
  66. package/dist/UserMenuAccount.js +10 -0
  67. package/dist/UserMenuAccount.js.map +1 -1
  68. package/dist/UserMenuTemplate.js +26 -19
  69. package/dist/UserMenuTemplate.js.map +1 -1
  70. package/dist/ViewSettingsDialog.d.ts +1 -0
  71. package/dist/ViewSettingsDialog.js +6 -1
  72. package/dist/ViewSettingsDialog.js.map +1 -1
  73. package/dist/ViewSettingsDialogTemplate.js +1 -1
  74. package/dist/ViewSettingsDialogTemplate.js.map +1 -1
  75. package/dist/bundle.esm.js +3 -0
  76. package/dist/bundle.esm.js.map +1 -1
  77. package/dist/css/themes/DynamicPage.css +1 -1
  78. package/dist/css/themes/DynamicPageHeader.css +1 -1
  79. package/dist/css/themes/DynamicPageHeaderActions.css +1 -1
  80. package/dist/css/themes/DynamicPageTitle.css +1 -1
  81. package/dist/css/themes/FlexibleColumnLayout.css +1 -1
  82. package/dist/css/themes/MediaGallery.css +1 -1
  83. package/dist/css/themes/MediaGalleryItem.css +1 -1
  84. package/dist/css/themes/NavigationMenu.css +1 -1
  85. package/dist/css/themes/NavigationMenuItem.css +1 -1
  86. package/dist/css/themes/NotificationListGroupItem.css +1 -1
  87. package/dist/css/themes/NotificationListItem.css +1 -1
  88. package/dist/css/themes/NotificationListItemBase.css +1 -1
  89. package/dist/css/themes/NotificationStateIcon.css +1 -1
  90. package/dist/css/themes/Page.css +1 -1
  91. package/dist/css/themes/ProductSwitchItem.css +1 -1
  92. package/dist/css/themes/Search.css +1 -0
  93. package/dist/css/themes/SearchField.css +1 -1
  94. package/dist/css/themes/SearchItem.css +1 -0
  95. package/dist/css/themes/SearchItemGroup.css +1 -0
  96. package/dist/css/themes/ShellBar.css +1 -1
  97. package/dist/css/themes/ShellBarPopover.css +1 -1
  98. package/dist/css/themes/SideNavigation.css +1 -1
  99. package/dist/css/themes/SideNavigationGroup.css +1 -1
  100. package/dist/css/themes/SideNavigationItem.css +1 -1
  101. package/dist/css/themes/SideNavigationItemBase.css +1 -1
  102. package/dist/css/themes/SideNavigationPopover.css +1 -1
  103. package/dist/css/themes/SideNavigationSubItem.css +1 -1
  104. package/dist/css/themes/Timeline.css +1 -1
  105. package/dist/css/themes/TimelineGroupItem.css +1 -1
  106. package/dist/css/themes/TimelineItem.css +1 -1
  107. package/dist/css/themes/UploadCollection.css +1 -1
  108. package/dist/css/themes/UploadCollectionItem.css +1 -1
  109. package/dist/css/themes/UserMenu.css +1 -1
  110. package/dist/css/themes/UserMenuItem.css +1 -1
  111. package/dist/css/themes/UserSettingsItem.css +1 -1
  112. package/dist/css/themes/ViewSettingsDialog.css +1 -1
  113. package/dist/css/themes/Wizard.css +1 -1
  114. package/dist/css/themes/WizardTab.css +1 -1
  115. package/dist/css/themes/sap_fiori_3/parameters-bundle.css +1 -1
  116. package/dist/css/themes/sap_fiori_3_dark/parameters-bundle.css +1 -1
  117. package/dist/css/themes/sap_fiori_3_hcb/parameters-bundle.css +1 -1
  118. package/dist/css/themes/sap_fiori_3_hcw/parameters-bundle.css +1 -1
  119. package/dist/css/themes/sap_horizon/parameters-bundle.css +1 -1
  120. package/dist/css/themes/sap_horizon_dark/parameters-bundle.css +1 -1
  121. package/dist/css/themes/sap_horizon_dark_exp/parameters-bundle.css +1 -1
  122. package/dist/css/themes/sap_horizon_exp/parameters-bundle.css +1 -1
  123. package/dist/css/themes/sap_horizon_hcb/parameters-bundle.css +1 -1
  124. package/dist/css/themes/sap_horizon_hcb_exp/parameters-bundle.css +1 -1
  125. package/dist/css/themes/sap_horizon_hcw/parameters-bundle.css +1 -1
  126. package/dist/css/themes/sap_horizon_hcw_exp/parameters-bundle.css +1 -1
  127. package/dist/custom-elements-internal.json +552 -0
  128. package/dist/custom-elements.json +479 -0
  129. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  130. package/dist/generated/assets/i18n/messagebundle_en_US_saprigi.json +1 -1
  131. package/dist/generated/assets/themes/sap_fiori_3/parameters-bundle.css.json +1 -1
  132. package/dist/generated/assets/themes/sap_fiori_3_dark/parameters-bundle.css.json +1 -1
  133. package/dist/generated/assets/themes/sap_fiori_3_hcb/parameters-bundle.css.json +1 -1
  134. package/dist/generated/assets/themes/sap_fiori_3_hcw/parameters-bundle.css.json +1 -1
  135. package/dist/generated/assets/themes/sap_horizon/parameters-bundle.css.json +1 -1
  136. package/dist/generated/assets/themes/sap_horizon_dark/parameters-bundle.css.json +1 -1
  137. package/dist/generated/assets/themes/sap_horizon_dark_exp/parameters-bundle.css.json +1 -1
  138. package/dist/generated/assets/themes/sap_horizon_exp/parameters-bundle.css.json +1 -1
  139. package/dist/generated/assets/themes/sap_horizon_hcb/parameters-bundle.css.json +1 -1
  140. package/dist/generated/assets/themes/sap_horizon_hcb_exp/parameters-bundle.css.json +1 -1
  141. package/dist/generated/assets/themes/sap_horizon_hcw/parameters-bundle.css.json +1 -1
  142. package/dist/generated/assets/themes/sap_horizon_hcw_exp/parameters-bundle.css.json +1 -1
  143. package/dist/generated/i18n/i18n-defaults.d.ts +5 -1
  144. package/dist/generated/i18n/i18n-defaults.js +6 -2
  145. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  146. package/dist/generated/themes/DynamicPage.css.d.ts +1 -1
  147. package/dist/generated/themes/DynamicPage.css.js +1 -1
  148. package/dist/generated/themes/DynamicPage.css.js.map +1 -1
  149. package/dist/generated/themes/DynamicPageHeader.css.d.ts +1 -1
  150. package/dist/generated/themes/DynamicPageHeader.css.js +1 -1
  151. package/dist/generated/themes/DynamicPageHeader.css.js.map +1 -1
  152. package/dist/generated/themes/DynamicPageHeaderActions.css.d.ts +1 -1
  153. package/dist/generated/themes/DynamicPageHeaderActions.css.js +1 -1
  154. package/dist/generated/themes/DynamicPageHeaderActions.css.js.map +1 -1
  155. package/dist/generated/themes/DynamicPageTitle.css.d.ts +1 -1
  156. package/dist/generated/themes/DynamicPageTitle.css.js +1 -1
  157. package/dist/generated/themes/DynamicPageTitle.css.js.map +1 -1
  158. package/dist/generated/themes/FlexibleColumnLayout.css.d.ts +1 -1
  159. package/dist/generated/themes/FlexibleColumnLayout.css.js +1 -1
  160. package/dist/generated/themes/FlexibleColumnLayout.css.js.map +1 -1
  161. package/dist/generated/themes/MediaGallery.css.d.ts +1 -1
  162. package/dist/generated/themes/MediaGallery.css.js +1 -1
  163. package/dist/generated/themes/MediaGallery.css.js.map +1 -1
  164. package/dist/generated/themes/MediaGalleryItem.css.d.ts +1 -1
  165. package/dist/generated/themes/MediaGalleryItem.css.js +1 -1
  166. package/dist/generated/themes/MediaGalleryItem.css.js.map +1 -1
  167. package/dist/generated/themes/NavigationMenu.css.d.ts +1 -1
  168. package/dist/generated/themes/NavigationMenu.css.js +1 -1
  169. package/dist/generated/themes/NavigationMenu.css.js.map +1 -1
  170. package/dist/generated/themes/NavigationMenuItem.css.d.ts +1 -1
  171. package/dist/generated/themes/NavigationMenuItem.css.js +1 -1
  172. package/dist/generated/themes/NavigationMenuItem.css.js.map +1 -1
  173. package/dist/generated/themes/NotificationListGroupItem.css.d.ts +1 -1
  174. package/dist/generated/themes/NotificationListGroupItem.css.js +1 -1
  175. package/dist/generated/themes/NotificationListGroupItem.css.js.map +1 -1
  176. package/dist/generated/themes/NotificationListItem.css.d.ts +1 -1
  177. package/dist/generated/themes/NotificationListItem.css.js +1 -1
  178. package/dist/generated/themes/NotificationListItem.css.js.map +1 -1
  179. package/dist/generated/themes/NotificationListItemBase.css.d.ts +1 -1
  180. package/dist/generated/themes/NotificationListItemBase.css.js +1 -1
  181. package/dist/generated/themes/NotificationListItemBase.css.js.map +1 -1
  182. package/dist/generated/themes/NotificationStateIcon.css.d.ts +1 -1
  183. package/dist/generated/themes/NotificationStateIcon.css.js +1 -1
  184. package/dist/generated/themes/NotificationStateIcon.css.js.map +1 -1
  185. package/dist/generated/themes/Page.css.d.ts +1 -1
  186. package/dist/generated/themes/Page.css.js +1 -1
  187. package/dist/generated/themes/Page.css.js.map +1 -1
  188. package/dist/generated/themes/ProductSwitchItem.css.d.ts +1 -1
  189. package/dist/generated/themes/ProductSwitchItem.css.js +1 -1
  190. package/dist/generated/themes/ProductSwitchItem.css.js.map +1 -1
  191. package/dist/generated/themes/Search.css.d.ts +2 -0
  192. package/dist/generated/themes/Search.css.js +8 -0
  193. package/dist/generated/themes/Search.css.js.map +1 -0
  194. package/dist/generated/themes/SearchField.css.d.ts +1 -1
  195. package/dist/generated/themes/SearchField.css.js +1 -1
  196. package/dist/generated/themes/SearchField.css.js.map +1 -1
  197. package/dist/generated/themes/SearchItem.css.d.ts +2 -0
  198. package/dist/generated/themes/SearchItem.css.js +8 -0
  199. package/dist/generated/themes/SearchItem.css.js.map +1 -0
  200. package/dist/generated/themes/SearchItemGroup.css.d.ts +2 -0
  201. package/dist/generated/themes/SearchItemGroup.css.js +8 -0
  202. package/dist/generated/themes/SearchItemGroup.css.js.map +1 -0
  203. package/dist/generated/themes/ShellBar.css.d.ts +1 -1
  204. package/dist/generated/themes/ShellBar.css.js +1 -1
  205. package/dist/generated/themes/ShellBar.css.js.map +1 -1
  206. package/dist/generated/themes/ShellBarPopover.css.d.ts +1 -1
  207. package/dist/generated/themes/ShellBarPopover.css.js +1 -1
  208. package/dist/generated/themes/ShellBarPopover.css.js.map +1 -1
  209. package/dist/generated/themes/SideNavigation.css.d.ts +1 -1
  210. package/dist/generated/themes/SideNavigation.css.js +1 -1
  211. package/dist/generated/themes/SideNavigation.css.js.map +1 -1
  212. package/dist/generated/themes/SideNavigationGroup.css.d.ts +1 -1
  213. package/dist/generated/themes/SideNavigationGroup.css.js +1 -1
  214. package/dist/generated/themes/SideNavigationGroup.css.js.map +1 -1
  215. package/dist/generated/themes/SideNavigationItem.css.d.ts +1 -1
  216. package/dist/generated/themes/SideNavigationItem.css.js +1 -1
  217. package/dist/generated/themes/SideNavigationItem.css.js.map +1 -1
  218. package/dist/generated/themes/SideNavigationItemBase.css.d.ts +1 -1
  219. package/dist/generated/themes/SideNavigationItemBase.css.js +1 -1
  220. package/dist/generated/themes/SideNavigationItemBase.css.js.map +1 -1
  221. package/dist/generated/themes/SideNavigationPopover.css.d.ts +1 -1
  222. package/dist/generated/themes/SideNavigationPopover.css.js +1 -1
  223. package/dist/generated/themes/SideNavigationPopover.css.js.map +1 -1
  224. package/dist/generated/themes/SideNavigationSubItem.css.d.ts +1 -1
  225. package/dist/generated/themes/SideNavigationSubItem.css.js +1 -1
  226. package/dist/generated/themes/SideNavigationSubItem.css.js.map +1 -1
  227. package/dist/generated/themes/Timeline.css.d.ts +1 -1
  228. package/dist/generated/themes/Timeline.css.js +1 -1
  229. package/dist/generated/themes/Timeline.css.js.map +1 -1
  230. package/dist/generated/themes/TimelineGroupItem.css.d.ts +1 -1
  231. package/dist/generated/themes/TimelineGroupItem.css.js +1 -1
  232. package/dist/generated/themes/TimelineGroupItem.css.js.map +1 -1
  233. package/dist/generated/themes/TimelineItem.css.d.ts +1 -1
  234. package/dist/generated/themes/TimelineItem.css.js +1 -1
  235. package/dist/generated/themes/TimelineItem.css.js.map +1 -1
  236. package/dist/generated/themes/UploadCollection.css.d.ts +1 -1
  237. package/dist/generated/themes/UploadCollection.css.js +1 -1
  238. package/dist/generated/themes/UploadCollection.css.js.map +1 -1
  239. package/dist/generated/themes/UploadCollectionItem.css.d.ts +1 -1
  240. package/dist/generated/themes/UploadCollectionItem.css.js +1 -1
  241. package/dist/generated/themes/UploadCollectionItem.css.js.map +1 -1
  242. package/dist/generated/themes/UserMenu.css.d.ts +1 -1
  243. package/dist/generated/themes/UserMenu.css.js +1 -1
  244. package/dist/generated/themes/UserMenu.css.js.map +1 -1
  245. package/dist/generated/themes/UserMenuItem.css.d.ts +1 -1
  246. package/dist/generated/themes/UserMenuItem.css.js +1 -1
  247. package/dist/generated/themes/UserMenuItem.css.js.map +1 -1
  248. package/dist/generated/themes/UserSettingsItem.css.d.ts +1 -1
  249. package/dist/generated/themes/UserSettingsItem.css.js +1 -1
  250. package/dist/generated/themes/UserSettingsItem.css.js.map +1 -1
  251. package/dist/generated/themes/ViewSettingsDialog.css.d.ts +1 -1
  252. package/dist/generated/themes/ViewSettingsDialog.css.js +1 -1
  253. package/dist/generated/themes/ViewSettingsDialog.css.js.map +1 -1
  254. package/dist/generated/themes/Wizard.css.d.ts +1 -1
  255. package/dist/generated/themes/Wizard.css.js +1 -1
  256. package/dist/generated/themes/Wizard.css.js.map +1 -1
  257. package/dist/generated/themes/WizardTab.css.d.ts +1 -1
  258. package/dist/generated/themes/WizardTab.css.js +1 -1
  259. package/dist/generated/themes/WizardTab.css.js.map +1 -1
  260. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.d.ts +1 -1
  261. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js +1 -1
  262. package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js.map +1 -1
  263. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.d.ts +1 -1
  264. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js +1 -1
  265. package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js.map +1 -1
  266. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.d.ts +1 -1
  267. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.js +1 -1
  268. package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.js.map +1 -1
  269. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.d.ts +1 -1
  270. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js +1 -1
  271. package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js.map +1 -1
  272. package/dist/generated/themes/sap_horizon/parameters-bundle.css.d.ts +1 -1
  273. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js +1 -1
  274. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js.map +1 -1
  275. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.d.ts +1 -1
  276. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js +1 -1
  277. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js.map +1 -1
  278. package/dist/generated/themes/sap_horizon_dark_exp/parameters-bundle.css.d.ts +1 -1
  279. package/dist/generated/themes/sap_horizon_dark_exp/parameters-bundle.css.js +1 -1
  280. package/dist/generated/themes/sap_horizon_dark_exp/parameters-bundle.css.js.map +1 -1
  281. package/dist/generated/themes/sap_horizon_exp/parameters-bundle.css.d.ts +1 -1
  282. package/dist/generated/themes/sap_horizon_exp/parameters-bundle.css.js +1 -1
  283. package/dist/generated/themes/sap_horizon_exp/parameters-bundle.css.js.map +1 -1
  284. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.d.ts +1 -1
  285. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js +1 -1
  286. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js.map +1 -1
  287. package/dist/generated/themes/sap_horizon_hcb_exp/parameters-bundle.css.d.ts +1 -1
  288. package/dist/generated/themes/sap_horizon_hcb_exp/parameters-bundle.css.js +1 -1
  289. package/dist/generated/themes/sap_horizon_hcb_exp/parameters-bundle.css.js.map +1 -1
  290. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.d.ts +1 -1
  291. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js +1 -1
  292. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js.map +1 -1
  293. package/dist/generated/themes/sap_horizon_hcw_exp/parameters-bundle.css.d.ts +1 -1
  294. package/dist/generated/themes/sap_horizon_hcw_exp/parameters-bundle.css.js +1 -1
  295. package/dist/generated/themes/sap_horizon_hcw_exp/parameters-bundle.css.js.map +1 -1
  296. package/dist/types/SideNavigationDesign.d.ts +17 -0
  297. package/dist/types/SideNavigationDesign.js +19 -0
  298. package/dist/types/SideNavigationDesign.js.map +1 -0
  299. package/dist/vscode.html-custom-data.json +99 -0
  300. package/dist/web-types.json +240 -1
  301. package/package.json +7 -7
  302. package/src/NavigationMenuItemTemplate.tsx +3 -83
  303. package/src/SearchFieldTemplate.tsx +1 -1
  304. package/src/SearchItemTemplate.tsx +45 -0
  305. package/src/SearchPopoverTemplate.tsx +68 -0
  306. package/src/SearchTemplate.tsx +12 -0
  307. package/src/ShellBarPopoverTemplate.tsx +1 -0
  308. package/src/ShellBarTemplate.tsx +9 -6
  309. package/src/SideNavigationTemplate.tsx +1 -0
  310. package/src/UserMenuTemplate.tsx +104 -76
  311. package/src/ViewSettingsDialogTemplate.tsx +1 -0
  312. package/src/i18n/messagebundle.properties +13 -1
  313. package/src/i18n/messagebundle_en.properties +184 -1
  314. package/src/i18n/messagebundle_en_US_saprigi.properties +7 -1
  315. package/src/themes/NavigationMenu.css +5 -7
  316. package/src/themes/NavigationMenuItem.css +21 -6
  317. package/src/themes/Search.css +63 -0
  318. package/src/themes/SearchField.css +11 -10
  319. package/src/themes/SearchItem.css +59 -0
  320. package/src/themes/SearchItemGroup.css +13 -0
  321. package/src/themes/SideNavigation.css +10 -1
  322. package/src/themes/SideNavigationItem.css +5 -7
  323. package/src/themes/SideNavigationItemBase.css +6 -0
  324. package/src/themes/SideNavigationPopover.css +0 -4
  325. package/src/themes/SideNavigationSubItem.css +4 -1
  326. package/src/themes/UserMenu.css +97 -48
  327. package/src/themes/UserMenuItem.css +1 -0
  328. package/src/themes/base/SideNavigation-parameters.css +4 -13
  329. package/src/themes/sap_horizon/SideNavigation-parameters.css +5 -13
  330. package/src/themes/sap_horizon_dark/SideNavigation-parameters.css +5 -13
  331. package/src/themes/sap_horizon_hcb/SideNavigation-parameters.css +5 -12
  332. package/src/themes/sap_horizon_hcw/SideNavigation-parameters.css +5 -12
@@ -0,0 +1,817 @@
1
+ import Title from "@ui5/webcomponents/dist/Title.js";
2
+ import Search from "../../src/Search.js";
3
+ import SearchItem from "../../src/SearchItem.js";
4
+ import SearchItemGroup from "../../src/SearchItemGroup.js";
5
+ import history from "@ui5/webcomponents-icons/dist/history.js";
6
+ import IllustratedMessage from "../../src/IllustratedMessage.js";
7
+ import SearchPopupMode from "@ui5/webcomponents/dist/types/SearchPopupMode.js";
8
+ import searchIcon from "@ui5/webcomponents-icons/dist/search.js";
9
+
10
+ describe("Properties", () => {
11
+ it("popupMode=List - items slot", () => {
12
+ cy.mount(
13
+ <Search expanded={true}>
14
+ <SearchItem headingText="Item 1" icon={history} />
15
+ <SearchItem scopeName="Items" headingText="Item 2" selected />
16
+ </Search>
17
+ );
18
+
19
+ cy.get("[ui5-search]")
20
+ .find("[ui5-search-item]")
21
+ .should("have.length", 2);
22
+ cy.get("ui5-search-item").eq(0)
23
+ .shadow()
24
+ .find("[part='title']")
25
+ .should("contain.text", "Item 1");
26
+ cy.get("ui5-search-item").eq(0)
27
+ .shadow()
28
+ .find("[ui5-icon]")
29
+ .should("have.attr", "name", "history");
30
+ cy.get("ui5-search-item").eq(1)
31
+ .shadow()
32
+ .find("[part='title']")
33
+ .should("contain.text", "Item 2");
34
+ cy.get("ui5-search-item").eq(1)
35
+ .shadow()
36
+ .find("[ui5-tag]")
37
+ .should("contain.text", "Items");
38
+ });
39
+
40
+ it("popupMode=List - items slot with groups", () => {
41
+ cy.mount(
42
+ <Search expanded={true}>
43
+ <SearchItemGroup headerText="Group Header 1">
44
+ <SearchItem headingText="List Item" icon={history}></SearchItem>
45
+ <SearchItem headingText="List Item" icon={searchIcon}></SearchItem>
46
+ </SearchItemGroup>
47
+ <SearchItemGroup headerText="Group Header 2">
48
+ <SearchItem headingText="List Item" icon={history}></SearchItem>
49
+ <SearchItem headingText="List Item" icon={history}></SearchItem>
50
+ </SearchItemGroup>
51
+ </Search>
52
+ );
53
+
54
+ cy.get("ui5-search-item-group").eq(0)
55
+ .shadow()
56
+ .find("[ui5-li-group-header]")
57
+ .should("contain.text", "Group Header 1");
58
+ cy.get("ui5-search-item-group").eq(0)
59
+ .find("[ui5-search-item]")
60
+ .should("have.length", 2);
61
+ cy.get("ui5-search-item-group").eq(1)
62
+ .shadow()
63
+ .find("[ui5-li-group-header]")
64
+ .should("contain.text", "Group Header 2");
65
+ cy.get("ui5-search-item-group").eq(1)
66
+ .find("[ui5-search-item]")
67
+ .should("have.length", 2);
68
+
69
+ cy.get("[ui5-search]")
70
+ .shadow()
71
+ .find("input")
72
+ .realClick();
73
+
74
+ cy.get("[ui5-search]")
75
+ .should("be.focused");
76
+
77
+ cy.get("[ui5-search]")
78
+ .realPress("G");
79
+
80
+ cy.get("[ui5-search]")
81
+ .realPress("ArrowRight");
82
+
83
+ cy.get("[ui5-search]")
84
+ .should("have.not.value", "Group Header 1");
85
+
86
+ cy.get("[ui5-search]")
87
+ .realPress("Backspace");
88
+
89
+ cy.get("[ui5-search]")
90
+ .realPress("L");
91
+
92
+ cy.get("[ui5-search]")
93
+ .realPress("ArrowRight");
94
+
95
+ cy.get("[ui5-search]")
96
+ .should("have.value", "List Item");
97
+ });
98
+
99
+ it("popupMode=List - items slot navigation", () => {
100
+ cy.mount(
101
+ <Search expanded={true}>
102
+ <SearchItem heading-text="List Item"></SearchItem>
103
+ <SearchItem heading-text="List Item"></SearchItem>
104
+ </Search>
105
+ );
106
+
107
+ cy.get("[ui5-search]")
108
+ .shadow()
109
+ .find("input")
110
+ .realClick();
111
+
112
+ cy.get("[ui5-search]")
113
+ .should("be.focused");
114
+
115
+ cy.get("[ui5-search]")
116
+ .realPress("ArrowDown");
117
+
118
+ cy.get("ui5-search-item").eq(0)
119
+ .should("be.focused");
120
+
121
+ cy.get("[ui5-search]")
122
+ .realPress("ArrowUp");
123
+
124
+ cy.get("[ui5-search]")
125
+ .should("be.focused");
126
+ });
127
+
128
+ it("popupMode='Illustration' - illustration slot with no popupMode set", () => {
129
+ cy.mount(
130
+ <Search expanded={true}>
131
+ <SearchItem headingText="Item 1" icon={history} />
132
+ <IllustratedMessage slot="illustration">
133
+ <Title slot="title" level="H1">Oh, there are no results</Title>
134
+ <div slot="subtitle">Change your search query</div>
135
+ </IllustratedMessage>
136
+ </Search>
137
+ );
138
+
139
+ cy.get("[ui5-search]")
140
+ .shadow()
141
+ .find("[ui5-list]")
142
+ .should("exist");
143
+ cy.get("[ui5-search]")
144
+ .shadow()
145
+ .find("slot[name='illustration']")
146
+ .should("not.exist");
147
+ });
148
+
149
+ it("popupMode='Illustration' - illustration slot with popupMode set", () => {
150
+ cy.mount(
151
+ <Search popupMode={SearchPopupMode.Illustration} expanded={true}>
152
+ <SearchItem headingText="Item 1" icon={history} />
153
+ <IllustratedMessage slot="illustration">
154
+ <Title slot="title" level="H1">Oh, there are no results</Title>
155
+ <div slot="subtitle">Change your search query</div>
156
+ </IllustratedMessage>
157
+ </Search>
158
+ );
159
+
160
+ cy.get("[ui5-search]")
161
+ .shadow()
162
+ .find("[ui5-list]")
163
+ .should("not.exist");
164
+ cy.get("[ui5-search]")
165
+ .shadow()
166
+ .find("slot[name='illustration']")
167
+ .should("exist");
168
+ });
169
+
170
+ it("popupMode='Loading'", () => {
171
+ cy.mount(
172
+ <Search popupMode={SearchPopupMode.Loading} expanded={true}>
173
+ <SearchItem headingText="Item 1" icon={history} />
174
+ <IllustratedMessage slot="illustration">
175
+ <Title slot="title" level="H1">Oh, there are no results</Title>
176
+ <div slot="subtitle">Change your search query</div>
177
+ </IllustratedMessage>
178
+ </Search>
179
+ );
180
+
181
+ cy.get("[ui5-search]")
182
+ .shadow()
183
+ .find("[ui5-list]")
184
+ .should("not.exist");
185
+ cy.get("[ui5-search]")
186
+ .shadow()
187
+ .find("slot[name='illustration']")
188
+ .should("not.exist");
189
+ cy.get("[ui5-search]")
190
+ .shadow()
191
+ .find("[ui5-busy-indicator]")
192
+ .should("exist");
193
+ });
194
+
195
+ it("noTypeahead", () => {
196
+ cy.mount(
197
+ <Search expanded={true} noTypeahead={true}>
198
+ <SearchItem headingText="Item 1" icon={history} />
199
+ <SearchItem scopeName="Items" headingText="Item 2" selected />
200
+ </Search>
201
+ );
202
+
203
+ cy.get("[ui5-search]")
204
+ .shadow()
205
+ .find("input")
206
+ .realClick();
207
+
208
+ cy.get("[ui5-search]")
209
+ .should("be.focused");
210
+
211
+ cy.get("[ui5-search]")
212
+ .realPress("I");
213
+
214
+ cy.get("[ui5-search]")
215
+ .realPress("Enter");
216
+
217
+ cy.get("[ui5-search]")
218
+ .should("have.value", "I");
219
+ });
220
+
221
+ it("typeahead and value confirmation - autocomplete by starts with", () => {
222
+ cy.mount(
223
+ <Search expanded={true}>
224
+ <SearchItem headingText="Item 1" icon={history} />
225
+ <SearchItem scopeName="Items" headingText="Item 2" selected />
226
+ </Search>
227
+ );
228
+
229
+ cy.get("[ui5-search]")
230
+ .shadow()
231
+ .find("input")
232
+ .realClick();
233
+
234
+ cy.get("[ui5-search]")
235
+ .should("be.focused");
236
+
237
+ cy.get("[ui5-search]")
238
+ .realPress("I");
239
+
240
+ cy.get("[ui5-search]")
241
+ .realPress("Enter");
242
+
243
+ cy.get("[ui5-search]")
244
+ .should("have.value", "Item 1");
245
+ });
246
+
247
+ it("typeahead and Arrow Right - autocomplete by starts with", () => {
248
+ cy.mount(
249
+ <Search expanded={true}>
250
+ <SearchItem headingText="Item 1" icon={history} />
251
+ <SearchItem scopeName="Items" headingText="Item 2" selected />
252
+ </Search>
253
+ );
254
+
255
+ cy.get("[ui5-search]")
256
+ .shadow()
257
+ .find("input")
258
+ .realClick();
259
+
260
+ cy.get("[ui5-search]")
261
+ .should("be.focused");
262
+
263
+ cy.get("[ui5-search]")
264
+ .realPress("I");
265
+
266
+ cy.get("[ui5-search]")
267
+ .realPress("ArrowRight");
268
+
269
+ cy.get("[ui5-search]")
270
+ .should("have.value", "Item 1");
271
+ });
272
+
273
+ it("typeahead and Escape - autocomplete by starts with", () => {
274
+ cy.mount(
275
+ <Search expanded={true}>
276
+ <SearchItem headingText="Item 1" icon={history} />
277
+ <SearchItem scopeName="Items" headingText="Item 2" selected />
278
+ </Search>
279
+ );
280
+
281
+ cy.get("[ui5-search]")
282
+ .shadow()
283
+ .find("input")
284
+ .realClick();
285
+
286
+ cy.get("[ui5-search]")
287
+ .should("be.focused");
288
+
289
+ cy.get("[ui5-search]")
290
+ .realPress("I");
291
+
292
+ cy.get("[ui5-search]")
293
+ .realPress("Escape");
294
+
295
+ cy.get("[ui5-search]")
296
+ .should("have.value", "I");
297
+ });
298
+
299
+ it("typeahead and value confirmation - autocomplete by contains", () => {
300
+ cy.mount(
301
+ <Search expanded={true}>
302
+ <SearchItem headingText="Item 1" icon={history} />
303
+ <SearchItem scopeName="Items" headingText="Item 2" selected />
304
+ </Search>
305
+ );
306
+
307
+ cy.get("[ui5-search]")
308
+ .shadow()
309
+ .find("input")
310
+ .realClick();
311
+
312
+ cy.get("[ui5-search]")
313
+ .should("be.focused");
314
+
315
+ cy.get("[ui5-search]")
316
+ .realPress("2");
317
+
318
+ cy.get("[ui5-search]")
319
+ .realPress("Enter");
320
+
321
+ cy.get("[ui5-search]")
322
+ .should("have.value", "Item 2");
323
+ });
324
+
325
+ it("typeahead and Arrow Right - autocomplete by contains", () => {
326
+ cy.mount(
327
+ <Search expanded={true}>
328
+ <SearchItem headingText="Item 1" icon={history} />
329
+ <SearchItem scopeName="Items" headingText="Item 2" selected />
330
+ </Search>
331
+ );
332
+
333
+ cy.get("[ui5-search]")
334
+ .shadow()
335
+ .find("input")
336
+ .realClick();
337
+
338
+ cy.get("[ui5-search]")
339
+ .should("be.focused");
340
+
341
+ cy.get("[ui5-search]")
342
+ .realPress("2");
343
+
344
+ cy.get("[ui5-search]")
345
+ .realPress("ArrowRight");
346
+
347
+ cy.get("[ui5-search]")
348
+ .should("have.value", "2");
349
+ });
350
+
351
+ it("typeahead and Escape - autocomplete by contains", () => {
352
+ cy.mount(
353
+ <Search expanded={true}>
354
+ <SearchItem headingText="Item 1" icon={history} />
355
+ <SearchItem scopeName="Items" headingText="Item 2" selected />
356
+ </Search>
357
+ );
358
+
359
+ cy.get("[ui5-search]")
360
+ .shadow()
361
+ .find("input")
362
+ .realClick();
363
+
364
+ cy.get("[ui5-search]")
365
+ .should("be.focused");
366
+
367
+ cy.get("[ui5-search]")
368
+ .realPress("2");
369
+
370
+ cy.get("[ui5-search]")
371
+ .realPress("Escape");
372
+
373
+ cy.get("[ui5-search]")
374
+ .should("have.value", "2");
375
+ });
376
+
377
+ it("Popup properties", () => {
378
+ cy.mount(
379
+ <Search expanded={true} headerText="Message" subheaderText="Secondary Message" showPopupAction={true} popupActionText="Show All">
380
+ <SearchItem headingText="Item 1" icon={history} />
381
+ </Search>
382
+ );
383
+
384
+ cy.get("[ui5-search]")
385
+ .shadow()
386
+ .find("input")
387
+ .realClick();
388
+
389
+ cy.get("[ui5-search]")
390
+ .shadow()
391
+ .find("[ui5-responsive-popover]")
392
+ .find("header")
393
+ .as("header");
394
+
395
+ cy.get("@header")
396
+ .find("ui5-title")
397
+ .should("have.text", "Message");
398
+
399
+ cy.get("@header")
400
+ .find("ui5-text")
401
+ .should("have.text", "Secondary Message");
402
+
403
+ cy.get("[ui5-search]")
404
+ .shadow()
405
+ .find("[ui5-responsive-popover]")
406
+ .find(".ui5-search-footer-button")
407
+ .as("button");
408
+
409
+ cy.get("@button")
410
+ .should("exist")
411
+ .and("have.text", "Show All");
412
+ });
413
+ });
414
+
415
+ describe("Events", () => {
416
+ it("search event with noTypeahead", () => {
417
+ const spy = cy.spy();
418
+ cy.mount(
419
+ <Search expanded={true} noTypeahead={true}>
420
+ <SearchItem headingText="Item 1" icon={history} />
421
+ <SearchItem scopeName="Items" headingText="Item 2" selected />
422
+ </Search>
423
+ );
424
+
425
+ cy.get("[ui5-search]")
426
+ .then(search => {
427
+ search.get(0).addEventListener("ui5-search", spy);
428
+ search.get(0).addEventListener("ui5-search", cy.stub().as("searched"));
429
+ });
430
+
431
+ cy.get("[ui5-search]")
432
+ .shadow()
433
+ .find("input")
434
+ .realClick();
435
+
436
+ cy.get("[ui5-search]")
437
+ .should("be.focused");
438
+
439
+ cy.get("[ui5-search]")
440
+ .realPress("I");
441
+
442
+ cy.get("[ui5-search]")
443
+ .realPress("Enter");
444
+
445
+ cy.get("@searched")
446
+ .should("have.been.calledOnce");
447
+
448
+ cy.wrap(spy).should("have.been.calledWithMatch", Cypress.sinon.match(event => {
449
+ return event.detail.item === undefined;
450
+ }));
451
+ });
452
+
453
+ it("search event with autocomplete by starts with", () => {
454
+ const spy = cy.spy();
455
+ cy.mount(
456
+ <Search expanded={true}>
457
+ <SearchItem headingText="Item 1" icon={history} />
458
+ <SearchItem scopeName="Items" headingText="Item 2" selected />
459
+ </Search>
460
+ );
461
+
462
+ cy.get("[ui5-search]")
463
+ .then(search => {
464
+ search.get(0).addEventListener("ui5-search", spy);
465
+ search.get(0).addEventListener("ui5-search", cy.stub().as("searched"));
466
+ });
467
+
468
+ cy.get("[ui5-search]")
469
+ .shadow()
470
+ .find("input")
471
+ .realClick();
472
+
473
+ cy.get("[ui5-search]")
474
+ .should("be.focused");
475
+
476
+ cy.get("[ui5-search]")
477
+ .realPress("I");
478
+
479
+ cy.get("[ui5-search]")
480
+ .realPress("Enter");
481
+
482
+ cy.get("@searched")
483
+ .should("have.been.calledOnce");
484
+
485
+ cy.wrap(spy).should("have.been.calledWithMatch", Cypress.sinon.match(event => {
486
+ return event.detail.item.headingText === "Item 1";
487
+ }));
488
+ });
489
+
490
+ it("search event on item selection", () => {
491
+ const spy = cy.spy();
492
+ cy.mount(
493
+ <Search expanded={true} noTypeahead={true}>
494
+ <SearchItem headingText="Item 1" icon={history} />
495
+ <SearchItem scopeName="Items" headingText="Item 2" selected />
496
+ </Search>
497
+ );
498
+
499
+ cy.get("[ui5-search]")
500
+ .then(search => {
501
+ search.get(0).addEventListener("ui5-search", cy.stub().as("searched"));
502
+ search.get(0).addEventListener("ui5-search", spy);
503
+ });
504
+
505
+ cy.get("[ui5-search]")
506
+ .shadow()
507
+ .find("input")
508
+ .realClick();
509
+
510
+ cy.get("[ui5-search]")
511
+ .should("be.focused");
512
+
513
+ cy.get("ui5-search-item").eq(0)
514
+ .realClick();
515
+
516
+ cy.get("@searched")
517
+ .should("have.been.calledOnce");
518
+
519
+ cy.wrap(spy).should("have.been.calledWithMatch", Cypress.sinon.match(event => {
520
+ return event.detail.item.headingText === "Item 1";
521
+ }));
522
+ });
523
+
524
+ it("search event with autocomplete by contains", () => {
525
+ const spy = cy.spy();
526
+ cy.mount(
527
+ <Search expanded={true}>
528
+ <SearchItem headingText="Item 1" icon={history} />
529
+ <SearchItem scopeName="Items" headingText="Item 2" selected />
530
+ </Search>
531
+ );
532
+
533
+ cy.get("[ui5-search]")
534
+ .then(search => {
535
+ search.get(0).addEventListener("ui5-search", spy);
536
+ search.get(0).addEventListener("ui5-search", cy.stub().as("searched"));
537
+ });
538
+
539
+ cy.get("[ui5-search]")
540
+ .shadow()
541
+ .find("input")
542
+ .realClick();
543
+
544
+ cy.get("[ui5-search]")
545
+ .should("be.focused");
546
+
547
+ cy.get("[ui5-search]")
548
+ .realPress("2");
549
+
550
+ cy.get("[ui5-search]")
551
+ .realPress("Enter");
552
+
553
+ cy.get("@searched")
554
+ .should("have.been.calledOnce");
555
+
556
+ cy.wrap(spy).should("have.been.calledWithMatch", Cypress.sinon.match(event => {
557
+ return event.detail.item.headingText === "Item 2";
558
+ }));
559
+ });
560
+
561
+ it("search event prevention", () => {
562
+ cy.mount(
563
+ <Search expanded={true}>
564
+ <SearchItem headingText="Item 1" icon={history} />
565
+ <SearchItem scopeName="Items" headingText="Item 2" selected />
566
+ </Search>
567
+ );
568
+
569
+ cy.get("[ui5-search]")
570
+ .then(search => {
571
+ search.get(0).addEventListener("ui5-search", e => {
572
+ e.preventDefault();
573
+ });
574
+ });
575
+
576
+ cy.get("[ui5-search]")
577
+ .shadow()
578
+ .find("input")
579
+ .realClick();
580
+
581
+ cy.get("[ui5-search]")
582
+ .should("be.focused");
583
+
584
+ cy.get("[ui5-search]")
585
+ .realPress("ArrowDown");
586
+
587
+ cy.get("[ui5-search]")
588
+ .realPress("Enter");
589
+
590
+ cy.get("[ui5-search]")
591
+ .should("have.value", "");
592
+ });
593
+
594
+ it("popup-action-press event", () => {
595
+ cy.mount(
596
+ <Search expanded={true} showPopupAction={true} popupActionText="Show All" open={true}>
597
+ <SearchItem headingText="Item 1" icon={history} />
598
+ </Search>
599
+ );
600
+
601
+ cy.get("[ui5-search]")
602
+ .then(search => {
603
+ search.get(0).addEventListener("ui5-popup-action-press", cy.stub().as("actionPressed"));
604
+ });
605
+
606
+ cy.get("[ui5-search]")
607
+ .shadow()
608
+ .find("[ui5-responsive-popover]")
609
+ .as("popup");
610
+
611
+ cy.get("@popup")
612
+ .find(".ui5-search-footer-button")
613
+ .realClick();
614
+
615
+ cy.get("@actionPressed")
616
+ .should("have.been.calledOnce");
617
+ });
618
+
619
+ it("open event", () => {
620
+ cy.mount(
621
+ <Search expanded={true}>
622
+ <SearchItem headingText="Item 1" icon={history} />
623
+ </Search>
624
+ );
625
+
626
+ cy.get("[ui5-search]")
627
+ .then(search => {
628
+ search.get(0).addEventListener("ui5-open", cy.stub().as("opened"));
629
+ });
630
+
631
+ cy.get("[ui5-search]")
632
+ .shadow()
633
+ .find("input")
634
+ .realClick();
635
+
636
+ cy.get("@opened")
637
+ .should("have.been.calledOnce");
638
+ });
639
+
640
+ it("open event on empty list", () => {
641
+ cy.mount(
642
+ <Search expanded={true}>
643
+ </Search>
644
+ );
645
+
646
+ cy.get("[ui5-search]")
647
+ .then(search => {
648
+ search.get(0).addEventListener("ui5-open", cy.stub().as("opened"));
649
+ });
650
+
651
+ cy.get("[ui5-search]")
652
+ .shadow()
653
+ .find("input")
654
+ .realClick();
655
+
656
+ cy.get("@opened")
657
+ .should("not.have.been.called");
658
+ });
659
+
660
+ it("open event - typing, pressing Escape, then typing again should reopen suggestions", () => {
661
+ cy.mount(
662
+ <Search expanded={true}>
663
+ <SearchItem headingText="Item 1" icon={history} />
664
+ </Search>
665
+ );
666
+
667
+ cy.get("[ui5-search]")
668
+ .then(search => {
669
+ search.get(0).addEventListener("ui5-open", cy.stub().as("opened"));
670
+ search.get(0).addEventListener("ui5-close", cy.stub().as("closed"));
671
+ });
672
+
673
+ cy.get("[ui5-search]")
674
+ .shadow()
675
+ .find("input")
676
+ .realClick();
677
+
678
+ cy.get("@opened")
679
+ .should("have.been.calledOnce");
680
+
681
+ cy.get("[ui5-search]")
682
+ .realPress("I");
683
+
684
+ cy.get("[ui5-search]")
685
+ .realPress("Escape");
686
+
687
+ cy.get("@closed")
688
+ .should("have.been.calledOnce");
689
+
690
+ cy.get("[ui5-search]")
691
+ .realPress("t");
692
+
693
+ cy.get("@opened")
694
+ .should("have.been.calledTwice");
695
+ });
696
+
697
+ it("open event - typing, selecting an item, then typing again should reopen picker", () => {
698
+ cy.mount(
699
+ <Search expanded={true}>
700
+ <SearchItem headingText="Item 1" icon={history} />
701
+ </Search>
702
+ );
703
+
704
+ cy.get("[ui5-search]")
705
+ .then(search => {
706
+ search.get(0).addEventListener("ui5-open", cy.stub().as("opened"));
707
+ search.get(0).addEventListener("ui5-close", cy.stub().as("closed"));
708
+ });
709
+
710
+ cy.get("[ui5-search]")
711
+ .shadow()
712
+ .find("input")
713
+ .realClick();
714
+
715
+ cy.get("@opened")
716
+ .should("have.been.calledOnce");
717
+
718
+ cy.get("[ui5-search]")
719
+ .realPress("ArrowDown");
720
+
721
+ cy.get("[ui5-search]")
722
+ .realPress("Enter");
723
+
724
+ cy.get("@closed")
725
+ .should("have.been.calledOnce");
726
+
727
+ cy.get("[ui5-search]")
728
+ .and("be.focused");
729
+
730
+ cy.get("[ui5-search]")
731
+ .realPress("I");
732
+
733
+ cy.get("@opened")
734
+ .should("have.been.calledTwice");
735
+ });
736
+
737
+ it("close event", () => {
738
+ cy.mount(
739
+ <Search expanded={true}>
740
+ <SearchItem headingText="Item 1" icon={history} />
741
+ </Search>
742
+ );
743
+
744
+ cy.get("[ui5-search]")
745
+ .then(search => {
746
+ search.get(0).addEventListener("ui5-close", cy.stub().as("closed"));
747
+ });
748
+
749
+ cy.get("[ui5-search]")
750
+ .shadow()
751
+ .find("input")
752
+ .realClick();
753
+
754
+ cy.get("[ui5-search]")
755
+ .realPress("I");
756
+
757
+ cy.get("[ui5-search]")
758
+ .realPress("Enter");
759
+
760
+ cy.get("@closed")
761
+ .should("have.been.calledOnce");
762
+ });
763
+
764
+ it("close event on Escape", () => {
765
+ cy.mount(
766
+ <Search expanded={true}>
767
+ <SearchItem headingText="Item 1" icon={history} />
768
+ </Search>
769
+ );
770
+
771
+ cy.get("[ui5-search]")
772
+ .then(search => {
773
+ search.get(0).addEventListener("ui5-close", cy.stub().as("closed"));
774
+ });
775
+
776
+ cy.get("[ui5-search]")
777
+ .shadow()
778
+ .find("input")
779
+ .realClick();
780
+
781
+ cy.get("[ui5-search]")
782
+ .realPress("I");
783
+
784
+ cy.get("[ui5-search]")
785
+ .realPress("Escape");
786
+
787
+ cy.get("@closed")
788
+ .should("have.been.calledOnce");
789
+ });
790
+
791
+ it("delete event on search item", () => {
792
+ function onDelete(event: Event) {
793
+ (event.target as HTMLElement).remove();
794
+ }
795
+ cy.mount(
796
+ <Search expanded={true}>
797
+ <SearchItem headingText="Item 1" icon={history} onDelete={onDelete}/>
798
+ </Search>
799
+ );
800
+
801
+ cy.get("[ui5-search]")
802
+ .shadow()
803
+ .find("input")
804
+ .realClick();
805
+
806
+ cy.get("[ui5-search]")
807
+ .realPress("ArrowDown");
808
+
809
+ cy.get("ui5-search-item").eq(0)
810
+ .shadow()
811
+ .find("[ui5-button]")
812
+ .realClick();
813
+
814
+ cy.get("ui5-search-item")
815
+ .should("not.exist")
816
+ });
817
+ });