handsontable 14.2.0 → 14.3.0-next-3fa6b18-20240410
Sign up to get free protection for your applications and to get access to all the features.
- 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) {
|