handsontable 16.0.1 → 16.1.0-next-91b8a0f-20250905
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/overlays.js +12 -2
- package/3rdparty/walkontable/src/overlays.mjs +12 -2
- package/3rdparty/walkontable/src/viewport.js +2 -6
- package/3rdparty/walkontable/src/viewport.mjs +2 -6
- package/CHANGELOG.md +37 -0
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/cellTypes/autocompleteType/accessors/index.js +7 -0
- package/cellTypes/autocompleteType/accessors/index.mjs +2 -0
- package/cellTypes/autocompleteType/accessors/valueGetter.js +14 -0
- package/cellTypes/autocompleteType/accessors/valueGetter.mjs +10 -0
- package/cellTypes/autocompleteType/accessors/valueSetter.js +25 -0
- package/cellTypes/autocompleteType/accessors/valueSetter.mjs +21 -0
- package/cellTypes/autocompleteType/autocompleteType.js +4 -1
- package/cellTypes/autocompleteType/autocompleteType.mjs +4 -1
- package/cellTypes/checkboxType/accessors/index.js +5 -0
- package/cellTypes/checkboxType/accessors/index.mjs +1 -0
- package/cellTypes/checkboxType/accessors/valueSetter.js +26 -0
- package/cellTypes/checkboxType/accessors/valueSetter.mjs +22 -0
- package/cellTypes/checkboxType/checkboxType.js +3 -1
- package/cellTypes/checkboxType/checkboxType.mjs +3 -1
- package/cellTypes/dropdownType/accessors/index.js +7 -0
- package/cellTypes/dropdownType/accessors/index.mjs +2 -0
- package/cellTypes/dropdownType/accessors/valueGetter.js +14 -0
- package/cellTypes/dropdownType/accessors/valueGetter.mjs +10 -0
- package/cellTypes/dropdownType/accessors/valueSetter.js +17 -0
- package/cellTypes/dropdownType/accessors/valueSetter.mjs +13 -0
- package/cellTypes/dropdownType/dropdownType.js +4 -1
- package/cellTypes/dropdownType/dropdownType.mjs +4 -1
- package/cellTypes/numericType/accessors/index.js +5 -0
- package/cellTypes/numericType/accessors/index.mjs +1 -0
- package/cellTypes/numericType/accessors/valueSetter.js +19 -0
- package/cellTypes/numericType/accessors/valueSetter.mjs +15 -0
- package/cellTypes/numericType/numericType.js +3 -1
- package/cellTypes/numericType/numericType.mjs +3 -1
- package/core/focusCatcher/index.js +37 -112
- package/core/focusCatcher/index.mjs +35 -110
- package/core/focusCatcher/utils.js +31 -0
- package/core/focusCatcher/utils.mjs +27 -0
- package/core/hooks/constants.js +242 -0
- package/core/hooks/constants.mjs +242 -0
- package/core/hooks/index.d.ts +22 -0
- package/core/viewportScroll/scrollStrategies/focusScroll.js +5 -1
- package/core/viewportScroll/scrollStrategies/focusScroll.mjs +5 -1
- package/core/viewportScroll/utils.js +1 -1
- package/core/viewportScroll/utils.mjs +1 -1
- package/core.d.ts +4 -0
- package/core.js +237 -139
- package/core.mjs +240 -142
- package/dataMap/dataMap.js +13 -3
- package/dataMap/dataMap.mjs +14 -4
- package/dataMap/dataSource.js +16 -0
- package/dataMap/dataSource.mjs +16 -0
- package/dataMap/metaManager/lazyFactoryMap.js +4 -3
- package/dataMap/metaManager/lazyFactoryMap.mjs +2 -1
- package/dataMap/metaManager/metaLayers/cellMeta.js +3 -2
- package/dataMap/metaManager/metaLayers/cellMeta.mjs +3 -2
- package/dataMap/metaManager/metaSchema.js +289 -4
- package/dataMap/metaManager/metaSchema.mjs +289 -4
- package/dataMap/metaManager/utils.js +0 -11
- package/dataMap/metaManager/utils.mjs +0 -10
- package/dataMap/replaceData.js +1 -0
- package/dataMap/replaceData.mjs +1 -0
- package/dist/handsontable.css +281 -4
- package/dist/handsontable.full.css +281 -4
- package/dist/handsontable.full.js +7842 -2990
- package/dist/handsontable.full.min.css +4 -5
- package/dist/handsontable.full.min.js +167 -165
- package/dist/handsontable.js +9638 -4807
- package/dist/handsontable.min.css +4 -4
- package/dist/handsontable.min.js +52 -50
- package/dist/languages/all.js +231 -21
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/ar-AR.js +11 -1
- package/dist/languages/ar-AR.min.js +1 -1
- package/dist/languages/cs-CZ.js +11 -1
- package/dist/languages/cs-CZ.min.js +1 -1
- package/dist/languages/de-CH.js +11 -1
- package/dist/languages/de-CH.min.js +1 -1
- package/dist/languages/de-DE.js +11 -1
- package/dist/languages/de-DE.min.js +1 -1
- package/dist/languages/en-US.js +11 -1
- package/dist/languages/en-US.min.js +1 -1
- package/dist/languages/es-MX.js +11 -1
- package/dist/languages/es-MX.min.js +1 -1
- package/dist/languages/fa-IR.js +11 -1
- package/dist/languages/fa-IR.min.js +1 -1
- package/dist/languages/fr-FR.js +11 -1
- package/dist/languages/fr-FR.min.js +1 -1
- package/dist/languages/hr-HR.js +11 -1
- package/dist/languages/hr-HR.min.js +1 -1
- package/dist/languages/it-IT.js +11 -1
- package/dist/languages/it-IT.min.js +1 -1
- package/dist/languages/ja-JP.js +11 -1
- package/dist/languages/ja-JP.min.js +1 -1
- package/dist/languages/ko-KR.js +11 -1
- package/dist/languages/ko-KR.min.js +1 -1
- package/dist/languages/lv-LV.js +11 -1
- package/dist/languages/lv-LV.min.js +1 -1
- package/dist/languages/nb-NO.js +11 -1
- package/dist/languages/nb-NO.min.js +1 -1
- package/dist/languages/nl-NL.js +11 -1
- package/dist/languages/nl-NL.min.js +1 -1
- package/dist/languages/pl-PL.js +11 -1
- package/dist/languages/pl-PL.min.js +1 -1
- package/dist/languages/pt-BR.js +11 -1
- package/dist/languages/pt-BR.min.js +1 -1
- package/dist/languages/ru-RU.js +11 -1
- package/dist/languages/ru-RU.min.js +1 -1
- package/dist/languages/sr-SP.js +11 -1
- package/dist/languages/sr-SP.min.js +1 -1
- package/dist/languages/zh-CN.js +11 -1
- package/dist/languages/zh-CN.min.js +1 -1
- package/dist/languages/zh-TW.js +11 -1
- package/dist/languages/zh-TW.min.js +1 -1
- package/editorManager.js +4 -4
- package/editorManager.mjs +4 -4
- package/editors/autocompleteEditor/autocompleteEditor.js +50 -112
- package/editors/autocompleteEditor/autocompleteEditor.mjs +51 -113
- package/editors/baseEditor/baseEditor.js +10 -6
- package/editors/baseEditor/baseEditor.mjs +10 -6
- package/editors/handsontableEditor/handsontableEditor.js +9 -9
- package/editors/handsontableEditor/handsontableEditor.mjs +9 -9
- package/editors/textEditor/textEditor.js +0 -7
- package/editors/textEditor/textEditor.mjs +0 -7
- package/focusManager.js +2 -2
- package/focusManager.mjs +2 -2
- package/helpers/a11y.js +15 -2
- package/helpers/a11y.mjs +10 -2
- package/helpers/console.js +12 -0
- package/helpers/console.mjs +11 -0
- package/helpers/dom/element.js +4 -4
- package/helpers/dom/element.mjs +4 -4
- package/helpers/mixed.js +65 -2
- package/helpers/mixed.mjs +63 -2
- package/helpers/number.js +28 -0
- package/helpers/number.mjs +26 -0
- package/helpers/object.js +35 -0
- package/helpers/object.mjs +34 -0
- package/helpers/string.js +19 -0
- package/helpers/string.mjs +18 -0
- package/helpers/templateLiteralTag.js +57 -1
- package/helpers/templateLiteralTag.mjs +56 -1
- package/i18n/constants.js +13 -1
- package/i18n/constants.mjs +13 -1
- package/i18n/languages/ar-AR.js +11 -1
- package/i18n/languages/ar-AR.mjs +11 -1
- package/i18n/languages/cs-CZ.js +11 -1
- package/i18n/languages/cs-CZ.mjs +11 -1
- package/i18n/languages/de-CH.js +11 -1
- package/i18n/languages/de-CH.mjs +11 -1
- package/i18n/languages/de-DE.js +11 -1
- package/i18n/languages/de-DE.mjs +11 -1
- package/i18n/languages/en-US.js +11 -1
- package/i18n/languages/en-US.mjs +11 -1
- package/i18n/languages/es-MX.js +11 -1
- package/i18n/languages/es-MX.mjs +11 -1
- package/i18n/languages/fa-IR.js +11 -1
- package/i18n/languages/fa-IR.mjs +11 -1
- package/i18n/languages/fr-FR.js +11 -1
- package/i18n/languages/fr-FR.mjs +11 -1
- package/i18n/languages/hr-HR.js +11 -1
- package/i18n/languages/hr-HR.mjs +11 -1
- package/i18n/languages/it-IT.js +11 -1
- package/i18n/languages/it-IT.mjs +11 -1
- package/i18n/languages/ja-JP.js +11 -1
- package/i18n/languages/ja-JP.mjs +11 -1
- package/i18n/languages/ko-KR.js +11 -1
- package/i18n/languages/ko-KR.mjs +11 -1
- package/i18n/languages/lv-LV.js +11 -1
- package/i18n/languages/lv-LV.mjs +11 -1
- package/i18n/languages/nb-NO.js +11 -1
- package/i18n/languages/nb-NO.mjs +11 -1
- package/i18n/languages/nl-NL.js +11 -1
- package/i18n/languages/nl-NL.mjs +11 -1
- package/i18n/languages/pl-PL.js +11 -1
- package/i18n/languages/pl-PL.mjs +11 -1
- package/i18n/languages/pt-BR.js +11 -1
- package/i18n/languages/pt-BR.mjs +11 -1
- package/i18n/languages/ru-RU.js +11 -1
- package/i18n/languages/ru-RU.mjs +11 -1
- package/i18n/languages/sr-SP.js +11 -1
- package/i18n/languages/sr-SP.mjs +11 -1
- package/i18n/languages/zh-CN.js +11 -1
- package/i18n/languages/zh-CN.mjs +11 -1
- package/i18n/languages/zh-TW.js +11 -1
- package/i18n/languages/zh-TW.mjs +11 -1
- package/i18n/phraseFormatters/index.js +3 -1
- package/i18n/phraseFormatters/index.mjs +3 -1
- package/i18n/registry.js +5 -6
- package/i18n/registry.mjs +5 -6
- package/index.d.ts +27 -0
- package/languages/all.js +231 -21
- package/languages/ar-AR.js +11 -1
- package/languages/ar-AR.mjs +11 -1
- package/languages/cs-CZ.js +11 -1
- package/languages/cs-CZ.mjs +11 -1
- package/languages/de-CH.js +11 -1
- package/languages/de-CH.mjs +11 -1
- package/languages/de-DE.js +11 -1
- package/languages/de-DE.mjs +11 -1
- package/languages/en-US.js +11 -1
- package/languages/en-US.mjs +11 -1
- package/languages/es-MX.js +11 -1
- package/languages/es-MX.mjs +11 -1
- package/languages/fa-IR.js +11 -1
- package/languages/fa-IR.mjs +11 -1
- package/languages/fr-FR.js +11 -1
- package/languages/fr-FR.mjs +11 -1
- package/languages/hr-HR.js +11 -1
- package/languages/hr-HR.mjs +11 -1
- package/languages/index.js +231 -21
- package/languages/it-IT.js +11 -1
- package/languages/it-IT.mjs +11 -1
- package/languages/ja-JP.js +11 -1
- package/languages/ja-JP.mjs +11 -1
- package/languages/ko-KR.js +11 -1
- package/languages/ko-KR.mjs +11 -1
- package/languages/lv-LV.js +11 -1
- package/languages/lv-LV.mjs +11 -1
- package/languages/nb-NO.js +11 -1
- package/languages/nb-NO.mjs +11 -1
- package/languages/nl-NL.js +11 -1
- package/languages/nl-NL.mjs +11 -1
- package/languages/pl-PL.js +11 -1
- package/languages/pl-PL.mjs +11 -1
- package/languages/pt-BR.js +11 -1
- package/languages/pt-BR.mjs +11 -1
- package/languages/ru-RU.js +11 -1
- package/languages/ru-RU.mjs +11 -1
- package/languages/sr-SP.js +11 -1
- package/languages/sr-SP.mjs +11 -1
- package/languages/zh-CN.js +11 -1
- package/languages/zh-CN.mjs +11 -1
- package/languages/zh-TW.js +11 -1
- package/languages/zh-TW.mjs +11 -1
- package/mixins/localHooks.js +16 -0
- package/mixins/localHooks.mjs +16 -0
- package/package.json +19 -1
- package/plugins/autoRowSize/autoRowSize.js +43 -6
- package/plugins/autoRowSize/autoRowSize.mjs +43 -6
- package/plugins/autofill/autofill.js +50 -3
- package/plugins/autofill/autofill.mjs +50 -3
- package/plugins/base/base.js +86 -15
- package/plugins/base/base.mjs +87 -16
- package/plugins/collapsibleColumns/collapsibleColumns.js +4 -4
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +4 -4
- package/plugins/columnSorting/columnSorting.js +3 -3
- package/plugins/columnSorting/columnSorting.mjs +3 -3
- package/plugins/comments/comments.js +52 -22
- package/plugins/comments/comments.mjs +52 -22
- package/plugins/comments/contextMenuItem/addEditComment.js +3 -3
- package/plugins/comments/contextMenuItem/addEditComment.mjs +3 -3
- package/plugins/comments/contextMenuItem/readOnlyComment.js +2 -2
- package/plugins/comments/contextMenuItem/readOnlyComment.mjs +2 -2
- package/plugins/comments/contextMenuItem/removeComment.js +2 -2
- package/plugins/comments/contextMenuItem/removeComment.mjs +2 -2
- package/plugins/contextMenu/contextMenu.js +4 -5
- package/plugins/contextMenu/contextMenu.mjs +4 -5
- package/plugins/contextMenu/menu/cursor.js +1 -1
- package/plugins/contextMenu/menu/cursor.mjs +1 -1
- package/plugins/contextMenu/menu/defaultShortcutsList.js +5 -5
- package/plugins/contextMenu/menu/defaultShortcutsList.mjs +5 -5
- package/plugins/contextMenu/menu/menu.js +3 -3
- package/plugins/contextMenu/menu/menu.mjs +3 -3
- package/plugins/contextMenu/menu/positioner.js +1 -1
- package/plugins/contextMenu/menu/positioner.mjs +1 -1
- package/plugins/contextMenu/predefinedItems/alignment.js +1 -1
- package/plugins/contextMenu/predefinedItems/alignment.mjs +1 -1
- package/plugins/contextMenu/predefinedItems/clearColumn.js +1 -1
- package/plugins/contextMenu/predefinedItems/clearColumn.mjs +1 -1
- package/plugins/contextMenu/predefinedItems/columnLeft.js +3 -3
- package/plugins/contextMenu/predefinedItems/columnLeft.mjs +3 -3
- package/plugins/contextMenu/predefinedItems/columnRight.js +3 -3
- package/plugins/contextMenu/predefinedItems/columnRight.mjs +3 -3
- package/plugins/contextMenu/predefinedItems/readOnly.js +1 -1
- package/plugins/contextMenu/predefinedItems/readOnly.mjs +1 -1
- package/plugins/contextMenu/predefinedItems/removeColumn.js +1 -1
- package/plugins/contextMenu/predefinedItems/removeColumn.mjs +1 -1
- package/plugins/contextMenu/predefinedItems/removeRow.js +1 -1
- package/plugins/contextMenu/predefinedItems/removeRow.mjs +1 -1
- package/plugins/contextMenu/predefinedItems/rowAbove.js +3 -3
- package/plugins/contextMenu/predefinedItems/rowAbove.mjs +3 -3
- package/plugins/contextMenu/predefinedItems/rowBelow.js +3 -3
- package/plugins/contextMenu/predefinedItems/rowBelow.mjs +3 -3
- package/plugins/copyPaste/contextMenuItem/copy.js +1 -1
- package/plugins/copyPaste/contextMenuItem/copy.mjs +1 -1
- package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +3 -3
- package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +3 -3
- package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +3 -3
- package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +3 -3
- package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +3 -3
- package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +3 -3
- package/plugins/copyPaste/contextMenuItem/cut.js +1 -1
- package/plugins/copyPaste/contextMenuItem/cut.mjs +1 -1
- package/plugins/copyPaste/copyPaste.js +75 -40
- package/plugins/copyPaste/copyPaste.mjs +76 -41
- package/plugins/customBorders/customBorders.js +1 -1
- package/plugins/customBorders/customBorders.mjs +1 -1
- package/plugins/dialog/dialog.d.ts +23 -0
- package/plugins/dialog/dialog.js +489 -0
- package/plugins/dialog/dialog.mjs +485 -0
- package/plugins/dialog/index.d.ts +1 -0
- package/plugins/dialog/index.js +7 -0
- package/plugins/dialog/index.mjs +1 -0
- package/plugins/dialog/ui.js +264 -0
- package/plugins/dialog/ui.mjs +259 -0
- package/plugins/dropdownMenu/dropdownMenu.js +5 -4
- package/plugins/dropdownMenu/dropdownMenu.mjs +5 -4
- package/plugins/filters/filters.js +2 -2
- package/plugins/filters/filters.mjs +2 -2
- package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +3 -3
- package/plugins/hiddenColumns/contextMenuItem/hideColumn.mjs +3 -3
- package/plugins/hiddenColumns/contextMenuItem/showColumn.js +4 -4
- package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +4 -4
- package/plugins/hiddenRows/contextMenuItem/hideRow.js +3 -3
- package/plugins/hiddenRows/contextMenuItem/hideRow.mjs +3 -3
- package/plugins/hiddenRows/contextMenuItem/showRow.js +4 -4
- package/plugins/hiddenRows/contextMenuItem/showRow.mjs +4 -4
- package/plugins/index.d.ts +9 -0
- package/plugins/index.js +9 -0
- package/plugins/index.mjs +7 -1
- package/plugins/loading/content.js +36 -0
- package/plugins/loading/content.mjs +31 -0
- package/plugins/loading/index.d.ts +1 -0
- package/plugins/loading/index.js +7 -0
- package/plugins/loading/index.mjs +1 -0
- package/plugins/loading/loading.d.ts +19 -0
- package/plugins/loading/loading.js +290 -0
- package/plugins/loading/loading.mjs +285 -0
- package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +1 -1
- package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.mjs +1 -1
- package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +1 -1
- package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.mjs +1 -1
- package/plugins/manualColumnMove/manualColumnMove.js +3 -3
- package/plugins/manualColumnMove/manualColumnMove.mjs +3 -3
- package/plugins/manualColumnResize/manualColumnResize.js +3 -3
- package/plugins/manualColumnResize/manualColumnResize.mjs +3 -3
- package/plugins/manualRowMove/manualRowMove.js +4 -4
- package/plugins/manualRowMove/manualRowMove.mjs +4 -4
- package/plugins/manualRowResize/manualRowResize.js +5 -2
- package/plugins/manualRowResize/manualRowResize.mjs +5 -2
- package/plugins/mergeCells/contextMenuItem/toggleMerge.js +15 -15
- package/plugins/mergeCells/contextMenuItem/toggleMerge.mjs +15 -15
- package/plugins/mergeCells/focusOrder.js +75 -39
- package/plugins/mergeCells/focusOrder.mjs +75 -39
- package/plugins/mergeCells/mergeCells.js +26 -19
- package/plugins/mergeCells/mergeCells.mjs +26 -19
- package/plugins/mergeCells/renderer.js +14 -8
- package/plugins/mergeCells/renderer.mjs +14 -8
- package/plugins/multiColumnSorting/multiColumnSorting.js +3 -3
- package/plugins/multiColumnSorting/multiColumnSorting.mjs +3 -3
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +3 -3
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +3 -3
- package/plugins/nestedHeaders/nestedHeaders.js +47 -41
- package/plugins/nestedHeaders/nestedHeaders.mjs +47 -41
- package/plugins/nestedRows/nestedRows.js +3 -3
- package/plugins/nestedRows/nestedRows.mjs +3 -3
- package/plugins/nestedRows/ui/collapsing.js +1 -2
- package/plugins/nestedRows/ui/collapsing.mjs +1 -2
- package/plugins/nestedRows/ui/contextMenu.js +4 -4
- package/plugins/nestedRows/ui/contextMenu.mjs +4 -4
- package/plugins/nestedRows/ui/headers.js +4 -1
- package/plugins/nestedRows/ui/headers.mjs +4 -1
- package/plugins/pagination/focusController.js +27 -0
- package/plugins/pagination/focusController.mjs +23 -0
- package/plugins/pagination/index.d.ts +1 -0
- package/plugins/pagination/index.js +7 -0
- package/plugins/pagination/index.mjs +1 -0
- package/plugins/pagination/pagination.d.ts +52 -0
- package/plugins/pagination/pagination.js +1034 -0
- package/plugins/pagination/pagination.mjs +1030 -0
- package/plugins/pagination/strategies/autoPageSize.js +96 -0
- package/plugins/pagination/strategies/autoPageSize.mjs +92 -0
- package/plugins/pagination/strategies/fixedPageSize.js +88 -0
- package/plugins/pagination/strategies/fixedPageSize.mjs +84 -0
- package/plugins/pagination/strategies/index.js +22 -0
- package/plugins/pagination/strategies/index.mjs +18 -0
- package/plugins/pagination/ui.js +449 -0
- package/plugins/pagination/ui.mjs +443 -0
- package/plugins/pagination/utils.js +28 -0
- package/plugins/pagination/utils.mjs +24 -0
- package/plugins/stretchColumns/calculator.js +4 -0
- package/plugins/stretchColumns/calculator.mjs +4 -0
- package/plugins/stretchColumns/stretchColumns.js +1 -1
- package/plugins/stretchColumns/stretchColumns.mjs +1 -1
- package/plugins/undoRedo/actions/dataChange.js +17 -15
- package/plugins/undoRedo/actions/dataChange.mjs +17 -15
- package/renderers/checkboxRenderer/checkboxRenderer.js +3 -3
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +3 -3
- package/selection/range.js +11 -0
- package/selection/range.mjs +11 -0
- package/selection/selection.js +163 -124
- package/selection/selection.mjs +163 -124
- package/selection/transformation/_base.js +448 -0
- package/selection/transformation/_base.mjs +443 -0
- package/selection/transformation/extender.js +55 -0
- package/selection/transformation/extender.mjs +51 -0
- package/selection/transformation/focus.js +77 -0
- package/selection/transformation/focus.mjs +73 -0
- package/selection/transformation/index.js +7 -0
- package/selection/transformation/index.mjs +2 -0
- package/selection/utils.js +2 -1
- package/selection/utils.mjs +2 -1
- package/settings.d.ts +10 -1
- package/shortcutContexts/commands/editor/fastOpen.js +1 -1
- package/shortcutContexts/commands/editor/fastOpen.mjs +1 -1
- package/shortcutContexts/commands/editor/open.js +10 -4
- package/shortcutContexts/commands/editor/open.mjs +10 -4
- package/shortcutContexts/commands/extendCellsSelection/down.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/down.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +2 -2
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +2 -2
- 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 +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +1 -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/extendCellsSelection/upByViewportHeight.js +2 -2
- package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +2 -2
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +2 -2
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +2 -2
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +5 -2
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +5 -2
- package/shortcutContexts/commands/moveCellSelection/inlineStart.js +5 -2
- package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +5 -2
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostRight.js +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostTop.js +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +1 -1
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +2 -2
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +2 -2
- package/shortcutContexts/commands/scrollToFocusedCell.js +1 -1
- package/shortcutContexts/commands/scrollToFocusedCell.mjs +1 -1
- package/shortcutContexts/grid.js +3 -3
- package/shortcutContexts/grid.mjs +3 -3
- package/shortcuts/context.js +4 -1
- package/shortcuts/context.mjs +4 -1
- package/shortcuts/manager.js +17 -3
- package/shortcuts/manager.mjs +17 -3
- package/styles/handsontable.css +288 -22
- package/styles/handsontable.min.css +3 -3
- package/styles/ht-theme-classic.css +828 -0
- package/styles/ht-theme-classic.min.css +30 -0
- package/styles/ht-theme-horizon.css +122 -26
- package/styles/ht-theme-horizon.min.css +3 -3
- package/styles/ht-theme-main.css +124 -28
- package/styles/ht-theme-main.min.css +3 -3
- package/tableView.js +61 -25
- package/tableView.mjs +61 -25
- package/utils/a11yAnnouncer.js +70 -0
- package/utils/a11yAnnouncer.mjs +64 -0
- package/{core/focusCatcher → utils}/focusDetector.js +30 -12
- package/{core/focusCatcher → utils}/focusDetector.mjs +30 -12
- package/utils/samplesGenerator.js +17 -1
- package/utils/samplesGenerator.mjs +17 -1
- package/utils/stylesHandler.js +23 -8
- package/utils/stylesHandler.mjs +23 -8
- package/utils/valueAccessors.js +45 -0
- package/utils/valueAccessors.mjs +40 -0
- package/validators/autocompleteValidator/autocompleteValidator.js +2 -1
- package/validators/autocompleteValidator/autocompleteValidator.mjs +2 -1
- package/selection/transformation.js +0 -335
- package/selection/transformation.mjs +0 -331
package/selection/selection.mjs
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
import "core-js/modules/es.error.cause.js";
|
2
|
+
import "core-js/modules/es.array.push.js";
|
2
3
|
import "core-js/modules/es.set.difference.v2.js";
|
3
4
|
import "core-js/modules/es.set.intersection.v2.js";
|
4
5
|
import "core-js/modules/es.set.is-disjoint-from.v2.js";
|
@@ -25,20 +26,30 @@ import { isUndefined } from "./../helpers/mixed.mjs";
|
|
25
26
|
import { clamp } from "./../helpers/number.mjs";
|
26
27
|
import { arrayEach } from "./../helpers/array.mjs";
|
27
28
|
import localHooks from "./../mixins/localHooks.mjs";
|
28
|
-
import
|
29
|
+
import { ExtenderTransformation, FocusTransformation } from "./transformation/index.mjs";
|
29
30
|
import { detectSelectionType, normalizeSelectionFactory, SELECTION_TYPE_EMPTY, SELECTION_TYPE_UNRECOGNIZED } from "./utils.mjs";
|
30
31
|
import { toSingleLine } from "./../helpers/templateLiteralTag.mjs";
|
31
32
|
import { A11Y_SELECTED } from "../helpers/a11y.mjs";
|
33
|
+
/**
|
34
|
+
* @typedef {object} SelectionState
|
35
|
+
* @property {CellRange[]} ranges The array of all ranges.
|
36
|
+
* @property {CellRange} activeRange The active range.
|
37
|
+
* @property {number} activeSelectionLayer The active selection layer.
|
38
|
+
* @property {number[]} selectedByRowHeader The state of the selected row headers.
|
39
|
+
* @property {number[]} selectedByColumnHeader The state of the selected column headers.
|
40
|
+
* @property {boolean} disableHeadersHighlight The state of the disable headers highlight.
|
41
|
+
*/
|
32
42
|
/**
|
33
43
|
* @class Selection
|
34
44
|
* @util
|
35
45
|
*/
|
36
|
-
var
|
46
|
+
var _extenderTransformation = /*#__PURE__*/new WeakMap();
|
37
47
|
var _focusTransformation = /*#__PURE__*/new WeakMap();
|
38
48
|
var _isFocusSelectionChanged = /*#__PURE__*/new WeakMap();
|
39
49
|
var _disableHeadersHighlight = /*#__PURE__*/new WeakMap();
|
40
50
|
var _selectionSource = /*#__PURE__*/new WeakMap();
|
41
51
|
var _expectedLayersCount = /*#__PURE__*/new WeakMap();
|
52
|
+
var _activeSelectionLayer = /*#__PURE__*/new WeakMap();
|
42
53
|
class Selection {
|
43
54
|
constructor(settings, tableProps) {
|
44
55
|
var _this = this;
|
@@ -77,13 +88,13 @@ class Selection {
|
|
77
88
|
/**
|
78
89
|
* The module for modifying coordinates of the start and end selection.
|
79
90
|
*
|
80
|
-
* @type {
|
91
|
+
* @type {ExtenderTransformation}
|
81
92
|
*/
|
82
|
-
_classPrivateFieldInitSpec(this,
|
93
|
+
_classPrivateFieldInitSpec(this, _extenderTransformation, void 0);
|
83
94
|
/**
|
84
95
|
* The module for modifying coordinates of the focus selection.
|
85
96
|
*
|
86
|
-
* @type {
|
97
|
+
* @type {FocusTransformation}
|
87
98
|
*/
|
88
99
|
_classPrivateFieldInitSpec(this, _focusTransformation, void 0);
|
89
100
|
/**
|
@@ -125,6 +136,13 @@ class Selection {
|
|
125
136
|
* @param {number}
|
126
137
|
*/
|
127
138
|
_classPrivateFieldInitSpec(this, _expectedLayersCount, -1);
|
139
|
+
/**
|
140
|
+
* The index of the active range layer. Active range layer is the layer that has visible focus highlight.
|
141
|
+
* Focus highlight may jump between selection range layers.
|
142
|
+
*
|
143
|
+
* @type {number}
|
144
|
+
*/
|
145
|
+
_classPrivateFieldInitSpec(this, _activeSelectionLayer, 0);
|
128
146
|
this.settings = settings;
|
129
147
|
this.tableProps = tableProps;
|
130
148
|
this.highlight = new Highlight({
|
@@ -147,95 +165,67 @@ class Selection {
|
|
147
165
|
createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
|
148
166
|
createCellRange: (highlight, from, to) => this.tableProps.createCellRange(highlight, from, to)
|
149
167
|
});
|
150
|
-
_classPrivateFieldSet(
|
151
|
-
|
152
|
-
|
153
|
-
countRenderableRows: () => this.tableProps.countRenderableRows(),
|
154
|
-
countRenderableColumns: () => this.tableProps.countRenderableColumns(),
|
155
|
-
visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),
|
156
|
-
renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),
|
157
|
-
findFirstNonHiddenRenderableRow: function () {
|
158
|
-
return _this.tableProps.findFirstNonHiddenRenderableRow(...arguments);
|
159
|
-
},
|
160
|
-
findFirstNonHiddenRenderableColumn: function () {
|
161
|
-
return _this.tableProps.findFirstNonHiddenRenderableColumn(...arguments);
|
162
|
-
},
|
163
|
-
createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
|
168
|
+
_classPrivateFieldSet(_extenderTransformation, this, new ExtenderTransformation(this.selectedRange, {
|
169
|
+
...this.tableProps,
|
170
|
+
navigableHeaders: () => settings.navigableHeaders,
|
164
171
|
fixedRowsBottom: () => settings.fixedRowsBottom,
|
165
172
|
minSpareRows: () => settings.minSpareRows,
|
166
173
|
minSpareCols: () => settings.minSpareCols,
|
167
174
|
autoWrapRow: () => settings.autoWrapRow,
|
168
175
|
autoWrapCol: () => settings.autoWrapCol
|
169
176
|
}));
|
170
|
-
_classPrivateFieldSet(_focusTransformation, this, new
|
171
|
-
|
172
|
-
|
173
|
-
countRenderableRows: () => {
|
174
|
-
const range = this.selectedRange.current();
|
175
|
-
return this.tableProps.countRenderableRowsInRange(0, range.getOuterBottomEndCorner().row);
|
176
|
-
},
|
177
|
-
countRenderableColumns: () => {
|
178
|
-
const range = this.selectedRange.current();
|
179
|
-
return this.tableProps.countRenderableColumnsInRange(0, range.getOuterBottomEndCorner().col);
|
180
|
-
},
|
181
|
-
visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),
|
182
|
-
renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),
|
183
|
-
findFirstNonHiddenRenderableRow: function () {
|
184
|
-
return _this.tableProps.findFirstNonHiddenRenderableRow(...arguments);
|
185
|
-
},
|
186
|
-
findFirstNonHiddenRenderableColumn: function () {
|
187
|
-
return _this.tableProps.findFirstNonHiddenRenderableColumn(...arguments);
|
188
|
-
},
|
189
|
-
createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
|
177
|
+
_classPrivateFieldSet(_focusTransformation, this, new FocusTransformation(this.selectedRange, {
|
178
|
+
...this.tableProps,
|
179
|
+
navigableHeaders: () => settings.navigableHeaders,
|
190
180
|
fixedRowsBottom: () => 0,
|
191
181
|
minSpareRows: () => 0,
|
192
182
|
minSpareCols: () => 0,
|
193
183
|
autoWrapRow: () => true,
|
194
184
|
autoWrapCol: () => true
|
195
185
|
}));
|
196
|
-
_classPrivateFieldGet(
|
186
|
+
_classPrivateFieldGet(_extenderTransformation, this).addLocalHook('beforeTransformStart', function () {
|
197
187
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
198
188
|
args[_key] = arguments[_key];
|
199
189
|
}
|
200
190
|
return _this.runLocalHooks('beforeModifyTransformStart', ...args);
|
201
191
|
});
|
202
|
-
_classPrivateFieldGet(
|
192
|
+
_classPrivateFieldGet(_extenderTransformation, this).addLocalHook('afterTransformStart', function () {
|
203
193
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
204
194
|
args[_key2] = arguments[_key2];
|
205
195
|
}
|
206
196
|
return _this.runLocalHooks('afterModifyTransformStart', ...args);
|
207
197
|
});
|
208
|
-
_classPrivateFieldGet(
|
198
|
+
_classPrivateFieldGet(_extenderTransformation, this).addLocalHook('beforeTransformEnd', function () {
|
209
199
|
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
210
200
|
args[_key3] = arguments[_key3];
|
211
201
|
}
|
212
202
|
return _this.runLocalHooks('beforeModifyTransformEnd', ...args);
|
213
203
|
});
|
214
|
-
_classPrivateFieldGet(
|
204
|
+
_classPrivateFieldGet(_extenderTransformation, this).addLocalHook('afterTransformEnd', function () {
|
215
205
|
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
216
206
|
args[_key4] = arguments[_key4];
|
217
207
|
}
|
218
208
|
return _this.runLocalHooks('afterModifyTransformEnd', ...args);
|
219
209
|
});
|
220
|
-
_classPrivateFieldGet(
|
210
|
+
_classPrivateFieldGet(_extenderTransformation, this).addLocalHook('insertRowRequire', function () {
|
221
211
|
for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
|
222
212
|
args[_key5] = arguments[_key5];
|
223
213
|
}
|
224
214
|
return _this.runLocalHooks('insertRowRequire', ...args);
|
225
215
|
});
|
226
|
-
_classPrivateFieldGet(
|
216
|
+
_classPrivateFieldGet(_extenderTransformation, this).addLocalHook('insertColRequire', function () {
|
227
217
|
for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
|
228
218
|
args[_key6] = arguments[_key6];
|
229
219
|
}
|
230
220
|
return _this.runLocalHooks('insertColRequire', ...args);
|
231
221
|
});
|
232
|
-
_classPrivateFieldGet(
|
222
|
+
_classPrivateFieldGet(_extenderTransformation, this).addLocalHook('beforeRowWrap', function () {
|
233
223
|
for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
|
234
224
|
args[_key7] = arguments[_key7];
|
235
225
|
}
|
236
226
|
return _this.runLocalHooks('beforeRowWrap', ...args);
|
237
227
|
});
|
238
|
-
_classPrivateFieldGet(
|
228
|
+
_classPrivateFieldGet(_extenderTransformation, this).addLocalHook('beforeColumnWrap', function () {
|
239
229
|
for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
|
240
230
|
args[_key8] = arguments[_key8];
|
241
231
|
}
|
@@ -256,7 +246,7 @@ class Selection {
|
|
256
246
|
}
|
257
247
|
|
258
248
|
/**
|
259
|
-
*
|
249
|
+
* Gets all selection range layers of the selection.
|
260
250
|
*
|
261
251
|
* @returns {SelectionRange}
|
262
252
|
*/
|
@@ -264,6 +254,33 @@ class Selection {
|
|
264
254
|
return this.selectedRange;
|
265
255
|
}
|
266
256
|
|
257
|
+
/**
|
258
|
+
* Gets the active selection range layer.
|
259
|
+
*
|
260
|
+
* @returns {CellRange}
|
261
|
+
*/
|
262
|
+
getActiveSelectedRange() {
|
263
|
+
return this.selectedRange.peekByIndex(_classPrivateFieldGet(_activeSelectionLayer, this));
|
264
|
+
}
|
265
|
+
|
266
|
+
/**
|
267
|
+
* Gets the index of the active selection range layer.
|
268
|
+
*
|
269
|
+
* @returns {number}
|
270
|
+
*/
|
271
|
+
getActiveSelectionLayerIndex() {
|
272
|
+
return _classPrivateFieldGet(_activeSelectionLayer, this);
|
273
|
+
}
|
274
|
+
|
275
|
+
/**
|
276
|
+
* Sets the index of the active selection range layer.
|
277
|
+
*
|
278
|
+
* @param {number} layerIndex The index of the active selection range layer.
|
279
|
+
*/
|
280
|
+
setActiveSelectionLayerIndex(layerIndex) {
|
281
|
+
_classPrivateFieldSet(_activeSelectionLayer, this, layerIndex);
|
282
|
+
}
|
283
|
+
|
267
284
|
/**
|
268
285
|
* Marks the source of the selection. It can be one of the following values: `mouse`, or any other string.
|
269
286
|
*
|
@@ -343,10 +360,20 @@ class Selection {
|
|
343
360
|
// We are creating copy. We would like to modify just the start of the selection by below hook. Then original coords
|
344
361
|
// should be handled by next methods.
|
345
362
|
const coordsClone = coords.clone();
|
363
|
+
_classPrivateFieldSet(_disableHeadersHighlight, this, false);
|
346
364
|
_classPrivateFieldSet(_isFocusSelectionChanged, this, false);
|
347
365
|
this.runLocalHooks(`beforeSetRangeStart${fragment ? 'Only' : ''}`, coordsClone);
|
348
366
|
if (!isMultipleMode || isMultipleMode && !isMultipleSelection && isUndefined(multipleSelection)) {
|
349
367
|
this.selectedRange.clear();
|
368
|
+
arrayEach(this.highlight.getAreas(), highlight => void highlight.clear());
|
369
|
+
arrayEach(this.highlight.getLayeredAreas(), highlight => void highlight.clear());
|
370
|
+
arrayEach(this.highlight.getRowHeaders(), highlight => void highlight.clear());
|
371
|
+
arrayEach(this.highlight.getColumnHeaders(), highlight => void highlight.clear());
|
372
|
+
arrayEach(this.highlight.getActiveRowHeaders(), highlight => void highlight.clear());
|
373
|
+
arrayEach(this.highlight.getActiveColumnHeaders(), highlight => void highlight.clear());
|
374
|
+
arrayEach(this.highlight.getActiveCornerHeaders(), highlight => void highlight.clear());
|
375
|
+
arrayEach(this.highlight.getRowHighlights(), highlight => void highlight.clear());
|
376
|
+
arrayEach(this.highlight.getColumnHighlights(), highlight => void highlight.clear());
|
350
377
|
}
|
351
378
|
this.selectedRange.add(coordsClone).current().setHighlight(highlightCoords.clone());
|
352
379
|
if (this.getLayerLevel() === 0) {
|
@@ -376,15 +403,18 @@ class Selection {
|
|
376
403
|
* Ends selection range on given coordinate object.
|
377
404
|
*
|
378
405
|
* @param {CellCoords} coords Visual coords.
|
406
|
+
* @param {number} [layerIndex] The layer index to set the end on. If not provided, the current layer level is used.
|
379
407
|
*/
|
380
408
|
setRangeEnd(coords) {
|
409
|
+
let layerIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLayerLevel();
|
381
410
|
if (this.selectedRange.isEmpty()) {
|
382
411
|
return;
|
383
412
|
}
|
413
|
+
this.setActiveSelectionLayerIndex(layerIndex);
|
384
414
|
const coordsClone = coords.clone();
|
385
415
|
const countRows = this.tableProps.countRows();
|
386
416
|
const countCols = this.tableProps.countCols();
|
387
|
-
const isSingle = this.
|
417
|
+
const isSingle = this.getActiveSelectedRange().clone().setTo(coords).isSingleHeader();
|
388
418
|
|
389
419
|
// Ignore processing the end range when the header selection starts overlapping the corner and
|
390
420
|
// the selection is not a single header highlight.
|
@@ -393,7 +423,7 @@ class Selection {
|
|
393
423
|
}
|
394
424
|
this.runLocalHooks('beforeSetRangeEnd', coordsClone);
|
395
425
|
this.begin();
|
396
|
-
const cellRange = this.
|
426
|
+
const cellRange = this.getActiveSelectedRange();
|
397
427
|
if (!this.settings.navigableHeaders) {
|
398
428
|
cellRange.highlight.normalize();
|
399
429
|
}
|
@@ -424,8 +454,8 @@ class Selection {
|
|
424
454
|
}
|
425
455
|
}
|
426
456
|
this.runLocalHooks('beforeHighlightSet');
|
427
|
-
this.setRangeFocus(this.
|
428
|
-
this.applyAndCommit();
|
457
|
+
this.setRangeFocus(this.getActiveSelectedRange().highlight, layerIndex);
|
458
|
+
this.applyAndCommit(this.getActiveSelectedRange(), layerIndex);
|
429
459
|
const isLastLayer = _classPrivateFieldGet(_expectedLayersCount, this) === -1 || this.selectedRange.size() === _classPrivateFieldGet(_expectedLayersCount, this);
|
430
460
|
this.runLocalHooks('afterSetRangeEnd', coords, isLastLayer);
|
431
461
|
}
|
@@ -438,24 +468,10 @@ class Selection {
|
|
438
468
|
* @param {number} [layerLevel] The layer level to apply. If not provided, the current layer level is used.
|
439
469
|
*/
|
440
470
|
applyAndCommit() {
|
441
|
-
let cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.
|
471
|
+
let cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getActiveSelectedRange();
|
442
472
|
let layerLevel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLayerLevel();
|
443
473
|
const countRows = this.tableProps.countRows();
|
444
474
|
const countCols = this.tableProps.countCols();
|
445
|
-
|
446
|
-
// If the next layer level is lower than previous then clear all area and header highlights. This is the
|
447
|
-
// indication that the new selection is performing.
|
448
|
-
if (layerLevel < this.highlight.layerLevel) {
|
449
|
-
arrayEach(this.highlight.getAreas(), highlight => void highlight.clear());
|
450
|
-
arrayEach(this.highlight.getLayeredAreas(), highlight => void highlight.clear());
|
451
|
-
arrayEach(this.highlight.getRowHeaders(), highlight => void highlight.clear());
|
452
|
-
arrayEach(this.highlight.getColumnHeaders(), highlight => void highlight.clear());
|
453
|
-
arrayEach(this.highlight.getActiveRowHeaders(), highlight => void highlight.clear());
|
454
|
-
arrayEach(this.highlight.getActiveColumnHeaders(), highlight => void highlight.clear());
|
455
|
-
arrayEach(this.highlight.getActiveCornerHeaders(), highlight => void highlight.clear());
|
456
|
-
arrayEach(this.highlight.getRowHighlights(), highlight => void highlight.clear());
|
457
|
-
arrayEach(this.highlight.getColumnHighlights(), highlight => void highlight.clear());
|
458
|
-
}
|
459
475
|
this.highlight.useLayerLevel(layerLevel);
|
460
476
|
const areaHighlight = this.highlight.createArea();
|
461
477
|
const layeredAreaHighlight = this.highlight.createLayeredArea();
|
@@ -482,7 +498,7 @@ class Selection {
|
|
482
498
|
// For single cell selection in the same layer, we do not create area selection to prevent blue background.
|
483
499
|
// When non-consecutive selection is performed we have to add that missing area selection to the previous layer
|
484
500
|
// based on previous coordinates. It only occurs when the previous selection wasn't select multiple cells.
|
485
|
-
const previousRange = this.selectedRange.
|
501
|
+
const previousRange = this.selectedRange.peekByIndex(layerLevel - 1);
|
486
502
|
this.highlight.useLayerLevel(layerLevel - 1);
|
487
503
|
this.highlight.createArea().add(previousRange.from).commit()
|
488
504
|
// Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).
|
@@ -529,12 +545,17 @@ class Selection {
|
|
529
545
|
* Sets the selection focus position at the specified coordinates.
|
530
546
|
*
|
531
547
|
* @param {CellCoords} coords The CellCoords instance with defined visual coordinates.
|
548
|
+
* @param {number} [layerIndex] The layer index to set the focus on.
|
532
549
|
*/
|
533
550
|
setRangeFocus(coords) {
|
551
|
+
let layerIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLayerLevel();
|
534
552
|
if (this.selectedRange.isEmpty()) {
|
535
553
|
return;
|
536
554
|
}
|
537
|
-
|
555
|
+
this.setActiveSelectionLayerIndex(layerIndex);
|
556
|
+
_classPrivateFieldGet(_extenderTransformation, this).setActiveLayerIndex(layerIndex);
|
557
|
+
_classPrivateFieldGet(_focusTransformation, this).setActiveLayerIndex(layerIndex);
|
558
|
+
const cellRange = this.getActiveSelectedRange();
|
538
559
|
if (!this.inProgress) {
|
539
560
|
this.runLocalHooks('beforeSetFocus', coords);
|
540
561
|
}
|
@@ -563,15 +584,10 @@ class Selection {
|
|
563
584
|
*/
|
564
585
|
transformStart(rowDelta, colDelta) {
|
565
586
|
let createMissingRecords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
});
|
571
|
-
} else {
|
572
|
-
_classPrivateFieldGet(_transformation, this).resetOffsetSize();
|
573
|
-
}
|
574
|
-
this.setRangeStart(_classPrivateFieldGet(_transformation, this).transformStart(rowDelta, colDelta, createMissingRecords));
|
587
|
+
const {
|
588
|
+
visualCoords
|
589
|
+
} = _classPrivateFieldGet(_extenderTransformation, this).transformStart(rowDelta, colDelta, createMissingRecords);
|
590
|
+
this.setRangeStart(visualCoords);
|
575
591
|
}
|
576
592
|
|
577
593
|
/**
|
@@ -581,15 +597,11 @@ class Selection {
|
|
581
597
|
* @param {number} colDelta Columns number to move, value can be passed as negative number.
|
582
598
|
*/
|
583
599
|
transformEnd(rowDelta, colDelta) {
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
} else {
|
590
|
-
_classPrivateFieldGet(_transformation, this).resetOffsetSize();
|
591
|
-
}
|
592
|
-
this.setRangeEnd(_classPrivateFieldGet(_transformation, this).transformEnd(rowDelta, colDelta));
|
600
|
+
const {
|
601
|
+
visualCoords,
|
602
|
+
selectionLayer
|
603
|
+
} = _classPrivateFieldGet(_extenderTransformation, this).transformEnd(rowDelta, colDelta);
|
604
|
+
this.setRangeEnd(visualCoords, selectionLayer);
|
593
605
|
}
|
594
606
|
|
595
607
|
/**
|
@@ -599,28 +611,11 @@ class Selection {
|
|
599
611
|
* @param {number} colDelta Columns number to move, value can be passed as negative number.
|
600
612
|
*/
|
601
613
|
transformFocus(rowDelta, colDelta) {
|
602
|
-
const range = this.selectedRange.current();
|
603
614
|
const {
|
604
|
-
|
605
|
-
|
606
|
-
} =
|
607
|
-
|
608
|
-
const rowsInRange = this.tableProps.countRenderableRowsInRange(0, row - 1);
|
609
|
-
if (range.highlight.isHeader()) {
|
610
|
-
// for header focus selection calculate the new coords based on the selection including headers
|
611
|
-
_classPrivateFieldGet(_focusTransformation, this).setOffsetSize({
|
612
|
-
x: col < 0 ? Math.abs(col) : -columnsInRange,
|
613
|
-
y: row < 0 ? Math.abs(row) : -rowsInRange
|
614
|
-
});
|
615
|
-
} else {
|
616
|
-
// for focus selection in cells calculate the new coords only based on the selected cells
|
617
|
-
_classPrivateFieldGet(_focusTransformation, this).setOffsetSize({
|
618
|
-
x: col < 0 ? 0 : -columnsInRange,
|
619
|
-
y: row < 0 ? 0 : -rowsInRange
|
620
|
-
});
|
621
|
-
}
|
622
|
-
const focusCoords = _classPrivateFieldGet(_focusTransformation, this).transformStart(rowDelta, colDelta);
|
623
|
-
this.setRangeFocus(focusCoords.normalize());
|
615
|
+
selectionLayer,
|
616
|
+
visualCoords
|
617
|
+
} = _classPrivateFieldGet(_focusTransformation, this).transformStart(rowDelta, colDelta);
|
618
|
+
this.setRangeFocus(visualCoords.normalize(), selectionLayer);
|
624
619
|
}
|
625
620
|
|
626
621
|
/**
|
@@ -633,7 +628,7 @@ class Selection {
|
|
633
628
|
if (!this.isSelected()) {
|
634
629
|
return;
|
635
630
|
}
|
636
|
-
const range = this.
|
631
|
+
const range = this.getActiveSelectedRange();
|
637
632
|
if (this.isSelectedByCorner()) {
|
638
633
|
this.selectAll(true, true, {
|
639
634
|
disableHeadersHighlight: true
|
@@ -682,7 +677,7 @@ class Selection {
|
|
682
677
|
if (!this.isSelected()) {
|
683
678
|
return;
|
684
679
|
}
|
685
|
-
const range = this.
|
680
|
+
const range = this.getActiveSelectedRange();
|
686
681
|
if (this.isSelectedByCorner()) {
|
687
682
|
this.selectAll(true, true, {
|
688
683
|
disableHeadersHighlight: true
|
@@ -747,7 +742,7 @@ class Selection {
|
|
747
742
|
* @returns {boolean}
|
748
743
|
*/
|
749
744
|
isMultiple() {
|
750
|
-
let cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.
|
745
|
+
let cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getActiveSelectedRange();
|
751
746
|
if (!this.isSelected()) {
|
752
747
|
return false;
|
753
748
|
}
|
@@ -940,7 +935,7 @@ class Selection {
|
|
940
935
|
* the logical coordinates points on them.
|
941
936
|
*/
|
942
937
|
selectAll() {
|
943
|
-
var _this$
|
938
|
+
var _this$getActiveSelect;
|
944
939
|
let includeRowHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
945
940
|
let includeColumnHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
946
941
|
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
|
@@ -958,19 +953,20 @@ class Selection {
|
|
958
953
|
if (rowFrom === 0 && columnFrom === 0 && (nrOfRows === 0 || nrOfColumns === 0)) {
|
959
954
|
return;
|
960
955
|
}
|
961
|
-
let highlight = (_this$
|
956
|
+
let highlight = (_this$getActiveSelect = this.getActiveSelectedRange()) === null || _this$getActiveSelect === void 0 ? void 0 : _this$getActiveSelect.highlight;
|
962
957
|
const {
|
963
958
|
focusPosition,
|
964
959
|
disableHeadersHighlight
|
965
960
|
} = options;
|
966
|
-
_classPrivateFieldSet(_disableHeadersHighlight, this, disableHeadersHighlight);
|
967
961
|
if (focusPosition && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.row) && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.col)) {
|
968
962
|
highlight = this.tableProps.createCellCoords(clamp(focusPosition.row, rowFrom, nrOfRows - 1), clamp(focusPosition.col, columnFrom, nrOfColumns - 1));
|
969
963
|
}
|
970
964
|
const startCoords = this.tableProps.createCellCoords(rowFrom, columnFrom);
|
971
965
|
const endCoords = this.tableProps.createCellCoords(nrOfRows - 1, nrOfColumns - 1);
|
972
966
|
this.clear();
|
967
|
+
this.runLocalHooks('beforeSelectAll', startCoords, endCoords, highlight);
|
973
968
|
this.setRangeStartOnly(startCoords, undefined, highlight);
|
969
|
+
_classPrivateFieldSet(_disableHeadersHighlight, this, disableHeadersHighlight);
|
974
970
|
if (columnFrom < 0) {
|
975
971
|
this.selectedByRowHeader.add(this.getLayerLevel());
|
976
972
|
}
|
@@ -978,8 +974,8 @@ class Selection {
|
|
978
974
|
this.selectedByColumnHeader.add(this.getLayerLevel());
|
979
975
|
}
|
980
976
|
this.setRangeEnd(endCoords);
|
977
|
+
this.runLocalHooks('afterSelectAll', startCoords, endCoords, highlight);
|
981
978
|
this.finish();
|
982
|
-
_classPrivateFieldSet(_disableHeadersHighlight, this, false);
|
983
979
|
}
|
984
980
|
|
985
981
|
/**
|
@@ -1086,10 +1082,6 @@ class Selection {
|
|
1086
1082
|
const from = this.tableProps.createCellCoords(fromRow, start);
|
1087
1083
|
const to = this.tableProps.createCellCoords(toRow, end);
|
1088
1084
|
this.runLocalHooks('beforeSelectColumns', from, to, highlight);
|
1089
|
-
|
1090
|
-
// disallow modifying row axis for that hooks
|
1091
|
-
from.row = fromRow;
|
1092
|
-
to.row = toRow;
|
1093
1085
|
this.setRangeStartOnly(from, undefined, highlight);
|
1094
1086
|
this.selectedByColumnHeader.add(this.getLayerLevel());
|
1095
1087
|
this.setRangeEnd(to);
|
@@ -1141,10 +1133,6 @@ class Selection {
|
|
1141
1133
|
const from = this.tableProps.createCellCoords(startRow, fromColumn);
|
1142
1134
|
const to = this.tableProps.createCellCoords(endRow, toColumn);
|
1143
1135
|
this.runLocalHooks('beforeSelectRows', from, to, highlight);
|
1144
|
-
|
1145
|
-
// disallow modifying column axis for that hooks
|
1146
|
-
from.col = fromColumn;
|
1147
|
-
to.col = toColumn;
|
1148
1136
|
this.setRangeStartOnly(from, undefined, highlight);
|
1149
1137
|
this.selectedByRowHeader.add(this.getLayerLevel());
|
1150
1138
|
this.setRangeEnd(to);
|
@@ -1154,6 +1142,57 @@ class Selection {
|
|
1154
1142
|
return isValid;
|
1155
1143
|
}
|
1156
1144
|
|
1145
|
+
/**
|
1146
|
+
* Allows importing the selection for all layers from the provided array of CellRange objects.
|
1147
|
+
* The method clears the current selection and sets the new one without triggering any
|
1148
|
+
* selection related hooks.
|
1149
|
+
*
|
1150
|
+
* @param {SelectionState} selectionState The selection state to import.
|
1151
|
+
*/
|
1152
|
+
importSelection(_ref) {
|
1153
|
+
let {
|
1154
|
+
ranges,
|
1155
|
+
activeRange,
|
1156
|
+
activeSelectionLayer,
|
1157
|
+
selectedByRowHeader,
|
1158
|
+
selectedByColumnHeader,
|
1159
|
+
disableHeadersHighlight
|
1160
|
+
} = _ref;
|
1161
|
+
if (ranges.length === 0) {
|
1162
|
+
return;
|
1163
|
+
}
|
1164
|
+
this.selectedRange.clear();
|
1165
|
+
this.highlight.clear();
|
1166
|
+
this.inProgress = true;
|
1167
|
+
_classPrivateFieldSet(_disableHeadersHighlight, this, disableHeadersHighlight);
|
1168
|
+
this.selectedByRowHeader = new Set(selectedByRowHeader);
|
1169
|
+
this.selectedByColumnHeader = new Set(selectedByColumnHeader);
|
1170
|
+
this.setActiveSelectionLayerIndex(0);
|
1171
|
+
ranges.forEach((cellRange, selectionLayerIndex) => {
|
1172
|
+
this.selectedRange.push(cellRange);
|
1173
|
+
this.applyAndCommit(cellRange, selectionLayerIndex);
|
1174
|
+
});
|
1175
|
+
this.setRangeFocus(activeRange.highlight, activeSelectionLayer);
|
1176
|
+
_classPrivateFieldSet(_disableHeadersHighlight, this, false);
|
1177
|
+
this.inProgress = false;
|
1178
|
+
}
|
1179
|
+
|
1180
|
+
/**
|
1181
|
+
* Exports all selection layers with other properties related to the selection state.
|
1182
|
+
*
|
1183
|
+
* @returns {SelectionState}
|
1184
|
+
*/
|
1185
|
+
exportSelection() {
|
1186
|
+
return {
|
1187
|
+
ranges: Array.from(this.selectedRange).map(range => range.clone()),
|
1188
|
+
activeRange: this.getActiveSelectedRange(),
|
1189
|
+
activeSelectionLayer: this.getActiveSelectionLayerIndex(),
|
1190
|
+
selectedByRowHeader: Array.from(this.selectedByRowHeader),
|
1191
|
+
selectedByColumnHeader: Array.from(this.selectedByColumnHeader),
|
1192
|
+
disableHeadersHighlight: _classPrivateFieldGet(_disableHeadersHighlight, this)
|
1193
|
+
};
|
1194
|
+
}
|
1195
|
+
|
1157
1196
|
/**
|
1158
1197
|
* Refreshes the whole selection by clearing, reapplying and committing (calculating visual to renderable indexes)
|
1159
1198
|
* the selection by using already added visual ranges. The method can be useful when underneath some indexes
|
@@ -1220,7 +1259,7 @@ class Selection {
|
|
1220
1259
|
return;
|
1221
1260
|
}
|
1222
1261
|
const currentLayer = this.getLayerLevel();
|
1223
|
-
const cellRange = this.
|
1262
|
+
const cellRange = this.getActiveSelectedRange();
|
1224
1263
|
if (this.highlight.isEnabledFor(FOCUS_TYPE, cellRange.highlight)) {
|
1225
1264
|
this.highlight.getFocus().commit().syncWith(cellRange);
|
1226
1265
|
}
|