@sapui5/sap.ushell 1.134.1 → 1.136.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 (942) hide show
  1. package/package.json +1 -1
  2. package/src/main/js/sap/ushell/.library +2 -1
  3. package/src/main/js/sap/ushell/AppInfoParameters.js +42 -22
  4. package/src/main/js/sap/ushell/ApplicationType/UrlPostProcessing.js +3 -7
  5. package/src/main/js/sap/ushell/ApplicationType/guiResolution.js +185 -174
  6. package/src/main/js/sap/ushell/ApplicationType/urlTemplateResolution.js +5 -12
  7. package/src/main/js/sap/ushell/ApplicationType/wdaResolution.js +69 -61
  8. package/src/main/js/sap/ushell/Container.js +11 -11
  9. package/src/main/js/sap/ushell/EventHub.js +1 -3
  10. package/src/main/js/sap/ushell/Fiori20Adapter.js +5 -3
  11. package/src/main/js/sap/ushell/Fiori20AdapterTest.js +6 -4
  12. package/src/main/js/sap/ushell/Layout.js +3 -3
  13. package/src/main/js/sap/ushell/NWBCInterface.js +8 -11
  14. package/src/main/js/sap/ushell/SessionHandler.js +16 -77
  15. package/src/main/js/sap/ushell/TechnicalParameters.js +1 -1
  16. package/src/main/js/sap/ushell/URLTemplateProcessor/DefinitionParameterSetBuilder.js +1 -1
  17. package/src/main/js/sap/ushell/URLTemplateProcessor/DependencyGraph.js +1 -1
  18. package/src/main/js/sap/ushell/URLTemplateProcessor/Functions.js +1 -1
  19. package/src/main/js/sap/ushell/URLTemplateProcessor/Resolvers.js +1 -1
  20. package/src/main/js/sap/ushell/URLTemplateProcessor/TemplateParameterParser.js +1 -1
  21. package/src/main/js/sap/ushell/URLTemplateProcessor/utils.js +1 -1
  22. package/src/main/js/sap/ushell/URLTemplateProcessor.js +1 -1
  23. package/src/main/js/sap/ushell/Ui5NativeServiceFactory.js +1 -1
  24. package/src/main/js/sap/ushell/Ui5ServiceFactory.js +1 -1
  25. package/src/main/js/sap/ushell/User.js +8 -19
  26. package/src/main/js/sap/ushell/adapters/cdm/ClientSideTargetResolutionAdapter.js +1 -1
  27. package/src/main/js/sap/ushell/adapters/cdm/CommonDataModelAdapter.js +1 -1
  28. package/src/main/js/sap/ushell/adapters/cdm/ConfigurationDefaultsAdapter.js +1 -1
  29. package/src/main/js/sap/ushell/adapters/cdm/ContainerAdapter.js +3 -11
  30. package/src/main/js/sap/ushell/adapters/cdm/LaunchPageAdapter.js +13 -4
  31. package/src/main/js/sap/ushell/adapters/cdm/PagesCommonDataModelAdapter.js +1 -1
  32. package/src/main/js/sap/ushell/adapters/cdm/PersonalizationAdapter.js +1 -1
  33. package/src/main/js/sap/ushell/adapters/cdm/PersonalizationV2Adapter.js +1 -1
  34. package/src/main/js/sap/ushell/adapters/cdm/Settings/UserLanguageAndRegion/UserLanguageAndRegion.view.xml +9 -7
  35. package/src/main/js/sap/ushell/adapters/cdm/Ui5ComponentLoaderAdapter.js +1 -1
  36. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/modifyHome.js +1 -1
  37. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readCatalogs.js +1 -1
  38. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readHome.js +1 -1
  39. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/uri.transform.js +1 -1
  40. package/src/main/js/sap/ushell/adapters/cdm/util/AppForInbound.js +1 -1
  41. package/src/main/js/sap/ushell/adapters/cdm/util/cdmSiteUtils.js +1 -1
  42. package/src/main/js/sap/ushell/adapters/cdm/v3/AdapterBase.js +36 -27
  43. package/src/main/js/sap/ushell/adapters/cdm/v3/FlpLaunchPageAdapter.js +50 -50
  44. package/src/main/js/sap/ushell/adapters/cdm/v3/LaunchPageAdapter.js +1 -1
  45. package/src/main/js/sap/ushell/adapters/cdm/v3/StaticGroupsAdapter.js +1 -1
  46. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readApplications.js +1 -1
  47. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readCatalogs.js +1 -1
  48. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readHome.js +13 -13
  49. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readPages.js +1 -1
  50. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readUtils.js +1 -1
  51. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readVisualizations.js +1 -1
  52. package/src/main/js/sap/ushell/adapters/cep/MenuAdapter.js +11 -5
  53. package/src/main/js/sap/ushell/adapters/cep/NavTargetResolutionAdapter.js +1 -1
  54. package/src/main/js/sap/ushell/adapters/cep/NavTargetResolutionInternalAdapter.js +1 -1
  55. package/src/main/js/sap/ushell/adapters/cep/SearchCEPAdapter.js +1 -1
  56. package/src/main/js/sap/ushell/adapters/cflp/UserDefaultParameterPersistenceAdapter.js +1 -1
  57. package/src/main/js/sap/ushell/adapters/local/AdapterContainer.js +1 -1
  58. package/src/main/js/sap/ushell/adapters/local/AppStateAdapter.js +1 -1
  59. package/src/main/js/sap/ushell/adapters/local/ClientSideTargetResolutionAdapter.js +1 -1
  60. package/src/main/js/sap/ushell/adapters/local/ContainerAdapter.js +1 -1
  61. package/src/main/js/sap/ushell/adapters/local/FlpLaunchPageAdapter.js +1 -1
  62. package/src/main/js/sap/ushell/adapters/local/LaunchPageAdapter.js +1 -1
  63. package/src/main/js/sap/ushell/adapters/local/NavTargetResolutionAdapter.js +1 -1
  64. package/src/main/js/sap/ushell/adapters/local/NavTargetResolutionInternalAdapter.js +1 -1
  65. package/src/main/js/sap/ushell/adapters/local/PageBuildingAdapter.js +1 -1
  66. package/src/main/js/sap/ushell/adapters/local/PagePersistenceAdapter.js +1 -1
  67. package/src/main/js/sap/ushell/adapters/local/PersonalizationAdapter.js +1 -1
  68. package/src/main/js/sap/ushell/adapters/local/PersonalizationV2Adapter.js +1 -1
  69. package/src/main/js/sap/ushell/adapters/local/SearchAdapter.js +1 -1
  70. package/src/main/js/sap/ushell/adapters/local/SearchCEPAdapter.js +1 -1
  71. package/src/main/js/sap/ushell/adapters/local/SupportTicketAdapter.js +1 -1
  72. package/src/main/js/sap/ushell/adapters/local/Ui5ComponentLoaderAdapter.js +1 -1
  73. package/src/main/js/sap/ushell/adapters/local/UserDefaultParameterPersistenceAdapter.js +1 -1
  74. package/src/main/js/sap/ushell/adapters/local/UserInfoAdapter.js +1 -1
  75. package/src/main/js/sap/ushell/api/DWS.js +87 -0
  76. package/src/main/js/sap/ushell/api/Inbox.js +20 -4
  77. package/src/main/js/sap/ushell/api/NewExperience.js +24 -2
  78. package/src/main/js/sap/ushell/api/RTA.js +65 -4
  79. package/src/main/js/sap/ushell/api/common/ComponentInstantiation.js +36 -36
  80. package/src/main/js/sap/ushell/appIntegration/AppLifeCycle/KeepAliveMode.js +43 -0
  81. package/src/main/js/sap/ushell/appIntegration/AppLifeCycle.js +1677 -0
  82. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/ApplicationContainer.js +192 -21
  83. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/ApplicationContainerCache.js +2 -8
  84. package/src/main/js/sap/ushell/appIntegration/ApplicationContainerRenderer.js +49 -0
  85. package/src/main/js/sap/ushell/appIntegration/ApplicationHandle.js +51 -0
  86. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/IframeApplicationContainer.js +129 -19
  87. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/IframeApplicationContainerRenderer.js +34 -26
  88. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/KeepAliveApps.js +1 -7
  89. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager/AppruntimeHandler.js +8 -12
  90. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager/ExtensionItems.js +3 -9
  91. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager/LifecycleHandler.js +20 -26
  92. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager/MessageBrokerHandler.js +1 -5
  93. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager/NWBCHandler.js +4 -10
  94. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager/ServiceHandler.js +10 -15
  95. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager.js +39 -28
  96. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessagePluginInterface.js +3 -9
  97. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/UI5ApplicationContainer.js +31 -14
  98. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/UI5ApplicationContainerRenderer.js +16 -8
  99. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/contracts/EmbeddedUI5Handler.js +10 -15
  100. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/contracts/StatefulContainerV1Handler.js +6 -25
  101. package/src/main/js/sap/ushell/appIntegration/contracts/StatefulContainerV2Handler.js +136 -0
  102. package/src/main/js/sap/ushell/appRuntime/neo/AppInfoService.js +1 -1
  103. package/src/main/js/sap/ushell/appRuntime/neo/ProxyAppUtils.js +2 -2
  104. package/src/main/js/sap/ushell/appRuntime/ui5/AppCommunicationMgr.js +1 -8
  105. package/src/main/js/sap/ushell/appRuntime/ui5/AppRuntime.js +32 -19
  106. package/src/main/js/sap/ushell/appRuntime/ui5/AppRuntimeService.js +1 -1
  107. package/src/main/js/sap/ushell/appRuntime/ui5/renderers/fiori2/AccessKeysAgent.js +2 -1
  108. package/src/main/js/sap/ushell/appRuntime/ui5/renderers/fiori2/Renderer.js +17 -29
  109. package/src/main/js/sap/ushell/appRuntime/ui5/renderers/fiori2/RendererExtensions.js +3 -5
  110. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppConfiguration.js +3 -4
  111. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppLifeCycle.js +1 -1
  112. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppLifeCycleAgent.js +33 -30
  113. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppState.js +7 -13
  114. package/src/main/js/sap/ushell/appRuntime/ui5/services/Bookmark.js +25 -39
  115. package/src/main/js/sap/ushell/appRuntime/ui5/services/BookmarkV2.js +24 -26
  116. package/src/main/js/sap/ushell/appRuntime/ui5/services/CommonDataModel.js +1 -1
  117. package/src/main/js/sap/ushell/appRuntime/ui5/services/Container.js +6 -9
  118. package/src/main/js/sap/ushell/appRuntime/ui5/services/CrossApplicationNavigation.js +58 -75
  119. package/src/main/js/sap/ushell/appRuntime/ui5/services/Extension/Item.js +1 -1
  120. package/src/main/js/sap/ushell/appRuntime/ui5/services/Extension.js +1 -1
  121. package/src/main/js/sap/ushell/appRuntime/ui5/services/FlpLaunchPage.js +30 -0
  122. package/src/main/js/sap/ushell/appRuntime/ui5/services/FrameBoundExtension.js +1 -1
  123. package/src/main/js/sap/ushell/appRuntime/ui5/services/LaunchPage.js +1 -1
  124. package/src/main/js/sap/ushell/appRuntime/ui5/services/MessageBroker.js +1 -1
  125. package/src/main/js/sap/ushell/appRuntime/ui5/services/NavTargetResolution.js +14 -20
  126. package/src/main/js/sap/ushell/appRuntime/ui5/services/NavTargetResolutionInternal.js +14 -21
  127. package/src/main/js/sap/ushell/appRuntime/ui5/services/Navigation.js +30 -45
  128. package/src/main/js/sap/ushell/appRuntime/ui5/services/ReferenceResolver.js +1 -1
  129. package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellNavigation.js +11 -16
  130. package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellNavigationInternal.js +8 -12
  131. package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellUIService.js +16 -21
  132. package/src/main/js/sap/ushell/appRuntime/ui5/services/UserDefaultParameters.js +3 -4
  133. package/src/main/js/sap/ushell/appRuntime/ui5/services/UserInfo.js +1 -1
  134. package/src/main/js/sap/ushell/appRuntime/ui5/services/adapters/Ui5ComponentLoaderAdapter.js +1 -1
  135. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/logger.js +1 -1
  136. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/state.js +1 -1
  137. package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5datetimeformat.js +1 -1
  138. package/src/main/js/sap/ushell/bootstrap/common/common.create.configcontract.core.js +65 -36
  139. package/src/main/js/sap/ushell/bootstrap/common/common.override.registermodulepath.js +1 -1
  140. package/src/main/js/sap/ushell/bootstrap/common/common.util.js +3 -3
  141. package/src/main/js/sap/ushell/bootstrap/sandbox2.js +1 -1
  142. package/src/main/js/sap/ushell/components/CatalogsManager.js +11 -11
  143. package/src/main/js/sap/ushell/components/ComponentKeysHandler.js +6 -6
  144. package/src/main/js/sap/ushell/components/HomepageManager.js +3 -2
  145. package/src/main/js/sap/ushell/components/_HomepageManager/DashboardLoadingManager.js +1 -1
  146. package/src/main/js/sap/ushell/components/_HomepageManager/PersistentPageOperationAdapter.js +1 -1
  147. package/src/main/js/sap/ushell/components/_HomepageManager/TransientPageOperationAdapter.js +1 -1
  148. package/src/main/js/sap/ushell/components/appfinder/AppFinder.controller.js +21 -21
  149. package/src/main/js/sap/ushell/components/appfinder/Catalog.controller.js +6 -6
  150. package/src/main/js/sap/ushell/components/appfinder/Component.js +1 -1
  151. package/src/main/js/sap/ushell/components/appfinder/HierarchyApps.controller.js +4 -5
  152. package/src/main/js/sap/ushell/components/appfinder/VisualizationOrganizerHelper.js +2 -2
  153. package/src/main/js/sap/ushell/components/appfinder/manifest.json +1 -1
  154. package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/Category.js +3 -3
  155. package/src/main/js/sap/ushell/components/container/resources/resources_de.properties +1 -1
  156. package/src/main/js/sap/ushell/components/contentFinder/CatalogService.js +12 -6
  157. package/src/main/js/sap/ushell/components/contentFinder/Component.js +49 -11
  158. package/src/main/js/sap/ushell/components/contentFinder/controller/AppSearch.controller.js +107 -42
  159. package/src/main/js/sap/ushell/components/contentFinder/controller/ContentFinderDialog.controller.js +1 -1
  160. package/src/main/js/sap/ushell/components/contentFinder/dialog/Component.js +4 -4
  161. package/src/main/js/sap/ushell/components/contentFinder/dialog/manifest.json +1 -1
  162. package/src/main/js/sap/ushell/components/contentFinder/manifest.json +1 -1
  163. package/src/main/js/sap/ushell/components/contentFinder/model/formatter.js +2 -2
  164. package/src/main/js/sap/ushell/components/contentFinder/resources/resources.properties +1 -1
  165. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ar.properties +4 -2
  166. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_bg.properties +4 -2
  167. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ca.properties +4 -2
  168. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_cnr.properties +4 -2
  169. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_cs.properties +4 -2
  170. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_cy.properties +4 -2
  171. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_da.properties +5 -3
  172. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_de.properties +4 -2
  173. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_el.properties +4 -2
  174. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en.properties +4 -2
  175. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en_GB.properties +4 -2
  176. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en_US_saprigi.properties +4 -2
  177. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_es.properties +4 -2
  178. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_es_MX.properties +4 -2
  179. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_et.properties +4 -2
  180. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_fi.properties +5 -3
  181. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_fr.properties +5 -3
  182. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_fr_CA.properties +4 -2
  183. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_hi.properties +4 -2
  184. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_hr.properties +5 -3
  185. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_hu.properties +4 -2
  186. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_id.properties +5 -3
  187. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_it.properties +4 -2
  188. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_iw.properties +4 -2
  189. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ja.properties +5 -3
  190. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_kk.properties +4 -2
  191. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ko.properties +4 -2
  192. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_lt.properties +4 -2
  193. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_lv.properties +4 -2
  194. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_mk.properties +4 -2
  195. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ms.properties +4 -2
  196. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_nl.properties +4 -2
  197. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_no.properties +4 -2
  198. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_pl.properties +4 -2
  199. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_pt.properties +4 -2
  200. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_pt_PT.properties +4 -2
  201. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ro.properties +4 -2
  202. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ru.properties +5 -3
  203. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sh.properties +4 -2
  204. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sk.properties +4 -2
  205. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sl.properties +4 -2
  206. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sr.properties +4 -2
  207. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sv.properties +4 -2
  208. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_th.properties +4 -2
  209. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_tr.properties +4 -2
  210. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_uk.properties +4 -2
  211. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_vi.properties +4 -2
  212. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_zh_CN.properties +4 -2
  213. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_zh_TW.properties +4 -2
  214. package/src/main/js/sap/ushell/components/contentFinder/view/AppSearch.view.xml +6 -0
  215. package/src/main/js/sap/ushell/components/contentFinder/view/AppSearchCategoryTree.fragment.xml +2 -2
  216. package/src/main/js/sap/ushell/components/contentFinder/view/AppSearchCategoryTreeTable.fragment.xml +69 -0
  217. package/src/main/js/sap/ushell/components/contentFinderStandalone/Component.js +1 -1
  218. package/src/main/js/sap/ushell/components/contentFinderStandalone/controller/ContentFinderStandalone.controller.js +10 -5
  219. package/src/main/js/sap/ushell/components/contentFinderStandalone/manifest.json +1 -1
  220. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ar.properties +3 -0
  221. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_bg.properties +3 -0
  222. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ca.properties +3 -0
  223. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_cnr.properties +3 -0
  224. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_cs.properties +3 -0
  225. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_cy.properties +3 -0
  226. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_da.properties +3 -0
  227. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_de.properties +3 -0
  228. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_el.properties +3 -0
  229. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_en.properties +3 -0
  230. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_en_GB.properties +3 -0
  231. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_en_US_saprigi.properties +3 -0
  232. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_es.properties +3 -0
  233. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_es_MX.properties +3 -0
  234. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_et.properties +3 -0
  235. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_fi.properties +3 -0
  236. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_fr.properties +3 -0
  237. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_fr_CA.properties +3 -0
  238. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_hi.properties +3 -0
  239. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_hr.properties +3 -0
  240. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_hu.properties +3 -0
  241. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_id.properties +3 -0
  242. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_it.properties +3 -0
  243. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_iw.properties +3 -0
  244. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ja.properties +3 -0
  245. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_kk.properties +3 -0
  246. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ko.properties +3 -0
  247. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_lt.properties +3 -0
  248. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_lv.properties +3 -0
  249. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_mk.properties +3 -0
  250. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ms.properties +3 -0
  251. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_nl.properties +3 -0
  252. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_no.properties +3 -0
  253. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_pl.properties +3 -0
  254. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_pt.properties +3 -0
  255. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_pt_PT.properties +3 -0
  256. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ro.properties +3 -0
  257. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ru.properties +3 -0
  258. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_sh.properties +3 -0
  259. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_sk.properties +3 -0
  260. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_sl.properties +3 -0
  261. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_sr.properties +3 -0
  262. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_sv.properties +3 -0
  263. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_th.properties +3 -0
  264. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_tr.properties +3 -0
  265. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_uk.properties +3 -0
  266. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_vi.properties +3 -0
  267. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_zh_CN.properties +3 -0
  268. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_zh_TW.properties +3 -0
  269. package/src/main/js/sap/ushell/components/factsheet/Component.js +1 -1
  270. package/src/main/js/sap/ushell/components/factsheet/tools/ODataUrlTemplating.js +1 -0
  271. package/src/main/js/sap/ushell/components/homeApp/error/HomeAppError.view.xml +1 -1
  272. package/src/main/js/sap/ushell/components/homepage/ActionMode.js +1 -1
  273. package/src/main/js/sap/ushell/components/homepage/Component.js +1 -1
  274. package/src/main/js/sap/ushell/components/homepage/DashboardContent.controller.js +1 -1
  275. package/src/main/js/sap/ushell/components/homepage/DashboardContent.view.js +2 -2
  276. package/src/main/js/sap/ushell/components/homepage/DashboardGroupsBox.js +4 -4
  277. package/src/main/js/sap/ushell/components/homepage/DashboardUIActions.js +1 -1
  278. package/src/main/js/sap/ushell/components/homepage/manifest.json +1 -1
  279. package/src/main/js/sap/ushell/components/pages/ActionMode.js +1 -1
  280. package/src/main/js/sap/ushell/components/pages/Component.js +1 -1
  281. package/src/main/js/sap/ushell/components/pages/MyHomeImport.js +1 -1
  282. package/src/main/js/sap/ushell/components/pages/controller/PageRuntime.controller.js +10 -5
  283. package/src/main/js/sap/ushell/components/pages/manifest.json +1 -1
  284. package/src/main/js/sap/ushell/components/pages/view/MyHomeStart.view.xml +1 -1
  285. package/src/main/js/sap/ushell/components/runtimeSwitcher/controller/RuntimeSwitcher.controller.js +1 -1
  286. package/src/main/js/sap/ushell/components/runtimeSwitcher/manifest.json +1 -1
  287. package/src/main/js/sap/ushell/components/shell/FloatingContainer/manifest.json +1 -1
  288. package/src/main/js/sap/ushell/components/shell/MenuBar/Component.js +9 -8
  289. package/src/main/js/sap/ushell/components/shell/MenuBar/controller/MenuBar.controller.js +4 -1
  290. package/src/main/js/sap/ushell/components/shell/MenuBar/manifest.json +1 -1
  291. package/src/main/js/sap/ushell/components/shell/MenuBar/view/MenuBarPersonalized.view.xml +25 -0
  292. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/Component.js +10 -21
  293. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/controller/NavigationBarMenu.controller.js +12 -5
  294. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/controller/NavigationBarMenuButton.controller.js +1 -1
  295. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/manifest.json +1 -7
  296. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/ContextMenu.fragment.xml +6 -4
  297. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/NavigationBarMenu.fragment.xml +76 -0
  298. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/NavigationBarMenu.view.xml +6 -65
  299. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/NavigationBarMenuButton.view.xml +2 -2
  300. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/NavigationBarMenuPopover.fragment.xml +6 -65
  301. package/src/main/js/sap/ushell/components/shell/Notifications/Component.js +191 -64
  302. package/src/main/js/sap/ushell/components/shell/Notifications/NotificationsList.controller.js +876 -0
  303. package/src/main/js/sap/ushell/components/shell/Notifications/NotificationsListPopoverContent.view.xml +84 -0
  304. package/src/main/js/sap/ushell/components/shell/Notifications/NotificationsListPopoverHeader.fragment.xml +35 -0
  305. package/src/main/js/sap/ushell/components/shell/PostLoadingHeaderEnhancement/Component.js +23 -9
  306. package/src/main/js/sap/ushell/components/shell/ProductSwitch/Component.js +22 -9
  307. package/src/main/js/sap/ushell/components/shell/Search/ESearch.js +15 -2
  308. package/src/main/js/sap/ushell/components/shell/Search/manifest.json +1 -1
  309. package/src/main/js/sap/ushell/components/shell/SearchCEP/Component.js +1 -1
  310. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/FrequentActivityProvider.js +1 -1
  311. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/RecentSearchProvider.js +1 -1
  312. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchProvider.js +1 -1
  313. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchServiceProvider.js +1 -1
  314. package/src/main/js/sap/ushell/components/shell/Settings/Component.js +37 -20
  315. package/src/main/js/sap/ushell/components/shell/Settings/UserSettings.controller.js +2 -2
  316. package/src/main/js/sap/ushell/components/shell/Settings/UserSettings.view.xml +5 -4
  317. package/src/main/js/sap/ushell/components/shell/Settings/appearance/Appearance.controller.js +12 -17
  318. package/src/main/js/sap/ushell/components/shell/Settings/userLanguageRegion/LanguageRegionSelector.controller.js +1 -1
  319. package/src/main/js/sap/ushell/components/shell/ShellBar/Component.js +123 -0
  320. package/src/main/js/sap/ushell/components/shell/ShellBar/controller/ShellBar.controller.js +350 -0
  321. package/src/main/js/sap/ushell/components/shell/ShellBar/manifest.json +48 -0
  322. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources.properties +11 -0
  323. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_ar.properties +5 -0
  324. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_bg.properties +5 -0
  325. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_ca.properties +5 -0
  326. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_cnr.properties +5 -0
  327. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_cs.properties +5 -0
  328. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_cy.properties +5 -0
  329. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_da.properties +5 -0
  330. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_de.properties +5 -0
  331. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_el.properties +5 -0
  332. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_en.properties +5 -0
  333. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_en_GB.properties +5 -0
  334. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_en_US_saprigi.properties +5 -0
  335. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_es.properties +5 -0
  336. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_es_MX.properties +5 -0
  337. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_et.properties +5 -0
  338. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_fi.properties +5 -0
  339. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_fr.properties +5 -0
  340. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_fr_CA.properties +5 -0
  341. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_hi.properties +5 -0
  342. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_hr.properties +5 -0
  343. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_hu.properties +5 -0
  344. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_id.properties +5 -0
  345. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_it.properties +5 -0
  346. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_iw.properties +5 -0
  347. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_ja.properties +5 -0
  348. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_kk.properties +5 -0
  349. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_ko.properties +5 -0
  350. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_lt.properties +5 -0
  351. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_lv.properties +5 -0
  352. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_mk.properties +5 -0
  353. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_ms.properties +5 -0
  354. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_nl.properties +5 -0
  355. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_no.properties +5 -0
  356. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_pl.properties +5 -0
  357. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_pt.properties +5 -0
  358. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_pt_PT.properties +5 -0
  359. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_ro.properties +5 -0
  360. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_ru.properties +5 -0
  361. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_sh.properties +5 -0
  362. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_sk.properties +5 -0
  363. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_sl.properties +5 -0
  364. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_sr.properties +5 -0
  365. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_sv.properties +5 -0
  366. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_th.properties +5 -0
  367. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_tr.properties +5 -0
  368. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_uk.properties +5 -0
  369. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_vi.properties +5 -0
  370. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_zh_CN.properties +5 -0
  371. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_zh_TW.properties +5 -0
  372. package/src/main/js/sap/ushell/components/shell/ShellBar/view/ShellBar.view.xml +67 -0
  373. package/src/main/js/sap/ushell/components/shell/SideNavigation/Component.js +77 -51
  374. package/src/main/js/sap/ushell/components/shell/SideNavigation/controller/SideNavigation.controller.js +105 -61
  375. package/src/main/js/sap/ushell/components/shell/SideNavigation/css/style.css +5 -0
  376. package/src/main/js/sap/ushell/components/shell/SideNavigation/fragment/AllSpaces.fragment.xml +21 -0
  377. package/src/main/js/sap/ushell/components/shell/SideNavigation/fragment/Popover.fragment.xml +6 -1
  378. package/src/main/js/sap/ushell/components/shell/SideNavigation/manifest.json +12 -1
  379. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/AllSpaces.js +56 -5
  380. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/Favorites.js +158 -32
  381. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/GenericNavigationListProvider.js +46 -67
  382. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/MyHome.js +22 -4
  383. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/NavigationHelper.js +3 -2
  384. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/Spaces.js +187 -160
  385. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/SpacesNavigationListProvider.js +27 -11
  386. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources.properties +3 -1
  387. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ar.properties +3 -1
  388. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_bg.properties +3 -1
  389. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ca.properties +3 -1
  390. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_cnr.properties +3 -1
  391. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_cs.properties +3 -1
  392. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_cy.properties +3 -1
  393. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_da.properties +3 -1
  394. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_de.properties +3 -1
  395. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_el.properties +3 -1
  396. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_en.properties +3 -1
  397. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_en_GB.properties +3 -1
  398. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_en_US_saprigi.properties +3 -1
  399. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_es.properties +3 -1
  400. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_es_MX.properties +3 -1
  401. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_et.properties +3 -1
  402. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_fi.properties +4 -2
  403. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_fr.properties +3 -1
  404. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_fr_CA.properties +3 -1
  405. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_hi.properties +3 -1
  406. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_hr.properties +3 -1
  407. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_hu.properties +3 -1
  408. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_id.properties +3 -1
  409. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_it.properties +3 -1
  410. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_iw.properties +3 -1
  411. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ja.properties +3 -1
  412. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_kk.properties +3 -1
  413. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ko.properties +3 -1
  414. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_lt.properties +3 -1
  415. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_lv.properties +3 -1
  416. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_mk.properties +3 -1
  417. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ms.properties +3 -1
  418. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_nl.properties +3 -1
  419. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_no.properties +3 -1
  420. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_pl.properties +3 -1
  421. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_pt.properties +3 -1
  422. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_pt_PT.properties +3 -1
  423. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ro.properties +3 -1
  424. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ru.properties +3 -1
  425. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sh.properties +3 -1
  426. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sk.properties +3 -1
  427. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sl.properties +3 -1
  428. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sr.properties +3 -1
  429. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sv.properties +3 -1
  430. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_th.properties +3 -1
  431. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_tr.properties +3 -1
  432. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_uk.properties +3 -1
  433. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_vi.properties +3 -1
  434. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_zh_CN.properties +3 -1
  435. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_zh_TW.properties +3 -1
  436. package/src/main/js/sap/ushell/components/shell/SideNavigation/view/Main.view.xml +22 -6
  437. package/src/main/js/sap/ushell/components/shell/UserActionsMenu/Component.js +1 -1
  438. package/src/main/js/sap/ushell/components/shell/UserActionsMenu/UserActionsMenu.controller.js +2 -0
  439. package/src/main/js/sap/ushell/components/shell/UserActionsMenu/UserActionsMenu.fragment.xml +1 -0
  440. package/src/main/js/sap/ushell/components/shell/UserImage/Component.js +1 -1
  441. package/src/main/js/sap/ushell/components/tiles/generic.js +1 -1
  442. package/src/main/js/sap/ushell/components/tiles/indicatorDual/DualTile.controller.js +1 -1
  443. package/src/main/js/sap/ushell/components/tiles/indicatorDualComparison/DualComparison.controller.js +2 -2
  444. package/src/main/js/sap/ushell/components/tiles/indicatorDualDeviation/DualDeviation.controller.js +4 -4
  445. package/src/main/js/sap/ushell/components/tiles/indicatorDualTrend/DualTrend.controller.js +18 -18
  446. package/src/main/js/sap/ushell/components/tiles/indicatorTileUtils/smartBusinessUtil.js +11 -11
  447. package/src/main/js/sap/ushell/components/visualizationOrganizer/Component.js +1 -1
  448. package/src/main/js/sap/ushell/components/workPageBuilder/Component.js +2 -2
  449. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.accessibility.js +2 -2
  450. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.controller.js +30 -36
  451. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.layout.js +1 -1
  452. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPage.js +2 -2
  453. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageButton.js +1 -1
  454. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageCell.js +4 -4
  455. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumn.js +2 -2
  456. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumnResizer.js +1 -1
  457. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageRow.js +1 -1
  458. package/src/main/js/sap/ushell/components/workPageBuilder/manifest.json +1 -1
  459. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_es_MX.properties +1 -1
  460. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_fr.properties +1 -1
  461. package/src/main/js/sap/ushell/components/workPageRuntime/Component.js +1 -1
  462. package/src/main/js/sap/ushell/components/workPageRuntime/controller/WorkPageRuntime.controller.js +2 -2
  463. package/src/main/js/sap/ushell/components/workPageRuntime/manifest.json +1 -1
  464. package/src/main/js/sap/ushell/designtime/ApplicationContainer.designtime.js +1 -1
  465. package/src/main/js/sap/ushell/library.js +39 -11
  466. package/src/main/js/sap/ushell/modules/NavigationMenu.js +90 -0
  467. package/src/main/js/sap/ushell/navigationMode.js +1 -1
  468. package/src/main/js/sap/ushell/performance/ShellAnalytics.js +1 -1
  469. package/src/main/js/sap/ushell/performance/StatisticalRecord.js +1 -1
  470. package/src/main/js/sap/ushell/plugins/appwarmup/Component.js +1 -1
  471. package/src/main/js/sap/ushell/renderer/NavContainer.js +260 -0
  472. package/src/main/js/sap/ushell/{ui/AppContainerRenderer.js → renderer/NavContainerRenderer.js} +4 -4
  473. package/src/main/js/sap/ushell/renderer/Renderer.js +145 -126
  474. package/src/main/js/sap/ushell/renderer/RendererAppContainer.js +236 -0
  475. package/src/main/js/sap/ushell/renderer/RendererRootView.fragment.xml +2 -2
  476. package/src/main/js/sap/ushell/renderer/Shell.controller.js +85 -213
  477. package/src/main/js/sap/ushell/renderer/Shell.view.js +105 -43
  478. package/src/main/js/sap/ushell/renderer/allMyApps/AllMyAppsManager.js +6 -6
  479. package/src/main/js/sap/ushell/renderer/rendererTargetWrapper/Component.js +105 -0
  480. package/src/main/js/sap/ushell/renderer/rendererTargetWrapper/RendererTarget.controller.js +83 -0
  481. package/src/main/js/sap/ushell/renderer/rendererTargetWrapper/RendererTarget.view.xml +12 -0
  482. package/src/main/js/sap/ushell/renderer/rendererTargetWrapper/manifest.json +43 -0
  483. package/src/main/js/sap/ushell/renderer/resources/resources.properties +37 -1
  484. package/src/main/js/sap/ushell/renderer/resources/resources_ar.properties +28 -1
  485. package/src/main/js/sap/ushell/renderer/resources/resources_bg.properties +28 -1
  486. package/src/main/js/sap/ushell/renderer/resources/resources_ca.properties +27 -0
  487. package/src/main/js/sap/ushell/renderer/resources/resources_cnr.properties +27 -0
  488. package/src/main/js/sap/ushell/renderer/resources/resources_cs.properties +29 -2
  489. package/src/main/js/sap/ushell/renderer/resources/resources_cy.properties +27 -0
  490. package/src/main/js/sap/ushell/renderer/resources/resources_da.properties +27 -0
  491. package/src/main/js/sap/ushell/renderer/resources/resources_de.properties +27 -0
  492. package/src/main/js/sap/ushell/renderer/resources/resources_el.properties +27 -0
  493. package/src/main/js/sap/ushell/renderer/resources/resources_en.properties +27 -0
  494. package/src/main/js/sap/ushell/renderer/resources/resources_en_GB.properties +27 -0
  495. package/src/main/js/sap/ushell/renderer/resources/resources_en_US_saprigi.properties +27 -0
  496. package/src/main/js/sap/ushell/renderer/resources/resources_es.properties +27 -0
  497. package/src/main/js/sap/ushell/renderer/resources/resources_es_MX.properties +28 -1
  498. package/src/main/js/sap/ushell/renderer/resources/resources_et.properties +27 -0
  499. package/src/main/js/sap/ushell/renderer/resources/resources_fi.properties +27 -0
  500. package/src/main/js/sap/ushell/renderer/resources/resources_fr.properties +29 -2
  501. package/src/main/js/sap/ushell/renderer/resources/resources_fr_CA.properties +33 -6
  502. package/src/main/js/sap/ushell/renderer/resources/resources_hi.properties +30 -3
  503. package/src/main/js/sap/ushell/renderer/resources/resources_hr.properties +60 -33
  504. package/src/main/js/sap/ushell/renderer/resources/resources_hu.properties +27 -0
  505. package/src/main/js/sap/ushell/renderer/resources/resources_id.properties +42 -15
  506. package/src/main/js/sap/ushell/renderer/resources/resources_it.properties +31 -4
  507. package/src/main/js/sap/ushell/renderer/resources/resources_iw.properties +27 -0
  508. package/src/main/js/sap/ushell/renderer/resources/resources_ja.properties +28 -1
  509. package/src/main/js/sap/ushell/renderer/resources/resources_kk.properties +30 -3
  510. package/src/main/js/sap/ushell/renderer/resources/resources_ko.properties +27 -0
  511. package/src/main/js/sap/ushell/renderer/resources/resources_lt.properties +27 -0
  512. package/src/main/js/sap/ushell/renderer/resources/resources_lv.properties +27 -0
  513. package/src/main/js/sap/ushell/renderer/resources/resources_mk.properties +27 -0
  514. package/src/main/js/sap/ushell/renderer/resources/resources_ms.properties +29 -2
  515. package/src/main/js/sap/ushell/renderer/resources/resources_nl.properties +27 -0
  516. package/src/main/js/sap/ushell/renderer/resources/resources_no.properties +27 -0
  517. package/src/main/js/sap/ushell/renderer/resources/resources_pl.properties +27 -0
  518. package/src/main/js/sap/ushell/renderer/resources/resources_pt.properties +27 -0
  519. package/src/main/js/sap/ushell/renderer/resources/resources_pt_PT.properties +27 -0
  520. package/src/main/js/sap/ushell/renderer/resources/resources_ro.properties +27 -0
  521. package/src/main/js/sap/ushell/renderer/resources/resources_ru.properties +29 -2
  522. package/src/main/js/sap/ushell/renderer/resources/resources_sh.properties +27 -0
  523. package/src/main/js/sap/ushell/renderer/resources/resources_sk.properties +27 -0
  524. package/src/main/js/sap/ushell/renderer/resources/resources_sl.properties +27 -0
  525. package/src/main/js/sap/ushell/renderer/resources/resources_sr.properties +27 -0
  526. package/src/main/js/sap/ushell/renderer/resources/resources_sv.properties +27 -0
  527. package/src/main/js/sap/ushell/renderer/resources/resources_th.properties +29 -2
  528. package/src/main/js/sap/ushell/renderer/resources/resources_tr.properties +29 -2
  529. package/src/main/js/sap/ushell/renderer/resources/resources_uk.properties +29 -2
  530. package/src/main/js/sap/ushell/renderer/resources/resources_vi.properties +27 -0
  531. package/src/main/js/sap/ushell/renderer/resources/resources_zh_CN.properties +27 -0
  532. package/src/main/js/sap/ushell/renderer/resources/resources_zh_TW.properties +27 -0
  533. package/src/main/js/sap/ushell/renderer/search/searchComponent/manifest.json +1 -1
  534. package/src/main/js/sap/ushell/renderer/shellHeader/ShellHeader.controller.js +5 -11
  535. package/src/main/js/sap/ushell/renderers/fiori2/History.js +6 -6
  536. package/src/main/js/sap/ushell/renderers/fiori2/LogonFrameProvider.js +6 -6
  537. package/src/main/js/sap/ushell/renderers/fiori2/Renderer.js +11 -11
  538. package/src/main/js/sap/ushell/renderers/fiori2/RendererExtensions.js +2 -2
  539. package/src/main/js/sap/ushell/renderers/fiori2/Shell.view.js +11 -1
  540. package/src/main/js/sap/ushell/renderers/fiori2/allMyApps/AllMyAppsManager.js +6 -6
  541. package/src/main/js/sap/ushell/services/AppConfiguration.js +10 -10
  542. package/src/main/js/sap/ushell/services/AppLifeCycle.js +369 -378
  543. package/src/main/js/sap/ushell/services/AppState.js +1 -1
  544. package/src/main/js/sap/ushell/services/AppType.js +1 -1
  545. package/src/main/js/sap/ushell/services/Bookmark.js +3 -3
  546. package/src/main/js/sap/ushell/services/BookmarkV2.js +15 -15
  547. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Formatter.js +1 -1
  548. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/InboundIndex.js +1 -1
  549. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/InboundProvider.js +1 -1
  550. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/PrelaunchOperations.js +1 -1
  551. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Search.js +1 -1
  552. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/StagedLogger.js +1 -1
  553. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/SystemContext.js +1 -1
  554. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Utils.js +1 -1
  555. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/VirtualInbounds.js +1 -1
  556. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/XAppStateProcessing.js +1 -1
  557. package/src/main/js/sap/ushell/services/ClientSideTargetResolution.js +298 -198
  558. package/src/main/js/sap/ushell/services/CommonDataModel/SiteConverter.js +1 -1
  559. package/src/main/js/sap/ushell/services/CommonDataModel/vizTypeDefaults/VizTypeDefaults.js +1 -1
  560. package/src/main/js/sap/ushell/services/CommonDataModel.js +1 -1
  561. package/src/main/js/sap/ushell/services/Configuration.js +1 -1
  562. package/src/main/js/sap/ushell/services/ConfigurationDefaults.js +1 -1
  563. package/src/main/js/sap/ushell/services/ContentExtensionAdapterFactory.js +6 -6
  564. package/src/main/js/sap/ushell/services/CrossApplicationNavigation.js +4 -4
  565. package/src/main/js/sap/ushell/services/DarkModeSupport.js +9 -4
  566. package/src/main/js/sap/ushell/services/Extension/Item.js +1 -1
  567. package/src/main/js/sap/ushell/services/Extension.js +1 -1
  568. package/src/main/js/sap/ushell/services/FlpLaunchPage.js +55 -53
  569. package/src/main/js/sap/ushell/services/FrameBoundExtension/FloatingContainer.js +1 -1
  570. package/src/main/js/sap/ushell/services/FrameBoundExtension/Footer.js +1 -1
  571. package/src/main/js/sap/ushell/services/FrameBoundExtension/Item.js +1 -1
  572. package/src/main/js/sap/ushell/services/FrameBoundExtension/SidePane.js +1 -1
  573. package/src/main/js/sap/ushell/services/FrameBoundExtension/ToolArea.js +1 -1
  574. package/src/main/js/sap/ushell/services/FrameBoundExtension/UserSettingsEntry.js +1 -1
  575. package/src/main/js/sap/ushell/services/FrameBoundExtension.js +1 -1
  576. package/src/main/js/sap/ushell/services/LaunchPage.js +101 -10
  577. package/src/main/js/sap/ushell/services/Menu.js +1 -1
  578. package/src/main/js/sap/ushell/services/Message.js +1 -1
  579. package/src/main/js/sap/ushell/services/MessageBroker/MessageBrokerEngine.js +21 -53
  580. package/src/main/js/sap/ushell/services/MessageBroker.js +1 -1
  581. package/src/main/js/sap/ushell/services/MessageInternal.js +1 -3
  582. package/src/main/js/sap/ushell/services/NavTargetResolution.js +2 -2
  583. package/src/main/js/sap/ushell/services/NavTargetResolutionInternal.js +0 -1
  584. package/src/main/js/sap/ushell/services/Navigation/compatibility.js +4 -3
  585. package/src/main/js/sap/ushell/services/Navigation/utils.js +1 -1
  586. package/src/main/js/sap/ushell/services/Navigation.js +3 -3
  587. package/src/main/js/sap/ushell/services/NavigationDataProvider.js +12 -11
  588. package/src/main/js/sap/ushell/services/Notifications.js +2 -1
  589. package/src/main/js/sap/ushell/services/NotificationsV2.js +7 -1
  590. package/src/main/js/sap/ushell/services/PageBuilding.js +1 -1
  591. package/src/main/js/sap/ushell/services/PagePersistence.js +1 -1
  592. package/src/main/js/sap/ushell/services/PageReferencing.js +1 -1
  593. package/src/main/js/sap/ushell/services/Pages.js +1 -1
  594. package/src/main/js/sap/ushell/services/Personalization.js +3 -3
  595. package/src/main/js/sap/ushell/services/PersonalizationV2.js +1 -1
  596. package/src/main/js/sap/ushell/services/PluginManager/Extensions.js +1 -1
  597. package/src/main/js/sap/ushell/services/PluginManager/HeaderExtensions.js +1 -1
  598. package/src/main/js/sap/ushell/services/PluginManager/MenuExtensions.js +1 -1
  599. package/src/main/js/sap/ushell/services/PluginManager/SimpleExpression.js +1 -1
  600. package/src/main/js/sap/ushell/services/PluginManager.js +85 -80
  601. package/src/main/js/sap/ushell/services/ReferenceResolver.js +1 -1
  602. package/src/main/js/sap/ushell/services/Search.js +1 -1
  603. package/src/main/js/sap/ushell/services/SearchCEP.js +1 -1
  604. package/src/main/js/sap/ushell/services/SearchableContent.js +1 -1
  605. package/src/main/js/sap/ushell/services/ShellNavigation.js +1 -1
  606. package/src/main/js/sap/ushell/services/ShellNavigationHashChanger.js +2 -2
  607. package/src/main/js/sap/ushell/services/ShellNavigationInternal.js +1 -1
  608. package/src/main/js/sap/ushell/services/SmartNavigation.js +5 -5
  609. package/src/main/js/sap/ushell/services/SpaceContent.js +1 -1
  610. package/src/main/js/sap/ushell/services/UITracer.js +1 -1
  611. package/src/main/js/sap/ushell/services/URLShortening.js +2 -2
  612. package/src/main/js/sap/ushell/services/URLTemplate.js +1 -1
  613. package/src/main/js/sap/ushell/services/Ui5ComponentLoader.js +687 -272
  614. package/src/main/js/sap/ushell/services/UsageAnalytics.js +10 -10
  615. package/src/main/js/sap/ushell/services/UserDefaultParameterPersistence.js +1 -1
  616. package/src/main/js/sap/ushell/services/UserDefaultParameters.js +1 -1
  617. package/src/main/js/sap/ushell/services/UserInfo.js +1 -1
  618. package/src/main/js/sap/ushell/services/UserRecents.js +1 -1
  619. package/src/main/js/sap/ushell/services/VisualizationDataProvider.js +1 -1
  620. package/src/main/js/sap/ushell/services/VisualizationInstantiation.js +2 -2
  621. package/src/main/js/sap/ushell/services/_AppState/AppStatePersistencyMethod.js +1 -0
  622. package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/ContentExtensionAdapterConfig.js +1 -1
  623. package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/FeaturedGroupConfig.js +1 -1
  624. package/src/main/js/sap/ushell/services/_CrossApplicationNavigation/utils.js +9 -10
  625. package/src/main/js/sap/ushell/services/_PageReferencing/PageReferencer.js +1 -1
  626. package/src/main/js/sap/ushell/services/_Personalization/ContextContainer.js +6 -6
  627. package/src/main/js/sap/ushell/services/_Personalization/PersonalizationContainer.js +11 -13
  628. package/src/main/js/sap/ushell/services/_Personalization/PersonalizationContainerVariant.js +4 -4
  629. package/src/main/js/sap/ushell/services/_Personalization/PersonalizationContainerVariantSet.js +12 -11
  630. package/src/main/js/sap/ushell/services/_Personalization/Personalizer.js +5 -3
  631. package/src/main/js/sap/ushell/services/_Personalization/TransientPersonalizer.js +4 -4
  632. package/src/main/js/sap/ushell/services/_Personalization/Variant.js +7 -7
  633. package/src/main/js/sap/ushell/services/_Personalization/VariantSet.js +3 -5
  634. package/src/main/js/sap/ushell/services/_Personalization/WindowAdapter.js +2 -2
  635. package/src/main/js/sap/ushell/services/_Personalization/WindowAdapterContainer.js +2 -1
  636. package/src/main/js/sap/ushell/services/_Personalization/constants.js +9 -10
  637. package/src/main/js/sap/ushell/services/_Personalization/constants.private.js +3 -4
  638. package/src/main/js/sap/ushell/services/_Personalization/utils.js +2 -1
  639. package/src/main/js/sap/ushell/services/personalization/VariantSetAdapter.js +4 -2
  640. package/src/main/js/sap/ushell/state/BackNavigation.js +1 -7
  641. package/src/main/js/sap/ushell/state/ContentDensity.js +207 -0
  642. package/src/main/js/sap/ushell/state/Favicon.js +115 -0
  643. package/src/main/js/sap/ushell/state/StateManager.js +10 -3
  644. package/src/main/js/sap/ushell/state/StateRules.js +5 -0
  645. package/src/main/js/sap/ushell/state/StrategyFactory/HeadEndItemsStrategy.js +8 -1
  646. package/src/main/js/sap/ushell/state/StrategyFactory/UserActionsStrategy.js +3 -2
  647. package/src/main/js/sap/ushell/support/plugins/flpConfig/FlpConfigurationPlugin.js +1 -1
  648. package/src/main/js/sap/ushell/themes/base/ApplicationContainer.less +3 -2
  649. package/src/main/js/sap/ushell/themes/base/FlexibleColumnLayout.less +10 -0
  650. package/src/main/js/sap/ushell/themes/base/MenuBar.less +3 -0
  651. package/src/main/js/sap/ushell/themes/base/NavContainer.less +6 -0
  652. package/src/main/js/sap/ushell/themes/base/Notifications.less +29 -0
  653. package/src/main/js/sap/ushell/themes/base/ShellBar.less +7 -0
  654. package/src/main/js/sap/ushell/themes/base/ShellHeader.less +13 -8
  655. package/src/main/js/sap/ushell/themes/base/library.source.less +3 -0
  656. package/src/main/js/sap/ushell/themes/sap_belize_base/ApplicationContainer.less +9 -1
  657. package/src/main/js/sap/ushell/themes/sap_belize_base/NavContainer.less +6 -0
  658. package/src/main/js/sap/ushell/themes/sap_belize_base/library.source.less +1 -0
  659. package/src/main/js/sap/ushell/themes/sap_bluecrystal_base/ApplicationContainer.less +9 -1
  660. package/src/main/js/sap/ushell/themes/sap_bluecrystal_base/NavContainer.less +6 -0
  661. package/src/main/js/sap/ushell/themes/sap_bluecrystal_base/library.source.less +1 -0
  662. package/src/main/js/sap/ushell/themes/sap_fiori_3_hcb/Notifications.less +4 -0
  663. package/src/main/js/sap/ushell/themes/sap_fiori_3_hcw/Notifications.less +4 -0
  664. package/src/main/js/sap/ushell/themes/sap_hcb/base_ApplicationContainer.less +9 -1
  665. package/src/main/js/sap/ushell/themes/sap_hcb/base_MenuBar.less +3 -0
  666. package/src/main/js/sap/ushell/themes/sap_hcb/base_NavContainer.less +6 -0
  667. package/src/main/js/sap/ushell/themes/sap_hcb/base_ShellBar.less +7 -0
  668. package/src/main/js/sap/ushell/themes/sap_hcb/base_ShellHeader.less +6 -1
  669. package/src/main/js/sap/ushell/themes/sap_hcb/library.source.less +2 -0
  670. package/src/main/js/sap/ushell/themes/sap_horizon_hcb/Notifications.less +3 -0
  671. package/src/main/js/sap/ushell/themes/sap_horizon_hcw/Notifications.less +4 -0
  672. package/src/main/js/sap/ushell/thirdparty/Avatar.js +381 -0
  673. package/src/main/js/sap/ushell/thirdparty/BusyIndicator.js +464 -0
  674. package/src/main/js/sap/ushell/thirdparty/Button.js +7 -0
  675. package/src/main/js/sap/ushell/thirdparty/Button2.js +524 -0
  676. package/src/main/js/sap/ushell/thirdparty/Icon.js +296 -0
  677. package/src/main/js/sap/ushell/thirdparty/Icons.js +77 -74
  678. package/src/main/js/sap/ushell/thirdparty/Label.js +115 -0
  679. package/src/main/js/sap/ushell/thirdparty/Link.js +315 -0
  680. package/src/main/js/sap/ushell/thirdparty/List.js +1705 -0
  681. package/src/main/js/sap/ushell/thirdparty/ListItemCustom.js +95 -0
  682. package/src/main/js/sap/ushell/thirdparty/ListItemTemplate.js +3917 -0
  683. package/src/main/js/sap/ushell/thirdparty/Menu.js +406 -0
  684. package/src/main/js/sap/ushell/thirdparty/MenuItem.js +7 -0
  685. package/src/main/js/sap/ushell/thirdparty/MenuItem2.js +355 -0
  686. package/src/main/js/sap/ushell/thirdparty/NotificationList.js +291 -0
  687. package/src/main/js/sap/ushell/thirdparty/NotificationListGroupItem.js +310 -0
  688. package/src/main/js/sap/ushell/thirdparty/NotificationListItem.js +531 -0
  689. package/src/main/js/sap/ushell/thirdparty/NotificationListItemBase.js +98 -0
  690. package/src/main/js/sap/ushell/thirdparty/ShellBar.js +1664 -0
  691. package/src/main/js/sap/ushell/thirdparty/ShellBarItem.js +89 -0
  692. package/src/main/js/sap/ushell/thirdparty/ShellBarSpacer.js +40 -0
  693. package/src/main/js/sap/ushell/thirdparty/Tag.js +307 -0
  694. package/src/main/js/sap/ushell/thirdparty/Text.js +127 -0
  695. package/src/main/js/sap/ushell/thirdparty/UserMenu.js +98 -980
  696. package/src/main/js/sap/ushell/thirdparty/UserMenuAccount.js +10 -0
  697. package/src/main/js/sap/ushell/thirdparty/UserMenuItem.js +55 -414
  698. package/src/main/js/sap/ushell/thirdparty/_dynamics/ListItemStandardExpandableTextTemplate.js +193 -0
  699. package/src/main/js/sap/ushell/thirdparty/_dynamics/SAP-icons-TNT.js +561 -0
  700. package/src/main/js/sap/ushell/thirdparty/_dynamics/SAP-icons-TNT2.js +561 -0
  701. package/src/main/js/sap/ushell/thirdparty/_dynamics/SAP-icons-business-suite.js +1194 -0
  702. package/src/main/js/sap/ushell/thirdparty/_dynamics/SAP-icons-business-suite2.js +1194 -0
  703. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ar2.js +15 -0
  704. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ar3.js +44 -5
  705. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_bg2.js +16 -1
  706. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_bg3.js +44 -5
  707. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ca2.js +15 -0
  708. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ca3.js +44 -5
  709. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cnr2.js +15 -0
  710. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cnr3.js +44 -5
  711. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cs2.js +15 -0
  712. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cs3.js +47 -8
  713. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cy2.js +15 -0
  714. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cy3.js +44 -5
  715. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_da2.js +15 -0
  716. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_da3.js +46 -7
  717. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_de2.js +16 -1
  718. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_de3.js +44 -5
  719. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_el2.js +15 -0
  720. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_el3.js +44 -5
  721. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en2.js +15 -0
  722. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en3.js +44 -5
  723. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_GB2.js +15 -0
  724. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_GB3.js +44 -5
  725. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_sappsd2.js +15 -0
  726. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_sappsd3.js +44 -5
  727. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saprigi2.js +12 -0
  728. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saprigi3.js +22 -10
  729. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saptrc2.js +15 -0
  730. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saptrc3.js +44 -5
  731. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es2.js +16 -1
  732. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es3.js +44 -5
  733. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es_MX2.js +15 -0
  734. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es_MX3.js +44 -5
  735. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_et2.js +15 -0
  736. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_et3.js +44 -5
  737. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fi2.js +15 -0
  738. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fi3.js +44 -5
  739. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr2.js +20 -5
  740. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr3.js +46 -7
  741. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr_CA2.js +15 -0
  742. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr_CA3.js +44 -5
  743. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hi2.js +15 -0
  744. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hi3.js +44 -5
  745. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hr2.js +21 -6
  746. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hr3.js +53 -14
  747. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hu2.js +15 -0
  748. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hu3.js +44 -5
  749. package/src/main/js/sap/ushell/thirdparty/_dynamics/{messagebundle_in.js → messagebundle_id.js} +2 -2
  750. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_id2.js +665 -0
  751. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_id3.js +554 -0
  752. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_it2.js +33 -18
  753. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_it3.js +79 -40
  754. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_iw2.js +15 -0
  755. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_iw3.js +44 -5
  756. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ja2.js +15 -0
  757. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ja3.js +44 -5
  758. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_kk2.js +15 -0
  759. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_kk3.js +44 -5
  760. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ko2.js +15 -0
  761. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ko3.js +46 -7
  762. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lt2.js +15 -0
  763. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lt3.js +44 -5
  764. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lv2.js +26 -11
  765. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lv3.js +44 -5
  766. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_mk2.js +15 -0
  767. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_mk3.js +46 -7
  768. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ms2.js +17 -2
  769. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ms3.js +45 -6
  770. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_nl2.js +15 -0
  771. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_nl3.js +44 -5
  772. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_no2.js +15 -0
  773. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_no3.js +44 -5
  774. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pl2.js +20 -5
  775. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pl3.js +44 -5
  776. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt2.js +16 -1
  777. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt3.js +44 -5
  778. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt_PT2.js +15 -0
  779. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt_PT3.js +44 -5
  780. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ro2.js +16 -1
  781. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ro3.js +44 -5
  782. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ru2.js +18 -3
  783. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ru3.js +44 -5
  784. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sh2.js +15 -0
  785. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sh3.js +44 -5
  786. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sk2.js +16 -1
  787. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sk3.js +44 -5
  788. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sl2.js +16 -1
  789. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sl3.js +45 -6
  790. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sr2.js +15 -0
  791. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sr3.js +44 -5
  792. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sv2.js +16 -1
  793. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sv3.js +46 -7
  794. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_th2.js +15 -0
  795. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_th3.js +44 -5
  796. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_tr2.js +15 -0
  797. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_tr3.js +44 -5
  798. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_uk2.js +15 -0
  799. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_uk3.js +45 -6
  800. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_vi2.js +16 -1
  801. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_vi3.js +44 -5
  802. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_CN2.js +15 -0
  803. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_CN3.js +44 -5
  804. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_TW2.js +15 -0
  805. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_TW3.js +44 -5
  806. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css10.js +1 -1
  807. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css11.js +1 -1
  808. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css12.js +1 -1
  809. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css13.js +1 -1
  810. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css14.js +1 -1
  811. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css15.js +1 -1
  812. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css16.js +1 -1
  813. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css17.js +1 -1
  814. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css18.js +1 -1
  815. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css19.js +1 -1
  816. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css2.js +1 -1
  817. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css20.js +1 -1
  818. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css21.js +1 -1
  819. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css22.js +1 -1
  820. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css23.js +1 -1
  821. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css24.js +1 -1
  822. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css25.js +7 -0
  823. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css3.js +1 -1
  824. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css4.js +1 -1
  825. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css5.js +1 -1
  826. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css6.js +1 -1
  827. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css7.js +1 -1
  828. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css8.js +1 -1
  829. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css9.js +1 -1
  830. package/src/main/js/sap/ushell/thirdparty/event-strict.js +7 -0
  831. package/src/main/js/sap/ushell/thirdparty/i18n-defaults.js +152 -0
  832. package/src/main/js/sap/ushell/thirdparty/i18n-defaults2.js +93 -0
  833. package/src/main/js/sap/ushell/thirdparty/information.js +103 -0
  834. package/src/main/js/sap/ushell/thirdparty/overflow.js +45 -0
  835. package/src/main/js/sap/ushell/thirdparty/parameters-bundle.css.js +8 -0
  836. package/src/main/js/sap/ushell/thirdparty/toLowercaseEnumValue.js +15 -0
  837. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents/Avatar.js +4 -0
  838. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents/Button.js +4 -0
  839. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents/Label.js +4 -0
  840. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents/Menu.js +4 -0
  841. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents/MenuItem.js +4 -0
  842. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents/dist/Avatar.js +113 -0
  843. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents/dist/Button.js +123 -0
  844. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents/dist/Label.js +75 -0
  845. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents/dist/Menu.js +90 -0
  846. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents/dist/MenuItem.js +5 -0
  847. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-base.js +1 -1
  848. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/NotificationList.js +4 -0
  849. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/NotificationListGroupItem.js +4 -0
  850. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/NotificationListItem.js +4 -0
  851. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/ShellBar.js +4 -0
  852. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/ShellBarItem.js +4 -0
  853. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/ShellBarSpacer.js +4 -0
  854. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/NotificationList.js +60 -0
  855. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/NotificationListGroupItem.js +72 -0
  856. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/NotificationListItem.js +96 -0
  857. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/NotificationListItemBase.js +51 -0
  858. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/ShellBar.js +150 -0
  859. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/ShellBarItem.js +61 -0
  860. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/ShellBarSpacer.js +46 -0
  861. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/UserMenuAccount.js +5 -0
  862. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori.js +6 -2
  863. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-icons-business-suite/AllIcons.js +26 -0
  864. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-icons-tnt/AllIcons.js +26 -0
  865. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents.js +2 -1
  866. package/src/main/js/sap/ushell/thirdparty/webcomponents-base.js +44 -40
  867. package/src/main/js/sap/ushell/thirdparty/webcomponents-fiori.js +10 -10
  868. package/src/main/js/sap/ushell/thirdparty/webcomponents.js +20 -20
  869. package/src/main/js/sap/ushell/ui/ShellHeader.js +4 -40
  870. package/src/main/js/sap/ushell/ui/ShellHeaderRenderer.js +5 -1
  871. package/src/main/js/sap/ushell/ui/appfinder/AppBoxRenderer.js +2 -1
  872. package/src/main/js/sap/ushell/ui/cards/RecentActivitiesExtension.js +1 -1
  873. package/src/main/js/sap/ushell/ui/footerbar/AboutDialog.controller.js +28 -27
  874. package/src/main/js/sap/ushell/ui/footerbar/AddBookmarkButton.js +5 -1
  875. package/src/main/js/sap/ushell/ui/footerbar/SaveAsTile.controller.js +3 -2
  876. package/src/main/js/sap/ushell/ui/footerbar/SaveAsTile.view.js +2 -1
  877. package/src/main/js/sap/ushell/ui/footerbar/SendAsEmailButton.js +2 -1
  878. package/src/main/js/sap/ushell/ui/launchpad/AnchorItem.js +1 -1
  879. package/src/main/js/sap/ushell/ui/launchpad/AnchorItemRenderer.js +2 -1
  880. package/src/main/js/sap/ushell/ui/launchpad/AnchorNavigationBar.js +1 -1
  881. package/src/main/js/sap/ushell/ui/launchpad/AnchorNavigationBarRenderer.js +1 -1
  882. package/src/main/js/sap/ushell/ui/launchpad/DashboardGroupsContainer.js +2 -1
  883. package/src/main/js/sap/ushell/ui/launchpad/DashboardGroupsContainerRenderer.js +3 -2
  884. package/src/main/js/sap/ushell/ui/launchpad/ExtendedChangeDetection.js +1 -1
  885. package/src/main/js/sap/ushell/ui/launchpad/Section.js +1 -1
  886. package/src/main/js/sap/ushell/ui/launchpad/ViewPortState.js +3 -3
  887. package/src/main/js/sap/ushell/ui/launchpad/VizInstance.js +23 -1
  888. package/src/main/js/sap/ushell/ui/launchpad/VizInstanceAbap.js +35 -34
  889. package/src/main/js/sap/ushell/ui/launchpad/VizInstanceCdm.js +6 -9
  890. package/src/main/js/sap/ushell/ui/launchpad/VizInstanceLaunchPage.js +1 -1
  891. package/src/main/js/sap/ushell/ui/launchpad/section/CompactArea.js +1 -1
  892. package/src/main/js/sap/ushell/ui/shell/RightFloatingContainer.js +2 -2
  893. package/src/main/js/sap/ushell/ui/shell/ShellAppTitle.js +108 -9
  894. package/src/main/js/sap/ushell/ui/shell/ShellHeadItem.js +2 -2
  895. package/src/main/js/sap/ushell/ui/shell/ToolAreaItem.js +1 -1
  896. package/src/main/js/sap/ushell/ui/utils.js +1 -1
  897. package/src/main/js/sap/ushell/ui5service/ShellUIServiceFactory.js +1 -1
  898. package/src/main/js/sap/ushell/ui5service/UserStatus.js +1 -1
  899. package/src/main/js/sap/ushell/utils/RestrictedJSONModel.js +16 -0
  900. package/src/main/js/sap/ushell/utils/UriParameters.js +1 -0
  901. package/src/main/js/sap/ushell/utils/UrlParsing.js +96 -94
  902. package/src/main/js/sap/ushell/utils/UrlShortening.js +3 -3
  903. package/src/main/js/sap/ushell/utils/workpage/WorkPageHost.js +5 -5
  904. package/src/main/js/sap/ushell/utils/workpage/WorkPageService.js +12 -6
  905. package/src/main/js/sap/ushell/utils/workpage/WorkPageVizInstantiation.js +1 -1
  906. package/src/main/js/sap/ushell/utils/workpage/resources/resources_es_MX.properties +1 -1
  907. package/src/test/js/sap/ushell/bootstrap/sandbox.js +1 -1
  908. package/ui5.yaml +1 -2
  909. package/src/main/js/sap/ushell/components/applicationIntegration/AppLifeCycle.js +0 -1702
  910. package/src/main/js/sap/ushell/components/applicationIntegration/ApplicationContainerRenderer.js +0 -35
  911. package/src/main/js/sap/ushell/components/applicationIntegration/Storage.js +0 -25
  912. package/src/main/js/sap/ushell/components/applicationIntegration/application/Application.js +0 -56
  913. package/src/main/js/sap/ushell/components/applicationIntegration/application/BlueBoxHandler.js +0 -23
  914. package/src/main/js/sap/ushell/components/applicationIntegration/application/BlueBoxesCache.js +0 -16
  915. package/src/main/js/sap/ushell/components/applicationIntegration/application/PostMessageAPI.js +0 -22
  916. package/src/main/js/sap/ushell/components/applicationIntegration/application/PostMessageAPIInterface.js +0 -17
  917. package/src/main/js/sap/ushell/components/applicationIntegration/application/PostMessageUtils.js +0 -19
  918. package/src/main/js/sap/ushell/components/applicationIntegration/application/WebGUIStatefulHandler.js +0 -20
  919. package/src/main/js/sap/ushell/components/applicationIntegration/configuration/AppMeta.js +0 -198
  920. package/src/main/js/sap/ushell/components/applicationIntegration/contracts/StatefulContainerV2Handler.js +0 -175
  921. package/src/main/js/sap/ushell/components/applicationIntegration/relatedServices/RelatedServices.js +0 -24
  922. package/src/main/js/sap/ushell/components/applicationIntegrationOld/AppLifeCycle.js +0 -1926
  923. package/src/main/js/sap/ushell/components/applicationIntegrationOld/Storage.js +0 -62
  924. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/Application.js +0 -709
  925. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/BlueBoxHandler.js +0 -406
  926. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/BlueBoxesCache.js +0 -263
  927. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/PostMessageAPI.js +0 -2382
  928. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/PostMessageAPIInterface.js +0 -143
  929. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/PostMessageUtils.js +0 -192
  930. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/WebGUIStatefulHandler.js +0 -90
  931. package/src/main/js/sap/ushell/components/applicationIntegrationOld/configuration/AppMeta.js +0 -193
  932. package/src/main/js/sap/ushell/components/applicationIntegrationOld/relatedServices/RelatedServices.js +0 -91
  933. package/src/main/js/sap/ushell/components/container/ApplicationContainer.js +0 -1769
  934. package/src/main/js/sap/ushell/components/container/IframePOSTUtils.js +0 -232
  935. package/src/main/js/sap/ushell/components/shell/SideNavigation/view/SideNavigation.view.xml +0 -52
  936. package/src/main/js/sap/ushell/services/Ui5ComponentLoader/utils.js +0 -375
  937. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_in2.js +0 -266
  938. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_in3.js +0 -143
  939. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css.js +0 -7
  940. package/src/main/js/sap/ushell/thirdparty/parameters-bundle.css25.js +0 -7177
  941. package/src/main/js/sap/ushell/ui/AppContainer.js +0 -265
  942. /package/src/main/js/sap/ushell/components/shell/MenuBar/view/{MenuBarPersonalization.view.xml → MenuBarWithPersonalizationButton.view.xml} +0 -0
@@ -0,0 +1,1677 @@
1
+ // Copyright (c) 2009-2025 SAP SE, All Rights Reserved
2
+
3
+ /**
4
+ * @fileOverview handle all the resources for the different applications.
5
+ * @version 1.136.0
6
+ */
7
+ sap.ui.define([
8
+ "sap/base/util/deepEqual",
9
+ "sap/base/util/Deferred",
10
+ "sap/ui/Device",
11
+ "sap/ui/core/Element",
12
+ "sap/ui/core/EventBus",
13
+ "sap/ushell/appIntegration/KeepAliveApps",
14
+ "sap/ushell/state/BackNavigation",
15
+ "sap/ushell/state/ContentDensity",
16
+ "sap/ushell/state/Favicon",
17
+ "sap/ushell/appIntegration/contracts/EmbeddedUI5Handler",
18
+ "sap/ushell/appIntegration/contracts/StatefulContainerV1Handler",
19
+ "sap/ushell/appIntegration/contracts/StatefulContainerV2Handler",
20
+ "sap/ushell/appIntegration/ApplicationContainerCache",
21
+ "sap/ushell/appIntegration/ApplicationHandle",
22
+ "sap/ushell/appIntegration/AppLifeCycle/KeepAliveMode",
23
+ "sap/ushell/appIntegration/PostMessageManager/AppruntimeHandler",
24
+ "sap/ushell/appIntegration/PostMessageManager/NWBCHandler",
25
+ "sap/ushell/appIntegration/PostMessageManager/LifecycleHandler",
26
+ "sap/ushell/appIntegration/PostMessageManager/ServiceHandler",
27
+ "sap/ushell/appIntegration/PostMessageManager/MessageBrokerHandler",
28
+ "sap/ushell/appIntegration/PostMessageManager",
29
+ "sap/ushell/appIntegration/PostMessagePluginInterface",
30
+ "sap/ushell/appIntegration/IframeApplicationContainer",
31
+ "sap/ushell/appIntegration/UI5ApplicationContainer",
32
+ "sap/ushell/services/AppConfiguration",
33
+ "sap/ushell/utils",
34
+ "sap/ushell/Config",
35
+ "sap/ushell/ApplicationType",
36
+ "sap/ushell/utils/UriParameters",
37
+ "sap/base/Log",
38
+ "sap/ushell/EventHub",
39
+ "sap/ushell/utils/UrlParsing",
40
+ "sap/ui/thirdparty/hasher",
41
+ "sap/ushell/services/MessageBroker/MessageBrokerEngine",
42
+ "sap/ushell/renderer/utils",
43
+ "sap/m/library",
44
+ "sap/ushell/AppInfoParameters",
45
+ "sap/ushell/Container",
46
+ "sap/ushell/resources",
47
+ "sap/ushell/state/ShellModel",
48
+ "sap/ushell/state/StateManager",
49
+ "sap/ushell/state/KeepAlive",
50
+ "sap/ushell/ui5service/ShellUIServiceFactory",
51
+ "sap/ui/core/service/ServiceFactoryRegistry",
52
+ "sap/ushell/library"
53
+ ], (
54
+ deepEqual,
55
+ Deferred,
56
+ Device,
57
+ Element,
58
+ EventBus,
59
+ KeepAliveApps,
60
+ BackNavigation,
61
+ ContentDensity,
62
+ Favicon,
63
+ EmbeddedUI5Handler,
64
+ StatefulContainerV1Handler,
65
+ StatefulContainerV2Handler,
66
+ ApplicationContainerCache,
67
+ ApplicationHandle,
68
+ KeepAliveMode,
69
+ AppRuntimeHandler,
70
+ NWBCHandler,
71
+ LifecycleHandler,
72
+ ServiceHandler,
73
+ MessageBrokerHandler,
74
+ PostMessageManager,
75
+ PostMessagePluginInterface,
76
+ IframeApplicationContainer,
77
+ UI5ApplicationContainer,
78
+ AppConfiguration,
79
+ ushellUtils,
80
+ Config,
81
+ ApplicationType,
82
+ UriParameters,
83
+ Log,
84
+ EventHub,
85
+ UrlParsing,
86
+ hasher,
87
+ MessageBrokerEngine,
88
+ RendererUtils,
89
+ mobileLibrary,
90
+ AppInfoParameters,
91
+ Container,
92
+ ushellResources,
93
+ ShellModel,
94
+ StateManager,
95
+ KeepAlive,
96
+ ShellUIServiceFactory,
97
+ ServiceFactoryRegistry,
98
+ ushellLibrary
99
+ ) => {
100
+ "use strict";
101
+
102
+ // shortcut for sap.ushell.appIntegration.contracts.StatefulType
103
+ const StatefulType = ushellLibrary.appIntegration.contracts.StatefulType;
104
+
105
+ // shortcut for sap.ushell.state.StateManager.ShellMode
106
+ const ShellMode = StateManager.ShellMode;
107
+
108
+ // shortcut for sap.ushell.state.StateManager.LaunchpadState
109
+ const LaunchpadState = StateManager.LaunchpadState;
110
+
111
+ // shortcut for sap.ushell.state.StateManager.Operation
112
+ const Operation = StateManager.Operation;
113
+
114
+ // shortcut for sap.m.URLHelper
115
+ const URLHelper = mobileLibrary.URLHelper;
116
+
117
+ // todo: [FLPCOREANDUX-10024] cleanup
118
+ // const CACHED_APP_TYPES = ["URL"];
119
+
120
+ const iValidIframeTimeout = 3500;
121
+
122
+ function AppLifeCycle () {
123
+ //Dangling controls is a queue of requests to change shell elements attributes, requested by the application in the process of createContent before the actual application state was apply.
124
+ this._bDisableHomeAppCache = false;
125
+ this._bEnableRouterRetrigger = true;
126
+ this._oCurrentApplication = {};
127
+ this._oGlobalShellUIService = null;
128
+ this._oNavContainer = null;
129
+ this._pLastApplicationStart = Promise.resolve();
130
+ // stable hash to appId
131
+ this._oStorageAppIdMap = {};
132
+ // base appId to counter
133
+ this._oStorageAppIdNextIndex = {};
134
+ this._aDoables = [];
135
+
136
+ //connect FLP to the message broker
137
+ if (window.QUnit === undefined) {
138
+ MessageBrokerEngine.connect("FLP");
139
+ }
140
+ }
141
+
142
+ // Expose Enums
143
+ AppLifeCycle.prototype.KeepAliveMode = KeepAliveMode;
144
+
145
+ /**
146
+ * @param {object} oInNavContainer
147
+ * @param {boolean} bInDisableHomeAppCache
148
+ */
149
+ AppLifeCycle.prototype.init = function (oInNavContainer, bInDisableHomeAppCache) {
150
+ const aInitPromises = [];
151
+ if (Config.last("/core/shell/enablePersistantAppstateWhenSharing")) {
152
+ Container.getServiceAsync("AppState").then((oAppStateService) => {
153
+ const fnOldTriggerEmail = URLHelper.triggerEmail.bind(URLHelper);
154
+ URLHelper.triggerEmail = function (sTo, sSubject, sBody, sCc, sBcc) {
155
+ const sFLPUrl = document.URL;
156
+ oAppStateService.setAppStateToPublic(sFLPUrl)
157
+ .done((sNewURL, sXStateKey, sIStateKey, sXStateKeyNew, sIStateKeyNew) => {
158
+ sSubject = sSubject && sXStateKey && sXStateKeyNew && sSubject.includes(sXStateKey) ? sSubject.replace(sXStateKey, sXStateKeyNew) : sSubject;
159
+ sSubject = sSubject && sIStateKey && sIStateKeyNew && sSubject.includes(sIStateKey) ? sSubject.replace(sIStateKey, sIStateKeyNew) : sSubject;
160
+ sBody = sBody && sXStateKey && sXStateKeyNew && sBody.includes(sXStateKey) ? sBody.replace(sXStateKey, sXStateKeyNew) : sBody;
161
+ sBody = sBody && sIStateKey && sIStateKeyNew && sBody.includes(sIStateKey) ? sBody.replace(sIStateKey, sIStateKeyNew) : sBody;
162
+ fnOldTriggerEmail(sTo, sSubject, sBody, sCc, sBcc);
163
+ })
164
+ .fail(fnOldTriggerEmail);
165
+ };
166
+ });
167
+ }
168
+
169
+ this._startPostMessageHandling();
170
+
171
+ aInitPromises.push(ShellUIServiceFactory.init().then(() => {
172
+ ServiceFactoryRegistry.register(
173
+ "sap.ushell.ui5service.ShellUIService",
174
+ ShellUIServiceFactory
175
+ );
176
+ }));
177
+ aInitPromises.push(this._createGlobalShellUIService());
178
+
179
+ this._oNavContainer = oInNavContainer;
180
+ this._bDisableHomeAppCache = bInDisableHomeAppCache;
181
+
182
+ //TODO add unsubscribe
183
+ EventBus.getInstance().subscribe("sap.ushell", "getAppLifeCycle", this._onGetAppLifeCycle, this);
184
+
185
+ this._addEvents();
186
+
187
+ aInitPromises.push(ContentDensity.init());
188
+ Favicon.init();
189
+ ApplicationHandle.init(this, this._oNavContainer);
190
+
191
+ this._oNavContainer.attachAfterNavigate(this.onAfterNavigate.bind(this));
192
+ this._oNavContainer.attachBeforeNavigate(this.onBeforeNavigate.bind(this));
193
+
194
+ return Promise.allSettled(aInitPromises);
195
+ };
196
+
197
+ /**
198
+ * @param {object} oEvent
199
+ * @param {string} sChannel
200
+ * @param {object} oData
201
+ */
202
+ AppLifeCycle.prototype._onGetAppLifeCycle = function (oEvent, sChannel, oData) {
203
+ Log.error("the EventBus channel 'sap.ushell.getAppLifeCycle' is private and was discontinued.");
204
+ };
205
+
206
+ /**
207
+ * Any event one wishes to subscribe to during the AppLifeCycle.init() call should be added here.
208
+ * Events will only be added the first time AppLifeCycle.init() is called.
209
+ */
210
+ AppLifeCycle.prototype._addEvents = function () {
211
+ // Subscribe to events.
212
+ this._aDoables.push(EventHub.on("disableKeepAliveRestoreRouterRetrigger").do((oData) => {
213
+ const sStorageAppId = oData.appId;
214
+
215
+ this._bEnableRouterRetrigger = oData.disable;
216
+
217
+ const oStorageEntry = KeepAliveApps.get(sStorageAppId);
218
+ if (oStorageEntry) {
219
+ oStorageEntry.enableRouterRetrigger = oData.disable;
220
+ }
221
+ }));
222
+ this._aDoables.push(EventHub.on("setApplicationFullWidth").do((oData) => {
223
+ this._setApplicationFullWidth(oData.bValue);
224
+ }));
225
+
226
+ this._aDoables.push(EventHub.on("reloadCurrentApp").do((oData) => {
227
+ this._reloadCurrentApp(oData);
228
+ }));
229
+ };
230
+
231
+ AppLifeCycle.prototype._startPostMessageHandling = function () {
232
+ PostMessageManager.init({
233
+ getCurrentApplication: () => {
234
+ return this.getCurrentApplication()?.container;
235
+ },
236
+ getAllApplications: () => {
237
+ return ApplicationContainerCache.getAll();
238
+ }
239
+ });
240
+ AppRuntimeHandler.register();
241
+ NWBCHandler.register();
242
+ LifecycleHandler.register();
243
+ ServiceHandler.register();
244
+ MessageBrokerHandler.register();
245
+ this._waitForPluginsAndReplayPostMessages();
246
+
247
+ // todo: [FLPCOREANDUX-10024] harmonize with Appruntime
248
+ PostMessagePluginInterface.init(
249
+ true, // bRunsInOuterShell
250
+ (oCommObj) => { // fnAddCommunicationObject
251
+ Object.keys(oCommObj).forEach((sService) => {
252
+ const oServiceDef = oCommObj[sService];
253
+
254
+ if (oServiceDef.oServiceCalls) {
255
+ Object.keys(oServiceDef.oServiceCalls).forEach((sInterface) => {
256
+ const oInterface = oServiceDef.oServiceCalls[sInterface];
257
+ const sServiceRequest = `${sService}.${sInterface}`;
258
+
259
+ if (oInterface.executeServiceCallFn) {
260
+ PostMessageManager.setRequestHandler(
261
+ sServiceRequest,
262
+ async (oMessageBody, oEvent) => {
263
+ const oServiceParams = {
264
+ oMessageData: JSON.parse(oEvent.data),
265
+ oMessage: oEvent
266
+ };
267
+ return ushellUtils.promisify(oInterface.executeServiceCallFn(oServiceParams));
268
+ }
269
+ );
270
+ }
271
+ });
272
+ }
273
+
274
+ if (oServiceDef.oRequestCalls) {
275
+ Object.keys(oServiceDef.oRequestCalls).forEach((sInterface) => {
276
+ const oInterface = oServiceDef.oRequestCalls[sInterface];
277
+ const sServiceRequest = `${sService}.${sInterface}`;
278
+ const oTarget = {};
279
+
280
+ if (deepEqual(oInterface.distributionType, ["all"])) {
281
+ oTarget.ignoreCapabilities = true;
282
+ } else if (oInterface.distributionType) {
283
+ Log.error("Unsupported distribution type", oInterface.distributionType, "sap.ushell.appIntegration.AppLifeCycle");
284
+ }
285
+
286
+ if (oInterface.isActiveOnly) {
287
+ oTarget.activeOnly = true;
288
+ }
289
+
290
+ PostMessageManager.setDistributionPolicy(sServiceRequest, oTarget);
291
+ });
292
+ }
293
+ });
294
+ }
295
+ );
296
+ };
297
+
298
+ AppLifeCycle.prototype._waitForPluginsAndReplayPostMessages = async function () {
299
+ const PluginManager = await Container.getServiceAsync("PluginManager");
300
+ const oPluginDeferred = PluginManager.getPluginLoadingPromise("RendererExtensions");
301
+
302
+ await ushellUtils.promisify(oPluginDeferred);
303
+
304
+ PostMessageManager.replayStoredMessages();
305
+ };
306
+
307
+ /**
308
+ * @param {object} oShellNavigationInternal
309
+ */
310
+ AppLifeCycle.prototype.registerHandleHashChange = function (oShellNavigationInternal) {
311
+ oShellNavigationInternal.hashChanger.attachEvent("hashChanged", (oHashChange) => {
312
+ //FIX for internal incident #1980317281 - In general, hash structure in FLP is splitted into 3 parts:
313
+ //A - application identification & B - Application parameters & C - Internal application area
314
+ // Now, when an IFrame changes its hash, it sends PostMessage up to the FLP. The FLP does 2 things: Change its URL
315
+ // and send a PostMessage back to the IFrame. This fix, initiated in the PostMessageAPI.js, blocks only
316
+ // the message back to the IFrame.
317
+ if (hasher.disableBlueBoxHashChangeTrigger) {
318
+ return;
319
+ }
320
+ if (oHashChange.mParameters && oShellNavigationInternal.hashChanger.isInnerAppNavigation(oHashChange.mParameters.newHash, oHashChange.mParameters.oldHash)) {
321
+ PostMessageManager.sendRequestToAllApplications("sap.ushell.appRuntime.innerAppRouteChange", {
322
+ oHash: oHashChange.mParameters
323
+ }, false);
324
+ }
325
+
326
+ PostMessageManager.sendRequestToAllApplications("sap.ushell.appRuntime.hashChange", {
327
+ sHash: oHashChange.mParameters.fullHash
328
+ }, false);
329
+ });
330
+ };
331
+
332
+ /**
333
+ * @returns {object} Returns the current application.
334
+ */
335
+ AppLifeCycle.prototype.getCurrentApplication = function () {
336
+ return this._oCurrentApplication;
337
+ };
338
+
339
+ /**
340
+ * @param {boolean} bIsFull
341
+ */
342
+ AppLifeCycle.prototype._setApplicationFullWidth = function (bIsFull) {
343
+ const oCurrent = this.getCurrentApplication();
344
+
345
+ //validate that we have a valid applicationContainer
346
+ if (oCurrent.container) {
347
+ oCurrent.container.toggleStyleClass("sapUShellApplicationContainerLimitedWidth", !bIsFull);
348
+ }
349
+ };
350
+
351
+ /**
352
+ * Returns the global ShellUIService instance.
353
+ * @returns {object} The global ShellUIService instance
354
+ */
355
+ AppLifeCycle.prototype.getShellUIService = function () {
356
+ return this._oGlobalShellUIService;
357
+ };
358
+
359
+ /**
360
+ */
361
+ AppLifeCycle.prototype.resetGlobalShellUIService = function () {
362
+ if (this._oGlobalShellUIService) {
363
+ this._oGlobalShellUIService.resetService();
364
+ }
365
+ };
366
+
367
+ /**
368
+ * Creates the ShellUIService instance of the AppLifeCycle in application integration if not already created.
369
+ *
370
+ * @returns {Promise} A promise that resolves when the ShellUIService instance is created
371
+ *
372
+ * @since 1.127.0
373
+ * @private
374
+ */
375
+ AppLifeCycle.prototype._createGlobalShellUIService = async function () {
376
+ this._oGlobalShellUIService = await ShellUIServiceFactory.createInstanceInternal();
377
+ };
378
+
379
+ /**
380
+ * @param {object} oEvent
381
+ */
382
+ AppLifeCycle.prototype.onBeforeNavigate = function (oEvent) {
383
+ const sFromId = oEvent.getParameter("fromId") || "";
384
+ const oFrom = oEvent.getParameter("from");
385
+ const sToId = oEvent.getParameter("toId") || "";
386
+
387
+ if (sToId === sFromId) {
388
+ return; // no actual navigation happening; might be a navigation into the same container
389
+ }
390
+
391
+ if (sFromId && oFrom && oFrom.isA("sap.ushell.appIntegration.ApplicationContainer")) {
392
+ const oApplicationContainer = oFrom;
393
+ const sStorageAppId = oApplicationContainer.getCurrentAppId();
394
+
395
+ const bHasIframe = !!oApplicationContainer.isA("sap.ushell.appIntegration.IframeApplicationContainer"); // todo: [FLPCOREANDUX-10024] is this really required?
396
+ const bIsSupportedType = oApplicationContainer.getStatefulType() > StatefulType.NotSupported;
397
+
398
+ const bCached = !!KeepAliveApps.get(sStorageAppId);
399
+ const bSessionHandlingSupported = bHasIframe && bIsSupportedType;
400
+
401
+ if (bHasIframe && (bCached || bSessionHandlingSupported)) {
402
+ oApplicationContainer.sendRequest("sap.ushell.sessionHandler.beforeApplicationHide", {}, false);
403
+ }
404
+ }
405
+
406
+ };
407
+
408
+ /**
409
+ * @param {object} oEvent
410
+ */
411
+ AppLifeCycle.prototype.onAfterNavigate = async function (oEvent) { //call lifecycle interface "setInitialConfiguration"
412
+ const sFromId = oEvent.getParameter("fromId") || "";
413
+ const oFrom = oEvent.getParameter("from");
414
+ const sToId = oEvent.getParameter("toId") || "";
415
+ const oTo = oEvent.getParameter("to");
416
+
417
+ const aFlpComponentIds = [
418
+ "Shell-appfinder-component",
419
+ "Shell-home-component",
420
+ "pages-component-container",
421
+ "homeApp-component-wrapper-container",
422
+ "homeApp-component-container",
423
+ "workPageRuntime-component-container",
424
+ "runtimeSwitcher-component-container"
425
+ ];
426
+
427
+ const bNavWithinSameContainer = sFromId === sToId;
428
+ const bNavigationToFlpComponent = aFlpComponentIds.some((sFlpComponentId) => sToId.includes(sFlpComponentId));
429
+
430
+ // first cleanup
431
+ if (sFromId && oFrom) {
432
+ // ==== Navigation from app to [any] ====
433
+ if (oFrom.isA("sap.ushell.appIntegration.ApplicationContainer")) {
434
+ const oApplicationContainer = oFrom;
435
+
436
+ if (!bNavWithinSameContainer) {
437
+ await this._handleExitApplication(oApplicationContainer, bNavigationToFlpComponent);
438
+ }
439
+
440
+ // ==== Navigation from renderer managed component to [any] ====
441
+ } else {
442
+ const sFromControlId = sFromId;
443
+ const oFromControl = oFrom;
444
+
445
+ if (bNavWithinSameContainer) {
446
+ return;
447
+ }
448
+
449
+ // handle the case of appFinder
450
+ if (sToId.indexOf("Shell-appfinder-component") > 0) {
451
+ EventBus.getInstance().publish("sap.ushell", "appFinderAfterNavigate");
452
+ }
453
+
454
+ if (this._bDisableHomeAppCache) {
455
+ try {
456
+ this._removeApplicationContainerFromNavContainer(oFromControl);
457
+ oFromControl.destroy();
458
+ } catch (oError) {
459
+ Log.error(`Error when trying to destroy the home component: '${sFromControlId}'`, oError);
460
+ }
461
+ }
462
+ }
463
+ }
464
+
465
+ // second restore state
466
+ if (sToId && oTo) {
467
+ // ==== Navigation from [any] to app ====
468
+ if (oTo.isA("sap.ushell.appIntegration.ApplicationContainer")) {
469
+ const oApplicationContainer = oTo;
470
+ const sStorageAppId = oApplicationContainer.getCurrentAppId();
471
+
472
+ // this code must be at the beginning of the function to allow it to be processed once in
473
+ // a cycle of opening an app
474
+ if (oApplicationContainer.getIframeReusedForApp()) {
475
+ oApplicationContainer.setIframeReusedForApp(false);
476
+ if (oApplicationContainer.isA("sap.ushell.appIntegration.IframeApplicationContainer")) {
477
+ oApplicationContainer.sendRequest("sap.ushell.sessionHandler.afterApplicationShow", {}, false);
478
+ }
479
+ }
480
+
481
+ if (KeepAliveApps.get(sStorageAppId)) {
482
+ await this._restoreApplication(sStorageAppId);
483
+ }
484
+
485
+ // ==== Navigation from [any] to renderer managed component ====
486
+ } else {
487
+ // navigation to home
488
+ if (bNavigationToFlpComponent) {
489
+ await this._destroyKeepAliveApps((oStorageEntry) => oStorageEntry.keepAliveMode === KeepAliveMode.Restricted);
490
+ }
491
+
492
+ // Clear custom About Dialog parameters
493
+ AppInfoParameters.flush();
494
+ }
495
+ }
496
+ };
497
+
498
+ /**
499
+ * @param {string} sStorageAppId
500
+ */
501
+ AppLifeCycle.prototype._storeApplication = async function (sStorageAppId) {
502
+ const oStorageEntry = KeepAliveApps.get(sStorageAppId);
503
+
504
+ if (oStorageEntry) {
505
+ const oApplicationContainer = oStorageEntry.container;
506
+ const bShouldBeKeptAlive = oApplicationContainer.getIsKeepAlive();
507
+ if (!bShouldBeKeptAlive) {
508
+ Log.error("Application should be kept alive but the flag is not set", null, "sap.ushell.appIntegration.AppLifeCycle");
509
+ return;
510
+ }
511
+
512
+ if (oApplicationContainer.isA("sap.ushell.appIntegration.IframeApplicationContainer")) {
513
+ oApplicationContainer.setDataHelpId("");
514
+
515
+ if (oApplicationContainer.getStatefulType() === StatefulType.ContractV2) {
516
+ const bSupportsKeepAliveWithinSameFrame = StatefulContainerV2Handler.isStatefulContainerSupportingKeepAlive(oApplicationContainer);
517
+
518
+ if (bSupportsKeepAliveWithinSameFrame) {
519
+ const sActualAppFromId = oApplicationContainer.getCurrentAppId();
520
+ if (!sActualAppFromId) {
521
+ return; // stateful container is already stored
522
+ }
523
+
524
+ // return the container to the pool
525
+ this._setContainerReadyForReuse(oApplicationContainer);
526
+
527
+ await StatefulContainerV2Handler.storeAppWithinSameFrame(oApplicationContainer, sActualAppFromId);
528
+ }
529
+ }
530
+
531
+ await oApplicationContainer.sendRequest("sap.ushell.appRuntime.keepAliveAppHide", {}, false);
532
+
533
+ } else if (oApplicationContainer.isA("sap.ushell.appIntegration.UI5ApplicationContainer")) {
534
+ await EmbeddedUI5Handler.storeApp(oApplicationContainer, oStorageEntry);
535
+ }
536
+
537
+ // close storage entry
538
+ oStorageEntry.stateStored = true;
539
+
540
+ const oResolvedHashFragment = oApplicationContainer.getCurrentAppTargetResolution();
541
+ this._publishAppClosedEvent(oResolvedHashFragment);
542
+ }
543
+ };
544
+
545
+ /**
546
+ * Should remove their foot print and prepare for possible reuse.
547
+ * @param {string} sStorageAppId
548
+ * @param {object} oApplicationContainer
549
+ * @param {boolean} [bHardDestroy=false]
550
+ * @returns {Promise} Resolves when the app is destroyed.
551
+ */
552
+ AppLifeCycle.prototype._destroyApplication = async function (sStorageAppId, oApplicationContainer, bHardDestroy) {
553
+ if (typeof sStorageAppId !== "string" || !oApplicationContainer) {
554
+ return;
555
+ }
556
+
557
+ const oStorageEntry = KeepAliveApps.get(sStorageAppId);
558
+ const bIsKeptAlive = !!oStorageEntry;
559
+
560
+ if (!oApplicationContainer.getCurrentAppId() && !bHardDestroy && !bIsKeptAlive) {
561
+ /*
562
+ * No active app in the container, only destroy this app if it shall not be reused.
563
+ *
564
+ * When called multiple times for a stored app, the appruntime destroys the current
565
+ * app instead!
566
+ */
567
+ return;
568
+ }
569
+
570
+ const oResolvedHashFragment = oApplicationContainer.getCurrentAppTargetResolution();
571
+
572
+ KeepAliveApps.removeById(sStorageAppId);
573
+ KeepAlive.destroy(oStorageEntry);
574
+
575
+ // ===============================================================================
576
+ // try to reuse the iframe
577
+
578
+ const bIsReusableContainer = oApplicationContainer.getStatefulType() !== StatefulType.NotSupported;
579
+ if (!bHardDestroy && bIsReusableContainer) {
580
+ oApplicationContainer.setDataHelpId("");
581
+
582
+ // First return the container to the pool in case it was keep alive.
583
+ // the "return to pool" step requires the current metadata and has to be done before the actual close
584
+ this._setContainerReadyForReuse(oApplicationContainer);
585
+
586
+ // Second close the app
587
+ if (oApplicationContainer.getStatefulType() === StatefulType.ContractV2) {
588
+ await StatefulContainerV2Handler.destroyApp(oApplicationContainer, sStorageAppId);
589
+
590
+ } else if (oApplicationContainer.getStatefulType() === StatefulType.ContractV1) {
591
+ await StatefulContainerV1Handler.destroyApp(oApplicationContainer, sStorageAppId);
592
+ }
593
+
594
+ this._publishAppClosedEvent(oResolvedHashFragment);
595
+ return;
596
+ }
597
+
598
+ // ===============================================================================
599
+ // the app or iframe cannot be reused (or should not be reused) so we destroy it
600
+
601
+ // try to close the iframe gracefully
602
+ if (oApplicationContainer.getStatefulType() === StatefulType.ContractV2) {
603
+ await StatefulContainerV2Handler.destroyApp(oApplicationContainer, sStorageAppId);
604
+
605
+ } else if (oApplicationContainer.getStatefulType() === StatefulType.ContractV1) {
606
+ await StatefulContainerV1Handler.destroyApp(oApplicationContainer, sStorageAppId);
607
+ }
608
+
609
+ // remove all other related apps from the storage
610
+ KeepAliveApps.removeByContainer(oApplicationContainer, (oStorageEntry) => {
611
+ KeepAlive.destroy(oStorageEntry);
612
+ });
613
+
614
+ /**
615
+ * If the application running in an iframe registered for "before close" event,
616
+ * we first post it a message to prepare for closing (usually, the app will close
617
+ * its session or release locks held on the server), and only when the iframe send a response
618
+ * back that it finished processing the event, we will continue to destroy the app (iframe).
619
+ * If the app in the iframe did not register to the event, we destroy the app immediately exactly
620
+ * as it was done before.
621
+ * Note that even if the response from the iframe is not successful, we still destroy the app
622
+ * because the second app that we navigated to was already created so we can not stop
623
+ * the actual navigation (this is the same behaviour that we had before).
624
+ * This mechanism was added to solve the change made in Chrome to disallow Sync XHR on
625
+ * browser close.
626
+ */
627
+ try {
628
+ const oThenable = oApplicationContainer.sendBeforeAppCloseEvent();
629
+ await ushellUtils.promisify(oThenable);
630
+ } catch (sError) {
631
+ Log.error(
632
+ "FLP got a failed response from the iframe for the 'sap.ushell.services.CrossApplicationNavigation.beforeAppCloseEvent' message sent",
633
+ sError,
634
+ "sap.ushell.appIntegration.AppLifeCycle.js"
635
+ );
636
+ }
637
+
638
+ ApplicationContainerCache.removeByContainer(oApplicationContainer);
639
+ this._removeApplicationContainerFromNavContainer(oApplicationContainer);
640
+
641
+ try {
642
+ oApplicationContainer.destroy();
643
+ } catch (oError) {
644
+ Log.error(
645
+ `Exception when trying to close application with id '${oApplicationContainer.getId()}'. This error must be fixed in order for FLP to operate properly.`,
646
+ oError,
647
+ "sap.ushell.appIntegration.AppLifeCycle"
648
+ );
649
+ }
650
+
651
+ this._publishAppClosedEvent(oResolvedHashFragment);
652
+ };
653
+
654
+ /**
655
+ * @param {string} sStorageAppId
656
+ */
657
+ AppLifeCycle.prototype._restoreApplication = async function (sStorageAppId) {
658
+ const oStorageEntry = KeepAliveApps.get(sStorageAppId);
659
+
660
+ if (oStorageEntry?.stateStored) {
661
+ // 1) Extensions
662
+ BackNavigation.restore(oStorageEntry.service);
663
+
664
+ // 2) Extension API
665
+ ShellUIServiceFactory.restore(oStorageEntry);
666
+
667
+ // 3) Application
668
+ const oApplicationContainer = oStorageEntry.container;
669
+ if (oApplicationContainer.isA("sap.ushell.appIntegration.IframeApplicationContainer")) {
670
+ await oApplicationContainer.sendRequest("sap.ushell.appRuntime.keepAliveAppShow", {}, false);
671
+
672
+ } else if (oApplicationContainer.isA("sap.ushell.appIntegration.UI5ApplicationContainer")) {
673
+ await EmbeddedUI5Handler.restoreAppAfterNavigate(oApplicationContainer, oStorageEntry);
674
+ }
675
+ }
676
+ };
677
+
678
+ /**
679
+ * @param {object} oOldApplicationContainer
680
+ * @param {boolean} bNavigationToFlpComponent
681
+ * @returns {Promise} Resolves when the app is closed.
682
+ */
683
+ AppLifeCycle.prototype._handleExitApplication = async function (oOldApplicationContainer, bNavigationToFlpComponent) {
684
+ if (!oOldApplicationContainer) {
685
+ return;
686
+ }
687
+
688
+ const sOldStorageAppId = oOldApplicationContainer.getCurrentAppId();
689
+ if (!sOldStorageAppId) {
690
+ // no active app in the container
691
+ return;
692
+ }
693
+
694
+ const bNavigationBackToApp = BackNavigation.isBackNavigation() && !bNavigationToFlpComponent;
695
+
696
+ // Back Navigation Case
697
+ if (bNavigationBackToApp) {
698
+ await this._destroyApplication(sOldStorageAppId, oOldApplicationContainer); // todo: [FLPCOREANDUX-10024] new marker
699
+
700
+ // Forward Navigation Case
701
+ // (and back navigation to FLP component)
702
+ } else {
703
+ if (oOldApplicationContainer.getIsKeepAlive()) {
704
+ return this._storeApplication(sOldStorageAppId);
705
+ }
706
+ return this._destroyApplication(sOldStorageAppId, oOldApplicationContainer);
707
+ }
708
+ };
709
+
710
+ /**
711
+ * @param {function(): boolean} fnFilterApps The filter function
712
+ * @param {boolean} [bHardDestroy=false]
713
+ * @returns {Promise} Resolves when all keep alive apps are closed.
714
+ */
715
+ AppLifeCycle.prototype._destroyKeepAliveApps = async function (fnFilterApps, bHardDestroy) {
716
+ try {
717
+ const aFilteredApps = [];
718
+
719
+ KeepAliveApps.forEach((oStorageEntry) => {
720
+ if (fnFilterApps(oStorageEntry)) {
721
+ aFilteredApps.push(oStorageEntry);
722
+ }
723
+ });
724
+ const aClosePromises = aFilteredApps.map((oFilteredApp) => {
725
+ return this._destroyApplication(oFilteredApp.appId, oFilteredApp.container, bHardDestroy);
726
+ });
727
+
728
+ await Promise.allSettled(aClosePromises);
729
+ } catch (e) {
730
+ Log.error("_destroyKeepAliveApps call failed", e);
731
+ }
732
+ };
733
+
734
+ /**
735
+ * @param {string} sStorageAppId
736
+ * @param {object} oApplicationContainer
737
+ * @param {object} oResolvedHashFragment
738
+ * @param {string} oParsedShellHash
739
+ * @param {string} sKeepAliveMode
740
+ * @returns {object} Returns the storage entry.
741
+ */
742
+ AppLifeCycle.prototype._addStorageEntry = function (sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode) {
743
+ const oOldStorageEntry = KeepAliveApps.get(sStorageAppId);
744
+ if (oOldStorageEntry) {
745
+ return oOldStorageEntry;
746
+ }
747
+
748
+ const oNewStorageEntry = {
749
+ service: {},
750
+ shellHash: `#${UrlParsing.constructShellHash(oParsedShellHash)}`,
751
+ appId: sStorageAppId,
752
+ stt: "loading",
753
+ currentState: null, // current state is stored before close see: sap/ushell/state/CurrentState
754
+ controlManager: null, // control manager state is stored before close see: sap/ushell/state/ControlManager
755
+ container: oApplicationContainer,
756
+ meta: undefined, // is set after _openApp in _initializeAppWithMetadata
757
+ app: undefined, // is set in _openApp
758
+ keepAliveMode: sKeepAliveMode,
759
+ appTarget: oResolvedHashFragment,
760
+ ui5ComponentName: oResolvedHashFragment.ui5ComponentName,
761
+ enableRouterRetrigger: this._bEnableRouterRetrigger,
762
+ stateStored: false
763
+ };
764
+
765
+ KeepAliveApps.set(sStorageAppId, oNewStorageEntry);
766
+
767
+ return oNewStorageEntry;
768
+ };
769
+
770
+ /**
771
+ * Stores the state of the current application
772
+ * - back navigation
773
+ * - title, hierarchy, relatedApps
774
+ * - currentState, controlManager
775
+ * @returns {Promise} Resolves when the store is done.
776
+ *
777
+ * @since 1.128.0
778
+ * @private
779
+ */
780
+ AppLifeCycle.prototype.storeAppExtensions = async function () {
781
+ const oCurrentApp = this.getCurrentApplication();
782
+ if (!oCurrentApp) {
783
+ return;
784
+ }
785
+ const sStorageAppId = oCurrentApp.appId;
786
+ const oStorageEntry = KeepAliveApps.get(sStorageAppId);
787
+
788
+ if (!oStorageEntry) {
789
+ // do not store for non-keep-alive apps
790
+ return;
791
+ }
792
+
793
+ // back navigation
794
+ BackNavigation.store(oStorageEntry.service);
795
+ // currentState, controlManager
796
+ KeepAlive.store(oStorageEntry);
797
+ // About Dialog
798
+ AppInfoParameters.store(oStorageEntry);
799
+ };
800
+
801
+ /**
802
+ * @param {string} sStorageAppId
803
+ * @param {object} oResolvedHashFragment
804
+ * @param {object} oParsedShellHash
805
+ * @returns {string} Returns the keep alive mode.
806
+ */
807
+ AppLifeCycle.prototype._calculateKeepAliveMode = function (sStorageAppId, oResolvedHashFragment, oParsedShellHash) {
808
+ const aKeepAliveModes = Object.values(KeepAliveMode);
809
+
810
+ // generic intent currently can never be keep alive
811
+ if (
812
+ sStorageAppId.startsWith("application-Shell-startIntent")
813
+ || sStorageAppId.startsWith("application-Shell-startGUI")
814
+ || sStorageAppId.startsWith("application-Shell-startWDA")
815
+ ) {
816
+ return KeepAliveMode.False;
817
+ }
818
+
819
+ // Global override in query parameters
820
+ let sKeepAlive = new URLSearchParams(window.location.search).get("sap-keep-alive");
821
+ if (aKeepAliveModes.includes(sKeepAlive)) {
822
+ return sKeepAlive;
823
+ }
824
+
825
+ // App override in intent parameters
826
+ sKeepAlive = oParsedShellHash.params?.["sap-keep-alive"];
827
+ if (aKeepAliveModes.includes(sKeepAlive)) {
828
+ return sKeepAlive;
829
+ }
830
+
831
+ // Magic override in resolved hash fragment
832
+ if (oResolvedHashFragment.url) {
833
+ sKeepAlive = UriParameters.fromURL(oResolvedHashFragment.url).get("sap-keep-alive");
834
+ if (aKeepAliveModes.includes(sKeepAlive)) {
835
+ return sKeepAlive;
836
+ }
837
+ }
838
+
839
+ // if the app is a root intent, it should be kept alive (e.g. workzone advanced)
840
+ // can be overridden by the above checks
841
+ const sShellHash = UrlParsing.constructShellHash(oParsedShellHash);
842
+ if (sShellHash && ushellUtils.isRootIntent(sShellHash)) {
843
+ return KeepAliveMode.True;
844
+ }
845
+
846
+ return KeepAliveMode.False;
847
+ };
848
+
849
+ /**
850
+ * @param {object} oResolvedHashFragment
851
+ * @returns {string} Returns the application type.
852
+ */
853
+ AppLifeCycle.prototype._calculateAppType = function (oResolvedHashFragment) {
854
+ if (oResolvedHashFragment.applicationType === "URL" && oResolvedHashFragment.additionalInformation?.startsWith?.("SAPUI5.Component=")) {
855
+ return "SAPUI5";
856
+ }
857
+ return oResolvedHashFragment.applicationType;
858
+ };
859
+
860
+ /**
861
+ * @param {object} oData
862
+ * @returns {Promise} Resolves when the app is reloaded.
863
+ */
864
+ AppLifeCycle.prototype._reloadCurrentApp = async function (oData) {
865
+ const oTargetApplicationContainer = ApplicationContainerCache.getById(oData.sAppContainerId);
866
+ if (oTargetApplicationContainer) {
867
+ await this._destroyApplication(oTargetApplicationContainer.getCurrentAppId(), oTargetApplicationContainer);
868
+ }
869
+
870
+ const ShellNavigationInternal = await Container.getServiceAsync("ShellNavigationInternal");
871
+ try {
872
+ ShellNavigationInternal.hashChanger.treatHashChanged(oData.sCurrentHash);
873
+ } catch (error) {
874
+ Log.error("Error when trying to re-load the current displayed application", error, "sap.ushell.services.AppLifeCycle");
875
+ }
876
+ };
877
+
878
+ /**
879
+ * Opens an application in an application container and sets it as the current application.
880
+ *
881
+ * @param {string} sStorageAppId the id of the application.
882
+ * @param {string} sBaseAppId the base application id.
883
+ * @param {object} oResolvedHashFragment the resolved hash fragment.
884
+ * @param {object} bShouldBeCached Wether it should be cached.
885
+ */
886
+ AppLifeCycle.prototype._createOrReuseApplicationContainer = function (sStorageAppId, sBaseAppId, oResolvedHashFragment, bShouldBeCached) {
887
+ let oApplicationContainer;
888
+
889
+ const oStorageEntry = KeepAliveApps.get(sStorageAppId);
890
+ // app was kept alive
891
+ if (oStorageEntry && oStorageEntry.container) {
892
+ oApplicationContainer = oStorageEntry.container;
893
+ }
894
+
895
+ // try to find a reusable container
896
+ if (!oApplicationContainer) {
897
+ const oStatefulApplicationContainer = ApplicationContainerCache.findFreeContainerByUrl(oResolvedHashFragment.url);
898
+
899
+ const bIsReusableContainer = oStatefulApplicationContainer?.getStatefulType() !== StatefulType.NotSupported;
900
+ if (bIsReusableContainer) {
901
+ oApplicationContainer = oStatefulApplicationContainer;
902
+ }
903
+ }
904
+
905
+ // create a new container if no reusable container was found
906
+ if (!oApplicationContainer) {
907
+ // Add new ShellUIService instance of the interface to the application container
908
+ // this will only be used by iframe applications
909
+ oResolvedHashFragment.shellUIService = this._oGlobalShellUIService.getInterface();
910
+ const sTargetUi5ComponentName = oResolvedHashFragment?.ui5ComponentName;
911
+ const bIsUI5App = !!sTargetUi5ComponentName;
912
+
913
+ const oCommonProperties = {
914
+ dataHelpId: sBaseAppId,
915
+ initialAppId: sStorageAppId,
916
+ currentAppId: sStorageAppId,
917
+ currentAppUrl: oResolvedHashFragment.url,
918
+ shellUIService: oResolvedHashFragment.shellUIService,
919
+ currentAppTargetResolution: oResolvedHashFragment,
920
+ applicationType: oResolvedHashFragment.applicationType,
921
+ openWithPostByAppParam: oResolvedHashFragment.openWithPostByAppParam,
922
+ reservedParameters: oResolvedHashFragment.reservedParameters,
923
+ systemAlias: oResolvedHashFragment.systemAlias,
924
+ targetNavigationMode: oResolvedHashFragment.targetNavigationMode,
925
+ url: oResolvedHashFragment.url,
926
+ frameworkId: oResolvedHashFragment.appCapabilities?.appFrameworkId
927
+ };
928
+
929
+ if (bIsUI5App) {
930
+ oApplicationContainer = new UI5ApplicationContainer({
931
+ ...oCommonProperties,
932
+ ui5ComponentName: oResolvedHashFragment.ui5ComponentName
933
+ });
934
+ } else {
935
+ oApplicationContainer = new IframeApplicationContainer({
936
+ ...oCommonProperties
937
+ });
938
+ }
939
+ this._oNavContainer.addPage(oApplicationContainer);
940
+ } else {
941
+ oApplicationContainer.setIsFetchedFromCache(true);
942
+ oApplicationContainer.setDataHelpId(sBaseAppId);
943
+ }
944
+
945
+ ApplicationContainerCache.setContainerActive(oApplicationContainer);
946
+ oApplicationContainer.setIsKeepAlive(bShouldBeCached);
947
+
948
+ return oApplicationContainer;
949
+ };
950
+
951
+ /**
952
+ * @param {string} sId
953
+ */
954
+ AppLifeCycle.prototype._removeApplicationContainerFromNavContainer = function (oApplicationContainer) {
955
+ this._oNavContainer.removePage(oApplicationContainer.getId(), true);
956
+ };
957
+
958
+ /**
959
+ * In the FLP, only one container at a time can be active. If we have
960
+ * multiple ApplicationContainers, they may still be active in the
961
+ * background, and still be able to send/receive postMessages (e.g.,
962
+ * change the title while the user is on the FLP home).
963
+ *
964
+ * Also, we distinguish between visible containers and active
965
+ * containers. As it is desirable that when a container is being opened
966
+ * it starts setting the FLP title for example. It results in better
967
+ * perceived performance.
968
+ *
969
+ * This method sets only one container as active and de-activates all
970
+ * other application containers around.
971
+ *
972
+ * @param {object} oTargetApplicationContainer
973
+ * The application container to activate. Pass <code>null</code> in
974
+ * case no application container must be activated.
975
+ *
976
+ * @private
977
+ */
978
+ AppLifeCycle.prototype._setApplicationContainerActive = function (oTargetApplicationContainer) {
979
+ ApplicationContainerCache.forEach((oApplicationContainer) => {
980
+ if (oApplicationContainer && oApplicationContainer !== oTargetApplicationContainer) {
981
+ try {
982
+ Log.info(`Deactivating container ${oApplicationContainer.getId()}`);
983
+ oApplicationContainer.setActive(false);
984
+ } catch (e) {
985
+ /* empty */
986
+ }
987
+ }
988
+ });
989
+
990
+ if (oTargetApplicationContainer) {
991
+ Log.info(`Activating container "${oTargetApplicationContainer.getId()}"`);
992
+ oTargetApplicationContainer.setActive(true);
993
+ }
994
+ };
995
+
996
+ /**
997
+ * @param {*} sStorageAppId
998
+ * @param {*} oApplicationContainer
999
+ * @param {*} oResolvedHashFragment
1000
+ * @param {*} oParsedShellHash
1001
+ * @param {*} bWasKeptAlive
1002
+ * @returns
1003
+ */
1004
+ AppLifeCycle.prototype._openApp = async function (sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, bWasKeptAlive) {
1005
+ const bWasFetchedFromCache = oApplicationContainer.getIsFetchedFromCache();
1006
+ if (bWasKeptAlive && bWasFetchedFromCache && StatefulContainerV2Handler.isStatefulContainerSupportingKeepAlive(oApplicationContainer)) {
1007
+ return StatefulContainerV2Handler.restoreAppWithinSameFrame(
1008
+ oApplicationContainer,
1009
+ oResolvedHashFragment.url,
1010
+ sStorageAppId,
1011
+ oResolvedHashFragment
1012
+ );
1013
+ }
1014
+
1015
+ if (oApplicationContainer.getStatefulType() === StatefulType.ContractV2) {
1016
+ if (bWasFetchedFromCache && oApplicationContainer.getCurrentAppId() === sStorageAppId) {
1017
+ // application is already running within container
1018
+ return;
1019
+ }
1020
+ const oResult = await StatefulContainerV2Handler.createApp(
1021
+ oApplicationContainer,
1022
+ oResolvedHashFragment.url,
1023
+ sStorageAppId,
1024
+ oResolvedHashFragment
1025
+ );
1026
+ if (oResult?.deletedKeepAliveId) {
1027
+ /*
1028
+ * The app was already destroyed within the iframe
1029
+ * We _only_ need to destroy the remaining data in the outer shell
1030
+ * Calling destroy on the iframe again will destroy the current app in the iframe
1031
+ */
1032
+ const oStorageEntryToDestroy = KeepAliveApps.get(oResult.deletedKeepAliveId);
1033
+ if (oStorageEntryToDestroy) {
1034
+ KeepAliveApps.removeById(oResult.deletedKeepAliveId);
1035
+ KeepAlive.destroy(oStorageEntryToDestroy);
1036
+ }
1037
+ }
1038
+ return;
1039
+ }
1040
+
1041
+ if (oApplicationContainer.getStatefulType() === StatefulType.ContractV1) {
1042
+ if (bWasFetchedFromCache && oApplicationContainer.getCurrentAppId() === sStorageAppId) {
1043
+ // application is already running within container
1044
+ return;
1045
+ }
1046
+ await StatefulContainerV1Handler.createApp(
1047
+ oApplicationContainer,
1048
+ sStorageAppId,
1049
+ oResolvedHashFragment
1050
+ );
1051
+ return;
1052
+ }
1053
+
1054
+ // for SAPUI5 apps, the application type is still "URL" due to backwards compatibility, but the
1055
+ // NavTargetResolutionInternal service already extracts the component name, so this can directly be used as indicator
1056
+ const sTargetUi5ComponentName = oResolvedHashFragment?.ui5ComponentName;
1057
+ const bIsUI5App = !!sTargetUi5ComponentName;
1058
+
1059
+ if (bIsUI5App && !bWasKeptAlive) { // UI5 Application
1060
+ // happens for direct app start scenario on the abap platform (sap/ushell_abap/bootstrap/evo/boottask)
1061
+ const bComponentLoadedInDirectAppStart = !!oResolvedHashFragment?.componentHandle;
1062
+ if (!bComponentLoadedInDirectAppStart) {
1063
+ AppConfiguration.setApplicationInInitMode();
1064
+
1065
+ await EmbeddedUI5Handler.createApp(oApplicationContainer, oResolvedHashFragment, oParsedShellHash);
1066
+
1067
+ // todo: [FLPCOREANDUX-10024] check whether the issue still persists
1068
+ // the activation of user activity logging must be done after the app component is fully loaded
1069
+ // otherwise the module loading sequence causes race conditions on firefox
1070
+ const bContactSupportEnabled = Config.last("/core/extension/SupportTicket");
1071
+ if (bContactSupportEnabled) {
1072
+ ushellUtils.awaitTimeout(0)
1073
+ .then(() => {
1074
+ return ushellUtils.requireAsync(["sap/ushell/UserActivityLog"]);
1075
+ })
1076
+ .then(([UserActivityLog]) => {
1077
+ UserActivityLog.activate();
1078
+ });
1079
+ }
1080
+ }
1081
+ // todo: [FLPCOREANDUX-10024] rework abap direct app start
1082
+ const oComponentHandle = oResolvedHashFragment.componentHandle;
1083
+ const oComponentInstance = oComponentHandle.getInstance();
1084
+
1085
+ oApplicationContainer.setUi5ComponentId(oResolvedHashFragment.ui5ComponentId);
1086
+ oApplicationContainer.setComponentHandle(oComponentHandle);
1087
+
1088
+ this._oCurrentApplication.app = oComponentInstance;
1089
+
1090
+ // The trampoline application subsequently gets destroyed after it's used to enable the redirection.
1091
+ const sNavigationRedirectHash = await EmbeddedUI5Handler.getNavigationRedirectHash(oApplicationContainer);
1092
+ if (typeof sNavigationRedirectHash === "string") {
1093
+ await this._destroyApplication(sStorageAppId, oApplicationContainer);
1094
+ return sNavigationRedirectHash;
1095
+ }
1096
+
1097
+ if (typeof oComponentInstance.active === "function") {
1098
+ oComponentInstance.active();
1099
+ }
1100
+ }
1101
+ };
1102
+
1103
+ /**
1104
+ * @param {object} oResolvedHashFragment
1105
+ */
1106
+ AppLifeCycle.prototype._announceAppOpening = function (oResolvedHashFragment) {
1107
+ //Screen reader: "Loading Complete"
1108
+ window.setTimeout(() => {
1109
+ const oAccessibilityHelperLoadingComplete = document.getElementById("sapUshellLoadingAccessibilityHelper-loadingComplete");
1110
+
1111
+ if (oAccessibilityHelperLoadingComplete) {
1112
+ oAccessibilityHelperLoadingComplete.setAttribute("aria-live", "polite");
1113
+ oAccessibilityHelperLoadingComplete.innerHTML = ushellResources.i18n.getText("loadingComplete");
1114
+ window.setTimeout(() => {
1115
+ oAccessibilityHelperLoadingComplete.setAttribute("aria-live", "off");
1116
+ oAccessibilityHelperLoadingComplete.innerHTML = "";
1117
+ }, 0);
1118
+ }
1119
+ }, 600);
1120
+ };
1121
+
1122
+ AppLifeCycle.prototype.publishAppOpeningEvent = function (oResolvedHashFragment) {
1123
+ window.setTimeout(() => { // wrapped in setTimeout since "publish" is not async
1124
+ EventBus.getInstance().publish("launchpad", "appOpening", oResolvedHashFragment);
1125
+ }, 0);
1126
+ };
1127
+
1128
+ AppLifeCycle.prototype.publishAppOpenedEvent = function (oResolvedHashFragment) {
1129
+ ushellUtils.setPerformanceMark("FLP.appOpened");
1130
+
1131
+ window.setTimeout(() => { // wrapped in setTimeout since "publish" is not async
1132
+ EventBus.getInstance().publish("sap.ushell", "appOpened", oResolvedHashFragment);
1133
+ }, 0);
1134
+
1135
+ // the former code leaked an *internal* data structure, making it part of a public API
1136
+ // restrict hte public api to the minimal set of precise documented properties which can be retained under
1137
+ // under future evolutions
1138
+ const oPublicEventData = this._publicEventDataFromResolutionResult(oResolvedHashFragment);
1139
+ //publish the event externally
1140
+ // Event is emitted internally (EventHub) _and_ externally (for compatibility reasons)
1141
+ EventHub.emit("AppRendered", oPublicEventData, true);
1142
+ RendererUtils.publishExternalEvent("appOpened", oPublicEventData);
1143
+ };
1144
+
1145
+ AppLifeCycle.prototype._publishAppClosedEvent = function (oResolvedHashFragment) {
1146
+ window.setTimeout(() => { // wrapped in setTimeout since "publish" is not async
1147
+ EventBus.getInstance().publish("sap.ushell", "appClosed", oResolvedHashFragment);
1148
+ }, 0);
1149
+
1150
+ // the former code leaked an *internal* data structure, making it part of a public API
1151
+ // restrict hte public api to the minimal set of precise documented properties which can be retained under
1152
+ // under future evolutions
1153
+ const oPublicEventData = this._publicEventDataFromResolutionResult(oResolvedHashFragment);
1154
+ //publish the event externally
1155
+ RendererUtils.publishExternalEvent("appClosed", oPublicEventData);
1156
+ };
1157
+
1158
+ /**
1159
+ * Creates a new object Expose a minimal set of values to public external stakeholders
1160
+ * only expose what you can guarantee under any evolution of the unified shell on all platforms
1161
+ * @param {object} oApplication an internal result of NavTargetResolutionInternal
1162
+ * @returns {object} an object exposing certain information to external stakeholders
1163
+ */
1164
+ AppLifeCycle.prototype._publicEventDataFromResolutionResult = function (oApplication) {
1165
+ const oPublicEventData = {};
1166
+ if (!oApplication) {
1167
+ return oApplication;
1168
+ }
1169
+ ["applicationType", "ui5ComponentName", "url", "additionalInformation", "text"].forEach((sProp) => {
1170
+ oPublicEventData[sProp] = oApplication[sProp];
1171
+ });
1172
+ Object.freeze(oPublicEventData);
1173
+ return oPublicEventData;
1174
+ };
1175
+
1176
+ /**
1177
+ * @param {*} oResolvedHashFragment
1178
+ * @returns
1179
+ */
1180
+ AppLifeCycle.prototype._isFullWidth = function (oResolvedHashFragment, oMetadata) {
1181
+ let bFullWidth;
1182
+ const sAppType = this._calculateAppType(oResolvedHashFragment);
1183
+ const bDefaultFullWidth = ApplicationType.getDefaultFullWidthSetting(sAppType);
1184
+
1185
+ const bFullWidthCapability = oResolvedHashFragment.appCapabilities?.fullWidth;
1186
+ //Here there's a double check for the fullwidth - once as a type of boolean and one as a string.
1187
+ //This is because we found that developers configured this variable in the manifest also as a string,
1188
+ //so the checks of the oMetadata and the oResolvedHashFragment are to avoid regression with the use of this field.
1189
+ if (bDefaultFullWidth) {
1190
+ if (oResolvedHashFragment.fullWidth === false || oResolvedHashFragment.fullWidth === "false" ||
1191
+ oMetadata.fullWidth === false || oMetadata.fullWidth === "false" || bFullWidthCapability === false) {
1192
+ bFullWidth = false;
1193
+ }
1194
+ } else if (oResolvedHashFragment.fullWidth || oResolvedHashFragment.fullWidth === "true" ||
1195
+ oMetadata.fullWidth || oMetadata.fullWidth === "true") {
1196
+ bFullWidth = true;
1197
+ }
1198
+
1199
+ if (bFullWidth === undefined) {
1200
+ bFullWidth = bDefaultFullWidth;
1201
+ }
1202
+ return bFullWidth;
1203
+ };
1204
+
1205
+ AppLifeCycle.prototype._getBaseAppId = function (sFixedShellHash) {
1206
+ const sStableHash = UrlParsing.getStableIntent(sFixedShellHash);
1207
+ const sBasicHash = UrlParsing.getBasicHash(sStableHash);
1208
+ const sBaseAppId = `application-${sBasicHash}`;
1209
+
1210
+ return sBaseAppId;
1211
+ };
1212
+
1213
+ AppLifeCycle.prototype._getStorageAppId = function (sFixedShellHash, sBaseAppId) {
1214
+ const sStableHash = UrlParsing.getStableIntent(sFixedShellHash);
1215
+
1216
+ if (this._oStorageAppIdMap[sStableHash]) {
1217
+ return this._oStorageAppIdMap[sStableHash];
1218
+ }
1219
+
1220
+ let sStorageAppId;
1221
+ if (!this._oStorageAppIdNextIndex[sBaseAppId]) {
1222
+ this._oStorageAppIdNextIndex[sBaseAppId] = 0;
1223
+ sStorageAppId = sBaseAppId; // first time we use the app w/o counter
1224
+ }
1225
+
1226
+ if (!sStorageAppId) {
1227
+ sStorageAppId = `${sBaseAppId}-${this._oStorageAppIdNextIndex[sBaseAppId]}`;
1228
+ }
1229
+
1230
+ // now store the id for the stable hash
1231
+ this._oStorageAppIdMap[sStableHash] = sStorageAppId;
1232
+ this._oStorageAppIdNextIndex[sBaseAppId]++;
1233
+
1234
+ return sStorageAppId;
1235
+ };
1236
+
1237
+ /**
1238
+ * @returns {Promise<sap.base.util.Deferred>}
1239
+ */
1240
+ AppLifeCycle.prototype._awaitLastApplicationStart = async function () {
1241
+ const oDeferred = new Deferred();
1242
+
1243
+ const _pLastApplicationStart = this._pLastApplicationStart;
1244
+ this._pLastApplicationStart = this._pLastApplicationStart.then(() => oDeferred.promise);
1245
+
1246
+ await _pLastApplicationStart;
1247
+
1248
+ return oDeferred;
1249
+ };
1250
+
1251
+ /**
1252
+ * @param {*} sAppId
1253
+ * @param {*} oParsedShellHash
1254
+ * @param {*} oResolvedHashFragment
1255
+ * @param {*} bNavigationFromHome
1256
+ * @param {*} bNavigationWithInnerAppRoute
1257
+ * @returns
1258
+ */
1259
+ AppLifeCycle.prototype._startApplication = async function (sAppId, oParsedShellHash, oResolvedHashFragment, bNavigationFromHome, bNavigationWithInnerAppRoute) {
1260
+ const sBaseAppId = this._getBaseAppId(oResolvedHashFragment.sFixedShellHash);
1261
+ const sStorageAppId = this._getStorageAppId(oResolvedHashFragment.sFixedShellHash, sBaseAppId);
1262
+
1263
+ await this._cleanupBeforeNewApp(
1264
+ sStorageAppId,
1265
+ oParsedShellHash,
1266
+ oResolvedHashFragment,
1267
+ bNavigationFromHome,
1268
+ bNavigationWithInnerAppRoute
1269
+ );
1270
+
1271
+ this._sendFocusBackToShell();
1272
+ this.publishAppOpeningEvent(oResolvedHashFragment);
1273
+ this._announceAppOpening(oResolvedHashFragment);
1274
+
1275
+ const sKeepAliveMode = this._calculateKeepAliveMode(sStorageAppId, oResolvedHashFragment, oParsedShellHash);
1276
+ const bShouldBeCached = sKeepAliveMode !== KeepAliveMode.False;
1277
+
1278
+ const oApplicationContainer = this._createOrReuseApplicationContainer(sStorageAppId, sBaseAppId, oResolvedHashFragment, bShouldBeCached);
1279
+
1280
+ // check after cleanup, but before creating the storage entry
1281
+ const bWasKeptAlive = !!KeepAliveApps.get(sStorageAppId);
1282
+
1283
+ // Set current application
1284
+ if (bShouldBeCached) {
1285
+ this._oCurrentApplication = this._addStorageEntry(
1286
+ sStorageAppId,
1287
+ oApplicationContainer,
1288
+ oResolvedHashFragment,
1289
+ oParsedShellHash,
1290
+ sKeepAliveMode
1291
+ );
1292
+ } else {
1293
+ // create application that is not persisted and not cached
1294
+ this._oCurrentApplication = {
1295
+ appId: sStorageAppId,
1296
+ stt: "loading",
1297
+ container: oApplicationContainer,
1298
+ meta: undefined, // is set after _openApp in _initializeAppWithMetadata
1299
+ app: undefined // is set in _openApp
1300
+ };
1301
+ }
1302
+
1303
+ ushellUtils.setPerformanceMark("FLP - addAppContainer");
1304
+
1305
+ // restore the app info parameters before activating the application container
1306
+ const oStorageEntry = KeepAliveApps.get(sStorageAppId);
1307
+ if (oStorageEntry) {
1308
+ AppInfoParameters.restore(oStorageEntry);
1309
+ } else {
1310
+ AppInfoParameters.flush();
1311
+ }
1312
+
1313
+ // enable the PostMessageAPI for the application
1314
+ this._setApplicationContainerActive(oApplicationContainer);
1315
+
1316
+ const sNavigationRedirectHash = await this._openApp(
1317
+ sStorageAppId,
1318
+ oApplicationContainer,
1319
+ oResolvedHashFragment,
1320
+ oParsedShellHash,
1321
+ bWasKeptAlive
1322
+ );
1323
+ const oApplicationHandle = new ApplicationHandle(
1324
+ sStorageAppId,
1325
+ oResolvedHashFragment,
1326
+ oApplicationContainer,
1327
+ sNavigationRedirectHash
1328
+ );
1329
+
1330
+ if (typeof sNavigationRedirectHash === "string") {
1331
+ // do not add the deleted application to the view port
1332
+ return oApplicationHandle;
1333
+ }
1334
+
1335
+ // todo: [FLPCOREANDUX-10024] fix this
1336
+ // initialize now because the app is required for additional information
1337
+ this._initializeAppWithMetadata(oApplicationContainer, oResolvedHashFragment);
1338
+
1339
+ /*
1340
+ * finally allow the application container to be rendered
1341
+ * Prevent any earlier rendering because the previous steps
1342
+ * might alter the application container state, which can
1343
+ * and/or should affect the rendering.
1344
+ *
1345
+ * await next tick to prevent a rerendering of the application
1346
+ * container during the rendering phase of the NavContainer
1347
+ */
1348
+ oApplicationContainer.setReadyForRendering(true);
1349
+ ushellUtils.setPerformanceMark("FLP -- centerViewPort");
1350
+
1351
+ // todo: [FLPCOREANDUX-10024] consider moving this after the actual navigation
1352
+ this.publishAppOpenedEvent(oResolvedHashFragment);
1353
+
1354
+ return oApplicationHandle;
1355
+ };
1356
+
1357
+ /**
1358
+ * @param {*} sAppId
1359
+ * @param {*} oParsedShellHash
1360
+ * @param {*} oResolvedHashFragment
1361
+ * @param {*} bNavigationFromHome
1362
+ * @param {*} bNavigationWithInnerAppRoute
1363
+ * @returns
1364
+ */
1365
+ AppLifeCycle.prototype.startApplication = async function (sAppId, oParsedShellHash, oResolvedHashFragment, bNavigationFromHome, bNavigationWithInnerAppRoute) {
1366
+ const oDeferred = await this._awaitLastApplicationStart();
1367
+
1368
+ const oApplicationBefore = this._oCurrentApplication;
1369
+
1370
+ try {
1371
+ const oApplicationHandle = await this._startApplication(
1372
+ sAppId,
1373
+ oParsedShellHash,
1374
+ oResolvedHashFragment,
1375
+ bNavigationFromHome,
1376
+ bNavigationWithInnerAppRoute
1377
+ );
1378
+ oDeferred.resolve();
1379
+
1380
+ return oApplicationHandle;
1381
+ } catch (oError) {
1382
+ // cleanup the application container
1383
+ const bCurrentAppIsSet = !!this._oCurrentApplication?.appId;
1384
+ const bNewAppWasAlreadySet = bCurrentAppIsSet && this._oCurrentApplication.appId !== oApplicationBefore?.appId;
1385
+
1386
+ if (bNewAppWasAlreadySet) {
1387
+ const oApplicationContainer = this._oCurrentApplication.container;
1388
+ if (oApplicationContainer) {
1389
+ await this._destroyApplication(oApplicationContainer.getCurrentAppId(), oApplicationContainer, true); // force destroy
1390
+ }
1391
+
1392
+ // restore the old application or stash it
1393
+ const bApplicationBeforeWasDestroyed = oApplicationBefore?.container?.isDestroyed() ?? true;
1394
+ if (bApplicationBeforeWasDestroyed) {
1395
+ this._oCurrentApplication = {};
1396
+ } else {
1397
+ this._oCurrentApplication = oApplicationBefore;
1398
+ }
1399
+ }
1400
+
1401
+ oDeferred.resolve();
1402
+ throw oError;
1403
+ }
1404
+ };
1405
+
1406
+ /**
1407
+ * New app was created and we now have to switch the state
1408
+ * @param {string} sLaunchpadState
1409
+ * @param {string} sToStorageAppId
1410
+ * @param {string} sAppType
1411
+ * @param {boolean} bExplicitNavMode
1412
+ */
1413
+ AppLifeCycle.prototype.switchViewState = function (sLaunchpadState, sToStorageAppId, sAppType, bExplicitNavMode) {
1414
+ // Store state before creating a new one
1415
+ const oFromStorageEntry = KeepAliveApps.get(this._oCurrentApplication.appId);
1416
+ if (!oFromStorageEntry) {
1417
+ // We have to destroy managed queue BEFORE we're applying the pending changes
1418
+ StateManager.destroyManagedControls();
1419
+ }
1420
+
1421
+ const sShellMode = StateManager.getShellMode();
1422
+ // GUI Applications need a back button to work properly
1423
+ const oShellModeOverrides = {
1424
+ TR: {
1425
+ headerless: ShellMode.Minimal
1426
+ }
1427
+ };
1428
+
1429
+ let sShellModeOverride;
1430
+ if (!bExplicitNavMode) {
1431
+ sShellModeOverride = oShellModeOverrides[sAppType]?.[sShellMode];
1432
+ }
1433
+ StateManager.switchState(sLaunchpadState, sShellModeOverride);
1434
+
1435
+ // Restore state if it already exists
1436
+ const oToStorageEntry = KeepAliveApps.get(sToStorageAppId);
1437
+ if (oToStorageEntry) {
1438
+ KeepAlive.restore(oToStorageEntry);
1439
+ } else {
1440
+ KeepAlive.flush();
1441
+ }
1442
+
1443
+ //Process Dangling UI elements and continue.
1444
+ StateManager.applyStalledChanges();
1445
+ };
1446
+
1447
+ /**
1448
+ * @returns {boolean} Whether the floating container is docked.
1449
+ */
1450
+ AppLifeCycle.prototype._isFloatingContainerDocked = function () {
1451
+ const bDocked = ShellModel.getModel().getProperty("/floatingContainer/state").includes("docked");
1452
+ const bVisible = ShellModel.getModel().getProperty("/floatingContainer/visible");
1453
+ return bDocked && bVisible;
1454
+ };
1455
+
1456
+ /**
1457
+ */
1458
+ AppLifeCycle.prototype._sendFocusBackToShell = function () {
1459
+ if (!Device.system.desktop) {
1460
+ return;
1461
+ }
1462
+
1463
+ sap.ui.require(["sap/ushell/renderer/AccessKeysHandler"], (AccessKeysHandler) => {
1464
+ const sCurrentLaunchpadState = StateManager.getLaunchpadState();
1465
+ const bDefaultShellMode = StateManager.getShellMode() === ShellMode.Default;
1466
+ const oShellAppTitle = Element.getElementById("shellAppTitle");
1467
+
1468
+ if (oShellAppTitle && sCurrentLaunchpadState === LaunchpadState.App && bDefaultShellMode) {
1469
+ const oShellAppTitleDomRef = oShellAppTitle.getFocusDomRef();
1470
+ if (oShellAppTitleDomRef) {
1471
+ AccessKeysHandler.sendFocusBackToShell(oShellAppTitleDomRef.getAttribute("id"));
1472
+ }
1473
+ }
1474
+ });
1475
+ };
1476
+
1477
+ AppLifeCycle.prototype._initializeAppWithMetadata = function (oApplicationContainer, oResolvedHashFragment) {
1478
+ const oMetadata = AppConfiguration.getMetadata(oResolvedHashFragment, oResolvedHashFragment?.sFixedShellHash);
1479
+
1480
+ this._oCurrentApplication.meta = oMetadata;
1481
+
1482
+ // ApplicationContainer is newly created
1483
+ if (!oApplicationContainer.getIsFetchedFromCache()) {
1484
+ oApplicationContainer.toggleStyleClass("sapUshellDefaultBackground", !oMetadata.hideLightBackground);
1485
+
1486
+ const bFullWidth = this._isFullWidth(oResolvedHashFragment, oMetadata);
1487
+ if (!bFullWidth) {
1488
+ oApplicationContainer.addStyleClass("sapUShellApplicationContainerLimitedWidth");
1489
+ }
1490
+
1491
+ // todo: [FLPCOREANDUX-10024] clarify whether this should be reactive instead of one time only
1492
+ // todo: [FLPCOREANDUX-10024] move this block to ShellController
1493
+ if (this._isFloatingContainerDocked() && window.matchMedia("(min-width: 106.4rem)").matches) {
1494
+ oApplicationContainer.addStyleClass("sapUShellDockingContainer");
1495
+ oApplicationContainer.removeStyleClass("sapUShellApplicationContainerLimitedWidth");
1496
+ } else if (this._isFloatingContainerDocked()) {
1497
+ oApplicationContainer.removeStyleClass("sapUShellApplicationContainerLimitedWidth");
1498
+ }
1499
+ }
1500
+
1501
+ let sIcon = "sap-icon://folder";
1502
+ if (oMetadata && oMetadata.icon) {
1503
+ sIcon = oMetadata.icon;
1504
+ }
1505
+ StateManager.updateCurrentState("application.icon", Operation.Set, sIcon);
1506
+ };
1507
+
1508
+ /**
1509
+ * - prevent duplicated ids in the NavContainer.
1510
+ * - prevent reuse of stateful containers for different servers.
1511
+ * - destroy the keep alive app for certain navigation cases.
1512
+ * - destroy the app if the iframe is invalid/unresponsive.
1513
+ * - exit the current application if it is a stateful container.
1514
+ *
1515
+ * @param {string} sStorageAppId
1516
+ * @param {string} oParsedShellHash
1517
+ * @param {object} oResolvedHashFragment
1518
+ * @param {boolean} bNavigationFromHome
1519
+ * @param {boolean} bNavigationWithInnerAppRoute
1520
+ */
1521
+ AppLifeCycle.prototype._cleanupBeforeNewApp = async function (sStorageAppId, oParsedShellHash, oResolvedHashFragment, bNavigationFromHome, bNavigationWithInnerAppRoute) {
1522
+ // todo: [FLPCOREANDUX-10024] add staged logging for startApplication including the cleanup similar to CSTR
1523
+ // ====== Exit current iframe app ======
1524
+ /*
1525
+ * for stateful containers, we need to exit/close the current application BEFORE any
1526
+ * navigation in the NavContainer
1527
+ */
1528
+ const oCurrentApplicationContainer = this.getCurrentApplication()?.container;
1529
+ const bIsReusableContainer = oCurrentApplicationContainer && oCurrentApplicationContainer.getStatefulType() !== StatefulType.NotSupported;
1530
+ if (bIsReusableContainer) {
1531
+ await this._handleExitApplication(oCurrentApplicationContainer, false);
1532
+ }
1533
+
1534
+ const oStorageEntry = KeepAliveApps.get(sStorageAppId);
1535
+ const bTargetAppWasKeptAlive = !!oStorageEntry;
1536
+ // the appId on the storage entry and the appId on the application container might be different.
1537
+ const oStoredApplicationContainer = oStorageEntry?.container;
1538
+
1539
+ // For SAPUI5 apps, the application type is still "URL" due to backwards compatibility, but the
1540
+ // NavTargetResolutionInternal service already extracts the component name, so this can directly be used as indicator
1541
+ const bIsUI5AppWithoutIframe = !!oResolvedHashFragment?.ui5ComponentName;
1542
+
1543
+ // ====== Handle special navigation scenarios for keep alive apps ======
1544
+ if (bTargetAppWasKeptAlive) {
1545
+ const sNewShellHash = `#${UrlParsing.constructShellHash(oParsedShellHash)}`;
1546
+ const oComparison = UrlParsing.compareHashes(sNewShellHash, oStorageEntry.shellHash);
1547
+ const bSameTarget = oComparison.sameIntent && oComparison.sameParameters;
1548
+
1549
+ // todo: FLPCOREANDUX-10024 this case should be obsolete as apps do not share the same storage id
1550
+ // Case: different app
1551
+ if (!bSameTarget) {
1552
+ Log.warning(`The keepAlive app '${sStorageAppId}' has to be destroyed because of id clashes.`);
1553
+ await this._destroyApplication(sStorageAppId, oStoredApplicationContainer);
1554
+
1555
+ // Case: Navigating from homepage to a keepAlive application via deep link (bookmark).
1556
+ // In this case, although keepAlive is active we need to destroy the application and re-open it.
1557
+ } else if (bNavigationFromHome && bNavigationWithInnerAppRoute) {
1558
+ Log.warning(`The keepAlive app '${sStorageAppId}' has to be destroyed because of a bookmark start.`);
1559
+ await this._destroyApplication(sStorageAppId, oStoredApplicationContainer);
1560
+ }
1561
+
1562
+ // => we are navigating to the right keep alive app, so we keep it alive
1563
+ }
1564
+
1565
+ // ====== Ensure that component name and id clashes are prevented ======
1566
+ if (bIsUI5AppWithoutIframe && !bTargetAppWasKeptAlive) {
1567
+ const sBasicHash = UrlParsing.getBasicHash(oResolvedHashFragment.sFixedShellHash);
1568
+ const sTargetUi5ComponentId = `application-${sBasicHash}-component`;
1569
+
1570
+ if (oCurrentApplicationContainer && oCurrentApplicationContainer.isA("sap.ushell.appIntegration.UI5ApplicationContainer")) {
1571
+ if (oCurrentApplicationContainer.getUi5ComponentName() === oResolvedHashFragment.ui5ComponentName) {
1572
+ Log.warning(`The app '${oCurrentApplicationContainer.getCurrentAppId()}' has to be destroyed because of component name clashes.`);
1573
+ await this._destroyApplication(oCurrentApplicationContainer.getCurrentAppId(), oCurrentApplicationContainer, true); // force destroy
1574
+ } else if (oCurrentApplicationContainer.getUi5ComponentId() === sTargetUi5ComponentId) {
1575
+ Log.warning(`The app '${oCurrentApplicationContainer.getCurrentAppId()}' has to be destroyed because of component id clashes.`);
1576
+ await this._destroyApplication(oCurrentApplicationContainer.getCurrentAppId(), oCurrentApplicationContainer, true); // force destroy
1577
+ }
1578
+ }
1579
+
1580
+ // close all keep alive apps with the same component name (except the current one)
1581
+ // otherwise we have clashes on the component name
1582
+ await this._destroyKeepAliveApps((oStorageEntry) => {
1583
+ if (oStorageEntry.appId === sStorageAppId) {
1584
+ return false;
1585
+ }
1586
+
1587
+ if (oStorageEntry.ui5ComponentName === oResolvedHashFragment.ui5ComponentName) {
1588
+ Log.warning(`The app '${oStorageEntry.appId}' has to be destroyed because of component name clashes.`);
1589
+ return true;
1590
+ }
1591
+
1592
+ if (oStorageEntry.appTarget?.ui5ComponentId === sTargetUi5ComponentId) {
1593
+ Log.warning(`The app '${oStorageEntry.appId}' has to be destroyed because of component id clashes.`);
1594
+ return true;
1595
+ }
1596
+
1597
+ return false;
1598
+ }, true); // force destroy
1599
+ }
1600
+
1601
+ // ====== Handle invalid iframes ======
1602
+ // get the potential target stateful container and check if it's valid. if not, destroy it
1603
+ // before we try to create the new application within the same stateful container
1604
+ const oPotentialApplicationContainer = ApplicationContainerCache.findFreeContainerByUrl(oResolvedHashFragment.url);
1605
+ if (oPotentialApplicationContainer && oPotentialApplicationContainer.getStatefulType() === StatefulType.ContractV2) {
1606
+ let bIframeInvalid = false;
1607
+ let sReason;
1608
+ if (oPotentialApplicationContainer.getIsInvalidIframe()) {
1609
+ bIframeInvalid = true;
1610
+ sReason = "iframe is in invalid state";
1611
+
1612
+ } else if (StatefulContainerV2Handler.isIframeIsValidSupported(oPotentialApplicationContainer)) {
1613
+ const iLastValidTimeDelta = new Date().getTime() - oPotentialApplicationContainer.getIsIframeValidTime().time;
1614
+ bIframeInvalid = iLastValidTimeDelta >= iValidIframeTimeout;
1615
+ sReason = `iframe did not ping in the last '${iLastValidTimeDelta}' ms`;
1616
+ }
1617
+
1618
+ if (bIframeInvalid) {
1619
+ Log.warning(
1620
+ `Destroying stateful container iframe due to unresponsiveness (${oPotentialApplicationContainer.getId()})`,
1621
+ `reason: ${sReason}`,
1622
+ "sap.ushell.appIntegration.AppLifeCycle"
1623
+ );
1624
+
1625
+ // not able to exit gracefully, destroy the container directly forcefully
1626
+ return this._destroyApplication(sStorageAppId, oPotentialApplicationContainer, true); // force destroy
1627
+ }
1628
+ }
1629
+ };
1630
+ /**
1631
+ * Only for testing
1632
+ * @param {sap.ui.core.Control} oNewNavContainer
1633
+ *
1634
+ * @private
1635
+ */
1636
+ AppLifeCycle.prototype.setNavContainer = function (oNewNavContainer) {
1637
+ this._oNavContainer = oNewNavContainer;
1638
+ };
1639
+
1640
+ AppLifeCycle.prototype._setContainerReadyForReuse = function (oApplicationContainer) {
1641
+ if (!oApplicationContainer) {
1642
+ return;
1643
+ }
1644
+
1645
+ ApplicationContainerCache.setContainerReadyForReuse(oApplicationContainer, oApplicationContainer.getCurrentAppUrl());
1646
+
1647
+ oApplicationContainer.setIsKeepAlive(false);
1648
+ oApplicationContainer.setCurrentAppUrl("");
1649
+ oApplicationContainer.setIsFetchedFromCache(false);
1650
+ };
1651
+
1652
+ /**
1653
+ * Only for testing
1654
+ */
1655
+ AppLifeCycle.prototype.reset = function () {
1656
+ this._aDoables.forEach((oDoable) => {
1657
+ oDoable.off();
1658
+ });
1659
+ this._aDoables = [];
1660
+
1661
+ KeepAliveApps._clean();
1662
+ ApplicationContainerCache.destroyAllContainers();
1663
+ PostMessageManager.reset();
1664
+
1665
+ this._oStorageAppIdMap = {};
1666
+ this._oStorageAppIdNextIndex = {};
1667
+ this._bDisableHomeAppCache = false;
1668
+ this._bEnableRouterRetrigger = true;
1669
+ this._oCurrentApplication = {};
1670
+ this._oNavContainer = null;
1671
+ this._pLastApplicationStart = Promise.resolve();
1672
+ this._oStorageAppIdMap = {};
1673
+ this._oStorageAppIdNextIndex = {};
1674
+ };
1675
+
1676
+ return new AppLifeCycle();
1677
+ });