handsontable 11.0.0 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (633) hide show
  1. package/3rdparty/walkontable/src/border.js +121 -99
  2. package/3rdparty/walkontable/src/border.mjs +122 -96
  3. package/3rdparty/walkontable/src/calculator/viewportColumns.js +1 -1
  4. package/3rdparty/walkontable/src/calculator/viewportColumns.mjs +1 -1
  5. package/3rdparty/walkontable/src/calculator/viewportRows.js +1 -1
  6. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +1 -1
  7. package/3rdparty/walkontable/src/cell/coords.js +60 -18
  8. package/3rdparty/walkontable/src/cell/coords.mjs +56 -18
  9. package/3rdparty/walkontable/src/cell/range.d.ts +10 -2
  10. package/3rdparty/walkontable/src/cell/range.js +279 -100
  11. package/3rdparty/walkontable/src/cell/range.mjs +274 -100
  12. package/3rdparty/walkontable/src/core/_base.js +452 -0
  13. package/3rdparty/walkontable/src/core/_base.mjs +440 -0
  14. package/3rdparty/walkontable/src/core/clone.js +97 -0
  15. package/3rdparty/walkontable/src/core/clone.mjs +80 -0
  16. package/3rdparty/walkontable/src/core/core.js +183 -0
  17. package/3rdparty/walkontable/src/core/core.mjs +160 -0
  18. package/3rdparty/walkontable/src/event.js +100 -67
  19. package/3rdparty/walkontable/src/event.mjs +100 -64
  20. package/3rdparty/walkontable/src/facade/core.js +251 -0
  21. package/3rdparty/walkontable/src/facade/core.mjs +243 -0
  22. package/3rdparty/walkontable/src/filter/column.js +1 -1
  23. package/3rdparty/walkontable/src/filter/column.mjs +1 -1
  24. package/3rdparty/walkontable/src/filter/row.js +1 -1
  25. package/3rdparty/walkontable/src/filter/row.mjs +1 -1
  26. package/3rdparty/walkontable/src/index.js +3 -47
  27. package/3rdparty/walkontable/src/index.mjs +3 -13
  28. package/3rdparty/walkontable/src/overlay/_base.js +125 -58
  29. package/3rdparty/walkontable/src/overlay/_base.mjs +126 -59
  30. package/3rdparty/walkontable/src/overlay/bottom.js +86 -76
  31. package/3rdparty/walkontable/src/overlay/bottom.mjs +86 -76
  32. package/3rdparty/walkontable/src/overlay/{bottomLeftCorner.js → bottomInlineStartCorner.js} +35 -58
  33. package/3rdparty/walkontable/src/overlay/{bottomLeftCorner.mjs → bottomInlineStartCorner.mjs} +34 -57
  34. package/3rdparty/walkontable/src/overlay/constants.js +25 -9
  35. package/3rdparty/walkontable/src/overlay/constants.mjs +14 -4
  36. package/3rdparty/walkontable/src/overlay/index.js +10 -19
  37. package/3rdparty/walkontable/src/overlay/index.mjs +4 -5
  38. package/3rdparty/walkontable/src/overlay/{left.js → inlineStart.js} +102 -80
  39. package/3rdparty/walkontable/src/overlay/{left.mjs → inlineStart.mjs} +101 -79
  40. package/3rdparty/walkontable/src/overlay/top.js +84 -79
  41. package/3rdparty/walkontable/src/overlay/top.mjs +84 -79
  42. package/3rdparty/walkontable/src/overlay/{topLeftCorner.js → topInlineStartCorner.js} +56 -57
  43. package/3rdparty/walkontable/src/overlay/{topLeftCorner.mjs → topInlineStartCorner.mjs} +51 -52
  44. package/3rdparty/walkontable/src/overlays.js +226 -157
  45. package/3rdparty/walkontable/src/overlays.mjs +226 -156
  46. package/3rdparty/walkontable/src/renderer/_base.js +1 -1
  47. package/3rdparty/walkontable/src/renderer/_base.mjs +1 -1
  48. package/3rdparty/walkontable/src/renderer/cells.js +5 -4
  49. package/3rdparty/walkontable/src/renderer/cells.mjs +5 -4
  50. package/3rdparty/walkontable/src/renderer/colGroup.js +3 -3
  51. package/3rdparty/walkontable/src/renderer/colGroup.mjs +3 -3
  52. package/3rdparty/walkontable/src/renderer/columnHeaders.js +3 -3
  53. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +3 -3
  54. package/3rdparty/walkontable/src/renderer/index.js +1 -1
  55. package/3rdparty/walkontable/src/renderer/index.mjs +1 -1
  56. package/3rdparty/walkontable/src/renderer/rowHeaders.js +3 -3
  57. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +3 -3
  58. package/3rdparty/walkontable/src/renderer/rows.js +3 -3
  59. package/3rdparty/walkontable/src/renderer/rows.mjs +3 -3
  60. package/3rdparty/walkontable/src/renderer/table.js +1 -1
  61. package/3rdparty/walkontable/src/renderer/table.mjs +1 -1
  62. package/3rdparty/walkontable/src/scroll.js +61 -88
  63. package/3rdparty/walkontable/src/scroll.mjs +61 -88
  64. package/3rdparty/walkontable/src/selection.js +12 -16
  65. package/3rdparty/walkontable/src/selection.mjs +12 -14
  66. package/3rdparty/walkontable/src/settings.js +236 -127
  67. package/3rdparty/walkontable/src/settings.mjs +236 -126
  68. package/3rdparty/walkontable/src/table/bottom.js +21 -6
  69. package/3rdparty/walkontable/src/table/bottom.mjs +20 -6
  70. package/3rdparty/walkontable/src/table/{bottomLeftCorner.js → bottomInlineStartCorner.js} +31 -15
  71. package/3rdparty/walkontable/src/table/{bottomLeftCorner.mjs → bottomInlineStartCorner.mjs} +30 -15
  72. package/3rdparty/walkontable/src/table/{left.js → inlineStart.js} +27 -15
  73. package/3rdparty/walkontable/src/table/{left.mjs → inlineStart.mjs} +26 -15
  74. package/3rdparty/walkontable/src/table/master.js +23 -13
  75. package/3rdparty/walkontable/src/table/master.mjs +23 -13
  76. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +12 -6
  77. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +12 -6
  78. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +12 -6
  79. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +12 -6
  80. package/3rdparty/walkontable/src/table/mixin/{stickyColumnsLeft.js → stickyColumnsStart.js} +13 -7
  81. package/3rdparty/walkontable/src/table/mixin/{stickyColumnsLeft.mjs → stickyColumnsStart.mjs} +13 -7
  82. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +11 -5
  83. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +11 -5
  84. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -3
  85. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -3
  86. package/3rdparty/walkontable/src/table/top.js +21 -6
  87. package/3rdparty/walkontable/src/table/top.mjs +20 -6
  88. package/3rdparty/walkontable/src/table/{topLeftCorner.js → topInlineStartCorner.js} +31 -15
  89. package/3rdparty/walkontable/src/table/{topLeftCorner.mjs → topInlineStartCorner.mjs} +30 -15
  90. package/3rdparty/walkontable/src/table.js +236 -141
  91. package/3rdparty/walkontable/src/table.mjs +232 -135
  92. package/3rdparty/walkontable/src/types.js +103 -0
  93. package/3rdparty/walkontable/src/types.mjs +102 -0
  94. package/3rdparty/walkontable/src/utils/column.js +23 -34
  95. package/3rdparty/walkontable/src/utils/column.mjs +23 -31
  96. package/3rdparty/walkontable/src/utils/nodesPool.js +1 -1
  97. package/3rdparty/walkontable/src/utils/nodesPool.mjs +1 -1
  98. package/3rdparty/walkontable/src/utils/orderView/sharedView.js +3 -3
  99. package/3rdparty/walkontable/src/utils/orderView/sharedView.mjs +3 -3
  100. package/3rdparty/walkontable/src/utils/orderView/view.js +1 -1
  101. package/3rdparty/walkontable/src/utils/orderView/view.mjs +1 -1
  102. package/3rdparty/walkontable/src/utils/orderView/viewSize.js +1 -1
  103. package/3rdparty/walkontable/src/utils/orderView/viewSize.mjs +1 -1
  104. package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.js +1 -1
  105. package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.mjs +1 -1
  106. package/3rdparty/walkontable/src/utils/row.js +10 -5
  107. package/3rdparty/walkontable/src/utils/row.mjs +10 -5
  108. package/3rdparty/walkontable/src/viewport.js +78 -81
  109. package/3rdparty/walkontable/src/viewport.mjs +78 -78
  110. package/CHANGELOG.md +94 -17
  111. package/README.md +10 -7
  112. package/base.js +2 -2
  113. package/base.mjs +2 -2
  114. package/cellTypes/timeType/timeType.d.ts +6 -6
  115. package/cellTypes/timeType/timeType.js +4 -5
  116. package/cellTypes/timeType/timeType.mjs +4 -5
  117. package/core.d.ts +9 -3
  118. package/core.js +590 -157
  119. package/core.mjs +599 -169
  120. package/dataMap/dataMap.js +2 -2
  121. package/dataMap/dataMap.mjs +2 -2
  122. package/dataMap/index.js +8 -0
  123. package/dataMap/index.mjs +3 -1
  124. package/dataMap/metaManager/index.js +3 -3
  125. package/dataMap/metaManager/index.mjs +3 -3
  126. package/dataMap/metaManager/lazyFactoryMap.js +1 -1
  127. package/dataMap/metaManager/lazyFactoryMap.mjs +1 -1
  128. package/dataMap/metaManager/metaLayers/cellMeta.js +1 -1
  129. package/dataMap/metaManager/metaLayers/cellMeta.mjs +1 -1
  130. package/dataMap/metaManager/metaLayers/columnMeta.js +1 -1
  131. package/dataMap/metaManager/metaLayers/columnMeta.mjs +1 -1
  132. package/dataMap/metaManager/metaLayers/globalMeta.js +7 -3
  133. package/dataMap/metaManager/metaLayers/globalMeta.mjs +7 -3
  134. package/dataMap/metaManager/metaLayers/tableMeta.js +3 -3
  135. package/dataMap/metaManager/metaLayers/tableMeta.mjs +3 -3
  136. package/dataMap/metaManager/metaSchema.js +2931 -2676
  137. package/dataMap/metaManager/metaSchema.mjs +2931 -2676
  138. package/dataMap/metaManager/mods/dynamicCellMeta.js +1 -1
  139. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +1 -1
  140. package/dataMap/metaManager/mods/extendMetaProperties.js +126 -0
  141. package/dataMap/metaManager/mods/extendMetaProperties.mjs +113 -0
  142. package/dataMap/replaceData.js +140 -0
  143. package/dataMap/replaceData.mjs +124 -0
  144. package/dataSource.js +1 -1
  145. package/dataSource.mjs +1 -1
  146. package/dist/README.md +2 -2
  147. package/dist/handsontable.css +424 -166
  148. package/dist/handsontable.full.css +559 -298
  149. package/dist/handsontable.full.js +47163 -41289
  150. package/dist/handsontable.full.min.css +8 -13
  151. package/dist/handsontable.full.min.js +143 -142
  152. package/dist/handsontable.js +28270 -24105
  153. package/dist/handsontable.min.css +8 -11
  154. package/dist/handsontable.min.js +3 -3
  155. package/dist/languages/all.js +69 -38
  156. package/dist/languages/all.min.js +1 -1
  157. package/dist/languages/ar-AR.js +167 -0
  158. package/dist/languages/ar-AR.min.js +1 -0
  159. package/dist/languages/de-CH.js +32 -33
  160. package/dist/languages/de-CH.min.js +1 -1
  161. package/dist/languages/de-DE.js +5 -6
  162. package/dist/languages/de-DE.min.js +1 -1
  163. package/dist/languages/en-US.js +5 -6
  164. package/dist/languages/en-US.min.js +1 -1
  165. package/dist/languages/es-MX.js +5 -6
  166. package/dist/languages/es-MX.min.js +1 -1
  167. package/dist/languages/fr-FR.js +5 -6
  168. package/dist/languages/fr-FR.min.js +1 -1
  169. package/dist/languages/it-IT.js +5 -6
  170. package/dist/languages/it-IT.min.js +1 -1
  171. package/dist/languages/ja-JP.js +5 -6
  172. package/dist/languages/ja-JP.min.js +1 -1
  173. package/dist/languages/ko-KR.js +37 -42
  174. package/dist/languages/ko-KR.min.js +1 -1
  175. package/dist/languages/lv-LV.js +4 -6
  176. package/dist/languages/lv-LV.min.js +1 -1
  177. package/dist/languages/nb-NO.js +4 -6
  178. package/dist/languages/nb-NO.min.js +1 -1
  179. package/dist/languages/nl-NL.js +4 -6
  180. package/dist/languages/nl-NL.min.js +1 -1
  181. package/dist/languages/pl-PL.js +4 -6
  182. package/dist/languages/pl-PL.min.js +1 -1
  183. package/dist/languages/pt-BR.js +4 -6
  184. package/dist/languages/pt-BR.min.js +1 -1
  185. package/dist/languages/ru-RU.js +4 -6
  186. package/dist/languages/ru-RU.min.js +1 -1
  187. package/dist/languages/zh-CN.js +4 -6
  188. package/dist/languages/zh-CN.min.js +1 -1
  189. package/dist/languages/zh-TW.js +25 -27
  190. package/dist/languages/zh-TW.min.js +1 -1
  191. package/editorManager.js +121 -268
  192. package/editorManager.mjs +129 -279
  193. package/editors/autocompleteEditor/autocompleteEditor.js +19 -17
  194. package/editors/autocompleteEditor/autocompleteEditor.mjs +19 -17
  195. package/editors/baseEditor/baseEditor.js +207 -36
  196. package/editors/baseEditor/baseEditor.mjs +202 -34
  197. package/editors/checkboxEditor/checkboxEditor.js +3 -3
  198. package/editors/checkboxEditor/checkboxEditor.mjs +3 -3
  199. package/editors/dateEditor/dateEditor.js +22 -9
  200. package/editors/dateEditor/dateEditor.mjs +23 -10
  201. package/editors/dropdownEditor/dropdownEditor.js +4 -4
  202. package/editors/dropdownEditor/dropdownEditor.mjs +4 -4
  203. package/editors/handsontableEditor/handsontableEditor.js +107 -56
  204. package/editors/handsontableEditor/handsontableEditor.mjs +107 -56
  205. package/editors/index.d.ts +3 -0
  206. package/editors/index.js +6 -0
  207. package/editors/index.mjs +3 -1
  208. package/editors/numericEditor/numericEditor.js +3 -3
  209. package/editors/numericEditor/numericEditor.mjs +3 -3
  210. package/editors/passwordEditor/passwordEditor.js +4 -4
  211. package/editors/passwordEditor/passwordEditor.mjs +4 -4
  212. package/editors/selectEditor/selectEditor.js +66 -111
  213. package/editors/selectEditor/selectEditor.mjs +67 -110
  214. package/editors/textEditor/caretPositioner.js +49 -0
  215. package/editors/textEditor/caretPositioner.mjs +42 -0
  216. package/editors/textEditor/textEditor.js +206 -182
  217. package/editors/textEditor/textEditor.mjs +200 -180
  218. package/editors/timeEditor/index.d.ts +1 -0
  219. package/editors/timeEditor/index.js +9 -0
  220. package/editors/timeEditor/index.mjs +1 -0
  221. package/editors/timeEditor/timeEditor.d.ts +7 -0
  222. package/editors/timeEditor/timeEditor.js +105 -0
  223. package/editors/timeEditor/timeEditor.mjs +84 -0
  224. package/eventManager.js +11 -5
  225. package/eventManager.mjs +11 -5
  226. package/helpers/data.js +1 -1
  227. package/helpers/data.mjs +1 -1
  228. package/helpers/dom/element.js +1 -1
  229. package/helpers/dom/element.mjs +1 -1
  230. package/helpers/feature.js +1 -1
  231. package/helpers/feature.mjs +1 -1
  232. package/helpers/mixed.js +3 -3
  233. package/helpers/mixed.mjs +3 -3
  234. package/helpers/number.js +4 -4
  235. package/helpers/number.mjs +4 -4
  236. package/helpers/object.js +1 -1
  237. package/helpers/object.mjs +1 -1
  238. package/i18n/languages/ar-AR.js +41 -0
  239. package/i18n/languages/ar-AR.mjs +17 -0
  240. package/i18n/languages/de-CH.js +1 -1
  241. package/i18n/languages/de-DE.js +1 -1
  242. package/i18n/languages/en-US.js +1 -1
  243. package/i18n/languages/es-MX.js +1 -1
  244. package/i18n/languages/fr-FR.js +1 -1
  245. package/i18n/languages/index.js +4 -0
  246. package/i18n/languages/index.mjs +2 -1
  247. package/i18n/languages/it-IT.js +1 -1
  248. package/i18n/languages/ja-JP.js +1 -1
  249. package/i18n/languages/ko-KR.js +1 -1
  250. package/i18n/languages/lv-LV.js +1 -1
  251. package/i18n/languages/nb-NO.js +1 -1
  252. package/i18n/languages/nl-NL.js +1 -1
  253. package/i18n/languages/pl-PL.js +1 -1
  254. package/i18n/languages/pt-BR.js +1 -1
  255. package/i18n/languages/ru-RU.js +1 -1
  256. package/i18n/languages/zh-CN.js +1 -1
  257. package/i18n/languages/zh-TW.js +1 -1
  258. package/i18n/registry.js +1 -1
  259. package/index.d.ts +4 -0
  260. package/index.js +1 -1
  261. package/languages/all.js +69 -38
  262. package/languages/ar-AR.js +167 -0
  263. package/languages/ar-AR.mjs +19 -0
  264. package/languages/de-CH.js +32 -33
  265. package/languages/de-DE.js +5 -6
  266. package/languages/en-US.js +5 -6
  267. package/languages/es-MX.js +5 -6
  268. package/languages/fr-FR.js +5 -6
  269. package/languages/index.js +69 -38
  270. package/languages/index.mjs +2 -1
  271. package/languages/it-IT.js +5 -6
  272. package/languages/ja-JP.js +5 -6
  273. package/languages/ko-KR.js +37 -42
  274. package/languages/lv-LV.js +4 -6
  275. package/languages/nb-NO.js +4 -6
  276. package/languages/nl-NL.js +4 -6
  277. package/languages/pl-PL.js +4 -6
  278. package/languages/pt-BR.js +4 -6
  279. package/languages/ru-RU.js +4 -6
  280. package/languages/zh-CN.js +4 -6
  281. package/languages/zh-TW.js +25 -27
  282. package/package.json +26 -8
  283. package/pluginHooks.d.ts +2 -0
  284. package/pluginHooks.js +58 -27
  285. package/pluginHooks.mjs +58 -27
  286. package/plugins/autoColumnSize/autoColumnSize.js +14 -9
  287. package/plugins/autoColumnSize/autoColumnSize.mjs +14 -9
  288. package/plugins/autoRowSize/autoRowSize.js +15 -10
  289. package/plugins/autoRowSize/autoRowSize.mjs +15 -10
  290. package/plugins/autofill/autofill.js +50 -34
  291. package/plugins/autofill/autofill.mjs +50 -33
  292. package/plugins/autofill/utils.js +10 -11
  293. package/plugins/autofill/utils.mjs +10 -10
  294. package/plugins/base/base.d.ts +8 -2
  295. package/plugins/base/base.js +68 -5
  296. package/plugins/base/base.mjs +67 -5
  297. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +4 -4
  298. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +4 -4
  299. package/plugins/bindRowsWithHeaders/maps/looseBindsMap.js +4 -4
  300. package/plugins/bindRowsWithHeaders/maps/looseBindsMap.mjs +4 -4
  301. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.js +4 -4
  302. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.mjs +4 -4
  303. package/plugins/collapsibleColumns/collapsibleColumns.js +49 -30
  304. package/plugins/collapsibleColumns/collapsibleColumns.mjs +49 -30
  305. package/plugins/columnSorting/columnSorting.d.ts +1 -1
  306. package/plugins/columnSorting/columnSorting.js +10 -12
  307. package/plugins/columnSorting/columnSorting.mjs +10 -11
  308. package/plugins/columnSorting/columnStatesManager.js +3 -3
  309. package/plugins/columnSorting/columnStatesManager.mjs +3 -3
  310. package/plugins/columnSummary/columnSummary.js +4 -4
  311. package/plugins/columnSummary/columnSummary.mjs +4 -4
  312. package/plugins/columnSummary/endpoints.js +1 -1
  313. package/plugins/columnSummary/endpoints.mjs +1 -1
  314. package/plugins/comments/commentEditor.js +24 -4
  315. package/plugins/comments/commentEditor.mjs +25 -5
  316. package/plugins/comments/comments.js +63 -104
  317. package/plugins/comments/comments.mjs +63 -102
  318. package/plugins/comments/displaySwitch.js +1 -1
  319. package/plugins/comments/displaySwitch.mjs +1 -1
  320. package/plugins/contextMenu/commandExecutor.js +1 -1
  321. package/plugins/contextMenu/commandExecutor.mjs +1 -1
  322. package/plugins/contextMenu/contextMenu.js +11 -7
  323. package/plugins/contextMenu/contextMenu.mjs +11 -7
  324. package/plugins/contextMenu/cursor.js +1 -1
  325. package/plugins/contextMenu/cursor.mjs +1 -1
  326. package/plugins/contextMenu/itemsFactory.js +1 -1
  327. package/plugins/contextMenu/itemsFactory.mjs +1 -1
  328. package/plugins/contextMenu/menu.js +223 -111
  329. package/plugins/contextMenu/menu.mjs +220 -112
  330. package/plugins/contextMenu/predefinedItems/alignment.js +1 -1
  331. package/plugins/contextMenu/predefinedItems/clearColumn.js +1 -1
  332. package/plugins/contextMenu/predefinedItems/columnLeft.js +13 -5
  333. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +11 -4
  334. package/plugins/contextMenu/predefinedItems/columnRight.js +10 -10
  335. package/plugins/contextMenu/predefinedItems/columnRight.mjs +9 -9
  336. package/plugins/contextMenu/predefinedItems/readOnly.js +1 -1
  337. package/plugins/contextMenu/predefinedItems/redo.js +1 -1
  338. package/plugins/contextMenu/predefinedItems/removeColumn.js +1 -1
  339. package/plugins/contextMenu/predefinedItems/removeRow.js +1 -1
  340. package/plugins/contextMenu/predefinedItems/rowAbove.js +1 -1
  341. package/plugins/contextMenu/predefinedItems/rowBelow.js +1 -1
  342. package/plugins/contextMenu/predefinedItems/undo.js +1 -1
  343. package/plugins/contextMenu/predefinedItems.js +1 -1
  344. package/plugins/contextMenu/utils.js +2 -2
  345. package/plugins/contextMenu/utils.mjs +2 -2
  346. package/plugins/copyPaste/clipboardData.js +1 -1
  347. package/plugins/copyPaste/clipboardData.mjs +1 -1
  348. package/plugins/copyPaste/contextMenuItem/copy.js +1 -1
  349. package/plugins/copyPaste/contextMenuItem/cut.js +1 -1
  350. package/plugins/copyPaste/copyPaste.js +29 -19
  351. package/plugins/copyPaste/copyPaste.mjs +28 -19
  352. package/plugins/copyPaste/focusableElement.js +1 -1
  353. package/plugins/copyPaste/focusableElement.mjs +1 -1
  354. package/plugins/copyPaste/pasteEvent.js +6 -2
  355. package/plugins/copyPaste/pasteEvent.mjs +6 -2
  356. package/plugins/customBorders/contextMenuItem/bottom.js +1 -1
  357. package/plugins/customBorders/contextMenuItem/left.js +5 -4
  358. package/plugins/customBorders/contextMenuItem/left.mjs +4 -3
  359. package/plugins/customBorders/contextMenuItem/noBorders.js +1 -1
  360. package/plugins/customBorders/contextMenuItem/right.js +5 -4
  361. package/plugins/customBorders/contextMenuItem/right.mjs +4 -3
  362. package/plugins/customBorders/contextMenuItem/top.js +1 -1
  363. package/plugins/customBorders/customBorders.js +141 -85
  364. package/plugins/customBorders/customBorders.mjs +139 -82
  365. package/plugins/customBorders/utils.js +131 -27
  366. package/plugins/customBorders/utils.mjs +115 -27
  367. package/plugins/dragToScroll/dragToScroll.js +11 -6
  368. package/plugins/dragToScroll/dragToScroll.mjs +11 -6
  369. package/plugins/dropdownMenu/dropdownMenu.js +8 -7
  370. package/plugins/dropdownMenu/dropdownMenu.mjs +8 -7
  371. package/plugins/exportFile/dataProvider.js +1 -1
  372. package/plugins/exportFile/dataProvider.mjs +1 -1
  373. package/plugins/exportFile/exportFile.js +3 -3
  374. package/plugins/exportFile/exportFile.mjs +3 -3
  375. package/plugins/exportFile/types/_base.js +1 -1
  376. package/plugins/exportFile/types/_base.mjs +1 -1
  377. package/plugins/exportFile/types/csv.js +3 -3
  378. package/plugins/exportFile/types/csv.mjs +3 -3
  379. package/plugins/filters/component/_base.js +1 -1
  380. package/plugins/filters/component/_base.mjs +1 -1
  381. package/plugins/filters/component/actionBar.js +3 -3
  382. package/plugins/filters/component/actionBar.mjs +3 -3
  383. package/plugins/filters/component/condition.js +4 -4
  384. package/plugins/filters/component/condition.mjs +4 -4
  385. package/plugins/filters/component/operators.js +3 -3
  386. package/plugins/filters/component/operators.mjs +3 -3
  387. package/plugins/filters/component/value.js +4 -4
  388. package/plugins/filters/component/value.mjs +4 -4
  389. package/plugins/filters/condition/beginsWith.js +1 -1
  390. package/plugins/filters/condition/between.js +1 -1
  391. package/plugins/filters/condition/contains.js +1 -1
  392. package/plugins/filters/condition/date/after.js +1 -1
  393. package/plugins/filters/condition/date/before.js +1 -1
  394. package/plugins/filters/condition/date/today.js +1 -1
  395. package/plugins/filters/condition/date/tomorrow.js +1 -1
  396. package/plugins/filters/condition/date/yesterday.js +1 -1
  397. package/plugins/filters/condition/empty.js +1 -1
  398. package/plugins/filters/condition/endsWith.js +1 -1
  399. package/plugins/filters/condition/equal.js +1 -1
  400. package/plugins/filters/condition/greaterThan.js +1 -1
  401. package/plugins/filters/condition/greaterThanOrEqual.js +1 -1
  402. package/plugins/filters/condition/lessThan.js +1 -1
  403. package/plugins/filters/condition/lessThanOrEqual.js +1 -1
  404. package/plugins/filters/condition/none.js +1 -1
  405. package/plugins/filters/condition/notBetween.js +1 -1
  406. package/plugins/filters/condition/notContains.js +1 -1
  407. package/plugins/filters/condition/notEmpty.js +1 -1
  408. package/plugins/filters/condition/notEqual.js +1 -1
  409. package/plugins/filters/conditionCollection.js +1 -1
  410. package/plugins/filters/conditionCollection.mjs +1 -1
  411. package/plugins/filters/conditionUpdateObserver.js +1 -1
  412. package/plugins/filters/conditionUpdateObserver.mjs +1 -1
  413. package/plugins/filters/dataFilter.js +1 -1
  414. package/plugins/filters/dataFilter.mjs +1 -1
  415. package/plugins/filters/filters.js +12 -9
  416. package/plugins/filters/filters.mjs +12 -9
  417. package/plugins/filters/logicalOperations/conjunction.js +1 -1
  418. package/plugins/filters/logicalOperations/disjunction.js +1 -1
  419. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +1 -1
  420. package/plugins/filters/ui/_base.js +2 -2
  421. package/plugins/filters/ui/_base.mjs +1 -1
  422. package/plugins/filters/ui/input.js +4 -4
  423. package/plugins/filters/ui/input.mjs +4 -4
  424. package/plugins/filters/ui/link.js +4 -4
  425. package/plugins/filters/ui/link.mjs +4 -4
  426. package/plugins/filters/ui/multipleSelect.js +19 -32
  427. package/plugins/filters/ui/multipleSelect.mjs +19 -32
  428. package/plugins/filters/ui/radioInput.js +4 -4
  429. package/plugins/filters/ui/radioInput.mjs +4 -4
  430. package/plugins/filters/ui/select.js +5 -5
  431. package/plugins/filters/ui/select.mjs +5 -5
  432. package/plugins/formulas/engine/register.js +1 -1
  433. package/plugins/formulas/engine/register.mjs +1 -1
  434. package/plugins/formulas/engine/settings.js +2 -2
  435. package/plugins/formulas/engine/settings.mjs +2 -2
  436. package/plugins/formulas/formulas.js +10 -10
  437. package/plugins/formulas/formulas.mjs +10 -10
  438. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +1 -1
  439. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +3 -3
  440. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +2 -2
  441. package/plugins/hiddenColumns/hiddenColumns.js +10 -5
  442. package/plugins/hiddenColumns/hiddenColumns.mjs +10 -5
  443. package/plugins/hiddenRows/contextMenuItem/hideRow.js +1 -1
  444. package/plugins/hiddenRows/contextMenuItem/showRow.js +3 -3
  445. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +2 -2
  446. package/plugins/hiddenRows/hiddenRows.js +10 -5
  447. package/plugins/hiddenRows/hiddenRows.mjs +10 -5
  448. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +2 -2
  449. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.mjs +1 -1
  450. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +2 -2
  451. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.mjs +1 -1
  452. package/plugins/manualColumnFreeze/manualColumnFreeze.js +26 -13
  453. package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +26 -13
  454. package/plugins/manualColumnMove/manualColumnMove.js +73 -62
  455. package/plugins/manualColumnMove/manualColumnMove.mjs +74 -63
  456. package/plugins/manualColumnMove/ui/_base.js +26 -13
  457. package/plugins/manualColumnMove/ui/_base.mjs +25 -13
  458. package/plugins/manualColumnMove/ui/backlight.js +4 -4
  459. package/plugins/manualColumnMove/ui/backlight.mjs +4 -4
  460. package/plugins/manualColumnMove/ui/guideline.js +4 -4
  461. package/plugins/manualColumnMove/ui/guideline.mjs +4 -4
  462. package/plugins/manualColumnResize/manualColumnResize.js +38 -22
  463. package/plugins/manualColumnResize/manualColumnResize.mjs +38 -22
  464. package/plugins/manualRowMove/manualRowMove.js +27 -17
  465. package/plugins/manualRowMove/manualRowMove.mjs +27 -17
  466. package/plugins/manualRowMove/ui/_base.js +1 -1
  467. package/plugins/manualRowMove/ui/_base.mjs +1 -1
  468. package/plugins/manualRowMove/ui/backlight.js +4 -4
  469. package/plugins/manualRowMove/ui/backlight.mjs +4 -4
  470. package/plugins/manualRowMove/ui/guideline.js +4 -4
  471. package/plugins/manualRowMove/ui/guideline.mjs +4 -4
  472. package/plugins/manualRowResize/manualRowResize.js +35 -20
  473. package/plugins/manualRowResize/manualRowResize.mjs +35 -20
  474. package/plugins/mergeCells/calculations/autofill.js +7 -6
  475. package/plugins/mergeCells/calculations/autofill.mjs +7 -5
  476. package/plugins/mergeCells/calculations/selection.js +10 -5
  477. package/plugins/mergeCells/calculations/selection.mjs +10 -5
  478. package/plugins/mergeCells/cellCoords.js +17 -5
  479. package/plugins/mergeCells/cellCoords.mjs +17 -4
  480. package/plugins/mergeCells/cellsCollection.js +28 -21
  481. package/plugins/mergeCells/cellsCollection.mjs +28 -20
  482. package/plugins/mergeCells/contextMenuItem/toggleMerge.js +1 -1
  483. package/plugins/mergeCells/mergeCells.js +83 -50
  484. package/plugins/mergeCells/mergeCells.mjs +83 -48
  485. package/plugins/multiColumnSorting/multiColumnSorting.js +5 -7
  486. package/plugins/multiColumnSorting/multiColumnSorting.mjs +5 -6
  487. package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +52 -58
  488. package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +53 -58
  489. package/plugins/nestedHeaders/nestedHeaders.js +26 -19
  490. package/plugins/nestedHeaders/nestedHeaders.mjs +26 -19
  491. package/plugins/nestedHeaders/stateManager/headersTree.js +3 -3
  492. package/plugins/nestedHeaders/stateManager/headersTree.mjs +3 -3
  493. package/plugins/nestedHeaders/stateManager/index.js +3 -3
  494. package/plugins/nestedHeaders/stateManager/index.mjs +3 -3
  495. package/plugins/nestedHeaders/stateManager/sourceSettings.js +3 -3
  496. package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +3 -3
  497. package/plugins/nestedHeaders/utils/ghostTable.js +1 -1
  498. package/plugins/nestedHeaders/utils/ghostTable.mjs +1 -1
  499. package/plugins/nestedRows/data/dataManager.js +2 -2
  500. package/plugins/nestedRows/data/dataManager.mjs +2 -2
  501. package/plugins/nestedRows/nestedRows.js +11 -5
  502. package/plugins/nestedRows/nestedRows.mjs +11 -5
  503. package/plugins/nestedRows/ui/_base.js +6 -2
  504. package/plugins/nestedRows/ui/_base.mjs +6 -2
  505. package/plugins/nestedRows/ui/collapsing.js +3 -3
  506. package/plugins/nestedRows/ui/collapsing.mjs +3 -3
  507. package/plugins/nestedRows/ui/contextMenu.js +3 -3
  508. package/plugins/nestedRows/ui/contextMenu.mjs +3 -3
  509. package/plugins/nestedRows/ui/headers.js +3 -3
  510. package/plugins/nestedRows/ui/headers.mjs +3 -3
  511. package/plugins/nestedRows/utils/rowMoveController.js +3 -5
  512. package/plugins/nestedRows/utils/rowMoveController.mjs +3 -4
  513. package/plugins/persistentState/persistentState.js +10 -5
  514. package/plugins/persistentState/persistentState.mjs +10 -5
  515. package/plugins/persistentState/storage.js +1 -1
  516. package/plugins/persistentState/storage.mjs +1 -1
  517. package/plugins/search/search.js +10 -5
  518. package/plugins/search/search.mjs +10 -5
  519. package/plugins/touchScroll/touchScroll.js +32 -26
  520. package/plugins/touchScroll/touchScroll.mjs +32 -25
  521. package/plugins/trimRows/trimRows.js +10 -5
  522. package/plugins/trimRows/trimRows.mjs +10 -5
  523. package/plugins/undoRedo/index.js +1 -1
  524. package/plugins/undoRedo/undoRedo.js +54 -48
  525. package/plugins/undoRedo/undoRedo.mjs +54 -47
  526. package/renderers/autocompleteRenderer/autocompleteRenderer.js +1 -3
  527. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +1 -2
  528. package/renderers/checkboxRenderer/checkboxRenderer.js +48 -43
  529. package/renderers/checkboxRenderer/checkboxRenderer.mjs +48 -41
  530. package/renderers/index.d.ts +4 -1
  531. package/renderers/index.js +6 -0
  532. package/renderers/index.mjs +3 -1
  533. package/renderers/numericRenderer/numericRenderer.js +1 -0
  534. package/renderers/numericRenderer/numericRenderer.mjs +1 -0
  535. package/renderers/timeRenderer/index.d.ts +1 -0
  536. package/renderers/timeRenderer/index.js +9 -0
  537. package/renderers/timeRenderer/index.mjs +1 -0
  538. package/renderers/timeRenderer/timeRenderer.d.ts +5 -0
  539. package/renderers/timeRenderer/timeRenderer.js +31 -0
  540. package/renderers/timeRenderer/timeRenderer.mjs +20 -0
  541. package/selection/highlight/highlight.js +3 -3
  542. package/selection/highlight/highlight.mjs +3 -3
  543. package/selection/highlight/types/activeHeader.js +2 -2
  544. package/selection/highlight/types/activeHeader.mjs +2 -2
  545. package/selection/highlight/types/area.js +2 -2
  546. package/selection/highlight/types/area.mjs +2 -2
  547. package/selection/highlight/types/cell.js +2 -2
  548. package/selection/highlight/types/cell.mjs +2 -2
  549. package/selection/highlight/types/customSelection.js +2 -2
  550. package/selection/highlight/types/customSelection.mjs +2 -2
  551. package/selection/highlight/types/fill.js +2 -2
  552. package/selection/highlight/types/fill.mjs +2 -2
  553. package/selection/highlight/types/header.js +2 -2
  554. package/selection/highlight/types/header.mjs +2 -2
  555. package/selection/highlight/types/index.js +2 -2
  556. package/selection/highlight/types/index.mjs +2 -2
  557. package/selection/highlight/visualSelection.js +17 -16
  558. package/selection/highlight/visualSelection.mjs +18 -17
  559. package/selection/mouseEventHandler.js +15 -10
  560. package/selection/mouseEventHandler.mjs +15 -9
  561. package/selection/range.js +5 -6
  562. package/selection/range.mjs +5 -6
  563. package/selection/selection.js +27 -20
  564. package/selection/selection.mjs +27 -18
  565. package/selection/transformation.js +5 -7
  566. package/selection/transformation.mjs +5 -6
  567. package/selection/utils.js +1 -1
  568. package/selection/utils.mjs +1 -1
  569. package/settings.d.ts +3 -1
  570. package/shortcuts/context.d.ts +20 -0
  571. package/shortcuts/context.js +296 -0
  572. package/shortcuts/context.mjs +268 -0
  573. package/shortcuts/index.d.ts +1 -0
  574. package/shortcuts/index.js +8 -0
  575. package/shortcuts/index.mjs +1 -0
  576. package/shortcuts/keyObserver.js +67 -0
  577. package/shortcuts/keyObserver.mjs +58 -0
  578. package/shortcuts/manager.d.ts +10 -0
  579. package/shortcuts/manager.js +183 -0
  580. package/shortcuts/manager.mjs +174 -0
  581. package/shortcuts/recorder.js +183 -0
  582. package/shortcuts/recorder.mjs +171 -0
  583. package/shortcuts/utils.js +77 -0
  584. package/shortcuts/utils.mjs +54 -0
  585. package/tableView.js +138 -80
  586. package/tableView.mjs +138 -70
  587. package/translations/changesObservable/observable.js +1 -1
  588. package/translations/changesObservable/observable.mjs +1 -1
  589. package/translations/changesObservable/observer.js +1 -2
  590. package/translations/changesObservable/observer.mjs +1 -2
  591. package/translations/indexMapper.d.ts +1 -0
  592. package/translations/indexMapper.js +25 -2
  593. package/translations/indexMapper.mjs +24 -2
  594. package/translations/mapCollections/aggregatedCollection.js +3 -3
  595. package/translations/mapCollections/aggregatedCollection.mjs +3 -3
  596. package/translations/mapCollections/mapCollection.js +1 -1
  597. package/translations/mapCollections/mapCollection.mjs +1 -1
  598. package/translations/maps/hidingMap.js +5 -3
  599. package/translations/maps/hidingMap.mjs +5 -3
  600. package/translations/maps/indexMap.js +3 -1
  601. package/translations/maps/indexMap.mjs +3 -1
  602. package/translations/maps/indexesSequence.js +6 -4
  603. package/translations/maps/indexesSequence.mjs +6 -4
  604. package/translations/maps/linkedPhysicalIndexToValueMap.js +6 -4
  605. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +6 -4
  606. package/translations/maps/physicalIndexToValueMap.js +6 -4
  607. package/translations/maps/physicalIndexToValueMap.mjs +6 -4
  608. package/translations/maps/trimmingMap.js +5 -3
  609. package/translations/maps/trimmingMap.mjs +5 -3
  610. package/utils/dataStructures/linkedList.js +3 -3
  611. package/utils/dataStructures/linkedList.mjs +3 -3
  612. package/utils/dataStructures/queue.js +1 -1
  613. package/utils/dataStructures/queue.mjs +1 -1
  614. package/utils/dataStructures/stack.js +1 -1
  615. package/utils/dataStructures/stack.mjs +1 -1
  616. package/utils/dataStructures/tree.js +3 -3
  617. package/utils/dataStructures/tree.mjs +3 -3
  618. package/utils/dataStructures/uniqueMap.js +14 -1
  619. package/utils/dataStructures/uniqueMap.mjs +14 -1
  620. package/utils/dataStructures/uniqueSet.js +9 -0
  621. package/utils/dataStructures/uniqueSet.mjs +9 -0
  622. package/utils/ghostTable.js +14 -3
  623. package/utils/ghostTable.mjs +15 -4
  624. package/utils/interval.js +1 -1
  625. package/utils/interval.mjs +1 -1
  626. package/utils/samplesGenerator.js +1 -1
  627. package/utils/samplesGenerator.mjs +1 -1
  628. package/3rdparty/walkontable/src/core.js +0 -309
  629. package/3rdparty/walkontable/src/core.mjs +0 -293
  630. package/3rdparty/walkontable/src/overlay/registerer.js +0 -70
  631. package/3rdparty/walkontable/src/overlay/registerer.mjs +0 -57
  632. package/utils/keyStateObserver.js +0 -121
  633. package/utils/keyStateObserver.mjs +0 -103
@@ -0,0 +1,58 @@
1
+ import "core-js/modules/es.array.iterator.js";
2
+ import "core-js/modules/es.object.to-string.js";
3
+ import "core-js/modules/es.set.js";
4
+ import "core-js/modules/es.string.iterator.js";
5
+ import "core-js/modules/web.dom-collections.iterator.js";
6
+
7
+ /* eslint-disable jsdoc/require-description-complete-sentence */
8
+
9
+ /**
10
+ * Create a key observer.
11
+ *
12
+ * @returns {object}
13
+ */
14
+ export function createKeysObserver() {
15
+ var PRESSED_KEYS = new Set();
16
+ return {
17
+ /**
18
+ * Press a key.
19
+ *
20
+ * @param {string} key Names of the shortcut's keys,
21
+ * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),
22
+ * in lowercase or uppercase, unified across browsers
23
+ */
24
+ press: function press(key) {
25
+ PRESSED_KEYS.add(key);
26
+ },
27
+
28
+ /**
29
+ * Release a pressed key.
30
+ *
31
+ * @param {string} key Names of the shortcut's keys,
32
+ * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),
33
+ * in lowercase or uppercase, unified across browsers
34
+ */
35
+ release: function release(key) {
36
+ PRESSED_KEYS.delete(key);
37
+ },
38
+
39
+ /**
40
+ * Release all pressed keys.
41
+ */
42
+ releaseAll: function releaseAll() {
43
+ PRESSED_KEYS.clear();
44
+ },
45
+
46
+ /**
47
+ * Check if a key is pressed.
48
+ *
49
+ * @param {string} key Names of the shortcut's keys,
50
+ * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),
51
+ * in lowercase or uppercase, unified across browsers
52
+ * @returns {boolean}
53
+ */
54
+ isPressed: function isPressed(key) {
55
+ return PRESSED_KEYS.has(key);
56
+ }
57
+ };
58
+ }
@@ -0,0 +1,10 @@
1
+ import { Context } from './context';
2
+
3
+ export interface ShortcutManager {
4
+ addContext(contextName: string): Context;
5
+ getActiveContextName(): string;
6
+ getContext(contextName: string): Context | undefined;
7
+ setActiveContextName(contextName: string): void;
8
+ isCtrlPressed(): boolean;
9
+ destroy(): void;
10
+ }
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.createShortcutManager = void 0;
5
+
6
+ var _uniqueMap = require("../utils/dataStructures/uniqueMap");
7
+
8
+ var _context = require("./context");
9
+
10
+ var _recorder = require("./recorder");
11
+
12
+ /* eslint-disable jsdoc/require-description-complete-sentence */
13
+
14
+ /**
15
+ * The `ShortcutManager` API lets you store and manage [keyboard shortcut contexts](@/guides/accessories-and-menus/keyboard-shortcuts.md#keyboard-shortcut-contexts) ([`ShortcutContext`](@/api/shortcutContext.md)).
16
+ *
17
+ * Each `ShortcutManager` object:
18
+ * - Stores and manages its own set of keyboard shortcut contexts.
19
+ * - Listens to the [`KeyboardEvent`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent) events and runs actions for them.
20
+ *
21
+ * @alias ShortcutManager
22
+ * @class ShortcutManager
23
+ * @param {object} options The manager's options
24
+ * @param {EventTarget} options.ownerWindow A starting `window` element
25
+ * @param {Function} options.beforeKeyDown A hook fired before the `keydown` event is handled. You can use it to [block a keyboard shortcut's actions](@/guides/accessories-and-menus/keyboard-shortcuts.md#blocking-a-keyboard-shortcut-s-actions).
26
+ * @param {Function} options.afterKeyDown A hook fired after the `keydown` event is handled
27
+ */
28
+ var createShortcutManager = function createShortcutManager(_ref) {
29
+ var ownerWindow = _ref.ownerWindow,
30
+ beforeKeyDown = _ref.beforeKeyDown,
31
+ afterKeyDown = _ref.afterKeyDown;
32
+
33
+ /**
34
+ * A unique map that stores keyboard shortcut contexts.
35
+ *
36
+ * @type {UniqueMap}
37
+ */
38
+ var CONTEXTS = (0, _uniqueMap.createUniqueMap)({
39
+ errorIdExists: function errorIdExists(keys) {
40
+ return "The \"".concat(keys, "\" context name is already registered.");
41
+ }
42
+ });
43
+ /**
44
+ * The name of the active [`ShortcutContext`](@/api/shortcutContext.md).
45
+ *
46
+ * @type {string}
47
+ */
48
+
49
+ var activeContextName = 'grid';
50
+ /**
51
+ * Create a new [`ShortcutContext`](@/api/shortcutContext.md) object.
52
+ *
53
+ * @memberof ShortcutManager#
54
+ * @param {string} contextName The name of the new shortcut context
55
+ * @returns {object}
56
+ */
57
+
58
+ var addContext = function addContext(contextName) {
59
+ var context = (0, _context.createContext)(contextName);
60
+ CONTEXTS.addItem(contextName, context);
61
+ return context;
62
+ };
63
+ /**
64
+ * Get the ID of the active [`ShortcutContext`](@/api/shortcutContext.md).
65
+ *
66
+ * @memberof ShortcutManager#
67
+ * @returns {string}
68
+ */
69
+
70
+
71
+ var getActiveContextName = function getActiveContextName() {
72
+ return activeContextName;
73
+ };
74
+ /**
75
+ * Get a keyboard shortcut context by its name.
76
+ *
77
+ * @memberof ShortcutManager#
78
+ * @param {string} contextName The name of the shortcut context
79
+ * @returns {object|undefined} A [`ShortcutContext`](@/api/shortcutContext.md) object that stores registered shortcuts
80
+ */
81
+
82
+
83
+ var getContext = function getContext(contextName) {
84
+ return CONTEXTS.getItem(contextName);
85
+ };
86
+ /**
87
+ * Start listening to keyboard shortcuts within a given [`ShortcutContext`](@/api/shortcutContext.md).
88
+ *
89
+ * @memberof ShortcutManager#
90
+ * @param {string} contextName The name of the shortcut context
91
+ */
92
+
93
+
94
+ var setActiveContextName = function setActiveContextName(contextName) {
95
+ activeContextName = contextName;
96
+ };
97
+ /**
98
+ * This variable relates to the `captureCtrl` shortcut option,
99
+ * which allows for capturing the state of the Control/Meta modifier key.
100
+ * Some of the default keyboard shortcuts related to cell selection need this feature for working properly.
101
+ *
102
+ * @type {boolean}
103
+ */
104
+
105
+
106
+ var isCtrlKeySilenced = false;
107
+ /**
108
+ * Internal key recorder.
109
+ *
110
+ * @private
111
+ */
112
+
113
+ var keyRecorder = (0, _recorder.useRecorder)(ownerWindow, beforeKeyDown, afterKeyDown, function (event, keys) {
114
+ var activeContext = getContext(getActiveContextName());
115
+ var isExecutionCancelled = false;
116
+
117
+ if (!activeContext.hasShortcut(keys)) {
118
+ return isExecutionCancelled;
119
+ } // Processing just actions being in stack at the moment of shortcut pressing (without respecting additions/removals performed dynamically).
120
+
121
+
122
+ var shortcuts = activeContext.getShortcuts(keys);
123
+
124
+ for (var index = 0; index < shortcuts.length; index++) {
125
+ var _shortcuts$index = shortcuts[index],
126
+ callback = _shortcuts$index.callback,
127
+ runOnlyIf = _shortcuts$index.runOnlyIf,
128
+ preventDefault = _shortcuts$index.preventDefault,
129
+ stopPropagation = _shortcuts$index.stopPropagation,
130
+ captureCtrl = _shortcuts$index.captureCtrl;
131
+
132
+ if (runOnlyIf(event) !== false) {
133
+ isCtrlKeySilenced = captureCtrl;
134
+ isExecutionCancelled = callback(event, keys) === false;
135
+ isCtrlKeySilenced = false;
136
+
137
+ if (preventDefault) {
138
+ event.preventDefault();
139
+ }
140
+
141
+ if (stopPropagation) {
142
+ event.stopPropagation();
143
+ }
144
+
145
+ if (isExecutionCancelled) {
146
+ break;
147
+ }
148
+ }
149
+ }
150
+
151
+ return isExecutionCancelled;
152
+ });
153
+ keyRecorder.mount();
154
+ return {
155
+ addContext: addContext,
156
+ getActiveContextName: getActiveContextName,
157
+ getContext: getContext,
158
+ setActiveContextName: setActiveContextName,
159
+
160
+ /**
161
+ * Returns whether `control` or `meta` keys are pressed.
162
+ *
163
+ * @memberof ShortcutManager#
164
+ * @type {Function}
165
+ * @returns {boolean}
166
+ */
167
+ isCtrlPressed: function isCtrlPressed() {
168
+ return !isCtrlKeySilenced && (keyRecorder.isPressed('control') || keyRecorder.isPressed('meta'));
169
+ },
170
+
171
+ /**
172
+ * Destroy a context manager instance.
173
+ *
174
+ * @type {Function}
175
+ * @memberof ShortcutManager#
176
+ */
177
+ destroy: function destroy() {
178
+ return keyRecorder.unmount();
179
+ }
180
+ };
181
+ };
182
+
183
+ exports.createShortcutManager = createShortcutManager;
@@ -0,0 +1,174 @@
1
+ import { createUniqueMap } from "../utils/dataStructures/uniqueMap.mjs";
2
+ import { createContext } from "./context.mjs";
3
+ import { useRecorder } from "./recorder.mjs";
4
+ /* eslint-disable jsdoc/require-description-complete-sentence */
5
+
6
+ /**
7
+ * The `ShortcutManager` API lets you store and manage [keyboard shortcut contexts](@/guides/accessories-and-menus/keyboard-shortcuts.md#keyboard-shortcut-contexts) ([`ShortcutContext`](@/api/shortcutContext.md)).
8
+ *
9
+ * Each `ShortcutManager` object:
10
+ * - Stores and manages its own set of keyboard shortcut contexts.
11
+ * - Listens to the [`KeyboardEvent`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent) events and runs actions for them.
12
+ *
13
+ * @alias ShortcutManager
14
+ * @class ShortcutManager
15
+ * @param {object} options The manager's options
16
+ * @param {EventTarget} options.ownerWindow A starting `window` element
17
+ * @param {Function} options.beforeKeyDown A hook fired before the `keydown` event is handled. You can use it to [block a keyboard shortcut's actions](@/guides/accessories-and-menus/keyboard-shortcuts.md#blocking-a-keyboard-shortcut-s-actions).
18
+ * @param {Function} options.afterKeyDown A hook fired after the `keydown` event is handled
19
+ */
20
+
21
+ export var createShortcutManager = function createShortcutManager(_ref) {
22
+ var ownerWindow = _ref.ownerWindow,
23
+ beforeKeyDown = _ref.beforeKeyDown,
24
+ afterKeyDown = _ref.afterKeyDown;
25
+
26
+ /**
27
+ * A unique map that stores keyboard shortcut contexts.
28
+ *
29
+ * @type {UniqueMap}
30
+ */
31
+ var CONTEXTS = createUniqueMap({
32
+ errorIdExists: function errorIdExists(keys) {
33
+ return "The \"".concat(keys, "\" context name is already registered.");
34
+ }
35
+ });
36
+ /**
37
+ * The name of the active [`ShortcutContext`](@/api/shortcutContext.md).
38
+ *
39
+ * @type {string}
40
+ */
41
+
42
+ var activeContextName = 'grid';
43
+ /**
44
+ * Create a new [`ShortcutContext`](@/api/shortcutContext.md) object.
45
+ *
46
+ * @memberof ShortcutManager#
47
+ * @param {string} contextName The name of the new shortcut context
48
+ * @returns {object}
49
+ */
50
+
51
+ var addContext = function addContext(contextName) {
52
+ var context = createContext(contextName);
53
+ CONTEXTS.addItem(contextName, context);
54
+ return context;
55
+ };
56
+ /**
57
+ * Get the ID of the active [`ShortcutContext`](@/api/shortcutContext.md).
58
+ *
59
+ * @memberof ShortcutManager#
60
+ * @returns {string}
61
+ */
62
+
63
+
64
+ var getActiveContextName = function getActiveContextName() {
65
+ return activeContextName;
66
+ };
67
+ /**
68
+ * Get a keyboard shortcut context by its name.
69
+ *
70
+ * @memberof ShortcutManager#
71
+ * @param {string} contextName The name of the shortcut context
72
+ * @returns {object|undefined} A [`ShortcutContext`](@/api/shortcutContext.md) object that stores registered shortcuts
73
+ */
74
+
75
+
76
+ var getContext = function getContext(contextName) {
77
+ return CONTEXTS.getItem(contextName);
78
+ };
79
+ /**
80
+ * Start listening to keyboard shortcuts within a given [`ShortcutContext`](@/api/shortcutContext.md).
81
+ *
82
+ * @memberof ShortcutManager#
83
+ * @param {string} contextName The name of the shortcut context
84
+ */
85
+
86
+
87
+ var setActiveContextName = function setActiveContextName(contextName) {
88
+ activeContextName = contextName;
89
+ };
90
+ /**
91
+ * This variable relates to the `captureCtrl` shortcut option,
92
+ * which allows for capturing the state of the Control/Meta modifier key.
93
+ * Some of the default keyboard shortcuts related to cell selection need this feature for working properly.
94
+ *
95
+ * @type {boolean}
96
+ */
97
+
98
+
99
+ var isCtrlKeySilenced = false;
100
+ /**
101
+ * Internal key recorder.
102
+ *
103
+ * @private
104
+ */
105
+
106
+ var keyRecorder = useRecorder(ownerWindow, beforeKeyDown, afterKeyDown, function (event, keys) {
107
+ var activeContext = getContext(getActiveContextName());
108
+ var isExecutionCancelled = false;
109
+
110
+ if (!activeContext.hasShortcut(keys)) {
111
+ return isExecutionCancelled;
112
+ } // Processing just actions being in stack at the moment of shortcut pressing (without respecting additions/removals performed dynamically).
113
+
114
+
115
+ var shortcuts = activeContext.getShortcuts(keys);
116
+
117
+ for (var index = 0; index < shortcuts.length; index++) {
118
+ var _shortcuts$index = shortcuts[index],
119
+ callback = _shortcuts$index.callback,
120
+ runOnlyIf = _shortcuts$index.runOnlyIf,
121
+ preventDefault = _shortcuts$index.preventDefault,
122
+ stopPropagation = _shortcuts$index.stopPropagation,
123
+ captureCtrl = _shortcuts$index.captureCtrl;
124
+
125
+ if (runOnlyIf(event) !== false) {
126
+ isCtrlKeySilenced = captureCtrl;
127
+ isExecutionCancelled = callback(event, keys) === false;
128
+ isCtrlKeySilenced = false;
129
+
130
+ if (preventDefault) {
131
+ event.preventDefault();
132
+ }
133
+
134
+ if (stopPropagation) {
135
+ event.stopPropagation();
136
+ }
137
+
138
+ if (isExecutionCancelled) {
139
+ break;
140
+ }
141
+ }
142
+ }
143
+
144
+ return isExecutionCancelled;
145
+ });
146
+ keyRecorder.mount();
147
+ return {
148
+ addContext: addContext,
149
+ getActiveContextName: getActiveContextName,
150
+ getContext: getContext,
151
+ setActiveContextName: setActiveContextName,
152
+
153
+ /**
154
+ * Returns whether `control` or `meta` keys are pressed.
155
+ *
156
+ * @memberof ShortcutManager#
157
+ * @type {Function}
158
+ * @returns {boolean}
159
+ */
160
+ isCtrlPressed: function isCtrlPressed() {
161
+ return !isCtrlKeySilenced && (keyRecorder.isPressed('control') || keyRecorder.isPressed('meta'));
162
+ },
163
+
164
+ /**
165
+ * Destroy a context manager instance.
166
+ *
167
+ * @type {Function}
168
+ * @memberof ShortcutManager#
169
+ */
170
+ destroy: function destroy() {
171
+ return keyRecorder.unmount();
172
+ }
173
+ };
174
+ };
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.useRecorder = useRecorder;
5
+
6
+ require("core-js/modules/es.array.includes.js");
7
+
8
+ require("core-js/modules/es.array.concat.js");
9
+
10
+ require("core-js/modules/es.string.includes.js");
11
+
12
+ var _keyObserver = require("./keyObserver");
13
+
14
+ var _utils = require("./utils");
15
+
16
+ var _event = require("../helpers/dom/event");
17
+
18
+ var _browser = require("../helpers/browser");
19
+
20
+ var MODIFIER_KEYS = ['meta', 'alt', 'shift', 'control'];
21
+ var modifierKeysObserver = (0, _keyObserver.createKeysObserver)();
22
+ /* eslint-disable jsdoc/require-description-complete-sentence */
23
+
24
+ /**
25
+ * A key recorder, used for tracking key events.
26
+ *
27
+ * @param {EventTarget} ownerWindow A starting `window` element
28
+ * @param {Function} beforeKeyDown A hook fired before the `keydown` event is handled. You can use it to [block a keyboard shortcut's actions](@/guides/accessories-and-menus/keyboard-shortcuts.md#blocking-a-keyboard-shortcut-s-actions).
29
+ * @param {Function} afterKeyDown A hook fired after the `keydown` event is handled
30
+ * @param {Function} callback `KeyEvent`'s listener's callback function
31
+ * @returns {object}
32
+ */
33
+
34
+ function useRecorder(ownerWindow, beforeKeyDown, afterKeyDown, callback) {
35
+ /**
36
+ * Check if a pressed key is tracked or not.
37
+ *
38
+ * @param {string} pressedKey A pressed key
39
+ * @returns {boolean}
40
+ */
41
+ var isModifierKey = function isModifierKey(pressedKey) {
42
+ return MODIFIER_KEYS.includes(pressedKey);
43
+ };
44
+ /**
45
+ * Get every pressed modifier key from the performed `KeyboardEvent`.
46
+ *
47
+ * @private
48
+ * @param {KeyboardEvent} event The event object.
49
+ * @param {boolean} [mergeMetaKeys=false] If `true,` the function will return the "control" and "meta"
50
+ * modifiers keys as the "control/meta" name. This allows creating
51
+ * keyboard shortcuts with modifier key that trigger the shortcut
52
+ * actions depend on the OS keyboard layout (the Meta key for macOS
53
+ * and Control for non macOS system).
54
+ * @returns {string[]}
55
+ */
56
+
57
+
58
+ var getPressedModifierKeys = function getPressedModifierKeys(event) {
59
+ var mergeMetaKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
60
+ var pressedModifierKeys = [];
61
+
62
+ if (event.altKey) {
63
+ pressedModifierKeys.push('alt');
64
+ }
65
+
66
+ if (mergeMetaKeys && (event.ctrlKey || event.metaKey)) {
67
+ pressedModifierKeys.push('control/meta');
68
+ } else {
69
+ if (event.ctrlKey) {
70
+ pressedModifierKeys.push('control');
71
+ }
72
+
73
+ if (event.metaKey) {
74
+ pressedModifierKeys.push('meta');
75
+ }
76
+ }
77
+
78
+ if (event.shiftKey) {
79
+ pressedModifierKeys.push('shift');
80
+ }
81
+
82
+ return pressedModifierKeys;
83
+ };
84
+ /**
85
+ * `KeyboardEvent`'s callback function
86
+ *
87
+ * @private
88
+ * @param {KeyboardEvent} event The event object
89
+ */
90
+
91
+
92
+ var onkeydown = function onkeydown(event) {
93
+ var result = beforeKeyDown(event);
94
+
95
+ if (result === false || (0, _event.isImmediatePropagationStopped)(event)) {
96
+ return;
97
+ }
98
+
99
+ var pressedKey = (0, _utils.normalizeEventKey)(event.key);
100
+ var extraModifierKeys = [];
101
+
102
+ if (isModifierKey(pressedKey)) {
103
+ modifierKeysObserver.press(pressedKey);
104
+ } else {
105
+ extraModifierKeys = getPressedModifierKeys(event);
106
+ }
107
+
108
+ var pressedKeys = [pressedKey].concat(extraModifierKeys);
109
+ var isExecutionCancelled = callback(event, pressedKeys);
110
+
111
+ if (!isExecutionCancelled && ((0, _browser.isMacOS)() && extraModifierKeys.includes('meta') || !(0, _browser.isMacOS)() && extraModifierKeys.includes('control'))) {
112
+ // Trigger the callback for the virtual OS-dependent "control/meta" key
113
+ callback(event, [pressedKey].concat(getPressedModifierKeys(event, true)));
114
+ }
115
+
116
+ afterKeyDown(event);
117
+ };
118
+ /**
119
+ * `KeyboardEvent`'s callback function
120
+ *
121
+ * @private
122
+ * @param {KeyboardEvent} event The event object
123
+ */
124
+
125
+
126
+ var onkeyup = function onkeyup(event) {
127
+ var pressedKey = (0, _utils.normalizeEventKey)(event.key);
128
+
129
+ if (isModifierKey(pressedKey) === false) {
130
+ return;
131
+ }
132
+
133
+ modifierKeysObserver.release(pressedKey);
134
+ };
135
+ /**
136
+ * `FocusEvent`'s callback function
137
+ *
138
+ * @private
139
+ */
140
+
141
+
142
+ var onblur = function onblur() {
143
+ modifierKeysObserver.releaseAll();
144
+ };
145
+ /**
146
+ * Add event listeners to the starting window and its parents' windows.
147
+ */
148
+
149
+
150
+ var mount = function mount() {
151
+ var eventTarget = ownerWindow;
152
+
153
+ while (eventTarget) {
154
+ eventTarget.addEventListener('keydown', onkeydown);
155
+ eventTarget.addEventListener('keyup', onkeyup);
156
+ eventTarget.addEventListener('blur', onblur);
157
+ eventTarget = eventTarget.frameElement;
158
+ }
159
+ };
160
+ /**
161
+ * Remove event listeners from the starting window and its parents' windows.
162
+ */
163
+
164
+
165
+ var unmount = function unmount() {
166
+ var eventTarget = ownerWindow;
167
+
168
+ while (eventTarget) {
169
+ eventTarget.removeEventListener('keydown', onkeydown);
170
+ eventTarget.removeEventListener('keyup', onkeyup);
171
+ eventTarget.removeEventListener('blur', onblur);
172
+ eventTarget = eventTarget.frameElement;
173
+ }
174
+ };
175
+
176
+ return {
177
+ mount: mount,
178
+ unmount: unmount,
179
+ isPressed: function isPressed(key) {
180
+ return modifierKeysObserver.isPressed(key);
181
+ }
182
+ };
183
+ }