handsontable 11.0.0 → 12.0.0

Sign up to get free protection for your applications and to get access to all the features.
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));