@sapui5/sap.cux.home 1.142.0 → 1.142.1

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 (294) hide show
  1. package/package.json +1 -1
  2. package/src/sap/cux/home/.library +4 -1
  3. package/src/sap/cux/home/AdvancedSettingsPanel.d.ts +3 -2
  4. package/src/sap/cux/home/AdvancedSettingsPanel.d.ts.map +1 -1
  5. package/src/sap/cux/home/AdvancedSettingsPanel.js +6 -5
  6. package/src/sap/cux/home/AdvancedSettingsPanel.js.map +1 -1
  7. package/src/sap/cux/home/AdvancedSettingsPanel.ts +6 -5
  8. package/src/sap/cux/home/AppsAdditionPanel.d.ts +47 -34
  9. package/src/sap/cux/home/AppsAdditionPanel.d.ts.map +1 -1
  10. package/src/sap/cux/home/AppsAdditionPanel.js +333 -237
  11. package/src/sap/cux/home/AppsAdditionPanel.js.map +1 -1
  12. package/src/sap/cux/home/AppsAdditionPanel.ts +344 -230
  13. package/src/sap/cux/home/AppsContainer.d.ts.map +1 -1
  14. package/src/sap/cux/home/AppsContainer.js +3 -2
  15. package/src/sap/cux/home/AppsContainer.js.map +1 -1
  16. package/src/sap/cux/home/AppsContainer.ts +3 -2
  17. package/src/sap/cux/home/BaseAppPanel.d.ts.map +1 -1
  18. package/src/sap/cux/home/BaseAppPanel.js +6 -1
  19. package/src/sap/cux/home/BaseAppPanel.js.map +1 -1
  20. package/src/sap/cux/home/BaseAppPanel.ts +6 -1
  21. package/src/sap/cux/home/BaseContainer.d.ts +1 -1
  22. package/src/sap/cux/home/BaseContainer.d.ts.map +1 -1
  23. package/src/sap/cux/home/BaseContainer.js +10 -2
  24. package/src/sap/cux/home/BaseContainer.js.map +1 -1
  25. package/src/sap/cux/home/BaseContainer.ts +7 -3
  26. package/src/sap/cux/home/BaseContainerRenderer.d.ts.map +1 -1
  27. package/src/sap/cux/home/BaseContainerRenderer.js +6 -0
  28. package/src/sap/cux/home/BaseContainerRenderer.js.map +1 -1
  29. package/src/sap/cux/home/BaseContainerRenderer.ts +6 -0
  30. package/src/sap/cux/home/BaseNewsPanel.js.map +1 -1
  31. package/src/sap/cux/home/BaseNewsPanel.ts +2 -2
  32. package/src/sap/cux/home/CardsContainer.d.ts +108 -0
  33. package/src/sap/cux/home/CardsContainer.d.ts.map +1 -0
  34. package/src/sap/cux/home/CardsContainer.js +207 -0
  35. package/src/sap/cux/home/CardsContainer.js.map +1 -0
  36. package/src/sap/cux/home/CardsContainer.ts +202 -0
  37. package/src/sap/cux/home/CardsPanel.d.ts +43 -62
  38. package/src/sap/cux/home/CardsPanel.d.ts.map +1 -1
  39. package/src/sap/cux/home/CardsPanel.js +345 -285
  40. package/src/sap/cux/home/CardsPanel.js.map +1 -1
  41. package/src/sap/cux/home/CardsPanel.ts +211 -200
  42. package/src/sap/cux/home/ContentAdditionDialog.d.ts +2 -0
  43. package/src/sap/cux/home/ContentAdditionDialog.d.ts.map +1 -1
  44. package/src/sap/cux/home/ContentAdditionDialog.js +12 -6
  45. package/src/sap/cux/home/ContentAdditionDialog.js.map +1 -1
  46. package/src/sap/cux/home/ContentAdditionDialog.ts +13 -5
  47. package/src/sap/cux/home/ErrorPanel.d.ts +0 -5
  48. package/src/sap/cux/home/ErrorPanel.d.ts.map +1 -1
  49. package/src/sap/cux/home/ErrorPanel.gen.d.ts +31 -0
  50. package/src/sap/cux/home/ErrorPanel.js +11 -16
  51. package/src/sap/cux/home/ErrorPanel.js.map +1 -1
  52. package/src/sap/cux/home/ErrorPanel.ts +7 -19
  53. package/src/sap/cux/home/FavAppPanel.d.ts +1 -2
  54. package/src/sap/cux/home/FavAppPanel.d.ts.map +1 -1
  55. package/src/sap/cux/home/FavAppPanel.js +296 -301
  56. package/src/sap/cux/home/FavAppPanel.js.map +1 -1
  57. package/src/sap/cux/home/FavAppPanel.ts +14 -10
  58. package/src/sap/cux/home/InsightsAdditionPanel.d.ts +11 -4
  59. package/src/sap/cux/home/InsightsAdditionPanel.d.ts.map +1 -1
  60. package/src/sap/cux/home/InsightsAdditionPanel.js +20 -8
  61. package/src/sap/cux/home/InsightsAdditionPanel.js.map +1 -1
  62. package/src/sap/cux/home/InsightsAdditionPanel.ts +20 -7
  63. package/src/sap/cux/home/InsightsCardsSettingsPanel.d.ts +8 -0
  64. package/src/sap/cux/home/InsightsCardsSettingsPanel.d.ts.map +1 -1
  65. package/src/sap/cux/home/InsightsCardsSettingsPanel.js +15 -0
  66. package/src/sap/cux/home/InsightsCardsSettingsPanel.js.map +1 -1
  67. package/src/sap/cux/home/InsightsCardsSettingsPanel.ts +11 -0
  68. package/src/sap/cux/home/InsightsTilesSettingsPanel.js +1 -1
  69. package/src/sap/cux/home/InsightsTilesSettingsPanel.js.map +1 -1
  70. package/src/sap/cux/home/InsightsTilesSettingsPanel.ts +1 -1
  71. package/src/sap/cux/home/KeyUserLayoutSettingsPanel.d.ts +3 -0
  72. package/src/sap/cux/home/KeyUserLayoutSettingsPanel.d.ts.map +1 -1
  73. package/src/sap/cux/home/KeyUserLayoutSettingsPanel.js +252 -39
  74. package/src/sap/cux/home/KeyUserLayoutSettingsPanel.js.map +1 -1
  75. package/src/sap/cux/home/KeyUserLayoutSettingsPanel.ts +287 -57
  76. package/src/sap/cux/home/KeyUserNewsPagesSettingsPanel.d.ts.map +1 -1
  77. package/src/sap/cux/home/KeyUserNewsPagesSettingsPanel.js +11 -10
  78. package/src/sap/cux/home/KeyUserNewsPagesSettingsPanel.js.map +1 -1
  79. package/src/sap/cux/home/KeyUserNewsPagesSettingsPanel.ts +12 -10
  80. package/src/sap/cux/home/KeyUserNewsSettingsPanel.js +2 -2
  81. package/src/sap/cux/home/KeyUserNewsSettingsPanel.js.map +1 -1
  82. package/src/sap/cux/home/KeyUserNewsSettingsPanel.ts +7 -7
  83. package/src/sap/cux/home/KeyUserPagesSettingsPanel.js.map +1 -1
  84. package/src/sap/cux/home/KeyUserPagesSettingsPanel.ts +2 -2
  85. package/src/sap/cux/home/Layout.d.ts +3 -1
  86. package/src/sap/cux/home/Layout.d.ts.map +1 -1
  87. package/src/sap/cux/home/Layout.js +49 -8
  88. package/src/sap/cux/home/Layout.js.map +1 -1
  89. package/src/sap/cux/home/Layout.ts +59 -8
  90. package/src/sap/cux/home/LayoutSettingsPanel.d.ts +10 -0
  91. package/src/sap/cux/home/LayoutSettingsPanel.d.ts.map +1 -1
  92. package/src/sap/cux/home/LayoutSettingsPanel.js +341 -56
  93. package/src/sap/cux/home/LayoutSettingsPanel.js.map +1 -1
  94. package/src/sap/cux/home/LayoutSettingsPanel.ts +379 -63
  95. package/src/sap/cux/home/{NewsAndPagesContainer.d.ts → NewsContainer.d.ts} +13 -14
  96. package/src/sap/cux/home/NewsContainer.d.ts.map +1 -0
  97. package/src/sap/cux/home/{NewsAndPagesContainer.gen.d.ts → NewsContainer.gen.d.ts} +3 -3
  98. package/src/sap/cux/home/{NewsAndPagesContainer.js → NewsContainer.js} +26 -113
  99. package/src/sap/cux/home/NewsContainer.js.map +1 -0
  100. package/src/sap/cux/home/{NewsAndPagesContainer.ts → NewsContainer.ts} +29 -118
  101. package/src/sap/cux/home/NewsGroup.js.map +1 -1
  102. package/src/sap/cux/home/NewsGroup.ts +1 -1
  103. package/src/sap/cux/home/NewsPanel.d.ts.map +1 -1
  104. package/src/sap/cux/home/NewsPanel.js +12 -14
  105. package/src/sap/cux/home/NewsPanel.js.map +1 -1
  106. package/src/sap/cux/home/NewsPanel.ts +13 -16
  107. package/src/sap/cux/home/NewsSettingsPanel.js +4 -4
  108. package/src/sap/cux/home/NewsSettingsPanel.js.map +1 -1
  109. package/src/sap/cux/home/NewsSettingsPanel.ts +5 -5
  110. package/src/sap/cux/home/PagePanel.d.ts +1 -1
  111. package/src/sap/cux/home/PagePanel.d.ts.map +1 -1
  112. package/src/sap/cux/home/PagePanel.js +18 -10
  113. package/src/sap/cux/home/PagePanel.js.map +1 -1
  114. package/src/sap/cux/home/PagePanel.ts +25 -15
  115. package/src/sap/cux/home/PagesContainer.d.ts +72 -0
  116. package/src/sap/cux/home/PagesContainer.d.ts.map +1 -0
  117. package/src/sap/cux/home/PagesContainer.gen.d.ts +78 -0
  118. package/src/sap/cux/home/PagesContainer.js +333 -0
  119. package/src/sap/cux/home/PagesContainer.js.map +1 -0
  120. package/src/sap/cux/home/PagesContainer.ts +179 -0
  121. package/src/sap/cux/home/SpaceInsightsPanel.d.ts +8 -60
  122. package/src/sap/cux/home/SpaceInsightsPanel.d.ts.map +1 -1
  123. package/src/sap/cux/home/SpaceInsightsPanel.js +66 -132
  124. package/src/sap/cux/home/SpaceInsightsPanel.js.map +1 -1
  125. package/src/sap/cux/home/SpaceInsightsPanel.ts +69 -151
  126. package/src/sap/cux/home/TaskPanel.d.ts.map +1 -1
  127. package/src/sap/cux/home/TaskPanel.js +16 -1
  128. package/src/sap/cux/home/TaskPanel.js.map +1 -1
  129. package/src/sap/cux/home/TaskPanel.ts +15 -1
  130. package/src/sap/cux/home/TilesContainer.d.ts +111 -0
  131. package/src/sap/cux/home/TilesContainer.d.ts.map +1 -0
  132. package/src/sap/cux/home/TilesContainer.js +218 -0
  133. package/src/sap/cux/home/TilesContainer.js.map +1 -0
  134. package/src/sap/cux/home/TilesContainer.ts +216 -0
  135. package/src/sap/cux/home/TilesPanel.d.ts +22 -52
  136. package/src/sap/cux/home/TilesPanel.d.ts.map +1 -1
  137. package/src/sap/cux/home/TilesPanel.js +184 -165
  138. package/src/sap/cux/home/TilesPanel.js.map +1 -1
  139. package/src/sap/cux/home/TilesPanel.ts +160 -154
  140. package/src/sap/cux/home/ToDoPanel.d.ts +1 -0
  141. package/src/sap/cux/home/ToDoPanel.d.ts.map +1 -1
  142. package/src/sap/cux/home/ToDoPanel.js +38 -63
  143. package/src/sap/cux/home/ToDoPanel.js.map +1 -1
  144. package/src/sap/cux/home/ToDoPanel.ts +32 -31
  145. package/src/sap/cux/home/changeHandler/NewsFeedVisibilityChange.d.ts +2 -2
  146. package/src/sap/cux/home/changeHandler/NewsFeedVisibilityChange.d.ts.map +1 -1
  147. package/src/sap/cux/home/changeHandler/NewsFeedVisibilityChange.js +1 -1
  148. package/src/sap/cux/home/changeHandler/NewsFeedVisibilityChange.js.map +1 -1
  149. package/src/sap/cux/home/changeHandler/NewsFeedVisibilityChange.ts +4 -4
  150. package/src/sap/cux/home/changeHandler/SetNewsFeedUrl.d.ts +2 -2
  151. package/src/sap/cux/home/changeHandler/SetNewsFeedUrl.d.ts.map +1 -1
  152. package/src/sap/cux/home/changeHandler/SetNewsFeedUrl.js +1 -1
  153. package/src/sap/cux/home/changeHandler/SetNewsFeedUrl.js.map +1 -1
  154. package/src/sap/cux/home/changeHandler/SetNewsFeedUrl.ts +4 -4
  155. package/src/sap/cux/home/changeHandler/SpacePageColorHandler.d.ts +2 -2
  156. package/src/sap/cux/home/changeHandler/SpacePageColorHandler.d.ts.map +1 -1
  157. package/src/sap/cux/home/changeHandler/SpacePageColorHandler.js +1 -1
  158. package/src/sap/cux/home/changeHandler/SpacePageColorHandler.js.map +1 -1
  159. package/src/sap/cux/home/changeHandler/SpacePageColorHandler.ts +3 -3
  160. package/src/sap/cux/home/changeHandler/SpacePageIconHandler.d.ts +2 -2
  161. package/src/sap/cux/home/changeHandler/SpacePageIconHandler.d.ts.map +1 -1
  162. package/src/sap/cux/home/changeHandler/SpacePageIconHandler.js +4 -4
  163. package/src/sap/cux/home/changeHandler/SpacePageIconHandler.js.map +1 -1
  164. package/src/sap/cux/home/changeHandler/SpacePageIconHandler.ts +5 -5
  165. package/src/sap/cux/home/flexibility/BaseContainer.flexibility.d.ts.map +1 -1
  166. package/src/sap/cux/home/flexibility/BaseContainer.flexibility.js +30 -3
  167. package/src/sap/cux/home/flexibility/BaseContainer.flexibility.js.map +1 -1
  168. package/src/sap/cux/home/flexibility/BaseContainer.flexibility.ts +23 -1
  169. package/src/sap/cux/home/flexibility/Layout.flexibility.d.ts +29 -19
  170. package/src/sap/cux/home/flexibility/Layout.flexibility.d.ts.map +1 -1
  171. package/src/sap/cux/home/flexibility/Layout.flexibility.js +78 -2
  172. package/src/sap/cux/home/flexibility/Layout.flexibility.js.map +1 -1
  173. package/src/sap/cux/home/flexibility/Layout.flexibility.ts +81 -1
  174. package/src/sap/cux/home/i18n/messagebundle.properties +26 -12
  175. package/src/sap/cux/home/i18n/messagebundle_ar.properties +18 -2
  176. package/src/sap/cux/home/i18n/messagebundle_bg.properties +18 -2
  177. package/src/sap/cux/home/i18n/messagebundle_ca.properties +18 -2
  178. package/src/sap/cux/home/i18n/messagebundle_cnr.properties +18 -2
  179. package/src/sap/cux/home/i18n/messagebundle_cs.properties +18 -2
  180. package/src/sap/cux/home/i18n/messagebundle_cy.properties +18 -2
  181. package/src/sap/cux/home/i18n/messagebundle_da.properties +18 -2
  182. package/src/sap/cux/home/i18n/messagebundle_de.properties +18 -2
  183. package/src/sap/cux/home/i18n/messagebundle_el.properties +18 -2
  184. package/src/sap/cux/home/i18n/messagebundle_en.properties +19 -3
  185. package/src/sap/cux/home/i18n/messagebundle_en_GB.properties +18 -2
  186. package/src/sap/cux/home/i18n/messagebundle_en_US_sappsd.properties +21 -5
  187. package/src/sap/cux/home/i18n/messagebundle_en_US_saprigi.properties +21 -5
  188. package/src/sap/cux/home/i18n/messagebundle_en_US_saptrc.properties +18 -2
  189. package/src/sap/cux/home/i18n/messagebundle_es.properties +19 -2
  190. package/src/sap/cux/home/i18n/messagebundle_es_MX.properties +18 -2
  191. package/src/sap/cux/home/i18n/messagebundle_et.properties +18 -2
  192. package/src/sap/cux/home/i18n/messagebundle_fi.properties +18 -2
  193. package/src/sap/cux/home/i18n/messagebundle_fr.properties +18 -2
  194. package/src/sap/cux/home/i18n/messagebundle_fr_CA.properties +18 -2
  195. package/src/sap/cux/home/i18n/messagebundle_hi.properties +18 -2
  196. package/src/sap/cux/home/i18n/messagebundle_hr.properties +18 -2
  197. package/src/sap/cux/home/i18n/messagebundle_hu.properties +18 -2
  198. package/src/sap/cux/home/i18n/messagebundle_id.properties +18 -2
  199. package/src/sap/cux/home/i18n/messagebundle_it.properties +23 -7
  200. package/src/sap/cux/home/i18n/messagebundle_iw.properties +18 -2
  201. package/src/sap/cux/home/i18n/messagebundle_ja.properties +18 -2
  202. package/src/sap/cux/home/i18n/messagebundle_kk.properties +18 -2
  203. package/src/sap/cux/home/i18n/messagebundle_ko.properties +18 -2
  204. package/src/sap/cux/home/i18n/messagebundle_lt.properties +18 -2
  205. package/src/sap/cux/home/i18n/messagebundle_lv.properties +18 -2
  206. package/src/sap/cux/home/i18n/messagebundle_mk.properties +18 -2
  207. package/src/sap/cux/home/i18n/messagebundle_ms.properties +18 -2
  208. package/src/sap/cux/home/i18n/messagebundle_nl.properties +18 -2
  209. package/src/sap/cux/home/i18n/messagebundle_no.properties +18 -2
  210. package/src/sap/cux/home/i18n/messagebundle_pl.properties +18 -2
  211. package/src/sap/cux/home/i18n/messagebundle_pt.properties +18 -2
  212. package/src/sap/cux/home/i18n/messagebundle_pt_PT.properties +18 -2
  213. package/src/sap/cux/home/i18n/messagebundle_ro.properties +18 -2
  214. package/src/sap/cux/home/i18n/messagebundle_ru.properties +18 -2
  215. package/src/sap/cux/home/i18n/messagebundle_sh.properties +18 -2
  216. package/src/sap/cux/home/i18n/messagebundle_sk.properties +18 -2
  217. package/src/sap/cux/home/i18n/messagebundle_sl.properties +18 -2
  218. package/src/sap/cux/home/i18n/messagebundle_sr.properties +18 -2
  219. package/src/sap/cux/home/i18n/messagebundle_sv.properties +18 -2
  220. package/src/sap/cux/home/i18n/messagebundle_th.properties +18 -2
  221. package/src/sap/cux/home/i18n/messagebundle_tr.properties +18 -2
  222. package/src/sap/cux/home/i18n/messagebundle_uk.properties +20 -4
  223. package/src/sap/cux/home/i18n/messagebundle_vi.properties +18 -2
  224. package/src/sap/cux/home/i18n/messagebundle_zh_CN.properties +18 -2
  225. package/src/sap/cux/home/i18n/messagebundle_zh_TW.properties +18 -2
  226. package/src/sap/cux/home/interface/CardsInterface.d.ts +6 -0
  227. package/src/sap/cux/home/interface/CardsInterface.d.ts.map +1 -1
  228. package/src/sap/cux/home/interface/CardsInterface.js.map +1 -1
  229. package/src/sap/cux/home/interface/CardsInterface.ts +6 -1
  230. package/src/sap/cux/home/interface/KeyUserInterface.d.ts +27 -4
  231. package/src/sap/cux/home/interface/KeyUserInterface.d.ts.map +1 -1
  232. package/src/sap/cux/home/interface/KeyUserInterface.js.map +1 -1
  233. package/src/sap/cux/home/interface/KeyUserInterface.ts +23 -4
  234. package/src/sap/cux/home/interface/LayoutInterface.d.ts +7 -0
  235. package/src/sap/cux/home/interface/LayoutInterface.d.ts.map +1 -1
  236. package/src/sap/cux/home/interface/LayoutInterface.js.map +1 -1
  237. package/src/sap/cux/home/interface/LayoutInterface.ts +7 -0
  238. package/src/sap/cux/home/library.d.ts.map +1 -1
  239. package/src/sap/cux/home/library.js +7 -4
  240. package/src/sap/cux/home/library.js.map +1 -1
  241. package/src/sap/cux/home/library.ts +10 -5
  242. package/src/sap/cux/home/themes/base/BaseContainer.less +36 -0
  243. package/src/sap/cux/home/themes/base/BaseLayout.less +11 -0
  244. package/src/sap/cux/home/themes/base/{InsightsContainer.less → CardsContainer.less} +0 -45
  245. package/src/sap/cux/home/themes/base/ContentAdditionDialog.less +10 -18
  246. package/src/sap/cux/home/themes/base/PlaceHolder.less +1 -1
  247. package/src/sap/cux/home/themes/base/SettingsDialog.less +4 -0
  248. package/src/sap/cux/home/themes/base/TilesContainer.less +65 -0
  249. package/src/sap/cux/home/themes/base/library.source.less +2 -1
  250. package/src/sap/cux/home/utils/BatchHelper.d.ts +1 -0
  251. package/src/sap/cux/home/utils/BatchHelper.d.ts.map +1 -1
  252. package/src/sap/cux/home/utils/BatchHelper.js +7 -2
  253. package/src/sap/cux/home/utils/BatchHelper.js.map +1 -1
  254. package/src/sap/cux/home/utils/BatchHelper.ts +8 -1
  255. package/src/sap/cux/home/utils/PerformanceUtils.d.ts +4 -2
  256. package/src/sap/cux/home/utils/PerformanceUtils.d.ts.map +1 -1
  257. package/src/sap/cux/home/utils/PerformanceUtils.js +4 -2
  258. package/src/sap/cux/home/utils/PerformanceUtils.js.map +1 -1
  259. package/src/sap/cux/home/utils/PerformanceUtils.ts +4 -2
  260. package/src/sap/cux/home/utils/fragment/appsAdditionContent.fragment.xml +150 -151
  261. package/src/sap/cux/home/utils/placeholder/CardsPlaceholder.d.ts +8 -0
  262. package/src/sap/cux/home/utils/placeholder/CardsPlaceholder.d.ts.map +1 -0
  263. package/src/sap/cux/home/utils/placeholder/{InsightsPlaceholder.js → CardsPlaceholder.js} +3 -77
  264. package/src/sap/cux/home/utils/placeholder/CardsPlaceholder.js.map +1 -0
  265. package/src/sap/cux/home/utils/placeholder/{InsightsPlaceholder.ts → CardsPlaceholder.ts} +1 -75
  266. package/src/sap/cux/home/utils/placeholder/NewsPlaceholder.d.ts +8 -0
  267. package/src/sap/cux/home/utils/placeholder/NewsPlaceholder.d.ts.map +1 -0
  268. package/src/sap/cux/home/utils/placeholder/NewsPlaceholder.js +44 -0
  269. package/src/sap/cux/home/utils/placeholder/NewsPlaceholder.js.map +1 -0
  270. package/src/sap/cux/home/utils/placeholder/NewsPlaceholder.ts +34 -0
  271. package/src/sap/cux/home/utils/placeholder/PagesPlaceholder.d.ts +8 -0
  272. package/src/sap/cux/home/utils/placeholder/PagesPlaceholder.d.ts.map +1 -0
  273. package/src/sap/cux/home/utils/placeholder/{NewsAndPagesPlaceholder.js → PagesPlaceholder.js} +3 -23
  274. package/src/sap/cux/home/utils/placeholder/PagesPlaceholder.js.map +1 -0
  275. package/src/sap/cux/home/utils/placeholder/{NewsAndPagesPlaceholder.ts → PagesPlaceholder.ts} +1 -21
  276. package/src/sap/cux/home/utils/placeholder/TilesPlaceholder.d.ts +8 -0
  277. package/src/sap/cux/home/utils/placeholder/TilesPlaceholder.d.ts.map +1 -0
  278. package/src/sap/cux/home/utils/placeholder/TilesPlaceholder.js +95 -0
  279. package/src/sap/cux/home/utils/placeholder/TilesPlaceholder.js.map +1 -0
  280. package/src/sap/cux/home/utils/placeholder/TilesPlaceholder.ts +85 -0
  281. package/ui5.yaml +1 -0
  282. package/src/sap/cux/home/InsightsContainer.d.ts +0 -205
  283. package/src/sap/cux/home/InsightsContainer.d.ts.map +0 -1
  284. package/src/sap/cux/home/InsightsContainer.js +0 -459
  285. package/src/sap/cux/home/InsightsContainer.js.map +0 -1
  286. package/src/sap/cux/home/InsightsContainer.ts +0 -489
  287. package/src/sap/cux/home/NewsAndPagesContainer.d.ts.map +0 -1
  288. package/src/sap/cux/home/NewsAndPagesContainer.js.map +0 -1
  289. package/src/sap/cux/home/utils/placeholder/InsightsPlaceholder.d.ts +0 -8
  290. package/src/sap/cux/home/utils/placeholder/InsightsPlaceholder.d.ts.map +0 -1
  291. package/src/sap/cux/home/utils/placeholder/InsightsPlaceholder.js.map +0 -1
  292. package/src/sap/cux/home/utils/placeholder/NewsAndPagesPlaceholder.d.ts +0 -8
  293. package/src/sap/cux/home/utils/placeholder/NewsAndPagesPlaceholder.d.ts.map +0 -1
  294. package/src/sap/cux/home/utils/placeholder/NewsAndPagesPlaceholder.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"BatchHelper.js","names":["sap","ui","define","BaseObject","_catch","body","recover","result","e","then","methods","isEncoded","url","test","MultiPartRequest","batchRequests","constructor","requestMethod","csrfToken","encodeURI","boundary","Date","now","options","headers","method","_constructBody","BOUNDARY","REQUEST_HEADERS","REQUEST_BODY","index","length","request","boundaryEnd","addRequest","push","constructBodyWithPayload","changeSet","CHANGESET_BOUNDARY","CHANGESET_HEADER","JSON","stringify","payload","getDataFromRawValue","value","parsedValue","replace","split","filter","data","finalData","contentTypeValue","includes","parse","fetchCSRFToken","baseURL","Promise","resolve","fetch","HEAD","response","ok","token","get","Error","error","message","reject","BatchHelper","extend","fetchData","_fetchData","multiPartRequest","_this","GET","POST","text","createMultipartRequest","_createMultipartRequest","urls","_this2","buildMultipartRequest","createMultipartRequestWithPayload","_createMultipartRequestWithPayload","payloads","_this3","buildMultipartRequestWithPayload","_buildMultipartRequest","forEach","_buildMultipartRequestWithPayload","multipartRequest"],"sources":["BatchHelper.ts"],"sourcesContent":["/*!\n * SAP UI development toolkit for HTML5 (SAPUI5)\n * * (c) Copyright 2009-2025 SAP SE. All rights reserved\n */\n\nimport BaseObject from \"sap/ui/base/Object\";\n\nenum methods {\n\tGET = \"GET\",\n\tPOST = \"POST\",\n\tPUT = \"PUT\",\n\tPATCH = \"PATCH\",\n\tDELETE = \"DELETE\",\n\tHEAD = \"HEAD\"\n}\n\ninterface Options {\n\theaders: Record<string, string>;\n\tmethod: methods;\n\tbody?: string;\n}\n\nconst isEncoded = (url: string) => {\n\treturn /%[0-9A-F]{2}/i.test(url);\n};\n\n/**\n * Represents a multipart request.\n */\nclass MultiPartRequest {\n\tprivate url: string;\n\tprivate batchRequests: MultiPartRequest[] = [];\n\tprivate boundary: string;\n\tpublic options: Options;\n\tpublic payload?: unknown;\n\n\t/**\n\t * Creates a MultiPartRequest object.\n\t *\n\t * @param {string} url - The URL for the multipart request.\n\t * @constructor\n\t */\n\tconstructor(url: string, requestMethod: methods, csrfToken?: string) {\n\t\t//encode the URL if it is not already encoded\n\t\tthis.url = isEncoded(url) ? url : encodeURI(url);\n\t\tthis.boundary = `batch_id_${Date.now()}_01`;\n\t\tthis.options = {\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": `multipart/mixed;boundary=${this.boundary}`\n\t\t\t},\n\t\t\tmethod: requestMethod\n\t\t};\n\n\t\t// Add CSRF token to headers if available\n\t\tif (csrfToken) {\n\t\t\tthis.options.headers[\"X-CSRF-Token\"] = csrfToken;\n\t\t}\n\t}\n\n\t/**\n\t * Constructs the body for the multipart request.\n\t *\n\t * @returns {string} - The constructed body.\n\t * @private\n\t */\n\tpublic _constructBody(): string {\n\t\tconst BOUNDARY = `--${this.boundary}`;\n\t\tconst REQUEST_HEADERS = `Content-Type: application/http\\r\\nContent-Transfer-Encoding: binary\\r\\n`;\n\t\tconst REQUEST_BODY = `Accept: application/json\\r\\n\\r\\n\\r\\n`;\n\n\t\tlet body = `${BOUNDARY}\\r\\n`;\n\n\t\tfor (let index = 0; index < this.batchRequests.length; index++) {\n\t\t\tconst request = this.batchRequests[index];\n\t\t\tconst boundaryEnd = index === this.batchRequests.length - 1 ? \"--\\r\\n\" : \"\\r\\n\";\n\t\t\tbody += `${REQUEST_HEADERS}\\r\\n`;\n\t\t\tbody += `${request.options.method} ${request.url} HTTP/1.1\\r\\n${REQUEST_BODY}`;\n\t\t\tbody += `${BOUNDARY}${boundaryEnd}`;\n\t\t}\n\n\t\treturn body;\n\t}\n\n\t/**\n\t * Adds a request to the MultiPartRequest batch.\n\t *\n\t * @public\n\t * @param {Object} request - The request to add to the batch.\n\t */\n\tpublic addRequest(request: MultiPartRequest): void {\n\t\tthis.batchRequests.push(request);\n\t}\n\n\t/**\n\t * Constructs the body for the multipart request with payload\n\t *\n\t * @returns {string} - The constructed body.\n\t * @private\n\t */\n\tpublic constructBodyWithPayload(): string {\n\t\tconst BOUNDARY = `--${this.boundary}`;\n\t\tconst REQUEST_HEADERS = \"Content-Type:application/http\\r\\nContent-Transfer-Encoding:binary\\r\\n\";\n\t\tlet body = `${BOUNDARY}\\r\\n`;\n\t\tconst changeSet = \"changeset_001\";\n\t\tconst CHANGESET_BOUNDARY = `--${changeSet}`;\n\t\tconst CHANGESET_HEADER = `Content-Type: multipart/mixed; boundary=${changeSet}\\r\\n`;\n\t\tbody += `${CHANGESET_HEADER}\\r\\n${CHANGESET_BOUNDARY}\\r\\n`;\n\t\tfor (let index = 0; index < this.batchRequests.length; index++) {\n\t\t\tconst request = this.batchRequests[index];\n\t\t\tbody += `\\r\\n${REQUEST_HEADERS}`;\n\t\t\tbody += `Content-ID: ${index + 1}\\r\\n\\r\\n`;\n\t\t\tbody += `${request.options.method} ${request.url} HTTP/1.1\\r\\n`;\n\t\t\tbody += \"sap-context-accept: header\\r\\nContent-Type:application/json\\r\\n\\r\\n\";\n\t\t\tbody += `${JSON.stringify(request.payload)}\\r\\n\\r\\n`;\n\t\t\tbody += CHANGESET_BOUNDARY;\n\t\t\tif (index === this.batchRequests.length - 1) {\n\t\t\t\tbody += \"--\\r\\n\";\n\t\t\t\tbody += `${BOUNDARY}--`;\n\t\t\t}\n\t\t}\n\t\treturn body;\n\t}\n}\n\n/**\n * Parses multipart body response and returns an array of values called in the batch request.\n *\n * @param {string} value - Multipart body response.\n * @returns {Object[]} - Array of values in the multipart request.\n * @returns {Object[]} - An array of values in the multipart request.\n */\nconst getDataFromRawValue = function (value: string): (string | object)[] {\n\tconst parsedValue = value\n\t\t.replace(/\\r\\n/g, \"\\n\")\n\t\t.split(\"\\n\")\n\t\t.filter((data) => data !== \"\");\n\n\tconst finalData: (string | object)[] = [];\n\tlet contentTypeValue = \"\";\n\n\tfor (let index = 1; index < parsedValue.length - 1; index++) {\n\t\tcontentTypeValue = parsedValue[index].includes(\"Content-Type: \") ? parsedValue[index].split(\"Content-Type: \")[1] : contentTypeValue;\n\n\t\tif (parsedValue[index + 1].includes(parsedValue[0])) {\n\t\t\tif (contentTypeValue === \"application/json\") {\n\t\t\t\tfinalData.push(JSON.parse(parsedValue[index]) as string);\n\t\t\t} else {\n\t\t\t\tfinalData.push(parsedValue[index]);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn finalData;\n};\n\n/**\n * Fetches the CSRF token from the specified base URL.\n *\n * @async\n * @param {string} baseURL - The base URL to fetch the CSRF token from.\n * @returns {Promise<string>} A Promise that resolves when all batch requests are completed. A promise that resolves to the CSRF token.\n * @throws {Error} An error if the CSRF token cannot be fetched.\n */\nconst fetchCSRFToken = async function (baseURL: string): Promise<string> {\n\ttry {\n\t\tconst response = await fetch(baseURL, {\n\t\t\tmethod: methods.HEAD,\n\t\t\theaders: {\n\t\t\t\t\"X-CSRF-Token\": \"Fetch\"\n\t\t\t}\n\t\t});\n\n\t\tif (response.ok) {\n\t\t\tconst token = response.headers.get(\"X-CSRF-Token\");\n\t\t\tif (token) {\n\t\t\t\treturn token;\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\"Cannot fetch X-CSRF-Token.\");\n\t} catch (error: unknown) {\n\t\tthrow new Error((error as Error).message);\n\t}\n};\n\n/**\n *\n * Helper class for managing batch requests.\n *\n * @extends BaseObject\n *\n * @author SAP SE\n * @version 0.0.1\n * @since 1.121\n * @private\n *\n * @alias sap.cux.home.utils.BatchHelper\n */\nexport default class BatchHelper extends BaseObject {\n\tprivate url!: string;\n\n\t/**\n\t * Fetches data from a multipart request.\n\t *\n\t * @private\n\t * @param {MultiPartRequest} multiPartRequest - The multipart request object.\n\t * @returns {Promise<Array<string | object>>} - A promise that resolves to the data from the request.\n\t */\n\tprivate async fetchData(multiPartRequest: MultiPartRequest): Promise<Array<string | object>> {\n\t\tmultiPartRequest.options.body =\n\t\t\tmultiPartRequest.options.method === methods.GET\n\t\t\t\t? multiPartRequest._constructBody()\n\t\t\t\t: multiPartRequest.constructBodyWithPayload();\n\n\t\tmultiPartRequest.options.method = methods.POST;\n\n\t\tconst response = await fetch(this.url, multiPartRequest.options);\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(\"Failed to fetch data from the server.\");\n\t\t}\n\n\t\tconst text = await response.text();\n\t\treturn getDataFromRawValue(text);\n\t}\n\n\t/**\n\t * Creates a multipart batch request with multiple URLs.\n\t *\n\t * @public\n\t * @param {string} baseURL - The base URL for creating the batch request.\n\t * @param {string[]} urls - An array of URLs for individual requests.\n\t * @returns {Promise<Array<string | object>>} - A promise that resolves to the data from the batch request.\n\t */\n\tpublic async createMultipartRequest(baseURL: string, urls: string[]): Promise<Array<string | object>> {\n\t\tthis.url = `${baseURL}$batch`;\n\t\tconst csrfToken = await fetchCSRFToken(baseURL);\n\t\tconst request = this.buildMultipartRequest(urls, csrfToken);\n\t\treturn await this.fetchData(request);\n\t}\n\n\t/**\n\t * Creates a multipart batch request with given payloads and sends it to the specified base URL.\n\t *\n\t * @public\n\t * @param {string} baseURL - The base URL for creating the batch request.\n\t * @param payloads - An array of objects containing the URL and data for each part of the multipart request.\n\t * @param requestMethod - The HTTP method to be used for the request (e.g., POST).\n\t * @returns {Promise<Array<string | object>>} A promise that resolves to the data from the batch request.\n\t */\n\tpublic async createMultipartRequestWithPayload(\n\t\tbaseURL: string,\n\t\tpayloads: { url: string; data: unknown }[],\n\t\trequestMethod: methods\n\t): Promise<Array<string | object>> {\n\t\tthis.url = `${baseURL}$batch`;\n\t\tconst csrfToken = await fetchCSRFToken(baseURL);\n\t\tconst request = this.buildMultipartRequestWithPayload(payloads, csrfToken, requestMethod);\n\t\treturn await this.fetchData(request);\n\t}\n\n\t/**\n\t * Builds a multipart request from an array of URLs.\n\t *\n\t * @private\n\t * @param {string[]} urls - An array of URLs for individual requests.\n\t * @returns {MultiPartRequest} - The multipart request object.\n\t */\n\tprivate buildMultipartRequest(urls: string[], csrfToken: string, requestMethod: methods = methods.GET): MultiPartRequest {\n\t\t// create base request from first URL\n\t\tconst request = new MultiPartRequest(urls[0], requestMethod, csrfToken);\n\n\t\t// Add all URLs as sub-requests\n\t\turls.forEach((url) => {\n\t\t\trequest.addRequest(new MultiPartRequest(url, requestMethod, csrfToken));\n\t\t});\n\n\t\treturn request;\n\t}\n\n\t/**\n\t * Builds a multipart request with the given payloads, CSRF token, and request method.\n\t *\n\t * @param payloads - An array of objects containing the URL and data for each part of the request.\n\t * @param csrfToken - The CSRF token to be included in the request headers.\n\t * @param requestMethod - The HTTP method to be used for the request.\n\t * @returns {MultiPartRequest} A `MultiPartRequest` object containing the constructed multipart request.\n\t */\n\tprivate buildMultipartRequestWithPayload(\n\t\tpayloads: { url: string; data: unknown }[],\n\t\tcsrfToken: string,\n\t\trequestMethod: methods\n\t): MultiPartRequest {\n\t\tconst request = new MultiPartRequest(payloads[0].url, requestMethod, csrfToken);\n\t\trequest.payload = payloads[0].data;\n\t\tpayloads.forEach(({ url, data }) => {\n\t\t\tconst multipartRequest = new MultiPartRequest(url, requestMethod, csrfToken);\n\t\t\tmultipartRequest.payload = data;\n\t\t\trequest.addRequest(multipartRequest);\n\t\t});\n\n\t\treturn request;\n\t}\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"BatchHelper.js","names":["sap","ui","define","BaseObject","Localization","_catch","body","recover","result","e","then","methods","isEncoded","url","test","getLanguageCode","langTag","getLanguageTag","currentLanguage","language","toLowerCase","MultiPartRequest","batchRequests","constructor","requestMethod","csrfToken","encodeURI","boundary","Date","now","options","headers","method","_constructBody","BOUNDARY","REQUEST_HEADERS","REQUEST_BODY","index","length","request","boundaryEnd","addRequest","push","constructBodyWithPayload","changeSet","CHANGESET_BOUNDARY","CHANGESET_HEADER","JSON","stringify","payload","getDataFromRawValue","value","parsedValue","replace","split","filter","data","finalData","contentTypeValue","includes","parse","fetchCSRFToken","baseURL","Promise","resolve","fetch","HEAD","response","ok","token","get","Error","error","message","reject","BatchHelper","extend","fetchData","_fetchData","multiPartRequest","_this","GET","POST","text","createMultipartRequest","_createMultipartRequest","urls","_this2","buildMultipartRequest","createMultipartRequestWithPayload","_createMultipartRequestWithPayload","payloads","_this3","buildMultipartRequestWithPayload","_buildMultipartRequest","forEach","_buildMultipartRequestWithPayload","multipartRequest"],"sources":["BatchHelper.ts"],"sourcesContent":["/*!\n * SAP UI development toolkit for HTML5 (SAPUI5)\n * * (c) Copyright 2009-2025 SAP SE. All rights reserved\n */\n\nimport BaseObject from \"sap/ui/base/Object\";\nimport Localization from \"sap/base/i18n/Localization\";\n\nenum methods {\n\tGET = \"GET\",\n\tPOST = \"POST\",\n\tPUT = \"PUT\",\n\tPATCH = \"PATCH\",\n\tDELETE = \"DELETE\",\n\tHEAD = \"HEAD\"\n}\n\ninterface Options {\n\theaders: Record<string, string>;\n\tmethod: methods;\n\tbody?: string;\n}\n\nconst isEncoded = (url: string) => {\n\treturn /%[0-9A-F]{2}/i.test(url);\n};\n\nconst getLanguageCode = () => {\n\tconst langTag = Localization.getLanguageTag();\n\tconst currentLanguage = langTag?.language.toLowerCase();\n\treturn currentLanguage || \"en\";\n};\n\n/**\n * Represents a multipart request.\n */\nclass MultiPartRequest {\n\tprivate url: string;\n\tprivate batchRequests: MultiPartRequest[] = [];\n\tprivate boundary: string;\n\tpublic options: Options;\n\tpublic payload?: unknown;\n\n\t/**\n\t * Creates a MultiPartRequest object.\n\t *\n\t * @param {string} url - The URL for the multipart request.\n\t * @constructor\n\t */\n\tconstructor(url: string, requestMethod: methods, csrfToken?: string) {\n\t\t//encode the URL if it is not already encoded\n\t\tthis.url = isEncoded(url) ? url : encodeURI(url);\n\t\tthis.boundary = `batch_id_${Date.now()}_01`;\n\t\tthis.options = {\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": `multipart/mixed;boundary=${this.boundary}`\n\t\t\t},\n\t\t\tmethod: requestMethod\n\t\t};\n\n\t\t// Add CSRF token to headers if available\n\t\tif (csrfToken) {\n\t\t\tthis.options.headers[\"X-CSRF-Token\"] = csrfToken;\n\t\t}\n\t}\n\n\t/**\n\t * Constructs the body for the multipart request.\n\t *\n\t * @returns {string} - The constructed body.\n\t * @private\n\t */\n\tpublic _constructBody(): string {\n\t\tconst BOUNDARY = `--${this.boundary}`;\n\t\tconst REQUEST_HEADERS = `Content-Type: application/http\\r\\nContent-Transfer-Encoding: binary\\r\\nAccept-Language: ${getLanguageCode()}\\r\\n`;\n\t\tconst REQUEST_BODY = `Accept: application/json\\r\\n\\r\\n\\r\\n`;\n\n\t\tlet body = `${BOUNDARY}\\r\\n`;\n\n\t\tfor (let index = 0; index < this.batchRequests.length; index++) {\n\t\t\tconst request = this.batchRequests[index];\n\t\t\tconst boundaryEnd = index === this.batchRequests.length - 1 ? \"--\\r\\n\" : \"\\r\\n\";\n\t\t\tbody += `${REQUEST_HEADERS}\\r\\n`;\n\t\t\tbody += `${request.options.method} ${request.url} HTTP/1.1\\r\\n${REQUEST_BODY}`;\n\t\t\tbody += `${BOUNDARY}${boundaryEnd}`;\n\t\t}\n\n\t\treturn body;\n\t}\n\n\t/**\n\t * Adds a request to the MultiPartRequest batch.\n\t *\n\t * @public\n\t * @param {Object} request - The request to add to the batch.\n\t */\n\tpublic addRequest(request: MultiPartRequest): void {\n\t\tthis.batchRequests.push(request);\n\t}\n\n\t/**\n\t * Constructs the body for the multipart request with payload\n\t *\n\t * @returns {string} - The constructed body.\n\t * @private\n\t */\n\tpublic constructBodyWithPayload(): string {\n\t\tconst BOUNDARY = `--${this.boundary}`;\n\t\tconst REQUEST_HEADERS = \"Content-Type:application/http\\r\\nContent-Transfer-Encoding:binary\\r\\n\";\n\t\tlet body = `${BOUNDARY}\\r\\n`;\n\t\tconst changeSet = \"changeset_001\";\n\t\tconst CHANGESET_BOUNDARY = `--${changeSet}`;\n\t\tconst CHANGESET_HEADER = `Content-Type: multipart/mixed; boundary=${changeSet}\\r\\n`;\n\t\tbody += `${CHANGESET_HEADER}\\r\\n${CHANGESET_BOUNDARY}\\r\\n`;\n\t\tfor (let index = 0; index < this.batchRequests.length; index++) {\n\t\t\tconst request = this.batchRequests[index];\n\t\t\tbody += `\\r\\n${REQUEST_HEADERS}`;\n\t\t\tbody += `Content-ID: ${index + 1}\\r\\n\\r\\n`;\n\t\t\tbody += `${request.options.method} ${request.url} HTTP/1.1\\r\\n`;\n\t\t\tbody += \"sap-context-accept: header\\r\\nContent-Type:application/json\\r\\n\\r\\n\";\n\t\t\tbody += `${JSON.stringify(request.payload)}\\r\\n\\r\\n`;\n\t\t\tbody += CHANGESET_BOUNDARY;\n\t\t\tif (index === this.batchRequests.length - 1) {\n\t\t\t\tbody += \"--\\r\\n\";\n\t\t\t\tbody += `${BOUNDARY}--`;\n\t\t\t}\n\t\t}\n\t\treturn body;\n\t}\n}\n\n/**\n * Parses multipart body response and returns an array of values called in the batch request.\n *\n * @param {string} value - Multipart body response.\n * @returns {Object[]} - Array of values in the multipart request.\n * @returns {Object[]} - An array of values in the multipart request.\n */\nconst getDataFromRawValue = function (value: string): (string | object)[] {\n\tconst parsedValue = value\n\t\t.replace(/\\r\\n/g, \"\\n\")\n\t\t.split(\"\\n\")\n\t\t.filter((data) => data !== \"\");\n\n\tconst finalData: (string | object)[] = [];\n\tlet contentTypeValue = \"\";\n\n\tfor (let index = 1; index < parsedValue.length - 1; index++) {\n\t\tcontentTypeValue = parsedValue[index].includes(\"Content-Type: \") ? parsedValue[index].split(\"Content-Type: \")[1] : contentTypeValue;\n\n\t\tif (parsedValue[index + 1].includes(parsedValue[0])) {\n\t\t\tif (contentTypeValue === \"application/json\") {\n\t\t\t\tfinalData.push(JSON.parse(parsedValue[index]) as string);\n\t\t\t} else {\n\t\t\t\tfinalData.push(parsedValue[index]);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn finalData;\n};\n\n/**\n * Fetches the CSRF token from the specified base URL.\n *\n * @async\n * @param {string} baseURL - The base URL to fetch the CSRF token from.\n * @returns {Promise<string>} A Promise that resolves when all batch requests are completed. A promise that resolves to the CSRF token.\n * @throws {Error} An error if the CSRF token cannot be fetched.\n */\nconst fetchCSRFToken = async function (baseURL: string): Promise<string> {\n\ttry {\n\t\tconst response = await fetch(baseURL, {\n\t\t\tmethod: methods.HEAD,\n\t\t\theaders: {\n\t\t\t\t\"X-CSRF-Token\": \"Fetch\"\n\t\t\t}\n\t\t});\n\n\t\tif (response.ok) {\n\t\t\tconst token = response.headers.get(\"X-CSRF-Token\");\n\t\t\tif (token) {\n\t\t\t\treturn token;\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\"Cannot fetch X-CSRF-Token.\");\n\t} catch (error: unknown) {\n\t\tthrow new Error((error as Error).message);\n\t}\n};\n\n/**\n *\n * Helper class for managing batch requests.\n *\n * @extends BaseObject\n *\n * @author SAP SE\n * @version 0.0.1\n * @since 1.121\n * @private\n *\n * @alias sap.cux.home.utils.BatchHelper\n */\nexport default class BatchHelper extends BaseObject {\n\tprivate url!: string;\n\n\t/**\n\t * Fetches data from a multipart request.\n\t *\n\t * @private\n\t * @param {MultiPartRequest} multiPartRequest - The multipart request object.\n\t * @returns {Promise<Array<string | object>>} - A promise that resolves to the data from the request.\n\t */\n\tprivate async fetchData(multiPartRequest: MultiPartRequest): Promise<Array<string | object>> {\n\t\tmultiPartRequest.options.body =\n\t\t\tmultiPartRequest.options.method === methods.GET\n\t\t\t\t? multiPartRequest._constructBody()\n\t\t\t\t: multiPartRequest.constructBodyWithPayload();\n\n\t\tmultiPartRequest.options.method = methods.POST;\n\n\t\tconst response = await fetch(this.url, multiPartRequest.options);\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(\"Failed to fetch data from the server.\");\n\t\t}\n\n\t\tconst text = await response.text();\n\t\treturn getDataFromRawValue(text);\n\t}\n\n\t/**\n\t * Creates a multipart batch request with multiple URLs.\n\t *\n\t * @public\n\t * @param {string} baseURL - The base URL for creating the batch request.\n\t * @param {string[]} urls - An array of URLs for individual requests.\n\t * @returns {Promise<Array<string | object>>} - A promise that resolves to the data from the batch request.\n\t */\n\tpublic async createMultipartRequest(baseURL: string, urls: string[]): Promise<Array<string | object>> {\n\t\tthis.url = `${baseURL}$batch`;\n\t\tconst csrfToken = await fetchCSRFToken(baseURL);\n\t\tconst request = this.buildMultipartRequest(urls, csrfToken);\n\t\treturn await this.fetchData(request);\n\t}\n\n\t/**\n\t * Creates a multipart batch request with given payloads and sends it to the specified base URL.\n\t *\n\t * @public\n\t * @param {string} baseURL - The base URL for creating the batch request.\n\t * @param payloads - An array of objects containing the URL and data for each part of the multipart request.\n\t * @param requestMethod - The HTTP method to be used for the request (e.g., POST).\n\t * @returns {Promise<Array<string | object>>} A promise that resolves to the data from the batch request.\n\t */\n\tpublic async createMultipartRequestWithPayload(\n\t\tbaseURL: string,\n\t\tpayloads: { url: string; data: unknown }[],\n\t\trequestMethod: methods\n\t): Promise<Array<string | object>> {\n\t\tthis.url = `${baseURL}$batch`;\n\t\tconst csrfToken = await fetchCSRFToken(baseURL);\n\t\tconst request = this.buildMultipartRequestWithPayload(payloads, csrfToken, requestMethod);\n\t\treturn await this.fetchData(request);\n\t}\n\n\t/**\n\t * Builds a multipart request from an array of URLs.\n\t *\n\t * @private\n\t * @param {string[]} urls - An array of URLs for individual requests.\n\t * @returns {MultiPartRequest} - The multipart request object.\n\t */\n\tprivate buildMultipartRequest(urls: string[], csrfToken: string, requestMethod: methods = methods.GET): MultiPartRequest {\n\t\t// create base request from first URL\n\t\tconst request = new MultiPartRequest(urls[0], requestMethod, csrfToken);\n\n\t\t// Add all URLs as sub-requests\n\t\turls.forEach((url) => {\n\t\t\trequest.addRequest(new MultiPartRequest(url, requestMethod, csrfToken));\n\t\t});\n\n\t\treturn request;\n\t}\n\n\t/**\n\t * Builds a multipart request with the given payloads, CSRF token, and request method.\n\t *\n\t * @param payloads - An array of objects containing the URL and data for each part of the request.\n\t * @param csrfToken - The CSRF token to be included in the request headers.\n\t * @param requestMethod - The HTTP method to be used for the request.\n\t * @returns {MultiPartRequest} A `MultiPartRequest` object containing the constructed multipart request.\n\t */\n\tprivate buildMultipartRequestWithPayload(\n\t\tpayloads: { url: string; data: unknown }[],\n\t\tcsrfToken: string,\n\t\trequestMethod: methods\n\t): MultiPartRequest {\n\t\tconst request = new MultiPartRequest(payloads[0].url, requestMethod, csrfToken);\n\t\trequest.payload = payloads[0].data;\n\t\tpayloads.forEach(({ url, data }) => {\n\t\t\tconst multipartRequest = new MultiPartRequest(url, requestMethod, csrfToken);\n\t\t\tmultipartRequest.payload = data;\n\t\t\trequest.addRequest(multipartRequest);\n\t\t});\n\n\t\treturn request;\n\t}\n}\n"],"mappings":"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","ignoreList":[]}
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import BaseObject from "sap/ui/base/Object";
7
+ import Localization from "sap/base/i18n/Localization";
7
8
 
8
9
  enum methods {
9
10
  GET = "GET",
@@ -24,6 +25,12 @@ const isEncoded = (url: string) => {
24
25
  return /%[0-9A-F]{2}/i.test(url);
25
26
  };
26
27
 
28
+ const getLanguageCode = () => {
29
+ const langTag = Localization.getLanguageTag();
30
+ const currentLanguage = langTag?.language.toLowerCase();
31
+ return currentLanguage || "en";
32
+ };
33
+
27
34
  /**
28
35
  * Represents a multipart request.
29
36
  */
@@ -65,7 +72,7 @@ class MultiPartRequest {
65
72
  */
66
73
  public _constructBody(): string {
67
74
  const BOUNDARY = `--${this.boundary}`;
68
- const REQUEST_HEADERS = `Content-Type: application/http\r\nContent-Transfer-Encoding: binary\r\n`;
75
+ const REQUEST_HEADERS = `Content-Type: application/http\r\nContent-Transfer-Encoding: binary\r\nAccept-Language: ${getLanguageCode()}\r\n`;
69
76
  const REQUEST_BODY = `Accept: application/json\r\n\r\n\r\n`;
70
77
 
71
78
  let body = `${BOUNDARY}\r\n`;
@@ -17,8 +17,10 @@ declare module "sap/cux/home/utils/PerformanceUtils" {
17
17
  */
18
18
  const UIElements: {
19
19
  "sap.cux.home.AppsContainer": string;
20
- "sap.cux.home.InsightsContainer": string;
21
- "sap.cux.home.NewsAndPagesContainer": string;
20
+ "sap.cux.home.TilesContainer": string;
21
+ "sap.cux.home.CardsContainer": string;
22
+ "sap.cux.home.PagesContainer": string;
23
+ "sap.cux.home.NewsContainer": string;
22
24
  "sap.cux.home.ToDosContainer": string;
23
25
  "sap.cux.home.Layout": string;
24
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"PerformanceUtils.d.ts","sourceRoot":"../../../../../..","sources":["src/sap/cux/home/utils/PerformanceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,qCAAqC,CAAC;IASrD,OAAO,aAAa,MAAM,4BAA4B,CAAC;IACvD,OAAO,MAAM,MAAM,qBAAqB,CAAC;IAEzC,KAAK,WAAW,GAAG;QAClB,IAAI,EAAE,MAAM,OAAO,UAAU,CAAC;QAC9B,WAAW,EAAE,OAAO,CAAC;QACrB,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;KACjC,CAAC;IAEF,MAAM,aAAa,wBAAwB,CAAC;IAC5C,MAAM,uBAAuB,kCAAkC,CAAC;IAChE,MAAM,qBAAqB,4BAA4B,CAAC;IACxD,IAAI,aAAa,SAAQ,CAAC;IAE1B;;;OAGG;IACI,MAAM,UAAU;;;;;;KAMtB,CAAC;IAEF,IAAI,iBAAiB,EAAE,WAAW,EAI/B,CAAC;IAEJ;;;;OAIG;IACH,SAAe,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAG3C;IAED;;;;OAIG;IACH,SAAe,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAIhD;IAED;;;;OAIG;IACH,SAAe,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAK9C;IAED;;;;;OAKG;IACH,SAAS,aAAa,CAAC,aAAa,EAAE,MAAM,OAAO,UAAU,GAAG,WAAW,GAAG,SAAS,CAEtF;IAED;;;;OAIG;IACH,SAAS,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAKlD;IAED;;;;;;OAMG;IACH,SAAS,iBAAiB,CAAC,aAAa,EAAE,MAAM,OAAO,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CASxH;IAED;;;;OAIG;IACH,SAAsB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC5E;IAED;;;;;OAKG;IACH,SAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,OAAO,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAE5G;IAED;;;;;OAKG;IACH,SAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,OAAO,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAE1G;CAEA"}
1
+ {"version":3,"file":"PerformanceUtils.d.ts","sourceRoot":"../../../../../..","sources":["src/sap/cux/home/utils/PerformanceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,qCAAqC,CAAC;IASrD,OAAO,aAAa,MAAM,4BAA4B,CAAC;IACvD,OAAO,MAAM,MAAM,qBAAqB,CAAC;IAEzC,KAAK,WAAW,GAAG;QAClB,IAAI,EAAE,MAAM,OAAO,UAAU,CAAC;QAC9B,WAAW,EAAE,OAAO,CAAC;QACrB,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;KACjC,CAAC;IAEF,MAAM,aAAa,wBAAwB,CAAC;IAC5C,MAAM,uBAAuB,kCAAkC,CAAC;IAChE,MAAM,qBAAqB,4BAA4B,CAAC;IACxD,IAAI,aAAa,SAAQ,CAAC;IAE1B;;;OAGG;IACI,MAAM,UAAU;;;;;;;;KAQtB,CAAC;IAEF,IAAI,iBAAiB,EAAE,WAAW,EAI/B,CAAC;IAEJ;;;;OAIG;IACH,SAAe,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAG3C;IAED;;;;OAIG;IACH,SAAe,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAIhD;IAED;;;;OAIG;IACH,SAAe,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAK9C;IAED;;;;;OAKG;IACH,SAAS,aAAa,CAAC,aAAa,EAAE,MAAM,OAAO,UAAU,GAAG,WAAW,GAAG,SAAS,CAEtF;IAED;;;;OAIG;IACH,SAAS,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAKlD;IAED;;;;;;OAMG;IACH,SAAS,iBAAiB,CAAC,aAAa,EAAE,MAAM,OAAO,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CASxH;IAED;;;;OAIG;IACH,SAAsB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC5E;IAED;;;;;OAKG;IACH,SAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,OAAO,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAE5G;IAED;;;;;OAKG;IACH,SAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,OAAO,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAE1G;CAEA"}
@@ -115,8 +115,10 @@ sap.ui.define(["sap/ushell/Container", "sap/ushell/EventHub", "sap/ushell/utils"
115
115
  */
116
116
  const UIElements = {
117
117
  "sap.cux.home.AppsContainer": "Apps",
118
- "sap.cux.home.InsightsContainer": "Insights",
119
- "sap.cux.home.NewsAndPagesContainer": "News",
118
+ "sap.cux.home.TilesContainer": "Insights_Tiles",
119
+ "sap.cux.home.CardsContainer": "Insights_Cards",
120
+ "sap.cux.home.PagesContainer": "Pages",
121
+ "sap.cux.home.NewsContainer": "News",
120
122
  "sap.cux.home.ToDosContainer": "ToDos",
121
123
  [layoutElement]: "Layout"
122
124
  };
@@ -1 +1 @@
1
- {"version":3,"file":"PerformanceUtils.js","names":["sap","ui","define","Container","EventHub","utils","setupPerformanceTracking","layout","setupTracking","Promise","resolve","containers","getItems","forEach","container","getContent","panel","attachEventOnce","containerName","getMetadata","getName","heroElement","availableElements","filter","availableElement","control","getVisible","name","_temp2","markHomePageEnd","then","e","reject","visibleElements","layoutElement","find","markHomePageStart","_temp","length","isHomeApp","_isHomeApp2","recordElementLoadEnd","homePageLoadEndMarker","emit","_isHomeApp","recordElementLoadStart","homePageLoadStartMarker","getServiceAsync","getCurrentApplication","homePage","UIElements","Object","keys","map","elementName","startMarked","endMarked","findUIElement","setPerformanceMark","markName","bUseUniqueMark","bUseLastMark","recordElementLoad","customMarkName","isStartMaker","element","marker","controlFlag","__exports","__esModule"],"sources":["PerformanceUtils.ts"],"sourcesContent":["/*!\n * SAP UI development toolkit for HTML5 (SAPUI5)\n * * (c) Copyright 2009-2025 SAP SE. All rights reserved\n */\nimport Container from \"sap/ushell/Container\";\nimport EventHub from \"sap/ushell/EventHub\";\nimport AppLifeCycle from \"sap/ushell/services/AppLifeCycle\";\nimport utils from \"sap/ushell/utils\";\nimport BaseContainer from \"../BaseContainer\";\nimport Layout from \"../Layout\";\n\ntype ElementInfo = {\n\tname: keyof typeof UIElements;\n\tstartMarked: boolean;\n\tendMarked: boolean;\n\tcontrol?: Layout | BaseContainer;\n};\n\nconst layoutElement = \"sap.cux.home.Layout\";\nconst homePageLoadStartMarker = \"FLP-TTI-Homepage-Custom-Start\";\nconst homePageLoadEndMarker = \"FLP-TTI-Homepage-Custom\";\nlet setupTracking = false;\n\n/**\n * An object representing the UI elements and their corresponding marker names.\n *\n */\nexport const UIElements = {\n\t\"sap.cux.home.AppsContainer\": \"Apps\",\n\t\"sap.cux.home.InsightsContainer\": \"Insights\",\n\t\"sap.cux.home.NewsAndPagesContainer\": \"News\",\n\t\"sap.cux.home.ToDosContainer\": \"ToDos\",\n\t[layoutElement]: \"Layout\"\n};\n\nlet availableElements: ElementInfo[] = Object.keys(UIElements).map((elementName) => ({\n\tname: elementName as keyof typeof UIElements,\n\tstartMarked: false,\n\tendMarked: false\n}));\n\n/**\n * Checks if the current application is the home app.\n *\n * @returns {Promise<boolean>} - A promise that resolves to true if the current application is the home app, otherwise false.\n */\nasync function isHomeApp(): Promise<boolean> {\n\tconst container = await Container.getServiceAsync<AppLifeCycle>(\"AppLifeCycle\");\n\treturn container.getCurrentApplication()?.homePage as boolean;\n}\n\n/**\n * Records the start of the homepage load.\n *\n * @returns {Promise<void>} - A promise that resolves when the start of the homepage load is recorded.\n */\nasync function markHomePageStart(): Promise<void> {\n\tif (await isHomeApp()) {\n\t\trecordElementLoadStart(layoutElement, homePageLoadStartMarker);\n\t}\n}\n\n/**\n * Records the end of the homepage load.\n *\n * @returns {Promise<void>} - A promise that resolves when the end of the homepage load is recorded.\n */\nasync function markHomePageEnd(): Promise<void> {\n\tif (await isHomeApp()) {\n\t\trecordElementLoadEnd(layoutElement, homePageLoadEndMarker);\n\t\tEventHub.emit(\"CustomHomeRendered\");\n\t}\n}\n\n/**\n * Finds the UI element information by container name.\n *\n * @param {keyof typeof UIElements} containerName - The name of the container.\n * @returns {ElementInfo | undefined} - The element information if found, otherwise undefined.\n */\nfunction findUIElement(containerName: keyof typeof UIElements): ElementInfo | undefined {\n\treturn availableElements.find((heroElement) => heroElement.name === containerName);\n}\n\n/**\n * Sets a performance mark with the given name.\n *\n * @param {string} markName - The name of the performance mark.\n */\nfunction setPerformanceMark(markName: string): void {\n\tutils.setPerformanceMark(markName, {\n\t\tbUseUniqueMark: true,\n\t\tbUseLastMark: true\n\t});\n}\n\n/**\n * Records the load of an element.\n *\n * @param {keyof typeof UIElements} containerName - The name of the container.\n * @param {string} [customMarkName] - The custom mark name.\n * @param {boolean} [isStartMaker] - Indicates if it is a start marker.\n */\nfunction recordElementLoad(containerName: keyof typeof UIElements, customMarkName?: string, isStartMaker?: boolean): void {\n\tconst element = findUIElement(containerName);\n\tconst marker = isStartMaker ? \"Start\" : \"End\";\n\tconst controlFlag = isStartMaker ? \"startMarked\" : \"endMarked\";\n\n\tif (element && !element[controlFlag] && element.control?.getVisible()) {\n\t\telement[controlFlag] = true;\n\t\tsetPerformanceMark(customMarkName || `FLP-Homepage-Section-${marker}[${UIElements[containerName]}]`);\n\t}\n}\n\n/**\n * Sets up performance tracking for the given layout.\n *\n * @param {Layout} layout - The layout object containing the UI elements.\n */\nexport async function setupPerformanceTracking(layout: Layout): Promise<void> {\n\tif (!layout || setupTracking) return;\n\n\tconst containers = layout.getItems();\n\tcontainers.forEach((container) => {\n\t\tcontainer.getContent().forEach((panel) => {\n\t\t\tpanel.attachEventOnce(\"loaded\", async () => {\n\t\t\t\tconst containerName = container.getMetadata().getName();\n\t\t\t\tconst heroElement = availableElements.filter((availableElement) => availableElement.control?.getVisible())[0].name;\n\n\t\t\t\t// If the hero element is loaded, mark the end of the homepage load\n\t\t\t\tif (containerName === heroElement) {\n\t\t\t\t\tawait markHomePageEnd();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t});\n\n\tconst visibleElements = availableElements.filter((availableElement) => {\n\t\tavailableElement.control =\n\t\t\tavailableElement.name === layoutElement\n\t\t\t\t? layout\n\t\t\t\t: containers.find((container) => container.getMetadata().getName() === availableElement.name);\n\t\treturn availableElement.control?.getVisible();\n\t});\n\n\t// record homepage start\n\tsetupTracking = true;\n\tawait markHomePageStart();\n\n\t// record homepage end in case of no visible elements except layout\n\tif (visibleElements.length === 1) {\n\t\tawait markHomePageEnd();\n\t}\n}\n\n/**\n * Records the start of the element load.\n *\n * @param {keyof typeof UIElements} containerName - The name of the container.\n * @param {string} [customMarkName] - The custom mark name.\n */\nexport function recordElementLoadStart(containerName: keyof typeof UIElements, customMarkName?: string): void {\n\trecordElementLoad(containerName, customMarkName, true);\n}\n\n/**\n * Records the end of the element load.\n *\n * @param {keyof typeof UIElements} containerName - The name of the container.\n * @param {string} [customMarkName] - The custom mark name.\n */\nexport function recordElementLoadEnd(containerName: keyof typeof UIElements, customMarkName?: string): void {\n\trecordElementLoad(containerName, customMarkName, false);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PerformanceUtils.js","names":["sap","ui","define","Container","EventHub","utils","setupPerformanceTracking","layout","setupTracking","Promise","resolve","containers","getItems","forEach","container","getContent","panel","attachEventOnce","containerName","getMetadata","getName","heroElement","availableElements","filter","availableElement","control","getVisible","name","_temp2","markHomePageEnd","then","e","reject","visibleElements","layoutElement","find","markHomePageStart","_temp","length","isHomeApp","_isHomeApp2","recordElementLoadEnd","homePageLoadEndMarker","emit","_isHomeApp","recordElementLoadStart","homePageLoadStartMarker","getServiceAsync","getCurrentApplication","homePage","UIElements","Object","keys","map","elementName","startMarked","endMarked","findUIElement","setPerformanceMark","markName","bUseUniqueMark","bUseLastMark","recordElementLoad","customMarkName","isStartMaker","element","marker","controlFlag","__exports","__esModule"],"sources":["PerformanceUtils.ts"],"sourcesContent":["/*!\n * SAP UI development toolkit for HTML5 (SAPUI5)\n * * (c) Copyright 2009-2025 SAP SE. All rights reserved\n */\nimport Container from \"sap/ushell/Container\";\nimport EventHub from \"sap/ushell/EventHub\";\nimport AppLifeCycle from \"sap/ushell/services/AppLifeCycle\";\nimport utils from \"sap/ushell/utils\";\nimport BaseContainer from \"../BaseContainer\";\nimport Layout from \"../Layout\";\n\ntype ElementInfo = {\n\tname: keyof typeof UIElements;\n\tstartMarked: boolean;\n\tendMarked: boolean;\n\tcontrol?: Layout | BaseContainer;\n};\n\nconst layoutElement = \"sap.cux.home.Layout\";\nconst homePageLoadStartMarker = \"FLP-TTI-Homepage-Custom-Start\";\nconst homePageLoadEndMarker = \"FLP-TTI-Homepage-Custom\";\nlet setupTracking = false;\n\n/**\n * An object representing the UI elements and their corresponding marker names.\n *\n */\nexport const UIElements = {\n\t\"sap.cux.home.AppsContainer\": \"Apps\",\n\t\"sap.cux.home.TilesContainer\": \"Insights_Tiles\",\n\t\"sap.cux.home.CardsContainer\": \"Insights_Cards\",\n\t\"sap.cux.home.PagesContainer\": \"Pages\",\n\t\"sap.cux.home.NewsContainer\": \"News\",\n\t\"sap.cux.home.ToDosContainer\": \"ToDos\",\n\t[layoutElement]: \"Layout\"\n};\n\nlet availableElements: ElementInfo[] = Object.keys(UIElements).map((elementName) => ({\n\tname: elementName as keyof typeof UIElements,\n\tstartMarked: false,\n\tendMarked: false\n}));\n\n/**\n * Checks if the current application is the home app.\n *\n * @returns {Promise<boolean>} - A promise that resolves to true if the current application is the home app, otherwise false.\n */\nasync function isHomeApp(): Promise<boolean> {\n\tconst container = await Container.getServiceAsync<AppLifeCycle>(\"AppLifeCycle\");\n\treturn container.getCurrentApplication()?.homePage as boolean;\n}\n\n/**\n * Records the start of the homepage load.\n *\n * @returns {Promise<void>} - A promise that resolves when the start of the homepage load is recorded.\n */\nasync function markHomePageStart(): Promise<void> {\n\tif (await isHomeApp()) {\n\t\trecordElementLoadStart(layoutElement, homePageLoadStartMarker);\n\t}\n}\n\n/**\n * Records the end of the homepage load.\n *\n * @returns {Promise<void>} - A promise that resolves when the end of the homepage load is recorded.\n */\nasync function markHomePageEnd(): Promise<void> {\n\tif (await isHomeApp()) {\n\t\trecordElementLoadEnd(layoutElement, homePageLoadEndMarker);\n\t\tEventHub.emit(\"CustomHomeRendered\");\n\t}\n}\n\n/**\n * Finds the UI element information by container name.\n *\n * @param {keyof typeof UIElements} containerName - The name of the container.\n * @returns {ElementInfo | undefined} - The element information if found, otherwise undefined.\n */\nfunction findUIElement(containerName: keyof typeof UIElements): ElementInfo | undefined {\n\treturn availableElements.find((heroElement) => heroElement.name === containerName);\n}\n\n/**\n * Sets a performance mark with the given name.\n *\n * @param {string} markName - The name of the performance mark.\n */\nfunction setPerformanceMark(markName: string): void {\n\tutils.setPerformanceMark(markName, {\n\t\tbUseUniqueMark: true,\n\t\tbUseLastMark: true\n\t});\n}\n\n/**\n * Records the load of an element.\n *\n * @param {keyof typeof UIElements} containerName - The name of the container.\n * @param {string} [customMarkName] - The custom mark name.\n * @param {boolean} [isStartMaker] - Indicates if it is a start marker.\n */\nfunction recordElementLoad(containerName: keyof typeof UIElements, customMarkName?: string, isStartMaker?: boolean): void {\n\tconst element = findUIElement(containerName);\n\tconst marker = isStartMaker ? \"Start\" : \"End\";\n\tconst controlFlag = isStartMaker ? \"startMarked\" : \"endMarked\";\n\n\tif (element && !element[controlFlag] && element.control?.getVisible()) {\n\t\telement[controlFlag] = true;\n\t\tsetPerformanceMark(customMarkName || `FLP-Homepage-Section-${marker}[${UIElements[containerName]}]`);\n\t}\n}\n\n/**\n * Sets up performance tracking for the given layout.\n *\n * @param {Layout} layout - The layout object containing the UI elements.\n */\nexport async function setupPerformanceTracking(layout: Layout): Promise<void> {\n\tif (!layout || setupTracking) return;\n\n\tconst containers = layout.getItems();\n\tcontainers.forEach((container) => {\n\t\tcontainer.getContent().forEach((panel) => {\n\t\t\tpanel.attachEventOnce(\"loaded\", async () => {\n\t\t\t\tconst containerName = container.getMetadata().getName();\n\t\t\t\tconst heroElement = availableElements.filter((availableElement) => availableElement.control?.getVisible())[0].name;\n\n\t\t\t\t// If the hero element is loaded, mark the end of the homepage load\n\t\t\t\tif (containerName === heroElement) {\n\t\t\t\t\tawait markHomePageEnd();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t});\n\n\tconst visibleElements = availableElements.filter((availableElement) => {\n\t\tavailableElement.control =\n\t\t\tavailableElement.name === layoutElement\n\t\t\t\t? layout\n\t\t\t\t: containers.find((container) => container.getMetadata().getName() === availableElement.name);\n\t\treturn availableElement.control?.getVisible();\n\t});\n\n\t// record homepage start\n\tsetupTracking = true;\n\tawait markHomePageStart();\n\n\t// record homepage end in case of no visible elements except layout\n\tif (visibleElements.length === 1) {\n\t\tawait markHomePageEnd();\n\t}\n}\n\n/**\n * Records the start of the element load.\n *\n * @param {keyof typeof UIElements} containerName - The name of the container.\n * @param {string} [customMarkName] - The custom mark name.\n */\nexport function recordElementLoadStart(containerName: keyof typeof UIElements, customMarkName?: string): void {\n\trecordElementLoad(containerName, customMarkName, true);\n}\n\n/**\n * Records the end of the element load.\n *\n * @param {keyof typeof UIElements} containerName - The name of the container.\n * @param {string} [customMarkName] - The custom mark name.\n */\nexport function recordElementLoadEnd(containerName: keyof typeof UIElements, customMarkName?: string): void {\n\trecordElementLoad(containerName, customMarkName, false);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -27,8 +27,10 @@ let setupTracking = false;
27
27
  */
28
28
  export const UIElements = {
29
29
  "sap.cux.home.AppsContainer": "Apps",
30
- "sap.cux.home.InsightsContainer": "Insights",
31
- "sap.cux.home.NewsAndPagesContainer": "News",
30
+ "sap.cux.home.TilesContainer": "Insights_Tiles",
31
+ "sap.cux.home.CardsContainer": "Insights_Cards",
32
+ "sap.cux.home.PagesContainer": "Pages",
33
+ "sap.cux.home.NewsContainer": "News",
32
34
  "sap.cux.home.ToDosContainer": "ToDos",
33
35
  [layoutElement]: "Layout"
34
36
  };
@@ -4,122 +4,122 @@
4
4
  -->
5
5
  <core:FragmentDefinition xmlns="sap.m" xmlns:core="sap.ui.core" xmlns:fesr="http://schemas.sap.com/sapui5/extension/sap.ui.core.FESR/1">
6
6
  <VBox id="container" height="100%" renderType="Bare">
7
- <!-- HEADER CONTENT -->
8
- <VBox id="headerContent" class="headerContent" backgroundDesign="Solid">
9
- <Text id="appsAdditionDescription" text="{i18n>addAppsSearchDescription}" />
10
- <HBox id="searchContainer" class="sapUiTinyMarginTop" renderType="Bare" justifyContent="SpaceBetween" gap="0.5rem">
11
- <TextArea
12
- id="searchTextArea"
13
- rows="2"
14
- width="100%"
15
- maxLength="2000"
16
- valueLiveUpdate="true"
17
- showExceededText="true"
18
- liveChange=".onSearchTextAreaLiveChange"
19
- placeholder="{i18n>searchPlaceholder}"
20
- enabled="{= ${/searchStatus} !== 'searching' }"
21
- value="{ path: '/query', mode: 'TwoWay' }"
22
- />
23
- <Button
24
- id="goBtn"
25
- text="{i18n>goButton}"
26
- enabled="{= ${/searchStatus} !== 'searching' &amp;&amp; !${/invalidQuery} }"
27
- press=".onPressGo"
28
- fesr:press="myh:apps:go"
29
- />
30
- <Button
31
- id="clearAllBtn"
32
- text="{i18n>clearAllButton}"
33
- enabled="{= ${/searchStatus} !== 'searching' &amp;&amp; ${/query/length} &gt; 0 }"
34
- press=".resetPanel"
35
- fesr:press="myh:apps:clearAll"
36
- type="Transparent"
37
- />
38
- </HBox>
39
- <VBox id="sampleQueriesContainer" renderType="Bare" visible="{= ${/searchStatus} === 'idle' }" class="sapUiTinyMarginBottom">
40
- <HBox id="sampleQueriesHeader" alignItems="Center" renderType="Bare">
41
- <core:Icon src="sap-icon://sys-help" color="Neutral" size="0.875rem" class="sapUiTinyMarginEnd" />
42
- <Label id="sampleQueries" text="{i18n>sampleQueries}" />
7
+ <ScrollContainer id="wrapperContainer" vertical="true" class="wrapperContainer">
8
+ <!-- HEADER CONTENT -->
9
+ <VBox id="headerContent" class="headerContent" backgroundDesign="Solid">
10
+ <Text id="appsAdditionDescription" text="{i18n>addAppsSearchDescription}" />
11
+ <HBox id="searchContainer" class="sapUiTinyMarginTop" renderType="Bare" justifyContent="SpaceBetween" gap="0.5rem">
12
+ <TextArea
13
+ id="searchTextArea"
14
+ rows="2"
15
+ width="100%"
16
+ maxLength="2000"
17
+ valueLiveUpdate="true"
18
+ showExceededText="true"
19
+ liveChange=".onSearchTextAreaLiveChange"
20
+ placeholder="{i18n>searchPlaceholder}"
21
+ enabled="{= ${/searchStatus} !== 'searching' }"
22
+ value="{ path: '/query', mode: 'TwoWay' }"
23
+ class="sapUiNoMargin"
24
+ />
25
+ <Button
26
+ id="goBtn"
27
+ text="{i18n>goButton}"
28
+ enabled="{= ${/searchStatus} !== 'searching' &amp;&amp; !${/invalidQuery} }"
29
+ press=".onPressGo"
30
+ fesr:press="myh:apps:go"
31
+ />
32
+ <Button
33
+ id="clearAllBtn"
34
+ text="{i18n>clearAllButton}"
35
+ enabled="{= ${/searchStatus} !== 'searching' &amp;&amp; ${/query/length} &gt; 0 }"
36
+ press=".resetPanel"
37
+ fesr:press="myh:apps:clearAll"
38
+ type="Transparent"
39
+ />
43
40
  </HBox>
44
41
  <VBox
45
- id="sampleQueriesList"
42
+ id="sampleQueriesContainer"
46
43
  renderType="Bare"
47
- items="{/sampleQueries}"
48
- justifyContent="SpaceBetween"
49
- class="sapUiTinyMarginTop"
44
+ visible="{= ${/searchStatus} === 'idle' }"
45
+ class="sapUiTinyMarginBottom"
50
46
  >
51
- <HBox id="sampleQuery" renderType="Bare">
52
- <FormattedText
53
- id="number"
54
- htmlText="&lt;em style='color:var(--sapContent_LabelColor)'&gt;{index}.&lt;/em&gt;"
55
- class="sapUiTinyMarginTop sapUiTinyMarginEnd"
56
- />
57
- <FormattedText
58
- id="query"
59
- htmlText="&lt;em style='color:var(--sapContent_LabelColor)'&gt;{query}&lt;/em&gt;"
60
- class="sapUiTinyMarginTop"
61
- />
47
+ <HBox id="sampleQueriesHeader" alignItems="Center" renderType="Bare">
48
+ <core:Icon src="sap-icon://sys-help" color="Neutral" size="0.875rem" class="sapUiTinyMarginEnd" />
49
+ <Label id="sampleQueries" text="{i18n>sampleQueries}" />
62
50
  </HBox>
51
+ <VBox id="sampleQueriesList" renderType="Bare" items="{/sampleQueries}" justifyContent="SpaceBetween">
52
+ <HBox id="sampleQuery" renderType="Bare">
53
+ <FormattedText
54
+ id="number"
55
+ htmlText="&lt;em style='color:var(--sapContent_LabelColor)'&gt;{index}.&lt;/em&gt;"
56
+ class="sapUiTinyMarginTop sapUiTinyMarginEnd"
57
+ />
58
+ <FormattedText
59
+ id="query"
60
+ htmlText="&lt;em style='color:var(--sapContent_LabelColor)'&gt;{query}&lt;/em&gt;"
61
+ class="sapUiTinyMarginTop"
62
+ />
63
+ </HBox>
64
+ </VBox>
63
65
  </VBox>
64
66
  </VBox>
65
- </VBox>
66
67
 
67
- <!-- CONTENT AREA -->
68
- <VBox id="resultContent" renderType="Bare">
69
- <!-- RESULT AREA HEADER -->
70
- <VBox id="resultHeader" renderType="Bare" class="sapUiSmallMarginBeginEnd sapUiSmallMarginBottom">
71
- <HBox renderType="Bare" alignItems="Center" justifyContent="SpaceBetween" width="100%">
72
- <Title
73
- id="resultTitle"
74
- text="{= ${/suggestedAppsCount} > 0 ? ${i18n>resultTitle} + ' (' + ${/suggestedAppsCount} + ')' : ${i18n>resultTitle} }"
75
- titleStyle="H6"
76
- />
77
- <HBox
78
- id="footer"
79
- renderType="Bare"
80
- class="footer"
81
- alignItems="Center"
82
- visible="{= !${/hasError} &amp;&amp; ${/searchStatus} === 'complete' }"
83
- >
84
- <Label id="createdwithAI" text="{/aiPolicyText}" class="sapUiTinyMarginEnd" />
85
- <ToggleButton
86
- id="thumbsUp"
87
- icon="sap-icon://thumb-up"
88
- type="Transparent"
89
- tooltip="{i18n>thumbsUpButton}"
90
- pressed="{= ${/feedback/thumbsUp} }"
91
- press=".sendFeedback('thumbsUp')"
92
- fesr:press="myh:apps:thumbsUp"
93
- />
94
- <ToggleButton
95
- id="thumbsDown"
96
- icon="sap-icon://thumb-down"
97
- type="Transparent"
98
- tooltip="{i18n>thumbsDownButton}"
99
- pressed="{= ${/feedback/thumbsDown} }"
100
- press=".sendFeedback('thumbsDown')"
101
- fesr:press="myh:apps:thumbsDown"
102
- class="sapUiTinyMarginBegin"
68
+ <!-- CONTENT AREA -->
69
+ <VBox id="resultContent" renderType="Bare">
70
+ <!-- RESULT AREA HEADER -->
71
+ <VBox id="resultHeader" renderType="Bare" class="sapUiTinyMarginTop sapUiSmallMarginBeginEnd sapUiSmallMarginBottom">
72
+ <HBox renderType="Bare" alignItems="Center" justifyContent="SpaceBetween" width="100%">
73
+ <Title
74
+ id="resultTitle"
75
+ text="{= ${/suggestedAppsCount} > 0 ? ${i18n>resultTitle} + ' (' + ${/suggestedAppsCount} + ')' : ${i18n>resultTitle} }"
76
+ titleStyle="H6"
103
77
  />
78
+ <HBox
79
+ id="footer"
80
+ renderType="Bare"
81
+ class="footer"
82
+ alignItems="Center"
83
+ visible="{= !${/hasError} &amp;&amp; ${/searchStatus} === 'complete' }"
84
+ >
85
+ <Label id="createdwithAI" text="{/aiPolicyText}" class="sapUiTinyMarginEnd" />
86
+ <ToggleButton
87
+ id="thumbsUp"
88
+ icon="sap-icon://thumb-up"
89
+ type="Transparent"
90
+ tooltip="{i18n>thumbsUpButton}"
91
+ pressed="{= ${/feedback/thumbsUp} }"
92
+ press=".sendFeedback('thumbsUp')"
93
+ fesr:press="myh:apps:thumbsUp"
94
+ />
95
+ <ToggleButton
96
+ id="thumbsDown"
97
+ icon="sap-icon://thumb-down"
98
+ type="Transparent"
99
+ tooltip="{i18n>thumbsDownButton}"
100
+ pressed="{= ${/feedback/thumbsDown} }"
101
+ press=".sendFeedback('thumbsDown')"
102
+ fesr:press="myh:apps:thumbsDown"
103
+ class="sapUiTinyMarginBegin"
104
+ />
105
+ </HBox>
104
106
  </HBox>
105
- </HBox>
106
- <Text
107
- id="resultDescription"
108
- text="{i18n>resultDescription}"
109
- visible="{= !${/hasError} &amp;&amp; ${/searchStatus} === 'complete' }"
110
- />
111
- <MessageStrip
112
- id="searchingMessage"
113
- type="Information"
114
- showIcon="true"
115
- class="sapUiTinyMarginTop"
116
- text="{i18n>searchingMessage}"
117
- visible="{= ${/searchStatus} === 'searching' }"
118
- />
119
- </VBox>
107
+ <Text
108
+ id="resultDescription"
109
+ text="{i18n>resultDescription}"
110
+ visible="{= !${/hasError} &amp;&amp; ${/searchStatus} === 'complete' }"
111
+ />
112
+ <MessageStrip
113
+ id="searchingMessage"
114
+ type="Information"
115
+ showIcon="true"
116
+ class="sapUiTinyMarginTop"
117
+ text="{i18n>searchingMessage}"
118
+ visible="{= ${/searchStatus} === 'searching' }"
119
+ />
120
+ </VBox>
120
121
 
121
- <!-- SUGGESTION LIST CONTAINER -->
122
- <ScrollContainer id="resultsContainer" vertical="true" class="suggestionListContainer">
122
+ <!-- SUGGESTION LIST CONTAINER -->
123
123
  <!-- SEARCHING ANIMATION -->
124
124
  <VBox
125
125
  id="lodingAnimationContainer"
@@ -142,55 +142,54 @@
142
142
  selectionChange=".onListSelectionChange"
143
143
  class="appSuggestionList"
144
144
  />
145
- </ScrollContainer>
146
145
 
147
- <!-- SEARCH ILLUSTRATION CONTAINER -->
148
- <VBox
149
- id="beforeSearchContainer"
150
- renderType="Bare"
151
- height="23.3125rem"
152
- justifyContent="Center"
153
- class="illustratedMessageContainer"
154
- visible="{= ${/searchStatus} === 'idle' }"
155
- >
156
- <!-- BEFORE SEARCH ILLUSTRATION -->
157
- <IllustratedMessage
158
- id="beforeSearch"
159
- illustrationSize="Medium"
160
- src="sap-illustration://SimpleMagnifier"
161
- description="{i18n>beforeSearchDescription}"
146
+ <!-- SEARCH ILLUSTRATION CONTAINER -->
147
+ <VBox
148
+ id="beforeSearchContainer"
149
+ renderType="Bare"
150
+ justifyContent="Center"
151
+ class="illustratedMessageContainer"
162
152
  visible="{= ${/searchStatus} === 'idle' }"
163
- />
164
- </VBox>
153
+ >
154
+ <!-- BEFORE SEARCH ILLUSTRATION -->
155
+ <IllustratedMessage
156
+ id="beforeSearch"
157
+ illustrationSize="Dot"
158
+ src="sap-illustration://SimpleMagnifier"
159
+ description="{i18n>beforeSearchDescription}"
160
+ visible="{= ${/searchStatus} === 'idle' }"
161
+ />
162
+ </VBox>
165
163
 
166
- <!-- GENERIC ERROR CONTAINER -->
167
- <VBox
168
- id="errorContainer"
169
- renderType="Bare"
170
- height="29.3125rem"
171
- class="illustratedMessageContainer"
172
- visible="{/hasError}"
173
- justifyContent="Center"
174
- >
175
- <!-- NO RESULTS FOUND -->
176
- <IllustratedMessage
177
- id="noResultsFound"
178
- illustrationSize="Medium"
179
- title="{i18n>validationErrorTitle}"
180
- description="{/errorDescription}"
181
- src="sap-illustration://SimpleNotFoundMagnifier"
182
- visible="{= ${/errorType} === 'noResultsFound' }"
183
- />
184
- <!-- SERVICE INTERRUPTED -->
185
- <IllustratedMessage
186
- id="serviceError"
187
- illustrationSize="Medium"
188
- title="{i18n>serviceErrorTitle}"
189
- description="{/errorDescription}"
190
- illustrationType="sapIllus-SimpleConnection"
191
- visible="{= ${/errorType} === 'serviceError' }"
192
- />
164
+ <!-- GENERIC ERROR CONTAINER -->
165
+ <VBox
166
+ id="errorContainer"
167
+ renderType="Bare"
168
+ height="29.3125rem"
169
+ class="illustratedMessageContainer"
170
+ visible="{/hasError}"
171
+ justifyContent="Center"
172
+ >
173
+ <!-- NO RESULTS FOUND -->
174
+ <IllustratedMessage
175
+ id="noResultsFound"
176
+ illustrationSize="Medium"
177
+ title="{i18n>validationErrorTitle}"
178
+ description="{/errorDescription}"
179
+ illustrationType="sapIllus-PageNotFound"
180
+ visible="{= ${/errorType} === 'noResultsFound' }"
181
+ />
182
+ <!-- SERVICE INTERRUPTED -->
183
+ <IllustratedMessage
184
+ id="serviceError"
185
+ illustrationSize="Medium"
186
+ title="{i18n>serviceErrorTitle}"
187
+ description="{/errorDescription}"
188
+ illustrationType="sapIllus-SimpleConnection"
189
+ visible="{= ${/errorType} === 'serviceError' }"
190
+ />
191
+ </VBox>
193
192
  </VBox>
194
- </VBox>
193
+ </ScrollContainer>
195
194
  </VBox>
196
195
  </core:FragmentDefinition>
@@ -0,0 +1,8 @@
1
+ declare module "sap/cux/home/utils/placeholder/CardsPlaceholder" {
2
+ /*!
3
+ * SAP UI development toolkit for HTML5 (SAPUI5)
4
+ * * (c) Copyright 2009-2025 SAP SE. All rights reserved
5
+ */
6
+ function getCardsPlaceholder(): string;
7
+ }
8
+ //# sourceMappingURL=CardsPlaceholder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardsPlaceholder.d.ts","sourceRoot":"../../../../../../..","sources":["src/sap/cux/home/utils/placeholder/CardsPlaceholder.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,iDAAiD,CAAC;IACjE;;;OAGG;IACH,SAAgB,mBAAmB,IAAI,MAAM,CAwT5C;CAEA"}