handsontable 13.1.0 → 14.0.0-next-e8f87aa-20231030

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