handsontable 0.0.0-next-d82e84a-20240117 → 0.0.0-next-4418964-20240119

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of handsontable might be problematic. Click here for more details.

Files changed (55) hide show
  1. package/3rdparty/walkontable/src/core/_base.js +12 -0
  2. package/3rdparty/walkontable/src/core/_base.mjs +12 -0
  3. package/3rdparty/walkontable/src/scroll.js +125 -98
  4. package/3rdparty/walkontable/src/scroll.mjs +127 -100
  5. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +26 -0
  6. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +26 -0
  7. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +26 -0
  8. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +26 -0
  9. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +20 -0
  10. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +20 -0
  11. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +20 -0
  12. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +20 -0
  13. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +20 -0
  14. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +20 -0
  15. package/3rdparty/walkontable/src/table.js +2 -0
  16. package/3rdparty/walkontable/src/table.mjs +2 -0
  17. package/3rdparty/walkontable/src/viewport.js +9 -0
  18. package/3rdparty/walkontable/src/viewport.mjs +10 -1
  19. package/base.js +2 -2
  20. package/base.mjs +2 -2
  21. package/core/index.js +6 -0
  22. package/core/index.mjs +2 -1
  23. package/core/viewportScroll/index.js +65 -0
  24. package/core/viewportScroll/index.mjs +61 -0
  25. package/core/viewportScroll/scrollStrategies/columnHeaderScroll.js +20 -0
  26. package/core/viewportScroll/scrollStrategies/columnHeaderScroll.mjs +16 -0
  27. package/core/viewportScroll/scrollStrategies/cornerHeaderScroll.js +14 -0
  28. package/core/viewportScroll/scrollStrategies/cornerHeaderScroll.mjs +10 -0
  29. package/core/viewportScroll/scrollStrategies/multipleScroll.js +15 -0
  30. package/core/viewportScroll/scrollStrategies/multipleScroll.mjs +11 -0
  31. package/core/viewportScroll/scrollStrategies/noncontiguousScroll.js +15 -0
  32. package/core/viewportScroll/scrollStrategies/noncontiguousScroll.mjs +11 -0
  33. package/core/viewportScroll/scrollStrategies/rowHeaderScroll.js +20 -0
  34. package/core/viewportScroll/scrollStrategies/rowHeaderScroll.mjs +16 -0
  35. package/core/viewportScroll/scrollStrategies/singleScroll.js +46 -0
  36. package/core/viewportScroll/scrollStrategies/singleScroll.mjs +42 -0
  37. package/core.js +11 -52
  38. package/core.mjs +12 -53
  39. package/dist/handsontable.css +2 -2
  40. package/dist/handsontable.full.css +2 -2
  41. package/dist/handsontable.full.js +1578 -1074
  42. package/dist/handsontable.full.min.css +2 -2
  43. package/dist/handsontable.full.min.js +41 -41
  44. package/dist/handsontable.js +1580 -1076
  45. package/dist/handsontable.min.css +2 -2
  46. package/dist/handsontable.min.js +25 -25
  47. package/helpers/mixed.js +1 -1
  48. package/helpers/mixed.mjs +1 -1
  49. package/package.json +1 -1
  50. package/selection/mouseEventHandler.js +4 -0
  51. package/selection/mouseEventHandler.mjs +4 -0
  52. package/selection/selection.js +64 -5
  53. package/selection/selection.mjs +64 -5
  54. package/tableView.js +76 -0
  55. package/tableView.mjs +76 -0
@@ -1,39 +1,42 @@
1
1
  import "core-js/modules/es.error.cause.js";
2
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
3
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
2
4
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3
5
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
4
6
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
5
8
  import { innerHeight, innerWidth, getScrollLeft, getScrollTop, offset } from "../../../helpers/dom/element.mjs";
6
9
  /**
7
10
  * @class Scroll
8
11
  */
12
+ var _getLastColumnIndex = /*#__PURE__*/new WeakSet();
13
+ var _getLastRowIndex = /*#__PURE__*/new WeakSet();
9
14
  class Scroll {
10
15
  /**
11
16
  * @param {ScrollDao} dataAccessObject Tha data access object.
12
17
  */
13
18
  constructor(dataAccessObject) {
14
19
  /**
15
- * The data access object.
20
+ * Get last visible row based on virtual dom and how table is visible in browser window viewport.
16
21
  *
17
- * @protected
18
- * @type {ScrollDao}
22
+ * @param {number} lastRowIndex The last visible row index.
23
+ * @returns {number}
19
24
  */
20
- _defineProperty(this, "dataAccessObject", void 0);
25
+ _classPrivateMethodInitSpec(this, _getLastRowIndex);
21
26
  /**
22
- * Holds the last column reached by the scroll, which determines the scroll snapping direction
23
- * (left or right) for a next horizontal scroll.
27
+ * Get last visible column based on virtual dom and how table is visible in browser window viewport.
24
28
  *
25
- * @protected
26
- * @type {number}
29
+ * @param {number} lastColumnIndex The last visible column index.
30
+ * @returns {number}
27
31
  */
28
- _defineProperty(this, "lastScrolledColumnPos", -1);
32
+ _classPrivateMethodInitSpec(this, _getLastColumnIndex);
29
33
  /**
30
- * Holds the last row reached by the scroll, which determines the scroll snapping direction
31
- * (top or bottom) for a next vertical scroll.
34
+ * The data access object.
32
35
  *
33
36
  * @protected
34
- * @type {number}
37
+ * @type {ScrollDao}
35
38
  */
36
- _defineProperty(this, "lastScrolledRowPos", -1);
39
+ _defineProperty(this, "dataAccessObject", void 0);
37
40
  this.dataAccessObject = dataAccessObject;
38
41
  }
39
42
 
@@ -71,8 +74,6 @@ class Scroll {
71
74
  if (!drawn || !Number.isInteger(column) || column < 0 || column > totalColumns) {
72
75
  return false;
73
76
  }
74
- const firstVisibleColumn = this.getFirstVisibleColumn();
75
- const lastVisibleColumn = this.getLastVisibleColumn();
76
77
  const autoSnapping = snapToRight === undefined && snapToLeft === undefined;
77
78
  const {
78
79
  fixedColumnsStart,
@@ -84,20 +85,14 @@ class Scroll {
84
85
  if (autoSnapping && column < fixedColumnsStart) {
85
86
  return false;
86
87
  }
87
- let result = false;
88
88
  column = this.dataAccessObject.wtSettings.getSetting('onBeforeViewportScrollHorizontally', column);
89
-
90
- // if there is no fully visible columns use the supporting variable (lastScrolledColumnPos) to
91
- // determine the snapping direction (left or right)
92
- if (firstVisibleColumn === -1) {
93
- result = inlineStartOverlay.scrollTo(column, autoSnapping ? column > this.lastScrolledColumnPos : snapToRight);
94
- } else if (autoSnapping && (column < firstVisibleColumn || column > lastVisibleColumn) || !autoSnapping) {
89
+ const firstColumn = this.getFirstVisibleColumn();
90
+ const lastColumn = this.getLastVisibleColumn();
91
+ let result = false;
92
+ if (autoSnapping && (column < firstColumn || column > lastColumn) || !autoSnapping) {
95
93
  // if there is at least one fully visible column determine the snapping direction based on
96
94
  // that columns or by snapToRight/snapToLeft flags, if provided.
97
- result = inlineStartOverlay.scrollTo(column, autoSnapping ? column > lastVisibleColumn : snapToRight);
98
- }
99
- if (result) {
100
- this.lastScrolledColumnPos = column;
95
+ result = inlineStartOverlay.scrollTo(column, autoSnapping ? column >= this.getLastPartiallyVisibleColumn() : snapToRight);
101
96
  }
102
97
  return result;
103
98
  }
@@ -120,8 +115,6 @@ class Scroll {
120
115
  if (!drawn || !Number.isInteger(row) || row < 0 || row > totalRows) {
121
116
  return false;
122
117
  }
123
- const firstVisibleRow = this.getFirstVisibleRow();
124
- const lastVisibleRow = this.getLastVisibleRow();
125
118
  const autoSnapping = snapToTop === undefined && snapToBottom === undefined;
126
119
  const {
127
120
  fixedRowsBottom,
@@ -134,20 +127,14 @@ class Scroll {
134
127
  if (autoSnapping && (row < fixedRowsTop || row > totalRows - fixedRowsBottom - 1)) {
135
128
  return false;
136
129
  }
137
- let result = false;
138
130
  row = this.dataAccessObject.wtSettings.getSetting('onBeforeViewportScrollVertically', row);
139
-
140
- // if there is no fully visible rows use the supporting variable (lastScrolledRowPos) to
141
- // determine the snapping direction (top or bottom)
142
- if (firstVisibleRow === -1) {
143
- result = topOverlay.scrollTo(row, autoSnapping ? row > this.lastScrolledRowPos : snapToBottom);
144
- } else if (autoSnapping && (row < firstVisibleRow || row > lastVisibleRow) || !autoSnapping) {
131
+ const firstRow = this.getFirstVisibleRow();
132
+ const lastRow = this.getLastVisibleRow();
133
+ let result = false;
134
+ if (autoSnapping && (row < firstRow || row > lastRow) || !autoSnapping) {
145
135
  // if there is at least one fully visible row determine the snapping direction based on
146
136
  // that rows or by snapToTop/snapToBottom flags, if provided.
147
- result = topOverlay.scrollTo(row, autoSnapping ? row > lastVisibleRow : snapToBottom);
148
- }
149
- if (result) {
150
- this.lastScrolledRowPos = row;
137
+ result = topOverlay.scrollTo(row, autoSnapping ? row >= this.getLastPartiallyVisibleRow() : snapToBottom);
151
138
  }
152
139
  return result;
153
140
  }
@@ -167,33 +154,25 @@ class Scroll {
167
154
  * @returns {number}
168
155
  */
169
156
  getLastVisibleRow() {
170
- const {
171
- topOverlay,
172
- wtTable,
173
- wtViewport,
174
- totalRows,
175
- rootWindow
176
- } = this.dataAccessObject;
177
- let lastVisibleRow = wtTable.getLastVisibleRow();
178
- if (topOverlay.mainTableScrollableElement === rootWindow) {
179
- const rootElementOffset = offset(wtTable.wtRootElement);
180
- const windowScrollTop = getScrollTop(rootWindow, rootWindow);
181
-
182
- // Only calculate lastVisibleRow when table didn't filled (from bottom) whole viewport space
183
- if (rootElementOffset.top > windowScrollTop) {
184
- const windowHeight = innerHeight(rootWindow);
185
- let rowsHeight = wtViewport.getColumnHeaderHeight();
186
- for (let row = 1; row <= totalRows; row++) {
187
- rowsHeight += topOverlay.sumCellSizes(row - 1, row);
188
- if (rootElementOffset.top + rowsHeight - windowScrollTop >= windowHeight) {
189
- // Return physical row - 1 (-2 because rangeEach gives row index + 1 - sumCellSizes requirements)
190
- lastVisibleRow = row - 2;
191
- break;
192
- }
193
- }
194
- }
195
- }
196
- return lastVisibleRow;
157
+ return _classPrivateMethodGet(this, _getLastRowIndex, _getLastRowIndex2).call(this, this.dataAccessObject.wtTable.getLastVisibleRow());
158
+ }
159
+
160
+ /**
161
+ * Get first partially visible row based on virtual dom and how table is visible in browser window viewport.
162
+ *
163
+ * @returns {number}
164
+ */
165
+ getFirstPartiallyVisibleRow() {
166
+ return this.dataAccessObject.wtTable.getFirstPartiallyVisibleRow();
167
+ }
168
+
169
+ /**
170
+ * Get last visible row based on virtual dom and how table is visible in browser window viewport.
171
+ *
172
+ * @returns {number}
173
+ */
174
+ getLastPartiallyVisibleRow() {
175
+ return _classPrivateMethodGet(this, _getLastRowIndex, _getLastRowIndex2).call(this, this.dataAccessObject.wtTable.getLastPartiallyVisibleRow());
197
176
  }
198
177
 
199
178
  /**
@@ -211,44 +190,92 @@ class Scroll {
211
190
  * @returns {number}
212
191
  */
213
192
  getLastVisibleColumn() {
214
- const {
215
- wtSettings,
216
- inlineStartOverlay,
217
- wtTable,
218
- wtViewport,
219
- totalColumns,
220
- rootWindow
221
- } = this.dataAccessObject;
222
- let lastVisibleColumn = wtTable.getLastVisibleColumn();
223
- if (inlineStartOverlay.mainTableScrollableElement === rootWindow) {
224
- const isRtl = wtSettings.getSetting('rtlMode');
225
- let inlineStartRootElementOffset = null;
226
- if (isRtl) {
227
- const tableRect = wtTable.TABLE.getBoundingClientRect();
228
- const rootDocument = this.dataAccessObject.rootWindow.document;
229
- const docOffsetWidth = rootDocument.documentElement.offsetWidth;
230
- inlineStartRootElementOffset = Math.abs(tableRect.right - docOffsetWidth);
231
- } else {
232
- const rootElementOffset = offset(wtTable.wtRootElement);
233
- inlineStartRootElementOffset = rootElementOffset.left;
193
+ return _classPrivateMethodGet(this, _getLastColumnIndex, _getLastColumnIndex2).call(this, this.dataAccessObject.wtTable.getLastVisibleColumn());
194
+ }
195
+
196
+ /**
197
+ * Get first partially visible column based on virtual dom and how table is visible in browser window viewport.
198
+ *
199
+ * @returns {number}
200
+ */
201
+ getFirstPartiallyVisibleColumn() {
202
+ return this.dataAccessObject.wtTable.getFirstPartiallyVisibleColumn();
203
+ }
204
+
205
+ /**
206
+ * Get last partially visible column based on virtual dom and how table is visible in browser window viewport.
207
+ *
208
+ * @returns {number}
209
+ */
210
+ getLastPartiallyVisibleColumn() {
211
+ return _classPrivateMethodGet(this, _getLastColumnIndex, _getLastColumnIndex2).call(this, this.dataAccessObject.wtTable.getLastPartiallyVisibleColumn());
212
+ }
213
+ }
214
+ function _getLastColumnIndex2(lastColumnIndex) {
215
+ const {
216
+ wtSettings,
217
+ inlineStartOverlay,
218
+ wtTable,
219
+ wtViewport,
220
+ totalColumns,
221
+ rootWindow
222
+ } = this.dataAccessObject;
223
+ if (inlineStartOverlay.mainTableScrollableElement === rootWindow) {
224
+ const isRtl = wtSettings.getSetting('rtlMode');
225
+ let inlineStartRootElementOffset = null;
226
+ if (isRtl) {
227
+ const tableRect = wtTable.TABLE.getBoundingClientRect();
228
+ const rootDocument = this.dataAccessObject.rootWindow.document;
229
+ const docOffsetWidth = rootDocument.documentElement.offsetWidth;
230
+ inlineStartRootElementOffset = Math.abs(tableRect.right - docOffsetWidth);
231
+ } else {
232
+ const rootElementOffset = offset(wtTable.wtRootElement);
233
+ inlineStartRootElementOffset = rootElementOffset.left;
234
+ }
235
+ const windowScrollLeft = Math.abs(getScrollLeft(rootWindow, rootWindow));
236
+
237
+ // Only calculate lastColumnIndex when table didn't filled (from right) whole viewport space
238
+ if (inlineStartRootElementOffset > windowScrollLeft) {
239
+ const windowWidth = innerWidth(rootWindow);
240
+ let columnsWidth = wtViewport.getRowHeaderWidth();
241
+ for (let column = 1; column <= totalColumns; column++) {
242
+ columnsWidth += inlineStartOverlay.sumCellSizes(column - 1, column);
243
+ if (inlineStartRootElementOffset + columnsWidth - windowScrollLeft >= windowWidth) {
244
+ // Return physical column - 1 (-2 because rangeEach gives column index + 1 - sumCellSizes requirements)
245
+ lastColumnIndex = column - 2;
246
+ break;
247
+ }
234
248
  }
235
- const windowScrollLeft = Math.abs(getScrollLeft(rootWindow, rootWindow));
236
-
237
- // Only calculate lastVisibleColumn when table didn't filled (from right) whole viewport space
238
- if (inlineStartRootElementOffset > windowScrollLeft) {
239
- const windowWidth = innerWidth(rootWindow);
240
- let columnsWidth = wtViewport.getRowHeaderWidth();
241
- for (let column = 1; column <= totalColumns; column++) {
242
- columnsWidth += inlineStartOverlay.sumCellSizes(column - 1, column);
243
- if (inlineStartRootElementOffset + columnsWidth - windowScrollLeft >= windowWidth) {
244
- // Return physical column - 1 (-2 because rangeEach gives column index + 1 - sumCellSizes requirements)
245
- lastVisibleColumn = column - 2;
246
- break;
247
- }
249
+ }
250
+ }
251
+ return lastColumnIndex;
252
+ }
253
+ function _getLastRowIndex2(lastRowIndex) {
254
+ const {
255
+ topOverlay,
256
+ wtTable,
257
+ wtViewport,
258
+ totalRows,
259
+ rootWindow
260
+ } = this.dataAccessObject;
261
+ if (topOverlay.mainTableScrollableElement === rootWindow) {
262
+ const rootElementOffset = offset(wtTable.wtRootElement);
263
+ const windowScrollTop = getScrollTop(rootWindow, rootWindow);
264
+
265
+ // Only calculate lastRowIndex when table didn't filled (from bottom) whole viewport space
266
+ if (rootElementOffset.top > windowScrollTop) {
267
+ const windowHeight = innerHeight(rootWindow);
268
+ let rowsHeight = wtViewport.getColumnHeaderHeight();
269
+ for (let row = 1; row <= totalRows; row++) {
270
+ rowsHeight += topOverlay.sumCellSizes(row - 1, row);
271
+ if (rootElementOffset.top + rowsHeight - windowScrollTop >= windowHeight) {
272
+ // Return physical row - 1 (-2 because rangeEach gives row index + 1 - sumCellSizes requirements)
273
+ lastRowIndex = row - 2;
274
+ break;
248
275
  }
249
276
  }
250
277
  }
251
- return lastVisibleColumn;
252
278
  }
279
+ return lastRowIndex;
253
280
  }
254
281
  export default Scroll;
@@ -39,6 +39,19 @@ const calculatedColumns = {
39
39
  }
40
40
  return startColumn;
41
41
  },
42
+ /**
43
+ * Get the source index of the first column partially visible in the viewport. If no columns are partially visible, returns an error code: -1.
44
+ *
45
+ * @returns {number}
46
+ * @this Table
47
+ */
48
+ getFirstPartiallyVisibleColumn() {
49
+ const startColumn = this.dataAccessObject.startColumnPartiallyVisible;
50
+ if (startColumn === null) {
51
+ return -1;
52
+ }
53
+ return startColumn;
54
+ },
42
55
  /**
43
56
  * Get the source index of the last rendered column. If no columns are rendered, returns an error code: -1.
44
57
  *
@@ -65,6 +78,19 @@ const calculatedColumns = {
65
78
  }
66
79
  return endColumn;
67
80
  },
81
+ /**
82
+ * Get the source index of the last column partially visible in the viewport. If no columns are partially visible, returns an error code: -1.
83
+ *
84
+ * @returns {number}
85
+ * @this Table
86
+ */
87
+ getLastPartiallyVisibleColumn() {
88
+ const endColumn = this.dataAccessObject.endColumnPartiallyVisible;
89
+ if (endColumn === null) {
90
+ return -1;
91
+ }
92
+ return endColumn;
93
+ },
68
94
  /**
69
95
  * Get the number of rendered columns.
70
96
  *
@@ -36,6 +36,19 @@ const calculatedColumns = {
36
36
  }
37
37
  return startColumn;
38
38
  },
39
+ /**
40
+ * Get the source index of the first column partially visible in the viewport. If no columns are partially visible, returns an error code: -1.
41
+ *
42
+ * @returns {number}
43
+ * @this Table
44
+ */
45
+ getFirstPartiallyVisibleColumn() {
46
+ const startColumn = this.dataAccessObject.startColumnPartiallyVisible;
47
+ if (startColumn === null) {
48
+ return -1;
49
+ }
50
+ return startColumn;
51
+ },
39
52
  /**
40
53
  * Get the source index of the last rendered column. If no columns are rendered, returns an error code: -1.
41
54
  *
@@ -62,6 +75,19 @@ const calculatedColumns = {
62
75
  }
63
76
  return endColumn;
64
77
  },
78
+ /**
79
+ * Get the source index of the last column partially visible in the viewport. If no columns are partially visible, returns an error code: -1.
80
+ *
81
+ * @returns {number}
82
+ * @this Table
83
+ */
84
+ getLastPartiallyVisibleColumn() {
85
+ const endColumn = this.dataAccessObject.endColumnPartiallyVisible;
86
+ if (endColumn === null) {
87
+ return -1;
88
+ }
89
+ return endColumn;
90
+ },
65
91
  /**
66
92
  * Get the number of rendered columns.
67
93
  *
@@ -39,6 +39,19 @@ const calculatedRows = {
39
39
  }
40
40
  return startRow;
41
41
  },
42
+ /**
43
+ * Get the source index of the first row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.
44
+ *
45
+ * @returns {number}
46
+ * @this Table
47
+ */
48
+ getFirstPartiallyVisibleRow() {
49
+ const startRow = this.dataAccessObject.startRowPartiallyVisible;
50
+ if (startRow === null) {
51
+ return -1;
52
+ }
53
+ return startRow;
54
+ },
42
55
  /**
43
56
  * Get the source index of the last rendered row. If no rows are rendered, returns an error code: -1.
44
57
  *
@@ -65,6 +78,19 @@ const calculatedRows = {
65
78
  }
66
79
  return endRow;
67
80
  },
81
+ /**
82
+ * Get the source index of the last row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.
83
+ *
84
+ * @returns {number}
85
+ * @this Table
86
+ */
87
+ getLastPartiallyVisibleRow() {
88
+ const endRow = this.dataAccessObject.endRowPartiallyVisible;
89
+ if (endRow === null) {
90
+ return -1;
91
+ }
92
+ return endRow;
93
+ },
68
94
  /**
69
95
  * Get the number of rendered rows.
70
96
  *
@@ -36,6 +36,19 @@ const calculatedRows = {
36
36
  }
37
37
  return startRow;
38
38
  },
39
+ /**
40
+ * Get the source index of the first row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.
41
+ *
42
+ * @returns {number}
43
+ * @this Table
44
+ */
45
+ getFirstPartiallyVisibleRow() {
46
+ const startRow = this.dataAccessObject.startRowPartiallyVisible;
47
+ if (startRow === null) {
48
+ return -1;
49
+ }
50
+ return startRow;
51
+ },
39
52
  /**
40
53
  * Get the source index of the last rendered row. If no rows are rendered, returns an error code: -1.
41
54
  *
@@ -62,6 +75,19 @@ const calculatedRows = {
62
75
  }
63
76
  return endRow;
64
77
  },
78
+ /**
79
+ * Get the source index of the last row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.
80
+ *
81
+ * @returns {number}
82
+ * @this Table
83
+ */
84
+ getLastPartiallyVisibleRow() {
85
+ const endRow = this.dataAccessObject.endRowPartiallyVisible;
86
+ if (endRow === null) {
87
+ return -1;
88
+ }
89
+ return endRow;
90
+ },
65
91
  /**
66
92
  * Get the number of rendered rows.
67
93
  *
@@ -36,6 +36,16 @@ const stickyColumnsStart = {
36
36
  getFirstVisibleColumn() {
37
37
  return this.getFirstRenderedColumn();
38
38
  },
39
+ /**
40
+ * Get the source index of the first column partially visible in the viewport. If no columns are partially visible, returns an error code: -1.
41
+ * Assumes that all rendered columns are fully visible.
42
+ *
43
+ * @returns {number}
44
+ * @this Table
45
+ */
46
+ getFirstPartiallyVisibleColumn() {
47
+ return this.getFirstRenderedColumn();
48
+ },
39
49
  /**
40
50
  * Get the source index of the last rendered column. If no columns are rendered, returns an error code: -1.
41
51
  *
@@ -55,6 +65,16 @@ const stickyColumnsStart = {
55
65
  getLastVisibleColumn() {
56
66
  return this.getLastRenderedColumn();
57
67
  },
68
+ /**
69
+ * Get the source index of the last column partially visible in the viewport. If no columns are partially visible, returns an error code: -1.
70
+ * Assumes that all rendered columns are fully visible.
71
+ *
72
+ * @returns {number}
73
+ * @this Table
74
+ */
75
+ getLastPartiallyVisibleColumn() {
76
+ return this.getLastRenderedColumn();
77
+ },
58
78
  /**
59
79
  * Get the number of rendered columns.
60
80
  *
@@ -33,6 +33,16 @@ const stickyColumnsStart = {
33
33
  getFirstVisibleColumn() {
34
34
  return this.getFirstRenderedColumn();
35
35
  },
36
+ /**
37
+ * Get the source index of the first column partially visible in the viewport. If no columns are partially visible, returns an error code: -1.
38
+ * Assumes that all rendered columns are fully visible.
39
+ *
40
+ * @returns {number}
41
+ * @this Table
42
+ */
43
+ getFirstPartiallyVisibleColumn() {
44
+ return this.getFirstRenderedColumn();
45
+ },
36
46
  /**
37
47
  * Get the source index of the last rendered column. If no columns are rendered, returns an error code: -1.
38
48
  *
@@ -52,6 +62,16 @@ const stickyColumnsStart = {
52
62
  getLastVisibleColumn() {
53
63
  return this.getLastRenderedColumn();
54
64
  },
65
+ /**
66
+ * Get the source index of the last column partially visible in the viewport. If no columns are partially visible, returns an error code: -1.
67
+ * Assumes that all rendered columns are fully visible.
68
+ *
69
+ * @returns {number}
70
+ * @this Table
71
+ */
72
+ getLastPartiallyVisibleColumn() {
73
+ return this.getLastRenderedColumn();
74
+ },
55
75
  /**
56
76
  * Get the number of rendered columns.
57
77
  *
@@ -41,6 +41,16 @@ const stickyRowsBottom = {
41
41
  getFirstVisibleRow() {
42
42
  return this.getFirstRenderedRow();
43
43
  },
44
+ /**
45
+ * Get the source index of the first row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.
46
+ * Assumes that all rendered rows are fully visible.
47
+ *
48
+ * @returns {number}
49
+ * @this Table
50
+ */
51
+ getFirstPartiallyVisibleRow() {
52
+ return this.getFirstRenderedRow();
53
+ },
44
54
  /**
45
55
  * Get the source index of the last rendered row. If no rows are rendered, returns an error code: -1.
46
56
  *
@@ -60,6 +70,16 @@ const stickyRowsBottom = {
60
70
  getLastVisibleRow() {
61
71
  return this.getLastRenderedRow();
62
72
  },
73
+ /**
74
+ * Get the source index of the last row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.
75
+ * Assumes that all rendered rows are fully visible.
76
+ *
77
+ * @returns {number}
78
+ * @this Table
79
+ */
80
+ getLastPartiallyVisibleRow() {
81
+ return this.getLastRenderedRow();
82
+ },
63
83
  /**
64
84
  * Get the number of rendered rows.
65
85
  *
@@ -38,6 +38,16 @@ const stickyRowsBottom = {
38
38
  getFirstVisibleRow() {
39
39
  return this.getFirstRenderedRow();
40
40
  },
41
+ /**
42
+ * Get the source index of the first row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.
43
+ * Assumes that all rendered rows are fully visible.
44
+ *
45
+ * @returns {number}
46
+ * @this Table
47
+ */
48
+ getFirstPartiallyVisibleRow() {
49
+ return this.getFirstRenderedRow();
50
+ },
41
51
  /**
42
52
  * Get the source index of the last rendered row. If no rows are rendered, returns an error code: -1.
43
53
  *
@@ -57,6 +67,16 @@ const stickyRowsBottom = {
57
67
  getLastVisibleRow() {
58
68
  return this.getLastRenderedRow();
59
69
  },
70
+ /**
71
+ * Get the source index of the last row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.
72
+ * Assumes that all rendered rows are fully visible.
73
+ *
74
+ * @returns {number}
75
+ * @this Table
76
+ */
77
+ getLastPartiallyVisibleRow() {
78
+ return this.getLastRenderedRow();
79
+ },
60
80
  /**
61
81
  * Get the number of rendered rows.
62
82
  *
@@ -36,6 +36,16 @@ const stickyRowsTop = {
36
36
  getFirstVisibleRow() {
37
37
  return this.getFirstRenderedRow();
38
38
  },
39
+ /**
40
+ * Get the source index of the first row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.
41
+ * Assumes that all rendered rows are fully visible.
42
+ *
43
+ * @returns {number}
44
+ * @this Table
45
+ */
46
+ getFirstPartiallyVisibleRow() {
47
+ return this.getFirstRenderedRow();
48
+ },
39
49
  /**
40
50
  * Get the source index of the last rendered row. If no rows are rendered, returns an error code: -1.
41
51
  *
@@ -55,6 +65,16 @@ const stickyRowsTop = {
55
65
  getLastVisibleRow() {
56
66
  return this.getLastRenderedRow();
57
67
  },
68
+ /**
69
+ * Get the source index of the last row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.
70
+ * Assumes that all rendered rows are fully visible.
71
+ *
72
+ * @returns {number}
73
+ * @this Table
74
+ */
75
+ getLastPartiallyVisibleRow() {
76
+ return this.getLastRenderedRow();
77
+ },
58
78
  /**
59
79
  * Get the number of rendered rows.
60
80
  *
@@ -33,6 +33,16 @@ const stickyRowsTop = {
33
33
  getFirstVisibleRow() {
34
34
  return this.getFirstRenderedRow();
35
35
  },
36
+ /**
37
+ * Get the source index of the first row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.
38
+ * Assumes that all rendered rows are fully visible.
39
+ *
40
+ * @returns {number}
41
+ * @this Table
42
+ */
43
+ getFirstPartiallyVisibleRow() {
44
+ return this.getFirstRenderedRow();
45
+ },
36
46
  /**
37
47
  * Get the source index of the last rendered row. If no rows are rendered, returns an error code: -1.
38
48
  *
@@ -52,6 +62,16 @@ const stickyRowsTop = {
52
62
  getLastVisibleRow() {
53
63
  return this.getLastRenderedRow();
54
64
  },
65
+ /**
66
+ * Get the source index of the last row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.
67
+ * Assumes that all rendered rows are fully visible.
68
+ *
69
+ * @returns {number}
70
+ * @this Table
71
+ */
72
+ getLastPartiallyVisibleRow() {
73
+ return this.getLastRenderedRow();
74
+ },
55
75
  /**
56
76
  * Get the number of rendered rows.
57
77
  *