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/shortcuts/context.js
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
3
|
exports.__esModule = true;
|
4
|
+
exports.isContextObject = isContextObject;
|
4
5
|
require("core-js/modules/es.error.cause.js");
|
5
6
|
require("core-js/modules/es.array.push.js");
|
6
7
|
var _uniqueMap = require("../utils/dataStructures/uniqueMap");
|
@@ -9,6 +10,18 @@ var _mixed = require("../helpers/mixed");
|
|
9
10
|
var _function = require("../helpers/function");
|
10
11
|
var _object = require("../helpers/object");
|
11
12
|
var _templateLiteralTag = require("../helpers/templateLiteralTag");
|
13
|
+
const __kindOf = Symbol('shortcut-context');
|
14
|
+
|
15
|
+
/**
|
16
|
+
* Checks if the provided object is a context object.
|
17
|
+
*
|
18
|
+
* @param {*} objectToCheck An object to check.
|
19
|
+
* @returns {boolean}
|
20
|
+
*/
|
21
|
+
function isContextObject(objectToCheck) {
|
22
|
+
return (0, _object.isObject)(objectToCheck) && objectToCheck.__kindOf === __kindOf;
|
23
|
+
}
|
24
|
+
|
12
25
|
/* eslint-disable jsdoc/require-description-complete-sentence */
|
13
26
|
/**
|
14
27
|
* The `ShortcutContext` API lets you store and manage [keyboard shortcuts](@/guides/accessories-and-menus/keyboard-shortcuts.md) in a given [context](@/guides/accessories-and-menus/keyboard-shortcuts.md#keyboard-shortcut-contexts).
|
@@ -36,13 +49,13 @@ const createContext = name => {
|
|
36
49
|
* @param {Function} options.callback The shortcut's action
|
37
50
|
* @param {object} options.group A group of shortcuts to which the shortcut belongs
|
38
51
|
* @param {object} [options.runOnlyIf] A condition on which the shortcut's action runs
|
39
|
-
* @param {object} [options.stopPropagation=
|
52
|
+
* @param {object} [options.stopPropagation=false] If set to `true`: stops the event's propagation
|
40
53
|
* @param {object} [options.captureCtrl=false] If set to `true`: captures the state of the Control/Meta modifier key
|
41
54
|
* @param {object} [options.preventDefault=true] If set to `true`: prevents the default behavior
|
42
55
|
* @param {object} [options.position='after'] The order in which the shortcut's action runs:
|
43
56
|
* `'before'` or `'after'` the `relativeToGroup` group of actions
|
44
57
|
* @param {object} [options.relativeToGroup] The name of a group of actions, used to determine an action's `position`
|
45
|
-
*
|
58
|
+
* @param {object} [options.forwardToContext] The context object where the event will be forwarded to.
|
46
59
|
*/
|
47
60
|
const addShortcut = function () {
|
48
61
|
let {
|
@@ -54,7 +67,8 @@ const createContext = name => {
|
|
54
67
|
preventDefault = true,
|
55
68
|
stopPropagation = false,
|
56
69
|
relativeToGroup,
|
57
|
-
position
|
70
|
+
position,
|
71
|
+
forwardToContext
|
58
72
|
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
59
73
|
if ((0, _mixed.isUndefined)(group)) {
|
60
74
|
throw new Error('You need to define the shortcut\'s group.');
|
@@ -78,6 +92,9 @@ const createContext = name => {
|
|
78
92
|
if ((0, _mixed.isDefined)(relativeToGroup)) {
|
79
93
|
[newShortcut.relativeToGroup, newShortcut.position] = [relativeToGroup, position];
|
80
94
|
}
|
95
|
+
if (isContextObject(forwardToContext)) {
|
96
|
+
newShortcut.forwardToContext = forwardToContext;
|
97
|
+
}
|
81
98
|
keys.forEach(keyCombination => {
|
82
99
|
const normalizedKeys = (0, _utils.normalizeKeys)(keyCombination);
|
83
100
|
const hasKeyCombination = SHORTCUTS.hasItem(normalizedKeys);
|
@@ -109,11 +126,12 @@ const createContext = name => {
|
|
109
126
|
* @param {Function} [options.callback] A shortcut's action
|
110
127
|
* @param {object} [options.group] A group of shortcuts to which a shortcut belongs
|
111
128
|
* @param {object} [options.runOnlyIf] A condition on which a shortcut's action runs
|
112
|
-
* @param {object} [options.stopPropagation=
|
129
|
+
* @param {object} [options.stopPropagation=false] If set to `true`: stops the event's propagation
|
113
130
|
* @param {object} [options.preventDefault=true] If set to `true`: prevents the default behavior
|
114
131
|
* @param {object} [options.position='after'] The order in which a shortcut's action runs:
|
115
132
|
* `'before'` or `'after'` a `relativeToGroup` group of actions
|
116
133
|
* @param {object} [options.relativeToGroup] The name of a group of actions, used to determine an action's `position`
|
134
|
+
* @param {object} [options.forwardToContext] The context object where the event will be forwarded to.
|
117
135
|
*/
|
118
136
|
const addShortcuts = function (shortcuts) {
|
119
137
|
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
@@ -189,6 +207,7 @@ const createContext = name => {
|
|
189
207
|
return SHORTCUTS.hasItem(normalizedKeys);
|
190
208
|
};
|
191
209
|
return {
|
210
|
+
__kindOf,
|
192
211
|
addShortcut,
|
193
212
|
addShortcuts,
|
194
213
|
getShortcuts,
|
package/shortcuts/context.mjs
CHANGED
@@ -4,8 +4,20 @@ import { createUniqueMap } from "../utils/dataStructures/uniqueMap.mjs";
|
|
4
4
|
import { normalizeKeys, getKeysList } from "./utils.mjs";
|
5
5
|
import { isUndefined, isDefined } from "../helpers/mixed.mjs";
|
6
6
|
import { isFunction } from "../helpers/function.mjs";
|
7
|
-
import { objectEach } from "../helpers/object.mjs";
|
7
|
+
import { objectEach, isObject } from "../helpers/object.mjs";
|
8
8
|
import { toSingleLine } from "../helpers/templateLiteralTag.mjs";
|
9
|
+
const __kindOf = Symbol('shortcut-context');
|
10
|
+
|
11
|
+
/**
|
12
|
+
* Checks if the provided object is a context object.
|
13
|
+
*
|
14
|
+
* @param {*} objectToCheck An object to check.
|
15
|
+
* @returns {boolean}
|
16
|
+
*/
|
17
|
+
export function isContextObject(objectToCheck) {
|
18
|
+
return isObject(objectToCheck) && objectToCheck.__kindOf === __kindOf;
|
19
|
+
}
|
20
|
+
|
9
21
|
/* eslint-disable jsdoc/require-description-complete-sentence */
|
10
22
|
/**
|
11
23
|
* The `ShortcutContext` API lets you store and manage [keyboard shortcuts](@/guides/accessories-and-menus/keyboard-shortcuts.md) in a given [context](@/guides/accessories-and-menus/keyboard-shortcuts.md#keyboard-shortcut-contexts).
|
@@ -33,13 +45,13 @@ export const createContext = name => {
|
|
33
45
|
* @param {Function} options.callback The shortcut's action
|
34
46
|
* @param {object} options.group A group of shortcuts to which the shortcut belongs
|
35
47
|
* @param {object} [options.runOnlyIf] A condition on which the shortcut's action runs
|
36
|
-
* @param {object} [options.stopPropagation=
|
48
|
+
* @param {object} [options.stopPropagation=false] If set to `true`: stops the event's propagation
|
37
49
|
* @param {object} [options.captureCtrl=false] If set to `true`: captures the state of the Control/Meta modifier key
|
38
50
|
* @param {object} [options.preventDefault=true] If set to `true`: prevents the default behavior
|
39
51
|
* @param {object} [options.position='after'] The order in which the shortcut's action runs:
|
40
52
|
* `'before'` or `'after'` the `relativeToGroup` group of actions
|
41
53
|
* @param {object} [options.relativeToGroup] The name of a group of actions, used to determine an action's `position`
|
42
|
-
*
|
54
|
+
* @param {object} [options.forwardToContext] The context object where the event will be forwarded to.
|
43
55
|
*/
|
44
56
|
const addShortcut = function () {
|
45
57
|
let {
|
@@ -51,7 +63,8 @@ export const createContext = name => {
|
|
51
63
|
preventDefault = true,
|
52
64
|
stopPropagation = false,
|
53
65
|
relativeToGroup,
|
54
|
-
position
|
66
|
+
position,
|
67
|
+
forwardToContext
|
55
68
|
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
56
69
|
if (isUndefined(group)) {
|
57
70
|
throw new Error('You need to define the shortcut\'s group.');
|
@@ -75,6 +88,9 @@ export const createContext = name => {
|
|
75
88
|
if (isDefined(relativeToGroup)) {
|
76
89
|
[newShortcut.relativeToGroup, newShortcut.position] = [relativeToGroup, position];
|
77
90
|
}
|
91
|
+
if (isContextObject(forwardToContext)) {
|
92
|
+
newShortcut.forwardToContext = forwardToContext;
|
93
|
+
}
|
78
94
|
keys.forEach(keyCombination => {
|
79
95
|
const normalizedKeys = normalizeKeys(keyCombination);
|
80
96
|
const hasKeyCombination = SHORTCUTS.hasItem(normalizedKeys);
|
@@ -106,11 +122,12 @@ export const createContext = name => {
|
|
106
122
|
* @param {Function} [options.callback] A shortcut's action
|
107
123
|
* @param {object} [options.group] A group of shortcuts to which a shortcut belongs
|
108
124
|
* @param {object} [options.runOnlyIf] A condition on which a shortcut's action runs
|
109
|
-
* @param {object} [options.stopPropagation=
|
125
|
+
* @param {object} [options.stopPropagation=false] If set to `true`: stops the event's propagation
|
110
126
|
* @param {object} [options.preventDefault=true] If set to `true`: prevents the default behavior
|
111
127
|
* @param {object} [options.position='after'] The order in which a shortcut's action runs:
|
112
128
|
* `'before'` or `'after'` a `relativeToGroup` group of actions
|
113
129
|
* @param {object} [options.relativeToGroup] The name of a group of actions, used to determine an action's `position`
|
130
|
+
* @param {object} [options.forwardToContext] The context object where the event will be forwarded to.
|
114
131
|
*/
|
115
132
|
const addShortcuts = function (shortcuts) {
|
116
133
|
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
@@ -186,6 +203,7 @@ export const createContext = name => {
|
|
186
203
|
return SHORTCUTS.hasItem(normalizedKeys);
|
187
204
|
};
|
188
205
|
return {
|
206
|
+
__kindOf,
|
189
207
|
addShortcut,
|
190
208
|
addShortcuts,
|
191
209
|
getShortcuts,
|
package/shortcuts/manager.js
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
3
|
exports.__esModule = true;
|
4
|
+
require("core-js/modules/es.error.cause.js");
|
4
5
|
var _uniqueMap = require("../utils/dataStructures/uniqueMap");
|
6
|
+
var _event = require("../helpers/dom/event");
|
5
7
|
var _context = require("./context");
|
6
8
|
var _recorder = require("./recorder");
|
9
|
+
var _templateLiteralTag = require("../helpers/templateLiteralTag");
|
7
10
|
/* eslint-disable jsdoc/require-description-complete-sentence */
|
8
|
-
|
9
11
|
/**
|
10
12
|
* 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)).
|
11
13
|
*
|
@@ -84,6 +86,10 @@ const createShortcutManager = _ref => {
|
|
84
86
|
* @param {string} contextName The name of the shortcut context
|
85
87
|
*/
|
86
88
|
const setActiveContextName = contextName => {
|
89
|
+
if (!CONTEXTS.hasItem(contextName)) {
|
90
|
+
throw new Error((0, _templateLiteralTag.toSingleLine)`You've tried to activate the "${contextName}" shortcut context\x20
|
91
|
+
that does not exist. Before activation, register the context using the "addContext" method.`);
|
92
|
+
}
|
87
93
|
activeContextName = contextName;
|
88
94
|
};
|
89
95
|
|
@@ -97,12 +103,18 @@ const createShortcutManager = _ref => {
|
|
97
103
|
let isCtrlKeySilenced = false;
|
98
104
|
|
99
105
|
/**
|
100
|
-
*
|
106
|
+
* A callback function for listening events from the recorder.
|
101
107
|
*
|
102
|
-
* @
|
108
|
+
* @param {KeyboardEvent} event The keyboard event.
|
109
|
+
* @param {string[]} keys Names of the shortcut's keys,
|
110
|
+
* (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),
|
111
|
+
* in lowercase or uppercase, unified across browsers.
|
112
|
+
* @param {object | string} context The context object or name.
|
113
|
+
* @returns {boolean}
|
103
114
|
*/
|
104
|
-
const
|
105
|
-
|
115
|
+
const recorderCallback = function (event, keys) {
|
116
|
+
let context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : getActiveContextName();
|
117
|
+
const activeContext = (0, _context.isContextObject)(context) ? context : getContext(context);
|
106
118
|
let isExecutionCancelled = false;
|
107
119
|
if (!activeContext.hasShortcut(keys)) {
|
108
120
|
return isExecutionCancelled;
|
@@ -116,7 +128,8 @@ const createShortcutManager = _ref => {
|
|
116
128
|
runOnlyIf,
|
117
129
|
preventDefault,
|
118
130
|
stopPropagation,
|
119
|
-
captureCtrl
|
131
|
+
captureCtrl,
|
132
|
+
forwardToContext
|
120
133
|
} = shortcuts[index];
|
121
134
|
if (runOnlyIf(event) !== false) {
|
122
135
|
isCtrlKeySilenced = captureCtrl;
|
@@ -126,15 +139,26 @@ const createShortcutManager = _ref => {
|
|
126
139
|
event.preventDefault();
|
127
140
|
}
|
128
141
|
if (stopPropagation) {
|
142
|
+
(0, _event.stopImmediatePropagation)(event);
|
129
143
|
event.stopPropagation();
|
130
144
|
}
|
131
145
|
if (isExecutionCancelled) {
|
132
146
|
break;
|
133
147
|
}
|
148
|
+
if (forwardToContext) {
|
149
|
+
recorderCallback(event, keys, forwardToContext);
|
150
|
+
}
|
134
151
|
}
|
135
152
|
}
|
136
153
|
return isExecutionCancelled;
|
137
|
-
}
|
154
|
+
};
|
155
|
+
|
156
|
+
/**
|
157
|
+
* Internal key recorder.
|
158
|
+
*
|
159
|
+
* @private
|
160
|
+
*/
|
161
|
+
const keyRecorder = (0, _recorder.useRecorder)(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, recorderCallback);
|
138
162
|
keyRecorder.mount();
|
139
163
|
return {
|
140
164
|
addContext,
|
package/shortcuts/manager.mjs
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
+
import "core-js/modules/es.error.cause.js";
|
1
2
|
import { createUniqueMap } from "../utils/dataStructures/uniqueMap.mjs";
|
2
|
-
import {
|
3
|
+
import { stopImmediatePropagation } from "../helpers/dom/event.mjs";
|
4
|
+
import { createContext, isContextObject } from "./context.mjs";
|
3
5
|
import { useRecorder } from "./recorder.mjs";
|
6
|
+
import { toSingleLine } from "../helpers/templateLiteralTag.mjs";
|
4
7
|
/* eslint-disable jsdoc/require-description-complete-sentence */
|
5
8
|
/**
|
6
9
|
* 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)).
|
@@ -80,6 +83,10 @@ export const createShortcutManager = _ref => {
|
|
80
83
|
* @param {string} contextName The name of the shortcut context
|
81
84
|
*/
|
82
85
|
const setActiveContextName = contextName => {
|
86
|
+
if (!CONTEXTS.hasItem(contextName)) {
|
87
|
+
throw new Error(toSingleLine`You've tried to activate the "${contextName}" shortcut context\x20
|
88
|
+
that does not exist. Before activation, register the context using the "addContext" method.`);
|
89
|
+
}
|
83
90
|
activeContextName = contextName;
|
84
91
|
};
|
85
92
|
|
@@ -93,12 +100,18 @@ export const createShortcutManager = _ref => {
|
|
93
100
|
let isCtrlKeySilenced = false;
|
94
101
|
|
95
102
|
/**
|
96
|
-
*
|
103
|
+
* A callback function for listening events from the recorder.
|
97
104
|
*
|
98
|
-
* @
|
105
|
+
* @param {KeyboardEvent} event The keyboard event.
|
106
|
+
* @param {string[]} keys Names of the shortcut's keys,
|
107
|
+
* (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),
|
108
|
+
* in lowercase or uppercase, unified across browsers.
|
109
|
+
* @param {object | string} context The context object or name.
|
110
|
+
* @returns {boolean}
|
99
111
|
*/
|
100
|
-
const
|
101
|
-
|
112
|
+
const recorderCallback = function (event, keys) {
|
113
|
+
let context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : getActiveContextName();
|
114
|
+
const activeContext = isContextObject(context) ? context : getContext(context);
|
102
115
|
let isExecutionCancelled = false;
|
103
116
|
if (!activeContext.hasShortcut(keys)) {
|
104
117
|
return isExecutionCancelled;
|
@@ -112,7 +125,8 @@ export const createShortcutManager = _ref => {
|
|
112
125
|
runOnlyIf,
|
113
126
|
preventDefault,
|
114
127
|
stopPropagation,
|
115
|
-
captureCtrl
|
128
|
+
captureCtrl,
|
129
|
+
forwardToContext
|
116
130
|
} = shortcuts[index];
|
117
131
|
if (runOnlyIf(event) !== false) {
|
118
132
|
isCtrlKeySilenced = captureCtrl;
|
@@ -122,15 +136,26 @@ export const createShortcutManager = _ref => {
|
|
122
136
|
event.preventDefault();
|
123
137
|
}
|
124
138
|
if (stopPropagation) {
|
139
|
+
stopImmediatePropagation(event);
|
125
140
|
event.stopPropagation();
|
126
141
|
}
|
127
142
|
if (isExecutionCancelled) {
|
128
143
|
break;
|
129
144
|
}
|
145
|
+
if (forwardToContext) {
|
146
|
+
recorderCallback(event, keys, forwardToContext);
|
147
|
+
}
|
130
148
|
}
|
131
149
|
}
|
132
150
|
return isExecutionCancelled;
|
133
|
-
}
|
151
|
+
};
|
152
|
+
|
153
|
+
/**
|
154
|
+
* Internal key recorder.
|
155
|
+
*
|
156
|
+
* @private
|
157
|
+
*/
|
158
|
+
const keyRecorder = useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, recorderCallback);
|
134
159
|
keyRecorder.mount();
|
135
160
|
return {
|
136
161
|
addContext,
|
package/shortcuts/recorder.js
CHANGED
@@ -10,6 +10,7 @@ var _element = require("../helpers/dom/element");
|
|
10
10
|
var _browser = require("../helpers/browser");
|
11
11
|
const MODIFIER_KEYS = ['meta', 'alt', 'shift', 'control'];
|
12
12
|
const modifierKeysObserver = (0, _keyObserver.createKeysObserver)();
|
13
|
+
let instanceCounter = 0;
|
13
14
|
|
14
15
|
/* eslint-disable jsdoc/require-description-complete-sentence */
|
15
16
|
|
@@ -86,11 +87,9 @@ function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, call
|
|
86
87
|
if (event.keyCode === 229 || result === false || (0, _event.isImmediatePropagationStopped)(event)) {
|
87
88
|
return;
|
88
89
|
}
|
89
|
-
const pressedKey = (0, _utils.normalizeEventKey)(event
|
90
|
+
const pressedKey = (0, _utils.normalizeEventKey)(event);
|
90
91
|
let extraModifierKeys = [];
|
91
|
-
if (isModifierKey(pressedKey)) {
|
92
|
-
modifierKeysObserver.press(pressedKey);
|
93
|
-
} else {
|
92
|
+
if (!isModifierKey(pressedKey)) {
|
94
93
|
extraModifierKeys = getPressedModifierKeys(event);
|
95
94
|
}
|
96
95
|
const pressedKeys = [pressedKey].concat(extraModifierKeys);
|
@@ -103,20 +102,29 @@ function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, call
|
|
103
102
|
};
|
104
103
|
|
105
104
|
/**
|
106
|
-
* `KeyboardEvent`'s callback function
|
105
|
+
* `KeyboardEvent`'s callback function for observing the pressed state of the mod keys.
|
107
106
|
*
|
108
107
|
* @private
|
109
108
|
* @param {KeyboardEvent} event The event object
|
110
109
|
*/
|
111
|
-
const
|
112
|
-
|
113
|
-
|
110
|
+
const onkeydownForModKeys = event => {
|
111
|
+
const pressedKey = (0, _utils.normalizeEventKey)(event);
|
112
|
+
if (isModifierKey(pressedKey)) {
|
113
|
+
modifierKeysObserver.press(pressedKey);
|
114
114
|
}
|
115
|
-
|
116
|
-
|
117
|
-
|
115
|
+
};
|
116
|
+
|
117
|
+
/**
|
118
|
+
* `KeyboardEvent`'s callback function for observing the pressed state of the mod keys.
|
119
|
+
*
|
120
|
+
* @private
|
121
|
+
* @param {KeyboardEvent} event The event object
|
122
|
+
*/
|
123
|
+
const onkeyupForModKeys = event => {
|
124
|
+
const pressedKey = (0, _utils.normalizeEventKey)(event);
|
125
|
+
if (isModifierKey(pressedKey)) {
|
126
|
+
modifierKeysObserver.release(pressedKey);
|
118
127
|
}
|
119
|
-
modifierKeysObserver.release(pressedKey);
|
120
128
|
};
|
121
129
|
|
122
130
|
/**
|
@@ -133,9 +141,13 @@ function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, call
|
|
133
141
|
*/
|
134
142
|
const mount = () => {
|
135
143
|
let eventTarget = ownerWindow;
|
144
|
+
instanceCounter += 1;
|
136
145
|
while (eventTarget) {
|
146
|
+
if (instanceCounter === 1) {
|
147
|
+
eventTarget.document.documentElement.addEventListener('keydown', onkeydownForModKeys);
|
148
|
+
eventTarget.document.documentElement.addEventListener('keyup', onkeyupForModKeys);
|
149
|
+
}
|
137
150
|
eventTarget.document.documentElement.addEventListener('keydown', onkeydown);
|
138
|
-
eventTarget.document.documentElement.addEventListener('keyup', onkeyup);
|
139
151
|
eventTarget.document.documentElement.addEventListener('blur', onblur);
|
140
152
|
eventTarget = (0, _element.getParentWindow)(eventTarget);
|
141
153
|
}
|
@@ -146,9 +158,13 @@ function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, call
|
|
146
158
|
*/
|
147
159
|
const unmount = () => {
|
148
160
|
let eventTarget = ownerWindow;
|
161
|
+
instanceCounter -= 1;
|
149
162
|
while (eventTarget) {
|
163
|
+
if (instanceCounter === 0) {
|
164
|
+
eventTarget.document.documentElement.removeEventListener('keydown', onkeydownForModKeys);
|
165
|
+
eventTarget.document.documentElement.removeEventListener('keyup', onkeyupForModKeys);
|
166
|
+
}
|
150
167
|
eventTarget.document.documentElement.removeEventListener('keydown', onkeydown);
|
151
|
-
eventTarget.document.documentElement.removeEventListener('keyup', onkeyup);
|
152
168
|
eventTarget.document.documentElement.removeEventListener('blur', onblur);
|
153
169
|
eventTarget = (0, _element.getParentWindow)(eventTarget);
|
154
170
|
}
|
package/shortcuts/recorder.mjs
CHANGED
@@ -6,6 +6,7 @@ import { getParentWindow } from "../helpers/dom/element.mjs";
|
|
6
6
|
import { isMacOS } from "../helpers/browser.mjs";
|
7
7
|
const MODIFIER_KEYS = ['meta', 'alt', 'shift', 'control'];
|
8
8
|
const modifierKeysObserver = createKeysObserver();
|
9
|
+
let instanceCounter = 0;
|
9
10
|
|
10
11
|
/* eslint-disable jsdoc/require-description-complete-sentence */
|
11
12
|
|
@@ -82,11 +83,9 @@ export function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDow
|
|
82
83
|
if (event.keyCode === 229 || result === false || isImmediatePropagationStopped(event)) {
|
83
84
|
return;
|
84
85
|
}
|
85
|
-
const pressedKey = normalizeEventKey(event
|
86
|
+
const pressedKey = normalizeEventKey(event);
|
86
87
|
let extraModifierKeys = [];
|
87
|
-
if (isModifierKey(pressedKey)) {
|
88
|
-
modifierKeysObserver.press(pressedKey);
|
89
|
-
} else {
|
88
|
+
if (!isModifierKey(pressedKey)) {
|
90
89
|
extraModifierKeys = getPressedModifierKeys(event);
|
91
90
|
}
|
92
91
|
const pressedKeys = [pressedKey].concat(extraModifierKeys);
|
@@ -99,20 +98,29 @@ export function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDow
|
|
99
98
|
};
|
100
99
|
|
101
100
|
/**
|
102
|
-
* `KeyboardEvent`'s callback function
|
101
|
+
* `KeyboardEvent`'s callback function for observing the pressed state of the mod keys.
|
103
102
|
*
|
104
103
|
* @private
|
105
104
|
* @param {KeyboardEvent} event The event object
|
106
105
|
*/
|
107
|
-
const
|
108
|
-
|
109
|
-
|
106
|
+
const onkeydownForModKeys = event => {
|
107
|
+
const pressedKey = normalizeEventKey(event);
|
108
|
+
if (isModifierKey(pressedKey)) {
|
109
|
+
modifierKeysObserver.press(pressedKey);
|
110
110
|
}
|
111
|
-
|
112
|
-
|
113
|
-
|
111
|
+
};
|
112
|
+
|
113
|
+
/**
|
114
|
+
* `KeyboardEvent`'s callback function for observing the pressed state of the mod keys.
|
115
|
+
*
|
116
|
+
* @private
|
117
|
+
* @param {KeyboardEvent} event The event object
|
118
|
+
*/
|
119
|
+
const onkeyupForModKeys = event => {
|
120
|
+
const pressedKey = normalizeEventKey(event);
|
121
|
+
if (isModifierKey(pressedKey)) {
|
122
|
+
modifierKeysObserver.release(pressedKey);
|
114
123
|
}
|
115
|
-
modifierKeysObserver.release(pressedKey);
|
116
124
|
};
|
117
125
|
|
118
126
|
/**
|
@@ -129,9 +137,13 @@ export function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDow
|
|
129
137
|
*/
|
130
138
|
const mount = () => {
|
131
139
|
let eventTarget = ownerWindow;
|
140
|
+
instanceCounter += 1;
|
132
141
|
while (eventTarget) {
|
142
|
+
if (instanceCounter === 1) {
|
143
|
+
eventTarget.document.documentElement.addEventListener('keydown', onkeydownForModKeys);
|
144
|
+
eventTarget.document.documentElement.addEventListener('keyup', onkeyupForModKeys);
|
145
|
+
}
|
133
146
|
eventTarget.document.documentElement.addEventListener('keydown', onkeydown);
|
134
|
-
eventTarget.document.documentElement.addEventListener('keyup', onkeyup);
|
135
147
|
eventTarget.document.documentElement.addEventListener('blur', onblur);
|
136
148
|
eventTarget = getParentWindow(eventTarget);
|
137
149
|
}
|
@@ -142,9 +154,13 @@ export function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDow
|
|
142
154
|
*/
|
143
155
|
const unmount = () => {
|
144
156
|
let eventTarget = ownerWindow;
|
157
|
+
instanceCounter -= 1;
|
145
158
|
while (eventTarget) {
|
159
|
+
if (instanceCounter === 0) {
|
160
|
+
eventTarget.document.documentElement.removeEventListener('keydown', onkeydownForModKeys);
|
161
|
+
eventTarget.document.documentElement.removeEventListener('keyup', onkeyupForModKeys);
|
162
|
+
}
|
146
163
|
eventTarget.document.documentElement.removeEventListener('keydown', onkeydown);
|
147
|
-
eventTarget.document.documentElement.removeEventListener('keyup', onkeyup);
|
148
164
|
eventTarget.document.documentElement.removeEventListener('blur', onblur);
|
149
165
|
eventTarget = getParentWindow(eventTarget);
|
150
166
|
}
|
package/shortcuts/utils.js
CHANGED
@@ -37,13 +37,27 @@ const getKeysList = normalizedKeys => {
|
|
37
37
|
};
|
38
38
|
|
39
39
|
/**
|
40
|
-
*
|
40
|
+
* The regex tests if the event.code matches to the pattern and it's used to extract letters and digits from
|
41
|
+
* the string.
|
42
|
+
*/
|
43
|
+
exports.getKeysList = getKeysList;
|
44
|
+
const codeToKeyRegExp = new RegExp('^(?:Key|Digit)([A-Z0-9])$');
|
45
|
+
|
46
|
+
/**
|
47
|
+
* Normalizes a keyboard event key value to a key before its modification. When the keyboard event
|
48
|
+
* is triggered with Alt, Control or Shift keys the `key` property contains modified key e.g. for Alt+L
|
49
|
+
* it will be `ł`. But that value is only valid for polish keyboard layout. To fix that limitations, for
|
50
|
+
* letters and digits the value is taken from the `code` property which holds original value before
|
51
|
+
* transformation.
|
41
52
|
*
|
42
|
-
* @param {
|
53
|
+
* @param {Event} event The KeyboardEvent object.
|
43
54
|
* @returns {string}
|
44
55
|
*/
|
45
|
-
|
46
|
-
|
47
|
-
|
56
|
+
const normalizeEventKey = _ref => {
|
57
|
+
let {
|
58
|
+
key,
|
59
|
+
code
|
60
|
+
} = _ref;
|
61
|
+
return (codeToKeyRegExp.test(code) ? code.replace(codeToKeyRegExp, '$1') : key).toLowerCase();
|
48
62
|
};
|
49
63
|
exports.normalizeEventKey = normalizeEventKey;
|
package/shortcuts/utils.mjs
CHANGED
@@ -33,11 +33,25 @@ export const getKeysList = normalizedKeys => {
|
|
33
33
|
};
|
34
34
|
|
35
35
|
/**
|
36
|
-
*
|
36
|
+
* The regex tests if the event.code matches to the pattern and it's used to extract letters and digits from
|
37
|
+
* the string.
|
38
|
+
*/
|
39
|
+
const codeToKeyRegExp = new RegExp('^(?:Key|Digit)([A-Z0-9])$');
|
40
|
+
|
41
|
+
/**
|
42
|
+
* Normalizes a keyboard event key value to a key before its modification. When the keyboard event
|
43
|
+
* is triggered with Alt, Control or Shift keys the `key` property contains modified key e.g. for Alt+L
|
44
|
+
* it will be `ł`. But that value is only valid for polish keyboard layout. To fix that limitations, for
|
45
|
+
* letters and digits the value is taken from the `code` property which holds original value before
|
46
|
+
* transformation.
|
37
47
|
*
|
38
|
-
* @param {
|
48
|
+
* @param {Event} event The KeyboardEvent object.
|
39
49
|
* @returns {string}
|
40
50
|
*/
|
41
|
-
export const normalizeEventKey =
|
42
|
-
|
51
|
+
export const normalizeEventKey = _ref => {
|
52
|
+
let {
|
53
|
+
key,
|
54
|
+
code
|
55
|
+
} = _ref;
|
56
|
+
return (codeToKeyRegExp.test(code) ? code.replace(codeToKeyRegExp, '$1') : key).toLowerCase();
|
43
57
|
};
|