handsontable 14.1.0 → 14.2.0-next-4873a35-20240228
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.
- package/3rdparty/walkontable/src/core/_base.js +12 -0
- package/3rdparty/walkontable/src/core/_base.mjs +12 -0
- package/3rdparty/walkontable/src/scroll.js +131 -98
- package/3rdparty/walkontable/src/scroll.mjs +133 -100
- package/3rdparty/walkontable/src/selection/border/border.js +3 -3
- package/3rdparty/walkontable/src/selection/border/border.mjs +3 -3
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +26 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +26 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +26 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +26 -0
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +20 -0
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +20 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +20 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +20 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +20 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +20 -0
- package/3rdparty/walkontable/src/table.js +2 -0
- package/3rdparty/walkontable/src/table.mjs +2 -0
- package/3rdparty/walkontable/src/viewport.js +9 -0
- package/3rdparty/walkontable/src/viewport.mjs +10 -1
- package/CHANGELOG.md +38 -0
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/core/index.js +6 -0
- package/core/index.mjs +2 -1
- package/core/viewportScroll/index.js +65 -0
- package/core/viewportScroll/index.mjs +61 -0
- package/core/viewportScroll/scrollStrategies/columnHeaderScroll.js +20 -0
- package/core/viewportScroll/scrollStrategies/columnHeaderScroll.mjs +16 -0
- package/core/viewportScroll/scrollStrategies/cornerHeaderScroll.js +14 -0
- package/core/viewportScroll/scrollStrategies/cornerHeaderScroll.mjs +10 -0
- package/core/viewportScroll/scrollStrategies/multipleScroll.js +15 -0
- package/core/viewportScroll/scrollStrategies/multipleScroll.mjs +11 -0
- package/core/viewportScroll/scrollStrategies/noncontiguousScroll.js +15 -0
- package/core/viewportScroll/scrollStrategies/noncontiguousScroll.mjs +11 -0
- package/core/viewportScroll/scrollStrategies/rowHeaderScroll.js +20 -0
- package/core/viewportScroll/scrollStrategies/rowHeaderScroll.mjs +16 -0
- package/core/viewportScroll/scrollStrategies/singleScroll.js +46 -0
- package/core/viewportScroll/scrollStrategies/singleScroll.mjs +42 -0
- package/core.d.ts +1 -1
- package/core.js +11 -52
- package/core.mjs +12 -53
- package/dataMap/metaManager/index.js +1 -1
- package/dataMap/metaManager/index.mjs +1 -1
- package/dataMap/metaManager/metaLayers/cellMeta.js +6 -1
- package/dataMap/metaManager/metaLayers/cellMeta.mjs +6 -1
- package/dataMap/metaManager/metaSchema.js +36 -12
- package/dataMap/metaManager/metaSchema.mjs +36 -12
- package/dist/handsontable.css +2 -2
- package/dist/handsontable.full.css +2 -2
- package/dist/handsontable.full.js +2996 -1928
- package/dist/handsontable.full.min.css +2 -2
- package/dist/handsontable.full.min.js +42 -42
- package/dist/handsontable.js +2998 -1930
- package/dist/handsontable.min.css +2 -2
- package/dist/handsontable.min.js +25 -25
- package/dist/languages/all.js +130 -25
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/hr-HR.js +167 -0
- package/dist/languages/hr-HR.min.js +1 -0
- package/editorManager.js +15 -4
- package/editorManager.mjs +15 -4
- package/editors/autocompleteEditor/autocompleteEditor.js +2 -2
- package/editors/autocompleteEditor/autocompleteEditor.mjs +2 -2
- package/editors/baseEditor/baseEditor.js +1 -1
- package/editors/baseEditor/baseEditor.mjs +1 -1
- package/editors/checkboxEditor/checkboxEditor.js +5 -4
- package/editors/checkboxEditor/checkboxEditor.mjs +5 -4
- package/editors/dateEditor/dateEditor.js +1 -1
- package/editors/dateEditor/dateEditor.mjs +1 -1
- package/editors/dropdownEditor/dropdownEditor.js +1 -1
- package/editors/dropdownEditor/dropdownEditor.mjs +1 -1
- package/editors/handsontableEditor/handsontableEditor.js +1 -1
- package/editors/handsontableEditor/handsontableEditor.mjs +1 -1
- package/editors/selectEditor/selectEditor.js +1 -1
- package/editors/selectEditor/selectEditor.mjs +1 -1
- package/editors/textEditor/textEditor.js +1 -2
- package/editors/textEditor/textEditor.mjs +1 -2
- package/editors/timeEditor/timeEditor.js +1 -1
- package/editors/timeEditor/timeEditor.mjs +1 -1
- package/helpers/mixed.js +2 -2
- package/helpers/mixed.mjs +2 -2
- package/helpers/moves.js +86 -0
- package/helpers/moves.mjs +82 -0
- package/i18n/languages/hr-HR.js +96 -0
- package/i18n/languages/hr-HR.mjs +90 -0
- package/i18n/languages/index.js +2 -0
- package/i18n/languages/index.mjs +2 -1
- package/languages/all.js +130 -25
- package/languages/hr-HR.js +167 -0
- package/languages/hr-HR.mjs +92 -0
- package/languages/index.js +130 -25
- package/languages/index.mjs +2 -1
- package/package.json +11 -1
- package/pluginHooks.d.ts +4 -2
- package/pluginHooks.js +33 -3
- package/pluginHooks.mjs +33 -3
- package/plugins/autoColumnSize/autoColumnSize.js +6 -1
- package/plugins/autoColumnSize/autoColumnSize.mjs +6 -1
- package/plugins/autoRowSize/autoRowSize.js +5 -0
- package/plugins/autoRowSize/autoRowSize.mjs +5 -0
- package/plugins/autofill/autofill.js +3 -2
- package/plugins/autofill/autofill.mjs +3 -2
- package/plugins/dropdownMenu/dropdownMenu.js +58 -4
- package/plugins/dropdownMenu/dropdownMenu.mjs +58 -4
- package/plugins/filters/component/value.js +51 -5
- package/plugins/filters/component/value.mjs +51 -5
- package/plugins/filters/utils.js +1 -1
- package/plugins/filters/utils.mjs +1 -1
- package/plugins/formulas/formulas.js +10 -1
- package/plugins/formulas/formulas.mjs +10 -1
- package/plugins/formulas/indexSyncer/axisSyncer.js +3 -75
- package/plugins/formulas/indexSyncer/axisSyncer.mjs +3 -75
- package/plugins/manualColumnResize/manualColumnResize.js +3 -0
- package/plugins/manualColumnResize/manualColumnResize.mjs +3 -0
- package/plugins/mergeCells/cellsCollection.js +1 -1
- package/plugins/mergeCells/cellsCollection.mjs +1 -1
- package/plugins/mergeCells/mergeCells.js +30 -0
- package/plugins/mergeCells/mergeCells.mjs +30 -0
- package/plugins/undoRedo/undoRedo.js +61 -14
- package/plugins/undoRedo/undoRedo.mjs +61 -14
- package/renderers/autocompleteRenderer/autocompleteRenderer.js +1 -1
- package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +1 -1
- package/renderers/baseRenderer/baseRenderer.js +1 -1
- package/renderers/baseRenderer/baseRenderer.mjs +1 -1
- package/renderers/checkboxRenderer/checkboxRenderer.js +36 -8
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +36 -8
- package/renderers/dateRenderer/dateRenderer.js +1 -1
- package/renderers/dateRenderer/dateRenderer.mjs +1 -1
- package/renderers/dropdownRenderer/dropdownRenderer.js +1 -1
- package/renderers/dropdownRenderer/dropdownRenderer.mjs +1 -1
- package/renderers/handsontableRenderer/handsontableRenderer.js +1 -1
- package/renderers/handsontableRenderer/handsontableRenderer.mjs +1 -1
- package/renderers/htmlRenderer/htmlRenderer.js +1 -1
- package/renderers/htmlRenderer/htmlRenderer.mjs +1 -1
- package/renderers/numericRenderer/index.js +2 -1
- package/renderers/numericRenderer/index.mjs +1 -1
- package/renderers/numericRenderer/numericRenderer.js +28 -13
- package/renderers/numericRenderer/numericRenderer.mjs +27 -13
- package/renderers/passwordRenderer/passwordRenderer.js +1 -1
- package/renderers/passwordRenderer/passwordRenderer.mjs +1 -1
- package/renderers/selectRenderer/selectRenderer.js +1 -1
- package/renderers/selectRenderer/selectRenderer.mjs +1 -1
- package/renderers/textRenderer/textRenderer.js +1 -1
- package/renderers/textRenderer/textRenderer.mjs +1 -1
- package/renderers/timeRenderer/timeRenderer.js +1 -1
- package/renderers/timeRenderer/timeRenderer.mjs +1 -1
- package/selection/mouseEventHandler.js +4 -0
- package/selection/mouseEventHandler.mjs +4 -0
- package/selection/selection.js +64 -5
- package/selection/selection.mjs +64 -5
- package/shortcuts/recorder.js +27 -8
- package/shortcuts/recorder.mjs +27 -8
- package/tableView.js +86 -5
- package/tableView.mjs +87 -6
- package/utils/autoResize.js +0 -1
- package/utils/autoResize.mjs +0 -1
- package/utils/ghostTable.js +6 -6
- package/utils/ghostTable.mjs +6 -6
- package/utils/parseTable.js +9 -1
- package/utils/parseTable.mjs +9 -1
@@ -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
|
*
|
@@ -272,6 +272,7 @@ class Table {
|
|
272
272
|
if (this.isMaster) {
|
273
273
|
// in case we only scrolled without redraw, update visible rows information in oldRowsCalculator
|
274
274
|
wtViewport.createVisibleCalculators();
|
275
|
+
wtViewport.createPartiallyVisibleCalculators();
|
275
276
|
}
|
276
277
|
if (wtOverlays) {
|
277
278
|
wtOverlays.refresh(true);
|
@@ -315,6 +316,7 @@ class Table {
|
|
315
316
|
}
|
316
317
|
if (this.isMaster) {
|
317
318
|
this.dataAccessObject.wtViewport.createVisibleCalculators();
|
319
|
+
this.dataAccessObject.wtViewport.createPartiallyVisibleCalculators();
|
318
320
|
this.dataAccessObject.wtOverlays.refresh(false);
|
319
321
|
this.dataAccessObject.wtOverlays.applyToDOM();
|
320
322
|
const hiderWidth = (0, _element.outerWidth)(this.hider);
|
@@ -268,6 +268,7 @@ class Table {
|
|
268
268
|
if (this.isMaster) {
|
269
269
|
// in case we only scrolled without redraw, update visible rows information in oldRowsCalculator
|
270
270
|
wtViewport.createVisibleCalculators();
|
271
|
+
wtViewport.createPartiallyVisibleCalculators();
|
271
272
|
}
|
272
273
|
if (wtOverlays) {
|
273
274
|
wtOverlays.refresh(true);
|
@@ -311,6 +312,7 @@ class Table {
|
|
311
312
|
}
|
312
313
|
if (this.isMaster) {
|
313
314
|
this.dataAccessObject.wtViewport.createVisibleCalculators();
|
315
|
+
this.dataAccessObject.wtViewport.createPartiallyVisibleCalculators();
|
314
316
|
this.dataAccessObject.wtOverlays.refresh(false);
|
315
317
|
this.dataAccessObject.wtOverlays.applyToDOM();
|
316
318
|
const hiderWidth = outerWidth(this.hider);
|
@@ -377,6 +377,15 @@ class Viewport {
|
|
377
377
|
this.columnsVisibleCalculator = this.createColumnsCalculator(_calculator.FULLY_VISIBLE_TYPE);
|
378
378
|
}
|
379
379
|
|
380
|
+
/**
|
381
|
+
* Creates rowsPartiallyVisibleCalculator and columnsPartiallyVisibleCalculator (after draw, to determine what are
|
382
|
+
* the actually partially visible rows and columns).
|
383
|
+
*/
|
384
|
+
createPartiallyVisibleCalculators() {
|
385
|
+
this.rowsPartiallyVisibleCalculator = this.createRowsCalculator(_calculator.PARTIALLY_VISIBLE_TYPE);
|
386
|
+
this.columnsPartiallyVisibleCalculator = this.createColumnsCalculator(_calculator.PARTIALLY_VISIBLE_TYPE);
|
387
|
+
}
|
388
|
+
|
380
389
|
/**
|
381
390
|
* Returns information whether proposedRowsVisibleCalculator viewport
|
382
391
|
* is contained inside rows rendered in previous draw (cached in rowsRenderCalculator).
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { getScrollbarWidth, getStyle, offset, outerHeight, outerWidth } from "../../../helpers/dom/element.mjs";
|
2
2
|
import { objectEach } from "../../../helpers/object.mjs";
|
3
|
-
import { RENDER_TYPE, FULLY_VISIBLE_TYPE, RenderAllColumnsCalculator, RenderAllRowsCalculator, ViewportColumnsCalculator, ViewportRowsCalculator } from "./calculator/index.mjs";
|
3
|
+
import { RENDER_TYPE, FULLY_VISIBLE_TYPE, PARTIALLY_VISIBLE_TYPE, RenderAllColumnsCalculator, RenderAllRowsCalculator, ViewportColumnsCalculator, ViewportRowsCalculator } from "./calculator/index.mjs";
|
4
4
|
/**
|
5
5
|
* @class Viewport
|
6
6
|
*/
|
@@ -374,6 +374,15 @@ class Viewport {
|
|
374
374
|
this.columnsVisibleCalculator = this.createColumnsCalculator(FULLY_VISIBLE_TYPE);
|
375
375
|
}
|
376
376
|
|
377
|
+
/**
|
378
|
+
* Creates rowsPartiallyVisibleCalculator and columnsPartiallyVisibleCalculator (after draw, to determine what are
|
379
|
+
* the actually partially visible rows and columns).
|
380
|
+
*/
|
381
|
+
createPartiallyVisibleCalculators() {
|
382
|
+
this.rowsPartiallyVisibleCalculator = this.createRowsCalculator(PARTIALLY_VISIBLE_TYPE);
|
383
|
+
this.columnsPartiallyVisibleCalculator = this.createColumnsCalculator(PARTIALLY_VISIBLE_TYPE);
|
384
|
+
}
|
385
|
+
|
377
386
|
/**
|
378
387
|
* Returns information whether proposedRowsVisibleCalculator viewport
|
379
388
|
* is contained inside rows rendered in previous draw (cached in rowsRenderCalculator).
|
package/CHANGELOG.md
CHANGED
@@ -9,6 +9,44 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
9
9
|
|
10
10
|
<!-- UNVERSIONED -->
|
11
11
|
|
12
|
+
## [14.2.0] - 2024-03-06
|
13
|
+
|
14
|
+
### Added
|
15
|
+
- Added new `beforeBeginEditing` hook [#10699](https://github.com/handsontable/handsontable/pull/10699)
|
16
|
+
- Added an ability to prevent viewport scroll via `beforeViewportScrollVertically` and `beforeViewportScrollHorizontally` hooks. [#10724](https://github.com/handsontable/handsontable/pull/10724)
|
17
|
+
- Undo will work for moving columns [#10746](https://github.com/handsontable/handsontable/pull/10746)
|
18
|
+
- Added a `modifyFiltersMultiSelectValue` plugin hook and utilized it in the Filters' multi-selection component. [#10756](https://github.com/handsontable/handsontable/pull/10756)
|
19
|
+
- Adds localization for Croatian language [#10762](https://github.com/handsontable/handsontable/pull/10762)
|
20
|
+
|
21
|
+
### Changed
|
22
|
+
- Improved behavior of the viewport scroll after a cell click. [#10709](https://github.com/handsontable/handsontable/pull/10709)
|
23
|
+
- Added `pikaday` to `handsontable`'s `dependencies` to ensure the backward compatibility of `14.1.0`. [#10715](https://github.com/handsontable/handsontable/pull/10715)
|
24
|
+
- Changed unnatural checkbox behaviour after double click [#10748](https://github.com/handsontable/handsontable/pull/10748)
|
25
|
+
- Changed the way checkbox-typed cells react to pressing `SPACE` and `ENTER` keys. [#10802](https://github.com/handsontable/handsontable/pull/10802)
|
26
|
+
- React: Improve react portal caching [#10758](https://github.com/handsontable/handsontable/pull/10758)
|
27
|
+
|
28
|
+
### Removed
|
29
|
+
- removed versioned examples and gh workflow for publishing [#10766](https://github.com/handsontable/handsontable/pull/10766)
|
30
|
+
|
31
|
+
### Fixed
|
32
|
+
- Fixed propToCol return type inference [#10631](https://github.com/handsontable/handsontable/issues/10631)
|
33
|
+
- Fixed row/column size calculations for hidden indexes [#10705](https://github.com/handsontable/handsontable/pull/10705)
|
34
|
+
- Execution of data getters in cells method won't throw an error anymore in specific situation [#10710](https://github.com/handsontable/handsontable/pull/10710)
|
35
|
+
- Fixed problems related to not syncing sheet rename from HF to HOT [#10719](https://github.com/handsontable/handsontable/pull/10719)
|
36
|
+
- Removing all columns/rows when HyperFormula is enabled won't cause an error [#10720](https://github.com/handsontable/handsontable/pull/10720)
|
37
|
+
- Fixed a problem with the text editor missing the vertical scrollbar on cells with larger amounts of content. [#10722](https://github.com/handsontable/handsontable/pull/10722)
|
38
|
+
- Fixed the `afterSelectionEnd` and `afterSelectionEndByProp` hooks overcall when the non-contiguous selection was applied [#10725](https://github.com/handsontable/handsontable/pull/10725)
|
39
|
+
- Cells pasted from clipboard's tables won't contain unnecessary line breaks [#10745](https://github.com/handsontable/handsontable/pull/10745)
|
40
|
+
- Focus on the Handsontable instance within the iframe won't persist for clicking outside the iframe [#10752](https://github.com/handsontable/handsontable/pull/10752)
|
41
|
+
- Hovering "handsontable" cell type header handles won't throw an error [#10761](https://github.com/handsontable/handsontable/pull/10761)
|
42
|
+
- Fixed a problem with the dropdown editor throwing an error when the cell value was represented by a `td` outside of the initial editor viewport. [#10763](https://github.com/handsontable/handsontable/pull/10763)
|
43
|
+
- Fixed input problems when using the browser's autocomplete + fixed an event listener leak. [#10795](https://github.com/handsontable/handsontable/pull/10795)
|
44
|
+
- Fixed a problem where the mobile selection handles were displayed on the context menus/dropdown menus. [#10816](https://github.com/handsontable/handsontable/pull/10816)
|
45
|
+
- Fixed a problem where the Autofill plugin's double-click feature treated cells filled with `0`s as empty. [#10817](https://github.com/handsontable/handsontable/pull/10817)
|
46
|
+
- Vue: chore: update peerDependencies of vue3 wrapper [#10571](https://github.com/handsontable/handsontable/issues/10571)
|
47
|
+
- React: Export HotTableClass from React wrapper [#10736](https://github.com/handsontable/handsontable/issues/10736)
|
48
|
+
- React: Fixed missing renderer and editor prop in react wrapper [#10768](https://github.com/handsontable/handsontable/pull/10768)
|
49
|
+
|
12
50
|
## [14.1.0] - 2024-01-16
|
13
51
|
|
14
52
|
### Added
|
package/base.js
CHANGED
@@ -45,8 +45,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
|
|
45
45
|
Handsontable.CellCoords = _src.CellCoords;
|
46
46
|
Handsontable.CellRange = _src.CellRange;
|
47
47
|
Handsontable.packageName = 'handsontable';
|
48
|
-
Handsontable.buildDate = "
|
49
|
-
Handsontable.version = "14.
|
48
|
+
Handsontable.buildDate = "28/02/2024 15:23:03";
|
49
|
+
Handsontable.version = "14.2.0-next-4873a35-20240228";
|
50
50
|
Handsontable.languages = {
|
51
51
|
dictionaryKeys: _registry.dictionaryKeys,
|
52
52
|
getLanguageDictionary: _registry.getLanguageDictionary,
|
package/base.mjs
CHANGED
@@ -35,8 +35,8 @@ Handsontable.hooks = Hooks.getSingleton();
|
|
35
35
|
Handsontable.CellCoords = CellCoords;
|
36
36
|
Handsontable.CellRange = CellRange;
|
37
37
|
Handsontable.packageName = 'handsontable';
|
38
|
-
Handsontable.buildDate = "
|
39
|
-
Handsontable.version = "14.
|
38
|
+
Handsontable.buildDate = "28/02/2024 15:23:08";
|
39
|
+
Handsontable.version = "14.2.0-next-4873a35-20240228";
|
40
40
|
Handsontable.languages = {
|
41
41
|
dictionaryKeys,
|
42
42
|
getLanguageDictionary,
|
package/core/index.js
CHANGED
@@ -6,4 +6,10 @@ Object.keys(_focusCatcher).forEach(function (key) {
|
|
6
6
|
if (key === "default" || key === "__esModule") return;
|
7
7
|
if (key in exports && exports[key] === _focusCatcher[key]) return;
|
8
8
|
exports[key] = _focusCatcher[key];
|
9
|
+
});
|
10
|
+
var _viewportScroll = require("./viewportScroll");
|
11
|
+
Object.keys(_viewportScroll).forEach(function (key) {
|
12
|
+
if (key === "default" || key === "__esModule") return;
|
13
|
+
if (key in exports && exports[key] === _viewportScroll[key]) return;
|
14
|
+
exports[key] = _viewportScroll[key];
|
9
15
|
});
|
package/core/index.mjs
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
export * from "./focusCatcher/index.mjs";
|
1
|
+
export * from "./focusCatcher/index.mjs";
|
2
|
+
export * from "./viewportScroll/index.mjs";
|
@@ -0,0 +1,65 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.createViewportScroller = createViewportScroller;
|
5
|
+
var _columnHeaderScroll = require("./scrollStrategies/columnHeaderScroll");
|
6
|
+
var _cornerHeaderScroll = require("./scrollStrategies/cornerHeaderScroll");
|
7
|
+
var _multipleScroll = require("./scrollStrategies/multipleScroll");
|
8
|
+
var _noncontiguousScroll = require("./scrollStrategies/noncontiguousScroll");
|
9
|
+
var _rowHeaderScroll = require("./scrollStrategies/rowHeaderScroll");
|
10
|
+
var _singleScroll = require("./scrollStrategies/singleScroll");
|
11
|
+
/**
|
12
|
+
* @typedef ViewportScroller
|
13
|
+
* @property {function(): void} resume Resumes the viewport scroller.
|
14
|
+
* @property {function(): void} suspend Suspends the viewport scroller until the `resume` method is called.
|
15
|
+
* @property {function(): void} skipNextScrollCycle Skip the next scroll cycle.
|
16
|
+
* @property {function(CellCoords): void} scrollTo Scroll the viewport to a given cell.
|
17
|
+
*/
|
18
|
+
/**
|
19
|
+
* Installs a viewport scroller module. The module is responsible for scrolling the viewport to a given cell
|
20
|
+
* based on the selection type (single cell selection, multiple cells selection, header selection etc.).
|
21
|
+
* It's triggered by the selection module via the `afterSetRangeEnd` hook every time the selection changes.
|
22
|
+
*
|
23
|
+
* @param {Core} hot The Handsontable instance.
|
24
|
+
* @returns {ViewportScroller} The viewport scroller module.
|
25
|
+
*/
|
26
|
+
function createViewportScroller(hot) {
|
27
|
+
const {
|
28
|
+
selection
|
29
|
+
} = hot;
|
30
|
+
let skipNextCall = false;
|
31
|
+
let isSuspended = false;
|
32
|
+
return {
|
33
|
+
resume() {
|
34
|
+
isSuspended = false;
|
35
|
+
},
|
36
|
+
suspend() {
|
37
|
+
isSuspended = true;
|
38
|
+
},
|
39
|
+
skipNextScrollCycle() {
|
40
|
+
skipNextCall = true;
|
41
|
+
},
|
42
|
+
scrollTo(cellCoords) {
|
43
|
+
var _scrollStrategy;
|
44
|
+
if (skipNextCall || isSuspended) {
|
45
|
+
skipNextCall = false;
|
46
|
+
return;
|
47
|
+
}
|
48
|
+
let scrollStrategy;
|
49
|
+
if (selection.isSelectedByCorner()) {
|
50
|
+
scrollStrategy = (0, _cornerHeaderScroll.cornerHeaderScrollStrategy)(hot);
|
51
|
+
} else if (selection.isSelectedByRowHeader()) {
|
52
|
+
scrollStrategy = (0, _rowHeaderScroll.rowHeaderScrollStrategy)(hot);
|
53
|
+
} else if (selection.isSelectedByColumnHeader()) {
|
54
|
+
scrollStrategy = (0, _columnHeaderScroll.columnHeaderScrollStrategy)(hot);
|
55
|
+
} else if (selection.getSelectedRange().size() === 1 && selection.isMultiple()) {
|
56
|
+
scrollStrategy = (0, _multipleScroll.multipleScrollStrategy)(hot);
|
57
|
+
} else if (selection.getSelectedRange().size() === 1 && !selection.isMultiple()) {
|
58
|
+
scrollStrategy = (0, _singleScroll.singleScrollStrategy)(hot);
|
59
|
+
} else if (selection.getSelectedRange().size() > 1) {
|
60
|
+
scrollStrategy = (0, _noncontiguousScroll.noncontiguousScrollStrategy)(hot);
|
61
|
+
}
|
62
|
+
(_scrollStrategy = scrollStrategy) === null || _scrollStrategy === void 0 || _scrollStrategy(cellCoords);
|
63
|
+
}
|
64
|
+
};
|
65
|
+
}
|
@@ -0,0 +1,61 @@
|
|
1
|
+
import { columnHeaderScrollStrategy } from "./scrollStrategies/columnHeaderScroll.mjs";
|
2
|
+
import { cornerHeaderScrollStrategy } from "./scrollStrategies/cornerHeaderScroll.mjs";
|
3
|
+
import { multipleScrollStrategy } from "./scrollStrategies/multipleScroll.mjs";
|
4
|
+
import { noncontiguousScrollStrategy } from "./scrollStrategies/noncontiguousScroll.mjs";
|
5
|
+
import { rowHeaderScrollStrategy } from "./scrollStrategies/rowHeaderScroll.mjs";
|
6
|
+
import { singleScrollStrategy } from "./scrollStrategies/singleScroll.mjs";
|
7
|
+
/**
|
8
|
+
* @typedef ViewportScroller
|
9
|
+
* @property {function(): void} resume Resumes the viewport scroller.
|
10
|
+
* @property {function(): void} suspend Suspends the viewport scroller until the `resume` method is called.
|
11
|
+
* @property {function(): void} skipNextScrollCycle Skip the next scroll cycle.
|
12
|
+
* @property {function(CellCoords): void} scrollTo Scroll the viewport to a given cell.
|
13
|
+
*/
|
14
|
+
/**
|
15
|
+
* Installs a viewport scroller module. The module is responsible for scrolling the viewport to a given cell
|
16
|
+
* based on the selection type (single cell selection, multiple cells selection, header selection etc.).
|
17
|
+
* It's triggered by the selection module via the `afterSetRangeEnd` hook every time the selection changes.
|
18
|
+
*
|
19
|
+
* @param {Core} hot The Handsontable instance.
|
20
|
+
* @returns {ViewportScroller} The viewport scroller module.
|
21
|
+
*/
|
22
|
+
export function createViewportScroller(hot) {
|
23
|
+
const {
|
24
|
+
selection
|
25
|
+
} = hot;
|
26
|
+
let skipNextCall = false;
|
27
|
+
let isSuspended = false;
|
28
|
+
return {
|
29
|
+
resume() {
|
30
|
+
isSuspended = false;
|
31
|
+
},
|
32
|
+
suspend() {
|
33
|
+
isSuspended = true;
|
34
|
+
},
|
35
|
+
skipNextScrollCycle() {
|
36
|
+
skipNextCall = true;
|
37
|
+
},
|
38
|
+
scrollTo(cellCoords) {
|
39
|
+
var _scrollStrategy;
|
40
|
+
if (skipNextCall || isSuspended) {
|
41
|
+
skipNextCall = false;
|
42
|
+
return;
|
43
|
+
}
|
44
|
+
let scrollStrategy;
|
45
|
+
if (selection.isSelectedByCorner()) {
|
46
|
+
scrollStrategy = cornerHeaderScrollStrategy(hot);
|
47
|
+
} else if (selection.isSelectedByRowHeader()) {
|
48
|
+
scrollStrategy = rowHeaderScrollStrategy(hot);
|
49
|
+
} else if (selection.isSelectedByColumnHeader()) {
|
50
|
+
scrollStrategy = columnHeaderScrollStrategy(hot);
|
51
|
+
} else if (selection.getSelectedRange().size() === 1 && selection.isMultiple()) {
|
52
|
+
scrollStrategy = multipleScrollStrategy(hot);
|
53
|
+
} else if (selection.getSelectedRange().size() === 1 && !selection.isMultiple()) {
|
54
|
+
scrollStrategy = singleScrollStrategy(hot);
|
55
|
+
} else if (selection.getSelectedRange().size() > 1) {
|
56
|
+
scrollStrategy = noncontiguousScrollStrategy(hot);
|
57
|
+
}
|
58
|
+
(_scrollStrategy = scrollStrategy) === null || _scrollStrategy === void 0 || _scrollStrategy(cellCoords);
|
59
|
+
}
|
60
|
+
};
|
61
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.columnHeaderScrollStrategy = columnHeaderScrollStrategy;
|
5
|
+
/**
|
6
|
+
* Scroll strategy for column header selection.
|
7
|
+
*
|
8
|
+
* @param {Core} hot Handsontable instance.
|
9
|
+
* @returns {function(): function(CellCoords): void}
|
10
|
+
*/
|
11
|
+
function columnHeaderScrollStrategy(hot) {
|
12
|
+
return _ref => {
|
13
|
+
let {
|
14
|
+
col
|
15
|
+
} = _ref;
|
16
|
+
hot.scrollViewportTo({
|
17
|
+
col
|
18
|
+
});
|
19
|
+
};
|
20
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
/**
|
2
|
+
* Scroll strategy for column header selection.
|
3
|
+
*
|
4
|
+
* @param {Core} hot Handsontable instance.
|
5
|
+
* @returns {function(): function(CellCoords): void}
|
6
|
+
*/
|
7
|
+
export function columnHeaderScrollStrategy(hot) {
|
8
|
+
return _ref => {
|
9
|
+
let {
|
10
|
+
col
|
11
|
+
} = _ref;
|
12
|
+
hot.scrollViewportTo({
|
13
|
+
col
|
14
|
+
});
|
15
|
+
};
|
16
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.cornerHeaderScrollStrategy = cornerHeaderScrollStrategy;
|
5
|
+
/**
|
6
|
+
* Scroll strategy for corner header selection.
|
7
|
+
*
|
8
|
+
* @returns {function(): function(CellCoords): void}
|
9
|
+
*/
|
10
|
+
function cornerHeaderScrollStrategy() {
|
11
|
+
return () => {
|
12
|
+
// do not scroll the viewport when the corner is clicked
|
13
|
+
};
|
14
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.multipleScrollStrategy = multipleScrollStrategy;
|
5
|
+
/**
|
6
|
+
* Scroll strategy for multiple selections.
|
7
|
+
*
|
8
|
+
* @param {Core} hot Handsontable instance.
|
9
|
+
* @returns {function(): function(CellCoords): void}
|
10
|
+
*/
|
11
|
+
function multipleScrollStrategy(hot) {
|
12
|
+
return cellCoords => {
|
13
|
+
hot.scrollViewportTo(cellCoords.toObject());
|
14
|
+
};
|
15
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
/**
|
2
|
+
* Scroll strategy for multiple selections.
|
3
|
+
*
|
4
|
+
* @param {Core} hot Handsontable instance.
|
5
|
+
* @returns {function(): function(CellCoords): void}
|
6
|
+
*/
|
7
|
+
export function multipleScrollStrategy(hot) {
|
8
|
+
return cellCoords => {
|
9
|
+
hot.scrollViewportTo(cellCoords.toObject());
|
10
|
+
};
|
11
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.noncontiguousScrollStrategy = noncontiguousScrollStrategy;
|
5
|
+
/**
|
6
|
+
* Scroll strategy for non-contiguous selections.
|
7
|
+
*
|
8
|
+
* @param {Core} hot Handsontable instance.
|
9
|
+
* @returns {function(): function(CellCoords): void}
|
10
|
+
*/
|
11
|
+
function noncontiguousScrollStrategy(hot) {
|
12
|
+
return cellCoords => {
|
13
|
+
hot.scrollViewportTo(cellCoords.toObject());
|
14
|
+
};
|
15
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
/**
|
2
|
+
* Scroll strategy for non-contiguous selections.
|
3
|
+
*
|
4
|
+
* @param {Core} hot Handsontable instance.
|
5
|
+
* @returns {function(): function(CellCoords): void}
|
6
|
+
*/
|
7
|
+
export function noncontiguousScrollStrategy(hot) {
|
8
|
+
return cellCoords => {
|
9
|
+
hot.scrollViewportTo(cellCoords.toObject());
|
10
|
+
};
|
11
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.rowHeaderScrollStrategy = rowHeaderScrollStrategy;
|
5
|
+
/**
|
6
|
+
* Scroll strategy for row header selection.
|
7
|
+
*
|
8
|
+
* @param {Core} hot Handsontable instance.
|
9
|
+
* @returns {function(): function(CellCoords): void}
|
10
|
+
*/
|
11
|
+
function rowHeaderScrollStrategy(hot) {
|
12
|
+
return _ref => {
|
13
|
+
let {
|
14
|
+
row
|
15
|
+
} = _ref;
|
16
|
+
hot.scrollViewportTo({
|
17
|
+
row
|
18
|
+
});
|
19
|
+
};
|
20
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
/**
|
2
|
+
* Scroll strategy for row header selection.
|
3
|
+
*
|
4
|
+
* @param {Core} hot Handsontable instance.
|
5
|
+
* @returns {function(): function(CellCoords): void}
|
6
|
+
*/
|
7
|
+
export function rowHeaderScrollStrategy(hot) {
|
8
|
+
return _ref => {
|
9
|
+
let {
|
10
|
+
row
|
11
|
+
} = _ref;
|
12
|
+
hot.scrollViewportTo({
|
13
|
+
row
|
14
|
+
});
|
15
|
+
};
|
16
|
+
}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.singleScrollStrategy = singleScrollStrategy;
|
5
|
+
/**
|
6
|
+
* Scroll strategy for single cell selection.
|
7
|
+
*
|
8
|
+
* @param {Core} hot Handsontable instance.
|
9
|
+
* @returns {function(): function(CellCoords): { row: number, col: number } | void }
|
10
|
+
*/
|
11
|
+
function singleScrollStrategy(hot) {
|
12
|
+
return cellCoords => {
|
13
|
+
const selectionSource = hot.selection.getSelectionSource();
|
14
|
+
const {
|
15
|
+
row,
|
16
|
+
col
|
17
|
+
} = cellCoords;
|
18
|
+
|
19
|
+
// navigating through the column headers (when `navigableHeaders` is enabled)
|
20
|
+
// scrolls the viewport horizontally only
|
21
|
+
if (row < 0 && col >= 0) {
|
22
|
+
hot.scrollViewportTo({
|
23
|
+
col
|
24
|
+
});
|
25
|
+
|
26
|
+
// navigating through the row headers (when `navigableHeaders` is enabled)
|
27
|
+
// scrolls the viewport vertically only
|
28
|
+
} else if (col < 0 && row >= 0) {
|
29
|
+
hot.scrollViewportTo({
|
30
|
+
row
|
31
|
+
});
|
32
|
+
|
33
|
+
// navigating through the cells
|
34
|
+
} else {
|
35
|
+
if (selectionSource === 'mouse') {
|
36
|
+
if (col === hot.view.getLastPartiallyVisibleColumn() || row === hot.view.getLastPartiallyVisibleRow()) {
|
37
|
+
return;
|
38
|
+
}
|
39
|
+
}
|
40
|
+
hot.scrollViewportTo({
|
41
|
+
row,
|
42
|
+
col
|
43
|
+
});
|
44
|
+
}
|
45
|
+
};
|
46
|
+
}
|
@@ -0,0 +1,42 @@
|
|
1
|
+
/**
|
2
|
+
* Scroll strategy for single cell selection.
|
3
|
+
*
|
4
|
+
* @param {Core} hot Handsontable instance.
|
5
|
+
* @returns {function(): function(CellCoords): { row: number, col: number } | void }
|
6
|
+
*/
|
7
|
+
export function singleScrollStrategy(hot) {
|
8
|
+
return cellCoords => {
|
9
|
+
const selectionSource = hot.selection.getSelectionSource();
|
10
|
+
const {
|
11
|
+
row,
|
12
|
+
col
|
13
|
+
} = cellCoords;
|
14
|
+
|
15
|
+
// navigating through the column headers (when `navigableHeaders` is enabled)
|
16
|
+
// scrolls the viewport horizontally only
|
17
|
+
if (row < 0 && col >= 0) {
|
18
|
+
hot.scrollViewportTo({
|
19
|
+
col
|
20
|
+
});
|
21
|
+
|
22
|
+
// navigating through the row headers (when `navigableHeaders` is enabled)
|
23
|
+
// scrolls the viewport vertically only
|
24
|
+
} else if (col < 0 && row >= 0) {
|
25
|
+
hot.scrollViewportTo({
|
26
|
+
row
|
27
|
+
});
|
28
|
+
|
29
|
+
// navigating through the cells
|
30
|
+
} else {
|
31
|
+
if (selectionSource === 'mouse') {
|
32
|
+
if (col === hot.view.getLastPartiallyVisibleColumn() || row === hot.view.getLastPartiallyVisibleRow()) {
|
33
|
+
return;
|
34
|
+
}
|
35
|
+
}
|
36
|
+
hot.scrollViewportTo({
|
37
|
+
row,
|
38
|
+
col
|
39
|
+
});
|
40
|
+
}
|
41
|
+
};
|
42
|
+
}
|
package/core.d.ts
CHANGED
@@ -118,7 +118,7 @@ export default class Core {
|
|
118
118
|
loadData(data: CellValue[][] | RowObject[], source?: string): void;
|
119
119
|
populateFromArray(row: number, column: number, input: CellValue[][], endRow?: number,
|
120
120
|
endColumn?: number, source?: string, method?: 'shift_down' | 'shift_right' | 'overwrite'): void;
|
121
|
-
propToCol(prop: string | number):
|
121
|
+
propToCol<T extends number | string>(prop: string | number): T;
|
122
122
|
redo(): void;
|
123
123
|
refreshDimensions(): void;
|
124
124
|
removeCellMeta(row: number, column: number, key: (keyof CellMeta) | string): void;
|