handsontable 15.3.0 → 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 +53 -31
- 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/CHANGELOG.md
CHANGED
@@ -9,49 +9,71 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
9
9
|
|
10
10
|
<!-- UNVERSIONED -->
|
11
11
|
|
12
|
+
## [16.0.0] - 2025-07-09
|
13
|
+
|
14
|
+
### Added
|
15
|
+
- **Breaking change**: Added an context and dropdown menu focus outline [#11669](https://github.com/handsontable/handsontable/pull/11669)
|
16
|
+
- Improve Handsontable editor types positioning [#11593](https://github.com/handsontable/handsontable/pull/11593)
|
17
|
+
- Add second click deselects cell feature [#11602](https://github.com/handsontable/handsontable/pull/11602)
|
18
|
+
- Added new `textEllipsis` option to the core [#11609](https://github.com/handsontable/handsontable/pull/11609)
|
19
|
+
- Added an backward compatibility for renamed CSS variables [#11676](https://github.com/handsontable/handsontable/pull/11676)
|
20
|
+
- Angular: Introduced a new Angular wrapper - `@handsontable/angular-wrapper`. [#11511](https://github.com/handsontable/handsontable/pull/11511)
|
21
|
+
|
22
|
+
### Changed
|
23
|
+
- **Breaking change**: Updated CSS theme variables and added input radio variables [#11470](https://github.com/handsontable/handsontable/pull/11470)
|
24
|
+
- **Breaking change**: Change `modifyData` hook to use visual indxes for both row and column. [#11501](https://github.com/handsontable/handsontable/pull/11501)
|
25
|
+
|
26
|
+
### Fixed
|
27
|
+
- **Breaking change**: Fixed and issue with custom border overlapping [#11551](https://github.com/handsontable/handsontable/pull/11551)
|
28
|
+
- **Breaking change**: Fixed an issue with accessibility and new DOM structure with wrapper and portal [#11579](https://github.com/handsontable/handsontable/pull/11579)
|
29
|
+
- Fixed a problem with the dropdown editor having a horizontal scrollbar on Windows with fractional scaling applied. [#11613](https://github.com/handsontable/handsontable/pull/11613)
|
30
|
+
- Fixed an issue with scrollbar styles on Safari browser [#11614](https://github.com/handsontable/handsontable/pull/11614)
|
31
|
+
- Fix column filter behavior when adding new column [#11616](https://github.com/handsontable/handsontable/pull/11616)
|
32
|
+
- Fixed an issue with dropdown elements color [#11661](https://github.com/handsontable/handsontable/pull/11661)
|
33
|
+
- Angular: Fixed error `this.hotInstance.getSettings(...).columns?.filter is not a function` in angular-wrapper. [#11695](https://github.com/handsontable/handsontable/pull/11695)
|
34
|
+
|
12
35
|
## [15.3.0] - 2025-04-29
|
13
36
|
|
14
37
|
### Added
|
15
|
-
- Added missing boolean type to the editor in the
|
16
|
-
- Fixed
|
17
|
-
- Added horizontal scroll to the Filter's by value component [#11561](https://github.com/handsontable/handsontable/pull/11561)
|
18
|
-
-
|
38
|
+
- Added a missing boolean type to the editor in the React wrapper. [#11514](https://github.com/handsontable/handsontable/pull/11514)
|
39
|
+
- Fixed the Comments plugin for IME editing and added a new `beforeCompositionstart` hook. [#11521](https://github.com/handsontable/handsontable/pull/11521)
|
40
|
+
- Added horizontal scroll to the Filter's "by value" component. [#11561](https://github.com/handsontable/handsontable/pull/11561)
|
41
|
+
- Added optional formula sanitization for CSV export to prevent CSV Injection attacks. [#11592](https://github.com/handsontable/handsontable/pull/11592)
|
19
42
|
|
20
43
|
### Changed
|
21
|
-
- Improved the initialization time of Handsontable with
|
22
|
-
- Changed the size of the
|
23
|
-
-
|
44
|
+
- Improved the initialization time of Handsontable with Formulas enabled. [#11474](https://github.com/handsontable/handsontable/pull/11474)
|
45
|
+
- Changed the size of the Manual Row Resize and Manual Column Resize guide lines. [#11507](https://github.com/handsontable/handsontable/pull/11507)
|
46
|
+
- Improved the viewport scrolling behavior. [#11577](https://github.com/handsontable/handsontable/pull/11577)
|
24
47
|
|
25
48
|
### Fixed
|
26
|
-
-
|
27
|
-
- Fixed an issue with row resize line alignment and resize handle flickering [#11500](https://github.com/handsontable/handsontable/pull/11500)
|
28
|
-
- Fixed an issue with
|
29
|
-
- Fixed
|
30
|
-
- Fix submenu positiongin for all themes. [#11505](https://github.com/handsontable/handsontable/pull/11505)
|
49
|
+
- Fixed an issue with the NestedRows plugin duplicating rows when moving child rows. [#11362](https://github.com/handsontable/handsontable/pull/11362)
|
50
|
+
- Fixed an issue with row resize line alignment and resize handle flickering. [#11500](https://github.com/handsontable/handsontable/pull/11500)
|
51
|
+
- Fixed an issue with the Autocomplete caret position after using scroll on a list of choices and a problem with the dropdown width. [#11503](https://github.com/handsontable/handsontable/pull/11503)
|
52
|
+
- Fixed the submenu positioning for all themes. [#11505](https://github.com/handsontable/handsontable/pull/11505)
|
31
53
|
- Fixed a problem where re-enabling the Hidden Columns configuration caused an error to be thrown if a selection was a part of the hidden range. [#11508](https://github.com/handsontable/handsontable/pull/11508)
|
32
|
-
- Fixed an issue with empty parentNode in the table getCords method [#11509](https://github.com/handsontable/handsontable/pull/11509)
|
33
|
-
- Improved
|
34
|
-
- Fixed rows height calculations for merged cells on Safari [#11517](https://github.com/handsontable/handsontable/pull/11517)
|
35
|
-
- Fixed missing (incorrect) render call after dataset change [#11529](https://github.com/handsontable/handsontable/pull/11529)
|
36
|
-
- Fixed an issue with the mobile keyboard closing after clicking the filter search input on Android devices [#11532](https://github.com/handsontable/handsontable/pull/11532)
|
54
|
+
- Fixed an issue with an empty `parentNode` in the table's `getCords` method. [#11509](https://github.com/handsontable/handsontable/pull/11509)
|
55
|
+
- Improved the Undo/Redo actions for removing rows and columns. [#11515](https://github.com/handsontable/handsontable/pull/11515)
|
56
|
+
- Fixed rows' height calculations for merged cells on Safari. [#11517](https://github.com/handsontable/handsontable/pull/11517)
|
57
|
+
- Fixed the missing (incorrect) render call after dataset change. [#11529](https://github.com/handsontable/handsontable/pull/11529)
|
58
|
+
- Fixed an issue with the mobile keyboard closing after clicking the filter search input on Android devices. [#11532](https://github.com/handsontable/handsontable/pull/11532)
|
37
59
|
- Fixed a problem with multiple row header levels being rendered in reverse order. [#11533](https://github.com/handsontable/handsontable/pull/11533)
|
38
|
-
- Fixed `TypeError` error for AutoRowSize plugin [#11537](https://github.com/handsontable/handsontable/pull/11537)
|
39
|
-
- Allow changing the selection after filter
|
40
|
-
- Fixed a problem with the
|
41
|
-
- Fixed an issue with focus catcher accessibility [#11553](https://github.com/handsontable/handsontable/pull/11553)
|
42
|
-
- Fixed `TypeError`
|
43
|
-
- Fixed calculating the first row height [#11557](https://github.com/handsontable/handsontable/pull/11557)
|
44
|
-
- Fixed an issue with highlighting
|
45
|
-
- Fixed unmerge cells action triggered form keyboard shortcut [#11559](https://github.com/handsontable/handsontable/pull/11559)
|
46
|
-
- Fixed
|
47
|
-
- Fixed an issue with duplicate boolean values in filters [#11563](https://github.com/handsontable/handsontable/pull/11563)
|
48
|
-
- Fixed an issue with data
|
49
|
-
- Fixed settings object not being updated after new hooks [#11566](https://github.com/handsontable/handsontable/pull/11566)
|
60
|
+
- Fixed a `TypeError` error for the `AutoRowSize` plugin. [#11537](https://github.com/handsontable/handsontable/pull/11537)
|
61
|
+
- Allow changing the selection after a filter was applied. [#11538](https://github.com/handsontable/handsontable/pull/11538)
|
62
|
+
- Fixed a problem with the Autocomplete editor rendering very slowly when provided with a long list of choices. [#11552](https://github.com/handsontable/handsontable/pull/11552)
|
63
|
+
- Fixed an issue with the focus catcher accessibility. [#11553](https://github.com/handsontable/handsontable/pull/11553)
|
64
|
+
- Fixed a `TypeError` error being thrown after removing rows on the bottom overlay. [#11555](https://github.com/handsontable/handsontable/pull/11555)
|
65
|
+
- Fixed calculating the first row height. [#11557](https://github.com/handsontable/handsontable/pull/11557)
|
66
|
+
- Fixed an issue with highlighting a cell after calling `updateData`. [#11558](https://github.com/handsontable/handsontable/pull/11558)
|
67
|
+
- Fixed the "unmerge cells" action triggered form keyboard shortcut. [#11559](https://github.com/handsontable/handsontable/pull/11559)
|
68
|
+
- Fixed the left/right-arrow shortcuts for menus when the table was configured with `layoutDirection: rtl`. [#11562](https://github.com/handsontable/handsontable/pull/11562)
|
69
|
+
- Fixed an issue with duplicate boolean values in the filters. [#11563](https://github.com/handsontable/handsontable/pull/11563)
|
70
|
+
- Fixed an issue with data sources with non-string values under the `name` property. [#11565](https://github.com/handsontable/handsontable/pull/11565)
|
71
|
+
- Fixed the settings object not being updated after adding new hooks. [#11566](https://github.com/handsontable/handsontable/pull/11566)
|
50
72
|
- Fixed a problem with the table rendering all rows when it's configured to have `0px` height. [#11567](https://github.com/handsontable/handsontable/pull/11567)
|
51
|
-
- Fixed copy/paste/cut functionalities for web components [#11572](https://github.com/handsontable/handsontable/pull/11572)
|
73
|
+
- Fixed the copy/paste/cut functionalities for web components. [#11572](https://github.com/handsontable/handsontable/pull/11572)
|
52
74
|
- Fixed the `allowInvalid` option (both `true` and `false`) for the Dropdown Editor. [#11587](https://github.com/handsontable/handsontable/pull/11587)
|
53
75
|
- Fixed a problem with a deprecation warnings being thrown when using Context Menu's Undo and Redo items. [#11588](https://github.com/handsontable/handsontable/pull/11588)
|
54
|
-
- Fixed an error being thrown when editing
|
76
|
+
- Fixed an error being thrown when editing Autocomplete-typed cells with a long list of choices rendered in a small container. [#11589](https://github.com/handsontable/handsontable/pull/11589)
|
55
77
|
- Ensured that there's a single `@charset` entry in the classic theme's CSS files and that it's placed at the beginning of those files. [#11591](https://github.com/handsontable/handsontable/pull/11591)
|
56
78
|
|
57
79
|
## [15.2.0] - 2025-03-19
|
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-
|
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.
|