handsontable 11.0.0 → 12.0.0
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/border.js +121 -99
- package/3rdparty/walkontable/src/border.mjs +122 -96
- package/3rdparty/walkontable/src/calculator/viewportColumns.js +1 -1
- package/3rdparty/walkontable/src/calculator/viewportColumns.mjs +1 -1
- package/3rdparty/walkontable/src/calculator/viewportRows.js +1 -1
- package/3rdparty/walkontable/src/calculator/viewportRows.mjs +1 -1
- package/3rdparty/walkontable/src/cell/coords.js +60 -18
- package/3rdparty/walkontable/src/cell/coords.mjs +56 -18
- package/3rdparty/walkontable/src/cell/range.d.ts +10 -2
- package/3rdparty/walkontable/src/cell/range.js +279 -100
- package/3rdparty/walkontable/src/cell/range.mjs +274 -100
- package/3rdparty/walkontable/src/core/_base.js +452 -0
- package/3rdparty/walkontable/src/core/_base.mjs +440 -0
- package/3rdparty/walkontable/src/core/clone.js +97 -0
- package/3rdparty/walkontable/src/core/clone.mjs +80 -0
- package/3rdparty/walkontable/src/core/core.js +183 -0
- package/3rdparty/walkontable/src/core/core.mjs +160 -0
- package/3rdparty/walkontable/src/event.js +100 -67
- package/3rdparty/walkontable/src/event.mjs +100 -64
- package/3rdparty/walkontable/src/facade/core.js +251 -0
- package/3rdparty/walkontable/src/facade/core.mjs +243 -0
- package/3rdparty/walkontable/src/filter/column.js +1 -1
- package/3rdparty/walkontable/src/filter/column.mjs +1 -1
- package/3rdparty/walkontable/src/filter/row.js +1 -1
- package/3rdparty/walkontable/src/filter/row.mjs +1 -1
- package/3rdparty/walkontable/src/index.js +3 -47
- package/3rdparty/walkontable/src/index.mjs +3 -13
- package/3rdparty/walkontable/src/overlay/_base.js +125 -58
- package/3rdparty/walkontable/src/overlay/_base.mjs +126 -59
- package/3rdparty/walkontable/src/overlay/bottom.js +86 -76
- package/3rdparty/walkontable/src/overlay/bottom.mjs +86 -76
- package/3rdparty/walkontable/src/overlay/{bottomLeftCorner.js → bottomInlineStartCorner.js} +35 -58
- package/3rdparty/walkontable/src/overlay/{bottomLeftCorner.mjs → bottomInlineStartCorner.mjs} +34 -57
- package/3rdparty/walkontable/src/overlay/constants.js +25 -9
- package/3rdparty/walkontable/src/overlay/constants.mjs +14 -4
- package/3rdparty/walkontable/src/overlay/index.js +10 -19
- package/3rdparty/walkontable/src/overlay/index.mjs +4 -5
- package/3rdparty/walkontable/src/overlay/{left.js → inlineStart.js} +102 -80
- package/3rdparty/walkontable/src/overlay/{left.mjs → inlineStart.mjs} +101 -79
- package/3rdparty/walkontable/src/overlay/top.js +84 -79
- package/3rdparty/walkontable/src/overlay/top.mjs +84 -79
- package/3rdparty/walkontable/src/overlay/{topLeftCorner.js → topInlineStartCorner.js} +56 -57
- package/3rdparty/walkontable/src/overlay/{topLeftCorner.mjs → topInlineStartCorner.mjs} +51 -52
- package/3rdparty/walkontable/src/overlays.js +226 -157
- package/3rdparty/walkontable/src/overlays.mjs +226 -156
- package/3rdparty/walkontable/src/renderer/_base.js +1 -1
- package/3rdparty/walkontable/src/renderer/_base.mjs +1 -1
- package/3rdparty/walkontable/src/renderer/cells.js +5 -4
- package/3rdparty/walkontable/src/renderer/cells.mjs +5 -4
- package/3rdparty/walkontable/src/renderer/colGroup.js +3 -3
- package/3rdparty/walkontable/src/renderer/colGroup.mjs +3 -3
- package/3rdparty/walkontable/src/renderer/columnHeaders.js +3 -3
- package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +3 -3
- package/3rdparty/walkontable/src/renderer/index.js +1 -1
- package/3rdparty/walkontable/src/renderer/index.mjs +1 -1
- package/3rdparty/walkontable/src/renderer/rowHeaders.js +3 -3
- package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +3 -3
- package/3rdparty/walkontable/src/renderer/rows.js +3 -3
- package/3rdparty/walkontable/src/renderer/rows.mjs +3 -3
- package/3rdparty/walkontable/src/renderer/table.js +1 -1
- package/3rdparty/walkontable/src/renderer/table.mjs +1 -1
- package/3rdparty/walkontable/src/scroll.js +61 -88
- package/3rdparty/walkontable/src/scroll.mjs +61 -88
- package/3rdparty/walkontable/src/selection.js +12 -16
- package/3rdparty/walkontable/src/selection.mjs +12 -14
- package/3rdparty/walkontable/src/settings.js +236 -127
- package/3rdparty/walkontable/src/settings.mjs +236 -126
- package/3rdparty/walkontable/src/table/bottom.js +21 -6
- package/3rdparty/walkontable/src/table/bottom.mjs +20 -6
- package/3rdparty/walkontable/src/table/{bottomLeftCorner.js → bottomInlineStartCorner.js} +31 -15
- package/3rdparty/walkontable/src/table/{bottomLeftCorner.mjs → bottomInlineStartCorner.mjs} +30 -15
- package/3rdparty/walkontable/src/table/{left.js → inlineStart.js} +27 -15
- package/3rdparty/walkontable/src/table/{left.mjs → inlineStart.mjs} +26 -15
- package/3rdparty/walkontable/src/table/master.js +23 -13
- package/3rdparty/walkontable/src/table/master.mjs +23 -13
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +12 -6
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +12 -6
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +12 -6
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +12 -6
- package/3rdparty/walkontable/src/table/mixin/{stickyColumnsLeft.js → stickyColumnsStart.js} +13 -7
- package/3rdparty/walkontable/src/table/mixin/{stickyColumnsLeft.mjs → stickyColumnsStart.mjs} +13 -7
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +11 -5
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +11 -5
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -3
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -3
- package/3rdparty/walkontable/src/table/top.js +21 -6
- package/3rdparty/walkontable/src/table/top.mjs +20 -6
- package/3rdparty/walkontable/src/table/{topLeftCorner.js → topInlineStartCorner.js} +31 -15
- package/3rdparty/walkontable/src/table/{topLeftCorner.mjs → topInlineStartCorner.mjs} +30 -15
- package/3rdparty/walkontable/src/table.js +236 -141
- package/3rdparty/walkontable/src/table.mjs +232 -135
- package/3rdparty/walkontable/src/types.js +103 -0
- package/3rdparty/walkontable/src/types.mjs +102 -0
- package/3rdparty/walkontable/src/utils/column.js +23 -34
- package/3rdparty/walkontable/src/utils/column.mjs +23 -31
- package/3rdparty/walkontable/src/utils/nodesPool.js +1 -1
- package/3rdparty/walkontable/src/utils/nodesPool.mjs +1 -1
- package/3rdparty/walkontable/src/utils/orderView/sharedView.js +3 -3
- package/3rdparty/walkontable/src/utils/orderView/sharedView.mjs +3 -3
- package/3rdparty/walkontable/src/utils/orderView/view.js +1 -1
- package/3rdparty/walkontable/src/utils/orderView/view.mjs +1 -1
- package/3rdparty/walkontable/src/utils/orderView/viewSize.js +1 -1
- package/3rdparty/walkontable/src/utils/orderView/viewSize.mjs +1 -1
- package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.js +1 -1
- package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.mjs +1 -1
- package/3rdparty/walkontable/src/utils/row.js +10 -5
- package/3rdparty/walkontable/src/utils/row.mjs +10 -5
- package/3rdparty/walkontable/src/viewport.js +78 -81
- package/3rdparty/walkontable/src/viewport.mjs +78 -78
- package/CHANGELOG.md +94 -17
- package/README.md +10 -7
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/cellTypes/timeType/timeType.d.ts +6 -6
- package/cellTypes/timeType/timeType.js +4 -5
- package/cellTypes/timeType/timeType.mjs +4 -5
- package/core.d.ts +9 -3
- package/core.js +590 -157
- package/core.mjs +599 -169
- package/dataMap/dataMap.js +2 -2
- package/dataMap/dataMap.mjs +2 -2
- package/dataMap/index.js +8 -0
- package/dataMap/index.mjs +3 -1
- package/dataMap/metaManager/index.js +3 -3
- package/dataMap/metaManager/index.mjs +3 -3
- package/dataMap/metaManager/lazyFactoryMap.js +1 -1
- package/dataMap/metaManager/lazyFactoryMap.mjs +1 -1
- package/dataMap/metaManager/metaLayers/cellMeta.js +1 -1
- package/dataMap/metaManager/metaLayers/cellMeta.mjs +1 -1
- package/dataMap/metaManager/metaLayers/columnMeta.js +1 -1
- package/dataMap/metaManager/metaLayers/columnMeta.mjs +1 -1
- package/dataMap/metaManager/metaLayers/globalMeta.js +7 -3
- package/dataMap/metaManager/metaLayers/globalMeta.mjs +7 -3
- package/dataMap/metaManager/metaLayers/tableMeta.js +3 -3
- package/dataMap/metaManager/metaLayers/tableMeta.mjs +3 -3
- package/dataMap/metaManager/metaSchema.js +2931 -2676
- package/dataMap/metaManager/metaSchema.mjs +2931 -2676
- package/dataMap/metaManager/mods/dynamicCellMeta.js +1 -1
- package/dataMap/metaManager/mods/dynamicCellMeta.mjs +1 -1
- package/dataMap/metaManager/mods/extendMetaProperties.js +126 -0
- package/dataMap/metaManager/mods/extendMetaProperties.mjs +113 -0
- package/dataMap/replaceData.js +140 -0
- package/dataMap/replaceData.mjs +124 -0
- package/dataSource.js +1 -1
- package/dataSource.mjs +1 -1
- package/dist/README.md +2 -2
- package/dist/handsontable.css +424 -166
- package/dist/handsontable.full.css +559 -298
- package/dist/handsontable.full.js +47163 -41289
- package/dist/handsontable.full.min.css +8 -13
- package/dist/handsontable.full.min.js +143 -142
- package/dist/handsontable.js +28270 -24105
- package/dist/handsontable.min.css +8 -11
- package/dist/handsontable.min.js +3 -3
- package/dist/languages/all.js +69 -38
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/ar-AR.js +167 -0
- package/dist/languages/ar-AR.min.js +1 -0
- package/dist/languages/de-CH.js +32 -33
- package/dist/languages/de-CH.min.js +1 -1
- package/dist/languages/de-DE.js +5 -6
- package/dist/languages/de-DE.min.js +1 -1
- package/dist/languages/en-US.js +5 -6
- package/dist/languages/en-US.min.js +1 -1
- package/dist/languages/es-MX.js +5 -6
- package/dist/languages/es-MX.min.js +1 -1
- package/dist/languages/fr-FR.js +5 -6
- package/dist/languages/fr-FR.min.js +1 -1
- package/dist/languages/it-IT.js +5 -6
- package/dist/languages/it-IT.min.js +1 -1
- package/dist/languages/ja-JP.js +5 -6
- package/dist/languages/ja-JP.min.js +1 -1
- package/dist/languages/ko-KR.js +37 -42
- package/dist/languages/ko-KR.min.js +1 -1
- package/dist/languages/lv-LV.js +4 -6
- package/dist/languages/lv-LV.min.js +1 -1
- package/dist/languages/nb-NO.js +4 -6
- package/dist/languages/nb-NO.min.js +1 -1
- package/dist/languages/nl-NL.js +4 -6
- package/dist/languages/nl-NL.min.js +1 -1
- package/dist/languages/pl-PL.js +4 -6
- package/dist/languages/pl-PL.min.js +1 -1
- package/dist/languages/pt-BR.js +4 -6
- package/dist/languages/pt-BR.min.js +1 -1
- package/dist/languages/ru-RU.js +4 -6
- package/dist/languages/ru-RU.min.js +1 -1
- package/dist/languages/zh-CN.js +4 -6
- package/dist/languages/zh-CN.min.js +1 -1
- package/dist/languages/zh-TW.js +25 -27
- package/dist/languages/zh-TW.min.js +1 -1
- package/editorManager.js +121 -268
- package/editorManager.mjs +129 -279
- package/editors/autocompleteEditor/autocompleteEditor.js +19 -17
- package/editors/autocompleteEditor/autocompleteEditor.mjs +19 -17
- package/editors/baseEditor/baseEditor.js +207 -36
- package/editors/baseEditor/baseEditor.mjs +202 -34
- package/editors/checkboxEditor/checkboxEditor.js +3 -3
- package/editors/checkboxEditor/checkboxEditor.mjs +3 -3
- package/editors/dateEditor/dateEditor.js +22 -9
- package/editors/dateEditor/dateEditor.mjs +23 -10
- package/editors/dropdownEditor/dropdownEditor.js +4 -4
- package/editors/dropdownEditor/dropdownEditor.mjs +4 -4
- package/editors/handsontableEditor/handsontableEditor.js +107 -56
- package/editors/handsontableEditor/handsontableEditor.mjs +107 -56
- package/editors/index.d.ts +3 -0
- package/editors/index.js +6 -0
- package/editors/index.mjs +3 -1
- package/editors/numericEditor/numericEditor.js +3 -3
- package/editors/numericEditor/numericEditor.mjs +3 -3
- package/editors/passwordEditor/passwordEditor.js +4 -4
- package/editors/passwordEditor/passwordEditor.mjs +4 -4
- package/editors/selectEditor/selectEditor.js +66 -111
- package/editors/selectEditor/selectEditor.mjs +67 -110
- package/editors/textEditor/caretPositioner.js +49 -0
- package/editors/textEditor/caretPositioner.mjs +42 -0
- package/editors/textEditor/textEditor.js +206 -182
- package/editors/textEditor/textEditor.mjs +200 -180
- package/editors/timeEditor/index.d.ts +1 -0
- package/editors/timeEditor/index.js +9 -0
- package/editors/timeEditor/index.mjs +1 -0
- package/editors/timeEditor/timeEditor.d.ts +7 -0
- package/editors/timeEditor/timeEditor.js +105 -0
- package/editors/timeEditor/timeEditor.mjs +84 -0
- package/eventManager.js +11 -5
- package/eventManager.mjs +11 -5
- package/helpers/data.js +1 -1
- package/helpers/data.mjs +1 -1
- package/helpers/dom/element.js +1 -1
- package/helpers/dom/element.mjs +1 -1
- package/helpers/feature.js +1 -1
- package/helpers/feature.mjs +1 -1
- package/helpers/mixed.js +3 -3
- package/helpers/mixed.mjs +3 -3
- package/helpers/number.js +4 -4
- package/helpers/number.mjs +4 -4
- package/helpers/object.js +1 -1
- package/helpers/object.mjs +1 -1
- package/i18n/languages/ar-AR.js +41 -0
- package/i18n/languages/ar-AR.mjs +17 -0
- package/i18n/languages/de-CH.js +1 -1
- package/i18n/languages/de-DE.js +1 -1
- package/i18n/languages/en-US.js +1 -1
- package/i18n/languages/es-MX.js +1 -1
- package/i18n/languages/fr-FR.js +1 -1
- package/i18n/languages/index.js +4 -0
- package/i18n/languages/index.mjs +2 -1
- package/i18n/languages/it-IT.js +1 -1
- package/i18n/languages/ja-JP.js +1 -1
- package/i18n/languages/ko-KR.js +1 -1
- package/i18n/languages/lv-LV.js +1 -1
- package/i18n/languages/nb-NO.js +1 -1
- package/i18n/languages/nl-NL.js +1 -1
- package/i18n/languages/pl-PL.js +1 -1
- package/i18n/languages/pt-BR.js +1 -1
- package/i18n/languages/ru-RU.js +1 -1
- package/i18n/languages/zh-CN.js +1 -1
- package/i18n/languages/zh-TW.js +1 -1
- package/i18n/registry.js +1 -1
- package/index.d.ts +4 -0
- package/index.js +1 -1
- package/languages/all.js +69 -38
- package/languages/ar-AR.js +167 -0
- package/languages/ar-AR.mjs +19 -0
- package/languages/de-CH.js +32 -33
- package/languages/de-DE.js +5 -6
- package/languages/en-US.js +5 -6
- package/languages/es-MX.js +5 -6
- package/languages/fr-FR.js +5 -6
- package/languages/index.js +69 -38
- package/languages/index.mjs +2 -1
- package/languages/it-IT.js +5 -6
- package/languages/ja-JP.js +5 -6
- package/languages/ko-KR.js +37 -42
- package/languages/lv-LV.js +4 -6
- package/languages/nb-NO.js +4 -6
- package/languages/nl-NL.js +4 -6
- package/languages/pl-PL.js +4 -6
- package/languages/pt-BR.js +4 -6
- package/languages/ru-RU.js +4 -6
- package/languages/zh-CN.js +4 -6
- package/languages/zh-TW.js +25 -27
- package/package.json +26 -8
- package/pluginHooks.d.ts +2 -0
- package/pluginHooks.js +58 -27
- package/pluginHooks.mjs +58 -27
- package/plugins/autoColumnSize/autoColumnSize.js +14 -9
- package/plugins/autoColumnSize/autoColumnSize.mjs +14 -9
- package/plugins/autoRowSize/autoRowSize.js +15 -10
- package/plugins/autoRowSize/autoRowSize.mjs +15 -10
- package/plugins/autofill/autofill.js +50 -34
- package/plugins/autofill/autofill.mjs +50 -33
- package/plugins/autofill/utils.js +10 -11
- package/plugins/autofill/utils.mjs +10 -10
- package/plugins/base/base.d.ts +8 -2
- package/plugins/base/base.js +68 -5
- package/plugins/base/base.mjs +67 -5
- package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +4 -4
- package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +4 -4
- package/plugins/bindRowsWithHeaders/maps/looseBindsMap.js +4 -4
- package/plugins/bindRowsWithHeaders/maps/looseBindsMap.mjs +4 -4
- package/plugins/bindRowsWithHeaders/maps/strictBindsMap.js +4 -4
- package/plugins/bindRowsWithHeaders/maps/strictBindsMap.mjs +4 -4
- package/plugins/collapsibleColumns/collapsibleColumns.js +49 -30
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +49 -30
- package/plugins/columnSorting/columnSorting.d.ts +1 -1
- package/plugins/columnSorting/columnSorting.js +10 -12
- package/plugins/columnSorting/columnSorting.mjs +10 -11
- package/plugins/columnSorting/columnStatesManager.js +3 -3
- package/plugins/columnSorting/columnStatesManager.mjs +3 -3
- package/plugins/columnSummary/columnSummary.js +4 -4
- package/plugins/columnSummary/columnSummary.mjs +4 -4
- package/plugins/columnSummary/endpoints.js +1 -1
- package/plugins/columnSummary/endpoints.mjs +1 -1
- package/plugins/comments/commentEditor.js +24 -4
- package/plugins/comments/commentEditor.mjs +25 -5
- package/plugins/comments/comments.js +63 -104
- package/plugins/comments/comments.mjs +63 -102
- package/plugins/comments/displaySwitch.js +1 -1
- package/plugins/comments/displaySwitch.mjs +1 -1
- package/plugins/contextMenu/commandExecutor.js +1 -1
- package/plugins/contextMenu/commandExecutor.mjs +1 -1
- package/plugins/contextMenu/contextMenu.js +11 -7
- package/plugins/contextMenu/contextMenu.mjs +11 -7
- package/plugins/contextMenu/cursor.js +1 -1
- package/plugins/contextMenu/cursor.mjs +1 -1
- package/plugins/contextMenu/itemsFactory.js +1 -1
- package/plugins/contextMenu/itemsFactory.mjs +1 -1
- package/plugins/contextMenu/menu.js +223 -111
- package/plugins/contextMenu/menu.mjs +220 -112
- package/plugins/contextMenu/predefinedItems/alignment.js +1 -1
- package/plugins/contextMenu/predefinedItems/clearColumn.js +1 -1
- package/plugins/contextMenu/predefinedItems/columnLeft.js +13 -5
- package/plugins/contextMenu/predefinedItems/columnLeft.mjs +11 -4
- package/plugins/contextMenu/predefinedItems/columnRight.js +10 -10
- package/plugins/contextMenu/predefinedItems/columnRight.mjs +9 -9
- package/plugins/contextMenu/predefinedItems/readOnly.js +1 -1
- package/plugins/contextMenu/predefinedItems/redo.js +1 -1
- package/plugins/contextMenu/predefinedItems/removeColumn.js +1 -1
- package/plugins/contextMenu/predefinedItems/removeRow.js +1 -1
- package/plugins/contextMenu/predefinedItems/rowAbove.js +1 -1
- package/plugins/contextMenu/predefinedItems/rowBelow.js +1 -1
- package/plugins/contextMenu/predefinedItems/undo.js +1 -1
- package/plugins/contextMenu/predefinedItems.js +1 -1
- package/plugins/contextMenu/utils.js +2 -2
- package/plugins/contextMenu/utils.mjs +2 -2
- package/plugins/copyPaste/clipboardData.js +1 -1
- package/plugins/copyPaste/clipboardData.mjs +1 -1
- package/plugins/copyPaste/contextMenuItem/copy.js +1 -1
- package/plugins/copyPaste/contextMenuItem/cut.js +1 -1
- package/plugins/copyPaste/copyPaste.js +29 -19
- package/plugins/copyPaste/copyPaste.mjs +28 -19
- package/plugins/copyPaste/focusableElement.js +1 -1
- package/plugins/copyPaste/focusableElement.mjs +1 -1
- package/plugins/copyPaste/pasteEvent.js +6 -2
- package/plugins/copyPaste/pasteEvent.mjs +6 -2
- package/plugins/customBorders/contextMenuItem/bottom.js +1 -1
- package/plugins/customBorders/contextMenuItem/left.js +5 -4
- package/plugins/customBorders/contextMenuItem/left.mjs +4 -3
- package/plugins/customBorders/contextMenuItem/noBorders.js +1 -1
- package/plugins/customBorders/contextMenuItem/right.js +5 -4
- package/plugins/customBorders/contextMenuItem/right.mjs +4 -3
- package/plugins/customBorders/contextMenuItem/top.js +1 -1
- package/plugins/customBorders/customBorders.js +141 -85
- package/plugins/customBorders/customBorders.mjs +139 -82
- package/plugins/customBorders/utils.js +131 -27
- package/plugins/customBorders/utils.mjs +115 -27
- package/plugins/dragToScroll/dragToScroll.js +11 -6
- package/plugins/dragToScroll/dragToScroll.mjs +11 -6
- package/plugins/dropdownMenu/dropdownMenu.js +8 -7
- package/plugins/dropdownMenu/dropdownMenu.mjs +8 -7
- package/plugins/exportFile/dataProvider.js +1 -1
- package/plugins/exportFile/dataProvider.mjs +1 -1
- package/plugins/exportFile/exportFile.js +3 -3
- package/plugins/exportFile/exportFile.mjs +3 -3
- package/plugins/exportFile/types/_base.js +1 -1
- package/plugins/exportFile/types/_base.mjs +1 -1
- package/plugins/exportFile/types/csv.js +3 -3
- package/plugins/exportFile/types/csv.mjs +3 -3
- package/plugins/filters/component/_base.js +1 -1
- package/plugins/filters/component/_base.mjs +1 -1
- package/plugins/filters/component/actionBar.js +3 -3
- package/plugins/filters/component/actionBar.mjs +3 -3
- package/plugins/filters/component/condition.js +4 -4
- package/plugins/filters/component/condition.mjs +4 -4
- package/plugins/filters/component/operators.js +3 -3
- package/plugins/filters/component/operators.mjs +3 -3
- package/plugins/filters/component/value.js +4 -4
- package/plugins/filters/component/value.mjs +4 -4
- package/plugins/filters/condition/beginsWith.js +1 -1
- package/plugins/filters/condition/between.js +1 -1
- package/plugins/filters/condition/contains.js +1 -1
- package/plugins/filters/condition/date/after.js +1 -1
- package/plugins/filters/condition/date/before.js +1 -1
- package/plugins/filters/condition/date/today.js +1 -1
- package/plugins/filters/condition/date/tomorrow.js +1 -1
- package/plugins/filters/condition/date/yesterday.js +1 -1
- package/plugins/filters/condition/empty.js +1 -1
- package/plugins/filters/condition/endsWith.js +1 -1
- package/plugins/filters/condition/equal.js +1 -1
- package/plugins/filters/condition/greaterThan.js +1 -1
- package/plugins/filters/condition/greaterThanOrEqual.js +1 -1
- package/plugins/filters/condition/lessThan.js +1 -1
- package/plugins/filters/condition/lessThanOrEqual.js +1 -1
- package/plugins/filters/condition/none.js +1 -1
- package/plugins/filters/condition/notBetween.js +1 -1
- package/plugins/filters/condition/notContains.js +1 -1
- package/plugins/filters/condition/notEmpty.js +1 -1
- package/plugins/filters/condition/notEqual.js +1 -1
- package/plugins/filters/conditionCollection.js +1 -1
- package/plugins/filters/conditionCollection.mjs +1 -1
- package/plugins/filters/conditionUpdateObserver.js +1 -1
- package/plugins/filters/conditionUpdateObserver.mjs +1 -1
- package/plugins/filters/dataFilter.js +1 -1
- package/plugins/filters/dataFilter.mjs +1 -1
- package/plugins/filters/filters.js +12 -9
- package/plugins/filters/filters.mjs +12 -9
- package/plugins/filters/logicalOperations/conjunction.js +1 -1
- package/plugins/filters/logicalOperations/disjunction.js +1 -1
- package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +1 -1
- package/plugins/filters/ui/_base.js +2 -2
- package/plugins/filters/ui/_base.mjs +1 -1
- package/plugins/filters/ui/input.js +4 -4
- package/plugins/filters/ui/input.mjs +4 -4
- package/plugins/filters/ui/link.js +4 -4
- package/plugins/filters/ui/link.mjs +4 -4
- package/plugins/filters/ui/multipleSelect.js +19 -32
- package/plugins/filters/ui/multipleSelect.mjs +19 -32
- package/plugins/filters/ui/radioInput.js +4 -4
- package/plugins/filters/ui/radioInput.mjs +4 -4
- package/plugins/filters/ui/select.js +5 -5
- package/plugins/filters/ui/select.mjs +5 -5
- package/plugins/formulas/engine/register.js +1 -1
- package/plugins/formulas/engine/register.mjs +1 -1
- package/plugins/formulas/engine/settings.js +2 -2
- package/plugins/formulas/engine/settings.mjs +2 -2
- package/plugins/formulas/formulas.js +10 -10
- package/plugins/formulas/formulas.mjs +10 -10
- package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +1 -1
- package/plugins/hiddenColumns/contextMenuItem/showColumn.js +3 -3
- package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +2 -2
- package/plugins/hiddenColumns/hiddenColumns.js +10 -5
- package/plugins/hiddenColumns/hiddenColumns.mjs +10 -5
- package/plugins/hiddenRows/contextMenuItem/hideRow.js +1 -1
- package/plugins/hiddenRows/contextMenuItem/showRow.js +3 -3
- package/plugins/hiddenRows/contextMenuItem/showRow.mjs +2 -2
- package/plugins/hiddenRows/hiddenRows.js +10 -5
- package/plugins/hiddenRows/hiddenRows.mjs +10 -5
- package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +2 -2
- package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.mjs +1 -1
- package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +2 -2
- package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.mjs +1 -1
- package/plugins/manualColumnFreeze/manualColumnFreeze.js +26 -13
- package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +26 -13
- package/plugins/manualColumnMove/manualColumnMove.js +73 -62
- package/plugins/manualColumnMove/manualColumnMove.mjs +74 -63
- package/plugins/manualColumnMove/ui/_base.js +26 -13
- package/plugins/manualColumnMove/ui/_base.mjs +25 -13
- package/plugins/manualColumnMove/ui/backlight.js +4 -4
- package/plugins/manualColumnMove/ui/backlight.mjs +4 -4
- package/plugins/manualColumnMove/ui/guideline.js +4 -4
- package/plugins/manualColumnMove/ui/guideline.mjs +4 -4
- package/plugins/manualColumnResize/manualColumnResize.js +38 -22
- package/plugins/manualColumnResize/manualColumnResize.mjs +38 -22
- package/plugins/manualRowMove/manualRowMove.js +27 -17
- package/plugins/manualRowMove/manualRowMove.mjs +27 -17
- package/plugins/manualRowMove/ui/_base.js +1 -1
- package/plugins/manualRowMove/ui/_base.mjs +1 -1
- package/plugins/manualRowMove/ui/backlight.js +4 -4
- package/plugins/manualRowMove/ui/backlight.mjs +4 -4
- package/plugins/manualRowMove/ui/guideline.js +4 -4
- package/plugins/manualRowMove/ui/guideline.mjs +4 -4
- package/plugins/manualRowResize/manualRowResize.js +35 -20
- package/plugins/manualRowResize/manualRowResize.mjs +35 -20
- package/plugins/mergeCells/calculations/autofill.js +7 -6
- package/plugins/mergeCells/calculations/autofill.mjs +7 -5
- package/plugins/mergeCells/calculations/selection.js +10 -5
- package/plugins/mergeCells/calculations/selection.mjs +10 -5
- package/plugins/mergeCells/cellCoords.js +17 -5
- package/plugins/mergeCells/cellCoords.mjs +17 -4
- package/plugins/mergeCells/cellsCollection.js +28 -21
- package/plugins/mergeCells/cellsCollection.mjs +28 -20
- package/plugins/mergeCells/contextMenuItem/toggleMerge.js +1 -1
- package/plugins/mergeCells/mergeCells.js +83 -50
- package/plugins/mergeCells/mergeCells.mjs +83 -48
- package/plugins/multiColumnSorting/multiColumnSorting.js +5 -7
- package/plugins/multiColumnSorting/multiColumnSorting.mjs +5 -6
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +52 -58
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +53 -58
- package/plugins/nestedHeaders/nestedHeaders.js +26 -19
- package/plugins/nestedHeaders/nestedHeaders.mjs +26 -19
- package/plugins/nestedHeaders/stateManager/headersTree.js +3 -3
- package/plugins/nestedHeaders/stateManager/headersTree.mjs +3 -3
- package/plugins/nestedHeaders/stateManager/index.js +3 -3
- package/plugins/nestedHeaders/stateManager/index.mjs +3 -3
- package/plugins/nestedHeaders/stateManager/sourceSettings.js +3 -3
- package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +3 -3
- package/plugins/nestedHeaders/utils/ghostTable.js +1 -1
- package/plugins/nestedHeaders/utils/ghostTable.mjs +1 -1
- package/plugins/nestedRows/data/dataManager.js +2 -2
- package/plugins/nestedRows/data/dataManager.mjs +2 -2
- package/plugins/nestedRows/nestedRows.js +11 -5
- package/plugins/nestedRows/nestedRows.mjs +11 -5
- package/plugins/nestedRows/ui/_base.js +6 -2
- package/plugins/nestedRows/ui/_base.mjs +6 -2
- package/plugins/nestedRows/ui/collapsing.js +3 -3
- package/plugins/nestedRows/ui/collapsing.mjs +3 -3
- package/plugins/nestedRows/ui/contextMenu.js +3 -3
- package/plugins/nestedRows/ui/contextMenu.mjs +3 -3
- package/plugins/nestedRows/ui/headers.js +3 -3
- package/plugins/nestedRows/ui/headers.mjs +3 -3
- package/plugins/nestedRows/utils/rowMoveController.js +3 -5
- package/plugins/nestedRows/utils/rowMoveController.mjs +3 -4
- package/plugins/persistentState/persistentState.js +10 -5
- package/plugins/persistentState/persistentState.mjs +10 -5
- package/plugins/persistentState/storage.js +1 -1
- package/plugins/persistentState/storage.mjs +1 -1
- package/plugins/search/search.js +10 -5
- package/plugins/search/search.mjs +10 -5
- package/plugins/touchScroll/touchScroll.js +32 -26
- package/plugins/touchScroll/touchScroll.mjs +32 -25
- package/plugins/trimRows/trimRows.js +10 -5
- package/plugins/trimRows/trimRows.mjs +10 -5
- package/plugins/undoRedo/index.js +1 -1
- package/plugins/undoRedo/undoRedo.js +54 -48
- package/plugins/undoRedo/undoRedo.mjs +54 -47
- package/renderers/autocompleteRenderer/autocompleteRenderer.js +1 -3
- package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +1 -2
- package/renderers/checkboxRenderer/checkboxRenderer.js +48 -43
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +48 -41
- package/renderers/index.d.ts +4 -1
- package/renderers/index.js +6 -0
- package/renderers/index.mjs +3 -1
- package/renderers/numericRenderer/numericRenderer.js +1 -0
- package/renderers/numericRenderer/numericRenderer.mjs +1 -0
- package/renderers/timeRenderer/index.d.ts +1 -0
- package/renderers/timeRenderer/index.js +9 -0
- package/renderers/timeRenderer/index.mjs +1 -0
- package/renderers/timeRenderer/timeRenderer.d.ts +5 -0
- package/renderers/timeRenderer/timeRenderer.js +31 -0
- package/renderers/timeRenderer/timeRenderer.mjs +20 -0
- package/selection/highlight/highlight.js +3 -3
- package/selection/highlight/highlight.mjs +3 -3
- package/selection/highlight/types/activeHeader.js +2 -2
- package/selection/highlight/types/activeHeader.mjs +2 -2
- package/selection/highlight/types/area.js +2 -2
- package/selection/highlight/types/area.mjs +2 -2
- package/selection/highlight/types/cell.js +2 -2
- package/selection/highlight/types/cell.mjs +2 -2
- package/selection/highlight/types/customSelection.js +2 -2
- package/selection/highlight/types/customSelection.mjs +2 -2
- package/selection/highlight/types/fill.js +2 -2
- package/selection/highlight/types/fill.mjs +2 -2
- package/selection/highlight/types/header.js +2 -2
- package/selection/highlight/types/header.mjs +2 -2
- package/selection/highlight/types/index.js +2 -2
- package/selection/highlight/types/index.mjs +2 -2
- package/selection/highlight/visualSelection.js +17 -16
- package/selection/highlight/visualSelection.mjs +18 -17
- package/selection/mouseEventHandler.js +15 -10
- package/selection/mouseEventHandler.mjs +15 -9
- package/selection/range.js +5 -6
- package/selection/range.mjs +5 -6
- package/selection/selection.js +27 -20
- package/selection/selection.mjs +27 -18
- package/selection/transformation.js +5 -7
- package/selection/transformation.mjs +5 -6
- package/selection/utils.js +1 -1
- package/selection/utils.mjs +1 -1
- package/settings.d.ts +3 -1
- package/shortcuts/context.d.ts +20 -0
- package/shortcuts/context.js +296 -0
- package/shortcuts/context.mjs +268 -0
- package/shortcuts/index.d.ts +1 -0
- package/shortcuts/index.js +8 -0
- package/shortcuts/index.mjs +1 -0
- package/shortcuts/keyObserver.js +67 -0
- package/shortcuts/keyObserver.mjs +58 -0
- package/shortcuts/manager.d.ts +10 -0
- package/shortcuts/manager.js +183 -0
- package/shortcuts/manager.mjs +174 -0
- package/shortcuts/recorder.js +183 -0
- package/shortcuts/recorder.mjs +171 -0
- package/shortcuts/utils.js +77 -0
- package/shortcuts/utils.mjs +54 -0
- package/tableView.js +138 -80
- package/tableView.mjs +138 -70
- package/translations/changesObservable/observable.js +1 -1
- package/translations/changesObservable/observable.mjs +1 -1
- package/translations/changesObservable/observer.js +1 -2
- package/translations/changesObservable/observer.mjs +1 -2
- package/translations/indexMapper.d.ts +1 -0
- package/translations/indexMapper.js +25 -2
- package/translations/indexMapper.mjs +24 -2
- package/translations/mapCollections/aggregatedCollection.js +3 -3
- package/translations/mapCollections/aggregatedCollection.mjs +3 -3
- package/translations/mapCollections/mapCollection.js +1 -1
- package/translations/mapCollections/mapCollection.mjs +1 -1
- package/translations/maps/hidingMap.js +5 -3
- package/translations/maps/hidingMap.mjs +5 -3
- package/translations/maps/indexMap.js +3 -1
- package/translations/maps/indexMap.mjs +3 -1
- package/translations/maps/indexesSequence.js +6 -4
- package/translations/maps/indexesSequence.mjs +6 -4
- package/translations/maps/linkedPhysicalIndexToValueMap.js +6 -4
- package/translations/maps/linkedPhysicalIndexToValueMap.mjs +6 -4
- package/translations/maps/physicalIndexToValueMap.js +6 -4
- package/translations/maps/physicalIndexToValueMap.mjs +6 -4
- package/translations/maps/trimmingMap.js +5 -3
- package/translations/maps/trimmingMap.mjs +5 -3
- package/utils/dataStructures/linkedList.js +3 -3
- package/utils/dataStructures/linkedList.mjs +3 -3
- package/utils/dataStructures/queue.js +1 -1
- package/utils/dataStructures/queue.mjs +1 -1
- package/utils/dataStructures/stack.js +1 -1
- package/utils/dataStructures/stack.mjs +1 -1
- package/utils/dataStructures/tree.js +3 -3
- package/utils/dataStructures/tree.mjs +3 -3
- package/utils/dataStructures/uniqueMap.js +14 -1
- package/utils/dataStructures/uniqueMap.mjs +14 -1
- package/utils/dataStructures/uniqueSet.js +9 -0
- package/utils/dataStructures/uniqueSet.mjs +9 -0
- package/utils/ghostTable.js +14 -3
- package/utils/ghostTable.mjs +15 -4
- package/utils/interval.js +1 -1
- package/utils/interval.mjs +1 -1
- package/utils/samplesGenerator.js +1 -1
- package/utils/samplesGenerator.mjs +1 -1
- package/3rdparty/walkontable/src/core.js +0 -309
- package/3rdparty/walkontable/src/core.mjs +0 -293
- package/3rdparty/walkontable/src/overlay/registerer.js +0 -70
- package/3rdparty/walkontable/src/overlay/registerer.mjs +0 -57
- package/utils/keyStateObserver.js +0 -121
- package/utils/keyStateObserver.mjs +0 -103
@@ -0,0 +1,58 @@
|
|
1
|
+
import "core-js/modules/es.array.iterator.js";
|
2
|
+
import "core-js/modules/es.object.to-string.js";
|
3
|
+
import "core-js/modules/es.set.js";
|
4
|
+
import "core-js/modules/es.string.iterator.js";
|
5
|
+
import "core-js/modules/web.dom-collections.iterator.js";
|
6
|
+
|
7
|
+
/* eslint-disable jsdoc/require-description-complete-sentence */
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Create a key observer.
|
11
|
+
*
|
12
|
+
* @returns {object}
|
13
|
+
*/
|
14
|
+
export function createKeysObserver() {
|
15
|
+
var PRESSED_KEYS = new Set();
|
16
|
+
return {
|
17
|
+
/**
|
18
|
+
* Press a key.
|
19
|
+
*
|
20
|
+
* @param {string} key Names of the shortcut's keys,
|
21
|
+
* (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),
|
22
|
+
* in lowercase or uppercase, unified across browsers
|
23
|
+
*/
|
24
|
+
press: function press(key) {
|
25
|
+
PRESSED_KEYS.add(key);
|
26
|
+
},
|
27
|
+
|
28
|
+
/**
|
29
|
+
* Release a pressed key.
|
30
|
+
*
|
31
|
+
* @param {string} key Names of the shortcut's keys,
|
32
|
+
* (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),
|
33
|
+
* in lowercase or uppercase, unified across browsers
|
34
|
+
*/
|
35
|
+
release: function release(key) {
|
36
|
+
PRESSED_KEYS.delete(key);
|
37
|
+
},
|
38
|
+
|
39
|
+
/**
|
40
|
+
* Release all pressed keys.
|
41
|
+
*/
|
42
|
+
releaseAll: function releaseAll() {
|
43
|
+
PRESSED_KEYS.clear();
|
44
|
+
},
|
45
|
+
|
46
|
+
/**
|
47
|
+
* Check if a key is pressed.
|
48
|
+
*
|
49
|
+
* @param {string} key Names of the shortcut's keys,
|
50
|
+
* (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),
|
51
|
+
* in lowercase or uppercase, unified across browsers
|
52
|
+
* @returns {boolean}
|
53
|
+
*/
|
54
|
+
isPressed: function isPressed(key) {
|
55
|
+
return PRESSED_KEYS.has(key);
|
56
|
+
}
|
57
|
+
};
|
58
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { Context } from './context';
|
2
|
+
|
3
|
+
export interface ShortcutManager {
|
4
|
+
addContext(contextName: string): Context;
|
5
|
+
getActiveContextName(): string;
|
6
|
+
getContext(contextName: string): Context | undefined;
|
7
|
+
setActiveContextName(contextName: string): void;
|
8
|
+
isCtrlPressed(): boolean;
|
9
|
+
destroy(): void;
|
10
|
+
}
|
@@ -0,0 +1,183 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.createShortcutManager = void 0;
|
5
|
+
|
6
|
+
var _uniqueMap = require("../utils/dataStructures/uniqueMap");
|
7
|
+
|
8
|
+
var _context = require("./context");
|
9
|
+
|
10
|
+
var _recorder = require("./recorder");
|
11
|
+
|
12
|
+
/* eslint-disable jsdoc/require-description-complete-sentence */
|
13
|
+
|
14
|
+
/**
|
15
|
+
* The `ShortcutManager` API lets you store and manage [keyboard shortcut contexts](@/guides/accessories-and-menus/keyboard-shortcuts.md#keyboard-shortcut-contexts) ([`ShortcutContext`](@/api/shortcutContext.md)).
|
16
|
+
*
|
17
|
+
* Each `ShortcutManager` object:
|
18
|
+
* - Stores and manages its own set of keyboard shortcut contexts.
|
19
|
+
* - Listens to the [`KeyboardEvent`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent) events and runs actions for them.
|
20
|
+
*
|
21
|
+
* @alias ShortcutManager
|
22
|
+
* @class ShortcutManager
|
23
|
+
* @param {object} options The manager's options
|
24
|
+
* @param {EventTarget} options.ownerWindow A starting `window` element
|
25
|
+
* @param {Function} options.beforeKeyDown A hook fired before the `keydown` event is handled. You can use it to [block a keyboard shortcut's actions](@/guides/accessories-and-menus/keyboard-shortcuts.md#blocking-a-keyboard-shortcut-s-actions).
|
26
|
+
* @param {Function} options.afterKeyDown A hook fired after the `keydown` event is handled
|
27
|
+
*/
|
28
|
+
var createShortcutManager = function createShortcutManager(_ref) {
|
29
|
+
var ownerWindow = _ref.ownerWindow,
|
30
|
+
beforeKeyDown = _ref.beforeKeyDown,
|
31
|
+
afterKeyDown = _ref.afterKeyDown;
|
32
|
+
|
33
|
+
/**
|
34
|
+
* A unique map that stores keyboard shortcut contexts.
|
35
|
+
*
|
36
|
+
* @type {UniqueMap}
|
37
|
+
*/
|
38
|
+
var CONTEXTS = (0, _uniqueMap.createUniqueMap)({
|
39
|
+
errorIdExists: function errorIdExists(keys) {
|
40
|
+
return "The \"".concat(keys, "\" context name is already registered.");
|
41
|
+
}
|
42
|
+
});
|
43
|
+
/**
|
44
|
+
* The name of the active [`ShortcutContext`](@/api/shortcutContext.md).
|
45
|
+
*
|
46
|
+
* @type {string}
|
47
|
+
*/
|
48
|
+
|
49
|
+
var activeContextName = 'grid';
|
50
|
+
/**
|
51
|
+
* Create a new [`ShortcutContext`](@/api/shortcutContext.md) object.
|
52
|
+
*
|
53
|
+
* @memberof ShortcutManager#
|
54
|
+
* @param {string} contextName The name of the new shortcut context
|
55
|
+
* @returns {object}
|
56
|
+
*/
|
57
|
+
|
58
|
+
var addContext = function addContext(contextName) {
|
59
|
+
var context = (0, _context.createContext)(contextName);
|
60
|
+
CONTEXTS.addItem(contextName, context);
|
61
|
+
return context;
|
62
|
+
};
|
63
|
+
/**
|
64
|
+
* Get the ID of the active [`ShortcutContext`](@/api/shortcutContext.md).
|
65
|
+
*
|
66
|
+
* @memberof ShortcutManager#
|
67
|
+
* @returns {string}
|
68
|
+
*/
|
69
|
+
|
70
|
+
|
71
|
+
var getActiveContextName = function getActiveContextName() {
|
72
|
+
return activeContextName;
|
73
|
+
};
|
74
|
+
/**
|
75
|
+
* Get a keyboard shortcut context by its name.
|
76
|
+
*
|
77
|
+
* @memberof ShortcutManager#
|
78
|
+
* @param {string} contextName The name of the shortcut context
|
79
|
+
* @returns {object|undefined} A [`ShortcutContext`](@/api/shortcutContext.md) object that stores registered shortcuts
|
80
|
+
*/
|
81
|
+
|
82
|
+
|
83
|
+
var getContext = function getContext(contextName) {
|
84
|
+
return CONTEXTS.getItem(contextName);
|
85
|
+
};
|
86
|
+
/**
|
87
|
+
* Start listening to keyboard shortcuts within a given [`ShortcutContext`](@/api/shortcutContext.md).
|
88
|
+
*
|
89
|
+
* @memberof ShortcutManager#
|
90
|
+
* @param {string} contextName The name of the shortcut context
|
91
|
+
*/
|
92
|
+
|
93
|
+
|
94
|
+
var setActiveContextName = function setActiveContextName(contextName) {
|
95
|
+
activeContextName = contextName;
|
96
|
+
};
|
97
|
+
/**
|
98
|
+
* This variable relates to the `captureCtrl` shortcut option,
|
99
|
+
* which allows for capturing the state of the Control/Meta modifier key.
|
100
|
+
* Some of the default keyboard shortcuts related to cell selection need this feature for working properly.
|
101
|
+
*
|
102
|
+
* @type {boolean}
|
103
|
+
*/
|
104
|
+
|
105
|
+
|
106
|
+
var isCtrlKeySilenced = false;
|
107
|
+
/**
|
108
|
+
* Internal key recorder.
|
109
|
+
*
|
110
|
+
* @private
|
111
|
+
*/
|
112
|
+
|
113
|
+
var keyRecorder = (0, _recorder.useRecorder)(ownerWindow, beforeKeyDown, afterKeyDown, function (event, keys) {
|
114
|
+
var activeContext = getContext(getActiveContextName());
|
115
|
+
var isExecutionCancelled = false;
|
116
|
+
|
117
|
+
if (!activeContext.hasShortcut(keys)) {
|
118
|
+
return isExecutionCancelled;
|
119
|
+
} // Processing just actions being in stack at the moment of shortcut pressing (without respecting additions/removals performed dynamically).
|
120
|
+
|
121
|
+
|
122
|
+
var shortcuts = activeContext.getShortcuts(keys);
|
123
|
+
|
124
|
+
for (var index = 0; index < shortcuts.length; index++) {
|
125
|
+
var _shortcuts$index = shortcuts[index],
|
126
|
+
callback = _shortcuts$index.callback,
|
127
|
+
runOnlyIf = _shortcuts$index.runOnlyIf,
|
128
|
+
preventDefault = _shortcuts$index.preventDefault,
|
129
|
+
stopPropagation = _shortcuts$index.stopPropagation,
|
130
|
+
captureCtrl = _shortcuts$index.captureCtrl;
|
131
|
+
|
132
|
+
if (runOnlyIf(event) !== false) {
|
133
|
+
isCtrlKeySilenced = captureCtrl;
|
134
|
+
isExecutionCancelled = callback(event, keys) === false;
|
135
|
+
isCtrlKeySilenced = false;
|
136
|
+
|
137
|
+
if (preventDefault) {
|
138
|
+
event.preventDefault();
|
139
|
+
}
|
140
|
+
|
141
|
+
if (stopPropagation) {
|
142
|
+
event.stopPropagation();
|
143
|
+
}
|
144
|
+
|
145
|
+
if (isExecutionCancelled) {
|
146
|
+
break;
|
147
|
+
}
|
148
|
+
}
|
149
|
+
}
|
150
|
+
|
151
|
+
return isExecutionCancelled;
|
152
|
+
});
|
153
|
+
keyRecorder.mount();
|
154
|
+
return {
|
155
|
+
addContext: addContext,
|
156
|
+
getActiveContextName: getActiveContextName,
|
157
|
+
getContext: getContext,
|
158
|
+
setActiveContextName: setActiveContextName,
|
159
|
+
|
160
|
+
/**
|
161
|
+
* Returns whether `control` or `meta` keys are pressed.
|
162
|
+
*
|
163
|
+
* @memberof ShortcutManager#
|
164
|
+
* @type {Function}
|
165
|
+
* @returns {boolean}
|
166
|
+
*/
|
167
|
+
isCtrlPressed: function isCtrlPressed() {
|
168
|
+
return !isCtrlKeySilenced && (keyRecorder.isPressed('control') || keyRecorder.isPressed('meta'));
|
169
|
+
},
|
170
|
+
|
171
|
+
/**
|
172
|
+
* Destroy a context manager instance.
|
173
|
+
*
|
174
|
+
* @type {Function}
|
175
|
+
* @memberof ShortcutManager#
|
176
|
+
*/
|
177
|
+
destroy: function destroy() {
|
178
|
+
return keyRecorder.unmount();
|
179
|
+
}
|
180
|
+
};
|
181
|
+
};
|
182
|
+
|
183
|
+
exports.createShortcutManager = createShortcutManager;
|
@@ -0,0 +1,174 @@
|
|
1
|
+
import { createUniqueMap } from "../utils/dataStructures/uniqueMap.mjs";
|
2
|
+
import { createContext } from "./context.mjs";
|
3
|
+
import { useRecorder } from "./recorder.mjs";
|
4
|
+
/* eslint-disable jsdoc/require-description-complete-sentence */
|
5
|
+
|
6
|
+
/**
|
7
|
+
* The `ShortcutManager` API lets you store and manage [keyboard shortcut contexts](@/guides/accessories-and-menus/keyboard-shortcuts.md#keyboard-shortcut-contexts) ([`ShortcutContext`](@/api/shortcutContext.md)).
|
8
|
+
*
|
9
|
+
* Each `ShortcutManager` object:
|
10
|
+
* - Stores and manages its own set of keyboard shortcut contexts.
|
11
|
+
* - Listens to the [`KeyboardEvent`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent) events and runs actions for them.
|
12
|
+
*
|
13
|
+
* @alias ShortcutManager
|
14
|
+
* @class ShortcutManager
|
15
|
+
* @param {object} options The manager's options
|
16
|
+
* @param {EventTarget} options.ownerWindow A starting `window` element
|
17
|
+
* @param {Function} options.beforeKeyDown A hook fired before the `keydown` event is handled. You can use it to [block a keyboard shortcut's actions](@/guides/accessories-and-menus/keyboard-shortcuts.md#blocking-a-keyboard-shortcut-s-actions).
|
18
|
+
* @param {Function} options.afterKeyDown A hook fired after the `keydown` event is handled
|
19
|
+
*/
|
20
|
+
|
21
|
+
export var createShortcutManager = function createShortcutManager(_ref) {
|
22
|
+
var ownerWindow = _ref.ownerWindow,
|
23
|
+
beforeKeyDown = _ref.beforeKeyDown,
|
24
|
+
afterKeyDown = _ref.afterKeyDown;
|
25
|
+
|
26
|
+
/**
|
27
|
+
* A unique map that stores keyboard shortcut contexts.
|
28
|
+
*
|
29
|
+
* @type {UniqueMap}
|
30
|
+
*/
|
31
|
+
var CONTEXTS = createUniqueMap({
|
32
|
+
errorIdExists: function errorIdExists(keys) {
|
33
|
+
return "The \"".concat(keys, "\" context name is already registered.");
|
34
|
+
}
|
35
|
+
});
|
36
|
+
/**
|
37
|
+
* The name of the active [`ShortcutContext`](@/api/shortcutContext.md).
|
38
|
+
*
|
39
|
+
* @type {string}
|
40
|
+
*/
|
41
|
+
|
42
|
+
var activeContextName = 'grid';
|
43
|
+
/**
|
44
|
+
* Create a new [`ShortcutContext`](@/api/shortcutContext.md) object.
|
45
|
+
*
|
46
|
+
* @memberof ShortcutManager#
|
47
|
+
* @param {string} contextName The name of the new shortcut context
|
48
|
+
* @returns {object}
|
49
|
+
*/
|
50
|
+
|
51
|
+
var addContext = function addContext(contextName) {
|
52
|
+
var context = createContext(contextName);
|
53
|
+
CONTEXTS.addItem(contextName, context);
|
54
|
+
return context;
|
55
|
+
};
|
56
|
+
/**
|
57
|
+
* Get the ID of the active [`ShortcutContext`](@/api/shortcutContext.md).
|
58
|
+
*
|
59
|
+
* @memberof ShortcutManager#
|
60
|
+
* @returns {string}
|
61
|
+
*/
|
62
|
+
|
63
|
+
|
64
|
+
var getActiveContextName = function getActiveContextName() {
|
65
|
+
return activeContextName;
|
66
|
+
};
|
67
|
+
/**
|
68
|
+
* Get a keyboard shortcut context by its name.
|
69
|
+
*
|
70
|
+
* @memberof ShortcutManager#
|
71
|
+
* @param {string} contextName The name of the shortcut context
|
72
|
+
* @returns {object|undefined} A [`ShortcutContext`](@/api/shortcutContext.md) object that stores registered shortcuts
|
73
|
+
*/
|
74
|
+
|
75
|
+
|
76
|
+
var getContext = function getContext(contextName) {
|
77
|
+
return CONTEXTS.getItem(contextName);
|
78
|
+
};
|
79
|
+
/**
|
80
|
+
* Start listening to keyboard shortcuts within a given [`ShortcutContext`](@/api/shortcutContext.md).
|
81
|
+
*
|
82
|
+
* @memberof ShortcutManager#
|
83
|
+
* @param {string} contextName The name of the shortcut context
|
84
|
+
*/
|
85
|
+
|
86
|
+
|
87
|
+
var setActiveContextName = function setActiveContextName(contextName) {
|
88
|
+
activeContextName = contextName;
|
89
|
+
};
|
90
|
+
/**
|
91
|
+
* This variable relates to the `captureCtrl` shortcut option,
|
92
|
+
* which allows for capturing the state of the Control/Meta modifier key.
|
93
|
+
* Some of the default keyboard shortcuts related to cell selection need this feature for working properly.
|
94
|
+
*
|
95
|
+
* @type {boolean}
|
96
|
+
*/
|
97
|
+
|
98
|
+
|
99
|
+
var isCtrlKeySilenced = false;
|
100
|
+
/**
|
101
|
+
* Internal key recorder.
|
102
|
+
*
|
103
|
+
* @private
|
104
|
+
*/
|
105
|
+
|
106
|
+
var keyRecorder = useRecorder(ownerWindow, beforeKeyDown, afterKeyDown, function (event, keys) {
|
107
|
+
var activeContext = getContext(getActiveContextName());
|
108
|
+
var isExecutionCancelled = false;
|
109
|
+
|
110
|
+
if (!activeContext.hasShortcut(keys)) {
|
111
|
+
return isExecutionCancelled;
|
112
|
+
} // Processing just actions being in stack at the moment of shortcut pressing (without respecting additions/removals performed dynamically).
|
113
|
+
|
114
|
+
|
115
|
+
var shortcuts = activeContext.getShortcuts(keys);
|
116
|
+
|
117
|
+
for (var index = 0; index < shortcuts.length; index++) {
|
118
|
+
var _shortcuts$index = shortcuts[index],
|
119
|
+
callback = _shortcuts$index.callback,
|
120
|
+
runOnlyIf = _shortcuts$index.runOnlyIf,
|
121
|
+
preventDefault = _shortcuts$index.preventDefault,
|
122
|
+
stopPropagation = _shortcuts$index.stopPropagation,
|
123
|
+
captureCtrl = _shortcuts$index.captureCtrl;
|
124
|
+
|
125
|
+
if (runOnlyIf(event) !== false) {
|
126
|
+
isCtrlKeySilenced = captureCtrl;
|
127
|
+
isExecutionCancelled = callback(event, keys) === false;
|
128
|
+
isCtrlKeySilenced = false;
|
129
|
+
|
130
|
+
if (preventDefault) {
|
131
|
+
event.preventDefault();
|
132
|
+
}
|
133
|
+
|
134
|
+
if (stopPropagation) {
|
135
|
+
event.stopPropagation();
|
136
|
+
}
|
137
|
+
|
138
|
+
if (isExecutionCancelled) {
|
139
|
+
break;
|
140
|
+
}
|
141
|
+
}
|
142
|
+
}
|
143
|
+
|
144
|
+
return isExecutionCancelled;
|
145
|
+
});
|
146
|
+
keyRecorder.mount();
|
147
|
+
return {
|
148
|
+
addContext: addContext,
|
149
|
+
getActiveContextName: getActiveContextName,
|
150
|
+
getContext: getContext,
|
151
|
+
setActiveContextName: setActiveContextName,
|
152
|
+
|
153
|
+
/**
|
154
|
+
* Returns whether `control` or `meta` keys are pressed.
|
155
|
+
*
|
156
|
+
* @memberof ShortcutManager#
|
157
|
+
* @type {Function}
|
158
|
+
* @returns {boolean}
|
159
|
+
*/
|
160
|
+
isCtrlPressed: function isCtrlPressed() {
|
161
|
+
return !isCtrlKeySilenced && (keyRecorder.isPressed('control') || keyRecorder.isPressed('meta'));
|
162
|
+
},
|
163
|
+
|
164
|
+
/**
|
165
|
+
* Destroy a context manager instance.
|
166
|
+
*
|
167
|
+
* @type {Function}
|
168
|
+
* @memberof ShortcutManager#
|
169
|
+
*/
|
170
|
+
destroy: function destroy() {
|
171
|
+
return keyRecorder.unmount();
|
172
|
+
}
|
173
|
+
};
|
174
|
+
};
|
@@ -0,0 +1,183 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.useRecorder = useRecorder;
|
5
|
+
|
6
|
+
require("core-js/modules/es.array.includes.js");
|
7
|
+
|
8
|
+
require("core-js/modules/es.array.concat.js");
|
9
|
+
|
10
|
+
require("core-js/modules/es.string.includes.js");
|
11
|
+
|
12
|
+
var _keyObserver = require("./keyObserver");
|
13
|
+
|
14
|
+
var _utils = require("./utils");
|
15
|
+
|
16
|
+
var _event = require("../helpers/dom/event");
|
17
|
+
|
18
|
+
var _browser = require("../helpers/browser");
|
19
|
+
|
20
|
+
var MODIFIER_KEYS = ['meta', 'alt', 'shift', 'control'];
|
21
|
+
var modifierKeysObserver = (0, _keyObserver.createKeysObserver)();
|
22
|
+
/* eslint-disable jsdoc/require-description-complete-sentence */
|
23
|
+
|
24
|
+
/**
|
25
|
+
* A key recorder, used for tracking key events.
|
26
|
+
*
|
27
|
+
* @param {EventTarget} ownerWindow A starting `window` element
|
28
|
+
* @param {Function} beforeKeyDown A hook fired before the `keydown` event is handled. You can use it to [block a keyboard shortcut's actions](@/guides/accessories-and-menus/keyboard-shortcuts.md#blocking-a-keyboard-shortcut-s-actions).
|
29
|
+
* @param {Function} afterKeyDown A hook fired after the `keydown` event is handled
|
30
|
+
* @param {Function} callback `KeyEvent`'s listener's callback function
|
31
|
+
* @returns {object}
|
32
|
+
*/
|
33
|
+
|
34
|
+
function useRecorder(ownerWindow, beforeKeyDown, afterKeyDown, callback) {
|
35
|
+
/**
|
36
|
+
* Check if a pressed key is tracked or not.
|
37
|
+
*
|
38
|
+
* @param {string} pressedKey A pressed key
|
39
|
+
* @returns {boolean}
|
40
|
+
*/
|
41
|
+
var isModifierKey = function isModifierKey(pressedKey) {
|
42
|
+
return MODIFIER_KEYS.includes(pressedKey);
|
43
|
+
};
|
44
|
+
/**
|
45
|
+
* Get every pressed modifier key from the performed `KeyboardEvent`.
|
46
|
+
*
|
47
|
+
* @private
|
48
|
+
* @param {KeyboardEvent} event The event object.
|
49
|
+
* @param {boolean} [mergeMetaKeys=false] If `true,` the function will return the "control" and "meta"
|
50
|
+
* modifiers keys as the "control/meta" name. This allows creating
|
51
|
+
* keyboard shortcuts with modifier key that trigger the shortcut
|
52
|
+
* actions depend on the OS keyboard layout (the Meta key for macOS
|
53
|
+
* and Control for non macOS system).
|
54
|
+
* @returns {string[]}
|
55
|
+
*/
|
56
|
+
|
57
|
+
|
58
|
+
var getPressedModifierKeys = function getPressedModifierKeys(event) {
|
59
|
+
var mergeMetaKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
60
|
+
var pressedModifierKeys = [];
|
61
|
+
|
62
|
+
if (event.altKey) {
|
63
|
+
pressedModifierKeys.push('alt');
|
64
|
+
}
|
65
|
+
|
66
|
+
if (mergeMetaKeys && (event.ctrlKey || event.metaKey)) {
|
67
|
+
pressedModifierKeys.push('control/meta');
|
68
|
+
} else {
|
69
|
+
if (event.ctrlKey) {
|
70
|
+
pressedModifierKeys.push('control');
|
71
|
+
}
|
72
|
+
|
73
|
+
if (event.metaKey) {
|
74
|
+
pressedModifierKeys.push('meta');
|
75
|
+
}
|
76
|
+
}
|
77
|
+
|
78
|
+
if (event.shiftKey) {
|
79
|
+
pressedModifierKeys.push('shift');
|
80
|
+
}
|
81
|
+
|
82
|
+
return pressedModifierKeys;
|
83
|
+
};
|
84
|
+
/**
|
85
|
+
* `KeyboardEvent`'s callback function
|
86
|
+
*
|
87
|
+
* @private
|
88
|
+
* @param {KeyboardEvent} event The event object
|
89
|
+
*/
|
90
|
+
|
91
|
+
|
92
|
+
var onkeydown = function onkeydown(event) {
|
93
|
+
var result = beforeKeyDown(event);
|
94
|
+
|
95
|
+
if (result === false || (0, _event.isImmediatePropagationStopped)(event)) {
|
96
|
+
return;
|
97
|
+
}
|
98
|
+
|
99
|
+
var pressedKey = (0, _utils.normalizeEventKey)(event.key);
|
100
|
+
var extraModifierKeys = [];
|
101
|
+
|
102
|
+
if (isModifierKey(pressedKey)) {
|
103
|
+
modifierKeysObserver.press(pressedKey);
|
104
|
+
} else {
|
105
|
+
extraModifierKeys = getPressedModifierKeys(event);
|
106
|
+
}
|
107
|
+
|
108
|
+
var pressedKeys = [pressedKey].concat(extraModifierKeys);
|
109
|
+
var isExecutionCancelled = callback(event, pressedKeys);
|
110
|
+
|
111
|
+
if (!isExecutionCancelled && ((0, _browser.isMacOS)() && extraModifierKeys.includes('meta') || !(0, _browser.isMacOS)() && extraModifierKeys.includes('control'))) {
|
112
|
+
// Trigger the callback for the virtual OS-dependent "control/meta" key
|
113
|
+
callback(event, [pressedKey].concat(getPressedModifierKeys(event, true)));
|
114
|
+
}
|
115
|
+
|
116
|
+
afterKeyDown(event);
|
117
|
+
};
|
118
|
+
/**
|
119
|
+
* `KeyboardEvent`'s callback function
|
120
|
+
*
|
121
|
+
* @private
|
122
|
+
* @param {KeyboardEvent} event The event object
|
123
|
+
*/
|
124
|
+
|
125
|
+
|
126
|
+
var onkeyup = function onkeyup(event) {
|
127
|
+
var pressedKey = (0, _utils.normalizeEventKey)(event.key);
|
128
|
+
|
129
|
+
if (isModifierKey(pressedKey) === false) {
|
130
|
+
return;
|
131
|
+
}
|
132
|
+
|
133
|
+
modifierKeysObserver.release(pressedKey);
|
134
|
+
};
|
135
|
+
/**
|
136
|
+
* `FocusEvent`'s callback function
|
137
|
+
*
|
138
|
+
* @private
|
139
|
+
*/
|
140
|
+
|
141
|
+
|
142
|
+
var onblur = function onblur() {
|
143
|
+
modifierKeysObserver.releaseAll();
|
144
|
+
};
|
145
|
+
/**
|
146
|
+
* Add event listeners to the starting window and its parents' windows.
|
147
|
+
*/
|
148
|
+
|
149
|
+
|
150
|
+
var mount = function mount() {
|
151
|
+
var eventTarget = ownerWindow;
|
152
|
+
|
153
|
+
while (eventTarget) {
|
154
|
+
eventTarget.addEventListener('keydown', onkeydown);
|
155
|
+
eventTarget.addEventListener('keyup', onkeyup);
|
156
|
+
eventTarget.addEventListener('blur', onblur);
|
157
|
+
eventTarget = eventTarget.frameElement;
|
158
|
+
}
|
159
|
+
};
|
160
|
+
/**
|
161
|
+
* Remove event listeners from the starting window and its parents' windows.
|
162
|
+
*/
|
163
|
+
|
164
|
+
|
165
|
+
var unmount = function unmount() {
|
166
|
+
var eventTarget = ownerWindow;
|
167
|
+
|
168
|
+
while (eventTarget) {
|
169
|
+
eventTarget.removeEventListener('keydown', onkeydown);
|
170
|
+
eventTarget.removeEventListener('keyup', onkeyup);
|
171
|
+
eventTarget.removeEventListener('blur', onblur);
|
172
|
+
eventTarget = eventTarget.frameElement;
|
173
|
+
}
|
174
|
+
};
|
175
|
+
|
176
|
+
return {
|
177
|
+
mount: mount,
|
178
|
+
unmount: unmount,
|
179
|
+
isPressed: function isPressed(key) {
|
180
|
+
return modifierKeysObserver.isPressed(key);
|
181
|
+
}
|
182
|
+
};
|
183
|
+
}
|