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.
Files changed (691) hide show
  1. package/3rdparty/walkontable/src/calculator/constants.js +3 -6
  2. package/3rdparty/walkontable/src/calculator/viewportColumns.js +1 -2
  3. package/3rdparty/walkontable/src/calculator/viewportRows.js +1 -2
  4. package/3rdparty/walkontable/src/cell/coords.d.ts +8 -1
  5. package/3rdparty/walkontable/src/cell/coords.js +81 -13
  6. package/3rdparty/walkontable/src/cell/coords.mjs +80 -11
  7. package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
  8. package/3rdparty/walkontable/src/cell/range.js +39 -9
  9. package/3rdparty/walkontable/src/cell/range.mjs +38 -7
  10. package/3rdparty/walkontable/src/core/_base.js +9 -3
  11. package/3rdparty/walkontable/src/core/_base.mjs +9 -3
  12. package/3rdparty/walkontable/src/core/clone.js +2 -2
  13. package/3rdparty/walkontable/src/core/clone.mjs +2 -2
  14. package/3rdparty/walkontable/src/core/core.js +3 -2
  15. package/3rdparty/walkontable/src/core/core.mjs +3 -2
  16. package/3rdparty/walkontable/src/event.js +13 -12
  17. package/3rdparty/walkontable/src/event.mjs +12 -10
  18. package/3rdparty/walkontable/src/facade/core.js +2 -2
  19. package/3rdparty/walkontable/src/facade/core.mjs +2 -2
  20. package/3rdparty/walkontable/src/filter/column.js +1 -2
  21. package/3rdparty/walkontable/src/filter/row.js +1 -2
  22. package/3rdparty/walkontable/src/index.js +12 -4
  23. package/3rdparty/walkontable/src/index.mjs +2 -2
  24. package/3rdparty/walkontable/src/overlay/_base.js +13 -2
  25. package/3rdparty/walkontable/src/overlay/_base.mjs +14 -3
  26. package/3rdparty/walkontable/src/overlay/constants.js +7 -14
  27. package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -6
  28. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -6
  29. package/3rdparty/walkontable/src/overlay/top.js +2 -6
  30. package/3rdparty/walkontable/src/overlay/top.mjs +2 -6
  31. package/3rdparty/walkontable/src/overlays.js +1 -2
  32. package/3rdparty/walkontable/src/renderer/cells.js +10 -0
  33. package/3rdparty/walkontable/src/renderer/cells.mjs +11 -1
  34. package/3rdparty/walkontable/src/renderer/columnHeaders.js +13 -0
  35. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +14 -1
  36. package/3rdparty/walkontable/src/renderer/rowHeaders.js +8 -0
  37. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +8 -0
  38. package/3rdparty/walkontable/src/renderer/rows.js +13 -0
  39. package/3rdparty/walkontable/src/renderer/rows.mjs +13 -0
  40. package/3rdparty/walkontable/src/renderer/table.js +9 -0
  41. package/3rdparty/walkontable/src/renderer/table.mjs +9 -0
  42. package/3rdparty/walkontable/src/scroll.js +3 -2
  43. package/3rdparty/walkontable/src/scroll.mjs +2 -0
  44. package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +8 -14
  45. package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
  46. package/3rdparty/walkontable/src/selection/border/constants.js +15 -0
  47. package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
  48. package/3rdparty/walkontable/src/selection/constants.js +54 -0
  49. package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
  50. package/3rdparty/walkontable/src/selection/index.js +26 -0
  51. package/3rdparty/walkontable/src/selection/index.mjs +5 -0
  52. package/3rdparty/walkontable/src/selection/manager.js +274 -0
  53. package/3rdparty/walkontable/src/selection/manager.mjs +269 -0
  54. package/3rdparty/walkontable/src/selection/scanner.js +270 -0
  55. package/3rdparty/walkontable/src/selection/scanner.mjs +267 -0
  56. package/3rdparty/walkontable/src/selection/selection.js +100 -0
  57. package/3rdparty/walkontable/src/selection/selection.mjs +96 -0
  58. package/3rdparty/walkontable/src/settings.js +13 -4
  59. package/3rdparty/walkontable/src/settings.mjs +13 -4
  60. package/3rdparty/walkontable/src/table/bottom.js +1 -2
  61. package/3rdparty/walkontable/src/table/bottomInlineStartCorner.js +1 -2
  62. package/3rdparty/walkontable/src/table/inlineStart.js +1 -2
  63. package/3rdparty/walkontable/src/table/master.js +3 -6
  64. package/3rdparty/walkontable/src/table/master.mjs +2 -4
  65. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +10 -2
  66. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
  67. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +10 -2
  68. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
  69. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +10 -2
  70. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
  71. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +10 -2
  72. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
  73. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +10 -2
  74. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
  75. package/3rdparty/walkontable/src/table/top.js +1 -2
  76. package/3rdparty/walkontable/src/table/topInlineStartCorner.js +1 -2
  77. package/3rdparty/walkontable/src/table.js +20 -80
  78. package/3rdparty/walkontable/src/table.mjs +20 -79
  79. package/3rdparty/walkontable/src/utils/orderView/constants.js +3 -6
  80. package/3rdparty/walkontable/src/viewport.js +1 -2
  81. package/CHANGELOG.md +51 -0
  82. package/base.js +3 -4
  83. package/base.mjs +2 -2
  84. package/cellTypes/autocompleteType/autocompleteType.js +3 -5
  85. package/cellTypes/checkboxType/checkboxType.js +3 -5
  86. package/cellTypes/dateType/dateType.d.ts +3 -3
  87. package/cellTypes/dateType/dateType.js +5 -7
  88. package/cellTypes/dateType/dateType.mjs +2 -2
  89. package/cellTypes/dropdownType/dropdownType.js +3 -5
  90. package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
  91. package/cellTypes/handsontableType/handsontableType.js +5 -7
  92. package/cellTypes/handsontableType/handsontableType.mjs +2 -2
  93. package/cellTypes/index.d.ts +3 -0
  94. package/cellTypes/index.js +4 -0
  95. package/cellTypes/index.mjs +3 -1
  96. package/cellTypes/numericType/numericType.js +3 -5
  97. package/cellTypes/passwordType/passwordType.js +3 -5
  98. package/cellTypes/selectType/index.d.ts +1 -0
  99. package/cellTypes/selectType/index.js +6 -0
  100. package/cellTypes/selectType/index.mjs +1 -0
  101. package/cellTypes/selectType/selectType.d.ts +14 -0
  102. package/cellTypes/selectType/selectType.js +11 -0
  103. package/cellTypes/selectType/selectType.mjs +8 -0
  104. package/cellTypes/textType/textType.js +3 -5
  105. package/cellTypes/timeType/timeType.js +3 -5
  106. package/common.d.ts +1 -1
  107. package/core/focusCatcher/focusDetector.js +63 -0
  108. package/core/focusCatcher/focusDetector.mjs +59 -0
  109. package/core/focusCatcher/index.js +148 -0
  110. package/core/focusCatcher/index.mjs +144 -0
  111. package/core/index.js +9 -0
  112. package/core/index.mjs +1 -0
  113. package/core.d.ts +10 -5
  114. package/core.js +327 -359
  115. package/core.mjs +327 -359
  116. package/dataMap/dataMap.js +1 -2
  117. package/dataMap/dataSource.js +1 -2
  118. package/dataMap/metaManager/metaSchema.js +65 -0
  119. package/dataMap/metaManager/metaSchema.mjs +65 -0
  120. package/dataMap/metaManager/mods/extendMetaProperties.js +7 -1
  121. package/dataMap/metaManager/mods/extendMetaProperties.mjs +7 -1
  122. package/dataMap/replaceData.js +5 -0
  123. package/dataMap/replaceData.mjs +5 -0
  124. package/dist/handsontable.css +94 -76
  125. package/dist/handsontable.full.css +94 -76
  126. package/dist/handsontable.full.js +23133 -15992
  127. package/dist/handsontable.full.min.css +8 -8
  128. package/dist/handsontable.full.min.js +170 -152
  129. package/dist/handsontable.js +21856 -15085
  130. package/dist/handsontable.min.css +7 -7
  131. package/dist/handsontable.min.js +30 -22
  132. package/dist/languages/all.js +47 -40
  133. package/dist/languages/all.min.js +1 -1
  134. package/dist/languages/ar-AR.js +1 -2
  135. package/dist/languages/cs-CZ.js +1 -2
  136. package/dist/languages/de-CH.js +1 -2
  137. package/dist/languages/de-DE.js +1 -2
  138. package/dist/languages/en-US.js +15 -3
  139. package/dist/languages/en-US.min.js +1 -1
  140. package/dist/languages/es-MX.js +1 -2
  141. package/dist/languages/fr-FR.js +1 -2
  142. package/dist/languages/it-IT.js +1 -2
  143. package/dist/languages/ja-JP.js +1 -2
  144. package/dist/languages/ko-KR.js +1 -2
  145. package/dist/languages/lv-LV.js +1 -2
  146. package/dist/languages/nb-NO.js +1 -2
  147. package/dist/languages/nl-NL.js +1 -2
  148. package/dist/languages/pl-PL.js +15 -3
  149. package/dist/languages/pl-PL.min.js +1 -1
  150. package/dist/languages/pt-BR.js +1 -2
  151. package/dist/languages/ru-RU.js +1 -2
  152. package/dist/languages/sr-SP.js +1 -2
  153. package/dist/languages/zh-CN.js +1 -2
  154. package/dist/languages/zh-TW.js +1 -2
  155. package/editorManager.js +17 -91
  156. package/editorManager.mjs +16 -87
  157. package/editors/autocompleteEditor/autocompleteEditor.js +65 -11
  158. package/editors/autocompleteEditor/autocompleteEditor.mjs +65 -10
  159. package/editors/baseEditor/baseEditor.js +19 -13
  160. package/editors/baseEditor/baseEditor.mjs +16 -7
  161. package/editors/checkboxEditor/checkboxEditor.js +1 -2
  162. package/editors/dateEditor/dateEditor.js +27 -9
  163. package/editors/dateEditor/dateEditor.mjs +27 -8
  164. package/editors/dropdownEditor/dropdownEditor.js +1 -2
  165. package/editors/handsontableEditor/handsontableEditor.js +14 -7
  166. package/editors/handsontableEditor/handsontableEditor.mjs +14 -6
  167. package/editors/numericEditor/numericEditor.js +1 -2
  168. package/editors/passwordEditor/passwordEditor.js +1 -2
  169. package/editors/selectEditor/selectEditor.js +1 -2
  170. package/editors/textEditor/textEditor.js +20 -29
  171. package/editors/textEditor/textEditor.mjs +22 -30
  172. package/editors/timeEditor/timeEditor.js +1 -2
  173. package/eventManager.js +1 -2
  174. package/focusManager.d.ts +12 -0
  175. package/focusManager.js +265 -0
  176. package/focusManager.mjs +261 -0
  177. package/helpers/a11y.js +81 -0
  178. package/helpers/a11y.mjs +39 -0
  179. package/helpers/dom/element.js +224 -12
  180. package/helpers/dom/element.mjs +216 -10
  181. package/helpers/dom/event.d.ts +1 -0
  182. package/helpers/dom/event.js +25 -0
  183. package/helpers/dom/event.mjs +24 -0
  184. package/helpers/mixed.js +2 -2
  185. package/helpers/mixed.mjs +2 -2
  186. package/helpers/number.d.ts +1 -0
  187. package/helpers/number.js +18 -0
  188. package/helpers/number.mjs +17 -0
  189. package/helpers/unicode.js +1 -2
  190. package/i18n/constants.js +97 -160
  191. package/i18n/constants.mjs +17 -1
  192. package/i18n/languages/ar-AR.js +3 -4
  193. package/i18n/languages/cs-CZ.js +3 -4
  194. package/i18n/languages/de-CH.js +3 -4
  195. package/i18n/languages/de-DE.js +3 -4
  196. package/i18n/languages/en-US.js +17 -5
  197. package/i18n/languages/en-US.mjs +14 -1
  198. package/i18n/languages/es-MX.js +3 -4
  199. package/i18n/languages/fr-FR.js +3 -4
  200. package/i18n/languages/it-IT.js +3 -4
  201. package/i18n/languages/ja-JP.js +3 -4
  202. package/i18n/languages/ko-KR.js +3 -4
  203. package/i18n/languages/lv-LV.js +3 -4
  204. package/i18n/languages/nb-NO.js +3 -4
  205. package/i18n/languages/nl-NL.js +3 -4
  206. package/i18n/languages/pl-PL.js +17 -5
  207. package/i18n/languages/pl-PL.mjs +14 -1
  208. package/i18n/languages/pt-BR.js +3 -4
  209. package/i18n/languages/ru-RU.js +3 -4
  210. package/i18n/languages/sr-SP.js +3 -4
  211. package/i18n/languages/zh-CN.js +3 -4
  212. package/i18n/languages/zh-TW.js +3 -4
  213. package/i18n/registry.js +4 -6
  214. package/index.js +3 -4
  215. package/languages/all.js +47 -40
  216. package/languages/ar-AR.js +1 -2
  217. package/languages/cs-CZ.js +1 -2
  218. package/languages/de-CH.js +1 -2
  219. package/languages/de-DE.js +1 -2
  220. package/languages/en-US.js +15 -3
  221. package/languages/en-US.mjs +14 -1
  222. package/languages/es-MX.js +1 -2
  223. package/languages/fr-FR.js +1 -2
  224. package/languages/index.js +47 -40
  225. package/languages/it-IT.js +1 -2
  226. package/languages/ja-JP.js +1 -2
  227. package/languages/ko-KR.js +1 -2
  228. package/languages/lv-LV.js +1 -2
  229. package/languages/nb-NO.js +1 -2
  230. package/languages/nl-NL.js +1 -2
  231. package/languages/pl-PL.js +15 -3
  232. package/languages/pl-PL.mjs +14 -1
  233. package/languages/pt-BR.js +1 -2
  234. package/languages/ru-RU.js +1 -2
  235. package/languages/sr-SP.js +1 -2
  236. package/languages/zh-CN.js +1 -2
  237. package/languages/zh-TW.js +1 -2
  238. package/mixins/hooksRefRegisterer.js +1 -2
  239. package/mixins/localHooks.js +1 -2
  240. package/package.json +119 -96
  241. package/pluginHooks.d.ts +42 -7
  242. package/pluginHooks.js +301 -65
  243. package/pluginHooks.mjs +300 -63
  244. package/plugins/autoColumnSize/autoColumnSize.d.ts +2 -0
  245. package/plugins/autoColumnSize/autoColumnSize.js +2 -4
  246. package/plugins/autoRowSize/autoRowSize.d.ts +2 -0
  247. package/plugins/autoRowSize/autoRowSize.js +15 -10
  248. package/plugins/autoRowSize/autoRowSize.mjs +13 -6
  249. package/plugins/autofill/autofill.js +2 -4
  250. package/plugins/autofill/utils.js +1 -2
  251. package/plugins/base/base.js +1 -2
  252. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +2 -4
  253. package/plugins/bindRowsWithHeaders/maps/looseBindsMap.js +1 -2
  254. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.js +1 -2
  255. package/plugins/collapsibleColumns/collapsibleColumns.js +77 -8
  256. package/plugins/collapsibleColumns/collapsibleColumns.mjs +76 -5
  257. package/plugins/columnSorting/columnSorting.js +71 -6
  258. package/plugins/columnSorting/columnSorting.mjs +70 -3
  259. package/plugins/columnSorting/index.js +3 -1
  260. package/plugins/columnSorting/index.mjs +1 -1
  261. package/plugins/columnSorting/sortFunction/checkbox.js +1 -2
  262. package/plugins/columnSorting/sortFunction/date.js +1 -2
  263. package/plugins/columnSorting/sortFunction/default.js +1 -2
  264. package/plugins/columnSorting/sortFunction/numeric.js +1 -2
  265. package/plugins/columnSorting/sortService/engine.js +3 -6
  266. package/plugins/columnSorting/utils.js +3 -6
  267. package/plugins/columnSummary/columnSummary.js +2 -4
  268. package/plugins/columnSummary/endpoints.js +1 -2
  269. package/plugins/comments/commentEditor.js +2 -2
  270. package/plugins/comments/commentEditor.mjs +1 -0
  271. package/plugins/comments/comments.js +254 -197
  272. package/plugins/comments/comments.mjs +251 -190
  273. package/plugins/comments/contextMenuItem/addEditComment.js +41 -0
  274. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  275. package/plugins/comments/contextMenuItem/readOnlyComment.js +49 -0
  276. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +43 -0
  277. package/plugins/comments/contextMenuItem/removeComment.js +38 -0
  278. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  279. package/plugins/comments/displaySwitch.js +1 -2
  280. package/plugins/contextMenu/commandExecutor.js +2 -3
  281. package/plugins/contextMenu/commandExecutor.mjs +2 -3
  282. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  283. package/plugins/contextMenu/contextMenu.js +77 -40
  284. package/plugins/contextMenu/contextMenu.mjs +74 -35
  285. package/plugins/contextMenu/itemsFactory.js +2 -3
  286. package/plugins/contextMenu/itemsFactory.mjs +3 -4
  287. package/plugins/contextMenu/{cursor.mjs → menu/cursor.js} +6 -4
  288. package/plugins/contextMenu/{cursor.js → menu/cursor.mjs} +4 -10
  289. package/plugins/contextMenu/menu/defaultShortcutsList.js +88 -0
  290. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +84 -0
  291. package/plugins/contextMenu/menu/index.js +9 -0
  292. package/plugins/contextMenu/menu/index.mjs +1 -0
  293. package/plugins/contextMenu/{menu.js → menu/menu.js} +145 -421
  294. package/plugins/contextMenu/{menu.mjs → menu/menu.mjs} +146 -422
  295. package/plugins/contextMenu/menu/menuItemRenderer.js +70 -0
  296. package/plugins/contextMenu/menu/menuItemRenderer.mjs +66 -0
  297. package/plugins/contextMenu/menu/navigator.js +27 -0
  298. package/plugins/contextMenu/menu/navigator.mjs +23 -0
  299. package/plugins/contextMenu/menu/positioner.js +213 -0
  300. package/plugins/contextMenu/menu/positioner.mjs +209 -0
  301. package/plugins/contextMenu/menu/shortcuts.js +114 -0
  302. package/plugins/contextMenu/menu/shortcuts.mjs +110 -0
  303. package/plugins/contextMenu/menu/utils.js +177 -0
  304. package/plugins/contextMenu/menu/utils.mjs +163 -0
  305. package/plugins/contextMenu/predefinedItems/alignment.js +10 -4
  306. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  307. package/plugins/contextMenu/predefinedItems/clearColumn.js +8 -7
  308. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  309. package/plugins/contextMenu/predefinedItems/columnLeft.js +8 -7
  310. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  311. package/plugins/contextMenu/predefinedItems/columnRight.js +8 -7
  312. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  313. package/plugins/contextMenu/predefinedItems/index.js +75 -0
  314. package/plugins/contextMenu/predefinedItems/index.mjs +68 -0
  315. package/plugins/contextMenu/predefinedItems/noItems.js +1 -2
  316. package/plugins/contextMenu/predefinedItems/readOnly.js +10 -4
  317. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  318. package/plugins/contextMenu/predefinedItems/redo.js +3 -4
  319. package/plugins/contextMenu/predefinedItems/removeColumn.js +10 -9
  320. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  321. package/plugins/contextMenu/predefinedItems/removeRow.js +10 -9
  322. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  323. package/plugins/contextMenu/predefinedItems/rowAbove.js +8 -7
  324. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  325. package/plugins/contextMenu/predefinedItems/rowBelow.js +8 -7
  326. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  327. package/plugins/contextMenu/predefinedItems/separator.js +1 -2
  328. package/plugins/contextMenu/predefinedItems/undo.js +3 -4
  329. package/plugins/contextMenu/utils.js +35 -151
  330. package/plugins/contextMenu/utils.mjs +35 -144
  331. package/plugins/copyPaste/clipboardData/clipboardData.js +516 -0
  332. package/plugins/copyPaste/clipboardData/clipboardData.mjs +512 -0
  333. package/plugins/copyPaste/clipboardData/copyClipboardData.js +69 -0
  334. package/plugins/copyPaste/clipboardData/copyClipboardData.mjs +65 -0
  335. package/plugins/copyPaste/clipboardData/index.js +9 -0
  336. package/plugins/copyPaste/clipboardData/index.mjs +4 -0
  337. package/plugins/copyPaste/clipboardData/pasteClipboardData.js +81 -0
  338. package/plugins/copyPaste/clipboardData/pasteClipboardData.mjs +77 -0
  339. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  340. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  341. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  342. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  343. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  344. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  345. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  346. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  347. package/plugins/copyPaste/contextMenuItem/cut.js +9 -2
  348. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  349. package/plugins/copyPaste/copyPaste.js +160 -167
  350. package/plugins/copyPaste/copyPaste.mjs +161 -166
  351. package/plugins/customBorders/contextMenuItem/bottom.js +2 -2
  352. package/plugins/customBorders/contextMenuItem/left.js +2 -2
  353. package/plugins/customBorders/contextMenuItem/noBorders.js +2 -2
  354. package/plugins/customBorders/contextMenuItem/right.js +2 -2
  355. package/plugins/customBorders/contextMenuItem/top.js +2 -2
  356. package/plugins/customBorders/customBorders.js +27 -26
  357. package/plugins/customBorders/customBorders.mjs +24 -21
  358. package/plugins/dragToScroll/dragToScroll.js +2 -4
  359. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  360. package/plugins/dropdownMenu/dropdownMenu.js +130 -44
  361. package/plugins/dropdownMenu/dropdownMenu.mjs +127 -39
  362. package/plugins/exportFile/dataProvider.js +1 -2
  363. package/plugins/exportFile/exportFile.js +4 -6
  364. package/plugins/exportFile/typeFactory.js +5 -8
  365. package/plugins/exportFile/types/_base.js +1 -2
  366. package/plugins/exportFile/types/csv.js +1 -2
  367. package/plugins/filters/component/_base.js +23 -8
  368. package/plugins/filters/component/_base.mjs +23 -8
  369. package/plugins/filters/component/actionBar.js +31 -29
  370. package/plugins/filters/component/actionBar.mjs +26 -23
  371. package/plugins/filters/component/condition.js +48 -61
  372. package/plugins/filters/component/condition.mjs +40 -52
  373. package/plugins/filters/component/operators.js +21 -22
  374. package/plugins/filters/component/operators.mjs +18 -18
  375. package/plugins/filters/component/value.js +37 -28
  376. package/plugins/filters/component/value.mjs +32 -22
  377. package/plugins/filters/condition/beginsWith.js +3 -4
  378. package/plugins/filters/condition/between.js +3 -4
  379. package/plugins/filters/condition/byValue.js +1 -2
  380. package/plugins/filters/condition/contains.js +3 -4
  381. package/plugins/filters/condition/date/after.js +3 -4
  382. package/plugins/filters/condition/date/before.js +3 -4
  383. package/plugins/filters/condition/date/today.js +3 -4
  384. package/plugins/filters/condition/date/tomorrow.js +3 -4
  385. package/plugins/filters/condition/date/yesterday.js +3 -4
  386. package/plugins/filters/condition/empty.js +3 -4
  387. package/plugins/filters/condition/endsWith.js +3 -4
  388. package/plugins/filters/condition/equal.js +3 -4
  389. package/plugins/filters/condition/false.js +1 -2
  390. package/plugins/filters/condition/greaterThan.js +3 -4
  391. package/plugins/filters/condition/greaterThanOrEqual.js +3 -4
  392. package/plugins/filters/condition/lessThan.js +3 -4
  393. package/plugins/filters/condition/lessThanOrEqual.js +3 -4
  394. package/plugins/filters/condition/none.js +3 -4
  395. package/plugins/filters/condition/notBetween.js +3 -4
  396. package/plugins/filters/condition/notContains.js +3 -4
  397. package/plugins/filters/condition/notEmpty.js +3 -4
  398. package/plugins/filters/condition/notEqual.js +3 -4
  399. package/plugins/filters/condition/true.js +1 -2
  400. package/plugins/filters/conditionCollection.d.ts +3 -2
  401. package/plugins/filters/conditionCollection.js +1 -2
  402. package/plugins/filters/conditionRegisterer.js +1 -2
  403. package/plugins/filters/conditionUpdateObserver.js +1 -2
  404. package/plugins/filters/constants.js +4 -8
  405. package/plugins/filters/constants.mjs +1 -1
  406. package/plugins/filters/dataFilter.js +1 -2
  407. package/plugins/filters/filters.d.ts +3 -5
  408. package/plugins/filters/filters.js +118 -67
  409. package/plugins/filters/filters.mjs +109 -56
  410. package/plugins/filters/logicalOperationRegisterer.js +1 -2
  411. package/plugins/filters/logicalOperations/conjunction.js +4 -6
  412. package/plugins/filters/logicalOperations/disjunction.js +4 -6
  413. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +4 -6
  414. package/plugins/filters/menu/focusController.js +123 -0
  415. package/plugins/filters/menu/focusController.mjs +119 -0
  416. package/plugins/filters/menu/focusNavigator.js +30 -0
  417. package/plugins/filters/menu/focusNavigator.mjs +26 -0
  418. package/plugins/filters/ui/_base.js +37 -15
  419. package/plugins/filters/ui/_base.mjs +35 -13
  420. package/plugins/filters/ui/input.js +43 -35
  421. package/plugins/filters/ui/input.mjs +42 -33
  422. package/plugins/filters/ui/link.js +44 -12
  423. package/plugins/filters/ui/link.mjs +44 -11
  424. package/plugins/filters/ui/multipleSelect.js +237 -133
  425. package/plugins/filters/ui/multipleSelect.mjs +232 -127
  426. package/plugins/filters/ui/radioInput.js +42 -18
  427. package/plugins/filters/ui/radioInput.mjs +42 -17
  428. package/plugins/filters/ui/select.js +152 -77
  429. package/plugins/filters/ui/select.mjs +148 -72
  430. package/plugins/formulas/engine/settings.js +2 -4
  431. package/plugins/formulas/formulas.js +3 -6
  432. package/plugins/formulas/indexSyncer/axisSyncer.js +1 -2
  433. package/plugins/formulas/indexSyncer/index.js +1 -2
  434. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +2 -2
  435. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +2 -2
  436. package/plugins/hiddenColumns/hiddenColumns.d.ts +1 -0
  437. package/plugins/hiddenColumns/hiddenColumns.js +49 -6
  438. package/plugins/hiddenColumns/hiddenColumns.mjs +48 -3
  439. package/plugins/hiddenRows/contextMenuItem/hideRow.js +2 -2
  440. package/plugins/hiddenRows/contextMenuItem/showRow.js +2 -2
  441. package/plugins/hiddenRows/hiddenRows.d.ts +1 -0
  442. package/plugins/hiddenRows/hiddenRows.js +49 -6
  443. package/plugins/hiddenRows/hiddenRows.mjs +48 -3
  444. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +2 -2
  445. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +2 -2
  446. package/plugins/manualColumnFreeze/manualColumnFreeze.js +2 -4
  447. package/plugins/manualColumnMove/manualColumnMove.js +9 -17
  448. package/plugins/manualColumnMove/manualColumnMove.mjs +7 -13
  449. package/plugins/manualColumnMove/ui/_base.js +1 -2
  450. package/plugins/manualColumnMove/ui/backlight.js +1 -2
  451. package/plugins/manualColumnMove/ui/guideline.js +1 -2
  452. package/plugins/manualColumnResize/manualColumnResize.js +2 -4
  453. package/plugins/manualRowMove/manualRowMove.js +6 -23
  454. package/plugins/manualRowMove/manualRowMove.mjs +4 -19
  455. package/plugins/manualRowMove/ui/_base.js +1 -2
  456. package/plugins/manualRowMove/ui/backlight.js +1 -2
  457. package/plugins/manualRowMove/ui/guideline.js +1 -2
  458. package/plugins/manualRowResize/manualRowResize.js +2 -4
  459. package/plugins/mergeCells/calculations/autofill.js +1 -2
  460. package/plugins/mergeCells/calculations/selection.js +1 -2
  461. package/plugins/mergeCells/cellCoords.js +1 -2
  462. package/plugins/mergeCells/cellsCollection.js +1 -2
  463. package/plugins/mergeCells/contextMenuItem/toggleMerge.js +2 -2
  464. package/plugins/mergeCells/mergeCells.js +7 -20
  465. package/plugins/mergeCells/mergeCells.mjs +5 -16
  466. package/plugins/multiColumnSorting/multiColumnSorting.js +60 -6
  467. package/plugins/multiColumnSorting/multiColumnSorting.mjs +59 -3
  468. package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +2 -4
  469. package/plugins/nestedHeaders/nestedHeaders.js +263 -36
  470. package/plugins/nestedHeaders/nestedHeaders.mjs +262 -33
  471. package/plugins/nestedHeaders/stateManager/index.js +102 -3
  472. package/plugins/nestedHeaders/stateManager/index.mjs +102 -3
  473. package/plugins/nestedHeaders/stateManager/sourceSettings.js +1 -2
  474. package/plugins/nestedHeaders/utils/ghostTable.js +1 -2
  475. package/plugins/nestedRows/data/dataManager.js +1 -2
  476. package/plugins/nestedRows/nestedRows.js +47 -10
  477. package/plugins/nestedRows/nestedRows.mjs +45 -6
  478. package/plugins/nestedRows/ui/_base.js +1 -2
  479. package/plugins/nestedRows/ui/collapsing.js +1 -2
  480. package/plugins/nestedRows/ui/contextMenu.js +3 -4
  481. package/plugins/nestedRows/ui/headers.js +13 -3
  482. package/plugins/nestedRows/ui/headers.mjs +13 -2
  483. package/plugins/persistentState/persistentState.js +2 -4
  484. package/plugins/persistentState/storage.js +1 -2
  485. package/plugins/search/search.js +2 -4
  486. package/plugins/touchScroll/touchScroll.js +2 -4
  487. package/plugins/trimRows/trimRows.js +2 -4
  488. package/plugins/undoRedo/index.js +2 -2
  489. package/plugins/undoRedo/undoRedo.js +2 -4
  490. package/renderers/autocompleteRenderer/autocompleteRenderer.js +9 -2
  491. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +8 -0
  492. package/renderers/baseRenderer/baseRenderer.js +18 -2
  493. package/renderers/baseRenderer/baseRenderer.mjs +18 -1
  494. package/renderers/checkboxRenderer/checkboxRenderer.js +10 -6
  495. package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
  496. package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
  497. package/renderers/dateRenderer/dateRenderer.js +28 -0
  498. package/renderers/dateRenderer/dateRenderer.mjs +24 -0
  499. package/renderers/dateRenderer/index.d.ts +1 -0
  500. package/renderers/dateRenderer/index.js +6 -0
  501. package/renderers/dateRenderer/index.mjs +1 -0
  502. package/renderers/handsontableRenderer/handsontableRenderer.d.ts +5 -0
  503. package/renderers/handsontableRenderer/handsontableRenderer.js +28 -0
  504. package/renderers/handsontableRenderer/handsontableRenderer.mjs +24 -0
  505. package/renderers/handsontableRenderer/index.d.ts +1 -0
  506. package/renderers/handsontableRenderer/index.js +6 -0
  507. package/renderers/handsontableRenderer/index.mjs +1 -0
  508. package/renderers/htmlRenderer/htmlRenderer.js +1 -2
  509. package/renderers/index.d.ts +9 -0
  510. package/renderers/numericRenderer/numericRenderer.js +1 -2
  511. package/renderers/passwordRenderer/passwordRenderer.js +1 -2
  512. package/renderers/selectRenderer/index.d.ts +1 -0
  513. package/renderers/selectRenderer/index.js +6 -0
  514. package/renderers/selectRenderer/index.mjs +1 -0
  515. package/renderers/selectRenderer/selectRenderer.d.ts +5 -0
  516. package/renderers/selectRenderer/selectRenderer.js +26 -0
  517. package/renderers/selectRenderer/selectRenderer.mjs +22 -0
  518. package/renderers/textRenderer/textRenderer.js +1 -2
  519. package/renderers/timeRenderer/timeRenderer.js +1 -2
  520. package/selection/highlight/highlight.js +257 -73
  521. package/selection/highlight/highlight.mjs +250 -71
  522. package/selection/highlight/types/activeHeader.js +10 -8
  523. package/selection/highlight/types/activeHeader.mjs +10 -8
  524. package/selection/highlight/types/area.js +6 -18
  525. package/selection/highlight/types/area.mjs +6 -18
  526. package/selection/highlight/types/areaLayered.js +31 -0
  527. package/selection/highlight/types/areaLayered.mjs +26 -0
  528. package/selection/highlight/types/column.js +27 -0
  529. package/selection/highlight/types/column.mjs +22 -0
  530. package/selection/highlight/types/customSelection.js +7 -9
  531. package/selection/highlight/types/customSelection.mjs +7 -9
  532. package/selection/highlight/types/fill.js +5 -7
  533. package/selection/highlight/types/fill.mjs +5 -7
  534. package/selection/highlight/types/{cell.js → focus.js} +5 -7
  535. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  536. package/selection/highlight/types/header.js +9 -18
  537. package/selection/highlight/types/header.mjs +9 -18
  538. package/selection/highlight/types/row.js +27 -0
  539. package/selection/highlight/types/row.mjs +22 -0
  540. package/selection/highlight/visualSelection.js +32 -29
  541. package/selection/highlight/visualSelection.mjs +31 -27
  542. package/selection/index.js +4 -7
  543. package/selection/index.mjs +2 -3
  544. package/selection/mouseEventHandler.js +7 -1
  545. package/selection/mouseEventHandler.mjs +7 -1
  546. package/selection/range.js +9 -10
  547. package/selection/range.mjs +8 -8
  548. package/selection/selection.js +334 -154
  549. package/selection/selection.mjs +330 -151
  550. package/selection/transformation.js +233 -94
  551. package/selection/transformation.mjs +232 -92
  552. package/selection/utils.js +20 -31
  553. package/selection/utils.mjs +16 -21
  554. package/settings.d.ts +4 -0
  555. package/shortcutContexts/commands/editor/closeAndSave.js +11 -0
  556. package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
  557. package/shortcutContexts/commands/editor/closeWithoutSaving.js +11 -0
  558. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  559. package/shortcutContexts/commands/editor/fastOpen.js +15 -0
  560. package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
  561. package/shortcutContexts/commands/editor/index.js +16 -0
  562. package/shortcutContexts/commands/editor/index.mjs +12 -0
  563. package/shortcutContexts/commands/editor/open.js +26 -0
  564. package/shortcutContexts/commands/editor/open.mjs +23 -0
  565. package/shortcutContexts/commands/emptySelectedCells.js +10 -0
  566. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  567. package/shortcutContexts/commands/extendCellsSelection/down.js +14 -0
  568. package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
  569. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +24 -0
  570. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +21 -0
  571. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  572. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  573. package/shortcutContexts/commands/extendCellsSelection/left.js +14 -0
  574. package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
  575. package/shortcutContexts/commands/extendCellsSelection/right.js +14 -0
  576. package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
  577. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +18 -0
  578. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
  579. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +28 -0
  580. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
  581. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +18 -0
  582. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
  583. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +18 -0
  584. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
  585. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +28 -0
  586. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
  587. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +28 -0
  588. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
  589. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +28 -0
  590. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
  591. package/shortcutContexts/commands/extendCellsSelection/toRows.js +18 -0
  592. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
  593. package/shortcutContexts/commands/extendCellsSelection/up.js +14 -0
  594. package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
  595. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +24 -0
  596. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +21 -0
  597. package/shortcutContexts/commands/index.js +35 -0
  598. package/shortcutContexts/commands/index.mjs +31 -0
  599. package/shortcutContexts/commands/moveCellSelection/down.js +12 -0
  600. package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
  601. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +32 -0
  602. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +29 -0
  603. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  604. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  605. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +11 -0
  606. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  607. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +11 -0
  608. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  609. package/shortcutContexts/commands/moveCellSelection/left.js +9 -0
  610. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  611. package/shortcutContexts/commands/moveCellSelection/right.js +9 -0
  612. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  613. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +16 -0
  614. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
  615. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +17 -0
  616. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
  617. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +13 -0
  618. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
  619. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +16 -0
  620. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
  621. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +18 -0
  622. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
  623. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +20 -0
  624. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
  625. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +16 -0
  626. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
  627. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +18 -0
  628. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
  629. package/shortcutContexts/commands/moveCellSelection/up.js +12 -0
  630. package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
  631. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +32 -0
  632. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +29 -0
  633. package/shortcutContexts/commands/populateSelectedCellsData.js +28 -0
  634. package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
  635. package/shortcutContexts/commands/scrollToFocusedCell.js +34 -0
  636. package/shortcutContexts/commands/scrollToFocusedCell.mjs +31 -0
  637. package/shortcutContexts/commands/selectAll.js +11 -0
  638. package/shortcutContexts/commands/selectAll.mjs +8 -0
  639. package/shortcutContexts/constants.js +11 -0
  640. package/shortcutContexts/constants.mjs +8 -0
  641. package/shortcutContexts/editor.js +25 -0
  642. package/shortcutContexts/editor.mjs +21 -0
  643. package/shortcutContexts/grid.js +167 -0
  644. package/shortcutContexts/grid.mjs +163 -0
  645. package/shortcutContexts/index.js +24 -0
  646. package/shortcutContexts/index.mjs +11 -0
  647. package/shortcuts/context.d.ts +1 -0
  648. package/shortcuts/context.js +23 -4
  649. package/shortcuts/context.mjs +23 -5
  650. package/shortcuts/manager.js +31 -7
  651. package/shortcuts/manager.mjs +32 -7
  652. package/shortcuts/recorder.js +30 -14
  653. package/shortcuts/recorder.mjs +30 -14
  654. package/shortcuts/utils.js +19 -5
  655. package/shortcuts/utils.mjs +18 -4
  656. package/tableView.js +113 -16
  657. package/tableView.mjs +113 -15
  658. package/utils/dataStructures/linkedList.js +1 -2
  659. package/utils/dataStructures/priorityMap.js +2 -4
  660. package/utils/dataStructures/queue.js +1 -2
  661. package/utils/dataStructures/stack.js +1 -2
  662. package/utils/dataStructures/tree.js +3 -6
  663. package/utils/ghostTable.js +32 -17
  664. package/utils/ghostTable.mjs +31 -15
  665. package/utils/interval.js +1 -2
  666. package/utils/paginator.js +151 -0
  667. package/utils/paginator.mjs +147 -0
  668. package/utils/parseTable.js +527 -83
  669. package/utils/parseTable.mjs +523 -82
  670. package/utils/rootInstance.js +2 -4
  671. package/utils/samplesGenerator.js +21 -13
  672. package/utils/samplesGenerator.mjs +20 -11
  673. package/utils/staticRegister.js +1 -2
  674. package/validators/autocompleteValidator/autocompleteValidator.js +1 -2
  675. package/validators/dateValidator/dateValidator.js +1 -2
  676. package/validators/numericValidator/numericValidator.js +1 -2
  677. package/validators/timeValidator/timeValidator.js +1 -2
  678. package/3rdparty/walkontable/src/selection.js +0 -295
  679. package/3rdparty/walkontable/src/selection.mjs +0 -290
  680. package/plugins/contextMenu/predefinedItems.js +0 -76
  681. package/plugins/contextMenu/predefinedItems.mjs +0 -68
  682. package/plugins/copyPaste/clipboardData.js +0 -18
  683. package/plugins/copyPaste/clipboardData.mjs +0 -14
  684. package/plugins/copyPaste/focusableElement.js +0 -186
  685. package/plugins/copyPaste/focusableElement.mjs +0 -180
  686. package/plugins/copyPaste/pasteEvent.js +0 -14
  687. package/plugins/copyPaste/pasteEvent.mjs +0 -9
  688. package/selection/highlight/constants.js +0 -15
  689. package/selection/highlight/constants.mjs +0 -6
  690. package/selection/highlight/types/index.js +0 -35
  691. package/selection/highlight/types/index.mjs +0 -31
@@ -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=true] If set to `true`: stops the event's propagation
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=true] If set to `true`: stops the event's propagation
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,
@@ -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=true] If set to `true`: stops the event's propagation
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=true] If set to `true`: stops the event's propagation
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,
@@ -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
- * Internal key recorder.
106
+ * A callback function for listening events from the recorder.
101
107
  *
102
- * @private
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 keyRecorder = (0, _recorder.useRecorder)(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, (event, keys) => {
105
- const activeContext = getContext(getActiveContextName());
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,
@@ -1,6 +1,9 @@
1
+ import "core-js/modules/es.error.cause.js";
1
2
  import { createUniqueMap } from "../utils/dataStructures/uniqueMap.mjs";
2
- import { createContext } from "./context.mjs";
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
- * Internal key recorder.
103
+ * A callback function for listening events from the recorder.
97
104
  *
98
- * @private
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 keyRecorder = useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, (event, keys) => {
101
- const activeContext = getContext(getActiveContextName());
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,
@@ -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.key);
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 onkeyup = event => {
112
- if (handleEvent(event) === false) {
113
- return;
110
+ const onkeydownForModKeys = event => {
111
+ const pressedKey = (0, _utils.normalizeEventKey)(event);
112
+ if (isModifierKey(pressedKey)) {
113
+ modifierKeysObserver.press(pressedKey);
114
114
  }
115
- const pressedKey = (0, _utils.normalizeEventKey)(event.key);
116
- if (isModifierKey(pressedKey) === false) {
117
- return;
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
  }
@@ -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.key);
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 onkeyup = event => {
108
- if (handleEvent(event) === false) {
109
- return;
106
+ const onkeydownForModKeys = event => {
107
+ const pressedKey = normalizeEventKey(event);
108
+ if (isModifierKey(pressedKey)) {
109
+ modifierKeysObserver.press(pressedKey);
110
110
  }
111
- const pressedKey = normalizeEventKey(event.key);
112
- if (isModifierKey(pressedKey) === false) {
113
- return;
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
  }
@@ -37,13 +37,27 @@ const getKeysList = normalizedKeys => {
37
37
  };
38
38
 
39
39
  /**
40
- * Normalize a `KeyboardEvent.key` property, to use it for keyboard shortcuts.
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 {string} key KeyboardEvent's key property.
53
+ * @param {Event} event The KeyboardEvent object.
43
54
  * @returns {string}
44
55
  */
45
- exports.getKeysList = getKeysList;
46
- const normalizeEventKey = key => {
47
- return key.toLowerCase();
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;
@@ -33,11 +33,25 @@ export const getKeysList = normalizedKeys => {
33
33
  };
34
34
 
35
35
  /**
36
- * Normalize a `KeyboardEvent.key` property, to use it for keyboard shortcuts.
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 {string} key KeyboardEvent's key property.
48
+ * @param {Event} event The KeyboardEvent object.
39
49
  * @returns {string}
40
50
  */
41
- export const normalizeEventKey = key => {
42
- return key.toLowerCase();
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
  };