handsontable 12.2.0 → 12.3.0-next-bb1a7c2-20221208

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 (659) hide show
  1. package/3rdparty/walkontable/src/border.js +13 -6
  2. package/3rdparty/walkontable/src/border.mjs +12 -5
  3. package/3rdparty/walkontable/src/calculator/viewportColumns.js +10 -1
  4. package/3rdparty/walkontable/src/calculator/viewportColumns.mjs +10 -1
  5. package/3rdparty/walkontable/src/calculator/viewportRows.js +10 -1
  6. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +10 -1
  7. package/3rdparty/walkontable/src/cell/coords.d.ts +1 -1
  8. package/3rdparty/walkontable/src/cell/coords.js +64 -26
  9. package/3rdparty/walkontable/src/cell/coords.mjs +64 -26
  10. package/3rdparty/walkontable/src/cell/range.d.ts +19 -16
  11. package/3rdparty/walkontable/src/cell/range.js +199 -104
  12. package/3rdparty/walkontable/src/cell/range.mjs +201 -106
  13. package/3rdparty/walkontable/src/core/_base.js +17 -3
  14. package/3rdparty/walkontable/src/core/_base.mjs +20 -6
  15. package/3rdparty/walkontable/src/core/clone.js +13 -7
  16. package/3rdparty/walkontable/src/core/clone.mjs +15 -9
  17. package/3rdparty/walkontable/src/core/core.js +8 -2
  18. package/3rdparty/walkontable/src/core/core.mjs +10 -4
  19. package/3rdparty/walkontable/src/event.js +10 -1
  20. package/3rdparty/walkontable/src/event.mjs +10 -1
  21. package/3rdparty/walkontable/src/facade/core.js +16 -2
  22. package/3rdparty/walkontable/src/facade/core.mjs +22 -8
  23. package/3rdparty/walkontable/src/filter/column.js +16 -2
  24. package/3rdparty/walkontable/src/filter/column.mjs +16 -2
  25. package/3rdparty/walkontable/src/filter/row.js +16 -2
  26. package/3rdparty/walkontable/src/filter/row.mjs +16 -2
  27. package/3rdparty/walkontable/src/overlay/_base.js +17 -3
  28. package/3rdparty/walkontable/src/overlay/_base.mjs +24 -10
  29. package/3rdparty/walkontable/src/overlay/bottom.js +13 -7
  30. package/3rdparty/walkontable/src/overlay/bottom.mjs +15 -9
  31. package/3rdparty/walkontable/src/overlay/bottomInlineStartCorner.js +8 -2
  32. package/3rdparty/walkontable/src/overlay/bottomInlineStartCorner.mjs +10 -4
  33. package/3rdparty/walkontable/src/overlay/inlineStart.js +8 -2
  34. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +10 -4
  35. package/3rdparty/walkontable/src/overlay/top.js +13 -7
  36. package/3rdparty/walkontable/src/overlay/top.mjs +15 -9
  37. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.js +13 -7
  38. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.mjs +15 -9
  39. package/3rdparty/walkontable/src/overlays.js +69 -19
  40. package/3rdparty/walkontable/src/overlays.mjs +71 -21
  41. package/3rdparty/walkontable/src/renderer/_base.js +16 -2
  42. package/3rdparty/walkontable/src/renderer/_base.mjs +20 -6
  43. package/3rdparty/walkontable/src/renderer/cells.js +8 -2
  44. package/3rdparty/walkontable/src/renderer/cells.mjs +20 -14
  45. package/3rdparty/walkontable/src/renderer/colGroup.js +8 -2
  46. package/3rdparty/walkontable/src/renderer/colGroup.mjs +19 -13
  47. package/3rdparty/walkontable/src/renderer/columnHeaders.js +8 -2
  48. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +19 -13
  49. package/3rdparty/walkontable/src/renderer/index.js +16 -2
  50. package/3rdparty/walkontable/src/renderer/index.mjs +20 -6
  51. package/3rdparty/walkontable/src/renderer/rowHeaders.js +8 -2
  52. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +20 -14
  53. package/3rdparty/walkontable/src/renderer/rows.js +8 -3
  54. package/3rdparty/walkontable/src/renderer/rows.mjs +8 -3
  55. package/3rdparty/walkontable/src/renderer/table.js +16 -2
  56. package/3rdparty/walkontable/src/renderer/table.mjs +16 -2
  57. package/3rdparty/walkontable/src/scroll.js +16 -3
  58. package/3rdparty/walkontable/src/scroll.mjs +18 -5
  59. package/3rdparty/walkontable/src/selection.js +11 -5
  60. package/3rdparty/walkontable/src/selection.mjs +11 -5
  61. package/3rdparty/walkontable/src/settings.js +16 -2
  62. package/3rdparty/walkontable/src/settings.mjs +16 -2
  63. package/3rdparty/walkontable/src/table/bottom.js +8 -2
  64. package/3rdparty/walkontable/src/table/bottom.mjs +13 -7
  65. package/3rdparty/walkontable/src/table/bottomInlineStartCorner.js +8 -2
  66. package/3rdparty/walkontable/src/table/bottomInlineStartCorner.mjs +14 -8
  67. package/3rdparty/walkontable/src/table/inlineStart.js +8 -2
  68. package/3rdparty/walkontable/src/table/inlineStart.mjs +10 -4
  69. package/3rdparty/walkontable/src/table/master.js +8 -2
  70. package/3rdparty/walkontable/src/table/master.mjs +13 -7
  71. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +12 -6
  72. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +12 -6
  73. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +12 -6
  74. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +12 -6
  75. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +12 -6
  76. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +12 -6
  77. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +12 -6
  78. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +12 -6
  79. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +12 -6
  80. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +12 -6
  81. package/3rdparty/walkontable/src/table/top.js +8 -2
  82. package/3rdparty/walkontable/src/table/top.mjs +13 -7
  83. package/3rdparty/walkontable/src/table/topInlineStartCorner.js +8 -2
  84. package/3rdparty/walkontable/src/table/topInlineStartCorner.mjs +14 -8
  85. package/3rdparty/walkontable/src/table.js +13 -6
  86. package/3rdparty/walkontable/src/table.mjs +21 -14
  87. package/3rdparty/walkontable/src/utils/column.js +12 -2
  88. package/3rdparty/walkontable/src/utils/column.mjs +16 -6
  89. package/3rdparty/walkontable/src/utils/nodesPool.js +16 -2
  90. package/3rdparty/walkontable/src/utils/nodesPool.mjs +16 -2
  91. package/3rdparty/walkontable/src/utils/orderView/sharedView.js +8 -2
  92. package/3rdparty/walkontable/src/utils/orderView/sharedView.mjs +12 -6
  93. package/3rdparty/walkontable/src/utils/orderView/view.js +16 -2
  94. package/3rdparty/walkontable/src/utils/orderView/view.mjs +23 -9
  95. package/3rdparty/walkontable/src/utils/orderView/viewSize.js +16 -2
  96. package/3rdparty/walkontable/src/utils/orderView/viewSize.mjs +16 -2
  97. package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.js +16 -2
  98. package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.mjs +31 -17
  99. package/3rdparty/walkontable/src/utils/row.js +16 -2
  100. package/3rdparty/walkontable/src/utils/row.mjs +16 -2
  101. package/3rdparty/walkontable/src/viewport.js +16 -2
  102. package/3rdparty/walkontable/src/viewport.mjs +18 -4
  103. package/CHANGELOG.md +23 -0
  104. package/base.d.ts +1 -0
  105. package/base.js +7 -2
  106. package/base.mjs +9 -4
  107. package/cellTypes/index.mjs +4 -3
  108. package/core.d.ts +1 -1
  109. package/core.js +234 -122
  110. package/core.mjs +231 -119
  111. package/dataMap/dataMap.js +98 -28
  112. package/dataMap/dataMap.mjs +97 -27
  113. package/dataMap/dataSource.js +14 -2
  114. package/dataMap/dataSource.mjs +17 -5
  115. package/dataMap/metaManager/index.js +15 -2
  116. package/dataMap/metaManager/index.mjs +41 -28
  117. package/dataMap/metaManager/lazyFactoryMap.js +7 -1
  118. package/dataMap/metaManager/lazyFactoryMap.mjs +7 -1
  119. package/dataMap/metaManager/metaLayers/cellMeta.js +13 -8
  120. package/dataMap/metaManager/metaLayers/cellMeta.mjs +12 -7
  121. package/dataMap/metaManager/metaLayers/columnMeta.js +15 -2
  122. package/dataMap/metaManager/metaLayers/columnMeta.mjs +23 -9
  123. package/dataMap/metaManager/metaLayers/globalMeta.js +26 -2
  124. package/dataMap/metaManager/metaLayers/globalMeta.mjs +27 -3
  125. package/dataMap/metaManager/metaLayers/tableMeta.js +17 -3
  126. package/dataMap/metaManager/metaLayers/tableMeta.mjs +41 -27
  127. package/dataMap/metaManager/metaSchema.js +119 -66
  128. package/dataMap/metaManager/metaSchema.mjs +119 -66
  129. package/dataMap/metaManager/mods/dynamicCellMeta.js +12 -2
  130. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +26 -16
  131. package/dataMap/metaManager/mods/extendMetaProperties.js +12 -2
  132. package/dataMap/metaManager/mods/extendMetaProperties.mjs +10 -1
  133. package/dataMap/metaManager/utils.js +44 -14
  134. package/dataMap/metaManager/utils.mjs +51 -20
  135. package/dataMap/replaceData.js +2 -1
  136. package/dataMap/replaceData.mjs +24 -22
  137. package/dist/handsontable.css +9 -9
  138. package/dist/handsontable.full.css +9 -9
  139. package/dist/handsontable.full.js +7350 -10885
  140. package/dist/handsontable.full.min.css +2 -2
  141. package/dist/handsontable.full.min.js +107 -113
  142. package/dist/handsontable.js +5800 -4499
  143. package/dist/handsontable.min.css +2 -2
  144. package/dist/handsontable.min.js +3 -3
  145. package/dist/languages/all.js +111 -65
  146. package/dist/languages/all.min.js +1 -1
  147. package/dist/languages/ar-AR.js +50 -4
  148. package/dist/languages/ar-AR.min.js +1 -1
  149. package/dist/languages/cs-CZ.js +52 -6
  150. package/dist/languages/cs-CZ.min.js +1 -1
  151. package/dist/languages/de-CH.js +52 -6
  152. package/dist/languages/de-CH.min.js +1 -1
  153. package/dist/languages/de-DE.js +53 -7
  154. package/dist/languages/de-DE.min.js +1 -1
  155. package/dist/languages/en-US.js +56 -10
  156. package/dist/languages/en-US.min.js +1 -1
  157. package/dist/languages/es-MX.js +56 -10
  158. package/dist/languages/es-MX.min.js +1 -1
  159. package/dist/languages/fr-FR.js +55 -9
  160. package/dist/languages/fr-FR.min.js +1 -1
  161. package/dist/languages/it-IT.js +55 -9
  162. package/dist/languages/it-IT.min.js +1 -1
  163. package/dist/languages/ja-JP.js +83 -33
  164. package/dist/languages/ja-JP.min.js +1 -1
  165. package/dist/languages/ko-KR.js +84 -33
  166. package/dist/languages/ko-KR.min.js +1 -1
  167. package/dist/languages/lv-LV.js +85 -33
  168. package/dist/languages/lv-LV.min.js +1 -1
  169. package/dist/languages/nb-NO.js +86 -33
  170. package/dist/languages/nb-NO.min.js +1 -1
  171. package/dist/languages/nl-NL.js +87 -33
  172. package/dist/languages/nl-NL.min.js +1 -1
  173. package/dist/languages/pl-PL.js +88 -33
  174. package/dist/languages/pl-PL.min.js +1 -1
  175. package/dist/languages/pt-BR.js +68 -19
  176. package/dist/languages/pt-BR.min.js +1 -1
  177. package/dist/languages/ru-RU.js +68 -19
  178. package/dist/languages/ru-RU.min.js +1 -1
  179. package/dist/languages/sr-SP.js +55 -6
  180. package/dist/languages/sr-SP.min.js +1 -1
  181. package/dist/languages/zh-CN.js +55 -6
  182. package/dist/languages/zh-CN.min.js +1 -1
  183. package/dist/languages/zh-TW.js +55 -6
  184. package/dist/languages/zh-TW.min.js +1 -1
  185. package/editorManager.js +18 -9
  186. package/editorManager.mjs +15 -6
  187. package/editors/autocompleteEditor/autocompleteEditor.js +10 -5
  188. package/editors/autocompleteEditor/autocompleteEditor.mjs +9 -4
  189. package/editors/baseEditor/baseEditor.js +11 -6
  190. package/editors/baseEditor/baseEditor.mjs +10 -5
  191. package/editors/checkboxEditor/checkboxEditor.js +6 -1
  192. package/editors/checkboxEditor/checkboxEditor.mjs +6 -1
  193. package/editors/dateEditor/dateEditor.js +6 -1
  194. package/editors/dateEditor/dateEditor.mjs +6 -1
  195. package/editors/dropdownEditor/dropdownEditor.js +6 -1
  196. package/editors/dropdownEditor/dropdownEditor.mjs +6 -1
  197. package/editors/handsontableEditor/handsontableEditor.js +6 -1
  198. package/editors/handsontableEditor/handsontableEditor.mjs +6 -1
  199. package/editors/index.mjs +4 -3
  200. package/editors/numericEditor/numericEditor.js +6 -1
  201. package/editors/numericEditor/numericEditor.mjs +6 -1
  202. package/editors/passwordEditor/passwordEditor.js +6 -1
  203. package/editors/passwordEditor/passwordEditor.mjs +6 -1
  204. package/editors/registry.js +3 -0
  205. package/editors/registry.mjs +5 -1
  206. package/editors/selectEditor/selectEditor.js +6 -1
  207. package/editors/selectEditor/selectEditor.mjs +6 -1
  208. package/editors/textEditor/caretPositioner.mjs +11 -10
  209. package/editors/textEditor/textEditor.js +7 -2
  210. package/editors/textEditor/textEditor.mjs +7 -2
  211. package/editors/timeEditor/timeEditor.js +6 -1
  212. package/editors/timeEditor/timeEditor.mjs +6 -1
  213. package/eventManager.js +24 -9
  214. package/eventManager.mjs +26 -11
  215. package/helpers/console.mjs +6 -5
  216. package/helpers/data.d.ts +0 -1
  217. package/helpers/data.js +0 -49
  218. package/helpers/data.mjs +1 -49
  219. package/helpers/dom/element.js +23 -0
  220. package/helpers/dom/element.mjs +30 -7
  221. package/helpers/feature.js +9 -36
  222. package/helpers/feature.mjs +3 -30
  223. package/helpers/function.mjs +7 -6
  224. package/helpers/mixed.js +2 -2
  225. package/helpers/mixed.mjs +9 -8
  226. package/helpers/object.js +15 -9
  227. package/helpers/object.mjs +17 -10
  228. package/helpers/string.mjs +7 -6
  229. package/helpers/templateLiteralTag.mjs +8 -7
  230. package/i18n/constants.js +49 -42
  231. package/i18n/constants.mjs +45 -41
  232. package/i18n/languages/ar-AR.js +12 -7
  233. package/i18n/languages/ar-AR.mjs +16 -2
  234. package/i18n/languages/cs-CZ.js +12 -7
  235. package/i18n/languages/cs-CZ.mjs +16 -2
  236. package/i18n/languages/de-CH.js +12 -7
  237. package/i18n/languages/de-CH.mjs +16 -2
  238. package/i18n/languages/de-DE.js +12 -7
  239. package/i18n/languages/de-DE.mjs +16 -2
  240. package/i18n/languages/en-US.js +13 -8
  241. package/i18n/languages/en-US.mjs +17 -3
  242. package/i18n/languages/es-MX.js +13 -8
  243. package/i18n/languages/es-MX.mjs +19 -4
  244. package/i18n/languages/fr-FR.js +12 -7
  245. package/i18n/languages/fr-FR.mjs +16 -2
  246. package/i18n/languages/it-IT.js +12 -7
  247. package/i18n/languages/it-IT.mjs +16 -2
  248. package/i18n/languages/ja-JP.js +12 -7
  249. package/i18n/languages/ja-JP.mjs +16 -2
  250. package/i18n/languages/ko-KR.js +12 -7
  251. package/i18n/languages/ko-KR.mjs +16 -2
  252. package/i18n/languages/lv-LV.js +13 -8
  253. package/i18n/languages/lv-LV.mjs +19 -5
  254. package/i18n/languages/nb-NO.js +12 -7
  255. package/i18n/languages/nb-NO.mjs +16 -2
  256. package/i18n/languages/nl-NL.js +13 -8
  257. package/i18n/languages/nl-NL.mjs +19 -5
  258. package/i18n/languages/pl-PL.js +13 -8
  259. package/i18n/languages/pl-PL.mjs +18 -4
  260. package/i18n/languages/pt-BR.js +12 -7
  261. package/i18n/languages/pt-BR.mjs +16 -2
  262. package/i18n/languages/ru-RU.js +12 -7
  263. package/i18n/languages/ru-RU.mjs +16 -2
  264. package/i18n/languages/sr-SP.js +12 -7
  265. package/i18n/languages/sr-SP.mjs +16 -2
  266. package/i18n/languages/zh-CN.js +12 -7
  267. package/i18n/languages/zh-CN.mjs +16 -2
  268. package/i18n/languages/zh-TW.js +12 -7
  269. package/i18n/languages/zh-TW.mjs +16 -2
  270. package/i18n/phraseFormatters/substituteVariables.mjs +9 -8
  271. package/i18n/utils.mjs +10 -9
  272. package/index.d.ts +9 -0
  273. package/index.js +4 -2
  274. package/index.mjs +2 -1
  275. package/languages/all.js +111 -65
  276. package/languages/ar-AR.js +50 -4
  277. package/languages/ar-AR.mjs +16 -2
  278. package/languages/cs-CZ.js +52 -6
  279. package/languages/cs-CZ.mjs +16 -2
  280. package/languages/de-CH.js +52 -6
  281. package/languages/de-CH.mjs +16 -2
  282. package/languages/de-DE.js +53 -7
  283. package/languages/de-DE.mjs +16 -2
  284. package/languages/en-US.js +56 -10
  285. package/languages/en-US.mjs +17 -3
  286. package/languages/es-MX.js +56 -10
  287. package/languages/es-MX.mjs +19 -4
  288. package/languages/fr-FR.js +55 -9
  289. package/languages/fr-FR.mjs +16 -2
  290. package/languages/index.js +111 -65
  291. package/languages/it-IT.js +55 -9
  292. package/languages/it-IT.mjs +16 -2
  293. package/languages/ja-JP.js +83 -33
  294. package/languages/ja-JP.mjs +16 -2
  295. package/languages/ko-KR.js +84 -33
  296. package/languages/ko-KR.mjs +16 -2
  297. package/languages/lv-LV.js +85 -33
  298. package/languages/lv-LV.mjs +19 -5
  299. package/languages/nb-NO.js +86 -33
  300. package/languages/nb-NO.mjs +16 -2
  301. package/languages/nl-NL.js +87 -33
  302. package/languages/nl-NL.mjs +19 -5
  303. package/languages/pl-PL.js +88 -33
  304. package/languages/pl-PL.mjs +18 -4
  305. package/languages/pt-BR.js +68 -19
  306. package/languages/pt-BR.mjs +16 -2
  307. package/languages/ru-RU.js +68 -19
  308. package/languages/ru-RU.mjs +16 -2
  309. package/languages/sr-SP.js +55 -6
  310. package/languages/sr-SP.mjs +16 -2
  311. package/languages/zh-CN.js +55 -6
  312. package/languages/zh-CN.mjs +16 -2
  313. package/languages/zh-TW.js +55 -6
  314. package/languages/zh-TW.mjs +16 -2
  315. package/mixins/hooksRefRegisterer.js +6 -3
  316. package/mixins/hooksRefRegisterer.mjs +6 -3
  317. package/mixins/localHooks.js +6 -3
  318. package/mixins/localHooks.mjs +6 -3
  319. package/package.json +2 -2
  320. package/pluginHooks.d.ts +7 -2
  321. package/pluginHooks.js +109 -24
  322. package/pluginHooks.mjs +109 -24
  323. package/plugins/autoColumnSize/autoColumnSize.js +7 -2
  324. package/plugins/autoColumnSize/autoColumnSize.mjs +7 -2
  325. package/plugins/autoRowSize/autoRowSize.js +16 -7
  326. package/plugins/autoRowSize/autoRowSize.mjs +16 -7
  327. package/plugins/autofill/autofill.js +7 -2
  328. package/plugins/autofill/autofill.mjs +7 -2
  329. package/plugins/base/base.js +8 -2
  330. package/plugins/base/base.mjs +8 -2
  331. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +6 -1
  332. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +6 -1
  333. package/plugins/bindRowsWithHeaders/maps/looseBindsMap.js +6 -1
  334. package/plugins/bindRowsWithHeaders/maps/looseBindsMap.mjs +6 -1
  335. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.js +6 -1
  336. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.mjs +6 -1
  337. package/plugins/collapsibleColumns/collapsibleColumns.js +10 -5
  338. package/plugins/collapsibleColumns/collapsibleColumns.mjs +9 -4
  339. package/plugins/columnSorting/columnSorting.js +8 -4
  340. package/plugins/columnSorting/columnSorting.mjs +8 -4
  341. package/plugins/columnSorting/columnStatesManager.js +12 -6
  342. package/plugins/columnSorting/columnStatesManager.mjs +9 -3
  343. package/plugins/columnSorting/rootComparator.mjs +8 -7
  344. package/plugins/columnSorting/sortFunction/checkbox.mjs +9 -8
  345. package/plugins/columnSorting/sortFunction/date.mjs +9 -8
  346. package/plugins/columnSorting/sortFunction/default.mjs +9 -8
  347. package/plugins/columnSorting/sortFunction/numeric.mjs +9 -8
  348. package/plugins/columnSummary/columnSummary.js +13 -8
  349. package/plugins/columnSummary/columnSummary.mjs +13 -8
  350. package/plugins/columnSummary/endpoints.js +17 -16
  351. package/plugins/columnSummary/endpoints.mjs +22 -21
  352. package/plugins/comments/commentEditor.js +16 -2
  353. package/plugins/comments/commentEditor.mjs +21 -7
  354. package/plugins/comments/comments.js +15 -4
  355. package/plugins/comments/comments.mjs +15 -4
  356. package/plugins/comments/displaySwitch.js +14 -1
  357. package/plugins/comments/displaySwitch.mjs +14 -1
  358. package/plugins/contextMenu/commandExecutor.js +22 -7
  359. package/plugins/contextMenu/commandExecutor.mjs +27 -12
  360. package/plugins/contextMenu/contextMenu.d.ts +4 -3
  361. package/plugins/contextMenu/contextMenu.js +7 -17
  362. package/plugins/contextMenu/contextMenu.mjs +7 -17
  363. package/plugins/contextMenu/cursor.js +16 -2
  364. package/plugins/contextMenu/cursor.mjs +21 -7
  365. package/plugins/contextMenu/itemsFactory.js +23 -8
  366. package/plugins/contextMenu/itemsFactory.mjs +28 -13
  367. package/plugins/contextMenu/menu.js +14 -3
  368. package/plugins/contextMenu/menu.mjs +13 -2
  369. package/plugins/contextMenu/predefinedItems/removeColumn.js +1 -1
  370. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +1 -1
  371. package/plugins/contextMenu/predefinedItems/removeRow.js +1 -1
  372. package/plugins/contextMenu/predefinedItems/removeRow.mjs +1 -1
  373. package/plugins/contextMenu/predefinedItems.js +12 -7
  374. package/plugins/contextMenu/predefinedItems.mjs +14 -1
  375. package/plugins/contextMenu/utils.mjs +5 -4
  376. package/plugins/copyPaste/clipboardData.js +16 -2
  377. package/plugins/copyPaste/clipboardData.mjs +16 -2
  378. package/plugins/copyPaste/contextMenuItem/copy.js +4 -16
  379. package/plugins/copyPaste/contextMenuItem/copy.mjs +8 -7
  380. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +35 -0
  381. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +31 -0
  382. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +35 -0
  383. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +31 -0
  384. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +35 -0
  385. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +31 -0
  386. package/plugins/copyPaste/contextMenuItem/cut.mjs +5 -4
  387. package/plugins/copyPaste/copyPaste.d.ts +10 -2
  388. package/plugins/copyPaste/copyPaste.js +303 -202
  389. package/plugins/copyPaste/copyPaste.mjs +303 -202
  390. package/plugins/copyPaste/copyableRanges.js +269 -0
  391. package/plugins/copyPaste/copyableRanges.mjs +264 -0
  392. package/plugins/copyPaste/focusableElement.js +12 -2
  393. package/plugins/copyPaste/focusableElement.mjs +15 -5
  394. package/plugins/copyPaste/pasteEvent.js +16 -2
  395. package/plugins/copyPaste/pasteEvent.mjs +18 -4
  396. package/plugins/customBorders/contextMenuItem/bottom.mjs +5 -4
  397. package/plugins/customBorders/contextMenuItem/left.mjs +5 -4
  398. package/plugins/customBorders/contextMenuItem/noBorders.mjs +5 -4
  399. package/plugins/customBorders/contextMenuItem/right.mjs +5 -4
  400. package/plugins/customBorders/contextMenuItem/top.mjs +5 -4
  401. package/plugins/customBorders/customBorders.js +12 -7
  402. package/plugins/customBorders/customBorders.mjs +11 -6
  403. package/plugins/customBorders/utils.mjs +8 -7
  404. package/plugins/dragToScroll/dragToScroll.js +6 -1
  405. package/plugins/dragToScroll/dragToScroll.mjs +6 -1
  406. package/plugins/dropdownMenu/dropdownMenu.js +6 -1
  407. package/plugins/dropdownMenu/dropdownMenu.mjs +6 -1
  408. package/plugins/exportFile/dataProvider.js +13 -6
  409. package/plugins/exportFile/dataProvider.mjs +12 -5
  410. package/plugins/exportFile/exportFile.js +8 -3
  411. package/plugins/exportFile/exportFile.mjs +6 -1
  412. package/plugins/exportFile/typeFactory.js +14 -1
  413. package/plugins/exportFile/typeFactory.mjs +14 -1
  414. package/plugins/exportFile/types/_base.js +16 -2
  415. package/plugins/exportFile/types/_base.mjs +18 -4
  416. package/plugins/exportFile/types/csv.js +6 -1
  417. package/plugins/exportFile/types/csv.mjs +6 -1
  418. package/plugins/filters/component/_base.js +16 -2
  419. package/plugins/filters/component/_base.mjs +19 -5
  420. package/plugins/filters/component/actionBar.js +10 -4
  421. package/plugins/filters/component/actionBar.mjs +11 -5
  422. package/plugins/filters/component/condition.js +10 -4
  423. package/plugins/filters/component/condition.mjs +11 -5
  424. package/plugins/filters/component/operators.js +8 -3
  425. package/plugins/filters/component/operators.mjs +8 -3
  426. package/plugins/filters/component/value.js +9 -3
  427. package/plugins/filters/component/value.mjs +12 -6
  428. package/plugins/filters/condition/beginsWith.js +1 -1
  429. package/plugins/filters/condition/beginsWith.mjs +1 -1
  430. package/plugins/filters/condition/between.js +1 -1
  431. package/plugins/filters/condition/between.mjs +1 -1
  432. package/plugins/filters/condition/byValue.js +1 -1
  433. package/plugins/filters/condition/byValue.mjs +1 -1
  434. package/plugins/filters/condition/contains.js +1 -1
  435. package/plugins/filters/condition/contains.mjs +1 -1
  436. package/plugins/filters/condition/date/after.js +1 -1
  437. package/plugins/filters/condition/date/after.mjs +1 -1
  438. package/plugins/filters/condition/date/before.js +1 -1
  439. package/plugins/filters/condition/date/before.mjs +1 -1
  440. package/plugins/filters/condition/endsWith.js +1 -1
  441. package/plugins/filters/condition/endsWith.mjs +1 -1
  442. package/plugins/filters/condition/equal.js +1 -1
  443. package/plugins/filters/condition/equal.mjs +1 -1
  444. package/plugins/filters/condition/greaterThan.js +1 -1
  445. package/plugins/filters/condition/greaterThan.mjs +1 -1
  446. package/plugins/filters/condition/greaterThanOrEqual.js +1 -1
  447. package/plugins/filters/condition/greaterThanOrEqual.mjs +1 -1
  448. package/plugins/filters/condition/lessThan.js +1 -1
  449. package/plugins/filters/condition/lessThan.mjs +1 -1
  450. package/plugins/filters/condition/lessThanOrEqual.js +1 -1
  451. package/plugins/filters/condition/lessThanOrEqual.mjs +1 -1
  452. package/plugins/filters/conditionCollection.js +10 -4
  453. package/plugins/filters/conditionCollection.mjs +18 -12
  454. package/plugins/filters/conditionUpdateObserver.js +15 -2
  455. package/plugins/filters/conditionUpdateObserver.mjs +23 -10
  456. package/plugins/filters/constants.js +14 -1
  457. package/plugins/filters/constants.mjs +14 -1
  458. package/plugins/filters/dataFilter.js +16 -2
  459. package/plugins/filters/dataFilter.mjs +19 -5
  460. package/plugins/filters/filters.js +7 -2
  461. package/plugins/filters/filters.mjs +7 -2
  462. package/plugins/filters/ui/_base.js +12 -7
  463. package/plugins/filters/ui/_base.mjs +14 -1
  464. package/plugins/filters/ui/input.js +6 -1
  465. package/plugins/filters/ui/input.mjs +6 -1
  466. package/plugins/filters/ui/link.js +6 -1
  467. package/plugins/filters/ui/link.mjs +6 -1
  468. package/plugins/filters/ui/multipleSelect.js +14 -8
  469. package/plugins/filters/ui/multipleSelect.mjs +6 -1
  470. package/plugins/filters/ui/radioInput.js +6 -1
  471. package/plugins/filters/ui/radioInput.mjs +6 -1
  472. package/plugins/filters/ui/select.js +6 -1
  473. package/plugins/filters/ui/select.mjs +6 -1
  474. package/plugins/formulas/engine/register.mjs +6 -5
  475. package/plugins/formulas/engine/settings.js +12 -1
  476. package/plugins/formulas/engine/settings.mjs +12 -1
  477. package/plugins/formulas/formulas.js +24 -11
  478. package/plugins/formulas/formulas.mjs +24 -11
  479. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +1 -1
  480. package/plugins/hiddenColumns/contextMenuItem/hideColumn.mjs +6 -5
  481. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +5 -4
  482. package/plugins/hiddenColumns/hiddenColumns.js +5 -1
  483. package/plugins/hiddenColumns/hiddenColumns.mjs +5 -1
  484. package/plugins/hiddenRows/contextMenuItem/hideRow.js +1 -1
  485. package/plugins/hiddenRows/contextMenuItem/hideRow.mjs +6 -5
  486. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +5 -4
  487. package/plugins/hiddenRows/hiddenRows.js +5 -1
  488. package/plugins/hiddenRows/hiddenRows.mjs +5 -1
  489. package/plugins/index.mjs +4 -3
  490. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +1 -1
  491. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.mjs +6 -5
  492. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +1 -1
  493. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.mjs +6 -5
  494. package/plugins/manualColumnFreeze/manualColumnFreeze.js +6 -1
  495. package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +6 -1
  496. package/plugins/manualColumnMove/manualColumnMove.js +6 -1
  497. package/plugins/manualColumnMove/manualColumnMove.mjs +6 -1
  498. package/plugins/manualColumnMove/ui/_base.js +14 -1
  499. package/plugins/manualColumnMove/ui/_base.mjs +14 -1
  500. package/plugins/manualColumnMove/ui/backlight.js +6 -1
  501. package/plugins/manualColumnMove/ui/backlight.mjs +6 -1
  502. package/plugins/manualColumnMove/ui/guideline.js +6 -1
  503. package/plugins/manualColumnMove/ui/guideline.mjs +6 -1
  504. package/plugins/manualColumnResize/manualColumnResize.js +6 -1
  505. package/plugins/manualColumnResize/manualColumnResize.mjs +6 -1
  506. package/plugins/manualRowMove/manualRowMove.js +6 -1
  507. package/plugins/manualRowMove/manualRowMove.mjs +6 -1
  508. package/plugins/manualRowMove/ui/_base.js +14 -1
  509. package/plugins/manualRowMove/ui/_base.mjs +14 -1
  510. package/plugins/manualRowMove/ui/backlight.js +6 -1
  511. package/plugins/manualRowMove/ui/backlight.mjs +6 -1
  512. package/plugins/manualRowMove/ui/guideline.js +6 -1
  513. package/plugins/manualRowMove/ui/guideline.mjs +6 -1
  514. package/plugins/manualRowResize/manualRowResize.js +6 -1
  515. package/plugins/manualRowResize/manualRowResize.mjs +6 -1
  516. package/plugins/mergeCells/calculations/autofill.js +13 -6
  517. package/plugins/mergeCells/calculations/autofill.mjs +15 -8
  518. package/plugins/mergeCells/calculations/selection.js +16 -2
  519. package/plugins/mergeCells/calculations/selection.mjs +16 -2
  520. package/plugins/mergeCells/cellCoords.js +16 -2
  521. package/plugins/mergeCells/cellCoords.mjs +21 -7
  522. package/plugins/mergeCells/cellsCollection.js +12 -5
  523. package/plugins/mergeCells/cellsCollection.mjs +14 -7
  524. package/plugins/mergeCells/contextMenuItem/toggleMerge.mjs +5 -4
  525. package/plugins/mergeCells/mergeCells.js +7 -2
  526. package/plugins/mergeCells/mergeCells.mjs +7 -2
  527. package/plugins/multiColumnSorting/multiColumnSorting.js +6 -1
  528. package/plugins/multiColumnSorting/multiColumnSorting.mjs +6 -1
  529. package/plugins/multiColumnSorting/rootComparator.mjs +8 -7
  530. package/plugins/multiColumnSorting/utils.mjs +4 -3
  531. package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +6 -1
  532. package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +6 -1
  533. package/plugins/nestedHeaders/nestedHeaders.js +124 -16
  534. package/plugins/nestedHeaders/nestedHeaders.mjs +131 -23
  535. package/plugins/nestedHeaders/stateManager/headersTree.js +10 -3
  536. package/plugins/nestedHeaders/stateManager/headersTree.mjs +10 -3
  537. package/plugins/nestedHeaders/stateManager/index.js +34 -14
  538. package/plugins/nestedHeaders/stateManager/index.mjs +67 -47
  539. package/plugins/nestedHeaders/stateManager/matrixGenerator.mjs +33 -31
  540. package/plugins/nestedHeaders/stateManager/nodeModifiers/collapse.mjs +18 -17
  541. package/plugins/nestedHeaders/stateManager/nodeModifiers/expand.mjs +17 -16
  542. package/plugins/nestedHeaders/stateManager/nodeModifiers/hideColumn.mjs +7 -6
  543. package/plugins/nestedHeaders/stateManager/nodeModifiers/index.mjs +2 -1
  544. package/plugins/nestedHeaders/stateManager/nodeModifiers/showColumn.mjs +7 -6
  545. package/plugins/nestedHeaders/stateManager/settingsNormalizer.mjs +41 -39
  546. package/plugins/nestedHeaders/stateManager/sourceSettings.js +11 -3
  547. package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +23 -14
  548. package/plugins/nestedHeaders/utils/ghostTable.js +17 -3
  549. package/plugins/nestedHeaders/utils/ghostTable.mjs +24 -10
  550. package/plugins/nestedRows/data/dataManager.js +10 -4
  551. package/plugins/nestedRows/data/dataManager.mjs +12 -6
  552. package/plugins/nestedRows/nestedRows.js +6 -1
  553. package/plugins/nestedRows/nestedRows.mjs +6 -1
  554. package/plugins/nestedRows/ui/_base.js +16 -2
  555. package/plugins/nestedRows/ui/_base.mjs +16 -2
  556. package/plugins/nestedRows/ui/collapsing.js +8 -2
  557. package/plugins/nestedRows/ui/collapsing.mjs +14 -8
  558. package/plugins/nestedRows/ui/contextMenu.js +7 -2
  559. package/plugins/nestedRows/ui/contextMenu.mjs +6 -1
  560. package/plugins/nestedRows/ui/headers.js +8 -2
  561. package/plugins/nestedRows/ui/headers.mjs +14 -8
  562. package/plugins/nestedRows/utils/rowMoveController.js +11 -4
  563. package/plugins/nestedRows/utils/rowMoveController.mjs +25 -18
  564. package/plugins/persistentState/persistentState.js +6 -1
  565. package/plugins/persistentState/persistentState.mjs +6 -1
  566. package/plugins/persistentState/storage.js +16 -2
  567. package/plugins/persistentState/storage.mjs +19 -5
  568. package/plugins/registry.js +1 -1
  569. package/plugins/registry.mjs +3 -2
  570. package/plugins/search/search.js +6 -1
  571. package/plugins/search/search.mjs +6 -1
  572. package/plugins/touchScroll/touchScroll.js +6 -1
  573. package/plugins/touchScroll/touchScroll.mjs +6 -1
  574. package/plugins/trimRows/trimRows.js +5 -1
  575. package/plugins/trimRows/trimRows.mjs +5 -1
  576. package/plugins/undoRedo/undoRedo.js +50 -32
  577. package/plugins/undoRedo/undoRedo.mjs +50 -32
  578. package/registry.mjs +2 -1
  579. package/renderers/baseRenderer/baseRenderer.mjs +2 -1
  580. package/renderers/index.mjs +4 -3
  581. package/selection/highlight/highlight.js +10 -3
  582. package/selection/highlight/highlight.mjs +24 -17
  583. package/selection/highlight/types/activeHeader.js +13 -2
  584. package/selection/highlight/types/activeHeader.mjs +19 -7
  585. package/selection/highlight/types/area.js +13 -2
  586. package/selection/highlight/types/area.mjs +22 -10
  587. package/selection/highlight/types/cell.js +13 -2
  588. package/selection/highlight/types/cell.mjs +22 -10
  589. package/selection/highlight/types/customSelection.js +13 -2
  590. package/selection/highlight/types/customSelection.mjs +23 -11
  591. package/selection/highlight/types/fill.js +14 -3
  592. package/selection/highlight/types/fill.mjs +22 -10
  593. package/selection/highlight/types/header.js +13 -2
  594. package/selection/highlight/types/header.mjs +24 -12
  595. package/selection/highlight/types/index.js +14 -3
  596. package/selection/highlight/types/index.mjs +14 -3
  597. package/selection/highlight/visualSelection.js +11 -6
  598. package/selection/highlight/visualSelection.mjs +11 -6
  599. package/selection/mouseEventHandler.mjs +14 -13
  600. package/selection/range.js +9 -2
  601. package/selection/range.mjs +9 -2
  602. package/selection/selection.js +13 -6
  603. package/selection/selection.mjs +21 -14
  604. package/selection/transformation.js +16 -2
  605. package/selection/transformation.mjs +24 -10
  606. package/selection/utils.js +1 -1
  607. package/selection/utils.mjs +1 -1
  608. package/shortcuts/context.js +1 -1
  609. package/shortcuts/context.mjs +1 -1
  610. package/shortcuts/keyObserver.js +8 -4
  611. package/shortcuts/keyObserver.mjs +8 -4
  612. package/shortcuts/manager.js +1 -1
  613. package/shortcuts/manager.mjs +1 -1
  614. package/tableView.js +147 -68
  615. package/tableView.mjs +147 -68
  616. package/translations/changesObservable/observable.js +12 -2
  617. package/translations/changesObservable/observable.mjs +19 -9
  618. package/translations/changesObservable/observer.js +12 -2
  619. package/translations/changesObservable/observer.mjs +17 -7
  620. package/translations/indexMapper.js +12 -6
  621. package/translations/indexMapper.mjs +17 -11
  622. package/translations/mapCollections/aggregatedCollection.js +8 -2
  623. package/translations/mapCollections/aggregatedCollection.mjs +11 -5
  624. package/translations/mapCollections/mapCollection.js +10 -1
  625. package/translations/mapCollections/mapCollection.mjs +10 -1
  626. package/translations/maps/hidingMap.js +8 -2
  627. package/translations/maps/hidingMap.mjs +13 -7
  628. package/translations/maps/indexMap.js +16 -2
  629. package/translations/maps/indexMap.mjs +20 -6
  630. package/translations/maps/indexesSequence.js +8 -2
  631. package/translations/maps/indexesSequence.mjs +14 -8
  632. package/translations/maps/linkedPhysicalIndexToValueMap.js +12 -6
  633. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +18 -12
  634. package/translations/maps/physicalIndexToValueMap.js +8 -2
  635. package/translations/maps/physicalIndexToValueMap.mjs +14 -8
  636. package/translations/maps/trimmingMap.js +8 -2
  637. package/translations/maps/trimmingMap.mjs +13 -7
  638. package/translations/maps/utils/actionsOnIndexes.mjs +9 -8
  639. package/translations/maps/utils/indexesSequence.mjs +10 -9
  640. package/translations/maps/utils/physicallyIndexed.mjs +11 -10
  641. package/utils/dataStructures/linkedList.js +21 -7
  642. package/utils/dataStructures/linkedList.mjs +21 -7
  643. package/utils/dataStructures/priorityMap.js +1 -1
  644. package/utils/dataStructures/priorityMap.mjs +1 -1
  645. package/utils/dataStructures/queue.js +16 -2
  646. package/utils/dataStructures/queue.mjs +16 -2
  647. package/utils/dataStructures/stack.js +16 -2
  648. package/utils/dataStructures/stack.mjs +16 -2
  649. package/utils/dataStructures/tree.js +8 -2
  650. package/utils/dataStructures/tree.mjs +8 -2
  651. package/utils/dataStructures/uniqueMap.js +1 -1
  652. package/utils/dataStructures/uniqueMap.mjs +1 -1
  653. package/utils/ghostTable.js +12 -5
  654. package/utils/ghostTable.mjs +12 -5
  655. package/utils/interval.js +23 -8
  656. package/utils/interval.mjs +18 -4
  657. package/utils/samplesGenerator.js +13 -3
  658. package/utils/samplesGenerator.mjs +15 -5
  659. package/validators/index.mjs +4 -3
package/core.mjs CHANGED
@@ -8,7 +8,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" =
8
8
  function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
9
9
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
10
10
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
11
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
11
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
12
12
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
13
13
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
14
14
  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,7 +39,7 @@ import "core-js/modules/web.dom-collections.for-each.js";
39
39
  import "core-js/modules/web.timers.js";
40
40
  import "core-js/modules/web.immediate.js";
41
41
  import "core-js/modules/es.map.js";
42
- import { addClass, empty, removeClass } from "./helpers/dom/element.mjs";
42
+ import { addClass, empty, observeVisibilityChangeOnce, removeClass } from "./helpers/dom/element.mjs";
43
43
  import { isFunction } from "./helpers/function.mjs";
44
44
  import { isDefined, isUndefined, isRegExp, _injectProductInfo, isEmpty } from "./helpers/mixed.mjs";
45
45
  import { isMobileBrowser, isIpadOS } from "./helpers/browser.mjs";
@@ -52,12 +52,13 @@ import { arrayMap, arrayEach, arrayReduce, getDifferenceOfArrays, stringToArray,
52
52
  import { instanceToHTML } from "./utils/parseTable.mjs";
53
53
  import { getPlugin, getPluginsNames } from "./plugins/registry.mjs";
54
54
  import { getRenderer } from "./renderers/registry.mjs";
55
+ import { getEditor } from "./editors/registry.mjs";
55
56
  import { getValidator } from "./validators/registry.mjs";
56
57
  import { randomString, toUpperCaseFirst } from "./helpers/string.mjs";
57
58
  import { rangeEach, rangeEachReverse, isNumericLike } from "./helpers/number.mjs";
58
59
  import TableView from "./tableView.mjs";
59
60
  import DataSource from "./dataMap/dataSource.mjs";
60
- import { cellMethodLookupFactory, spreadsheetColumnLabel } from "./helpers/data.mjs";
61
+ import { spreadsheetColumnLabel } from "./helpers/data.mjs";
61
62
  import { IndexMapper } from "./translations/index.mjs";
62
63
  import { registerAsRootInstance, hasValidParameter, isRootInstance } from "./utils/rootInstance.mjs";
63
64
  import { ViewportColumnsCalculator } from "./3rdparty/walkontable/src/index.mjs";
@@ -80,37 +81,41 @@ var deprecationWarns = new Set();
80
81
  * @class Core
81
82
  * @description
82
83
  *
83
- * The `Handsontable` class to which we refer as to `Core`, allows you to modify the grid's behavior by using one of the available public methods.
84
+ * The `Handsontable` class (known as the `Core`) lets you modify the grid's behavior by using Handsontable's public API methods.
85
+ *
86
+ * ::: only-for react
87
+ * To use these methods, associate a Handsontable instance with your instance
88
+ * of the [`HotTable` component](@/guides/getting-started/installation.md#use-the-hottable-component),
89
+ * by using React's `ref` feature (read more on the [Instance methods](@/guides/getting-started/react-methods.md) page).
90
+ * :::
84
91
  *
85
92
  * ## How to call a method
86
93
  *
87
94
  * ::: only-for javascript
88
95
  * ```js
89
- * // First, let's construct Handsontable
96
+ * // create a Handsontable instance
90
97
  * const hot = new Handsontable(document.getElementById('example'), options);
91
98
  *
92
- * // Then, let's use the setDataAtCell method
99
+ * // call a method
93
100
  * hot.setDataAtCell(0, 0, 'new value');
94
101
  * ```
95
102
  * :::
96
103
  *
97
104
  * ::: only-for react
98
- * ```jsx
99
- * const hotRef = useRef(null);
105
+ * ```jsx{3,7,13}
106
+ * import { useRef } from 'react';
100
107
  *
101
- * ...
108
+ * const hotTableComponent = useRef(null);
102
109
  *
103
- * // First, let's contruct Handsontable
104
110
  * <HotTable
105
- * ref={hotRef}
111
+ * // associate your `HotTable` component with a Handsontable instance
112
+ * ref={hotTableComponent}
106
113
  * settings={options}
107
114
  * />
108
115
  *
109
- * ...
110
- *
111
- * const hot = hotRef.current.hotInstance;
112
- * // Then, let's use the setDataAtCell method
113
- * hot.setDataAtCell(0, 0, 'new value');
116
+ * // access the Handsontable instance, under the `.current.hotInstance` property
117
+ * // call a method
118
+ * hotTableComponent.current.hotInstance.setDataAtCell(0, 0, 'new value');
114
119
  * ```
115
120
  * :::
116
121
  *
@@ -441,7 +446,8 @@ export default function Core(rootElement, userSettings) {
441
446
  * @param {number} [amount=1] Amount of rows or columns to remove.
442
447
  * @param {string} [source] Optional. Source of hook runner.
443
448
  * @param {boolean} [keepEmptyRows] Optional. Flag for preventing deletion of empty rows.
444
- */alter: function alter(action, index) {
449
+ */
450
+ alter: function alter(action, index) {
445
451
  var _index, _index2;
446
452
  var amount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
447
453
  var source = arguments.length > 3 ? arguments[3] : undefined;
@@ -516,7 +522,6 @@ export default function Core(rootElement, userSettings) {
516
522
  rowDelta = _datamap$createRow.delta,
517
523
  startRowPhysicalIndex = _datamap$createRow.startPhysicalIndex;
518
524
  if (rowDelta) {
519
- metaManager.createRow(startRowPhysicalIndex, amount);
520
525
  var currentSelectedRange = selection.selectedRange.current();
521
526
  var currentFromRange = currentSelectedRange === null || currentSelectedRange === void 0 ? void 0 : currentSelectedRange.from;
522
527
  var currentFromRow = currentFromRange === null || currentFromRange === void 0 ? void 0 : currentFromRange.row;
@@ -572,7 +577,6 @@ export default function Core(rootElement, userSettings) {
572
577
  colDelta = _datamap$createCol.delta,
573
578
  startColumnPhysicalIndex = _datamap$createCol.startPhysicalIndex;
574
579
  if (colDelta) {
575
- metaManager.createColumn(startColumnPhysicalIndex, amount);
576
580
  if (Array.isArray(tableMeta.colHeaders)) {
577
581
  var spliceArray = [instance.toVisualColumn(startColumnPhysicalIndex), 0];
578
582
  spliceArray.length += colDelta; // inserts empty (undefined) elements at the end of an array
@@ -635,7 +639,6 @@ export default function Core(rootElement, userSettings) {
635
639
  if (!wasRemoved) {
636
640
  return;
637
641
  }
638
- metaManager.removeRow(instance.toPhysicalRow(calcIndex), groupAmount);
639
642
  var totalRows = instance.countRows();
640
643
  var fixedRowsTop = tableMeta.fixedRowsTop;
641
644
  if (fixedRowsTop >= calcIndex + 1) {
@@ -681,7 +684,6 @@ export default function Core(rootElement, userSettings) {
681
684
  if (!wasRemoved) {
682
685
  return;
683
686
  }
684
- metaManager.removeColumn(physicalColumnIndex, groupAmount);
685
687
  var fixedColumnsStart = tableMeta.fixedColumnsStart;
686
688
  if (fixedColumnsStart >= calcIndex + 1) {
687
689
  tableMeta.fixedColumnsStart -= Math.min(groupAmount, fixedColumnsStart - calcIndex);
@@ -715,7 +717,8 @@ export default function Core(rootElement, userSettings) {
715
717
  * Makes sure there are empty rows at the bottom of the table.
716
718
  *
717
719
  * @private
718
- */adjustRowsAndCols: function adjustRowsAndCols() {
720
+ */
721
+ adjustRowsAndCols: function adjustRowsAndCols() {
719
722
  var minRows = tableMeta.minRows;
720
723
  var minSpareRows = tableMeta.minSpareRows;
721
724
  var minCols = tableMeta.minCols;
@@ -841,7 +844,8 @@ export default function Core(rootElement, userSettings) {
841
844
  * @param {Array} deltas The deltas array. A difference between values of adjacent cells.
842
845
  * Useful **only** when the type of handled cells is `numeric`.
843
846
  * @returns {object|undefined} Ending td in pasted area (only if any cell was changed).
844
- */populateFromArray: function populateFromArray(start, input, end, source, method, direction, deltas) {
847
+ */
848
+ populateFromArray: function populateFromArray(start, input, end, source, method, direction, deltas) {
845
849
  // TODO: either remove or implement the `direction` argument. Currently it's not working at all.
846
850
  var r;
847
851
  var rlen;
@@ -1016,8 +1020,8 @@ export default function Core(rootElement, userSettings) {
1016
1020
  var orgValueSchema = duckSchema(Array.isArray(orgValue) ? orgValue : orgValue[0] || orgValue);
1017
1021
  var valueSchema = duckSchema(Array.isArray(value) ? value : value[0] || value);
1018
1022
 
1019
- /* eslint-disable max-depth */
1020
- if (isObjectEqual(orgValueSchema, valueSchema)) {
1023
+ // Allow overwriting values with the same object-based schema or any array-based schema.
1024
+ if (isObjectEqual(orgValueSchema, valueSchema) || Array.isArray(orgValueSchema) && Array.isArray(valueSchema)) {
1021
1025
  value = deepClone(value);
1022
1026
  } else {
1023
1027
  pushData = false;
@@ -1101,6 +1105,16 @@ export default function Core(rootElement, userSettings) {
1101
1105
  instance.runHooks('init');
1102
1106
  this.forceFullRender = true; // used when data was changed
1103
1107
  this.view.render();
1108
+
1109
+ // Run the logic only if it's the table's initialization and the root element is not visible.
1110
+ if (!!firstRun && instance.rootElement.offsetParent === null) {
1111
+ observeVisibilityChangeOnce(instance.rootElement, function () {
1112
+ // Update the spreader size cache before rendering.
1113
+ instance.view._wt.wtOverlays.updateLastSpreaderSize();
1114
+ instance.render();
1115
+ instance.view.adjustElementsSize();
1116
+ });
1117
+ }
1104
1118
  if (_typeof(firstRun) === 'object') {
1105
1119
  instance.runHooks('afterChange', firstRun[0], firstRun[1]);
1106
1120
  firstRun = false;
@@ -1254,9 +1268,7 @@ export default function Core(rootElement, userSettings) {
1254
1268
  source: source
1255
1269
  }),
1256
1270
  numberOfCreatedRows = _datamap$createRow2.delta;
1257
- if (numberOfCreatedRows >= 1) {
1258
- metaManager.createRow(null, numberOfCreatedRows);
1259
- } else {
1271
+ if (numberOfCreatedRows === 0) {
1260
1272
  skipThisChange = true;
1261
1273
  break;
1262
1274
  }
@@ -1268,9 +1280,7 @@ export default function Core(rootElement, userSettings) {
1268
1280
  source: source
1269
1281
  }),
1270
1282
  numberOfCreatedColumns = _datamap$createCol2.delta;
1271
- if (numberOfCreatedColumns >= 1) {
1272
- metaManager.createColumn(null, numberOfCreatedColumns);
1273
- } else {
1283
+ if (numberOfCreatedColumns === 0) {
1274
1284
  skipThisChange = true;
1275
1285
  break;
1276
1286
  }
@@ -2095,6 +2105,7 @@ export default function Core(rootElement, userSettings) {
2095
2105
  dataSource: dataSource,
2096
2106
  internalSource: 'updateData',
2097
2107
  source: source,
2108
+ metaManager: metaManager,
2098
2109
  firstRun: firstRun
2099
2110
  });
2100
2111
  };
@@ -2137,6 +2148,7 @@ export default function Core(rootElement, userSettings) {
2137
2148
  dataSource: dataSource,
2138
2149
  internalSource: 'loadData',
2139
2150
  source: source,
2151
+ metaManager: metaManager,
2140
2152
  firstRun: firstRun
2141
2153
  });
2142
2154
  };
@@ -3119,16 +3131,15 @@ export default function Core(rootElement, userSettings) {
3119
3131
  this.isColumnModificationAllowed = function () {
3120
3132
  return !(instance.dataType === 'object' || tableMeta.columns);
3121
3133
  };
3122
- var rendererLookup = cellMethodLookupFactory('renderer');
3123
3134
 
3124
3135
  /**
3125
3136
  * Returns the cell renderer function by given `row` and `column` arguments.
3126
3137
  *
3127
3138
  * @memberof Core#
3128
3139
  * @function getCellRenderer
3129
- * @param {number|object} row Visual row index or cell meta object (see {@link Core#getCellMeta}).
3140
+ * @param {number|object} rowOrMeta Visual row index or cell meta object (see {@link Core#getCellMeta}).
3130
3141
  * @param {number} column Visual column index.
3131
- * @returns {Function} The renderer function.
3142
+ * @returns {Function} Returns the renderer function.
3132
3143
  * @example
3133
3144
  * ```js
3134
3145
  * // Get cell renderer using `row` and `column` coordinates.
@@ -3137,8 +3148,12 @@ export default function Core(rootElement, userSettings) {
3137
3148
  * hot.getCellRenderer(hot.getCellMeta(1, 1));
3138
3149
  * ```
3139
3150
  */
3140
- this.getCellRenderer = function (row, column) {
3141
- return getRenderer(rendererLookup.call(this, row, column));
3151
+ this.getCellRenderer = function (rowOrMeta, column) {
3152
+ var cellRenderer = typeof rowOrMeta === 'number' ? instance.getCellMeta(rowOrMeta, column).renderer : rowOrMeta.renderer;
3153
+ if (typeof cellRenderer === 'string') {
3154
+ return getRenderer(cellRenderer);
3155
+ }
3156
+ return isUndefined(cellRenderer) ? getRenderer('text') : cellRenderer;
3142
3157
  };
3143
3158
 
3144
3159
  /**
@@ -3146,9 +3161,9 @@ export default function Core(rootElement, userSettings) {
3146
3161
  *
3147
3162
  * @memberof Core#
3148
3163
  * @function getCellEditor
3149
- * @param {number} row Visual row index or cell meta object (see {@link Core#getCellMeta}).
3164
+ * @param {number} rowOrMeta Visual row index or cell meta object (see {@link Core#getCellMeta}).
3150
3165
  * @param {number} column Visual column index.
3151
- * @returns {Function} The editor class.
3166
+ * @returns {Function|boolean} Returns the editor class or `false` is cell editor is disabled.
3152
3167
  * @example
3153
3168
  * ```js
3154
3169
  * // Get cell editor class using `row` and `column` coordinates.
@@ -3157,31 +3172,36 @@ export default function Core(rootElement, userSettings) {
3157
3172
  * hot.getCellEditor(hot.getCellMeta(1, 1));
3158
3173
  * ```
3159
3174
  */
3160
- this.getCellEditor = cellMethodLookupFactory('editor');
3161
- var validatorLookup = cellMethodLookupFactory('validator');
3175
+ this.getCellEditor = function (rowOrMeta, column) {
3176
+ var cellEditor = typeof rowOrMeta === 'number' ? instance.getCellMeta(rowOrMeta, column).editor : rowOrMeta.editor;
3177
+ if (typeof cellEditor === 'string') {
3178
+ return getEditor(cellEditor);
3179
+ }
3180
+ return isUndefined(cellEditor) ? getEditor('text') : cellEditor;
3181
+ };
3162
3182
 
3163
3183
  /**
3164
3184
  * Returns the cell validator by `row` and `column`.
3165
3185
  *
3166
3186
  * @memberof Core#
3167
3187
  * @function getCellValidator
3168
- * @param {number|object} row Visual row index or cell meta object (see {@link Core#getCellMeta}).
3188
+ * @param {number|object} rowOrMeta Visual row index or cell meta object (see {@link Core#getCellMeta}).
3169
3189
  * @param {number} column Visual column index.
3170
3190
  * @returns {Function|RegExp|undefined} The validator function.
3171
3191
  * @example
3172
3192
  * ```js
3173
- * // Get cell valiator using `row` and `column` coordinates.
3193
+ * // Get cell validator using `row` and `column` coordinates.
3174
3194
  * hot.getCellValidator(1, 1);
3175
- * // Get cell valiator using cell meta object.
3195
+ * // Get cell validator using cell meta object.
3176
3196
  * hot.getCellValidator(hot.getCellMeta(1, 1));
3177
3197
  * ```
3178
3198
  */
3179
- this.getCellValidator = function (row, column) {
3180
- var validator = validatorLookup.call(this, row, column);
3181
- if (typeof validator === 'string') {
3182
- validator = getValidator(validator);
3199
+ this.getCellValidator = function (rowOrMeta, column) {
3200
+ var cellValidator = typeof rowOrMeta === 'number' ? instance.getCellMeta(rowOrMeta, column).validator : rowOrMeta.validator;
3201
+ if (typeof cellValidator === 'string') {
3202
+ return getValidator(cellValidator);
3183
3203
  }
3184
- return validator;
3204
+ return cellValidator;
3185
3205
  };
3186
3206
 
3187
3207
  /**
@@ -3368,54 +3388,84 @@ export default function Core(rootElement, userSettings) {
3368
3388
  };
3369
3389
 
3370
3390
  /**
3371
- * Returns an array of column headers (in string format, if they are enabled). If param `column` is given, it
3372
- * returns the header at the given column.
3391
+ * Gets the values of column headers (if column headers are [enabled](@/api/options.md#colheaders)).
3392
+ *
3393
+ * To get an array with the values of all
3394
+ * [bottom-most](@/guides/cell-features/clipboard.md#copy-with-headers) column headers,
3395
+ * call `getColHeader()` with no arguments.
3396
+ *
3397
+ * To get the value of the bottom-most header of a specific column, use the `column` parameter.
3398
+ *
3399
+ * To get the value of a [specific-level](@/guides/columns/column-groups.md) header
3400
+ * of a specific column, use the `column` and `headerLevel` parameters.
3401
+ *
3402
+ * Read more:
3403
+ * - [Guides: Column groups](@/guides/columns/column-groups.md)
3404
+ * - [Options: `colHeaders`](@/api/options.md#colheaders)
3405
+ * - [Guides: Copy with headers](@/guides/cell-features/clipboard.md#copy-with-headers)
3406
+ *
3407
+ * ```js
3408
+ * // get the contents of all bottom-most column headers
3409
+ * hot.getColHeader();
3410
+ *
3411
+ * // get the contents of the bottom-most header of a specific column
3412
+ * hot.getColHeader(5);
3413
+ *
3414
+ * // get the contents of a specific column header at a specific level
3415
+ * hot.getColHeader(5, -2);
3416
+ * ```
3373
3417
  *
3374
3418
  * @memberof Core#
3375
3419
  * @function getColHeader
3376
- * @param {number} [column] Visual column index.
3420
+ * @param {number} [column] A visual column index.
3421
+ * @param {number} [headerLevel=-1] (Since 12.3.0) Header level index. Accepts positive (0 to n)
3422
+ * and negative (-1 to -n) values. For positive values, 0 points to the
3423
+ * topmost header. For negative values, -1 points to the bottom-most
3424
+ * header (the header closest to the cells).
3377
3425
  * @fires Hooks#modifyColHeader
3378
- * @returns {Array|string|number} The column header(s).
3426
+ * @fires Hooks#modifyColumnHeaderValue
3427
+ * @returns {Array|string|number} Column header values.
3379
3428
  */
3380
3429
  this.getColHeader = function (column) {
3430
+ var headerLevel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;
3381
3431
  var columnIndex = instance.runHooks('modifyColHeader', column);
3382
- var result = tableMeta.colHeaders;
3383
3432
  if (columnIndex === void 0) {
3384
3433
  var out = [];
3385
3434
  var ilen = instance.countCols();
3386
3435
  for (var i = 0; i < ilen; i++) {
3387
3436
  out.push(instance.getColHeader(i));
3388
3437
  }
3389
- result = out;
3390
- } else {
3391
- var translateVisualIndexToColumns = function translateVisualIndexToColumns(visualColumnIndex) {
3392
- var arr = [];
3393
- var columnsLen = instance.countCols();
3394
- var index = 0;
3395
- for (; index < columnsLen; index++) {
3396
- if (isFunction(tableMeta.columns) && tableMeta.columns(index)) {
3397
- arr.push(index);
3398
- }
3438
+ return out;
3439
+ }
3440
+ var result = tableMeta.colHeaders;
3441
+ var translateVisualIndexToColumns = function translateVisualIndexToColumns(visualColumnIndex) {
3442
+ var arr = [];
3443
+ var columnsLen = instance.countCols();
3444
+ var index = 0;
3445
+ for (; index < columnsLen; index++) {
3446
+ if (isFunction(tableMeta.columns) && tableMeta.columns(index)) {
3447
+ arr.push(index);
3399
3448
  }
3400
- return arr[visualColumnIndex];
3401
- };
3402
- var physicalColumn = instance.toPhysicalColumn(columnIndex);
3403
- var prop = translateVisualIndexToColumns(physicalColumn);
3404
- if (tableMeta.colHeaders === false) {
3405
- result = null;
3406
- } else if (tableMeta.columns && isFunction(tableMeta.columns) && tableMeta.columns(prop) && tableMeta.columns(prop).title) {
3407
- result = tableMeta.columns(prop).title;
3408
- } else if (tableMeta.columns && tableMeta.columns[physicalColumn] && tableMeta.columns[physicalColumn].title) {
3409
- result = tableMeta.columns[physicalColumn].title;
3410
- } else if (Array.isArray(tableMeta.colHeaders) && tableMeta.colHeaders[physicalColumn] !== void 0) {
3411
- result = tableMeta.colHeaders[physicalColumn];
3412
- } else if (isFunction(tableMeta.colHeaders)) {
3413
- result = tableMeta.colHeaders(physicalColumn);
3414
- } else if (tableMeta.colHeaders && typeof tableMeta.colHeaders !== 'string' && typeof tableMeta.colHeaders !== 'number') {
3415
- result = spreadsheetColumnLabel(columnIndex); // see #1458
3416
3449
  }
3417
- }
3418
-
3450
+ return arr[visualColumnIndex];
3451
+ };
3452
+ var physicalColumn = instance.toPhysicalColumn(columnIndex);
3453
+ var prop = translateVisualIndexToColumns(physicalColumn);
3454
+ if (tableMeta.colHeaders === false) {
3455
+ result = null;
3456
+ } else if (tableMeta.columns && isFunction(tableMeta.columns) && tableMeta.columns(prop) && tableMeta.columns(prop).title) {
3457
+ result = tableMeta.columns(prop).title;
3458
+ } else if (tableMeta.columns && tableMeta.columns[physicalColumn] && tableMeta.columns[physicalColumn].title) {
3459
+ result = tableMeta.columns[physicalColumn].title;
3460
+ } else if (Array.isArray(tableMeta.colHeaders) && tableMeta.colHeaders[physicalColumn] !== void 0) {
3461
+ result = tableMeta.colHeaders[physicalColumn];
3462
+ } else if (isFunction(tableMeta.colHeaders)) {
3463
+ result = tableMeta.colHeaders(physicalColumn);
3464
+ } else if (tableMeta.colHeaders && typeof tableMeta.colHeaders !== 'string' && typeof tableMeta.colHeaders !== 'number') {
3465
+ result = spreadsheetColumnLabel(columnIndex); // see #1458
3466
+ }
3467
+
3468
+ result = instance.runHooks('modifyColumnHeaderValue', result, column, headerLevel);
3419
3469
  return result;
3420
3470
  };
3421
3471
 
@@ -3513,14 +3563,29 @@ export default function Core(rootElement, userSettings) {
3513
3563
  };
3514
3564
 
3515
3565
  /**
3516
- * Returns the row height.
3566
+ * Returns a row's height, as recognized by Handsontable.
3517
3567
  *
3518
- * Mind that this method is different from the [AutoRowSize](@/api/autoRowSize.md) plugin's [`getRowHeight()`](@/api/autoRowSize.md#getrowheight) method.
3568
+ * Depending on your configuration, the method returns (in order of priority):
3569
+ * 1. The row height set by the [`ManualRowResize`](@/api/manualRowResize.md) plugin
3570
+ * (if the plugin is enabled).
3571
+ * 2. The row height set by the [`rowHeights`](@/api/options.md#rowheights) configuration option
3572
+ * (if the option is set).
3573
+ * 3. The row height as measured in the DOM by the [`AutoRowSize`](@/api/autoRowSize.md) plugin
3574
+ * (if the plugin is enabled).
3575
+ * 4. `undefined`, if neither [`ManualRowResize`](@/api/manualRowResize.md),
3576
+ * nor [`rowHeights`](@/api/options.md#rowheights),
3577
+ * nor [`AutoRowSize`](@/api/autoRowSize.md) is used.
3578
+ *
3579
+ * The height returned includes 1 px of the row's bottom border.
3580
+ *
3581
+ * Mind that this method is different from the
3582
+ * [`getRowHeight()`](@/api/autoRowSize.md#getrowheight) method
3583
+ * of the [`AutoRowSize`](@/api/autoRowSize.md) plugin.
3519
3584
  *
3520
3585
  * @memberof Core#
3521
3586
  * @function getRowHeight
3522
- * @param {number} row Visual row index.
3523
- * @returns {number} The given row's height.
3587
+ * @param {number} row A visual row index.
3588
+ * @returns {number|undefined} The height of the specified row, in pixels.
3524
3589
  * @fires Hooks#modifyRowHeight
3525
3590
  */
3526
3591
  this.getRowHeight = function (row) {
@@ -3692,35 +3757,48 @@ export default function Core(rootElement, userSettings) {
3692
3757
  };
3693
3758
 
3694
3759
  /**
3695
- * Select cell specified by `row` and `column` values or a range of cells finishing at `endRow`, `endCol`. If the table
3696
- * was configured to support data column properties that properties can be used to making a selection.
3760
+ * Select a single cell, or a single range of adjacent cells.
3761
+ *
3762
+ * To select a cell, pass its visual row and column indexes, for example: `selectCell(2, 4)`.
3697
3763
  *
3698
- * By default, viewport will be scrolled to the selection. After the `selectCell` method had finished, the instance
3699
- * will be listening to keyboard input on the document.
3764
+ * To select a range, pass the visual indexes of the first and last cell in the range, for example: `selectCell(2, 4, 3, 5)`.
3765
+ *
3766
+ * If your columns have properties, you can pass those properties' values instead of column indexes, for example: `selectCell(2, 'first_name')`.
3767
+ *
3768
+ * By default, `selectCell()` also:
3769
+ * - Scrolls the viewport to the newly-selected cells.
3770
+ * - Switches the keyboard focus to Handsontable (by calling Handsontable's [`listen()`](#listen) method).
3700
3771
  *
3701
3772
  * @example
3702
3773
  * ```js
3703
3774
  * // select a single cell
3704
3775
  * hot.selectCell(2, 4);
3705
- * // select a single cell using column property
3706
- * hot.selectCell(2, 'address');
3776
+ *
3707
3777
  * // select a range of cells
3708
3778
  * hot.selectCell(2, 4, 3, 5);
3709
- * // select a range of cells using column properties
3710
- * hot.selectCell(2, 'address', 3, 'phone_number');
3711
- * // select a range of cells without scrolling to them
3712
- * hot.selectCell(2, 'address', 3, 'phone_number', false);
3779
+ *
3780
+ * // select a single cell, using a column property
3781
+ * hot.selectCell(2, 'first_name');
3782
+ *
3783
+ * // select a range of cells, using column properties
3784
+ * hot.selectCell(2, 'first_name', 3, 'last_name');
3785
+ *
3786
+ * // select a range of cells, without scrolling to them
3787
+ * hot.selectCell(2, 4, 3, 5, false);
3788
+ *
3789
+ * // select a range of cells, without switching the keyboard focus to Handsontable
3790
+ * hot.selectCell(2, 4, 3, 5, null, false);
3713
3791
  * ```
3714
3792
  *
3715
3793
  * @memberof Core#
3716
3794
  * @function selectCell
3717
- * @param {number} row Visual row index.
3718
- * @param {number|string} column Visual column index or column property.
3719
- * @param {number} [endRow] Visual end row index (if selecting a range).
3720
- * @param {number|string} [endColumn] Visual end column index or column property (if selecting a range).
3721
- * @param {boolean} [scrollToCell=true] If `true`, the viewport will be scrolled to the selection.
3722
- * @param {boolean} [changeListener=true] If `false`, Handsontable will not change keyboard events listener to himself.
3723
- * @returns {boolean} `true` if selection was successful, `false` otherwise.
3795
+ * @param {number} row A visual row index.
3796
+ * @param {number|string} column A visual column index (`number`), or a column property's value (`string`).
3797
+ * @param {number} [endRow] If selecting a range: the visual row index of the last cell in the range.
3798
+ * @param {number|string} [endColumn] If selecting a range: the visual column index (or a column property's value) of the last cell in the range.
3799
+ * @param {boolean} [scrollToCell=true] `true`: scroll the viewport to the newly-selected cells. `false`: keep the previous viewport.
3800
+ * @param {boolean} [changeListener=true] `true`: switch the keyboard focus to Handsontable. `false`: keep the previous keyboard focus.
3801
+ * @returns {boolean} `true`: the selection was successful, `false`: the selection failed.
3724
3802
  */
3725
3803
  this.selectCell = function (row, column, endRow, endColumn) {
3726
3804
  var scrollToCell = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
@@ -3732,24 +3810,48 @@ export default function Core(rootElement, userSettings) {
3732
3810
  };
3733
3811
 
3734
3812
  /**
3735
- * Make multiple, non-contiguous selection specified by `row` and `column` values or a range of cells
3736
- * finishing at `endRow`, `endColumn`. The method supports two input formats which are the same as that
3737
- * produces by `getSelected` and `getSelectedRange` methods.
3813
+ * Select multiple cells or ranges of cells, adjacent or non-adjacent.
3814
+ *
3815
+ * You can pass one of the below:
3816
+ * - An array of arrays (which matches the output of Handsontable's [`getSelected()`](#getselected) method).
3817
+ * - An array of [`CellRange`](@/api/cellRange.md) objects (which matches the output of Handsontable's [`getSelectedRange()`](#getselectedrange) method).
3818
+ *
3819
+ * To select multiple cells, pass the visual row and column indexes of each cell, for example: `hot.selectCells([[1, 1], [5, 5]])`.
3820
+ *
3821
+ * To select multiple ranges, pass the visual indexes of the first and last cell in each range, for example: `hot.selectCells([[1, 1, 2, 2], [6, 2, 0, 2]])`.
3738
3822
  *
3739
- * By default, viewport will be scrolled to selection. After the `selectCells` method had finished, the instance
3740
- * will be listening to keyboard input on the document.
3823
+ * If your columns have properties, you can pass those properties' values instead of column indexes, for example: `hot.selectCells([[1, 'first_name'], [5, 'last_name']])`.
3824
+ *
3825
+ * By default, `selectCell()` also:
3826
+ * - Scrolls the viewport to the newly-selected cells.
3827
+ * - Switches the keyboard focus to Handsontable (by calling Handsontable's [`listen()`](#listen) method).
3741
3828
  *
3742
3829
  * @example
3743
3830
  * ```js
3744
- * // Using an array of arrays.
3831
+ * // select non-adjacent cells
3832
+ * hot.selectCells([[1, 1], [5, 5], [10, 10]]);
3833
+ *
3834
+ * // select non-adjacent ranges of cells
3835
+ * hot.selectCells([[1, 1, 2, 2], [10, 10, 20, 20]]);
3836
+ *
3837
+ * // select cells and ranges of cells
3745
3838
  * hot.selectCells([[1, 1, 2, 2], [3, 3], [6, 2, 0, 2]]);
3746
- * // Using an array of arrays with defined columns as props.
3839
+ *
3840
+ * // select cells, using column properties
3747
3841
  * hot.selectCells([[1, 'id', 2, 'first_name'], [3, 'full_name'], [6, 'last_name', 0, 'first_name']]);
3748
- * // Using an array of CellRange objects (produced by `.getSelectedRange()` method).
3842
+ *
3843
+ * // select multiple ranges, using an array of `CellRange` objects
3749
3844
  * const selected = hot.getSelectedRange();
3750
3845
  *
3751
3846
  * selected[0].from.row = 0;
3752
3847
  * selected[0].from.col = 0;
3848
+ * selected[0].to.row = 5;
3849
+ * selected[0].to.col = 5;
3850
+ *
3851
+ * selected[1].from.row = 10;
3852
+ * selected[1].from.col = 10;
3853
+ * selected[1].to.row = 20;
3854
+ * selected[1].to.col = 20;
3753
3855
  *
3754
3856
  * hot.selectCells(selected);
3755
3857
  * ```
@@ -3757,12 +3859,12 @@ export default function Core(rootElement, userSettings) {
3757
3859
  * @memberof Core#
3758
3860
  * @since 0.38.0
3759
3861
  * @function selectCells
3760
- * @param {Array[]|CellRange[]} coords Visual coords passed as an array of array (`[[rowStart, columnStart, rowEnd, columnEnd], ...]`)
3761
- * the same format as `getSelected` method returns or as an CellRange objects
3762
- * which is the same format what `getSelectedRange` method returns.
3763
- * @param {boolean} [scrollToCell=true] If `true`, the viewport will be scrolled to the selection.
3764
- * @param {boolean} [changeListener=true] If `false`, Handsontable will not change keyboard events listener to himself.
3765
- * @returns {boolean} `true` if selection was successful, `false` otherwise.
3862
+ * @param {Array[]|CellRange[]} coords Visual coordinates,
3863
+ * passed either as an array of arrays (`[[rowStart, columnStart, rowEnd, columnEnd], ...]`)
3864
+ * or as an array of [`CellRange`](@/api/cellRange.md) objects.
3865
+ * @param {boolean} [scrollToCell=true] `true`: scroll the viewport to the newly-selected cells. `false`: keep the previous viewport.
3866
+ * @param {boolean} [changeListener=true] `true`: switch the keyboard focus to Handsontable. `false`: keep the previous keyboard focus.
3867
+ * @returns {boolean} `true`: the selection was successful, `false`: the selection failed.
3766
3868
  */
3767
3869
  this.selectCells = function () {
3768
3870
  var coords = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [[]];
@@ -3842,13 +3944,23 @@ export default function Core(rootElement, userSettings) {
3842
3944
  };
3843
3945
 
3844
3946
  /**
3845
- * Select the whole table. The previous selection will be overwritten.
3947
+ * Select the whole table.
3948
+ *
3949
+ * The previous selection is overwritten.
3950
+ *
3951
+ * ```js
3952
+ * // select all cells in the table, including all headers
3953
+ * hot.selectAll();
3954
+ *
3955
+ * // select all cells in the table, without headers
3956
+ * hot.selectAll(false);
3957
+ * ```
3846
3958
  *
3847
3959
  * @since 0.38.2
3848
3960
  * @memberof Core#
3849
3961
  * @function selectAll
3850
- * @param {boolean} [includeHeaders=true] `true` If the selection should include the row, column and corner headers,
3851
- * `false` otherwise.
3962
+ * @param {boolean} [includeHeaders=true] `true`: include all row, column and corner headers.
3963
+ * `false`: don't include any headers.
3852
3964
  */
3853
3965
  this.selectAll = function () {
3854
3966
  var includeHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;