handsontable 14.2.0 → 14.3.0-next-3fa6b18-20240410
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/calculator/renderAllColumns.js +1 -1
- package/3rdparty/walkontable/src/calculator/renderAllColumns.mjs +1 -1
- package/3rdparty/walkontable/src/calculator/renderAllRows.js +1 -1
- package/3rdparty/walkontable/src/calculator/renderAllRows.mjs +1 -1
- package/3rdparty/walkontable/src/calculator/viewportColumns.js +13 -18
- package/3rdparty/walkontable/src/calculator/viewportColumns.mjs +13 -18
- package/3rdparty/walkontable/src/calculator/viewportRows.js +11 -16
- package/3rdparty/walkontable/src/calculator/viewportRows.mjs +11 -16
- package/3rdparty/walkontable/src/cell/coords.js +13 -18
- package/3rdparty/walkontable/src/cell/coords.mjs +13 -18
- package/3rdparty/walkontable/src/cell/range.d.ts +2 -1
- package/3rdparty/walkontable/src/cell/range.js +42 -30
- package/3rdparty/walkontable/src/cell/range.mjs +42 -30
- package/3rdparty/walkontable/src/core/_base.js +2 -2
- package/3rdparty/walkontable/src/core/_base.mjs +2 -2
- package/3rdparty/walkontable/src/core/clone.js +1 -1
- package/3rdparty/walkontable/src/core/clone.mjs +1 -1
- package/3rdparty/walkontable/src/event.js +72 -104
- package/3rdparty/walkontable/src/event.mjs +72 -104
- package/3rdparty/walkontable/src/filter/column.js +1 -1
- package/3rdparty/walkontable/src/filter/column.mjs +1 -1
- package/3rdparty/walkontable/src/filter/row.js +1 -1
- package/3rdparty/walkontable/src/filter/row.mjs +1 -1
- package/3rdparty/walkontable/src/index.js +1 -1
- package/3rdparty/walkontable/src/overlay/_base.js +1 -1
- package/3rdparty/walkontable/src/overlay/_base.mjs +1 -1
- package/3rdparty/walkontable/src/overlay/bottom.js +1 -1
- package/3rdparty/walkontable/src/overlay/bottom.mjs +1 -1
- package/3rdparty/walkontable/src/overlay/inlineStart.js +15 -1
- package/3rdparty/walkontable/src/overlay/inlineStart.mjs +16 -2
- package/3rdparty/walkontable/src/overlay/top.js +12 -1
- package/3rdparty/walkontable/src/overlay/top.mjs +13 -2
- package/3rdparty/walkontable/src/overlay/topInlineStartCorner.js +1 -1
- package/3rdparty/walkontable/src/overlay/topInlineStartCorner.mjs +1 -1
- package/3rdparty/walkontable/src/overlays.js +47 -5
- package/3rdparty/walkontable/src/overlays.mjs +47 -5
- package/3rdparty/walkontable/src/renderer/_base.js +1 -1
- package/3rdparty/walkontable/src/renderer/_base.mjs +1 -1
- package/3rdparty/walkontable/src/renderer/cells.js +1 -1
- package/3rdparty/walkontable/src/renderer/cells.mjs +1 -1
- package/3rdparty/walkontable/src/renderer/rowHeaders.js +1 -1
- package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +1 -1
- package/3rdparty/walkontable/src/renderer/rows.js +1 -1
- package/3rdparty/walkontable/src/renderer/rows.mjs +1 -1
- package/3rdparty/walkontable/src/renderer/table.js +1 -1
- package/3rdparty/walkontable/src/renderer/table.mjs +1 -1
- package/3rdparty/walkontable/src/scroll.js +16 -18
- package/3rdparty/walkontable/src/scroll.mjs +16 -18
- package/3rdparty/walkontable/src/selection/manager.js +48 -69
- package/3rdparty/walkontable/src/selection/manager.mjs +48 -69
- package/3rdparty/walkontable/src/selection/scanner.js +33 -42
- package/3rdparty/walkontable/src/selection/scanner.mjs +33 -42
- package/3rdparty/walkontable/src/settings.js +1 -1
- package/3rdparty/walkontable/src/settings.mjs +1 -1
- package/3rdparty/walkontable/src/table.js +1 -1
- package/3rdparty/walkontable/src/table.mjs +1 -1
- package/3rdparty/walkontable/src/utils/column.js +1 -1
- package/3rdparty/walkontable/src/utils/column.mjs +1 -1
- package/3rdparty/walkontable/src/utils/columnStretching.js +28 -45
- package/3rdparty/walkontable/src/utils/columnStretching.mjs +28 -45
- package/3rdparty/walkontable/src/utils/nodesPool.js +1 -1
- package/3rdparty/walkontable/src/utils/nodesPool.mjs +1 -1
- package/3rdparty/walkontable/src/utils/orderView/view.js +2 -2
- package/3rdparty/walkontable/src/utils/orderView/view.mjs +2 -2
- package/3rdparty/walkontable/src/utils/orderView/viewSize.js +1 -1
- package/3rdparty/walkontable/src/utils/orderView/viewSize.mjs +1 -1
- package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.js +1 -1
- package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.mjs +1 -1
- package/3rdparty/walkontable/src/utils/row.js +1 -1
- package/3rdparty/walkontable/src/utils/row.mjs +1 -1
- package/CHANGELOG.md +20 -0
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/core/viewportScroll/index.js +4 -1
- package/core/viewportScroll/index.mjs +4 -1
- package/core/viewportScroll/scrollStrategies/focusScroll.js +15 -0
- package/core/viewportScroll/scrollStrategies/focusScroll.mjs +11 -0
- package/core.d.ts +4 -3
- package/core.js +98 -43
- package/core.mjs +98 -43
- package/dataMap/dataMap.js +1 -1
- package/dataMap/dataMap.mjs +1 -1
- package/dataMap/dataSource.js +2 -2
- package/dataMap/dataSource.mjs +2 -2
- package/dataMap/metaManager/lazyFactoryMap.js +3 -5
- package/dataMap/metaManager/lazyFactoryMap.mjs +2 -4
- package/dataMap/metaManager/metaLayers/cellMeta.js +2 -2
- package/dataMap/metaManager/metaLayers/cellMeta.mjs +2 -2
- package/dataMap/metaManager/metaLayers/columnMeta.js +1 -1
- package/dataMap/metaManager/metaLayers/columnMeta.mjs +1 -1
- package/dataMap/metaManager/metaLayers/globalMeta.js +1 -1
- package/dataMap/metaManager/metaLayers/globalMeta.mjs +1 -1
- package/dataMap/metaManager/metaLayers/tableMeta.js +1 -1
- package/dataMap/metaManager/metaLayers/tableMeta.mjs +1 -1
- package/dataMap/metaManager/metaSchema.js +272 -272
- package/dataMap/metaManager/metaSchema.mjs +272 -272
- package/dataMap/metaManager/mods/dynamicCellMeta.js +1 -1
- package/dataMap/metaManager/mods/dynamicCellMeta.mjs +1 -1
- package/dataMap/metaManager/mods/extendMetaProperties.js +1 -1
- package/dataMap/metaManager/mods/extendMetaProperties.mjs +1 -1
- package/dataMap/replaceData.js +1 -1
- package/dataMap/replaceData.mjs +1 -1
- package/dist/handsontable.css +4 -4
- package/dist/handsontable.full.css +4 -4
- package/dist/handsontable.full.js +9814 -10020
- package/dist/handsontable.full.min.css +3 -3
- package/dist/handsontable.full.min.js +292 -292
- package/dist/handsontable.js +7484 -7056
- package/dist/handsontable.min.css +3 -3
- package/dist/handsontable.min.js +25 -25
- 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/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 +26 -24
- package/editorManager.mjs +26 -24
- package/editors/autocompleteEditor/autocompleteEditor.js +7 -11
- package/editors/autocompleteEditor/autocompleteEditor.mjs +7 -11
- package/editors/baseEditor/baseEditor.js +1 -1
- package/editors/baseEditor/baseEditor.mjs +1 -1
- package/editors/dateEditor/dateEditor.js +49 -11
- package/editors/dateEditor/dateEditor.mjs +49 -11
- package/editors/selectEditor/selectEditor.js +20 -19
- package/editors/selectEditor/selectEditor.mjs +20 -19
- package/editors/textEditor/textEditor.js +1 -1
- package/editors/textEditor/textEditor.mjs +1 -1
- package/eventManager.js +2 -2
- package/eventManager.mjs +2 -2
- package/focusManager.js +64 -82
- package/focusManager.mjs +64 -82
- package/helpers/dom/element.js +23 -1
- package/helpers/dom/element.mjs +21 -1
- package/helpers/mixed.js +2 -2
- package/helpers/mixed.mjs +2 -2
- package/helpers/object.js +2 -2
- package/helpers/object.mjs +2 -2
- package/i18n/languages/ar-AR.d.ts +5 -0
- package/i18n/languages/ar-AR.js +1 -1
- package/i18n/languages/cs-CZ.d.ts +5 -0
- package/i18n/languages/cs-CZ.js +1 -1
- package/i18n/languages/de-CH.js +1 -1
- package/i18n/languages/de-DE.js +1 -1
- package/i18n/languages/en-US.js +1 -1
- package/i18n/languages/es-MX.js +1 -1
- package/i18n/languages/fr-FR.js +1 -1
- package/i18n/languages/hr-HR.d.ts +5 -0
- package/i18n/languages/hr-HR.js +1 -1
- package/i18n/languages/it-IT.js +1 -1
- package/i18n/languages/ja-JP.js +1 -1
- package/i18n/languages/ko-KR.js +1 -1
- package/i18n/languages/lv-LV.js +1 -1
- package/i18n/languages/nb-NO.js +1 -1
- package/i18n/languages/nl-NL.js +1 -1
- package/i18n/languages/pl-PL.js +1 -1
- package/i18n/languages/pt-BR.js +1 -1
- package/i18n/languages/ru-RU.js +1 -1
- package/i18n/languages/sr-SP.d.ts +5 -0
- package/i18n/languages/sr-SP.js +1 -1
- package/i18n/languages/zh-CN.js +1 -1
- package/i18n/languages/zh-TW.js +1 -1
- package/i18n/registry.js +1 -1
- package/index.d.ts +10 -0
- package/index.js +1 -1
- package/package.json +14 -10
- package/pluginHooks.d.ts +4 -3
- package/pluginHooks.js +143 -82
- package/pluginHooks.mjs +143 -82
- package/plugins/autoColumnSize/autoColumnSize.js +50 -66
- package/plugins/autoColumnSize/autoColumnSize.mjs +50 -66
- package/plugins/autoRowSize/autoRowSize.js +29 -35
- package/plugins/autoRowSize/autoRowSize.mjs +29 -35
- package/plugins/autofill/autofill.js +31 -39
- package/plugins/autofill/autofill.mjs +31 -39
- package/plugins/base/base.js +13 -18
- package/plugins/base/base.mjs +13 -18
- package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +6 -6
- package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +6 -6
- package/plugins/collapsibleColumns/collapsibleColumns.js +60 -51
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +60 -51
- package/plugins/columnSorting/columnSorting.js +50 -46
- package/plugins/columnSorting/columnSorting.mjs +50 -46
- package/plugins/columnSorting/columnStatesManager.js +1 -1
- package/plugins/columnSorting/columnStatesManager.mjs +1 -1
- package/plugins/columnSummary/columnSummary.js +36 -40
- package/plugins/columnSummary/columnSummary.mjs +36 -40
- package/plugins/columnSummary/endpoints.js +1 -1
- package/plugins/columnSummary/endpoints.mjs +1 -1
- package/plugins/comments/commentEditor.js +1 -1
- package/plugins/comments/commentEditor.mjs +1 -1
- package/plugins/comments/comments.js +117 -159
- package/plugins/comments/comments.mjs +117 -159
- package/plugins/comments/contextMenuItem/addEditComment.js +1 -1
- package/plugins/comments/contextMenuItem/readOnlyComment.js +1 -1
- package/plugins/comments/contextMenuItem/removeComment.js +1 -1
- package/plugins/comments/displaySwitch.js +1 -1
- package/plugins/comments/displaySwitch.mjs +1 -1
- package/plugins/contextMenu/commandExecutor.js +1 -1
- package/plugins/contextMenu/commandExecutor.mjs +1 -1
- package/plugins/contextMenu/contextMenu.js +24 -30
- package/plugins/contextMenu/contextMenu.mjs +24 -30
- package/plugins/contextMenu/itemsFactory.js +2 -2
- package/plugins/contextMenu/itemsFactory.mjs +2 -2
- package/plugins/contextMenu/menu/cursor.js +1 -1
- package/plugins/contextMenu/menu/cursor.mjs +1 -1
- package/plugins/contextMenu/menu/defaultShortcutsList.js +26 -10
- package/plugins/contextMenu/menu/defaultShortcutsList.mjs +26 -10
- package/plugins/contextMenu/menu/menu.js +14 -22
- package/plugins/contextMenu/menu/menu.mjs +14 -22
- package/plugins/contextMenu/menu/positioner.js +41 -58
- package/plugins/contextMenu/menu/positioner.mjs +41 -58
- package/plugins/contextMenu/predefinedItems/alignment.js +1 -1
- package/plugins/contextMenu/predefinedItems/clearColumn.js +1 -1
- package/plugins/contextMenu/predefinedItems/columnLeft.js +1 -1
- package/plugins/contextMenu/predefinedItems/columnRight.js +1 -1
- package/plugins/contextMenu/predefinedItems/index.js +1 -1
- package/plugins/contextMenu/predefinedItems/readOnly.js +1 -1
- package/plugins/contextMenu/predefinedItems/redo.js +1 -1
- package/plugins/contextMenu/predefinedItems/removeColumn.js +1 -1
- package/plugins/contextMenu/predefinedItems/removeRow.js +1 -1
- package/plugins/contextMenu/predefinedItems/rowAbove.js +1 -1
- package/plugins/contextMenu/predefinedItems/rowBelow.js +1 -1
- package/plugins/contextMenu/predefinedItems/undo.js +1 -1
- package/plugins/copyPaste/contextMenuItem/cut.js +1 -1
- package/plugins/copyPaste/copyPaste.js +120 -161
- package/plugins/copyPaste/copyPaste.mjs +120 -161
- package/plugins/copyPaste/copyableRanges.js +43 -66
- package/plugins/copyPaste/copyableRanges.mjs +43 -66
- package/plugins/customBorders/contextMenuItem/bottom.js +1 -1
- package/plugins/customBorders/contextMenuItem/left.js +1 -1
- package/plugins/customBorders/contextMenuItem/noBorders.js +1 -1
- package/plugins/customBorders/contextMenuItem/right.js +1 -1
- package/plugins/customBorders/contextMenuItem/top.js +1 -1
- package/plugins/customBorders/customBorders.js +14 -16
- package/plugins/customBorders/customBorders.mjs +13 -15
- package/plugins/dragToScroll/dragToScroll.js +7 -7
- package/plugins/dragToScroll/dragToScroll.mjs +7 -7
- package/plugins/dropdownMenu/dropdownMenu.js +84 -110
- package/plugins/dropdownMenu/dropdownMenu.mjs +84 -110
- package/plugins/exportFile/dataProvider.js +2 -2
- package/plugins/exportFile/dataProvider.mjs +2 -2
- package/plugins/exportFile/exportFile.js +2 -2
- package/plugins/exportFile/exportFile.mjs +1 -1
- package/plugins/exportFile/types/_base.js +1 -1
- package/plugins/exportFile/types/_base.mjs +1 -1
- package/plugins/filters/component/_base.js +1 -1
- package/plugins/filters/component/_base.mjs +1 -1
- package/plugins/filters/component/actionBar.js +11 -11
- package/plugins/filters/component/actionBar.mjs +9 -9
- package/plugins/filters/component/condition.js +15 -17
- package/plugins/filters/component/condition.mjs +14 -16
- package/plugins/filters/component/operators.js +7 -7
- package/plugins/filters/component/operators.mjs +7 -7
- package/plugins/filters/component/value.js +26 -30
- package/plugins/filters/component/value.mjs +25 -29
- package/plugins/filters/condition/beginsWith.js +1 -1
- package/plugins/filters/condition/between.js +1 -1
- package/plugins/filters/condition/contains.js +1 -1
- package/plugins/filters/condition/date/after.js +1 -1
- package/plugins/filters/condition/date/before.js +1 -1
- package/plugins/filters/condition/date/today.js +1 -1
- package/plugins/filters/condition/date/tomorrow.js +1 -1
- package/plugins/filters/condition/date/yesterday.js +1 -1
- package/plugins/filters/condition/empty.js +1 -1
- package/plugins/filters/condition/endsWith.js +1 -1
- package/plugins/filters/condition/equal.js +1 -1
- package/plugins/filters/condition/greaterThan.js +1 -1
- package/plugins/filters/condition/greaterThanOrEqual.js +1 -1
- package/plugins/filters/condition/lessThan.js +1 -1
- package/plugins/filters/condition/lessThanOrEqual.js +1 -1
- package/plugins/filters/condition/none.js +1 -1
- package/plugins/filters/condition/notBetween.js +1 -1
- package/plugins/filters/condition/notContains.js +1 -1
- package/plugins/filters/condition/notEmpty.js +1 -1
- package/plugins/filters/condition/notEqual.js +1 -1
- package/plugins/filters/conditionCollection.js +1 -1
- package/plugins/filters/conditionCollection.mjs +1 -1
- package/plugins/filters/conditionUpdateObserver.js +23 -25
- package/plugins/filters/conditionUpdateObserver.mjs +23 -25
- package/plugins/filters/dataFilter.js +2 -2
- package/plugins/filters/dataFilter.mjs +2 -2
- package/plugins/filters/filters.js +84 -98
- package/plugins/filters/filters.mjs +83 -97
- package/plugins/filters/logicalOperations/conjunction.js +1 -1
- package/plugins/filters/logicalOperations/disjunction.js +1 -1
- package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +1 -1
- package/plugins/filters/ui/_base.js +2 -2
- package/plugins/filters/ui/_base.mjs +1 -1
- package/plugins/filters/ui/input.js +13 -19
- package/plugins/filters/ui/input.mjs +13 -19
- package/plugins/filters/ui/link.js +8 -13
- package/plugins/filters/ui/link.mjs +8 -13
- package/plugins/filters/ui/multipleSelect.js +86 -113
- package/plugins/filters/ui/multipleSelect.mjs +85 -112
- package/plugins/filters/ui/radioInput.js +12 -20
- package/plugins/filters/ui/radioInput.mjs +12 -20
- package/plugins/filters/ui/select.js +51 -73
- package/plugins/filters/ui/select.mjs +49 -71
- package/plugins/formulas/formulas.js +270 -328
- package/plugins/formulas/formulas.mjs +271 -329
- package/plugins/formulas/indexSyncer/axisSyncer.js +38 -61
- package/plugins/formulas/indexSyncer/axisSyncer.mjs +38 -61
- package/plugins/formulas/indexSyncer/index.js +25 -48
- package/plugins/formulas/indexSyncer/index.mjs +25 -48
- package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +1 -1
- package/plugins/hiddenColumns/contextMenuItem/showColumn.js +1 -1
- package/plugins/hiddenColumns/hiddenColumns.js +68 -87
- package/plugins/hiddenColumns/hiddenColumns.mjs +68 -87
- package/plugins/hiddenRows/contextMenuItem/hideRow.js +1 -1
- package/plugins/hiddenRows/contextMenuItem/showRow.js +1 -1
- package/plugins/hiddenRows/hiddenRows.js +67 -86
- package/plugins/hiddenRows/hiddenRows.mjs +67 -86
- package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +1 -1
- package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +1 -1
- package/plugins/manualColumnFreeze/manualColumnFreeze.js +24 -32
- package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +25 -33
- package/plugins/manualColumnMove/manualColumnMove.js +133 -177
- package/plugins/manualColumnMove/manualColumnMove.mjs +133 -177
- package/plugins/manualColumnMove/ui/_base.js +1 -1
- package/plugins/manualColumnMove/ui/_base.mjs +1 -1
- package/plugins/manualColumnResize/manualColumnResize.js +169 -230
- package/plugins/manualColumnResize/manualColumnResize.mjs +169 -230
- package/plugins/manualRowMove/manualRowMove.js +106 -135
- package/plugins/manualRowMove/manualRowMove.mjs +106 -135
- package/plugins/manualRowMove/ui/_base.js +1 -1
- package/plugins/manualRowMove/ui/_base.mjs +1 -1
- package/plugins/manualRowResize/manualRowResize.js +150 -209
- package/plugins/manualRowResize/manualRowResize.mjs +150 -209
- package/plugins/mergeCells/calculations/autofill.js +1 -1
- package/plugins/mergeCells/calculations/autofill.mjs +1 -1
- package/plugins/mergeCells/calculations/selection.js +3 -72
- package/plugins/mergeCells/calculations/selection.mjs +3 -72
- package/plugins/mergeCells/cellCoords.js +1 -1
- package/plugins/mergeCells/cellCoords.mjs +1 -1
- package/plugins/mergeCells/cellsCollection.js +118 -2
- package/plugins/mergeCells/cellsCollection.mjs +118 -2
- package/plugins/mergeCells/contextMenuItem/toggleMerge.js +12 -2
- package/plugins/mergeCells/contextMenuItem/toggleMerge.mjs +11 -1
- package/plugins/mergeCells/focusOrder.js +305 -0
- package/plugins/mergeCells/focusOrder.mjs +300 -0
- package/plugins/mergeCells/mergeCells.js +500 -398
- package/plugins/mergeCells/mergeCells.mjs +500 -398
- package/plugins/multiColumnSorting/multiColumnSorting.js +9 -3
- package/plugins/multiColumnSorting/multiColumnSorting.mjs +9 -3
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +2 -2
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +2 -2
- package/plugins/nestedHeaders/nestedHeaders.js +206 -254
- package/plugins/nestedHeaders/nestedHeaders.mjs +207 -255
- package/plugins/nestedHeaders/stateManager/headersTree.js +21 -32
- package/plugins/nestedHeaders/stateManager/headersTree.mjs +21 -32
- package/plugins/nestedHeaders/stateManager/index.js +30 -41
- package/plugins/nestedHeaders/stateManager/index.mjs +30 -41
- package/plugins/nestedHeaders/stateManager/sourceSettings.js +19 -30
- package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +19 -30
- package/plugins/nestedHeaders/utils/ghostTable.js +1 -1
- package/plugins/nestedHeaders/utils/ghostTable.mjs +1 -1
- package/plugins/nestedRows/data/dataManager.js +2 -2
- package/plugins/nestedRows/data/dataManager.mjs +2 -2
- package/plugins/nestedRows/nestedRows.js +154 -185
- package/plugins/nestedRows/nestedRows.mjs +155 -186
- package/plugins/nestedRows/ui/_base.js +1 -1
- package/plugins/nestedRows/ui/_base.mjs +1 -1
- package/plugins/nestedRows/ui/contextMenu.js +13 -17
- package/plugins/nestedRows/ui/contextMenu.mjs +11 -15
- package/plugins/nestedRows/utils/rowMoveController.js +6 -6
- package/plugins/nestedRows/utils/rowMoveController.mjs +6 -6
- package/plugins/persistentState/persistentState.js +1 -1
- package/plugins/persistentState/persistentState.mjs +1 -1
- package/plugins/persistentState/storage.js +3 -3
- package/plugins/persistentState/storage.mjs +3 -3
- package/plugins/search/search.js +8 -8
- package/plugins/search/search.mjs +8 -8
- package/plugins/touchScroll/touchScroll.js +16 -20
- package/plugins/touchScroll/touchScroll.mjs +17 -21
- package/plugins/trimRows/trimRows.js +7 -7
- package/plugins/trimRows/trimRows.mjs +7 -7
- package/plugins/undoRedo/index.js +1 -1
- package/renderers/checkboxRenderer/checkboxRenderer.js +8 -5
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +8 -5
- package/selection/highlight/highlight.js +16 -18
- package/selection/highlight/highlight.mjs +15 -17
- package/selection/highlight/visualSelection.js +3 -1
- package/selection/highlight/visualSelection.mjs +3 -1
- package/selection/range.js +3 -5
- package/selection/range.mjs +2 -4
- package/selection/selection.js +227 -69
- package/selection/selection.mjs +225 -67
- package/selection/transformation.js +149 -118
- package/selection/transformation.mjs +149 -118
- package/shortcutContexts/commands/editor/closeAndSave.js +2 -2
- package/shortcutContexts/commands/editor/closeAndSave.mjs +2 -2
- package/shortcutContexts/commands/editor/open.js +18 -3
- package/shortcutContexts/commands/editor/open.mjs +18 -3
- package/shortcutContexts/commands/extendCellsSelection/down.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/down.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/left.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/left.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/right.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/right.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toColumns.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +3 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +3 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +9 -3
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +9 -3
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +10 -3
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +10 -3
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +3 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +3 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +3 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +3 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +3 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +3 -1
- package/shortcutContexts/commands/extendCellsSelection/toRows.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/up.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/up.mjs +1 -1
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +6 -1
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +6 -1
- package/shortcutContexts/commands/moveCellSelection/inlineStart.js +6 -1
- package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +6 -1
- package/shortcutContexts/grid.js +9 -3
- package/shortcutContexts/grid.mjs +9 -3
- package/shortcuts/context.js +3 -2
- package/shortcuts/context.mjs +3 -2
- package/shortcuts/manager.js +2 -2
- package/shortcuts/manager.mjs +2 -2
- package/tableView.js +53 -79
- package/tableView.mjs +53 -79
- package/translations/changesObservable/observable.js +21 -38
- package/translations/changesObservable/observable.mjs +21 -38
- package/translations/changesObservable/observer.js +7 -12
- package/translations/changesObservable/observer.mjs +6 -11
- package/translations/indexMapper.js +1 -1
- package/translations/indexMapper.mjs +1 -1
- package/translations/mapCollections/aggregatedCollection.js +2 -2
- package/translations/mapCollections/aggregatedCollection.mjs +2 -2
- package/translations/mapCollections/mapCollection.js +1 -1
- package/translations/mapCollections/mapCollection.mjs +1 -1
- package/translations/maps/indexMap.js +2 -2
- package/translations/maps/indexMap.mjs +2 -2
- package/translations/maps/linkedPhysicalIndexToValueMap.js +1 -1
- package/translations/maps/linkedPhysicalIndexToValueMap.mjs +1 -1
- package/utils/dataStructures/linkedList.js +7 -2
- package/utils/dataStructures/linkedList.mjs +7 -2
- package/utils/dataStructures/tree.js +2 -2
- package/utils/dataStructures/tree.mjs +2 -2
- package/utils/ghostTable.js +1 -1
- package/utils/ghostTable.mjs +1 -1
- package/utils/interval.js +27 -45
- package/utils/interval.mjs +27 -45
- package/utils/samplesGenerator.js +1 -1
- package/utils/samplesGenerator.mjs +1 -1
package/core.js
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
exports.__esModule = true;
|
4
4
|
exports.default = Core;
|
5
|
-
require("core-js/modules/es.array.push.js");
|
6
5
|
require("core-js/modules/es.error.cause.js");
|
6
|
+
require("core-js/modules/es.array.push.js");
|
7
7
|
require("core-js/modules/web.immediate.js");
|
8
8
|
var _element = require("./helpers/dom/element");
|
9
9
|
var _function = require("./helpers/function");
|
@@ -68,8 +68,8 @@ const deprecationWarns = new Set();
|
|
68
68
|
*
|
69
69
|
* ::: only-for react
|
70
70
|
* To use these methods, associate a Handsontable instance with your instance
|
71
|
-
* of the [`HotTable` component](@/guides/getting-started/installation.md#_4-use-the-hottable-component),
|
72
|
-
* by using React's `ref` feature (read more on the [Instance methods](@/guides/getting-started/react-methods.md) page).
|
71
|
+
* of the [`HotTable` component](@/guides/getting-started/installation/installation.md#_4-use-the-hottable-component),
|
72
|
+
* by using React's `ref` feature (read more on the [Instance methods](@/guides/getting-started/react-methods/react-methods.md) page).
|
73
73
|
* :::
|
74
74
|
*
|
75
75
|
* ## How to call a method
|
@@ -273,6 +273,26 @@ function Core(rootElement, userSettings) {
|
|
273
273
|
renderableRow >= 0 ? instance.rowIndexMapper.getVisualFromRenderableIndex(renderableRow) : renderableRow, renderableColumn >= 0 ? instance.columnIndexMapper.getVisualFromRenderableIndex(renderableColumn) : renderableColumn // eslint-disable-line max-len
|
274
274
|
);
|
275
275
|
};
|
276
|
+
const findFirstNonHiddenRenderableRow = (visualRowFrom, visualRowTo) => {
|
277
|
+
const dir = visualRowTo > visualRowFrom ? 1 : -1;
|
278
|
+
const minIndex = Math.min(visualRowFrom, visualRowTo);
|
279
|
+
const maxIndex = Math.max(visualRowFrom, visualRowTo);
|
280
|
+
const rowIndex = instance.rowIndexMapper.getNearestNotHiddenIndex(visualRowFrom, dir);
|
281
|
+
if (rowIndex === null || dir === 1 && rowIndex > maxIndex || dir === -1 && rowIndex < minIndex) {
|
282
|
+
return null;
|
283
|
+
}
|
284
|
+
return rowIndex >= 0 ? instance.rowIndexMapper.getRenderableFromVisualIndex(rowIndex) : rowIndex;
|
285
|
+
};
|
286
|
+
const findFirstNonHiddenRenderableColumn = (visualColumnFrom, visualColumnTo) => {
|
287
|
+
const dir = visualColumnTo > visualColumnFrom ? 1 : -1;
|
288
|
+
const minIndex = Math.min(visualColumnFrom, visualColumnTo);
|
289
|
+
const maxIndex = Math.max(visualColumnFrom, visualColumnTo);
|
290
|
+
const columnIndex = instance.columnIndexMapper.getNearestNotHiddenIndex(visualColumnFrom, dir);
|
291
|
+
if (columnIndex === null || dir === 1 && columnIndex > maxIndex || dir === -1 && columnIndex < minIndex) {
|
292
|
+
return null;
|
293
|
+
}
|
294
|
+
return columnIndex >= 0 ? instance.columnIndexMapper.getRenderableFromVisualIndex(columnIndex) : columnIndex;
|
295
|
+
};
|
276
296
|
let selection = new _selection.Selection(tableMeta, {
|
277
297
|
rowIndexMapper: instance.rowIndexMapper,
|
278
298
|
columnIndexMapper: instance.columnIndexMapper,
|
@@ -284,11 +304,19 @@ function Core(rootElement, userSettings) {
|
|
284
304
|
countRenderableRows: () => this.view.countRenderableRows(),
|
285
305
|
countRowHeaders: () => this.countRowHeaders(),
|
286
306
|
countColHeaders: () => this.countColHeaders(),
|
307
|
+
countRenderableRowsInRange: function () {
|
308
|
+
return _this.view.countRenderableRowsInRange(...arguments);
|
309
|
+
},
|
310
|
+
countRenderableColumnsInRange: function () {
|
311
|
+
return _this.view.countRenderableColumnsInRange(...arguments);
|
312
|
+
},
|
287
313
|
getShortcutManager: () => instance.getShortcutManager(),
|
288
314
|
createCellCoords: (row, column) => instance._createCellCoords(row, column),
|
289
315
|
createCellRange: (highlight, from, to) => instance._createCellRange(highlight, from, to),
|
290
316
|
visualToRenderableCoords,
|
291
317
|
renderableToVisualCoords,
|
318
|
+
findFirstNonHiddenRenderableRow,
|
319
|
+
findFirstNonHiddenRenderableColumn,
|
292
320
|
isDisabledCellSelection: (visualRow, visualColumn) => {
|
293
321
|
if (visualRow < 0 || visualColumn < 0) {
|
294
322
|
return instance.getSettings().disableVisualSelection;
|
@@ -339,6 +367,17 @@ function Core(rootElement, userSettings) {
|
|
339
367
|
}
|
340
368
|
this._refreshBorders(null);
|
341
369
|
});
|
370
|
+
this.selection.addLocalHook('beforeSetFocus', cellCoords => {
|
371
|
+
this.runHooks('beforeSelectionFocusSet', cellCoords.row, cellCoords.col);
|
372
|
+
});
|
373
|
+
this.selection.addLocalHook('afterSetFocus', cellCoords => {
|
374
|
+
const preventScrolling = (0, _object.createObjectPropListener)(false);
|
375
|
+
this.runHooks('afterSelectionFocusSet', cellCoords.row, cellCoords.col, preventScrolling);
|
376
|
+
if (!preventScrolling.isTouched() || preventScrolling.isTouched() && !preventScrolling.value) {
|
377
|
+
viewportScroller.scrollTo(cellCoords);
|
378
|
+
}
|
379
|
+
this._refreshBorders(null);
|
380
|
+
});
|
342
381
|
this.selection.addLocalHook('afterSelectionFinished', cellRanges => {
|
343
382
|
const selectionLayerLevel = cellRanges.length - 1;
|
344
383
|
const {
|
@@ -405,25 +444,35 @@ function Core(rootElement, userSettings) {
|
|
405
444
|
args[_key9] = arguments[_key9];
|
406
445
|
}
|
407
446
|
return _this.runHooks('afterModifyTransformStart', ...args);
|
408
|
-
}).addLocalHook('
|
447
|
+
}).addLocalHook('beforeModifyTransformFocus', function () {
|
409
448
|
for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
|
410
449
|
args[_key10] = arguments[_key10];
|
411
450
|
}
|
412
|
-
return _this.runHooks('
|
413
|
-
}).addLocalHook('
|
451
|
+
return _this.runHooks('modifyTransformFocus', ...args);
|
452
|
+
}).addLocalHook('afterModifyTransformFocus', function () {
|
414
453
|
for (var _len11 = arguments.length, args = new Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
|
415
454
|
args[_key11] = arguments[_key11];
|
416
455
|
}
|
417
|
-
return _this.runHooks('
|
418
|
-
}).addLocalHook('
|
456
|
+
return _this.runHooks('afterModifyTransformFocus', ...args);
|
457
|
+
}).addLocalHook('beforeModifyTransformEnd', function () {
|
419
458
|
for (var _len12 = arguments.length, args = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {
|
420
459
|
args[_key12] = arguments[_key12];
|
421
460
|
}
|
422
|
-
return _this.runHooks('
|
423
|
-
}).addLocalHook('
|
461
|
+
return _this.runHooks('modifyTransformEnd', ...args);
|
462
|
+
}).addLocalHook('afterModifyTransformEnd', function () {
|
424
463
|
for (var _len13 = arguments.length, args = new Array(_len13), _key13 = 0; _key13 < _len13; _key13++) {
|
425
464
|
args[_key13] = arguments[_key13];
|
426
465
|
}
|
466
|
+
return _this.runHooks('afterModifyTransformEnd', ...args);
|
467
|
+
}).addLocalHook('beforeRowWrap', function () {
|
468
|
+
for (var _len14 = arguments.length, args = new Array(_len14), _key14 = 0; _key14 < _len14; _key14++) {
|
469
|
+
args[_key14] = arguments[_key14];
|
470
|
+
}
|
471
|
+
return _this.runHooks('beforeRowWrap', ...args);
|
472
|
+
}).addLocalHook('beforeColumnWrap', function () {
|
473
|
+
for (var _len15 = arguments.length, args = new Array(_len15), _key15 = 0; _key15 < _len15; _key15++) {
|
474
|
+
args[_key15] = arguments[_key15];
|
475
|
+
}
|
427
476
|
return _this.runHooks('beforeColumnWrap', ...args);
|
428
477
|
}).addLocalHook('insertRowRequire', totalRows => this.alter('insert_row_above', totalRows, 1, 'auto')).addLocalHook('insertColRequire', totalCols => this.alter('insert_col_start', totalCols, 1, 'auto'));
|
429
478
|
grid = {
|
@@ -1561,8 +1610,8 @@ function Core(rootElement, userSettings) {
|
|
1561
1610
|
* @returns {Array} Returns removed portion of columns.
|
1562
1611
|
*/
|
1563
1612
|
this.spliceCol = function (column, index, amount) {
|
1564
|
-
for (var
|
1565
|
-
elements[
|
1613
|
+
for (var _len16 = arguments.length, elements = new Array(_len16 > 3 ? _len16 - 3 : 0), _key16 = 3; _key16 < _len16; _key16++) {
|
1614
|
+
elements[_key16 - 3] = arguments[_key16];
|
1566
1615
|
}
|
1567
1616
|
return datamap.spliceCol(column, index, amount, ...elements);
|
1568
1617
|
};
|
@@ -1579,8 +1628,8 @@ function Core(rootElement, userSettings) {
|
|
1579
1628
|
* @returns {Array} Returns removed portion of rows.
|
1580
1629
|
*/
|
1581
1630
|
this.spliceRow = function (row, index, amount) {
|
1582
|
-
for (var
|
1583
|
-
elements[
|
1631
|
+
for (var _len17 = arguments.length, elements = new Array(_len17 > 3 ? _len17 - 3 : 0), _key17 = 3; _key17 < _len17; _key17++) {
|
1632
|
+
elements[_key17 - 3] = arguments[_key17];
|
1584
1633
|
}
|
1585
1634
|
return datamap.spliceRow(row, index, amount, ...elements);
|
1586
1635
|
};
|
@@ -2045,20 +2094,20 @@ function Core(rootElement, userSettings) {
|
|
2045
2094
|
* The `updateData()` method replaces Handsontable's [`data`](@/api/options.md#data) with a new dataset.
|
2046
2095
|
*
|
2047
2096
|
* The `updateData()` method:
|
2048
|
-
* - Keeps cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)
|
2097
|
+
* - Keeps cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)
|
2049
2098
|
* - Keeps rows' states (e.g. row order)
|
2050
2099
|
* - Keeps columns' states (e.g. column order)
|
2051
2100
|
*
|
2052
2101
|
* To replace Handsontable's [`data`](@/api/options.md#data) and reset states, use the [`loadData()`](#loaddata) method.
|
2053
2102
|
*
|
2054
2103
|
* Read more:
|
2055
|
-
* - [Binding to data](@/guides/getting-started/binding-to-data.md)
|
2056
|
-
* - [Saving data](@/guides/getting-started/saving-data.md)
|
2104
|
+
* - [Binding to data](@/guides/getting-started/binding-to-data/binding-to-data.md)
|
2105
|
+
* - [Saving data](@/guides/getting-started/saving-data/saving-data.md)
|
2057
2106
|
*
|
2058
2107
|
* @memberof Core#
|
2059
2108
|
* @function updateData
|
2060
2109
|
* @since 11.1.0
|
2061
|
-
* @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data.md#array-of-objects), that contains Handsontable's data
|
2110
|
+
* @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data
|
2062
2111
|
* @param {string} [source] The source of the `updateData()` call
|
2063
2112
|
* @fires Hooks#beforeUpdateData
|
2064
2113
|
* @fires Hooks#afterUpdateData
|
@@ -2087,19 +2136,19 @@ function Core(rootElement, userSettings) {
|
|
2087
2136
|
* The `loadData()` method replaces Handsontable's [`data`](@/api/options.md#data) with a new dataset.
|
2088
2137
|
*
|
2089
2138
|
* Additionally, the `loadData()` method:
|
2090
|
-
* - Resets cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)
|
2139
|
+
* - Resets cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)
|
2091
2140
|
* - Resets rows' states (e.g. row order)
|
2092
2141
|
* - Resets columns' states (e.g. column order)
|
2093
2142
|
*
|
2094
2143
|
* To replace Handsontable's [`data`](@/api/options.md#data) without resetting states, use the [`updateData()`](#updatedata) method.
|
2095
2144
|
*
|
2096
2145
|
* Read more:
|
2097
|
-
* - [Binding to data](@/guides/getting-started/binding-to-data.md)
|
2098
|
-
* - [Saving data](@/guides/getting-started/saving-data.md)
|
2146
|
+
* - [Binding to data](@/guides/getting-started/binding-to-data/binding-to-data.md)
|
2147
|
+
* - [Saving data](@/guides/getting-started/saving-data/saving-data.md)
|
2099
2148
|
*
|
2100
2149
|
* @memberof Core#
|
2101
2150
|
* @function loadData
|
2102
|
-
* @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data.md#array-of-objects), that contains Handsontable's data
|
2151
|
+
* @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data
|
2103
2152
|
* @param {string} [source] The source of the `loadData()` call
|
2104
2153
|
* @fires Hooks#beforeLoadData
|
2105
2154
|
* @fires Hooks#afterLoadData
|
@@ -2459,7 +2508,7 @@ function Core(rootElement, userSettings) {
|
|
2459
2508
|
*
|
2460
2509
|
* ::: tip
|
2461
2510
|
* The `alter()` method works only when your [`data`](@/api/options.md#data)
|
2462
|
-
* is an [array of arrays](@/guides/getting-started/binding-to-data.md#array-of-arrays).
|
2511
|
+
* is an [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays).
|
2463
2512
|
* :::
|
2464
2513
|
*
|
2465
2514
|
* ```js
|
@@ -2753,7 +2802,7 @@ function Core(rootElement, userSettings) {
|
|
2753
2802
|
* sorted or trimmed only physical indexes are correct.
|
2754
2803
|
*
|
2755
2804
|
* __Note__: This method may return incorrect values for cells that contain
|
2756
|
-
* [formulas](@/guides/formulas/formula-calculation.md). This is because `getSourceData()`
|
2805
|
+
* [formulas](@/guides/formulas/formula-calculation/formula-calculation.md). This is because `getSourceData()`
|
2757
2806
|
* operates on source data ([physical indexes](@/api/indexMapper.md)),
|
2758
2807
|
* whereas formulas operate on visual data (visual indexes).
|
2759
2808
|
*
|
@@ -2977,8 +3026,8 @@ function Core(rootElement, userSettings) {
|
|
2977
3026
|
*/
|
2978
3027
|
this.spliceCellsMeta = function (visualIndex) {
|
2979
3028
|
let deleteAmount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
2980
|
-
for (var
|
2981
|
-
cellMetaRows[
|
3029
|
+
for (var _len18 = arguments.length, cellMetaRows = new Array(_len18 > 2 ? _len18 - 2 : 0), _key18 = 2; _key18 < _len18; _key18++) {
|
3030
|
+
cellMetaRows[_key18 - 2] = arguments[_key18];
|
2982
3031
|
}
|
2983
3032
|
if (cellMetaRows.length > 0 && !Array.isArray(cellMetaRows[0])) {
|
2984
3033
|
throw new Error('The 3rd argument (cellMetaRows) has to be passed as an array of cell meta objects array.');
|
@@ -3091,8 +3140,8 @@ function Core(rootElement, userSettings) {
|
|
3091
3140
|
};
|
3092
3141
|
|
3093
3142
|
/**
|
3094
|
-
* Checks if your [data format](@/guides/getting-started/binding-to-data.md#compatible-data-types)
|
3095
|
-
* and [configuration options](@/guides/getting-started/configuration-options.md)
|
3143
|
+
* Checks if your [data format](@/guides/getting-started/binding-to-data/binding-to-data.md#compatible-data-types)
|
3144
|
+
* and [configuration options](@/guides/getting-started/configuration-options/configuration-options.md)
|
3096
3145
|
* allow for changing the number of columns.
|
3097
3146
|
*
|
3098
3147
|
* Returns `false` when your data is an array of objects,
|
@@ -3181,10 +3230,10 @@ function Core(rootElement, userSettings) {
|
|
3181
3230
|
|
3182
3231
|
/**
|
3183
3232
|
* Validates every cell in the data set,
|
3184
|
-
* using a [validator function](@/guides/cell-functions/cell-validator.md) configured for each cell.
|
3233
|
+
* using a [validator function](@/guides/cell-functions/cell-validator/cell-validator.md) configured for each cell.
|
3185
3234
|
*
|
3186
|
-
* Doesn't validate cells that are currently [trimmed](@/guides/rows/row-trimming.md),
|
3187
|
-
* [hidden](@/guides/rows/row-hiding.md), or [filtered](@/guides/columns/column-filter.md),
|
3235
|
+
* Doesn't validate cells that are currently [trimmed](@/guides/rows/row-trimming/row-trimming.md),
|
3236
|
+
* [hidden](@/guides/rows/row-hiding/row-hiding.md), or [filtered](@/guides/columns/column-filter/column-filter.md),
|
3188
3237
|
* as such cells are not included in the data set until you bring them back again.
|
3189
3238
|
*
|
3190
3239
|
* After the validation, the `callback` function is fired, with the `valid` argument set to:
|
@@ -3372,18 +3421,18 @@ function Core(rootElement, userSettings) {
|
|
3372
3421
|
* Gets the values of column headers (if column headers are [enabled](@/api/options.md#colheaders)).
|
3373
3422
|
*
|
3374
3423
|
* To get an array with the values of all
|
3375
|
-
* [bottom-most](@/guides/cell-features/clipboard.md#copy-with-headers) column headers,
|
3424
|
+
* [bottom-most](@/guides/cell-features/clipboard/clipboard.md#copy-with-headers) column headers,
|
3376
3425
|
* call `getColHeader()` with no arguments.
|
3377
3426
|
*
|
3378
3427
|
* To get the value of the bottom-most header of a specific column, use the `column` parameter.
|
3379
3428
|
*
|
3380
|
-
* To get the value of a [specific-level](@/guides/columns/column-groups.md) header
|
3429
|
+
* To get the value of a [specific-level](@/guides/columns/column-groups/column-groups.md) header
|
3381
3430
|
* of a specific column, use the `column` and `headerLevel` parameters.
|
3382
3431
|
*
|
3383
3432
|
* Read more:
|
3384
|
-
* - [Guides: Column groups](@/guides/columns/column-groups.md)
|
3433
|
+
* - [Guides: Column groups](@/guides/columns/column-groups/column-groups.md)
|
3385
3434
|
* - [Options: `colHeaders`](@/api/options.md#colheaders)
|
3386
|
-
* - [Guides: Copy with headers](@/guides/cell-features/clipboard.md#copy-with-headers)
|
3435
|
+
* - [Guides: Copy with headers](@/guides/cell-features/clipboard/clipboard.md#copy-with-headers)
|
3387
3436
|
*
|
3388
3437
|
* ```js
|
3389
3438
|
* // get the contents of all bottom-most column headers
|
@@ -3900,6 +3949,8 @@ function Core(rootElement, userSettings) {
|
|
3900
3949
|
* hot.selectColumns(1, 2, -1);
|
3901
3950
|
* // Select range of columns using visual indexes and mark the second cell as highlighted.
|
3902
3951
|
* hot.selectColumns(2, 1, 1);
|
3952
|
+
* // Select range of columns using visual indexes and move the focus position somewhere in the middle of the range.
|
3953
|
+
* hot.selectColumns(2, 5, { row: 2, col: 3 });
|
3903
3954
|
* // Select range of columns using column properties.
|
3904
3955
|
* hot.selectColumns('id', 'last_name');
|
3905
3956
|
* ```
|
@@ -3909,10 +3960,11 @@ function Core(rootElement, userSettings) {
|
|
3909
3960
|
* @function selectColumns
|
3910
3961
|
* @param {number} startColumn The visual column index from which the selection starts.
|
3911
3962
|
* @param {number} [endColumn=startColumn] The visual column index to which the selection finishes. If `endColumn`
|
3912
|
-
*
|
3913
|
-
* @param {number} [focusPosition=0] The argument allows changing the cell/header focus
|
3914
|
-
*
|
3915
|
-
*
|
3963
|
+
* is not defined the column defined by `startColumn` will be selected.
|
3964
|
+
* @param {number | { row: number, col: number } | CellCoords} [focusPosition=0] The argument allows changing the cell/header focus
|
3965
|
+
* position. The value can take visual row index from -N to N, where negative values point to the headers and positive
|
3966
|
+
* values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus
|
3967
|
+
* position horizontally.
|
3916
3968
|
* @returns {boolean} `true` if selection was successful, `false` otherwise.
|
3917
3969
|
*/
|
3918
3970
|
this.selectColumns = function (startColumn) {
|
@@ -3934,6 +3986,8 @@ function Core(rootElement, userSettings) {
|
|
3934
3986
|
* hot.selectRows(1, 2, -1);
|
3935
3987
|
* // Select range of rows using visual indexes and mark the second cell as highlighted.
|
3936
3988
|
* hot.selectRows(2, 1, 1);
|
3989
|
+
* // Select range of rows using visual indexes and move the focus position somewhere in the middle of the range.
|
3990
|
+
* hot.selectRows(2, 5, { row: 2, col: 3 });
|
3937
3991
|
* ```
|
3938
3992
|
*
|
3939
3993
|
* @memberof Core#
|
@@ -3941,10 +3995,11 @@ function Core(rootElement, userSettings) {
|
|
3941
3995
|
* @function selectRows
|
3942
3996
|
* @param {number} startRow The visual row index from which the selection starts.
|
3943
3997
|
* @param {number} [endRow=startRow] The visual row index to which the selection finishes. If `endRow`
|
3944
|
-
*
|
3945
|
-
* @param {number} [focusPosition=0] The argument allows changing the cell/header focus
|
3946
|
-
*
|
3947
|
-
*
|
3998
|
+
* is not defined the row defined by `startRow` will be selected.
|
3999
|
+
* @param {number | { row: number, col: number } | CellCoords} [focusPosition=0] The argument allows changing the cell/header focus
|
4000
|
+
* position. The value can take visual row index from -N to N, where negative values point to the headers and positive
|
4001
|
+
* values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus
|
4002
|
+
* position vertically.
|
3948
4003
|
* @returns {boolean} `true` if selection was successful, `false` otherwise.
|
3949
4004
|
*/
|
3950
4005
|
this.selectRows = function (startRow) {
|
package/core.mjs
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
import "core-js/modules/es.array.push.js";
|
2
1
|
import "core-js/modules/es.error.cause.js";
|
2
|
+
import "core-js/modules/es.array.push.js";
|
3
3
|
import "core-js/modules/web.immediate.js";
|
4
4
|
import { addClass, empty, observeVisibilityChangeOnce, removeClass } from "./helpers/dom/element.mjs";
|
5
5
|
import { isFunction } from "./helpers/function.mjs";
|
@@ -63,8 +63,8 @@ const deprecationWarns = new Set();
|
|
63
63
|
*
|
64
64
|
* ::: only-for react
|
65
65
|
* To use these methods, associate a Handsontable instance with your instance
|
66
|
-
* of the [`HotTable` component](@/guides/getting-started/installation.md#_4-use-the-hottable-component),
|
67
|
-
* by using React's `ref` feature (read more on the [Instance methods](@/guides/getting-started/react-methods.md) page).
|
66
|
+
* of the [`HotTable` component](@/guides/getting-started/installation/installation.md#_4-use-the-hottable-component),
|
67
|
+
* by using React's `ref` feature (read more on the [Instance methods](@/guides/getting-started/react-methods/react-methods.md) page).
|
68
68
|
* :::
|
69
69
|
*
|
70
70
|
* ## How to call a method
|
@@ -268,6 +268,26 @@ export default function Core(rootElement, userSettings) {
|
|
268
268
|
renderableRow >= 0 ? instance.rowIndexMapper.getVisualFromRenderableIndex(renderableRow) : renderableRow, renderableColumn >= 0 ? instance.columnIndexMapper.getVisualFromRenderableIndex(renderableColumn) : renderableColumn // eslint-disable-line max-len
|
269
269
|
);
|
270
270
|
};
|
271
|
+
const findFirstNonHiddenRenderableRow = (visualRowFrom, visualRowTo) => {
|
272
|
+
const dir = visualRowTo > visualRowFrom ? 1 : -1;
|
273
|
+
const minIndex = Math.min(visualRowFrom, visualRowTo);
|
274
|
+
const maxIndex = Math.max(visualRowFrom, visualRowTo);
|
275
|
+
const rowIndex = instance.rowIndexMapper.getNearestNotHiddenIndex(visualRowFrom, dir);
|
276
|
+
if (rowIndex === null || dir === 1 && rowIndex > maxIndex || dir === -1 && rowIndex < minIndex) {
|
277
|
+
return null;
|
278
|
+
}
|
279
|
+
return rowIndex >= 0 ? instance.rowIndexMapper.getRenderableFromVisualIndex(rowIndex) : rowIndex;
|
280
|
+
};
|
281
|
+
const findFirstNonHiddenRenderableColumn = (visualColumnFrom, visualColumnTo) => {
|
282
|
+
const dir = visualColumnTo > visualColumnFrom ? 1 : -1;
|
283
|
+
const minIndex = Math.min(visualColumnFrom, visualColumnTo);
|
284
|
+
const maxIndex = Math.max(visualColumnFrom, visualColumnTo);
|
285
|
+
const columnIndex = instance.columnIndexMapper.getNearestNotHiddenIndex(visualColumnFrom, dir);
|
286
|
+
if (columnIndex === null || dir === 1 && columnIndex > maxIndex || dir === -1 && columnIndex < minIndex) {
|
287
|
+
return null;
|
288
|
+
}
|
289
|
+
return columnIndex >= 0 ? instance.columnIndexMapper.getRenderableFromVisualIndex(columnIndex) : columnIndex;
|
290
|
+
};
|
271
291
|
let selection = new Selection(tableMeta, {
|
272
292
|
rowIndexMapper: instance.rowIndexMapper,
|
273
293
|
columnIndexMapper: instance.columnIndexMapper,
|
@@ -279,11 +299,19 @@ export default function Core(rootElement, userSettings) {
|
|
279
299
|
countRenderableRows: () => this.view.countRenderableRows(),
|
280
300
|
countRowHeaders: () => this.countRowHeaders(),
|
281
301
|
countColHeaders: () => this.countColHeaders(),
|
302
|
+
countRenderableRowsInRange: function () {
|
303
|
+
return _this.view.countRenderableRowsInRange(...arguments);
|
304
|
+
},
|
305
|
+
countRenderableColumnsInRange: function () {
|
306
|
+
return _this.view.countRenderableColumnsInRange(...arguments);
|
307
|
+
},
|
282
308
|
getShortcutManager: () => instance.getShortcutManager(),
|
283
309
|
createCellCoords: (row, column) => instance._createCellCoords(row, column),
|
284
310
|
createCellRange: (highlight, from, to) => instance._createCellRange(highlight, from, to),
|
285
311
|
visualToRenderableCoords,
|
286
312
|
renderableToVisualCoords,
|
313
|
+
findFirstNonHiddenRenderableRow,
|
314
|
+
findFirstNonHiddenRenderableColumn,
|
287
315
|
isDisabledCellSelection: (visualRow, visualColumn) => {
|
288
316
|
if (visualRow < 0 || visualColumn < 0) {
|
289
317
|
return instance.getSettings().disableVisualSelection;
|
@@ -334,6 +362,17 @@ export default function Core(rootElement, userSettings) {
|
|
334
362
|
}
|
335
363
|
this._refreshBorders(null);
|
336
364
|
});
|
365
|
+
this.selection.addLocalHook('beforeSetFocus', cellCoords => {
|
366
|
+
this.runHooks('beforeSelectionFocusSet', cellCoords.row, cellCoords.col);
|
367
|
+
});
|
368
|
+
this.selection.addLocalHook('afterSetFocus', cellCoords => {
|
369
|
+
const preventScrolling = createObjectPropListener(false);
|
370
|
+
this.runHooks('afterSelectionFocusSet', cellCoords.row, cellCoords.col, preventScrolling);
|
371
|
+
if (!preventScrolling.isTouched() || preventScrolling.isTouched() && !preventScrolling.value) {
|
372
|
+
viewportScroller.scrollTo(cellCoords);
|
373
|
+
}
|
374
|
+
this._refreshBorders(null);
|
375
|
+
});
|
337
376
|
this.selection.addLocalHook('afterSelectionFinished', cellRanges => {
|
338
377
|
const selectionLayerLevel = cellRanges.length - 1;
|
339
378
|
const {
|
@@ -400,25 +439,35 @@ export default function Core(rootElement, userSettings) {
|
|
400
439
|
args[_key9] = arguments[_key9];
|
401
440
|
}
|
402
441
|
return _this.runHooks('afterModifyTransformStart', ...args);
|
403
|
-
}).addLocalHook('
|
442
|
+
}).addLocalHook('beforeModifyTransformFocus', function () {
|
404
443
|
for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
|
405
444
|
args[_key10] = arguments[_key10];
|
406
445
|
}
|
407
|
-
return _this.runHooks('
|
408
|
-
}).addLocalHook('
|
446
|
+
return _this.runHooks('modifyTransformFocus', ...args);
|
447
|
+
}).addLocalHook('afterModifyTransformFocus', function () {
|
409
448
|
for (var _len11 = arguments.length, args = new Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
|
410
449
|
args[_key11] = arguments[_key11];
|
411
450
|
}
|
412
|
-
return _this.runHooks('
|
413
|
-
}).addLocalHook('
|
451
|
+
return _this.runHooks('afterModifyTransformFocus', ...args);
|
452
|
+
}).addLocalHook('beforeModifyTransformEnd', function () {
|
414
453
|
for (var _len12 = arguments.length, args = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {
|
415
454
|
args[_key12] = arguments[_key12];
|
416
455
|
}
|
417
|
-
return _this.runHooks('
|
418
|
-
}).addLocalHook('
|
456
|
+
return _this.runHooks('modifyTransformEnd', ...args);
|
457
|
+
}).addLocalHook('afterModifyTransformEnd', function () {
|
419
458
|
for (var _len13 = arguments.length, args = new Array(_len13), _key13 = 0; _key13 < _len13; _key13++) {
|
420
459
|
args[_key13] = arguments[_key13];
|
421
460
|
}
|
461
|
+
return _this.runHooks('afterModifyTransformEnd', ...args);
|
462
|
+
}).addLocalHook('beforeRowWrap', function () {
|
463
|
+
for (var _len14 = arguments.length, args = new Array(_len14), _key14 = 0; _key14 < _len14; _key14++) {
|
464
|
+
args[_key14] = arguments[_key14];
|
465
|
+
}
|
466
|
+
return _this.runHooks('beforeRowWrap', ...args);
|
467
|
+
}).addLocalHook('beforeColumnWrap', function () {
|
468
|
+
for (var _len15 = arguments.length, args = new Array(_len15), _key15 = 0; _key15 < _len15; _key15++) {
|
469
|
+
args[_key15] = arguments[_key15];
|
470
|
+
}
|
422
471
|
return _this.runHooks('beforeColumnWrap', ...args);
|
423
472
|
}).addLocalHook('insertRowRequire', totalRows => this.alter('insert_row_above', totalRows, 1, 'auto')).addLocalHook('insertColRequire', totalCols => this.alter('insert_col_start', totalCols, 1, 'auto'));
|
424
473
|
grid = {
|
@@ -1556,8 +1605,8 @@ export default function Core(rootElement, userSettings) {
|
|
1556
1605
|
* @returns {Array} Returns removed portion of columns.
|
1557
1606
|
*/
|
1558
1607
|
this.spliceCol = function (column, index, amount) {
|
1559
|
-
for (var
|
1560
|
-
elements[
|
1608
|
+
for (var _len16 = arguments.length, elements = new Array(_len16 > 3 ? _len16 - 3 : 0), _key16 = 3; _key16 < _len16; _key16++) {
|
1609
|
+
elements[_key16 - 3] = arguments[_key16];
|
1561
1610
|
}
|
1562
1611
|
return datamap.spliceCol(column, index, amount, ...elements);
|
1563
1612
|
};
|
@@ -1574,8 +1623,8 @@ export default function Core(rootElement, userSettings) {
|
|
1574
1623
|
* @returns {Array} Returns removed portion of rows.
|
1575
1624
|
*/
|
1576
1625
|
this.spliceRow = function (row, index, amount) {
|
1577
|
-
for (var
|
1578
|
-
elements[
|
1626
|
+
for (var _len17 = arguments.length, elements = new Array(_len17 > 3 ? _len17 - 3 : 0), _key17 = 3; _key17 < _len17; _key17++) {
|
1627
|
+
elements[_key17 - 3] = arguments[_key17];
|
1579
1628
|
}
|
1580
1629
|
return datamap.spliceRow(row, index, amount, ...elements);
|
1581
1630
|
};
|
@@ -2040,20 +2089,20 @@ export default function Core(rootElement, userSettings) {
|
|
2040
2089
|
* The `updateData()` method replaces Handsontable's [`data`](@/api/options.md#data) with a new dataset.
|
2041
2090
|
*
|
2042
2091
|
* The `updateData()` method:
|
2043
|
-
* - Keeps cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)
|
2092
|
+
* - Keeps cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)
|
2044
2093
|
* - Keeps rows' states (e.g. row order)
|
2045
2094
|
* - Keeps columns' states (e.g. column order)
|
2046
2095
|
*
|
2047
2096
|
* To replace Handsontable's [`data`](@/api/options.md#data) and reset states, use the [`loadData()`](#loaddata) method.
|
2048
2097
|
*
|
2049
2098
|
* Read more:
|
2050
|
-
* - [Binding to data](@/guides/getting-started/binding-to-data.md)
|
2051
|
-
* - [Saving data](@/guides/getting-started/saving-data.md)
|
2099
|
+
* - [Binding to data](@/guides/getting-started/binding-to-data/binding-to-data.md)
|
2100
|
+
* - [Saving data](@/guides/getting-started/saving-data/saving-data.md)
|
2052
2101
|
*
|
2053
2102
|
* @memberof Core#
|
2054
2103
|
* @function updateData
|
2055
2104
|
* @since 11.1.0
|
2056
|
-
* @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data.md#array-of-objects), that contains Handsontable's data
|
2105
|
+
* @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data
|
2057
2106
|
* @param {string} [source] The source of the `updateData()` call
|
2058
2107
|
* @fires Hooks#beforeUpdateData
|
2059
2108
|
* @fires Hooks#afterUpdateData
|
@@ -2082,19 +2131,19 @@ export default function Core(rootElement, userSettings) {
|
|
2082
2131
|
* The `loadData()` method replaces Handsontable's [`data`](@/api/options.md#data) with a new dataset.
|
2083
2132
|
*
|
2084
2133
|
* Additionally, the `loadData()` method:
|
2085
|
-
* - Resets cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)
|
2134
|
+
* - Resets cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)
|
2086
2135
|
* - Resets rows' states (e.g. row order)
|
2087
2136
|
* - Resets columns' states (e.g. column order)
|
2088
2137
|
*
|
2089
2138
|
* To replace Handsontable's [`data`](@/api/options.md#data) without resetting states, use the [`updateData()`](#updatedata) method.
|
2090
2139
|
*
|
2091
2140
|
* Read more:
|
2092
|
-
* - [Binding to data](@/guides/getting-started/binding-to-data.md)
|
2093
|
-
* - [Saving data](@/guides/getting-started/saving-data.md)
|
2141
|
+
* - [Binding to data](@/guides/getting-started/binding-to-data/binding-to-data.md)
|
2142
|
+
* - [Saving data](@/guides/getting-started/saving-data/saving-data.md)
|
2094
2143
|
*
|
2095
2144
|
* @memberof Core#
|
2096
2145
|
* @function loadData
|
2097
|
-
* @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data.md#array-of-objects), that contains Handsontable's data
|
2146
|
+
* @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data
|
2098
2147
|
* @param {string} [source] The source of the `loadData()` call
|
2099
2148
|
* @fires Hooks#beforeLoadData
|
2100
2149
|
* @fires Hooks#afterLoadData
|
@@ -2454,7 +2503,7 @@ export default function Core(rootElement, userSettings) {
|
|
2454
2503
|
*
|
2455
2504
|
* ::: tip
|
2456
2505
|
* The `alter()` method works only when your [`data`](@/api/options.md#data)
|
2457
|
-
* is an [array of arrays](@/guides/getting-started/binding-to-data.md#array-of-arrays).
|
2506
|
+
* is an [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays).
|
2458
2507
|
* :::
|
2459
2508
|
*
|
2460
2509
|
* ```js
|
@@ -2748,7 +2797,7 @@ export default function Core(rootElement, userSettings) {
|
|
2748
2797
|
* sorted or trimmed only physical indexes are correct.
|
2749
2798
|
*
|
2750
2799
|
* __Note__: This method may return incorrect values for cells that contain
|
2751
|
-
* [formulas](@/guides/formulas/formula-calculation.md). This is because `getSourceData()`
|
2800
|
+
* [formulas](@/guides/formulas/formula-calculation/formula-calculation.md). This is because `getSourceData()`
|
2752
2801
|
* operates on source data ([physical indexes](@/api/indexMapper.md)),
|
2753
2802
|
* whereas formulas operate on visual data (visual indexes).
|
2754
2803
|
*
|
@@ -2972,8 +3021,8 @@ export default function Core(rootElement, userSettings) {
|
|
2972
3021
|
*/
|
2973
3022
|
this.spliceCellsMeta = function (visualIndex) {
|
2974
3023
|
let deleteAmount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
2975
|
-
for (var
|
2976
|
-
cellMetaRows[
|
3024
|
+
for (var _len18 = arguments.length, cellMetaRows = new Array(_len18 > 2 ? _len18 - 2 : 0), _key18 = 2; _key18 < _len18; _key18++) {
|
3025
|
+
cellMetaRows[_key18 - 2] = arguments[_key18];
|
2977
3026
|
}
|
2978
3027
|
if (cellMetaRows.length > 0 && !Array.isArray(cellMetaRows[0])) {
|
2979
3028
|
throw new Error('The 3rd argument (cellMetaRows) has to be passed as an array of cell meta objects array.');
|
@@ -3086,8 +3135,8 @@ export default function Core(rootElement, userSettings) {
|
|
3086
3135
|
};
|
3087
3136
|
|
3088
3137
|
/**
|
3089
|
-
* Checks if your [data format](@/guides/getting-started/binding-to-data.md#compatible-data-types)
|
3090
|
-
* and [configuration options](@/guides/getting-started/configuration-options.md)
|
3138
|
+
* Checks if your [data format](@/guides/getting-started/binding-to-data/binding-to-data.md#compatible-data-types)
|
3139
|
+
* and [configuration options](@/guides/getting-started/configuration-options/configuration-options.md)
|
3091
3140
|
* allow for changing the number of columns.
|
3092
3141
|
*
|
3093
3142
|
* Returns `false` when your data is an array of objects,
|
@@ -3176,10 +3225,10 @@ export default function Core(rootElement, userSettings) {
|
|
3176
3225
|
|
3177
3226
|
/**
|
3178
3227
|
* Validates every cell in the data set,
|
3179
|
-
* using a [validator function](@/guides/cell-functions/cell-validator.md) configured for each cell.
|
3228
|
+
* using a [validator function](@/guides/cell-functions/cell-validator/cell-validator.md) configured for each cell.
|
3180
3229
|
*
|
3181
|
-
* Doesn't validate cells that are currently [trimmed](@/guides/rows/row-trimming.md),
|
3182
|
-
* [hidden](@/guides/rows/row-hiding.md), or [filtered](@/guides/columns/column-filter.md),
|
3230
|
+
* Doesn't validate cells that are currently [trimmed](@/guides/rows/row-trimming/row-trimming.md),
|
3231
|
+
* [hidden](@/guides/rows/row-hiding/row-hiding.md), or [filtered](@/guides/columns/column-filter/column-filter.md),
|
3183
3232
|
* as such cells are not included in the data set until you bring them back again.
|
3184
3233
|
*
|
3185
3234
|
* After the validation, the `callback` function is fired, with the `valid` argument set to:
|
@@ -3367,18 +3416,18 @@ export default function Core(rootElement, userSettings) {
|
|
3367
3416
|
* Gets the values of column headers (if column headers are [enabled](@/api/options.md#colheaders)).
|
3368
3417
|
*
|
3369
3418
|
* To get an array with the values of all
|
3370
|
-
* [bottom-most](@/guides/cell-features/clipboard.md#copy-with-headers) column headers,
|
3419
|
+
* [bottom-most](@/guides/cell-features/clipboard/clipboard.md#copy-with-headers) column headers,
|
3371
3420
|
* call `getColHeader()` with no arguments.
|
3372
3421
|
*
|
3373
3422
|
* To get the value of the bottom-most header of a specific column, use the `column` parameter.
|
3374
3423
|
*
|
3375
|
-
* To get the value of a [specific-level](@/guides/columns/column-groups.md) header
|
3424
|
+
* To get the value of a [specific-level](@/guides/columns/column-groups/column-groups.md) header
|
3376
3425
|
* of a specific column, use the `column` and `headerLevel` parameters.
|
3377
3426
|
*
|
3378
3427
|
* Read more:
|
3379
|
-
* - [Guides: Column groups](@/guides/columns/column-groups.md)
|
3428
|
+
* - [Guides: Column groups](@/guides/columns/column-groups/column-groups.md)
|
3380
3429
|
* - [Options: `colHeaders`](@/api/options.md#colheaders)
|
3381
|
-
* - [Guides: Copy with headers](@/guides/cell-features/clipboard.md#copy-with-headers)
|
3430
|
+
* - [Guides: Copy with headers](@/guides/cell-features/clipboard/clipboard.md#copy-with-headers)
|
3382
3431
|
*
|
3383
3432
|
* ```js
|
3384
3433
|
* // get the contents of all bottom-most column headers
|
@@ -3895,6 +3944,8 @@ export default function Core(rootElement, userSettings) {
|
|
3895
3944
|
* hot.selectColumns(1, 2, -1);
|
3896
3945
|
* // Select range of columns using visual indexes and mark the second cell as highlighted.
|
3897
3946
|
* hot.selectColumns(2, 1, 1);
|
3947
|
+
* // Select range of columns using visual indexes and move the focus position somewhere in the middle of the range.
|
3948
|
+
* hot.selectColumns(2, 5, { row: 2, col: 3 });
|
3898
3949
|
* // Select range of columns using column properties.
|
3899
3950
|
* hot.selectColumns('id', 'last_name');
|
3900
3951
|
* ```
|
@@ -3904,10 +3955,11 @@ export default function Core(rootElement, userSettings) {
|
|
3904
3955
|
* @function selectColumns
|
3905
3956
|
* @param {number} startColumn The visual column index from which the selection starts.
|
3906
3957
|
* @param {number} [endColumn=startColumn] The visual column index to which the selection finishes. If `endColumn`
|
3907
|
-
*
|
3908
|
-
* @param {number} [focusPosition=0] The argument allows changing the cell/header focus
|
3909
|
-
*
|
3910
|
-
*
|
3958
|
+
* is not defined the column defined by `startColumn` will be selected.
|
3959
|
+
* @param {number | { row: number, col: number } | CellCoords} [focusPosition=0] The argument allows changing the cell/header focus
|
3960
|
+
* position. The value can take visual row index from -N to N, where negative values point to the headers and positive
|
3961
|
+
* values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus
|
3962
|
+
* position horizontally.
|
3911
3963
|
* @returns {boolean} `true` if selection was successful, `false` otherwise.
|
3912
3964
|
*/
|
3913
3965
|
this.selectColumns = function (startColumn) {
|
@@ -3929,6 +3981,8 @@ export default function Core(rootElement, userSettings) {
|
|
3929
3981
|
* hot.selectRows(1, 2, -1);
|
3930
3982
|
* // Select range of rows using visual indexes and mark the second cell as highlighted.
|
3931
3983
|
* hot.selectRows(2, 1, 1);
|
3984
|
+
* // Select range of rows using visual indexes and move the focus position somewhere in the middle of the range.
|
3985
|
+
* hot.selectRows(2, 5, { row: 2, col: 3 });
|
3932
3986
|
* ```
|
3933
3987
|
*
|
3934
3988
|
* @memberof Core#
|
@@ -3936,10 +3990,11 @@ export default function Core(rootElement, userSettings) {
|
|
3936
3990
|
* @function selectRows
|
3937
3991
|
* @param {number} startRow The visual row index from which the selection starts.
|
3938
3992
|
* @param {number} [endRow=startRow] The visual row index to which the selection finishes. If `endRow`
|
3939
|
-
*
|
3940
|
-
* @param {number} [focusPosition=0] The argument allows changing the cell/header focus
|
3941
|
-
*
|
3942
|
-
*
|
3993
|
+
* is not defined the row defined by `startRow` will be selected.
|
3994
|
+
* @param {number | { row: number, col: number } | CellCoords} [focusPosition=0] The argument allows changing the cell/header focus
|
3995
|
+
* position. The value can take visual row index from -N to N, where negative values point to the headers and positive
|
3996
|
+
* values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus
|
3997
|
+
* position vertically.
|
3943
3998
|
* @returns {boolean} `true` if selection was successful, `false` otherwise.
|
3944
3999
|
*/
|
3945
4000
|
this.selectRows = function (startRow) {
|