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.mjs CHANGED
@@ -8,6 +8,7 @@ import { isMobileBrowser, isIpadOS } from "./helpers/browser.mjs";
8
8
  import EditorManager from "./editorManager.mjs";
9
9
  import EventManager from "./eventManager.mjs";
10
10
  import { deepClone, duckSchema, isObjectEqual, isObject, deepObjectSize, hasOwnProperty, createObjectPropListener, objectEach } from "./helpers/object.mjs";
11
+ import { FocusManager } from "./focusManager.mjs";
11
12
  import { arrayMap, arrayEach, arrayReduce, getDifferenceOfArrays, stringToArray, pivot } from "./helpers/array.mjs";
12
13
  import { instanceToHTML } from "./utils/parseTable.mjs";
13
14
  import { getPlugin, getPluginsNames } from "./plugins/registry.mjs";
@@ -27,11 +28,21 @@ import { hasLanguageDictionary, getValidLanguageCode, getTranslatedPhrase } from
27
28
  import { warnUserAboutLanguageRegistration, normalizeLanguageCode } from "./i18n/utils.mjs";
28
29
  import { Selection } from "./selection/index.mjs";
29
30
  import { MetaManager, DynamicCellMetaMod, ExtendMetaPropertiesMod, replaceData } from "./dataMap/index.mjs";
31
+ import { installFocusCatcher } from "./core/index.mjs";
30
32
  import { createUniqueMap } from "./utils/dataStructures/uniqueMap.mjs";
31
33
  import { createShortcutManager } from "./shortcuts/index.mjs";
32
- const SHORTCUTS_GROUP = 'gridDefault';
34
+ import { registerAllShortcutContexts } from "./shortcutContexts/index.mjs";
33
35
  let activeGuid = null;
34
36
 
37
+ /**
38
+ * Keeps the collection of the all Handsontable instances created on the same page. The
39
+ * list is then used to trigger the "afterUnlisten" hook when the "listen()" method was
40
+ * called on another instance.
41
+ *
42
+ * @type {Map<string, Core>}
43
+ */
44
+ const foreignHotInstances = new Map();
45
+
35
46
  /**
36
47
  * A set of deprecated feature names.
37
48
  *
@@ -91,7 +102,8 @@ const deprecationWarns = new Set();
91
102
  * @param {boolean} [rootInstanceSymbol=false] Indicates if the instance is root of all later instances created.
92
103
  */
93
104
  export default function Core(rootElement, userSettings) {
94
- var _userSettings$layoutD;
105
+ var _userSettings$layoutD,
106
+ _this = this;
95
107
  let rootInstanceSymbol = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
96
108
  let preventScrollingToCell = false;
97
109
  let instance = this;
@@ -100,6 +112,7 @@ export default function Core(rootElement, userSettings) {
100
112
  let dataSource;
101
113
  let grid;
102
114
  let editorManager;
115
+ let focusManager;
103
116
  let firstRun = true;
104
117
  if (hasValidParameter(rootInstanceSymbol)) {
105
118
  registerAsRootInstance(this);
@@ -208,6 +221,8 @@ export default function Core(rootElement, userSettings) {
208
221
  }
209
222
  this.guid = `ht_${randomString()}`; // this is the namespace for global events
210
223
 
224
+ foreignHotInstances.set(this.guid, this);
225
+
211
226
  /**
212
227
  * Instance of index mapper which is responsible for managing the column indexes.
213
228
  *
@@ -256,14 +271,16 @@ export default function Core(rootElement, userSettings) {
256
271
  };
257
272
 
258
273
  let selection = new Selection(tableMeta, {
259
- rowIndexMapper: () => instance.rowIndexMapper,
260
- columnIndexMapper: () => instance.columnIndexMapper,
274
+ rowIndexMapper: instance.rowIndexMapper,
275
+ columnIndexMapper: instance.columnIndexMapper,
261
276
  countCols: () => instance.countCols(),
262
277
  countRows: () => instance.countRows(),
263
278
  propToCol: prop => datamap.propToCol(prop),
264
279
  isEditorOpened: () => instance.getActiveEditor() ? instance.getActiveEditor().isOpened() : false,
265
- countColsTranslated: () => this.view.countRenderableColumns(),
266
- countRowsTranslated: () => this.view.countRenderableRows(),
280
+ countRenderableColumns: () => this.view.countRenderableColumns(),
281
+ countRenderableRows: () => this.view.countRenderableRows(),
282
+ countRowHeaders: () => this.countRowHeaders(),
283
+ countColHeaders: () => this.countColHeaders(),
267
284
  getShortcutManager: () => instance.getShortcutManager(),
268
285
  createCellCoords: (row, column) => instance._createCellCoords(row, column),
269
286
  createCellRange: (highlight, from, to) => instance._createCellRange(highlight, from, to),
@@ -282,21 +299,6 @@ export default function Core(rootElement, userSettings) {
282
299
  };
283
300
  this.columnIndexMapper.addLocalHook('cacheUpdated', onIndexMapperCacheUpdate);
284
301
  this.rowIndexMapper.addLocalHook('cacheUpdated', onIndexMapperCacheUpdate);
285
- this.selection.addLocalHook('beforeSetRangeStart', cellCoords => {
286
- this.runHooks('beforeSetRangeStart', cellCoords);
287
- });
288
- this.selection.addLocalHook('beforeSetRangeStartOnly', cellCoords => {
289
- this.runHooks('beforeSetRangeStartOnly', cellCoords);
290
- });
291
- this.selection.addLocalHook('beforeSetRangeEnd', cellCoords => {
292
- this.runHooks('beforeSetRangeEnd', cellCoords);
293
- if (cellCoords.row < 0) {
294
- cellCoords.row = this.view._wt.wtTable.getFirstVisibleRow();
295
- }
296
- if (cellCoords.col < 0) {
297
- cellCoords.col = this.view._wt.wtTable.getFirstVisibleColumn();
298
- }
299
- });
300
302
  this.selection.addLocalHook('afterSetRangeEnd', cellCoords => {
301
303
  const preventScrolling = createObjectPropListener(false);
302
304
  const selectionRange = this.selection.getSelectedRange();
@@ -308,8 +310,6 @@ export default function Core(rootElement, userSettings) {
308
310
  this.runHooks('afterSelection', from.row, from.col, to.row, to.col, preventScrolling, selectionLayerLevel);
309
311
  this.runHooks('afterSelectionByProp', from.row, instance.colToProp(from.col), to.row, instance.colToProp(to.col), preventScrolling, selectionLayerLevel); // eslint-disable-line max-len
310
312
 
311
- const isSelectedByAnyHeader = this.selection.isSelectedByAnyHeader();
312
- const currentSelectedRange = this.selection.selectedRange.current();
313
313
  let scrollToCell = true;
314
314
  if (preventScrollingToCell) {
315
315
  scrollToCell = false;
@@ -317,19 +317,42 @@ export default function Core(rootElement, userSettings) {
317
317
  if (preventScrolling.isTouched()) {
318
318
  scrollToCell = !preventScrolling.value;
319
319
  }
320
+ const currentSelectedRange = this.selection.selectedRange.current();
321
+ const isSelectedByAnyHeader = this.selection.isSelectedByAnyHeader();
320
322
  const isSelectedByRowHeader = this.selection.isSelectedByRowHeader();
321
323
  const isSelectedByColumnHeader = this.selection.isSelectedByColumnHeader();
322
324
  if (scrollToCell !== false) {
323
325
  if (!isSelectedByAnyHeader) {
324
326
  if (currentSelectedRange && !this.selection.isMultiple()) {
325
- this.view.scrollViewport(visualToRenderableCoords(currentSelectedRange.from));
327
+ const {
328
+ row,
329
+ col
330
+ } = currentSelectedRange.from;
331
+ if (row < 0 && col >= 0) {
332
+ this.scrollViewportTo({
333
+ col
334
+ });
335
+ } else if (col < 0 && row >= 0) {
336
+ this.scrollViewportTo({
337
+ row
338
+ });
339
+ } else {
340
+ this.scrollViewportTo({
341
+ row,
342
+ col
343
+ });
344
+ }
326
345
  } else {
327
- this.view.scrollViewport(visualToRenderableCoords(cellCoords));
346
+ this.scrollViewportTo(cellCoords.toObject());
328
347
  }
329
348
  } else if (isSelectedByRowHeader) {
330
- this.view.scrollViewportVertically(instance.rowIndexMapper.getRenderableFromVisualIndex(cellCoords.row));
349
+ this.scrollViewportTo({
350
+ row: cellCoords.row
351
+ });
331
352
  } else if (isSelectedByColumnHeader) {
332
- this.view.scrollViewportHorizontally(instance.columnIndexMapper.getRenderableFromVisualIndex(cellCoords.col));
353
+ this.scrollViewportTo({
354
+ col: cellCoords.col
355
+ });
333
356
  }
334
357
  }
335
358
 
@@ -364,30 +387,78 @@ export default function Core(rootElement, userSettings) {
364
387
  isMultiple.value = changedIsMultiple;
365
388
  }
366
389
  });
367
- this.selection.addLocalHook('beforeModifyTransformStart', cellCoordsDelta => {
368
- this.runHooks('modifyTransformStart', cellCoordsDelta);
369
- });
370
- this.selection.addLocalHook('afterModifyTransformStart', (coords, rowTransformDir, colTransformDir) => {
371
- this.runHooks('afterModifyTransformStart', coords, rowTransformDir, colTransformDir);
372
- });
373
- this.selection.addLocalHook('beforeModifyTransformEnd', cellCoordsDelta => {
374
- this.runHooks('modifyTransformEnd', cellCoordsDelta);
375
- });
376
- this.selection.addLocalHook('afterModifyTransformEnd', (coords, rowTransformDir, colTransformDir) => {
377
- this.runHooks('afterModifyTransformEnd', coords, rowTransformDir, colTransformDir);
378
- });
379
390
  this.selection.addLocalHook('afterDeselect', () => {
380
391
  editorManager.destroyEditor();
381
392
  this._refreshBorders();
382
393
  removeClass(this.rootElement, ['ht__selection--rows', 'ht__selection--columns']);
383
394
  this.runHooks('afterDeselect');
384
395
  });
385
- this.selection.addLocalHook('insertRowRequire', totalRows => {
386
- this.alter('insert_row_above', totalRows, 1, 'auto');
387
- });
388
- this.selection.addLocalHook('insertColRequire', totalCols => {
389
- this.alter('insert_col_start', totalCols, 1, 'auto');
390
- });
396
+ this.selection.addLocalHook('beforeHighlightSet', () => this.runHooks('beforeSelectionHighlightSet')).addLocalHook('beforeSetRangeStart', function () {
397
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
398
+ args[_key] = arguments[_key];
399
+ }
400
+ return _this.runHooks('beforeSetRangeStart', ...args);
401
+ }).addLocalHook('beforeSetRangeStartOnly', function () {
402
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
403
+ args[_key2] = arguments[_key2];
404
+ }
405
+ return _this.runHooks('beforeSetRangeStartOnly', ...args);
406
+ }).addLocalHook('beforeSetRangeEnd', function () {
407
+ for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
408
+ args[_key3] = arguments[_key3];
409
+ }
410
+ return _this.runHooks('beforeSetRangeEnd', ...args);
411
+ }).addLocalHook('beforeSelectColumns', function () {
412
+ for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
413
+ args[_key4] = arguments[_key4];
414
+ }
415
+ return _this.runHooks('beforeSelectColumns', ...args);
416
+ }).addLocalHook('afterSelectColumns', function () {
417
+ for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
418
+ args[_key5] = arguments[_key5];
419
+ }
420
+ return _this.runHooks('afterSelectColumns', ...args);
421
+ }).addLocalHook('beforeSelectRows', function () {
422
+ for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
423
+ args[_key6] = arguments[_key6];
424
+ }
425
+ return _this.runHooks('beforeSelectRows', ...args);
426
+ }).addLocalHook('afterSelectRows', function () {
427
+ for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
428
+ args[_key7] = arguments[_key7];
429
+ }
430
+ return _this.runHooks('afterSelectRows', ...args);
431
+ }).addLocalHook('beforeModifyTransformStart', function () {
432
+ for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
433
+ args[_key8] = arguments[_key8];
434
+ }
435
+ return _this.runHooks('modifyTransformStart', ...args);
436
+ }).addLocalHook('afterModifyTransformStart', function () {
437
+ for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
438
+ args[_key9] = arguments[_key9];
439
+ }
440
+ return _this.runHooks('afterModifyTransformStart', ...args);
441
+ }).addLocalHook('beforeModifyTransformEnd', function () {
442
+ for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
443
+ args[_key10] = arguments[_key10];
444
+ }
445
+ return _this.runHooks('modifyTransformEnd', ...args);
446
+ }).addLocalHook('afterModifyTransformEnd', function () {
447
+ for (var _len11 = arguments.length, args = new Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
448
+ args[_key11] = arguments[_key11];
449
+ }
450
+ return _this.runHooks('afterModifyTransformEnd', ...args);
451
+ }).addLocalHook('beforeRowWrap', function () {
452
+ for (var _len12 = arguments.length, args = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {
453
+ args[_key12] = arguments[_key12];
454
+ }
455
+ return _this.runHooks('beforeRowWrap', ...args);
456
+ }).addLocalHook('beforeColumnWrap', function () {
457
+ for (var _len13 = arguments.length, args = new Array(_len13), _key13 = 0; _key13 < _len13; _key13++) {
458
+ args[_key13] = arguments[_key13];
459
+ }
460
+ return _this.runHooks('beforeColumnWrap', ...args);
461
+ }).addLocalHook('insertRowRequire', totalRows => this.alter('insert_row_above', totalRows, 1, 'auto')).addLocalHook('insertColRequire', totalCols => this.alter('insert_col_start', totalCols, 1, 'auto'));
391
462
  grid = {
392
463
  /**
393
464
  * Inserts or removes rows and columns.
@@ -469,7 +540,9 @@ export default function Core(rootElement, userSettings) {
469
540
  const currentFromRow = currentFromRange === null || currentFromRange === void 0 ? void 0 : currentFromRange.row;
470
541
  const startVisualRowIndex = instance.toVisualRow(startRowPhysicalIndex);
471
542
  if (selection.isSelectedByCorner()) {
472
- instance.selectAll();
543
+ selection.selectAll(true, true, {
544
+ disableHeadersHighlight: true
545
+ });
473
546
  } else if (isDefined(currentFromRow) && currentFromRow >= startVisualRowIndex) {
474
547
  // Moving the selection (if it exists) downward – it should be applied to the "old" row.
475
548
  // TODO: The logic here should be handled by selection module.
@@ -523,7 +596,9 @@ export default function Core(rootElement, userSettings) {
523
596
  const currentFromColumn = currentFromRange === null || currentFromRange === void 0 ? void 0 : currentFromRange.col;
524
597
  const startVisualColumnIndex = instance.toVisualColumn(startColumnPhysicalIndex);
525
598
  if (selection.isSelectedByCorner()) {
526
- instance.selectAll();
599
+ selection.selectAll(true, true, {
600
+ disableHeadersHighlight: true
601
+ });
527
602
  } else if (isDefined(currentFromColumn) && currentFromColumn >= startVisualColumnIndex) {
528
603
  // Moving the selection (if it exists) rightward – it should be applied to the "old" column.
529
604
  // TODO: The logic here should be handled by selection module.
@@ -1013,6 +1088,10 @@ export default function Core(rootElement, userSettings) {
1013
1088
  this.updateSettings(tableMeta, true);
1014
1089
  this.view = new TableView(this);
1015
1090
  editorManager = EditorManager.getInstance(instance, tableMeta, selection);
1091
+ focusManager = new FocusManager(instance);
1092
+ if (isRootInstance(this)) {
1093
+ installFocusCatcher(instance);
1094
+ }
1016
1095
  instance.runHooks('init');
1017
1096
  this.forceFullRender = true; // used when data was changed
1018
1097
  this.view.render();
@@ -1426,6 +1505,11 @@ export default function Core(rootElement, userSettings) {
1426
1505
  */
1427
1506
  this.listen = function () {
1428
1507
  if (instance && !instance.isListening()) {
1508
+ foreignHotInstances.forEach(foreignHot => {
1509
+ if (instance !== foreignHot) {
1510
+ foreignHot.unlisten();
1511
+ }
1512
+ });
1429
1513
  activeGuid = instance.guid;
1430
1514
  instance.runHooks('afterListen');
1431
1515
  }
@@ -1510,8 +1594,8 @@ export default function Core(rootElement, userSettings) {
1510
1594
  * @returns {Array} Returns removed portion of columns.
1511
1595
  */
1512
1596
  this.spliceCol = function (column, index, amount) {
1513
- for (var _len = arguments.length, elements = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
1514
- elements[_key - 3] = arguments[_key];
1597
+ for (var _len14 = arguments.length, elements = new Array(_len14 > 3 ? _len14 - 3 : 0), _key14 = 3; _key14 < _len14; _key14++) {
1598
+ elements[_key14 - 3] = arguments[_key14];
1515
1599
  }
1516
1600
  return datamap.spliceCol(column, index, amount, ...elements);
1517
1601
  };
@@ -1528,8 +1612,8 @@ export default function Core(rootElement, userSettings) {
1528
1612
  * @returns {Array} Returns removed portion of rows.
1529
1613
  */
1530
1614
  this.spliceRow = function (row, index, amount) {
1531
- for (var _len2 = arguments.length, elements = new Array(_len2 > 3 ? _len2 - 3 : 0), _key2 = 3; _key2 < _len2; _key2++) {
1532
- elements[_key2 - 3] = arguments[_key2];
1615
+ for (var _len15 = arguments.length, elements = new Array(_len15 > 3 ? _len15 - 3 : 0), _key15 = 3; _key15 < _len15; _key15++) {
1616
+ elements[_key15 - 3] = arguments[_key15];
1533
1617
  }
1534
1618
  return datamap.spliceRow(row, index, amount, ...elements);
1535
1619
  };
@@ -1626,6 +1710,9 @@ export default function Core(rootElement, userSettings) {
1626
1710
  }
1627
1711
  const changes = [];
1628
1712
  arrayEach(selection.getSelectedRange(), cellRange => {
1713
+ if (cellRange.isSingleHeader()) {
1714
+ return;
1715
+ }
1629
1716
  const topStart = cellRange.getTopStartCorner();
1630
1717
  const bottomEnd = cellRange.getBottomEndCorner();
1631
1718
  rangeEach(topStart.row, bottomEnd.row, row => {
@@ -2923,8 +3010,8 @@ export default function Core(rootElement, userSettings) {
2923
3010
  */
2924
3011
  this.spliceCellsMeta = function (visualIndex) {
2925
3012
  let deleteAmount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
2926
- for (var _len3 = arguments.length, cellMetaRows = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {
2927
- cellMetaRows[_key3 - 2] = arguments[_key3];
3013
+ for (var _len16 = arguments.length, cellMetaRows = new Array(_len16 > 2 ? _len16 - 2 : 0), _key16 = 2; _key16 < _len16; _key16++) {
3014
+ cellMetaRows[_key16 - 2] = arguments[_key16];
2928
3015
  }
2929
3016
  if (cellMetaRows.length > 0 && !Array.isArray(cellMetaRows[0])) {
2930
3017
  throw new Error('The 3rd argument (cellMetaRows) has to be passed as an array of cell meta objects array.');
@@ -3615,6 +3702,30 @@ export default function Core(rootElement, userSettings) {
3615
3702
  return instance.view._wt.drawn ? instance.view._wt.wtTable.getVisibleColumnsCount() : -1;
3616
3703
  };
3617
3704
 
3705
+ /**
3706
+ * Returns the number of rendered row headers.
3707
+ *
3708
+ * @since 14.0.0
3709
+ * @memberof Core#
3710
+ * @function countRowHeaders
3711
+ * @returns {number} Number of row headers.
3712
+ */
3713
+ this.countRowHeaders = function () {
3714
+ return this.view.getRowHeadersCount();
3715
+ };
3716
+
3717
+ /**
3718
+ * Returns the number of rendered column headers.
3719
+ *
3720
+ * @since 14.0.0
3721
+ * @memberof Core#
3722
+ * @function countColHeaders
3723
+ * @returns {number} Number of column headers.
3724
+ */
3725
+ this.countColHeaders = function () {
3726
+ return this.view.getColumnHeadersCount();
3727
+ };
3728
+
3618
3729
  /**
3619
3730
  * Returns the number of empty rows. If the optional ending parameter is `true`, returns the
3620
3731
  * number of empty rows at the bottom of the table.
@@ -3819,6 +3930,10 @@ export default function Core(rootElement, userSettings) {
3819
3930
  * hot.selectColumns('id');
3820
3931
  * // Select range of columns using visual indexes.
3821
3932
  * hot.selectColumns(1, 4);
3933
+ * // Select range of columns using visual indexes and mark the first header as highlighted.
3934
+ * hot.selectColumns(1, 2, -1);
3935
+ * // Select range of columns using visual indexes and mark the second cell as highlighted.
3936
+ * hot.selectColumns(2, 1, 1);
3822
3937
  * // Select range of columns using column properties.
3823
3938
  * hot.selectColumns('id', 'last_name');
3824
3939
  * ```
@@ -3829,11 +3944,15 @@ export default function Core(rootElement, userSettings) {
3829
3944
  * @param {number} startColumn The visual column index from which the selection starts.
3830
3945
  * @param {number} [endColumn=startColumn] The visual column index to which the selection finishes. If `endColumn`
3831
3946
  * is not defined the column defined by `startColumn` will be selected.
3947
+ * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
3948
+ * The value can take visual row index from -N to N, where negative values
3949
+ * point to the headers and positive values point to the cell range.
3832
3950
  * @returns {boolean} `true` if selection was successful, `false` otherwise.
3833
3951
  */
3834
3952
  this.selectColumns = function (startColumn) {
3835
3953
  let endColumn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startColumn;
3836
- return selection.selectColumns(startColumn, endColumn);
3954
+ let focusPosition = arguments.length > 2 ? arguments[2] : undefined;
3955
+ return selection.selectColumns(startColumn, endColumn, focusPosition);
3837
3956
  };
3838
3957
 
3839
3958
  /**
@@ -3843,8 +3962,12 @@ export default function Core(rootElement, userSettings) {
3843
3962
  * ```js
3844
3963
  * // Select row using visual index.
3845
3964
  * hot.selectRows(1);
3846
- * // Select range of rows using visual indexes.
3965
+ * // select a range of rows, using visual indexes.
3847
3966
  * hot.selectRows(1, 4);
3967
+ * // select a range of rows, using visual indexes, and mark the header as highlighted.
3968
+ * hot.selectRows(1, 2, -1);
3969
+ * // Select range of rows using visual indexes and mark the second cell as highlighted.
3970
+ * hot.selectRows(2, 1, 1);
3848
3971
  * ```
3849
3972
  *
3850
3973
  * @memberof Core#
@@ -3853,11 +3976,15 @@ export default function Core(rootElement, userSettings) {
3853
3976
  * @param {number} startRow The visual row index from which the selection starts.
3854
3977
  * @param {number} [endRow=startRow] The visual row index to which the selection finishes. If `endRow`
3855
3978
  * is not defined the row defined by `startRow` will be selected.
3979
+ * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
3980
+ * The value can take visual column index from -N to N, where negative values
3981
+ * point to the headers and positive values point to the cell range.
3856
3982
  * @returns {boolean} `true` if selection was successful, `false` otherwise.
3857
3983
  */
3858
3984
  this.selectRows = function (startRow) {
3859
3985
  let endRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startRow;
3860
- return selection.selectRows(startRow, endRow);
3986
+ let focusPosition = arguments.length > 2 ? arguments[2] : undefined;
3987
+ return selection.selectRows(startRow, endRow, focusPosition);
3861
3988
  };
3862
3989
 
3863
3990
  /**
@@ -3876,9 +4003,16 @@ export default function Core(rootElement, userSettings) {
3876
4003
  * The previous selection is overwritten.
3877
4004
  *
3878
4005
  * ```js
3879
- * // select all cells in the table, including all headers
4006
+ * // select all cells in the table, including all headers and the corner cell
3880
4007
  * hot.selectAll();
3881
4008
  *
4009
+ * // select all cells in the table, including row headers but excluding the corner cell
4010
+ * hot.selectAll(true, false);
4011
+ *
4012
+ * // select all cells in the table, including all headers and the corner cell, but move the focus
4013
+ * // highlight to position -2, -1
4014
+ * hot.selectAll(-2, -1);
4015
+ *
3882
4016
  * // select all cells in the table, without headers
3883
4017
  * hot.selectAll(false);
3884
4018
  * ```
@@ -3886,15 +4020,25 @@ export default function Core(rootElement, userSettings) {
3886
4020
  * @since 0.38.2
3887
4021
  * @memberof Core#
3888
4022
  * @function selectAll
3889
- * @param {boolean} [includeHeaders=true] `true`: include all row, column and corner headers.
3890
- * `false`: don't include any headers.
4023
+ * @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers,
4024
+ * `false` otherwise.
4025
+ * @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column
4026
+ * headers, `false` otherwise.
4027
+ *
4028
+ * @param {object} [options] Additional object with options.
4029
+ * @param {{row: number, col: number} | boolean} [options.focusPosition] The argument allows changing the cell/header
4030
+ * focus position. The value takes an object with a `row` and `col` properties from -N to N, where
4031
+ * negative values point to the headers and positive values point to the cell range. If `false`, the focus
4032
+ * position won't be changed.
4033
+ * @param {boolean} [options.disableHeadersHighlight] If `true`, disables highlighting the headers even when
4034
+ * the logical coordinates points on them.
3891
4035
  */
3892
4036
  this.selectAll = function () {
3893
- let includeHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
3894
- const includeRowHeaders = includeHeaders && this.hasRowHeaders();
3895
- const includeColumnHeaders = includeHeaders && this.hasColHeaders();
4037
+ let includeRowHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
4038
+ let includeColumnHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : includeRowHeaders;
4039
+ let options = arguments.length > 2 ? arguments[2] : undefined;
3896
4040
  preventScrollingToCell = true;
3897
- selection.selectAll(includeRowHeaders, includeColumnHeaders);
4041
+ selection.selectAll(includeRowHeaders, includeColumnHeaders, options);
3898
4042
  preventScrollingToCell = false;
3899
4043
  };
3900
4044
  const getIndexToScroll = (indexMapper, visualIndex) => {
@@ -3903,55 +4047,117 @@ export default function Core(rootElement, userSettings) {
3903
4047
  };
3904
4048
 
3905
4049
  /**
3906
- * Scroll viewport to coordinates specified by the `row` and `column` arguments.
4050
+ * Scroll viewport to coordinates specified by the `row` and/or `col` object properties.
4051
+ *
4052
+ * ```js
4053
+ * // scroll the viewport to the visual row index (leave the horizontal scroll untouched)
4054
+ * hot.scrollViewportTo({ row: 50 });
4055
+ *
4056
+ * // scroll the viewport to the passed coordinates so that the cell at 50, 50 will be snapped to
4057
+ * // the bottom-end table's edge.
4058
+ * hot.scrollViewportTo({
4059
+ * row: 50,
4060
+ * col: 50,
4061
+ * verticalSnap: 'bottom',
4062
+ * horizontalSnap: 'end',
4063
+ * });
4064
+ * ```
3907
4065
  *
3908
4066
  * @memberof Core#
3909
4067
  * @function scrollViewportTo
3910
- * @param {number} [row] Row index. If the last argument isn't defined we treat the index as a visual row index. Otherwise,
3911
- * we are using the index for numbering only this rows which may be rendered (we don't consider hidden rows).
3912
- * @param {number} [column] Column index. If the last argument isn't defined we treat the index as a visual column index.
3913
- * Otherwise, we are using the index for numbering only this columns which may be rendered (we don't consider hidden columns).
3914
- * @param {boolean} [snapToBottom=false] If `true`, the viewport is scrolled to show the cell at the bottom of the table.
3915
- * However, if the cell's height is greater than the table's viewport height, the cell is snapped to the top edge.
3916
- * @param {boolean} [snapToRight=false] If `true`, the viewport is scrolled to show the cell at the right side of the table.
3917
- * 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`).
3918
- * @param {boolean} [considerHiddenIndexes=true] If `true`, we handle visual indexes, otherwise we handle only indexes which
4068
+ * @param {object} options A dictionary containing the following parameters:
4069
+ * @param {number} [options.row] Specifies the number of visual rows along the Y axis to scroll the viewport.
4070
+ * @param {number} [options.col] Specifies the number of visual columns along the X axis to scroll the viewport.
4071
+ * @param {'top' | 'bottom'} [options.verticalSnap] Determines to which edge of the table the viewport will be scrolled based on the passed coordinates.
4072
+ * This option is a string which must take one of the following values:
4073
+ * - `top`: The viewport will be scrolled to a row in such a way that it will be positioned on the top of the viewport;
4074
+ * - `bottom`: The viewport will be scrolled to a row in such a way that it will be positioned on the bottom of the viewport;
4075
+ * - If the property is not defined the vertical auto-snapping is enabled. Depending on where the viewport is scrolled from, a row will
4076
+ * be positioned at the top or bottom of the viewport.
4077
+ * @param {'start' | 'end'} [options.horizontalSnap] Determines to which edge of the table the viewport will be scrolled based on the passed coordinates.
4078
+ * This option is a string which must take one of the following values:
4079
+ * - `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;
4080
+ * - `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;
4081
+ * - If the property is not defined the horizontal auto-snapping is enabled. Depending on where the viewport is scrolled from, a column will
4082
+ * be positioned at the start or end of the viewport.
4083
+ * @param {boolean} [options.considerHiddenIndexes=true] If `true`, we handle visual indexes, otherwise we handle only indexes which
3919
4084
  * may be rendered when they are in the viewport (we don't consider hidden indexes as they aren't rendered).
3920
- * @returns {boolean} `true` if scroll was successful, `false` otherwise.
3921
- */
3922
- this.scrollViewportTo = function (row, column) {
3923
- let snapToBottom = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
3924
- let snapToRight = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
3925
- let considerHiddenIndexes = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
3926
- const snapToTop = !snapToBottom;
3927
- const snapToLeft = !snapToRight;
4085
+ * @returns {boolean} `true` if viewport was scrolled, `false` otherwise.
4086
+ */
4087
+ this.scrollViewportTo = function () {
4088
+ let {
4089
+ row,
4090
+ col,
4091
+ verticalSnap,
4092
+ horizontalSnap,
4093
+ considerHiddenIndexes
4094
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4095
+ let snapToTop;
4096
+ let snapToBottom;
4097
+ let snapToInlineStart;
4098
+ let snapToInlineEnd;
4099
+ if (verticalSnap !== undefined) {
4100
+ snapToTop = verticalSnap === 'top';
4101
+ snapToBottom = !snapToTop;
4102
+ }
4103
+ if (horizontalSnap !== undefined) {
4104
+ snapToInlineStart = horizontalSnap === 'start';
4105
+ snapToInlineEnd = !snapToInlineStart;
4106
+ }
3928
4107
  let renderableRow = row;
3929
- let renderableColumn = column;
3930
- if (considerHiddenIndexes) {
3931
- const isRowInteger = Number.isInteger(row);
3932
- const isColumnInteger = Number.isInteger(column);
3933
- const visualRowToScroll = isRowInteger ? getIndexToScroll(this.rowIndexMapper, row) : void 0;
3934
- const visualColumnToScroll = isColumnInteger ? getIndexToScroll(this.columnIndexMapper, column) : void 0;
4108
+ let renderableColumn = col;
4109
+ if (considerHiddenIndexes === undefined || considerHiddenIndexes) {
4110
+ const isValidRowGrid = Number.isInteger(row) && row >= 0;
4111
+ const isValidColumnGrid = Number.isInteger(col) && col >= 0;
4112
+ const visualRowToScroll = isValidRowGrid ? getIndexToScroll(this.rowIndexMapper, row) : undefined;
4113
+ const visualColumnToScroll = isValidColumnGrid ? getIndexToScroll(this.columnIndexMapper, col) : undefined;
3935
4114
  if (visualRowToScroll === null || visualColumnToScroll === null) {
3936
4115
  return false;
3937
4116
  }
3938
- renderableRow = isRowInteger ? instance.rowIndexMapper.getRenderableFromVisualIndex(visualRowToScroll) : void 0;
3939
- renderableColumn = isColumnInteger ? instance.columnIndexMapper.getRenderableFromVisualIndex(visualColumnToScroll) : void 0;
4117
+ renderableRow = isValidRowGrid ? instance.rowIndexMapper.getRenderableFromVisualIndex(visualRowToScroll) : row;
4118
+ renderableColumn = isValidColumnGrid ? instance.columnIndexMapper.getRenderableFromVisualIndex(visualColumnToScroll) : col;
3940
4119
  }
3941
4120
  const isRowInteger = Number.isInteger(renderableRow);
3942
4121
  const isColumnInteger = Number.isInteger(renderableColumn);
3943
- if (isRowInteger && isColumnInteger) {
3944
- return instance.view.scrollViewport(instance._createCellCoords(renderableRow, renderableColumn), snapToTop, snapToRight, snapToBottom, snapToLeft);
4122
+ if (isRowInteger && renderableRow >= 0 && isColumnInteger && renderableColumn >= 0) {
4123
+ return instance.view.scrollViewport(instance._createCellCoords(renderableRow, renderableColumn), snapToTop, snapToInlineEnd, snapToBottom, snapToInlineStart);
3945
4124
  }
3946
- if (isRowInteger && isColumnInteger === false) {
4125
+ if (isRowInteger && renderableRow >= 0 && (isColumnInteger && renderableColumn < 0 || !isColumnInteger)) {
3947
4126
  return instance.view.scrollViewportVertically(renderableRow, snapToTop, snapToBottom);
3948
4127
  }
3949
- if (isColumnInteger && isRowInteger === false) {
3950
- return instance.view.scrollViewportHorizontally(renderableColumn, snapToRight, snapToLeft);
4128
+ if (isColumnInteger && renderableColumn >= 0 && (isRowInteger && renderableRow < 0 || !isRowInteger)) {
4129
+ return instance.view.scrollViewportHorizontally(renderableColumn, snapToInlineEnd, snapToInlineStart);
3951
4130
  }
3952
4131
  return false;
3953
4132
  };
3954
4133
 
4134
+ /**
4135
+ * Scrolls the viewport to coordinates specified by the currently focused cell.
4136
+ *
4137
+ * @since 14.0.0
4138
+ * @memberof Core#
4139
+ * @fires Hooks#afterScroll
4140
+ * @function scrollToFocusedCell
4141
+ * @param {Function} callback The callback function to call after the viewport is scrolled.
4142
+ */
4143
+ this.scrollToFocusedCell = function () {
4144
+ let callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : () => {};
4145
+ if (!this.selection.isSelected()) {
4146
+ return;
4147
+ }
4148
+ this.addHookOnce('afterScroll', callback);
4149
+ const {
4150
+ highlight
4151
+ } = this.getSelectedRangeLast();
4152
+ const isScrolled = this.scrollViewportTo(highlight.toObject());
4153
+ if (isScrolled) {
4154
+ this.view.render();
4155
+ } else {
4156
+ this.removeHook('afterScroll', callback);
4157
+ this._registerImmediate(() => callback());
4158
+ }
4159
+ };
4160
+
3955
4161
  /**
3956
4162
  * Removes the table from the DOM and destroys the instance of the Handsontable.
3957
4163
  *
@@ -3972,6 +4178,7 @@ export default function Core(rootElement, userSettings) {
3972
4178
  dataSource = null;
3973
4179
  this.getShortcutManager().destroy();
3974
4180
  metaManager.clearCache();
4181
+ foreignHotInstances.delete(this.guid);
3975
4182
  if (isRootInstance(instance)) {
3976
4183
  const licenseInfo = this.rootDocument.querySelector('.hot-display-license-info');
3977
4184
  if (licenseInfo) {
@@ -4196,7 +4403,7 @@ export default function Core(rootElement, userSettings) {
4196
4403
  * @function getTranslatedPhrase
4197
4404
  * @since 0.35.0
4198
4405
  * @param {string} dictionaryKey Constant which is dictionary key.
4199
- * @param {*} extraArguments Arguments which will be handled by formatters.
4406
+ * @param {*} [extraArguments] Arguments which will be handled by formatters.
4200
4407
  * @returns {string}
4201
4408
  */
4202
4409
  this.getTranslatedPhrase = function (dictionaryKey, extraArguments) {
@@ -4295,6 +4502,16 @@ export default function Core(rootElement, userSettings) {
4295
4502
  }
4296
4503
  };
4297
4504
 
4505
+ /**
4506
+ * Gets the instance of the EditorManager.
4507
+ *
4508
+ * @private
4509
+ * @returns {EditorManager}
4510
+ */
4511
+ this._getEditorManager = function () {
4512
+ return editorManager;
4513
+ };
4514
+
4298
4515
  /**
4299
4516
  * Check if currently it is RTL direction.
4300
4517
  *
@@ -4331,10 +4548,8 @@ export default function Core(rootElement, userSettings) {
4331
4548
  return instance.isLtr() ? 1 : -1;
4332
4549
  };
4333
4550
  const shortcutManager = createShortcutManager({
4334
- handleEvent(event) {
4335
- const isListening = instance.isListening();
4336
- const isKeyboardEventWithKey = (event === null || event === void 0 ? void 0 : event.key) !== void 0;
4337
- return isListening && isKeyboardEventWithKey;
4551
+ handleEvent() {
4552
+ return instance.isListening();
4338
4553
  },
4339
4554
  beforeKeyDown: event => {
4340
4555
  return this.runHooks('beforeKeyDown', event);
@@ -4367,270 +4582,23 @@ export default function Core(rootElement, userSettings) {
4367
4582
  this.getShortcutManager = function () {
4368
4583
  return shortcutManager;
4369
4584
  };
4370
- const gridContext = shortcutManager.addContext('grid');
4371
- const gridConfig = {
4372
- runOnlyIf: () => {
4373
- return isDefined(instance.getSelected()) && instance.countRenderedRows() > 0 && instance.countRenderedCols() > 0;
4374
- },
4375
- group: SHORTCUTS_GROUP
4585
+
4586
+ /**
4587
+ * Return the Focus Manager responsible for managing the browser's focus in the table.
4588
+ *
4589
+ * @memberof Core#
4590
+ * @since 14.0.0
4591
+ * @function getFocusManager
4592
+ * @returns {FocusManager}
4593
+ */
4594
+ this.getFocusManager = function () {
4595
+ return focusManager;
4376
4596
  };
4377
- shortcutManager.setActiveContextName('grid');
4378
- gridContext.addShortcuts([{
4379
- keys: [['Control/Meta', 'A']],
4380
- callback: () => {
4381
- instance.selectAll();
4382
- }
4383
- }, {
4384
- keys: [['Control/Meta', 'Enter']],
4385
- callback: () => {
4386
- const selectedRange = instance.getSelectedRange();
4387
- const {
4388
- row: highlightRow,
4389
- col: highlightColumn
4390
- } = selectedRange[selectedRange.length - 1].highlight;
4391
- const valueToPopulate = instance.getDataAtCell(highlightRow, highlightColumn);
4392
- const cellValues = new Map();
4393
- for (let i = 0; i < selectedRange.length; i++) {
4394
- selectedRange[i].forAll((row, column) => {
4395
- if (row >= 0 && column >= 0 && (row !== highlightRow || column !== highlightColumn)) {
4396
- const {
4397
- readOnly
4398
- } = instance.getCellMeta(row, column);
4399
- if (!readOnly) {
4400
- cellValues.set(`${row}x${column}`, [row, column, valueToPopulate]);
4401
- }
4402
- }
4403
- });
4404
- }
4405
- instance.setDataAtCell(Array.from(cellValues.values()));
4406
- },
4407
- runOnlyIf: () => instance.getSelectedRangeLast().getCellsCount() > 1
4408
- }, {
4409
- keys: [['ArrowUp']],
4410
- callback: () => {
4411
- selection.transformStart(-1, 0);
4412
- }
4413
- }, {
4414
- keys: [['ArrowUp', 'Control/Meta']],
4415
- captureCtrl: true,
4416
- callback: () => {
4417
- selection.setRangeStart(instance._createCellCoords(instance.rowIndexMapper.getNearestNotHiddenIndex(0, 1), instance.getSelectedRangeLast().highlight.col));
4418
- }
4419
- }, {
4420
- keys: [['ArrowUp', 'Shift']],
4421
- callback: () => {
4422
- selection.transformEnd(-1, 0);
4423
- }
4424
- }, {
4425
- keys: [['ArrowUp', 'Shift', 'Control/Meta']],
4426
- captureCtrl: true,
4427
- callback: () => {
4428
- const {
4429
- from,
4430
- to
4431
- } = instance.getSelectedRangeLast();
4432
- const row = instance.rowIndexMapper.getNearestNotHiddenIndex(0, 1);
4433
- selection.setRangeStart(from.clone());
4434
- selection.setRangeEnd(instance._createCellCoords(row, to.col));
4435
- },
4436
- runOnlyIf: () => !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByColumnHeader())
4437
- }, {
4438
- keys: [['ArrowDown']],
4439
- callback: () => {
4440
- selection.transformStart(1, 0);
4441
- }
4442
- }, {
4443
- keys: [['ArrowDown', 'Control/Meta']],
4444
- captureCtrl: true,
4445
- callback: () => {
4446
- selection.setRangeStart(instance._createCellCoords(instance.rowIndexMapper.getNearestNotHiddenIndex(instance.countRows() - 1, -1), instance.getSelectedRangeLast().highlight.col));
4447
- }
4448
- }, {
4449
- keys: [['ArrowDown', 'Shift']],
4450
- callback: () => {
4451
- selection.transformEnd(1, 0);
4452
- }
4453
- }, {
4454
- keys: [['ArrowDown', 'Shift', 'Control/Meta']],
4455
- captureCtrl: true,
4456
- callback: () => {
4457
- const {
4458
- from,
4459
- to
4460
- } = instance.getSelectedRangeLast();
4461
- const row = instance.rowIndexMapper.getNearestNotHiddenIndex(instance.countRows() - 1, -1);
4462
- selection.setRangeStart(from.clone());
4463
- selection.setRangeEnd(instance._createCellCoords(row, to.col));
4464
- },
4465
- runOnlyIf: () => !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByColumnHeader())
4466
- }, {
4467
- keys: [['ArrowLeft']],
4468
- callback: () => {
4469
- selection.transformStart(0, -1 * instance.getDirectionFactor());
4470
- }
4471
- }, {
4472
- keys: [['ArrowLeft', 'Control/Meta']],
4473
- captureCtrl: true,
4474
- callback: () => {
4475
- const row = instance.getSelectedRangeLast().highlight.row;
4476
- const column = instance.columnIndexMapper.getNearestNotHiddenIndex(...(instance.isRtl() ? [instance.countCols() - 1, -1] : [0, 1]));
4477
- selection.setRangeStart(instance._createCellCoords(row, column));
4478
- }
4479
- }, {
4480
- keys: [['ArrowLeft', 'Shift']],
4481
- callback: () => {
4482
- selection.transformEnd(0, -1 * instance.getDirectionFactor());
4483
- }
4484
- }, {
4485
- keys: [['ArrowLeft', 'Shift', 'Control/Meta']],
4486
- captureCtrl: true,
4487
- callback: () => {
4488
- const {
4489
- from,
4490
- to
4491
- } = instance.getSelectedRangeLast();
4492
- const column = instance.columnIndexMapper.getNearestNotHiddenIndex(...(instance.isRtl() ? [instance.countCols() - 1, -1] : [0, 1]));
4493
- selection.setRangeStart(from.clone());
4494
- selection.setRangeEnd(instance._createCellCoords(to.row, column));
4495
- },
4496
- runOnlyIf: () => !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByRowHeader())
4497
- }, {
4498
- keys: [['ArrowRight']],
4499
- callback: () => {
4500
- selection.transformStart(0, instance.getDirectionFactor());
4501
- }
4502
- }, {
4503
- keys: [['ArrowRight', 'Control/Meta']],
4504
- captureCtrl: true,
4505
- callback: () => {
4506
- const row = instance.getSelectedRangeLast().highlight.row;
4507
- const column = instance.columnIndexMapper.getNearestNotHiddenIndex(...(instance.isRtl() ? [0, 1] : [instance.countCols() - 1, -1]));
4508
- selection.setRangeStart(instance._createCellCoords(row, column));
4509
- }
4510
- }, {
4511
- keys: [['ArrowRight', 'Shift']],
4512
- callback: () => {
4513
- selection.transformEnd(0, instance.getDirectionFactor());
4514
- }
4515
- }, {
4516
- keys: [['ArrowRight', 'Shift', 'Control/Meta']],
4517
- captureCtrl: true,
4518
- callback: () => {
4519
- const {
4520
- from,
4521
- to
4522
- } = instance.getSelectedRangeLast();
4523
- const column = instance.columnIndexMapper.getNearestNotHiddenIndex(...(instance.isRtl() ? [0, 1] : [instance.countCols() - 1, -1]));
4524
- selection.setRangeStart(from.clone());
4525
- selection.setRangeEnd(instance._createCellCoords(to.row, column));
4526
- },
4527
- runOnlyIf: () => !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByRowHeader())
4528
- }, {
4529
- keys: [['Home']],
4530
- captureCtrl: true,
4531
- callback: () => {
4532
- const fixedColumns = parseInt(instance.getSettings().fixedColumnsStart, 10);
4533
- const row = instance.getSelectedRangeLast().highlight.row;
4534
- const column = instance.columnIndexMapper.getNearestNotHiddenIndex(fixedColumns, 1);
4535
- selection.setRangeStart(instance._createCellCoords(row, column));
4536
- },
4537
- runOnlyIf: () => instance.view.isMainTableNotFullyCoveredByOverlays()
4538
- }, {
4539
- keys: [['Home', 'Shift']],
4540
- callback: () => {
4541
- selection.setRangeEnd(instance._createCellCoords(selection.selectedRange.current().from.row, instance.columnIndexMapper.getNearestNotHiddenIndex(0, 1)));
4542
- }
4543
- }, {
4544
- keys: [['Home', 'Control/Meta']],
4545
- captureCtrl: true,
4546
- callback: () => {
4547
- const fixedRows = parseInt(instance.getSettings().fixedRowsTop, 10);
4548
- const fixedColumns = parseInt(instance.getSettings().fixedColumnsStart, 10);
4549
- const row = instance.rowIndexMapper.getNearestNotHiddenIndex(fixedRows, 1);
4550
- const column = instance.columnIndexMapper.getNearestNotHiddenIndex(fixedColumns, 1);
4551
- selection.setRangeStart(instance._createCellCoords(row, column));
4552
- },
4553
- runOnlyIf: () => instance.view.isMainTableNotFullyCoveredByOverlays()
4554
- }, {
4555
- keys: [['End']],
4556
- captureCtrl: true,
4557
- callback: () => {
4558
- selection.setRangeStart(instance._createCellCoords(instance.getSelectedRangeLast().highlight.row, instance.columnIndexMapper.getNearestNotHiddenIndex(instance.countCols() - 1, -1)));
4559
- },
4560
- runOnlyIf: () => instance.view.isMainTableNotFullyCoveredByOverlays()
4561
- }, {
4562
- keys: [['End', 'Shift']],
4563
- callback: () => {
4564
- selection.setRangeEnd(instance._createCellCoords(selection.selectedRange.current().from.row, instance.columnIndexMapper.getNearestNotHiddenIndex(instance.countCols() - 1, -1)));
4565
- }
4566
- }, {
4567
- keys: [['End', 'Control/Meta']],
4568
- captureCtrl: true,
4569
- callback: () => {
4570
- const fixedRows = parseInt(instance.getSettings().fixedRowsBottom, 10);
4571
- const row = instance.rowIndexMapper.getNearestNotHiddenIndex(instance.countRows() - fixedRows - 1, -1);
4572
- const column = instance.columnIndexMapper.getNearestNotHiddenIndex(instance.countCols() - 1, -1);
4573
- selection.setRangeStart(instance._createCellCoords(row, column));
4574
- },
4575
- runOnlyIf: () => instance.view.isMainTableNotFullyCoveredByOverlays()
4576
- }, {
4577
- keys: [['PageUp']],
4578
- callback: () => {
4579
- selection.transformStart(-instance.countVisibleRows(), 0);
4580
- }
4581
- }, {
4582
- keys: [['PageUp', 'Shift']],
4583
- callback: () => {
4584
- const {
4585
- to
4586
- } = instance.getSelectedRangeLast();
4587
- const nextRowIndexToSelect = Math.max(to.row - instance.countVisibleRows(), 0);
4588
- const row = instance.rowIndexMapper.getNearestNotHiddenIndex(nextRowIndexToSelect, 1);
4589
- if (row !== null) {
4590
- const coords = instance._createCellCoords(row, to.col);
4591
- const scrollPadding = to.row - instance.view.getFirstFullyVisibleRow();
4592
- const nextVerticalScroll = Math.max(coords.row - scrollPadding, 0);
4593
- selection.setRangeEnd(coords);
4594
- instance.scrollViewportTo(nextVerticalScroll);
4595
- }
4596
- }
4597
- }, {
4598
- keys: [['PageDown']],
4599
- callback: () => {
4600
- selection.transformStart(instance.countVisibleRows(), 0);
4601
- }
4602
- }, {
4603
- keys: [['PageDown', 'Shift']],
4604
- callback: () => {
4605
- const {
4606
- to
4607
- } = instance.getSelectedRangeLast();
4608
- const nextRowIndexToSelect = Math.min(to.row + instance.countVisibleRows(), instance.countRows() - 1);
4609
- const row = instance.rowIndexMapper.getNearestNotHiddenIndex(nextRowIndexToSelect, -1);
4610
- if (row !== null) {
4611
- const coords = instance._createCellCoords(row, to.col);
4612
- const scrollPadding = to.row - instance.view.getFirstFullyVisibleRow();
4613
- const nextVerticalScroll = Math.min(coords.row - scrollPadding, instance.countRows() - 1);
4614
- selection.setRangeEnd(coords);
4615
- instance.scrollViewportTo(nextVerticalScroll);
4616
- }
4617
- }
4618
- }, {
4619
- keys: [['Tab']],
4620
- callback: event => {
4621
- const tabMoves = typeof tableMeta.tabMoves === 'function' ? tableMeta.tabMoves(event) : tableMeta.tabMoves;
4622
- selection.transformStart(tabMoves.row, tabMoves.col, true);
4623
- }
4624
- }, {
4625
- keys: [['Shift', 'Tab']],
4626
- callback: event => {
4627
- const tabMoves = typeof tableMeta.tabMoves === 'function' ? tableMeta.tabMoves(event) : tableMeta.tabMoves;
4628
- selection.transformStart(-tabMoves.row, -tabMoves.col);
4629
- }
4630
- }], gridConfig);
4631
4597
  getPluginsNames().forEach(pluginName => {
4632
4598
  const PluginClass = getPlugin(pluginName);
4633
4599
  pluginsRegistry.addItem(pluginName, new PluginClass(this));
4634
4600
  });
4601
+ registerAllShortcutContexts(instance);
4602
+ shortcutManager.setActiveContextName('grid');
4635
4603
  Hooks.getSingleton().run(instance, 'construct');
4636
4604
  }