handsontable 13.1.0 → 14.0.0-next-e8f87aa-20231030
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/3rdparty/walkontable/src/calculator/constants.js +3 -6
- package/3rdparty/walkontable/src/calculator/viewportColumns.js +1 -2
- package/3rdparty/walkontable/src/calculator/viewportRows.js +1 -2
- package/3rdparty/walkontable/src/cell/coords.d.ts +8 -1
- package/3rdparty/walkontable/src/cell/coords.js +81 -13
- package/3rdparty/walkontable/src/cell/coords.mjs +80 -11
- package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
- package/3rdparty/walkontable/src/cell/range.js +39 -9
- 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 +13 -12
- 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/filter/column.js +1 -2
- package/3rdparty/walkontable/src/filter/row.js +1 -2
- package/3rdparty/walkontable/src/index.js +12 -4
- 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/constants.js +7 -14
- 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/overlays.js +1 -2
- 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 +13 -0
- package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +14 -1
- package/3rdparty/walkontable/src/renderer/rowHeaders.js +8 -0
- package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +8 -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 +3 -2
- package/3rdparty/walkontable/src/scroll.mjs +2 -0
- package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +8 -14
- package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
- package/3rdparty/walkontable/src/selection/border/constants.js +15 -0
- package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
- package/3rdparty/walkontable/src/selection/constants.js +54 -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 +100 -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/bottom.js +1 -2
- package/3rdparty/walkontable/src/table/bottomInlineStartCorner.js +1 -2
- package/3rdparty/walkontable/src/table/inlineStart.js +1 -2
- package/3rdparty/walkontable/src/table/master.js +3 -6
- package/3rdparty/walkontable/src/table/master.mjs +2 -4
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +10 -2
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +10 -2
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +10 -2
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +10 -2
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +10 -2
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
- package/3rdparty/walkontable/src/table/top.js +1 -2
- package/3rdparty/walkontable/src/table/topInlineStartCorner.js +1 -2
- package/3rdparty/walkontable/src/table.js +20 -80
- package/3rdparty/walkontable/src/table.mjs +20 -79
- package/3rdparty/walkontable/src/utils/orderView/constants.js +3 -6
- package/3rdparty/walkontable/src/viewport.js +1 -2
- package/CHANGELOG.md +51 -0
- package/base.js +3 -4
- package/base.mjs +2 -2
- package/cellTypes/autocompleteType/autocompleteType.js +3 -5
- package/cellTypes/checkboxType/checkboxType.js +3 -5
- package/cellTypes/dateType/dateType.d.ts +3 -3
- package/cellTypes/dateType/dateType.js +5 -7
- package/cellTypes/dateType/dateType.mjs +2 -2
- package/cellTypes/dropdownType/dropdownType.js +3 -5
- package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
- package/cellTypes/handsontableType/handsontableType.js +5 -7
- 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/numericType/numericType.js +3 -5
- package/cellTypes/passwordType/passwordType.js +3 -5
- 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 +11 -0
- package/cellTypes/selectType/selectType.mjs +8 -0
- package/cellTypes/textType/textType.js +3 -5
- package/cellTypes/timeType/timeType.js +3 -5
- package/common.d.ts +1 -1
- package/core/focusCatcher/focusDetector.js +63 -0
- package/core/focusCatcher/focusDetector.mjs +59 -0
- package/core/focusCatcher/index.js +148 -0
- package/core/focusCatcher/index.mjs +144 -0
- package/core/index.js +9 -0
- package/core/index.mjs +1 -0
- package/core.d.ts +10 -5
- package/core.js +327 -359
- package/core.mjs +327 -359
- package/dataMap/dataMap.js +1 -2
- package/dataMap/dataSource.js +1 -2
- 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 +94 -76
- package/dist/handsontable.full.css +94 -76
- package/dist/handsontable.full.js +23133 -15992
- package/dist/handsontable.full.min.css +8 -8
- package/dist/handsontable.full.min.js +170 -152
- package/dist/handsontable.js +21856 -15085
- package/dist/handsontable.min.css +7 -7
- package/dist/handsontable.min.js +30 -22
- package/dist/languages/all.js +47 -40
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/ar-AR.js +1 -2
- package/dist/languages/cs-CZ.js +1 -2
- package/dist/languages/de-CH.js +1 -2
- package/dist/languages/de-DE.js +1 -2
- package/dist/languages/en-US.js +15 -3
- package/dist/languages/en-US.min.js +1 -1
- package/dist/languages/es-MX.js +1 -2
- package/dist/languages/fr-FR.js +1 -2
- package/dist/languages/it-IT.js +1 -2
- package/dist/languages/ja-JP.js +1 -2
- package/dist/languages/ko-KR.js +1 -2
- package/dist/languages/lv-LV.js +1 -2
- package/dist/languages/nb-NO.js +1 -2
- package/dist/languages/nl-NL.js +1 -2
- package/dist/languages/pl-PL.js +15 -3
- package/dist/languages/pl-PL.min.js +1 -1
- package/dist/languages/pt-BR.js +1 -2
- package/dist/languages/ru-RU.js +1 -2
- package/dist/languages/sr-SP.js +1 -2
- package/dist/languages/zh-CN.js +1 -2
- package/dist/languages/zh-TW.js +1 -2
- package/editorManager.js +17 -91
- package/editorManager.mjs +16 -87
- package/editors/autocompleteEditor/autocompleteEditor.js +65 -11
- package/editors/autocompleteEditor/autocompleteEditor.mjs +65 -10
- package/editors/baseEditor/baseEditor.js +19 -13
- package/editors/baseEditor/baseEditor.mjs +16 -7
- package/editors/checkboxEditor/checkboxEditor.js +1 -2
- package/editors/dateEditor/dateEditor.js +27 -9
- package/editors/dateEditor/dateEditor.mjs +27 -8
- package/editors/dropdownEditor/dropdownEditor.js +1 -2
- package/editors/handsontableEditor/handsontableEditor.js +14 -7
- package/editors/handsontableEditor/handsontableEditor.mjs +14 -6
- package/editors/numericEditor/numericEditor.js +1 -2
- package/editors/passwordEditor/passwordEditor.js +1 -2
- package/editors/selectEditor/selectEditor.js +1 -2
- package/editors/textEditor/textEditor.js +20 -29
- package/editors/textEditor/textEditor.mjs +22 -30
- package/editors/timeEditor/timeEditor.js +1 -2
- package/eventManager.js +1 -2
- package/focusManager.d.ts +12 -0
- package/focusManager.js +265 -0
- package/focusManager.mjs +261 -0
- package/helpers/a11y.js +81 -0
- package/helpers/a11y.mjs +39 -0
- package/helpers/dom/element.js +224 -12
- package/helpers/dom/element.mjs +216 -10
- package/helpers/dom/event.d.ts +1 -0
- package/helpers/dom/event.js +25 -0
- package/helpers/dom/event.mjs +24 -0
- package/helpers/mixed.js +2 -2
- package/helpers/mixed.mjs +2 -2
- package/helpers/number.d.ts +1 -0
- package/helpers/number.js +18 -0
- package/helpers/number.mjs +17 -0
- package/helpers/unicode.js +1 -2
- package/i18n/constants.js +97 -160
- package/i18n/constants.mjs +17 -1
- package/i18n/languages/ar-AR.js +3 -4
- package/i18n/languages/cs-CZ.js +3 -4
- package/i18n/languages/de-CH.js +3 -4
- package/i18n/languages/de-DE.js +3 -4
- package/i18n/languages/en-US.js +17 -5
- package/i18n/languages/en-US.mjs +14 -1
- package/i18n/languages/es-MX.js +3 -4
- package/i18n/languages/fr-FR.js +3 -4
- package/i18n/languages/it-IT.js +3 -4
- package/i18n/languages/ja-JP.js +3 -4
- package/i18n/languages/ko-KR.js +3 -4
- package/i18n/languages/lv-LV.js +3 -4
- package/i18n/languages/nb-NO.js +3 -4
- package/i18n/languages/nl-NL.js +3 -4
- package/i18n/languages/pl-PL.js +17 -5
- package/i18n/languages/pl-PL.mjs +14 -1
- package/i18n/languages/pt-BR.js +3 -4
- package/i18n/languages/ru-RU.js +3 -4
- package/i18n/languages/sr-SP.js +3 -4
- package/i18n/languages/zh-CN.js +3 -4
- package/i18n/languages/zh-TW.js +3 -4
- package/i18n/registry.js +4 -6
- package/index.js +3 -4
- package/languages/all.js +47 -40
- package/languages/ar-AR.js +1 -2
- package/languages/cs-CZ.js +1 -2
- package/languages/de-CH.js +1 -2
- package/languages/de-DE.js +1 -2
- package/languages/en-US.js +15 -3
- package/languages/en-US.mjs +14 -1
- package/languages/es-MX.js +1 -2
- package/languages/fr-FR.js +1 -2
- package/languages/index.js +47 -40
- package/languages/it-IT.js +1 -2
- package/languages/ja-JP.js +1 -2
- package/languages/ko-KR.js +1 -2
- package/languages/lv-LV.js +1 -2
- package/languages/nb-NO.js +1 -2
- package/languages/nl-NL.js +1 -2
- package/languages/pl-PL.js +15 -3
- package/languages/pl-PL.mjs +14 -1
- package/languages/pt-BR.js +1 -2
- package/languages/ru-RU.js +1 -2
- package/languages/sr-SP.js +1 -2
- package/languages/zh-CN.js +1 -2
- package/languages/zh-TW.js +1 -2
- package/mixins/hooksRefRegisterer.js +1 -2
- package/mixins/localHooks.js +1 -2
- package/package.json +119 -96
- package/pluginHooks.d.ts +42 -7
- package/pluginHooks.js +301 -65
- package/pluginHooks.mjs +300 -63
- package/plugins/autoColumnSize/autoColumnSize.d.ts +2 -0
- package/plugins/autoColumnSize/autoColumnSize.js +2 -4
- package/plugins/autoRowSize/autoRowSize.d.ts +2 -0
- package/plugins/autoRowSize/autoRowSize.js +15 -10
- package/plugins/autoRowSize/autoRowSize.mjs +13 -6
- package/plugins/autofill/autofill.js +2 -4
- package/plugins/autofill/utils.js +1 -2
- package/plugins/base/base.js +1 -2
- package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +2 -4
- package/plugins/bindRowsWithHeaders/maps/looseBindsMap.js +1 -2
- package/plugins/bindRowsWithHeaders/maps/strictBindsMap.js +1 -2
- package/plugins/collapsibleColumns/collapsibleColumns.js +77 -8
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +76 -5
- package/plugins/columnSorting/columnSorting.js +71 -6
- package/plugins/columnSorting/columnSorting.mjs +70 -3
- package/plugins/columnSorting/index.js +3 -1
- package/plugins/columnSorting/index.mjs +1 -1
- package/plugins/columnSorting/sortFunction/checkbox.js +1 -2
- package/plugins/columnSorting/sortFunction/date.js +1 -2
- package/plugins/columnSorting/sortFunction/default.js +1 -2
- package/plugins/columnSorting/sortFunction/numeric.js +1 -2
- package/plugins/columnSorting/sortService/engine.js +3 -6
- package/plugins/columnSorting/utils.js +3 -6
- package/plugins/columnSummary/columnSummary.js +2 -4
- package/plugins/columnSummary/endpoints.js +1 -2
- package/plugins/comments/commentEditor.js +2 -2
- package/plugins/comments/commentEditor.mjs +1 -0
- package/plugins/comments/comments.js +254 -197
- 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/comments/displaySwitch.js +1 -2
- 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 +77 -40
- 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/defaultShortcutsList.js +88 -0
- package/plugins/contextMenu/menu/defaultShortcutsList.mjs +84 -0
- package/plugins/contextMenu/menu/index.js +9 -0
- package/plugins/contextMenu/menu/index.mjs +1 -0
- package/plugins/contextMenu/{menu.js → menu/menu.js} +145 -421
- package/plugins/contextMenu/{menu.mjs → menu/menu.mjs} +146 -422
- package/plugins/contextMenu/menu/menuItemRenderer.js +70 -0
- package/plugins/contextMenu/menu/menuItemRenderer.mjs +66 -0
- package/plugins/contextMenu/menu/navigator.js +27 -0
- package/plugins/contextMenu/menu/navigator.mjs +23 -0
- package/plugins/contextMenu/menu/positioner.js +213 -0
- package/plugins/contextMenu/menu/positioner.mjs +209 -0
- package/plugins/contextMenu/menu/shortcuts.js +114 -0
- package/plugins/contextMenu/menu/shortcuts.mjs +110 -0
- package/plugins/contextMenu/menu/utils.js +177 -0
- package/plugins/contextMenu/menu/utils.mjs +163 -0
- package/plugins/contextMenu/predefinedItems/alignment.js +10 -4
- package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
- package/plugins/contextMenu/predefinedItems/clearColumn.js +8 -7
- package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/columnLeft.js +8 -7
- package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/columnRight.js +8 -7
- package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/index.js +75 -0
- package/plugins/contextMenu/predefinedItems/index.mjs +68 -0
- package/plugins/contextMenu/predefinedItems/noItems.js +1 -2
- package/plugins/contextMenu/predefinedItems/readOnly.js +10 -4
- package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
- package/plugins/contextMenu/predefinedItems/redo.js +3 -4
- package/plugins/contextMenu/predefinedItems/removeColumn.js +10 -9
- package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/removeRow.js +10 -9
- package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/rowAbove.js +8 -7
- package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/rowBelow.js +8 -7
- package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/separator.js +1 -2
- package/plugins/contextMenu/predefinedItems/undo.js +3 -4
- package/plugins/contextMenu/utils.js +35 -151
- package/plugins/contextMenu/utils.mjs +35 -144
- package/plugins/copyPaste/clipboardData/clipboardData.js +516 -0
- package/plugins/copyPaste/clipboardData/clipboardData.mjs +512 -0
- package/plugins/copyPaste/clipboardData/copyClipboardData.js +69 -0
- package/plugins/copyPaste/clipboardData/copyClipboardData.mjs +65 -0
- package/plugins/copyPaste/clipboardData/index.js +9 -0
- package/plugins/copyPaste/clipboardData/index.mjs +4 -0
- package/plugins/copyPaste/clipboardData/pasteClipboardData.js +81 -0
- package/plugins/copyPaste/clipboardData/pasteClipboardData.mjs +77 -0
- 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 +9 -2
- package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
- package/plugins/copyPaste/copyPaste.js +160 -167
- package/plugins/copyPaste/copyPaste.mjs +161 -166
- package/plugins/customBorders/contextMenuItem/bottom.js +2 -2
- package/plugins/customBorders/contextMenuItem/left.js +2 -2
- package/plugins/customBorders/contextMenuItem/noBorders.js +2 -2
- package/plugins/customBorders/contextMenuItem/right.js +2 -2
- package/plugins/customBorders/contextMenuItem/top.js +2 -2
- package/plugins/customBorders/customBorders.js +27 -26
- package/plugins/customBorders/customBorders.mjs +24 -21
- package/plugins/dragToScroll/dragToScroll.js +2 -4
- package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
- package/plugins/dropdownMenu/dropdownMenu.js +130 -44
- package/plugins/dropdownMenu/dropdownMenu.mjs +127 -39
- package/plugins/exportFile/dataProvider.js +1 -2
- package/plugins/exportFile/exportFile.js +4 -6
- package/plugins/exportFile/typeFactory.js +5 -8
- package/plugins/exportFile/types/_base.js +1 -2
- package/plugins/exportFile/types/csv.js +1 -2
- package/plugins/filters/component/_base.js +23 -8
- package/plugins/filters/component/_base.mjs +23 -8
- package/plugins/filters/component/actionBar.js +31 -29
- package/plugins/filters/component/actionBar.mjs +26 -23
- package/plugins/filters/component/condition.js +48 -61
- package/plugins/filters/component/condition.mjs +40 -52
- package/plugins/filters/component/operators.js +21 -22
- package/plugins/filters/component/operators.mjs +18 -18
- package/plugins/filters/component/value.js +37 -28
- package/plugins/filters/component/value.mjs +32 -22
- package/plugins/filters/condition/beginsWith.js +3 -4
- package/plugins/filters/condition/between.js +3 -4
- package/plugins/filters/condition/byValue.js +1 -2
- package/plugins/filters/condition/contains.js +3 -4
- package/plugins/filters/condition/date/after.js +3 -4
- package/plugins/filters/condition/date/before.js +3 -4
- package/plugins/filters/condition/date/today.js +3 -4
- package/plugins/filters/condition/date/tomorrow.js +3 -4
- package/plugins/filters/condition/date/yesterday.js +3 -4
- package/plugins/filters/condition/empty.js +3 -4
- package/plugins/filters/condition/endsWith.js +3 -4
- package/plugins/filters/condition/equal.js +3 -4
- package/plugins/filters/condition/false.js +1 -2
- package/plugins/filters/condition/greaterThan.js +3 -4
- package/plugins/filters/condition/greaterThanOrEqual.js +3 -4
- package/plugins/filters/condition/lessThan.js +3 -4
- package/plugins/filters/condition/lessThanOrEqual.js +3 -4
- package/plugins/filters/condition/none.js +3 -4
- package/plugins/filters/condition/notBetween.js +3 -4
- package/plugins/filters/condition/notContains.js +3 -4
- package/plugins/filters/condition/notEmpty.js +3 -4
- package/plugins/filters/condition/notEqual.js +3 -4
- package/plugins/filters/condition/true.js +1 -2
- package/plugins/filters/conditionCollection.d.ts +3 -2
- package/plugins/filters/conditionCollection.js +1 -2
- package/plugins/filters/conditionRegisterer.js +1 -2
- package/plugins/filters/conditionUpdateObserver.js +1 -2
- package/plugins/filters/constants.js +4 -8
- package/plugins/filters/constants.mjs +1 -1
- package/plugins/filters/dataFilter.js +1 -2
- package/plugins/filters/filters.d.ts +3 -5
- package/plugins/filters/filters.js +118 -67
- package/plugins/filters/filters.mjs +109 -56
- package/plugins/filters/logicalOperationRegisterer.js +1 -2
- package/plugins/filters/logicalOperations/conjunction.js +4 -6
- package/plugins/filters/logicalOperations/disjunction.js +4 -6
- package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +4 -6
- package/plugins/filters/menu/focusController.js +123 -0
- package/plugins/filters/menu/focusController.mjs +119 -0
- package/plugins/filters/menu/focusNavigator.js +30 -0
- package/plugins/filters/menu/focusNavigator.mjs +26 -0
- package/plugins/filters/ui/_base.js +37 -15
- package/plugins/filters/ui/_base.mjs +35 -13
- package/plugins/filters/ui/input.js +43 -35
- package/plugins/filters/ui/input.mjs +42 -33
- package/plugins/filters/ui/link.js +44 -12
- package/plugins/filters/ui/link.mjs +44 -11
- package/plugins/filters/ui/multipleSelect.js +237 -133
- package/plugins/filters/ui/multipleSelect.mjs +232 -127
- package/plugins/filters/ui/radioInput.js +42 -18
- package/plugins/filters/ui/radioInput.mjs +42 -17
- package/plugins/filters/ui/select.js +152 -77
- package/plugins/filters/ui/select.mjs +148 -72
- package/plugins/formulas/engine/settings.js +2 -4
- package/plugins/formulas/formulas.js +3 -6
- package/plugins/formulas/indexSyncer/axisSyncer.js +1 -2
- package/plugins/formulas/indexSyncer/index.js +1 -2
- package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +2 -2
- package/plugins/hiddenColumns/contextMenuItem/showColumn.js +2 -2
- package/plugins/hiddenColumns/hiddenColumns.d.ts +1 -0
- package/plugins/hiddenColumns/hiddenColumns.js +49 -6
- package/plugins/hiddenColumns/hiddenColumns.mjs +48 -3
- package/plugins/hiddenRows/contextMenuItem/hideRow.js +2 -2
- package/plugins/hiddenRows/contextMenuItem/showRow.js +2 -2
- package/plugins/hiddenRows/hiddenRows.d.ts +1 -0
- package/plugins/hiddenRows/hiddenRows.js +49 -6
- package/plugins/hiddenRows/hiddenRows.mjs +48 -3
- package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +2 -2
- package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +2 -2
- package/plugins/manualColumnFreeze/manualColumnFreeze.js +2 -4
- package/plugins/manualColumnMove/manualColumnMove.js +9 -17
- package/plugins/manualColumnMove/manualColumnMove.mjs +7 -13
- package/plugins/manualColumnMove/ui/_base.js +1 -2
- package/plugins/manualColumnMove/ui/backlight.js +1 -2
- package/plugins/manualColumnMove/ui/guideline.js +1 -2
- package/plugins/manualColumnResize/manualColumnResize.js +2 -4
- package/plugins/manualRowMove/manualRowMove.js +6 -23
- package/plugins/manualRowMove/manualRowMove.mjs +4 -19
- package/plugins/manualRowMove/ui/_base.js +1 -2
- package/plugins/manualRowMove/ui/backlight.js +1 -2
- package/plugins/manualRowMove/ui/guideline.js +1 -2
- package/plugins/manualRowResize/manualRowResize.js +2 -4
- package/plugins/mergeCells/calculations/autofill.js +1 -2
- package/plugins/mergeCells/calculations/selection.js +1 -2
- package/plugins/mergeCells/cellCoords.js +1 -2
- package/plugins/mergeCells/cellsCollection.js +1 -2
- package/plugins/mergeCells/contextMenuItem/toggleMerge.js +2 -2
- package/plugins/mergeCells/mergeCells.js +7 -20
- package/plugins/mergeCells/mergeCells.mjs +5 -16
- package/plugins/multiColumnSorting/multiColumnSorting.js +60 -6
- package/plugins/multiColumnSorting/multiColumnSorting.mjs +59 -3
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +2 -4
- package/plugins/nestedHeaders/nestedHeaders.js +263 -36
- package/plugins/nestedHeaders/nestedHeaders.mjs +262 -33
- package/plugins/nestedHeaders/stateManager/index.js +102 -3
- package/plugins/nestedHeaders/stateManager/index.mjs +102 -3
- package/plugins/nestedHeaders/stateManager/sourceSettings.js +1 -2
- package/plugins/nestedHeaders/utils/ghostTable.js +1 -2
- package/plugins/nestedRows/data/dataManager.js +1 -2
- package/plugins/nestedRows/nestedRows.js +47 -10
- package/plugins/nestedRows/nestedRows.mjs +45 -6
- package/plugins/nestedRows/ui/_base.js +1 -2
- package/plugins/nestedRows/ui/collapsing.js +1 -2
- package/plugins/nestedRows/ui/contextMenu.js +3 -4
- package/plugins/nestedRows/ui/headers.js +13 -3
- package/plugins/nestedRows/ui/headers.mjs +13 -2
- package/plugins/persistentState/persistentState.js +2 -4
- package/plugins/persistentState/storage.js +1 -2
- package/plugins/search/search.js +2 -4
- package/plugins/touchScroll/touchScroll.js +2 -4
- package/plugins/trimRows/trimRows.js +2 -4
- package/plugins/undoRedo/index.js +2 -2
- package/plugins/undoRedo/undoRedo.js +2 -4
- package/renderers/autocompleteRenderer/autocompleteRenderer.js +9 -2
- package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +8 -0
- package/renderers/baseRenderer/baseRenderer.js +18 -2
- package/renderers/baseRenderer/baseRenderer.mjs +18 -1
- package/renderers/checkboxRenderer/checkboxRenderer.js +10 -6
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
- package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
- package/renderers/dateRenderer/dateRenderer.js +28 -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 +28 -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/htmlRenderer/htmlRenderer.js +1 -2
- package/renderers/index.d.ts +9 -0
- package/renderers/numericRenderer/numericRenderer.js +1 -2
- package/renderers/passwordRenderer/passwordRenderer.js +1 -2
- 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 +26 -0
- package/renderers/selectRenderer/selectRenderer.mjs +22 -0
- package/renderers/textRenderer/textRenderer.js +1 -2
- package/renderers/timeRenderer/timeRenderer.js +1 -2
- package/selection/highlight/highlight.js +257 -73
- 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 +32 -29
- 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 +9 -10
- package/selection/range.mjs +8 -8
- package/selection/selection.js +334 -154
- package/selection/selection.mjs +330 -151
- package/selection/transformation.js +233 -94
- package/selection/transformation.mjs +232 -92
- package/selection/utils.js +20 -31
- package/selection/utils.mjs +16 -21
- package/settings.d.ts +4 -0
- package/shortcutContexts/commands/editor/closeAndSave.js +11 -0
- package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
- package/shortcutContexts/commands/editor/closeWithoutSaving.js +11 -0
- package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
- package/shortcutContexts/commands/editor/fastOpen.js +15 -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 +26 -0
- package/shortcutContexts/commands/editor/open.mjs +23 -0
- package/shortcutContexts/commands/emptySelectedCells.js +10 -0
- package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
- package/shortcutContexts/commands/extendCellsSelection/down.js +14 -0
- package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +24 -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 +14 -0
- package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/right.js +14 -0
- package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/toColumns.js +18 -0
- package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +28 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +18 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +18 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +28 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +28 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +28 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toRows.js +18 -0
- package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/up.js +14 -0
- package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +24 -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 +12 -0
- package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +32 -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 +11 -0
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
- package/shortcutContexts/commands/moveCellSelection/inlineStart.js +11 -0
- package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
- package/shortcutContexts/commands/moveCellSelection/left.js +9 -0
- package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
- package/shortcutContexts/commands/moveCellSelection/right.js +9 -0
- package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +16 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +16 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +18 -0
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
- package/shortcutContexts/commands/moveCellSelection/toMostRight.js +20 -0
- package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTop.js +16 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +18 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
- package/shortcutContexts/commands/moveCellSelection/up.js +12 -0
- package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +32 -0
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +29 -0
- package/shortcutContexts/commands/populateSelectedCellsData.js +28 -0
- package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
- package/shortcutContexts/commands/scrollToFocusedCell.js +34 -0
- package/shortcutContexts/commands/scrollToFocusedCell.mjs +31 -0
- package/shortcutContexts/commands/selectAll.js +11 -0
- package/shortcutContexts/commands/selectAll.mjs +8 -0
- package/shortcutContexts/constants.js +11 -0
- package/shortcutContexts/constants.mjs +8 -0
- package/shortcutContexts/editor.js +25 -0
- package/shortcutContexts/editor.mjs +21 -0
- package/shortcutContexts/grid.js +167 -0
- package/shortcutContexts/grid.mjs +163 -0
- package/shortcutContexts/index.js +24 -0
- package/shortcutContexts/index.mjs +11 -0
- package/shortcuts/context.d.ts +1 -0
- package/shortcuts/context.js +23 -4
- package/shortcuts/context.mjs +23 -5
- package/shortcuts/manager.js +31 -7
- package/shortcuts/manager.mjs +32 -7
- package/shortcuts/recorder.js +30 -14
- package/shortcuts/recorder.mjs +30 -14
- package/shortcuts/utils.js +19 -5
- package/shortcuts/utils.mjs +18 -4
- package/tableView.js +113 -16
- package/tableView.mjs +113 -15
- package/utils/dataStructures/linkedList.js +1 -2
- package/utils/dataStructures/priorityMap.js +2 -4
- package/utils/dataStructures/queue.js +1 -2
- package/utils/dataStructures/stack.js +1 -2
- package/utils/dataStructures/tree.js +3 -6
- package/utils/ghostTable.js +32 -17
- package/utils/ghostTable.mjs +31 -15
- package/utils/interval.js +1 -2
- package/utils/paginator.js +151 -0
- package/utils/paginator.mjs +147 -0
- package/utils/parseTable.js +527 -83
- package/utils/parseTable.mjs +523 -82
- package/utils/rootInstance.js +2 -4
- package/utils/samplesGenerator.js +21 -13
- package/utils/samplesGenerator.mjs +20 -11
- package/utils/staticRegister.js +1 -2
- package/validators/autocompleteValidator/autocompleteValidator.js +1 -2
- package/validators/dateValidator/dateValidator.js +1 -2
- package/validators/numericValidator/numericValidator.js +1 -2
- package/validators/timeValidator/timeValidator.js +1 -2
- package/3rdparty/walkontable/src/selection.js +0 -295
- package/3rdparty/walkontable/src/selection.mjs +0 -290
- package/plugins/contextMenu/predefinedItems.js +0 -76
- package/plugins/contextMenu/predefinedItems.mjs +0 -68
- package/plugins/copyPaste/clipboardData.js +0 -18
- package/plugins/copyPaste/clipboardData.mjs +0 -14
- package/plugins/copyPaste/focusableElement.js +0 -186
- package/plugins/copyPaste/focusableElement.mjs +0 -180
- package/plugins/copyPaste/pasteEvent.js +0 -14
- package/plugins/copyPaste/pasteEvent.mjs +0 -9
- 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
package/selection/selection.mjs
CHANGED
@@ -1,18 +1,31 @@
|
|
1
1
|
import "core-js/modules/es.error.cause.js";
|
2
|
-
|
3
|
-
|
2
|
+
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
3
|
+
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
4
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
5
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
6
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
7
|
+
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
8
|
+
function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
|
9
|
+
function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
|
10
|
+
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
11
|
+
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
12
|
+
import { CellCoords, CellRange } from "./../3rdparty/walkontable/src/index.mjs";
|
13
|
+
import Highlight, { AREA_TYPE, HEADER_TYPE, FOCUS_TYPE } from "./highlight/highlight.mjs";
|
4
14
|
import SelectionRange from "./range.mjs";
|
5
15
|
import { createObjectPropListener, mixin } from "./../helpers/object.mjs";
|
6
16
|
import { isUndefined } from "./../helpers/mixed.mjs";
|
17
|
+
import { clamp } from "./../helpers/number.mjs";
|
7
18
|
import { arrayEach } from "./../helpers/array.mjs";
|
8
19
|
import localHooks from "./../mixins/localHooks.mjs";
|
9
20
|
import Transformation from "./transformation.mjs";
|
10
|
-
import { detectSelectionType,
|
21
|
+
import { detectSelectionType, normalizeSelectionFactory, SELECTION_TYPE_EMPTY, SELECTION_TYPE_UNRECOGNIZED } from "./utils.mjs";
|
11
22
|
import { toSingleLine } from "./../helpers/templateLiteralTag.mjs";
|
23
|
+
import { A11Y_SELECTED } from "../helpers/a11y.mjs";
|
12
24
|
/**
|
13
25
|
* @class Selection
|
14
26
|
* @util
|
15
27
|
*/
|
28
|
+
var _disableHeadersHighlight = /*#__PURE__*/new WeakMap();
|
16
29
|
class Selection {
|
17
30
|
constructor(settings, tableProps) {
|
18
31
|
var _this = this;
|
@@ -21,57 +34,73 @@ class Selection {
|
|
21
34
|
*
|
22
35
|
* @type {GridSettings}
|
23
36
|
*/
|
24
|
-
this
|
37
|
+
_defineProperty(this, "settings", void 0);
|
25
38
|
/**
|
26
39
|
* An additional object with dynamically defined properties which describes table state.
|
27
40
|
*
|
28
41
|
* @type {object}
|
29
42
|
*/
|
30
|
-
this
|
43
|
+
_defineProperty(this, "tableProps", void 0);
|
31
44
|
/**
|
32
45
|
* The flag which determines if the selection is in progress.
|
33
46
|
*
|
34
47
|
* @type {boolean}
|
35
48
|
*/
|
36
|
-
this
|
49
|
+
_defineProperty(this, "inProgress", false);
|
37
50
|
/**
|
38
|
-
*
|
51
|
+
* Selection data layer (handle visual coordinates).
|
39
52
|
*
|
40
|
-
* @type {
|
53
|
+
* @type {SelectionRange}
|
54
|
+
*/
|
55
|
+
_defineProperty(this, "selectedRange", new SelectionRange((highlight, from, to) => {
|
56
|
+
return this.tableProps.createCellRange(highlight, from, to);
|
57
|
+
}));
|
58
|
+
/**
|
59
|
+
* Visualization layer.
|
60
|
+
*
|
61
|
+
* @type {Highlight}
|
62
|
+
*/
|
63
|
+
_defineProperty(this, "highlight", void 0);
|
64
|
+
/**
|
65
|
+
* The module for modifying coordinates.
|
66
|
+
*
|
67
|
+
* @type {Transformation}
|
41
68
|
*/
|
42
|
-
this
|
69
|
+
_defineProperty(this, "transformation", void 0);
|
43
70
|
/**
|
44
71
|
* The collection of the selection layer levels where the whole row was selected using the row header or
|
45
72
|
* the corner header.
|
46
73
|
*
|
47
|
-
* @type {Set
|
74
|
+
* @type {Set<number>}
|
48
75
|
*/
|
49
|
-
this
|
76
|
+
_defineProperty(this, "selectedByRowHeader", new Set());
|
50
77
|
/**
|
51
78
|
* The collection of the selection layer levels where the whole column was selected using the column header or
|
52
79
|
* the corner header.
|
53
80
|
*
|
54
|
-
* @type {Set
|
81
|
+
* @type {Set<number>}
|
55
82
|
*/
|
56
|
-
this
|
83
|
+
_defineProperty(this, "selectedByColumnHeader", new Set());
|
57
84
|
/**
|
58
|
-
*
|
85
|
+
* When sets disable highlighting the headers even when the logical coordinates points on them.
|
59
86
|
*
|
60
|
-
* @type {
|
87
|
+
* @type {boolean}
|
61
88
|
*/
|
62
|
-
this
|
63
|
-
|
89
|
+
_classPrivateFieldInitSpec(this, _disableHeadersHighlight, {
|
90
|
+
writable: true,
|
91
|
+
value: false
|
64
92
|
});
|
65
|
-
|
66
|
-
|
67
|
-
*
|
68
|
-
* @type {Highlight}
|
69
|
-
*/
|
93
|
+
this.settings = settings;
|
94
|
+
this.tableProps = tableProps;
|
70
95
|
this.highlight = new Highlight({
|
71
96
|
headerClassName: settings.currentHeaderClassName,
|
97
|
+
headerAttributes: [A11Y_SELECTED()],
|
72
98
|
activeHeaderClassName: settings.activeHeaderClassName,
|
73
99
|
rowClassName: settings.currentRowClassName,
|
74
100
|
columnClassName: settings.currentColClassName,
|
101
|
+
cellAttributes: [A11Y_SELECTED()],
|
102
|
+
rowIndexMapper: this.tableProps.rowIndexMapper,
|
103
|
+
columnIndexMapper: this.tableProps.columnIndexMapper,
|
75
104
|
disabledCellSelection: (row, column) => this.tableProps.isDisabledCellSelection(row, column),
|
76
105
|
cellCornerVisible: function () {
|
77
106
|
return _this.isCellCornerVisible(...arguments);
|
@@ -82,21 +111,19 @@ class Selection {
|
|
82
111
|
visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),
|
83
112
|
renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),
|
84
113
|
createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
|
85
|
-
createCellRange: (highlight, from, to) => this.tableProps.createCellRange(highlight, from, to)
|
86
|
-
rowIndexMapper: () => this.tableProps.rowIndexMapper(),
|
87
|
-
columnIndexMapper: () => this.tableProps.columnIndexMapper()
|
114
|
+
createCellRange: (highlight, from, to) => this.tableProps.createCellRange(highlight, from, to)
|
88
115
|
});
|
89
|
-
/**
|
90
|
-
* The module for modifying coordinates.
|
91
|
-
*
|
92
|
-
* @type {Transformation}
|
93
|
-
*/
|
94
116
|
this.transformation = new Transformation(this.selectedRange, {
|
95
|
-
|
96
|
-
|
117
|
+
rowIndexMapper: this.tableProps.rowIndexMapper,
|
118
|
+
columnIndexMapper: this.tableProps.columnIndexMapper,
|
119
|
+
countRenderableRows: () => this.tableProps.countRenderableRows(),
|
120
|
+
countRenderableColumns: () => this.tableProps.countRenderableColumns(),
|
121
|
+
countRowHeaders: () => this.tableProps.countRowHeaders(),
|
122
|
+
countColHeaders: () => this.tableProps.countColHeaders(),
|
97
123
|
visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),
|
98
124
|
renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),
|
99
125
|
createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
|
126
|
+
navigableHeaders: () => settings.navigableHeaders,
|
100
127
|
fixedRowsBottom: () => settings.fixedRowsBottom,
|
101
128
|
minSpareRows: () => settings.minSpareRows,
|
102
129
|
minSpareCols: () => settings.minSpareCols,
|
@@ -139,6 +166,18 @@ class Selection {
|
|
139
166
|
}
|
140
167
|
return _this.runLocalHooks('insertColRequire', ...args);
|
141
168
|
});
|
169
|
+
this.transformation.addLocalHook('beforeRowWrap', function () {
|
170
|
+
for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
|
171
|
+
args[_key7] = arguments[_key7];
|
172
|
+
}
|
173
|
+
return _this.runLocalHooks('beforeRowWrap', ...args);
|
174
|
+
});
|
175
|
+
this.transformation.addLocalHook('beforeColumnWrap', function () {
|
176
|
+
for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
|
177
|
+
args[_key8] = arguments[_key8];
|
178
|
+
}
|
179
|
+
return _this.runLocalHooks('beforeColumnWrap', ...args);
|
180
|
+
});
|
142
181
|
}
|
143
182
|
|
144
183
|
/**
|
@@ -151,14 +190,14 @@ class Selection {
|
|
151
190
|
}
|
152
191
|
|
153
192
|
/**
|
154
|
-
* Indicate that selection process began. It sets
|
193
|
+
* Indicate that selection process began. It sets internally `.inProgress` property to `true`.
|
155
194
|
*/
|
156
195
|
begin() {
|
157
196
|
this.inProgress = true;
|
158
197
|
}
|
159
198
|
|
160
199
|
/**
|
161
|
-
* Indicate that selection process finished. It sets
|
200
|
+
* Indicate that selection process finished. It sets internally `.inProgress` property to `false`.
|
162
201
|
*/
|
163
202
|
finish() {
|
164
203
|
this.runLocalHooks('afterSelectionFinished', Array.from(this.selectedRange));
|
@@ -183,33 +222,25 @@ class Selection {
|
|
183
222
|
* the default trigger will be used.
|
184
223
|
* @param {boolean} [fragment=false] If `true`, the selection will be treated as a partial selection where the
|
185
224
|
* `setRangeEnd` method won't be called on every `setRangeStart` call.
|
225
|
+
* @param {CellCoords} [highlightCoords] If set, allows changing the coordinates of the highlight/focus cell.
|
186
226
|
*/
|
187
227
|
setRangeStart(coords, multipleSelection) {
|
188
228
|
let fragment = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
229
|
+
let highlightCoords = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : coords;
|
189
230
|
const isMultipleMode = this.settings.selectionMode === 'multiple';
|
190
231
|
const isMultipleSelection = isUndefined(multipleSelection) ? this.tableProps.getShortcutManager().isCtrlPressed() : multipleSelection;
|
191
|
-
const isRowNegative = coords.row < 0;
|
192
|
-
const isColumnNegative = coords.col < 0;
|
193
|
-
const selectedByCorner = isRowNegative && isColumnNegative;
|
194
232
|
// We are creating copy. We would like to modify just the start of the selection by below hook. Then original coords
|
195
233
|
// should be handled by next methods.
|
196
234
|
const coordsClone = coords.clone();
|
197
|
-
this.selectedByCorner = selectedByCorner;
|
198
235
|
this.runLocalHooks(`beforeSetRangeStart${fragment ? 'Only' : ''}`, coordsClone);
|
199
236
|
if (!isMultipleMode || isMultipleMode && !isMultipleSelection && isUndefined(multipleSelection)) {
|
200
237
|
this.selectedRange.clear();
|
201
238
|
}
|
202
|
-
this.selectedRange.add(coordsClone);
|
239
|
+
this.selectedRange.add(coordsClone).current().setHighlight(highlightCoords.clone());
|
203
240
|
if (this.getLayerLevel() === 0) {
|
204
241
|
this.selectedByRowHeader.clear();
|
205
242
|
this.selectedByColumnHeader.clear();
|
206
243
|
}
|
207
|
-
if (!selectedByCorner && isColumnNegative) {
|
208
|
-
this.selectedByRowHeader.add(this.getLayerLevel());
|
209
|
-
}
|
210
|
-
if (!selectedByCorner && isRowNegative) {
|
211
|
-
this.selectedByColumnHeader.add(this.getLayerLevel());
|
212
|
-
}
|
213
244
|
if (!fragment) {
|
214
245
|
this.setRangeEnd(coords);
|
215
246
|
}
|
@@ -222,9 +253,11 @@ class Selection {
|
|
222
253
|
* @param {boolean} [multipleSelection] If `true`, selection will be worked in 'multiple' mode. This option works
|
223
254
|
* only when 'selectionMode' is set as 'multiple'. If the argument is not defined
|
224
255
|
* the default trigger will be used.
|
256
|
+
* @param {CellCoords} [highlightCoords] If set, allows changing the coordinates of the highlight/focus cell.
|
225
257
|
*/
|
226
258
|
setRangeStartOnly(coords, multipleSelection) {
|
227
|
-
|
259
|
+
let highlightCoords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : coords;
|
260
|
+
this.setRangeStart(coords, multipleSelection, true, highlightCoords);
|
228
261
|
}
|
229
262
|
|
230
263
|
/**
|
@@ -236,21 +269,40 @@ class Selection {
|
|
236
269
|
if (this.selectedRange.isEmpty()) {
|
237
270
|
return;
|
238
271
|
}
|
239
|
-
|
240
|
-
// We are creating copy. We would like to modify just the end of the selection by below hook. Then original coords
|
241
|
-
// should be handled by next methods.
|
242
272
|
const coordsClone = coords.clone();
|
273
|
+
const countRows = this.tableProps.countRows();
|
274
|
+
const countCols = this.tableProps.countCols();
|
275
|
+
const isSingle = this.selectedRange.current().clone().setTo(coords).isSingleHeader();
|
276
|
+
|
277
|
+
// Ignore processing the end range when the header selection starts overlapping the corner and
|
278
|
+
// the selection is not a single header highlight.
|
279
|
+
if ((countRows > 0 || countCols > 0) && (countRows === 0 && coordsClone.col < 0 && !isSingle || countCols === 0 && coordsClone.row < 0 && !isSingle)) {
|
280
|
+
return;
|
281
|
+
}
|
243
282
|
this.runLocalHooks('beforeSetRangeEnd', coordsClone);
|
244
283
|
this.begin();
|
245
284
|
const cellRange = this.selectedRange.current();
|
246
|
-
if (this.settings.
|
247
|
-
cellRange.
|
285
|
+
if (!this.settings.navigableHeaders) {
|
286
|
+
cellRange.highlight.normalize();
|
287
|
+
}
|
288
|
+
if (this.settings.selectionMode === 'single') {
|
289
|
+
cellRange.setFrom(cellRange.highlight);
|
290
|
+
cellRange.setTo(cellRange.highlight);
|
291
|
+
} else {
|
292
|
+
cellRange.setTo(coordsClone);
|
248
293
|
}
|
249
294
|
|
250
|
-
//
|
251
|
-
|
252
|
-
|
253
|
-
|
295
|
+
// Prevent creating "area" selection that overlaps headers.
|
296
|
+
if (countRows > 0 && countCols > 0) {
|
297
|
+
if (!this.settings.navigableHeaders || this.settings.navigableHeaders && !cellRange.isSingleHeader()) {
|
298
|
+
cellRange.to.normalize();
|
299
|
+
}
|
300
|
+
}
|
301
|
+
this.runLocalHooks('beforeHighlightSet');
|
302
|
+
const focusHighlight = this.highlight.getFocus();
|
303
|
+
focusHighlight.clear();
|
304
|
+
if (this.highlight.isEnabledFor(FOCUS_TYPE, cellRange.highlight)) {
|
305
|
+
focusHighlight.add(this.selectedRange.current().highlight).commit().syncWith(cellRange);
|
254
306
|
}
|
255
307
|
const layerLevel = this.getLayerLevel();
|
256
308
|
|
@@ -258,69 +310,80 @@ class Selection {
|
|
258
310
|
// indication that the new selection is performing.
|
259
311
|
if (layerLevel < this.highlight.layerLevel) {
|
260
312
|
arrayEach(this.highlight.getAreas(), highlight => void highlight.clear());
|
261
|
-
arrayEach(this.highlight.
|
262
|
-
arrayEach(this.highlight.
|
313
|
+
arrayEach(this.highlight.getLayeredAreas(), highlight => void highlight.clear());
|
314
|
+
arrayEach(this.highlight.getRowHeaders(), highlight => void highlight.clear());
|
315
|
+
arrayEach(this.highlight.getColumnHeaders(), highlight => void highlight.clear());
|
316
|
+
arrayEach(this.highlight.getActiveRowHeaders(), highlight => void highlight.clear());
|
317
|
+
arrayEach(this.highlight.getActiveColumnHeaders(), highlight => void highlight.clear());
|
318
|
+
arrayEach(this.highlight.getActiveCornerHeaders(), highlight => void highlight.clear());
|
319
|
+
arrayEach(this.highlight.getRowHighlights(), highlight => void highlight.clear());
|
320
|
+
arrayEach(this.highlight.getColumnHighlights(), highlight => void highlight.clear());
|
263
321
|
}
|
264
322
|
this.highlight.useLayerLevel(layerLevel);
|
265
|
-
const areaHighlight = this.highlight.
|
266
|
-
const
|
267
|
-
const
|
323
|
+
const areaHighlight = this.highlight.createArea();
|
324
|
+
const layeredAreaHighlight = this.highlight.createLayeredArea();
|
325
|
+
const rowHeaderHighlight = this.highlight.createRowHeader();
|
326
|
+
const columnHeaderHighlight = this.highlight.createColumnHeader();
|
327
|
+
const activeRowHeaderHighlight = this.highlight.createActiveRowHeader();
|
328
|
+
const activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();
|
329
|
+
const activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();
|
330
|
+
const rowHighlight = this.highlight.createRowHighlight();
|
331
|
+
const columnHighlight = this.highlight.createColumnHighlight();
|
268
332
|
areaHighlight.clear();
|
269
|
-
|
270
|
-
|
333
|
+
layeredAreaHighlight.clear();
|
334
|
+
rowHeaderHighlight.clear();
|
335
|
+
columnHeaderHighlight.clear();
|
336
|
+
activeRowHeaderHighlight.clear();
|
337
|
+
activeColumnHeaderHighlight.clear();
|
338
|
+
activeCornerHeaderHighlight.clear();
|
339
|
+
rowHighlight.clear();
|
340
|
+
columnHighlight.clear();
|
271
341
|
if (this.highlight.isEnabledFor(AREA_TYPE, cellRange.highlight) && (this.isMultiple() || layerLevel >= 1)) {
|
272
342
|
areaHighlight.add(cellRange.from).add(cellRange.to).commit();
|
343
|
+
layeredAreaHighlight.add(cellRange.from).add(cellRange.to).commit();
|
273
344
|
if (layerLevel === 1) {
|
274
345
|
// For single cell selection in the same layer, we do not create area selection to prevent blue background.
|
275
346
|
// When non-consecutive selection is performed we have to add that missing area selection to the previous layer
|
276
347
|
// based on previous coordinates. It only occurs when the previous selection wasn't select multiple cells.
|
277
348
|
const previousRange = this.selectedRange.previous();
|
278
|
-
this.highlight.useLayerLevel(layerLevel - 1)
|
349
|
+
this.highlight.useLayerLevel(layerLevel - 1);
|
350
|
+
this.highlight.createArea().add(previousRange.from).commit()
|
351
|
+
// Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).
|
352
|
+
.syncWith(previousRange);
|
353
|
+
this.highlight.createLayeredArea().add(previousRange.from).commit()
|
279
354
|
// Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).
|
280
355
|
.syncWith(previousRange);
|
281
356
|
this.highlight.useLayerLevel(layerLevel);
|
282
357
|
}
|
283
358
|
}
|
284
359
|
if (this.highlight.isEnabledFor(HEADER_TYPE, cellRange.highlight)) {
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
}
|
301
|
-
if (this.settings.selectionMode === 'single') {
|
302
|
-
if (this.isSelectedByAnyHeader()) {
|
303
|
-
headerCellRange.from.normalize();
|
360
|
+
if (!cellRange.isSingleHeader()) {
|
361
|
+
const rowCoordsFrom = this.tableProps.createCellCoords(Math.max(cellRange.from.row, 0), -1);
|
362
|
+
const rowCoordsTo = this.tableProps.createCellCoords(cellRange.to.row, -1);
|
363
|
+
const columnCoordsFrom = this.tableProps.createCellCoords(-1, Math.max(cellRange.from.col, 0));
|
364
|
+
const columnCoordsTo = this.tableProps.createCellCoords(-1, cellRange.to.col);
|
365
|
+
if (this.settings.selectionMode === 'single') {
|
366
|
+
rowHeaderHighlight.add(rowCoordsFrom).commit();
|
367
|
+
columnHeaderHighlight.add(columnCoordsFrom).commit();
|
368
|
+
rowHighlight.add(rowCoordsFrom).commit();
|
369
|
+
columnHighlight.add(columnCoordsFrom).commit();
|
370
|
+
} else {
|
371
|
+
rowHeaderHighlight.add(rowCoordsFrom).add(rowCoordsTo).commit();
|
372
|
+
columnHeaderHighlight.add(columnCoordsFrom).add(columnCoordsTo).commit();
|
373
|
+
rowHighlight.add(rowCoordsFrom).add(rowCoordsTo).commit();
|
374
|
+
columnHighlight.add(columnCoordsFrom).add(columnCoordsTo).commit();
|
304
375
|
}
|
305
|
-
headerHighlight.add(headerCellRange.from).commit();
|
306
|
-
} else {
|
307
|
-
headerHighlight.add(headerCellRange.from).add(headerCellRange.to).commit();
|
308
376
|
}
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
if (isRowSelected) {
|
314
|
-
activeHeaderHighlight.add(this.tableProps.createCellCoords(cellRange.from.row, -1)).add(this.tableProps.createCellCoords(cellRange.to.row, -1)).commit();
|
315
|
-
}
|
377
|
+
const highlightRowHeaders = !_classPrivateFieldGet(this, _disableHeadersHighlight) && this.isEntireRowSelected() && (countCols > 0 && countCols === cellRange.getWidth() || countCols === 0 && this.isSelectedByRowHeader());
|
378
|
+
const highlightColumnHeaders = !_classPrivateFieldGet(this, _disableHeadersHighlight) && this.isEntireColumnSelected() && (countRows > 0 && countRows === cellRange.getHeight() || countRows === 0 && this.isSelectedByColumnHeader());
|
379
|
+
if (highlightRowHeaders) {
|
380
|
+
activeRowHeaderHighlight.add(this.tableProps.createCellCoords(Math.max(cellRange.from.row, 0), Math.min(-this.tableProps.countRowHeaders(), -1))).add(this.tableProps.createCellCoords(Math.max(cellRange.to.row, 0), -1)).commit();
|
316
381
|
}
|
317
|
-
if (
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
activeHeaderHighlight.add(this.tableProps.createCellCoords(-1, cellRange.from.col)).add(this.tableProps.createCellCoords(-1, cellRange.to.col)).commit();
|
323
|
-
}
|
382
|
+
if (highlightColumnHeaders) {
|
383
|
+
activeColumnHeaderHighlight.add(this.tableProps.createCellCoords(Math.min(-this.tableProps.countColHeaders(), -1), Math.max(cellRange.from.col, 0))).add(this.tableProps.createCellCoords(-1, Math.max(cellRange.to.col, 0))).commit();
|
384
|
+
}
|
385
|
+
if (highlightRowHeaders && highlightColumnHeaders) {
|
386
|
+
activeCornerHeaderHighlight.add(this.tableProps.createCellCoords(-this.tableProps.countColHeaders(), -this.tableProps.countRowHeaders())).add(this.tableProps.createCellCoords(-1, -1)).commit();
|
324
387
|
}
|
325
388
|
}
|
326
389
|
this.runLocalHooks('afterSetRangeEnd', coords);
|
@@ -343,12 +406,12 @@ class Selection {
|
|
343
406
|
*
|
344
407
|
* @param {number} rowDelta Rows number to move, value can be passed as negative number.
|
345
408
|
* @param {number} colDelta Columns number to move, value can be passed as negative number.
|
346
|
-
* @param {boolean} [
|
347
|
-
*
|
409
|
+
* @param {boolean} [createMissingRecords=false] If `true` the new rows/columns will be created if necessary.
|
410
|
+
* Otherwise, row/column will be created according to `minSpareRows/minSpareCols` settings of Handsontable.
|
348
411
|
*/
|
349
412
|
transformStart(rowDelta, colDelta) {
|
350
|
-
let
|
351
|
-
this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta,
|
413
|
+
let createMissingRecords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
414
|
+
this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta, createMissingRecords));
|
352
415
|
}
|
353
416
|
|
354
417
|
/**
|
@@ -389,7 +452,7 @@ class Selection {
|
|
389
452
|
*/
|
390
453
|
isSelectedByRowHeader() {
|
391
454
|
let layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
|
392
|
-
return !this.isSelectedByCorner(layerLevel) && this.
|
455
|
+
return !this.isSelectedByCorner(layerLevel) && (layerLevel === -1 ? this.selectedByRowHeader.size > 0 : this.selectedByRowHeader.has(layerLevel));
|
393
456
|
}
|
394
457
|
|
395
458
|
/**
|
@@ -401,7 +464,19 @@ class Selection {
|
|
401
464
|
*/
|
402
465
|
isEntireRowSelected() {
|
403
466
|
let layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
|
404
|
-
|
467
|
+
const tester = range => {
|
468
|
+
const {
|
469
|
+
col
|
470
|
+
} = range.getOuterTopStartCorner();
|
471
|
+
const rowHeaders = this.tableProps.countRowHeaders();
|
472
|
+
const countCols = this.tableProps.countCols();
|
473
|
+
return (rowHeaders > 0 && col < 0 || rowHeaders === 0) && range.getWidth() === countCols;
|
474
|
+
};
|
475
|
+
if (layerLevel === -1) {
|
476
|
+
return Array.from(this.selectedRange).some(range => tester(range));
|
477
|
+
}
|
478
|
+
const range = this.selectedRange.peekByIndex(layerLevel);
|
479
|
+
return range ? tester(range) : false;
|
405
480
|
}
|
406
481
|
|
407
482
|
/**
|
@@ -414,7 +489,7 @@ class Selection {
|
|
414
489
|
*/
|
415
490
|
isSelectedByColumnHeader() {
|
416
491
|
let layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
|
417
|
-
return !this.isSelectedByCorner() && this.
|
492
|
+
return !this.isSelectedByCorner() && (layerLevel === -1 ? this.selectedByColumnHeader.size > 0 : this.selectedByColumnHeader.has(layerLevel));
|
418
493
|
}
|
419
494
|
|
420
495
|
/**
|
@@ -426,7 +501,19 @@ class Selection {
|
|
426
501
|
*/
|
427
502
|
isEntireColumnSelected() {
|
428
503
|
let layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
|
429
|
-
|
504
|
+
const tester = range => {
|
505
|
+
const {
|
506
|
+
row
|
507
|
+
} = range.getOuterTopStartCorner();
|
508
|
+
const colHeaders = this.tableProps.countColHeaders();
|
509
|
+
const countRows = this.tableProps.countRows();
|
510
|
+
return (colHeaders > 0 && row < 0 || colHeaders === 0) && range.getHeight() === countRows;
|
511
|
+
};
|
512
|
+
if (layerLevel === -1) {
|
513
|
+
return Array.from(this.selectedRange).some(range => tester(range));
|
514
|
+
}
|
515
|
+
const range = this.selectedRange.peekByIndex(layerLevel);
|
516
|
+
return range ? tester(range) : false;
|
430
517
|
}
|
431
518
|
|
432
519
|
/**
|
@@ -444,7 +531,7 @@ class Selection {
|
|
444
531
|
* @returns {boolean}
|
445
532
|
*/
|
446
533
|
isSelectedByCorner() {
|
447
|
-
return this.
|
534
|
+
return this.selectedByColumnHeader.has(this.getLayerLevel()) && this.selectedByRowHeader.has(this.getLayerLevel());
|
448
535
|
}
|
449
536
|
|
450
537
|
/**
|
@@ -503,31 +590,61 @@ class Selection {
|
|
503
590
|
}
|
504
591
|
|
505
592
|
/**
|
506
|
-
*
|
593
|
+
* Selects all cells and headers.
|
507
594
|
*
|
508
|
-
* @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers,
|
509
|
-
* otherwise.
|
510
|
-
* @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column
|
511
|
-
* otherwise.
|
595
|
+
* @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers,
|
596
|
+
* `false` otherwise.
|
597
|
+
* @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column
|
598
|
+
* headers, `false` otherwise.
|
599
|
+
* @param {object} [options] Additional object with options.
|
600
|
+
* @param {{row: number, col: number} | boolean} [options.focusPosition] The argument allows changing the cell/header
|
601
|
+
* focus position. The value takes an object with a `row` and `col` properties from -N to N, where
|
602
|
+
* negative values point to the headers and positive values point to the cell range. If `false`, the focus
|
603
|
+
* position won't be changed.
|
604
|
+
* @param {boolean} [options.disableHeadersHighlight] If `true`, disables highlighting the headers even when
|
605
|
+
* the logical coordinates points on them.
|
512
606
|
*/
|
513
607
|
selectAll() {
|
608
|
+
var _this$getSelectedRang;
|
514
609
|
let includeRowHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
515
610
|
let includeColumnHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
611
|
+
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
|
612
|
+
focusPosition: false,
|
613
|
+
disableHeadersHighlight: false
|
614
|
+
};
|
516
615
|
const nrOfRows = this.tableProps.countRows();
|
517
616
|
const nrOfColumns = this.tableProps.countCols();
|
617
|
+
const countRowHeaders = this.tableProps.countRowHeaders();
|
618
|
+
const countColHeaders = this.tableProps.countColHeaders();
|
619
|
+
const rowFrom = includeColumnHeaders ? -countColHeaders : 0;
|
620
|
+
const columnFrom = includeRowHeaders ? -countRowHeaders : 0;
|
518
621
|
|
519
622
|
// We can't select cells when there is no data.
|
520
|
-
if (
|
623
|
+
if (rowFrom === 0 && columnFrom === 0 && (nrOfRows === 0 || nrOfColumns === 0)) {
|
521
624
|
return;
|
522
625
|
}
|
523
|
-
|
626
|
+
let highlight = (_this$getSelectedRang = this.getSelectedRange().current()) === null || _this$getSelectedRang === void 0 ? void 0 : _this$getSelectedRang.highlight;
|
627
|
+
const {
|
628
|
+
focusPosition,
|
629
|
+
disableHeadersHighlight
|
630
|
+
} = options;
|
631
|
+
_classPrivateFieldSet(this, _disableHeadersHighlight, disableHeadersHighlight);
|
632
|
+
if (focusPosition && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.row) && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.col)) {
|
633
|
+
highlight = this.tableProps.createCellCoords(clamp(focusPosition.row, rowFrom, nrOfRows - 1), clamp(focusPosition.col, columnFrom, nrOfColumns - 1));
|
634
|
+
}
|
635
|
+
const startCoords = this.tableProps.createCellCoords(rowFrom, columnFrom);
|
524
636
|
const endCoords = this.tableProps.createCellCoords(nrOfRows - 1, nrOfColumns - 1);
|
525
637
|
this.clear();
|
526
|
-
this.setRangeStartOnly(startCoords);
|
527
|
-
|
528
|
-
|
638
|
+
this.setRangeStartOnly(startCoords, void 0, highlight);
|
639
|
+
if (columnFrom < 0) {
|
640
|
+
this.selectedByRowHeader.add(this.getLayerLevel());
|
641
|
+
}
|
642
|
+
if (rowFrom < 0) {
|
643
|
+
this.selectedByColumnHeader.add(this.getLayerLevel());
|
644
|
+
}
|
529
645
|
this.setRangeEnd(endCoords);
|
530
646
|
this.finish();
|
647
|
+
_classPrivateFieldSet(this, _disableHeadersHighlight, false);
|
531
648
|
}
|
532
649
|
|
533
650
|
/**
|
@@ -552,21 +669,29 @@ class Selection {
|
|
552
669
|
propToCol: prop => this.tableProps.propToCol(prop),
|
553
670
|
keepDirection: true
|
554
671
|
});
|
555
|
-
const
|
556
|
-
const
|
672
|
+
const navigableHeaders = this.settings.navigableHeaders;
|
673
|
+
const tableParams = {
|
674
|
+
countRows: this.tableProps.countRows(),
|
675
|
+
countCols: this.tableProps.countCols(),
|
676
|
+
countRowHeaders: navigableHeaders ? this.tableProps.countRowHeaders() : 0,
|
677
|
+
countColHeaders: navigableHeaders ? this.tableProps.countColHeaders() : 0
|
678
|
+
};
|
557
679
|
|
558
680
|
// Check if every layer of the coordinates are valid.
|
559
681
|
const isValid = !selectionRanges.some(selection => {
|
560
|
-
const
|
561
|
-
const
|
562
|
-
return !
|
682
|
+
const cellRange = selectionSchemaNormalizer(selection);
|
683
|
+
const rangeValidity = cellRange.isValid(tableParams);
|
684
|
+
return !(rangeValidity && !cellRange.containsHeaders() || rangeValidity && cellRange.containsHeaders() && cellRange.isSingleHeader());
|
563
685
|
});
|
564
686
|
if (isValid) {
|
565
687
|
this.clear();
|
566
688
|
arrayEach(selectionRanges, selection => {
|
567
|
-
const
|
568
|
-
|
569
|
-
|
689
|
+
const {
|
690
|
+
from,
|
691
|
+
to
|
692
|
+
} = selectionSchemaNormalizer(selection);
|
693
|
+
this.setRangeStartOnly(from.clone(), false);
|
694
|
+
this.setRangeEnd(to.clone());
|
570
695
|
this.finish();
|
571
696
|
});
|
572
697
|
}
|
@@ -579,22 +704,43 @@ class Selection {
|
|
579
704
|
*
|
580
705
|
* @param {number|string} startColumn Visual column index or column property from which the selection starts.
|
581
706
|
* @param {number|string} [endColumn] Visual column index or column property from to the selection finishes.
|
582
|
-
* @param {number} [
|
583
|
-
*
|
584
|
-
*
|
707
|
+
* @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
|
708
|
+
* The value can take visual row index from -N to N, where negative values
|
709
|
+
* point to the headers and positive values point to the cell range.
|
585
710
|
* @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
|
586
711
|
*/
|
587
712
|
selectColumns(startColumn) {
|
588
713
|
let endColumn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startColumn;
|
589
|
-
let
|
714
|
+
let focusPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
590
715
|
const start = typeof startColumn === 'string' ? this.tableProps.propToCol(startColumn) : startColumn;
|
591
716
|
const end = typeof endColumn === 'string' ? this.tableProps.propToCol(endColumn) : endColumn;
|
592
|
-
const
|
593
|
-
const
|
594
|
-
const
|
717
|
+
const countRows = this.tableProps.countRows();
|
718
|
+
const countCols = this.tableProps.countCols();
|
719
|
+
const countColHeaders = this.tableProps.countColHeaders();
|
720
|
+
const columnHeaderLastIndex = countColHeaders === 0 ? 0 : -countColHeaders;
|
721
|
+
const fromCoords = new CellCoords(columnHeaderLastIndex, start);
|
722
|
+
const toCoords = new CellCoords(countRows - 1, end);
|
723
|
+
const isValid = new CellRange(fromCoords, fromCoords, toCoords).isValid({
|
724
|
+
countRows,
|
725
|
+
countCols,
|
726
|
+
countRowHeaders: 0,
|
727
|
+
countColHeaders
|
728
|
+
});
|
595
729
|
if (isValid) {
|
596
|
-
|
597
|
-
|
730
|
+
const fromRow = countColHeaders === 0 ? 0 : clamp(focusPosition, columnHeaderLastIndex, -1);
|
731
|
+
const toRow = countRows - 1;
|
732
|
+
const from = this.tableProps.createCellCoords(fromRow, start);
|
733
|
+
const to = this.tableProps.createCellCoords(toRow, end);
|
734
|
+
const highlight = this.tableProps.createCellCoords(clamp(focusPosition, columnHeaderLastIndex, countRows - 1), start);
|
735
|
+
this.runLocalHooks('beforeSelectColumns', from, to, highlight);
|
736
|
+
|
737
|
+
// disallow modifying row axis for that hooks
|
738
|
+
from.row = fromRow;
|
739
|
+
to.row = toRow;
|
740
|
+
this.setRangeStartOnly(from, void 0, highlight);
|
741
|
+
this.selectedByColumnHeader.add(this.getLayerLevel());
|
742
|
+
this.setRangeEnd(to);
|
743
|
+
this.runLocalHooks('afterSelectColumns', from, to, highlight);
|
598
744
|
this.finish();
|
599
745
|
}
|
600
746
|
return isValid;
|
@@ -605,20 +751,41 @@ class Selection {
|
|
605
751
|
*
|
606
752
|
* @param {number} startRow Visual row index from which the selection starts.
|
607
753
|
* @param {number} [endRow] Visual row index from to the selection finishes.
|
608
|
-
* @param {number} [
|
609
|
-
*
|
610
|
-
*
|
754
|
+
* @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
|
755
|
+
* The value can take visual column index from -N to N, where negative values
|
756
|
+
* point to the headers and positive values point to the cell range.
|
611
757
|
* @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
|
612
758
|
*/
|
613
759
|
selectRows(startRow) {
|
614
760
|
let endRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startRow;
|
615
|
-
let
|
616
|
-
const
|
617
|
-
const
|
618
|
-
const
|
761
|
+
let focusPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
762
|
+
const countRows = this.tableProps.countRows();
|
763
|
+
const countCols = this.tableProps.countCols();
|
764
|
+
const countRowHeaders = this.tableProps.countRowHeaders();
|
765
|
+
const rowHeaderLastIndex = countRowHeaders === 0 ? 0 : -countRowHeaders;
|
766
|
+
const fromCoords = new CellCoords(startRow, rowHeaderLastIndex);
|
767
|
+
const toCoords = new CellCoords(endRow, countCols - 1);
|
768
|
+
const isValid = new CellRange(fromCoords, fromCoords, toCoords).isValid({
|
769
|
+
countRows,
|
770
|
+
countCols,
|
771
|
+
countRowHeaders,
|
772
|
+
countColHeaders: 0
|
773
|
+
});
|
619
774
|
if (isValid) {
|
620
|
-
|
621
|
-
|
775
|
+
const fromColumn = countRowHeaders === 0 ? 0 : clamp(focusPosition, rowHeaderLastIndex, -1);
|
776
|
+
const toColumn = countCols - 1;
|
777
|
+
const from = this.tableProps.createCellCoords(startRow, fromColumn);
|
778
|
+
const to = this.tableProps.createCellCoords(endRow, toColumn);
|
779
|
+
const highlight = this.tableProps.createCellCoords(startRow, clamp(focusPosition, rowHeaderLastIndex, countCols - 1));
|
780
|
+
this.runLocalHooks('beforeSelectRows', from, to, highlight);
|
781
|
+
|
782
|
+
// disallow modifying column axis for that hooks
|
783
|
+
from.col = fromColumn;
|
784
|
+
to.col = toColumn;
|
785
|
+
this.setRangeStartOnly(from, void 0, highlight);
|
786
|
+
this.selectedByRowHeader.add(this.getLayerLevel());
|
787
|
+
this.setRangeEnd(to);
|
788
|
+
this.runLocalHooks('afterSelectRows', from, to, highlight);
|
622
789
|
this.finish();
|
623
790
|
}
|
624
791
|
return isValid;
|
@@ -635,19 +802,31 @@ class Selection {
|
|
635
802
|
if (!this.isSelected()) {
|
636
803
|
return;
|
637
804
|
}
|
638
|
-
const
|
805
|
+
const focusHighlight = this.highlight.getFocus();
|
639
806
|
const currentLayer = this.getLayerLevel();
|
640
|
-
|
807
|
+
focusHighlight.commit().syncWith(this.selectedRange.current());
|
641
808
|
|
642
809
|
// Rewriting rendered ranges going through all layers.
|
643
810
|
for (let layerLevel = 0; layerLevel < this.selectedRange.size(); layerLevel += 1) {
|
644
811
|
this.highlight.useLayerLevel(layerLevel);
|
645
|
-
const areaHighlight = this.highlight.
|
646
|
-
const
|
647
|
-
const
|
812
|
+
const areaHighlight = this.highlight.createArea();
|
813
|
+
const areaLayeredHighlight = this.highlight.createLayeredArea();
|
814
|
+
const rowHeaderHighlight = this.highlight.createRowHeader();
|
815
|
+
const columnHeaderHighlight = this.highlight.createColumnHeader();
|
816
|
+
const activeRowHeaderHighlight = this.highlight.createActiveRowHeader();
|
817
|
+
const activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();
|
818
|
+
const activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();
|
819
|
+
const rowHighlight = this.highlight.createRowHighlight();
|
820
|
+
const columnHighlight = this.highlight.createColumnHighlight();
|
648
821
|
areaHighlight.commit();
|
649
|
-
|
650
|
-
|
822
|
+
areaLayeredHighlight.commit();
|
823
|
+
rowHeaderHighlight.commit();
|
824
|
+
columnHeaderHighlight.commit();
|
825
|
+
activeRowHeaderHighlight.commit();
|
826
|
+
activeColumnHeaderHighlight.commit();
|
827
|
+
activeCornerHeaderHighlight.commit();
|
828
|
+
rowHighlight.commit();
|
829
|
+
columnHighlight.commit();
|
651
830
|
}
|
652
831
|
|
653
832
|
// Reverting starting layer for the Highlight.
|