handsontable 13.1.0 → 14.0.0-next-d97b156-20231027

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 +21236 -14104
  127. package/dist/handsontable.full.min.css +8 -8
  128. package/dist/handsontable.full.min.js +170 -152
  129. package/dist/handsontable.js +22016 -15254
  130. package/dist/handsontable.min.css +7 -7
  131. package/dist/handsontable.min.js +31 -23
  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 +108 -66
  409. package/plugins/filters/filters.mjs +99 -55
  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
package/core.js CHANGED
@@ -12,6 +12,7 @@ var _browser = require("./helpers/browser");
12
12
  var _editorManager = _interopRequireDefault(require("./editorManager"));
13
13
  var _eventManager = _interopRequireDefault(require("./eventManager"));
14
14
  var _object = require("./helpers/object");
15
+ var _focusManager = require("./focusManager");
15
16
  var _array = require("./helpers/array");
16
17
  var _parseTable = require("./utils/parseTable");
17
18
  var _registry = require("./plugins/registry");
@@ -31,12 +32,22 @@ var _registry5 = require("./i18n/registry");
31
32
  var _utils = require("./i18n/utils");
32
33
  var _selection = require("./selection");
33
34
  var _dataMap = require("./dataMap");
35
+ var _index3 = require("./core/index");
34
36
  var _uniqueMap = require("./utils/dataStructures/uniqueMap");
35
37
  var _shortcuts = require("./shortcuts");
38
+ var _shortcutContexts = require("./shortcutContexts");
36
39
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
- const SHORTCUTS_GROUP = 'gridDefault';
38
40
  let activeGuid = null;
39
41
 
42
+ /**
43
+ * Keeps the collection of the all Handsontable instances created on the same page. The
44
+ * list is then used to trigger the "afterUnlisten" hook when the "listen()" method was
45
+ * called on another instance.
46
+ *
47
+ * @type {Map<string, Core>}
48
+ */
49
+ const foreignHotInstances = new Map();
50
+
40
51
  /**
41
52
  * A set of deprecated feature names.
42
53
  *
@@ -96,7 +107,8 @@ const deprecationWarns = new Set();
96
107
  * @param {boolean} [rootInstanceSymbol=false] Indicates if the instance is root of all later instances created.
97
108
  */
98
109
  function Core(rootElement, userSettings) {
99
- var _userSettings$layoutD;
110
+ var _userSettings$layoutD,
111
+ _this = this;
100
112
  let rootInstanceSymbol = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
101
113
  let preventScrollingToCell = false;
102
114
  let instance = this;
@@ -105,6 +117,7 @@ function Core(rootElement, userSettings) {
105
117
  let dataSource;
106
118
  let grid;
107
119
  let editorManager;
120
+ let focusManager;
108
121
  let firstRun = true;
109
122
  if ((0, _rootInstance.hasValidParameter)(rootInstanceSymbol)) {
110
123
  (0, _rootInstance.registerAsRootInstance)(this);
@@ -213,6 +226,8 @@ function Core(rootElement, userSettings) {
213
226
  }
214
227
  this.guid = `ht_${(0, _string.randomString)()}`; // this is the namespace for global events
215
228
 
229
+ foreignHotInstances.set(this.guid, this);
230
+
216
231
  /**
217
232
  * Instance of index mapper which is responsible for managing the column indexes.
218
233
  *
@@ -261,14 +276,16 @@ function Core(rootElement, userSettings) {
261
276
  };
262
277
 
263
278
  let selection = new _selection.Selection(tableMeta, {
264
- rowIndexMapper: () => instance.rowIndexMapper,
265
- columnIndexMapper: () => instance.columnIndexMapper,
279
+ rowIndexMapper: instance.rowIndexMapper,
280
+ columnIndexMapper: instance.columnIndexMapper,
266
281
  countCols: () => instance.countCols(),
267
282
  countRows: () => instance.countRows(),
268
283
  propToCol: prop => datamap.propToCol(prop),
269
284
  isEditorOpened: () => instance.getActiveEditor() ? instance.getActiveEditor().isOpened() : false,
270
- countColsTranslated: () => this.view.countRenderableColumns(),
271
- countRowsTranslated: () => this.view.countRenderableRows(),
285
+ countRenderableColumns: () => this.view.countRenderableColumns(),
286
+ countRenderableRows: () => this.view.countRenderableRows(),
287
+ countRowHeaders: () => this.countRowHeaders(),
288
+ countColHeaders: () => this.countColHeaders(),
272
289
  getShortcutManager: () => instance.getShortcutManager(),
273
290
  createCellCoords: (row, column) => instance._createCellCoords(row, column),
274
291
  createCellRange: (highlight, from, to) => instance._createCellRange(highlight, from, to),
@@ -287,21 +304,6 @@ function Core(rootElement, userSettings) {
287
304
  };
288
305
  this.columnIndexMapper.addLocalHook('cacheUpdated', onIndexMapperCacheUpdate);
289
306
  this.rowIndexMapper.addLocalHook('cacheUpdated', onIndexMapperCacheUpdate);
290
- this.selection.addLocalHook('beforeSetRangeStart', cellCoords => {
291
- this.runHooks('beforeSetRangeStart', cellCoords);
292
- });
293
- this.selection.addLocalHook('beforeSetRangeStartOnly', cellCoords => {
294
- this.runHooks('beforeSetRangeStartOnly', cellCoords);
295
- });
296
- this.selection.addLocalHook('beforeSetRangeEnd', cellCoords => {
297
- this.runHooks('beforeSetRangeEnd', cellCoords);
298
- if (cellCoords.row < 0) {
299
- cellCoords.row = this.view._wt.wtTable.getFirstVisibleRow();
300
- }
301
- if (cellCoords.col < 0) {
302
- cellCoords.col = this.view._wt.wtTable.getFirstVisibleColumn();
303
- }
304
- });
305
307
  this.selection.addLocalHook('afterSetRangeEnd', cellCoords => {
306
308
  const preventScrolling = (0, _object.createObjectPropListener)(false);
307
309
  const selectionRange = this.selection.getSelectedRange();
@@ -313,8 +315,6 @@ function Core(rootElement, userSettings) {
313
315
  this.runHooks('afterSelection', from.row, from.col, to.row, to.col, preventScrolling, selectionLayerLevel);
314
316
  this.runHooks('afterSelectionByProp', from.row, instance.colToProp(from.col), to.row, instance.colToProp(to.col), preventScrolling, selectionLayerLevel); // eslint-disable-line max-len
315
317
 
316
- const isSelectedByAnyHeader = this.selection.isSelectedByAnyHeader();
317
- const currentSelectedRange = this.selection.selectedRange.current();
318
318
  let scrollToCell = true;
319
319
  if (preventScrollingToCell) {
320
320
  scrollToCell = false;
@@ -322,19 +322,42 @@ function Core(rootElement, userSettings) {
322
322
  if (preventScrolling.isTouched()) {
323
323
  scrollToCell = !preventScrolling.value;
324
324
  }
325
+ const currentSelectedRange = this.selection.selectedRange.current();
326
+ const isSelectedByAnyHeader = this.selection.isSelectedByAnyHeader();
325
327
  const isSelectedByRowHeader = this.selection.isSelectedByRowHeader();
326
328
  const isSelectedByColumnHeader = this.selection.isSelectedByColumnHeader();
327
329
  if (scrollToCell !== false) {
328
330
  if (!isSelectedByAnyHeader) {
329
331
  if (currentSelectedRange && !this.selection.isMultiple()) {
330
- this.view.scrollViewport(visualToRenderableCoords(currentSelectedRange.from));
332
+ const {
333
+ row,
334
+ col
335
+ } = currentSelectedRange.from;
336
+ if (row < 0 && col >= 0) {
337
+ this.scrollViewportTo({
338
+ col
339
+ });
340
+ } else if (col < 0 && row >= 0) {
341
+ this.scrollViewportTo({
342
+ row
343
+ });
344
+ } else {
345
+ this.scrollViewportTo({
346
+ row,
347
+ col
348
+ });
349
+ }
331
350
  } else {
332
- this.view.scrollViewport(visualToRenderableCoords(cellCoords));
351
+ this.scrollViewportTo(cellCoords.toObject());
333
352
  }
334
353
  } else if (isSelectedByRowHeader) {
335
- this.view.scrollViewportVertically(instance.rowIndexMapper.getRenderableFromVisualIndex(cellCoords.row));
354
+ this.scrollViewportTo({
355
+ row: cellCoords.row
356
+ });
336
357
  } else if (isSelectedByColumnHeader) {
337
- this.view.scrollViewportHorizontally(instance.columnIndexMapper.getRenderableFromVisualIndex(cellCoords.col));
358
+ this.scrollViewportTo({
359
+ col: cellCoords.col
360
+ });
338
361
  }
339
362
  }
340
363
 
@@ -369,30 +392,78 @@ function Core(rootElement, userSettings) {
369
392
  isMultiple.value = changedIsMultiple;
370
393
  }
371
394
  });
372
- this.selection.addLocalHook('beforeModifyTransformStart', cellCoordsDelta => {
373
- this.runHooks('modifyTransformStart', cellCoordsDelta);
374
- });
375
- this.selection.addLocalHook('afterModifyTransformStart', (coords, rowTransformDir, colTransformDir) => {
376
- this.runHooks('afterModifyTransformStart', coords, rowTransformDir, colTransformDir);
377
- });
378
- this.selection.addLocalHook('beforeModifyTransformEnd', cellCoordsDelta => {
379
- this.runHooks('modifyTransformEnd', cellCoordsDelta);
380
- });
381
- this.selection.addLocalHook('afterModifyTransformEnd', (coords, rowTransformDir, colTransformDir) => {
382
- this.runHooks('afterModifyTransformEnd', coords, rowTransformDir, colTransformDir);
383
- });
384
395
  this.selection.addLocalHook('afterDeselect', () => {
385
396
  editorManager.destroyEditor();
386
397
  this._refreshBorders();
387
398
  (0, _element.removeClass)(this.rootElement, ['ht__selection--rows', 'ht__selection--columns']);
388
399
  this.runHooks('afterDeselect');
389
400
  });
390
- this.selection.addLocalHook('insertRowRequire', totalRows => {
391
- this.alter('insert_row_above', totalRows, 1, 'auto');
392
- });
393
- this.selection.addLocalHook('insertColRequire', totalCols => {
394
- this.alter('insert_col_start', totalCols, 1, 'auto');
395
- });
401
+ this.selection.addLocalHook('beforeHighlightSet', () => this.runHooks('beforeSelectionHighlightSet')).addLocalHook('beforeSetRangeStart', function () {
402
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
403
+ args[_key] = arguments[_key];
404
+ }
405
+ return _this.runHooks('beforeSetRangeStart', ...args);
406
+ }).addLocalHook('beforeSetRangeStartOnly', function () {
407
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
408
+ args[_key2] = arguments[_key2];
409
+ }
410
+ return _this.runHooks('beforeSetRangeStartOnly', ...args);
411
+ }).addLocalHook('beforeSetRangeEnd', function () {
412
+ for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
413
+ args[_key3] = arguments[_key3];
414
+ }
415
+ return _this.runHooks('beforeSetRangeEnd', ...args);
416
+ }).addLocalHook('beforeSelectColumns', function () {
417
+ for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
418
+ args[_key4] = arguments[_key4];
419
+ }
420
+ return _this.runHooks('beforeSelectColumns', ...args);
421
+ }).addLocalHook('afterSelectColumns', function () {
422
+ for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
423
+ args[_key5] = arguments[_key5];
424
+ }
425
+ return _this.runHooks('afterSelectColumns', ...args);
426
+ }).addLocalHook('beforeSelectRows', function () {
427
+ for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
428
+ args[_key6] = arguments[_key6];
429
+ }
430
+ return _this.runHooks('beforeSelectRows', ...args);
431
+ }).addLocalHook('afterSelectRows', function () {
432
+ for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
433
+ args[_key7] = arguments[_key7];
434
+ }
435
+ return _this.runHooks('afterSelectRows', ...args);
436
+ }).addLocalHook('beforeModifyTransformStart', function () {
437
+ for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
438
+ args[_key8] = arguments[_key8];
439
+ }
440
+ return _this.runHooks('modifyTransformStart', ...args);
441
+ }).addLocalHook('afterModifyTransformStart', function () {
442
+ for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
443
+ args[_key9] = arguments[_key9];
444
+ }
445
+ return _this.runHooks('afterModifyTransformStart', ...args);
446
+ }).addLocalHook('beforeModifyTransformEnd', function () {
447
+ for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
448
+ args[_key10] = arguments[_key10];
449
+ }
450
+ return _this.runHooks('modifyTransformEnd', ...args);
451
+ }).addLocalHook('afterModifyTransformEnd', function () {
452
+ for (var _len11 = arguments.length, args = new Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
453
+ args[_key11] = arguments[_key11];
454
+ }
455
+ return _this.runHooks('afterModifyTransformEnd', ...args);
456
+ }).addLocalHook('beforeRowWrap', function () {
457
+ for (var _len12 = arguments.length, args = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {
458
+ args[_key12] = arguments[_key12];
459
+ }
460
+ return _this.runHooks('beforeRowWrap', ...args);
461
+ }).addLocalHook('beforeColumnWrap', function () {
462
+ for (var _len13 = arguments.length, args = new Array(_len13), _key13 = 0; _key13 < _len13; _key13++) {
463
+ args[_key13] = arguments[_key13];
464
+ }
465
+ return _this.runHooks('beforeColumnWrap', ...args);
466
+ }).addLocalHook('insertRowRequire', totalRows => this.alter('insert_row_above', totalRows, 1, 'auto')).addLocalHook('insertColRequire', totalCols => this.alter('insert_col_start', totalCols, 1, 'auto'));
396
467
  grid = {
397
468
  /**
398
469
  * Inserts or removes rows and columns.
@@ -474,7 +545,9 @@ function Core(rootElement, userSettings) {
474
545
  const currentFromRow = currentFromRange === null || currentFromRange === void 0 ? void 0 : currentFromRange.row;
475
546
  const startVisualRowIndex = instance.toVisualRow(startRowPhysicalIndex);
476
547
  if (selection.isSelectedByCorner()) {
477
- instance.selectAll();
548
+ selection.selectAll(true, true, {
549
+ disableHeadersHighlight: true
550
+ });
478
551
  } else if ((0, _mixed.isDefined)(currentFromRow) && currentFromRow >= startVisualRowIndex) {
479
552
  // Moving the selection (if it exists) downward – it should be applied to the "old" row.
480
553
  // TODO: The logic here should be handled by selection module.
@@ -528,7 +601,9 @@ function Core(rootElement, userSettings) {
528
601
  const currentFromColumn = currentFromRange === null || currentFromRange === void 0 ? void 0 : currentFromRange.col;
529
602
  const startVisualColumnIndex = instance.toVisualColumn(startColumnPhysicalIndex);
530
603
  if (selection.isSelectedByCorner()) {
531
- instance.selectAll();
604
+ selection.selectAll(true, true, {
605
+ disableHeadersHighlight: true
606
+ });
532
607
  } else if ((0, _mixed.isDefined)(currentFromColumn) && currentFromColumn >= startVisualColumnIndex) {
533
608
  // Moving the selection (if it exists) rightward – it should be applied to the "old" column.
534
609
  // TODO: The logic here should be handled by selection module.
@@ -1018,6 +1093,10 @@ function Core(rootElement, userSettings) {
1018
1093
  this.updateSettings(tableMeta, true);
1019
1094
  this.view = new _tableView.default(this);
1020
1095
  editorManager = _editorManager.default.getInstance(instance, tableMeta, selection);
1096
+ focusManager = new _focusManager.FocusManager(instance);
1097
+ if ((0, _rootInstance.isRootInstance)(this)) {
1098
+ (0, _index3.installFocusCatcher)(instance);
1099
+ }
1021
1100
  instance.runHooks('init');
1022
1101
  this.forceFullRender = true; // used when data was changed
1023
1102
  this.view.render();
@@ -1431,6 +1510,11 @@ function Core(rootElement, userSettings) {
1431
1510
  */
1432
1511
  this.listen = function () {
1433
1512
  if (instance && !instance.isListening()) {
1513
+ foreignHotInstances.forEach(foreignHot => {
1514
+ if (instance !== foreignHot) {
1515
+ foreignHot.unlisten();
1516
+ }
1517
+ });
1434
1518
  activeGuid = instance.guid;
1435
1519
  instance.runHooks('afterListen');
1436
1520
  }
@@ -1515,8 +1599,8 @@ function Core(rootElement, userSettings) {
1515
1599
  * @returns {Array} Returns removed portion of columns.
1516
1600
  */
1517
1601
  this.spliceCol = function (column, index, amount) {
1518
- for (var _len = arguments.length, elements = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
1519
- elements[_key - 3] = arguments[_key];
1602
+ for (var _len14 = arguments.length, elements = new Array(_len14 > 3 ? _len14 - 3 : 0), _key14 = 3; _key14 < _len14; _key14++) {
1603
+ elements[_key14 - 3] = arguments[_key14];
1520
1604
  }
1521
1605
  return datamap.spliceCol(column, index, amount, ...elements);
1522
1606
  };
@@ -1533,8 +1617,8 @@ function Core(rootElement, userSettings) {
1533
1617
  * @returns {Array} Returns removed portion of rows.
1534
1618
  */
1535
1619
  this.spliceRow = function (row, index, amount) {
1536
- for (var _len2 = arguments.length, elements = new Array(_len2 > 3 ? _len2 - 3 : 0), _key2 = 3; _key2 < _len2; _key2++) {
1537
- elements[_key2 - 3] = arguments[_key2];
1620
+ for (var _len15 = arguments.length, elements = new Array(_len15 > 3 ? _len15 - 3 : 0), _key15 = 3; _key15 < _len15; _key15++) {
1621
+ elements[_key15 - 3] = arguments[_key15];
1538
1622
  }
1539
1623
  return datamap.spliceRow(row, index, amount, ...elements);
1540
1624
  };
@@ -1631,6 +1715,9 @@ function Core(rootElement, userSettings) {
1631
1715
  }
1632
1716
  const changes = [];
1633
1717
  (0, _array.arrayEach)(selection.getSelectedRange(), cellRange => {
1718
+ if (cellRange.isSingleHeader()) {
1719
+ return;
1720
+ }
1634
1721
  const topStart = cellRange.getTopStartCorner();
1635
1722
  const bottomEnd = cellRange.getBottomEndCorner();
1636
1723
  (0, _number.rangeEach)(topStart.row, bottomEnd.row, row => {
@@ -2928,8 +3015,8 @@ function Core(rootElement, userSettings) {
2928
3015
  */
2929
3016
  this.spliceCellsMeta = function (visualIndex) {
2930
3017
  let deleteAmount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
2931
- for (var _len3 = arguments.length, cellMetaRows = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {
2932
- cellMetaRows[_key3 - 2] = arguments[_key3];
3018
+ for (var _len16 = arguments.length, cellMetaRows = new Array(_len16 > 2 ? _len16 - 2 : 0), _key16 = 2; _key16 < _len16; _key16++) {
3019
+ cellMetaRows[_key16 - 2] = arguments[_key16];
2933
3020
  }
2934
3021
  if (cellMetaRows.length > 0 && !Array.isArray(cellMetaRows[0])) {
2935
3022
  throw new Error('The 3rd argument (cellMetaRows) has to be passed as an array of cell meta objects array.');
@@ -3620,6 +3707,30 @@ function Core(rootElement, userSettings) {
3620
3707
  return instance.view._wt.drawn ? instance.view._wt.wtTable.getVisibleColumnsCount() : -1;
3621
3708
  };
3622
3709
 
3710
+ /**
3711
+ * Returns the number of rendered row headers.
3712
+ *
3713
+ * @since 14.0.0
3714
+ * @memberof Core#
3715
+ * @function countRowHeaders
3716
+ * @returns {number} Number of row headers.
3717
+ */
3718
+ this.countRowHeaders = function () {
3719
+ return this.view.getRowHeadersCount();
3720
+ };
3721
+
3722
+ /**
3723
+ * Returns the number of rendered column headers.
3724
+ *
3725
+ * @since 14.0.0
3726
+ * @memberof Core#
3727
+ * @function countColHeaders
3728
+ * @returns {number} Number of column headers.
3729
+ */
3730
+ this.countColHeaders = function () {
3731
+ return this.view.getColumnHeadersCount();
3732
+ };
3733
+
3623
3734
  /**
3624
3735
  * Returns the number of empty rows. If the optional ending parameter is `true`, returns the
3625
3736
  * number of empty rows at the bottom of the table.
@@ -3824,6 +3935,10 @@ function Core(rootElement, userSettings) {
3824
3935
  * hot.selectColumns('id');
3825
3936
  * // Select range of columns using visual indexes.
3826
3937
  * hot.selectColumns(1, 4);
3938
+ * // Select range of columns using visual indexes and mark the first header as highlighted.
3939
+ * hot.selectColumns(1, 2, -1);
3940
+ * // Select range of columns using visual indexes and mark the second cell as highlighted.
3941
+ * hot.selectColumns(2, 1, 1);
3827
3942
  * // Select range of columns using column properties.
3828
3943
  * hot.selectColumns('id', 'last_name');
3829
3944
  * ```
@@ -3834,11 +3949,15 @@ function Core(rootElement, userSettings) {
3834
3949
  * @param {number} startColumn The visual column index from which the selection starts.
3835
3950
  * @param {number} [endColumn=startColumn] The visual column index to which the selection finishes. If `endColumn`
3836
3951
  * is not defined the column defined by `startColumn` will be selected.
3952
+ * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
3953
+ * The value can take visual row index from -N to N, where negative values
3954
+ * point to the headers and positive values point to the cell range.
3837
3955
  * @returns {boolean} `true` if selection was successful, `false` otherwise.
3838
3956
  */
3839
3957
  this.selectColumns = function (startColumn) {
3840
3958
  let endColumn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startColumn;
3841
- return selection.selectColumns(startColumn, endColumn);
3959
+ let focusPosition = arguments.length > 2 ? arguments[2] : undefined;
3960
+ return selection.selectColumns(startColumn, endColumn, focusPosition);
3842
3961
  };
3843
3962
 
3844
3963
  /**
@@ -3848,8 +3967,12 @@ function Core(rootElement, userSettings) {
3848
3967
  * ```js
3849
3968
  * // Select row using visual index.
3850
3969
  * hot.selectRows(1);
3851
- * // Select range of rows using visual indexes.
3970
+ * // select a range of rows, using visual indexes.
3852
3971
  * hot.selectRows(1, 4);
3972
+ * // select a range of rows, using visual indexes, and mark the header as highlighted.
3973
+ * hot.selectRows(1, 2, -1);
3974
+ * // Select range of rows using visual indexes and mark the second cell as highlighted.
3975
+ * hot.selectRows(2, 1, 1);
3853
3976
  * ```
3854
3977
  *
3855
3978
  * @memberof Core#
@@ -3858,11 +3981,15 @@ function Core(rootElement, userSettings) {
3858
3981
  * @param {number} startRow The visual row index from which the selection starts.
3859
3982
  * @param {number} [endRow=startRow] The visual row index to which the selection finishes. If `endRow`
3860
3983
  * is not defined the row defined by `startRow` will be selected.
3984
+ * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
3985
+ * The value can take visual column index from -N to N, where negative values
3986
+ * point to the headers and positive values point to the cell range.
3861
3987
  * @returns {boolean} `true` if selection was successful, `false` otherwise.
3862
3988
  */
3863
3989
  this.selectRows = function (startRow) {
3864
3990
  let endRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startRow;
3865
- return selection.selectRows(startRow, endRow);
3991
+ let focusPosition = arguments.length > 2 ? arguments[2] : undefined;
3992
+ return selection.selectRows(startRow, endRow, focusPosition);
3866
3993
  };
3867
3994
 
3868
3995
  /**
@@ -3881,9 +4008,16 @@ function Core(rootElement, userSettings) {
3881
4008
  * The previous selection is overwritten.
3882
4009
  *
3883
4010
  * ```js
3884
- * // select all cells in the table, including all headers
4011
+ * // select all cells in the table, including all headers and the corner cell
3885
4012
  * hot.selectAll();
3886
4013
  *
4014
+ * // select all cells in the table, including row headers but excluding the corner cell
4015
+ * hot.selectAll(true, false);
4016
+ *
4017
+ * // select all cells in the table, including all headers and the corner cell, but move the focus
4018
+ * // highlight to position -2, -1
4019
+ * hot.selectAll(-2, -1);
4020
+ *
3887
4021
  * // select all cells in the table, without headers
3888
4022
  * hot.selectAll(false);
3889
4023
  * ```
@@ -3891,15 +4025,25 @@ function Core(rootElement, userSettings) {
3891
4025
  * @since 0.38.2
3892
4026
  * @memberof Core#
3893
4027
  * @function selectAll
3894
- * @param {boolean} [includeHeaders=true] `true`: include all row, column and corner headers.
3895
- * `false`: don't include any headers.
4028
+ * @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers,
4029
+ * `false` otherwise.
4030
+ * @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column
4031
+ * headers, `false` otherwise.
4032
+ *
4033
+ * @param {object} [options] Additional object with options.
4034
+ * @param {{row: number, col: number} | boolean} [options.focusPosition] The argument allows changing the cell/header
4035
+ * focus position. The value takes an object with a `row` and `col` properties from -N to N, where
4036
+ * negative values point to the headers and positive values point to the cell range. If `false`, the focus
4037
+ * position won't be changed.
4038
+ * @param {boolean} [options.disableHeadersHighlight] If `true`, disables highlighting the headers even when
4039
+ * the logical coordinates points on them.
3896
4040
  */
3897
4041
  this.selectAll = function () {
3898
- let includeHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
3899
- const includeRowHeaders = includeHeaders && this.hasRowHeaders();
3900
- const includeColumnHeaders = includeHeaders && this.hasColHeaders();
4042
+ let includeRowHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
4043
+ let includeColumnHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : includeRowHeaders;
4044
+ let options = arguments.length > 2 ? arguments[2] : undefined;
3901
4045
  preventScrollingToCell = true;
3902
- selection.selectAll(includeRowHeaders, includeColumnHeaders);
4046
+ selection.selectAll(includeRowHeaders, includeColumnHeaders, options);
3903
4047
  preventScrollingToCell = false;
3904
4048
  };
3905
4049
  const getIndexToScroll = (indexMapper, visualIndex) => {
@@ -3908,55 +4052,117 @@ function Core(rootElement, userSettings) {
3908
4052
  };
3909
4053
 
3910
4054
  /**
3911
- * Scroll viewport to coordinates specified by the `row` and `column` arguments.
4055
+ * Scroll viewport to coordinates specified by the `row` and/or `col` object properties.
4056
+ *
4057
+ * ```js
4058
+ * // scroll the viewport to the visual row index (leave the horizontal scroll untouched)
4059
+ * hot.scrollViewportTo({ row: 50 });
4060
+ *
4061
+ * // scroll the viewport to the passed coordinates so that the cell at 50, 50 will be snapped to
4062
+ * // the bottom-end table's edge.
4063
+ * hot.scrollViewportTo({
4064
+ * row: 50,
4065
+ * col: 50,
4066
+ * verticalSnap: 'bottom',
4067
+ * horizontalSnap: 'end',
4068
+ * });
4069
+ * ```
3912
4070
  *
3913
4071
  * @memberof Core#
3914
4072
  * @function scrollViewportTo
3915
- * @param {number} [row] Row index. If the last argument isn't defined we treat the index as a visual row index. Otherwise,
3916
- * we are using the index for numbering only this rows which may be rendered (we don't consider hidden rows).
3917
- * @param {number} [column] Column index. If the last argument isn't defined we treat the index as a visual column index.
3918
- * Otherwise, we are using the index for numbering only this columns which may be rendered (we don't consider hidden columns).
3919
- * @param {boolean} [snapToBottom=false] If `true`, the viewport is scrolled to show the cell at the bottom of the table.
3920
- * However, if the cell's height is greater than the table's viewport height, the cell is snapped to the top edge.
3921
- * @param {boolean} [snapToRight=false] If `true`, the viewport is scrolled to show the cell at the right side of the table.
3922
- * However, if the cell is wider than the table's viewport width, the cell is snapped to the left edge (or to the right edge, if the layout direction is set to `rtl`).
3923
- * @param {boolean} [considerHiddenIndexes=true] If `true`, we handle visual indexes, otherwise we handle only indexes which
4073
+ * @param {object} options A dictionary containing the following parameters:
4074
+ * @param {number} [options.row] Specifies the number of visual rows along the Y axis to scroll the viewport.
4075
+ * @param {number} [options.col] Specifies the number of visual columns along the X axis to scroll the viewport.
4076
+ * @param {'top' | 'bottom'} [options.verticalSnap] Determines to which edge of the table the viewport will be scrolled based on the passed coordinates.
4077
+ * This option is a string which must take one of the following values:
4078
+ * - `top`: The viewport will be scrolled to a row in such a way that it will be positioned on the top of the viewport;
4079
+ * - `bottom`: The viewport will be scrolled to a row in such a way that it will be positioned on the bottom of the viewport;
4080
+ * - If the property is not defined the vertical auto-snapping is enabled. Depending on where the viewport is scrolled from, a row will
4081
+ * be positioned at the top or bottom of the viewport.
4082
+ * @param {'start' | 'end'} [options.horizontalSnap] Determines to which edge of the table the viewport will be scrolled based on the passed coordinates.
4083
+ * This option is a string which must take one of the following values:
4084
+ * - `start`: The viewport will be scrolled to a column in such a way that it will be positioned on the start (left edge or right, if the layout direction is set to `rtl`) of the viewport;
4085
+ * - `end`: The viewport will be scrolled to a column in such a way that it will be positioned on the end (right edge or left, if the layout direction is set to `rtl`) of the viewport;
4086
+ * - If the property is not defined the horizontal auto-snapping is enabled. Depending on where the viewport is scrolled from, a column will
4087
+ * be positioned at the start or end of the viewport.
4088
+ * @param {boolean} [options.considerHiddenIndexes=true] If `true`, we handle visual indexes, otherwise we handle only indexes which
3924
4089
  * may be rendered when they are in the viewport (we don't consider hidden indexes as they aren't rendered).
3925
- * @returns {boolean} `true` if scroll was successful, `false` otherwise.
3926
- */
3927
- this.scrollViewportTo = function (row, column) {
3928
- let snapToBottom = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
3929
- let snapToRight = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
3930
- let considerHiddenIndexes = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
3931
- const snapToTop = !snapToBottom;
3932
- const snapToLeft = !snapToRight;
4090
+ * @returns {boolean} `true` if viewport was scrolled, `false` otherwise.
4091
+ */
4092
+ this.scrollViewportTo = function () {
4093
+ let {
4094
+ row,
4095
+ col,
4096
+ verticalSnap,
4097
+ horizontalSnap,
4098
+ considerHiddenIndexes
4099
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4100
+ let snapToTop;
4101
+ let snapToBottom;
4102
+ let snapToInlineStart;
4103
+ let snapToInlineEnd;
4104
+ if (verticalSnap !== undefined) {
4105
+ snapToTop = verticalSnap === 'top';
4106
+ snapToBottom = !snapToTop;
4107
+ }
4108
+ if (horizontalSnap !== undefined) {
4109
+ snapToInlineStart = horizontalSnap === 'start';
4110
+ snapToInlineEnd = !snapToInlineStart;
4111
+ }
3933
4112
  let renderableRow = row;
3934
- let renderableColumn = column;
3935
- if (considerHiddenIndexes) {
3936
- const isRowInteger = Number.isInteger(row);
3937
- const isColumnInteger = Number.isInteger(column);
3938
- const visualRowToScroll = isRowInteger ? getIndexToScroll(this.rowIndexMapper, row) : void 0;
3939
- const visualColumnToScroll = isColumnInteger ? getIndexToScroll(this.columnIndexMapper, column) : void 0;
4113
+ let renderableColumn = col;
4114
+ if (considerHiddenIndexes === undefined || considerHiddenIndexes) {
4115
+ const isValidRowGrid = Number.isInteger(row) && row >= 0;
4116
+ const isValidColumnGrid = Number.isInteger(col) && col >= 0;
4117
+ const visualRowToScroll = isValidRowGrid ? getIndexToScroll(this.rowIndexMapper, row) : undefined;
4118
+ const visualColumnToScroll = isValidColumnGrid ? getIndexToScroll(this.columnIndexMapper, col) : undefined;
3940
4119
  if (visualRowToScroll === null || visualColumnToScroll === null) {
3941
4120
  return false;
3942
4121
  }
3943
- renderableRow = isRowInteger ? instance.rowIndexMapper.getRenderableFromVisualIndex(visualRowToScroll) : void 0;
3944
- renderableColumn = isColumnInteger ? instance.columnIndexMapper.getRenderableFromVisualIndex(visualColumnToScroll) : void 0;
4122
+ renderableRow = isValidRowGrid ? instance.rowIndexMapper.getRenderableFromVisualIndex(visualRowToScroll) : row;
4123
+ renderableColumn = isValidColumnGrid ? instance.columnIndexMapper.getRenderableFromVisualIndex(visualColumnToScroll) : col;
3945
4124
  }
3946
4125
  const isRowInteger = Number.isInteger(renderableRow);
3947
4126
  const isColumnInteger = Number.isInteger(renderableColumn);
3948
- if (isRowInteger && isColumnInteger) {
3949
- return instance.view.scrollViewport(instance._createCellCoords(renderableRow, renderableColumn), snapToTop, snapToRight, snapToBottom, snapToLeft);
4127
+ if (isRowInteger && renderableRow >= 0 && isColumnInteger && renderableColumn >= 0) {
4128
+ return instance.view.scrollViewport(instance._createCellCoords(renderableRow, renderableColumn), snapToTop, snapToInlineEnd, snapToBottom, snapToInlineStart);
3950
4129
  }
3951
- if (isRowInteger && isColumnInteger === false) {
4130
+ if (isRowInteger && renderableRow >= 0 && (isColumnInteger && renderableColumn < 0 || !isColumnInteger)) {
3952
4131
  return instance.view.scrollViewportVertically(renderableRow, snapToTop, snapToBottom);
3953
4132
  }
3954
- if (isColumnInteger && isRowInteger === false) {
3955
- return instance.view.scrollViewportHorizontally(renderableColumn, snapToRight, snapToLeft);
4133
+ if (isColumnInteger && renderableColumn >= 0 && (isRowInteger && renderableRow < 0 || !isRowInteger)) {
4134
+ return instance.view.scrollViewportHorizontally(renderableColumn, snapToInlineEnd, snapToInlineStart);
3956
4135
  }
3957
4136
  return false;
3958
4137
  };
3959
4138
 
4139
+ /**
4140
+ * Scrolls the viewport to coordinates specified by the currently focused cell.
4141
+ *
4142
+ * @since 14.0.0
4143
+ * @memberof Core#
4144
+ * @fires Hooks#afterScroll
4145
+ * @function scrollToFocusedCell
4146
+ * @param {Function} callback The callback function to call after the viewport is scrolled.
4147
+ */
4148
+ this.scrollToFocusedCell = function () {
4149
+ let callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : () => {};
4150
+ if (!this.selection.isSelected()) {
4151
+ return;
4152
+ }
4153
+ this.addHookOnce('afterScroll', callback);
4154
+ const {
4155
+ highlight
4156
+ } = this.getSelectedRangeLast();
4157
+ const isScrolled = this.scrollViewportTo(highlight.toObject());
4158
+ if (isScrolled) {
4159
+ this.view.render();
4160
+ } else {
4161
+ this.removeHook('afterScroll', callback);
4162
+ this._registerImmediate(() => callback());
4163
+ }
4164
+ };
4165
+
3960
4166
  /**
3961
4167
  * Removes the table from the DOM and destroys the instance of the Handsontable.
3962
4168
  *
@@ -3977,6 +4183,7 @@ function Core(rootElement, userSettings) {
3977
4183
  dataSource = null;
3978
4184
  this.getShortcutManager().destroy();
3979
4185
  metaManager.clearCache();
4186
+ foreignHotInstances.delete(this.guid);
3980
4187
  if ((0, _rootInstance.isRootInstance)(instance)) {
3981
4188
  const licenseInfo = this.rootDocument.querySelector('.hot-display-license-info');
3982
4189
  if (licenseInfo) {
@@ -4201,7 +4408,7 @@ function Core(rootElement, userSettings) {
4201
4408
  * @function getTranslatedPhrase
4202
4409
  * @since 0.35.0
4203
4410
  * @param {string} dictionaryKey Constant which is dictionary key.
4204
- * @param {*} extraArguments Arguments which will be handled by formatters.
4411
+ * @param {*} [extraArguments] Arguments which will be handled by formatters.
4205
4412
  * @returns {string}
4206
4413
  */
4207
4414
  this.getTranslatedPhrase = function (dictionaryKey, extraArguments) {
@@ -4300,6 +4507,16 @@ function Core(rootElement, userSettings) {
4300
4507
  }
4301
4508
  };
4302
4509
 
4510
+ /**
4511
+ * Gets the instance of the EditorManager.
4512
+ *
4513
+ * @private
4514
+ * @returns {EditorManager}
4515
+ */
4516
+ this._getEditorManager = function () {
4517
+ return editorManager;
4518
+ };
4519
+
4303
4520
  /**
4304
4521
  * Check if currently it is RTL direction.
4305
4522
  *
@@ -4336,10 +4553,8 @@ function Core(rootElement, userSettings) {
4336
4553
  return instance.isLtr() ? 1 : -1;
4337
4554
  };
4338
4555
  const shortcutManager = (0, _shortcuts.createShortcutManager)({
4339
- handleEvent(event) {
4340
- const isListening = instance.isListening();
4341
- const isKeyboardEventWithKey = (event === null || event === void 0 ? void 0 : event.key) !== void 0;
4342
- return isListening && isKeyboardEventWithKey;
4556
+ handleEvent() {
4557
+ return instance.isListening();
4343
4558
  },
4344
4559
  beforeKeyDown: event => {
4345
4560
  return this.runHooks('beforeKeyDown', event);
@@ -4372,270 +4587,23 @@ function Core(rootElement, userSettings) {
4372
4587
  this.getShortcutManager = function () {
4373
4588
  return shortcutManager;
4374
4589
  };
4375
- const gridContext = shortcutManager.addContext('grid');
4376
- const gridConfig = {
4377
- runOnlyIf: () => {
4378
- return (0, _mixed.isDefined)(instance.getSelected()) && instance.countRenderedRows() > 0 && instance.countRenderedCols() > 0;
4379
- },
4380
- group: SHORTCUTS_GROUP
4590
+
4591
+ /**
4592
+ * Return the Focus Manager responsible for managing the browser's focus in the table.
4593
+ *
4594
+ * @memberof Core#
4595
+ * @since 14.0.0
4596
+ * @function getFocusManager
4597
+ * @returns {FocusManager}
4598
+ */
4599
+ this.getFocusManager = function () {
4600
+ return focusManager;
4381
4601
  };
4382
- shortcutManager.setActiveContextName('grid');
4383
- gridContext.addShortcuts([{
4384
- keys: [['Control/Meta', 'A']],
4385
- callback: () => {
4386
- instance.selectAll();
4387
- }
4388
- }, {
4389
- keys: [['Control/Meta', 'Enter']],
4390
- callback: () => {
4391
- const selectedRange = instance.getSelectedRange();
4392
- const {
4393
- row: highlightRow,
4394
- col: highlightColumn
4395
- } = selectedRange[selectedRange.length - 1].highlight;
4396
- const valueToPopulate = instance.getDataAtCell(highlightRow, highlightColumn);
4397
- const cellValues = new Map();
4398
- for (let i = 0; i < selectedRange.length; i++) {
4399
- selectedRange[i].forAll((row, column) => {
4400
- if (row >= 0 && column >= 0 && (row !== highlightRow || column !== highlightColumn)) {
4401
- const {
4402
- readOnly
4403
- } = instance.getCellMeta(row, column);
4404
- if (!readOnly) {
4405
- cellValues.set(`${row}x${column}`, [row, column, valueToPopulate]);
4406
- }
4407
- }
4408
- });
4409
- }
4410
- instance.setDataAtCell(Array.from(cellValues.values()));
4411
- },
4412
- runOnlyIf: () => instance.getSelectedRangeLast().getCellsCount() > 1
4413
- }, {
4414
- keys: [['ArrowUp']],
4415
- callback: () => {
4416
- selection.transformStart(-1, 0);
4417
- }
4418
- }, {
4419
- keys: [['ArrowUp', 'Control/Meta']],
4420
- captureCtrl: true,
4421
- callback: () => {
4422
- selection.setRangeStart(instance._createCellCoords(instance.rowIndexMapper.getNearestNotHiddenIndex(0, 1), instance.getSelectedRangeLast().highlight.col));
4423
- }
4424
- }, {
4425
- keys: [['ArrowUp', 'Shift']],
4426
- callback: () => {
4427
- selection.transformEnd(-1, 0);
4428
- }
4429
- }, {
4430
- keys: [['ArrowUp', 'Shift', 'Control/Meta']],
4431
- captureCtrl: true,
4432
- callback: () => {
4433
- const {
4434
- from,
4435
- to
4436
- } = instance.getSelectedRangeLast();
4437
- const row = instance.rowIndexMapper.getNearestNotHiddenIndex(0, 1);
4438
- selection.setRangeStart(from.clone());
4439
- selection.setRangeEnd(instance._createCellCoords(row, to.col));
4440
- },
4441
- runOnlyIf: () => !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByColumnHeader())
4442
- }, {
4443
- keys: [['ArrowDown']],
4444
- callback: () => {
4445
- selection.transformStart(1, 0);
4446
- }
4447
- }, {
4448
- keys: [['ArrowDown', 'Control/Meta']],
4449
- captureCtrl: true,
4450
- callback: () => {
4451
- selection.setRangeStart(instance._createCellCoords(instance.rowIndexMapper.getNearestNotHiddenIndex(instance.countRows() - 1, -1), instance.getSelectedRangeLast().highlight.col));
4452
- }
4453
- }, {
4454
- keys: [['ArrowDown', 'Shift']],
4455
- callback: () => {
4456
- selection.transformEnd(1, 0);
4457
- }
4458
- }, {
4459
- keys: [['ArrowDown', 'Shift', 'Control/Meta']],
4460
- captureCtrl: true,
4461
- callback: () => {
4462
- const {
4463
- from,
4464
- to
4465
- } = instance.getSelectedRangeLast();
4466
- const row = instance.rowIndexMapper.getNearestNotHiddenIndex(instance.countRows() - 1, -1);
4467
- selection.setRangeStart(from.clone());
4468
- selection.setRangeEnd(instance._createCellCoords(row, to.col));
4469
- },
4470
- runOnlyIf: () => !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByColumnHeader())
4471
- }, {
4472
- keys: [['ArrowLeft']],
4473
- callback: () => {
4474
- selection.transformStart(0, -1 * instance.getDirectionFactor());
4475
- }
4476
- }, {
4477
- keys: [['ArrowLeft', 'Control/Meta']],
4478
- captureCtrl: true,
4479
- callback: () => {
4480
- const row = instance.getSelectedRangeLast().highlight.row;
4481
- const column = instance.columnIndexMapper.getNearestNotHiddenIndex(...(instance.isRtl() ? [instance.countCols() - 1, -1] : [0, 1]));
4482
- selection.setRangeStart(instance._createCellCoords(row, column));
4483
- }
4484
- }, {
4485
- keys: [['ArrowLeft', 'Shift']],
4486
- callback: () => {
4487
- selection.transformEnd(0, -1 * instance.getDirectionFactor());
4488
- }
4489
- }, {
4490
- keys: [['ArrowLeft', 'Shift', 'Control/Meta']],
4491
- captureCtrl: true,
4492
- callback: () => {
4493
- const {
4494
- from,
4495
- to
4496
- } = instance.getSelectedRangeLast();
4497
- const column = instance.columnIndexMapper.getNearestNotHiddenIndex(...(instance.isRtl() ? [instance.countCols() - 1, -1] : [0, 1]));
4498
- selection.setRangeStart(from.clone());
4499
- selection.setRangeEnd(instance._createCellCoords(to.row, column));
4500
- },
4501
- runOnlyIf: () => !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByRowHeader())
4502
- }, {
4503
- keys: [['ArrowRight']],
4504
- callback: () => {
4505
- selection.transformStart(0, instance.getDirectionFactor());
4506
- }
4507
- }, {
4508
- keys: [['ArrowRight', 'Control/Meta']],
4509
- captureCtrl: true,
4510
- callback: () => {
4511
- const row = instance.getSelectedRangeLast().highlight.row;
4512
- const column = instance.columnIndexMapper.getNearestNotHiddenIndex(...(instance.isRtl() ? [0, 1] : [instance.countCols() - 1, -1]));
4513
- selection.setRangeStart(instance._createCellCoords(row, column));
4514
- }
4515
- }, {
4516
- keys: [['ArrowRight', 'Shift']],
4517
- callback: () => {
4518
- selection.transformEnd(0, instance.getDirectionFactor());
4519
- }
4520
- }, {
4521
- keys: [['ArrowRight', 'Shift', 'Control/Meta']],
4522
- captureCtrl: true,
4523
- callback: () => {
4524
- const {
4525
- from,
4526
- to
4527
- } = instance.getSelectedRangeLast();
4528
- const column = instance.columnIndexMapper.getNearestNotHiddenIndex(...(instance.isRtl() ? [0, 1] : [instance.countCols() - 1, -1]));
4529
- selection.setRangeStart(from.clone());
4530
- selection.setRangeEnd(instance._createCellCoords(to.row, column));
4531
- },
4532
- runOnlyIf: () => !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByRowHeader())
4533
- }, {
4534
- keys: [['Home']],
4535
- captureCtrl: true,
4536
- callback: () => {
4537
- const fixedColumns = parseInt(instance.getSettings().fixedColumnsStart, 10);
4538
- const row = instance.getSelectedRangeLast().highlight.row;
4539
- const column = instance.columnIndexMapper.getNearestNotHiddenIndex(fixedColumns, 1);
4540
- selection.setRangeStart(instance._createCellCoords(row, column));
4541
- },
4542
- runOnlyIf: () => instance.view.isMainTableNotFullyCoveredByOverlays()
4543
- }, {
4544
- keys: [['Home', 'Shift']],
4545
- callback: () => {
4546
- selection.setRangeEnd(instance._createCellCoords(selection.selectedRange.current().from.row, instance.columnIndexMapper.getNearestNotHiddenIndex(0, 1)));
4547
- }
4548
- }, {
4549
- keys: [['Home', 'Control/Meta']],
4550
- captureCtrl: true,
4551
- callback: () => {
4552
- const fixedRows = parseInt(instance.getSettings().fixedRowsTop, 10);
4553
- const fixedColumns = parseInt(instance.getSettings().fixedColumnsStart, 10);
4554
- const row = instance.rowIndexMapper.getNearestNotHiddenIndex(fixedRows, 1);
4555
- const column = instance.columnIndexMapper.getNearestNotHiddenIndex(fixedColumns, 1);
4556
- selection.setRangeStart(instance._createCellCoords(row, column));
4557
- },
4558
- runOnlyIf: () => instance.view.isMainTableNotFullyCoveredByOverlays()
4559
- }, {
4560
- keys: [['End']],
4561
- captureCtrl: true,
4562
- callback: () => {
4563
- selection.setRangeStart(instance._createCellCoords(instance.getSelectedRangeLast().highlight.row, instance.columnIndexMapper.getNearestNotHiddenIndex(instance.countCols() - 1, -1)));
4564
- },
4565
- runOnlyIf: () => instance.view.isMainTableNotFullyCoveredByOverlays()
4566
- }, {
4567
- keys: [['End', 'Shift']],
4568
- callback: () => {
4569
- selection.setRangeEnd(instance._createCellCoords(selection.selectedRange.current().from.row, instance.columnIndexMapper.getNearestNotHiddenIndex(instance.countCols() - 1, -1)));
4570
- }
4571
- }, {
4572
- keys: [['End', 'Control/Meta']],
4573
- captureCtrl: true,
4574
- callback: () => {
4575
- const fixedRows = parseInt(instance.getSettings().fixedRowsBottom, 10);
4576
- const row = instance.rowIndexMapper.getNearestNotHiddenIndex(instance.countRows() - fixedRows - 1, -1);
4577
- const column = instance.columnIndexMapper.getNearestNotHiddenIndex(instance.countCols() - 1, -1);
4578
- selection.setRangeStart(instance._createCellCoords(row, column));
4579
- },
4580
- runOnlyIf: () => instance.view.isMainTableNotFullyCoveredByOverlays()
4581
- }, {
4582
- keys: [['PageUp']],
4583
- callback: () => {
4584
- selection.transformStart(-instance.countVisibleRows(), 0);
4585
- }
4586
- }, {
4587
- keys: [['PageUp', 'Shift']],
4588
- callback: () => {
4589
- const {
4590
- to
4591
- } = instance.getSelectedRangeLast();
4592
- const nextRowIndexToSelect = Math.max(to.row - instance.countVisibleRows(), 0);
4593
- const row = instance.rowIndexMapper.getNearestNotHiddenIndex(nextRowIndexToSelect, 1);
4594
- if (row !== null) {
4595
- const coords = instance._createCellCoords(row, to.col);
4596
- const scrollPadding = to.row - instance.view.getFirstFullyVisibleRow();
4597
- const nextVerticalScroll = Math.max(coords.row - scrollPadding, 0);
4598
- selection.setRangeEnd(coords);
4599
- instance.scrollViewportTo(nextVerticalScroll);
4600
- }
4601
- }
4602
- }, {
4603
- keys: [['PageDown']],
4604
- callback: () => {
4605
- selection.transformStart(instance.countVisibleRows(), 0);
4606
- }
4607
- }, {
4608
- keys: [['PageDown', 'Shift']],
4609
- callback: () => {
4610
- const {
4611
- to
4612
- } = instance.getSelectedRangeLast();
4613
- const nextRowIndexToSelect = Math.min(to.row + instance.countVisibleRows(), instance.countRows() - 1);
4614
- const row = instance.rowIndexMapper.getNearestNotHiddenIndex(nextRowIndexToSelect, -1);
4615
- if (row !== null) {
4616
- const coords = instance._createCellCoords(row, to.col);
4617
- const scrollPadding = to.row - instance.view.getFirstFullyVisibleRow();
4618
- const nextVerticalScroll = Math.min(coords.row - scrollPadding, instance.countRows() - 1);
4619
- selection.setRangeEnd(coords);
4620
- instance.scrollViewportTo(nextVerticalScroll);
4621
- }
4622
- }
4623
- }, {
4624
- keys: [['Tab']],
4625
- callback: event => {
4626
- const tabMoves = typeof tableMeta.tabMoves === 'function' ? tableMeta.tabMoves(event) : tableMeta.tabMoves;
4627
- selection.transformStart(tabMoves.row, tabMoves.col, true);
4628
- }
4629
- }, {
4630
- keys: [['Shift', 'Tab']],
4631
- callback: event => {
4632
- const tabMoves = typeof tableMeta.tabMoves === 'function' ? tableMeta.tabMoves(event) : tableMeta.tabMoves;
4633
- selection.transformStart(-tabMoves.row, -tabMoves.col);
4634
- }
4635
- }], gridConfig);
4636
4602
  (0, _registry.getPluginsNames)().forEach(pluginName => {
4637
4603
  const PluginClass = (0, _registry.getPlugin)(pluginName);
4638
4604
  pluginsRegistry.addItem(pluginName, new PluginClass(this));
4639
4605
  });
4606
+ (0, _shortcutContexts.registerAllShortcutContexts)(instance);
4607
+ shortcutManager.setActiveContextName('grid');
4640
4608
  _pluginHooks.default.getSingleton().run(instance, 'construct');
4641
4609
  }