handsontable 13.1.0 → 14.0.0-next-d97b156-20231027
Sign up to get free protection for your applications and to get access to all the features.
- 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 +21236 -14104
- package/dist/handsontable.full.min.css +8 -8
- package/dist/handsontable.full.min.js +170 -152
- package/dist/handsontable.js +22016 -15254
- package/dist/handsontable.min.css +7 -7
- package/dist/handsontable.min.js +31 -23
- 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 +108 -66
- package/plugins/filters/filters.mjs +99 -55
- 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.
|