@sapui5/sap.suite.ui.commons 1.144.0 → 1.146.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 (123) 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 +35 -6
  5. package/src/sap/suite/ui/commons/CalculationBuilderExpression.js +1 -1
  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 +1 -1
  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 -3
  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/ProcessFlow.js +79 -75
  17. package/src/sap/suite/ui/commons/ProcessFlowRenderer.js +3 -0
  18. package/src/sap/suite/ui/commons/Timeline.js +9 -0
  19. package/src/sap/suite/ui/commons/TimelineNavigator.js +37 -5
  20. package/src/sap/suite/ui/commons/TimelineRenderer.js +3 -3
  21. package/src/sap/suite/ui/commons/collaboration/BaseHelperService.js +0 -1
  22. package/src/sap/suite/ui/commons/collaboration/CollaborationHelper.js +0 -3
  23. package/src/sap/suite/ui/commons/collaboration/CollaborationManagerService.js +0 -1
  24. package/src/sap/suite/ui/commons/collaboration/ContactHelper.js +12 -1
  25. package/src/sap/suite/ui/commons/collaboration/ContactPopover.fragment.xml +4 -1
  26. package/src/sap/suite/ui/commons/collaboration/MinimalContactPopover.fragment.xml +8 -5
  27. package/src/sap/suite/ui/commons/collaboration/ServiceContainer.js +12 -2
  28. package/src/sap/suite/ui/commons/collaboration/TeamsHelperService.js +0 -6
  29. package/src/sap/suite/ui/commons/collaboration/channels/MessageChannel.js +0 -2
  30. package/src/sap/suite/ui/commons/collaboration/flpplugins/msplugin/Component-preload.js +1 -1
  31. package/src/sap/suite/ui/commons/collaboration/flpplugins/msplugin/Component.js +1 -2
  32. package/src/sap/suite/ui/commons/flexibility/changeHandler/PropertyChangeMapper.js +1 -1
  33. package/src/sap/suite/ui/commons/imageeditor/CropCustomShapeHistoryItem.js +1 -1
  34. package/src/sap/suite/ui/commons/imageeditor/CropEllipseHistoryItem.js +1 -1
  35. package/src/sap/suite/ui/commons/imageeditor/CropRectangleHistoryItem.js +1 -1
  36. package/src/sap/suite/ui/commons/imageeditor/CustomSizeItem.js +1 -1
  37. package/src/sap/suite/ui/commons/imageeditor/FilterHistoryItem.js +1 -1
  38. package/src/sap/suite/ui/commons/imageeditor/FlipHistoryItem.js +1 -1
  39. package/src/sap/suite/ui/commons/imageeditor/HistoryItem.js +1 -1
  40. package/src/sap/suite/ui/commons/imageeditor/ImageEditor.js +1 -1
  41. package/src/sap/suite/ui/commons/imageeditor/ImageEditorContainer.js +1 -1
  42. package/src/sap/suite/ui/commons/imageeditor/ImageEditorResponsiveContainer.js +9 -6
  43. package/src/sap/suite/ui/commons/imageeditor/ResizeHistoryItem.js +1 -1
  44. package/src/sap/suite/ui/commons/imageeditor/RotateHistoryItem.js +1 -1
  45. package/src/sap/suite/ui/commons/library.js +25 -1
  46. package/src/sap/suite/ui/commons/messagebundle.properties +20 -9
  47. package/src/sap/suite/ui/commons/messagebundle_ar.properties +24 -3
  48. package/src/sap/suite/ui/commons/messagebundle_bg.properties +24 -3
  49. package/src/sap/suite/ui/commons/messagebundle_ca.properties +24 -3
  50. package/src/sap/suite/ui/commons/messagebundle_cnr.properties +24 -3
  51. package/src/sap/suite/ui/commons/messagebundle_cs.properties +23 -2
  52. package/src/sap/suite/ui/commons/messagebundle_cy.properties +24 -3
  53. package/src/sap/suite/ui/commons/messagebundle_da.properties +23 -2
  54. package/src/sap/suite/ui/commons/messagebundle_de.properties +36 -15
  55. package/src/sap/suite/ui/commons/messagebundle_el.properties +25 -4
  56. package/src/sap/suite/ui/commons/messagebundle_en.properties +24 -3
  57. package/src/sap/suite/ui/commons/messagebundle_en_GB.properties +24 -3
  58. package/src/sap/suite/ui/commons/messagebundle_en_US_saprigi.properties +11 -5
  59. package/src/sap/suite/ui/commons/messagebundle_es.properties +24 -3
  60. package/src/sap/suite/ui/commons/messagebundle_es_MX.properties +24 -3
  61. package/src/sap/suite/ui/commons/messagebundle_et.properties +23 -2
  62. package/src/sap/suite/ui/commons/messagebundle_fi.properties +23 -2
  63. package/src/sap/suite/ui/commons/messagebundle_fr.properties +32 -11
  64. package/src/sap/suite/ui/commons/messagebundle_fr_CA.properties +24 -3
  65. package/src/sap/suite/ui/commons/messagebundle_hi.properties +24 -3
  66. package/src/sap/suite/ui/commons/messagebundle_hr.properties +24 -3
  67. package/src/sap/suite/ui/commons/messagebundle_hu.properties +24 -3
  68. package/src/sap/suite/ui/commons/messagebundle_id.properties +25 -4
  69. package/src/sap/suite/ui/commons/messagebundle_it.properties +24 -3
  70. package/src/sap/suite/ui/commons/messagebundle_iw.properties +24 -3
  71. package/src/sap/suite/ui/commons/messagebundle_ja.properties +24 -3
  72. package/src/sap/suite/ui/commons/messagebundle_kk.properties +25 -4
  73. package/src/sap/suite/ui/commons/messagebundle_ko.properties +23 -2
  74. package/src/sap/suite/ui/commons/messagebundle_lt.properties +24 -3
  75. package/src/sap/suite/ui/commons/messagebundle_lv.properties +24 -3
  76. package/src/sap/suite/ui/commons/messagebundle_mk.properties +23 -2
  77. package/src/sap/suite/ui/commons/messagebundle_ms.properties +24 -3
  78. package/src/sap/suite/ui/commons/messagebundle_nl.properties +23 -2
  79. package/src/sap/suite/ui/commons/messagebundle_no.properties +25 -4
  80. package/src/sap/suite/ui/commons/messagebundle_pl.properties +24 -3
  81. package/src/sap/suite/ui/commons/messagebundle_pt.properties +24 -3
  82. package/src/sap/suite/ui/commons/messagebundle_pt_PT.properties +24 -3
  83. package/src/sap/suite/ui/commons/messagebundle_ro.properties +24 -3
  84. package/src/sap/suite/ui/commons/messagebundle_ru.properties +25 -4
  85. package/src/sap/suite/ui/commons/messagebundle_sh.properties +24 -3
  86. package/src/sap/suite/ui/commons/messagebundle_sk.properties +24 -3
  87. package/src/sap/suite/ui/commons/messagebundle_sl.properties +23 -2
  88. package/src/sap/suite/ui/commons/messagebundle_sr.properties +24 -3
  89. package/src/sap/suite/ui/commons/messagebundle_sv.properties +23 -2
  90. package/src/sap/suite/ui/commons/messagebundle_th.properties +25 -4
  91. package/src/sap/suite/ui/commons/messagebundle_tr.properties +24 -3
  92. package/src/sap/suite/ui/commons/messagebundle_uk.properties +27 -6
  93. package/src/sap/suite/ui/commons/messagebundle_vi.properties +26 -5
  94. package/src/sap/suite/ui/commons/messagebundle_zh_CN.properties +24 -3
  95. package/src/sap/suite/ui/commons/messagebundle_zh_TW.properties +26 -5
  96. package/src/sap/suite/ui/commons/networkgraph/Graph.js +49 -22
  97. package/src/sap/suite/ui/commons/networkgraph/KeyboardNavigator.js +45 -4
  98. package/src/sap/suite/ui/commons/networkgraph/Line.js +157 -11
  99. package/src/sap/suite/ui/commons/networkgraph/Node.js +289 -86
  100. package/src/sap/suite/ui/commons/networkgraph/Utils.js +239 -10
  101. package/src/sap/suite/ui/commons/networkgraph/layout/NoopLayout.js +55 -8
  102. package/src/sap/suite/ui/commons/networkgraph/util/DependencyLayoutHelper.js +156 -74
  103. package/src/sap/suite/ui/commons/networkgraph/util/DragDropManager.js +52 -50
  104. package/src/sap/suite/ui/commons/networkgraph/util/PortManager.js +14 -6
  105. package/src/sap/suite/ui/commons/statusindicator/Circle.js +1 -1
  106. package/src/sap/suite/ui/commons/statusindicator/CustomShape.js +1 -1
  107. package/src/sap/suite/ui/commons/statusindicator/DiscreteThreshold.js +1 -1
  108. package/src/sap/suite/ui/commons/statusindicator/FillingOption.js +1 -1
  109. package/src/sap/suite/ui/commons/statusindicator/LibraryShape.js +1 -1
  110. package/src/sap/suite/ui/commons/statusindicator/Path.js +1 -1
  111. package/src/sap/suite/ui/commons/statusindicator/PropertyThreshold.js +1 -1
  112. package/src/sap/suite/ui/commons/statusindicator/Rectangle.js +1 -1
  113. package/src/sap/suite/ui/commons/statusindicator/Shape.js +1 -1
  114. package/src/sap/suite/ui/commons/statusindicator/ShapeGroup.js +1 -1
  115. package/src/sap/suite/ui/commons/statusindicator/SimpleShape.js +1 -1
  116. package/src/sap/suite/ui/commons/statusindicator/StatusIndicator.js +1 -1
  117. package/src/sap/suite/ui/commons/taccount/TAccount.js +1 -1
  118. package/src/sap/suite/ui/commons/taccount/TAccountGroup.js +1 -1
  119. package/src/sap/suite/ui/commons/taccount/TAccountItem.js +1 -1
  120. package/src/sap/suite/ui/commons/taccount/TAccountItemProperty.js +1 -1
  121. package/src/sap/suite/ui/commons/taccount/TAccountPanel.js +1 -1
  122. package/src/sap/suite/ui/commons/themes/base/NetworkLine.less +26 -5
  123. package/src/sap/suite/ui/commons/windowmessages/CollaborationMessageConsumer.js +3 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.suite.ui.commons",
3
- "version": "1.144.0",
3
+ "version": "1.146.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.144.0</version>
10
+ <version>1.146.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.144.0
22
+ * @version 1.146.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.144.0
137
+ * @version 1.146.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: {
@@ -456,6 +468,12 @@ sap.ui.define([
456
468
 
457
469
  this._enableOrDisableExpandAllButton();
458
470
  this.fireChange();
471
+ }.bind(this),
472
+ focusChange: function (oEvent) {
473
+ this.fireFocusChange({
474
+ value: oEvent.getParameter("value"),
475
+ position: oEvent.getParameter("position")
476
+ });
459
477
  }.bind(this)
460
478
  });
461
479
  this.addDependent(this._oInput);
@@ -772,9 +790,12 @@ sap.ui.define([
772
790
 
773
791
  CalculationBuilder.prototype._getFunctionDefinition = function (sKey) {
774
792
  sKey = (sKey || "").toLowerCase();
775
- return FunctionsMap[sKey] || jQuery.grep(this.getFunctions(), function (oFunction) {
793
+ // Check custom functions first, then fall back to default FunctionsMap
794
+ // This ensures custom functions take precedence when they have the same key as defaults
795
+ var oCustomFunction = jQuery.grep(this.getFunctions(), function (oFunction) {
776
796
  return oFunction.getKey().toLowerCase() === sKey;
777
797
  })[0];
798
+ return oCustomFunction || FunctionsMap[sKey];
778
799
  };
779
800
 
780
801
  CalculationBuilder.prototype._getFunctionDescription = function (oFunction) {
@@ -865,10 +886,17 @@ sap.ui.define([
865
886
  return ItemType.Variable;
866
887
  }
867
888
 
868
- if (this._isFunction(sKey)) {
889
+ // Check if default function exists and is not disabled
890
+ var bDefaultExistsInMap = this._findInArray(sKey, Object.keys(FunctionType));
891
+ var bIsDefaultDisabled = !!this._mDisabledTokens[sKey];
892
+
893
+ // If default function exists and is NOT disabled, return Function type
894
+ // (enabled defaults take precedence over custom functions with same key)
895
+ if (bDefaultExistsInMap && !bIsDefaultDisabled) {
869
896
  return ItemType.Function;
870
897
  }
871
898
 
899
+ // If default is disabled or doesn't exist, check for custom function
872
900
  if (this._findInChildren(sKey, "Function")) {
873
901
  return ItemType.CustomFunction;
874
902
  }
@@ -1071,8 +1099,9 @@ sap.ui.define([
1071
1099
  var aFunctions = [];
1072
1100
 
1073
1101
  Object.keys(FunctionsMap).forEach(function (sKey) {
1074
- // Only add built-in function if it's allowed AND there's no custom function with same name
1075
- if (FunctionsMap[sKey].allowed && this._isTokenAllowed(sKey, false) && !this._findInChildren(sKey.toLowerCase(), "Function")) {
1102
+ // Only add built-in function if it's allowed (not disabled)
1103
+ // bCheckCustomOverride=false ensures disabled functions are excluded even if custom override exists
1104
+ if (FunctionsMap[sKey].allowed && this._isTokenAllowed(sKey, false)) {
1076
1105
  aFunctions.push(this._createFunctionObject(FunctionsMap[sKey]));
1077
1106
  }
1078
1107
  }.bind(this));
@@ -148,7 +148,7 @@ sap.ui.define([
148
148
  * @extends sap.ui.core.Control
149
149
  *
150
150
  * @author SAP SE
151
- * @version 1.144.0
151
+ * @version 1.146.0
152
152
  * @since 1.56.0
153
153
  *
154
154
  * @constructor
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.core.Control
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.144.0
29
+ * @version 1.146.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.144.0
25
+ * @version 1.146.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.144.0
43
+ * @version 1.146.0
44
44
  * @since 1.56.0
45
45
  *
46
46
  * @constructor
@@ -21,7 +21,7 @@ sap.ui.define([
21
21
  * @extends sap.ui.base.ManagedObject
22
22
  *
23
23
  * @author SAP SE
24
- * @version 1.144.0
24
+ * @version 1.146.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.144.0
26
+ * @version 1.146.0
27
27
  * @since 1.56.0
28
28
  *
29
29
  * @constructor
@@ -115,12 +115,10 @@ sap.ui.define([
115
115
  * @extends sap.m.Dialog
116
116
  *
117
117
  * @namespace sap.suite.ui.commons.CloudFilePicker
118
- * @experimental
119
- * @since 1.101
120
118
  * @class
121
119
  * @public
122
120
  * @internal
123
- * @version 1.144.0
121
+ * @version 1.146.0
124
122
  */
125
123
  var CloudFilePicker = Dialog.extend("sap.suite.ui.commons.CloudFilePicker", {
126
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.144.0
53
+ * @version 1.146.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.144.0
41
+ * @version 1.146.0
42
42
  *
43
43
  * @constructor
44
44
  * @public
@@ -404,7 +404,7 @@ sap.ui.define([
404
404
  ResizeHandler.deregister(this._resizeRegId);
405
405
  }
406
406
 
407
- if(this._oInvisibleText) {
407
+ if (this._oInvisibleText) {
408
408
  this._oInvisibleText.destroy();
409
409
  }
410
410
 
@@ -547,7 +547,7 @@ sap.ui.define([
547
547
  * @param {jQuery.Event} oEvent The event object of the triggered event
548
548
  */
549
549
  ProcessFlow.prototype.ontouchend = function (oEvent) {
550
- if ( (oEvent?.target && oEvent.target.id.indexOf("arrowScroll") !== -1) ||
550
+ if ( (oEvent?.target && oEvent.target.id.indexOf("arrowScroll") !== -1) ||
551
551
  (oEvent?.srcControl && oEvent.srcControl.getId().indexOf("arrowScroll") !== -1) ) {
552
552
  this._onArrowClick(oEvent);
553
553
  } else {
@@ -2427,6 +2427,10 @@ sap.ui.define([
2427
2427
  */
2428
2428
  ProcessFlow.InternalMatrixCalculation.prototype._calculatePathInMatrix = function (originalMatrix) {
2429
2429
  var oCurrentElement = null;
2430
+ // Track which parent has already drawn an upward path to a specific lane (column)
2431
+ // Key: parentNodeId + "_" + laneColumn, Value: { minRow, maxRow }
2432
+ this._parentUpwardPaths = {};
2433
+
2430
2434
  for (var key in this.nodePositions) {
2431
2435
  if (this.nodePositions.hasOwnProperty(key)) {
2432
2436
  oCurrentElement = this.nodePositions[key];
@@ -2470,61 +2474,82 @@ sap.ui.define([
2470
2474
  "Coordinates : '" + parentX + "','" + parentY + "','" + childrenX + "','" + childrenY + "'"
2471
2475
  ];
2472
2476
  } else if (iVertical <= -1) {
2473
- // Half left and up
2474
- var bNormalHorizontalLinePossible = this._checkIfHorizontalLinePossible(originalMatrix, childrenX, parentY + 2, childrenY);
2475
- var iPositionY = childrenY - 1;
2476
- if (bNormalHorizontalLinePossible) {
2477
- iPositionY = parentY + 1;
2478
- }
2479
- var iPositionX = parentX;
2480
- if (bNormalHorizontalLinePossible) {
2481
- iPositionX = childrenX;
2482
- }
2483
- originalMatrix[parentX][iPositionY] = this._createConnectionElement(
2484
- originalMatrix[parentX][iPositionY], ProcessFlow._cellEdgeConstants.LU,
2485
- nodeParent, nodeChildren, false);
2477
+ // Going up - child is above parent
2478
+ var sParentNodeId = nodeParent.c.nodeId;
2479
+ var iTargetLaneColumn = childrenY - 1; // The column before the target lane where vertical line goes
2480
+
2481
+ // Check if THIS PARENT has already drawn an upward path to THIS LANE
2482
+ var sParentLaneKey = sParentNodeId + "_" + iTargetLaneColumn;
2483
+ var bParentAlreadyHasPath = this._parentUpwardPaths && this._parentUpwardPaths[sParentLaneKey];
2484
+
2485
+ if (bParentAlreadyHasPath) {
2486
+ // This parent already has a vertical line to this lane column
2487
+ // Just extend the vertical line to reach this new target
2488
+ var existingPath = this._parentUpwardPaths[sParentLaneKey];
2489
+
2490
+ // Extend vertical line if needed (to reach the new target row)
2491
+ if (childrenX < existingPath.minRow) {
2492
+ originalMatrix = this._writeVerticalLine(originalMatrix, existingPath.minRow, childrenX, iTargetLaneColumn, nodeParent, nodeChildren);
2493
+ existingPath.minRow = childrenX;
2494
+ }
2495
+
2496
+ // Add horizontal connection from vertical line to the target
2497
+ originalMatrix[childrenX][iTargetLaneColumn] =
2498
+ this._createConnectionElement(originalMatrix[childrenX][iTargetLaneColumn],
2499
+ ProcessFlow._cellEdgeConstants.UR, nodeParent,
2500
+ nodeChildren, true);
2501
+ } else {
2502
+ // First connection from this parent to this lane
2503
+ // Draw a new path using the target lane column for the vertical line
2504
+ var iPositionY = iTargetLaneColumn;
2505
+
2506
+ originalMatrix[parentX][iPositionY] = this._createConnectionElement(
2507
+ originalMatrix[parentX][iPositionY], ProcessFlow._cellEdgeConstants.LU,
2508
+ nodeParent, nodeChildren, false);
2486
2509
 
2487
- //Going up to the children.
2488
- originalMatrix = this._writeVerticalLine(originalMatrix, parentX, childrenX, iPositionY, nodeParent, nodeChildren);
2489
-
2490
- originalMatrix[childrenX][iPositionY] =
2491
- this._createConnectionElement(originalMatrix[childrenX][iPositionY],
2492
- ProcessFlow._cellEdgeConstants.UR, nodeParent,
2493
- nodeChildren, (iPositionY === childrenY - 1));
2494
- //Pure right.
2495
- var iStartY = parentY + 2;
2496
- var iEndY = childrenY;
2497
- if (!bNormalHorizontalLinePossible) {
2498
- iStartY = parentY + 1;
2499
- iEndY = iPositionY + 1;
2510
+ //Going up to the children.
2511
+ originalMatrix = this._writeVerticalLine(originalMatrix, parentX, childrenX, iPositionY, nodeParent, nodeChildren);
2512
+
2513
+ originalMatrix[childrenX][iPositionY] =
2514
+ this._createConnectionElement(originalMatrix[childrenX][iPositionY],
2515
+ ProcessFlow._cellEdgeConstants.UR, nodeParent,
2516
+ nodeChildren, true);
2517
+
2518
+ // Draw horizontal line from parent to the vertical line column
2519
+ originalMatrix = this._writeHorizontalLine(originalMatrix, parentX, parentY + 1, iPositionY + 1, nodeParent, nodeChildren);
2520
+
2521
+ // Store that this parent now has an upward path to this lane column
2522
+
2523
+ this._parentUpwardPaths[sParentLaneKey] = {
2524
+ minRow: childrenX,
2525
+ maxRow: parentX,
2526
+ column: iPositionY
2527
+ };
2500
2528
  }
2501
- originalMatrix = this._writeHorizontalLine(originalMatrix, iPositionX, iStartY, iEndY, nodeParent, nodeChildren);
2502
2529
  } else if (iVertical === 0) {
2503
2530
  originalMatrix = this._writeHorizontalLine(originalMatrix, parentX, parentY + 1, childrenY, nodeParent, nodeChildren);
2504
- } else if (iVertical === 1) {
2505
- //1 row down and do horizontal line.
2506
- //Half and down.
2507
- originalMatrix[parentX][parentY + 1] = this._createConnectionElement(originalMatrix[parentX][parentY + 1],
2508
- ProcessFlow._cellEdgeConstants.LD, nodeParent,
2509
- nodeChildren, false);
2510
- //Down and right.
2511
- originalMatrix[childrenX][parentY + 1] = this._createConnectionElement(originalMatrix[childrenX][parentY + 1],
2512
- ProcessFlow._cellEdgeConstants.DR, nodeParent,
2513
- nodeChildren, (parentY + 1) === (childrenY - 1));
2514
- //Horizontal line to the target.
2515
- originalMatrix = this._writeHorizontalLine(originalMatrix, childrenX, parentY + 2, childrenY, nodeParent, nodeChildren);
2516
- } else { //iVertical > 1
2517
- //Go down until children and do horizontal line.
2518
- //Half left and down.
2519
- originalMatrix[parentX][parentY + 1] = this._createConnectionElement(originalMatrix[parentX][parentY + 1],
2520
- ProcessFlow._cellEdgeConstants.LD, nodeParent,
2521
- nodeChildren, false);
2522
- originalMatrix = this._writeVerticalLine(originalMatrix, childrenX, parentX, parentY + 1, nodeParent, nodeChildren);
2523
- //Half down and right.
2524
- originalMatrix[childrenX][parentY + 1] = this._createConnectionElement(originalMatrix[childrenX][parentY + 1],
2525
- ProcessFlow._cellEdgeConstants.DR, nodeParent,
2526
- nodeChildren, (parentY + 1) === (childrenY - 1));
2527
- originalMatrix = this._writeHorizontalLine(originalMatrix, childrenX, parentY + 2, childrenY, nodeParent, nodeChildren);
2531
+ } else if (iVertical >= 1) {
2532
+ // Going down - child is below parent
2533
+ // Use the column before the target lane for the vertical drop (similar to upward case)
2534
+ var iTargetLaneColumnDown = childrenY - 1;
2535
+
2536
+ // Draw horizontal line from parent to the vertical drop column
2537
+ originalMatrix = this._writeHorizontalLine(originalMatrix, parentX, parentY + 1, iTargetLaneColumnDown + 1, nodeParent, nodeChildren);
2538
+
2539
+ // Add LD corner (left to down) at parent row
2540
+ originalMatrix[parentX][iTargetLaneColumnDown] = this._createConnectionElement(
2541
+ originalMatrix[parentX][iTargetLaneColumnDown], ProcessFlow._cellEdgeConstants.LD,
2542
+ nodeParent, nodeChildren, false);
2543
+
2544
+ // Draw vertical line down to child row (if more than 1 row down)
2545
+ if (iVertical > 1) {
2546
+ originalMatrix = this._writeVerticalLine(originalMatrix, childrenX, parentX, iTargetLaneColumnDown, nodeParent, nodeChildren);
2547
+ }
2548
+
2549
+ // Add DR corner (down to right) at child row - this is the arrow
2550
+ originalMatrix[childrenX][iTargetLaneColumnDown] = this._createConnectionElement(
2551
+ originalMatrix[childrenX][iTargetLaneColumnDown], ProcessFlow._cellEdgeConstants.DR,
2552
+ nodeParent, nodeChildren, true);
2528
2553
  }
2529
2554
  return originalMatrix;
2530
2555
  };
@@ -2549,27 +2574,6 @@ sap.ui.define([
2549
2574
  return originalMatrix;
2550
2575
  };
2551
2576
 
2552
- /**
2553
- * Checks if the horizontal line is possible.
2554
- *
2555
- * @private
2556
- * @param {Object[]} originalMatrix The original matrix
2557
- * @param {int} row The index of the row
2558
- * @param {int} firstColumn The index of the first column
2559
- * @param {int} lastColumn The index of the last column
2560
- * @returns {boolean} Function return true, if the path is free, otherwise false
2561
- */
2562
- ProcessFlow.InternalMatrixCalculation.prototype._checkIfHorizontalLinePossible = function (originalMatrix, row, firstColumn, lastColumn) {
2563
- var bLinePossible = true;
2564
- for (var i = firstColumn; i < lastColumn; i++) {
2565
- if (originalMatrix[row][i] instanceof ProcessFlow.NodeElement) {
2566
- bLinePossible = false;
2567
- break;
2568
- }
2569
- }
2570
- return bLinePossible;
2571
- };
2572
-
2573
2577
  /**
2574
2578
  * Function calculated and writes horizontal line.
2575
2579
  *
@@ -3505,7 +3509,7 @@ sap.ui.define([
3505
3509
  */
3506
3510
  ProcessFlow.prototype._getScrollingArrow = function (direction) {
3507
3511
  var sSrc;
3508
- var sAltText;
3512
+ var sAltText;
3509
3513
 
3510
3514
  if (Device.system.desktop) {
3511
3515
  //Use navigation arrows on desktop and win8 combi devices.
@@ -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
  }
@@ -2587,6 +2587,15 @@ sap.ui.define([
2587
2587
  selectedItem: aFocusedItems[0],
2588
2588
  userAction: oEvent.mParameters.event && oEvent.mParameters.event.type === "mousedown"
2589
2589
  });
2590
+ if (!this._isVertical() && oFocusedDomRef){
2591
+ if (oFocusedDomRef.scrollIntoView) {
2592
+ oFocusedDomRef.scrollIntoView({
2593
+ behavior: 'smooth',
2594
+ block: 'nearest',
2595
+ inline: 'nearest'
2596
+ });
2597
+ }
2598
+ }
2590
2599
  }
2591
2600
  }, this);
2592
2601
  this.oItemNavigation.attachEvent("Enter", function (oEvent) {
@@ -7,13 +7,14 @@
7
7
 
8
8
  sap.ui.define([
9
9
  "sap/ui/thirdparty/jquery",
10
+ "./library",
10
11
  "sap/ui/core/delegate/ItemNavigation",
11
12
  "sap/base/assert",
12
13
  "sap/ui/dom/containsOrEquals",
13
14
  "sap/ui/events/KeyCodes"
14
- ], function (jQuery, ItemNavigation, assert, containsOrEquals, KeyCodes) {
15
+ ], function (jQuery, library, ItemNavigation, assert, containsOrEquals, KeyCodes) {
15
16
  "use strict";
16
-
17
+ var TimelineAxisOrientation = library.TimelineAxisOrientation;
17
18
  function stringEndsWith(sString, sPattern) {
18
19
  var iDiff = sString.length - sPattern.length;
19
20
  return iDiff >= 0 && sString.lastIndexOf(sPattern) === iDiff;
@@ -110,10 +111,37 @@ sap.ui.define([
110
111
  */
111
112
  TimelineNavigator.prototype.setItemDomRefs = function (aItemDomRefs) {
112
113
  assert(Array.isArray(aItemDomRefs), "aItemDomRefs must be an array of DOM elements");
113
- this.aItemDomRefs = aItemDomRefs;
114
+ var bIsVertical = false;
115
+ if (this.oDomRef) {
116
+ var $timeline = jQuery(this.oDomRef).closest(".sapSuiteUiCommonsTimeline");
117
+ var oTimelineControl = $timeline.control(0);
118
+ if (oTimelineControl) {
119
+ var sOrientation = oTimelineControl.getAxisOrientation();
120
+ bIsVertical = (sOrientation === TimelineAxisOrientation.Vertical);
121
+ }
122
+ }
123
+ var aValidItems = [];
124
+ for (var j = 0; j < aItemDomRefs.length; j++) {
125
+ var oDomRef = aItemDomRefs[j];
126
+ if (oDomRef) {
127
+ var sClass = oDomRef.className || "";
128
+ var sTag = oDomRef.tagName || "";
129
+ var bIsTimelineItem = sClass.indexOf("sapSuiteUiCommonsTimelineItemOutline") >= 0;
130
+ var bIsGroupHeader = sClass.indexOf("sapSuiteUiCommonsTimelineGroupHeaderMainWrapper") >= 0;
131
+ var bIsButton = sTag === "BUTTON" || sClass.indexOf("sapMBtn") >= 0;
132
+
133
+ if (bIsTimelineItem || bIsGroupHeader) {
134
+ aValidItems.push(oDomRef);
135
+ }
136
+ else if (bIsButton && bIsVertical) {
137
+ aValidItems.push(oDomRef);
138
+ }
139
+ }
140
+ }
114
141
 
115
- if (this.iFocusedIndex > aItemDomRefs.length - 1) {
116
- this.iFocusedIndex = aItemDomRefs.length - 1;
142
+ this.aItemDomRefs = aValidItems;
143
+ if (this.iFocusedIndex > aValidItems.length - 1) {
144
+ this.iFocusedIndex = aValidItems.length - 1;
117
145
  }
118
146
 
119
147
  // in nested ItemNavigation the tabindex must only be set if it's the focused item of the parent ItemNavigation
@@ -157,6 +185,10 @@ sap.ui.define([
157
185
  */
158
186
  TimelineNavigator.prototype.setItemsTabindex = function () {
159
187
 
188
+ if (!this.aItemDomRefs) {
189
+ return this;
190
+ }
191
+
160
192
  for (var i = 0; i < this.aItemDomRefs.length; i++) {
161
193
  if (this.aItemDomRefs[i]) { // separators return null here
162
194
  var $Item = jQuery(this.aItemDomRefs[i]);
@@ -117,9 +117,9 @@ sap.ui.define([
117
117
  oItem, sPlacementLine, bIsEven, bIsGroupHeader, oNextItem, cParent,
118
118
  bIsMaxed = oTimeline._isMaxed(),
119
119
  bLastGroup,
120
- fnCreateUL = function() {
120
+ fnCreateUL = function(sRole) {
121
121
  var eUl = new HtmlElement("ul");
122
- eUl.setAttribute("role", "list");
122
+ eUl.setAttribute("role", sRole ? sRole : "list");
123
123
  return eUl;
124
124
  };
125
125
 
@@ -131,7 +131,7 @@ sap.ui.define([
131
131
  eTopLine = new HtmlElement("div"),
132
132
  eUlTop = fnCreateUL(),
133
133
  eMiddleLine = new HtmlElement("div"),
134
- eUlMid = fnCreateUL(),
134
+ eUlMid = fnCreateUL(oTimeline.getAxisOrientation() === TimelineAxisOrientation.Horizontal ? "presentation" : "list"),
135
135
  eBottomLine = new HtmlElement("div"),
136
136
  eUlBot = fnCreateUL(),
137
137
  eLeftScroller = new HtmlElement("div"),
@@ -27,7 +27,6 @@ sap.ui.define([
27
27
  * @returns {Object} Configuration settings
28
28
  * @private
29
29
  * @ui5-restricted
30
- * @experimental Since 1.108
31
30
  */
32
31
  BaseHelperService.prototype.getProviderConfig = function() {
33
32
  return this._providerConfig;
@@ -28,7 +28,6 @@ sap.ui.define(
28
28
  /**
29
29
  * CollaborationHelper for collaboration-related functionalities
30
30
  * @namespace
31
- * @since 1.108
32
31
  * @alias module:sap/suite/ui/commons/collaboration/CollaborationHelper
33
32
  * @public
34
33
  */
@@ -43,7 +42,6 @@ sap.ui.define(
43
42
  * `<protocol>/<hostname>#<semantic-object>&/sap-url-hash=<UUID>`
44
43
  * @private
45
44
  * @ui5-restricted sap.suite.suite-ui-commons
46
- * @experimental since 1.108
47
45
  */
48
46
  CollaborationHelper.compactHash = function(sUrl) {
49
47
  const UshellContainer = sap.ui.require("sap/ushell/Container");
@@ -266,7 +264,6 @@ sap.ui.define(
266
264
  * Hides the avatar of the user if the app is running in the Microsoft Teams application.
267
265
  * @private
268
266
  * @ui5-restricted sap.suite.suite-ui-commons
269
- * @experimental since 1.108
270
267
  */
271
268
  CollaborationHelper._hideAvatarFromShellbar = function() {
272
269
  this.isTeamsModeActive().then(function(bIsActive) {
@@ -21,7 +21,6 @@ sap.ui.define([
21
21
  * @alias module:sap/suite/ui/commons/collaboration/CollaborationManagerService
22
22
  * @private
23
23
  * @ui5-restricted
24
- * @experimental Since 1.125
25
24
  */
26
25
 
27
26
  var CollaborationManagerService = BaseHelperService.extend("sap.suite.ui.commons.collaboration.CollaborationManagerService");
@@ -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");
@@ -163,6 +164,7 @@ sap.ui.define([
163
164
  loadMinimalContactPopover: function(sEmail, oParams) {
164
165
  // oParams contains subject and body of the email
165
166
  this.afterClose(); // Make sure, previously opened popup is closed if any
167
+ this.sEmail = sEmail;
166
168
  var oJsonModel = new JSONModel({
167
169
  "mail": sEmail,
168
170
  "params": oParams
@@ -329,6 +331,15 @@ sap.ui.define([
329
331
 
330
332
  Object.assign(oFullProfileData, oBadgeInfo);
331
333
  return oFullProfileData;
334
+ },
335
+
336
+ handleCopyEmailPress: function() {
337
+ if (typeof window !== "undefined" && window.navigator && window.navigator.clipboard && window.navigator.clipboard.writeText) {
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"));
342
+ }
332
343
  }
333
344
  });
334
345
  });