@openui5/sap.ui.table 1.135.0 → 1.136.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/REUSE.toml +649 -0
  2. package/THIRDPARTY.txt +22 -22
  3. package/package.json +3 -3
  4. package/src/sap/ui/table/.library +2 -2
  5. package/src/sap/ui/table/AnalyticalColumn.js +2 -2
  6. package/src/sap/ui/table/AnalyticalColumnMenu.js +2 -2
  7. package/src/sap/ui/table/AnalyticalTable.js +2 -2
  8. package/src/sap/ui/table/Column.js +11 -3
  9. package/src/sap/ui/table/ColumnMenu.js +2 -2
  10. package/src/sap/ui/table/CreationRow.js +2 -2
  11. package/src/sap/ui/table/CreationRowRenderer.js +1 -1
  12. package/src/sap/ui/table/Row.js +4 -13
  13. package/src/sap/ui/table/RowAction.js +2 -2
  14. package/src/sap/ui/table/RowActionItem.js +2 -2
  15. package/src/sap/ui/table/RowActionRenderer.js +1 -1
  16. package/src/sap/ui/table/RowSettings.js +2 -2
  17. package/src/sap/ui/table/Table.js +2 -2
  18. package/src/sap/ui/table/TablePersoController.js +2 -2
  19. package/src/sap/ui/table/TableRenderer.js +12 -11
  20. package/src/sap/ui/table/TreeTable.js +2 -2
  21. package/src/sap/ui/table/designtime/AnalyticalTable.designtime.js +1 -1
  22. package/src/sap/ui/table/designtime/Table.designtime.js +1 -1
  23. package/src/sap/ui/table/designtime/library.designtime.js +1 -1
  24. package/src/sap/ui/table/extensions/Accessibility.js +6 -4
  25. package/src/sap/ui/table/extensions/AccessibilityRender.js +2 -2
  26. package/src/sap/ui/table/extensions/DragAndDrop.js +2 -2
  27. package/src/sap/ui/table/extensions/ExtensionBase.js +2 -2
  28. package/src/sap/ui/table/extensions/Keyboard.js +2 -2
  29. package/src/sap/ui/table/extensions/KeyboardDelegate.js +156 -400
  30. package/src/sap/ui/table/extensions/Pointer.js +2 -2
  31. package/src/sap/ui/table/extensions/Scrolling.js +47 -22
  32. package/src/sap/ui/table/extensions/ScrollingIOS.js +2 -2
  33. package/src/sap/ui/table/extensions/Synchronization.js +2 -2
  34. package/src/sap/ui/table/i18n/interaction.xml +254 -0
  35. package/src/sap/ui/table/library.js +14 -11
  36. package/src/sap/ui/table/library.support.js +1 -1
  37. package/src/sap/ui/table/menus/AnalyticalTableContextMenu.js +2 -2
  38. package/src/sap/ui/table/menus/ColumnHeaderMenuAdapter.js +2 -2
  39. package/src/sap/ui/table/menus/ContextMenu.js +2 -2
  40. package/src/sap/ui/table/menus/LegacyColumnMenuAdapter.js +1 -1
  41. package/src/sap/ui/table/menus/MobileColumnHeaderMenuAdapter.js +2 -2
  42. package/src/sap/ui/table/plugins/BindingSelection.js +2 -2
  43. package/src/sap/ui/table/plugins/MultiSelectionPlugin.js +2 -2
  44. package/src/sap/ui/table/plugins/ODataV4Selection.js +109 -56
  45. package/src/sap/ui/table/plugins/PluginBase.js +2 -2
  46. package/src/sap/ui/table/plugins/SelectionMode.js +1 -1
  47. package/src/sap/ui/table/plugins/SelectionModelSelection.js +2 -2
  48. package/src/sap/ui/table/plugins/SelectionPlugin.js +3 -2
  49. package/src/sap/ui/table/plugins/V4Aggregation.js +2 -2
  50. package/src/sap/ui/table/rowmodes/Auto.js +2 -2
  51. package/src/sap/ui/table/rowmodes/Fixed.js +2 -2
  52. package/src/sap/ui/table/rowmodes/Interactive.js +2 -2
  53. package/src/sap/ui/table/rowmodes/RowMode.js +2 -2
  54. package/src/sap/ui/table/rowmodes/Type.js +1 -1
  55. package/src/sap/ui/table/rowmodes/Variable.js +2 -2
  56. package/src/sap/ui/table/rules/Accessibility.support.js +1 -1
  57. package/src/sap/ui/table/rules/Binding.support.js +1 -1
  58. package/src/sap/ui/table/rules/ColumnTemplate.support.js +1 -1
  59. package/src/sap/ui/table/rules/Plugins.support.js +1 -1
  60. package/src/sap/ui/table/rules/Rows.support.js +1 -1
  61. package/src/sap/ui/table/rules/TableHelper.support.js +1 -1
  62. package/src/sap/ui/table/themes/base/Cell.less +12 -6
  63. package/src/sap/ui/table/themes/base/Scrolling.less +3 -0
  64. package/src/sap/ui/table/themes/base/library.source.less +1 -1
  65. package/src/sap/ui/table/themes/sap_hcb/library.source.less +1 -1
  66. package/src/sap/ui/table/utils/TableUtils.js +5 -5
  67. package/src/sap/ui/table/utils/_BindingUtils.js +2 -2
  68. package/src/sap/ui/table/utils/_ColumnUtils.js +2 -2
  69. package/src/sap/ui/table/utils/_GroupingUtils.js +2 -2
  70. package/src/sap/ui/table/utils/_HookUtils.js +2 -2
  71. package/src/sap/ui/table/utils/_MenuUtils.js +2 -2
  72. package/ui5.yaml +1 -1
  73. package/.reuse/dep5 +0 -471
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  sap.ui.define([
@@ -42,7 +42,7 @@ sap.ui.define([
42
42
  * @extends sap.ui.table.plugins.SelectionPlugin
43
43
  *
44
44
  * @author SAP SE
45
- * @version 1.135.0
45
+ * @version 1.136.0
46
46
  *
47
47
  * @private
48
48
  * @alias sap.ui.table.plugins.ODataV4Selection
@@ -117,15 +117,21 @@ sap.ui.define([
117
117
  oTable.setProperty("selectionMode", this.getSelectionMode());
118
118
  attachToBinding(this, oBinding);
119
119
  TableUtils.Hook.register(oTable, TableUtils.Hook.Keys.Table.RowsBound, onTableRowsBound, this);
120
+ TableUtils.Hook.register(oTable, TableUtils.Hook.Keys.Table.UnbindRows, onTableUnbindRows, this);
120
121
  };
121
122
 
122
123
  ODataV4Selection.prototype.onDeactivate = function(oTable) {
123
124
  SelectionPlugin.prototype.onDeactivate.apply(this, arguments);
125
+ _private(this).bLimitReached = false;
126
+ _private(this).oRangeSelectionStartContext = null;
124
127
  oTable.setProperty("selectionMode", library.SelectionMode.None);
125
- clearTimeout(this.iSelectionChangeTimeout);
126
- delete this.iSelectionChangeTimeout;
128
+ clearTimeout(_private(this).iSelectionChangeTimeout);
129
+ delete _private(this).iSelectionChangeTimeout;
127
130
  detachFromBinding(this, oTable.getBinding());
128
131
  TableUtils.Hook.deregister(oTable, TableUtils.Hook.Keys.Table.RowsBound, onTableRowsBound, this);
132
+ TableUtils.Hook.register(oTable, TableUtils.Hook.Keys.Table.UnbindRows, onTableUnbindRows, this);
133
+ delete _private(this).aSelectedContexts; // Delete the cached selected contexts to force a recalculation.
134
+ delete _private(this).iSelectionCount; // Delete the cached selection count to force a recalculation.
129
135
  };
130
136
 
131
137
  ODataV4Selection.prototype.setSelected = function(oRow, bSelected, mConfig) {
@@ -171,12 +177,21 @@ sap.ui.define([
171
177
  }
172
178
 
173
179
  ODataV4Selection.prototype.isSelected = function(oRow) {
174
- const oContext = oRow.getRowBindingContext();
175
- return oContext ? this.isActive() && oContext.isSelected() : false;
180
+ if (!this.isActive()) {
181
+ return false;
182
+ }
183
+
184
+ return oRow.getRowBindingContext()?.isSelected() ?? false;
176
185
  };
177
186
 
178
187
  ODataV4Selection.prototype.getSelectedCount = function() {
179
- return this.getSelectedContexts().length;
188
+ if (!this.isActive()) {
189
+ return 0;
190
+ }
191
+
192
+ _private(this).iSelectionCount ??= this.getSelectedContexts().length;
193
+
194
+ return _private(this).iSelectionCount;
180
195
  };
181
196
 
182
197
  /**
@@ -186,36 +201,50 @@ sap.ui.define([
186
201
  * @returns {int} The number of selectable rows, or -1 if the number cannot be determined.
187
202
  */
188
203
  function getSelectableCount(oPlugin) {
189
- const oBinding = oPlugin.getControl()?.getBinding();
204
+ const oBinding = oPlugin.getControl().getBinding();
205
+ let iSelectableCount = -1;
190
206
 
191
- if (!oBinding) {
207
+ if (!oBinding || oBinding.getLength() === 0) {
192
208
  return 0;
193
209
  }
194
210
 
195
- // isLengthFinal is checked in case the count is not requested. Even though it is documented that the count is required if the limit is
196
- // disabled (SelectAll enabled), it could still happen.
197
- if (!oBinding.isLengthFinal()) {
198
- return -1;
211
+ if (_private(oPlugin).iSelectableCount != null) {
212
+ return _private(oPlugin).iSelectableCount;
199
213
  }
200
214
 
201
- const oAggregation = oBinding.getAggregation();
202
- const bIsHierarchy = "hierarchyQualifier" in (oAggregation || {});
203
- const bIsDataAggregation = !bIsHierarchy && !!oAggregation;
204
- let iNumberOfSelectableContexts = -1;
205
-
206
- if (bIsDataAggregation) {
207
- const aAllCurrentContexts = oPlugin.aAllCurrentContexts ?? oBinding.getAllCurrentContexts();
208
-
209
- // If not all contexts are available, we cannot determine the number of selectable contexts, and therefore cannot determine if all are
210
- // selected.
211
- if (oBinding.getLength() === aAllCurrentContexts.length) {
212
- iNumberOfSelectableContexts = aAllCurrentContexts.filter(isContextSelectable).length;
215
+ if (oBinding.getAggregation()) {
216
+ /* In case of data aggregation with visual grouping and sum rows, we cannot determine the number of selectable contexts.
217
+ * The expected behavior is that if all visible selectable rows are selected, the state changes to "everything is selected". For example,
218
+ * the Select All checkbox should then be checked.
219
+ * visible rows = All rows that can be scrolled to. Does not include children of collapsed rows.
220
+ * selectable rows = All visible rows that are not group headers or sums.
221
+ * There are no values available to determine the number of selectable rows. Length, count, and selection count are all based on different
222
+ * criteria.
223
+ * The length would work for hierarchies, but there is nothing to compare it to. For example, selected contexts may be present in
224
+ * collapsed rows, increasing the selection count.
225
+ * We would have to load all contexts and check if all selectable contexts are selected. This would significantly impact performance.
226
+ *
227
+ * If the selection limit is disabled, the Select All checkbox is shown. In this case, not reaching the "everything is selected" state is
228
+ * not an option. Therefore, we have to accept the loss of performance.
229
+ *
230
+ * As a consequence:
231
+ * - The "everything is selected" state is never reached.
232
+ * - If the visible rows in the table are all group headers or sums, the header selector is enabled, but pressing it has no effect.
233
+ * - If the selection limit is disabled, the "everything is selected" state is reached when it shouldn't be if there are invisible
234
+ * selected contexts, for example, in collapsed rows.
235
+ */
236
+ if (oPlugin._isLimitDisabled()) {
237
+ const aAllCurrentContexts = oBinding.getAllCurrentContexts();
238
+ if (oBinding.getLength() === aAllCurrentContexts.length) {
239
+ iSelectableCount = aAllCurrentContexts.filter(isContextSelectable).length;
240
+ }
213
241
  }
214
- } else {
215
- iNumberOfSelectableContexts = oBinding.getLength();
216
- }
242
+ } else if (oBinding.isLengthFinal()) {
243
+ iSelectableCount = oBinding.getLength();
244
+ } // The count is not requested and not all data is loaded.
217
245
 
218
- return iNumberOfSelectableContexts;
246
+ _private(oPlugin).iSelectableCount = iSelectableCount;
247
+ return iSelectableCount;
219
248
  }
220
249
 
221
250
  /**
@@ -245,7 +274,6 @@ sap.ui.define([
245
274
  if (!this.isActive()) {
246
275
  return SelectionPlugin.prototype.getRenderConfig.apply(this, arguments);
247
276
  }
248
- this.aAllCurrentContexts = this.getControl().getBinding()?.getAllCurrentContexts();
249
277
 
250
278
  updateHeaderSelectorIcon(this);
251
279
 
@@ -262,8 +290,6 @@ sap.ui.define([
262
290
  }
263
291
  };
264
292
 
265
- delete this.aAllCurrentContexts;
266
-
267
293
  return mRenderConfig;
268
294
  };
269
295
 
@@ -278,7 +304,7 @@ sap.ui.define([
278
304
  oPlugin.clearSelection();
279
305
  return false;
280
306
  } else if (oPlugin._isLimitDisabled()) {
281
- const oBinding = oPlugin.getControl()?.getBinding();
307
+ const oBinding = oPlugin.getControl().getBinding();
282
308
  if (oBinding?.getLength()) {
283
309
  select(oPlugin, 0, oBinding.getLength() - 1);
284
310
  return true;
@@ -295,6 +321,10 @@ sap.ui.define([
295
321
  */
296
322
  function areAllRowsSelected(oPlugin) {
297
323
  const iSelectableCount = getSelectableCount(oPlugin);
324
+ /* Fails to return the correct information if there are selected invisible contexts. For example, if a context is selected and after
325
+ * filtering the table contains 1 row with a different, unselected context -> 1 === 1.
326
+ * We would have to load all contexts and check if all selectable contexts are selected. This would significantly impact performance.
327
+ */
298
328
  return iSelectableCount > 0 && iSelectableCount === oPlugin.getSelectedCount();
299
329
  }
300
330
 
@@ -315,7 +345,7 @@ sap.ui.define([
315
345
  if (this.getSelectedCount() > 0) {
316
346
  this.clearSelection();
317
347
  } else {
318
- const oBinding = this.getControl()?.getBinding();
348
+ const oBinding = this.getControl().getBinding();
319
349
  if (oBinding?.getLength() > 0) {
320
350
  select(this, 0, oBinding.getLength() - 1);
321
351
  }
@@ -338,7 +368,7 @@ sap.ui.define([
338
368
  oEvent.setMarked("sapUiTableClearAll");
339
369
  }
340
370
  } else {
341
- const oBinding = this.getControl()?.getBinding();
371
+ const oBinding = this.getControl().getBinding();
342
372
  if (oBinding?.getLength() > 0) {
343
373
  select(this, 0, oBinding.getLength() - 1);
344
374
  }
@@ -350,16 +380,16 @@ sap.ui.define([
350
380
  };
351
381
 
352
382
  ODataV4Selection.prototype.setSelectionMode = function(sSelectionMode) {
353
- const oTable = this.getControl();
354
-
355
383
  this.setProperty("selectionMode", sSelectionMode, true);
356
- _private(this).oRangeSelectionStartContext = null;
357
- this.clearSelection();
358
384
 
359
- if (oTable) {
360
- oTable.setProperty("selectionMode", this.getSelectionMode());
385
+ if (!this.isActive()) {
386
+ return this;
361
387
  }
362
388
 
389
+ _private(this).oRangeSelectionStartContext = null;
390
+ this.clearSelection();
391
+ this.getControl().setProperty("selectionMode", this.getSelectionMode());
392
+
363
393
  return this;
364
394
  };
365
395
 
@@ -396,22 +426,28 @@ sap.ui.define([
396
426
  *
397
427
  * @param {object} oPlugin The table plugin instance.
398
428
  * @param {object} oBinding The binding instance associated with the table.
399
- * @param {object} [oContext] The specific context to validate. If not provided, all selected contexts will be validated.
429
+ * @param {object} [oContext] The specific context to validate. If not provided, all selected contexts are validated.
400
430
  * @throws {Error} If the header context is selected.
401
431
  * @throws {Error} If a context that is not selectable is selected.
402
432
  * @throws {Error} If multiple contexts are selected in 'Single' selection mode.
403
433
  */
404
434
  function validateSelection(oPlugin, oBinding, oContext) {
405
- const aAllSelectedContexts = [oBinding.getHeaderContext(), ...oBinding.getAllCurrentContexts()].filter((oContext) => oContext?.isSelected());
406
- let aContextsToValidate = aAllSelectedContexts;
435
+ const oHeaderContext = oBinding.getHeaderContext();
436
+ let aContextsToValidate = [];
407
437
 
408
438
  if (oContext) {
409
439
  aContextsToValidate = oContext.isSelected() ? [oContext] : [];
440
+ } else {
441
+ aContextsToValidate = oPlugin.getSelectedContexts();
442
+
443
+ if (oHeaderContext?.isSelected()) {
444
+ aContextsToValidate.unshift(oHeaderContext);
445
+ }
410
446
  }
411
447
 
412
448
  for (const oContext of aContextsToValidate) {
413
449
  // To avoid compatibility issues if support is added. Handling a selected header context might affect UI, behavior, and settings.
414
- if (oContext === oBinding.getHeaderContext()) {
450
+ if (oContext === oHeaderContext) {
415
451
  throw new Error("Header context must not be selected");
416
452
  }
417
453
 
@@ -421,7 +457,7 @@ sap.ui.define([
421
457
  }
422
458
  }
423
459
 
424
- if (oPlugin.getSelectionMode() === SelectionMode.Single && aAllSelectedContexts.length > 1) {
460
+ if (oPlugin.getSelectionMode() === SelectionMode.Single && oPlugin.getSelectedCount() > 1) {
425
461
  throw new Error("Multiple contexts selected. Cannot select more than one context in selection mode 'Single'");
426
462
  }
427
463
  }
@@ -431,17 +467,27 @@ sap.ui.define([
431
467
  attachToBinding(this, oBinding);
432
468
  }
433
469
 
470
+ function onTableUnbindRows() {
471
+ delete _private(this).aSelectedContexts; // Delete the cached selected contexts to force a recalculation.
472
+ delete _private(this).iSelectionCount; // Delete the cached selection count to force a recalculation.
473
+ }
474
+
434
475
  function attachToBinding(oPlugin, oBinding) {
435
476
  oBinding?.attachEvent("selectionChanged", onBindingSelectionChanged, oPlugin);
477
+ oBinding?.attachChange(onBindingChange, oPlugin);
436
478
  }
437
479
 
438
480
  function detachFromBinding(oPlugin, oBinding) {
439
481
  oBinding?.detachEvent("selectionChanged", onBindingSelectionChanged, oPlugin);
482
+ oBinding?.detachChange(onBindingChange, oPlugin);
440
483
  }
441
484
 
442
485
  function onBindingSelectionChanged(oEvent) {
443
486
  const oContext = oEvent.getParameter("context");
444
487
 
488
+ delete _private(this).aSelectedContexts; // Delete the cached selected contexts to force a recalculation.
489
+ delete _private(this).iSelectionCount; // Delete the cached selection count to force a recalculation.
490
+
445
491
  try {
446
492
  validateSelection(this, oContext.getBinding(), oContext);
447
493
  } catch (oError) {
@@ -449,16 +495,22 @@ sap.ui.define([
449
495
  throw oError;
450
496
  }
451
497
 
452
- if (this.iSelectionChangeTimeout) {
498
+ if (_private(this).iSelectionChangeTimeout) {
453
499
  return;
454
500
  }
455
501
 
456
- this.iSelectionChangeTimeout = setTimeout(() => {
502
+ _private(this).iSelectionChangeTimeout = setTimeout(() => {
457
503
  this.fireSelectionChange();
458
- delete this.iSelectionChangeTimeout;
504
+ delete _private(this).iSelectionChangeTimeout;
459
505
  }, 0);
460
506
  }
461
507
 
508
+ function onBindingChange(oEvent) {
509
+ delete _private(this).aSelectedContexts; // Delete the cached selected contexts to force a recalculation.
510
+ delete _private(this).iSelectionCount; // Delete the cached selection count to force a recalculation.
511
+ delete _private(this).iSelectableCount; // Delete the cached selectable count to force a recalculation.
512
+ }
513
+
462
514
  /**
463
515
  * Checks whether the limit is disabled.
464
516
  *
@@ -534,21 +586,22 @@ sap.ui.define([
534
586
  }
535
587
 
536
588
  ODataV4Selection.prototype.clearSelection = function() {
537
- for (const oContext of this.getSelectedContexts()) {
538
- oContext.setSelected(false);
589
+ if (!this.isActive()) {
590
+ return;
539
591
  }
592
+
593
+ this.getControl().getBinding()?.getHeaderContext()?.setSelected(false);
540
594
  };
541
595
 
542
596
  ODataV4Selection.prototype.getSelectedContexts = function() {
543
- const oBinding = this.getControl()?.getBinding();
544
-
545
- if (!this.isActive() || !oBinding) {
597
+ if (!this.isActive()) {
546
598
  return [];
547
599
  }
548
600
 
549
- const aAllCurrentContexts = this.aAllCurrentContexts ?? oBinding.getAllCurrentContexts();
601
+ _private(this).aSelectedContexts ??= this.getControl().getBinding()?.getAllCurrentContexts().filter((oContext) => oContext.isSelected()) ?? [];
602
+ _private(this).iSelectionCount = _private(this).aSelectedContexts.length;
550
603
 
551
- return aAllCurrentContexts.filter((oContext) => oContext.isSelected());
604
+ return _private(this).aSelectedContexts;
552
605
  };
553
606
 
554
607
  ODataV4Selection.prototype.onThemeChanged = function() {
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  sap.ui.define([
@@ -19,7 +19,7 @@ sap.ui.define([
19
19
  * @extends sap.ui.core.Element
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.135.0
22
+ * @version 1.136.0
23
23
  *
24
24
  * @private
25
25
  * @experimental Since 1.75
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  sap.ui.define(["sap/ui/base/DataType"], (DataType) => {
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  sap.ui.define([
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.table.plugins.SelectionPlugin
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.135.0
29
+ * @version 1.136.0
30
30
  *
31
31
  * @private
32
32
  * @alias sap.ui.table.plugins.SelectionModelSelection
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  sap.ui.define([
@@ -21,7 +21,7 @@ sap.ui.define([
21
21
  * @extends sap.ui.core.Element
22
22
  *
23
23
  * @author SAP SE
24
- * @version 1.135.0
24
+ * @version 1.136.0
25
25
  *
26
26
  * @public
27
27
  * @since 1.64
@@ -142,6 +142,7 @@ sap.ui.define([
142
142
  * TODO: Only used for the row drag ghost. Replace with getSelectedContexts() (getSelectedContexts().length)? Useful in integration scenarios.
143
143
  * Check if this is possible with our index-based selection plugins. And if not, does that need to impact the modern interface? Legacy alternative
144
144
  * possible?
145
+ * If we keep this method, rename to getSelectionCount?
145
146
  *
146
147
  * @returns {int} The number of selected rows
147
148
  * @abstract
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  sap.ui.define([
@@ -22,7 +22,7 @@ sap.ui.define([
22
22
  * @extends sap.ui.core.Element
23
23
  *
24
24
  * @author SAP SE
25
- * @version 1.135.0
25
+ * @version 1.136.0
26
26
  *
27
27
  * @private
28
28
  * @alias sap.ui.table.plugins.V4Aggregation
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  sap.ui.define([
@@ -38,7 +38,7 @@ sap.ui.define([
38
38
  * @public
39
39
  *
40
40
  * @author SAP SE
41
- * @version 1.135.0
41
+ * @version 1.136.0
42
42
  */
43
43
  const AutoRowMode = RowMode.extend("sap.ui.table.rowmodes.Auto", /** @lends sap.ui.table.rowmodes.Auto.prototype */ {
44
44
  metadata: {
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  sap.ui.define([
@@ -27,7 +27,7 @@ sap.ui.define([
27
27
  * @public
28
28
  *
29
29
  * @author SAP SE
30
- * @version 1.135.0
30
+ * @version 1.136.0
31
31
  */
32
32
  const FixedRowMode = RowMode.extend("sap.ui.table.rowmodes.Fixed", /** @lends sap.ui.table.rowmodes.Fixed.prototype */ {
33
33
  metadata: {
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  sap.ui.define([
@@ -40,7 +40,7 @@ sap.ui.define([
40
40
  * @public
41
41
  *
42
42
  * @author SAP SE
43
- * @version 1.135.0
43
+ * @version 1.136.0
44
44
  */
45
45
  const InteractiveRowMode = RowMode.extend("sap.ui.table.rowmodes.Interactive", /** @lends sap.ui.table.rowmodes.Interactive.prototype */ {
46
46
  metadata: {
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  sap.ui.define([
@@ -37,7 +37,7 @@ sap.ui.define([
37
37
  * @public
38
38
  *
39
39
  * @author SAP SE
40
- * @version 1.135.0
40
+ * @version 1.136.0
41
41
  */
42
42
  const RowMode = Element.extend("sap.ui.table.rowmodes.RowMode", /** @lends sap.ui.table.rowmodes.RowMode.prototype */ {
43
43
  metadata: {
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  sap.ui.define(["sap/ui/base/DataType"], function(DataType) {
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  sap.ui.define([
@@ -23,7 +23,7 @@ sap.ui.define([
23
23
  * @extends sap.ui.table.rowmodes.RowMode
24
24
  *
25
25
  * @author SAP SE
26
- * @version 1.135.0
26
+ * @version 1.136.0
27
27
  *
28
28
  * @constructor
29
29
  * @private
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  sap.ui.define([
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  sap.ui.define([
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  sap.ui.define([
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  sap.ui.define([
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  sap.ui.define([
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  /**
@@ -85,7 +85,6 @@
85
85
  .sapUiTableRowNavIndicator & {
86
86
  border-right: none;
87
87
  border-left: none;
88
- background-color: transparent;
89
88
  }
90
89
  }
91
90
 
@@ -159,6 +158,7 @@
159
158
  min-height: @_sap_ui_table_ColumnHeaderHeightCozy;
160
159
  }
161
160
 
161
+ /* Either selectors or highlights visible. */
162
162
  .sapUiTableRowSelectors &,
163
163
  .sapUiTableRowHighlights & {
164
164
  display: inline-block;
@@ -180,6 +180,7 @@
180
180
  /* Only highlights visible. */
181
181
  .sapUiTableRowHighlights:not(.sapUiTableRowSelectors) & {
182
182
  width: @_sap_ui_table_RowHighlightWidth;
183
+ pointer-events: none;
183
184
  }
184
185
 
185
186
  /* Both selectors and highlights visible. */
@@ -200,8 +201,12 @@
200
201
  pointer-events: none;
201
202
  }
202
203
 
203
- &:not(.sapUiTableSelAllDisabled), &:not(.sapUiTableSelAllDisabled) .sapUiIcon {
204
+ &:not(.sapUiTableSelAllDisabled) {
204
205
  cursor: pointer;
206
+
207
+ > * {
208
+ cursor: pointer;
209
+ }
205
210
  }
206
211
  }
207
212
 
@@ -254,6 +259,7 @@
254
259
  display: flex;
255
260
  flex: 1 1 auto;
256
261
  overflow: hidden;
262
+ align-items: center;
257
263
 
258
264
  > * {
259
265
  overflow: hidden;
@@ -371,11 +377,10 @@
371
377
 
372
378
  .sapUiTableRowSelectionCell {
373
379
  cursor: pointer;
374
- }
375
380
 
376
- .sapUiTableRowSelectionCell,
377
- .sapUiTableRowActionCell {
378
- position: relative;
381
+ .sapUiTable:not(.sapUiTableRowSelectors) & {
382
+ pointer-events: none;
383
+ }
379
384
  }
380
385
 
381
386
  .sapUiTableRowActionCell {
@@ -407,6 +412,7 @@
407
412
 
408
413
  .sapUiTableRowNavIndicator & {
409
414
  min-width: @_sap_ui_table_NavIndicatorWidth;
415
+ pointer-events: none;
410
416
  }
411
417
  }
412
418
 
@@ -44,10 +44,13 @@
44
44
  .sapUiTableVSb {
45
45
  width: 100%;
46
46
  position: absolute;
47
+ bottom: 0;
47
48
  overflow-x: hidden;
48
49
  overflow-y: scroll;
49
50
  -webkit-overflow-scrolling: auto;
50
51
  background-color: var(--sapList_Background);
52
+ border-top: @_sap_ui_table_BaseBorderWidth solid var(--sapList_HeaderBorderColor);
53
+ border-bottom: @_sap_ui_table_BaseBorderWidth solid var(--sapList_HeaderBorderColor);
51
54
  }
52
55
 
53
56
  .sapUiTableVSbHeader {
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
  @import "../../../../../sap/ui/core/themes/base/base.less";