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/focusManager.js
CHANGED
@@ -8,12 +8,9 @@ var _function = require("./helpers/function");
|
|
8
8
|
function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
|
9
9
|
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
10
10
|
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
11
|
-
function
|
12
|
-
function
|
13
|
-
function
|
14
|
-
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
15
|
-
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
16
|
-
function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
|
11
|
+
function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
|
12
|
+
function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
|
13
|
+
function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
|
17
14
|
/**
|
18
15
|
* Possible focus modes.
|
19
16
|
* - CELL - The browser's focus stays on the lastly selected cell element.
|
@@ -35,40 +32,20 @@ var _focusMode = /*#__PURE__*/new WeakMap();
|
|
35
32
|
var _refocusDelay = /*#__PURE__*/new WeakMap();
|
36
33
|
var _refocusElementGetter = /*#__PURE__*/new WeakMap();
|
37
34
|
var _debouncedSelect = /*#__PURE__*/new WeakMap();
|
38
|
-
var
|
39
|
-
var _focusCell = /*#__PURE__*/new WeakSet();
|
40
|
-
var _focusEditorElement = /*#__PURE__*/new WeakSet();
|
41
|
-
var _onUpdateSettings = /*#__PURE__*/new WeakSet();
|
35
|
+
var _FocusManager_brand = /*#__PURE__*/new WeakSet();
|
42
36
|
class FocusManager {
|
43
37
|
constructor(hotInstance) {
|
44
38
|
var _this = this;
|
45
|
-
/**
|
46
|
-
* Update the manager configuration after calling `updateSettings`.
|
47
|
-
*
|
48
|
-
* @param {object} newSettings The new settings passed to the `updateSettings` method.
|
49
|
-
*/
|
50
|
-
_classPrivateMethodInitSpec(this, _onUpdateSettings);
|
51
|
-
/**
|
52
|
-
* Manage the browser's focus after cell selection end.
|
53
|
-
*/
|
54
|
-
_classPrivateMethodInitSpec(this, _focusEditorElement);
|
55
|
-
/**
|
56
|
-
* Manage the browser's focus after each cell selection change.
|
57
|
-
*/
|
58
|
-
_classPrivateMethodInitSpec(this, _focusCell);
|
59
39
|
/**
|
60
40
|
* Get and return the currently selected and highlighted cell/header element.
|
61
41
|
*
|
62
42
|
* @param {Function} callback Callback function to be called after the cell element is retrieved.
|
63
43
|
*/
|
64
|
-
_classPrivateMethodInitSpec(this,
|
44
|
+
_classPrivateMethodInitSpec(this, _FocusManager_brand);
|
65
45
|
/**
|
66
46
|
* The Handsontable instance.
|
67
47
|
*/
|
68
|
-
_classPrivateFieldInitSpec(this, _hot,
|
69
|
-
writable: true,
|
70
|
-
value: void 0
|
71
|
-
});
|
48
|
+
_classPrivateFieldInitSpec(this, _hot, void 0);
|
72
49
|
/**
|
73
50
|
* The currently enabled focus mode.
|
74
51
|
* Can be either:
|
@@ -79,59 +56,53 @@ class FocusManager {
|
|
79
56
|
*
|
80
57
|
* @type {'cell' | 'mixed'}
|
81
58
|
*/
|
82
|
-
_classPrivateFieldInitSpec(this, _focusMode,
|
83
|
-
writable: true,
|
84
|
-
value: void 0
|
85
|
-
});
|
59
|
+
_classPrivateFieldInitSpec(this, _focusMode, void 0);
|
86
60
|
/**
|
87
61
|
* The delay after which the focus switches from the lastly selected cell to the active editor's `TEXTAREA`
|
88
62
|
* element if the focus mode is set to 'mixed'.
|
89
63
|
*
|
90
64
|
* @type {number}
|
91
65
|
*/
|
92
|
-
_classPrivateFieldInitSpec(this, _refocusDelay,
|
93
|
-
writable: true,
|
94
|
-
value: 50
|
95
|
-
});
|
66
|
+
_classPrivateFieldInitSpec(this, _refocusDelay, 50);
|
96
67
|
/**
|
97
68
|
* Getter function for the element to be used when refocusing the browser after a delay. If `null`, the active
|
98
69
|
* editor's `TEXTAREA` element will be used.
|
99
70
|
*
|
100
71
|
* @type {null|Function}
|
101
72
|
*/
|
102
|
-
_classPrivateFieldInitSpec(this, _refocusElementGetter,
|
103
|
-
writable: true,
|
104
|
-
value: null
|
105
|
-
});
|
73
|
+
_classPrivateFieldInitSpec(this, _refocusElementGetter, null);
|
106
74
|
/**
|
107
75
|
* Map of the debounced `select` functions.
|
108
76
|
*
|
109
77
|
* @type {Map<number, Function>}
|
110
78
|
*/
|
111
|
-
_classPrivateFieldInitSpec(this, _debouncedSelect,
|
112
|
-
writable: true,
|
113
|
-
value: new Map()
|
114
|
-
});
|
79
|
+
_classPrivateFieldInitSpec(this, _debouncedSelect, new Map());
|
115
80
|
const hotSettings = hotInstance.getSettings();
|
116
|
-
_classPrivateFieldSet(
|
117
|
-
_classPrivateFieldSet(
|
118
|
-
_classPrivateFieldGet(
|
81
|
+
_classPrivateFieldSet(_hot, this, hotInstance);
|
82
|
+
_classPrivateFieldSet(_focusMode, this, hotSettings.imeFastEdit ? FOCUS_MODES.MIXED : FOCUS_MODES.CELL);
|
83
|
+
_classPrivateFieldGet(_hot, this).addHook('afterUpdateSettings', function () {
|
119
84
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
120
85
|
args[_key] = arguments[_key];
|
121
86
|
}
|
122
|
-
return
|
87
|
+
return _assertClassBrand(_FocusManager_brand, _this, _onUpdateSettings).call(_this, ...args);
|
123
88
|
});
|
124
|
-
_classPrivateFieldGet(
|
89
|
+
_classPrivateFieldGet(_hot, this).addHook('afterSelection', function () {
|
125
90
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
126
91
|
args[_key2] = arguments[_key2];
|
127
92
|
}
|
128
|
-
return
|
93
|
+
return _assertClassBrand(_FocusManager_brand, _this, _focusCell).call(_this, ...args);
|
129
94
|
});
|
130
|
-
_classPrivateFieldGet(
|
95
|
+
_classPrivateFieldGet(_hot, this).addHook('afterSelectionFocusSet', function () {
|
131
96
|
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
132
97
|
args[_key3] = arguments[_key3];
|
133
98
|
}
|
134
|
-
return
|
99
|
+
return _assertClassBrand(_FocusManager_brand, _this, _focusCell).call(_this, ...args);
|
100
|
+
});
|
101
|
+
_classPrivateFieldGet(_hot, this).addHook('afterSelectionEnd', function () {
|
102
|
+
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
103
|
+
args[_key4] = arguments[_key4];
|
104
|
+
}
|
105
|
+
return _assertClassBrand(_FocusManager_brand, _this, _focusEditorElement).call(_this, ...args);
|
135
106
|
});
|
136
107
|
}
|
137
108
|
|
@@ -141,7 +112,7 @@ class FocusManager {
|
|
141
112
|
* @returns {'cell' | 'mixed'}
|
142
113
|
*/
|
143
114
|
getFocusMode() {
|
144
|
-
return _classPrivateFieldGet(
|
115
|
+
return _classPrivateFieldGet(_focusMode, this);
|
145
116
|
}
|
146
117
|
|
147
118
|
/**
|
@@ -151,7 +122,7 @@ class FocusManager {
|
|
151
122
|
*/
|
152
123
|
setFocusMode(focusMode) {
|
153
124
|
if (Object.values(FOCUS_MODES).includes(focusMode)) {
|
154
|
-
_classPrivateFieldSet(
|
125
|
+
_classPrivateFieldSet(_focusMode, this, focusMode);
|
155
126
|
} else {
|
156
127
|
(0, _console.warn)(`"${focusMode}" is not a valid focus mode.`);
|
157
128
|
}
|
@@ -164,7 +135,7 @@ class FocusManager {
|
|
164
135
|
* @returns {number} Delay in milliseconds.
|
165
136
|
*/
|
166
137
|
getRefocusDelay() {
|
167
|
-
return _classPrivateFieldGet(
|
138
|
+
return _classPrivateFieldGet(_refocusDelay, this);
|
168
139
|
}
|
169
140
|
|
170
141
|
/**
|
@@ -174,7 +145,7 @@ class FocusManager {
|
|
174
145
|
* @param {number} delay Delay in milliseconds.
|
175
146
|
*/
|
176
147
|
setRefocusDelay(delay) {
|
177
|
-
_classPrivateFieldSet(
|
148
|
+
_classPrivateFieldSet(_refocusDelay, this, delay);
|
178
149
|
}
|
179
150
|
|
180
151
|
/**
|
@@ -183,7 +154,7 @@ class FocusManager {
|
|
183
154
|
* @param {Function} getRefocusElementFunction The refocus element getter.
|
184
155
|
*/
|
185
156
|
setRefocusElementGetter(getRefocusElementFunction) {
|
186
|
-
_classPrivateFieldSet(
|
157
|
+
_classPrivateFieldSet(_refocusElementGetter, this, getRefocusElementFunction);
|
187
158
|
}
|
188
159
|
|
189
160
|
/**
|
@@ -192,11 +163,11 @@ class FocusManager {
|
|
192
163
|
* @returns {HTMLTextAreaElement|HTMLElement|undefined}
|
193
164
|
*/
|
194
165
|
getRefocusElement() {
|
195
|
-
if (typeof _classPrivateFieldGet(
|
196
|
-
return _classPrivateFieldGet(
|
166
|
+
if (typeof _classPrivateFieldGet(_refocusElementGetter, this) === 'function') {
|
167
|
+
return _classPrivateFieldGet(_refocusElementGetter, this).call(this);
|
197
168
|
} else {
|
198
169
|
var _classPrivateFieldGet2;
|
199
|
-
return (_classPrivateFieldGet2 = _classPrivateFieldGet(
|
170
|
+
return (_classPrivateFieldGet2 = _classPrivateFieldGet(_hot, this).getActiveEditor()) === null || _classPrivateFieldGet2 === void 0 ? void 0 : _classPrivateFieldGet2.TEXTAREA;
|
200
171
|
}
|
201
172
|
}
|
202
173
|
|
@@ -208,15 +179,15 @@ class FocusManager {
|
|
208
179
|
focusOnHighlightedCell(selectedCell) {
|
209
180
|
const focusElement = element => {
|
210
181
|
var _classPrivateFieldGet3, _classPrivateFieldGet4;
|
211
|
-
const currentHighlightCoords = (_classPrivateFieldGet3 = _classPrivateFieldGet(
|
182
|
+
const currentHighlightCoords = (_classPrivateFieldGet3 = _classPrivateFieldGet(_hot, this).getSelectedRangeLast()) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.highlight;
|
212
183
|
if (!currentHighlightCoords) {
|
213
184
|
return;
|
214
185
|
}
|
215
|
-
let elementToBeFocused = _classPrivateFieldGet(
|
186
|
+
let elementToBeFocused = _classPrivateFieldGet(_hot, this).runHooks('modifyFocusedElement', currentHighlightCoords.row, currentHighlightCoords.col, element);
|
216
187
|
if (!(elementToBeFocused instanceof HTMLElement)) {
|
217
188
|
elementToBeFocused = element;
|
218
189
|
}
|
219
|
-
if (elementToBeFocused && !((_classPrivateFieldGet4 = _classPrivateFieldGet(
|
190
|
+
if (elementToBeFocused && !((_classPrivateFieldGet4 = _classPrivateFieldGet(_hot, this).getActiveEditor()) !== null && _classPrivateFieldGet4 !== void 0 && _classPrivateFieldGet4.isOpened())) {
|
220
191
|
elementToBeFocused.focus({
|
221
192
|
preventScroll: true
|
222
193
|
});
|
@@ -225,7 +196,7 @@ class FocusManager {
|
|
225
196
|
if (selectedCell) {
|
226
197
|
focusElement(selectedCell);
|
227
198
|
} else {
|
228
|
-
|
199
|
+
_assertClassBrand(_FocusManager_brand, this, _getSelectedCell).call(this, element => focusElement(element));
|
229
200
|
}
|
230
201
|
}
|
231
202
|
|
@@ -237,42 +208,45 @@ class FocusManager {
|
|
237
208
|
*/
|
238
209
|
refocusToEditorTextarea() {
|
239
210
|
var _classPrivateFieldGet5;
|
240
|
-
let delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _classPrivateFieldGet(
|
211
|
+
let delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _classPrivateFieldGet(_refocusDelay, this);
|
241
212
|
const refocusElement = this.getRefocusElement();
|
242
213
|
|
243
214
|
// Re-focus on the editor's `TEXTAREA` element (or a predefined element) if the `imeFastEdit` option is enabled.
|
244
|
-
if (_classPrivateFieldGet(
|
245
|
-
if (!_classPrivateFieldGet(
|
246
|
-
_classPrivateFieldGet(
|
215
|
+
if (_classPrivateFieldGet(_hot, this).getSettings().imeFastEdit && !((_classPrivateFieldGet5 = _classPrivateFieldGet(_hot, this).getActiveEditor()) !== null && _classPrivateFieldGet5 !== void 0 && _classPrivateFieldGet5.isOpened()) && !!refocusElement) {
|
216
|
+
if (!_classPrivateFieldGet(_debouncedSelect, this).has(delay)) {
|
217
|
+
_classPrivateFieldGet(_debouncedSelect, this).set(delay, (0, _function.debounce)(() => {
|
247
218
|
refocusElement.select();
|
248
219
|
}, delay));
|
249
220
|
}
|
250
|
-
_classPrivateFieldGet(
|
221
|
+
_classPrivateFieldGet(_debouncedSelect, this).get(delay)();
|
251
222
|
}
|
252
223
|
}
|
253
224
|
}
|
254
225
|
exports.FocusManager = FocusManager;
|
255
|
-
function
|
226
|
+
function _getSelectedCell(callback) {
|
256
227
|
var _classPrivateFieldGet6;
|
257
|
-
const highlight = (_classPrivateFieldGet6 = _classPrivateFieldGet(
|
258
|
-
if (!highlight || !_classPrivateFieldGet(
|
228
|
+
const highlight = (_classPrivateFieldGet6 = _classPrivateFieldGet(_hot, this).getSelectedRangeLast()) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.highlight;
|
229
|
+
if (!highlight || !_classPrivateFieldGet(_hot, this).selection.isCellVisible(highlight)) {
|
259
230
|
callback(null);
|
260
231
|
return;
|
261
232
|
}
|
262
|
-
const cell = _classPrivateFieldGet(
|
233
|
+
const cell = _classPrivateFieldGet(_hot, this).getCell(highlight.row, highlight.col, true);
|
263
234
|
if (cell === null) {
|
264
|
-
_classPrivateFieldGet(
|
265
|
-
callback(_classPrivateFieldGet(
|
235
|
+
_classPrivateFieldGet(_hot, this).addHookOnce('afterScroll', () => {
|
236
|
+
callback(_classPrivateFieldGet(_hot, this).getCell(highlight.row, highlight.col, true));
|
266
237
|
});
|
267
238
|
} else {
|
268
239
|
callback(cell);
|
269
240
|
}
|
270
241
|
}
|
271
|
-
|
272
|
-
|
242
|
+
/**
|
243
|
+
* Manage the browser's focus after each cell selection change.
|
244
|
+
*/
|
245
|
+
function _focusCell() {
|
246
|
+
_assertClassBrand(_FocusManager_brand, this, _getSelectedCell).call(this, selectedCell => {
|
273
247
|
const {
|
274
248
|
activeElement
|
275
|
-
} = _classPrivateFieldGet(
|
249
|
+
} = _classPrivateFieldGet(_hot, this).rootDocument;
|
276
250
|
|
277
251
|
// Blurring the `activeElement` removes the unwanted border around the focusable element (#6877)
|
278
252
|
// and resets the `document.activeElement` property. The blurring should happen only when the
|
@@ -284,14 +258,22 @@ function _focusCell2() {
|
|
284
258
|
this.focusOnHighlightedCell(selectedCell);
|
285
259
|
});
|
286
260
|
}
|
287
|
-
|
288
|
-
|
261
|
+
/**
|
262
|
+
* Manage the browser's focus after cell selection end.
|
263
|
+
*/
|
264
|
+
function _focusEditorElement() {
|
265
|
+
_assertClassBrand(_FocusManager_brand, this, _getSelectedCell).call(this, selectedCell => {
|
289
266
|
if (this.getFocusMode() === FOCUS_MODES.MIXED && selectedCell.nodeName === 'TD') {
|
290
267
|
this.refocusToEditorTextarea();
|
291
268
|
}
|
292
269
|
});
|
293
270
|
}
|
294
|
-
|
271
|
+
/**
|
272
|
+
* Update the manager configuration after calling `updateSettings`.
|
273
|
+
*
|
274
|
+
* @param {object} newSettings The new settings passed to the `updateSettings` method.
|
275
|
+
*/
|
276
|
+
function _onUpdateSettings(newSettings) {
|
295
277
|
if (newSettings.imeFastEdit && this.getFocusMode() !== FOCUS_MODES.MIXED) {
|
296
278
|
this.setFocusMode(FOCUS_MODES.MIXED);
|
297
279
|
} else if (!newSettings.imeFastEdit && this.getFocusMode() !== FOCUS_MODES.CELL) {
|
package/focusManager.mjs
CHANGED
@@ -2,12 +2,9 @@ import "core-js/modules/es.error.cause.js";
|
|
2
2
|
function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
|
3
3
|
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
4
4
|
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
5
|
-
function
|
6
|
-
function
|
7
|
-
function
|
8
|
-
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
9
|
-
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
10
|
-
function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
|
5
|
+
function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
|
6
|
+
function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
|
7
|
+
function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
|
11
8
|
import { warn } from "./helpers/console.mjs";
|
12
9
|
import { isOutsideInput } from "./helpers/dom/element.mjs";
|
13
10
|
import { debounce } from "./helpers/function.mjs";
|
@@ -32,40 +29,20 @@ var _focusMode = /*#__PURE__*/new WeakMap();
|
|
32
29
|
var _refocusDelay = /*#__PURE__*/new WeakMap();
|
33
30
|
var _refocusElementGetter = /*#__PURE__*/new WeakMap();
|
34
31
|
var _debouncedSelect = /*#__PURE__*/new WeakMap();
|
35
|
-
var
|
36
|
-
var _focusCell = /*#__PURE__*/new WeakSet();
|
37
|
-
var _focusEditorElement = /*#__PURE__*/new WeakSet();
|
38
|
-
var _onUpdateSettings = /*#__PURE__*/new WeakSet();
|
32
|
+
var _FocusManager_brand = /*#__PURE__*/new WeakSet();
|
39
33
|
export class FocusManager {
|
40
34
|
constructor(hotInstance) {
|
41
35
|
var _this = this;
|
42
|
-
/**
|
43
|
-
* Update the manager configuration after calling `updateSettings`.
|
44
|
-
*
|
45
|
-
* @param {object} newSettings The new settings passed to the `updateSettings` method.
|
46
|
-
*/
|
47
|
-
_classPrivateMethodInitSpec(this, _onUpdateSettings);
|
48
|
-
/**
|
49
|
-
* Manage the browser's focus after cell selection end.
|
50
|
-
*/
|
51
|
-
_classPrivateMethodInitSpec(this, _focusEditorElement);
|
52
|
-
/**
|
53
|
-
* Manage the browser's focus after each cell selection change.
|
54
|
-
*/
|
55
|
-
_classPrivateMethodInitSpec(this, _focusCell);
|
56
36
|
/**
|
57
37
|
* Get and return the currently selected and highlighted cell/header element.
|
58
38
|
*
|
59
39
|
* @param {Function} callback Callback function to be called after the cell element is retrieved.
|
60
40
|
*/
|
61
|
-
_classPrivateMethodInitSpec(this,
|
41
|
+
_classPrivateMethodInitSpec(this, _FocusManager_brand);
|
62
42
|
/**
|
63
43
|
* The Handsontable instance.
|
64
44
|
*/
|
65
|
-
_classPrivateFieldInitSpec(this, _hot,
|
66
|
-
writable: true,
|
67
|
-
value: void 0
|
68
|
-
});
|
45
|
+
_classPrivateFieldInitSpec(this, _hot, void 0);
|
69
46
|
/**
|
70
47
|
* The currently enabled focus mode.
|
71
48
|
* Can be either:
|
@@ -76,59 +53,53 @@ export class FocusManager {
|
|
76
53
|
*
|
77
54
|
* @type {'cell' | 'mixed'}
|
78
55
|
*/
|
79
|
-
_classPrivateFieldInitSpec(this, _focusMode,
|
80
|
-
writable: true,
|
81
|
-
value: void 0
|
82
|
-
});
|
56
|
+
_classPrivateFieldInitSpec(this, _focusMode, void 0);
|
83
57
|
/**
|
84
58
|
* The delay after which the focus switches from the lastly selected cell to the active editor's `TEXTAREA`
|
85
59
|
* element if the focus mode is set to 'mixed'.
|
86
60
|
*
|
87
61
|
* @type {number}
|
88
62
|
*/
|
89
|
-
_classPrivateFieldInitSpec(this, _refocusDelay,
|
90
|
-
writable: true,
|
91
|
-
value: 50
|
92
|
-
});
|
63
|
+
_classPrivateFieldInitSpec(this, _refocusDelay, 50);
|
93
64
|
/**
|
94
65
|
* Getter function for the element to be used when refocusing the browser after a delay. If `null`, the active
|
95
66
|
* editor's `TEXTAREA` element will be used.
|
96
67
|
*
|
97
68
|
* @type {null|Function}
|
98
69
|
*/
|
99
|
-
_classPrivateFieldInitSpec(this, _refocusElementGetter,
|
100
|
-
writable: true,
|
101
|
-
value: null
|
102
|
-
});
|
70
|
+
_classPrivateFieldInitSpec(this, _refocusElementGetter, null);
|
103
71
|
/**
|
104
72
|
* Map of the debounced `select` functions.
|
105
73
|
*
|
106
74
|
* @type {Map<number, Function>}
|
107
75
|
*/
|
108
|
-
_classPrivateFieldInitSpec(this, _debouncedSelect,
|
109
|
-
writable: true,
|
110
|
-
value: new Map()
|
111
|
-
});
|
76
|
+
_classPrivateFieldInitSpec(this, _debouncedSelect, new Map());
|
112
77
|
const hotSettings = hotInstance.getSettings();
|
113
|
-
_classPrivateFieldSet(
|
114
|
-
_classPrivateFieldSet(
|
115
|
-
_classPrivateFieldGet(
|
78
|
+
_classPrivateFieldSet(_hot, this, hotInstance);
|
79
|
+
_classPrivateFieldSet(_focusMode, this, hotSettings.imeFastEdit ? FOCUS_MODES.MIXED : FOCUS_MODES.CELL);
|
80
|
+
_classPrivateFieldGet(_hot, this).addHook('afterUpdateSettings', function () {
|
116
81
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
117
82
|
args[_key] = arguments[_key];
|
118
83
|
}
|
119
|
-
return
|
84
|
+
return _assertClassBrand(_FocusManager_brand, _this, _onUpdateSettings).call(_this, ...args);
|
120
85
|
});
|
121
|
-
_classPrivateFieldGet(
|
86
|
+
_classPrivateFieldGet(_hot, this).addHook('afterSelection', function () {
|
122
87
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
123
88
|
args[_key2] = arguments[_key2];
|
124
89
|
}
|
125
|
-
return
|
90
|
+
return _assertClassBrand(_FocusManager_brand, _this, _focusCell).call(_this, ...args);
|
126
91
|
});
|
127
|
-
_classPrivateFieldGet(
|
92
|
+
_classPrivateFieldGet(_hot, this).addHook('afterSelectionFocusSet', function () {
|
128
93
|
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
129
94
|
args[_key3] = arguments[_key3];
|
130
95
|
}
|
131
|
-
return
|
96
|
+
return _assertClassBrand(_FocusManager_brand, _this, _focusCell).call(_this, ...args);
|
97
|
+
});
|
98
|
+
_classPrivateFieldGet(_hot, this).addHook('afterSelectionEnd', function () {
|
99
|
+
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
100
|
+
args[_key4] = arguments[_key4];
|
101
|
+
}
|
102
|
+
return _assertClassBrand(_FocusManager_brand, _this, _focusEditorElement).call(_this, ...args);
|
132
103
|
});
|
133
104
|
}
|
134
105
|
|
@@ -138,7 +109,7 @@ export class FocusManager {
|
|
138
109
|
* @returns {'cell' | 'mixed'}
|
139
110
|
*/
|
140
111
|
getFocusMode() {
|
141
|
-
return _classPrivateFieldGet(
|
112
|
+
return _classPrivateFieldGet(_focusMode, this);
|
142
113
|
}
|
143
114
|
|
144
115
|
/**
|
@@ -148,7 +119,7 @@ export class FocusManager {
|
|
148
119
|
*/
|
149
120
|
setFocusMode(focusMode) {
|
150
121
|
if (Object.values(FOCUS_MODES).includes(focusMode)) {
|
151
|
-
_classPrivateFieldSet(
|
122
|
+
_classPrivateFieldSet(_focusMode, this, focusMode);
|
152
123
|
} else {
|
153
124
|
warn(`"${focusMode}" is not a valid focus mode.`);
|
154
125
|
}
|
@@ -161,7 +132,7 @@ export class FocusManager {
|
|
161
132
|
* @returns {number} Delay in milliseconds.
|
162
133
|
*/
|
163
134
|
getRefocusDelay() {
|
164
|
-
return _classPrivateFieldGet(
|
135
|
+
return _classPrivateFieldGet(_refocusDelay, this);
|
165
136
|
}
|
166
137
|
|
167
138
|
/**
|
@@ -171,7 +142,7 @@ export class FocusManager {
|
|
171
142
|
* @param {number} delay Delay in milliseconds.
|
172
143
|
*/
|
173
144
|
setRefocusDelay(delay) {
|
174
|
-
_classPrivateFieldSet(
|
145
|
+
_classPrivateFieldSet(_refocusDelay, this, delay);
|
175
146
|
}
|
176
147
|
|
177
148
|
/**
|
@@ -180,7 +151,7 @@ export class FocusManager {
|
|
180
151
|
* @param {Function} getRefocusElementFunction The refocus element getter.
|
181
152
|
*/
|
182
153
|
setRefocusElementGetter(getRefocusElementFunction) {
|
183
|
-
_classPrivateFieldSet(
|
154
|
+
_classPrivateFieldSet(_refocusElementGetter, this, getRefocusElementFunction);
|
184
155
|
}
|
185
156
|
|
186
157
|
/**
|
@@ -189,11 +160,11 @@ export class FocusManager {
|
|
189
160
|
* @returns {HTMLTextAreaElement|HTMLElement|undefined}
|
190
161
|
*/
|
191
162
|
getRefocusElement() {
|
192
|
-
if (typeof _classPrivateFieldGet(
|
193
|
-
return _classPrivateFieldGet(
|
163
|
+
if (typeof _classPrivateFieldGet(_refocusElementGetter, this) === 'function') {
|
164
|
+
return _classPrivateFieldGet(_refocusElementGetter, this).call(this);
|
194
165
|
} else {
|
195
166
|
var _classPrivateFieldGet2;
|
196
|
-
return (_classPrivateFieldGet2 = _classPrivateFieldGet(
|
167
|
+
return (_classPrivateFieldGet2 = _classPrivateFieldGet(_hot, this).getActiveEditor()) === null || _classPrivateFieldGet2 === void 0 ? void 0 : _classPrivateFieldGet2.TEXTAREA;
|
197
168
|
}
|
198
169
|
}
|
199
170
|
|
@@ -205,15 +176,15 @@ export class FocusManager {
|
|
205
176
|
focusOnHighlightedCell(selectedCell) {
|
206
177
|
const focusElement = element => {
|
207
178
|
var _classPrivateFieldGet3, _classPrivateFieldGet4;
|
208
|
-
const currentHighlightCoords = (_classPrivateFieldGet3 = _classPrivateFieldGet(
|
179
|
+
const currentHighlightCoords = (_classPrivateFieldGet3 = _classPrivateFieldGet(_hot, this).getSelectedRangeLast()) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.highlight;
|
209
180
|
if (!currentHighlightCoords) {
|
210
181
|
return;
|
211
182
|
}
|
212
|
-
let elementToBeFocused = _classPrivateFieldGet(
|
183
|
+
let elementToBeFocused = _classPrivateFieldGet(_hot, this).runHooks('modifyFocusedElement', currentHighlightCoords.row, currentHighlightCoords.col, element);
|
213
184
|
if (!(elementToBeFocused instanceof HTMLElement)) {
|
214
185
|
elementToBeFocused = element;
|
215
186
|
}
|
216
|
-
if (elementToBeFocused && !((_classPrivateFieldGet4 = _classPrivateFieldGet(
|
187
|
+
if (elementToBeFocused && !((_classPrivateFieldGet4 = _classPrivateFieldGet(_hot, this).getActiveEditor()) !== null && _classPrivateFieldGet4 !== void 0 && _classPrivateFieldGet4.isOpened())) {
|
217
188
|
elementToBeFocused.focus({
|
218
189
|
preventScroll: true
|
219
190
|
});
|
@@ -222,7 +193,7 @@ export class FocusManager {
|
|
222
193
|
if (selectedCell) {
|
223
194
|
focusElement(selectedCell);
|
224
195
|
} else {
|
225
|
-
|
196
|
+
_assertClassBrand(_FocusManager_brand, this, _getSelectedCell).call(this, element => focusElement(element));
|
226
197
|
}
|
227
198
|
}
|
228
199
|
|
@@ -234,41 +205,44 @@ export class FocusManager {
|
|
234
205
|
*/
|
235
206
|
refocusToEditorTextarea() {
|
236
207
|
var _classPrivateFieldGet5;
|
237
|
-
let delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _classPrivateFieldGet(
|
208
|
+
let delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _classPrivateFieldGet(_refocusDelay, this);
|
238
209
|
const refocusElement = this.getRefocusElement();
|
239
210
|
|
240
211
|
// Re-focus on the editor's `TEXTAREA` element (or a predefined element) if the `imeFastEdit` option is enabled.
|
241
|
-
if (_classPrivateFieldGet(
|
242
|
-
if (!_classPrivateFieldGet(
|
243
|
-
_classPrivateFieldGet(
|
212
|
+
if (_classPrivateFieldGet(_hot, this).getSettings().imeFastEdit && !((_classPrivateFieldGet5 = _classPrivateFieldGet(_hot, this).getActiveEditor()) !== null && _classPrivateFieldGet5 !== void 0 && _classPrivateFieldGet5.isOpened()) && !!refocusElement) {
|
213
|
+
if (!_classPrivateFieldGet(_debouncedSelect, this).has(delay)) {
|
214
|
+
_classPrivateFieldGet(_debouncedSelect, this).set(delay, debounce(() => {
|
244
215
|
refocusElement.select();
|
245
216
|
}, delay));
|
246
217
|
}
|
247
|
-
_classPrivateFieldGet(
|
218
|
+
_classPrivateFieldGet(_debouncedSelect, this).get(delay)();
|
248
219
|
}
|
249
220
|
}
|
250
221
|
}
|
251
|
-
function
|
222
|
+
function _getSelectedCell(callback) {
|
252
223
|
var _classPrivateFieldGet6;
|
253
|
-
const highlight = (_classPrivateFieldGet6 = _classPrivateFieldGet(
|
254
|
-
if (!highlight || !_classPrivateFieldGet(
|
224
|
+
const highlight = (_classPrivateFieldGet6 = _classPrivateFieldGet(_hot, this).getSelectedRangeLast()) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.highlight;
|
225
|
+
if (!highlight || !_classPrivateFieldGet(_hot, this).selection.isCellVisible(highlight)) {
|
255
226
|
callback(null);
|
256
227
|
return;
|
257
228
|
}
|
258
|
-
const cell = _classPrivateFieldGet(
|
229
|
+
const cell = _classPrivateFieldGet(_hot, this).getCell(highlight.row, highlight.col, true);
|
259
230
|
if (cell === null) {
|
260
|
-
_classPrivateFieldGet(
|
261
|
-
callback(_classPrivateFieldGet(
|
231
|
+
_classPrivateFieldGet(_hot, this).addHookOnce('afterScroll', () => {
|
232
|
+
callback(_classPrivateFieldGet(_hot, this).getCell(highlight.row, highlight.col, true));
|
262
233
|
});
|
263
234
|
} else {
|
264
235
|
callback(cell);
|
265
236
|
}
|
266
237
|
}
|
267
|
-
|
268
|
-
|
238
|
+
/**
|
239
|
+
* Manage the browser's focus after each cell selection change.
|
240
|
+
*/
|
241
|
+
function _focusCell() {
|
242
|
+
_assertClassBrand(_FocusManager_brand, this, _getSelectedCell).call(this, selectedCell => {
|
269
243
|
const {
|
270
244
|
activeElement
|
271
|
-
} = _classPrivateFieldGet(
|
245
|
+
} = _classPrivateFieldGet(_hot, this).rootDocument;
|
272
246
|
|
273
247
|
// Blurring the `activeElement` removes the unwanted border around the focusable element (#6877)
|
274
248
|
// and resets the `document.activeElement` property. The blurring should happen only when the
|
@@ -280,14 +254,22 @@ function _focusCell2() {
|
|
280
254
|
this.focusOnHighlightedCell(selectedCell);
|
281
255
|
});
|
282
256
|
}
|
283
|
-
|
284
|
-
|
257
|
+
/**
|
258
|
+
* Manage the browser's focus after cell selection end.
|
259
|
+
*/
|
260
|
+
function _focusEditorElement() {
|
261
|
+
_assertClassBrand(_FocusManager_brand, this, _getSelectedCell).call(this, selectedCell => {
|
285
262
|
if (this.getFocusMode() === FOCUS_MODES.MIXED && selectedCell.nodeName === 'TD') {
|
286
263
|
this.refocusToEditorTextarea();
|
287
264
|
}
|
288
265
|
});
|
289
266
|
}
|
290
|
-
|
267
|
+
/**
|
268
|
+
* Update the manager configuration after calling `updateSettings`.
|
269
|
+
*
|
270
|
+
* @param {object} newSettings The new settings passed to the `updateSettings` method.
|
271
|
+
*/
|
272
|
+
function _onUpdateSettings(newSettings) {
|
291
273
|
if (newSettings.imeFastEdit && this.getFocusMode() !== FOCUS_MODES.MIXED) {
|
292
274
|
this.setFocusMode(FOCUS_MODES.MIXED);
|
293
275
|
} else if (!newSettings.imeFastEdit && this.getFocusMode() !== FOCUS_MODES.CELL) {
|