handsontable 13.1.0 → 14.0.0-next-e8f87aa-20231030
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/3rdparty/walkontable/src/calculator/constants.js +3 -6
- package/3rdparty/walkontable/src/calculator/viewportColumns.js +1 -2
- package/3rdparty/walkontable/src/calculator/viewportRows.js +1 -2
- package/3rdparty/walkontable/src/cell/coords.d.ts +8 -1
- package/3rdparty/walkontable/src/cell/coords.js +81 -13
- package/3rdparty/walkontable/src/cell/coords.mjs +80 -11
- package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
- package/3rdparty/walkontable/src/cell/range.js +39 -9
- package/3rdparty/walkontable/src/cell/range.mjs +38 -7
- package/3rdparty/walkontable/src/core/_base.js +9 -3
- package/3rdparty/walkontable/src/core/_base.mjs +9 -3
- package/3rdparty/walkontable/src/core/clone.js +2 -2
- package/3rdparty/walkontable/src/core/clone.mjs +2 -2
- package/3rdparty/walkontable/src/core/core.js +3 -2
- package/3rdparty/walkontable/src/core/core.mjs +3 -2
- package/3rdparty/walkontable/src/event.js +13 -12
- package/3rdparty/walkontable/src/event.mjs +12 -10
- package/3rdparty/walkontable/src/facade/core.js +2 -2
- package/3rdparty/walkontable/src/facade/core.mjs +2 -2
- package/3rdparty/walkontable/src/filter/column.js +1 -2
- package/3rdparty/walkontable/src/filter/row.js +1 -2
- package/3rdparty/walkontable/src/index.js +12 -4
- package/3rdparty/walkontable/src/index.mjs +2 -2
- package/3rdparty/walkontable/src/overlay/_base.js +13 -2
- package/3rdparty/walkontable/src/overlay/_base.mjs +14 -3
- package/3rdparty/walkontable/src/overlay/constants.js +7 -14
- package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -6
- package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -6
- package/3rdparty/walkontable/src/overlay/top.js +2 -6
- package/3rdparty/walkontable/src/overlay/top.mjs +2 -6
- package/3rdparty/walkontable/src/overlays.js +1 -2
- package/3rdparty/walkontable/src/renderer/cells.js +10 -0
- package/3rdparty/walkontable/src/renderer/cells.mjs +11 -1
- package/3rdparty/walkontable/src/renderer/columnHeaders.js +13 -0
- package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +14 -1
- package/3rdparty/walkontable/src/renderer/rowHeaders.js +8 -0
- package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +8 -0
- package/3rdparty/walkontable/src/renderer/rows.js +13 -0
- package/3rdparty/walkontable/src/renderer/rows.mjs +13 -0
- package/3rdparty/walkontable/src/renderer/table.js +9 -0
- package/3rdparty/walkontable/src/renderer/table.mjs +9 -0
- package/3rdparty/walkontable/src/scroll.js +3 -2
- package/3rdparty/walkontable/src/scroll.mjs +2 -0
- package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +8 -14
- package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
- package/3rdparty/walkontable/src/selection/border/constants.js +15 -0
- package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
- package/3rdparty/walkontable/src/selection/constants.js +54 -0
- package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
- package/3rdparty/walkontable/src/selection/index.js +26 -0
- package/3rdparty/walkontable/src/selection/index.mjs +5 -0
- package/3rdparty/walkontable/src/selection/manager.js +274 -0
- package/3rdparty/walkontable/src/selection/manager.mjs +269 -0
- package/3rdparty/walkontable/src/selection/scanner.js +270 -0
- package/3rdparty/walkontable/src/selection/scanner.mjs +267 -0
- package/3rdparty/walkontable/src/selection/selection.js +100 -0
- package/3rdparty/walkontable/src/selection/selection.mjs +96 -0
- package/3rdparty/walkontable/src/settings.js +13 -4
- package/3rdparty/walkontable/src/settings.mjs +13 -4
- package/3rdparty/walkontable/src/table/bottom.js +1 -2
- package/3rdparty/walkontable/src/table/bottomInlineStartCorner.js +1 -2
- package/3rdparty/walkontable/src/table/inlineStart.js +1 -2
- package/3rdparty/walkontable/src/table/master.js +3 -6
- package/3rdparty/walkontable/src/table/master.mjs +2 -4
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +10 -2
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +10 -2
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +10 -2
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +10 -2
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +10 -2
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
- package/3rdparty/walkontable/src/table/top.js +1 -2
- package/3rdparty/walkontable/src/table/topInlineStartCorner.js +1 -2
- package/3rdparty/walkontable/src/table.js +20 -80
- package/3rdparty/walkontable/src/table.mjs +20 -79
- package/3rdparty/walkontable/src/utils/orderView/constants.js +3 -6
- package/3rdparty/walkontable/src/viewport.js +1 -2
- package/CHANGELOG.md +51 -0
- package/base.js +3 -4
- package/base.mjs +2 -2
- package/cellTypes/autocompleteType/autocompleteType.js +3 -5
- package/cellTypes/checkboxType/checkboxType.js +3 -5
- package/cellTypes/dateType/dateType.d.ts +3 -3
- package/cellTypes/dateType/dateType.js +5 -7
- package/cellTypes/dateType/dateType.mjs +2 -2
- package/cellTypes/dropdownType/dropdownType.js +3 -5
- package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
- package/cellTypes/handsontableType/handsontableType.js +5 -7
- package/cellTypes/handsontableType/handsontableType.mjs +2 -2
- package/cellTypes/index.d.ts +3 -0
- package/cellTypes/index.js +4 -0
- package/cellTypes/index.mjs +3 -1
- package/cellTypes/numericType/numericType.js +3 -5
- package/cellTypes/passwordType/passwordType.js +3 -5
- package/cellTypes/selectType/index.d.ts +1 -0
- package/cellTypes/selectType/index.js +6 -0
- package/cellTypes/selectType/index.mjs +1 -0
- package/cellTypes/selectType/selectType.d.ts +14 -0
- package/cellTypes/selectType/selectType.js +11 -0
- package/cellTypes/selectType/selectType.mjs +8 -0
- package/cellTypes/textType/textType.js +3 -5
- package/cellTypes/timeType/timeType.js +3 -5
- package/common.d.ts +1 -1
- package/core/focusCatcher/focusDetector.js +63 -0
- package/core/focusCatcher/focusDetector.mjs +59 -0
- package/core/focusCatcher/index.js +148 -0
- package/core/focusCatcher/index.mjs +144 -0
- package/core/index.js +9 -0
- package/core/index.mjs +1 -0
- package/core.d.ts +10 -5
- package/core.js +327 -359
- package/core.mjs +327 -359
- package/dataMap/dataMap.js +1 -2
- package/dataMap/dataSource.js +1 -2
- package/dataMap/metaManager/metaSchema.js +65 -0
- package/dataMap/metaManager/metaSchema.mjs +65 -0
- package/dataMap/metaManager/mods/extendMetaProperties.js +7 -1
- package/dataMap/metaManager/mods/extendMetaProperties.mjs +7 -1
- package/dataMap/replaceData.js +5 -0
- package/dataMap/replaceData.mjs +5 -0
- package/dist/handsontable.css +94 -76
- package/dist/handsontable.full.css +94 -76
- package/dist/handsontable.full.js +23133 -15992
- package/dist/handsontable.full.min.css +8 -8
- package/dist/handsontable.full.min.js +170 -152
- package/dist/handsontable.js +21856 -15085
- package/dist/handsontable.min.css +7 -7
- package/dist/handsontable.min.js +30 -22
- package/dist/languages/all.js +47 -40
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/ar-AR.js +1 -2
- package/dist/languages/cs-CZ.js +1 -2
- package/dist/languages/de-CH.js +1 -2
- package/dist/languages/de-DE.js +1 -2
- package/dist/languages/en-US.js +15 -3
- package/dist/languages/en-US.min.js +1 -1
- package/dist/languages/es-MX.js +1 -2
- package/dist/languages/fr-FR.js +1 -2
- package/dist/languages/it-IT.js +1 -2
- package/dist/languages/ja-JP.js +1 -2
- package/dist/languages/ko-KR.js +1 -2
- package/dist/languages/lv-LV.js +1 -2
- package/dist/languages/nb-NO.js +1 -2
- package/dist/languages/nl-NL.js +1 -2
- package/dist/languages/pl-PL.js +15 -3
- package/dist/languages/pl-PL.min.js +1 -1
- package/dist/languages/pt-BR.js +1 -2
- package/dist/languages/ru-RU.js +1 -2
- package/dist/languages/sr-SP.js +1 -2
- package/dist/languages/zh-CN.js +1 -2
- package/dist/languages/zh-TW.js +1 -2
- package/editorManager.js +17 -91
- package/editorManager.mjs +16 -87
- package/editors/autocompleteEditor/autocompleteEditor.js +65 -11
- package/editors/autocompleteEditor/autocompleteEditor.mjs +65 -10
- package/editors/baseEditor/baseEditor.js +19 -13
- package/editors/baseEditor/baseEditor.mjs +16 -7
- package/editors/checkboxEditor/checkboxEditor.js +1 -2
- package/editors/dateEditor/dateEditor.js +27 -9
- package/editors/dateEditor/dateEditor.mjs +27 -8
- package/editors/dropdownEditor/dropdownEditor.js +1 -2
- package/editors/handsontableEditor/handsontableEditor.js +14 -7
- package/editors/handsontableEditor/handsontableEditor.mjs +14 -6
- package/editors/numericEditor/numericEditor.js +1 -2
- package/editors/passwordEditor/passwordEditor.js +1 -2
- package/editors/selectEditor/selectEditor.js +1 -2
- package/editors/textEditor/textEditor.js +20 -29
- package/editors/textEditor/textEditor.mjs +22 -30
- package/editors/timeEditor/timeEditor.js +1 -2
- package/eventManager.js +1 -2
- package/focusManager.d.ts +12 -0
- package/focusManager.js +265 -0
- package/focusManager.mjs +261 -0
- package/helpers/a11y.js +81 -0
- package/helpers/a11y.mjs +39 -0
- package/helpers/dom/element.js +224 -12
- package/helpers/dom/element.mjs +216 -10
- package/helpers/dom/event.d.ts +1 -0
- package/helpers/dom/event.js +25 -0
- package/helpers/dom/event.mjs +24 -0
- package/helpers/mixed.js +2 -2
- package/helpers/mixed.mjs +2 -2
- package/helpers/number.d.ts +1 -0
- package/helpers/number.js +18 -0
- package/helpers/number.mjs +17 -0
- package/helpers/unicode.js +1 -2
- package/i18n/constants.js +97 -160
- package/i18n/constants.mjs +17 -1
- package/i18n/languages/ar-AR.js +3 -4
- package/i18n/languages/cs-CZ.js +3 -4
- package/i18n/languages/de-CH.js +3 -4
- package/i18n/languages/de-DE.js +3 -4
- package/i18n/languages/en-US.js +17 -5
- package/i18n/languages/en-US.mjs +14 -1
- package/i18n/languages/es-MX.js +3 -4
- package/i18n/languages/fr-FR.js +3 -4
- package/i18n/languages/it-IT.js +3 -4
- package/i18n/languages/ja-JP.js +3 -4
- package/i18n/languages/ko-KR.js +3 -4
- package/i18n/languages/lv-LV.js +3 -4
- package/i18n/languages/nb-NO.js +3 -4
- package/i18n/languages/nl-NL.js +3 -4
- package/i18n/languages/pl-PL.js +17 -5
- package/i18n/languages/pl-PL.mjs +14 -1
- package/i18n/languages/pt-BR.js +3 -4
- package/i18n/languages/ru-RU.js +3 -4
- package/i18n/languages/sr-SP.js +3 -4
- package/i18n/languages/zh-CN.js +3 -4
- package/i18n/languages/zh-TW.js +3 -4
- package/i18n/registry.js +4 -6
- package/index.js +3 -4
- package/languages/all.js +47 -40
- package/languages/ar-AR.js +1 -2
- package/languages/cs-CZ.js +1 -2
- package/languages/de-CH.js +1 -2
- package/languages/de-DE.js +1 -2
- package/languages/en-US.js +15 -3
- package/languages/en-US.mjs +14 -1
- package/languages/es-MX.js +1 -2
- package/languages/fr-FR.js +1 -2
- package/languages/index.js +47 -40
- package/languages/it-IT.js +1 -2
- package/languages/ja-JP.js +1 -2
- package/languages/ko-KR.js +1 -2
- package/languages/lv-LV.js +1 -2
- package/languages/nb-NO.js +1 -2
- package/languages/nl-NL.js +1 -2
- package/languages/pl-PL.js +15 -3
- package/languages/pl-PL.mjs +14 -1
- package/languages/pt-BR.js +1 -2
- package/languages/ru-RU.js +1 -2
- package/languages/sr-SP.js +1 -2
- package/languages/zh-CN.js +1 -2
- package/languages/zh-TW.js +1 -2
- package/mixins/hooksRefRegisterer.js +1 -2
- package/mixins/localHooks.js +1 -2
- package/package.json +119 -96
- package/pluginHooks.d.ts +42 -7
- package/pluginHooks.js +301 -65
- package/pluginHooks.mjs +300 -63
- package/plugins/autoColumnSize/autoColumnSize.d.ts +2 -0
- package/plugins/autoColumnSize/autoColumnSize.js +2 -4
- package/plugins/autoRowSize/autoRowSize.d.ts +2 -0
- package/plugins/autoRowSize/autoRowSize.js +15 -10
- package/plugins/autoRowSize/autoRowSize.mjs +13 -6
- package/plugins/autofill/autofill.js +2 -4
- package/plugins/autofill/utils.js +1 -2
- package/plugins/base/base.js +1 -2
- package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +2 -4
- package/plugins/bindRowsWithHeaders/maps/looseBindsMap.js +1 -2
- package/plugins/bindRowsWithHeaders/maps/strictBindsMap.js +1 -2
- package/plugins/collapsibleColumns/collapsibleColumns.js +77 -8
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +76 -5
- package/plugins/columnSorting/columnSorting.js +71 -6
- package/plugins/columnSorting/columnSorting.mjs +70 -3
- package/plugins/columnSorting/index.js +3 -1
- package/plugins/columnSorting/index.mjs +1 -1
- package/plugins/columnSorting/sortFunction/checkbox.js +1 -2
- package/plugins/columnSorting/sortFunction/date.js +1 -2
- package/plugins/columnSorting/sortFunction/default.js +1 -2
- package/plugins/columnSorting/sortFunction/numeric.js +1 -2
- package/plugins/columnSorting/sortService/engine.js +3 -6
- package/plugins/columnSorting/utils.js +3 -6
- package/plugins/columnSummary/columnSummary.js +2 -4
- package/plugins/columnSummary/endpoints.js +1 -2
- package/plugins/comments/commentEditor.js +2 -2
- package/plugins/comments/commentEditor.mjs +1 -0
- package/plugins/comments/comments.js +254 -197
- package/plugins/comments/comments.mjs +251 -190
- package/plugins/comments/contextMenuItem/addEditComment.js +41 -0
- package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
- package/plugins/comments/contextMenuItem/readOnlyComment.js +49 -0
- package/plugins/comments/contextMenuItem/readOnlyComment.mjs +43 -0
- package/plugins/comments/contextMenuItem/removeComment.js +38 -0
- package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
- package/plugins/comments/displaySwitch.js +1 -2
- package/plugins/contextMenu/commandExecutor.js +2 -3
- package/plugins/contextMenu/commandExecutor.mjs +2 -3
- package/plugins/contextMenu/contextMenu.d.ts +1 -1
- package/plugins/contextMenu/contextMenu.js +77 -40
- package/plugins/contextMenu/contextMenu.mjs +74 -35
- package/plugins/contextMenu/itemsFactory.js +2 -3
- package/plugins/contextMenu/itemsFactory.mjs +3 -4
- package/plugins/contextMenu/{cursor.mjs → menu/cursor.js} +6 -4
- package/plugins/contextMenu/{cursor.js → menu/cursor.mjs} +4 -10
- package/plugins/contextMenu/menu/defaultShortcutsList.js +88 -0
- package/plugins/contextMenu/menu/defaultShortcutsList.mjs +84 -0
- package/plugins/contextMenu/menu/index.js +9 -0
- package/plugins/contextMenu/menu/index.mjs +1 -0
- package/plugins/contextMenu/{menu.js → menu/menu.js} +145 -421
- package/plugins/contextMenu/{menu.mjs → menu/menu.mjs} +146 -422
- package/plugins/contextMenu/menu/menuItemRenderer.js +70 -0
- package/plugins/contextMenu/menu/menuItemRenderer.mjs +66 -0
- package/plugins/contextMenu/menu/navigator.js +27 -0
- package/plugins/contextMenu/menu/navigator.mjs +23 -0
- package/plugins/contextMenu/menu/positioner.js +213 -0
- package/plugins/contextMenu/menu/positioner.mjs +209 -0
- package/plugins/contextMenu/menu/shortcuts.js +114 -0
- package/plugins/contextMenu/menu/shortcuts.mjs +110 -0
- package/plugins/contextMenu/menu/utils.js +177 -0
- package/plugins/contextMenu/menu/utils.mjs +163 -0
- package/plugins/contextMenu/predefinedItems/alignment.js +10 -4
- package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
- package/plugins/contextMenu/predefinedItems/clearColumn.js +8 -7
- package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/columnLeft.js +8 -7
- package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/columnRight.js +8 -7
- package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/index.js +75 -0
- package/plugins/contextMenu/predefinedItems/index.mjs +68 -0
- package/plugins/contextMenu/predefinedItems/noItems.js +1 -2
- package/plugins/contextMenu/predefinedItems/readOnly.js +10 -4
- package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
- package/plugins/contextMenu/predefinedItems/redo.js +3 -4
- package/plugins/contextMenu/predefinedItems/removeColumn.js +10 -9
- package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/removeRow.js +10 -9
- package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/rowAbove.js +8 -7
- package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/rowBelow.js +8 -7
- package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/separator.js +1 -2
- package/plugins/contextMenu/predefinedItems/undo.js +3 -4
- package/plugins/contextMenu/utils.js +35 -151
- package/plugins/contextMenu/utils.mjs +35 -144
- package/plugins/copyPaste/clipboardData/clipboardData.js +516 -0
- package/plugins/copyPaste/clipboardData/clipboardData.mjs +512 -0
- package/plugins/copyPaste/clipboardData/copyClipboardData.js +69 -0
- package/plugins/copyPaste/clipboardData/copyClipboardData.mjs +65 -0
- package/plugins/copyPaste/clipboardData/index.js +9 -0
- package/plugins/copyPaste/clipboardData/index.mjs +4 -0
- package/plugins/copyPaste/clipboardData/pasteClipboardData.js +81 -0
- package/plugins/copyPaste/clipboardData/pasteClipboardData.mjs +77 -0
- package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
- package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
- package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
- package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
- package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
- package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
- package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
- package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
- package/plugins/copyPaste/contextMenuItem/cut.js +9 -2
- package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
- package/plugins/copyPaste/copyPaste.js +160 -167
- package/plugins/copyPaste/copyPaste.mjs +161 -166
- package/plugins/customBorders/contextMenuItem/bottom.js +2 -2
- package/plugins/customBorders/contextMenuItem/left.js +2 -2
- package/plugins/customBorders/contextMenuItem/noBorders.js +2 -2
- package/plugins/customBorders/contextMenuItem/right.js +2 -2
- package/plugins/customBorders/contextMenuItem/top.js +2 -2
- package/plugins/customBorders/customBorders.js +27 -26
- package/plugins/customBorders/customBorders.mjs +24 -21
- package/plugins/dragToScroll/dragToScroll.js +2 -4
- package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
- package/plugins/dropdownMenu/dropdownMenu.js +130 -44
- package/plugins/dropdownMenu/dropdownMenu.mjs +127 -39
- package/plugins/exportFile/dataProvider.js +1 -2
- package/plugins/exportFile/exportFile.js +4 -6
- package/plugins/exportFile/typeFactory.js +5 -8
- package/plugins/exportFile/types/_base.js +1 -2
- package/plugins/exportFile/types/csv.js +1 -2
- package/plugins/filters/component/_base.js +23 -8
- package/plugins/filters/component/_base.mjs +23 -8
- package/plugins/filters/component/actionBar.js +31 -29
- package/plugins/filters/component/actionBar.mjs +26 -23
- package/plugins/filters/component/condition.js +48 -61
- package/plugins/filters/component/condition.mjs +40 -52
- package/plugins/filters/component/operators.js +21 -22
- package/plugins/filters/component/operators.mjs +18 -18
- package/plugins/filters/component/value.js +37 -28
- package/plugins/filters/component/value.mjs +32 -22
- package/plugins/filters/condition/beginsWith.js +3 -4
- package/plugins/filters/condition/between.js +3 -4
- package/plugins/filters/condition/byValue.js +1 -2
- package/plugins/filters/condition/contains.js +3 -4
- package/plugins/filters/condition/date/after.js +3 -4
- package/plugins/filters/condition/date/before.js +3 -4
- package/plugins/filters/condition/date/today.js +3 -4
- package/plugins/filters/condition/date/tomorrow.js +3 -4
- package/plugins/filters/condition/date/yesterday.js +3 -4
- package/plugins/filters/condition/empty.js +3 -4
- package/plugins/filters/condition/endsWith.js +3 -4
- package/plugins/filters/condition/equal.js +3 -4
- package/plugins/filters/condition/false.js +1 -2
- package/plugins/filters/condition/greaterThan.js +3 -4
- package/plugins/filters/condition/greaterThanOrEqual.js +3 -4
- package/plugins/filters/condition/lessThan.js +3 -4
- package/plugins/filters/condition/lessThanOrEqual.js +3 -4
- package/plugins/filters/condition/none.js +3 -4
- package/plugins/filters/condition/notBetween.js +3 -4
- package/plugins/filters/condition/notContains.js +3 -4
- package/plugins/filters/condition/notEmpty.js +3 -4
- package/plugins/filters/condition/notEqual.js +3 -4
- package/plugins/filters/condition/true.js +1 -2
- package/plugins/filters/conditionCollection.d.ts +3 -2
- package/plugins/filters/conditionCollection.js +1 -2
- package/plugins/filters/conditionRegisterer.js +1 -2
- package/plugins/filters/conditionUpdateObserver.js +1 -2
- package/plugins/filters/constants.js +4 -8
- package/plugins/filters/constants.mjs +1 -1
- package/plugins/filters/dataFilter.js +1 -2
- package/plugins/filters/filters.d.ts +3 -5
- package/plugins/filters/filters.js +118 -67
- package/plugins/filters/filters.mjs +109 -56
- package/plugins/filters/logicalOperationRegisterer.js +1 -2
- package/plugins/filters/logicalOperations/conjunction.js +4 -6
- package/plugins/filters/logicalOperations/disjunction.js +4 -6
- package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +4 -6
- package/plugins/filters/menu/focusController.js +123 -0
- package/plugins/filters/menu/focusController.mjs +119 -0
- package/plugins/filters/menu/focusNavigator.js +30 -0
- package/plugins/filters/menu/focusNavigator.mjs +26 -0
- package/plugins/filters/ui/_base.js +37 -15
- package/plugins/filters/ui/_base.mjs +35 -13
- package/plugins/filters/ui/input.js +43 -35
- package/plugins/filters/ui/input.mjs +42 -33
- package/plugins/filters/ui/link.js +44 -12
- package/plugins/filters/ui/link.mjs +44 -11
- package/plugins/filters/ui/multipleSelect.js +237 -133
- package/plugins/filters/ui/multipleSelect.mjs +232 -127
- package/plugins/filters/ui/radioInput.js +42 -18
- package/plugins/filters/ui/radioInput.mjs +42 -17
- package/plugins/filters/ui/select.js +152 -77
- package/plugins/filters/ui/select.mjs +148 -72
- package/plugins/formulas/engine/settings.js +2 -4
- package/plugins/formulas/formulas.js +3 -6
- package/plugins/formulas/indexSyncer/axisSyncer.js +1 -2
- package/plugins/formulas/indexSyncer/index.js +1 -2
- package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +2 -2
- package/plugins/hiddenColumns/contextMenuItem/showColumn.js +2 -2
- package/plugins/hiddenColumns/hiddenColumns.d.ts +1 -0
- package/plugins/hiddenColumns/hiddenColumns.js +49 -6
- package/plugins/hiddenColumns/hiddenColumns.mjs +48 -3
- package/plugins/hiddenRows/contextMenuItem/hideRow.js +2 -2
- package/plugins/hiddenRows/contextMenuItem/showRow.js +2 -2
- package/plugins/hiddenRows/hiddenRows.d.ts +1 -0
- package/plugins/hiddenRows/hiddenRows.js +49 -6
- package/plugins/hiddenRows/hiddenRows.mjs +48 -3
- package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +2 -2
- package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +2 -2
- package/plugins/manualColumnFreeze/manualColumnFreeze.js +2 -4
- package/plugins/manualColumnMove/manualColumnMove.js +9 -17
- package/plugins/manualColumnMove/manualColumnMove.mjs +7 -13
- package/plugins/manualColumnMove/ui/_base.js +1 -2
- package/plugins/manualColumnMove/ui/backlight.js +1 -2
- package/plugins/manualColumnMove/ui/guideline.js +1 -2
- package/plugins/manualColumnResize/manualColumnResize.js +2 -4
- package/plugins/manualRowMove/manualRowMove.js +6 -23
- package/plugins/manualRowMove/manualRowMove.mjs +4 -19
- package/plugins/manualRowMove/ui/_base.js +1 -2
- package/plugins/manualRowMove/ui/backlight.js +1 -2
- package/plugins/manualRowMove/ui/guideline.js +1 -2
- package/plugins/manualRowResize/manualRowResize.js +2 -4
- package/plugins/mergeCells/calculations/autofill.js +1 -2
- package/plugins/mergeCells/calculations/selection.js +1 -2
- package/plugins/mergeCells/cellCoords.js +1 -2
- package/plugins/mergeCells/cellsCollection.js +1 -2
- package/plugins/mergeCells/contextMenuItem/toggleMerge.js +2 -2
- package/plugins/mergeCells/mergeCells.js +7 -20
- package/plugins/mergeCells/mergeCells.mjs +5 -16
- package/plugins/multiColumnSorting/multiColumnSorting.js +60 -6
- package/plugins/multiColumnSorting/multiColumnSorting.mjs +59 -3
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +2 -4
- package/plugins/nestedHeaders/nestedHeaders.js +263 -36
- package/plugins/nestedHeaders/nestedHeaders.mjs +262 -33
- package/plugins/nestedHeaders/stateManager/index.js +102 -3
- package/plugins/nestedHeaders/stateManager/index.mjs +102 -3
- package/plugins/nestedHeaders/stateManager/sourceSettings.js +1 -2
- package/plugins/nestedHeaders/utils/ghostTable.js +1 -2
- package/plugins/nestedRows/data/dataManager.js +1 -2
- package/plugins/nestedRows/nestedRows.js +47 -10
- package/plugins/nestedRows/nestedRows.mjs +45 -6
- package/plugins/nestedRows/ui/_base.js +1 -2
- package/plugins/nestedRows/ui/collapsing.js +1 -2
- package/plugins/nestedRows/ui/contextMenu.js +3 -4
- package/plugins/nestedRows/ui/headers.js +13 -3
- package/plugins/nestedRows/ui/headers.mjs +13 -2
- package/plugins/persistentState/persistentState.js +2 -4
- package/plugins/persistentState/storage.js +1 -2
- package/plugins/search/search.js +2 -4
- package/plugins/touchScroll/touchScroll.js +2 -4
- package/plugins/trimRows/trimRows.js +2 -4
- package/plugins/undoRedo/index.js +2 -2
- package/plugins/undoRedo/undoRedo.js +2 -4
- package/renderers/autocompleteRenderer/autocompleteRenderer.js +9 -2
- package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +8 -0
- package/renderers/baseRenderer/baseRenderer.js +18 -2
- package/renderers/baseRenderer/baseRenderer.mjs +18 -1
- package/renderers/checkboxRenderer/checkboxRenderer.js +10 -6
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
- package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
- package/renderers/dateRenderer/dateRenderer.js +28 -0
- package/renderers/dateRenderer/dateRenderer.mjs +24 -0
- package/renderers/dateRenderer/index.d.ts +1 -0
- package/renderers/dateRenderer/index.js +6 -0
- package/renderers/dateRenderer/index.mjs +1 -0
- package/renderers/handsontableRenderer/handsontableRenderer.d.ts +5 -0
- package/renderers/handsontableRenderer/handsontableRenderer.js +28 -0
- package/renderers/handsontableRenderer/handsontableRenderer.mjs +24 -0
- package/renderers/handsontableRenderer/index.d.ts +1 -0
- package/renderers/handsontableRenderer/index.js +6 -0
- package/renderers/handsontableRenderer/index.mjs +1 -0
- package/renderers/htmlRenderer/htmlRenderer.js +1 -2
- package/renderers/index.d.ts +9 -0
- package/renderers/numericRenderer/numericRenderer.js +1 -2
- package/renderers/passwordRenderer/passwordRenderer.js +1 -2
- package/renderers/selectRenderer/index.d.ts +1 -0
- package/renderers/selectRenderer/index.js +6 -0
- package/renderers/selectRenderer/index.mjs +1 -0
- package/renderers/selectRenderer/selectRenderer.d.ts +5 -0
- package/renderers/selectRenderer/selectRenderer.js +26 -0
- package/renderers/selectRenderer/selectRenderer.mjs +22 -0
- package/renderers/textRenderer/textRenderer.js +1 -2
- package/renderers/timeRenderer/timeRenderer.js +1 -2
- package/selection/highlight/highlight.js +257 -73
- package/selection/highlight/highlight.mjs +250 -71
- package/selection/highlight/types/activeHeader.js +10 -8
- package/selection/highlight/types/activeHeader.mjs +10 -8
- package/selection/highlight/types/area.js +6 -18
- package/selection/highlight/types/area.mjs +6 -18
- package/selection/highlight/types/areaLayered.js +31 -0
- package/selection/highlight/types/areaLayered.mjs +26 -0
- package/selection/highlight/types/column.js +27 -0
- package/selection/highlight/types/column.mjs +22 -0
- package/selection/highlight/types/customSelection.js +7 -9
- package/selection/highlight/types/customSelection.mjs +7 -9
- package/selection/highlight/types/fill.js +5 -7
- package/selection/highlight/types/fill.mjs +5 -7
- package/selection/highlight/types/{cell.js → focus.js} +5 -7
- package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
- package/selection/highlight/types/header.js +9 -18
- package/selection/highlight/types/header.mjs +9 -18
- package/selection/highlight/types/row.js +27 -0
- package/selection/highlight/types/row.mjs +22 -0
- package/selection/highlight/visualSelection.js +32 -29
- package/selection/highlight/visualSelection.mjs +31 -27
- package/selection/index.js +4 -7
- package/selection/index.mjs +2 -3
- package/selection/mouseEventHandler.js +7 -1
- package/selection/mouseEventHandler.mjs +7 -1
- package/selection/range.js +9 -10
- package/selection/range.mjs +8 -8
- package/selection/selection.js +334 -154
- package/selection/selection.mjs +330 -151
- package/selection/transformation.js +233 -94
- package/selection/transformation.mjs +232 -92
- package/selection/utils.js +20 -31
- package/selection/utils.mjs +16 -21
- package/settings.d.ts +4 -0
- package/shortcutContexts/commands/editor/closeAndSave.js +11 -0
- package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
- package/shortcutContexts/commands/editor/closeWithoutSaving.js +11 -0
- package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
- package/shortcutContexts/commands/editor/fastOpen.js +15 -0
- package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
- package/shortcutContexts/commands/editor/index.js +16 -0
- package/shortcutContexts/commands/editor/index.mjs +12 -0
- package/shortcutContexts/commands/editor/open.js +26 -0
- package/shortcutContexts/commands/editor/open.mjs +23 -0
- package/shortcutContexts/commands/emptySelectedCells.js +10 -0
- package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
- package/shortcutContexts/commands/extendCellsSelection/down.js +14 -0
- package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +24 -0
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +21 -0
- package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
- package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
- package/shortcutContexts/commands/extendCellsSelection/left.js +14 -0
- package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/right.js +14 -0
- package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/toColumns.js +18 -0
- package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +28 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +18 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +18 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +28 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +28 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +28 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toRows.js +18 -0
- package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/up.js +14 -0
- package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +24 -0
- package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +21 -0
- package/shortcutContexts/commands/index.js +35 -0
- package/shortcutContexts/commands/index.mjs +31 -0
- package/shortcutContexts/commands/moveCellSelection/down.js +12 -0
- package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +32 -0
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +29 -0
- package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
- package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +11 -0
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
- package/shortcutContexts/commands/moveCellSelection/inlineStart.js +11 -0
- package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
- package/shortcutContexts/commands/moveCellSelection/left.js +9 -0
- package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
- package/shortcutContexts/commands/moveCellSelection/right.js +9 -0
- package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +16 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +16 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +18 -0
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
- package/shortcutContexts/commands/moveCellSelection/toMostRight.js +20 -0
- package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTop.js +16 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +18 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
- package/shortcutContexts/commands/moveCellSelection/up.js +12 -0
- package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +32 -0
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +29 -0
- package/shortcutContexts/commands/populateSelectedCellsData.js +28 -0
- package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
- package/shortcutContexts/commands/scrollToFocusedCell.js +34 -0
- package/shortcutContexts/commands/scrollToFocusedCell.mjs +31 -0
- package/shortcutContexts/commands/selectAll.js +11 -0
- package/shortcutContexts/commands/selectAll.mjs +8 -0
- package/shortcutContexts/constants.js +11 -0
- package/shortcutContexts/constants.mjs +8 -0
- package/shortcutContexts/editor.js +25 -0
- package/shortcutContexts/editor.mjs +21 -0
- package/shortcutContexts/grid.js +167 -0
- package/shortcutContexts/grid.mjs +163 -0
- package/shortcutContexts/index.js +24 -0
- package/shortcutContexts/index.mjs +11 -0
- package/shortcuts/context.d.ts +1 -0
- package/shortcuts/context.js +23 -4
- package/shortcuts/context.mjs +23 -5
- package/shortcuts/manager.js +31 -7
- package/shortcuts/manager.mjs +32 -7
- package/shortcuts/recorder.js +30 -14
- package/shortcuts/recorder.mjs +30 -14
- package/shortcuts/utils.js +19 -5
- package/shortcuts/utils.mjs +18 -4
- package/tableView.js +113 -16
- package/tableView.mjs +113 -15
- package/utils/dataStructures/linkedList.js +1 -2
- package/utils/dataStructures/priorityMap.js +2 -4
- package/utils/dataStructures/queue.js +1 -2
- package/utils/dataStructures/stack.js +1 -2
- package/utils/dataStructures/tree.js +3 -6
- package/utils/ghostTable.js +32 -17
- package/utils/ghostTable.mjs +31 -15
- package/utils/interval.js +1 -2
- package/utils/paginator.js +151 -0
- package/utils/paginator.mjs +147 -0
- package/utils/parseTable.js +527 -83
- package/utils/parseTable.mjs +523 -82
- package/utils/rootInstance.js +2 -4
- package/utils/samplesGenerator.js +21 -13
- package/utils/samplesGenerator.mjs +20 -11
- package/utils/staticRegister.js +1 -2
- package/validators/autocompleteValidator/autocompleteValidator.js +1 -2
- package/validators/dateValidator/dateValidator.js +1 -2
- package/validators/numericValidator/numericValidator.js +1 -2
- package/validators/timeValidator/timeValidator.js +1 -2
- package/3rdparty/walkontable/src/selection.js +0 -295
- package/3rdparty/walkontable/src/selection.mjs +0 -290
- package/plugins/contextMenu/predefinedItems.js +0 -76
- package/plugins/contextMenu/predefinedItems.mjs +0 -68
- package/plugins/copyPaste/clipboardData.js +0 -18
- package/plugins/copyPaste/clipboardData.mjs +0 -14
- package/plugins/copyPaste/focusableElement.js +0 -186
- package/plugins/copyPaste/focusableElement.mjs +0 -180
- package/plugins/copyPaste/pasteEvent.js +0 -14
- package/plugins/copyPaste/pasteEvent.mjs +0 -9
- package/selection/highlight/constants.js +0 -15
- package/selection/highlight/constants.mjs +0 -6
- package/selection/highlight/types/index.js +0 -35
- package/selection/highlight/types/index.mjs +0 -31
package/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
|
};
|