handsontable 0.0.0-next-010265d-20231005 → 0.0.0-next-9379dd1-20231020
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of handsontable might be problematic. Click here for more details.
- package/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
- package/3rdparty/walkontable/src/cell/coords.js +50 -11
- package/3rdparty/walkontable/src/cell/coords.mjs +50 -11
- package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
- package/3rdparty/walkontable/src/cell/range.js +38 -7
- package/3rdparty/walkontable/src/cell/range.mjs +38 -7
- package/3rdparty/walkontable/src/core/_base.js +9 -3
- package/3rdparty/walkontable/src/core/_base.mjs +9 -3
- package/3rdparty/walkontable/src/core/clone.js +2 -2
- package/3rdparty/walkontable/src/core/clone.mjs +2 -2
- package/3rdparty/walkontable/src/core/core.js +3 -2
- package/3rdparty/walkontable/src/core/core.mjs +3 -2
- package/3rdparty/walkontable/src/event.js +12 -10
- package/3rdparty/walkontable/src/event.mjs +12 -10
- package/3rdparty/walkontable/src/facade/core.js +2 -2
- package/3rdparty/walkontable/src/facade/core.mjs +2 -2
- package/3rdparty/walkontable/src/index.js +10 -2
- package/3rdparty/walkontable/src/index.mjs +2 -2
- package/3rdparty/walkontable/src/overlay/_base.js +13 -2
- package/3rdparty/walkontable/src/overlay/_base.mjs +14 -3
- package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -6
- package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -6
- package/3rdparty/walkontable/src/overlay/top.js +2 -6
- package/3rdparty/walkontable/src/overlay/top.mjs +2 -6
- package/3rdparty/walkontable/src/renderer/cells.js +10 -0
- package/3rdparty/walkontable/src/renderer/cells.mjs +11 -1
- package/3rdparty/walkontable/src/renderer/columnHeaders.js +10 -0
- package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +11 -1
- package/3rdparty/walkontable/src/renderer/rowHeaders.js +5 -0
- package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +5 -0
- package/3rdparty/walkontable/src/renderer/rows.js +13 -0
- package/3rdparty/walkontable/src/renderer/rows.mjs +13 -0
- package/3rdparty/walkontable/src/renderer/table.js +9 -0
- package/3rdparty/walkontable/src/renderer/table.mjs +9 -0
- package/3rdparty/walkontable/src/scroll.js +2 -0
- package/3rdparty/walkontable/src/scroll.mjs +2 -0
- package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +7 -12
- package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
- package/3rdparty/walkontable/src/selection/border/constants.js +16 -0
- package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
- package/3rdparty/walkontable/src/selection/constants.js +62 -0
- package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
- package/3rdparty/walkontable/src/selection/index.js +26 -0
- package/3rdparty/walkontable/src/selection/index.mjs +5 -0
- package/3rdparty/walkontable/src/selection/manager.js +274 -0
- package/3rdparty/walkontable/src/selection/manager.mjs +269 -0
- package/3rdparty/walkontable/src/selection/scanner.js +270 -0
- package/3rdparty/walkontable/src/selection/scanner.mjs +267 -0
- package/3rdparty/walkontable/src/selection/selection.js +101 -0
- package/3rdparty/walkontable/src/selection/selection.mjs +96 -0
- package/3rdparty/walkontable/src/settings.js +13 -4
- package/3rdparty/walkontable/src/settings.mjs +13 -4
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
- package/3rdparty/walkontable/src/table.js +19 -78
- package/3rdparty/walkontable/src/table.mjs +20 -79
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/cellTypes/dateType/dateType.d.ts +3 -3
- package/cellTypes/dateType/dateType.js +2 -2
- package/cellTypes/dateType/dateType.mjs +2 -2
- package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
- package/cellTypes/handsontableType/handsontableType.js +2 -2
- package/cellTypes/handsontableType/handsontableType.mjs +2 -2
- package/cellTypes/index.d.ts +3 -0
- package/cellTypes/index.js +4 -0
- package/cellTypes/index.mjs +3 -1
- package/cellTypes/selectType/index.d.ts +1 -0
- package/cellTypes/selectType/index.js +6 -0
- package/cellTypes/selectType/index.mjs +1 -0
- package/cellTypes/selectType/selectType.d.ts +14 -0
- package/cellTypes/selectType/selectType.js +13 -0
- package/cellTypes/selectType/selectType.mjs +8 -0
- package/core/focusCatcher/focusDetector.js +63 -0
- package/core/focusCatcher/focusDetector.mjs +59 -0
- package/core/focusCatcher/index.js +142 -0
- package/core/focusCatcher/index.mjs +138 -0
- package/core/index.js +9 -0
- package/core/index.mjs +1 -0
- package/core.d.ts +9 -4
- package/core.js +285 -327
- package/core.mjs +285 -327
- package/dataMap/metaManager/metaSchema.js +65 -0
- package/dataMap/metaManager/metaSchema.mjs +65 -0
- package/dataMap/metaManager/mods/extendMetaProperties.js +7 -1
- package/dataMap/metaManager/mods/extendMetaProperties.mjs +7 -1
- package/dataMap/replaceData.js +5 -0
- package/dataMap/replaceData.mjs +5 -0
- package/dist/handsontable.css +40 -5
- package/dist/handsontable.full.css +40 -5
- package/dist/handsontable.full.js +11744 -6945
- package/dist/handsontable.full.min.css +4 -4
- package/dist/handsontable.full.min.js +141 -141
- package/dist/handsontable.js +14036 -9237
- package/dist/handsontable.min.css +3 -3
- package/dist/handsontable.min.js +21 -21
- package/dist/languages/all.js +6 -2
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/en-US.js +3 -1
- package/dist/languages/en-US.min.js +1 -1
- package/dist/languages/pl-PL.js +3 -1
- package/dist/languages/pl-PL.min.js +1 -1
- package/editorManager.js +15 -87
- package/editorManager.mjs +16 -87
- package/editors/autocompleteEditor/autocompleteEditor.js +53 -2
- package/editors/autocompleteEditor/autocompleteEditor.mjs +54 -3
- package/editors/dateEditor/dateEditor.js +26 -7
- package/editors/dateEditor/dateEditor.mjs +27 -8
- package/editors/handsontableEditor/handsontableEditor.js +9 -1
- package/editors/handsontableEditor/handsontableEditor.mjs +10 -2
- package/editors/textEditor/textEditor.js +19 -27
- package/editors/textEditor/textEditor.mjs +22 -30
- package/focusManager.d.ts +12 -0
- package/focusManager.js +265 -0
- package/focusManager.mjs +261 -0
- package/helpers/a11y.js +79 -0
- package/helpers/a11y.mjs +38 -0
- package/helpers/dom/element.js +188 -9
- package/helpers/dom/element.mjs +182 -9
- package/helpers/mixed.js +1 -1
- package/helpers/mixed.mjs +1 -1
- package/helpers/number.d.ts +1 -0
- package/helpers/number.js +18 -0
- package/helpers/number.mjs +17 -0
- package/i18n/constants.js +7 -1
- package/i18n/constants.mjs +4 -1
- package/i18n/languages/en-US.js +3 -1
- package/i18n/languages/en-US.mjs +3 -1
- package/i18n/languages/pl-PL.js +3 -1
- package/i18n/languages/pl-PL.mjs +3 -1
- package/languages/all.js +6 -2
- package/languages/en-US.js +3 -1
- package/languages/en-US.mjs +3 -1
- package/languages/index.js +6 -2
- package/languages/pl-PL.js +3 -1
- package/languages/pl-PL.mjs +3 -1
- package/package.json +21 -1
- package/pluginHooks.d.ts +12 -1
- package/pluginHooks.js +152 -1
- package/pluginHooks.mjs +152 -1
- package/plugins/collapsibleColumns/collapsibleColumns.js +74 -4
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +75 -5
- package/plugins/columnSorting/columnSorting.js +43 -0
- package/plugins/columnSorting/columnSorting.mjs +44 -3
- package/plugins/columnSorting/index.js +3 -1
- package/plugins/columnSorting/index.mjs +1 -1
- package/plugins/comments/commentEditor.js +1 -0
- package/plugins/comments/commentEditor.mjs +1 -0
- package/plugins/comments/comments.js +252 -189
- package/plugins/comments/comments.mjs +251 -190
- package/plugins/comments/contextMenuItem/addEditComment.js +41 -0
- package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
- package/plugins/comments/contextMenuItem/readOnlyComment.js +49 -0
- package/plugins/comments/contextMenuItem/readOnlyComment.mjs +43 -0
- package/plugins/comments/contextMenuItem/removeComment.js +38 -0
- package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
- package/plugins/contextMenu/commandExecutor.js +2 -3
- package/plugins/contextMenu/commandExecutor.mjs +2 -3
- package/plugins/contextMenu/contextMenu.d.ts +1 -1
- package/plugins/contextMenu/contextMenu.js +75 -36
- package/plugins/contextMenu/contextMenu.mjs +74 -35
- package/plugins/contextMenu/itemsFactory.js +2 -3
- package/plugins/contextMenu/itemsFactory.mjs +3 -4
- package/plugins/contextMenu/{cursor.mjs → menu/cursor.js} +6 -4
- package/plugins/contextMenu/{cursor.js → menu/cursor.mjs} +4 -10
- package/plugins/contextMenu/menu/index.js +9 -0
- package/plugins/contextMenu/menu/index.mjs +1 -0
- package/plugins/contextMenu/{menu.js → menu/menu.js} +96 -308
- package/plugins/contextMenu/{menu.mjs → menu/menu.mjs} +97 -309
- package/plugins/contextMenu/menu/navigator.js +152 -0
- package/plugins/contextMenu/menu/navigator.mjs +148 -0
- package/plugins/contextMenu/menu/positioner.js +213 -0
- package/plugins/contextMenu/menu/positioner.mjs +209 -0
- package/plugins/contextMenu/menu/utils.js +177 -0
- package/plugins/contextMenu/menu/utils.mjs +163 -0
- package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
- package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
- package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
- package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
- package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
- package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
- package/plugins/contextMenu/{predefinedItems.js → predefinedItems/index.js} +14 -14
- package/plugins/contextMenu/predefinedItems/index.mjs +68 -0
- package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
- package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
- package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
- package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
- package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
- package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
- package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
- package/plugins/contextMenu/utils.js +35 -151
- package/plugins/contextMenu/utils.mjs +35 -144
- package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
- package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
- package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
- package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
- package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
- package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
- package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
- package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
- package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
- package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
- package/plugins/copyPaste/copyPaste.js +127 -78
- package/plugins/copyPaste/copyPaste.mjs +128 -79
- package/plugins/customBorders/customBorders.js +23 -20
- package/plugins/customBorders/customBorders.mjs +24 -21
- package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
- package/plugins/dropdownMenu/dropdownMenu.js +97 -38
- package/plugins/dropdownMenu/dropdownMenu.mjs +96 -37
- package/plugins/filters/constants.mjs +1 -1
- package/plugins/filters/filters.js +31 -14
- package/plugins/filters/filters.mjs +31 -14
- package/plugins/filters/ui/select.js +3 -3
- package/plugins/filters/ui/select.mjs +2 -2
- package/plugins/hiddenColumns/hiddenColumns.mjs +1 -1
- package/plugins/hiddenRows/hiddenRows.mjs +1 -1
- package/plugins/manualColumnMove/manualColumnMove.js +3 -1
- package/plugins/manualColumnMove/manualColumnMove.mjs +3 -1
- package/plugins/mergeCells/mergeCells.js +5 -16
- package/plugins/mergeCells/mergeCells.mjs +5 -16
- package/plugins/multiColumnSorting/multiColumnSorting.js +37 -2
- package/plugins/multiColumnSorting/multiColumnSorting.mjs +37 -2
- package/plugins/nestedHeaders/nestedHeaders.js +240 -10
- package/plugins/nestedHeaders/nestedHeaders.mjs +241 -11
- package/plugins/nestedHeaders/stateManager/index.js +102 -3
- package/plugins/nestedHeaders/stateManager/index.mjs +102 -3
- package/plugins/nestedRows/nestedRows.js +41 -0
- package/plugins/nestedRows/nestedRows.mjs +41 -0
- package/plugins/nestedRows/ui/headers.js +11 -0
- package/plugins/nestedRows/ui/headers.mjs +12 -1
- package/renderers/autocompleteRenderer/autocompleteRenderer.js +8 -0
- package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +8 -0
- package/renderers/baseRenderer/baseRenderer.js +17 -0
- package/renderers/baseRenderer/baseRenderer.mjs +18 -1
- package/renderers/checkboxRenderer/checkboxRenderer.js +9 -4
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
- package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
- package/renderers/dateRenderer/dateRenderer.js +29 -0
- package/renderers/dateRenderer/dateRenderer.mjs +24 -0
- package/renderers/dateRenderer/index.d.ts +1 -0
- package/renderers/dateRenderer/index.js +6 -0
- package/renderers/dateRenderer/index.mjs +1 -0
- package/renderers/handsontableRenderer/handsontableRenderer.d.ts +5 -0
- package/renderers/handsontableRenderer/handsontableRenderer.js +29 -0
- package/renderers/handsontableRenderer/handsontableRenderer.mjs +24 -0
- package/renderers/handsontableRenderer/index.d.ts +1 -0
- package/renderers/handsontableRenderer/index.js +6 -0
- package/renderers/handsontableRenderer/index.mjs +1 -0
- package/renderers/index.d.ts +9 -0
- package/renderers/selectRenderer/index.d.ts +1 -0
- package/renderers/selectRenderer/index.js +6 -0
- package/renderers/selectRenderer/index.mjs +1 -0
- package/renderers/selectRenderer/selectRenderer.d.ts +5 -0
- package/renderers/selectRenderer/selectRenderer.js +27 -0
- package/renderers/selectRenderer/selectRenderer.mjs +22 -0
- package/selection/highlight/highlight.js +256 -71
- package/selection/highlight/highlight.mjs +250 -71
- package/selection/highlight/types/activeHeader.js +10 -8
- package/selection/highlight/types/activeHeader.mjs +10 -8
- package/selection/highlight/types/area.js +6 -18
- package/selection/highlight/types/area.mjs +6 -18
- package/selection/highlight/types/areaLayered.js +31 -0
- package/selection/highlight/types/areaLayered.mjs +26 -0
- package/selection/highlight/types/column.js +27 -0
- package/selection/highlight/types/column.mjs +22 -0
- package/selection/highlight/types/customSelection.js +7 -9
- package/selection/highlight/types/customSelection.mjs +7 -9
- package/selection/highlight/types/fill.js +5 -7
- package/selection/highlight/types/fill.mjs +5 -7
- package/selection/highlight/types/{cell.js → focus.js} +5 -7
- package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
- package/selection/highlight/types/header.js +9 -18
- package/selection/highlight/types/header.mjs +9 -18
- package/selection/highlight/types/row.js +27 -0
- package/selection/highlight/types/row.mjs +22 -0
- package/selection/highlight/visualSelection.js +31 -27
- package/selection/highlight/visualSelection.mjs +31 -27
- package/selection/index.js +4 -7
- package/selection/index.mjs +2 -3
- package/selection/mouseEventHandler.js +7 -1
- package/selection/mouseEventHandler.mjs +7 -1
- package/selection/range.js +8 -8
- package/selection/range.mjs +8 -8
- package/selection/selection.js +321 -152
- package/selection/selection.mjs +318 -151
- package/selection/transformation.js +232 -90
- package/selection/transformation.mjs +232 -90
- package/selection/utils.js +15 -21
- package/selection/utils.mjs +16 -21
- package/settings.d.ts +4 -0
- package/shortcutContexts/commands/editor/closeAndSave.js +12 -0
- package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
- package/shortcutContexts/commands/editor/closeWithoutSaving.js +12 -0
- package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
- package/shortcutContexts/commands/editor/fastOpen.js +16 -0
- package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
- package/shortcutContexts/commands/editor/index.js +16 -0
- package/shortcutContexts/commands/editor/index.mjs +12 -0
- package/shortcutContexts/commands/editor/open.js +27 -0
- package/shortcutContexts/commands/editor/open.mjs +23 -0
- package/shortcutContexts/commands/emptySelectedCells.js +11 -0
- package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
- package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
- package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +25 -0
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +21 -0
- package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
- package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
- package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
- package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
- package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
- package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +29 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +19 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +19 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +29 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +29 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +29 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
- package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
- package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +25 -0
- package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +21 -0
- package/shortcutContexts/commands/index.js +35 -0
- package/shortcutContexts/commands/index.mjs +31 -0
- package/shortcutContexts/commands/moveCellSelection/down.js +13 -0
- package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +33 -0
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +29 -0
- package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
- package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +12 -0
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
- package/shortcutContexts/commands/moveCellSelection/inlineStart.js +12 -0
- package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
- package/shortcutContexts/commands/moveCellSelection/left.js +10 -0
- package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
- package/shortcutContexts/commands/moveCellSelection/right.js +10 -0
- package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +18 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +14 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +19 -0
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
- package/shortcutContexts/commands/moveCellSelection/toMostRight.js +21 -0
- package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTop.js +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +19 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
- package/shortcutContexts/commands/moveCellSelection/up.js +13 -0
- package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +33 -0
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +29 -0
- package/shortcutContexts/commands/populateSelectedCellsData.js +29 -0
- package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
- package/shortcutContexts/commands/scrollToFocusedCell.js +35 -0
- package/shortcutContexts/commands/scrollToFocusedCell.mjs +31 -0
- package/shortcutContexts/commands/selectAll.js +12 -0
- package/shortcutContexts/commands/selectAll.mjs +8 -0
- package/shortcutContexts/constants.js +13 -0
- package/shortcutContexts/constants.mjs +8 -0
- package/shortcutContexts/editor.js +25 -0
- package/shortcutContexts/editor.mjs +21 -0
- package/shortcutContexts/grid.js +163 -0
- package/shortcutContexts/grid.mjs +159 -0
- package/shortcutContexts/index.js +24 -0
- package/shortcutContexts/index.mjs +11 -0
- package/shortcuts/context.js +20 -2
- package/shortcuts/context.mjs +20 -3
- package/shortcuts/manager.js +25 -7
- package/shortcuts/manager.mjs +26 -7
- package/shortcuts/recorder.js +3 -3
- package/shortcuts/recorder.mjs +3 -3
- package/shortcuts/utils.js +19 -5
- package/shortcuts/utils.mjs +18 -4
- package/tableView.js +111 -13
- package/tableView.mjs +112 -14
- package/3rdparty/walkontable/src/selection.js +0 -295
- package/3rdparty/walkontable/src/selection.mjs +0 -290
- package/plugins/contextMenu/predefinedItems.mjs +0 -68
- package/plugins/copyPaste/focusableElement.js +0 -186
- package/plugins/copyPaste/focusableElement.mjs +0 -180
- package/selection/highlight/constants.js +0 -15
- package/selection/highlight/constants.mjs +0 -6
- package/selection/highlight/types/index.js +0 -35
- package/selection/highlight/types/index.mjs +0 -31
@@ -13,7 +13,7 @@ import { rangeEach } from "../../helpers/number.mjs";
|
|
13
13
|
import { arrayEach, arrayMap, arrayReduce } from "../../helpers/array.mjs";
|
14
14
|
import { isObject } from "../../helpers/object.mjs";
|
15
15
|
import { isUndefined } from "../../helpers/mixed.mjs";
|
16
|
-
import { SEPARATOR } from "../contextMenu/predefinedItems.mjs";
|
16
|
+
import { SEPARATOR } from "../contextMenu/predefinedItems/index.mjs";
|
17
17
|
import Hooks from "../../pluginHooks.mjs";
|
18
18
|
import hideRowItem from "./contextMenuItem/hideRow.mjs";
|
19
19
|
import showRowItem from "./contextMenuItem/showRow.mjs";
|
@@ -387,7 +387,9 @@ class ManualColumnMove extends _base.BasePlugin {
|
|
387
387
|
const priv = privatePool.get(this);
|
388
388
|
const firstVisible = this.hot.view.getFirstFullyVisibleColumn();
|
389
389
|
if (this.isFixedColumnsStart(priv.hoveredColumn) && firstVisible > 0) {
|
390
|
-
this.hot.scrollViewportTo(
|
390
|
+
this.hot.scrollViewportTo({
|
391
|
+
col: this.hot.columnIndexMapper.getNearestNotHiddenIndex(firstVisible - 1, -1)
|
392
|
+
});
|
391
393
|
}
|
392
394
|
const wtTable = this.hot.view._wt.wtTable;
|
393
395
|
const scrollableElement = this.hot.view._wt.wtOverlays.scrollableElement;
|
@@ -381,7 +381,9 @@ export class ManualColumnMove extends BasePlugin {
|
|
381
381
|
const priv = privatePool.get(this);
|
382
382
|
const firstVisible = this.hot.view.getFirstFullyVisibleColumn();
|
383
383
|
if (this.isFixedColumnsStart(priv.hoveredColumn) && firstVisible > 0) {
|
384
|
-
this.hot.scrollViewportTo(
|
384
|
+
this.hot.scrollViewportTo({
|
385
|
+
col: this.hot.columnIndexMapper.getNearestNotHiddenIndex(firstVisible - 1, -1)
|
386
|
+
});
|
385
387
|
}
|
386
388
|
const wtTable = this.hot.view._wt.wtTable;
|
387
389
|
const scrollableElement = this.hot.view._wt.wtOverlays.scrollableElement;
|
@@ -188,9 +188,6 @@ class MergeCells extends _base.BasePlugin {
|
|
188
188
|
this.addHook('afterDrawSelection', function () {
|
189
189
|
return _this.onAfterDrawSelection(...arguments);
|
190
190
|
});
|
191
|
-
this.addHook('beforeRemoveCellClassNames', function () {
|
192
|
-
return _this.onBeforeRemoveCellClassNames(...arguments);
|
193
|
-
});
|
194
191
|
this.addHook('beforeUndoStackChange', (action, source) => {
|
195
192
|
if (source === 'MergeCells') {
|
196
193
|
return false;
|
@@ -575,8 +572,11 @@ class MergeCells extends _base.BasePlugin {
|
|
575
572
|
gridContext.addShortcut({
|
576
573
|
keys: [['Control', 'm']],
|
577
574
|
callback: () => {
|
578
|
-
this.
|
579
|
-
|
575
|
+
const range = this.hot.getSelectedRangeLast();
|
576
|
+
if (range && !range.isSingleHeader()) {
|
577
|
+
this.toggleMerge(range);
|
578
|
+
this.hot.render();
|
579
|
+
}
|
580
580
|
},
|
581
581
|
runOnlyIf: event => !event.altKey,
|
582
582
|
// right ALT in some systems triggers ALT+CTRL
|
@@ -1199,16 +1199,5 @@ class MergeCells extends _base.BasePlugin {
|
|
1199
1199
|
}
|
1200
1200
|
return this.selectionCalculations.getSelectedMergedCellClassName(currentRow, currentColumn, cornersOfSelection, layerLevel);
|
1201
1201
|
}
|
1202
|
-
|
1203
|
-
/**
|
1204
|
-
* `beforeRemoveCellClassNames` hook callback. Used to remove additional class name from all cells in the table.
|
1205
|
-
*
|
1206
|
-
* @private
|
1207
|
-
* @returns {string[]} An `Array` of `String`s. Each of these strings will act like class names to be removed from
|
1208
|
-
* all the cells in the table.
|
1209
|
-
*/
|
1210
|
-
onBeforeRemoveCellClassNames() {
|
1211
|
-
return this.selectionCalculations.getSelectedMergedCellClassNameToRemove();
|
1212
|
-
}
|
1213
1202
|
}
|
1214
1203
|
exports.MergeCells = MergeCells;
|
@@ -182,9 +182,6 @@ export class MergeCells extends BasePlugin {
|
|
182
182
|
this.addHook('afterDrawSelection', function () {
|
183
183
|
return _this.onAfterDrawSelection(...arguments);
|
184
184
|
});
|
185
|
-
this.addHook('beforeRemoveCellClassNames', function () {
|
186
|
-
return _this.onBeforeRemoveCellClassNames(...arguments);
|
187
|
-
});
|
188
185
|
this.addHook('beforeUndoStackChange', (action, source) => {
|
189
186
|
if (source === 'MergeCells') {
|
190
187
|
return false;
|
@@ -569,8 +566,11 @@ export class MergeCells extends BasePlugin {
|
|
569
566
|
gridContext.addShortcut({
|
570
567
|
keys: [['Control', 'm']],
|
571
568
|
callback: () => {
|
572
|
-
this.
|
573
|
-
|
569
|
+
const range = this.hot.getSelectedRangeLast();
|
570
|
+
if (range && !range.isSingleHeader()) {
|
571
|
+
this.toggleMerge(range);
|
572
|
+
this.hot.render();
|
573
|
+
}
|
574
574
|
},
|
575
575
|
runOnlyIf: event => !event.altKey,
|
576
576
|
// right ALT in some systems triggers ALT+CTRL
|
@@ -1193,15 +1193,4 @@ export class MergeCells extends BasePlugin {
|
|
1193
1193
|
}
|
1194
1194
|
return this.selectionCalculations.getSelectedMergedCellClassName(currentRow, currentColumn, cornersOfSelection, layerLevel);
|
1195
1195
|
}
|
1196
|
-
|
1197
|
-
/**
|
1198
|
-
* `beforeRemoveCellClassNames` hook callback. Used to remove additional class name from all cells in the table.
|
1199
|
-
*
|
1200
|
-
* @private
|
1201
|
-
* @returns {string[]} An `Array` of `String`s. Each of these strings will act like class names to be removed from
|
1202
|
-
* all the cells in the table.
|
1203
|
-
*/
|
1204
|
-
onBeforeRemoveCellClassNames() {
|
1205
|
-
return this.selectionCalculations.getSelectedMergedCellClassNameToRemove();
|
1206
|
-
}
|
1207
1196
|
}
|
@@ -12,8 +12,8 @@ const PLUGIN_KEY = 'multiColumnSorting';
|
|
12
12
|
exports.PLUGIN_KEY = PLUGIN_KEY;
|
13
13
|
const PLUGIN_PRIORITY = 170;
|
14
14
|
exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
|
15
|
-
const APPEND_COLUMN_CONFIG_STRATEGY = 'append';
|
16
15
|
const CONFLICTED_PLUGIN_KEY = 'columnSorting';
|
16
|
+
const SHORTCUTS_GROUP = PLUGIN_KEY;
|
17
17
|
(0, _sortService.registerRootComparator)(PLUGIN_KEY, _rootComparator.rootComparator);
|
18
18
|
|
19
19
|
/**
|
@@ -113,6 +113,41 @@ class MultiColumnSorting extends _columnSorting.ColumnSorting {
|
|
113
113
|
super.disablePlugin();
|
114
114
|
}
|
115
115
|
|
116
|
+
/**
|
117
|
+
* Register shortcuts responsible for toggling column sorting functionality.
|
118
|
+
*
|
119
|
+
* @private
|
120
|
+
*/
|
121
|
+
registerShortcuts() {
|
122
|
+
super.registerShortcuts();
|
123
|
+
this.hot.getShortcutManager().getContext('grid').addShortcut({
|
124
|
+
keys: [['Shift', 'Enter']],
|
125
|
+
callback: () => {
|
126
|
+
const {
|
127
|
+
highlight
|
128
|
+
} = this.hot.getSelectedRangeLast();
|
129
|
+
if (highlight.row === -1 && highlight.col >= 0) {
|
130
|
+
this.sort(this.getNextSortConfig(highlight.col, _columnSorting.APPEND_COLUMN_CONFIG_STRATEGY));
|
131
|
+
}
|
132
|
+
},
|
133
|
+
runOnlyIf: () => {
|
134
|
+
var _this$hot$getSelected;
|
135
|
+
return (_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight.isHeader();
|
136
|
+
},
|
137
|
+
group: SHORTCUTS_GROUP
|
138
|
+
});
|
139
|
+
}
|
140
|
+
|
141
|
+
/**
|
142
|
+
* Unregister shortcuts responsible for toggling column sorting functionality.
|
143
|
+
*
|
144
|
+
* @private
|
145
|
+
*/
|
146
|
+
unregisterShortcuts() {
|
147
|
+
super.unregisterShortcuts();
|
148
|
+
this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
|
149
|
+
}
|
150
|
+
|
116
151
|
/**
|
117
152
|
* Sorts the table by chosen columns and orders.
|
118
153
|
*
|
@@ -262,7 +297,7 @@ class MultiColumnSorting extends _columnSorting.ColumnSorting {
|
|
262
297
|
if (this.hot.getShortcutManager().isCtrlPressed()) {
|
263
298
|
this.hot.deselectCell();
|
264
299
|
this.hot.selectColumns(coords.col);
|
265
|
-
this.sort(this.getNextSortConfig(coords.col, APPEND_COLUMN_CONFIG_STRATEGY));
|
300
|
+
this.sort(this.getNextSortConfig(coords.col, _columnSorting.APPEND_COLUMN_CONFIG_STRATEGY));
|
266
301
|
} else {
|
267
302
|
this.sort(this.getColumnNextConfig(coords.col));
|
268
303
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { ColumnSorting } from "../columnSorting/index.mjs";
|
1
|
+
import { APPEND_COLUMN_CONFIG_STRATEGY, ColumnSorting } from "../columnSorting/index.mjs";
|
2
2
|
import { registerRootComparator } from "../columnSorting/sortService/index.mjs";
|
3
3
|
import { wasHeaderClickedProperly } from "../columnSorting/utils.mjs";
|
4
4
|
import { addClass, removeClass } from "../../helpers/dom/element.mjs";
|
@@ -7,8 +7,8 @@ import { warnAboutPluginsConflict } from "./utils.mjs";
|
|
7
7
|
import { getClassesToAdd, getClassesToRemove } from "./domHelpers.mjs";
|
8
8
|
export const PLUGIN_KEY = 'multiColumnSorting';
|
9
9
|
export const PLUGIN_PRIORITY = 170;
|
10
|
-
const APPEND_COLUMN_CONFIG_STRATEGY = 'append';
|
11
10
|
const CONFLICTED_PLUGIN_KEY = 'columnSorting';
|
11
|
+
const SHORTCUTS_GROUP = PLUGIN_KEY;
|
12
12
|
registerRootComparator(PLUGIN_KEY, rootComparator);
|
13
13
|
|
14
14
|
/**
|
@@ -108,6 +108,41 @@ export class MultiColumnSorting extends ColumnSorting {
|
|
108
108
|
super.disablePlugin();
|
109
109
|
}
|
110
110
|
|
111
|
+
/**
|
112
|
+
* Register shortcuts responsible for toggling column sorting functionality.
|
113
|
+
*
|
114
|
+
* @private
|
115
|
+
*/
|
116
|
+
registerShortcuts() {
|
117
|
+
super.registerShortcuts();
|
118
|
+
this.hot.getShortcutManager().getContext('grid').addShortcut({
|
119
|
+
keys: [['Shift', 'Enter']],
|
120
|
+
callback: () => {
|
121
|
+
const {
|
122
|
+
highlight
|
123
|
+
} = this.hot.getSelectedRangeLast();
|
124
|
+
if (highlight.row === -1 && highlight.col >= 0) {
|
125
|
+
this.sort(this.getNextSortConfig(highlight.col, APPEND_COLUMN_CONFIG_STRATEGY));
|
126
|
+
}
|
127
|
+
},
|
128
|
+
runOnlyIf: () => {
|
129
|
+
var _this$hot$getSelected;
|
130
|
+
return (_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight.isHeader();
|
131
|
+
},
|
132
|
+
group: SHORTCUTS_GROUP
|
133
|
+
});
|
134
|
+
}
|
135
|
+
|
136
|
+
/**
|
137
|
+
* Unregister shortcuts responsible for toggling column sorting functionality.
|
138
|
+
*
|
139
|
+
* @private
|
140
|
+
*/
|
141
|
+
unregisterShortcuts() {
|
142
|
+
super.unregisterShortcuts();
|
143
|
+
this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
|
144
|
+
}
|
145
|
+
|
111
146
|
/**
|
112
147
|
* Sorts the table by chosen columns and orders.
|
113
148
|
*
|
@@ -5,8 +5,8 @@ exports.__esModule = true;
|
|
5
5
|
require("core-js/modules/es.array.push.js");
|
6
6
|
var _element = require("../../helpers/dom/element");
|
7
7
|
var _number = require("../../helpers/number");
|
8
|
-
var _event = require("../../helpers/dom/event");
|
9
8
|
var _templateLiteralTag = require("../../helpers/templateLiteralTag");
|
9
|
+
var _event = require("../../helpers/dom/event");
|
10
10
|
var _console = require("../../helpers/console");
|
11
11
|
var _selection = require("../../selection");
|
12
12
|
var _base = require("../base");
|
@@ -75,13 +75,14 @@ const PLUGIN_PRIORITY = 280;
|
|
75
75
|
exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
|
76
76
|
var _stateManager = /*#__PURE__*/new WeakMap();
|
77
77
|
var _hidingIndexMapObserver = /*#__PURE__*/new WeakMap();
|
78
|
+
var _focusInitialCoords = /*#__PURE__*/new WeakMap();
|
79
|
+
var _isColumnsSelectionInProgress = /*#__PURE__*/new WeakMap();
|
78
80
|
class NestedHeaders extends _base.BasePlugin {
|
79
81
|
constructor() {
|
80
82
|
super(...arguments);
|
81
83
|
/**
|
82
84
|
* The state manager for the nested headers.
|
83
85
|
*
|
84
|
-
* @private
|
85
86
|
* @type {StateManager}
|
86
87
|
*/
|
87
88
|
_classPrivateFieldInitSpec(this, _stateManager, {
|
@@ -92,13 +93,30 @@ class NestedHeaders extends _base.BasePlugin {
|
|
92
93
|
* The instance of the ChangesObservable class that allows track the changes that happens in the
|
93
94
|
* column indexes.
|
94
95
|
*
|
95
|
-
* @private
|
96
96
|
* @type {ChangesObservable}
|
97
97
|
*/
|
98
98
|
_classPrivateFieldInitSpec(this, _hidingIndexMapObserver, {
|
99
99
|
writable: true,
|
100
100
|
value: null
|
101
101
|
});
|
102
|
+
/**
|
103
|
+
* Holds the coords that points to the place where the column selection starts.
|
104
|
+
*
|
105
|
+
* @type {number|null}
|
106
|
+
*/
|
107
|
+
_classPrivateFieldInitSpec(this, _focusInitialCoords, {
|
108
|
+
writable: true,
|
109
|
+
value: null
|
110
|
+
});
|
111
|
+
/**
|
112
|
+
* Determines if there is performed the column selection.
|
113
|
+
*
|
114
|
+
* @type {boolean}
|
115
|
+
*/
|
116
|
+
_classPrivateFieldInitSpec(this, _isColumnsSelectionInProgress, {
|
117
|
+
writable: true,
|
118
|
+
value: false
|
119
|
+
});
|
102
120
|
/**
|
103
121
|
* Custom helper for getting widths of the nested headers.
|
104
122
|
*
|
@@ -158,6 +176,19 @@ class NestedHeaders extends _base.BasePlugin {
|
|
158
176
|
this.addHook('beforeOnCellMouseOver', function () {
|
159
177
|
return _this.onBeforeOnCellMouseOver(...arguments);
|
160
178
|
});
|
179
|
+
this.addHook('beforeOnCellMouseUp', function () {
|
180
|
+
return _this.onBeforeOnCellMouseUp(...arguments);
|
181
|
+
});
|
182
|
+
this.addHook('beforeSelectionHighlightSet', function () {
|
183
|
+
return _this.onBeforeSelectionHighlightSet(...arguments);
|
184
|
+
});
|
185
|
+
this.addHook('modifyTransformStart', function () {
|
186
|
+
return _this.onModifyTransformStart(...arguments);
|
187
|
+
});
|
188
|
+
this.addHook('afterSelection', () => this.updateFocusHighlightPosition());
|
189
|
+
this.addHook('beforeViewportScrollHorizontally', function () {
|
190
|
+
return _this.onBeforeViewportScrollHorizontally(...arguments);
|
191
|
+
});
|
161
192
|
this.addHook('afterGetColumnHeaderRenderers', array => this.onAfterGetColumnHeaderRenderers(array));
|
162
193
|
this.addHook('modifyColWidth', function () {
|
163
194
|
return _this.onModifyColWidth(...arguments);
|
@@ -171,9 +202,17 @@ class NestedHeaders extends _base.BasePlugin {
|
|
171
202
|
this.addHook('beforeCopy', function () {
|
172
203
|
return _this.onBeforeCopy(...arguments);
|
173
204
|
});
|
205
|
+
this.addHook('beforeSelectColumns', function () {
|
206
|
+
return _this.onBeforeSelectColumns(...arguments);
|
207
|
+
});
|
174
208
|
this.addHook('afterViewportColumnCalculatorOverride', function () {
|
175
209
|
return _this.onAfterViewportColumnCalculatorOverride(...arguments);
|
176
210
|
});
|
211
|
+
this.addHook('modifyFocusedElement', function () {
|
212
|
+
return _this.onModifyFocusedElement(...arguments);
|
213
|
+
});
|
214
|
+
this.hot.columnIndexMapper.addLocalHook('cacheUpdated', () => this.updateFocusHighlightPosition());
|
215
|
+
this.hot.rowIndexMapper.addLocalHook('cacheUpdated', () => this.updateFocusHighlightPosition());
|
177
216
|
super.enablePlugin();
|
178
217
|
this.updatePlugin(); // @TODO: Workaround for broken plugin initialization abstraction.
|
179
218
|
}
|
@@ -389,6 +428,67 @@ class NestedHeaders extends _base.BasePlugin {
|
|
389
428
|
return this.hot.getColHeader(visualColumnIndex, headerLevel);
|
390
429
|
}
|
391
430
|
|
431
|
+
/**
|
432
|
+
* Updates the selection focus highlight position to point to the nested header root element (TH)
|
433
|
+
* even when the logical coordinates point in-between the header.
|
434
|
+
*
|
435
|
+
* @private
|
436
|
+
*/
|
437
|
+
updateFocusHighlightPosition() {
|
438
|
+
var _this$hot;
|
439
|
+
const selection = (_this$hot = this.hot) === null || _this$hot === void 0 ? void 0 : _this$hot.getSelectedRangeLast();
|
440
|
+
if (!selection) {
|
441
|
+
return;
|
442
|
+
}
|
443
|
+
const {
|
444
|
+
highlight
|
445
|
+
} = selection;
|
446
|
+
const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;
|
447
|
+
if (isNestedHeadersRange) {
|
448
|
+
const columnIndex = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(highlight.row, highlight.col);
|
449
|
+
const focusHighlight = this.hot.selection.highlight.getFocus();
|
450
|
+
|
451
|
+
// Correct the highlight/focus selection to highlight the correct TH element
|
452
|
+
focusHighlight.visualCellRange.highlight.col = columnIndex;
|
453
|
+
focusHighlight.visualCellRange.from.col = columnIndex;
|
454
|
+
focusHighlight.visualCellRange.to.col = columnIndex;
|
455
|
+
focusHighlight.commit();
|
456
|
+
}
|
457
|
+
}
|
458
|
+
|
459
|
+
/**
|
460
|
+
* Allows to control to which column index the viewport will be scrolled. To ensure that the viewport
|
461
|
+
* is scrolled to the correct column for the nested header the most left and the most right visual column
|
462
|
+
* indexes are used.
|
463
|
+
*
|
464
|
+
* @private
|
465
|
+
* @param {number} visualColumn A visual column index to which the viewport will be scrolled.
|
466
|
+
* @returns {number}
|
467
|
+
*/
|
468
|
+
onBeforeViewportScrollHorizontally(visualColumn) {
|
469
|
+
const selection = this.hot.getSelectedRangeLast();
|
470
|
+
if (!selection) {
|
471
|
+
return visualColumn;
|
472
|
+
}
|
473
|
+
const {
|
474
|
+
highlight
|
475
|
+
} = selection;
|
476
|
+
const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;
|
477
|
+
if (!isNestedHeadersRange) {
|
478
|
+
return visualColumn;
|
479
|
+
}
|
480
|
+
const firstColumn = this.hot.view.getFirstFullyVisibleColumn();
|
481
|
+
const lastColumn = this.hot.view.getLastFullyVisibleColumn();
|
482
|
+
const mostLeftColumnIndex = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(highlight.row, highlight.col);
|
483
|
+
const mostRightColumnIndex = _classPrivateFieldGet(this, _stateManager).findRightMostColumnIndex(highlight.row, highlight.col);
|
484
|
+
|
485
|
+
// do not scroll the viewport when the header is wider than the viewport
|
486
|
+
if (mostLeftColumnIndex < firstColumn && mostRightColumnIndex > lastColumn) {
|
487
|
+
return visualColumn;
|
488
|
+
}
|
489
|
+
return mostLeftColumnIndex < firstColumn ? mostLeftColumnIndex : mostRightColumnIndex;
|
490
|
+
}
|
491
|
+
|
392
492
|
/**
|
393
493
|
* Allows to control which header DOM element will be used to highlight.
|
394
494
|
*
|
@@ -404,7 +504,6 @@ class NestedHeaders extends _base.BasePlugin {
|
|
404
504
|
return visualColumn;
|
405
505
|
}
|
406
506
|
const {
|
407
|
-
classNames,
|
408
507
|
columnCursor,
|
409
508
|
selectionType,
|
410
509
|
selectionWidth
|
@@ -419,8 +518,8 @@ class NestedHeaders extends _base.BasePlugin {
|
|
419
518
|
}
|
420
519
|
} else if (selectionType === _selection.ACTIVE_HEADER_TYPE) {
|
421
520
|
if (colspan > selectionWidth - columnCursor || !isRoot) {
|
422
|
-
//
|
423
|
-
|
521
|
+
// Prevents adding any CSS class names to the TH element
|
522
|
+
return null;
|
424
523
|
}
|
425
524
|
}
|
426
525
|
return visualColumn;
|
@@ -508,6 +607,8 @@ class NestedHeaders extends _base.BasePlugin {
|
|
508
607
|
if (!headerNodeData) {
|
509
608
|
return;
|
510
609
|
}
|
610
|
+
_classPrivateFieldSet(this, _focusInitialCoords, coords.clone());
|
611
|
+
_classPrivateFieldSet(this, _isColumnsSelectionInProgress, true);
|
511
612
|
const {
|
512
613
|
selection
|
513
614
|
} = this.hot;
|
@@ -573,14 +674,129 @@ class NestedHeaders extends _base.BasePlugin {
|
|
573
674
|
controller.column = true;
|
574
675
|
controller.cell = true;
|
575
676
|
const columnsToSelect = [];
|
677
|
+
const headerLevel = (0, _number.clamp)(coords.row, -Infinity, -1);
|
576
678
|
if (coords.col < from.col) {
|
577
|
-
columnsToSelect.push(bottomEndCoords.col, columnIndex);
|
679
|
+
columnsToSelect.push(bottomEndCoords.col, columnIndex, headerLevel);
|
578
680
|
} else if (coords.col > from.col) {
|
579
|
-
columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1);
|
681
|
+
columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1, headerLevel);
|
580
682
|
} else {
|
581
|
-
columnsToSelect.push(columnIndex, columnIndex + origColspan - 1);
|
683
|
+
columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, headerLevel);
|
684
|
+
}
|
685
|
+
this.hot.selection.selectColumns(...columnsToSelect);
|
686
|
+
}
|
687
|
+
|
688
|
+
/**
|
689
|
+
* Switches internal flag about selection progress to `false`.
|
690
|
+
*
|
691
|
+
* @private
|
692
|
+
*/
|
693
|
+
onBeforeOnCellMouseUp() {
|
694
|
+
_classPrivateFieldSet(this, _isColumnsSelectionInProgress, false);
|
695
|
+
}
|
696
|
+
|
697
|
+
/**
|
698
|
+
* The hook checks and ensures that the focus position that depends on the selected columns
|
699
|
+
* range is always positioned within the range.
|
700
|
+
*
|
701
|
+
* @private
|
702
|
+
*/
|
703
|
+
onBeforeSelectionHighlightSet() {
|
704
|
+
const {
|
705
|
+
navigableHeaders
|
706
|
+
} = this.hot.getSettings();
|
707
|
+
if (!this.hot.view.isMouseDown() || !_classPrivateFieldGet(this, _isColumnsSelectionInProgress) || !navigableHeaders) {
|
708
|
+
return;
|
709
|
+
}
|
710
|
+
const selectedRange = this.hot.getSelectedRangeLast();
|
711
|
+
const columnStart = selectedRange.getTopStartCorner().col;
|
712
|
+
const columnEnd = selectedRange.getBottomEndCorner().col;
|
713
|
+
const {
|
714
|
+
columnIndex,
|
715
|
+
origColspan
|
716
|
+
} = _classPrivateFieldGet(this, _stateManager).getHeaderTreeNodeData(_classPrivateFieldGet(this, _focusInitialCoords).row, _classPrivateFieldGet(this, _focusInitialCoords).col);
|
717
|
+
selectedRange.setHighlight(_classPrivateFieldGet(this, _focusInitialCoords));
|
718
|
+
if (origColspan > selectedRange.getWidth() || columnIndex < columnStart || columnIndex + origColspan - 1 > columnEnd) {
|
719
|
+
const headerLevel = _classPrivateFieldGet(this, _stateManager).findTopMostEntireHeaderLevel((0, _number.clamp)(columnStart, columnIndex, columnIndex + origColspan - 1), (0, _number.clamp)(columnEnd, columnIndex, columnIndex + origColspan - 1));
|
720
|
+
selectedRange.highlight.row = headerLevel;
|
721
|
+
selectedRange.highlight.col = selectedRange.from.col;
|
722
|
+
}
|
723
|
+
}
|
724
|
+
|
725
|
+
/**
|
726
|
+
* `modifyTransformStart` hook is called every time the keyboard navigation is used.
|
727
|
+
*
|
728
|
+
* @private
|
729
|
+
* @param {object} delta The transformation delta.
|
730
|
+
*/
|
731
|
+
onModifyTransformStart(delta) {
|
732
|
+
const {
|
733
|
+
highlight
|
734
|
+
} = this.hot.getSelectedRangeLast();
|
735
|
+
const nextCoords = this.hot._createCellCoords(highlight.row + delta.row, highlight.col + delta.col);
|
736
|
+
const isNestedHeadersRange = nextCoords.isHeader() && nextCoords.col >= 0;
|
737
|
+
if (!isNestedHeadersRange) {
|
738
|
+
return;
|
739
|
+
}
|
740
|
+
const visualColumnIndexStart = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(nextCoords.row, nextCoords.col);
|
741
|
+
const visualColumnIndexEnd = _classPrivateFieldGet(this, _stateManager).findRightMostColumnIndex(nextCoords.row, nextCoords.col);
|
742
|
+
if (delta.col < 0) {
|
743
|
+
const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ? visualColumnIndexStart - 1 : visualColumnIndexEnd;
|
744
|
+
const notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, -1);
|
745
|
+
if (notHiddenColumnIndex === null) {
|
746
|
+
// There are no visible columns anymore, so move the selection out of the table edge. This will
|
747
|
+
// be processed by the selection Transformer class as a move selection to the previous row (if autoWrapRow is enabled).
|
748
|
+
delta.col = -this.hot.view.countRenderableColumnsInRange(0, highlight.col);
|
749
|
+
} else {
|
750
|
+
delta.col = -Math.max(this.hot.view.countRenderableColumnsInRange(notHiddenColumnIndex, highlight.col) - 1, 1);
|
751
|
+
}
|
752
|
+
} else if (delta.col > 0) {
|
753
|
+
const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ? visualColumnIndexEnd + 1 : visualColumnIndexStart;
|
754
|
+
const notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, 1);
|
755
|
+
if (notHiddenColumnIndex === null) {
|
756
|
+
// There are no visible columns anymore, so move the selection out of the table edge. This will
|
757
|
+
// be processed by the selection Transformer class as a move selection to the next row (if autoWrapRow is enabled).
|
758
|
+
delta.col = this.hot.view.countRenderableColumnsInRange(highlight.col, this.hot.countCols());
|
759
|
+
} else {
|
760
|
+
delta.col = Math.max(this.hot.view.countRenderableColumnsInRange(highlight.col, notHiddenColumnIndex) - 1, 1);
|
761
|
+
}
|
762
|
+
}
|
763
|
+
}
|
764
|
+
|
765
|
+
/**
|
766
|
+
* The hook observes the column selection from the Selection API and modifies the column range to
|
767
|
+
* ensure that the whole nested column will be covered.
|
768
|
+
*
|
769
|
+
* @private
|
770
|
+
* @param {CellCoords} from The coords object where the selection starts.
|
771
|
+
* @param {CellCoords} to The coords object where the selection ends.
|
772
|
+
*/
|
773
|
+
onBeforeSelectColumns(from, to) {
|
774
|
+
const headerLevel = from.row;
|
775
|
+
const startNodeData = this._getHeaderTreeNodeDataByCoords({
|
776
|
+
row: headerLevel,
|
777
|
+
col: from.col
|
778
|
+
});
|
779
|
+
const endNodeData = this._getHeaderTreeNodeDataByCoords({
|
780
|
+
row: headerLevel,
|
781
|
+
col: to.col
|
782
|
+
});
|
783
|
+
if (to.col < from.col) {
|
784
|
+
// Column selection from right to left
|
785
|
+
if (startNodeData) {
|
786
|
+
from.col = startNodeData.columnIndex + startNodeData.origColspan - 1;
|
787
|
+
}
|
788
|
+
if (endNodeData) {
|
789
|
+
to.col = endNodeData.columnIndex;
|
790
|
+
}
|
791
|
+
} else if (to.col >= from.col) {
|
792
|
+
// Column selection from left to right or a single column selection
|
793
|
+
if (startNodeData) {
|
794
|
+
from.col = startNodeData.columnIndex;
|
795
|
+
}
|
796
|
+
if (endNodeData) {
|
797
|
+
to.col = endNodeData.columnIndex + endNodeData.origColspan - 1;
|
798
|
+
}
|
582
799
|
}
|
583
|
-
this.hot.selectColumns(...columnsToSelect);
|
584
800
|
}
|
585
801
|
|
586
802
|
/**
|
@@ -665,6 +881,20 @@ class NestedHeaders extends _base.BasePlugin {
|
|
665
881
|
return label;
|
666
882
|
}
|
667
883
|
|
884
|
+
/**
|
885
|
+
* `modifyFocusedElement` hook callback.
|
886
|
+
*
|
887
|
+
* @private
|
888
|
+
* @param {number} row Row index.
|
889
|
+
* @param {number} column Column index.
|
890
|
+
* @returns {HTMLTableCellElement} The `TH` element to be focused.
|
891
|
+
*/
|
892
|
+
onModifyFocusedElement(row, column) {
|
893
|
+
if (row < 0) {
|
894
|
+
return this.hot.getCell(row, _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(row, column), true);
|
895
|
+
}
|
896
|
+
}
|
897
|
+
|
668
898
|
/**
|
669
899
|
* Updates the plugin state after HoT initialization.
|
670
900
|
*
|