@sapui5/sap.cux.home 1.141.0 → 1.142.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 (148) hide show
  1. package/package.json +1 -1
  2. package/src/sap/cux/home/.library +1 -1
  3. package/src/sap/cux/home/AdvancedSettingsPanel.d.ts.map +1 -1
  4. package/src/sap/cux/home/AdvancedSettingsPanel.js +0 -1
  5. package/src/sap/cux/home/AdvancedSettingsPanel.js.map +1 -1
  6. package/src/sap/cux/home/AdvancedSettingsPanel.ts +0 -1
  7. package/src/sap/cux/home/App.d.ts.map +1 -1
  8. package/src/sap/cux/home/App.js +6 -1
  9. package/src/sap/cux/home/App.js.map +1 -1
  10. package/src/sap/cux/home/App.ts +7 -1
  11. package/src/sap/cux/home/AppsAdditionPanel.d.ts +1 -0
  12. package/src/sap/cux/home/AppsAdditionPanel.d.ts.map +1 -1
  13. package/src/sap/cux/home/AppsAdditionPanel.js +59 -58
  14. package/src/sap/cux/home/AppsAdditionPanel.js.map +1 -1
  15. package/src/sap/cux/home/AppsAdditionPanel.ts +39 -33
  16. package/src/sap/cux/home/AppsContainer.d.ts +5 -1
  17. package/src/sap/cux/home/AppsContainer.d.ts.map +1 -1
  18. package/src/sap/cux/home/AppsContainer.js +30 -16
  19. package/src/sap/cux/home/AppsContainer.js.map +1 -1
  20. package/src/sap/cux/home/AppsContainer.ts +29 -13
  21. package/src/sap/cux/home/BaseAppPanel.d.ts +2 -1
  22. package/src/sap/cux/home/BaseAppPanel.d.ts.map +1 -1
  23. package/src/sap/cux/home/BaseAppPanel.js +2 -1
  24. package/src/sap/cux/home/BaseAppPanel.js.map +1 -1
  25. package/src/sap/cux/home/BaseAppPanel.ts +4 -2
  26. package/src/sap/cux/home/BaseContainer.d.ts +8 -0
  27. package/src/sap/cux/home/BaseContainer.d.ts.map +1 -1
  28. package/src/sap/cux/home/BaseContainer.js +26 -4
  29. package/src/sap/cux/home/BaseContainer.js.map +1 -1
  30. package/src/sap/cux/home/BaseContainer.ts +26 -3
  31. package/src/sap/cux/home/BaseContainerRenderer.d.ts.map +1 -1
  32. package/src/sap/cux/home/BaseContainerRenderer.js.map +1 -1
  33. package/src/sap/cux/home/BaseContainerRenderer.ts +1 -1
  34. package/src/sap/cux/home/BasePanel.d.ts +7 -0
  35. package/src/sap/cux/home/BasePanel.d.ts.map +1 -1
  36. package/src/sap/cux/home/BasePanel.js +20 -0
  37. package/src/sap/cux/home/BasePanel.js.map +1 -1
  38. package/src/sap/cux/home/BasePanel.ts +16 -0
  39. package/src/sap/cux/home/CardsPanel.d.ts +7 -0
  40. package/src/sap/cux/home/CardsPanel.d.ts.map +1 -1
  41. package/src/sap/cux/home/CardsPanel.js +130 -111
  42. package/src/sap/cux/home/CardsPanel.js.map +1 -1
  43. package/src/sap/cux/home/CardsPanel.ts +17 -6
  44. package/src/sap/cux/home/ContentAdditionDialog.d.ts.map +1 -1
  45. package/src/sap/cux/home/ContentAdditionDialog.js +6 -2
  46. package/src/sap/cux/home/ContentAdditionDialog.js.map +1 -1
  47. package/src/sap/cux/home/ContentAdditionDialog.ts +5 -1
  48. package/src/sap/cux/home/FavAppPanel.d.ts +0 -10
  49. package/src/sap/cux/home/FavAppPanel.d.ts.map +1 -1
  50. package/src/sap/cux/home/FavAppPanel.js +258 -313
  51. package/src/sap/cux/home/FavAppPanel.js.map +1 -1
  52. package/src/sap/cux/home/FavAppPanel.ts +7 -56
  53. package/src/sap/cux/home/FrequentAppPanel.d.ts.map +1 -1
  54. package/src/sap/cux/home/FrequentAppPanel.js +5 -1
  55. package/src/sap/cux/home/FrequentAppPanel.js.map +1 -1
  56. package/src/sap/cux/home/FrequentAppPanel.ts +4 -0
  57. package/src/sap/cux/home/InsightsAdditionPanel.d.ts.map +1 -1
  58. package/src/sap/cux/home/InsightsAdditionPanel.js +3 -1
  59. package/src/sap/cux/home/InsightsAdditionPanel.js.map +1 -1
  60. package/src/sap/cux/home/InsightsAdditionPanel.ts +2 -0
  61. package/src/sap/cux/home/NewsAndPagesContainer.d.ts +0 -4
  62. package/src/sap/cux/home/NewsAndPagesContainer.d.ts.map +1 -1
  63. package/src/sap/cux/home/NewsAndPagesContainer.js +2 -2
  64. package/src/sap/cux/home/NewsAndPagesContainer.js.map +1 -1
  65. package/src/sap/cux/home/NewsAndPagesContainer.ts +4 -4
  66. package/src/sap/cux/home/NewsPanel.d.ts +17 -0
  67. package/src/sap/cux/home/NewsPanel.d.ts.map +1 -1
  68. package/src/sap/cux/home/NewsPanel.js +90 -57
  69. package/src/sap/cux/home/NewsPanel.js.map +1 -1
  70. package/src/sap/cux/home/NewsPanel.ts +50 -22
  71. package/src/sap/cux/home/NewsSettingsPanel.d.ts +42 -6
  72. package/src/sap/cux/home/NewsSettingsPanel.d.ts.map +1 -1
  73. package/src/sap/cux/home/NewsSettingsPanel.js +219 -81
  74. package/src/sap/cux/home/NewsSettingsPanel.js.map +1 -1
  75. package/src/sap/cux/home/NewsSettingsPanel.ts +215 -80
  76. package/src/sap/cux/home/Page.d.ts.map +1 -1
  77. package/src/sap/cux/home/Page.js +4 -1
  78. package/src/sap/cux/home/Page.js.map +1 -1
  79. package/src/sap/cux/home/Page.ts +2 -0
  80. package/src/sap/cux/home/PagePanel.d.ts.map +1 -1
  81. package/src/sap/cux/home/PagePanel.js +1 -1
  82. package/src/sap/cux/home/PagePanel.js.map +1 -1
  83. package/src/sap/cux/home/PagePanel.ts +2 -6
  84. package/src/sap/cux/home/PageSettingsPanel.d.ts.map +1 -1
  85. package/src/sap/cux/home/PageSettingsPanel.js +6 -3
  86. package/src/sap/cux/home/PageSettingsPanel.js.map +1 -1
  87. package/src/sap/cux/home/PageSettingsPanel.ts +2 -2
  88. package/src/sap/cux/home/RecentAppPanel.d.ts.map +1 -1
  89. package/src/sap/cux/home/RecentAppPanel.js +6 -0
  90. package/src/sap/cux/home/RecentAppPanel.js.map +1 -1
  91. package/src/sap/cux/home/RecentAppPanel.ts +5 -1
  92. package/src/sap/cux/home/RecommendedAppPanel.d.ts.map +1 -1
  93. package/src/sap/cux/home/RecommendedAppPanel.js +7 -0
  94. package/src/sap/cux/home/RecommendedAppPanel.js.map +1 -1
  95. package/src/sap/cux/home/RecommendedAppPanel.ts +6 -1
  96. package/src/sap/cux/home/SideBySideIconTabFilter.d.ts +10 -0
  97. package/src/sap/cux/home/SideBySideIconTabFilter.d.ts.map +1 -1
  98. package/src/sap/cux/home/SideBySideIconTabFilter.js +11 -1
  99. package/src/sap/cux/home/SideBySideIconTabFilter.js.map +1 -1
  100. package/src/sap/cux/home/SideBySideIconTabFilter.ts +11 -0
  101. package/src/sap/cux/home/SituationPanel.d.ts.map +1 -1
  102. package/src/sap/cux/home/SituationPanel.js +7 -2
  103. package/src/sap/cux/home/SituationPanel.js.map +1 -1
  104. package/src/sap/cux/home/SituationPanel.ts +2 -0
  105. package/src/sap/cux/home/SpaceInsightsPanel.js +1 -1
  106. package/src/sap/cux/home/SpaceInsightsPanel.js.map +1 -1
  107. package/src/sap/cux/home/SpaceInsightsPanel.ts +1 -1
  108. package/src/sap/cux/home/TaskPanel.d.ts.map +1 -1
  109. package/src/sap/cux/home/TaskPanel.js +3 -0
  110. package/src/sap/cux/home/TaskPanel.js.map +1 -1
  111. package/src/sap/cux/home/TaskPanel.ts +2 -1
  112. package/src/sap/cux/home/TilesPanel.d.ts.map +1 -1
  113. package/src/sap/cux/home/TilesPanel.js +10 -3
  114. package/src/sap/cux/home/TilesPanel.js.map +1 -1
  115. package/src/sap/cux/home/TilesPanel.ts +7 -3
  116. package/src/sap/cux/home/ToDoPanel.d.ts.map +1 -1
  117. package/src/sap/cux/home/ToDoPanel.js +29 -8
  118. package/src/sap/cux/home/ToDoPanel.js.map +1 -1
  119. package/src/sap/cux/home/ToDoPanel.ts +19 -8
  120. package/src/sap/cux/home/ToDosContainer.js +3 -3
  121. package/src/sap/cux/home/ToDosContainer.js.map +1 -1
  122. package/src/sap/cux/home/ToDosContainer.ts +1 -1
  123. package/src/sap/cux/home/i18n/messagebundle.properties +12 -6
  124. package/src/sap/cux/home/i18n/messagebundle_pt.properties +1 -1
  125. package/src/sap/cux/home/interface/AppsInterface.d.ts +5 -0
  126. package/src/sap/cux/home/interface/AppsInterface.d.ts.map +1 -1
  127. package/src/sap/cux/home/interface/AppsInterface.js.map +1 -1
  128. package/src/sap/cux/home/interface/AppsInterface.ts +6 -0
  129. package/src/sap/cux/home/themes/base/AppsContainer.less +12 -1
  130. package/src/sap/cux/home/themes/base/BaseLayout.less +11 -0
  131. package/src/sap/cux/home/themes/base/InsightsContainer.less +4 -0
  132. package/src/sap/cux/home/themes/base/ToDosContainer.less +4 -0
  133. package/src/sap/cux/home/utils/FESRUtil.d.ts +30 -0
  134. package/src/sap/cux/home/utils/FESRUtil.d.ts.map +1 -1
  135. package/src/sap/cux/home/utils/FESRUtil.js +36 -1
  136. package/src/sap/cux/home/utils/FESRUtil.js.map +1 -1
  137. package/src/sap/cux/home/utils/FESRUtil.ts +36 -0
  138. package/src/sap/cux/home/utils/PXFeedback.d.ts +4 -0
  139. package/src/sap/cux/home/utils/PXFeedback.d.ts.map +1 -0
  140. package/src/sap/cux/home/utils/PXFeedback.js +28 -0
  141. package/src/sap/cux/home/utils/PXFeedback.js.map +1 -0
  142. package/src/sap/cux/home/utils/PXFeedback.ts +19 -0
  143. package/src/sap/cux/home/utils/PageManager.d.ts +0 -4
  144. package/src/sap/cux/home/utils/PageManager.d.ts.map +1 -1
  145. package/src/sap/cux/home/utils/PageManager.js +6 -6
  146. package/src/sap/cux/home/utils/PageManager.js.map +1 -1
  147. package/src/sap/cux/home/utils/PageManager.ts +6 -5
  148. package/src/sap/cux/home/utils/fragment/appsAdditionContent.fragment.xml +1 -1
@@ -120,6 +120,7 @@ sap.ui.define(["sap/base/Log", "sap/m/GenericTile", "sap/m/Panel", "sap/m/librar
120
120
  this.addStyleClass("sapCuxAppsContainer");
121
121
  this.addCustomSetting("text", this._i18nBundle.getText("myAppMsg"));
122
122
  this._attachRouteChangeEvent();
123
+ this._currentDeviceType = this.getDeviceType();
123
124
  },
124
125
  /**
125
126
  * Attaches an event handler to monitor route changes and manage application state accordingly.
@@ -283,13 +284,6 @@ sap.ui.define(["sap/base/Log", "sap/m/GenericTile", "sap/m/Panel", "sap/m/librar
283
284
  // don't wait for personalization to complete
284
285
  void panel.applyPersonalization(true);
285
286
  }
286
- let tiles = [];
287
- let apps = panel.getApps();
288
- tiles = panel.fetchTileVisualization(tiles);
289
- _this4.fireEvent("appsLoaded", {
290
- apps,
291
- tiles
292
- });
293
287
  });
294
288
  }
295
289
  }();
@@ -322,6 +316,14 @@ sap.ui.define(["sap/base/Log", "sap/m/GenericTile", "sap/m/Panel", "sap/m/librar
322
316
  let items = isPhone ? this._generateMobileCards([...groups, ...apps], panel.getId()) : this._generateTiles([...groups, ...apps]);
323
317
  this._addWrapperContent(wrapper, items, aggregationName);
324
318
  this._updatePanelContentVisibility(panel);
319
+ if (panel.isLoaded()) {
320
+ let tiles = [];
321
+ tiles = panel.fetchTileVisualization(tiles);
322
+ this.fireEvent("appsLoaded", {
323
+ apps,
324
+ tiles
325
+ });
326
+ }
325
327
  },
326
328
  /**
327
329
  * Updates the visibility of the panel's content based on the current state and device type.
@@ -349,9 +351,10 @@ sap.ui.define(["sap/base/Log", "sap/m/GenericTile", "sap/m/Panel", "sap/m/librar
349
351
  * Generates generic tile based on app.
350
352
  * @private
351
353
  * @param {sap.cux.home.App} app - App.
354
+ * @param {string} [width="100%"] - Tile width (default "100%", pass "15rem" for fixed mobile layout).
352
355
  * @returns {sap.m.GenericTile}.
353
356
  */
354
- _getAppTile: function _getAppTile(app) {
357
+ _getAppTile: function _getAppTile(app, width = "100%") {
355
358
  const isPhone = this.getDeviceType() === DeviceType.Mobile;
356
359
  const actions = app.getAggregation("menuItems") || [];
357
360
  const tileId = isPhone ? `${app.getId()}-mobile-tile` : `${app.getId()}-tile`;
@@ -369,16 +372,17 @@ sap.ui.define(["sap/base/Log", "sap/m/GenericTile", "sap/m/Panel", "sap/m/librar
369
372
  dropAreaOffset: 4,
370
373
  subheader: app.getSubTitle(),
371
374
  press: e => app._onPress(e),
372
- width: isPhone ? "15rem" : "100%"
375
+ width
373
376
  }).addStyleClass("tileLayout sapMGTTwoByHalf");
374
377
  },
375
378
  /**
376
379
  * Generates generic tile based on group.
377
380
  * @private
378
381
  * @param {sap.cux.home.Group} group - Group.
382
+ * @param {string} [width="100%"] - Tile width (default "100%", pass "15rem" for fixed mobile layout).
379
383
  * @returns {sap.m.GenericTile}.
380
384
  */
381
- _getGroupTile: function _getGroupTile(group) {
385
+ _getGroupTile: function _getGroupTile(group, width = "100%") {
382
386
  const isPhone = this.getDeviceType() === DeviceType.Mobile;
383
387
  const actions = group.getAggregation("menuItems") || [];
384
388
  const tileId = isPhone ? `${group.getId()}-mobile-tile` : `${group.getId()}-tile`;
@@ -395,7 +399,7 @@ sap.ui.define(["sap/base/Log", "sap/m/GenericTile", "sap/m/Panel", "sap/m/librar
395
399
  dropAreaOffset: 4,
396
400
  tileBadge: group.getNumber(),
397
401
  press: e => group._onPress(e),
398
- width: isPhone ? "15rem" : "100%"
402
+ width
399
403
  }).addStyleClass("tileLayout sapMGTTwoByHalf").data("groupId", group.getGroupId());
400
404
  },
401
405
  /**
@@ -566,9 +570,16 @@ sap.ui.define(["sap/base/Log", "sap/m/GenericTile", "sap/m/Panel", "sap/m/librar
566
570
  */
567
571
  adjustLayout: function _adjustLayout() {
568
572
  const isPhone = this.getDeviceType() === DeviceType.Mobile;
573
+ const currentIsPhone = this._currentDeviceType === DeviceType.Mobile;
569
574
  const selectedPanel = this._getSelectedPanel();
570
575
  this.setTileWidth(selectedPanel);
571
576
 
577
+ // Only proceed if device type changed between mobile and non-mobile
578
+ if (isPhone === currentIsPhone) {
579
+ return;
580
+ }
581
+ this._currentDeviceType = this.getDeviceType();
582
+
572
583
  //hide actions if the device is a phone
573
584
  this.toggleActionButtons(!isPhone);
574
585
  const panels = this.getContent();
@@ -601,14 +612,16 @@ sap.ui.define(["sap/base/Log", "sap/m/GenericTile", "sap/m/Panel", "sap/m/librar
601
612
  */
602
613
  _generateMobileCards: function _generateMobileCards(items, currentPanelId) {
603
614
  const panels = [];
615
+ const isSinglePanel = items.length <= 7;
616
+ const tileWidth = isSinglePanel ? "100%" : "15rem";
604
617
  for (let i = 0; i < items.length; i += 7) {
605
618
  const panelItems = items.slice(i, i + 7);
606
619
  const panel = new Panel(`${currentPanelId}--${i}`, {
607
620
  backgroundDesign: BackgroundDesign.Solid,
608
621
  height: "23.5rem",
609
- width: "17rem",
610
- content: this._generateTiles(panelItems)
611
- }).addStyleClass("sapUiMobileAppsCard appPanelBorder myAppMFBContent");
622
+ width: isSinglePanel ? "100%" : "17rem",
623
+ content: this._generateTiles(panelItems, tileWidth)
624
+ }).addStyleClass(`sapUiMobileAppsCard appPanelBorder myAppMFBContent ${isSinglePanel ? "mobileAdaptiveWidth" : ""}`);
612
625
  panels.push(panel);
613
626
  }
614
627
  return panels;
@@ -618,10 +631,11 @@ sap.ui.define(["sap/base/Log", "sap/m/GenericTile", "sap/m/Panel", "sap/m/librar
618
631
  *
619
632
  * @private
620
633
  * @param {BaseApp[]} items - Apps/Groups for which tiles has to be generated.
634
+ * @param {string} [width="100%"] - Width of each generated tile.
621
635
  * @returns {sap.m.GenericTile[]} The generated tiles.
622
636
  */
623
- _generateTiles: function _generateTiles(items) {
624
- return items.map(item => item instanceof Group ? this._getGroupTile(item) : this._getAppTile(item));
637
+ _generateTiles: function _generateTiles(items, width = "100%") {
638
+ return items.map(item => item instanceof Group ? this._getGroupTile(item, width) : this._getAppTile(item, width));
625
639
  },
626
640
  /**
627
641
  * Adds given items into the wrapper.
@@ -1 +1 @@
1
- {"version":3,"file":"AppsContainer.js","names":["sap","ui","define","Log","GenericTile","Panel","sap_m_library","EventBus","Parameters","S4MyHome","__BaseAppPersPanel","__BaseContainer","__Group","__RecommendedAppPanel","___utils_DataFormatUtils","___utils_Device","___utils_placeholder_AppsPlaceholder","_interopRequireDefault","obj","__esModule","default","_catch","body","recover","result","e","then","BackgroundDesign","FrameType","GenericTileMode","GenericTileScope","TileSizeBehavior","BaseAppPersPanel","BaseContainer","Group","RecommendedAppPanel","getLeanURL","calculateCardWidth","DeviceType","fetchElementProperties","getAppsPlaceholder","getDefaultAppColor","sLegendName","key","value","get","name","assigned","CONSTANTS","PLACEHOLDER_ITEMS_COUNT","MIN_TILE_WIDTH","MAX_TILE_WIDTH","AppsContainer","extend","metadata","events","appsLoaded","parameters","apps","type","tiles","renderer","apiVersion","constructor","_constructor","id","settings","BaseContainer.prototype.constructor.call","_isInitialRender","init","_init","BaseContainer.prototype.init.call","setProperty","_i18nBundle","getText","eventBus","getInstance","subscribe","channelId","eventId","data","showRecommendation","firstAppsPanel","getContent","getProperty","addStyleClass","addCustomSetting","_attachRouteChangeEvent","_this","handleRouteChange","event","show","getParameter","_temp2","_temp","_appSwitched","showPersistedDialog","Promise","resolve","load","_setPanelsDirty","reject","attachRouteMatched","error","warning","Error","message","String","onBeforeRendering","_onBeforeRendering","_attachPanelSupportedEvent","adjustLayout","BaseContainer.prototype.onBeforeRendering.call","_removeUnsupportedPanels","onAfterRendering","_onAfterRendering","_this2","BaseContainer.prototype.onAfterRendering.call","_activateRecommendationTabPanel","_load","_this3","selectedPanels","getPanels","all","map","selectedPanel","_setApps","_getPanels","isPhone","getDeviceType","Mobile","_getSelectedPanel","_showPersistedDialog","firePersistDialog","panels","panel","setDesktopViewDirty","setMobileViewDirty","_generatePlaceholder","isLoaded","destroyAggregation","placeholderApps","generateApps","Array","fill","status","setApps","_updatePanelContent","_this4","_temp5","_temp4","fireEvent","_temp3","isDirty","isMobileDirty","loadApps","setLoaded","applyPersonalization","getApps","fetchTileVisualization","showErrorCard","getTitle","groups","getAggregation","wrapper","_generateMobileAppsWrapper","_generateAppsWrapper","aggregationName","items","_generateMobileCards","getId","_generateTiles","_addWrapperContent","_updatePanelContentVisibility","appsWrapper","_generateDesktopAppsWrapper","mobileAppsWrapper","errorCard","_generateErrorMessage","hasApps","length","setVisible","getParent","setWidth","_getAppTile","app","actions","tileId","scope","ActionMore","Display","state","getStatus","mode","IconMode","sizeBehavior","Small","header","backgroundColor","getBgColor","tileIcon","getIcon","url","getUrl","frameType","TwoByHalf","renderOnThemeChange","dropAreaOffset","subheader","getSubTitle","press","_onPress","width","_getGroupTile","group","tileBadge","getNumber","getGroupId","_onPanelSelect","_this5","BaseContainer.prototype._onPanelSelect.call","_refreshAllPanels","_this6","refreshPanel","_refreshPanel","_this7","_toggleTabView","supportedPanels","filter","isSupported","iconTabBarControl","_getInnerControl","toggleStyleClass","_onPanelSupported","currentPanel","setSupported","_togglePanelVisibility","isVisible","iconTabBar","tabs","getItems","selectedTab","find","tab","getKey","unSupportedPanels","hasListeners","attachSupported","bind","_this8","recommendedPanel","_temp6","_enableRecommendationTab","setTileWidth","_setTileWidth","minWidth","maxWidth","getDomRef","domProperties","availableWidth","Object","values","slice","reduce","propertyValue","tileCount","cardLayoutConfig","containerWidth","totalCards","gap","skipDeviceCheck","clampedWidth","getLayout","_adjustLayout","toggleActionButtons","forEach","currentPanelId","i","panelItems","backgroundDesign","Solid","height","content","push","item","addAggregation","_showErrorCard","getGenericPlaceholderContent","_getGenericPlaceholderContent"],"sources":["AppsContainer.ts"],"sourcesContent":["/*!\n * SAP UI development toolkit for HTML5 (SAPUI5)\n * * (c) Copyright 2009-2025 SAP SE. All rights reserved\n */\n\nimport Log from \"sap/base/Log\";\nimport GridContainer from \"sap/f/GridContainer\";\nimport GenericTile from \"sap/m/GenericTile\";\nimport HeaderContainer from \"sap/m/HeaderContainer\";\nimport IconTabBar, { IconTabBar$SelectEvent } from \"sap/m/IconTabBar\";\nimport IconTabFilter from \"sap/m/IconTabFilter\";\nimport Panel from \"sap/m/Panel\";\nimport VBox from \"sap/m/VBox\";\nimport { BackgroundDesign, FrameType, GenericTileMode, GenericTileScope, LoadState, TileSizeBehavior } from \"sap/m/library\";\nimport Event from \"sap/ui/base/Event\";\nimport type { MetadataOptions } from \"sap/ui/core/Element\";\nimport EventBus from \"sap/ui/core/EventBus\";\nimport Parameters from \"sap/ui/core/theming/Parameters\";\nimport S4MyHome from \"sap/ushell/api/S4MyHome\";\nimport App from \"./App\";\nimport { $AppsContainerSettings } from \"./AppsContainer\";\nimport BaseApp from \"./BaseApp\";\nimport BaseAppPanel, { BaseAppPanel$SupportedEvent } from \"./BaseAppPanel\";\nimport BaseAppPersPanel from \"./BaseAppPersPanel\";\nimport BaseContainer from \"./BaseContainer\";\nimport Group from \"./Group\";\nimport MenuItem from \"./MenuItem\";\nimport RecommendedAppPanel from \"./RecommendedAppPanel\";\nimport { ICustomVisualization } from \"./interface/AppsInterface\";\nimport { getLeanURL } from \"./utils/DataFormatUtils\";\nimport { calculateCardWidth, DeviceType, fetchElementProperties } from \"./utils/Device\";\nimport { getAppsPlaceholder } from \"./utils/placeholder/AppsPlaceholder\";\n\nconst getDefaultAppColor = () => {\n\tconst sLegendName = \"sapLegendColor9\";\n\treturn {\n\t\tkey: sLegendName,\n\t\tvalue: Parameters.get({\n\t\t\tname: sLegendName\n\t\t}),\n\t\tassigned: false\n\t};\n};\n\nconst CONSTANTS = {\n\tPLACEHOLDER_ITEMS_COUNT: 5,\n\tMIN_TILE_WIDTH: 304,\n\tMAX_TILE_WIDTH: 456\n};\n\n/**\n *\n * Container class for managing and storing apps.\n *\n * @extends BaseContainer\n *\n * @author SAP SE\n * @version 0.0.1\n * @since 1.121\n *\n * @private\n * @ui5-restricted ux.eng.s4producthomes1\n *\n * @alias sap.cux.home.AppsContainer\n */\nexport default class AppsContainer extends BaseContainer {\n\tprivate _isInitialRender = true;\n\tprivate _appSwitched!: boolean;\n\tstatic readonly renderer = {\n\t\t...BaseContainer.renderer,\n\t\tapiVersion: 2\n\t};\n\tstatic readonly metadata: MetadataOptions = {\n\t\tevents: {\n\t\t\t/**\n\t\t\t * Event is fired when apps are loaded.\n\t\t\t */\n\t\t\tappsLoaded: {\n\t\t\t\tparameters: {\n\t\t\t\t\tapps: { type: \"sap.cux.home.App[]\" },\n\t\t\t\t\ttiles: { type: \"sap.m.GenericTile[]\" }\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tconstructor(idOrSettings?: string | $AppsContainerSettings);\n\tconstructor(id?: string, settings?: $AppsContainerSettings);\n\t/**\n\t * Constructor for a new app container.\n\t *\n\t * @param {string} [id] ID for the new control, generated automatically if an ID is not provided\n\t * @param {object} [settings] Initial settings for the new control\n\t */\n\tpublic constructor(id?: string, settings?: $AppsContainerSettings) {\n\t\tsuper(id, settings);\n\t}\n\n\t/**\n\t * Init lifecycle method\n\t *\n\t * @private\n\t * @override\n\t */\n\tpublic init(): void {\n\t\tsuper.init();\n\t\tthis.setProperty(\"title\", this._i18nBundle?.getText(\"appsTitle\"));\n\t\t// Subscribe to recommendation setting change event\n\t\tconst eventBus = EventBus.getInstance();\n\t\teventBus.subscribe(\"importChannel\", \"recommendationSettingChanged\", (channelId?: string, eventId?: string, data?: object) => {\n\t\t\tconst showRecommendation = (data as { showRecommendation: boolean }).showRecommendation;\n\t\t\tif (!showRecommendation) {\n\t\t\t\tconst firstAppsPanel = this.getContent()?.[0];\n\t\t\t\tthis.setProperty(\"selectedKey\", firstAppsPanel?.getProperty(\"key\"));\n\t\t\t}\n\t\t});\n\n\t\t// disable lazy load for apps container as it's the hero element\n\t\tthis.setProperty(\"enableLazyLoad\", false);\n\t\tthis.addStyleClass(\"sapCuxAppsContainer\");\n\t\tthis.addCustomSetting(\"text\", this._i18nBundle.getText(\"myAppMsg\") as string);\n\t\tthis._attachRouteChangeEvent();\n\t}\n\n\t/**\n\t * Attaches an event handler to monitor route changes and manage application state accordingly.\n\t * @private\n\t *\n\t * @returns {void}\n\t */\n\n\tprivate _attachRouteChangeEvent(): void {\n\t\tconst handleRouteChange = async (event: Event<{ isMyHomeRoute: boolean }>) => {\n\t\t\tconst show = event.getParameter(\"isMyHomeRoute\");\n\t\t\tif (show) {\n\t\t\t\tif (this._appSwitched) {\n\t\t\t\t\tthis._appSwitched = false;\n\t\t\t\t\tthis.showPersistedDialog();\n\t\t\t\t\tawait this.load();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._setPanelsDirty();\n\t\t\t\tthis._appSwitched = true;\n\t\t\t}\n\t\t};\n\n\t\ttry {\n\t\t\tS4MyHome.attachRouteMatched({}, handleRouteChange, this);\n\t\t} catch (error) {\n\t\t\tLog.warning(\"Unable to attach route change handler\", error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\t/**\n\t * onBeforeRendering lifecycle method\n\t *\n\t * @private\n\t * @override\n\t */\n\tpublic onBeforeRendering() {\n\t\tif (this._isInitialRender) {\n\t\t\tthis._isInitialRender = false;\n\t\t\tthis._attachPanelSupportedEvent();\n\t\t}\n\n\t\tthis.adjustLayout();\n\t\tsuper.onBeforeRendering();\n\t\tthis._removeUnsupportedPanels();\n\t}\n\n\t/**\n\t * onAfterRendering lifecycle method\n\t *\n\t * @private\n\t * @override\n\t */\n\tpublic async onAfterRendering() {\n\t\tsuper.onAfterRendering();\n\t\t// activating the recommendation tab from appsContainer as personalization data in not available on init of panel.\n\t\tawait this._activateRecommendationTabPanel();\n\t}\n\n\t/**\n\t * Loads the AppsContainer section.\n\t * Overrides the load method of the BaseContainer.\n\t *\n\t * @private\n\t * @async\n\t * @override\n\t */\n\tpublic async load(): Promise<void> {\n\t\tconst selectedPanels = this.getPanels();\n\t\tawait Promise.all(selectedPanels.map((selectedPanel) => this._setApps(selectedPanel)));\n\t}\n\n\t/**\n\t * Retrieves the relevant panels based on the device type.\n\t *\n\t * @private\n\t * @returns {BaseAppPanel[]} An array of panels based on the device type.\n\t */\n\tprivate getPanels(): BaseAppPanel[] {\n\t\tconst isPhone = this.getDeviceType() === DeviceType.Mobile;\n\t\treturn (isPhone ? this.getContent() : [this._getSelectedPanel()]) as BaseAppPanel[];\n\t}\n\n\t/**\n\t * Triggers navigation actions for the currently relevant panels.\n\t *\n\t * @private\n\t * @returns {void}\n\t */\n\n\tprivate showPersistedDialog(): void {\n\t\tconst selectedPanels = this.getPanels();\n\t\tfor (const selectedPanel of selectedPanels) {\n\t\t\tselectedPanel.firePersistDialog();\n\t\t}\n\t}\n\n\t/**\n\t * Set all panels dirty state to true, to refresh all panels\n\t * @private\n\t */\n\tprivate _setPanelsDirty(): void {\n\t\tconst panels = this.getContent() as BaseAppPanel[];\n\t\tfor (const panel of panels) {\n\t\t\tpanel.setDesktopViewDirty(true);\n\t\t\tpanel.setMobileViewDirty(true);\n\t\t}\n\t}\n\n\t/**\n\t * Generate placeholer for the panel.\n\t * @private\n\t * @param {BaseAppPanel} panel - Panel for which placeholders has to be generated.\n\t */\n\tprivate _generatePlaceholder(panel: BaseAppPanel): void {\n\t\tif (!panel.isLoaded()) {\n\t\t\tpanel.destroyAggregation(\"apps\", true);\n\t\t\tconst placeholderApps = panel.generateApps(\n\t\t\t\tnew Array(CONSTANTS.PLACEHOLDER_ITEMS_COUNT).fill({ status: \"Loading\" }) as ICustomVisualization[]\n\t\t\t);\n\t\t\tpanel.setApps(placeholderApps);\n\t\t\tthis._updatePanelContent(panel);\n\t\t}\n\t}\n\n\t/**\n\t * Loads and sets the apps.\n\t * @private\n\t * @param {BaseAppPanel} panel - Panel for which apps has to be loaded.\n\t * @returns {Promise<void>} resolves when apps are loaded.\n\t */\n\tprivate async _setApps(panel: BaseAppPanel): Promise<void> {\n\t\ttry {\n\t\t\t// only load the apps if panel is in dirty state\n\t\t\tif (panel.isDirty() && panel.isMobileDirty()) {\n\t\t\t\tthis._generatePlaceholder(panel);\n\t\t\t\tawait panel.loadApps?.();\n\t\t\t\tif (this.getDeviceType() === DeviceType.Mobile) {\n\t\t\t\t\tpanel.setMobileViewDirty(false);\n\t\t\t\t} else {\n\t\t\t\t\tpanel.setDesktopViewDirty(false);\n\t\t\t\t}\n\t\t\t\tpanel.setLoaded(true);\n\t\t\t\tthis._updatePanelContent(panel);\n\n\t\t\t\tif (panel instanceof BaseAppPersPanel) {\n\t\t\t\t\t// don't wait for personalization to complete\n\t\t\t\t\tvoid panel.applyPersonalization(true);\n\t\t\t\t}\n\t\t\t\tlet tiles: GenericTile[] = [];\n\t\t\t\tlet apps = panel.getApps();\n\t\t\t\ttiles = panel.fetchTileVisualization(tiles);\n\t\t\t\tthis.fireEvent(\"appsLoaded\", { apps, tiles });\n\t\t\t}\n\n\t\t\t// fire panel loaded event\n\t\t\tpanel.fireEvent(\"loaded\");\n\t\t} catch (error: unknown) {\n\t\t\tthis.showErrorCard(panel);\n\t\t\tLog.error(`Error setting apps for panel: ${panel.getTitle()}`, error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\t/**\n\t * Updates the content of the panel by replacing existing items with new apps and groups.\n\t * This method selects the appropriate wrapper based on the device type, and add apps/group or mobile cards to the wrapper.\n\t *\n\t * @param {BaseAppPanel} panel - The panel whose content needs to be updated.\n\t * @returns {void}\n\t * @private\n\t */\n\tprivate _updatePanelContent(panel: BaseAppPanel): void {\n\t\tconst apps = panel.getApps() || [];\n\t\tconst groups = (panel.getAggregation(\"groups\") || []) as Group[];\n\t\tconst isPhone = this.getDeviceType() === DeviceType.Mobile;\n\t\tconst wrapper = isPhone ? panel._generateMobileAppsWrapper() : panel._generateAppsWrapper();\n\t\tconst aggregationName = isPhone ? \"content\" : \"items\";\n\t\twrapper.destroyAggregation(aggregationName);\n\t\tlet items = isPhone ? this._generateMobileCards([...groups, ...apps], panel.getId()) : this._generateTiles([...groups, ...apps]);\n\t\tthis._addWrapperContent(wrapper, items, aggregationName);\n\t\tthis._updatePanelContentVisibility(panel);\n\t}\n\n\t/**\n\t * Updates the visibility of the panel's content based on the current state and device type.\n\t * This method determines whether to display the apps or an error message based on the presence of apps and groups.\n\t * It also adjusts the visibility of different containers depending on whether the device is a phone or not.\n\t *\n\t * @param {BaseAppPanel} panel - The panel whose content visibility needs to be updated.\n\t * @returns {void}\n\t * @private\n\t */\n\tprivate _updatePanelContentVisibility(panel: BaseAppPanel): void {\n\t\tconst apps = panel.getApps() || [];\n\t\tconst groups = (panel.getAggregation(\"groups\") || []) as Group[];\n\t\tconst isPhone = this.getDeviceType() === DeviceType.Mobile;\n\t\tconst appsWrapper = panel._generateDesktopAppsWrapper();\n\t\tconst mobileAppsWrapper = panel._generateMobileAppsWrapper();\n\t\tconst errorCard = panel._generateErrorMessage();\n\t\tconst hasApps = [...apps, ...groups].length !== 0;\n\t\tappsWrapper.setVisible(hasApps && !isPhone);\n\t\tmobileAppsWrapper.setVisible(hasApps && isPhone);\n\t\t(mobileAppsWrapper.getParent() as VBox).setWidth(isPhone && hasApps ? \"100%\" : \"auto\");\n\t\terrorCard.setVisible(!hasApps);\n\t}\n\n\t/**\n\t * Generates generic tile based on app.\n\t * @private\n\t * @param {sap.cux.home.App} app - App.\n\t * @returns {sap.m.GenericTile}.\n\t */\n\tpublic _getAppTile(app: App): GenericTile {\n\t\tconst isPhone = this.getDeviceType() === DeviceType.Mobile;\n\t\tconst actions = (app.getAggregation(\"menuItems\") || []) as MenuItem[];\n\t\tconst tileId = isPhone ? `${app.getId()}-mobile-tile` : `${app.getId()}-tile`;\n\t\treturn new GenericTile(tileId, {\n\t\t\tscope: actions.length && !isPhone ? GenericTileScope.ActionMore : GenericTileScope.Display,\n\t\t\tstate: app.getStatus() as LoadState,\n\t\t\tmode: GenericTileMode.IconMode,\n\t\t\tsizeBehavior: TileSizeBehavior.Small,\n\t\t\theader: app.getTitle(),\n\t\t\tbackgroundColor: app.getBgColor() || getDefaultAppColor()?.key,\n\t\t\ttileIcon: app.getIcon(),\n\t\t\turl: getLeanURL(app.getUrl()),\n\t\t\tframeType: FrameType.TwoByHalf,\n\t\t\trenderOnThemeChange: true,\n\t\t\tdropAreaOffset: 4,\n\t\t\tsubheader: app.getSubTitle(),\n\t\t\tpress: (e) => app._onPress(e),\n\t\t\twidth: isPhone ? \"15rem\" : \"100%\"\n\t\t}).addStyleClass(\"tileLayout sapMGTTwoByHalf\");\n\t}\n\n\t/**\n\t * Generates generic tile based on group.\n\t * @private\n\t * @param {sap.cux.home.Group} group - Group.\n\t * @returns {sap.m.GenericTile}.\n\t */\n\tprivate _getGroupTile(group: Group): GenericTile {\n\t\tconst isPhone = this.getDeviceType() === DeviceType.Mobile;\n\t\tconst actions = (group.getAggregation(\"menuItems\") || []) as MenuItem[];\n\t\tconst tileId = isPhone ? `${group.getId()}-mobile-tile` : `${group.getId()}-tile`;\n\t\treturn new GenericTile(tileId, {\n\t\t\tscope: actions.length && !isPhone ? GenericTileScope.ActionMore : GenericTileScope.Display,\n\t\t\tstate: group.getStatus() as LoadState,\n\t\t\tmode: GenericTileMode.IconMode,\n\t\t\tsizeBehavior: TileSizeBehavior.Small,\n\t\t\theader: group.getTitle(),\n\t\t\tbackgroundColor: group.getBgColor() || getDefaultAppColor()?.key,\n\t\t\ttileIcon: group.getIcon(),\n\t\t\tframeType: FrameType.TwoByHalf,\n\t\t\trenderOnThemeChange: true,\n\t\t\tdropAreaOffset: 4,\n\t\t\ttileBadge: group.getNumber(),\n\t\t\tpress: (e) => group._onPress(e),\n\t\t\twidth: isPhone ? \"15rem\" : \"100%\"\n\t\t})\n\t\t\t.addStyleClass(\"tileLayout sapMGTTwoByHalf\")\n\t\t\t.data(\"groupId\", group.getGroupId()) as GenericTile;\n\t}\n\n\t/**\n\t * Overridden method for selection of panel in the IconTabBar.\n\t * Loads the apps in selected panel\n\t * @private\n\t * @returns {Promise<void>} resolves when apps are loaded on panel selection.\n\t */\n\tprotected async _onPanelSelect(event: IconTabBar$SelectEvent) {\n\t\tsuper._onPanelSelect(event);\n\t\tconst selectedPanel = this._getSelectedPanel() as BaseAppPanel;\n\t\tawait this._setApps(selectedPanel);\n\t}\n\n\t/**\n\t * Refresh apps for all the panels.\n\t * @private\n\t * @returns {Promise<void>} resolves when all panels are set to dirty and apps for current panel are refreshed.\n\t */\n\tpublic async _refreshAllPanels(): Promise<void> {\n\t\t//set all panels to dirty\n\t\tthis._setPanelsDirty();\n\t\t//set apps for current section\n\t\tawait this._setApps(this._getSelectedPanel() as BaseAppPanel);\n\t}\n\n\t/**\n\t * Refresh apps for selected panel.\n\t * @private\n\t * @param {BaseAppPanel} panel - Panel that has be refreshed.\n\t * @returns {Promise<void>} resolves when apps are refreshed.\n\t */\n\tpublic async refreshPanel(panel: BaseAppPanel): Promise<void> {\n\t\tpanel.setMobileViewDirty(true);\n\t\tpanel.setDesktopViewDirty(true);\n\t\tawait this._setApps(panel);\n\t}\n\n\t/**\n\t * Toggles the visibility of the tab view based on the supported panels.\n\t * @private\n\t */\n\tprivate _toggleTabView() {\n\t\tif (this.getDeviceType() !== DeviceType.Mobile) {\n\t\t\tconst panels = this.getContent() as BaseAppPanel[];\n\t\t\tconst supportedPanels = panels.filter((panel) => panel.isSupported());\n\t\t\tconst iconTabBarControl = this._getInnerControl() as IconTabBar;\n\t\t\ticonTabBarControl?.toggleStyleClass(\"sapUiITBHide\", supportedPanels.length === 1);\n\t\t}\n\t}\n\n\t/**\n\t * Handles the supported state of the current panel.\n\t * If the panel is supported, it adds the panel to the content.\n\t * If the panel is not supported, it removes the panel from the content.\n\t * @param {BaseAppPanel} currentPanel - The panel to handle the supported state for.\n\t * @private\n\t */\n\tprivate _onPanelSupported(currentPanel: BaseAppPanel, event: BaseAppPanel$SupportedEvent) {\n\t\tconst isSupported = event.getParameter(\"isSupported\") as boolean;\n\t\tcurrentPanel.setSupported(isSupported);\n\t\tthis._togglePanelVisibility(currentPanel, isSupported);\n\t\tthis._toggleTabView();\n\t}\n\n\t/**\n\t * Toggles the visibility of the panel.\n\t * @param {BaseAppPanel} panel - The panel to toggle the visibility for.\n\t * @param {boolean} isVisible - The visibility state of the panel.\n\t * @private\n\t */\n\tprivate _togglePanelVisibility(panel: BaseAppPanel, isVisible: boolean) {\n\t\tconst iconTabBar = this._getInnerControl() as IconTabBar;\n\t\tconst tabs = (iconTabBar?.getItems() as IconTabFilter[]) || [];\n\t\tconst selectedTab = tabs.find((tab) => tab.getKey() === panel.getKey());\n\t\tselectedTab?.setVisible(isVisible);\n\t}\n\n\t/**\n\t * Removes unsupported panels from the container.\n\t * @private\n\t */\n\tprivate _removeUnsupportedPanels() {\n\t\tconst panels = this.getContent() as BaseAppPanel[];\n\t\tconst unSupportedPanels = panels.filter((panel) => !panel.isSupported());\n\t\tfor (const panel of unSupportedPanels) {\n\t\t\tthis._togglePanelVisibility(panel, false);\n\t\t}\n\t\tthis._toggleTabView();\n\t}\n\n\t/**\n\t * Attaches an event handler to the \"supported\" event for each panel in the container.\n\t * @private\n\t */\n\tprivate _attachPanelSupportedEvent() {\n\t\tconst panels = this.getContent() as BaseAppPanel[];\n\t\tfor (const panel of panels) {\n\t\t\tif (!panel.hasListeners(\"supported\")) {\n\t\t\t\tpanel.attachSupported(this._onPanelSupported.bind(this, panel));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Calls the enable function to activate the recommendation tab for `RecommendedAppPanel`, unless the device is a mobile phone.\n\t *\n\t * @private\n\t */\n\tprivate async _activateRecommendationTabPanel(): Promise<void> {\n\t\tconst panels = this.getContent() as BaseAppPanel[];\n\t\tconst isPhone = this.getDeviceType() === DeviceType.Mobile;\n\t\tconst recommendedPanel = panels ? panels.find((panel) => panel instanceof RecommendedAppPanel) : null;\n\t\tif (recommendedPanel instanceof RecommendedAppPanel && !isPhone) {\n\t\t\tawait recommendedPanel._enableRecommendationTab();\n\t\t} else {\n\t\t\trecommendedPanel?.setSupported(false);\n\t\t}\n\t}\n\n\tpublic setTileWidth(panel: BaseAppPanel): void {\n\t\tconst minWidth = CONSTANTS.MIN_TILE_WIDTH; // in px\n\t\tconst maxWidth = CONSTANTS.MAX_TILE_WIDTH; // in px\n\n\t\tconst wrapper = panel._generateAppsWrapper()?.getDomRef() as Element;\n\t\tif (!wrapper) return;\n\n\t\tconst domProperties = fetchElementProperties(wrapper, [\"width\", \"padding-left\", \"padding-right\", \"margin-left\", \"margin-right\"]);\n\t\tconst availableWidth = Object.values(domProperties)\n\t\t\t.slice(1)\n\t\t\t.reduce((width, propertyValue) => width - propertyValue, domProperties[\"width\"]);\n\n\t\tconst apps = panel.getApps() || [];\n\t\tconst groups = (panel.getAggregation(\"groups\") || []) as Group[];\n\t\tconst tileCount = apps.length + groups.length;\n\n\t\tif (tileCount === 0 || availableWidth <= 0) return;\n\n\t\tconst cardLayoutConfig = {\n\t\t\tcontainerWidth: availableWidth,\n\t\t\ttotalCards: tileCount,\n\t\t\tminWidth: minWidth,\n\t\t\tmaxWidth: maxWidth,\n\t\t\tgap: 8,\n\t\t\tskipDeviceCheck: true\n\t\t};\n\n\t\tconst clampedWidth = calculateCardWidth(cardLayoutConfig);\n\n\t\tpanel.setProperty(\"tileWidth\", clampedWidth);\n\t\tpanel\n\t\t\t._generateAppsWrapper()\n\t\t\t.getLayout()\n\t\t\t.setProperty(\"columnSize\", `${clampedWidth / 16}rem`);\n\t}\n\n\t/**\n\t * Adjusts the layout and visibility based on the device type.\n\t *\n\t * This method adjusts the layout type and visibility of containers based on whether the device is a phone\n\t * or not. It sets the container's layout property, toggles visibility of panels and their containers, and\n\t * adjusts background design accordingly.\n\t *\n\t * @private\n\t * @returns {void}\n\t */\n\tpublic adjustLayout(): void {\n\t\tconst isPhone = this.getDeviceType() === DeviceType.Mobile;\n\t\tconst selectedPanel = this._getSelectedPanel() as BaseAppPanel;\n\t\tthis.setTileWidth(selectedPanel);\n\n\t\t//hide actions if the device is a phone\n\t\tthis.toggleActionButtons(!isPhone);\n\n\t\tconst panels = this.getContent() as BaseAppPanel[];\n\t\tpanels.forEach((panel) => {\n\t\t\t//if both the panels are dirty, then updated data will be loaded from onBeforeRendering, as layout change will trigger re-rendering\n\t\t\t//if both the panels are not dirty, i.e. doen't have any changes, then just toggle the visibility\n\t\t\tif (!panel.isDirty() && !panel.isMobileDirty()) {\n\t\t\t\tthis._updatePanelContentVisibility(panel);\n\t\t\t} else if (panel.isDirty() !== panel.isMobileDirty()) {\n\t\t\t\t//if one of the panels is dirty i.e. have updated data and other is not, then re-create the inner controls\n\t\t\t\tif (isPhone) {\n\t\t\t\t\tpanel.setMobileViewDirty(false);\n\t\t\t\t} else {\n\t\t\t\t\tpanel.setDesktopViewDirty(false);\n\t\t\t\t}\n\t\t\t\tthis._updatePanelContent(panel);\n\t\t\t}\n\t\t});\n\n\t\t//this is to handle scenario when unsupported propert is changed and then layout is changed.\n\t\tthis._removeUnsupportedPanels();\n\t}\n\n\t/**\n\t * Generates mobile card panel and add given apps/groups in the panel.\n\t *\n\t * @private\n\t * @param {BaseApp[]} items - Apps/Groups for which card panels has to be generated.\n\t * @param {string} currentPanelId - ID of the current panel.\n\t * @returns {sap.m.Panel} The newly created mobile card panel.\n\t */\n\tprivate _generateMobileCards(items: BaseApp[], currentPanelId?: string): Panel[] {\n\t\tconst panels: Panel[] = [];\n\t\tfor (let i = 0; i < items.length; i += 7) {\n\t\t\tconst panelItems = items.slice(i, i + 7);\n\t\t\tconst panel = new Panel(`${currentPanelId}--${i}`, {\n\t\t\t\tbackgroundDesign: BackgroundDesign.Solid,\n\t\t\t\theight: \"23.5rem\",\n\t\t\t\twidth: \"17rem\",\n\t\t\t\tcontent: this._generateTiles(panelItems)\n\t\t\t}).addStyleClass(\"sapUiMobileAppsCard appPanelBorder myAppMFBContent\");\n\t\t\tpanels.push(panel);\n\t\t}\n\t\treturn panels;\n\t}\n\n\t/**\n\t * Generates group/app generic tiles for given apps/groups.\n\t *\n\t * @private\n\t * @param {BaseApp[]} items - Apps/Groups for which tiles has to be generated.\n\t * @returns {sap.m.GenericTile[]} The generated tiles.\n\t */\n\tprivate _generateTiles(items: BaseApp[]): GenericTile[] {\n\t\treturn items.map((item) => (item instanceof Group ? this._getGroupTile(item) : this._getAppTile(item as App)));\n\t}\n\n\t/**\n\t * Adds given items into the wrapper.\n\t * @param {HeaderContainer | GridContainer} wrapper - wrapper for which items has to be added.\n\t * @param {Panel[] | GenericTile[]} items - items to be added.\n\t * @param {string} aggregationName - aggregation name to which items has to be added.\n\t * @private\n\t */\n\tprivate _addWrapperContent(wrapper: HeaderContainer | GridContainer, items: Panel[] | GenericTile[], aggregationName: string) {\n\t\twrapper.destroyAggregation(aggregationName);\n\t\titems.forEach((item) => {\n\t\t\twrapper.addAggregation(aggregationName, item);\n\t\t});\n\t}\n\n\t/**\n\t * Displays an error card in the provided panel.\n\t *\n\t * @param panel - The panel in which the error card should be displayed.\n\t */\n\tprivate showErrorCard(panel: BaseAppPanel): void {\n\t\tconst errorCard = panel._generateErrorMessage();\n\t\tconst appsWrapper = panel._generateDesktopAppsWrapper();\n\t\tconst mobileAppsWrapper = panel._generateMobileAppsWrapper();\n\t\tappsWrapper?.setVisible(false);\n\t\tmobileAppsWrapper?.setVisible(false);\n\t\terrorCard?.setVisible(true);\n\t}\n\n\t/**\n\t * Retrieves the generic placeholder content for the Apps container.\n\t *\n\t * @returns {string} The HTML string representing the Apps container's placeholder content.\n\t */\n\tprotected getGenericPlaceholderContent(): string {\n\t\treturn getAppsPlaceholder();\n\t}\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"AppsContainer.js","names":["sap","ui","define","Log","GenericTile","Panel","sap_m_library","EventBus","Parameters","S4MyHome","__BaseAppPersPanel","__BaseContainer","__Group","__RecommendedAppPanel","___utils_DataFormatUtils","___utils_Device","___utils_placeholder_AppsPlaceholder","_interopRequireDefault","obj","__esModule","default","_catch","body","recover","result","e","then","BackgroundDesign","FrameType","GenericTileMode","GenericTileScope","TileSizeBehavior","BaseAppPersPanel","BaseContainer","Group","RecommendedAppPanel","getLeanURL","calculateCardWidth","DeviceType","fetchElementProperties","getAppsPlaceholder","getDefaultAppColor","sLegendName","key","value","get","name","assigned","CONSTANTS","PLACEHOLDER_ITEMS_COUNT","MIN_TILE_WIDTH","MAX_TILE_WIDTH","AppsContainer","extend","metadata","events","appsLoaded","parameters","apps","type","tiles","renderer","apiVersion","constructor","_constructor","id","settings","BaseContainer.prototype.constructor.call","_isInitialRender","init","_init","BaseContainer.prototype.init.call","setProperty","_i18nBundle","getText","eventBus","getInstance","subscribe","channelId","eventId","data","showRecommendation","firstAppsPanel","getContent","getProperty","addStyleClass","addCustomSetting","_attachRouteChangeEvent","_currentDeviceType","getDeviceType","_this","handleRouteChange","event","show","getParameter","_temp2","_temp","_appSwitched","showPersistedDialog","Promise","resolve","load","_setPanelsDirty","reject","attachRouteMatched","error","warning","Error","message","String","onBeforeRendering","_onBeforeRendering","_attachPanelSupportedEvent","adjustLayout","BaseContainer.prototype.onBeforeRendering.call","_removeUnsupportedPanels","onAfterRendering","_onAfterRendering","_this2","BaseContainer.prototype.onAfterRendering.call","_activateRecommendationTabPanel","_load","_this3","selectedPanels","getPanels","all","map","selectedPanel","_setApps","_getPanels","isPhone","Mobile","_getSelectedPanel","_showPersistedDialog","firePersistDialog","panels","panel","setDesktopViewDirty","setMobileViewDirty","_generatePlaceholder","isLoaded","destroyAggregation","placeholderApps","generateApps","Array","fill","status","setApps","_updatePanelContent","_this4","_temp5","_temp4","fireEvent","_temp3","isDirty","isMobileDirty","loadApps","setLoaded","applyPersonalization","showErrorCard","getTitle","getApps","groups","getAggregation","wrapper","_generateMobileAppsWrapper","_generateAppsWrapper","aggregationName","items","_generateMobileCards","getId","_generateTiles","_addWrapperContent","_updatePanelContentVisibility","fetchTileVisualization","appsWrapper","_generateDesktopAppsWrapper","mobileAppsWrapper","errorCard","_generateErrorMessage","hasApps","length","setVisible","getParent","setWidth","_getAppTile","app","width","actions","tileId","scope","ActionMore","Display","state","getStatus","mode","IconMode","sizeBehavior","Small","header","backgroundColor","getBgColor","tileIcon","getIcon","url","getUrl","frameType","TwoByHalf","renderOnThemeChange","dropAreaOffset","subheader","getSubTitle","press","_onPress","_getGroupTile","group","tileBadge","getNumber","getGroupId","_onPanelSelect","_this5","BaseContainer.prototype._onPanelSelect.call","_refreshAllPanels","_this6","refreshPanel","_refreshPanel","_this7","_toggleTabView","supportedPanels","filter","isSupported","iconTabBarControl","_getInnerControl","toggleStyleClass","_onPanelSupported","currentPanel","setSupported","_togglePanelVisibility","isVisible","iconTabBar","tabs","getItems","selectedTab","find","tab","getKey","unSupportedPanels","hasListeners","attachSupported","bind","_this8","recommendedPanel","_temp6","_enableRecommendationTab","setTileWidth","_setTileWidth","minWidth","maxWidth","getDomRef","domProperties","availableWidth","Object","values","slice","reduce","propertyValue","tileCount","cardLayoutConfig","containerWidth","totalCards","gap","skipDeviceCheck","clampedWidth","getLayout","_adjustLayout","currentIsPhone","toggleActionButtons","forEach","currentPanelId","isSinglePanel","tileWidth","i","panelItems","backgroundDesign","Solid","height","content","push","item","addAggregation","_showErrorCard","getGenericPlaceholderContent","_getGenericPlaceholderContent"],"sources":["AppsContainer.ts"],"sourcesContent":["/*!\n * SAP UI development toolkit for HTML5 (SAPUI5)\n * * (c) Copyright 2009-2025 SAP SE. All rights reserved\n */\n\nimport Log from \"sap/base/Log\";\nimport GridContainer from \"sap/f/GridContainer\";\nimport GenericTile from \"sap/m/GenericTile\";\nimport HeaderContainer from \"sap/m/HeaderContainer\";\nimport IconTabBar, { IconTabBar$SelectEvent } from \"sap/m/IconTabBar\";\nimport IconTabFilter from \"sap/m/IconTabFilter\";\nimport Panel from \"sap/m/Panel\";\nimport VBox from \"sap/m/VBox\";\nimport { BackgroundDesign, FrameType, GenericTileMode, GenericTileScope, LoadState, TileSizeBehavior } from \"sap/m/library\";\nimport Event from \"sap/ui/base/Event\";\nimport type { MetadataOptions } from \"sap/ui/core/Element\";\nimport EventBus from \"sap/ui/core/EventBus\";\nimport Parameters from \"sap/ui/core/theming/Parameters\";\nimport S4MyHome from \"sap/ushell/api/S4MyHome\";\nimport App from \"./App\";\nimport { $AppsContainerSettings } from \"./AppsContainer\";\nimport BaseApp from \"./BaseApp\";\nimport BaseAppPanel, { BaseAppPanel$SupportedEvent } from \"./BaseAppPanel\";\nimport BaseAppPersPanel from \"./BaseAppPersPanel\";\nimport BaseContainer from \"./BaseContainer\";\nimport Group from \"./Group\";\nimport MenuItem from \"./MenuItem\";\nimport RecommendedAppPanel from \"./RecommendedAppPanel\";\nimport { ICustomVisualization } from \"./interface/AppsInterface\";\nimport { getLeanURL } from \"./utils/DataFormatUtils\";\nimport { calculateCardWidth, DeviceType, fetchElementProperties } from \"./utils/Device\";\nimport { getAppsPlaceholder } from \"./utils/placeholder/AppsPlaceholder\";\n\nconst getDefaultAppColor = () => {\n\tconst sLegendName = \"sapLegendColor9\";\n\treturn {\n\t\tkey: sLegendName,\n\t\tvalue: Parameters.get({\n\t\t\tname: sLegendName\n\t\t}),\n\t\tassigned: false\n\t};\n};\n\nconst CONSTANTS = {\n\tPLACEHOLDER_ITEMS_COUNT: 5,\n\tMIN_TILE_WIDTH: 304,\n\tMAX_TILE_WIDTH: 456\n};\n\n/**\n *\n * Container class for managing and storing apps.\n *\n * @extends BaseContainer\n *\n * @author SAP SE\n * @version 0.0.1\n * @since 1.121\n *\n * @private\n * @ui5-restricted ux.eng.s4producthomes1\n *\n * @alias sap.cux.home.AppsContainer\n */\nexport default class AppsContainer extends BaseContainer {\n\tprivate _isInitialRender = true;\n\tprivate _appSwitched!: boolean;\n\tprivate _currentDeviceType?: DeviceType;\n\tstatic readonly renderer = {\n\t\t...BaseContainer.renderer,\n\t\tapiVersion: 2\n\t};\n\tstatic readonly metadata: MetadataOptions = {\n\t\tevents: {\n\t\t\t/**\n\t\t\t * Event is fired when apps are loaded.\n\t\t\t */\n\t\t\tappsLoaded: {\n\t\t\t\tparameters: {\n\t\t\t\t\tapps: { type: \"sap.cux.home.App[]\" },\n\t\t\t\t\ttiles: { type: \"sap.m.GenericTile[]\" }\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tconstructor(idOrSettings?: string | $AppsContainerSettings);\n\tconstructor(id?: string, settings?: $AppsContainerSettings);\n\t/**\n\t * Constructor for a new app container.\n\t *\n\t * @param {string} [id] ID for the new control, generated automatically if an ID is not provided\n\t * @param {object} [settings] Initial settings for the new control\n\t */\n\tpublic constructor(id?: string, settings?: $AppsContainerSettings) {\n\t\tsuper(id, settings);\n\t}\n\n\t/**\n\t * Init lifecycle method\n\t *\n\t * @private\n\t * @override\n\t */\n\tpublic init(): void {\n\t\tsuper.init();\n\t\tthis.setProperty(\"title\", this._i18nBundle?.getText(\"appsTitle\"));\n\t\t// Subscribe to recommendation setting change event\n\t\tconst eventBus = EventBus.getInstance();\n\t\teventBus.subscribe(\"importChannel\", \"recommendationSettingChanged\", (channelId?: string, eventId?: string, data?: object) => {\n\t\t\tconst showRecommendation = (data as { showRecommendation: boolean }).showRecommendation;\n\t\t\tif (!showRecommendation) {\n\t\t\t\tconst firstAppsPanel = this.getContent()?.[0];\n\t\t\t\tthis.setProperty(\"selectedKey\", firstAppsPanel?.getProperty(\"key\"));\n\t\t\t}\n\t\t});\n\n\t\t// disable lazy load for apps container as it's the hero element\n\t\tthis.setProperty(\"enableLazyLoad\", false);\n\t\tthis.addStyleClass(\"sapCuxAppsContainer\");\n\t\tthis.addCustomSetting(\"text\", this._i18nBundle.getText(\"myAppMsg\") as string);\n\t\tthis._attachRouteChangeEvent();\n\t\tthis._currentDeviceType = this.getDeviceType();\n\t}\n\n\t/**\n\t * Attaches an event handler to monitor route changes and manage application state accordingly.\n\t * @private\n\t *\n\t * @returns {void}\n\t */\n\n\tprivate _attachRouteChangeEvent(): void {\n\t\tconst handleRouteChange = async (event: Event<{ isMyHomeRoute: boolean }>) => {\n\t\t\tconst show = event.getParameter(\"isMyHomeRoute\");\n\t\t\tif (show) {\n\t\t\t\tif (this._appSwitched) {\n\t\t\t\t\tthis._appSwitched = false;\n\t\t\t\t\tthis.showPersistedDialog();\n\t\t\t\t\tawait this.load();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._setPanelsDirty();\n\t\t\t\tthis._appSwitched = true;\n\t\t\t}\n\t\t};\n\n\t\ttry {\n\t\t\tS4MyHome.attachRouteMatched({}, handleRouteChange, this);\n\t\t} catch (error) {\n\t\t\tLog.warning(\"Unable to attach route change handler\", error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\t/**\n\t * onBeforeRendering lifecycle method\n\t *\n\t * @private\n\t * @override\n\t */\n\tpublic onBeforeRendering() {\n\t\tif (this._isInitialRender) {\n\t\t\tthis._isInitialRender = false;\n\t\t\tthis._attachPanelSupportedEvent();\n\t\t}\n\n\t\tthis.adjustLayout();\n\t\tsuper.onBeforeRendering();\n\t\tthis._removeUnsupportedPanels();\n\t}\n\n\t/**\n\t * onAfterRendering lifecycle method\n\t *\n\t * @private\n\t * @override\n\t */\n\tpublic async onAfterRendering() {\n\t\tsuper.onAfterRendering();\n\t\t// activating the recommendation tab from appsContainer as personalization data in not available on init of panel.\n\t\tawait this._activateRecommendationTabPanel();\n\t}\n\n\t/**\n\t * Loads the AppsContainer section.\n\t * Overrides the load method of the BaseContainer.\n\t *\n\t * @private\n\t * @async\n\t * @override\n\t */\n\tpublic async load(): Promise<void> {\n\t\tconst selectedPanels = this.getPanels();\n\t\tawait Promise.all(selectedPanels.map((selectedPanel) => this._setApps(selectedPanel)));\n\t}\n\n\t/**\n\t * Retrieves the relevant panels based on the device type.\n\t *\n\t * @private\n\t * @returns {BaseAppPanel[]} An array of panels based on the device type.\n\t */\n\tprivate getPanels(): BaseAppPanel[] {\n\t\tconst isPhone = this.getDeviceType() === DeviceType.Mobile;\n\t\treturn (isPhone ? this.getContent() : [this._getSelectedPanel()]) as BaseAppPanel[];\n\t}\n\n\t/**\n\t * Triggers navigation actions for the currently relevant panels.\n\t *\n\t * @private\n\t * @returns {void}\n\t */\n\n\tprivate showPersistedDialog(): void {\n\t\tconst selectedPanels = this.getPanels();\n\t\tfor (const selectedPanel of selectedPanels) {\n\t\t\tselectedPanel.firePersistDialog();\n\t\t}\n\t}\n\n\t/**\n\t * Set all panels dirty state to true, to refresh all panels\n\t * @private\n\t */\n\tprivate _setPanelsDirty(): void {\n\t\tconst panels = this.getContent() as BaseAppPanel[];\n\t\tfor (const panel of panels) {\n\t\t\tpanel.setDesktopViewDirty(true);\n\t\t\tpanel.setMobileViewDirty(true);\n\t\t}\n\t}\n\n\t/**\n\t * Generate placeholer for the panel.\n\t * @private\n\t * @param {BaseAppPanel} panel - Panel for which placeholders has to be generated.\n\t */\n\tprivate _generatePlaceholder(panel: BaseAppPanel): void {\n\t\tif (!panel.isLoaded()) {\n\t\t\tpanel.destroyAggregation(\"apps\", true);\n\t\t\tconst placeholderApps = panel.generateApps(\n\t\t\t\tnew Array(CONSTANTS.PLACEHOLDER_ITEMS_COUNT).fill({ status: \"Loading\" }) as ICustomVisualization[]\n\t\t\t);\n\t\t\tpanel.setApps(placeholderApps);\n\t\t\tthis._updatePanelContent(panel);\n\t\t}\n\t}\n\n\t/**\n\t * Loads and sets the apps.\n\t * @private\n\t * @param {BaseAppPanel} panel - Panel for which apps has to be loaded.\n\t * @returns {Promise<void>} resolves when apps are loaded.\n\t */\n\tprivate async _setApps(panel: BaseAppPanel): Promise<void> {\n\t\ttry {\n\t\t\t// only load the apps if panel is in dirty state\n\t\t\tif (panel.isDirty() && panel.isMobileDirty()) {\n\t\t\t\tthis._generatePlaceholder(panel);\n\t\t\t\tawait panel.loadApps?.();\n\t\t\t\tif (this.getDeviceType() === DeviceType.Mobile) {\n\t\t\t\t\tpanel.setMobileViewDirty(false);\n\t\t\t\t} else {\n\t\t\t\t\tpanel.setDesktopViewDirty(false);\n\t\t\t\t}\n\t\t\t\tpanel.setLoaded(true);\n\t\t\t\tthis._updatePanelContent(panel);\n\n\t\t\t\tif (panel instanceof BaseAppPersPanel) {\n\t\t\t\t\t// don't wait for personalization to complete\n\t\t\t\t\tvoid panel.applyPersonalization(true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// fire panel loaded event\n\t\t\tpanel.fireEvent(\"loaded\");\n\t\t} catch (error: unknown) {\n\t\t\tthis.showErrorCard(panel);\n\t\t\tLog.error(`Error setting apps for panel: ${panel.getTitle()}`, error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\t/**\n\t * Updates the content of the panel by replacing existing items with new apps and groups.\n\t * This method selects the appropriate wrapper based on the device type, and add apps/group or mobile cards to the wrapper.\n\t *\n\t * @param {BaseAppPanel} panel - The panel whose content needs to be updated.\n\t * @returns {void}\n\t * @private\n\t */\n\tprivate _updatePanelContent(panel: BaseAppPanel): void {\n\t\tconst apps = panel.getApps() || [];\n\t\tconst groups = (panel.getAggregation(\"groups\") || []) as Group[];\n\t\tconst isPhone = this.getDeviceType() === DeviceType.Mobile;\n\t\tconst wrapper = isPhone ? panel._generateMobileAppsWrapper() : panel._generateAppsWrapper();\n\t\tconst aggregationName = isPhone ? \"content\" : \"items\";\n\t\twrapper.destroyAggregation(aggregationName);\n\t\tlet items = isPhone ? this._generateMobileCards([...groups, ...apps], panel.getId()) : this._generateTiles([...groups, ...apps]);\n\t\tthis._addWrapperContent(wrapper, items, aggregationName);\n\t\tthis._updatePanelContentVisibility(panel);\n\t\tif (panel.isLoaded()) {\n\t\t\tlet tiles: GenericTile[] = [];\n\t\t\ttiles = panel.fetchTileVisualization(tiles);\n\t\t\tthis.fireEvent(\"appsLoaded\", { apps, tiles });\n\t\t}\n\t}\n\n\t/**\n\t * Updates the visibility of the panel's content based on the current state and device type.\n\t * This method determines whether to display the apps or an error message based on the presence of apps and groups.\n\t * It also adjusts the visibility of different containers depending on whether the device is a phone or not.\n\t *\n\t * @param {BaseAppPanel} panel - The panel whose content visibility needs to be updated.\n\t * @returns {void}\n\t * @private\n\t */\n\tprivate _updatePanelContentVisibility(panel: BaseAppPanel): void {\n\t\tconst apps = panel.getApps() || [];\n\t\tconst groups = (panel.getAggregation(\"groups\") || []) as Group[];\n\t\tconst isPhone = this.getDeviceType() === DeviceType.Mobile;\n\t\tconst appsWrapper = panel._generateDesktopAppsWrapper();\n\t\tconst mobileAppsWrapper = panel._generateMobileAppsWrapper();\n\t\tconst errorCard = panel._generateErrorMessage();\n\t\tconst hasApps = [...apps, ...groups].length !== 0;\n\t\tappsWrapper.setVisible(hasApps && !isPhone);\n\t\tmobileAppsWrapper.setVisible(hasApps && isPhone);\n\t\t(mobileAppsWrapper.getParent() as VBox).setWidth(isPhone && hasApps ? \"100%\" : \"auto\");\n\t\terrorCard.setVisible(!hasApps);\n\t}\n\n\t/**\n\t * Generates generic tile based on app.\n\t * @private\n\t * @param {sap.cux.home.App} app - App.\n\t * @param {string} [width=\"100%\"] - Tile width (default \"100%\", pass \"15rem\" for fixed mobile layout).\n\t * @returns {sap.m.GenericTile}.\n\t */\n\tpublic _getAppTile(app: App, width: string = \"100%\"): GenericTile {\n\t\tconst isPhone = this.getDeviceType() === DeviceType.Mobile;\n\t\tconst actions = (app.getAggregation(\"menuItems\") || []) as MenuItem[];\n\t\tconst tileId = isPhone ? `${app.getId()}-mobile-tile` : `${app.getId()}-tile`;\n\t\treturn new GenericTile(tileId, {\n\t\t\tscope: actions.length && !isPhone ? GenericTileScope.ActionMore : GenericTileScope.Display,\n\t\t\tstate: app.getStatus() as LoadState,\n\t\t\tmode: GenericTileMode.IconMode,\n\t\t\tsizeBehavior: TileSizeBehavior.Small,\n\t\t\theader: app.getTitle(),\n\t\t\tbackgroundColor: app.getBgColor() || getDefaultAppColor()?.key,\n\t\t\ttileIcon: app.getIcon(),\n\t\t\turl: getLeanURL(app.getUrl()),\n\t\t\tframeType: FrameType.TwoByHalf,\n\t\t\trenderOnThemeChange: true,\n\t\t\tdropAreaOffset: 4,\n\t\t\tsubheader: app.getSubTitle(),\n\t\t\tpress: (e) => app._onPress(e),\n\t\t\twidth\n\t\t}).addStyleClass(\"tileLayout sapMGTTwoByHalf\");\n\t}\n\n\t/**\n\t * Generates generic tile based on group.\n\t * @private\n\t * @param {sap.cux.home.Group} group - Group.\n\t * @param {string} [width=\"100%\"] - Tile width (default \"100%\", pass \"15rem\" for fixed mobile layout).\n\t * @returns {sap.m.GenericTile}.\n\t */\n\tprivate _getGroupTile(group: Group, width: string = \"100%\"): GenericTile {\n\t\tconst isPhone = this.getDeviceType() === DeviceType.Mobile;\n\t\tconst actions = (group.getAggregation(\"menuItems\") || []) as MenuItem[];\n\t\tconst tileId = isPhone ? `${group.getId()}-mobile-tile` : `${group.getId()}-tile`;\n\t\treturn new GenericTile(tileId, {\n\t\t\tscope: actions.length && !isPhone ? GenericTileScope.ActionMore : GenericTileScope.Display,\n\t\t\tstate: group.getStatus() as LoadState,\n\t\t\tmode: GenericTileMode.IconMode,\n\t\t\tsizeBehavior: TileSizeBehavior.Small,\n\t\t\theader: group.getTitle(),\n\t\t\tbackgroundColor: group.getBgColor() || getDefaultAppColor()?.key,\n\t\t\ttileIcon: group.getIcon(),\n\t\t\tframeType: FrameType.TwoByHalf,\n\t\t\trenderOnThemeChange: true,\n\t\t\tdropAreaOffset: 4,\n\t\t\ttileBadge: group.getNumber(),\n\t\t\tpress: (e) => group._onPress(e),\n\t\t\twidth\n\t\t})\n\t\t\t.addStyleClass(\"tileLayout sapMGTTwoByHalf\")\n\t\t\t.data(\"groupId\", group.getGroupId()) as GenericTile;\n\t}\n\n\t/**\n\t * Overridden method for selection of panel in the IconTabBar.\n\t * Loads the apps in selected panel\n\t * @private\n\t * @returns {Promise<void>} resolves when apps are loaded on panel selection.\n\t */\n\tprotected async _onPanelSelect(event: IconTabBar$SelectEvent) {\n\t\tsuper._onPanelSelect(event);\n\t\tconst selectedPanel = this._getSelectedPanel() as BaseAppPanel;\n\t\tawait this._setApps(selectedPanel);\n\t}\n\n\t/**\n\t * Refresh apps for all the panels.\n\t * @private\n\t * @returns {Promise<void>} resolves when all panels are set to dirty and apps for current panel are refreshed.\n\t */\n\tpublic async _refreshAllPanels(): Promise<void> {\n\t\t//set all panels to dirty\n\t\tthis._setPanelsDirty();\n\t\t//set apps for current section\n\t\tawait this._setApps(this._getSelectedPanel() as BaseAppPanel);\n\t}\n\n\t/**\n\t * Refresh apps for selected panel.\n\t * @private\n\t * @param {BaseAppPanel} panel - Panel that has be refreshed.\n\t * @returns {Promise<void>} resolves when apps are refreshed.\n\t */\n\tpublic async refreshPanel(panel: BaseAppPanel): Promise<void> {\n\t\tpanel.setMobileViewDirty(true);\n\t\tpanel.setDesktopViewDirty(true);\n\t\tawait this._setApps(panel);\n\t}\n\n\t/**\n\t * Toggles the visibility of the tab view based on the supported panels.\n\t * @private\n\t */\n\tprivate _toggleTabView() {\n\t\tif (this.getDeviceType() !== DeviceType.Mobile) {\n\t\t\tconst panels = this.getContent() as BaseAppPanel[];\n\t\t\tconst supportedPanels = panels.filter((panel) => panel.isSupported());\n\t\t\tconst iconTabBarControl = this._getInnerControl() as IconTabBar;\n\t\t\ticonTabBarControl?.toggleStyleClass(\"sapUiITBHide\", supportedPanels.length === 1);\n\t\t}\n\t}\n\n\t/**\n\t * Handles the supported state of the current panel.\n\t * If the panel is supported, it adds the panel to the content.\n\t * If the panel is not supported, it removes the panel from the content.\n\t * @param {BaseAppPanel} currentPanel - The panel to handle the supported state for.\n\t * @private\n\t */\n\tprivate _onPanelSupported(currentPanel: BaseAppPanel, event: BaseAppPanel$SupportedEvent) {\n\t\tconst isSupported = event.getParameter(\"isSupported\") as boolean;\n\t\tcurrentPanel.setSupported(isSupported);\n\t\tthis._togglePanelVisibility(currentPanel, isSupported);\n\t\tthis._toggleTabView();\n\t}\n\n\t/**\n\t * Toggles the visibility of the panel.\n\t * @param {BaseAppPanel} panel - The panel to toggle the visibility for.\n\t * @param {boolean} isVisible - The visibility state of the panel.\n\t * @private\n\t */\n\tprivate _togglePanelVisibility(panel: BaseAppPanel, isVisible: boolean) {\n\t\tconst iconTabBar = this._getInnerControl() as IconTabBar;\n\t\tconst tabs = (iconTabBar?.getItems() as IconTabFilter[]) || [];\n\t\tconst selectedTab = tabs.find((tab) => tab.getKey() === panel.getKey());\n\t\tselectedTab?.setVisible(isVisible);\n\t}\n\n\t/**\n\t * Removes unsupported panels from the container.\n\t * @private\n\t */\n\tprivate _removeUnsupportedPanels() {\n\t\tconst panels = this.getContent() as BaseAppPanel[];\n\t\tconst unSupportedPanels = panels.filter((panel) => !panel.isSupported());\n\t\tfor (const panel of unSupportedPanels) {\n\t\t\tthis._togglePanelVisibility(panel, false);\n\t\t}\n\t\tthis._toggleTabView();\n\t}\n\n\t/**\n\t * Attaches an event handler to the \"supported\" event for each panel in the container.\n\t * @private\n\t */\n\tprivate _attachPanelSupportedEvent() {\n\t\tconst panels = this.getContent() as BaseAppPanel[];\n\t\tfor (const panel of panels) {\n\t\t\tif (!panel.hasListeners(\"supported\")) {\n\t\t\t\tpanel.attachSupported(this._onPanelSupported.bind(this, panel));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Calls the enable function to activate the recommendation tab for `RecommendedAppPanel`, unless the device is a mobile phone.\n\t *\n\t * @private\n\t */\n\tprivate async _activateRecommendationTabPanel(): Promise<void> {\n\t\tconst panels = this.getContent() as BaseAppPanel[];\n\t\tconst isPhone = this.getDeviceType() === DeviceType.Mobile;\n\t\tconst recommendedPanel = panels ? panels.find((panel) => panel instanceof RecommendedAppPanel) : null;\n\t\tif (recommendedPanel instanceof RecommendedAppPanel && !isPhone) {\n\t\t\tawait recommendedPanel._enableRecommendationTab();\n\t\t} else {\n\t\t\trecommendedPanel?.setSupported(false);\n\t\t}\n\t}\n\n\tpublic setTileWidth(panel: BaseAppPanel): void {\n\t\tconst minWidth = CONSTANTS.MIN_TILE_WIDTH; // in px\n\t\tconst maxWidth = CONSTANTS.MAX_TILE_WIDTH; // in px\n\n\t\tconst wrapper = panel._generateAppsWrapper()?.getDomRef() as Element;\n\t\tif (!wrapper) return;\n\n\t\tconst domProperties = fetchElementProperties(wrapper, [\"width\", \"padding-left\", \"padding-right\", \"margin-left\", \"margin-right\"]);\n\t\tconst availableWidth = Object.values(domProperties)\n\t\t\t.slice(1)\n\t\t\t.reduce((width, propertyValue) => width - propertyValue, domProperties[\"width\"]);\n\n\t\tconst apps = panel.getApps() || [];\n\t\tconst groups = (panel.getAggregation(\"groups\") || []) as Group[];\n\t\tconst tileCount = apps.length + groups.length;\n\n\t\tif (tileCount === 0 || availableWidth <= 0) return;\n\n\t\tconst cardLayoutConfig = {\n\t\t\tcontainerWidth: availableWidth,\n\t\t\ttotalCards: tileCount,\n\t\t\tminWidth: minWidth,\n\t\t\tmaxWidth: maxWidth,\n\t\t\tgap: 8,\n\t\t\tskipDeviceCheck: true\n\t\t};\n\n\t\tconst clampedWidth = calculateCardWidth(cardLayoutConfig);\n\n\t\tpanel.setProperty(\"tileWidth\", clampedWidth);\n\t\tpanel\n\t\t\t._generateAppsWrapper()\n\t\t\t.getLayout()\n\t\t\t.setProperty(\"columnSize\", `${clampedWidth / 16}rem`);\n\t}\n\n\t/**\n\t * Adjusts the layout and visibility based on the device type.\n\t *\n\t * This method adjusts the layout type and visibility of containers based on whether the device is a phone\n\t * or not. It sets the container's layout property, toggles visibility of panels and their containers, and\n\t * adjusts background design accordingly.\n\t *\n\t * @private\n\t * @returns {void}\n\t */\n\tpublic adjustLayout(): void {\n\t\tconst isPhone = this.getDeviceType() === DeviceType.Mobile;\n\t\tconst currentIsPhone = this._currentDeviceType === DeviceType.Mobile;\n\t\tconst selectedPanel = this._getSelectedPanel() as BaseAppPanel;\n\t\tthis.setTileWidth(selectedPanel);\n\n\t\t// Only proceed if device type changed between mobile and non-mobile\n\t\tif (isPhone === currentIsPhone) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._currentDeviceType = this.getDeviceType();\n\n\t\t//hide actions if the device is a phone\n\t\tthis.toggleActionButtons(!isPhone);\n\n\t\tconst panels = this.getContent() as BaseAppPanel[];\n\t\tpanels.forEach((panel) => {\n\t\t\t//if both the panels are dirty, then updated data will be loaded from onBeforeRendering, as layout change will trigger re-rendering\n\t\t\t//if both the panels are not dirty, i.e. doen't have any changes, then just toggle the visibility\n\t\t\tif (!panel.isDirty() && !panel.isMobileDirty()) {\n\t\t\t\tthis._updatePanelContentVisibility(panel);\n\t\t\t} else if (panel.isDirty() !== panel.isMobileDirty()) {\n\t\t\t\t//if one of the panels is dirty i.e. have updated data and other is not, then re-create the inner controls\n\t\t\t\tif (isPhone) {\n\t\t\t\t\tpanel.setMobileViewDirty(false);\n\t\t\t\t} else {\n\t\t\t\t\tpanel.setDesktopViewDirty(false);\n\t\t\t\t}\n\t\t\t\tthis._updatePanelContent(panel);\n\t\t\t}\n\t\t});\n\n\t\t//this is to handle scenario when unsupported propert is changed and then layout is changed.\n\t\tthis._removeUnsupportedPanels();\n\t}\n\n\t/**\n\t * Generates mobile card panel and add given apps/groups in the panel.\n\t *\n\t * @private\n\t * @param {BaseApp[]} items - Apps/Groups for which card panels has to be generated.\n\t * @param {string} currentPanelId - ID of the current panel.\n\t * @returns {sap.m.Panel} The newly created mobile card panel.\n\t */\n\tprivate _generateMobileCards(items: BaseApp[], currentPanelId?: string): Panel[] {\n\t\tconst panels: Panel[] = [];\n\t\tconst isSinglePanel = items.length <= 7;\n\t\tconst tileWidth = isSinglePanel ? \"100%\" : \"15rem\";\n\t\tfor (let i = 0; i < items.length; i += 7) {\n\t\t\tconst panelItems = items.slice(i, i + 7);\n\t\t\tconst panel = new Panel(`${currentPanelId}--${i}`, {\n\t\t\t\tbackgroundDesign: BackgroundDesign.Solid,\n\t\t\t\theight: \"23.5rem\",\n\t\t\t\twidth: isSinglePanel ? \"100%\" : \"17rem\",\n\t\t\t\tcontent: this._generateTiles(panelItems, tileWidth)\n\t\t\t}).addStyleClass(`sapUiMobileAppsCard appPanelBorder myAppMFBContent ${isSinglePanel ? \"mobileAdaptiveWidth\" : \"\"}`);\n\t\t\tpanels.push(panel);\n\t\t}\n\t\treturn panels;\n\t}\n\n\t/**\n\t * Generates group/app generic tiles for given apps/groups.\n\t *\n\t * @private\n\t * @param {BaseApp[]} items - Apps/Groups for which tiles has to be generated.\n\t * @param {string} [width=\"100%\"] - Width of each generated tile.\n\t * @returns {sap.m.GenericTile[]} The generated tiles.\n\t */\n\tprivate _generateTiles(items: BaseApp[], width: string = \"100%\"): GenericTile[] {\n\t\treturn items.map((item) => (item instanceof Group ? this._getGroupTile(item, width) : this._getAppTile(item as App, width)));\n\t}\n\n\t/**\n\t * Adds given items into the wrapper.\n\t * @param {HeaderContainer | GridContainer} wrapper - wrapper for which items has to be added.\n\t * @param {Panel[] | GenericTile[]} items - items to be added.\n\t * @param {string} aggregationName - aggregation name to which items has to be added.\n\t * @private\n\t */\n\tprivate _addWrapperContent(wrapper: HeaderContainer | GridContainer, items: Panel[] | GenericTile[], aggregationName: string) {\n\t\twrapper.destroyAggregation(aggregationName);\n\t\titems.forEach((item) => {\n\t\t\twrapper.addAggregation(aggregationName, item);\n\t\t});\n\t}\n\n\t/**\n\t * Displays an error card in the provided panel.\n\t *\n\t * @param panel - The panel in which the error card should be displayed.\n\t */\n\tprivate showErrorCard(panel: BaseAppPanel): void {\n\t\tconst errorCard = panel._generateErrorMessage();\n\t\tconst appsWrapper = panel._generateDesktopAppsWrapper();\n\t\tconst mobileAppsWrapper = panel._generateMobileAppsWrapper();\n\t\tappsWrapper?.setVisible(false);\n\t\tmobileAppsWrapper?.setVisible(false);\n\t\terrorCard?.setVisible(true);\n\t}\n\n\t/**\n\t * Retrieves the generic placeholder content for the Apps container.\n\t *\n\t * @returns {string} The HTML string representing the Apps container's placeholder content.\n\t */\n\tprotected getGenericPlaceholderContent(): string {\n\t\treturn getAppsPlaceholder();\n\t}\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AAHAA,GAAA,CAAAC,EAAA,CAAAC,MAAA,wUAAAC,GAAA,EAAAC,WAAA,EAAAC,KAAA,EAAAC,aAAA,EAAAC,QAAA,EAAAC,UAAA,EAAAC,QAAA,EAAAC,kBAAA,EAAAC,eAAA,EAAAC,OAAA,EAAAC,qBAAA,EAAAC,wBAAA,EAAAC,eAAA,EAAAC,oCAAA;EAAA;;EAAA,SAAAC,uBAAAC,GAAA;IAAA,OAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,CAAAE,OAAA,mBAAAF,GAAA,CAAAE,OAAA,GAAAF,GAAA;EAAA;EAkjBO,SAAAG,OAAgBC,IAAI,EAAEC,OAAO,EAAE;IACrC,IAAI;MACH,IAAIC,MAAM,GAAGF,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC,OAAMG,CAAC,EAAE;MACV,OAAOF,OAAO,CAACE,CAAC,CAAC;IAClB;IACA,IAAID,MAAM,IAAIA,MAAM,CAACE,IAAI,EAAE;MAC1B,OAAOF,MAAM,CAACE,IAAI,CAAC,KAAK,CAAC,EAAEH,OAAO,CAAC;IACpC;IACA,OAAOC,MAAM;EACd;EAAC,MA/iBQG,gBAAgB,GAAArB,aAAA;EAAA,MAAEsB,SAAS,GAAAtB,aAAA;EAAA,MAAEuB,eAAe,GAAAvB,aAAA;EAAA,MAAEwB,gBAAgB,GAAAxB,aAAA;EAAA,MAAayB,gBAAgB,GAAAzB,aAAA;EAAA,MAU7F0B,gBAAgB,GAAAf,sBAAA,CAAAP,kBAAA;EAAA,MAChBuB,aAAa,GAAAhB,sBAAA,CAAAN,eAAA;EAAA,MACbuB,KAAK,GAAAjB,sBAAA,CAAAL,OAAA;EAAA,MAELuB,mBAAmB,GAAAlB,sBAAA,CAAAJ,qBAAA;EAAA,MAEjBuB,UAAU,GAAAtB,wBAAA;EAAA,MACVuB,kBAAkB,GAAAtB,eAAA;EAAA,MAAEuB,UAAU,GAAAvB,eAAA;EAAA,MAAEwB,sBAAsB,GAAAxB,eAAA;EAAA,MACtDyB,kBAAkB,GAAAxB,oCAAA;EAE3B,MAAMyB,kBAAkB,GAAGA,CAAA,KAAM;IAChC,MAAMC,WAAW,GAAG,iBAAiB;IACrC,OAAO;MACNC,GAAG,EAAED,WAAW;MAChBE,KAAK,EAAEpC,UAAU,CAACqC,GAAG,CAAC;QACrBC,IAAI,EAAEJ;MACP,CAAC,CAAC;MACFK,QAAQ,EAAE;IACX,CAAC;EACF,CAAC;EAED,MAAMC,SAAS,GAAG;IACjBC,uBAAuB,EAAE,CAAC;IAC1BC,cAAc,EAAE,GAAG;IACnBC,cAAc,EAAE;EACjB,CAAC;;EAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAdA,MAeqBC,aAAa,GAASnB,aAAa,CAAAoB,MAAA;IAQvCC,QAAQ,EAAoB;MAC3CC,MAAM,EAAE;QACP;AACH;AACA;QACGC,UAAU,EAAE;UACXC,UAAU,EAAE;YACXC,IAAI,EAAE;cAAEC,IAAI,EAAE;YAAqB,CAAC;YACpCC,KAAK,EAAE;cAAED,IAAI,EAAE;YAAsB;UACtC;QACD;MACD;IACD,CAAC;IAhBeE,QAAQ,EAAG;MAC1B,GAAG5B,aAAa,CAAC4B,QAAQ;MACzBC,UAAU,EAAE;IACb,CAAC;IAiBD;AACD;AACA;AACA;AACA;AACA;IACQC,WAAW,WAAAC,aAACC,EAAW,EAAEC,QAAiC,EAAE;MAClEC,wCAAA,OAAMF,EAAE,EAAEC,QAAQ;MAAE,KA9BbE,gBAAgB,GAAG,IAAI;IA+B/B,CAAC;IAED;AACD;AACA;AACA;AACA;AACA;IACQC,IAAI,WAAAC,MAAA,EAAS;MACnBC,iCAAA;MACA,IAAI,CAACC,WAAW,CAAC,OAAO,EAAE,IAAI,CAACC,WAAW,EAAEC,OAAO,CAAC,WAAW,CAAC,CAAC;MACjE;MACA,MAAMC,QAAQ,GAAGpE,QAAQ,CAACqE,WAAW,CAAC,CAAC;MACvCD,QAAQ,CAACE,SAAS,CAAC,eAAe,EAAE,8BAA8B,EAAE,CAACC,SAAkB,EAAEC,OAAgB,EAAEC,IAAa,KAAK;QAC5H,MAAMC,kBAAkB,GAAID,IAAI,CAAqCC,kBAAkB;QACvF,IAAI,CAACA,kBAAkB,EAAE;UACxB,MAAMC,cAAc,GAAG,IAAI,CAACC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;UAC7C,IAAI,CAACX,WAAW,CAAC,aAAa,EAAEU,cAAc,EAAEE,WAAW,CAAC,KAAK,CAAC,CAAC;QACpE;MACD,CAAC,CAAC;;MAEF;MACA,IAAI,CAACZ,WAAW,CAAC,gBAAgB,EAAE,KAAK,CAAC;MACzC,IAAI,CAACa,aAAa,CAAC,qBAAqB,CAAC;MACzC,IAAI,CAACC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAACb,WAAW,CAACC,OAAO,CAAC,UAAU,CAAW,CAAC;MAC7E,IAAI,CAACa,uBAAuB,CAAC,CAAC;MAC9B,IAAI,CAACC,kBAAkB,GAAG,IAAI,CAACC,aAAa,CAAC,CAAC;IAC/C,CAAC;IAED;AACD;AACA;AACA;AACA;AACA;IAESF,uBAAuB,WAAAA,wBAAA,EAAS;MAAA,MAAAG,KAAA,GAIjC,IAAI;MAHV,MAAMC,iBAAiB,YAAAA,CAAUC,KAAwC;QAAA,IAAK;UAC7E,MAAMC,IAAI,GAAGD,KAAK,CAACE,YAAY,CAAC,eAAe,CAAC;UAAC,MAAAC,MAAA;YAAA,IAC7CF,IAAI;cAAA,MAAAG,KAAA;gBAAA,IACHN,KAAA,CAAKO,YAAY;kBACpBP,KAAA,CAAKO,YAAY,GAAG,KAAK;kBACzBP,KAAA,CAAKQ,mBAAmB,CAAC,CAAC;kBAAC,OAAAC,OAAA,CAAAC,OAAA,CACrBV,KAAA,CAAKW,IAAI,CAAC,CAAC,EAAA3E,IAAA;gBAAA;cAAA;cAAA,IAAAsE,KAAA,IAAAA,KAAA,CAAAtE,IAAA,SAAAsE,KAAA,CAAAtE,IAAA;YAAA;cAGlBgE,KAAA,CAAKY,eAAe,CAAC,CAAC;cACtBZ,KAAA,CAAKO,YAAY,GAAG,IAAI;YAAC;UAAA;UAAA,OAAAE,OAAA,CAAAC,OAAA,CAAAL,MAAA,IAAAA,MAAA,CAAArE,IAAA,GAAAqE,MAAA,CAAArE,IAAA;QAE3B,CAAC,QAAAD,CAAA;UAAA,OAAA0E,OAAA,CAAAI,MAAA,CAAA9E,CAAA;QAAA;MAAA;MAED,IAAI;QACHhB,QAAQ,CAAC+F,kBAAkB,CAAC,CAAC,CAAC,EAAEb,iBAAiB,EAAE,IAAI,CAAC;MACzD,CAAC,CAAC,OAAOc,KAAK,EAAE;QACftG,GAAG,CAACuG,OAAO,CAAC,uCAAuC,EAAED,KAAK,YAAYE,KAAK,GAAGF,KAAK,CAACG,OAAO,GAAGC,MAAM,CAACJ,KAAK,CAAC,CAAC;MAC7G;IACD,CAAC;IAED;AACD;AACA;AACA;AACA;AACA;IACQK,iBAAiB,WAAAC,mBAAA,EAAG;MAC1B,IAAI,IAAI,CAAC3C,gBAAgB,EAAE;QAC1B,IAAI,CAACA,gBAAgB,GAAG,KAAK;QAC7B,IAAI,CAAC4C,0BAA0B,CAAC,CAAC;MAClC;MAEA,IAAI,CAACC,YAAY,CAAC,CAAC;MACnBC,8CAAA;MACA,IAAI,CAACC,wBAAwB,CAAC,CAAC;IAChC,CAAC;IAED;AACD;AACA;AACA;AACA;AACA;IACcC,gBAAgB,WAAAC,kBAAA;MAAA,IAAG;QAAA,MAAAC,MAAA;QAC/BC,6CAAA,CAAAD,MAAA;QACA;QAAA,OAAAnB,OAAA,CAAAC,OAAA,CACMkB,MAAA,CAAKE,+BAA+B,CAAC,CAAC,EAAA9F,IAAA;MAC7C,CAAC,QAAAD,CAAA;QAAA,OAAA0E,OAAA,CAAAI,MAAA,CAAA9E,CAAA;MAAA;IAAA;IAED;AACD;AACA;AACA;AACA;AACA;AACA;AACA;IACc4E,IAAI,WAAAoB,MAAA;MAAA,IAAkB;QAAA,MAAAC,MAAA,GACX,IAAI;QAA3B,MAAMC,cAAc,GAAGD,MAAA,CAAKE,SAAS,CAAC,CAAC;QAAC,OAAAzB,OAAA,CAAAC,OAAA,CAClCD,OAAO,CAAC0B,GAAG,CAACF,cAAc,CAACG,GAAG,CAAEC,aAAa,IAAKL,MAAA,CAAKM,QAAQ,CAACD,aAAa,CAAC,CAAC,CAAC,EAAArG,IAAA;MACvF,CAAC,QAAAD,CAAA;QAAA,OAAA0E,OAAA,CAAAI,MAAA,CAAA9E,CAAA;MAAA;IAAA;IAED;AACD;AACA;AACA;AACA;AACA;IACSmG,SAAS,WAAAK,WAAA,EAAmB;MACnC,MAAMC,OAAO,GAAG,IAAI,CAACzC,aAAa,CAAC,CAAC,KAAKnD,UAAU,CAAC6F,MAAM;MAC1D,OAAQD,OAAO,GAAG,IAAI,CAAC/C,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,CAACiD,iBAAiB,CAAC,CAAC,CAAC;IACjE,CAAC;IAED;AACD;AACA;AACA;AACA;AACA;IAESlC,mBAAmB,WAAAmC,qBAAA,EAAS;MACnC,MAAMV,cAAc,GAAG,IAAI,CAACC,SAAS,CAAC,CAAC;MACvC,KAAK,MAAMG,aAAa,IAAIJ,cAAc,EAAE;QAC3CI,aAAa,CAACO,iBAAiB,CAAC,CAAC;MAClC;IACD,CAAC;IAED;AACD;AACA;AACA;IACShC,eAAe,WAAAA,gBAAA,EAAS;MAC/B,MAAMiC,MAAM,GAAG,IAAI,CAACpD,UAAU,CAAC,CAAmB;MAClD,KAAK,MAAMqD,KAAK,IAAID,MAAM,EAAE;QAC3BC,KAAK,CAACC,mBAAmB,CAAC,IAAI,CAAC;QAC/BD,KAAK,CAACE,kBAAkB,CAAC,IAAI,CAAC;MAC/B;IACD,CAAC;IAED;AACD;AACA;AACA;AACA;IACSC,oBAAoB,WAAAA,qBAACH,KAAmB,EAAQ;MACvD,IAAI,CAACA,KAAK,CAACI,QAAQ,CAAC,CAAC,EAAE;QACtBJ,KAAK,CAACK,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC;QACtC,MAAMC,eAAe,GAAGN,KAAK,CAACO,YAAY,CACzC,IAAIC,KAAK,CAAChG,SAAS,CAACC,uBAAuB,CAAC,CAACgG,IAAI,CAAC;UAAEC,MAAM,EAAE;QAAU,CAAC,CACxE,CAAC;QACDV,KAAK,CAACW,OAAO,CAACL,eAAe,CAAC;QAC9B,IAAI,CAACM,mBAAmB,CAACZ,KAAK,CAAC;MAChC;IACD,CAAC;IAED;AACD;AACA;AACA;AACA;AACA;IACeR,QAAQ,WAAAA,SAACQ,KAAmB;MAAA,IAAiB;QAAA,MAAAa,MAAA,GAIxD,IAAI;QAAA,MAAAC,MAAA,GAAAjI,MAAA,aAHF;UAAA,SAAAkI,OAAA;YAmBH;YACAf,KAAK,CAACgB,SAAS,CAAC,QAAQ,CAAC;UAAC;UAAA,MAAAC,MAAA;YAAA,IAlBtBjB,KAAK,CAACkB,OAAO,CAAC,CAAC,IAAIlB,KAAK,CAACmB,aAAa,CAAC,CAAC;cAC3CN,MAAA,CAAKV,oBAAoB,CAACH,KAAK,CAAC;cAAC,OAAArC,OAAA,CAAAC,OAAA,CAC3BoC,KAAK,CAACoB,QAAQ,GAAG,CAAC,EAAAlI,IAAA;gBACxB,IAAI2H,MAAA,CAAK5D,aAAa,CAAC,CAAC,KAAKnD,UAAU,CAAC6F,MAAM,EAAE;kBAC/CK,KAAK,CAACE,kBAAkB,CAAC,KAAK,CAAC;gBAChC,CAAC,MAAM;kBACNF,KAAK,CAACC,mBAAmB,CAAC,KAAK,CAAC;gBACjC;gBACAD,KAAK,CAACqB,SAAS,CAAC,IAAI,CAAC;gBACrBR,MAAA,CAAKD,mBAAmB,CAACZ,KAAK,CAAC;gBAAC,IAE5BA,KAAK,YAAYxG,gBAAgB;kBACpC;kBACA,KAAKwG,KAAK,CAACsB,oBAAoB,CAAC,IAAI,CAAC;gBAAC;cAAA;YAAA;UAAA;UAdxC;UAAA,OAAAL,MAAA,IAAAA,MAAA,CAAA/H,IAAA,GAAA+H,MAAA,CAAA/H,IAAA,CAAA6H,MAAA,IAAAA,MAAA,CAAAE,MAAA;QAoBD,CAAC,YAAQhD,KAAc,EAAE;UACxB4C,MAAA,CAAKU,aAAa,CAACvB,KAAK,CAAC;UACzBrI,GAAG,CAACsG,KAAK,CAAC,iCAAiC+B,KAAK,CAACwB,QAAQ,CAAC,CAAC,EAAE,EAAEvD,KAAK,YAAYE,KAAK,GAAGF,KAAK,CAACG,OAAO,GAAGC,MAAM,CAACJ,KAAK,CAAC,CAAC;QACvH,CAAC;QAAA,OAAAN,OAAA,CAAAC,OAAA,CAAAkD,MAAA,IAAAA,MAAA,CAAA5H,IAAA,GAAA4H,MAAA,CAAA5H,IAAA;MACF,CAAC,QAAAD,CAAA;QAAA,OAAA0E,OAAA,CAAAI,MAAA,CAAA9E,CAAA;MAAA;IAAA;IAED;AACD;AACA;AACA;AACA;AACA;AACA;AACA;IACS2H,mBAAmB,WAAAA,oBAACZ,KAAmB,EAAQ;MACtD,MAAM9E,IAAI,GAAG8E,KAAK,CAACyB,OAAO,CAAC,CAAC,IAAI,EAAE;MAClC,MAAMC,MAAM,GAAI1B,KAAK,CAAC2B,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAc;MAChE,MAAMjC,OAAO,GAAG,IAAI,CAACzC,aAAa,CAAC,CAAC,KAAKnD,UAAU,CAAC6F,MAAM;MAC1D,MAAMiC,OAAO,GAAGlC,OAAO,GAAGM,KAAK,CAAC6B,0BAA0B,CAAC,CAAC,GAAG7B,KAAK,CAAC8B,oBAAoB,CAAC,CAAC;MAC3F,MAAMC,eAAe,GAAGrC,OAAO,GAAG,SAAS,GAAG,OAAO;MACrDkC,OAAO,CAACvB,kBAAkB,CAAC0B,eAAe,CAAC;MAC3C,IAAIC,KAAK,GAAGtC,OAAO,GAAG,IAAI,CAACuC,oBAAoB,CAAC,CAAC,GAAGP,MAAM,EAAE,GAAGxG,IAAI,CAAC,EAAE8E,KAAK,CAACkC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAACC,cAAc,CAAC,CAAC,GAAGT,MAAM,EAAE,GAAGxG,IAAI,CAAC,CAAC;MAChI,IAAI,CAACkH,kBAAkB,CAACR,OAAO,EAAEI,KAAK,EAAED,eAAe,CAAC;MACxD,IAAI,CAACM,6BAA6B,CAACrC,KAAK,CAAC;MACzC,IAAIA,KAAK,CAACI,QAAQ,CAAC,CAAC,EAAE;QACrB,IAAIhF,KAAoB,GAAG,EAAE;QAC7BA,KAAK,GAAG4E,KAAK,CAACsC,sBAAsB,CAAClH,KAAK,CAAC;QAC3C,IAAI,CAAC4F,SAAS,CAAC,YAAY,EAAE;UAAE9F,IAAI;UAAEE;QAAM,CAAC,CAAC;MAC9C;IACD,CAAC;IAED;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACSiH,6BAA6B,WAAAA,8BAACrC,KAAmB,EAAQ;MAChE,MAAM9E,IAAI,GAAG8E,KAAK,CAACyB,OAAO,CAAC,CAAC,IAAI,EAAE;MAClC,MAAMC,MAAM,GAAI1B,KAAK,CAAC2B,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAc;MAChE,MAAMjC,OAAO,GAAG,IAAI,CAACzC,aAAa,CAAC,CAAC,KAAKnD,UAAU,CAAC6F,MAAM;MAC1D,MAAM4C,WAAW,GAAGvC,KAAK,CAACwC,2BAA2B,CAAC,CAAC;MACvD,MAAMC,iBAAiB,GAAGzC,KAAK,CAAC6B,0BAA0B,CAAC,CAAC;MAC5D,MAAMa,SAAS,GAAG1C,KAAK,CAAC2C,qBAAqB,CAAC,CAAC;MAC/C,MAAMC,OAAO,GAAG,CAAC,GAAG1H,IAAI,EAAE,GAAGwG,MAAM,CAAC,CAACmB,MAAM,KAAK,CAAC;MACjDN,WAAW,CAACO,UAAU,CAACF,OAAO,IAAI,CAAClD,OAAO,CAAC;MAC3C+C,iBAAiB,CAACK,UAAU,CAACF,OAAO,IAAIlD,OAAO,CAAC;MAC/C+C,iBAAiB,CAACM,SAAS,CAAC,CAAC,CAAUC,QAAQ,CAACtD,OAAO,IAAIkD,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;MACtFF,SAAS,CAACI,UAAU,CAAC,CAACF,OAAO,CAAC;IAC/B,CAAC;IAED;AACD;AACA;AACA;AACA;AACA;AACA;IACQK,WAAW,WAAAA,YAACC,GAAQ,EAAEC,KAAa,GAAG,MAAM,EAAe;MACjE,MAAMzD,OAAO,GAAG,IAAI,CAACzC,aAAa,CAAC,CAAC,KAAKnD,UAAU,CAAC6F,MAAM;MAC1D,MAAMyD,OAAO,GAAIF,GAAG,CAACvB,cAAc,CAAC,WAAW,CAAC,IAAI,EAAiB;MACrE,MAAM0B,MAAM,GAAG3D,OAAO,GAAG,GAAGwD,GAAG,CAAChB,KAAK,CAAC,CAAC,cAAc,GAAG,GAAGgB,GAAG,CAAChB,KAAK,CAAC,CAAC,OAAO;MAC7E,OAAO,IAAItK,WAAW,CAACyL,MAAM,EAAE;QAC9BC,KAAK,EAAEF,OAAO,CAACP,MAAM,IAAI,CAACnD,OAAO,GAAGpG,gBAAgB,CAACiK,UAAU,GAAGjK,gBAAgB,CAACkK,OAAO;QAC1FC,KAAK,EAAEP,GAAG,CAACQ,SAAS,CAAC,CAAc;QACnCC,IAAI,EAAEtK,eAAe,CAACuK,QAAQ;QAC9BC,YAAY,EAAEtK,gBAAgB,CAACuK,KAAK;QACpCC,MAAM,EAAEb,GAAG,CAAC1B,QAAQ,CAAC,CAAC;QACtBwC,eAAe,EAAEd,GAAG,CAACe,UAAU,CAAC,CAAC,IAAIhK,kBAAkB,CAAC,CAAC,EAAEE,GAAG;QAC9D+J,QAAQ,EAAEhB,GAAG,CAACiB,OAAO,CAAC,CAAC;QACvBC,GAAG,EAAExK,UAAU,CAACsJ,GAAG,CAACmB,MAAM,CAAC,CAAC,CAAC;QAC7BC,SAAS,EAAElL,SAAS,CAACmL,SAAS;QAC9BC,mBAAmB,EAAE,IAAI;QACzBC,cAAc,EAAE,CAAC;QACjBC,SAAS,EAAExB,GAAG,CAACyB,WAAW,CAAC,CAAC;QAC5BC,KAAK,EAAG3L,CAAC,IAAKiK,GAAG,CAAC2B,QAAQ,CAAC5L,CAAC,CAAC;QAC7BkK;MACD,CAAC,CAAC,CAACtG,aAAa,CAAC,4BAA4B,CAAC;IAC/C,CAAC;IAED;AACD;AACA;AACA;AACA;AACA;AACA;IACSiI,aAAa,WAAAA,cAACC,KAAY,EAAE5B,KAAa,GAAG,MAAM,EAAe;MACxE,MAAMzD,OAAO,GAAG,IAAI,CAACzC,aAAa,CAAC,CAAC,KAAKnD,UAAU,CAAC6F,MAAM;MAC1D,MAAMyD,OAAO,GAAI2B,KAAK,CAACpD,cAAc,CAAC,WAAW,CAAC,IAAI,EAAiB;MACvE,MAAM0B,MAAM,GAAG3D,OAAO,GAAG,GAAGqF,KAAK,CAAC7C,KAAK,CAAC,CAAC,cAAc,GAAG,GAAG6C,KAAK,CAAC7C,KAAK,CAAC,CAAC,OAAO;MACjF,OAAO,IAAItK,WAAW,CAACyL,MAAM,EAAE;QAC9BC,KAAK,EAAEF,OAAO,CAACP,MAAM,IAAI,CAACnD,OAAO,GAAGpG,gBAAgB,CAACiK,UAAU,GAAGjK,gBAAgB,CAACkK,OAAO;QAC1FC,KAAK,EAAEsB,KAAK,CAACrB,SAAS,CAAC,CAAc;QACrCC,IAAI,EAAEtK,eAAe,CAACuK,QAAQ;QAC9BC,YAAY,EAAEtK,gBAAgB,CAACuK,KAAK;QACpCC,MAAM,EAAEgB,KAAK,CAACvD,QAAQ,CAAC,CAAC;QACxBwC,eAAe,EAAEe,KAAK,CAACd,UAAU,CAAC,CAAC,IAAIhK,kBAAkB,CAAC,CAAC,EAAEE,GAAG;QAChE+J,QAAQ,EAAEa,KAAK,CAACZ,OAAO,CAAC,CAAC;QACzBG,SAAS,EAAElL,SAAS,CAACmL,SAAS;QAC9BC,mBAAmB,EAAE,IAAI;QACzBC,cAAc,EAAE,CAAC;QACjBO,SAAS,EAAED,KAAK,CAACE,SAAS,CAAC,CAAC;QAC5BL,KAAK,EAAG3L,CAAC,IAAK8L,KAAK,CAACF,QAAQ,CAAC5L,CAAC,CAAC;QAC/BkK;MACD,CAAC,CAAC,CACAtG,aAAa,CAAC,4BAA4B,CAAC,CAC3CL,IAAI,CAAC,SAAS,EAAEuI,KAAK,CAACG,UAAU,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;AACD;AACA;AACA;AACA;AACA;IACiBC,cAAc,WAAAA,eAAC/H,KAA6B;MAAA,IAAE;QAAA,MAAAgI,MAAA;QAC7DC,2CAAA,CAAAD,MAAA,EAAqBhI,KAAK;QAC1B,MAAMmC,aAAa,GAAG6F,MAAA,CAAKxF,iBAAiB,CAAC,CAAiB;QAAC,OAAAjC,OAAA,CAAAC,OAAA,CACzDwH,MAAA,CAAK5F,QAAQ,CAACD,aAAa,CAAC,EAAArG,IAAA;MACnC,CAAC,QAAAD,CAAA;QAAA,OAAA0E,OAAA,CAAAI,MAAA,CAAA9E,CAAA;MAAA;IAAA;IAED;AACD;AACA;AACA;AACA;IACcqM,iBAAiB,WAAAA,kBAAA;MAAA,IAAkB;QAAA,MAAAC,MAAA,GAE/C,IAAI;QADJ;QACAA,MAAA,CAAKzH,eAAe,CAAC,CAAC;QACtB;QAAA,OAAAH,OAAA,CAAAC,OAAA,CACM2H,MAAA,CAAK/F,QAAQ,CAAC+F,MAAA,CAAK3F,iBAAiB,CAAC,CAAiB,CAAC,EAAA1G,IAAA;MAC9D,CAAC,QAAAD,CAAA;QAAA,OAAA0E,OAAA,CAAAI,MAAA,CAAA9E,CAAA;MAAA;IAAA;IAED;AACD;AACA;AACA;AACA;AACA;IACcuM,YAAY,WAAAC,cAACzF,KAAmB;MAAA,IAAiB;QAAA,MAAA0F,MAAA,GAGvD,IAAI;QAFV1F,KAAK,CAACE,kBAAkB,CAAC,IAAI,CAAC;QAC9BF,KAAK,CAACC,mBAAmB,CAAC,IAAI,CAAC;QAAC,OAAAtC,OAAA,CAAAC,OAAA,CAC1B8H,MAAA,CAAKlG,QAAQ,CAACQ,KAAK,CAAC,EAAA9G,IAAA;MAC3B,CAAC,QAAAD,CAAA;QAAA,OAAA0E,OAAA,CAAAI,MAAA,CAAA9E,CAAA;MAAA;IAAA;IAED;AACD;AACA;AACA;IACS0M,cAAc,WAAAA,eAAA,EAAG;MACxB,IAAI,IAAI,CAAC1I,aAAa,CAAC,CAAC,KAAKnD,UAAU,CAAC6F,MAAM,EAAE;QAC/C,MAAMI,MAAM,GAAG,IAAI,CAACpD,UAAU,CAAC,CAAmB;QAClD,MAAMiJ,eAAe,GAAG7F,MAAM,CAAC8F,MAAM,CAAE7F,KAAK,IAAKA,KAAK,CAAC8F,WAAW,CAAC,CAAC,CAAC;QACrE,MAAMC,iBAAiB,GAAG,IAAI,CAACC,gBAAgB,CAAC,CAAe;QAC/DD,iBAAiB,EAAEE,gBAAgB,CAAC,cAAc,EAAEL,eAAe,CAAC/C,MAAM,KAAK,CAAC,CAAC;MAClF;IACD,CAAC;IAED;AACD;AACA;AACA;AACA;AACA;AACA;IACSqD,iBAAiB,WAAAA,kBAACC,YAA0B,EAAE/I,KAAkC,EAAE;MACzF,MAAM0I,WAAW,GAAG1I,KAAK,CAACE,YAAY,CAAC,aAAa,CAAY;MAChE6I,YAAY,CAACC,YAAY,CAACN,WAAW,CAAC;MACtC,IAAI,CAACO,sBAAsB,CAACF,YAAY,EAAEL,WAAW,CAAC;MACtD,IAAI,CAACH,cAAc,CAAC,CAAC;IACtB,CAAC;IAED;AACD;AACA;AACA;AACA;AACA;IACSU,sBAAsB,WAAAA,uBAACrG,KAAmB,EAAEsG,SAAkB,EAAE;MACvE,MAAMC,UAAU,GAAG,IAAI,CAACP,gBAAgB,CAAC,CAAe;MACxD,MAAMQ,IAAI,GAAID,UAAU,EAAEE,QAAQ,CAAC,CAAC,IAAwB,EAAE;MAC9D,MAAMC,WAAW,GAAGF,IAAI,CAACG,IAAI,CAAEC,GAAG,IAAKA,GAAG,CAACC,MAAM,CAAC,CAAC,KAAK7G,KAAK,CAAC6G,MAAM,CAAC,CAAC,CAAC;MACvEH,WAAW,EAAE5D,UAAU,CAACwD,SAAS,CAAC;IACnC,CAAC;IAED;AACD;AACA;AACA;IACS3H,wBAAwB,WAAAA,yBAAA,EAAG;MAClC,MAAMoB,MAAM,GAAG,IAAI,CAACpD,UAAU,CAAC,CAAmB;MAClD,MAAMmK,iBAAiB,GAAG/G,MAAM,CAAC8F,MAAM,CAAE7F,KAAK,IAAK,CAACA,KAAK,CAAC8F,WAAW,CAAC,CAAC,CAAC;MACxE,KAAK,MAAM9F,KAAK,IAAI8G,iBAAiB,EAAE;QACtC,IAAI,CAACT,sBAAsB,CAACrG,KAAK,EAAE,KAAK,CAAC;MAC1C;MACA,IAAI,CAAC2F,cAAc,CAAC,CAAC;IACtB,CAAC;IAED;AACD;AACA;AACA;IACSnH,0BAA0B,WAAAA,2BAAA,EAAG;MACpC,MAAMuB,MAAM,GAAG,IAAI,CAACpD,UAAU,CAAC,CAAmB;MAClD,KAAK,MAAMqD,KAAK,IAAID,MAAM,EAAE;QAC3B,IAAI,CAACC,KAAK,CAAC+G,YAAY,CAAC,WAAW,CAAC,EAAE;UACrC/G,KAAK,CAACgH,eAAe,CAAC,IAAI,CAACd,iBAAiB,CAACe,IAAI,CAAC,IAAI,EAAEjH,KAAK,CAAC,CAAC;QAChE;MACD;IACD,CAAC;IAED;AACD;AACA;AACA;AACA;IACehB,+BAA+B,WAAAA,gCAAA;MAAA,IAAkB;QAAA,MAAAkI,MAAA,GAC/C,IAAI;QAAnB,MAAMnH,MAAM,GAAGmH,MAAA,CAAKvK,UAAU,CAAC,CAAmB;QAClD,MAAM+C,OAAO,GAAGwH,MAAA,CAAKjK,aAAa,CAAC,CAAC,KAAKnD,UAAU,CAAC6F,MAAM;QAC1D,MAAMwH,gBAAgB,GAAGpH,MAAM,GAAGA,MAAM,CAAC4G,IAAI,CAAE3G,KAAK,IAAKA,KAAK,YAAYrG,mBAAmB,CAAC,GAAG,IAAI;QAAC,MAAAyN,MAAA;UAAA,IAClGD,gBAAgB,YAAYxN,mBAAmB,IAAI,CAAC+F,OAAO;YAAA,OAAA/B,OAAA,CAAAC,OAAA,CACxDuJ,gBAAgB,CAACE,wBAAwB,CAAC,CAAC,EAAAnO,IAAA;UAAA;YAEjDiO,gBAAgB,EAAEf,YAAY,CAAC,KAAK,CAAC;UAAC;QAAA;QAAA,OAAAzI,OAAA,CAAAC,OAAA,CAAAwJ,MAAA,IAAAA,MAAA,CAAAlO,IAAA,GAAAkO,MAAA,CAAAlO,IAAA;MAExC,CAAC,QAAAD,CAAA;QAAA,OAAA0E,OAAA,CAAAI,MAAA,CAAA9E,CAAA;MAAA;IAAA;IAEMqO,YAAY,WAAAC,cAACvH,KAAmB,EAAQ;MAC9C,MAAMwH,QAAQ,GAAGhN,SAAS,CAACE,cAAc,CAAC,CAAC;MAC3C,MAAM+M,QAAQ,GAAGjN,SAAS,CAACG,cAAc,CAAC,CAAC;;MAE3C,MAAMiH,OAAO,GAAG5B,KAAK,CAAC8B,oBAAoB,CAAC,CAAC,EAAE4F,SAAS,CAAC,CAAY;MACpE,IAAI,CAAC9F,OAAO,EAAE;MAEd,MAAM+F,aAAa,GAAG5N,sBAAsB,CAAC6H,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;MAChI,MAAMgG,cAAc,GAAGC,MAAM,CAACC,MAAM,CAACH,aAAa,CAAC,CACjDI,KAAK,CAAC,CAAC,CAAC,CACRC,MAAM,CAAC,CAAC7E,KAAK,EAAE8E,aAAa,KAAK9E,KAAK,GAAG8E,aAAa,EAAEN,aAAa,CAAC,OAAO,CAAC,CAAC;MAEjF,MAAMzM,IAAI,GAAG8E,KAAK,CAACyB,OAAO,CAAC,CAAC,IAAI,EAAE;MAClC,MAAMC,MAAM,GAAI1B,KAAK,CAAC2B,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAc;MAChE,MAAMuG,SAAS,GAAGhN,IAAI,CAAC2H,MAAM,GAAGnB,MAAM,CAACmB,MAAM;MAE7C,IAAIqF,SAAS,KAAK,CAAC,IAAIN,cAAc,IAAI,CAAC,EAAE;MAE5C,MAAMO,gBAAgB,GAAG;QACxBC,cAAc,EAAER,cAAc;QAC9BS,UAAU,EAAEH,SAAS;QACrBV,QAAQ,EAAEA,QAAQ;QAClBC,QAAQ,EAAEA,QAAQ;QAClBa,GAAG,EAAE,CAAC;QACNC,eAAe,EAAE;MAClB,CAAC;MAED,MAAMC,YAAY,GAAG3O,kBAAkB,CAACsO,gBAAgB,CAAC;MAEzDnI,KAAK,CAAChE,WAAW,CAAC,WAAW,EAAEwM,YAAY,CAAC;MAC5CxI,KAAK,CACH8B,oBAAoB,CAAC,CAAC,CACtB2G,SAAS,CAAC,CAAC,CACXzM,WAAW,CAAC,YAAY,EAAE,GAAGwM,YAAY,GAAG,EAAE,KAAK,CAAC;IACvD,CAAC;IAED;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ/J,YAAY,WAAAiK,cAAA,EAAS;MAC3B,MAAMhJ,OAAO,GAAG,IAAI,CAACzC,aAAa,CAAC,CAAC,KAAKnD,UAAU,CAAC6F,MAAM;MAC1D,MAAMgJ,cAAc,GAAG,IAAI,CAAC3L,kBAAkB,KAAKlD,UAAU,CAAC6F,MAAM;MACpE,MAAMJ,aAAa,GAAG,IAAI,CAACK,iBAAiB,CAAC,CAAiB;MAC9D,IAAI,CAAC0H,YAAY,CAAC/H,aAAa,CAAC;;MAEhC;MACA,IAAIG,OAAO,KAAKiJ,cAAc,EAAE;QAC/B;MACD;MAEA,IAAI,CAAC3L,kBAAkB,GAAG,IAAI,CAACC,aAAa,CAAC,CAAC;;MAE9C;MACA,IAAI,CAAC2L,mBAAmB,CAAC,CAAClJ,OAAO,CAAC;MAElC,MAAMK,MAAM,GAAG,IAAI,CAACpD,UAAU,CAAC,CAAmB;MAClDoD,MAAM,CAAC8I,OAAO,CAAE7I,KAAK,IAAK;QACzB;QACA;QACA,IAAI,CAACA,KAAK,CAACkB,OAAO,CAAC,CAAC,IAAI,CAAClB,KAAK,CAACmB,aAAa,CAAC,CAAC,EAAE;UAC/C,IAAI,CAACkB,6BAA6B,CAACrC,KAAK,CAAC;QAC1C,CAAC,MAAM,IAAIA,KAAK,CAACkB,OAAO,CAAC,CAAC,KAAKlB,KAAK,CAACmB,aAAa,CAAC,CAAC,EAAE;UACrD;UACA,IAAIzB,OAAO,EAAE;YACZM,KAAK,CAACE,kBAAkB,CAAC,KAAK,CAAC;UAChC,CAAC,MAAM;YACNF,KAAK,CAACC,mBAAmB,CAAC,KAAK,CAAC;UACjC;UACA,IAAI,CAACW,mBAAmB,CAACZ,KAAK,CAAC;QAChC;MACD,CAAC,CAAC;;MAEF;MACA,IAAI,CAACrB,wBAAwB,CAAC,CAAC;IAChC,CAAC;IAED;AACD;AACA;AACA;AACA;AACA;AACA;AACA;IACSsD,oBAAoB,WAAAA,qBAACD,KAAgB,EAAE8G,cAAuB,EAAW;MAChF,MAAM/I,MAAe,GAAG,EAAE;MAC1B,MAAMgJ,aAAa,GAAG/G,KAAK,CAACa,MAAM,IAAI,CAAC;MACvC,MAAMmG,SAAS,GAAGD,aAAa,GAAG,MAAM,GAAG,OAAO;MAClD,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGjH,KAAK,CAACa,MAAM,EAAEoG,CAAC,IAAI,CAAC,EAAE;QACzC,MAAMC,UAAU,GAAGlH,KAAK,CAAC+F,KAAK,CAACkB,CAAC,EAAEA,CAAC,GAAG,CAAC,CAAC;QACxC,MAAMjJ,KAAK,GAAG,IAAInI,KAAK,CAAC,GAAGiR,cAAc,KAAKG,CAAC,EAAE,EAAE;UAClDE,gBAAgB,EAAEhQ,gBAAgB,CAACiQ,KAAK;UACxCC,MAAM,EAAE,SAAS;UACjBlG,KAAK,EAAE4F,aAAa,GAAG,MAAM,GAAG,OAAO;UACvCO,OAAO,EAAE,IAAI,CAACnH,cAAc,CAAC+G,UAAU,EAAEF,SAAS;QACnD,CAAC,CAAC,CAACnM,aAAa,CAAC,sDAAsDkM,aAAa,GAAG,qBAAqB,GAAG,EAAE,EAAE,CAAC;QACpHhJ,MAAM,CAACwJ,IAAI,CAACvJ,KAAK,CAAC;MACnB;MACA,OAAOD,MAAM;IACd,CAAC;IAED;AACD;AACA;AACA;AACA;AACA;AACA;AACA;IACSoC,cAAc,WAAAA,eAACH,KAAgB,EAAEmB,KAAa,GAAG,MAAM,EAAiB;MAC/E,OAAOnB,KAAK,CAAC1C,GAAG,CAAEkK,IAAI,IAAMA,IAAI,YAAY9P,KAAK,GAAG,IAAI,CAACoL,aAAa,CAAC0E,IAAI,EAAErG,KAAK,CAAC,GAAG,IAAI,CAACF,WAAW,CAACuG,IAAI,EAASrG,KAAK,CAAE,CAAC;IAC7H,CAAC;IAED;AACD;AACA;AACA;AACA;AACA;AACA;IACSf,kBAAkB,WAAAA,mBAACR,OAAwC,EAAEI,KAA8B,EAAED,eAAuB,EAAE;MAC7HH,OAAO,CAACvB,kBAAkB,CAAC0B,eAAe,CAAC;MAC3CC,KAAK,CAAC6G,OAAO,CAAEW,IAAI,IAAK;QACvB5H,OAAO,CAAC6H,cAAc,CAAC1H,eAAe,EAAEyH,IAAI,CAAC;MAC9C,CAAC,CAAC;IACH,CAAC;IAED;AACD;AACA;AACA;AACA;IACSjI,aAAa,WAAAmI,eAAC1J,KAAmB,EAAQ;MAChD,MAAM0C,SAAS,GAAG1C,KAAK,CAAC2C,qBAAqB,CAAC,CAAC;MAC/C,MAAMJ,WAAW,GAAGvC,KAAK,CAACwC,2BAA2B,CAAC,CAAC;MACvD,MAAMC,iBAAiB,GAAGzC,KAAK,CAAC6B,0BAA0B,CAAC,CAAC;MAC5DU,WAAW,EAAEO,UAAU,CAAC,KAAK,CAAC;MAC9BL,iBAAiB,EAAEK,UAAU,CAAC,KAAK,CAAC;MACpCJ,SAAS,EAAEI,UAAU,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED;AACD;AACA;AACA;AACA;IACW6G,4BAA4B,WAAAC,8BAAA,EAAW;MAChD,OAAO5P,kBAAkB,CAAC,CAAC;IAC5B;EAAC;EAAA,OAvlBmBY,aAAa;AAAA","ignoreList":[]}
@@ -66,6 +66,7 @@ const CONSTANTS = {
66
66
  export default class AppsContainer extends BaseContainer {
67
67
  private _isInitialRender = true;
68
68
  private _appSwitched!: boolean;
69
+ private _currentDeviceType?: DeviceType;
69
70
  static readonly renderer = {
70
71
  ...BaseContainer.renderer,
71
72
  apiVersion: 2
@@ -120,6 +121,7 @@ export default class AppsContainer extends BaseContainer {
120
121
  this.addStyleClass("sapCuxAppsContainer");
121
122
  this.addCustomSetting("text", this._i18nBundle.getText("myAppMsg") as string);
122
123
  this._attachRouteChangeEvent();
124
+ this._currentDeviceType = this.getDeviceType();
123
125
  }
124
126
 
125
127
  /**
@@ -270,10 +272,6 @@ export default class AppsContainer extends BaseContainer {
270
272
  // don't wait for personalization to complete
271
273
  void panel.applyPersonalization(true);
272
274
  }
273
- let tiles: GenericTile[] = [];
274
- let apps = panel.getApps();
275
- tiles = panel.fetchTileVisualization(tiles);
276
- this.fireEvent("appsLoaded", { apps, tiles });
277
275
  }
278
276
 
279
277
  // fire panel loaded event
@@ -302,6 +300,11 @@ export default class AppsContainer extends BaseContainer {
302
300
  let items = isPhone ? this._generateMobileCards([...groups, ...apps], panel.getId()) : this._generateTiles([...groups, ...apps]);
303
301
  this._addWrapperContent(wrapper, items, aggregationName);
304
302
  this._updatePanelContentVisibility(panel);
303
+ if (panel.isLoaded()) {
304
+ let tiles: GenericTile[] = [];
305
+ tiles = panel.fetchTileVisualization(tiles);
306
+ this.fireEvent("appsLoaded", { apps, tiles });
307
+ }
305
308
  }
306
309
 
307
310
  /**
@@ -331,9 +334,10 @@ export default class AppsContainer extends BaseContainer {
331
334
  * Generates generic tile based on app.
332
335
  * @private
333
336
  * @param {sap.cux.home.App} app - App.
337
+ * @param {string} [width="100%"] - Tile width (default "100%", pass "15rem" for fixed mobile layout).
334
338
  * @returns {sap.m.GenericTile}.
335
339
  */
336
- public _getAppTile(app: App): GenericTile {
340
+ public _getAppTile(app: App, width: string = "100%"): GenericTile {
337
341
  const isPhone = this.getDeviceType() === DeviceType.Mobile;
338
342
  const actions = (app.getAggregation("menuItems") || []) as MenuItem[];
339
343
  const tileId = isPhone ? `${app.getId()}-mobile-tile` : `${app.getId()}-tile`;
@@ -351,7 +355,7 @@ export default class AppsContainer extends BaseContainer {
351
355
  dropAreaOffset: 4,
352
356
  subheader: app.getSubTitle(),
353
357
  press: (e) => app._onPress(e),
354
- width: isPhone ? "15rem" : "100%"
358
+ width
355
359
  }).addStyleClass("tileLayout sapMGTTwoByHalf");
356
360
  }
357
361
 
@@ -359,9 +363,10 @@ export default class AppsContainer extends BaseContainer {
359
363
  * Generates generic tile based on group.
360
364
  * @private
361
365
  * @param {sap.cux.home.Group} group - Group.
366
+ * @param {string} [width="100%"] - Tile width (default "100%", pass "15rem" for fixed mobile layout).
362
367
  * @returns {sap.m.GenericTile}.
363
368
  */
364
- private _getGroupTile(group: Group): GenericTile {
369
+ private _getGroupTile(group: Group, width: string = "100%"): GenericTile {
365
370
  const isPhone = this.getDeviceType() === DeviceType.Mobile;
366
371
  const actions = (group.getAggregation("menuItems") || []) as MenuItem[];
367
372
  const tileId = isPhone ? `${group.getId()}-mobile-tile` : `${group.getId()}-tile`;
@@ -378,7 +383,7 @@ export default class AppsContainer extends BaseContainer {
378
383
  dropAreaOffset: 4,
379
384
  tileBadge: group.getNumber(),
380
385
  press: (e) => group._onPress(e),
381
- width: isPhone ? "15rem" : "100%"
386
+ width
382
387
  })
383
388
  .addStyleClass("tileLayout sapMGTTwoByHalf")
384
389
  .data("groupId", group.getGroupId()) as GenericTile;
@@ -550,9 +555,17 @@ export default class AppsContainer extends BaseContainer {
550
555
  */
551
556
  public adjustLayout(): void {
552
557
  const isPhone = this.getDeviceType() === DeviceType.Mobile;
558
+ const currentIsPhone = this._currentDeviceType === DeviceType.Mobile;
553
559
  const selectedPanel = this._getSelectedPanel() as BaseAppPanel;
554
560
  this.setTileWidth(selectedPanel);
555
561
 
562
+ // Only proceed if device type changed between mobile and non-mobile
563
+ if (isPhone === currentIsPhone) {
564
+ return;
565
+ }
566
+
567
+ this._currentDeviceType = this.getDeviceType();
568
+
556
569
  //hide actions if the device is a phone
557
570
  this.toggleActionButtons(!isPhone);
558
571
 
@@ -587,14 +600,16 @@ export default class AppsContainer extends BaseContainer {
587
600
  */
588
601
  private _generateMobileCards(items: BaseApp[], currentPanelId?: string): Panel[] {
589
602
  const panels: Panel[] = [];
603
+ const isSinglePanel = items.length <= 7;
604
+ const tileWidth = isSinglePanel ? "100%" : "15rem";
590
605
  for (let i = 0; i < items.length; i += 7) {
591
606
  const panelItems = items.slice(i, i + 7);
592
607
  const panel = new Panel(`${currentPanelId}--${i}`, {
593
608
  backgroundDesign: BackgroundDesign.Solid,
594
609
  height: "23.5rem",
595
- width: "17rem",
596
- content: this._generateTiles(panelItems)
597
- }).addStyleClass("sapUiMobileAppsCard appPanelBorder myAppMFBContent");
610
+ width: isSinglePanel ? "100%" : "17rem",
611
+ content: this._generateTiles(panelItems, tileWidth)
612
+ }).addStyleClass(`sapUiMobileAppsCard appPanelBorder myAppMFBContent ${isSinglePanel ? "mobileAdaptiveWidth" : ""}`);
598
613
  panels.push(panel);
599
614
  }
600
615
  return panels;
@@ -605,10 +620,11 @@ export default class AppsContainer extends BaseContainer {
605
620
  *
606
621
  * @private
607
622
  * @param {BaseApp[]} items - Apps/Groups for which tiles has to be generated.
623
+ * @param {string} [width="100%"] - Width of each generated tile.
608
624
  * @returns {sap.m.GenericTile[]} The generated tiles.
609
625
  */
610
- private _generateTiles(items: BaseApp[]): GenericTile[] {
611
- return items.map((item) => (item instanceof Group ? this._getGroupTile(item) : this._getAppTile(item as App)));
626
+ private _generateTiles(items: BaseApp[], width: string = "100%"): GenericTile[] {
627
+ return items.map((item) => (item instanceof Group ? this._getGroupTile(item, width) : this._getAppTile(item as App, width)));
612
628
  }
613
629
 
614
630
  /**
@@ -14,7 +14,7 @@ declare module "sap/cux/home/BaseAppPanel" {
14
14
  import BasePanel from "sap/cux/home/BasePanel";
15
15
  import Group from "sap/cux/home/Group";
16
16
  import MenuItem from "sap/cux/home/MenuItem";
17
- import { IActivity, ICustomVisualization } from "sap/cux/home/interface/AppsInterface";
17
+ import { IActivity, IAdditionalInfo, ICustomVisualization } from "sap/cux/home/interface/AppsInterface";
18
18
  import AppManager from "sap/cux/home/utils/AppManager";
19
19
  /**
20
20
  *
@@ -47,6 +47,7 @@ declare module "sap/cux/home/BaseAppPanel" {
47
47
  protected _menuItems: MenuItem[];
48
48
  protected _actionButtons: Button[];
49
49
  protected _controlMap: Map<string, Control | UI5Element>;
50
+ protected additionalInfo: IAdditionalInfo;
50
51
  constructor(idOrSettings?: string | $BaseAppPanelSettings);
51
52
  constructor(id?: string, settings?: $BaseAppPanelSettings);
52
53
  static readonly metadata: MetadataOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseAppPanel.d.ts","sourceRoot":"../../../../..","sources":["src/sap/cux/home/BaseAppPanel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseAppPanel.d.ts","sourceRoot":"../../../../..","sources":["src/sap/cux/home/BaseAppPanel.ts"],"names":[],"mappings":"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"}
@@ -198,7 +198,7 @@ sap.ui.define(["sap/base/Log", "sap/f/GridContainer", "sap/f/GridContainerSettin
198
198
  height: "23.5rem",
199
199
  content: [],
200
200
  visible: this.getDeviceType() === DeviceType.Mobile
201
- }).addStyleClass("sapUiMargin-26Bottom");
201
+ }).addStyleClass("sapUiMargin-26Bottom sapCuxAppsMobileCardsContainer");
202
202
  }
203
203
  return this._mobileAppsWrapper;
204
204
  },
@@ -242,6 +242,7 @@ sap.ui.define(["sap/base/Log", "sap/f/GridContainer", "sap/f/GridContainerSettin
242
242
  if (visualizationData.oldAppId) {
243
243
  app.data("oldAppId", visualizationData.oldAppId);
244
244
  }
245
+ app.data("additionalInfo", this.additionalInfo);
245
246
  visualizationData.menuItems?.forEach(menuItem => {
246
247
  app.addAggregation("menuItems", menuItem, true);
247
248
  });