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.mjs CHANGED
@@ -1,4 +1,4 @@
1
- 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); }
1
+ 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); }
2
2
 
3
3
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4
4
 
@@ -8,6 +8,19 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
8
8
 
9
9
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
10
10
 
11
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
12
+
13
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
14
+
15
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
16
+
17
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
18
+
19
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
20
+
21
+ 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; }
22
+
23
+ import "core-js/modules/es.array.includes.js";
11
24
  import "core-js/modules/es.array.sort.js";
12
25
  import "core-js/modules/es.array.splice.js";
13
26
  import "core-js/modules/es.number.is-integer.js";
@@ -26,25 +39,13 @@ import "core-js/modules/es.object.to-string.js";
26
39
  import "core-js/modules/web.dom-collections.for-each.js";
27
40
  import "core-js/modules/web.timers.js";
28
41
  import "core-js/modules/web.immediate.js";
42
+ import "core-js/modules/es.array.iterator.js";
43
+ import "core-js/modules/es.map.js";
44
+ import "core-js/modules/web.dom-collections.iterator.js";
29
45
  import "core-js/modules/es.symbol.js";
30
46
  import "core-js/modules/es.symbol.description.js";
31
47
  import "core-js/modules/es.symbol.iterator.js";
32
- import "core-js/modules/es.array.iterator.js";
33
- import "core-js/modules/web.dom-collections.iterator.js";
34
48
  import "core-js/modules/es.function.name.js";
35
-
36
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
37
-
38
- function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
39
-
40
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
41
-
42
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
43
-
44
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
45
-
46
- 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; }
47
-
48
49
  import { addClass, empty, removeClass } from "./helpers/dom/element.mjs";
49
50
  import { isFunction } from "./helpers/function.mjs";
50
51
  import { isDefined, isUndefined, isRegExp, _injectProductInfo, isEmpty } from "./helpers/mixed.mjs";
@@ -64,14 +65,15 @@ import DataSource from "./dataSource.mjs";
64
65
  import { cellMethodLookupFactory, spreadsheetColumnLabel } from "./helpers/data.mjs";
65
66
  import { IndexMapper } from "./translations/index.mjs";
66
67
  import { registerAsRootInstance, hasValidParameter, isRootInstance } from "./utils/rootInstance.mjs";
67
- import { CellCoords, ViewportColumnsCalculator } from "./3rdparty/walkontable/src/index.mjs";
68
+ import { ViewportColumnsCalculator } from "./3rdparty/walkontable/src/index.mjs";
68
69
  import Hooks from "./pluginHooks.mjs";
69
70
  import { hasLanguageDictionary, getValidLanguageCode, getTranslatedPhrase } from "./i18n/registry.mjs";
70
71
  import { warnUserAboutLanguageRegistration, normalizeLanguageCode } from "./i18n/utils.mjs";
71
- import { startObserving as keyStateStartObserving, stopObserving as keyStateStopObserving } from "./utils/keyStateObserver.mjs";
72
72
  import { Selection } from "./selection/index.mjs";
73
- import { MetaManager, DynamicCellMetaMod, DataMap } from "./dataMap/index.mjs";
73
+ import { MetaManager, DynamicCellMetaMod, ExtendMetaPropertiesMod, replaceData } from "./dataMap/index.mjs";
74
74
  import { createUniqueMap } from "./utils/dataStructures/uniqueMap.mjs";
75
+ import { createShortcutManager } from "./shortcuts/index.mjs";
76
+ var SHORTCUTS_GROUP = 'gridDefault';
75
77
  var activeGuid = null;
76
78
  /* eslint-disable jsdoc/require-description-complete-sentence */
77
79
 
@@ -100,7 +102,8 @@ var activeGuid = null;
100
102
  */
101
103
 
102
104
  export default function Core(rootElement, userSettings) {
103
- var _this = this;
105
+ var _userSettings$layoutD,
106
+ _this = this;
104
107
 
105
108
  var rootInstanceSymbol = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
106
109
  var preventScrollingToCell = false;
@@ -111,11 +114,6 @@ export default function Core(rootElement, userSettings) {
111
114
  var grid;
112
115
  var editorManager;
113
116
  var firstRun = true;
114
- userSettings.language = getValidLanguageCode(userSettings.language);
115
- var metaManager = new MetaManager(instance, userSettings, [DynamicCellMetaMod]);
116
- var tableMeta = metaManager.getTableMeta();
117
- var globalMeta = metaManager.getGlobalMeta();
118
- var pluginsRegistry = createUniqueMap();
119
117
 
120
118
  if (hasValidParameter(rootInstanceSymbol)) {
121
119
  registerAsRootInstance(this);
@@ -130,8 +128,6 @@ export default function Core(rootElement, userSettings) {
130
128
 
131
129
 
132
130
  this.rootElement = rootElement;
133
- /* eslint-enable jsdoc/require-description-complete-sentence */
134
-
135
131
  /**
136
132
  * The nearest document over container.
137
133
  *
@@ -180,7 +176,53 @@ export default function Core(rootElement, userSettings) {
180
176
  */
181
177
 
182
178
  this.executionSuspendedCounter = 0;
183
- keyStateStartObserving(this.rootDocument);
179
+ var layoutDirection = (_userSettings$layoutD = userSettings === null || userSettings === void 0 ? void 0 : userSettings.layoutDirection) !== null && _userSettings$layoutD !== void 0 ? _userSettings$layoutD : 'inherit';
180
+ var rootElementDirection = ['rtl', 'ltr'].includes(layoutDirection) ? layoutDirection : this.rootWindow.getComputedStyle(this.rootElement).direction;
181
+ this.rootElement.setAttribute('dir', rootElementDirection);
182
+ /**
183
+ * Checks if the grid is rendered using the right-to-left layout direction.
184
+ *
185
+ * @since 12.0.0
186
+ * @memberof Core#
187
+ * @function isRtl
188
+ * @returns {boolean} True if RTL.
189
+ */
190
+
191
+ this.isRtl = function () {
192
+ return rootElementDirection === 'rtl';
193
+ };
194
+ /**
195
+ * Checks if the grid is rendered using the left-to-right layout direction.
196
+ *
197
+ * @since 12.0.0
198
+ * @memberof Core#
199
+ * @function isLtr
200
+ * @returns {boolean} True if LTR.
201
+ */
202
+
203
+
204
+ this.isLtr = function () {
205
+ return !instance.isRtl();
206
+ };
207
+ /**
208
+ * Returns 1 for LTR; -1 for RTL. Useful for calculations.
209
+ *
210
+ * @since 12.0.0
211
+ * @memberof Core#
212
+ * @function getDirectionFactor
213
+ * @returns {number} Returns 1 for LTR; -1 for RTL.
214
+ */
215
+
216
+
217
+ this.getDirectionFactor = function () {
218
+ return instance.isLtr() ? 1 : -1;
219
+ };
220
+
221
+ userSettings.language = getValidLanguageCode(userSettings.language);
222
+ var metaManager = new MetaManager(instance, userSettings, [DynamicCellMetaMod, ExtendMetaPropertiesMod]);
223
+ var tableMeta = metaManager.getTableMeta();
224
+ var globalMeta = metaManager.getGlobalMeta();
225
+ var pluginsRegistry = createUniqueMap();
184
226
  this.container = this.rootDocument.createElement('div');
185
227
  this.renderCall = false;
186
228
  rootElement.insertBefore(this.container, rootElement.firstChild);
@@ -218,14 +260,14 @@ export default function Core(rootElement, userSettings) {
218
260
  var visualToRenderableCoords = function visualToRenderableCoords(coords) {
219
261
  var visualRow = coords.row,
220
262
  visualColumn = coords.col;
221
- return new CellCoords( // We just store indexes for rows and columns without headers.
263
+ return instance._createCellCoords( // We just store indexes for rows and columns without headers.
222
264
  visualRow >= 0 ? instance.rowIndexMapper.getRenderableFromVisualIndex(visualRow) : visualRow, visualColumn >= 0 ? instance.columnIndexMapper.getRenderableFromVisualIndex(visualColumn) : visualColumn);
223
265
  };
224
266
 
225
267
  var renderableToVisualCoords = function renderableToVisualCoords(coords) {
226
268
  var renderableRow = coords.row,
227
269
  renderableColumn = coords.col;
228
- return new CellCoords( // We just store indexes for rows and columns without headers.
270
+ return instance._createCellCoords( // We just store indexes for rows and columns without headers.
229
271
  renderableRow >= 0 ? instance.rowIndexMapper.getVisualFromRenderableIndex(renderableRow) : renderableRow, renderableColumn >= 0 ? instance.columnIndexMapper.getVisualFromRenderableIndex(renderableColumn) : renderableColumn // eslint-disable-line max-len
230
272
  );
231
273
  };
@@ -249,6 +291,15 @@ export default function Core(rootElement, userSettings) {
249
291
  countRowsTranslated: function countRowsTranslated() {
250
292
  return _this.view.countRenderableRows();
251
293
  },
294
+ getShortcutManager: function getShortcutManager() {
295
+ return instance.getShortcutManager();
296
+ },
297
+ createCellCoords: function createCellCoords(row, column) {
298
+ return instance._createCellCoords(row, column);
299
+ },
300
+ createCellRange: function createCellRange(highlight, from, to) {
301
+ return instance._createCellRange(highlight, from, to);
302
+ },
252
303
  visualToRenderableCoords: visualToRenderableCoords,
253
304
  renderableToVisualCoords: renderableToVisualCoords,
254
305
  isDisabledCellSelection: function isDisabledCellSelection(visualRow, visualColumn) {
@@ -277,11 +328,11 @@ export default function Core(rootElement, userSettings) {
277
328
  _this.runHooks('beforeSetRangeEnd', cellCoords);
278
329
 
279
330
  if (cellCoords.row < 0) {
280
- cellCoords.row = _this.view.wt.wtTable.getFirstVisibleRow();
331
+ cellCoords.row = _this.view._wt.wtTable.getFirstVisibleRow();
281
332
  }
282
333
 
283
334
  if (cellCoords.col < 0) {
284
- cellCoords.col = _this.view.wt.wtTable.getFirstVisibleColumn();
335
+ cellCoords.col = _this.view._wt.wtTable.getFirstVisibleColumn();
285
336
  }
286
337
  });
287
338
  this.selection.addLocalHook('afterSetRangeEnd', function (cellCoords) {
@@ -495,8 +546,8 @@ export default function Core(rootElement, userSettings) {
495
546
 
496
547
  selection.getSelectedRange().pop(); // I can't use transforms as they don't work in negative indexes.
497
548
 
498
- selection.setRangeStartOnly(new CellCoords(currentFromRow + delta, currentFromColumn), true);
499
- selection.setRangeEnd(new CellCoords(currentToRow + delta, currentToColumn)); // will call render() internally
549
+ selection.setRangeStartOnly(instance._createCellCoords(currentFromRow + delta, currentFromColumn), true);
550
+ selection.setRangeEnd(instance._createCellCoords(currentToRow + delta, currentToColumn)); // will call render() internally
500
551
  } else {
501
552
  instance._refreshBorders(); // it will call render and prepare methods
502
553
 
@@ -540,8 +591,8 @@ export default function Core(rootElement, userSettings) {
540
591
 
541
592
  selection.getSelectedRange().pop(); // I can't use transforms as they don't work in negative indexes.
542
593
 
543
- selection.setRangeStartOnly(new CellCoords(_currentFromRow, _currentFromColumn + delta), true);
544
- selection.setRangeEnd(new CellCoords(_currentToRow, _currentToColumn + delta)); // will call render() internally
594
+ selection.setRangeStartOnly(instance._createCellCoords(_currentFromRow, _currentFromColumn + delta), true);
595
+ selection.setRangeEnd(instance._createCellCoords(_currentToRow, _currentToColumn + delta)); // will call render() internally
545
596
  } else {
546
597
  instance._refreshBorders(); // it will call render and prepare methods
547
598
 
@@ -633,10 +684,10 @@ export default function Core(rootElement, userSettings) {
633
684
  }
634
685
 
635
686
  metaManager.removeColumn(physicalColumnIndex, groupAmount);
636
- var fixedColumnsLeft = tableMeta.fixedColumnsLeft;
687
+ var fixedColumnsStart = tableMeta.fixedColumnsStart;
637
688
 
638
- if (fixedColumnsLeft >= calcIndex + 1) {
639
- tableMeta.fixedColumnsLeft -= Math.min(groupAmount, fixedColumnsLeft - calcIndex);
689
+ if (fixedColumnsStart >= calcIndex + 1) {
690
+ tableMeta.fixedColumnsStart -= Math.min(groupAmount, fixedColumnsStart - calcIndex);
640
691
  }
641
692
 
642
693
  if (Array.isArray(tableMeta.colHeaders)) {
@@ -1344,6 +1395,38 @@ export default function Core(rootElement, userSettings) {
1344
1395
  activeEditor.refreshValue();
1345
1396
  }
1346
1397
  }
1398
+ /**
1399
+ * Creates and returns the CellCoords object.
1400
+ *
1401
+ * @private
1402
+ * @memberof Core#
1403
+ * @function _createCellCoords
1404
+ * @param {number} row The row index.
1405
+ * @param {number} column The column index.
1406
+ * @returns {CellCoords}
1407
+ */
1408
+
1409
+
1410
+ this._createCellCoords = function (row, column) {
1411
+ return instance.view._wt.createCellCoords(row, column);
1412
+ };
1413
+ /**
1414
+ * Creates and returns the CellRange object.
1415
+ *
1416
+ * @private
1417
+ * @memberof Core#
1418
+ * @function _createCellRange
1419
+ * @param {CellCoords} highlight Defines the border around a cell where selection was started and to edit the cell
1420
+ * when you press Enter. The highlight cannot point to headers (negative values).
1421
+ * @param {CellCoords} from Initial coordinates.
1422
+ * @param {CellCoords} to Final coordinates.
1423
+ * @returns {CellRange}
1424
+ */
1425
+
1426
+
1427
+ this._createCellRange = function (highlight, from, to) {
1428
+ return instance.view._wt.createCellRange(highlight, from, to);
1429
+ };
1347
1430
  /**
1348
1431
  * Validate a single cell.
1349
1432
  *
@@ -1382,7 +1465,8 @@ export default function Core(rootElement, userSettings) {
1382
1465
  if (td && td.nodeName !== 'TH') {
1383
1466
  var renderableRow = instance.rowIndexMapper.getRenderableFromVisualIndex(row);
1384
1467
  var renderableColumn = instance.columnIndexMapper.getRenderableFromVisualIndex(col);
1385
- instance.view.wt.wtSettings.settings.cellRenderer(renderableRow, renderableColumn, td);
1468
+
1469
+ instance.view._wt.getSetting('cellRenderer', renderableRow, renderableColumn, td);
1386
1470
  }
1387
1471
 
1388
1472
  callback(valid);
@@ -1607,8 +1691,8 @@ export default function Core(rootElement, userSettings) {
1607
1691
  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
1608
1692
  }
1609
1693
 
1610
- var c = typeof endRow === 'number' ? new CellCoords(endRow, endCol) : null;
1611
- return grid.populateFromArray(new CellCoords(row, column), input, c, source, method, direction, deltas);
1694
+ var c = typeof endRow === 'number' ? instance._createCellCoords(endRow, endCol) : null;
1695
+ return grid.populateFromArray(instance._createCellCoords(row, column), input, c, source, method, direction, deltas);
1612
1696
  };
1613
1697
  /**
1614
1698
  * Adds/removes data from the column. This method works the same as Array.splice for arrays.
@@ -1757,10 +1841,10 @@ export default function Core(rootElement, userSettings) {
1757
1841
 
1758
1842
  var changes = [];
1759
1843
  arrayEach(selection.getSelectedRange(), function (cellRange) {
1760
- var topLeft = cellRange.getTopLeftCorner();
1761
- var bottomRight = cellRange.getBottomRightCorner();
1762
- rangeEach(topLeft.row, bottomRight.row, function (row) {
1763
- rangeEach(topLeft.col, bottomRight.col, function (column) {
1844
+ var topStart = cellRange.getTopStartCorner();
1845
+ var bottomEnd = cellRange.getBottomEndCorner();
1846
+ rangeEach(topStart.row, bottomEnd.row, function (row) {
1847
+ rangeEach(topStart.col, bottomEnd.col, function (column) {
1764
1848
  if (!_this2.getCellMeta(row, column).readOnly) {
1765
1849
  changes.push([row, column, null]);
1766
1850
  }
@@ -2118,7 +2202,7 @@ export default function Core(rootElement, userSettings) {
2118
2202
  return;
2119
2203
  }
2120
2204
 
2121
- if (isSizeChanged || instance.view.wt.wtOverlays.scrollableElement === instance.rootWindow) {
2205
+ if (isSizeChanged || instance.view._wt.wtOverlays.scrollableElement === instance.rootWindow) {
2122
2206
  instance.view.setLastSize(width, height);
2123
2207
  instance.render();
2124
2208
  }
@@ -2132,14 +2216,67 @@ export default function Core(rootElement, userSettings) {
2132
2216
  }, isSizeChanged);
2133
2217
  };
2134
2218
  /**
2135
- * Loads new data to Handsontable. Loading new data resets the cell meta.
2136
- * Since 8.0.0 loading new data also resets states corresponding to rows and columns
2137
- * (for example, row/column sequence, column width, row height, frozen columns etc.).
2219
+ * The `updateData()` method replaces Handsontable's [`data`](@/api/options.md#data) with a new dataset.
2220
+ *
2221
+ * The `updateData()` method:
2222
+ * - Keeps cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)
2223
+ * - Keeps rows' states (e.g. row order)
2224
+ * - Keeps columns' states (e.g. column order)
2225
+ *
2226
+ * To replace Handsontable's [`data`](@/api/options.md#data) and reset states, use the [`loadData()`](#loaddata) method.
2227
+ *
2228
+ * Read more:
2229
+ * - [Binding to data &#8594;](@/guides/getting-started/binding-to-data.md)
2230
+ * - [Saving data &#8594;](@/guides/getting-started/saving-data.md)
2231
+ *
2232
+ * @memberof Core#
2233
+ * @function updateData
2234
+ * @since 11.1.0
2235
+ * @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
2236
+ * @param {string} [source] The source of the `updateData()` call
2237
+ * @fires Hooks#beforeUpdateData
2238
+ * @fires Hooks#afterUpdateData
2239
+ * @fires Hooks#afterChange
2240
+ */
2241
+
2242
+
2243
+ this.updateData = function (data, source) {
2244
+ var _this3 = this;
2245
+
2246
+ replaceData(data, function (newDataMap) {
2247
+ datamap = newDataMap;
2248
+ }, function (newDataMap) {
2249
+ datamap = newDataMap;
2250
+ instance.columnIndexMapper.fitToLength(_this3.getInitialColumnCount());
2251
+ instance.rowIndexMapper.fitToLength(_this3.countSourceRows());
2252
+ grid.adjustRowsAndCols();
2253
+ }, {
2254
+ hotInstance: instance,
2255
+ dataMap: datamap,
2256
+ dataSource: dataSource,
2257
+ internalSource: 'updateData',
2258
+ source: source,
2259
+ firstRun: firstRun
2260
+ });
2261
+ };
2262
+ /**
2263
+ * The `loadData()` method replaces Handsontable's [`data`](@/api/options.md#data) with a new dataset.
2264
+ *
2265
+ * Additionally, the `loadData()` method:
2266
+ * - Resets cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)
2267
+ * - Resets rows' states (e.g. row order)
2268
+ * - Resets columns' states (e.g. column order)
2269
+ *
2270
+ * To replace Handsontable's [`data`](@/api/options.md#data) without resetting states, use the [`updateData()`](#updatedata) method.
2271
+ *
2272
+ * Read more:
2273
+ * - [Binding to data &#8594;](@/guides/getting-started/binding-to-data.md)
2274
+ * - [Saving data &#8594;](@/guides/getting-started/saving-data.md)
2138
2275
  *
2139
2276
  * @memberof Core#
2140
2277
  * @function loadData
2141
- * @param {Array} data Array of arrays or array of objects containing data.
2142
- * @param {string} [source] Source of the loadData call.
2278
+ * @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
2279
+ * @param {string} [source] The source of the `loadData()` call
2143
2280
  * @fires Hooks#beforeLoadData
2144
2281
  * @fires Hooks#afterLoadData
2145
2282
  * @fires Hooks#afterChange
@@ -2147,88 +2284,34 @@ export default function Core(rootElement, userSettings) {
2147
2284
 
2148
2285
 
2149
2286
  this.loadData = function (data, source) {
2150
- if (Array.isArray(tableMeta.dataSchema)) {
2151
- instance.dataType = 'array';
2152
- } else if (isFunction(tableMeta.dataSchema)) {
2153
- instance.dataType = 'function';
2154
- } else {
2155
- instance.dataType = 'object';
2156
- }
2157
-
2158
- if (datamap) {
2159
- datamap.destroy();
2160
- }
2161
-
2162
- data = instance.runHooks('beforeLoadData', data, firstRun, source);
2163
- datamap = new DataMap(instance, data, tableMeta);
2164
-
2165
- if (_typeof(data) === 'object' && data !== null) {
2166
- if (!(data.push && data.splice)) {
2167
- // check if data is array. Must use duck-type check so Backbone Collections also pass it
2168
- // when data is not an array, attempt to make a single-row array of it
2169
- // eslint-disable-next-line no-param-reassign
2170
- data = [data];
2171
- }
2172
- } else if (data === null) {
2173
- var dataSchema = datamap.getSchema(); // eslint-disable-next-line no-param-reassign
2174
-
2175
- data = [];
2176
- var row;
2177
- var r = 0;
2178
- var rlen = 0;
2179
-
2180
- for (r = 0, rlen = tableMeta.startRows; r < rlen; r++) {
2181
- if ((instance.dataType === 'object' || instance.dataType === 'function') && tableMeta.dataSchema) {
2182
- row = deepClone(dataSchema);
2183
- data.push(row);
2184
- } else if (instance.dataType === 'array') {
2185
- row = deepClone(dataSchema[0]);
2186
- data.push(row);
2187
- } else {
2188
- row = [];
2189
-
2190
- for (var c = 0, clen = tableMeta.startCols; c < clen; c++) {
2191
- row.push(null);
2192
- }
2287
+ replaceData(data, function (newDataMap) {
2288
+ datamap = newDataMap;
2289
+ }, function () {
2290
+ metaManager.clearCellsCache();
2291
+ instance.initIndexMappers();
2292
+ grid.adjustRowsAndCols();
2193
2293
 
2194
- data.push(row);
2195
- }
2294
+ if (firstRun) {
2295
+ firstRun = [null, 'loadData'];
2196
2296
  }
2197
- } else {
2198
- throw new Error("loadData only accepts array of objects or array of arrays (".concat(_typeof(data), " given)"));
2199
- }
2200
-
2201
- if (Array.isArray(data[0])) {
2202
- instance.dataType = 'array';
2203
- }
2204
-
2205
- tableMeta.data = data;
2206
- datamap.dataSource = data;
2207
- dataSource.data = data;
2208
- dataSource.dataType = instance.dataType;
2209
- dataSource.colToProp = datamap.colToProp.bind(datamap);
2210
- dataSource.propToCol = datamap.propToCol.bind(datamap);
2211
- dataSource.countCachedColumns = datamap.countCachedColumns.bind(datamap);
2212
- metaManager.clearCellsCache();
2213
- instance.initIndexMappers();
2214
- grid.adjustRowsAndCols();
2215
- instance.runHooks('afterLoadData', data, firstRun, source);
2216
-
2217
- if (firstRun) {
2218
- firstRun = [null, 'loadData'];
2219
- } else {
2220
- instance.runHooks('afterChange', null, 'loadData');
2221
- instance.render();
2222
- }
2297
+ }, {
2298
+ hotInstance: instance,
2299
+ dataMap: datamap,
2300
+ dataSource: dataSource,
2301
+ internalSource: 'loadData',
2302
+ source: source,
2303
+ firstRun: firstRun
2304
+ });
2223
2305
  };
2224
2306
  /**
2225
- * Init index mapper which manage indexes assigned to the data.
2307
+ * Gets the initial column count, calculated based on the `columns` setting.
2226
2308
  *
2227
2309
  * @private
2310
+ * @returns {number} The calculated number of columns.
2228
2311
  */
2229
2312
 
2230
2313
 
2231
- this.initIndexMappers = function () {
2314
+ this.getInitialColumnCount = function () {
2232
2315
  var columnsSettings = tableMeta.columns;
2233
2316
  var finalNrOfColumns = 0; // We will check number of columns when the `columns` property was defined as an array. Columns option may
2234
2317
  // narrow down or expand displayed dataset in that case.
@@ -2258,7 +2341,17 @@ export default function Core(rootElement, userSettings) {
2258
2341
  finalNrOfColumns = this.countSourceCols();
2259
2342
  }
2260
2343
 
2261
- this.columnIndexMapper.initToLength(finalNrOfColumns);
2344
+ return finalNrOfColumns;
2345
+ };
2346
+ /**
2347
+ * Init index mapper which manage indexes assigned to the data.
2348
+ *
2349
+ * @private
2350
+ */
2351
+
2352
+
2353
+ this.initIndexMappers = function () {
2354
+ this.columnIndexMapper.initToLength(this.getInitialColumnCount());
2262
2355
  this.rowIndexMapper.initToLength(this.countSourceRows());
2263
2356
  };
2264
2357
  /**
@@ -2292,7 +2385,7 @@ export default function Core(rootElement, userSettings) {
2292
2385
  return datamap.getAll();
2293
2386
  }
2294
2387
 
2295
- return datamap.getRange(new CellCoords(row, column), new CellCoords(row2, column2), datamap.DESTINATION_RENDERER);
2388
+ return datamap.getRange(instance._createCellCoords(row, column), instance._createCellCoords(row2, column2), datamap.DESTINATION_RENDERER);
2296
2389
  };
2297
2390
  /**
2298
2391
  * Returns a string value of the selected range. Each column is separated by tab, each row is separated by a new
@@ -2309,7 +2402,7 @@ export default function Core(rootElement, userSettings) {
2309
2402
 
2310
2403
 
2311
2404
  this.getCopyableText = function (startRow, startCol, endRow, endCol) {
2312
- return datamap.getCopyableText(new CellCoords(startRow, startCol), new CellCoords(endRow, endCol));
2405
+ return datamap.getCopyableText(instance._createCellCoords(startRow, startCol), instance._createCellCoords(endRow, endCol));
2313
2406
  };
2314
2407
  /**
2315
2408
  * Returns the data's copyable value at specified `row` and `column` index.
@@ -2339,7 +2432,7 @@ export default function Core(rootElement, userSettings) {
2339
2432
  return datamap.getSchema();
2340
2433
  };
2341
2434
  /**
2342
- * Use it if you need to change configuration after initialization. The `settings` argument is an object containing the new
2435
+ * Use it if you need to change configuration after initialization. The `settings` argument is an object containing the changed
2343
2436
  * settings, declared the same way as in the initial settings object.
2344
2437
  *
2345
2438
  * __Note__, that although the `updateSettings` method doesn't overwrite the previously declared settings, it might reset
@@ -2348,9 +2441,12 @@ export default function Core(rootElement, userSettings) {
2348
2441
  * Since 8.0.0 passing `columns` or `data` inside `settings` objects will result in resetting states corresponding to rows and columns
2349
2442
  * (for example, row/column sequence, column width, row height, frozen columns etc.).
2350
2443
  *
2444
+ * Since 12.0.0 passing `data` inside `settings` objects no longer results in resetting states corresponding to rows and columns
2445
+ * (for example, row/column sequence, column width, row height, frozen columns etc.).
2446
+ *
2351
2447
  * @memberof Core#
2352
2448
  * @function updateSettings
2353
- * @param {object} settings New settings object (see {@link Options}).
2449
+ * @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.
2354
2450
  * @param {boolean} [init=false] Internally used for in initialization mode.
2355
2451
  * @example
2356
2452
  * ```js
@@ -2367,6 +2463,7 @@ export default function Core(rootElement, userSettings) {
2367
2463
 
2368
2464
  this.updateSettings = function (settings) {
2369
2465
  var init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
2466
+ var dataUpdateFunction = (firstRun ? instance.loadData : instance.updateData).bind(this);
2370
2467
  var columnsAsFunc = false;
2371
2468
  var i;
2372
2469
  var j;
@@ -2385,19 +2482,15 @@ export default function Core(rootElement, userSettings) {
2385
2482
 
2386
2483
 
2387
2484
  for (i in settings) {
2388
- if (i === 'data') {
2389
- /* eslint-disable-next-line no-continue */
2390
- continue; // loadData will be triggered later
2485
+ if (i === 'data') {// Do nothing. loadData will be triggered later
2391
2486
  } else if (i === 'language') {
2392
2487
  setLanguage(settings.language);
2393
- /* eslint-disable-next-line no-continue */
2394
-
2395
- continue;
2396
2488
  } else if (i === 'className') {
2397
2489
  setClassName('className', settings.className);
2398
2490
  } else if (i === 'tableClassName' && instance.table) {
2399
2491
  setClassName('tableClassName', settings.tableClassName);
2400
- instance.view.wt.wtOverlays.syncOverlayTableClassNames();
2492
+
2493
+ instance.view._wt.wtOverlays.syncOverlayTableClassNames();
2401
2494
  } else if (Hooks.getSingleton().isRegistered(i) || Hooks.getSingleton().isDeprecated(i)) {
2402
2495
  if (isFunction(settings[i]) || Array.isArray(settings[i])) {
2403
2496
  settings[i].initialHook = true;
@@ -2411,9 +2504,9 @@ export default function Core(rootElement, userSettings) {
2411
2504
 
2412
2505
 
2413
2506
  if (settings.data === void 0 && tableMeta.data === void 0) {
2414
- instance.loadData(null, 'updateSettings'); // data source created just now
2507
+ dataUpdateFunction(null, 'updateSettings'); // data source created just now
2415
2508
  } else if (settings.data !== void 0) {
2416
- instance.loadData(settings.data, 'updateSettings'); // data source given as option
2509
+ dataUpdateFunction(settings.data, 'updateSettings'); // data source given as option
2417
2510
  } else if (settings.columns !== void 0) {
2418
2511
  datamap.createMap(); // The `column` property has changed - dataset may be expanded or narrowed down. The `loadData` do the same.
2419
2512
 
@@ -2500,8 +2593,9 @@ export default function Core(rootElement, userSettings) {
2500
2593
 
2501
2594
  if (!init) {
2502
2595
  if (instance.view) {
2503
- instance.view.wt.wtViewport.resetHasOversizedColumnHeadersMarked();
2504
- instance.view.wt.exportSettingsAsClassNames();
2596
+ instance.view._wt.wtViewport.resetHasOversizedColumnHeadersMarked();
2597
+
2598
+ instance.view._wt.exportSettingsAsClassNames();
2505
2599
  }
2506
2600
 
2507
2601
  instance.runHooks('afterUpdateSettings', settings);
@@ -2516,12 +2610,13 @@ export default function Core(rootElement, userSettings) {
2516
2610
 
2517
2611
  instance._refreshBorders(null);
2518
2612
 
2519
- instance.view.wt.wtOverlays.adjustElementsSize();
2613
+ instance.view._wt.wtOverlays.adjustElementsSize();
2614
+
2520
2615
  editorManager.unlockEditor();
2521
2616
  }
2522
2617
 
2523
2618
  if (!init && instance.view && (currentHeight === '' || height === '' || height === void 0) && currentHeight !== height) {
2524
- instance.view.wt.wtOverlays.updateMainScrollableElements();
2619
+ instance.view._wt.wtOverlays.updateMainScrollableElements();
2525
2620
  }
2526
2621
  };
2527
2622
  /**
@@ -2551,7 +2646,7 @@ export default function Core(rootElement, userSettings) {
2551
2646
  *
2552
2647
  * @memberof Core#
2553
2648
  * @function getSettings
2554
- * @returns {object} Object containing the current table settings.
2649
+ * @returns {TableMeta} Object containing the current table settings.
2555
2650
  */
2556
2651
 
2557
2652
 
@@ -2645,7 +2740,7 @@ export default function Core(rootElement, userSettings) {
2645
2740
  return null;
2646
2741
  }
2647
2742
 
2648
- return instance.view.getCellAtCoords(new CellCoords(renderableRowIndex, renderableColumnIndex), topmost);
2743
+ return instance.view.getCellAtCoords(instance._createCellCoords(renderableRowIndex, renderableColumnIndex), topmost);
2649
2744
  };
2650
2745
  /**
2651
2746
  * Returns the coordinates of the cell, provided as a HTML table cell element.
@@ -2663,7 +2758,7 @@ export default function Core(rootElement, userSettings) {
2663
2758
 
2664
2759
 
2665
2760
  this.getCoords = function (element) {
2666
- var renderableCoords = this.view.wt.wtTable.getCoords(element);
2761
+ var renderableCoords = this.view._wt.wtTable.getCoords(element);
2667
2762
 
2668
2763
  if (renderableCoords === null) {
2669
2764
  return null;
@@ -2682,7 +2777,7 @@ export default function Core(rootElement, userSettings) {
2682
2777
  visualColumn = this.columnIndexMapper.getVisualFromRenderableIndex(renderableColumn);
2683
2778
  }
2684
2779
 
2685
- return new CellCoords(visualRow, visualColumn);
2780
+ return instance._createCellCoords(visualRow, visualColumn);
2686
2781
  };
2687
2782
  /**
2688
2783
  * Returns the property name that corresponds with the given column index.
@@ -2824,7 +2919,7 @@ export default function Core(rootElement, userSettings) {
2824
2919
  this.getDataAtCol = function (column) {
2825
2920
  var _ref13;
2826
2921
 
2827
- return (_ref13 = []).concat.apply(_ref13, _toConsumableArray(datamap.getRange(new CellCoords(0, column), new CellCoords(tableMeta.data.length - 1, column), datamap.DESTINATION_RENDERER)));
2922
+ return (_ref13 = []).concat.apply(_ref13, _toConsumableArray(datamap.getRange(instance._createCellCoords(0, column), instance._createCellCoords(tableMeta.data.length - 1, column), datamap.DESTINATION_RENDERER)));
2828
2923
  };
2829
2924
  /**
2830
2925
  * Given the object property name (e.g. `'first.name'` or `'0'`), returns an array of column's values from the table data.
@@ -2841,7 +2936,7 @@ export default function Core(rootElement, userSettings) {
2841
2936
  this.getDataAtProp = function (prop) {
2842
2937
  var _ref14;
2843
2938
 
2844
- var range = datamap.getRange(new CellCoords(0, datamap.propToCol(prop)), new CellCoords(tableMeta.data.length - 1, datamap.propToCol(prop)), datamap.DESTINATION_RENDERER);
2939
+ var range = datamap.getRange(instance._createCellCoords(0, datamap.propToCol(prop)), instance._createCellCoords(tableMeta.data.length - 1, datamap.propToCol(prop)), datamap.DESTINATION_RENDERER);
2845
2940
  return (_ref14 = []).concat.apply(_ref14, _toConsumableArray(range));
2846
2941
  };
2847
2942
  /**
@@ -2868,7 +2963,7 @@ export default function Core(rootElement, userSettings) {
2868
2963
  if (row === void 0) {
2869
2964
  data = dataSource.getData();
2870
2965
  } else {
2871
- data = dataSource.getByRange(new CellCoords(row, column), new CellCoords(row2, column2));
2966
+ data = dataSource.getByRange(instance._createCellCoords(row, column), instance._createCellCoords(row2, column2));
2872
2967
  }
2873
2968
 
2874
2969
  return data;
@@ -2897,7 +2992,7 @@ export default function Core(rootElement, userSettings) {
2897
2992
  if (row === void 0) {
2898
2993
  data = dataSource.getData(true);
2899
2994
  } else {
2900
- data = dataSource.getByRange(new CellCoords(row, column), new CellCoords(row2, column2), true);
2995
+ data = dataSource.getByRange(instance._createCellCoords(row, column), instance._createCellCoords(row2, column2), true);
2901
2996
  }
2902
2997
 
2903
2998
  return data;
@@ -3014,7 +3109,7 @@ export default function Core(rootElement, userSettings) {
3014
3109
 
3015
3110
 
3016
3111
  this.getDataAtRow = function (row) {
3017
- var data = datamap.getRange(new CellCoords(row, 0), new CellCoords(row, this.countCols() - 1), datamap.DESTINATION_RENDERER);
3112
+ var data = datamap.getRange(instance._createCellCoords(row, 0), instance._createCellCoords(row, this.countCols() - 1), datamap.DESTINATION_RENDERER);
3018
3113
  return data[0] || [];
3019
3114
  };
3020
3115
  /**
@@ -3035,7 +3130,7 @@ export default function Core(rootElement, userSettings) {
3035
3130
 
3036
3131
 
3037
3132
  this.getDataType = function (rowFrom, columnFrom, rowTo, columnTo) {
3038
- var _this3 = this;
3133
+ var _this4 = this;
3039
3134
 
3040
3135
  var coords = rowFrom === void 0 ? [0, 0, this.countRows(), this.countCols()] : [rowFrom, columnFrom, rowTo, columnTo];
3041
3136
  var rowStart = coords[0],
@@ -3057,7 +3152,7 @@ export default function Core(rootElement, userSettings) {
3057
3152
  rangeEach(Math.max(Math.min(rowStart, rowEnd), 0), Math.max(rowStart, rowEnd), function (row) {
3058
3153
  var isTypeEqual = true;
3059
3154
  rangeEach(Math.max(Math.min(columnStart, columnEnd), 0), Math.max(columnStart, columnEnd), function (column) {
3060
- var cellType = _this3.getCellMeta(row, column);
3155
+ var cellType = _this4.getCellMeta(row, column);
3061
3156
 
3062
3157
  currentType = cellType.type;
3063
3158
 
@@ -3114,7 +3209,7 @@ export default function Core(rootElement, userSettings) {
3114
3209
 
3115
3210
 
3116
3211
  this.spliceCellsMeta = function (visualIndex) {
3117
- var _this4 = this;
3212
+ var _this5 = this;
3118
3213
 
3119
3214
  var deleteAmount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
3120
3215
 
@@ -3132,9 +3227,9 @@ export default function Core(rootElement, userSettings) {
3132
3227
 
3133
3228
  if (cellMetaRows.length > 0) {
3134
3229
  arrayEach(cellMetaRows.reverse(), function (cellMetaRow) {
3135
- metaManager.createRow(_this4.toPhysicalRow(visualIndex));
3230
+ metaManager.createRow(_this5.toPhysicalRow(visualIndex));
3136
3231
  arrayEach(cellMetaRow, function (cellMeta, columnIndex) {
3137
- return _this4.setCellMetaObject(visualIndex, columnIndex, cellMeta);
3232
+ return _this5.setCellMetaObject(visualIndex, columnIndex, cellMeta);
3138
3233
  });
3139
3234
  });
3140
3235
  }
@@ -3153,11 +3248,11 @@ export default function Core(rootElement, userSettings) {
3153
3248
 
3154
3249
 
3155
3250
  this.setCellMetaObject = function (row, column, prop) {
3156
- var _this5 = this;
3251
+ var _this6 = this;
3157
3252
 
3158
3253
  if (_typeof(prop) === 'object') {
3159
3254
  objectEach(prop, function (value, key) {
3160
- _this5.setCellMeta(row, column, key, value);
3255
+ _this6.setCellMeta(row, column, key, value);
3161
3256
  });
3162
3257
  }
3163
3258
  };
@@ -3777,7 +3872,8 @@ export default function Core(rootElement, userSettings) {
3777
3872
  return Math.min(maxCols, dataLen);
3778
3873
  };
3779
3874
  /**
3780
- * Returns the number of rendered rows (including rows partially or fully rendered outside viewport).
3875
+ * Returns the number of rendered rows including rows that are partially or fully rendered
3876
+ * outside the table viewport.
3781
3877
  *
3782
3878
  * @memberof Core#
3783
3879
  * @function countRenderedRows
@@ -3786,10 +3882,11 @@ export default function Core(rootElement, userSettings) {
3786
3882
 
3787
3883
 
3788
3884
  this.countRenderedRows = function () {
3789
- return instance.view.wt.drawn ? instance.view.wt.wtTable.getRenderedRowsCount() : -1;
3885
+ return instance.view._wt.drawn ? instance.view._wt.wtTable.getRenderedRowsCount() : -1;
3790
3886
  };
3791
3887
  /**
3792
- * Returns the number of visible rows (rendered rows that fully fit inside viewport).
3888
+ * Returns the number of rendered rows that are only visible in the table viewport.
3889
+ * The rows that are partially visible are not counted.
3793
3890
  *
3794
3891
  * @memberof Core#
3795
3892
  * @function countVisibleRows
@@ -3798,10 +3895,11 @@ export default function Core(rootElement, userSettings) {
3798
3895
 
3799
3896
 
3800
3897
  this.countVisibleRows = function () {
3801
- return instance.view.wt.drawn ? instance.view.wt.wtTable.getVisibleRowsCount() : -1;
3898
+ return instance.view._wt.drawn ? instance.view._wt.wtTable.getVisibleRowsCount() : -1;
3802
3899
  };
3803
3900
  /**
3804
- * Returns the number of rendered columns (including columns partially or fully rendered outside viewport).
3901
+ * Returns the number of rendered rows including columns that are partially or fully rendered
3902
+ * outside the table viewport.
3805
3903
  *
3806
3904
  * @memberof Core#
3807
3905
  * @function countRenderedCols
@@ -3810,10 +3908,11 @@ export default function Core(rootElement, userSettings) {
3810
3908
 
3811
3909
 
3812
3910
  this.countRenderedCols = function () {
3813
- return instance.view.wt.drawn ? instance.view.wt.wtTable.getRenderedColumnsCount() : -1;
3911
+ return instance.view._wt.drawn ? instance.view._wt.wtTable.getRenderedColumnsCount() : -1;
3814
3912
  };
3815
3913
  /**
3816
- * Returns the number of visible columns. Returns -1 if table is not visible.
3914
+ * Returns the number of rendered columns that are only visible in the table viewport.
3915
+ * The columns that are partially visible are not counted.
3817
3916
  *
3818
3917
  * @memberof Core#
3819
3918
  * @function countVisibleCols
@@ -3822,7 +3921,7 @@ export default function Core(rootElement, userSettings) {
3822
3921
 
3823
3922
 
3824
3923
  this.countVisibleCols = function () {
3825
- return instance.view.wt.drawn ? instance.view.wt.wtTable.getVisibleColumnsCount() : -1;
3924
+ return instance.view._wt.drawn ? instance.view._wt.wtTable.getVisibleColumnsCount() : -1;
3826
3925
  };
3827
3926
  /**
3828
3927
  * Returns the number of empty rows. If the optional ending parameter is `true`, returns the
@@ -4132,7 +4231,7 @@ export default function Core(rootElement, userSettings) {
4132
4231
  var isColumnInteger = Number.isInteger(renderableColumn);
4133
4232
 
4134
4233
  if (isRowInteger && isColumnInteger) {
4135
- return instance.view.scrollViewport(new CellCoords(renderableRow, renderableColumn), snapToTop, snapToRight, snapToBottom, snapToLeft);
4234
+ return instance.view.scrollViewport(instance._createCellCoords(renderableRow, renderableColumn), snapToTop, snapToRight, snapToBottom, snapToLeft);
4136
4235
  }
4137
4236
 
4138
4237
  if (isRowInteger && isColumnInteger === false) {
@@ -4169,8 +4268,8 @@ export default function Core(rootElement, userSettings) {
4169
4268
  }
4170
4269
 
4171
4270
  dataSource = null;
4271
+ this.getShortcutManager().destroy();
4172
4272
  metaManager.clearCache();
4173
- keyStateStopObserving();
4174
4273
 
4175
4274
  if (isRootInstance(instance)) {
4176
4275
  var licenseInfo = this.rootDocument.querySelector('#hot-display-license-info');
@@ -4566,6 +4665,337 @@ export default function Core(rootElement, userSettings) {
4566
4665
  return instance.isLtr() ? 1 : -1;
4567
4666
  };
4568
4667
 
4668
+ var shortcutManager = createShortcutManager({
4669
+ beforeKeyDown: function beforeKeyDown(event) {
4670
+ if (_this.isListening() === false) {
4671
+ // Performing action (executing a callback) and triggering hook only for listening Handsontable.
4672
+ return false;
4673
+ }
4674
+
4675
+ return _this.runHooks('beforeKeyDown', event);
4676
+ },
4677
+ afterKeyDown: function afterKeyDown(event) {
4678
+ if (_this.isDestroyed) {
4679
+ // Handsontable could be destroyed after performing action (executing a callback).
4680
+ return;
4681
+ }
4682
+
4683
+ instance.runHooks('afterDocumentKeyDown', event);
4684
+ },
4685
+ ownerWindow: this.rootWindow
4686
+ });
4687
+ /**
4688
+ * Returns instance of a manager responsible for handling shortcuts stored in some contexts. It run actions after
4689
+ * pressing key combination in active Handsontable instance.
4690
+ *
4691
+ * @memberof Core#
4692
+ * @since 12.0.0
4693
+ * @function getShortcutManager
4694
+ * @returns {ShortcutManager} Instance of {@link ShortcutManager}
4695
+ */
4696
+
4697
+ this.getShortcutManager = function () {
4698
+ return shortcutManager;
4699
+ };
4700
+
4701
+ var gridContext = shortcutManager.addContext('grid');
4702
+ var gridConfig = {
4703
+ runOnlyIf: function runOnlyIf() {
4704
+ return isDefined(instance.getSelected()) && instance.countRenderedRows() > 0 && instance.countRenderedCols() > 0;
4705
+ },
4706
+ group: SHORTCUTS_GROUP
4707
+ };
4708
+ shortcutManager.setActiveContextName('grid');
4709
+ gridContext.addShortcuts([{
4710
+ keys: [['Control/Meta', 'A']],
4711
+ callback: function callback() {
4712
+ instance.selectAll();
4713
+ }
4714
+ }, {
4715
+ keys: [['Control/Meta', 'Enter']],
4716
+ callback: function callback() {
4717
+ var selectedRange = instance.getSelectedRange();
4718
+ var _selectedRange$highli = selectedRange[selectedRange.length - 1].highlight,
4719
+ highlightRow = _selectedRange$highli.row,
4720
+ highlightColumn = _selectedRange$highli.col;
4721
+ var valueToPopulate = instance.getDataAtCell(highlightRow, highlightColumn);
4722
+ var cellValues = new Map();
4723
+
4724
+ for (var i = 0; i < selectedRange.length; i++) {
4725
+ selectedRange[i].forAll(function (row, column) {
4726
+ if (row >= 0 && column >= 0 && (row !== highlightRow || column !== highlightColumn)) {
4727
+ var _instance$getCellMeta = instance.getCellMeta(row, column),
4728
+ readOnly = _instance$getCellMeta.readOnly;
4729
+
4730
+ if (!readOnly) {
4731
+ cellValues.set("".concat(row, "x").concat(column), [row, column, valueToPopulate]);
4732
+ }
4733
+ }
4734
+ });
4735
+ }
4736
+
4737
+ instance.setDataAtCell(Array.from(cellValues.values()));
4738
+ },
4739
+ runOnlyIf: function runOnlyIf() {
4740
+ return instance.getSelectedRangeLast().getCellsCount() > 1;
4741
+ }
4742
+ }, {
4743
+ keys: [['ArrowUp']],
4744
+ callback: function callback() {
4745
+ selection.transformStart(-1, 0);
4746
+ }
4747
+ }, {
4748
+ keys: [['ArrowUp', 'Control/Meta']],
4749
+ captureCtrl: true,
4750
+ callback: function callback() {
4751
+ selection.setRangeStart(instance._createCellCoords(instance.rowIndexMapper.getFirstNotHiddenIndex(0, 1), instance.getSelectedRangeLast().highlight.col));
4752
+ }
4753
+ }, {
4754
+ keys: [['ArrowUp', 'Shift']],
4755
+ callback: function callback() {
4756
+ selection.transformEnd(-1, 0);
4757
+ }
4758
+ }, {
4759
+ keys: [['ArrowUp', 'Shift', 'Control/Meta']],
4760
+ captureCtrl: true,
4761
+ callback: function callback() {
4762
+ var _instance$getSelected = instance.getSelectedRangeLast(),
4763
+ from = _instance$getSelected.from,
4764
+ to = _instance$getSelected.to;
4765
+
4766
+ var row = instance.rowIndexMapper.getFirstNotHiddenIndex(0, 1);
4767
+ selection.setRangeStart(from.clone());
4768
+ selection.setRangeEnd(instance._createCellCoords(row, to.col));
4769
+ },
4770
+ runOnlyIf: function runOnlyIf() {
4771
+ return !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByColumnHeader());
4772
+ }
4773
+ }, {
4774
+ keys: [['ArrowDown']],
4775
+ callback: function callback() {
4776
+ selection.transformStart(1, 0);
4777
+ }
4778
+ }, {
4779
+ keys: [['ArrowDown', 'Control/Meta']],
4780
+ captureCtrl: true,
4781
+ callback: function callback() {
4782
+ selection.setRangeStart(instance._createCellCoords(instance.rowIndexMapper.getFirstNotHiddenIndex(instance.countRows() - 1, -1), instance.getSelectedRangeLast().highlight.col));
4783
+ }
4784
+ }, {
4785
+ keys: [['ArrowDown', 'Shift']],
4786
+ callback: function callback() {
4787
+ selection.transformEnd(1, 0);
4788
+ }
4789
+ }, {
4790
+ keys: [['ArrowDown', 'Shift', 'Control/Meta']],
4791
+ captureCtrl: true,
4792
+ callback: function callback() {
4793
+ var _instance$getSelected2 = instance.getSelectedRangeLast(),
4794
+ from = _instance$getSelected2.from,
4795
+ to = _instance$getSelected2.to;
4796
+
4797
+ var row = instance.rowIndexMapper.getFirstNotHiddenIndex(instance.countRows() - 1, -1);
4798
+ selection.setRangeStart(from.clone());
4799
+ selection.setRangeEnd(instance._createCellCoords(row, to.col));
4800
+ },
4801
+ runOnlyIf: function runOnlyIf() {
4802
+ return !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByColumnHeader());
4803
+ }
4804
+ }, {
4805
+ keys: [['ArrowLeft']],
4806
+ callback: function callback() {
4807
+ selection.transformStart(0, -1 * instance.getDirectionFactor());
4808
+ }
4809
+ }, {
4810
+ keys: [['ArrowLeft', 'Control/Meta']],
4811
+ captureCtrl: true,
4812
+ callback: function callback() {
4813
+ var _instance$columnIndex;
4814
+
4815
+ var row = instance.getSelectedRangeLast().highlight.row;
4816
+
4817
+ var column = (_instance$columnIndex = instance.columnIndexMapper).getFirstNotHiddenIndex.apply(_instance$columnIndex, _toConsumableArray(instance.isRtl() ? [instance.countCols() - 1, -1] : [0, 1]));
4818
+
4819
+ selection.setRangeStart(instance._createCellCoords(row, column));
4820
+ }
4821
+ }, {
4822
+ keys: [['ArrowLeft', 'Shift']],
4823
+ callback: function callback() {
4824
+ selection.transformEnd(0, -1 * instance.getDirectionFactor());
4825
+ }
4826
+ }, {
4827
+ keys: [['ArrowLeft', 'Shift', 'Control/Meta']],
4828
+ captureCtrl: true,
4829
+ callback: function callback() {
4830
+ var _instance$columnIndex2;
4831
+
4832
+ var _instance$getSelected3 = instance.getSelectedRangeLast(),
4833
+ from = _instance$getSelected3.from,
4834
+ to = _instance$getSelected3.to;
4835
+
4836
+ var column = (_instance$columnIndex2 = instance.columnIndexMapper).getFirstNotHiddenIndex.apply(_instance$columnIndex2, _toConsumableArray(instance.isRtl() ? [instance.countCols() - 1, -1] : [0, 1]));
4837
+
4838
+ selection.setRangeStart(from.clone());
4839
+ selection.setRangeEnd(instance._createCellCoords(to.row, column));
4840
+ },
4841
+ runOnlyIf: function runOnlyIf() {
4842
+ return !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByRowHeader());
4843
+ }
4844
+ }, {
4845
+ keys: [['ArrowRight']],
4846
+ callback: function callback() {
4847
+ selection.transformStart(0, instance.getDirectionFactor());
4848
+ }
4849
+ }, {
4850
+ keys: [['ArrowRight', 'Control/Meta']],
4851
+ captureCtrl: true,
4852
+ callback: function callback() {
4853
+ var _instance$columnIndex3;
4854
+
4855
+ var row = instance.getSelectedRangeLast().highlight.row;
4856
+
4857
+ var column = (_instance$columnIndex3 = instance.columnIndexMapper).getFirstNotHiddenIndex.apply(_instance$columnIndex3, _toConsumableArray(instance.isRtl() ? [0, 1] : [instance.countCols() - 1, -1]));
4858
+
4859
+ selection.setRangeStart(instance._createCellCoords(row, column));
4860
+ }
4861
+ }, {
4862
+ keys: [['ArrowRight', 'Shift']],
4863
+ callback: function callback() {
4864
+ selection.transformEnd(0, instance.getDirectionFactor());
4865
+ }
4866
+ }, {
4867
+ keys: [['ArrowRight', 'Shift', 'Control/Meta']],
4868
+ captureCtrl: true,
4869
+ callback: function callback() {
4870
+ var _instance$columnIndex4;
4871
+
4872
+ var _instance$getSelected4 = instance.getSelectedRangeLast(),
4873
+ from = _instance$getSelected4.from,
4874
+ to = _instance$getSelected4.to;
4875
+
4876
+ var column = (_instance$columnIndex4 = instance.columnIndexMapper).getFirstNotHiddenIndex.apply(_instance$columnIndex4, _toConsumableArray(instance.isRtl() ? [0, 1] : [instance.countCols() - 1, -1]));
4877
+
4878
+ selection.setRangeStart(from.clone());
4879
+ selection.setRangeEnd(instance._createCellCoords(to.row, column));
4880
+ },
4881
+ runOnlyIf: function runOnlyIf() {
4882
+ return !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByRowHeader());
4883
+ }
4884
+ }, {
4885
+ keys: [['Home']],
4886
+ captureCtrl: true,
4887
+ callback: function callback() {
4888
+ var fixedColumns = parseInt(instance.getSettings().fixedColumnsStart, 10);
4889
+ var row = instance.getSelectedRangeLast().highlight.row;
4890
+ var column = instance.columnIndexMapper.getFirstNotHiddenIndex(fixedColumns, 1);
4891
+ selection.setRangeStart(instance._createCellCoords(row, column));
4892
+ },
4893
+ runOnlyIf: function runOnlyIf() {
4894
+ return instance.view.isMainTableNotFullyCoveredByOverlays();
4895
+ }
4896
+ }, {
4897
+ keys: [['Home', 'Shift']],
4898
+ callback: function callback() {
4899
+ selection.setRangeEnd(instance._createCellCoords(selection.selectedRange.current().from.row, instance.columnIndexMapper.getFirstNotHiddenIndex(0, 1)));
4900
+ }
4901
+ }, {
4902
+ keys: [['Home', 'Control/Meta']],
4903
+ captureCtrl: true,
4904
+ callback: function callback() {
4905
+ var fixedRows = parseInt(instance.getSettings().fixedRowsTop, 10);
4906
+ var fixedColumns = parseInt(instance.getSettings().fixedColumnsStart, 10);
4907
+ var row = instance.rowIndexMapper.getFirstNotHiddenIndex(fixedRows, 1);
4908
+ var column = instance.columnIndexMapper.getFirstNotHiddenIndex(fixedColumns, 1);
4909
+ selection.setRangeStart(instance._createCellCoords(row, column));
4910
+ },
4911
+ runOnlyIf: function runOnlyIf() {
4912
+ return instance.view.isMainTableNotFullyCoveredByOverlays();
4913
+ }
4914
+ }, {
4915
+ keys: [['End']],
4916
+ captureCtrl: true,
4917
+ callback: function callback() {
4918
+ selection.setRangeStart(instance._createCellCoords(instance.getSelectedRangeLast().highlight.row, instance.columnIndexMapper.getFirstNotHiddenIndex(instance.countCols() - 1, -1)));
4919
+ },
4920
+ runOnlyIf: function runOnlyIf() {
4921
+ return instance.view.isMainTableNotFullyCoveredByOverlays();
4922
+ }
4923
+ }, {
4924
+ keys: [['End', 'Shift']],
4925
+ callback: function callback() {
4926
+ selection.setRangeEnd(instance._createCellCoords(selection.selectedRange.current().from.row, instance.columnIndexMapper.getFirstNotHiddenIndex(instance.countCols() - 1, -1)));
4927
+ }
4928
+ }, {
4929
+ keys: [['End', 'Control/Meta']],
4930
+ captureCtrl: true,
4931
+ callback: function callback() {
4932
+ var fixedRows = parseInt(instance.getSettings().fixedRowsBottom, 10);
4933
+ var row = instance.rowIndexMapper.getFirstNotHiddenIndex(instance.countRows() - fixedRows - 1, -1);
4934
+ var column = instance.columnIndexMapper.getFirstNotHiddenIndex(instance.countCols() - 1, -1);
4935
+ selection.setRangeStart(instance._createCellCoords(row, column));
4936
+ },
4937
+ runOnlyIf: function runOnlyIf() {
4938
+ return instance.view.isMainTableNotFullyCoveredByOverlays();
4939
+ }
4940
+ }, {
4941
+ keys: [['PageUp']],
4942
+ callback: function callback() {
4943
+ selection.transformStart(-instance.countVisibleRows(), 0);
4944
+ }
4945
+ }, {
4946
+ keys: [['PageUp', 'Shift']],
4947
+ callback: function callback() {
4948
+ var _instance$getSelected5 = instance.getSelectedRangeLast(),
4949
+ to = _instance$getSelected5.to;
4950
+
4951
+ var nextRowIndexToSelect = Math.max(to.row - instance.countVisibleRows(), 0);
4952
+ var row = instance.rowIndexMapper.getFirstNotHiddenIndex(nextRowIndexToSelect, 1);
4953
+
4954
+ if (row !== null) {
4955
+ var coords = instance._createCellCoords(row, to.col);
4956
+
4957
+ var scrollPadding = to.row - instance.view.getFirstFullyVisibleRow();
4958
+ var nextVerticalScroll = Math.max(coords.row - scrollPadding, 0);
4959
+ selection.setRangeEnd(coords);
4960
+ instance.scrollViewportTo(nextVerticalScroll);
4961
+ }
4962
+ }
4963
+ }, {
4964
+ keys: [['PageDown']],
4965
+ callback: function callback() {
4966
+ selection.transformStart(instance.countVisibleRows(), 0);
4967
+ }
4968
+ }, {
4969
+ keys: [['PageDown', 'Shift']],
4970
+ callback: function callback() {
4971
+ var _instance$getSelected6 = instance.getSelectedRangeLast(),
4972
+ to = _instance$getSelected6.to;
4973
+
4974
+ var nextRowIndexToSelect = Math.min(to.row + instance.countVisibleRows(), instance.countRows() - 1);
4975
+ var row = instance.rowIndexMapper.getFirstNotHiddenIndex(nextRowIndexToSelect, -1);
4976
+
4977
+ if (row !== null) {
4978
+ var coords = instance._createCellCoords(row, to.col);
4979
+
4980
+ var scrollPadding = to.row - instance.view.getFirstFullyVisibleRow();
4981
+ var nextVerticalScroll = Math.min(coords.row - scrollPadding, instance.countRows() - 1);
4982
+ selection.setRangeEnd(coords);
4983
+ instance.scrollViewportTo(nextVerticalScroll);
4984
+ }
4985
+ }
4986
+ }, {
4987
+ keys: [['Tab']],
4988
+ callback: function callback(event) {
4989
+ var tabMoves = typeof tableMeta.tabMoves === 'function' ? tableMeta.tabMoves(event) : tableMeta.tabMoves;
4990
+ selection.transformStart(tabMoves.row, tabMoves.col, true);
4991
+ }
4992
+ }, {
4993
+ keys: [['Shift', 'Tab']],
4994
+ callback: function callback(event) {
4995
+ var tabMoves = typeof tableMeta.tabMoves === 'function' ? tableMeta.tabMoves(event) : tableMeta.tabMoves;
4996
+ selection.transformStart(-tabMoves.row, -tabMoves.col);
4997
+ }
4998
+ }], gridConfig);
4569
4999
  getPluginsNames().forEach(function (pluginName) {
4570
5000
  var PluginClass = getPlugin(pluginName);
4571
5001
  pluginsRegistry.addItem(pluginName, new PluginClass(_this));