handsontable 15.3.0-next-175012b-20250429 → 16.0.0-next-f486b48-20250702
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 +0 -3
- package/3rdparty/walkontable/src/core/_base.mjs +0 -3
- package/3rdparty/walkontable/src/core/clone.js +0 -1
- package/3rdparty/walkontable/src/core/clone.mjs +0 -1
- package/3rdparty/walkontable/src/core/core.js +0 -2
- package/3rdparty/walkontable/src/core/core.mjs +0 -2
- package/3rdparty/walkontable/src/facade/core.js +0 -3
- package/3rdparty/walkontable/src/facade/core.mjs +0 -3
- package/3rdparty/walkontable/src/index.js +1 -2
- package/3rdparty/walkontable/src/overlay/_base.js +1 -3
- package/3rdparty/walkontable/src/overlay/_base.mjs +1 -3
- package/3rdparty/walkontable/src/overlay/bottom.js +2 -2
- package/3rdparty/walkontable/src/overlay/bottom.mjs +2 -2
- package/3rdparty/walkontable/src/overlay/top.js +1 -1
- package/3rdparty/walkontable/src/overlay/top.mjs +1 -1
- package/3rdparty/walkontable/src/renderer/columnHeaders.js +1 -1
- package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +2 -2
- package/3rdparty/walkontable/src/selection/border/border.js +17 -11
- package/3rdparty/walkontable/src/selection/border/border.mjs +17 -11
- package/3rdparty/walkontable/src/selection/border/utils.js +1 -1
- package/3rdparty/walkontable/src/selection/border/utils.mjs +1 -1
- package/3rdparty/walkontable/src/settings.js +3 -1
- package/3rdparty/walkontable/src/settings.mjs +3 -1
- package/3rdparty/walkontable/src/table.js +9 -6
- package/3rdparty/walkontable/src/table.mjs +9 -6
- package/3rdparty/walkontable/src/types.js +0 -1
- package/3rdparty/walkontable/src/types.mjs +0 -1
- package/3rdparty/walkontable/src/utils/column.js +1 -1
- package/3rdparty/walkontable/src/utils/column.mjs +1 -1
- package/3rdparty/walkontable/src/viewport.js +1 -1
- package/3rdparty/walkontable/src/viewport.mjs +1 -1
- package/CHANGELOG.md +23 -0
- package/README.md +10 -4
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/cellTypes/registry.js +2 -3
- package/cellTypes/registry.mjs +1 -1
- package/core/coordsMapper/rangeToRenderableMapper.js +124 -0
- package/core/coordsMapper/rangeToRenderableMapper.mjs +120 -0
- package/core/focusCatcher/focusDetector.js +2 -2
- package/core/focusCatcher/focusDetector.mjs +2 -2
- package/core/hooks/constants.js +259 -1
- package/core/hooks/constants.mjs +259 -1
- package/core.d.ts +2 -0
- package/core.js +202 -58
- package/core.mjs +202 -58
- package/dataMap/dataMap.js +16 -30
- package/dataMap/dataMap.mjs +16 -30
- package/dataMap/metaManager/metaSchema.js +58 -0
- package/dataMap/metaManager/metaSchema.mjs +58 -0
- package/dist/handsontable.css +30 -4
- package/dist/handsontable.full.css +30 -4
- package/dist/handsontable.full.js +6073 -4352
- package/dist/handsontable.full.min.css +3 -3
- package/dist/handsontable.full.min.js +206 -206
- package/dist/handsontable.js +5751 -4037
- package/dist/handsontable.min.css +3 -3
- package/dist/handsontable.min.js +41 -41
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/ar-AR.min.js +1 -1
- package/dist/languages/cs-CZ.min.js +1 -1
- package/dist/languages/de-CH.min.js +1 -1
- package/dist/languages/de-DE.min.js +1 -1
- package/dist/languages/en-US.min.js +1 -1
- package/dist/languages/es-MX.min.js +1 -1
- package/dist/languages/fa-IR.min.js +1 -1
- package/dist/languages/fr-FR.min.js +1 -1
- package/dist/languages/hr-HR.min.js +1 -1
- package/dist/languages/it-IT.min.js +1 -1
- package/dist/languages/ja-JP.min.js +1 -1
- package/dist/languages/ko-KR.min.js +1 -1
- package/dist/languages/lv-LV.min.js +1 -1
- package/dist/languages/nb-NO.min.js +1 -1
- package/dist/languages/nl-NL.min.js +1 -1
- package/dist/languages/pl-PL.min.js +1 -1
- package/dist/languages/pt-BR.min.js +1 -1
- package/dist/languages/ru-RU.min.js +1 -1
- package/dist/languages/sr-SP.min.js +1 -1
- package/dist/languages/zh-CN.min.js +1 -1
- package/dist/languages/zh-TW.min.js +1 -1
- package/editorManager.js +5 -1
- package/editorManager.mjs +5 -1
- package/editors/autocompleteEditor/autocompleteEditor.d.ts +0 -12
- package/editors/autocompleteEditor/autocompleteEditor.js +42 -69
- package/editors/autocompleteEditor/autocompleteEditor.mjs +43 -70
- package/editors/baseEditor/baseEditor.js +1 -1
- package/editors/baseEditor/baseEditor.mjs +1 -1
- package/editors/dateEditor/dateEditor.js +2 -8
- package/editors/dateEditor/dateEditor.mjs +3 -9
- package/editors/handsontableEditor/handsontableEditor.d.ts +8 -0
- package/editors/handsontableEditor/handsontableEditor.js +173 -17
- package/editors/handsontableEditor/handsontableEditor.mjs +173 -17
- package/editors/passwordEditor/passwordEditor.js +2 -0
- package/editors/passwordEditor/passwordEditor.mjs +2 -0
- package/editors/registry.js +2 -3
- package/editors/registry.mjs +1 -1
- package/editors/textEditor/textEditor.js +2 -0
- package/editors/textEditor/textEditor.mjs +2 -0
- package/helpers/a11y.js +2 -0
- package/helpers/a11y.mjs +1 -0
- package/helpers/dom/element.d.ts +1 -0
- package/helpers/dom/element.js +26 -1
- package/helpers/dom/element.mjs +25 -1
- package/helpers/mixed.js +4 -4
- package/helpers/mixed.mjs +4 -4
- package/i18n/languages/ar-AR.js +1 -2
- package/i18n/languages/cs-CZ.js +1 -2
- package/i18n/languages/de-CH.js +1 -2
- package/i18n/languages/de-DE.js +1 -2
- package/i18n/languages/en-US.js +1 -2
- package/i18n/languages/es-MX.js +1 -2
- package/i18n/languages/fa-IR.js +1 -2
- package/i18n/languages/fr-FR.js +1 -2
- package/i18n/languages/hr-HR.js +1 -2
- package/i18n/languages/it-IT.js +1 -2
- package/i18n/languages/ja-JP.js +1 -2
- package/i18n/languages/ko-KR.js +1 -2
- package/i18n/languages/lv-LV.js +1 -2
- package/i18n/languages/nb-NO.js +1 -2
- package/i18n/languages/nl-NL.js +1 -2
- package/i18n/languages/pl-PL.js +1 -2
- package/i18n/languages/pt-BR.js +1 -2
- package/i18n/languages/ru-RU.js +1 -2
- package/i18n/languages/sr-SP.js +1 -2
- package/i18n/languages/zh-CN.js +1 -2
- package/i18n/languages/zh-TW.js +1 -2
- package/i18n/phraseFormatters/index.js +2 -2
- package/i18n/phraseFormatters/index.mjs +1 -1
- package/i18n/registry.js +3 -4
- package/i18n/registry.mjs +1 -1
- package/index.js +1 -2
- package/package.json +10 -4
- package/plugins/autoColumnSize/autoColumnSize.js +47 -0
- package/plugins/autoColumnSize/autoColumnSize.mjs +47 -0
- package/plugins/autoRowSize/autoRowSize.js +45 -0
- package/plugins/autoRowSize/autoRowSize.mjs +45 -0
- package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +13 -0
- package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +13 -0
- package/plugins/collapsibleColumns/collapsibleColumns.js +31 -0
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +31 -0
- package/plugins/columnSorting/sortService/registry.js +3 -4
- package/plugins/columnSorting/sortService/registry.mjs +1 -1
- package/plugins/columnSummary/columnSummary.js +33 -0
- package/plugins/columnSummary/columnSummary.mjs +33 -0
- package/plugins/comments/commentEditor.js +8 -2
- package/plugins/comments/commentEditor.mjs +8 -2
- package/plugins/comments/comments.js +59 -15
- package/plugins/comments/comments.mjs +60 -16
- package/plugins/comments/contextMenuItem/addEditComment.js +1 -2
- package/plugins/comments/contextMenuItem/readOnlyComment.js +1 -2
- package/plugins/comments/contextMenuItem/removeComment.js +1 -2
- package/plugins/contextMenu/contextMenu.js +1 -1
- package/plugins/contextMenu/contextMenu.mjs +1 -1
- package/plugins/contextMenu/menu/menu.js +12 -6
- package/plugins/contextMenu/menu/menu.mjs +13 -7
- package/plugins/contextMenu/predefinedItems/alignment.js +1 -2
- package/plugins/contextMenu/predefinedItems/clearColumn.js +1 -2
- package/plugins/contextMenu/predefinedItems/columnLeft.js +1 -2
- package/plugins/contextMenu/predefinedItems/columnRight.js +1 -2
- package/plugins/contextMenu/predefinedItems/index.js +1 -2
- package/plugins/contextMenu/predefinedItems/readOnly.js +1 -2
- package/plugins/contextMenu/predefinedItems/redo.js +1 -2
- package/plugins/contextMenu/predefinedItems/removeColumn.js +1 -2
- package/plugins/contextMenu/predefinedItems/removeRow.js +1 -2
- package/plugins/contextMenu/predefinedItems/rowAbove.js +1 -2
- package/plugins/contextMenu/predefinedItems/rowBelow.js +1 -2
- package/plugins/contextMenu/predefinedItems/undo.js +1 -2
- package/plugins/copyPaste/contextMenuItem/cut.js +1 -2
- package/plugins/customBorders/contextMenuItem/bottom.js +1 -2
- package/plugins/customBorders/contextMenuItem/left.js +1 -2
- package/plugins/customBorders/contextMenuItem/noBorders.js +1 -2
- package/plugins/customBorders/contextMenuItem/right.js +1 -2
- package/plugins/customBorders/contextMenuItem/top.js +1 -2
- package/plugins/customBorders/customBorders.js +1 -2
- package/plugins/dropdownMenu/dropdownMenu.js +16 -1
- package/plugins/dropdownMenu/dropdownMenu.mjs +16 -1
- package/plugins/exportFile/exportFile.js +59 -2
- package/plugins/exportFile/exportFile.mjs +58 -0
- package/plugins/filters/component/actionBar.js +1 -2
- package/plugins/filters/component/condition.js +1 -2
- package/plugins/filters/component/value.js +1 -2
- package/plugins/filters/condition/beginsWith.js +1 -2
- package/plugins/filters/condition/between.js +1 -2
- package/plugins/filters/condition/contains.js +1 -2
- package/plugins/filters/condition/date/after.js +1 -2
- package/plugins/filters/condition/date/before.js +1 -2
- package/plugins/filters/condition/date/today.js +1 -2
- package/plugins/filters/condition/date/tomorrow.js +1 -2
- package/plugins/filters/condition/date/yesterday.js +1 -2
- package/plugins/filters/condition/empty.js +1 -2
- package/plugins/filters/condition/endsWith.js +1 -2
- package/plugins/filters/condition/equal.js +1 -2
- package/plugins/filters/condition/greaterThan.js +1 -2
- package/plugins/filters/condition/greaterThanOrEqual.js +1 -2
- package/plugins/filters/condition/lessThan.js +1 -2
- package/plugins/filters/condition/lessThanOrEqual.js +1 -2
- package/plugins/filters/condition/none.js +1 -2
- package/plugins/filters/condition/notBetween.js +1 -2
- package/plugins/filters/condition/notContains.js +1 -2
- package/plugins/filters/condition/notEmpty.js +1 -2
- package/plugins/filters/condition/notEqual.js +1 -2
- package/plugins/filters/filters.js +76 -3
- package/plugins/filters/filters.mjs +75 -1
- package/plugins/filters/logicalOperations/conjunction.js +1 -2
- package/plugins/filters/logicalOperations/disjunction.js +1 -2
- package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +1 -2
- package/plugins/filters/ui/_base.js +1 -2
- package/plugins/filters/ui/multipleSelect.js +1 -7
- package/plugins/filters/ui/multipleSelect.mjs +0 -5
- package/plugins/filters/ui/select.js +1 -2
- package/plugins/formulas/engine/register.js +3 -4
- package/plugins/formulas/engine/register.mjs +1 -1
- package/plugins/formulas/formulas.js +40 -41
- package/plugins/formulas/formulas.mjs +39 -40
- package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +1 -2
- package/plugins/hiddenColumns/contextMenuItem/showColumn.js +1 -2
- package/plugins/hiddenColumns/hiddenColumns.js +64 -0
- package/plugins/hiddenColumns/hiddenColumns.mjs +64 -0
- package/plugins/hiddenRows/contextMenuItem/hideRow.js +1 -2
- package/plugins/hiddenRows/contextMenuItem/showRow.js +1 -2
- package/plugins/hiddenRows/hiddenRows.js +64 -0
- package/plugins/hiddenRows/hiddenRows.mjs +64 -0
- package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +1 -2
- package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +1 -2
- package/plugins/manualRowMove/manualRowMove.js +1 -1
- package/plugins/manualRowMove/manualRowMove.mjs +1 -1
- package/plugins/manualRowResize/manualRowResize.js +1 -1
- package/plugins/manualRowResize/manualRowResize.mjs +1 -1
- package/plugins/mergeCells/contextMenuItem/toggleMerge.js +1 -2
- package/plugins/mergeCells/mergeCells.js +56 -38
- package/plugins/mergeCells/mergeCells.mjs +56 -38
- package/plugins/mergeCells/utils.js +3 -4
- package/plugins/mergeCells/utils.mjs +3 -4
- package/plugins/nestedHeaders/nestedHeaders.js +37 -12
- package/plugins/nestedHeaders/nestedHeaders.mjs +37 -12
- package/plugins/nestedRows/nestedRows.js +12 -12
- package/plugins/nestedRows/nestedRows.mjs +12 -12
- package/plugins/nestedRows/ui/contextMenu.js +1 -2
- package/plugins/nestedRows/ui/headers.js +2 -3
- package/plugins/nestedRows/ui/headers.mjs +2 -3
- package/plugins/persistentState/persistentState.js +1 -1
- package/plugins/persistentState/persistentState.mjs +1 -1
- package/plugins/stretchColumns/calculator.js +3 -2
- package/plugins/stretchColumns/calculator.mjs +3 -2
- package/plugins/stretchColumns/stretchColumns.js +13 -0
- package/plugins/stretchColumns/stretchColumns.mjs +13 -0
- package/plugins/trimRows/trimRows.js +61 -0
- package/plugins/trimRows/trimRows.mjs +61 -0
- package/renderers/baseRenderer/baseRenderer.js +4 -0
- package/renderers/baseRenderer/baseRenderer.mjs +4 -0
- package/renderers/registry.js +2 -3
- package/renderers/registry.mjs +1 -1
- package/selection/mouseEventHandler.js +48 -13
- package/selection/mouseEventHandler.mjs +47 -13
- package/selection/range.js +73 -6
- package/selection/range.mjs +73 -6
- package/selection/selection.js +46 -32
- package/selection/selection.mjs +45 -30
- package/settings.d.ts +1 -0
- package/styles/handsontable.css +131 -55
- package/styles/handsontable.min.css +3 -3
- package/styles/ht-theme-horizon.css +296 -181
- package/styles/ht-theme-horizon.min.css +3 -3
- package/styles/ht-theme-main.css +314 -205
- package/styles/ht-theme-main.min.css +3 -3
- package/tableView.js +9 -20
- package/tableView.mjs +9 -20
- package/translations/indexMapper.js +9 -5
- package/translations/indexMapper.mjs +9 -5
- package/utils/paginator.js +13 -0
- package/utils/paginator.mjs +13 -0
- package/utils/staticRegister.js +24 -2
- package/utils/staticRegister.mjs +23 -2
- package/{3rdparty/walkontable/src/utils → utils}/stylesHandler.js +16 -30
- package/{3rdparty/walkontable/src/utils → utils}/stylesHandler.mjs +16 -30
- package/validators/registry.js +2 -3
- package/validators/registry.mjs +1 -1
package/README.md
CHANGED
@@ -80,8 +80,8 @@ You can also use [Yarn](https://yarnpkg.com/package/handsontable), [NuGet](https
|
|
80
80
|
### Provide an HTML container
|
81
81
|
|
82
82
|
```html
|
83
|
-
<!-- Set the container's ID
|
84
|
-
<div id="handsontable-grid"
|
83
|
+
<!-- Set the container's ID -->
|
84
|
+
<div id="handsontable-grid"></div>
|
85
85
|
```
|
86
86
|
|
87
87
|
### Setup
|
@@ -96,6 +96,9 @@ You can also use [Yarn](https://yarnpkg.com/package/handsontable), [NuGet](https
|
|
96
96
|
const element = document.getElementById('handsontable-grid');
|
97
97
|
|
98
98
|
new Handsontable(element, {
|
99
|
+
// theme name with obligatory ht-theme-* prefix
|
100
|
+
themeName: 'ht-theme-main-dark-auto',
|
101
|
+
// other options
|
99
102
|
data: [
|
100
103
|
{ company: 'Tagcat', country: 'United Kingdom', rating: 4.4 },
|
101
104
|
{ company: 'Zoomzone', country: 'Japan', rating: 4.5 },
|
@@ -143,12 +146,15 @@ You can also use [Yarn](https://yarnpkg.com/package/handsontable), [NuGet](https
|
|
143
146
|
/>
|
144
147
|
</head>
|
145
148
|
<body>
|
146
|
-
<div id="handsontable-grid"
|
149
|
+
<div id="handsontable-grid"></div>
|
147
150
|
<script src="https://cdn.jsdelivr.net/npm/handsontable/dist/handsontable.full.min.js"></script>
|
148
151
|
<script>
|
149
152
|
const element = document.getElementById("handsontable-grid");
|
150
153
|
|
151
154
|
new Handsontable(element, {
|
155
|
+
// theme name with obligatory ht-theme-* prefix
|
156
|
+
themeName: 'ht-theme-main-dark-auto',
|
157
|
+
// other options
|
152
158
|
data: [
|
153
159
|
{ company: "Tagcat", country: "United Kingdom", rating: 4.4 },
|
154
160
|
{ company: "Zoomzone", country: "Japan", rating: 4.5 },
|
@@ -218,7 +224,7 @@ At first glance, it might seem that a data table, spreadsheet, and data grid are
|
|
218
224
|
If you're using Handsontable with a free, non-commercial license, you can:
|
219
225
|
- Join the conversation on [GitHub Discussions](https://github.com/handsontable/handsontable/discussions) to share ideas, suggest features, or discuss changes.
|
220
226
|
- Report any bugs you find on our [GitHub Issue Board](https://github.com/handsontable/handsontable/issues).
|
221
|
-
- Connect with other developers and find answers on our [Developer Forum](https://handsontable.com
|
227
|
+
- Connect with other developers and find answers on our [Developer Forum](https://forum.handsontable.com).
|
222
228
|
|
223
229
|
If you have a commercial license, feel free to contact us directly at [support@handsontable.com](mailto:support@handsontable.com) or use our [contact form](https://handsontable.com/contact?category=technical_support).
|
224
230
|
|
package/base.js
CHANGED
@@ -45,8 +45,8 @@ Handsontable.hooks = _hooks.Hooks.getSingleton();
|
|
45
45
|
Handsontable.CellCoords = _src.CellCoords;
|
46
46
|
Handsontable.CellRange = _src.CellRange;
|
47
47
|
Handsontable.packageName = 'handsontable';
|
48
|
-
Handsontable.buildDate = "
|
49
|
-
Handsontable.version = "
|
48
|
+
Handsontable.buildDate = "02/07/2025 09:18:40";
|
49
|
+
Handsontable.version = "16.0.0-next-f486b48-20250702";
|
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 = "
|
38
|
+
Handsontable.buildDate = "02/07/2025 09:18:46";
|
39
|
+
Handsontable.version = "16.0.0-next-f486b48-20250702";
|
40
40
|
Handsontable.languages = {
|
41
41
|
dictionaryKeys,
|
42
42
|
getLanguageDictionary,
|
package/cellTypes/registry.js
CHANGED
@@ -4,18 +4,17 @@ exports.__esModule = true;
|
|
4
4
|
exports.getCellType = _getItem;
|
5
5
|
exports.registerCellType = _register;
|
6
6
|
require("core-js/modules/es.error.cause.js");
|
7
|
-
var _staticRegister =
|
7
|
+
var _staticRegister = require("../utils/staticRegister");
|
8
8
|
var _registry = require("../editors/registry");
|
9
9
|
var _registry2 = require("../renderers/registry");
|
10
10
|
var _registry3 = require("../validators/registry");
|
11
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
12
11
|
const {
|
13
12
|
register,
|
14
13
|
getItem,
|
15
14
|
hasItem,
|
16
15
|
getNames,
|
17
16
|
getValues
|
18
|
-
} = (0, _staticRegister.
|
17
|
+
} = (0, _staticRegister.staticRegister)('cellTypes');
|
19
18
|
|
20
19
|
/**
|
21
20
|
* Retrieve cell type object.
|
package/cellTypes/registry.mjs
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import "core-js/modules/es.error.cause.js";
|
2
|
-
import staticRegister from "../utils/staticRegister.mjs";
|
2
|
+
import { staticRegister } from "../utils/staticRegister.mjs";
|
3
3
|
import { registerEditor } from "../editors/registry.mjs";
|
4
4
|
import { registerRenderer } from "../renderers/registry.mjs";
|
5
5
|
import { registerValidator } from "../validators/registry.mjs";
|
@@ -0,0 +1,124 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
require("core-js/modules/es.error.cause.js");
|
5
|
+
function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
|
6
|
+
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
7
|
+
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
8
|
+
function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
|
9
|
+
function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
|
10
|
+
function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
|
11
|
+
var _rowIndexMapper = /*#__PURE__*/new WeakMap();
|
12
|
+
var _columnIndexMapper = /*#__PURE__*/new WeakMap();
|
13
|
+
var _CellRangeToRenderableMapper_brand = /*#__PURE__*/new WeakSet();
|
14
|
+
/* eslint-disable jsdoc/require-description-complete-sentence */
|
15
|
+
/**
|
16
|
+
* CellRangeToRenderableMapper is a utility responsible for converting CellRange instances
|
17
|
+
* defined in visual coordinates (which may include hidden rows/columns) into renderable
|
18
|
+
* coordinates (excluding hidden indices).
|
19
|
+
*
|
20
|
+
* This class encapsulates the translation logic, allowing other modules to operate
|
21
|
+
* on renderable coordinates without needing to be aware of the underlying index mapping implementation.
|
22
|
+
*
|
23
|
+
* It promotes separation of concerns by decoupling the transformation logic from data structures
|
24
|
+
* like CellRange or CellCoords, keeping those classes clean and focused on structural concerns.
|
25
|
+
*
|
26
|
+
* Example usage:
|
27
|
+
* import { resolveWithInstance } from './utils/staticRegister';
|
28
|
+
*
|
29
|
+
* const cellRange = new CellRange(...);
|
30
|
+
* const renderableRange = resolveWithInstance(this.hot, 'cellRangeMapper')
|
31
|
+
* .toRenderable(cellRange);
|
32
|
+
*/
|
33
|
+
class CellRangeToRenderableMapper {
|
34
|
+
constructor(_ref) {
|
35
|
+
let {
|
36
|
+
rowIndexMapper,
|
37
|
+
columnIndexMapper
|
38
|
+
} = _ref;
|
39
|
+
/**
|
40
|
+
* Gets nearest coordinates that points to the visible row and column indexes. If there are no visible
|
41
|
+
* rows and/or columns the `null` value is returned.
|
42
|
+
*
|
43
|
+
* @private
|
44
|
+
* @param {CellCoords} coords The coords object as starting point for finding the nearest visible coordinates.
|
45
|
+
* @param {1|-1} rowSearchDirection The search direction. For value 1, it means searching from top to bottom for
|
46
|
+
* rows and from left to right for columns. For -1, it is the other way around.
|
47
|
+
* @param {1|-1} columnSearchDirection The same as above but for rows.
|
48
|
+
* @returns {CellCoords|null} Visual cell coordinates.
|
49
|
+
*/
|
50
|
+
_classPrivateMethodInitSpec(this, _CellRangeToRenderableMapper_brand);
|
51
|
+
/**
|
52
|
+
* The instance of the IndexMapper class for row indexes.
|
53
|
+
*
|
54
|
+
* @param {IndexMapper}
|
55
|
+
*/
|
56
|
+
_classPrivateFieldInitSpec(this, _rowIndexMapper, void 0);
|
57
|
+
/**
|
58
|
+
* The instance of the IndexMapper class for row indexes.
|
59
|
+
*
|
60
|
+
* @param {IndexMapper}
|
61
|
+
*/
|
62
|
+
_classPrivateFieldInitSpec(this, _columnIndexMapper, void 0);
|
63
|
+
_classPrivateFieldSet(_rowIndexMapper, this, rowIndexMapper);
|
64
|
+
_classPrivateFieldSet(_columnIndexMapper, this, columnIndexMapper);
|
65
|
+
}
|
66
|
+
|
67
|
+
/**
|
68
|
+
* Converts the visual coordinates of the CellRange instance to the renderable coordinates.
|
69
|
+
*
|
70
|
+
* @param {CellRange} range The CellRange instance with defined visual coordinates.
|
71
|
+
* @returns {CellRange | null}
|
72
|
+
*/
|
73
|
+
toRenderable(range) {
|
74
|
+
const rowDirection = range.getVerticalDirection() === 'N-S' ? 1 : -1;
|
75
|
+
const columnDirection = range.getHorizontalDirection() === 'W-E' ? 1 : -1;
|
76
|
+
const from = _assertClassBrand(_CellRangeToRenderableMapper_brand, this, _getNearestNotHiddenCoords).call(this, range.from, rowDirection, columnDirection);
|
77
|
+
if (from === null) {
|
78
|
+
return null;
|
79
|
+
}
|
80
|
+
const to = _assertClassBrand(_CellRangeToRenderableMapper_brand, this, _getNearestNotHiddenCoords).call(this, range.to, -rowDirection, -columnDirection);
|
81
|
+
if (to === null) {
|
82
|
+
return null;
|
83
|
+
}
|
84
|
+
const newRange = range.clone();
|
85
|
+
newRange.from = from;
|
86
|
+
newRange.to = to;
|
87
|
+
if (!newRange.includes(range.highlight)) {
|
88
|
+
newRange.highlight = from;
|
89
|
+
}
|
90
|
+
return newRange;
|
91
|
+
}
|
92
|
+
}
|
93
|
+
exports.CellRangeToRenderableMapper = CellRangeToRenderableMapper;
|
94
|
+
function _getNearestNotHiddenCoords(coords, rowSearchDirection) {
|
95
|
+
let columnSearchDirection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : rowSearchDirection;
|
96
|
+
const nextVisibleRow = _assertClassBrand(_CellRangeToRenderableMapper_brand, this, _getNearestNotHiddenIndex).call(this, _classPrivateFieldGet(_rowIndexMapper, this), coords.row, rowSearchDirection);
|
97
|
+
if (nextVisibleRow === null) {
|
98
|
+
return null;
|
99
|
+
}
|
100
|
+
const nextVisibleColumn = _assertClassBrand(_CellRangeToRenderableMapper_brand, this, _getNearestNotHiddenIndex).call(this, _classPrivateFieldGet(_columnIndexMapper, this), coords.col, columnSearchDirection);
|
101
|
+
if (nextVisibleColumn === null) {
|
102
|
+
return null;
|
103
|
+
}
|
104
|
+
return coords.clone().assign({
|
105
|
+
row: nextVisibleRow,
|
106
|
+
col: nextVisibleColumn
|
107
|
+
});
|
108
|
+
}
|
109
|
+
/**
|
110
|
+
* Gets nearest visual index. If there are no visible rows or columns the `null` value is returned.
|
111
|
+
*
|
112
|
+
* @private
|
113
|
+
* @param {IndexMapper} indexMapper The IndexMapper instance for specific axis.
|
114
|
+
* @param {number} visualIndex The index as starting point for finding the nearest visible index.
|
115
|
+
* @param {1|-1} searchDirection The search direction. For value 1, it means searching from top to bottom for
|
116
|
+
* rows and from left to right for columns. For -1, it is the other way around.
|
117
|
+
* @returns {number|null} Visual row/column index.
|
118
|
+
*/
|
119
|
+
function _getNearestNotHiddenIndex(indexMapper, visualIndex, searchDirection) {
|
120
|
+
if (visualIndex < 0) {
|
121
|
+
return visualIndex;
|
122
|
+
}
|
123
|
+
return indexMapper.getNearestNotHiddenIndex(visualIndex, searchDirection);
|
124
|
+
}
|
@@ -0,0 +1,120 @@
|
|
1
|
+
import "core-js/modules/es.error.cause.js";
|
2
|
+
function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
|
3
|
+
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
4
|
+
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
5
|
+
function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
|
6
|
+
function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
|
7
|
+
function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
|
8
|
+
var _rowIndexMapper = /*#__PURE__*/new WeakMap();
|
9
|
+
var _columnIndexMapper = /*#__PURE__*/new WeakMap();
|
10
|
+
var _CellRangeToRenderableMapper_brand = /*#__PURE__*/new WeakSet();
|
11
|
+
/* eslint-disable jsdoc/require-description-complete-sentence */
|
12
|
+
/**
|
13
|
+
* CellRangeToRenderableMapper is a utility responsible for converting CellRange instances
|
14
|
+
* defined in visual coordinates (which may include hidden rows/columns) into renderable
|
15
|
+
* coordinates (excluding hidden indices).
|
16
|
+
*
|
17
|
+
* This class encapsulates the translation logic, allowing other modules to operate
|
18
|
+
* on renderable coordinates without needing to be aware of the underlying index mapping implementation.
|
19
|
+
*
|
20
|
+
* It promotes separation of concerns by decoupling the transformation logic from data structures
|
21
|
+
* like CellRange or CellCoords, keeping those classes clean and focused on structural concerns.
|
22
|
+
*
|
23
|
+
* Example usage:
|
24
|
+
* import { resolveWithInstance } from './utils/staticRegister';
|
25
|
+
*
|
26
|
+
* const cellRange = new CellRange(...);
|
27
|
+
* const renderableRange = resolveWithInstance(this.hot, 'cellRangeMapper')
|
28
|
+
* .toRenderable(cellRange);
|
29
|
+
*/
|
30
|
+
export class CellRangeToRenderableMapper {
|
31
|
+
constructor(_ref) {
|
32
|
+
let {
|
33
|
+
rowIndexMapper,
|
34
|
+
columnIndexMapper
|
35
|
+
} = _ref;
|
36
|
+
/**
|
37
|
+
* Gets nearest coordinates that points to the visible row and column indexes. If there are no visible
|
38
|
+
* rows and/or columns the `null` value is returned.
|
39
|
+
*
|
40
|
+
* @private
|
41
|
+
* @param {CellCoords} coords The coords object as starting point for finding the nearest visible coordinates.
|
42
|
+
* @param {1|-1} rowSearchDirection The search direction. For value 1, it means searching from top to bottom for
|
43
|
+
* rows and from left to right for columns. For -1, it is the other way around.
|
44
|
+
* @param {1|-1} columnSearchDirection The same as above but for rows.
|
45
|
+
* @returns {CellCoords|null} Visual cell coordinates.
|
46
|
+
*/
|
47
|
+
_classPrivateMethodInitSpec(this, _CellRangeToRenderableMapper_brand);
|
48
|
+
/**
|
49
|
+
* The instance of the IndexMapper class for row indexes.
|
50
|
+
*
|
51
|
+
* @param {IndexMapper}
|
52
|
+
*/
|
53
|
+
_classPrivateFieldInitSpec(this, _rowIndexMapper, void 0);
|
54
|
+
/**
|
55
|
+
* The instance of the IndexMapper class for row indexes.
|
56
|
+
*
|
57
|
+
* @param {IndexMapper}
|
58
|
+
*/
|
59
|
+
_classPrivateFieldInitSpec(this, _columnIndexMapper, void 0);
|
60
|
+
_classPrivateFieldSet(_rowIndexMapper, this, rowIndexMapper);
|
61
|
+
_classPrivateFieldSet(_columnIndexMapper, this, columnIndexMapper);
|
62
|
+
}
|
63
|
+
|
64
|
+
/**
|
65
|
+
* Converts the visual coordinates of the CellRange instance to the renderable coordinates.
|
66
|
+
*
|
67
|
+
* @param {CellRange} range The CellRange instance with defined visual coordinates.
|
68
|
+
* @returns {CellRange | null}
|
69
|
+
*/
|
70
|
+
toRenderable(range) {
|
71
|
+
const rowDirection = range.getVerticalDirection() === 'N-S' ? 1 : -1;
|
72
|
+
const columnDirection = range.getHorizontalDirection() === 'W-E' ? 1 : -1;
|
73
|
+
const from = _assertClassBrand(_CellRangeToRenderableMapper_brand, this, _getNearestNotHiddenCoords).call(this, range.from, rowDirection, columnDirection);
|
74
|
+
if (from === null) {
|
75
|
+
return null;
|
76
|
+
}
|
77
|
+
const to = _assertClassBrand(_CellRangeToRenderableMapper_brand, this, _getNearestNotHiddenCoords).call(this, range.to, -rowDirection, -columnDirection);
|
78
|
+
if (to === null) {
|
79
|
+
return null;
|
80
|
+
}
|
81
|
+
const newRange = range.clone();
|
82
|
+
newRange.from = from;
|
83
|
+
newRange.to = to;
|
84
|
+
if (!newRange.includes(range.highlight)) {
|
85
|
+
newRange.highlight = from;
|
86
|
+
}
|
87
|
+
return newRange;
|
88
|
+
}
|
89
|
+
}
|
90
|
+
function _getNearestNotHiddenCoords(coords, rowSearchDirection) {
|
91
|
+
let columnSearchDirection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : rowSearchDirection;
|
92
|
+
const nextVisibleRow = _assertClassBrand(_CellRangeToRenderableMapper_brand, this, _getNearestNotHiddenIndex).call(this, _classPrivateFieldGet(_rowIndexMapper, this), coords.row, rowSearchDirection);
|
93
|
+
if (nextVisibleRow === null) {
|
94
|
+
return null;
|
95
|
+
}
|
96
|
+
const nextVisibleColumn = _assertClassBrand(_CellRangeToRenderableMapper_brand, this, _getNearestNotHiddenIndex).call(this, _classPrivateFieldGet(_columnIndexMapper, this), coords.col, columnSearchDirection);
|
97
|
+
if (nextVisibleColumn === null) {
|
98
|
+
return null;
|
99
|
+
}
|
100
|
+
return coords.clone().assign({
|
101
|
+
row: nextVisibleRow,
|
102
|
+
col: nextVisibleColumn
|
103
|
+
});
|
104
|
+
}
|
105
|
+
/**
|
106
|
+
* Gets nearest visual index. If there are no visible rows or columns the `null` value is returned.
|
107
|
+
*
|
108
|
+
* @private
|
109
|
+
* @param {IndexMapper} indexMapper The IndexMapper instance for specific axis.
|
110
|
+
* @param {number} visualIndex The index as starting point for finding the nearest visible index.
|
111
|
+
* @param {1|-1} searchDirection The search direction. For value 1, it means searching from top to bottom for
|
112
|
+
* rows and from left to right for columns. For -1, it is the other way around.
|
113
|
+
* @returns {number|null} Visual row/column index.
|
114
|
+
*/
|
115
|
+
function _getNearestNotHiddenIndex(indexMapper, visualIndex, searchDirection) {
|
116
|
+
if (visualIndex < 0) {
|
117
|
+
return visualIndex;
|
118
|
+
}
|
119
|
+
return indexMapper.getNearestNotHiddenIndex(visualIndex, searchDirection);
|
120
|
+
}
|
@@ -21,8 +21,8 @@ function installFocusDetector(hot) {
|
|
21
21
|
const inputTrapBottom = createInputElement(hot);
|
22
22
|
inputTrapTop.addEventListener('focus', () => hooks === null || hooks === void 0 ? void 0 : hooks.onFocusFromTop());
|
23
23
|
inputTrapBottom.addEventListener('focus', () => hooks === null || hooks === void 0 ? void 0 : hooks.onFocusFromBottom());
|
24
|
-
rootElement.
|
25
|
-
rootElement.
|
24
|
+
rootElement.before(inputTrapTop);
|
25
|
+
rootElement.after(inputTrapBottom);
|
26
26
|
return {
|
27
27
|
/**
|
28
28
|
* Activates the detector by resetting the tabIndex of the input elements.
|
@@ -17,8 +17,8 @@ export function installFocusDetector(hot) {
|
|
17
17
|
const inputTrapBottom = createInputElement(hot);
|
18
18
|
inputTrapTop.addEventListener('focus', () => hooks === null || hooks === void 0 ? void 0 : hooks.onFocusFromTop());
|
19
19
|
inputTrapBottom.addEventListener('focus', () => hooks === null || hooks === void 0 ? void 0 : hooks.onFocusFromBottom());
|
20
|
-
rootElement.
|
21
|
-
rootElement.
|
20
|
+
rootElement.before(inputTrapTop);
|
21
|
+
rootElement.after(inputTrapBottom);
|
22
22
|
return {
|
23
23
|
/**
|
24
24
|
* Activates the detector by resetting the tabIndex of the input elements.
|