handsontable 11.0.0 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (633) hide show
  1. package/3rdparty/walkontable/src/border.js +121 -99
  2. package/3rdparty/walkontable/src/border.mjs +122 -96
  3. package/3rdparty/walkontable/src/calculator/viewportColumns.js +1 -1
  4. package/3rdparty/walkontable/src/calculator/viewportColumns.mjs +1 -1
  5. package/3rdparty/walkontable/src/calculator/viewportRows.js +1 -1
  6. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +1 -1
  7. package/3rdparty/walkontable/src/cell/coords.js +60 -18
  8. package/3rdparty/walkontable/src/cell/coords.mjs +56 -18
  9. package/3rdparty/walkontable/src/cell/range.d.ts +10 -2
  10. package/3rdparty/walkontable/src/cell/range.js +279 -100
  11. package/3rdparty/walkontable/src/cell/range.mjs +274 -100
  12. package/3rdparty/walkontable/src/core/_base.js +452 -0
  13. package/3rdparty/walkontable/src/core/_base.mjs +440 -0
  14. package/3rdparty/walkontable/src/core/clone.js +97 -0
  15. package/3rdparty/walkontable/src/core/clone.mjs +80 -0
  16. package/3rdparty/walkontable/src/core/core.js +183 -0
  17. package/3rdparty/walkontable/src/core/core.mjs +160 -0
  18. package/3rdparty/walkontable/src/event.js +100 -67
  19. package/3rdparty/walkontable/src/event.mjs +100 -64
  20. package/3rdparty/walkontable/src/facade/core.js +251 -0
  21. package/3rdparty/walkontable/src/facade/core.mjs +243 -0
  22. package/3rdparty/walkontable/src/filter/column.js +1 -1
  23. package/3rdparty/walkontable/src/filter/column.mjs +1 -1
  24. package/3rdparty/walkontable/src/filter/row.js +1 -1
  25. package/3rdparty/walkontable/src/filter/row.mjs +1 -1
  26. package/3rdparty/walkontable/src/index.js +3 -47
  27. package/3rdparty/walkontable/src/index.mjs +3 -13
  28. package/3rdparty/walkontable/src/overlay/_base.js +125 -58
  29. package/3rdparty/walkontable/src/overlay/_base.mjs +126 -59
  30. package/3rdparty/walkontable/src/overlay/bottom.js +86 -76
  31. package/3rdparty/walkontable/src/overlay/bottom.mjs +86 -76
  32. package/3rdparty/walkontable/src/overlay/{bottomLeftCorner.js → bottomInlineStartCorner.js} +35 -58
  33. package/3rdparty/walkontable/src/overlay/{bottomLeftCorner.mjs → bottomInlineStartCorner.mjs} +34 -57
  34. package/3rdparty/walkontable/src/overlay/constants.js +25 -9
  35. package/3rdparty/walkontable/src/overlay/constants.mjs +14 -4
  36. package/3rdparty/walkontable/src/overlay/index.js +10 -19
  37. package/3rdparty/walkontable/src/overlay/index.mjs +4 -5
  38. package/3rdparty/walkontable/src/overlay/{left.js → inlineStart.js} +102 -80
  39. package/3rdparty/walkontable/src/overlay/{left.mjs → inlineStart.mjs} +101 -79
  40. package/3rdparty/walkontable/src/overlay/top.js +84 -79
  41. package/3rdparty/walkontable/src/overlay/top.mjs +84 -79
  42. package/3rdparty/walkontable/src/overlay/{topLeftCorner.js → topInlineStartCorner.js} +56 -57
  43. package/3rdparty/walkontable/src/overlay/{topLeftCorner.mjs → topInlineStartCorner.mjs} +51 -52
  44. package/3rdparty/walkontable/src/overlays.js +226 -157
  45. package/3rdparty/walkontable/src/overlays.mjs +226 -156
  46. package/3rdparty/walkontable/src/renderer/_base.js +1 -1
  47. package/3rdparty/walkontable/src/renderer/_base.mjs +1 -1
  48. package/3rdparty/walkontable/src/renderer/cells.js +5 -4
  49. package/3rdparty/walkontable/src/renderer/cells.mjs +5 -4
  50. package/3rdparty/walkontable/src/renderer/colGroup.js +3 -3
  51. package/3rdparty/walkontable/src/renderer/colGroup.mjs +3 -3
  52. package/3rdparty/walkontable/src/renderer/columnHeaders.js +3 -3
  53. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +3 -3
  54. package/3rdparty/walkontable/src/renderer/index.js +1 -1
  55. package/3rdparty/walkontable/src/renderer/index.mjs +1 -1
  56. package/3rdparty/walkontable/src/renderer/rowHeaders.js +3 -3
  57. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +3 -3
  58. package/3rdparty/walkontable/src/renderer/rows.js +3 -3
  59. package/3rdparty/walkontable/src/renderer/rows.mjs +3 -3
  60. package/3rdparty/walkontable/src/renderer/table.js +1 -1
  61. package/3rdparty/walkontable/src/renderer/table.mjs +1 -1
  62. package/3rdparty/walkontable/src/scroll.js +61 -88
  63. package/3rdparty/walkontable/src/scroll.mjs +61 -88
  64. package/3rdparty/walkontable/src/selection.js +12 -16
  65. package/3rdparty/walkontable/src/selection.mjs +12 -14
  66. package/3rdparty/walkontable/src/settings.js +236 -127
  67. package/3rdparty/walkontable/src/settings.mjs +236 -126
  68. package/3rdparty/walkontable/src/table/bottom.js +21 -6
  69. package/3rdparty/walkontable/src/table/bottom.mjs +20 -6
  70. package/3rdparty/walkontable/src/table/{bottomLeftCorner.js → bottomInlineStartCorner.js} +31 -15
  71. package/3rdparty/walkontable/src/table/{bottomLeftCorner.mjs → bottomInlineStartCorner.mjs} +30 -15
  72. package/3rdparty/walkontable/src/table/{left.js → inlineStart.js} +27 -15
  73. package/3rdparty/walkontable/src/table/{left.mjs → inlineStart.mjs} +26 -15
  74. package/3rdparty/walkontable/src/table/master.js +23 -13
  75. package/3rdparty/walkontable/src/table/master.mjs +23 -13
  76. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +12 -6
  77. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +12 -6
  78. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +12 -6
  79. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +12 -6
  80. package/3rdparty/walkontable/src/table/mixin/{stickyColumnsLeft.js → stickyColumnsStart.js} +13 -7
  81. package/3rdparty/walkontable/src/table/mixin/{stickyColumnsLeft.mjs → stickyColumnsStart.mjs} +13 -7
  82. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +11 -5
  83. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +11 -5
  84. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -3
  85. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -3
  86. package/3rdparty/walkontable/src/table/top.js +21 -6
  87. package/3rdparty/walkontable/src/table/top.mjs +20 -6
  88. package/3rdparty/walkontable/src/table/{topLeftCorner.js → topInlineStartCorner.js} +31 -15
  89. package/3rdparty/walkontable/src/table/{topLeftCorner.mjs → topInlineStartCorner.mjs} +30 -15
  90. package/3rdparty/walkontable/src/table.js +236 -141
  91. package/3rdparty/walkontable/src/table.mjs +232 -135
  92. package/3rdparty/walkontable/src/types.js +103 -0
  93. package/3rdparty/walkontable/src/types.mjs +102 -0
  94. package/3rdparty/walkontable/src/utils/column.js +23 -34
  95. package/3rdparty/walkontable/src/utils/column.mjs +23 -31
  96. package/3rdparty/walkontable/src/utils/nodesPool.js +1 -1
  97. package/3rdparty/walkontable/src/utils/nodesPool.mjs +1 -1
  98. package/3rdparty/walkontable/src/utils/orderView/sharedView.js +3 -3
  99. package/3rdparty/walkontable/src/utils/orderView/sharedView.mjs +3 -3
  100. package/3rdparty/walkontable/src/utils/orderView/view.js +1 -1
  101. package/3rdparty/walkontable/src/utils/orderView/view.mjs +1 -1
  102. package/3rdparty/walkontable/src/utils/orderView/viewSize.js +1 -1
  103. package/3rdparty/walkontable/src/utils/orderView/viewSize.mjs +1 -1
  104. package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.js +1 -1
  105. package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.mjs +1 -1
  106. package/3rdparty/walkontable/src/utils/row.js +10 -5
  107. package/3rdparty/walkontable/src/utils/row.mjs +10 -5
  108. package/3rdparty/walkontable/src/viewport.js +78 -81
  109. package/3rdparty/walkontable/src/viewport.mjs +78 -78
  110. package/CHANGELOG.md +94 -17
  111. package/README.md +10 -7
  112. package/base.js +2 -2
  113. package/base.mjs +2 -2
  114. package/cellTypes/timeType/timeType.d.ts +6 -6
  115. package/cellTypes/timeType/timeType.js +4 -5
  116. package/cellTypes/timeType/timeType.mjs +4 -5
  117. package/core.d.ts +9 -3
  118. package/core.js +590 -157
  119. package/core.mjs +599 -169
  120. package/dataMap/dataMap.js +2 -2
  121. package/dataMap/dataMap.mjs +2 -2
  122. package/dataMap/index.js +8 -0
  123. package/dataMap/index.mjs +3 -1
  124. package/dataMap/metaManager/index.js +3 -3
  125. package/dataMap/metaManager/index.mjs +3 -3
  126. package/dataMap/metaManager/lazyFactoryMap.js +1 -1
  127. package/dataMap/metaManager/lazyFactoryMap.mjs +1 -1
  128. package/dataMap/metaManager/metaLayers/cellMeta.js +1 -1
  129. package/dataMap/metaManager/metaLayers/cellMeta.mjs +1 -1
  130. package/dataMap/metaManager/metaLayers/columnMeta.js +1 -1
  131. package/dataMap/metaManager/metaLayers/columnMeta.mjs +1 -1
  132. package/dataMap/metaManager/metaLayers/globalMeta.js +7 -3
  133. package/dataMap/metaManager/metaLayers/globalMeta.mjs +7 -3
  134. package/dataMap/metaManager/metaLayers/tableMeta.js +3 -3
  135. package/dataMap/metaManager/metaLayers/tableMeta.mjs +3 -3
  136. package/dataMap/metaManager/metaSchema.js +2931 -2676
  137. package/dataMap/metaManager/metaSchema.mjs +2931 -2676
  138. package/dataMap/metaManager/mods/dynamicCellMeta.js +1 -1
  139. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +1 -1
  140. package/dataMap/metaManager/mods/extendMetaProperties.js +126 -0
  141. package/dataMap/metaManager/mods/extendMetaProperties.mjs +113 -0
  142. package/dataMap/replaceData.js +140 -0
  143. package/dataMap/replaceData.mjs +124 -0
  144. package/dataSource.js +1 -1
  145. package/dataSource.mjs +1 -1
  146. package/dist/README.md +2 -2
  147. package/dist/handsontable.css +424 -166
  148. package/dist/handsontable.full.css +559 -298
  149. package/dist/handsontable.full.js +47163 -41289
  150. package/dist/handsontable.full.min.css +8 -13
  151. package/dist/handsontable.full.min.js +143 -142
  152. package/dist/handsontable.js +28270 -24105
  153. package/dist/handsontable.min.css +8 -11
  154. package/dist/handsontable.min.js +3 -3
  155. package/dist/languages/all.js +69 -38
  156. package/dist/languages/all.min.js +1 -1
  157. package/dist/languages/ar-AR.js +167 -0
  158. package/dist/languages/ar-AR.min.js +1 -0
  159. package/dist/languages/de-CH.js +32 -33
  160. package/dist/languages/de-CH.min.js +1 -1
  161. package/dist/languages/de-DE.js +5 -6
  162. package/dist/languages/de-DE.min.js +1 -1
  163. package/dist/languages/en-US.js +5 -6
  164. package/dist/languages/en-US.min.js +1 -1
  165. package/dist/languages/es-MX.js +5 -6
  166. package/dist/languages/es-MX.min.js +1 -1
  167. package/dist/languages/fr-FR.js +5 -6
  168. package/dist/languages/fr-FR.min.js +1 -1
  169. package/dist/languages/it-IT.js +5 -6
  170. package/dist/languages/it-IT.min.js +1 -1
  171. package/dist/languages/ja-JP.js +5 -6
  172. package/dist/languages/ja-JP.min.js +1 -1
  173. package/dist/languages/ko-KR.js +37 -42
  174. package/dist/languages/ko-KR.min.js +1 -1
  175. package/dist/languages/lv-LV.js +4 -6
  176. package/dist/languages/lv-LV.min.js +1 -1
  177. package/dist/languages/nb-NO.js +4 -6
  178. package/dist/languages/nb-NO.min.js +1 -1
  179. package/dist/languages/nl-NL.js +4 -6
  180. package/dist/languages/nl-NL.min.js +1 -1
  181. package/dist/languages/pl-PL.js +4 -6
  182. package/dist/languages/pl-PL.min.js +1 -1
  183. package/dist/languages/pt-BR.js +4 -6
  184. package/dist/languages/pt-BR.min.js +1 -1
  185. package/dist/languages/ru-RU.js +4 -6
  186. package/dist/languages/ru-RU.min.js +1 -1
  187. package/dist/languages/zh-CN.js +4 -6
  188. package/dist/languages/zh-CN.min.js +1 -1
  189. package/dist/languages/zh-TW.js +25 -27
  190. package/dist/languages/zh-TW.min.js +1 -1
  191. package/editorManager.js +121 -268
  192. package/editorManager.mjs +129 -279
  193. package/editors/autocompleteEditor/autocompleteEditor.js +19 -17
  194. package/editors/autocompleteEditor/autocompleteEditor.mjs +19 -17
  195. package/editors/baseEditor/baseEditor.js +207 -36
  196. package/editors/baseEditor/baseEditor.mjs +202 -34
  197. package/editors/checkboxEditor/checkboxEditor.js +3 -3
  198. package/editors/checkboxEditor/checkboxEditor.mjs +3 -3
  199. package/editors/dateEditor/dateEditor.js +22 -9
  200. package/editors/dateEditor/dateEditor.mjs +23 -10
  201. package/editors/dropdownEditor/dropdownEditor.js +4 -4
  202. package/editors/dropdownEditor/dropdownEditor.mjs +4 -4
  203. package/editors/handsontableEditor/handsontableEditor.js +107 -56
  204. package/editors/handsontableEditor/handsontableEditor.mjs +107 -56
  205. package/editors/index.d.ts +3 -0
  206. package/editors/index.js +6 -0
  207. package/editors/index.mjs +3 -1
  208. package/editors/numericEditor/numericEditor.js +3 -3
  209. package/editors/numericEditor/numericEditor.mjs +3 -3
  210. package/editors/passwordEditor/passwordEditor.js +4 -4
  211. package/editors/passwordEditor/passwordEditor.mjs +4 -4
  212. package/editors/selectEditor/selectEditor.js +66 -111
  213. package/editors/selectEditor/selectEditor.mjs +67 -110
  214. package/editors/textEditor/caretPositioner.js +49 -0
  215. package/editors/textEditor/caretPositioner.mjs +42 -0
  216. package/editors/textEditor/textEditor.js +206 -182
  217. package/editors/textEditor/textEditor.mjs +200 -180
  218. package/editors/timeEditor/index.d.ts +1 -0
  219. package/editors/timeEditor/index.js +9 -0
  220. package/editors/timeEditor/index.mjs +1 -0
  221. package/editors/timeEditor/timeEditor.d.ts +7 -0
  222. package/editors/timeEditor/timeEditor.js +105 -0
  223. package/editors/timeEditor/timeEditor.mjs +84 -0
  224. package/eventManager.js +11 -5
  225. package/eventManager.mjs +11 -5
  226. package/helpers/data.js +1 -1
  227. package/helpers/data.mjs +1 -1
  228. package/helpers/dom/element.js +1 -1
  229. package/helpers/dom/element.mjs +1 -1
  230. package/helpers/feature.js +1 -1
  231. package/helpers/feature.mjs +1 -1
  232. package/helpers/mixed.js +3 -3
  233. package/helpers/mixed.mjs +3 -3
  234. package/helpers/number.js +4 -4
  235. package/helpers/number.mjs +4 -4
  236. package/helpers/object.js +1 -1
  237. package/helpers/object.mjs +1 -1
  238. package/i18n/languages/ar-AR.js +41 -0
  239. package/i18n/languages/ar-AR.mjs +17 -0
  240. package/i18n/languages/de-CH.js +1 -1
  241. package/i18n/languages/de-DE.js +1 -1
  242. package/i18n/languages/en-US.js +1 -1
  243. package/i18n/languages/es-MX.js +1 -1
  244. package/i18n/languages/fr-FR.js +1 -1
  245. package/i18n/languages/index.js +4 -0
  246. package/i18n/languages/index.mjs +2 -1
  247. package/i18n/languages/it-IT.js +1 -1
  248. package/i18n/languages/ja-JP.js +1 -1
  249. package/i18n/languages/ko-KR.js +1 -1
  250. package/i18n/languages/lv-LV.js +1 -1
  251. package/i18n/languages/nb-NO.js +1 -1
  252. package/i18n/languages/nl-NL.js +1 -1
  253. package/i18n/languages/pl-PL.js +1 -1
  254. package/i18n/languages/pt-BR.js +1 -1
  255. package/i18n/languages/ru-RU.js +1 -1
  256. package/i18n/languages/zh-CN.js +1 -1
  257. package/i18n/languages/zh-TW.js +1 -1
  258. package/i18n/registry.js +1 -1
  259. package/index.d.ts +4 -0
  260. package/index.js +1 -1
  261. package/languages/all.js +69 -38
  262. package/languages/ar-AR.js +167 -0
  263. package/languages/ar-AR.mjs +19 -0
  264. package/languages/de-CH.js +32 -33
  265. package/languages/de-DE.js +5 -6
  266. package/languages/en-US.js +5 -6
  267. package/languages/es-MX.js +5 -6
  268. package/languages/fr-FR.js +5 -6
  269. package/languages/index.js +69 -38
  270. package/languages/index.mjs +2 -1
  271. package/languages/it-IT.js +5 -6
  272. package/languages/ja-JP.js +5 -6
  273. package/languages/ko-KR.js +37 -42
  274. package/languages/lv-LV.js +4 -6
  275. package/languages/nb-NO.js +4 -6
  276. package/languages/nl-NL.js +4 -6
  277. package/languages/pl-PL.js +4 -6
  278. package/languages/pt-BR.js +4 -6
  279. package/languages/ru-RU.js +4 -6
  280. package/languages/zh-CN.js +4 -6
  281. package/languages/zh-TW.js +25 -27
  282. package/package.json +26 -8
  283. package/pluginHooks.d.ts +2 -0
  284. package/pluginHooks.js +58 -27
  285. package/pluginHooks.mjs +58 -27
  286. package/plugins/autoColumnSize/autoColumnSize.js +14 -9
  287. package/plugins/autoColumnSize/autoColumnSize.mjs +14 -9
  288. package/plugins/autoRowSize/autoRowSize.js +15 -10
  289. package/plugins/autoRowSize/autoRowSize.mjs +15 -10
  290. package/plugins/autofill/autofill.js +50 -34
  291. package/plugins/autofill/autofill.mjs +50 -33
  292. package/plugins/autofill/utils.js +10 -11
  293. package/plugins/autofill/utils.mjs +10 -10
  294. package/plugins/base/base.d.ts +8 -2
  295. package/plugins/base/base.js +68 -5
  296. package/plugins/base/base.mjs +67 -5
  297. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +4 -4
  298. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +4 -4
  299. package/plugins/bindRowsWithHeaders/maps/looseBindsMap.js +4 -4
  300. package/plugins/bindRowsWithHeaders/maps/looseBindsMap.mjs +4 -4
  301. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.js +4 -4
  302. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.mjs +4 -4
  303. package/plugins/collapsibleColumns/collapsibleColumns.js +49 -30
  304. package/plugins/collapsibleColumns/collapsibleColumns.mjs +49 -30
  305. package/plugins/columnSorting/columnSorting.d.ts +1 -1
  306. package/plugins/columnSorting/columnSorting.js +10 -12
  307. package/plugins/columnSorting/columnSorting.mjs +10 -11
  308. package/plugins/columnSorting/columnStatesManager.js +3 -3
  309. package/plugins/columnSorting/columnStatesManager.mjs +3 -3
  310. package/plugins/columnSummary/columnSummary.js +4 -4
  311. package/plugins/columnSummary/columnSummary.mjs +4 -4
  312. package/plugins/columnSummary/endpoints.js +1 -1
  313. package/plugins/columnSummary/endpoints.mjs +1 -1
  314. package/plugins/comments/commentEditor.js +24 -4
  315. package/plugins/comments/commentEditor.mjs +25 -5
  316. package/plugins/comments/comments.js +63 -104
  317. package/plugins/comments/comments.mjs +63 -102
  318. package/plugins/comments/displaySwitch.js +1 -1
  319. package/plugins/comments/displaySwitch.mjs +1 -1
  320. package/plugins/contextMenu/commandExecutor.js +1 -1
  321. package/plugins/contextMenu/commandExecutor.mjs +1 -1
  322. package/plugins/contextMenu/contextMenu.js +11 -7
  323. package/plugins/contextMenu/contextMenu.mjs +11 -7
  324. package/plugins/contextMenu/cursor.js +1 -1
  325. package/plugins/contextMenu/cursor.mjs +1 -1
  326. package/plugins/contextMenu/itemsFactory.js +1 -1
  327. package/plugins/contextMenu/itemsFactory.mjs +1 -1
  328. package/plugins/contextMenu/menu.js +223 -111
  329. package/plugins/contextMenu/menu.mjs +220 -112
  330. package/plugins/contextMenu/predefinedItems/alignment.js +1 -1
  331. package/plugins/contextMenu/predefinedItems/clearColumn.js +1 -1
  332. package/plugins/contextMenu/predefinedItems/columnLeft.js +13 -5
  333. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +11 -4
  334. package/plugins/contextMenu/predefinedItems/columnRight.js +10 -10
  335. package/plugins/contextMenu/predefinedItems/columnRight.mjs +9 -9
  336. package/plugins/contextMenu/predefinedItems/readOnly.js +1 -1
  337. package/plugins/contextMenu/predefinedItems/redo.js +1 -1
  338. package/plugins/contextMenu/predefinedItems/removeColumn.js +1 -1
  339. package/plugins/contextMenu/predefinedItems/removeRow.js +1 -1
  340. package/plugins/contextMenu/predefinedItems/rowAbove.js +1 -1
  341. package/plugins/contextMenu/predefinedItems/rowBelow.js +1 -1
  342. package/plugins/contextMenu/predefinedItems/undo.js +1 -1
  343. package/plugins/contextMenu/predefinedItems.js +1 -1
  344. package/plugins/contextMenu/utils.js +2 -2
  345. package/plugins/contextMenu/utils.mjs +2 -2
  346. package/plugins/copyPaste/clipboardData.js +1 -1
  347. package/plugins/copyPaste/clipboardData.mjs +1 -1
  348. package/plugins/copyPaste/contextMenuItem/copy.js +1 -1
  349. package/plugins/copyPaste/contextMenuItem/cut.js +1 -1
  350. package/plugins/copyPaste/copyPaste.js +29 -19
  351. package/plugins/copyPaste/copyPaste.mjs +28 -19
  352. package/plugins/copyPaste/focusableElement.js +1 -1
  353. package/plugins/copyPaste/focusableElement.mjs +1 -1
  354. package/plugins/copyPaste/pasteEvent.js +6 -2
  355. package/plugins/copyPaste/pasteEvent.mjs +6 -2
  356. package/plugins/customBorders/contextMenuItem/bottom.js +1 -1
  357. package/plugins/customBorders/contextMenuItem/left.js +5 -4
  358. package/plugins/customBorders/contextMenuItem/left.mjs +4 -3
  359. package/plugins/customBorders/contextMenuItem/noBorders.js +1 -1
  360. package/plugins/customBorders/contextMenuItem/right.js +5 -4
  361. package/plugins/customBorders/contextMenuItem/right.mjs +4 -3
  362. package/plugins/customBorders/contextMenuItem/top.js +1 -1
  363. package/plugins/customBorders/customBorders.js +141 -85
  364. package/plugins/customBorders/customBorders.mjs +139 -82
  365. package/plugins/customBorders/utils.js +131 -27
  366. package/plugins/customBorders/utils.mjs +115 -27
  367. package/plugins/dragToScroll/dragToScroll.js +11 -6
  368. package/plugins/dragToScroll/dragToScroll.mjs +11 -6
  369. package/plugins/dropdownMenu/dropdownMenu.js +8 -7
  370. package/plugins/dropdownMenu/dropdownMenu.mjs +8 -7
  371. package/plugins/exportFile/dataProvider.js +1 -1
  372. package/plugins/exportFile/dataProvider.mjs +1 -1
  373. package/plugins/exportFile/exportFile.js +3 -3
  374. package/plugins/exportFile/exportFile.mjs +3 -3
  375. package/plugins/exportFile/types/_base.js +1 -1
  376. package/plugins/exportFile/types/_base.mjs +1 -1
  377. package/plugins/exportFile/types/csv.js +3 -3
  378. package/plugins/exportFile/types/csv.mjs +3 -3
  379. package/plugins/filters/component/_base.js +1 -1
  380. package/plugins/filters/component/_base.mjs +1 -1
  381. package/plugins/filters/component/actionBar.js +3 -3
  382. package/plugins/filters/component/actionBar.mjs +3 -3
  383. package/plugins/filters/component/condition.js +4 -4
  384. package/plugins/filters/component/condition.mjs +4 -4
  385. package/plugins/filters/component/operators.js +3 -3
  386. package/plugins/filters/component/operators.mjs +3 -3
  387. package/plugins/filters/component/value.js +4 -4
  388. package/plugins/filters/component/value.mjs +4 -4
  389. package/plugins/filters/condition/beginsWith.js +1 -1
  390. package/plugins/filters/condition/between.js +1 -1
  391. package/plugins/filters/condition/contains.js +1 -1
  392. package/plugins/filters/condition/date/after.js +1 -1
  393. package/plugins/filters/condition/date/before.js +1 -1
  394. package/plugins/filters/condition/date/today.js +1 -1
  395. package/plugins/filters/condition/date/tomorrow.js +1 -1
  396. package/plugins/filters/condition/date/yesterday.js +1 -1
  397. package/plugins/filters/condition/empty.js +1 -1
  398. package/plugins/filters/condition/endsWith.js +1 -1
  399. package/plugins/filters/condition/equal.js +1 -1
  400. package/plugins/filters/condition/greaterThan.js +1 -1
  401. package/plugins/filters/condition/greaterThanOrEqual.js +1 -1
  402. package/plugins/filters/condition/lessThan.js +1 -1
  403. package/plugins/filters/condition/lessThanOrEqual.js +1 -1
  404. package/plugins/filters/condition/none.js +1 -1
  405. package/plugins/filters/condition/notBetween.js +1 -1
  406. package/plugins/filters/condition/notContains.js +1 -1
  407. package/plugins/filters/condition/notEmpty.js +1 -1
  408. package/plugins/filters/condition/notEqual.js +1 -1
  409. package/plugins/filters/conditionCollection.js +1 -1
  410. package/plugins/filters/conditionCollection.mjs +1 -1
  411. package/plugins/filters/conditionUpdateObserver.js +1 -1
  412. package/plugins/filters/conditionUpdateObserver.mjs +1 -1
  413. package/plugins/filters/dataFilter.js +1 -1
  414. package/plugins/filters/dataFilter.mjs +1 -1
  415. package/plugins/filters/filters.js +12 -9
  416. package/plugins/filters/filters.mjs +12 -9
  417. package/plugins/filters/logicalOperations/conjunction.js +1 -1
  418. package/plugins/filters/logicalOperations/disjunction.js +1 -1
  419. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +1 -1
  420. package/plugins/filters/ui/_base.js +2 -2
  421. package/plugins/filters/ui/_base.mjs +1 -1
  422. package/plugins/filters/ui/input.js +4 -4
  423. package/plugins/filters/ui/input.mjs +4 -4
  424. package/plugins/filters/ui/link.js +4 -4
  425. package/plugins/filters/ui/link.mjs +4 -4
  426. package/plugins/filters/ui/multipleSelect.js +19 -32
  427. package/plugins/filters/ui/multipleSelect.mjs +19 -32
  428. package/plugins/filters/ui/radioInput.js +4 -4
  429. package/plugins/filters/ui/radioInput.mjs +4 -4
  430. package/plugins/filters/ui/select.js +5 -5
  431. package/plugins/filters/ui/select.mjs +5 -5
  432. package/plugins/formulas/engine/register.js +1 -1
  433. package/plugins/formulas/engine/register.mjs +1 -1
  434. package/plugins/formulas/engine/settings.js +2 -2
  435. package/plugins/formulas/engine/settings.mjs +2 -2
  436. package/plugins/formulas/formulas.js +10 -10
  437. package/plugins/formulas/formulas.mjs +10 -10
  438. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +1 -1
  439. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +3 -3
  440. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +2 -2
  441. package/plugins/hiddenColumns/hiddenColumns.js +10 -5
  442. package/plugins/hiddenColumns/hiddenColumns.mjs +10 -5
  443. package/plugins/hiddenRows/contextMenuItem/hideRow.js +1 -1
  444. package/plugins/hiddenRows/contextMenuItem/showRow.js +3 -3
  445. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +2 -2
  446. package/plugins/hiddenRows/hiddenRows.js +10 -5
  447. package/plugins/hiddenRows/hiddenRows.mjs +10 -5
  448. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +2 -2
  449. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.mjs +1 -1
  450. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +2 -2
  451. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.mjs +1 -1
  452. package/plugins/manualColumnFreeze/manualColumnFreeze.js +26 -13
  453. package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +26 -13
  454. package/plugins/manualColumnMove/manualColumnMove.js +73 -62
  455. package/plugins/manualColumnMove/manualColumnMove.mjs +74 -63
  456. package/plugins/manualColumnMove/ui/_base.js +26 -13
  457. package/plugins/manualColumnMove/ui/_base.mjs +25 -13
  458. package/plugins/manualColumnMove/ui/backlight.js +4 -4
  459. package/plugins/manualColumnMove/ui/backlight.mjs +4 -4
  460. package/plugins/manualColumnMove/ui/guideline.js +4 -4
  461. package/plugins/manualColumnMove/ui/guideline.mjs +4 -4
  462. package/plugins/manualColumnResize/manualColumnResize.js +38 -22
  463. package/plugins/manualColumnResize/manualColumnResize.mjs +38 -22
  464. package/plugins/manualRowMove/manualRowMove.js +27 -17
  465. package/plugins/manualRowMove/manualRowMove.mjs +27 -17
  466. package/plugins/manualRowMove/ui/_base.js +1 -1
  467. package/plugins/manualRowMove/ui/_base.mjs +1 -1
  468. package/plugins/manualRowMove/ui/backlight.js +4 -4
  469. package/plugins/manualRowMove/ui/backlight.mjs +4 -4
  470. package/plugins/manualRowMove/ui/guideline.js +4 -4
  471. package/plugins/manualRowMove/ui/guideline.mjs +4 -4
  472. package/plugins/manualRowResize/manualRowResize.js +35 -20
  473. package/plugins/manualRowResize/manualRowResize.mjs +35 -20
  474. package/plugins/mergeCells/calculations/autofill.js +7 -6
  475. package/plugins/mergeCells/calculations/autofill.mjs +7 -5
  476. package/plugins/mergeCells/calculations/selection.js +10 -5
  477. package/plugins/mergeCells/calculations/selection.mjs +10 -5
  478. package/plugins/mergeCells/cellCoords.js +17 -5
  479. package/plugins/mergeCells/cellCoords.mjs +17 -4
  480. package/plugins/mergeCells/cellsCollection.js +28 -21
  481. package/plugins/mergeCells/cellsCollection.mjs +28 -20
  482. package/plugins/mergeCells/contextMenuItem/toggleMerge.js +1 -1
  483. package/plugins/mergeCells/mergeCells.js +83 -50
  484. package/plugins/mergeCells/mergeCells.mjs +83 -48
  485. package/plugins/multiColumnSorting/multiColumnSorting.js +5 -7
  486. package/plugins/multiColumnSorting/multiColumnSorting.mjs +5 -6
  487. package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +52 -58
  488. package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +53 -58
  489. package/plugins/nestedHeaders/nestedHeaders.js +26 -19
  490. package/plugins/nestedHeaders/nestedHeaders.mjs +26 -19
  491. package/plugins/nestedHeaders/stateManager/headersTree.js +3 -3
  492. package/plugins/nestedHeaders/stateManager/headersTree.mjs +3 -3
  493. package/plugins/nestedHeaders/stateManager/index.js +3 -3
  494. package/plugins/nestedHeaders/stateManager/index.mjs +3 -3
  495. package/plugins/nestedHeaders/stateManager/sourceSettings.js +3 -3
  496. package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +3 -3
  497. package/plugins/nestedHeaders/utils/ghostTable.js +1 -1
  498. package/plugins/nestedHeaders/utils/ghostTable.mjs +1 -1
  499. package/plugins/nestedRows/data/dataManager.js +2 -2
  500. package/plugins/nestedRows/data/dataManager.mjs +2 -2
  501. package/plugins/nestedRows/nestedRows.js +11 -5
  502. package/plugins/nestedRows/nestedRows.mjs +11 -5
  503. package/plugins/nestedRows/ui/_base.js +6 -2
  504. package/plugins/nestedRows/ui/_base.mjs +6 -2
  505. package/plugins/nestedRows/ui/collapsing.js +3 -3
  506. package/plugins/nestedRows/ui/collapsing.mjs +3 -3
  507. package/plugins/nestedRows/ui/contextMenu.js +3 -3
  508. package/plugins/nestedRows/ui/contextMenu.mjs +3 -3
  509. package/plugins/nestedRows/ui/headers.js +3 -3
  510. package/plugins/nestedRows/ui/headers.mjs +3 -3
  511. package/plugins/nestedRows/utils/rowMoveController.js +3 -5
  512. package/plugins/nestedRows/utils/rowMoveController.mjs +3 -4
  513. package/plugins/persistentState/persistentState.js +10 -5
  514. package/plugins/persistentState/persistentState.mjs +10 -5
  515. package/plugins/persistentState/storage.js +1 -1
  516. package/plugins/persistentState/storage.mjs +1 -1
  517. package/plugins/search/search.js +10 -5
  518. package/plugins/search/search.mjs +10 -5
  519. package/plugins/touchScroll/touchScroll.js +32 -26
  520. package/plugins/touchScroll/touchScroll.mjs +32 -25
  521. package/plugins/trimRows/trimRows.js +10 -5
  522. package/plugins/trimRows/trimRows.mjs +10 -5
  523. package/plugins/undoRedo/index.js +1 -1
  524. package/plugins/undoRedo/undoRedo.js +54 -48
  525. package/plugins/undoRedo/undoRedo.mjs +54 -47
  526. package/renderers/autocompleteRenderer/autocompleteRenderer.js +1 -3
  527. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +1 -2
  528. package/renderers/checkboxRenderer/checkboxRenderer.js +48 -43
  529. package/renderers/checkboxRenderer/checkboxRenderer.mjs +48 -41
  530. package/renderers/index.d.ts +4 -1
  531. package/renderers/index.js +6 -0
  532. package/renderers/index.mjs +3 -1
  533. package/renderers/numericRenderer/numericRenderer.js +1 -0
  534. package/renderers/numericRenderer/numericRenderer.mjs +1 -0
  535. package/renderers/timeRenderer/index.d.ts +1 -0
  536. package/renderers/timeRenderer/index.js +9 -0
  537. package/renderers/timeRenderer/index.mjs +1 -0
  538. package/renderers/timeRenderer/timeRenderer.d.ts +5 -0
  539. package/renderers/timeRenderer/timeRenderer.js +31 -0
  540. package/renderers/timeRenderer/timeRenderer.mjs +20 -0
  541. package/selection/highlight/highlight.js +3 -3
  542. package/selection/highlight/highlight.mjs +3 -3
  543. package/selection/highlight/types/activeHeader.js +2 -2
  544. package/selection/highlight/types/activeHeader.mjs +2 -2
  545. package/selection/highlight/types/area.js +2 -2
  546. package/selection/highlight/types/area.mjs +2 -2
  547. package/selection/highlight/types/cell.js +2 -2
  548. package/selection/highlight/types/cell.mjs +2 -2
  549. package/selection/highlight/types/customSelection.js +2 -2
  550. package/selection/highlight/types/customSelection.mjs +2 -2
  551. package/selection/highlight/types/fill.js +2 -2
  552. package/selection/highlight/types/fill.mjs +2 -2
  553. package/selection/highlight/types/header.js +2 -2
  554. package/selection/highlight/types/header.mjs +2 -2
  555. package/selection/highlight/types/index.js +2 -2
  556. package/selection/highlight/types/index.mjs +2 -2
  557. package/selection/highlight/visualSelection.js +17 -16
  558. package/selection/highlight/visualSelection.mjs +18 -17
  559. package/selection/mouseEventHandler.js +15 -10
  560. package/selection/mouseEventHandler.mjs +15 -9
  561. package/selection/range.js +5 -6
  562. package/selection/range.mjs +5 -6
  563. package/selection/selection.js +27 -20
  564. package/selection/selection.mjs +27 -18
  565. package/selection/transformation.js +5 -7
  566. package/selection/transformation.mjs +5 -6
  567. package/selection/utils.js +1 -1
  568. package/selection/utils.mjs +1 -1
  569. package/settings.d.ts +3 -1
  570. package/shortcuts/context.d.ts +20 -0
  571. package/shortcuts/context.js +296 -0
  572. package/shortcuts/context.mjs +268 -0
  573. package/shortcuts/index.d.ts +1 -0
  574. package/shortcuts/index.js +8 -0
  575. package/shortcuts/index.mjs +1 -0
  576. package/shortcuts/keyObserver.js +67 -0
  577. package/shortcuts/keyObserver.mjs +58 -0
  578. package/shortcuts/manager.d.ts +10 -0
  579. package/shortcuts/manager.js +183 -0
  580. package/shortcuts/manager.mjs +174 -0
  581. package/shortcuts/recorder.js +183 -0
  582. package/shortcuts/recorder.mjs +171 -0
  583. package/shortcuts/utils.js +77 -0
  584. package/shortcuts/utils.mjs +54 -0
  585. package/tableView.js +138 -80
  586. package/tableView.mjs +138 -70
  587. package/translations/changesObservable/observable.js +1 -1
  588. package/translations/changesObservable/observable.mjs +1 -1
  589. package/translations/changesObservable/observer.js +1 -2
  590. package/translations/changesObservable/observer.mjs +1 -2
  591. package/translations/indexMapper.d.ts +1 -0
  592. package/translations/indexMapper.js +25 -2
  593. package/translations/indexMapper.mjs +24 -2
  594. package/translations/mapCollections/aggregatedCollection.js +3 -3
  595. package/translations/mapCollections/aggregatedCollection.mjs +3 -3
  596. package/translations/mapCollections/mapCollection.js +1 -1
  597. package/translations/mapCollections/mapCollection.mjs +1 -1
  598. package/translations/maps/hidingMap.js +5 -3
  599. package/translations/maps/hidingMap.mjs +5 -3
  600. package/translations/maps/indexMap.js +3 -1
  601. package/translations/maps/indexMap.mjs +3 -1
  602. package/translations/maps/indexesSequence.js +6 -4
  603. package/translations/maps/indexesSequence.mjs +6 -4
  604. package/translations/maps/linkedPhysicalIndexToValueMap.js +6 -4
  605. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +6 -4
  606. package/translations/maps/physicalIndexToValueMap.js +6 -4
  607. package/translations/maps/physicalIndexToValueMap.mjs +6 -4
  608. package/translations/maps/trimmingMap.js +5 -3
  609. package/translations/maps/trimmingMap.mjs +5 -3
  610. package/utils/dataStructures/linkedList.js +3 -3
  611. package/utils/dataStructures/linkedList.mjs +3 -3
  612. package/utils/dataStructures/queue.js +1 -1
  613. package/utils/dataStructures/queue.mjs +1 -1
  614. package/utils/dataStructures/stack.js +1 -1
  615. package/utils/dataStructures/stack.mjs +1 -1
  616. package/utils/dataStructures/tree.js +3 -3
  617. package/utils/dataStructures/tree.mjs +3 -3
  618. package/utils/dataStructures/uniqueMap.js +14 -1
  619. package/utils/dataStructures/uniqueMap.mjs +14 -1
  620. package/utils/dataStructures/uniqueSet.js +9 -0
  621. package/utils/dataStructures/uniqueSet.mjs +9 -0
  622. package/utils/ghostTable.js +14 -3
  623. package/utils/ghostTable.mjs +15 -4
  624. package/utils/interval.js +1 -1
  625. package/utils/interval.mjs +1 -1
  626. package/utils/samplesGenerator.js +1 -1
  627. package/utils/samplesGenerator.mjs +1 -1
  628. package/3rdparty/walkontable/src/core.js +0 -309
  629. package/3rdparty/walkontable/src/core.mjs +0 -293
  630. package/3rdparty/walkontable/src/overlay/registerer.js +0 -70
  631. package/3rdparty/walkontable/src/overlay/registerer.mjs +0 -57
  632. package/utils/keyStateObserver.js +0 -121
  633. package/utils/keyStateObserver.mjs +0 -103
package/core.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));