@sapui5/sap.suite.ui.commons 1.145.1 → 1.147.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 (214) hide show
  1. package/package.json +1 -1
  2. package/src/sap/suite/ui/commons/.library +1 -1
  3. package/src/sap/suite/ui/commons/AriaProperties.js +1 -1
  4. package/src/sap/suite/ui/commons/CalculationBuilder.js +83 -4
  5. package/src/sap/suite/ui/commons/CalculationBuilderExpression.js +87 -14
  6. package/src/sap/suite/ui/commons/CalculationBuilderFunction.js +1 -1
  7. package/src/sap/suite/ui/commons/CalculationBuilderGroup.js +1 -1
  8. package/src/sap/suite/ui/commons/CalculationBuilderInput.js +11 -0
  9. package/src/sap/suite/ui/commons/CalculationBuilderItem.js +16 -3
  10. package/src/sap/suite/ui/commons/CalculationBuilderValidationResult.js +1 -1
  11. package/src/sap/suite/ui/commons/CalculationBuilderVariable.js +1 -1
  12. package/src/sap/suite/ui/commons/CloudFilePicker.js +1 -1
  13. package/src/sap/suite/ui/commons/ControlProxy.js +7 -4
  14. package/src/sap/suite/ui/commons/MicroProcessFlow.js +1 -1
  15. package/src/sap/suite/ui/commons/MicroProcessFlowItem.js +1 -1
  16. package/src/sap/suite/ui/commons/ProcessFlowRenderer.js +3 -0
  17. package/src/sap/suite/ui/commons/collaboration/ContactHelper.js +5 -1
  18. package/src/sap/suite/ui/commons/collaboration/ContactPopover.fragment.xml +10 -10
  19. package/src/sap/suite/ui/commons/collaboration/MinimalContactPopover.fragment.xml +12 -10
  20. package/src/sap/suite/ui/commons/collaboration/ServiceContainer.js +12 -2
  21. package/src/sap/suite/ui/commons/flexibility/changeHandler/PropertyChangeMapper.js +1 -1
  22. package/src/sap/suite/ui/commons/imageeditor/CropCustomShapeHistoryItem.js +1 -1
  23. package/src/sap/suite/ui/commons/imageeditor/CropEllipseHistoryItem.js +1 -1
  24. package/src/sap/suite/ui/commons/imageeditor/CropRectangleHistoryItem.js +1 -1
  25. package/src/sap/suite/ui/commons/imageeditor/CustomSizeItem.js +1 -1
  26. package/src/sap/suite/ui/commons/imageeditor/FilterHistoryItem.js +1 -1
  27. package/src/sap/suite/ui/commons/imageeditor/FlipHistoryItem.js +1 -1
  28. package/src/sap/suite/ui/commons/imageeditor/HistoryItem.js +1 -1
  29. package/src/sap/suite/ui/commons/imageeditor/ImageEditor.js +1 -1
  30. package/src/sap/suite/ui/commons/imageeditor/ImageEditorContainer.js +1 -1
  31. package/src/sap/suite/ui/commons/imageeditor/ImageEditorResponsiveContainer.js +9 -6
  32. package/src/sap/suite/ui/commons/imageeditor/ResizeHistoryItem.js +1 -1
  33. package/src/sap/suite/ui/commons/imageeditor/RotateHistoryItem.js +1 -1
  34. package/src/sap/suite/ui/commons/library.js +4 -4
  35. package/src/sap/suite/ui/commons/messagebundle.properties +16 -8
  36. package/src/sap/suite/ui/commons/messagebundle_ar.properties +11 -5
  37. package/src/sap/suite/ui/commons/messagebundle_bg.properties +11 -5
  38. package/src/sap/suite/ui/commons/messagebundle_ca.properties +10 -4
  39. package/src/sap/suite/ui/commons/messagebundle_cnr.properties +11 -5
  40. package/src/sap/suite/ui/commons/messagebundle_cs.properties +7 -1
  41. package/src/sap/suite/ui/commons/messagebundle_cy.properties +11 -5
  42. package/src/sap/suite/ui/commons/messagebundle_da.properties +10 -4
  43. package/src/sap/suite/ui/commons/messagebundle_de.properties +8 -2
  44. package/src/sap/suite/ui/commons/messagebundle_el.properties +11 -5
  45. package/src/sap/suite/ui/commons/messagebundle_en.properties +11 -5
  46. package/src/sap/suite/ui/commons/messagebundle_en_GB.properties +11 -5
  47. package/src/sap/suite/ui/commons/messagebundle_en_US_saprigi.properties +9 -5
  48. package/src/sap/suite/ui/commons/messagebundle_es.properties +11 -5
  49. package/src/sap/suite/ui/commons/messagebundle_es_MX.properties +10 -4
  50. package/src/sap/suite/ui/commons/messagebundle_et.properties +6 -0
  51. package/src/sap/suite/ui/commons/messagebundle_fi.properties +10 -4
  52. package/src/sap/suite/ui/commons/messagebundle_fr.properties +11 -5
  53. package/src/sap/suite/ui/commons/messagebundle_fr_CA.properties +11 -5
  54. package/src/sap/suite/ui/commons/messagebundle_hi.properties +11 -5
  55. package/src/sap/suite/ui/commons/messagebundle_hr.properties +10 -4
  56. package/src/sap/suite/ui/commons/messagebundle_hu.properties +9 -3
  57. package/src/sap/suite/ui/commons/messagebundle_id.properties +12 -6
  58. package/src/sap/suite/ui/commons/messagebundle_it.properties +11 -5
  59. package/src/sap/suite/ui/commons/messagebundle_iw.properties +11 -5
  60. package/src/sap/suite/ui/commons/messagebundle_ja.properties +9 -3
  61. package/src/sap/suite/ui/commons/messagebundle_kk.properties +10 -4
  62. package/src/sap/suite/ui/commons/messagebundle_ko.properties +10 -4
  63. package/src/sap/suite/ui/commons/messagebundle_lt.properties +11 -5
  64. package/src/sap/suite/ui/commons/messagebundle_lv.properties +11 -5
  65. package/src/sap/suite/ui/commons/messagebundle_mk.properties +9 -3
  66. package/src/sap/suite/ui/commons/messagebundle_ms.properties +11 -5
  67. package/src/sap/suite/ui/commons/messagebundle_nl.properties +8 -2
  68. package/src/sap/suite/ui/commons/messagebundle_no.properties +10 -4
  69. package/src/sap/suite/ui/commons/messagebundle_pl.properties +11 -5
  70. package/src/sap/suite/ui/commons/messagebundle_pt.properties +11 -5
  71. package/src/sap/suite/ui/commons/messagebundle_pt_PT.properties +11 -5
  72. package/src/sap/suite/ui/commons/messagebundle_ro.properties +11 -5
  73. package/src/sap/suite/ui/commons/messagebundle_ru.properties +12 -6
  74. package/src/sap/suite/ui/commons/messagebundle_sh.properties +11 -5
  75. package/src/sap/suite/ui/commons/messagebundle_sk.properties +10 -4
  76. package/src/sap/suite/ui/commons/messagebundle_sl.properties +10 -4
  77. package/src/sap/suite/ui/commons/messagebundle_sr.properties +11 -5
  78. package/src/sap/suite/ui/commons/messagebundle_sv.properties +10 -4
  79. package/src/sap/suite/ui/commons/messagebundle_th.properties +11 -5
  80. package/src/sap/suite/ui/commons/messagebundle_tr.properties +8 -2
  81. package/src/sap/suite/ui/commons/messagebundle_uk.properties +14 -8
  82. package/src/sap/suite/ui/commons/messagebundle_vi.properties +11 -5
  83. package/src/sap/suite/ui/commons/messagebundle_zh_CN.properties +11 -5
  84. package/src/sap/suite/ui/commons/messagebundle_zh_TW.properties +11 -5
  85. package/src/sap/suite/ui/commons/networkgraph/Graph.js +149 -40
  86. package/src/sap/suite/ui/commons/networkgraph/GraphMap.js +25 -3
  87. package/src/sap/suite/ui/commons/networkgraph/KeyboardNavigator.js +332 -13
  88. package/src/sap/suite/ui/commons/networkgraph/Line.js +110 -12
  89. package/src/sap/suite/ui/commons/networkgraph/Node.js +67 -5
  90. package/src/sap/suite/ui/commons/networkgraph/Utils.js +249 -10
  91. package/src/sap/suite/ui/commons/networkgraph/layout/NoopLayout.js +55 -8
  92. package/src/sap/suite/ui/commons/networkgraph/util/ConnectionPathUtils.js +34 -4
  93. package/src/sap/suite/ui/commons/networkgraph/util/DependencyLayoutHelper.js +230 -82
  94. package/src/sap/suite/ui/commons/networkgraph/util/DragDropManager.js +52 -50
  95. package/src/sap/suite/ui/commons/networkgraph/util/PortManager.js +12 -3
  96. package/src/sap/suite/ui/commons/statusindicator/Circle.js +1 -1
  97. package/src/sap/suite/ui/commons/statusindicator/CustomShape.js +1 -1
  98. package/src/sap/suite/ui/commons/statusindicator/DiscreteThreshold.js +1 -1
  99. package/src/sap/suite/ui/commons/statusindicator/FillingOption.js +1 -1
  100. package/src/sap/suite/ui/commons/statusindicator/LibraryShape.js +1 -1
  101. package/src/sap/suite/ui/commons/statusindicator/Path.js +1 -1
  102. package/src/sap/suite/ui/commons/statusindicator/PropertyThreshold.js +1 -1
  103. package/src/sap/suite/ui/commons/statusindicator/Rectangle.js +1 -1
  104. package/src/sap/suite/ui/commons/statusindicator/Shape.js +1 -1
  105. package/src/sap/suite/ui/commons/statusindicator/ShapeGroup.js +1 -1
  106. package/src/sap/suite/ui/commons/statusindicator/SimpleShape.js +1 -1
  107. package/src/sap/suite/ui/commons/statusindicator/StatusIndicator.js +1 -1
  108. package/src/sap/suite/ui/commons/taccount/TAccount.js +1 -1
  109. package/src/sap/suite/ui/commons/taccount/TAccountGroup.js +1 -1
  110. package/src/sap/suite/ui/commons/taccount/TAccountItem.js +1 -1
  111. package/src/sap/suite/ui/commons/taccount/TAccountItemProperty.js +1 -1
  112. package/src/sap/suite/ui/commons/taccount/TAccountPanel.js +1 -1
  113. package/src/sap/suite/ui/commons/themes/base/BusinessCard.less +5 -4
  114. package/src/sap/suite/ui/commons/themes/base/CalculationBuilder.less +33 -24
  115. package/src/sap/suite/ui/commons/themes/base/CalculationBuilderExpression.less +40 -31
  116. package/src/sap/suite/ui/commons/themes/base/CalculationBuilderInput.less +26 -10
  117. package/src/sap/suite/ui/commons/themes/base/CalculationBuilderItem.less +76 -63
  118. package/src/sap/suite/ui/commons/themes/base/ChartContainer.less +8 -11
  119. package/src/sap/suite/ui/commons/themes/base/ChartTile.less +5 -8
  120. package/src/sap/suite/ui/commons/themes/base/CollaborationPopover.less +116 -106
  121. package/src/sap/suite/ui/commons/themes/base/DateRangeScroller.less +5 -5
  122. package/src/sap/suite/ui/commons/themes/base/DateRangeSliderInternal.less +9 -10
  123. package/src/sap/suite/ui/commons/themes/base/FacetOverview.less +9 -10
  124. package/src/sap/suite/ui/commons/themes/base/FeedItemHeader.less +9 -12
  125. package/src/sap/suite/ui/commons/themes/base/FeedTile.less +23 -27
  126. package/src/sap/suite/ui/commons/themes/base/GenericTile2X2.less +15 -15
  127. package/src/sap/suite/ui/commons/themes/base/HeaderCell.less +7 -6
  128. package/src/sap/suite/ui/commons/themes/base/HeaderContainer.less +35 -37
  129. package/src/sap/suite/ui/commons/themes/base/ImageEditor.less +28 -10
  130. package/src/sap/suite/ui/commons/themes/base/ImageEditorContainer.less +29 -22
  131. package/src/sap/suite/ui/commons/themes/base/InfoTile.less +10 -4
  132. package/src/sap/suite/ui/commons/themes/base/InfoTileSize.less +5 -4
  133. package/src/sap/suite/ui/commons/themes/base/KpiTile.less +10 -11
  134. package/src/sap/suite/ui/commons/themes/base/LaunchTile.less +9 -8
  135. package/src/sap/suite/ui/commons/themes/base/LinkActionSheet.less +14 -43
  136. package/src/sap/suite/ui/commons/themes/base/MicroProcessFlow.less +51 -47
  137. package/src/sap/suite/ui/commons/themes/base/MonitoringContent.less +5 -5
  138. package/src/sap/suite/ui/commons/themes/base/NetworkGraph.less +57 -62
  139. package/src/sap/suite/ui/commons/themes/base/NetworkGroup.less +61 -65
  140. package/src/sap/suite/ui/commons/themes/base/NetworkLine.less +58 -55
  141. package/src/sap/suite/ui/commons/themes/base/NetworkNode.less +3 -0
  142. package/src/sap/suite/ui/commons/themes/base/NetworkTooltip.less +21 -25
  143. package/src/sap/suite/ui/commons/themes/base/NoteTaker.less +13 -18
  144. package/src/sap/suite/ui/commons/themes/base/NoteTakerCard.less +26 -27
  145. package/src/sap/suite/ui/commons/themes/base/NoteTakerFeeder.less +22 -44
  146. package/src/sap/suite/ui/commons/themes/base/NumericTile.less +7 -5
  147. package/src/sap/suite/ui/commons/themes/base/PictureZoomIn.less +6 -5
  148. package/src/sap/suite/ui/commons/themes/base/ProcessFlow.less +57 -76
  149. package/src/sap/suite/ui/commons/themes/base/ProcessFlowConnection.less +71 -17
  150. package/src/sap/suite/ui/commons/themes/base/ProcessFlowConnectionLabel.less +9 -13
  151. package/src/sap/suite/ui/commons/themes/base/ProcessFlowLaneHeader.less +37 -96
  152. package/src/sap/suite/ui/commons/themes/base/ProcessFlowNode.less +219 -238
  153. package/src/sap/suite/ui/commons/themes/base/SemanticColorMixins.less +55 -0
  154. package/src/sap/suite/ui/commons/themes/base/SplitButton.less +7 -20
  155. package/src/sap/suite/ui/commons/themes/base/StatusIndicator.less +10 -9
  156. package/src/sap/suite/ui/commons/themes/base/TAccount.less +78 -73
  157. package/src/sap/suite/ui/commons/themes/base/TargetFilter.less +50 -58
  158. package/src/sap/suite/ui/commons/themes/base/ThingCollection.less +18 -13
  159. package/src/sap/suite/ui/commons/themes/base/ThreePanelThingViewer.less +14 -14
  160. package/src/sap/suite/ui/commons/themes/base/TileContent2X2.less +9 -13
  161. package/src/sap/suite/ui/commons/themes/base/Timeline.less +16 -19
  162. package/src/sap/suite/ui/commons/themes/base/TimelineItem.less +95 -103
  163. package/src/sap/suite/ui/commons/themes/base/UnifiedThingGroup.less +7 -9
  164. package/src/sap/suite/ui/commons/themes/base/UnifiedThingInspector.less +12 -9
  165. package/src/sap/suite/ui/commons/themes/base/VerticalNavigationBar.less +10 -15
  166. package/src/sap/suite/ui/commons/themes/base/ViewRepeater.less +8 -9
  167. package/src/sap/suite/ui/commons/themes/base/library.source.less +0 -2
  168. package/src/sap/suite/ui/commons/themes/sap_fiori_3/MicroProcessFlow.less +9 -3
  169. package/src/sap/suite/ui/commons/themes/sap_fiori_3/ProcessFlowConnection.less +14 -7
  170. package/src/sap/suite/ui/commons/themes/sap_fiori_3/ProcessFlowConnectionLabel.less +38 -35
  171. package/src/sap/suite/ui/commons/themes/sap_fiori_3/ProcessFlowLaneHeader.less +29 -30
  172. package/src/sap/suite/ui/commons/themes/sap_fiori_3/ProcessFlowNode.less +158 -102
  173. package/src/sap/suite/ui/commons/themes/sap_fiori_3_dark/MicroProcessFlow.less +9 -3
  174. package/src/sap/suite/ui/commons/themes/sap_fiori_3_dark/ProcessFlowConnection.less +14 -7
  175. package/src/sap/suite/ui/commons/themes/sap_fiori_3_dark/ProcessFlowConnectionLabel.less +38 -35
  176. package/src/sap/suite/ui/commons/themes/sap_fiori_3_dark/ProcessFlowLaneHeader.less +30 -31
  177. package/src/sap/suite/ui/commons/themes/sap_fiori_3_dark/ProcessFlowNode.less +157 -101
  178. package/src/sap/suite/ui/commons/themes/sap_fiori_3_hcb/ProcessFlowConnection.less +14 -7
  179. package/src/sap/suite/ui/commons/themes/sap_fiori_3_hcb/ProcessFlowConnectionLabel.less +38 -35
  180. package/src/sap/suite/ui/commons/themes/sap_fiori_3_hcb/ProcessFlowLaneHeader.less +30 -31
  181. package/src/sap/suite/ui/commons/themes/sap_fiori_3_hcb/ProcessFlowNode.less +147 -101
  182. package/src/sap/suite/ui/commons/themes/sap_fiori_3_hcw/ProcessFlowConnection.less +14 -7
  183. package/src/sap/suite/ui/commons/themes/sap_fiori_3_hcw/ProcessFlowConnectionLabel.less +38 -35
  184. package/src/sap/suite/ui/commons/themes/sap_fiori_3_hcw/ProcessFlowLaneHeader.less +30 -31
  185. package/src/sap/suite/ui/commons/themes/sap_fiori_3_hcw/ProcessFlowNode.less +158 -102
  186. package/src/sap/suite/ui/commons/themes/sap_horizon/MicroProcessFlow.less +5 -0
  187. package/src/sap/suite/ui/commons/themes/sap_horizon/NetworkLine.less +12 -8
  188. package/src/sap/suite/ui/commons/themes/sap_horizon/ProcessFlowConnection.less +17 -10
  189. package/src/sap/suite/ui/commons/themes/sap_horizon/ProcessFlowConnectionLabel.less +154 -133
  190. package/src/sap/suite/ui/commons/themes/sap_horizon/ProcessFlowLaneHeader.less +30 -32
  191. package/src/sap/suite/ui/commons/themes/sap_horizon/ProcessFlowNode.less +113 -214
  192. package/src/sap/suite/ui/commons/themes/sap_horizon/TimelineItem.less +43 -39
  193. package/src/sap/suite/ui/commons/themes/sap_horizon_dark/MicroProcessFlow.less +5 -0
  194. package/src/sap/suite/ui/commons/themes/sap_horizon_dark/NetworkLine.less +12 -12
  195. package/src/sap/suite/ui/commons/themes/sap_horizon_dark/ProcessFlowConnection.less +17 -10
  196. package/src/sap/suite/ui/commons/themes/sap_horizon_dark/ProcessFlowConnectionLabel.less +154 -133
  197. package/src/sap/suite/ui/commons/themes/sap_horizon_dark/ProcessFlowLaneHeader.less +30 -31
  198. package/src/sap/suite/ui/commons/themes/sap_horizon_dark/ProcessFlowNode.less +114 -216
  199. package/src/sap/suite/ui/commons/themes/sap_horizon_dark/TimelineItem.less +41 -39
  200. package/src/sap/suite/ui/commons/themes/sap_horizon_hcb/MicroProcessFlow.less +4 -4
  201. package/src/sap/suite/ui/commons/themes/sap_horizon_hcb/ProcessFlowConnection.less +17 -10
  202. package/src/sap/suite/ui/commons/themes/sap_horizon_hcb/ProcessFlowConnectionLabel.less +153 -131
  203. package/src/sap/suite/ui/commons/themes/sap_horizon_hcb/ProcessFlowLaneHeader.less +29 -30
  204. package/src/sap/suite/ui/commons/themes/sap_horizon_hcb/ProcessFlowNode.less +159 -103
  205. package/src/sap/suite/ui/commons/themes/sap_horizon_hcb/TimelineItem.less +41 -39
  206. package/src/sap/suite/ui/commons/themes/sap_horizon_hcw/MicroProcessFlow.less +4 -4
  207. package/src/sap/suite/ui/commons/themes/sap_horizon_hcw/ProcessFlowConnection.less +16 -9
  208. package/src/sap/suite/ui/commons/themes/sap_horizon_hcw/ProcessFlowConnectionLabel.less +153 -131
  209. package/src/sap/suite/ui/commons/themes/sap_horizon_hcw/ProcessFlowLaneHeader.less +29 -30
  210. package/src/sap/suite/ui/commons/themes/sap_horizon_hcw/ProcessFlowNode.less +157 -101
  211. package/src/sap/suite/ui/commons/themes/sap_horizon_hcw/TimelineItem.less +41 -39
  212. package/src/sap/suite/ui/commons/windowmessages/CollaborationMessageConsumer.js +3 -3
  213. package/src/sap/suite/ui/commons/themes/base/DateRangeSlider.less +0 -3
  214. package/src/sap/suite/ui/commons/themes/base/MonitoringTile.less +0 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.suite.ui.commons",
3
- "version": "1.145.1",
3
+ "version": "1.147.0",
4
4
  "description": "SAPUI5 Library sap.suite.ui.commons",
5
5
  "homepage": "https://sap.github.io/ui5-tooling/pages/SAPUI5/",
6
6
  "author": "SAP SE (https://www.sap.com)",
@@ -7,7 +7,7 @@
7
7
  SAP UI development toolkit for HTML5 (SAPUI5)
8
8
  (c) Copyright 2009-2015 SAP SE. All rights reserved
9
9
  </copyright>
10
- <version>1.145.1</version>
10
+ <version>1.147.0</version>
11
11
 
12
12
  <documentation>SAP UI library: sap.suite.ui.commons</documentation>
13
13
 
@@ -19,7 +19,7 @@ sap.ui.define([
19
19
  * @extends sap.ui.core.Element
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.145.1
22
+ * @version 1.147.0
23
23
  * @since 1.65.0
24
24
  *
25
25
  * @constructor
@@ -134,7 +134,7 @@ sap.ui.define([
134
134
  * @extends sap.ui.core.Control
135
135
  *
136
136
  * @author SAP SE
137
- * @version 1.145.1
137
+ * @version 1.147.0
138
138
  * @since 1.56.0
139
139
  *
140
140
  * @constructor
@@ -345,7 +345,19 @@ sap.ui.define([
345
345
  /**
346
346
  * This event is fired after the expression is validated.
347
347
  */
348
- afterValidation: {}
348
+ afterValidation: {},
349
+ /**
350
+ * This event is triggered when the focus leaves the input field.
351
+ * @param {string} value The current expression value
352
+ * @param {int} position The cursor position in the expression
353
+ * @since 1.146
354
+ */
355
+ focusChange: {
356
+ parameters: {
357
+ value: "String",
358
+ position: "int"
359
+ }
360
+ }
349
361
  }
350
362
  },
351
363
  renderer: {
@@ -441,6 +453,11 @@ sap.ui.define([
441
453
  aItems = this._oInput._stringToItems(sText),
442
454
  iPosition = oEvent.getParameter("position");
443
455
 
456
+ // Preserve manually-set Literal types when items move positions
457
+ // Only for unique keys (not duplicates) to avoid the bug where
458
+ // all items with same key become Literals
459
+ this._preserveUniqueLiteralTypes(aItems);
460
+
444
461
  this._oExpressionBuilder._smartRender(aItems);
445
462
  this._setExpression(this._oInput._convertEmptyHashes(sText));
446
463
 
@@ -456,11 +473,65 @@ sap.ui.define([
456
473
 
457
474
  this._enableOrDisableExpandAllButton();
458
475
  this.fireChange();
476
+ }.bind(this),
477
+ focusChange: function (oEvent) {
478
+ this.fireFocusChange({
479
+ value: oEvent.getParameter("value"),
480
+ position: oEvent.getParameter("position")
481
+ });
459
482
  }.bind(this)
460
483
  });
461
484
  this.addDependent(this._oInput);
462
485
  };
463
486
 
487
+ /**
488
+ * Preserves manually-set Literal types when items move positions (e.g., adding brackets).
489
+ * Only applies to keys that appear EXACTLY ONCE in both existing and new items.
490
+ * This prevents the bug where multiple items with the same key all become Literals
491
+ * when only one of them was manually converted.
492
+ * @param {array} aNewItems Array of new items to process
493
+ * @private
494
+ */
495
+ CalculationBuilder.prototype._preserveUniqueLiteralTypes = function (aNewItems) {
496
+ var aExistingItems = this._oExpressionBuilder.getItems();
497
+
498
+ // Count occurrences of each key in existing and new items
499
+ var mExistingKeyCounts = {};
500
+ var mNewKeyCounts = {};
501
+ var mLiteralKeys = {}; // Track which keys are manually-set Literals
502
+
503
+ aExistingItems.forEach(function (oItem) {
504
+ var sKey = oItem.getKey();
505
+ mExistingKeyCounts[sKey] = (mExistingKeyCounts[sKey] || 0) + 1;
506
+
507
+ // Track manually-set Literals
508
+ if (oItem._sType === ItemType.Literal) {
509
+ mLiteralKeys[sKey] = true;
510
+ }
511
+ });
512
+
513
+ aNewItems.forEach(function (oItem) {
514
+ var sKey = oItem.getKey();
515
+ mNewKeyCounts[sKey] = (mNewKeyCounts[sKey] || 0) + 1;
516
+ });
517
+
518
+ // Only preserve Literal type for keys that:
519
+ // 1. Appear exactly ONCE in existing items as a Literal
520
+ // 2. Appear exactly ONCE in new items
521
+ // This ensures we're preserving the same logical item that moved, not duplicates
522
+ aNewItems.forEach(function (oNewItem) {
523
+ var sKey = oNewItem.getKey();
524
+
525
+ if (mLiteralKeys[sKey] &&
526
+ mExistingKeyCounts[sKey] === 1 &&
527
+ mNewKeyCounts[sKey] === 1 &&
528
+ (!oNewItem._sType || oNewItem._sType === "")) {
529
+ // This is a unique item that was manually set as Literal and has moved position
530
+ oNewItem._sType = ItemType.Literal;
531
+ }
532
+ });
533
+ };
534
+
464
535
  CalculationBuilder.prototype._expressionChanged = function () {
465
536
  var sPlainText = "";
466
537
 
@@ -501,7 +572,8 @@ sap.ui.define([
501
572
  this._oInput._aVariables = this.getVariables();
502
573
 
503
574
  if (this._bExpressionSet) {
504
- this._oExpressionBuilder._setItems(this._oInput._stringToItems(this._sExpressionDirectValue));
575
+ var aItems = this._oInput._stringToItems(this._sExpressionDirectValue);
576
+ this._oExpressionBuilder._setItems(aItems);
505
577
  }
506
578
  this._bExpressionSet = false;
507
579
  this._sExpressionDirectValue = "";
@@ -868,10 +940,17 @@ sap.ui.define([
868
940
  return ItemType.Variable;
869
941
  }
870
942
 
871
- if (this._isFunction(sKey)) {
943
+ // Check if default function exists and is not disabled
944
+ var bDefaultExistsInMap = this._findInArray(sKey, Object.keys(FunctionType));
945
+ var bIsDefaultDisabled = !!this._mDisabledTokens[sKey];
946
+
947
+ // If default function exists and is NOT disabled, return Function type
948
+ // (enabled defaults take precedence over custom functions with same key)
949
+ if (bDefaultExistsInMap && !bIsDefaultDisabled) {
872
950
  return ItemType.Function;
873
951
  }
874
952
 
953
+ // If default is disabled or doesn't exist, check for custom function
875
954
  if (this._findInChildren(sKey, "Function")) {
876
955
  return ItemType.CustomFunction;
877
956
  }
@@ -148,7 +148,7 @@ sap.ui.define([
148
148
  * @extends sap.ui.core.Control
149
149
  *
150
150
  * @author SAP SE
151
- * @version 1.145.1
151
+ * @version 1.147.0
152
152
  * @since 1.56.0
153
153
  *
154
154
  * @constructor
@@ -1109,7 +1109,8 @@ sap.ui.define([
1109
1109
  bIsTemplate = this._oCurrentItem && !this._oCurrentItem.getKey(),
1110
1110
  oParent = this.getParent(),
1111
1111
  oFunction = mArguments.functionObject,
1112
- aItems = this.getItems();
1112
+ aItems = this.getItems(),
1113
+ aNewItems;
1113
1114
 
1114
1115
  var fnProcessFunction = function () {
1115
1116
  var aItems = mArguments.type === ItemType.Function ? oFunction.template : oParent._convertToTemplate(oFunction.getItems());
@@ -1134,7 +1135,11 @@ sap.ui.define([
1134
1135
  }.bind(this);
1135
1136
 
1136
1137
  if (bIsNewItem) {
1137
- var aNewItems = [mArguments.key];
1138
+ // For literals, pass type information to preserve it during re-render
1139
+ // For other types, keep existing behavior (pass as string)
1140
+ aNewItems = (mArguments.type === ItemType.Literal) ?
1141
+ [{ key: mArguments.key, _sType: mArguments.type }] :
1142
+ [mArguments.key];
1138
1143
 
1139
1144
  if (oFunction) {
1140
1145
  fnProcessFunction();
@@ -1142,18 +1147,34 @@ sap.ui.define([
1142
1147
 
1143
1148
  fnRender();
1144
1149
  } else {
1145
- // updating current item or creating new item from function "empty" item
1146
- this._oCurrentItem.setKey(mArguments.key);
1150
+ var oCurrentItem = this._oCurrentItem;
1147
1151
 
1148
- if (mArguments.type) {
1149
- this._oCurrentItem._sType = mArguments.type;
1150
- }
1152
+ // Pass type as third parameter to preserve it after _reset()
1153
+ oCurrentItem.setKey(mArguments.key, false, mArguments.type);
1151
1154
 
1152
1155
  if (bIsTemplate && oFunction) {
1153
- var aNewItems = [];
1156
+ aNewItems = [];
1154
1157
  this._iCurrentIndex = fnFindCurrentItem();
1155
1158
  fnProcessFunction();
1156
1159
  fnRender();
1160
+ } else {
1161
+ // For non-template items, manually update the DOM to reflect changes
1162
+ var oRm = new RenderManager();
1163
+ var $item = oCurrentItem.$();
1164
+
1165
+ if ($item && $item[0]) {
1166
+ // Update InvisibleText with new label (no destroy/recreate needed)
1167
+ var sCurrentLabel = oCurrentItem._getLabel();
1168
+ if (oCurrentItem._oCalculationBuilderItemText) {
1169
+ oCurrentItem._oCalculationBuilderItemText.setText(sCurrentLabel);
1170
+ }
1171
+
1172
+ oCurrentItem._innerRender(oRm, $item[0]);
1173
+ $item.attr("class", oCurrentItem._getClass(null, oRm, true));
1174
+
1175
+ // Re-attach event handlers after DOM update
1176
+ oCurrentItem._setEvents();
1177
+ }
1157
1178
  }
1158
1179
  }
1159
1180
 
@@ -1280,6 +1301,11 @@ sap.ui.define([
1280
1301
 
1281
1302
  CalculationBuilderExpression.prototype._getKeys = function () {
1282
1303
  return this.getItems().map(function (oItem) {
1304
+ // Preserve type information for literals to prevent re-evaluation
1305
+ // when items are re-rendered (e.g., when adding an operator after a literal)
1306
+ if (oItem._sType === ItemType.Literal) {
1307
+ return { key: oItem.getKey(), _sType: oItem._sType };
1308
+ }
1283
1309
  return oItem.getKey();
1284
1310
  });
1285
1311
  };
@@ -2046,10 +2072,26 @@ sap.ui.define([
2046
2072
  };
2047
2073
 
2048
2074
  CalculationBuilderExpression.prototype._convertFromNewItem = function (oItem) {
2049
- return typeof oItem === "object" ? oItem :
2050
- new CalculationBuilderItem({
2075
+ if (typeof oItem === "object") {
2076
+ // Check if it's already a CalculationBuilderItem
2077
+ if (oItem.getKey) {
2078
+ return oItem;
2079
+ }
2080
+ // Plain object with key and optional _sType (for literals only)
2081
+ var oNewItem = new CalculationBuilderItem({
2082
+ key: oItem.key
2083
+ });
2084
+ // Only transfer type for literals (consistent with _smartRender)
2085
+ if (oItem._sType !== undefined && oItem._sType === ItemType.Literal) {
2086
+ oNewItem._sType = oItem._sType;
2087
+ }
2088
+ return oNewItem;
2089
+ } else {
2090
+ // String key (existing behavior for non-literals)
2091
+ return new CalculationBuilderItem({
2051
2092
  key: oItem
2052
2093
  });
2094
+ }
2053
2095
  };
2054
2096
 
2055
2097
  CalculationBuilderExpression.prototype._showErrorIcon = function () {
@@ -2101,15 +2143,46 @@ sap.ui.define([
2101
2143
  for (var i = 0; i < aNewItems.length; i++) {
2102
2144
  var oItem = aItems[i],
2103
2145
  oNewItem = aNewItems[i],
2104
- sKey = typeof oNewItem === "object" && oNewItem.getKey ? oNewItem.getKey() : oNewItem,
2146
+ sKey, sType;
2147
+
2148
+ // Extract key (standard logic for all types)
2149
+ if (typeof oNewItem === "object" && oNewItem.getKey) {
2150
+ sKey = oNewItem.getKey();
2151
+ } else if (typeof oNewItem === "object" && oNewItem.key) {
2152
+ sKey = oNewItem.key; // For literal plain objects: {key: "1000", _sType: "Literal"}
2153
+ } else {
2154
+ sKey = oNewItem; // String
2155
+ }
2156
+
2157
+ // Extract type: only preserve when explicitly passed in new item
2158
+ if (oNewItem._sType !== undefined && oNewItem._sType === ItemType.Literal) {
2159
+ // Literal with explicit type (from popup submission)
2160
+ sType = oNewItem._sType;
2161
+ } else {
2162
+ // All other cases - let natural type detection happen
2105
2163
  sType = oNewItem._sType ? oNewItem._sType : "";
2164
+ }
2106
2165
 
2107
2166
  if (!oItem) {
2108
2167
  fnAddNew(aNewItems[i]);
2109
2168
  } else if (oItem.getKey() !== sKey || oItem._sType !== sType) {
2110
- oItem.setKey(sKey, true);
2169
+ // CRITICAL: Preserve manually-set Literal type when keys match
2170
+ // This handles the case where user manually converts a variable to literal,
2171
+ // then types additional characters in text input (e.g., "1000" -> "+")
2172
+ // Without this, the literal would revert to variable on re-parse
2173
+ if (oItem.getKey() === sKey &&
2174
+ oItem._sType === ItemType.Literal &&
2175
+ (!sType || sType === "")) {
2176
+ // Keep existing literal type when:
2177
+ // 1. Keys match (same value)
2178
+ // 2. Existing item is a Literal (manually set)
2179
+ // 3. New item has no explicit type (from text input parser)
2180
+ sType = ItemType.Literal;
2181
+ }
2111
2182
 
2112
- oItem._sType = sType;
2183
+ // Pass type as third parameter to setKey to preserve it after _reset()
2184
+ // This is critical for literals to avoid auto-conversion to variables
2185
+ oItem.setKey(sKey, true, sType);
2113
2186
 
2114
2187
  var $item = oItem.$();
2115
2188
 
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.core.Control
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.145.1
29
+ * @version 1.147.0
30
30
  * @since 1.56.0
31
31
  *
32
32
  * @constructor
@@ -22,7 +22,7 @@ sap.ui.define([
22
22
  * @extends sap.ui.core.Control
23
23
  *
24
24
  * @author SAP SE
25
- * @version 1.145.1
25
+ * @version 1.147.0
26
26
  * @since 1.60.0
27
27
  *
28
28
  * @constructor
@@ -110,6 +110,12 @@ sap.ui.define([
110
110
  position: "integer",
111
111
  validate: "boolean"
112
112
  }
113
+ },
114
+ focusChange: {
115
+ parameters: {
116
+ value: "String",
117
+ position: "int"
118
+ }
113
119
  }
114
120
  }
115
121
  },
@@ -987,6 +993,11 @@ sap.ui.define([
987
993
  } else {
988
994
  this._showErrorText(false);
989
995
  this._validate(false);
996
+ var sCurrentValue = fnGetNodesText(this.$("input")[0], true);
997
+ this.fireFocusChange({
998
+ value: sCurrentValue,
999
+ position: this._iCarretPosition
1000
+ });
990
1001
  }
991
1002
  };
992
1003
 
@@ -40,7 +40,7 @@ sap.ui.define([
40
40
  * @extends sap.ui.core.Control
41
41
  *
42
42
  * @author SAP SE
43
- * @version 1.145.1
43
+ * @version 1.147.0
44
44
  * @since 1.56.0
45
45
  *
46
46
  * @constructor
@@ -261,11 +261,18 @@ sap.ui.define([
261
261
  oRm.attr("tabindex", sTabIndexAttr);
262
262
  oRm.attr("title", sTooltipAttr);
263
263
  oRm.attr("role", "button");
264
+ // Always update label text to reflect current state
265
+ var sCurrentLabel = this._getLabel();
266
+
264
267
  if (!this._oCalculationBuilderItemText) {
265
268
  this._oCalculationBuilderItemText = new InvisibleText();
266
269
  this._oCalculationBuilderItemText.toStatic();
267
- this._oCalculationBuilderItemText.setText(this._getLabel());
270
+ // Make it a dependent so it's managed by control lifecycle
271
+ this.addDependent(this._oCalculationBuilderItemText);
268
272
  }
273
+ // Update text every time to reflect label changes
274
+ this._oCalculationBuilderItemText.setText(sCurrentLabel);
275
+
269
276
  oRm.attr("aria-labelledby", this._oCalculationBuilderItemText.getId());
270
277
  oRm.attr("aria-describedby", this._oArrowNavigtionInvisibleText.getId());
271
278
  oRm.openEnd();
@@ -600,11 +607,17 @@ sap.ui.define([
600
607
  this._sType = "";
601
608
  this._sLabel = "";
602
609
  this._oVariable = "";
610
+ // InvisibleText is now a dependent - no need to destroy, just update text later
603
611
  };
604
612
 
605
- CalculationBuilderItem.prototype.setKey = function (sKey, bSuppressInvalidation) {
613
+ CalculationBuilderItem.prototype.setKey = function (sKey, bSuppressInvalidation, sType) {
606
614
  this._reset();
607
615
 
616
+ // Restore type after reset if explicitly provided (for literal preservation)
617
+ if (sType !== undefined) {
618
+ this._sType = sType;
619
+ }
620
+
608
621
  this.setProperty("key", this._sanitizeKey(sKey), bSuppressInvalidation);
609
622
 
610
623
  // api change after all rendered, we need to recreate all items and input
@@ -21,7 +21,7 @@ sap.ui.define([
21
21
  * @extends sap.ui.base.ManagedObject
22
22
  *
23
23
  * @author SAP SE
24
- * @version 1.145.1
24
+ * @version 1.147.0
25
25
  * @since 1.56.0
26
26
  *
27
27
  * @constructor
@@ -23,7 +23,7 @@ sap.ui.define([
23
23
  * @extends sap.ui.core.Control
24
24
  *
25
25
  * @author SAP SE
26
- * @version 1.145.1
26
+ * @version 1.147.0
27
27
  * @since 1.56.0
28
28
  *
29
29
  * @constructor
@@ -118,7 +118,7 @@ sap.ui.define([
118
118
  * @class
119
119
  * @public
120
120
  * @internal
121
- * @version 1.145.1
121
+ * @version 1.147.0
122
122
  */
123
123
  var CloudFilePicker = Dialog.extend("sap.suite.ui.commons.CloudFilePicker", {
124
124
  metadata: {
@@ -30,11 +30,14 @@ sap.ui.define([
30
30
  }
31
31
  }
32
32
  },
33
- renderer: function (oRm, oProxy) {
34
- var sItem = oProxy.getAssociation("control"),
35
- oItem = Element.getElementById(sItem);
33
+ renderer: {
34
+ apiVersion: 2,
35
+ render (oRm, oProxy) {
36
+ var sItem = oProxy.getAssociation("control"),
37
+ oItem = Element.getElementById(sItem);
36
38
 
37
- oRm.renderControl(oItem);
39
+ oRm.renderControl(oItem);
40
+ }
38
41
  }
39
42
  });
40
43
 
@@ -50,7 +50,7 @@ sap.ui.define([
50
50
  * @extends sap.ui.core.Control
51
51
  *
52
52
  * @author SAP SE
53
- * @version 1.145.1
53
+ * @version 1.147.0
54
54
  *
55
55
  * @constructor
56
56
  * @public
@@ -38,7 +38,7 @@ sap.ui.define([
38
38
  * @extends sap.ui.core.Control
39
39
  *
40
40
  * @author SAP SE
41
- * @version 1.145.1
41
+ * @version 1.147.0
42
42
  *
43
43
  * @constructor
44
44
  * @public
@@ -72,6 +72,9 @@ sap.ui.define([
72
72
  aLanePositionNodes = oControl._getOrCreateLaneMap();
73
73
  aConnectionsBetweenNodes = oControl._getConnectionsMap();
74
74
  } catch (exc) {
75
+ oRm.close("div"); //Scroll content.
76
+ oRm.close("div"); //Scroll container.
77
+ oRm.close("div"); //Whole control.
75
78
  oControl._handleException(exc);
76
79
  return;
77
80
  }
@@ -14,13 +14,14 @@ sap.ui.define([
14
14
  "sap/ui/core/Fragment",
15
15
  "sap/ui/model/json/JSONModel",
16
16
  "sap/m/library",
17
+ "sap/m/MessageToast",
17
18
  "sap/ui/core/Lib",
18
19
  "sap/ui/core/Core",
19
20
  "sap/ui/model/resource/ResourceModel",
20
21
  "./CollaborationContactInfoHelper",
21
22
  "sap/ui/performance/trace/FESRHelper",
22
23
  "sap/ui/core/Element"
23
- ], function(Controller, Fragment, JSONModel, mLibrary, Library, Core, ResourceModel, CollaborationContactInfoHelper, FESRHelper, Element) {
24
+ ], function(Controller, Fragment, JSONModel, mLibrary, MessageToast, Library, Core, ResourceModel, CollaborationContactInfoHelper, FESRHelper, Element) {
24
25
  "use strict";
25
26
 
26
27
  var I18_BUNDLE = Library.getResourceBundleFor("sap.suite.ui.commons");
@@ -335,6 +336,9 @@ sap.ui.define([
335
336
  handleCopyEmailPress: function() {
336
337
  if (typeof window !== "undefined" && window.navigator && window.navigator.clipboard && window.navigator.clipboard.writeText) {
337
338
  window.navigator.clipboard.writeText(this.sEmail);
339
+ MessageToast.show(I18_BUNDLE.getText("POPOVER_CONTACT_COPY_EMAIL_SUCCESS"));
340
+ } else {
341
+ MessageToast.show(I18_BUNDLE.getText("POPOVER_CONTACT_COPY_EMAIL_ERROR"));
338
342
  }
339
343
  }
340
344
  });
@@ -8,8 +8,8 @@
8
8
  placement="Auto"
9
9
  showHeader="false"
10
10
  contentWidth="21.875rem"
11
- afterClose="afterClose"
12
- afterOpen="afterOpen">
11
+ afterClose=".afterClose"
12
+ afterOpen=".afterOpen">
13
13
  <VBox visible="{userData>/isUserExistsInTeams}">
14
14
  <HBox>
15
15
  <Avatar id="avatar" src="{= ${userData>/photo} ? ${userData>/photo} : 'sap-icon://person-placeholder' }"
@@ -24,7 +24,7 @@
24
24
  <Title text="{i18n>COLLABORATION_MSTEAMS_SHARE}" level="H5"/>
25
25
  <ToolbarSpacer/>
26
26
  <Button
27
- press="handleMSTeamsPress"
27
+ press=".handleMSTeamsPress"
28
28
  macrodata:email="{userData>/mail}"
29
29
  macrodata:type="chat"
30
30
  tooltip="{i18n>CHAT_BUTTON_TOOLTIP}"
@@ -34,7 +34,7 @@
34
34
  fesr:press="MST:ContactAction"
35
35
  />
36
36
  <Button
37
- press="handleMSTeamsPress"
37
+ press=".handleMSTeamsPress"
38
38
  macrodata:email="{userData>/mail}"
39
39
  macrodata:type="videoCall"
40
40
  tooltip="{i18n>VIDEOCALL_BUTTON_TOOLTIP}"
@@ -44,7 +44,7 @@
44
44
  fesr:press="MST:ContactAction"
45
45
  />
46
46
  <Button
47
- press="handleMSTeamsPress"
47
+ press=".handleMSTeamsPress"
48
48
  macrodata:email="{userData>/mail}"
49
49
  macrodata:type="call"
50
50
  tooltip="{i18n>CALL_BUTTON_TOOLTIP}"
@@ -71,9 +71,9 @@
71
71
 
72
72
  <VBox visible="{= !!${userData>/mail}}" class="sapUiTinyMarginTop sapUiTinyMarginBottom" >
73
73
  <Label id="UserEmail" text="{i18n>POPOVER_CONTACT_SECTION_EMAIL}:" />
74
- <HBox>
75
- <Link text="{userData>/mail}" href="{path: 'userData>/mail', formatter: '.formatUri'}" ariaLabelledBy="UserEmail" class="sapUiTinyMarginEnd"/>
76
- <core:Icon src="sap-icon://copy" press="handleCopyEmailPress" decorative="false" tooltip="{i18n>POPOVER_CONTACT_COPY_EMAIL}"/>
74
+ <HBox alignItems="Center" justifyContent="SpaceBetween">
75
+ <Link text="{userData>/mail}" href="{path: 'userData>/mail', formatter: '.formatUri'}" ariaLabelledBy="UserEmail"/>
76
+ <core:Icon src="sap-icon://copy" press=".handleCopyEmailPress" decorative="false" tooltip="{i18n>POPOVER_CONTACT_COPY_EMAIL}" class="sapThemeHighlight-asColor"/>
77
77
  </HBox>
78
78
  </VBox>
79
79
 
@@ -87,8 +87,8 @@
87
87
  <IllustratedMessage illustrationType="tnt-NoUsers" illustrationSize="Dialog" title="{i18n>POPOVER_NO_CONTACT_TITLE}"
88
88
  description="{i18n>POPOVER_NO_CONTACT_DESCRIPTION}" >
89
89
  <additionalContent>
90
- <Button id="mail" text="{i18n>POPOVER_CONTINUE}" press="afterContinue" type="Emphasized" class="sapUiTinyMarginEnd"/>
91
- <Button text="{i18n>POPOVER_CANCEL}" press="afterClose"/>
90
+ <Button id="mail" text="{i18n>POPOVER_CONTINUE}" press=".afterContinue" type="Emphasized" class="sapUiTinyMarginEnd"/>
91
+ <Button text="{i18n>POPOVER_CANCEL}" press=".afterClose"/>
92
92
  </additionalContent>
93
93
  </IllustratedMessage >
94
94
  </HBox>
@@ -10,12 +10,12 @@
10
10
  initialFocus="action"
11
11
  showHeader="false"
12
12
  contentWidth="25rem"
13
- afterClose="afterClose">
13
+ afterClose=".afterClose">
14
14
  <VBox>
15
15
  <HBox>
16
16
  <Title text="{i18n>COLLABORATION_MSTEAMS_SHARE}" level="H5" class="sapUiTinyMarginTop"/>
17
17
  <Button
18
- press="handleMSTeamsPress"
18
+ press=".handleMSTeamsPress"
19
19
  macrodata:email="{userData>/mail}"
20
20
  macrodata:type="chat"
21
21
  tooltip="{i18n>CHAT_BUTTON_TOOLTIP}"
@@ -25,7 +25,7 @@
25
25
  fesr:press="MST:ContactAction"
26
26
  />
27
27
  <Button
28
- press="handleMSTeamsPress"
28
+ press=".handleMSTeamsPress"
29
29
  macrodata:email="{userData>/mail}"
30
30
  macrodata:type="videoCall"
31
31
  tooltip="{i18n>VIDEOCALL_BUTTON_TOOLTIP}"
@@ -35,7 +35,7 @@
35
35
  fesr:press="MST:ContactAction"
36
36
  />
37
37
  <Button
38
- press="handleMSTeamsPress"
38
+ press=".handleMSTeamsPress"
39
39
  macrodata:email="{userData>/mail}"
40
40
  macrodata:type="call"
41
41
  tooltip="{i18n>CALL_BUTTON_TOOLTIP}"
@@ -46,12 +46,14 @@
46
46
  />
47
47
  </HBox>
48
48
 
49
- <HBox class="sapUiTinyMarginTop">
50
- <core:Icon
51
- src="sap-icon://email">
52
- </core:Icon>
53
- <Link text="{userData>/mail}" href="{parts: [{path: 'userData>/mail'}, {path: 'userData>/params'}], formatter: '.formatUri'}" class="sapUiSmallMarginBegin sapUiTinyMarginBottom sapUiTinyMarginEnd" />
54
- <core:Icon src="sap-icon://copy" press="handleCopyEmailPress" decorative="false" tooltip="{i18n>POPOVER_CONTACT_COPY_EMAIL}"/>
49
+ <HBox class="sapUiTinyMarginTop" alignItems="Center" justifyContent="SpaceBetween">
50
+ <HBox alignItems="Center">
51
+ <core:Icon
52
+ src="sap-icon://email">
53
+ </core:Icon>
54
+ <Link text="{userData>/mail}" href="{parts: [{path: 'userData>/mail'}, {path: 'userData>/params'}], formatter: '.formatUri'}" class="sapUiSmallMarginBegin sapUiTinyMarginBottom" />
55
+ </HBox>
56
+ <core:Icon src="sap-icon://copy" press=".handleCopyEmailPress" decorative="false" tooltip="{i18n>POPOVER_CONTACT_COPY_EMAIL}" class="sapThemeHighlight-asColor"/>
55
57
  </HBox>
56
58
  </VBox>
57
59
  </Popover>