handsontable 11.0.0 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (633) hide show
  1. package/3rdparty/walkontable/src/border.js +121 -99
  2. package/3rdparty/walkontable/src/border.mjs +122 -96
  3. package/3rdparty/walkontable/src/calculator/viewportColumns.js +1 -1
  4. package/3rdparty/walkontable/src/calculator/viewportColumns.mjs +1 -1
  5. package/3rdparty/walkontable/src/calculator/viewportRows.js +1 -1
  6. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +1 -1
  7. package/3rdparty/walkontable/src/cell/coords.js +60 -18
  8. package/3rdparty/walkontable/src/cell/coords.mjs +56 -18
  9. package/3rdparty/walkontable/src/cell/range.d.ts +10 -2
  10. package/3rdparty/walkontable/src/cell/range.js +279 -100
  11. package/3rdparty/walkontable/src/cell/range.mjs +274 -100
  12. package/3rdparty/walkontable/src/core/_base.js +452 -0
  13. package/3rdparty/walkontable/src/core/_base.mjs +440 -0
  14. package/3rdparty/walkontable/src/core/clone.js +97 -0
  15. package/3rdparty/walkontable/src/core/clone.mjs +80 -0
  16. package/3rdparty/walkontable/src/core/core.js +183 -0
  17. package/3rdparty/walkontable/src/core/core.mjs +160 -0
  18. package/3rdparty/walkontable/src/event.js +100 -67
  19. package/3rdparty/walkontable/src/event.mjs +100 -64
  20. package/3rdparty/walkontable/src/facade/core.js +251 -0
  21. package/3rdparty/walkontable/src/facade/core.mjs +243 -0
  22. package/3rdparty/walkontable/src/filter/column.js +1 -1
  23. package/3rdparty/walkontable/src/filter/column.mjs +1 -1
  24. package/3rdparty/walkontable/src/filter/row.js +1 -1
  25. package/3rdparty/walkontable/src/filter/row.mjs +1 -1
  26. package/3rdparty/walkontable/src/index.js +3 -47
  27. package/3rdparty/walkontable/src/index.mjs +3 -13
  28. package/3rdparty/walkontable/src/overlay/_base.js +125 -58
  29. package/3rdparty/walkontable/src/overlay/_base.mjs +126 -59
  30. package/3rdparty/walkontable/src/overlay/bottom.js +86 -76
  31. package/3rdparty/walkontable/src/overlay/bottom.mjs +86 -76
  32. package/3rdparty/walkontable/src/overlay/{bottomLeftCorner.js → bottomInlineStartCorner.js} +35 -58
  33. package/3rdparty/walkontable/src/overlay/{bottomLeftCorner.mjs → bottomInlineStartCorner.mjs} +34 -57
  34. package/3rdparty/walkontable/src/overlay/constants.js +25 -9
  35. package/3rdparty/walkontable/src/overlay/constants.mjs +14 -4
  36. package/3rdparty/walkontable/src/overlay/index.js +10 -19
  37. package/3rdparty/walkontable/src/overlay/index.mjs +4 -5
  38. package/3rdparty/walkontable/src/overlay/{left.js → inlineStart.js} +102 -80
  39. package/3rdparty/walkontable/src/overlay/{left.mjs → inlineStart.mjs} +101 -79
  40. package/3rdparty/walkontable/src/overlay/top.js +84 -79
  41. package/3rdparty/walkontable/src/overlay/top.mjs +84 -79
  42. package/3rdparty/walkontable/src/overlay/{topLeftCorner.js → topInlineStartCorner.js} +56 -57
  43. package/3rdparty/walkontable/src/overlay/{topLeftCorner.mjs → topInlineStartCorner.mjs} +51 -52
  44. package/3rdparty/walkontable/src/overlays.js +226 -157
  45. package/3rdparty/walkontable/src/overlays.mjs +226 -156
  46. package/3rdparty/walkontable/src/renderer/_base.js +1 -1
  47. package/3rdparty/walkontable/src/renderer/_base.mjs +1 -1
  48. package/3rdparty/walkontable/src/renderer/cells.js +5 -4
  49. package/3rdparty/walkontable/src/renderer/cells.mjs +5 -4
  50. package/3rdparty/walkontable/src/renderer/colGroup.js +3 -3
  51. package/3rdparty/walkontable/src/renderer/colGroup.mjs +3 -3
  52. package/3rdparty/walkontable/src/renderer/columnHeaders.js +3 -3
  53. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +3 -3
  54. package/3rdparty/walkontable/src/renderer/index.js +1 -1
  55. package/3rdparty/walkontable/src/renderer/index.mjs +1 -1
  56. package/3rdparty/walkontable/src/renderer/rowHeaders.js +3 -3
  57. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +3 -3
  58. package/3rdparty/walkontable/src/renderer/rows.js +3 -3
  59. package/3rdparty/walkontable/src/renderer/rows.mjs +3 -3
  60. package/3rdparty/walkontable/src/renderer/table.js +1 -1
  61. package/3rdparty/walkontable/src/renderer/table.mjs +1 -1
  62. package/3rdparty/walkontable/src/scroll.js +61 -88
  63. package/3rdparty/walkontable/src/scroll.mjs +61 -88
  64. package/3rdparty/walkontable/src/selection.js +12 -16
  65. package/3rdparty/walkontable/src/selection.mjs +12 -14
  66. package/3rdparty/walkontable/src/settings.js +236 -127
  67. package/3rdparty/walkontable/src/settings.mjs +236 -126
  68. package/3rdparty/walkontable/src/table/bottom.js +21 -6
  69. package/3rdparty/walkontable/src/table/bottom.mjs +20 -6
  70. package/3rdparty/walkontable/src/table/{bottomLeftCorner.js → bottomInlineStartCorner.js} +31 -15
  71. package/3rdparty/walkontable/src/table/{bottomLeftCorner.mjs → bottomInlineStartCorner.mjs} +30 -15
  72. package/3rdparty/walkontable/src/table/{left.js → inlineStart.js} +27 -15
  73. package/3rdparty/walkontable/src/table/{left.mjs → inlineStart.mjs} +26 -15
  74. package/3rdparty/walkontable/src/table/master.js +23 -13
  75. package/3rdparty/walkontable/src/table/master.mjs +23 -13
  76. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +12 -6
  77. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +12 -6
  78. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +12 -6
  79. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +12 -6
  80. package/3rdparty/walkontable/src/table/mixin/{stickyColumnsLeft.js → stickyColumnsStart.js} +13 -7
  81. package/3rdparty/walkontable/src/table/mixin/{stickyColumnsLeft.mjs → stickyColumnsStart.mjs} +13 -7
  82. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +11 -5
  83. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +11 -5
  84. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -3
  85. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -3
  86. package/3rdparty/walkontable/src/table/top.js +21 -6
  87. package/3rdparty/walkontable/src/table/top.mjs +20 -6
  88. package/3rdparty/walkontable/src/table/{topLeftCorner.js → topInlineStartCorner.js} +31 -15
  89. package/3rdparty/walkontable/src/table/{topLeftCorner.mjs → topInlineStartCorner.mjs} +30 -15
  90. package/3rdparty/walkontable/src/table.js +236 -141
  91. package/3rdparty/walkontable/src/table.mjs +232 -135
  92. package/3rdparty/walkontable/src/types.js +103 -0
  93. package/3rdparty/walkontable/src/types.mjs +102 -0
  94. package/3rdparty/walkontable/src/utils/column.js +23 -34
  95. package/3rdparty/walkontable/src/utils/column.mjs +23 -31
  96. package/3rdparty/walkontable/src/utils/nodesPool.js +1 -1
  97. package/3rdparty/walkontable/src/utils/nodesPool.mjs +1 -1
  98. package/3rdparty/walkontable/src/utils/orderView/sharedView.js +3 -3
  99. package/3rdparty/walkontable/src/utils/orderView/sharedView.mjs +3 -3
  100. package/3rdparty/walkontable/src/utils/orderView/view.js +1 -1
  101. package/3rdparty/walkontable/src/utils/orderView/view.mjs +1 -1
  102. package/3rdparty/walkontable/src/utils/orderView/viewSize.js +1 -1
  103. package/3rdparty/walkontable/src/utils/orderView/viewSize.mjs +1 -1
  104. package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.js +1 -1
  105. package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.mjs +1 -1
  106. package/3rdparty/walkontable/src/utils/row.js +10 -5
  107. package/3rdparty/walkontable/src/utils/row.mjs +10 -5
  108. package/3rdparty/walkontable/src/viewport.js +78 -81
  109. package/3rdparty/walkontable/src/viewport.mjs +78 -78
  110. package/CHANGELOG.md +94 -17
  111. package/README.md +10 -7
  112. package/base.js +2 -2
  113. package/base.mjs +2 -2
  114. package/cellTypes/timeType/timeType.d.ts +6 -6
  115. package/cellTypes/timeType/timeType.js +4 -5
  116. package/cellTypes/timeType/timeType.mjs +4 -5
  117. package/core.d.ts +9 -3
  118. package/core.js +590 -157
  119. package/core.mjs +599 -169
  120. package/dataMap/dataMap.js +2 -2
  121. package/dataMap/dataMap.mjs +2 -2
  122. package/dataMap/index.js +8 -0
  123. package/dataMap/index.mjs +3 -1
  124. package/dataMap/metaManager/index.js +3 -3
  125. package/dataMap/metaManager/index.mjs +3 -3
  126. package/dataMap/metaManager/lazyFactoryMap.js +1 -1
  127. package/dataMap/metaManager/lazyFactoryMap.mjs +1 -1
  128. package/dataMap/metaManager/metaLayers/cellMeta.js +1 -1
  129. package/dataMap/metaManager/metaLayers/cellMeta.mjs +1 -1
  130. package/dataMap/metaManager/metaLayers/columnMeta.js +1 -1
  131. package/dataMap/metaManager/metaLayers/columnMeta.mjs +1 -1
  132. package/dataMap/metaManager/metaLayers/globalMeta.js +7 -3
  133. package/dataMap/metaManager/metaLayers/globalMeta.mjs +7 -3
  134. package/dataMap/metaManager/metaLayers/tableMeta.js +3 -3
  135. package/dataMap/metaManager/metaLayers/tableMeta.mjs +3 -3
  136. package/dataMap/metaManager/metaSchema.js +2931 -2676
  137. package/dataMap/metaManager/metaSchema.mjs +2931 -2676
  138. package/dataMap/metaManager/mods/dynamicCellMeta.js +1 -1
  139. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +1 -1
  140. package/dataMap/metaManager/mods/extendMetaProperties.js +126 -0
  141. package/dataMap/metaManager/mods/extendMetaProperties.mjs +113 -0
  142. package/dataMap/replaceData.js +140 -0
  143. package/dataMap/replaceData.mjs +124 -0
  144. package/dataSource.js +1 -1
  145. package/dataSource.mjs +1 -1
  146. package/dist/README.md +2 -2
  147. package/dist/handsontable.css +424 -166
  148. package/dist/handsontable.full.css +559 -298
  149. package/dist/handsontable.full.js +47163 -41289
  150. package/dist/handsontable.full.min.css +8 -13
  151. package/dist/handsontable.full.min.js +143 -142
  152. package/dist/handsontable.js +28270 -24105
  153. package/dist/handsontable.min.css +8 -11
  154. package/dist/handsontable.min.js +3 -3
  155. package/dist/languages/all.js +69 -38
  156. package/dist/languages/all.min.js +1 -1
  157. package/dist/languages/ar-AR.js +167 -0
  158. package/dist/languages/ar-AR.min.js +1 -0
  159. package/dist/languages/de-CH.js +32 -33
  160. package/dist/languages/de-CH.min.js +1 -1
  161. package/dist/languages/de-DE.js +5 -6
  162. package/dist/languages/de-DE.min.js +1 -1
  163. package/dist/languages/en-US.js +5 -6
  164. package/dist/languages/en-US.min.js +1 -1
  165. package/dist/languages/es-MX.js +5 -6
  166. package/dist/languages/es-MX.min.js +1 -1
  167. package/dist/languages/fr-FR.js +5 -6
  168. package/dist/languages/fr-FR.min.js +1 -1
  169. package/dist/languages/it-IT.js +5 -6
  170. package/dist/languages/it-IT.min.js +1 -1
  171. package/dist/languages/ja-JP.js +5 -6
  172. package/dist/languages/ja-JP.min.js +1 -1
  173. package/dist/languages/ko-KR.js +37 -42
  174. package/dist/languages/ko-KR.min.js +1 -1
  175. package/dist/languages/lv-LV.js +4 -6
  176. package/dist/languages/lv-LV.min.js +1 -1
  177. package/dist/languages/nb-NO.js +4 -6
  178. package/dist/languages/nb-NO.min.js +1 -1
  179. package/dist/languages/nl-NL.js +4 -6
  180. package/dist/languages/nl-NL.min.js +1 -1
  181. package/dist/languages/pl-PL.js +4 -6
  182. package/dist/languages/pl-PL.min.js +1 -1
  183. package/dist/languages/pt-BR.js +4 -6
  184. package/dist/languages/pt-BR.min.js +1 -1
  185. package/dist/languages/ru-RU.js +4 -6
  186. package/dist/languages/ru-RU.min.js +1 -1
  187. package/dist/languages/zh-CN.js +4 -6
  188. package/dist/languages/zh-CN.min.js +1 -1
  189. package/dist/languages/zh-TW.js +25 -27
  190. package/dist/languages/zh-TW.min.js +1 -1
  191. package/editorManager.js +121 -268
  192. package/editorManager.mjs +129 -279
  193. package/editors/autocompleteEditor/autocompleteEditor.js +19 -17
  194. package/editors/autocompleteEditor/autocompleteEditor.mjs +19 -17
  195. package/editors/baseEditor/baseEditor.js +207 -36
  196. package/editors/baseEditor/baseEditor.mjs +202 -34
  197. package/editors/checkboxEditor/checkboxEditor.js +3 -3
  198. package/editors/checkboxEditor/checkboxEditor.mjs +3 -3
  199. package/editors/dateEditor/dateEditor.js +22 -9
  200. package/editors/dateEditor/dateEditor.mjs +23 -10
  201. package/editors/dropdownEditor/dropdownEditor.js +4 -4
  202. package/editors/dropdownEditor/dropdownEditor.mjs +4 -4
  203. package/editors/handsontableEditor/handsontableEditor.js +107 -56
  204. package/editors/handsontableEditor/handsontableEditor.mjs +107 -56
  205. package/editors/index.d.ts +3 -0
  206. package/editors/index.js +6 -0
  207. package/editors/index.mjs +3 -1
  208. package/editors/numericEditor/numericEditor.js +3 -3
  209. package/editors/numericEditor/numericEditor.mjs +3 -3
  210. package/editors/passwordEditor/passwordEditor.js +4 -4
  211. package/editors/passwordEditor/passwordEditor.mjs +4 -4
  212. package/editors/selectEditor/selectEditor.js +66 -111
  213. package/editors/selectEditor/selectEditor.mjs +67 -110
  214. package/editors/textEditor/caretPositioner.js +49 -0
  215. package/editors/textEditor/caretPositioner.mjs +42 -0
  216. package/editors/textEditor/textEditor.js +206 -182
  217. package/editors/textEditor/textEditor.mjs +200 -180
  218. package/editors/timeEditor/index.d.ts +1 -0
  219. package/editors/timeEditor/index.js +9 -0
  220. package/editors/timeEditor/index.mjs +1 -0
  221. package/editors/timeEditor/timeEditor.d.ts +7 -0
  222. package/editors/timeEditor/timeEditor.js +105 -0
  223. package/editors/timeEditor/timeEditor.mjs +84 -0
  224. package/eventManager.js +11 -5
  225. package/eventManager.mjs +11 -5
  226. package/helpers/data.js +1 -1
  227. package/helpers/data.mjs +1 -1
  228. package/helpers/dom/element.js +1 -1
  229. package/helpers/dom/element.mjs +1 -1
  230. package/helpers/feature.js +1 -1
  231. package/helpers/feature.mjs +1 -1
  232. package/helpers/mixed.js +3 -3
  233. package/helpers/mixed.mjs +3 -3
  234. package/helpers/number.js +4 -4
  235. package/helpers/number.mjs +4 -4
  236. package/helpers/object.js +1 -1
  237. package/helpers/object.mjs +1 -1
  238. package/i18n/languages/ar-AR.js +41 -0
  239. package/i18n/languages/ar-AR.mjs +17 -0
  240. package/i18n/languages/de-CH.js +1 -1
  241. package/i18n/languages/de-DE.js +1 -1
  242. package/i18n/languages/en-US.js +1 -1
  243. package/i18n/languages/es-MX.js +1 -1
  244. package/i18n/languages/fr-FR.js +1 -1
  245. package/i18n/languages/index.js +4 -0
  246. package/i18n/languages/index.mjs +2 -1
  247. package/i18n/languages/it-IT.js +1 -1
  248. package/i18n/languages/ja-JP.js +1 -1
  249. package/i18n/languages/ko-KR.js +1 -1
  250. package/i18n/languages/lv-LV.js +1 -1
  251. package/i18n/languages/nb-NO.js +1 -1
  252. package/i18n/languages/nl-NL.js +1 -1
  253. package/i18n/languages/pl-PL.js +1 -1
  254. package/i18n/languages/pt-BR.js +1 -1
  255. package/i18n/languages/ru-RU.js +1 -1
  256. package/i18n/languages/zh-CN.js +1 -1
  257. package/i18n/languages/zh-TW.js +1 -1
  258. package/i18n/registry.js +1 -1
  259. package/index.d.ts +4 -0
  260. package/index.js +1 -1
  261. package/languages/all.js +69 -38
  262. package/languages/ar-AR.js +167 -0
  263. package/languages/ar-AR.mjs +19 -0
  264. package/languages/de-CH.js +32 -33
  265. package/languages/de-DE.js +5 -6
  266. package/languages/en-US.js +5 -6
  267. package/languages/es-MX.js +5 -6
  268. package/languages/fr-FR.js +5 -6
  269. package/languages/index.js +69 -38
  270. package/languages/index.mjs +2 -1
  271. package/languages/it-IT.js +5 -6
  272. package/languages/ja-JP.js +5 -6
  273. package/languages/ko-KR.js +37 -42
  274. package/languages/lv-LV.js +4 -6
  275. package/languages/nb-NO.js +4 -6
  276. package/languages/nl-NL.js +4 -6
  277. package/languages/pl-PL.js +4 -6
  278. package/languages/pt-BR.js +4 -6
  279. package/languages/ru-RU.js +4 -6
  280. package/languages/zh-CN.js +4 -6
  281. package/languages/zh-TW.js +25 -27
  282. package/package.json +26 -8
  283. package/pluginHooks.d.ts +2 -0
  284. package/pluginHooks.js +58 -27
  285. package/pluginHooks.mjs +58 -27
  286. package/plugins/autoColumnSize/autoColumnSize.js +14 -9
  287. package/plugins/autoColumnSize/autoColumnSize.mjs +14 -9
  288. package/plugins/autoRowSize/autoRowSize.js +15 -10
  289. package/plugins/autoRowSize/autoRowSize.mjs +15 -10
  290. package/plugins/autofill/autofill.js +50 -34
  291. package/plugins/autofill/autofill.mjs +50 -33
  292. package/plugins/autofill/utils.js +10 -11
  293. package/plugins/autofill/utils.mjs +10 -10
  294. package/plugins/base/base.d.ts +8 -2
  295. package/plugins/base/base.js +68 -5
  296. package/plugins/base/base.mjs +67 -5
  297. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +4 -4
  298. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +4 -4
  299. package/plugins/bindRowsWithHeaders/maps/looseBindsMap.js +4 -4
  300. package/plugins/bindRowsWithHeaders/maps/looseBindsMap.mjs +4 -4
  301. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.js +4 -4
  302. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.mjs +4 -4
  303. package/plugins/collapsibleColumns/collapsibleColumns.js +49 -30
  304. package/plugins/collapsibleColumns/collapsibleColumns.mjs +49 -30
  305. package/plugins/columnSorting/columnSorting.d.ts +1 -1
  306. package/plugins/columnSorting/columnSorting.js +10 -12
  307. package/plugins/columnSorting/columnSorting.mjs +10 -11
  308. package/plugins/columnSorting/columnStatesManager.js +3 -3
  309. package/plugins/columnSorting/columnStatesManager.mjs +3 -3
  310. package/plugins/columnSummary/columnSummary.js +4 -4
  311. package/plugins/columnSummary/columnSummary.mjs +4 -4
  312. package/plugins/columnSummary/endpoints.js +1 -1
  313. package/plugins/columnSummary/endpoints.mjs +1 -1
  314. package/plugins/comments/commentEditor.js +24 -4
  315. package/plugins/comments/commentEditor.mjs +25 -5
  316. package/plugins/comments/comments.js +63 -104
  317. package/plugins/comments/comments.mjs +63 -102
  318. package/plugins/comments/displaySwitch.js +1 -1
  319. package/plugins/comments/displaySwitch.mjs +1 -1
  320. package/plugins/contextMenu/commandExecutor.js +1 -1
  321. package/plugins/contextMenu/commandExecutor.mjs +1 -1
  322. package/plugins/contextMenu/contextMenu.js +11 -7
  323. package/plugins/contextMenu/contextMenu.mjs +11 -7
  324. package/plugins/contextMenu/cursor.js +1 -1
  325. package/plugins/contextMenu/cursor.mjs +1 -1
  326. package/plugins/contextMenu/itemsFactory.js +1 -1
  327. package/plugins/contextMenu/itemsFactory.mjs +1 -1
  328. package/plugins/contextMenu/menu.js +223 -111
  329. package/plugins/contextMenu/menu.mjs +220 -112
  330. package/plugins/contextMenu/predefinedItems/alignment.js +1 -1
  331. package/plugins/contextMenu/predefinedItems/clearColumn.js +1 -1
  332. package/plugins/contextMenu/predefinedItems/columnLeft.js +13 -5
  333. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +11 -4
  334. package/plugins/contextMenu/predefinedItems/columnRight.js +10 -10
  335. package/plugins/contextMenu/predefinedItems/columnRight.mjs +9 -9
  336. package/plugins/contextMenu/predefinedItems/readOnly.js +1 -1
  337. package/plugins/contextMenu/predefinedItems/redo.js +1 -1
  338. package/plugins/contextMenu/predefinedItems/removeColumn.js +1 -1
  339. package/plugins/contextMenu/predefinedItems/removeRow.js +1 -1
  340. package/plugins/contextMenu/predefinedItems/rowAbove.js +1 -1
  341. package/plugins/contextMenu/predefinedItems/rowBelow.js +1 -1
  342. package/plugins/contextMenu/predefinedItems/undo.js +1 -1
  343. package/plugins/contextMenu/predefinedItems.js +1 -1
  344. package/plugins/contextMenu/utils.js +2 -2
  345. package/plugins/contextMenu/utils.mjs +2 -2
  346. package/plugins/copyPaste/clipboardData.js +1 -1
  347. package/plugins/copyPaste/clipboardData.mjs +1 -1
  348. package/plugins/copyPaste/contextMenuItem/copy.js +1 -1
  349. package/plugins/copyPaste/contextMenuItem/cut.js +1 -1
  350. package/plugins/copyPaste/copyPaste.js +29 -19
  351. package/plugins/copyPaste/copyPaste.mjs +28 -19
  352. package/plugins/copyPaste/focusableElement.js +1 -1
  353. package/plugins/copyPaste/focusableElement.mjs +1 -1
  354. package/plugins/copyPaste/pasteEvent.js +6 -2
  355. package/plugins/copyPaste/pasteEvent.mjs +6 -2
  356. package/plugins/customBorders/contextMenuItem/bottom.js +1 -1
  357. package/plugins/customBorders/contextMenuItem/left.js +5 -4
  358. package/plugins/customBorders/contextMenuItem/left.mjs +4 -3
  359. package/plugins/customBorders/contextMenuItem/noBorders.js +1 -1
  360. package/plugins/customBorders/contextMenuItem/right.js +5 -4
  361. package/plugins/customBorders/contextMenuItem/right.mjs +4 -3
  362. package/plugins/customBorders/contextMenuItem/top.js +1 -1
  363. package/plugins/customBorders/customBorders.js +141 -85
  364. package/plugins/customBorders/customBorders.mjs +139 -82
  365. package/plugins/customBorders/utils.js +131 -27
  366. package/plugins/customBorders/utils.mjs +115 -27
  367. package/plugins/dragToScroll/dragToScroll.js +11 -6
  368. package/plugins/dragToScroll/dragToScroll.mjs +11 -6
  369. package/plugins/dropdownMenu/dropdownMenu.js +8 -7
  370. package/plugins/dropdownMenu/dropdownMenu.mjs +8 -7
  371. package/plugins/exportFile/dataProvider.js +1 -1
  372. package/plugins/exportFile/dataProvider.mjs +1 -1
  373. package/plugins/exportFile/exportFile.js +3 -3
  374. package/plugins/exportFile/exportFile.mjs +3 -3
  375. package/plugins/exportFile/types/_base.js +1 -1
  376. package/plugins/exportFile/types/_base.mjs +1 -1
  377. package/plugins/exportFile/types/csv.js +3 -3
  378. package/plugins/exportFile/types/csv.mjs +3 -3
  379. package/plugins/filters/component/_base.js +1 -1
  380. package/plugins/filters/component/_base.mjs +1 -1
  381. package/plugins/filters/component/actionBar.js +3 -3
  382. package/plugins/filters/component/actionBar.mjs +3 -3
  383. package/plugins/filters/component/condition.js +4 -4
  384. package/plugins/filters/component/condition.mjs +4 -4
  385. package/plugins/filters/component/operators.js +3 -3
  386. package/plugins/filters/component/operators.mjs +3 -3
  387. package/plugins/filters/component/value.js +4 -4
  388. package/plugins/filters/component/value.mjs +4 -4
  389. package/plugins/filters/condition/beginsWith.js +1 -1
  390. package/plugins/filters/condition/between.js +1 -1
  391. package/plugins/filters/condition/contains.js +1 -1
  392. package/plugins/filters/condition/date/after.js +1 -1
  393. package/plugins/filters/condition/date/before.js +1 -1
  394. package/plugins/filters/condition/date/today.js +1 -1
  395. package/plugins/filters/condition/date/tomorrow.js +1 -1
  396. package/plugins/filters/condition/date/yesterday.js +1 -1
  397. package/plugins/filters/condition/empty.js +1 -1
  398. package/plugins/filters/condition/endsWith.js +1 -1
  399. package/plugins/filters/condition/equal.js +1 -1
  400. package/plugins/filters/condition/greaterThan.js +1 -1
  401. package/plugins/filters/condition/greaterThanOrEqual.js +1 -1
  402. package/plugins/filters/condition/lessThan.js +1 -1
  403. package/plugins/filters/condition/lessThanOrEqual.js +1 -1
  404. package/plugins/filters/condition/none.js +1 -1
  405. package/plugins/filters/condition/notBetween.js +1 -1
  406. package/plugins/filters/condition/notContains.js +1 -1
  407. package/plugins/filters/condition/notEmpty.js +1 -1
  408. package/plugins/filters/condition/notEqual.js +1 -1
  409. package/plugins/filters/conditionCollection.js +1 -1
  410. package/plugins/filters/conditionCollection.mjs +1 -1
  411. package/plugins/filters/conditionUpdateObserver.js +1 -1
  412. package/plugins/filters/conditionUpdateObserver.mjs +1 -1
  413. package/plugins/filters/dataFilter.js +1 -1
  414. package/plugins/filters/dataFilter.mjs +1 -1
  415. package/plugins/filters/filters.js +12 -9
  416. package/plugins/filters/filters.mjs +12 -9
  417. package/plugins/filters/logicalOperations/conjunction.js +1 -1
  418. package/plugins/filters/logicalOperations/disjunction.js +1 -1
  419. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +1 -1
  420. package/plugins/filters/ui/_base.js +2 -2
  421. package/plugins/filters/ui/_base.mjs +1 -1
  422. package/plugins/filters/ui/input.js +4 -4
  423. package/plugins/filters/ui/input.mjs +4 -4
  424. package/plugins/filters/ui/link.js +4 -4
  425. package/plugins/filters/ui/link.mjs +4 -4
  426. package/plugins/filters/ui/multipleSelect.js +19 -32
  427. package/plugins/filters/ui/multipleSelect.mjs +19 -32
  428. package/plugins/filters/ui/radioInput.js +4 -4
  429. package/plugins/filters/ui/radioInput.mjs +4 -4
  430. package/plugins/filters/ui/select.js +5 -5
  431. package/plugins/filters/ui/select.mjs +5 -5
  432. package/plugins/formulas/engine/register.js +1 -1
  433. package/plugins/formulas/engine/register.mjs +1 -1
  434. package/plugins/formulas/engine/settings.js +2 -2
  435. package/plugins/formulas/engine/settings.mjs +2 -2
  436. package/plugins/formulas/formulas.js +10 -10
  437. package/plugins/formulas/formulas.mjs +10 -10
  438. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +1 -1
  439. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +3 -3
  440. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +2 -2
  441. package/plugins/hiddenColumns/hiddenColumns.js +10 -5
  442. package/plugins/hiddenColumns/hiddenColumns.mjs +10 -5
  443. package/plugins/hiddenRows/contextMenuItem/hideRow.js +1 -1
  444. package/plugins/hiddenRows/contextMenuItem/showRow.js +3 -3
  445. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +2 -2
  446. package/plugins/hiddenRows/hiddenRows.js +10 -5
  447. package/plugins/hiddenRows/hiddenRows.mjs +10 -5
  448. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +2 -2
  449. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.mjs +1 -1
  450. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +2 -2
  451. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.mjs +1 -1
  452. package/plugins/manualColumnFreeze/manualColumnFreeze.js +26 -13
  453. package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +26 -13
  454. package/plugins/manualColumnMove/manualColumnMove.js +73 -62
  455. package/plugins/manualColumnMove/manualColumnMove.mjs +74 -63
  456. package/plugins/manualColumnMove/ui/_base.js +26 -13
  457. package/plugins/manualColumnMove/ui/_base.mjs +25 -13
  458. package/plugins/manualColumnMove/ui/backlight.js +4 -4
  459. package/plugins/manualColumnMove/ui/backlight.mjs +4 -4
  460. package/plugins/manualColumnMove/ui/guideline.js +4 -4
  461. package/plugins/manualColumnMove/ui/guideline.mjs +4 -4
  462. package/plugins/manualColumnResize/manualColumnResize.js +38 -22
  463. package/plugins/manualColumnResize/manualColumnResize.mjs +38 -22
  464. package/plugins/manualRowMove/manualRowMove.js +27 -17
  465. package/plugins/manualRowMove/manualRowMove.mjs +27 -17
  466. package/plugins/manualRowMove/ui/_base.js +1 -1
  467. package/plugins/manualRowMove/ui/_base.mjs +1 -1
  468. package/plugins/manualRowMove/ui/backlight.js +4 -4
  469. package/plugins/manualRowMove/ui/backlight.mjs +4 -4
  470. package/plugins/manualRowMove/ui/guideline.js +4 -4
  471. package/plugins/manualRowMove/ui/guideline.mjs +4 -4
  472. package/plugins/manualRowResize/manualRowResize.js +35 -20
  473. package/plugins/manualRowResize/manualRowResize.mjs +35 -20
  474. package/plugins/mergeCells/calculations/autofill.js +7 -6
  475. package/plugins/mergeCells/calculations/autofill.mjs +7 -5
  476. package/plugins/mergeCells/calculations/selection.js +10 -5
  477. package/plugins/mergeCells/calculations/selection.mjs +10 -5
  478. package/plugins/mergeCells/cellCoords.js +17 -5
  479. package/plugins/mergeCells/cellCoords.mjs +17 -4
  480. package/plugins/mergeCells/cellsCollection.js +28 -21
  481. package/plugins/mergeCells/cellsCollection.mjs +28 -20
  482. package/plugins/mergeCells/contextMenuItem/toggleMerge.js +1 -1
  483. package/plugins/mergeCells/mergeCells.js +83 -50
  484. package/plugins/mergeCells/mergeCells.mjs +83 -48
  485. package/plugins/multiColumnSorting/multiColumnSorting.js +5 -7
  486. package/plugins/multiColumnSorting/multiColumnSorting.mjs +5 -6
  487. package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +52 -58
  488. package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +53 -58
  489. package/plugins/nestedHeaders/nestedHeaders.js +26 -19
  490. package/plugins/nestedHeaders/nestedHeaders.mjs +26 -19
  491. package/plugins/nestedHeaders/stateManager/headersTree.js +3 -3
  492. package/plugins/nestedHeaders/stateManager/headersTree.mjs +3 -3
  493. package/plugins/nestedHeaders/stateManager/index.js +3 -3
  494. package/plugins/nestedHeaders/stateManager/index.mjs +3 -3
  495. package/plugins/nestedHeaders/stateManager/sourceSettings.js +3 -3
  496. package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +3 -3
  497. package/plugins/nestedHeaders/utils/ghostTable.js +1 -1
  498. package/plugins/nestedHeaders/utils/ghostTable.mjs +1 -1
  499. package/plugins/nestedRows/data/dataManager.js +2 -2
  500. package/plugins/nestedRows/data/dataManager.mjs +2 -2
  501. package/plugins/nestedRows/nestedRows.js +11 -5
  502. package/plugins/nestedRows/nestedRows.mjs +11 -5
  503. package/plugins/nestedRows/ui/_base.js +6 -2
  504. package/plugins/nestedRows/ui/_base.mjs +6 -2
  505. package/plugins/nestedRows/ui/collapsing.js +3 -3
  506. package/plugins/nestedRows/ui/collapsing.mjs +3 -3
  507. package/plugins/nestedRows/ui/contextMenu.js +3 -3
  508. package/plugins/nestedRows/ui/contextMenu.mjs +3 -3
  509. package/plugins/nestedRows/ui/headers.js +3 -3
  510. package/plugins/nestedRows/ui/headers.mjs +3 -3
  511. package/plugins/nestedRows/utils/rowMoveController.js +3 -5
  512. package/plugins/nestedRows/utils/rowMoveController.mjs +3 -4
  513. package/plugins/persistentState/persistentState.js +10 -5
  514. package/plugins/persistentState/persistentState.mjs +10 -5
  515. package/plugins/persistentState/storage.js +1 -1
  516. package/plugins/persistentState/storage.mjs +1 -1
  517. package/plugins/search/search.js +10 -5
  518. package/plugins/search/search.mjs +10 -5
  519. package/plugins/touchScroll/touchScroll.js +32 -26
  520. package/plugins/touchScroll/touchScroll.mjs +32 -25
  521. package/plugins/trimRows/trimRows.js +10 -5
  522. package/plugins/trimRows/trimRows.mjs +10 -5
  523. package/plugins/undoRedo/index.js +1 -1
  524. package/plugins/undoRedo/undoRedo.js +54 -48
  525. package/plugins/undoRedo/undoRedo.mjs +54 -47
  526. package/renderers/autocompleteRenderer/autocompleteRenderer.js +1 -3
  527. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +1 -2
  528. package/renderers/checkboxRenderer/checkboxRenderer.js +48 -43
  529. package/renderers/checkboxRenderer/checkboxRenderer.mjs +48 -41
  530. package/renderers/index.d.ts +4 -1
  531. package/renderers/index.js +6 -0
  532. package/renderers/index.mjs +3 -1
  533. package/renderers/numericRenderer/numericRenderer.js +1 -0
  534. package/renderers/numericRenderer/numericRenderer.mjs +1 -0
  535. package/renderers/timeRenderer/index.d.ts +1 -0
  536. package/renderers/timeRenderer/index.js +9 -0
  537. package/renderers/timeRenderer/index.mjs +1 -0
  538. package/renderers/timeRenderer/timeRenderer.d.ts +5 -0
  539. package/renderers/timeRenderer/timeRenderer.js +31 -0
  540. package/renderers/timeRenderer/timeRenderer.mjs +20 -0
  541. package/selection/highlight/highlight.js +3 -3
  542. package/selection/highlight/highlight.mjs +3 -3
  543. package/selection/highlight/types/activeHeader.js +2 -2
  544. package/selection/highlight/types/activeHeader.mjs +2 -2
  545. package/selection/highlight/types/area.js +2 -2
  546. package/selection/highlight/types/area.mjs +2 -2
  547. package/selection/highlight/types/cell.js +2 -2
  548. package/selection/highlight/types/cell.mjs +2 -2
  549. package/selection/highlight/types/customSelection.js +2 -2
  550. package/selection/highlight/types/customSelection.mjs +2 -2
  551. package/selection/highlight/types/fill.js +2 -2
  552. package/selection/highlight/types/fill.mjs +2 -2
  553. package/selection/highlight/types/header.js +2 -2
  554. package/selection/highlight/types/header.mjs +2 -2
  555. package/selection/highlight/types/index.js +2 -2
  556. package/selection/highlight/types/index.mjs +2 -2
  557. package/selection/highlight/visualSelection.js +17 -16
  558. package/selection/highlight/visualSelection.mjs +18 -17
  559. package/selection/mouseEventHandler.js +15 -10
  560. package/selection/mouseEventHandler.mjs +15 -9
  561. package/selection/range.js +5 -6
  562. package/selection/range.mjs +5 -6
  563. package/selection/selection.js +27 -20
  564. package/selection/selection.mjs +27 -18
  565. package/selection/transformation.js +5 -7
  566. package/selection/transformation.mjs +5 -6
  567. package/selection/utils.js +1 -1
  568. package/selection/utils.mjs +1 -1
  569. package/settings.d.ts +3 -1
  570. package/shortcuts/context.d.ts +20 -0
  571. package/shortcuts/context.js +296 -0
  572. package/shortcuts/context.mjs +268 -0
  573. package/shortcuts/index.d.ts +1 -0
  574. package/shortcuts/index.js +8 -0
  575. package/shortcuts/index.mjs +1 -0
  576. package/shortcuts/keyObserver.js +67 -0
  577. package/shortcuts/keyObserver.mjs +58 -0
  578. package/shortcuts/manager.d.ts +10 -0
  579. package/shortcuts/manager.js +183 -0
  580. package/shortcuts/manager.mjs +174 -0
  581. package/shortcuts/recorder.js +183 -0
  582. package/shortcuts/recorder.mjs +171 -0
  583. package/shortcuts/utils.js +77 -0
  584. package/shortcuts/utils.mjs +54 -0
  585. package/tableView.js +138 -80
  586. package/tableView.mjs +138 -70
  587. package/translations/changesObservable/observable.js +1 -1
  588. package/translations/changesObservable/observable.mjs +1 -1
  589. package/translations/changesObservable/observer.js +1 -2
  590. package/translations/changesObservable/observer.mjs +1 -2
  591. package/translations/indexMapper.d.ts +1 -0
  592. package/translations/indexMapper.js +25 -2
  593. package/translations/indexMapper.mjs +24 -2
  594. package/translations/mapCollections/aggregatedCollection.js +3 -3
  595. package/translations/mapCollections/aggregatedCollection.mjs +3 -3
  596. package/translations/mapCollections/mapCollection.js +1 -1
  597. package/translations/mapCollections/mapCollection.mjs +1 -1
  598. package/translations/maps/hidingMap.js +5 -3
  599. package/translations/maps/hidingMap.mjs +5 -3
  600. package/translations/maps/indexMap.js +3 -1
  601. package/translations/maps/indexMap.mjs +3 -1
  602. package/translations/maps/indexesSequence.js +6 -4
  603. package/translations/maps/indexesSequence.mjs +6 -4
  604. package/translations/maps/linkedPhysicalIndexToValueMap.js +6 -4
  605. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +6 -4
  606. package/translations/maps/physicalIndexToValueMap.js +6 -4
  607. package/translations/maps/physicalIndexToValueMap.mjs +6 -4
  608. package/translations/maps/trimmingMap.js +5 -3
  609. package/translations/maps/trimmingMap.mjs +5 -3
  610. package/utils/dataStructures/linkedList.js +3 -3
  611. package/utils/dataStructures/linkedList.mjs +3 -3
  612. package/utils/dataStructures/queue.js +1 -1
  613. package/utils/dataStructures/queue.mjs +1 -1
  614. package/utils/dataStructures/stack.js +1 -1
  615. package/utils/dataStructures/stack.mjs +1 -1
  616. package/utils/dataStructures/tree.js +3 -3
  617. package/utils/dataStructures/tree.mjs +3 -3
  618. package/utils/dataStructures/uniqueMap.js +14 -1
  619. package/utils/dataStructures/uniqueMap.mjs +14 -1
  620. package/utils/dataStructures/uniqueSet.js +9 -0
  621. package/utils/dataStructures/uniqueSet.mjs +9 -0
  622. package/utils/ghostTable.js +14 -3
  623. package/utils/ghostTable.mjs +15 -4
  624. package/utils/interval.js +1 -1
  625. package/utils/interval.mjs +1 -1
  626. package/utils/samplesGenerator.js +1 -1
  627. package/utils/samplesGenerator.mjs +1 -1
  628. package/3rdparty/walkontable/src/core.js +0 -309
  629. package/3rdparty/walkontable/src/core.mjs +0 -293
  630. package/3rdparty/walkontable/src/overlay/registerer.js +0 -70
  631. package/3rdparty/walkontable/src/overlay/registerer.mjs +0 -57
  632. package/utils/keyStateObserver.js +0 -121
  633. package/utils/keyStateObserver.mjs +0 -103
package/core.js CHANGED
@@ -6,15 +6,13 @@ require("core-js/modules/es.symbol.description.js");
6
6
 
7
7
  require("core-js/modules/es.symbol.iterator.js");
8
8
 
9
- require("core-js/modules/es.array.iterator.js");
10
-
11
- require("core-js/modules/web.dom-collections.iterator.js");
12
-
13
9
  require("core-js/modules/es.function.name.js");
14
10
 
15
11
  exports.__esModule = true;
16
12
  exports.default = Core;
17
13
 
14
+ require("core-js/modules/es.array.includes.js");
15
+
18
16
  require("core-js/modules/es.array.sort.js");
19
17
 
20
18
  require("core-js/modules/es.array.splice.js");
@@ -51,6 +49,12 @@ require("core-js/modules/web.timers.js");
51
49
 
52
50
  require("core-js/modules/web.immediate.js");
53
51
 
52
+ require("core-js/modules/es.array.iterator.js");
53
+
54
+ require("core-js/modules/es.map.js");
55
+
56
+ require("core-js/modules/web.dom-collections.iterator.js");
57
+
54
58
  var _element = require("./helpers/dom/element");
55
59
 
56
60
  var _function = require("./helpers/function");
@@ -97,17 +101,17 @@ var _registry4 = require("./i18n/registry");
97
101
 
98
102
  var _utils = require("./i18n/utils");
99
103
 
100
- var _keyStateObserver = require("./utils/keyStateObserver");
101
-
102
104
  var _selection = require("./selection");
103
105
 
104
106
  var _dataMap = require("./dataMap");
105
107
 
106
108
  var _uniqueMap = require("./utils/dataStructures/uniqueMap");
107
109
 
110
+ var _shortcuts = require("./shortcuts");
111
+
108
112
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
109
113
 
110
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
114
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
111
115
 
112
116
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
113
117
 
@@ -129,6 +133,7 @@ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToAr
129
133
 
130
134
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
131
135
 
136
+ var SHORTCUTS_GROUP = 'gridDefault';
132
137
  var activeGuid = null;
133
138
  /* eslint-disable jsdoc/require-description-complete-sentence */
134
139
 
@@ -157,7 +162,8 @@ var activeGuid = null;
157
162
  */
158
163
 
159
164
  function Core(rootElement, userSettings) {
160
- var _this = this;
165
+ var _userSettings$layoutD,
166
+ _this = this;
161
167
 
162
168
  var rootInstanceSymbol = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
163
169
  var preventScrollingToCell = false;
@@ -168,11 +174,6 @@ function Core(rootElement, userSettings) {
168
174
  var grid;
169
175
  var editorManager;
170
176
  var firstRun = true;
171
- userSettings.language = (0, _registry4.getValidLanguageCode)(userSettings.language);
172
- var metaManager = new _dataMap.MetaManager(instance, userSettings, [_dataMap.DynamicCellMetaMod]);
173
- var tableMeta = metaManager.getTableMeta();
174
- var globalMeta = metaManager.getGlobalMeta();
175
- var pluginsRegistry = (0, _uniqueMap.createUniqueMap)();
176
177
 
177
178
  if ((0, _rootInstance.hasValidParameter)(rootInstanceSymbol)) {
178
179
  (0, _rootInstance.registerAsRootInstance)(this);
@@ -187,8 +188,6 @@ function Core(rootElement, userSettings) {
187
188
 
188
189
 
189
190
  this.rootElement = rootElement;
190
- /* eslint-enable jsdoc/require-description-complete-sentence */
191
-
192
191
  /**
193
192
  * The nearest document over container.
194
193
  *
@@ -237,7 +236,53 @@ function Core(rootElement, userSettings) {
237
236
  */
238
237
 
239
238
  this.executionSuspendedCounter = 0;
240
- (0, _keyStateObserver.startObserving)(this.rootDocument);
239
+ var layoutDirection = (_userSettings$layoutD = userSettings === null || userSettings === void 0 ? void 0 : userSettings.layoutDirection) !== null && _userSettings$layoutD !== void 0 ? _userSettings$layoutD : 'inherit';
240
+ var rootElementDirection = ['rtl', 'ltr'].includes(layoutDirection) ? layoutDirection : this.rootWindow.getComputedStyle(this.rootElement).direction;
241
+ this.rootElement.setAttribute('dir', rootElementDirection);
242
+ /**
243
+ * Checks if the grid is rendered using the right-to-left layout direction.
244
+ *
245
+ * @since 12.0.0
246
+ * @memberof Core#
247
+ * @function isRtl
248
+ * @returns {boolean} True if RTL.
249
+ */
250
+
251
+ this.isRtl = function () {
252
+ return rootElementDirection === 'rtl';
253
+ };
254
+ /**
255
+ * Checks if the grid is rendered using the left-to-right layout direction.
256
+ *
257
+ * @since 12.0.0
258
+ * @memberof Core#
259
+ * @function isLtr
260
+ * @returns {boolean} True if LTR.
261
+ */
262
+
263
+
264
+ this.isLtr = function () {
265
+ return !instance.isRtl();
266
+ };
267
+ /**
268
+ * Returns 1 for LTR; -1 for RTL. Useful for calculations.
269
+ *
270
+ * @since 12.0.0
271
+ * @memberof Core#
272
+ * @function getDirectionFactor
273
+ * @returns {number} Returns 1 for LTR; -1 for RTL.
274
+ */
275
+
276
+
277
+ this.getDirectionFactor = function () {
278
+ return instance.isLtr() ? 1 : -1;
279
+ };
280
+
281
+ userSettings.language = (0, _registry4.getValidLanguageCode)(userSettings.language);
282
+ var metaManager = new _dataMap.MetaManager(instance, userSettings, [_dataMap.DynamicCellMetaMod, _dataMap.ExtendMetaPropertiesMod]);
283
+ var tableMeta = metaManager.getTableMeta();
284
+ var globalMeta = metaManager.getGlobalMeta();
285
+ var pluginsRegistry = (0, _uniqueMap.createUniqueMap)();
241
286
  this.container = this.rootDocument.createElement('div');
242
287
  this.renderCall = false;
243
288
  rootElement.insertBefore(this.container, rootElement.firstChild);
@@ -275,14 +320,14 @@ function Core(rootElement, userSettings) {
275
320
  var visualToRenderableCoords = function visualToRenderableCoords(coords) {
276
321
  var visualRow = coords.row,
277
322
  visualColumn = coords.col;
278
- return new _src.CellCoords( // We just store indexes for rows and columns without headers.
323
+ return instance._createCellCoords( // We just store indexes for rows and columns without headers.
279
324
  visualRow >= 0 ? instance.rowIndexMapper.getRenderableFromVisualIndex(visualRow) : visualRow, visualColumn >= 0 ? instance.columnIndexMapper.getRenderableFromVisualIndex(visualColumn) : visualColumn);
280
325
  };
281
326
 
282
327
  var renderableToVisualCoords = function renderableToVisualCoords(coords) {
283
328
  var renderableRow = coords.row,
284
329
  renderableColumn = coords.col;
285
- return new _src.CellCoords( // We just store indexes for rows and columns without headers.
330
+ return instance._createCellCoords( // We just store indexes for rows and columns without headers.
286
331
  renderableRow >= 0 ? instance.rowIndexMapper.getVisualFromRenderableIndex(renderableRow) : renderableRow, renderableColumn >= 0 ? instance.columnIndexMapper.getVisualFromRenderableIndex(renderableColumn) : renderableColumn // eslint-disable-line max-len
287
332
  );
288
333
  };
@@ -306,6 +351,15 @@ function Core(rootElement, userSettings) {
306
351
  countRowsTranslated: function countRowsTranslated() {
307
352
  return _this.view.countRenderableRows();
308
353
  },
354
+ getShortcutManager: function getShortcutManager() {
355
+ return instance.getShortcutManager();
356
+ },
357
+ createCellCoords: function createCellCoords(row, column) {
358
+ return instance._createCellCoords(row, column);
359
+ },
360
+ createCellRange: function createCellRange(highlight, from, to) {
361
+ return instance._createCellRange(highlight, from, to);
362
+ },
309
363
  visualToRenderableCoords: visualToRenderableCoords,
310
364
  renderableToVisualCoords: renderableToVisualCoords,
311
365
  isDisabledCellSelection: function isDisabledCellSelection(visualRow, visualColumn) {
@@ -334,11 +388,11 @@ function Core(rootElement, userSettings) {
334
388
  _this.runHooks('beforeSetRangeEnd', cellCoords);
335
389
 
336
390
  if (cellCoords.row < 0) {
337
- cellCoords.row = _this.view.wt.wtTable.getFirstVisibleRow();
391
+ cellCoords.row = _this.view._wt.wtTable.getFirstVisibleRow();
338
392
  }
339
393
 
340
394
  if (cellCoords.col < 0) {
341
- cellCoords.col = _this.view.wt.wtTable.getFirstVisibleColumn();
395
+ cellCoords.col = _this.view._wt.wtTable.getFirstVisibleColumn();
342
396
  }
343
397
  });
344
398
  this.selection.addLocalHook('afterSetRangeEnd', function (cellCoords) {
@@ -552,8 +606,8 @@ function Core(rootElement, userSettings) {
552
606
 
553
607
  selection.getSelectedRange().pop(); // I can't use transforms as they don't work in negative indexes.
554
608
 
555
- selection.setRangeStartOnly(new _src.CellCoords(currentFromRow + delta, currentFromColumn), true);
556
- selection.setRangeEnd(new _src.CellCoords(currentToRow + delta, currentToColumn)); // will call render() internally
609
+ selection.setRangeStartOnly(instance._createCellCoords(currentFromRow + delta, currentFromColumn), true);
610
+ selection.setRangeEnd(instance._createCellCoords(currentToRow + delta, currentToColumn)); // will call render() internally
557
611
  } else {
558
612
  instance._refreshBorders(); // it will call render and prepare methods
559
613
 
@@ -597,8 +651,8 @@ function Core(rootElement, userSettings) {
597
651
 
598
652
  selection.getSelectedRange().pop(); // I can't use transforms as they don't work in negative indexes.
599
653
 
600
- selection.setRangeStartOnly(new _src.CellCoords(_currentFromRow, _currentFromColumn + delta), true);
601
- selection.setRangeEnd(new _src.CellCoords(_currentToRow, _currentToColumn + delta)); // will call render() internally
654
+ selection.setRangeStartOnly(instance._createCellCoords(_currentFromRow, _currentFromColumn + delta), true);
655
+ selection.setRangeEnd(instance._createCellCoords(_currentToRow, _currentToColumn + delta)); // will call render() internally
602
656
  } else {
603
657
  instance._refreshBorders(); // it will call render and prepare methods
604
658
 
@@ -690,10 +744,10 @@ function Core(rootElement, userSettings) {
690
744
  }
691
745
 
692
746
  metaManager.removeColumn(physicalColumnIndex, groupAmount);
693
- var fixedColumnsLeft = tableMeta.fixedColumnsLeft;
747
+ var fixedColumnsStart = tableMeta.fixedColumnsStart;
694
748
 
695
- if (fixedColumnsLeft >= calcIndex + 1) {
696
- tableMeta.fixedColumnsLeft -= Math.min(groupAmount, fixedColumnsLeft - calcIndex);
749
+ if (fixedColumnsStart >= calcIndex + 1) {
750
+ tableMeta.fixedColumnsStart -= Math.min(groupAmount, fixedColumnsStart - calcIndex);
697
751
  }
698
752
 
699
753
  if (Array.isArray(tableMeta.colHeaders)) {
@@ -1401,6 +1455,38 @@ function Core(rootElement, userSettings) {
1401
1455
  activeEditor.refreshValue();
1402
1456
  }
1403
1457
  }
1458
+ /**
1459
+ * Creates and returns the CellCoords object.
1460
+ *
1461
+ * @private
1462
+ * @memberof Core#
1463
+ * @function _createCellCoords
1464
+ * @param {number} row The row index.
1465
+ * @param {number} column The column index.
1466
+ * @returns {CellCoords}
1467
+ */
1468
+
1469
+
1470
+ this._createCellCoords = function (row, column) {
1471
+ return instance.view._wt.createCellCoords(row, column);
1472
+ };
1473
+ /**
1474
+ * Creates and returns the CellRange object.
1475
+ *
1476
+ * @private
1477
+ * @memberof Core#
1478
+ * @function _createCellRange
1479
+ * @param {CellCoords} highlight Defines the border around a cell where selection was started and to edit the cell
1480
+ * when you press Enter. The highlight cannot point to headers (negative values).
1481
+ * @param {CellCoords} from Initial coordinates.
1482
+ * @param {CellCoords} to Final coordinates.
1483
+ * @returns {CellRange}
1484
+ */
1485
+
1486
+
1487
+ this._createCellRange = function (highlight, from, to) {
1488
+ return instance.view._wt.createCellRange(highlight, from, to);
1489
+ };
1404
1490
  /**
1405
1491
  * Validate a single cell.
1406
1492
  *
@@ -1439,7 +1525,8 @@ function Core(rootElement, userSettings) {
1439
1525
  if (td && td.nodeName !== 'TH') {
1440
1526
  var renderableRow = instance.rowIndexMapper.getRenderableFromVisualIndex(row);
1441
1527
  var renderableColumn = instance.columnIndexMapper.getRenderableFromVisualIndex(col);
1442
- instance.view.wt.wtSettings.settings.cellRenderer(renderableRow, renderableColumn, td);
1528
+
1529
+ instance.view._wt.getSetting('cellRenderer', renderableRow, renderableColumn, td);
1443
1530
  }
1444
1531
 
1445
1532
  callback(valid);
@@ -1664,8 +1751,8 @@ function Core(rootElement, userSettings) {
1664
1751
  throw new Error('populateFromArray parameter `input` must be an array of arrays'); // API changed in 0.9-beta2, let's check if you use it correctly
1665
1752
  }
1666
1753
 
1667
- var c = typeof endRow === 'number' ? new _src.CellCoords(endRow, endCol) : null;
1668
- return grid.populateFromArray(new _src.CellCoords(row, column), input, c, source, method, direction, deltas);
1754
+ var c = typeof endRow === 'number' ? instance._createCellCoords(endRow, endCol) : null;
1755
+ return grid.populateFromArray(instance._createCellCoords(row, column), input, c, source, method, direction, deltas);
1669
1756
  };
1670
1757
  /**
1671
1758
  * Adds/removes data from the column. This method works the same as Array.splice for arrays.
@@ -1814,10 +1901,10 @@ function Core(rootElement, userSettings) {
1814
1901
 
1815
1902
  var changes = [];
1816
1903
  (0, _array.arrayEach)(selection.getSelectedRange(), function (cellRange) {
1817
- var topLeft = cellRange.getTopLeftCorner();
1818
- var bottomRight = cellRange.getBottomRightCorner();
1819
- (0, _number.rangeEach)(topLeft.row, bottomRight.row, function (row) {
1820
- (0, _number.rangeEach)(topLeft.col, bottomRight.col, function (column) {
1904
+ var topStart = cellRange.getTopStartCorner();
1905
+ var bottomEnd = cellRange.getBottomEndCorner();
1906
+ (0, _number.rangeEach)(topStart.row, bottomEnd.row, function (row) {
1907
+ (0, _number.rangeEach)(topStart.col, bottomEnd.col, function (column) {
1821
1908
  if (!_this2.getCellMeta(row, column).readOnly) {
1822
1909
  changes.push([row, column, null]);
1823
1910
  }
@@ -2175,7 +2262,7 @@ function Core(rootElement, userSettings) {
2175
2262
  return;
2176
2263
  }
2177
2264
 
2178
- if (isSizeChanged || instance.view.wt.wtOverlays.scrollableElement === instance.rootWindow) {
2265
+ if (isSizeChanged || instance.view._wt.wtOverlays.scrollableElement === instance.rootWindow) {
2179
2266
  instance.view.setLastSize(width, height);
2180
2267
  instance.render();
2181
2268
  }
@@ -2189,14 +2276,67 @@ function Core(rootElement, userSettings) {
2189
2276
  }, isSizeChanged);
2190
2277
  };
2191
2278
  /**
2192
- * Loads new data to Handsontable. Loading new data resets the cell meta.
2193
- * Since 8.0.0 loading new data also resets states corresponding to rows and columns
2194
- * (for example, row/column sequence, column width, row height, frozen columns etc.).
2279
+ * The `updateData()` method replaces Handsontable's [`data`](@/api/options.md#data) with a new dataset.
2280
+ *
2281
+ * The `updateData()` method:
2282
+ * - Keeps cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)
2283
+ * - Keeps rows' states (e.g. row order)
2284
+ * - Keeps columns' states (e.g. column order)
2285
+ *
2286
+ * To replace Handsontable's [`data`](@/api/options.md#data) and reset states, use the [`loadData()`](#loaddata) method.
2287
+ *
2288
+ * Read more:
2289
+ * - [Binding to data &#8594;](@/guides/getting-started/binding-to-data.md)
2290
+ * - [Saving data &#8594;](@/guides/getting-started/saving-data.md)
2291
+ *
2292
+ * @memberof Core#
2293
+ * @function updateData
2294
+ * @since 11.1.0
2295
+ * @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data.md#array-of-objects), that contains Handsontable's data
2296
+ * @param {string} [source] The source of the `updateData()` call
2297
+ * @fires Hooks#beforeUpdateData
2298
+ * @fires Hooks#afterUpdateData
2299
+ * @fires Hooks#afterChange
2300
+ */
2301
+
2302
+
2303
+ this.updateData = function (data, source) {
2304
+ var _this3 = this;
2305
+
2306
+ (0, _dataMap.replaceData)(data, function (newDataMap) {
2307
+ datamap = newDataMap;
2308
+ }, function (newDataMap) {
2309
+ datamap = newDataMap;
2310
+ instance.columnIndexMapper.fitToLength(_this3.getInitialColumnCount());
2311
+ instance.rowIndexMapper.fitToLength(_this3.countSourceRows());
2312
+ grid.adjustRowsAndCols();
2313
+ }, {
2314
+ hotInstance: instance,
2315
+ dataMap: datamap,
2316
+ dataSource: dataSource,
2317
+ internalSource: 'updateData',
2318
+ source: source,
2319
+ firstRun: firstRun
2320
+ });
2321
+ };
2322
+ /**
2323
+ * The `loadData()` method replaces Handsontable's [`data`](@/api/options.md#data) with a new dataset.
2324
+ *
2325
+ * Additionally, the `loadData()` method:
2326
+ * - Resets cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)
2327
+ * - Resets rows' states (e.g. row order)
2328
+ * - Resets columns' states (e.g. column order)
2329
+ *
2330
+ * To replace Handsontable's [`data`](@/api/options.md#data) without resetting states, use the [`updateData()`](#updatedata) method.
2331
+ *
2332
+ * Read more:
2333
+ * - [Binding to data &#8594;](@/guides/getting-started/binding-to-data.md)
2334
+ * - [Saving data &#8594;](@/guides/getting-started/saving-data.md)
2195
2335
  *
2196
2336
  * @memberof Core#
2197
2337
  * @function loadData
2198
- * @param {Array} data Array of arrays or array of objects containing data.
2199
- * @param {string} [source] Source of the loadData call.
2338
+ * @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data.md#array-of-objects), that contains Handsontable's data
2339
+ * @param {string} [source] The source of the `loadData()` call
2200
2340
  * @fires Hooks#beforeLoadData
2201
2341
  * @fires Hooks#afterLoadData
2202
2342
  * @fires Hooks#afterChange
@@ -2204,88 +2344,34 @@ function Core(rootElement, userSettings) {
2204
2344
 
2205
2345
 
2206
2346
  this.loadData = function (data, source) {
2207
- if (Array.isArray(tableMeta.dataSchema)) {
2208
- instance.dataType = 'array';
2209
- } else if ((0, _function.isFunction)(tableMeta.dataSchema)) {
2210
- instance.dataType = 'function';
2211
- } else {
2212
- instance.dataType = 'object';
2213
- }
2214
-
2215
- if (datamap) {
2216
- datamap.destroy();
2217
- }
2218
-
2219
- data = instance.runHooks('beforeLoadData', data, firstRun, source);
2220
- datamap = new _dataMap.DataMap(instance, data, tableMeta);
2221
-
2222
- if (_typeof(data) === 'object' && data !== null) {
2223
- if (!(data.push && data.splice)) {
2224
- // check if data is array. Must use duck-type check so Backbone Collections also pass it
2225
- // when data is not an array, attempt to make a single-row array of it
2226
- // eslint-disable-next-line no-param-reassign
2227
- data = [data];
2228
- }
2229
- } else if (data === null) {
2230
- var dataSchema = datamap.getSchema(); // eslint-disable-next-line no-param-reassign
2231
-
2232
- data = [];
2233
- var row;
2234
- var r = 0;
2235
- var rlen = 0;
2236
-
2237
- for (r = 0, rlen = tableMeta.startRows; r < rlen; r++) {
2238
- if ((instance.dataType === 'object' || instance.dataType === 'function') && tableMeta.dataSchema) {
2239
- row = (0, _object.deepClone)(dataSchema);
2240
- data.push(row);
2241
- } else if (instance.dataType === 'array') {
2242
- row = (0, _object.deepClone)(dataSchema[0]);
2243
- data.push(row);
2244
- } else {
2245
- row = [];
2246
-
2247
- for (var c = 0, clen = tableMeta.startCols; c < clen; c++) {
2248
- row.push(null);
2249
- }
2347
+ (0, _dataMap.replaceData)(data, function (newDataMap) {
2348
+ datamap = newDataMap;
2349
+ }, function () {
2350
+ metaManager.clearCellsCache();
2351
+ instance.initIndexMappers();
2352
+ grid.adjustRowsAndCols();
2250
2353
 
2251
- data.push(row);
2252
- }
2354
+ if (firstRun) {
2355
+ firstRun = [null, 'loadData'];
2253
2356
  }
2254
- } else {
2255
- throw new Error("loadData only accepts array of objects or array of arrays (".concat(_typeof(data), " given)"));
2256
- }
2257
-
2258
- if (Array.isArray(data[0])) {
2259
- instance.dataType = 'array';
2260
- }
2261
-
2262
- tableMeta.data = data;
2263
- datamap.dataSource = data;
2264
- dataSource.data = data;
2265
- dataSource.dataType = instance.dataType;
2266
- dataSource.colToProp = datamap.colToProp.bind(datamap);
2267
- dataSource.propToCol = datamap.propToCol.bind(datamap);
2268
- dataSource.countCachedColumns = datamap.countCachedColumns.bind(datamap);
2269
- metaManager.clearCellsCache();
2270
- instance.initIndexMappers();
2271
- grid.adjustRowsAndCols();
2272
- instance.runHooks('afterLoadData', data, firstRun, source);
2273
-
2274
- if (firstRun) {
2275
- firstRun = [null, 'loadData'];
2276
- } else {
2277
- instance.runHooks('afterChange', null, 'loadData');
2278
- instance.render();
2279
- }
2357
+ }, {
2358
+ hotInstance: instance,
2359
+ dataMap: datamap,
2360
+ dataSource: dataSource,
2361
+ internalSource: 'loadData',
2362
+ source: source,
2363
+ firstRun: firstRun
2364
+ });
2280
2365
  };
2281
2366
  /**
2282
- * Init index mapper which manage indexes assigned to the data.
2367
+ * Gets the initial column count, calculated based on the `columns` setting.
2283
2368
  *
2284
2369
  * @private
2370
+ * @returns {number} The calculated number of columns.
2285
2371
  */
2286
2372
 
2287
2373
 
2288
- this.initIndexMappers = function () {
2374
+ this.getInitialColumnCount = function () {
2289
2375
  var columnsSettings = tableMeta.columns;
2290
2376
  var finalNrOfColumns = 0; // We will check number of columns when the `columns` property was defined as an array. Columns option may
2291
2377
  // narrow down or expand displayed dataset in that case.
@@ -2315,7 +2401,17 @@ function Core(rootElement, userSettings) {
2315
2401
  finalNrOfColumns = this.countSourceCols();
2316
2402
  }
2317
2403
 
2318
- this.columnIndexMapper.initToLength(finalNrOfColumns);
2404
+ return finalNrOfColumns;
2405
+ };
2406
+ /**
2407
+ * Init index mapper which manage indexes assigned to the data.
2408
+ *
2409
+ * @private
2410
+ */
2411
+
2412
+
2413
+ this.initIndexMappers = function () {
2414
+ this.columnIndexMapper.initToLength(this.getInitialColumnCount());
2319
2415
  this.rowIndexMapper.initToLength(this.countSourceRows());
2320
2416
  };
2321
2417
  /**
@@ -2349,7 +2445,7 @@ function Core(rootElement, userSettings) {
2349
2445
  return datamap.getAll();
2350
2446
  }
2351
2447
 
2352
- return datamap.getRange(new _src.CellCoords(row, column), new _src.CellCoords(row2, column2), datamap.DESTINATION_RENDERER);
2448
+ return datamap.getRange(instance._createCellCoords(row, column), instance._createCellCoords(row2, column2), datamap.DESTINATION_RENDERER);
2353
2449
  };
2354
2450
  /**
2355
2451
  * Returns a string value of the selected range. Each column is separated by tab, each row is separated by a new
@@ -2366,7 +2462,7 @@ function Core(rootElement, userSettings) {
2366
2462
 
2367
2463
 
2368
2464
  this.getCopyableText = function (startRow, startCol, endRow, endCol) {
2369
- return datamap.getCopyableText(new _src.CellCoords(startRow, startCol), new _src.CellCoords(endRow, endCol));
2465
+ return datamap.getCopyableText(instance._createCellCoords(startRow, startCol), instance._createCellCoords(endRow, endCol));
2370
2466
  };
2371
2467
  /**
2372
2468
  * Returns the data's copyable value at specified `row` and `column` index.
@@ -2396,7 +2492,7 @@ function Core(rootElement, userSettings) {
2396
2492
  return datamap.getSchema();
2397
2493
  };
2398
2494
  /**
2399
- * Use it if you need to change configuration after initialization. The `settings` argument is an object containing the new
2495
+ * Use it if you need to change configuration after initialization. The `settings` argument is an object containing the changed
2400
2496
  * settings, declared the same way as in the initial settings object.
2401
2497
  *
2402
2498
  * __Note__, that although the `updateSettings` method doesn't overwrite the previously declared settings, it might reset
@@ -2405,9 +2501,12 @@ function Core(rootElement, userSettings) {
2405
2501
  * Since 8.0.0 passing `columns` or `data` inside `settings` objects will result in resetting states corresponding to rows and columns
2406
2502
  * (for example, row/column sequence, column width, row height, frozen columns etc.).
2407
2503
  *
2504
+ * Since 12.0.0 passing `data` inside `settings` objects no longer results in resetting states corresponding to rows and columns
2505
+ * (for example, row/column sequence, column width, row height, frozen columns etc.).
2506
+ *
2408
2507
  * @memberof Core#
2409
2508
  * @function updateSettings
2410
- * @param {object} settings New settings object (see {@link Options}).
2509
+ * @param {object} settings A settings object (see {@link Options}). Only provide the settings that are changed, not the whole settings object that was used for initialization.
2411
2510
  * @param {boolean} [init=false] Internally used for in initialization mode.
2412
2511
  * @example
2413
2512
  * ```js
@@ -2424,6 +2523,7 @@ function Core(rootElement, userSettings) {
2424
2523
 
2425
2524
  this.updateSettings = function (settings) {
2426
2525
  var init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
2526
+ var dataUpdateFunction = (firstRun ? instance.loadData : instance.updateData).bind(this);
2427
2527
  var columnsAsFunc = false;
2428
2528
  var i;
2429
2529
  var j;
@@ -2442,19 +2542,15 @@ function Core(rootElement, userSettings) {
2442
2542
 
2443
2543
 
2444
2544
  for (i in settings) {
2445
- if (i === 'data') {
2446
- /* eslint-disable-next-line no-continue */
2447
- continue; // loadData will be triggered later
2545
+ if (i === 'data') {// Do nothing. loadData will be triggered later
2448
2546
  } else if (i === 'language') {
2449
2547
  setLanguage(settings.language);
2450
- /* eslint-disable-next-line no-continue */
2451
-
2452
- continue;
2453
2548
  } else if (i === 'className') {
2454
2549
  setClassName('className', settings.className);
2455
2550
  } else if (i === 'tableClassName' && instance.table) {
2456
2551
  setClassName('tableClassName', settings.tableClassName);
2457
- instance.view.wt.wtOverlays.syncOverlayTableClassNames();
2552
+
2553
+ instance.view._wt.wtOverlays.syncOverlayTableClassNames();
2458
2554
  } else if (_pluginHooks.default.getSingleton().isRegistered(i) || _pluginHooks.default.getSingleton().isDeprecated(i)) {
2459
2555
  if ((0, _function.isFunction)(settings[i]) || Array.isArray(settings[i])) {
2460
2556
  settings[i].initialHook = true;
@@ -2468,9 +2564,9 @@ function Core(rootElement, userSettings) {
2468
2564
 
2469
2565
 
2470
2566
  if (settings.data === void 0 && tableMeta.data === void 0) {
2471
- instance.loadData(null, 'updateSettings'); // data source created just now
2567
+ dataUpdateFunction(null, 'updateSettings'); // data source created just now
2472
2568
  } else if (settings.data !== void 0) {
2473
- instance.loadData(settings.data, 'updateSettings'); // data source given as option
2569
+ dataUpdateFunction(settings.data, 'updateSettings'); // data source given as option
2474
2570
  } else if (settings.columns !== void 0) {
2475
2571
  datamap.createMap(); // The `column` property has changed - dataset may be expanded or narrowed down. The `loadData` do the same.
2476
2572
 
@@ -2557,8 +2653,9 @@ function Core(rootElement, userSettings) {
2557
2653
 
2558
2654
  if (!init) {
2559
2655
  if (instance.view) {
2560
- instance.view.wt.wtViewport.resetHasOversizedColumnHeadersMarked();
2561
- instance.view.wt.exportSettingsAsClassNames();
2656
+ instance.view._wt.wtViewport.resetHasOversizedColumnHeadersMarked();
2657
+
2658
+ instance.view._wt.exportSettingsAsClassNames();
2562
2659
  }
2563
2660
 
2564
2661
  instance.runHooks('afterUpdateSettings', settings);
@@ -2573,12 +2670,13 @@ function Core(rootElement, userSettings) {
2573
2670
 
2574
2671
  instance._refreshBorders(null);
2575
2672
 
2576
- instance.view.wt.wtOverlays.adjustElementsSize();
2673
+ instance.view._wt.wtOverlays.adjustElementsSize();
2674
+
2577
2675
  editorManager.unlockEditor();
2578
2676
  }
2579
2677
 
2580
2678
  if (!init && instance.view && (currentHeight === '' || height === '' || height === void 0) && currentHeight !== height) {
2581
- instance.view.wt.wtOverlays.updateMainScrollableElements();
2679
+ instance.view._wt.wtOverlays.updateMainScrollableElements();
2582
2680
  }
2583
2681
  };
2584
2682
  /**
@@ -2608,7 +2706,7 @@ function Core(rootElement, userSettings) {
2608
2706
  *
2609
2707
  * @memberof Core#
2610
2708
  * @function getSettings
2611
- * @returns {object} Object containing the current table settings.
2709
+ * @returns {TableMeta} Object containing the current table settings.
2612
2710
  */
2613
2711
 
2614
2712
 
@@ -2702,7 +2800,7 @@ function Core(rootElement, userSettings) {
2702
2800
  return null;
2703
2801
  }
2704
2802
 
2705
- return instance.view.getCellAtCoords(new _src.CellCoords(renderableRowIndex, renderableColumnIndex), topmost);
2803
+ return instance.view.getCellAtCoords(instance._createCellCoords(renderableRowIndex, renderableColumnIndex), topmost);
2706
2804
  };
2707
2805
  /**
2708
2806
  * Returns the coordinates of the cell, provided as a HTML table cell element.
@@ -2720,7 +2818,7 @@ function Core(rootElement, userSettings) {
2720
2818
 
2721
2819
 
2722
2820
  this.getCoords = function (element) {
2723
- var renderableCoords = this.view.wt.wtTable.getCoords(element);
2821
+ var renderableCoords = this.view._wt.wtTable.getCoords(element);
2724
2822
 
2725
2823
  if (renderableCoords === null) {
2726
2824
  return null;
@@ -2739,7 +2837,7 @@ function Core(rootElement, userSettings) {
2739
2837
  visualColumn = this.columnIndexMapper.getVisualFromRenderableIndex(renderableColumn);
2740
2838
  }
2741
2839
 
2742
- return new _src.CellCoords(visualRow, visualColumn);
2840
+ return instance._createCellCoords(visualRow, visualColumn);
2743
2841
  };
2744
2842
  /**
2745
2843
  * Returns the property name that corresponds with the given column index.
@@ -2881,7 +2979,7 @@ function Core(rootElement, userSettings) {
2881
2979
  this.getDataAtCol = function (column) {
2882
2980
  var _ref13;
2883
2981
 
2884
- return (_ref13 = []).concat.apply(_ref13, _toConsumableArray(datamap.getRange(new _src.CellCoords(0, column), new _src.CellCoords(tableMeta.data.length - 1, column), datamap.DESTINATION_RENDERER)));
2982
+ return (_ref13 = []).concat.apply(_ref13, _toConsumableArray(datamap.getRange(instance._createCellCoords(0, column), instance._createCellCoords(tableMeta.data.length - 1, column), datamap.DESTINATION_RENDERER)));
2885
2983
  };
2886
2984
  /**
2887
2985
  * Given the object property name (e.g. `'first.name'` or `'0'`), returns an array of column's values from the table data.
@@ -2898,7 +2996,7 @@ function Core(rootElement, userSettings) {
2898
2996
  this.getDataAtProp = function (prop) {
2899
2997
  var _ref14;
2900
2998
 
2901
- var range = datamap.getRange(new _src.CellCoords(0, datamap.propToCol(prop)), new _src.CellCoords(tableMeta.data.length - 1, datamap.propToCol(prop)), datamap.DESTINATION_RENDERER);
2999
+ var range = datamap.getRange(instance._createCellCoords(0, datamap.propToCol(prop)), instance._createCellCoords(tableMeta.data.length - 1, datamap.propToCol(prop)), datamap.DESTINATION_RENDERER);
2902
3000
  return (_ref14 = []).concat.apply(_ref14, _toConsumableArray(range));
2903
3001
  };
2904
3002
  /**
@@ -2925,7 +3023,7 @@ function Core(rootElement, userSettings) {
2925
3023
  if (row === void 0) {
2926
3024
  data = dataSource.getData();
2927
3025
  } else {
2928
- data = dataSource.getByRange(new _src.CellCoords(row, column), new _src.CellCoords(row2, column2));
3026
+ data = dataSource.getByRange(instance._createCellCoords(row, column), instance._createCellCoords(row2, column2));
2929
3027
  }
2930
3028
 
2931
3029
  return data;
@@ -2954,7 +3052,7 @@ function Core(rootElement, userSettings) {
2954
3052
  if (row === void 0) {
2955
3053
  data = dataSource.getData(true);
2956
3054
  } else {
2957
- data = dataSource.getByRange(new _src.CellCoords(row, column), new _src.CellCoords(row2, column2), true);
3055
+ data = dataSource.getByRange(instance._createCellCoords(row, column), instance._createCellCoords(row2, column2), true);
2958
3056
  }
2959
3057
 
2960
3058
  return data;
@@ -3071,7 +3169,7 @@ function Core(rootElement, userSettings) {
3071
3169
 
3072
3170
 
3073
3171
  this.getDataAtRow = function (row) {
3074
- var data = datamap.getRange(new _src.CellCoords(row, 0), new _src.CellCoords(row, this.countCols() - 1), datamap.DESTINATION_RENDERER);
3172
+ var data = datamap.getRange(instance._createCellCoords(row, 0), instance._createCellCoords(row, this.countCols() - 1), datamap.DESTINATION_RENDERER);
3075
3173
  return data[0] || [];
3076
3174
  };
3077
3175
  /**
@@ -3092,7 +3190,7 @@ function Core(rootElement, userSettings) {
3092
3190
 
3093
3191
 
3094
3192
  this.getDataType = function (rowFrom, columnFrom, rowTo, columnTo) {
3095
- var _this3 = this;
3193
+ var _this4 = this;
3096
3194
 
3097
3195
  var coords = rowFrom === void 0 ? [0, 0, this.countRows(), this.countCols()] : [rowFrom, columnFrom, rowTo, columnTo];
3098
3196
  var rowStart = coords[0],
@@ -3114,7 +3212,7 @@ function Core(rootElement, userSettings) {
3114
3212
  (0, _number.rangeEach)(Math.max(Math.min(rowStart, rowEnd), 0), Math.max(rowStart, rowEnd), function (row) {
3115
3213
  var isTypeEqual = true;
3116
3214
  (0, _number.rangeEach)(Math.max(Math.min(columnStart, columnEnd), 0), Math.max(columnStart, columnEnd), function (column) {
3117
- var cellType = _this3.getCellMeta(row, column);
3215
+ var cellType = _this4.getCellMeta(row, column);
3118
3216
 
3119
3217
  currentType = cellType.type;
3120
3218
 
@@ -3171,7 +3269,7 @@ function Core(rootElement, userSettings) {
3171
3269
 
3172
3270
 
3173
3271
  this.spliceCellsMeta = function (visualIndex) {
3174
- var _this4 = this;
3272
+ var _this5 = this;
3175
3273
 
3176
3274
  var deleteAmount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
3177
3275
 
@@ -3189,9 +3287,9 @@ function Core(rootElement, userSettings) {
3189
3287
 
3190
3288
  if (cellMetaRows.length > 0) {
3191
3289
  (0, _array.arrayEach)(cellMetaRows.reverse(), function (cellMetaRow) {
3192
- metaManager.createRow(_this4.toPhysicalRow(visualIndex));
3290
+ metaManager.createRow(_this5.toPhysicalRow(visualIndex));
3193
3291
  (0, _array.arrayEach)(cellMetaRow, function (cellMeta, columnIndex) {
3194
- return _this4.setCellMetaObject(visualIndex, columnIndex, cellMeta);
3292
+ return _this5.setCellMetaObject(visualIndex, columnIndex, cellMeta);
3195
3293
  });
3196
3294
  });
3197
3295
  }
@@ -3210,11 +3308,11 @@ function Core(rootElement, userSettings) {
3210
3308
 
3211
3309
 
3212
3310
  this.setCellMetaObject = function (row, column, prop) {
3213
- var _this5 = this;
3311
+ var _this6 = this;
3214
3312
 
3215
3313
  if (_typeof(prop) === 'object') {
3216
3314
  (0, _object.objectEach)(prop, function (value, key) {
3217
- _this5.setCellMeta(row, column, key, value);
3315
+ _this6.setCellMeta(row, column, key, value);
3218
3316
  });
3219
3317
  }
3220
3318
  };
@@ -3834,7 +3932,8 @@ function Core(rootElement, userSettings) {
3834
3932
  return Math.min(maxCols, dataLen);
3835
3933
  };
3836
3934
  /**
3837
- * Returns the number of rendered rows (including rows partially or fully rendered outside viewport).
3935
+ * Returns the number of rendered rows including rows that are partially or fully rendered
3936
+ * outside the table viewport.
3838
3937
  *
3839
3938
  * @memberof Core#
3840
3939
  * @function countRenderedRows
@@ -3843,10 +3942,11 @@ function Core(rootElement, userSettings) {
3843
3942
 
3844
3943
 
3845
3944
  this.countRenderedRows = function () {
3846
- return instance.view.wt.drawn ? instance.view.wt.wtTable.getRenderedRowsCount() : -1;
3945
+ return instance.view._wt.drawn ? instance.view._wt.wtTable.getRenderedRowsCount() : -1;
3847
3946
  };
3848
3947
  /**
3849
- * Returns the number of visible rows (rendered rows that fully fit inside viewport).
3948
+ * Returns the number of rendered rows that are only visible in the table viewport.
3949
+ * The rows that are partially visible are not counted.
3850
3950
  *
3851
3951
  * @memberof Core#
3852
3952
  * @function countVisibleRows
@@ -3855,10 +3955,11 @@ function Core(rootElement, userSettings) {
3855
3955
 
3856
3956
 
3857
3957
  this.countVisibleRows = function () {
3858
- return instance.view.wt.drawn ? instance.view.wt.wtTable.getVisibleRowsCount() : -1;
3958
+ return instance.view._wt.drawn ? instance.view._wt.wtTable.getVisibleRowsCount() : -1;
3859
3959
  };
3860
3960
  /**
3861
- * Returns the number of rendered columns (including columns partially or fully rendered outside viewport).
3961
+ * Returns the number of rendered rows including columns that are partially or fully rendered
3962
+ * outside the table viewport.
3862
3963
  *
3863
3964
  * @memberof Core#
3864
3965
  * @function countRenderedCols
@@ -3867,10 +3968,11 @@ function Core(rootElement, userSettings) {
3867
3968
 
3868
3969
 
3869
3970
  this.countRenderedCols = function () {
3870
- return instance.view.wt.drawn ? instance.view.wt.wtTable.getRenderedColumnsCount() : -1;
3971
+ return instance.view._wt.drawn ? instance.view._wt.wtTable.getRenderedColumnsCount() : -1;
3871
3972
  };
3872
3973
  /**
3873
- * Returns the number of visible columns. Returns -1 if table is not visible.
3974
+ * Returns the number of rendered columns that are only visible in the table viewport.
3975
+ * The columns that are partially visible are not counted.
3874
3976
  *
3875
3977
  * @memberof Core#
3876
3978
  * @function countVisibleCols
@@ -3879,7 +3981,7 @@ function Core(rootElement, userSettings) {
3879
3981
 
3880
3982
 
3881
3983
  this.countVisibleCols = function () {
3882
- return instance.view.wt.drawn ? instance.view.wt.wtTable.getVisibleColumnsCount() : -1;
3984
+ return instance.view._wt.drawn ? instance.view._wt.wtTable.getVisibleColumnsCount() : -1;
3883
3985
  };
3884
3986
  /**
3885
3987
  * Returns the number of empty rows. If the optional ending parameter is `true`, returns the
@@ -4189,7 +4291,7 @@ function Core(rootElement, userSettings) {
4189
4291
  var isColumnInteger = Number.isInteger(renderableColumn);
4190
4292
 
4191
4293
  if (isRowInteger && isColumnInteger) {
4192
- return instance.view.scrollViewport(new _src.CellCoords(renderableRow, renderableColumn), snapToTop, snapToRight, snapToBottom, snapToLeft);
4294
+ return instance.view.scrollViewport(instance._createCellCoords(renderableRow, renderableColumn), snapToTop, snapToRight, snapToBottom, snapToLeft);
4193
4295
  }
4194
4296
 
4195
4297
  if (isRowInteger && isColumnInteger === false) {
@@ -4226,8 +4328,8 @@ function Core(rootElement, userSettings) {
4226
4328
  }
4227
4329
 
4228
4330
  dataSource = null;
4331
+ this.getShortcutManager().destroy();
4229
4332
  metaManager.clearCache();
4230
- (0, _keyStateObserver.stopObserving)();
4231
4333
 
4232
4334
  if ((0, _rootInstance.isRootInstance)(instance)) {
4233
4335
  var licenseInfo = this.rootDocument.querySelector('#hot-display-license-info');
@@ -4625,6 +4727,337 @@ function Core(rootElement, userSettings) {
4625
4727
  return instance.isLtr() ? 1 : -1;
4626
4728
  };
4627
4729
 
4730
+ var shortcutManager = (0, _shortcuts.createShortcutManager)({
4731
+ beforeKeyDown: function beforeKeyDown(event) {
4732
+ if (_this.isListening() === false) {
4733
+ // Performing action (executing a callback) and triggering hook only for listening Handsontable.
4734
+ return false;
4735
+ }
4736
+
4737
+ return _this.runHooks('beforeKeyDown', event);
4738
+ },
4739
+ afterKeyDown: function afterKeyDown(event) {
4740
+ if (_this.isDestroyed) {
4741
+ // Handsontable could be destroyed after performing action (executing a callback).
4742
+ return;
4743
+ }
4744
+
4745
+ instance.runHooks('afterDocumentKeyDown', event);
4746
+ },
4747
+ ownerWindow: this.rootWindow
4748
+ });
4749
+ /**
4750
+ * Returns instance of a manager responsible for handling shortcuts stored in some contexts. It run actions after
4751
+ * pressing key combination in active Handsontable instance.
4752
+ *
4753
+ * @memberof Core#
4754
+ * @since 12.0.0
4755
+ * @function getShortcutManager
4756
+ * @returns {ShortcutManager} Instance of {@link ShortcutManager}
4757
+ */
4758
+
4759
+ this.getShortcutManager = function () {
4760
+ return shortcutManager;
4761
+ };
4762
+
4763
+ var gridContext = shortcutManager.addContext('grid');
4764
+ var gridConfig = {
4765
+ runOnlyIf: function runOnlyIf() {
4766
+ return (0, _mixed.isDefined)(instance.getSelected()) && instance.countRenderedRows() > 0 && instance.countRenderedCols() > 0;
4767
+ },
4768
+ group: SHORTCUTS_GROUP
4769
+ };
4770
+ shortcutManager.setActiveContextName('grid');
4771
+ gridContext.addShortcuts([{
4772
+ keys: [['Control/Meta', 'A']],
4773
+ callback: function callback() {
4774
+ instance.selectAll();
4775
+ }
4776
+ }, {
4777
+ keys: [['Control/Meta', 'Enter']],
4778
+ callback: function callback() {
4779
+ var selectedRange = instance.getSelectedRange();
4780
+ var _selectedRange$highli = selectedRange[selectedRange.length - 1].highlight,
4781
+ highlightRow = _selectedRange$highli.row,
4782
+ highlightColumn = _selectedRange$highli.col;
4783
+ var valueToPopulate = instance.getDataAtCell(highlightRow, highlightColumn);
4784
+ var cellValues = new Map();
4785
+
4786
+ for (var i = 0; i < selectedRange.length; i++) {
4787
+ selectedRange[i].forAll(function (row, column) {
4788
+ if (row >= 0 && column >= 0 && (row !== highlightRow || column !== highlightColumn)) {
4789
+ var _instance$getCellMeta = instance.getCellMeta(row, column),
4790
+ readOnly = _instance$getCellMeta.readOnly;
4791
+
4792
+ if (!readOnly) {
4793
+ cellValues.set("".concat(row, "x").concat(column), [row, column, valueToPopulate]);
4794
+ }
4795
+ }
4796
+ });
4797
+ }
4798
+
4799
+ instance.setDataAtCell(Array.from(cellValues.values()));
4800
+ },
4801
+ runOnlyIf: function runOnlyIf() {
4802
+ return instance.getSelectedRangeLast().getCellsCount() > 1;
4803
+ }
4804
+ }, {
4805
+ keys: [['ArrowUp']],
4806
+ callback: function callback() {
4807
+ selection.transformStart(-1, 0);
4808
+ }
4809
+ }, {
4810
+ keys: [['ArrowUp', 'Control/Meta']],
4811
+ captureCtrl: true,
4812
+ callback: function callback() {
4813
+ selection.setRangeStart(instance._createCellCoords(instance.rowIndexMapper.getFirstNotHiddenIndex(0, 1), instance.getSelectedRangeLast().highlight.col));
4814
+ }
4815
+ }, {
4816
+ keys: [['ArrowUp', 'Shift']],
4817
+ callback: function callback() {
4818
+ selection.transformEnd(-1, 0);
4819
+ }
4820
+ }, {
4821
+ keys: [['ArrowUp', 'Shift', 'Control/Meta']],
4822
+ captureCtrl: true,
4823
+ callback: function callback() {
4824
+ var _instance$getSelected = instance.getSelectedRangeLast(),
4825
+ from = _instance$getSelected.from,
4826
+ to = _instance$getSelected.to;
4827
+
4828
+ var row = instance.rowIndexMapper.getFirstNotHiddenIndex(0, 1);
4829
+ selection.setRangeStart(from.clone());
4830
+ selection.setRangeEnd(instance._createCellCoords(row, to.col));
4831
+ },
4832
+ runOnlyIf: function runOnlyIf() {
4833
+ return !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByColumnHeader());
4834
+ }
4835
+ }, {
4836
+ keys: [['ArrowDown']],
4837
+ callback: function callback() {
4838
+ selection.transformStart(1, 0);
4839
+ }
4840
+ }, {
4841
+ keys: [['ArrowDown', 'Control/Meta']],
4842
+ captureCtrl: true,
4843
+ callback: function callback() {
4844
+ selection.setRangeStart(instance._createCellCoords(instance.rowIndexMapper.getFirstNotHiddenIndex(instance.countRows() - 1, -1), instance.getSelectedRangeLast().highlight.col));
4845
+ }
4846
+ }, {
4847
+ keys: [['ArrowDown', 'Shift']],
4848
+ callback: function callback() {
4849
+ selection.transformEnd(1, 0);
4850
+ }
4851
+ }, {
4852
+ keys: [['ArrowDown', 'Shift', 'Control/Meta']],
4853
+ captureCtrl: true,
4854
+ callback: function callback() {
4855
+ var _instance$getSelected2 = instance.getSelectedRangeLast(),
4856
+ from = _instance$getSelected2.from,
4857
+ to = _instance$getSelected2.to;
4858
+
4859
+ var row = instance.rowIndexMapper.getFirstNotHiddenIndex(instance.countRows() - 1, -1);
4860
+ selection.setRangeStart(from.clone());
4861
+ selection.setRangeEnd(instance._createCellCoords(row, to.col));
4862
+ },
4863
+ runOnlyIf: function runOnlyIf() {
4864
+ return !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByColumnHeader());
4865
+ }
4866
+ }, {
4867
+ keys: [['ArrowLeft']],
4868
+ callback: function callback() {
4869
+ selection.transformStart(0, -1 * instance.getDirectionFactor());
4870
+ }
4871
+ }, {
4872
+ keys: [['ArrowLeft', 'Control/Meta']],
4873
+ captureCtrl: true,
4874
+ callback: function callback() {
4875
+ var _instance$columnIndex;
4876
+
4877
+ var row = instance.getSelectedRangeLast().highlight.row;
4878
+
4879
+ var column = (_instance$columnIndex = instance.columnIndexMapper).getFirstNotHiddenIndex.apply(_instance$columnIndex, _toConsumableArray(instance.isRtl() ? [instance.countCols() - 1, -1] : [0, 1]));
4880
+
4881
+ selection.setRangeStart(instance._createCellCoords(row, column));
4882
+ }
4883
+ }, {
4884
+ keys: [['ArrowLeft', 'Shift']],
4885
+ callback: function callback() {
4886
+ selection.transformEnd(0, -1 * instance.getDirectionFactor());
4887
+ }
4888
+ }, {
4889
+ keys: [['ArrowLeft', 'Shift', 'Control/Meta']],
4890
+ captureCtrl: true,
4891
+ callback: function callback() {
4892
+ var _instance$columnIndex2;
4893
+
4894
+ var _instance$getSelected3 = instance.getSelectedRangeLast(),
4895
+ from = _instance$getSelected3.from,
4896
+ to = _instance$getSelected3.to;
4897
+
4898
+ var column = (_instance$columnIndex2 = instance.columnIndexMapper).getFirstNotHiddenIndex.apply(_instance$columnIndex2, _toConsumableArray(instance.isRtl() ? [instance.countCols() - 1, -1] : [0, 1]));
4899
+
4900
+ selection.setRangeStart(from.clone());
4901
+ selection.setRangeEnd(instance._createCellCoords(to.row, column));
4902
+ },
4903
+ runOnlyIf: function runOnlyIf() {
4904
+ return !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByRowHeader());
4905
+ }
4906
+ }, {
4907
+ keys: [['ArrowRight']],
4908
+ callback: function callback() {
4909
+ selection.transformStart(0, instance.getDirectionFactor());
4910
+ }
4911
+ }, {
4912
+ keys: [['ArrowRight', 'Control/Meta']],
4913
+ captureCtrl: true,
4914
+ callback: function callback() {
4915
+ var _instance$columnIndex3;
4916
+
4917
+ var row = instance.getSelectedRangeLast().highlight.row;
4918
+
4919
+ var column = (_instance$columnIndex3 = instance.columnIndexMapper).getFirstNotHiddenIndex.apply(_instance$columnIndex3, _toConsumableArray(instance.isRtl() ? [0, 1] : [instance.countCols() - 1, -1]));
4920
+
4921
+ selection.setRangeStart(instance._createCellCoords(row, column));
4922
+ }
4923
+ }, {
4924
+ keys: [['ArrowRight', 'Shift']],
4925
+ callback: function callback() {
4926
+ selection.transformEnd(0, instance.getDirectionFactor());
4927
+ }
4928
+ }, {
4929
+ keys: [['ArrowRight', 'Shift', 'Control/Meta']],
4930
+ captureCtrl: true,
4931
+ callback: function callback() {
4932
+ var _instance$columnIndex4;
4933
+
4934
+ var _instance$getSelected4 = instance.getSelectedRangeLast(),
4935
+ from = _instance$getSelected4.from,
4936
+ to = _instance$getSelected4.to;
4937
+
4938
+ var column = (_instance$columnIndex4 = instance.columnIndexMapper).getFirstNotHiddenIndex.apply(_instance$columnIndex4, _toConsumableArray(instance.isRtl() ? [0, 1] : [instance.countCols() - 1, -1]));
4939
+
4940
+ selection.setRangeStart(from.clone());
4941
+ selection.setRangeEnd(instance._createCellCoords(to.row, column));
4942
+ },
4943
+ runOnlyIf: function runOnlyIf() {
4944
+ return !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByRowHeader());
4945
+ }
4946
+ }, {
4947
+ keys: [['Home']],
4948
+ captureCtrl: true,
4949
+ callback: function callback() {
4950
+ var fixedColumns = parseInt(instance.getSettings().fixedColumnsStart, 10);
4951
+ var row = instance.getSelectedRangeLast().highlight.row;
4952
+ var column = instance.columnIndexMapper.getFirstNotHiddenIndex(fixedColumns, 1);
4953
+ selection.setRangeStart(instance._createCellCoords(row, column));
4954
+ },
4955
+ runOnlyIf: function runOnlyIf() {
4956
+ return instance.view.isMainTableNotFullyCoveredByOverlays();
4957
+ }
4958
+ }, {
4959
+ keys: [['Home', 'Shift']],
4960
+ callback: function callback() {
4961
+ selection.setRangeEnd(instance._createCellCoords(selection.selectedRange.current().from.row, instance.columnIndexMapper.getFirstNotHiddenIndex(0, 1)));
4962
+ }
4963
+ }, {
4964
+ keys: [['Home', 'Control/Meta']],
4965
+ captureCtrl: true,
4966
+ callback: function callback() {
4967
+ var fixedRows = parseInt(instance.getSettings().fixedRowsTop, 10);
4968
+ var fixedColumns = parseInt(instance.getSettings().fixedColumnsStart, 10);
4969
+ var row = instance.rowIndexMapper.getFirstNotHiddenIndex(fixedRows, 1);
4970
+ var column = instance.columnIndexMapper.getFirstNotHiddenIndex(fixedColumns, 1);
4971
+ selection.setRangeStart(instance._createCellCoords(row, column));
4972
+ },
4973
+ runOnlyIf: function runOnlyIf() {
4974
+ return instance.view.isMainTableNotFullyCoveredByOverlays();
4975
+ }
4976
+ }, {
4977
+ keys: [['End']],
4978
+ captureCtrl: true,
4979
+ callback: function callback() {
4980
+ selection.setRangeStart(instance._createCellCoords(instance.getSelectedRangeLast().highlight.row, instance.columnIndexMapper.getFirstNotHiddenIndex(instance.countCols() - 1, -1)));
4981
+ },
4982
+ runOnlyIf: function runOnlyIf() {
4983
+ return instance.view.isMainTableNotFullyCoveredByOverlays();
4984
+ }
4985
+ }, {
4986
+ keys: [['End', 'Shift']],
4987
+ callback: function callback() {
4988
+ selection.setRangeEnd(instance._createCellCoords(selection.selectedRange.current().from.row, instance.columnIndexMapper.getFirstNotHiddenIndex(instance.countCols() - 1, -1)));
4989
+ }
4990
+ }, {
4991
+ keys: [['End', 'Control/Meta']],
4992
+ captureCtrl: true,
4993
+ callback: function callback() {
4994
+ var fixedRows = parseInt(instance.getSettings().fixedRowsBottom, 10);
4995
+ var row = instance.rowIndexMapper.getFirstNotHiddenIndex(instance.countRows() - fixedRows - 1, -1);
4996
+ var column = instance.columnIndexMapper.getFirstNotHiddenIndex(instance.countCols() - 1, -1);
4997
+ selection.setRangeStart(instance._createCellCoords(row, column));
4998
+ },
4999
+ runOnlyIf: function runOnlyIf() {
5000
+ return instance.view.isMainTableNotFullyCoveredByOverlays();
5001
+ }
5002
+ }, {
5003
+ keys: [['PageUp']],
5004
+ callback: function callback() {
5005
+ selection.transformStart(-instance.countVisibleRows(), 0);
5006
+ }
5007
+ }, {
5008
+ keys: [['PageUp', 'Shift']],
5009
+ callback: function callback() {
5010
+ var _instance$getSelected5 = instance.getSelectedRangeLast(),
5011
+ to = _instance$getSelected5.to;
5012
+
5013
+ var nextRowIndexToSelect = Math.max(to.row - instance.countVisibleRows(), 0);
5014
+ var row = instance.rowIndexMapper.getFirstNotHiddenIndex(nextRowIndexToSelect, 1);
5015
+
5016
+ if (row !== null) {
5017
+ var coords = instance._createCellCoords(row, to.col);
5018
+
5019
+ var scrollPadding = to.row - instance.view.getFirstFullyVisibleRow();
5020
+ var nextVerticalScroll = Math.max(coords.row - scrollPadding, 0);
5021
+ selection.setRangeEnd(coords);
5022
+ instance.scrollViewportTo(nextVerticalScroll);
5023
+ }
5024
+ }
5025
+ }, {
5026
+ keys: [['PageDown']],
5027
+ callback: function callback() {
5028
+ selection.transformStart(instance.countVisibleRows(), 0);
5029
+ }
5030
+ }, {
5031
+ keys: [['PageDown', 'Shift']],
5032
+ callback: function callback() {
5033
+ var _instance$getSelected6 = instance.getSelectedRangeLast(),
5034
+ to = _instance$getSelected6.to;
5035
+
5036
+ var nextRowIndexToSelect = Math.min(to.row + instance.countVisibleRows(), instance.countRows() - 1);
5037
+ var row = instance.rowIndexMapper.getFirstNotHiddenIndex(nextRowIndexToSelect, -1);
5038
+
5039
+ if (row !== null) {
5040
+ var coords = instance._createCellCoords(row, to.col);
5041
+
5042
+ var scrollPadding = to.row - instance.view.getFirstFullyVisibleRow();
5043
+ var nextVerticalScroll = Math.min(coords.row - scrollPadding, instance.countRows() - 1);
5044
+ selection.setRangeEnd(coords);
5045
+ instance.scrollViewportTo(nextVerticalScroll);
5046
+ }
5047
+ }
5048
+ }, {
5049
+ keys: [['Tab']],
5050
+ callback: function callback(event) {
5051
+ var tabMoves = typeof tableMeta.tabMoves === 'function' ? tableMeta.tabMoves(event) : tableMeta.tabMoves;
5052
+ selection.transformStart(tabMoves.row, tabMoves.col, true);
5053
+ }
5054
+ }, {
5055
+ keys: [['Shift', 'Tab']],
5056
+ callback: function callback(event) {
5057
+ var tabMoves = typeof tableMeta.tabMoves === 'function' ? tableMeta.tabMoves(event) : tableMeta.tabMoves;
5058
+ selection.transformStart(-tabMoves.row, -tabMoves.col);
5059
+ }
5060
+ }], gridConfig);
4628
5061
  (0, _registry.getPluginsNames)().forEach(function (pluginName) {
4629
5062
  var PluginClass = (0, _registry.getPlugin)(pluginName);
4630
5063
  pluginsRegistry.addItem(pluginName, new PluginClass(_this));