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
@@ -11,9 +11,9 @@ function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classEx
|
|
11
11
|
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
12
12
|
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
13
13
|
import { addClass, removeClass } from "../../helpers/dom/element.mjs";
|
14
|
-
import { isNumeric } from "../../helpers/number.mjs";
|
15
|
-
import { isLeftClick, isRightClick } from "../../helpers/dom/event.mjs";
|
14
|
+
import { isNumeric, clamp } from "../../helpers/number.mjs";
|
16
15
|
import { toSingleLine } from "../../helpers/templateLiteralTag.mjs";
|
16
|
+
import { isLeftClick, isRightClick } from "../../helpers/dom/event.mjs";
|
17
17
|
import { warn } from "../../helpers/console.mjs";
|
18
18
|
import { ACTIVE_HEADER_TYPE, HEADER_TYPE } from "../../selection/index.mjs";
|
19
19
|
import { BasePlugin } from "../base/index.mjs";
|
@@ -69,13 +69,14 @@ export const PLUGIN_PRIORITY = 280;
|
|
69
69
|
*/
|
70
70
|
var _stateManager = /*#__PURE__*/new WeakMap();
|
71
71
|
var _hidingIndexMapObserver = /*#__PURE__*/new WeakMap();
|
72
|
+
var _focusInitialCoords = /*#__PURE__*/new WeakMap();
|
73
|
+
var _isColumnsSelectionInProgress = /*#__PURE__*/new WeakMap();
|
72
74
|
export class NestedHeaders extends BasePlugin {
|
73
75
|
constructor() {
|
74
76
|
super(...arguments);
|
75
77
|
/**
|
76
78
|
* The state manager for the nested headers.
|
77
79
|
*
|
78
|
-
* @private
|
79
80
|
* @type {StateManager}
|
80
81
|
*/
|
81
82
|
_classPrivateFieldInitSpec(this, _stateManager, {
|
@@ -86,13 +87,30 @@ export class NestedHeaders extends BasePlugin {
|
|
86
87
|
* The instance of the ChangesObservable class that allows track the changes that happens in the
|
87
88
|
* column indexes.
|
88
89
|
*
|
89
|
-
* @private
|
90
90
|
* @type {ChangesObservable}
|
91
91
|
*/
|
92
92
|
_classPrivateFieldInitSpec(this, _hidingIndexMapObserver, {
|
93
93
|
writable: true,
|
94
94
|
value: null
|
95
95
|
});
|
96
|
+
/**
|
97
|
+
* Holds the coords that points to the place where the column selection starts.
|
98
|
+
*
|
99
|
+
* @type {number|null}
|
100
|
+
*/
|
101
|
+
_classPrivateFieldInitSpec(this, _focusInitialCoords, {
|
102
|
+
writable: true,
|
103
|
+
value: null
|
104
|
+
});
|
105
|
+
/**
|
106
|
+
* Determines if there is performed the column selection.
|
107
|
+
*
|
108
|
+
* @type {boolean}
|
109
|
+
*/
|
110
|
+
_classPrivateFieldInitSpec(this, _isColumnsSelectionInProgress, {
|
111
|
+
writable: true,
|
112
|
+
value: false
|
113
|
+
});
|
96
114
|
/**
|
97
115
|
* Custom helper for getting widths of the nested headers.
|
98
116
|
*
|
@@ -152,6 +170,19 @@ export class NestedHeaders extends BasePlugin {
|
|
152
170
|
this.addHook('beforeOnCellMouseOver', function () {
|
153
171
|
return _this.onBeforeOnCellMouseOver(...arguments);
|
154
172
|
});
|
173
|
+
this.addHook('beforeOnCellMouseUp', function () {
|
174
|
+
return _this.onBeforeOnCellMouseUp(...arguments);
|
175
|
+
});
|
176
|
+
this.addHook('beforeSelectionHighlightSet', function () {
|
177
|
+
return _this.onBeforeSelectionHighlightSet(...arguments);
|
178
|
+
});
|
179
|
+
this.addHook('modifyTransformStart', function () {
|
180
|
+
return _this.onModifyTransformStart(...arguments);
|
181
|
+
});
|
182
|
+
this.addHook('afterSelection', () => this.updateFocusHighlightPosition());
|
183
|
+
this.addHook('beforeViewportScrollHorizontally', function () {
|
184
|
+
return _this.onBeforeViewportScrollHorizontally(...arguments);
|
185
|
+
});
|
155
186
|
this.addHook('afterGetColumnHeaderRenderers', array => this.onAfterGetColumnHeaderRenderers(array));
|
156
187
|
this.addHook('modifyColWidth', function () {
|
157
188
|
return _this.onModifyColWidth(...arguments);
|
@@ -165,9 +196,17 @@ export class NestedHeaders extends BasePlugin {
|
|
165
196
|
this.addHook('beforeCopy', function () {
|
166
197
|
return _this.onBeforeCopy(...arguments);
|
167
198
|
});
|
199
|
+
this.addHook('beforeSelectColumns', function () {
|
200
|
+
return _this.onBeforeSelectColumns(...arguments);
|
201
|
+
});
|
168
202
|
this.addHook('afterViewportColumnCalculatorOverride', function () {
|
169
203
|
return _this.onAfterViewportColumnCalculatorOverride(...arguments);
|
170
204
|
});
|
205
|
+
this.addHook('modifyFocusedElement', function () {
|
206
|
+
return _this.onModifyFocusedElement(...arguments);
|
207
|
+
});
|
208
|
+
this.hot.columnIndexMapper.addLocalHook('cacheUpdated', () => this.updateFocusHighlightPosition());
|
209
|
+
this.hot.rowIndexMapper.addLocalHook('cacheUpdated', () => this.updateFocusHighlightPosition());
|
171
210
|
super.enablePlugin();
|
172
211
|
this.updatePlugin(); // @TODO: Workaround for broken plugin initialization abstraction.
|
173
212
|
}
|
@@ -383,6 +422,67 @@ export class NestedHeaders extends BasePlugin {
|
|
383
422
|
return this.hot.getColHeader(visualColumnIndex, headerLevel);
|
384
423
|
}
|
385
424
|
|
425
|
+
/**
|
426
|
+
* Updates the selection focus highlight position to point to the nested header root element (TH)
|
427
|
+
* even when the logical coordinates point in-between the header.
|
428
|
+
*
|
429
|
+
* @private
|
430
|
+
*/
|
431
|
+
updateFocusHighlightPosition() {
|
432
|
+
var _this$hot;
|
433
|
+
const selection = (_this$hot = this.hot) === null || _this$hot === void 0 ? void 0 : _this$hot.getSelectedRangeLast();
|
434
|
+
if (!selection) {
|
435
|
+
return;
|
436
|
+
}
|
437
|
+
const {
|
438
|
+
highlight
|
439
|
+
} = selection;
|
440
|
+
const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;
|
441
|
+
if (isNestedHeadersRange) {
|
442
|
+
const columnIndex = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(highlight.row, highlight.col);
|
443
|
+
const focusHighlight = this.hot.selection.highlight.getFocus();
|
444
|
+
|
445
|
+
// Correct the highlight/focus selection to highlight the correct TH element
|
446
|
+
focusHighlight.visualCellRange.highlight.col = columnIndex;
|
447
|
+
focusHighlight.visualCellRange.from.col = columnIndex;
|
448
|
+
focusHighlight.visualCellRange.to.col = columnIndex;
|
449
|
+
focusHighlight.commit();
|
450
|
+
}
|
451
|
+
}
|
452
|
+
|
453
|
+
/**
|
454
|
+
* Allows to control to which column index the viewport will be scrolled. To ensure that the viewport
|
455
|
+
* is scrolled to the correct column for the nested header the most left and the most right visual column
|
456
|
+
* indexes are used.
|
457
|
+
*
|
458
|
+
* @private
|
459
|
+
* @param {number} visualColumn A visual column index to which the viewport will be scrolled.
|
460
|
+
* @returns {number}
|
461
|
+
*/
|
462
|
+
onBeforeViewportScrollHorizontally(visualColumn) {
|
463
|
+
const selection = this.hot.getSelectedRangeLast();
|
464
|
+
if (!selection) {
|
465
|
+
return visualColumn;
|
466
|
+
}
|
467
|
+
const {
|
468
|
+
highlight
|
469
|
+
} = selection;
|
470
|
+
const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;
|
471
|
+
if (!isNestedHeadersRange) {
|
472
|
+
return visualColumn;
|
473
|
+
}
|
474
|
+
const firstColumn = this.hot.view.getFirstFullyVisibleColumn();
|
475
|
+
const lastColumn = this.hot.view.getLastFullyVisibleColumn();
|
476
|
+
const mostLeftColumnIndex = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(highlight.row, highlight.col);
|
477
|
+
const mostRightColumnIndex = _classPrivateFieldGet(this, _stateManager).findRightMostColumnIndex(highlight.row, highlight.col);
|
478
|
+
|
479
|
+
// do not scroll the viewport when the header is wider than the viewport
|
480
|
+
if (mostLeftColumnIndex < firstColumn && mostRightColumnIndex > lastColumn) {
|
481
|
+
return visualColumn;
|
482
|
+
}
|
483
|
+
return mostLeftColumnIndex < firstColumn ? mostLeftColumnIndex : mostRightColumnIndex;
|
484
|
+
}
|
485
|
+
|
386
486
|
/**
|
387
487
|
* Allows to control which header DOM element will be used to highlight.
|
388
488
|
*
|
@@ -398,7 +498,6 @@ export class NestedHeaders extends BasePlugin {
|
|
398
498
|
return visualColumn;
|
399
499
|
}
|
400
500
|
const {
|
401
|
-
classNames,
|
402
501
|
columnCursor,
|
403
502
|
selectionType,
|
404
503
|
selectionWidth
|
@@ -413,8 +512,8 @@ export class NestedHeaders extends BasePlugin {
|
|
413
512
|
}
|
414
513
|
} else if (selectionType === ACTIVE_HEADER_TYPE) {
|
415
514
|
if (colspan > selectionWidth - columnCursor || !isRoot) {
|
416
|
-
//
|
417
|
-
|
515
|
+
// Prevents adding any CSS class names to the TH element
|
516
|
+
return null;
|
418
517
|
}
|
419
518
|
}
|
420
519
|
return visualColumn;
|
@@ -502,6 +601,8 @@ export class NestedHeaders extends BasePlugin {
|
|
502
601
|
if (!headerNodeData) {
|
503
602
|
return;
|
504
603
|
}
|
604
|
+
_classPrivateFieldSet(this, _focusInitialCoords, coords.clone());
|
605
|
+
_classPrivateFieldSet(this, _isColumnsSelectionInProgress, true);
|
505
606
|
const {
|
506
607
|
selection
|
507
608
|
} = this.hot;
|
@@ -567,14 +668,129 @@ export class NestedHeaders extends BasePlugin {
|
|
567
668
|
controller.column = true;
|
568
669
|
controller.cell = true;
|
569
670
|
const columnsToSelect = [];
|
671
|
+
const headerLevel = clamp(coords.row, -Infinity, -1);
|
570
672
|
if (coords.col < from.col) {
|
571
|
-
columnsToSelect.push(bottomEndCoords.col, columnIndex);
|
673
|
+
columnsToSelect.push(bottomEndCoords.col, columnIndex, headerLevel);
|
572
674
|
} else if (coords.col > from.col) {
|
573
|
-
columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1);
|
675
|
+
columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1, headerLevel);
|
574
676
|
} else {
|
575
|
-
columnsToSelect.push(columnIndex, columnIndex + origColspan - 1);
|
677
|
+
columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, headerLevel);
|
678
|
+
}
|
679
|
+
this.hot.selection.selectColumns(...columnsToSelect);
|
680
|
+
}
|
681
|
+
|
682
|
+
/**
|
683
|
+
* Switches internal flag about selection progress to `false`.
|
684
|
+
*
|
685
|
+
* @private
|
686
|
+
*/
|
687
|
+
onBeforeOnCellMouseUp() {
|
688
|
+
_classPrivateFieldSet(this, _isColumnsSelectionInProgress, false);
|
689
|
+
}
|
690
|
+
|
691
|
+
/**
|
692
|
+
* The hook checks and ensures that the focus position that depends on the selected columns
|
693
|
+
* range is always positioned within the range.
|
694
|
+
*
|
695
|
+
* @private
|
696
|
+
*/
|
697
|
+
onBeforeSelectionHighlightSet() {
|
698
|
+
const {
|
699
|
+
navigableHeaders
|
700
|
+
} = this.hot.getSettings();
|
701
|
+
if (!this.hot.view.isMouseDown() || !_classPrivateFieldGet(this, _isColumnsSelectionInProgress) || !navigableHeaders) {
|
702
|
+
return;
|
703
|
+
}
|
704
|
+
const selectedRange = this.hot.getSelectedRangeLast();
|
705
|
+
const columnStart = selectedRange.getTopStartCorner().col;
|
706
|
+
const columnEnd = selectedRange.getBottomEndCorner().col;
|
707
|
+
const {
|
708
|
+
columnIndex,
|
709
|
+
origColspan
|
710
|
+
} = _classPrivateFieldGet(this, _stateManager).getHeaderTreeNodeData(_classPrivateFieldGet(this, _focusInitialCoords).row, _classPrivateFieldGet(this, _focusInitialCoords).col);
|
711
|
+
selectedRange.setHighlight(_classPrivateFieldGet(this, _focusInitialCoords));
|
712
|
+
if (origColspan > selectedRange.getWidth() || columnIndex < columnStart || columnIndex + origColspan - 1 > columnEnd) {
|
713
|
+
const headerLevel = _classPrivateFieldGet(this, _stateManager).findTopMostEntireHeaderLevel(clamp(columnStart, columnIndex, columnIndex + origColspan - 1), clamp(columnEnd, columnIndex, columnIndex + origColspan - 1));
|
714
|
+
selectedRange.highlight.row = headerLevel;
|
715
|
+
selectedRange.highlight.col = selectedRange.from.col;
|
716
|
+
}
|
717
|
+
}
|
718
|
+
|
719
|
+
/**
|
720
|
+
* `modifyTransformStart` hook is called every time the keyboard navigation is used.
|
721
|
+
*
|
722
|
+
* @private
|
723
|
+
* @param {object} delta The transformation delta.
|
724
|
+
*/
|
725
|
+
onModifyTransformStart(delta) {
|
726
|
+
const {
|
727
|
+
highlight
|
728
|
+
} = this.hot.getSelectedRangeLast();
|
729
|
+
const nextCoords = this.hot._createCellCoords(highlight.row + delta.row, highlight.col + delta.col);
|
730
|
+
const isNestedHeadersRange = nextCoords.isHeader() && nextCoords.col >= 0;
|
731
|
+
if (!isNestedHeadersRange) {
|
732
|
+
return;
|
733
|
+
}
|
734
|
+
const visualColumnIndexStart = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(nextCoords.row, nextCoords.col);
|
735
|
+
const visualColumnIndexEnd = _classPrivateFieldGet(this, _stateManager).findRightMostColumnIndex(nextCoords.row, nextCoords.col);
|
736
|
+
if (delta.col < 0) {
|
737
|
+
const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ? visualColumnIndexStart - 1 : visualColumnIndexEnd;
|
738
|
+
const notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, -1);
|
739
|
+
if (notHiddenColumnIndex === null) {
|
740
|
+
// There are no visible columns anymore, so move the selection out of the table edge. This will
|
741
|
+
// be processed by the selection Transformer class as a move selection to the previous row (if autoWrapRow is enabled).
|
742
|
+
delta.col = -this.hot.view.countRenderableColumnsInRange(0, highlight.col);
|
743
|
+
} else {
|
744
|
+
delta.col = -Math.max(this.hot.view.countRenderableColumnsInRange(notHiddenColumnIndex, highlight.col) - 1, 1);
|
745
|
+
}
|
746
|
+
} else if (delta.col > 0) {
|
747
|
+
const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ? visualColumnIndexEnd + 1 : visualColumnIndexStart;
|
748
|
+
const notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, 1);
|
749
|
+
if (notHiddenColumnIndex === null) {
|
750
|
+
// There are no visible columns anymore, so move the selection out of the table edge. This will
|
751
|
+
// be processed by the selection Transformer class as a move selection to the next row (if autoWrapRow is enabled).
|
752
|
+
delta.col = this.hot.view.countRenderableColumnsInRange(highlight.col, this.hot.countCols());
|
753
|
+
} else {
|
754
|
+
delta.col = Math.max(this.hot.view.countRenderableColumnsInRange(highlight.col, notHiddenColumnIndex) - 1, 1);
|
755
|
+
}
|
756
|
+
}
|
757
|
+
}
|
758
|
+
|
759
|
+
/**
|
760
|
+
* The hook observes the column selection from the Selection API and modifies the column range to
|
761
|
+
* ensure that the whole nested column will be covered.
|
762
|
+
*
|
763
|
+
* @private
|
764
|
+
* @param {CellCoords} from The coords object where the selection starts.
|
765
|
+
* @param {CellCoords} to The coords object where the selection ends.
|
766
|
+
*/
|
767
|
+
onBeforeSelectColumns(from, to) {
|
768
|
+
const headerLevel = from.row;
|
769
|
+
const startNodeData = this._getHeaderTreeNodeDataByCoords({
|
770
|
+
row: headerLevel,
|
771
|
+
col: from.col
|
772
|
+
});
|
773
|
+
const endNodeData = this._getHeaderTreeNodeDataByCoords({
|
774
|
+
row: headerLevel,
|
775
|
+
col: to.col
|
776
|
+
});
|
777
|
+
if (to.col < from.col) {
|
778
|
+
// Column selection from right to left
|
779
|
+
if (startNodeData) {
|
780
|
+
from.col = startNodeData.columnIndex + startNodeData.origColspan - 1;
|
781
|
+
}
|
782
|
+
if (endNodeData) {
|
783
|
+
to.col = endNodeData.columnIndex;
|
784
|
+
}
|
785
|
+
} else if (to.col >= from.col) {
|
786
|
+
// Column selection from left to right or a single column selection
|
787
|
+
if (startNodeData) {
|
788
|
+
from.col = startNodeData.columnIndex;
|
789
|
+
}
|
790
|
+
if (endNodeData) {
|
791
|
+
to.col = endNodeData.columnIndex + endNodeData.origColspan - 1;
|
792
|
+
}
|
576
793
|
}
|
577
|
-
this.hot.selectColumns(...columnsToSelect);
|
578
794
|
}
|
579
795
|
|
580
796
|
/**
|
@@ -659,6 +875,20 @@ export class NestedHeaders extends BasePlugin {
|
|
659
875
|
return label;
|
660
876
|
}
|
661
877
|
|
878
|
+
/**
|
879
|
+
* `modifyFocusedElement` hook callback.
|
880
|
+
*
|
881
|
+
* @private
|
882
|
+
* @param {number} row Row index.
|
883
|
+
* @param {number} column Column index.
|
884
|
+
* @returns {HTMLTableCellElement} The `TH` element to be focused.
|
885
|
+
*/
|
886
|
+
onModifyFocusedElement(row, column) {
|
887
|
+
if (row < 0) {
|
888
|
+
return this.hot.getCell(row, _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(row, column), true);
|
889
|
+
}
|
890
|
+
}
|
891
|
+
|
662
892
|
/**
|
663
893
|
* Updates the plugin state after HoT initialization.
|
664
894
|
*
|
@@ -8,6 +8,7 @@ var _sourceSettings2 = _interopRequireDefault(require("./sourceSettings"));
|
|
8
8
|
var _headersTree2 = _interopRequireDefault(require("./headersTree"));
|
9
9
|
var _nodeModifiers = require("./nodeModifiers");
|
10
10
|
var _matrixGenerator = require("./matrixGenerator");
|
11
|
+
var _tree = require("../../../utils/dataStructures/tree");
|
11
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
12
13
|
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
13
14
|
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
@@ -317,6 +318,23 @@ class StateManager {
|
|
317
318
|
* @returns {object|null}
|
318
319
|
*/
|
319
320
|
getHeaderTreeNodeData(headerLevel, columnIndex) {
|
321
|
+
const node = this.getHeaderTreeNode(headerLevel, columnIndex);
|
322
|
+
if (!node) {
|
323
|
+
return null;
|
324
|
+
}
|
325
|
+
return {
|
326
|
+
...node.data
|
327
|
+
};
|
328
|
+
}
|
329
|
+
|
330
|
+
/**
|
331
|
+
* Gets tree node that is connected to the column header.
|
332
|
+
*
|
333
|
+
* @param {number} headerLevel Header level (there is support for negative and positive values).
|
334
|
+
* @param {number} columnIndex A visual column index.
|
335
|
+
* @returns {TreeNode|null}
|
336
|
+
*/
|
337
|
+
getHeaderTreeNode(headerLevel, columnIndex) {
|
320
338
|
if (headerLevel < 0) {
|
321
339
|
headerLevel = this.rowCoordsToLevel(headerLevel);
|
322
340
|
}
|
@@ -327,9 +345,53 @@ class StateManager {
|
|
327
345
|
if (!node) {
|
328
346
|
return null;
|
329
347
|
}
|
330
|
-
return
|
331
|
-
|
332
|
-
|
348
|
+
return node;
|
349
|
+
}
|
350
|
+
|
351
|
+
/**
|
352
|
+
* Finds the most top header level of the column header that is rendered entirely within
|
353
|
+
* the passed visual columns range. If multiple columns headers are found within the range the
|
354
|
+
* most top header level value will be returned.
|
355
|
+
*
|
356
|
+
* @param {number} columnIndexFrom A visual column index.
|
357
|
+
* @param {number} [columnIndexTo] A visual column index.
|
358
|
+
* @returns {number} Returns a header level in format -1 to -N.
|
359
|
+
*/
|
360
|
+
findTopMostEntireHeaderLevel(columnIndexFrom) {
|
361
|
+
var _headerLevel;
|
362
|
+
let columnIndexTo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : columnIndexFrom;
|
363
|
+
const columnsWidth = columnIndexTo - columnIndexFrom + 1;
|
364
|
+
let atLeastOneRootFound = false;
|
365
|
+
let headerLevel = null;
|
366
|
+
for (let columnIndex = columnIndexFrom; columnIndex <= columnIndexTo; columnIndex++) {
|
367
|
+
const rootNode = _classPrivateFieldGet(this, _headersTree).getRootByColumn(columnIndex);
|
368
|
+
if (!rootNode) {
|
369
|
+
break;
|
370
|
+
}
|
371
|
+
atLeastOneRootFound = true;
|
372
|
+
|
373
|
+
// eslint-disable-next-line
|
374
|
+
rootNode.walkDown(node => {
|
375
|
+
const {
|
376
|
+
columnIndex: nodeColumnIndex,
|
377
|
+
headerLevel: nodeHeaderLevel,
|
378
|
+
origColspan,
|
379
|
+
isHidden
|
380
|
+
} = node.data;
|
381
|
+
if (isHidden) {
|
382
|
+
return;
|
383
|
+
}
|
384
|
+
|
385
|
+
// if the header fits entirely within the columns range get and save the node header level
|
386
|
+
if (origColspan <= columnsWidth && nodeColumnIndex >= columnIndexFrom && nodeColumnIndex + origColspan - 1 <= columnIndexTo && (headerLevel === null || nodeHeaderLevel < headerLevel)) {
|
387
|
+
headerLevel = nodeHeaderLevel;
|
388
|
+
}
|
389
|
+
}, _tree.TRAVERSAL_DF_PRE);
|
390
|
+
}
|
391
|
+
if (atLeastOneRootFound && headerLevel === null) {
|
392
|
+
return -1;
|
393
|
+
}
|
394
|
+
return this.levelToRowCoords((_headerLevel = headerLevel) !== null && _headerLevel !== void 0 ? _headerLevel : 0);
|
333
395
|
}
|
334
396
|
|
335
397
|
/**
|
@@ -367,6 +429,43 @@ class StateManager {
|
|
367
429
|
return stepBackColumn;
|
368
430
|
}
|
369
431
|
|
432
|
+
/**
|
433
|
+
* The method is helpful in cases where the column index targets in-between currently
|
434
|
+
* collapsed column. In that case, the method returns the right-most column index
|
435
|
+
* where the nested header ends.
|
436
|
+
*
|
437
|
+
* @param {number} headerLevel Header level (there is support for negative and positive values).
|
438
|
+
* @param {number} columnIndex A visual column index.
|
439
|
+
* @returns {number}
|
440
|
+
*/
|
441
|
+
findRightMostColumnIndex(headerLevel, columnIndex) {
|
442
|
+
var _this$getHeaderSettin3;
|
443
|
+
const {
|
444
|
+
isRoot,
|
445
|
+
origColspan
|
446
|
+
} = (_this$getHeaderSettin3 = this.getHeaderSettings(headerLevel, columnIndex)) !== null && _this$getHeaderSettin3 !== void 0 ? _this$getHeaderSettin3 : {
|
447
|
+
isRoot: true,
|
448
|
+
origColspan: 1
|
449
|
+
};
|
450
|
+
if (isRoot) {
|
451
|
+
return columnIndex + origColspan - 1;
|
452
|
+
}
|
453
|
+
let stepForthColumn = columnIndex + 1;
|
454
|
+
while (stepForthColumn < this.getColumnsCount()) {
|
455
|
+
var _this$getHeaderSettin4;
|
456
|
+
const {
|
457
|
+
isRoot: isRootNode
|
458
|
+
} = (_this$getHeaderSettin4 = this.getHeaderSettings(headerLevel, stepForthColumn)) !== null && _this$getHeaderSettin4 !== void 0 ? _this$getHeaderSettin4 : {
|
459
|
+
isRoot: true
|
460
|
+
};
|
461
|
+
if (isRootNode) {
|
462
|
+
break;
|
463
|
+
}
|
464
|
+
stepForthColumn += 1;
|
465
|
+
}
|
466
|
+
return stepForthColumn - 1;
|
467
|
+
}
|
468
|
+
|
370
469
|
/**
|
371
470
|
* Gets a total number of headers levels.
|
372
471
|
*
|
@@ -12,6 +12,7 @@ import SourceSettings from "./sourceSettings.mjs";
|
|
12
12
|
import HeadersTree from "./headersTree.mjs";
|
13
13
|
import { triggerNodeModification } from "./nodeModifiers/index.mjs";
|
14
14
|
import { generateMatrix } from "./matrixGenerator.mjs";
|
15
|
+
import { TRAVERSAL_DF_PRE } from "../../../utils/dataStructures/tree.mjs";
|
15
16
|
/**
|
16
17
|
* The state manager is a source of truth for nested headers configuration.
|
17
18
|
* The state generation process is divided into three stages.
|
@@ -313,6 +314,23 @@ export default class StateManager {
|
|
313
314
|
* @returns {object|null}
|
314
315
|
*/
|
315
316
|
getHeaderTreeNodeData(headerLevel, columnIndex) {
|
317
|
+
const node = this.getHeaderTreeNode(headerLevel, columnIndex);
|
318
|
+
if (!node) {
|
319
|
+
return null;
|
320
|
+
}
|
321
|
+
return {
|
322
|
+
...node.data
|
323
|
+
};
|
324
|
+
}
|
325
|
+
|
326
|
+
/**
|
327
|
+
* Gets tree node that is connected to the column header.
|
328
|
+
*
|
329
|
+
* @param {number} headerLevel Header level (there is support for negative and positive values).
|
330
|
+
* @param {number} columnIndex A visual column index.
|
331
|
+
* @returns {TreeNode|null}
|
332
|
+
*/
|
333
|
+
getHeaderTreeNode(headerLevel, columnIndex) {
|
316
334
|
if (headerLevel < 0) {
|
317
335
|
headerLevel = this.rowCoordsToLevel(headerLevel);
|
318
336
|
}
|
@@ -323,9 +341,53 @@ export default class StateManager {
|
|
323
341
|
if (!node) {
|
324
342
|
return null;
|
325
343
|
}
|
326
|
-
return
|
327
|
-
|
328
|
-
|
344
|
+
return node;
|
345
|
+
}
|
346
|
+
|
347
|
+
/**
|
348
|
+
* Finds the most top header level of the column header that is rendered entirely within
|
349
|
+
* the passed visual columns range. If multiple columns headers are found within the range the
|
350
|
+
* most top header level value will be returned.
|
351
|
+
*
|
352
|
+
* @param {number} columnIndexFrom A visual column index.
|
353
|
+
* @param {number} [columnIndexTo] A visual column index.
|
354
|
+
* @returns {number} Returns a header level in format -1 to -N.
|
355
|
+
*/
|
356
|
+
findTopMostEntireHeaderLevel(columnIndexFrom) {
|
357
|
+
var _headerLevel;
|
358
|
+
let columnIndexTo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : columnIndexFrom;
|
359
|
+
const columnsWidth = columnIndexTo - columnIndexFrom + 1;
|
360
|
+
let atLeastOneRootFound = false;
|
361
|
+
let headerLevel = null;
|
362
|
+
for (let columnIndex = columnIndexFrom; columnIndex <= columnIndexTo; columnIndex++) {
|
363
|
+
const rootNode = _classPrivateFieldGet(this, _headersTree).getRootByColumn(columnIndex);
|
364
|
+
if (!rootNode) {
|
365
|
+
break;
|
366
|
+
}
|
367
|
+
atLeastOneRootFound = true;
|
368
|
+
|
369
|
+
// eslint-disable-next-line
|
370
|
+
rootNode.walkDown(node => {
|
371
|
+
const {
|
372
|
+
columnIndex: nodeColumnIndex,
|
373
|
+
headerLevel: nodeHeaderLevel,
|
374
|
+
origColspan,
|
375
|
+
isHidden
|
376
|
+
} = node.data;
|
377
|
+
if (isHidden) {
|
378
|
+
return;
|
379
|
+
}
|
380
|
+
|
381
|
+
// if the header fits entirely within the columns range get and save the node header level
|
382
|
+
if (origColspan <= columnsWidth && nodeColumnIndex >= columnIndexFrom && nodeColumnIndex + origColspan - 1 <= columnIndexTo && (headerLevel === null || nodeHeaderLevel < headerLevel)) {
|
383
|
+
headerLevel = nodeHeaderLevel;
|
384
|
+
}
|
385
|
+
}, TRAVERSAL_DF_PRE);
|
386
|
+
}
|
387
|
+
if (atLeastOneRootFound && headerLevel === null) {
|
388
|
+
return -1;
|
389
|
+
}
|
390
|
+
return this.levelToRowCoords((_headerLevel = headerLevel) !== null && _headerLevel !== void 0 ? _headerLevel : 0);
|
329
391
|
}
|
330
392
|
|
331
393
|
/**
|
@@ -363,6 +425,43 @@ export default class StateManager {
|
|
363
425
|
return stepBackColumn;
|
364
426
|
}
|
365
427
|
|
428
|
+
/**
|
429
|
+
* The method is helpful in cases where the column index targets in-between currently
|
430
|
+
* collapsed column. In that case, the method returns the right-most column index
|
431
|
+
* where the nested header ends.
|
432
|
+
*
|
433
|
+
* @param {number} headerLevel Header level (there is support for negative and positive values).
|
434
|
+
* @param {number} columnIndex A visual column index.
|
435
|
+
* @returns {number}
|
436
|
+
*/
|
437
|
+
findRightMostColumnIndex(headerLevel, columnIndex) {
|
438
|
+
var _this$getHeaderSettin3;
|
439
|
+
const {
|
440
|
+
isRoot,
|
441
|
+
origColspan
|
442
|
+
} = (_this$getHeaderSettin3 = this.getHeaderSettings(headerLevel, columnIndex)) !== null && _this$getHeaderSettin3 !== void 0 ? _this$getHeaderSettin3 : {
|
443
|
+
isRoot: true,
|
444
|
+
origColspan: 1
|
445
|
+
};
|
446
|
+
if (isRoot) {
|
447
|
+
return columnIndex + origColspan - 1;
|
448
|
+
}
|
449
|
+
let stepForthColumn = columnIndex + 1;
|
450
|
+
while (stepForthColumn < this.getColumnsCount()) {
|
451
|
+
var _this$getHeaderSettin4;
|
452
|
+
const {
|
453
|
+
isRoot: isRootNode
|
454
|
+
} = (_this$getHeaderSettin4 = this.getHeaderSettings(headerLevel, stepForthColumn)) !== null && _this$getHeaderSettin4 !== void 0 ? _this$getHeaderSettin4 : {
|
455
|
+
isRoot: true
|
456
|
+
};
|
457
|
+
if (isRootNode) {
|
458
|
+
break;
|
459
|
+
}
|
460
|
+
stepForthColumn += 1;
|
461
|
+
}
|
462
|
+
return stepForthColumn - 1;
|
463
|
+
}
|
464
|
+
|
366
465
|
/**
|
367
466
|
* Gets a total number of headers levels.
|
368
467
|
*
|
@@ -16,6 +16,7 @@ const PLUGIN_KEY = 'nestedRows';
|
|
16
16
|
exports.PLUGIN_KEY = PLUGIN_KEY;
|
17
17
|
const PLUGIN_PRIORITY = 300;
|
18
18
|
exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
|
19
|
+
const SHORTCUTS_GROUP = PLUGIN_KEY;
|
19
20
|
const privatePool = new WeakMap();
|
20
21
|
|
21
22
|
/* eslint-disable jsdoc/require-description-complete-sentence */
|
@@ -150,6 +151,7 @@ class NestedRows extends _base.BasePlugin {
|
|
150
151
|
});
|
151
152
|
this.addHook('beforeLoadData', data => this.onBeforeLoadData(data));
|
152
153
|
this.addHook('beforeUpdateData', data => this.onBeforeLoadData(data));
|
154
|
+
this.registerShortcuts();
|
153
155
|
super.enablePlugin();
|
154
156
|
}
|
155
157
|
|
@@ -158,6 +160,7 @@ class NestedRows extends _base.BasePlugin {
|
|
158
160
|
*/
|
159
161
|
disablePlugin() {
|
160
162
|
this.hot.rowIndexMapper.unregisterMap('nestedRows');
|
163
|
+
this.unregisterShortcuts();
|
161
164
|
super.disablePlugin();
|
162
165
|
}
|
163
166
|
|
@@ -179,6 +182,44 @@ class NestedRows extends _base.BasePlugin {
|
|
179
182
|
super.updatePlugin();
|
180
183
|
}
|
181
184
|
|
185
|
+
/**
|
186
|
+
* Register shortcuts responsible for toggling collapsible columns.
|
187
|
+
*
|
188
|
+
* @private
|
189
|
+
*/
|
190
|
+
registerShortcuts() {
|
191
|
+
this.hot.getShortcutManager().getContext('grid').addShortcut({
|
192
|
+
keys: [['Enter']],
|
193
|
+
callback: () => {
|
194
|
+
const {
|
195
|
+
highlight
|
196
|
+
} = this.hot.getSelectedRangeLast();
|
197
|
+
if (highlight.col === -1 && highlight.row >= 0) {
|
198
|
+
const row = this.collapsingUI.translateTrimmedRow(highlight.row);
|
199
|
+
if (this.collapsingUI.areChildrenCollapsed(row)) {
|
200
|
+
this.collapsingUI.expandChildren(row);
|
201
|
+
} else {
|
202
|
+
this.collapsingUI.collapseChildren(row);
|
203
|
+
}
|
204
|
+
}
|
205
|
+
},
|
206
|
+
runOnlyIf: () => {
|
207
|
+
var _this$hot$getSelected;
|
208
|
+
return (_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight.isHeader();
|
209
|
+
},
|
210
|
+
group: SHORTCUTS_GROUP
|
211
|
+
});
|
212
|
+
}
|
213
|
+
|
214
|
+
/**
|
215
|
+
* Unregister shortcuts responsible for toggling collapsible columns.
|
216
|
+
*
|
217
|
+
* @private
|
218
|
+
*/
|
219
|
+
unregisterShortcuts() {
|
220
|
+
this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
|
221
|
+
}
|
222
|
+
|
182
223
|
/**
|
183
224
|
* `beforeRowMove` hook callback.
|
184
225
|
*
|