handsontable 9.0.2 → 11.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (895) hide show
  1. package/3rdparty/autoResize/autoResize.js +2 -0
  2. package/3rdparty/autoResize/autoResize.mjs +1 -0
  3. package/3rdparty/walkontable/src/border.js +3 -1
  4. package/3rdparty/walkontable/src/border.mjs +2 -1
  5. package/3rdparty/walkontable/src/calculator/constants.js +1 -1
  6. package/3rdparty/walkontable/src/calculator/index.js +2 -0
  7. package/3rdparty/walkontable/src/calculator/viewportColumns.d.ts +18 -0
  8. package/3rdparty/walkontable/src/calculator/viewportColumns.js +1 -1
  9. package/3rdparty/walkontable/src/calculator/viewportColumns.mjs +1 -1
  10. package/3rdparty/walkontable/src/calculator/viewportRows.js +1 -1
  11. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +1 -1
  12. package/3rdparty/walkontable/src/cell/coords.d.ts +16 -0
  13. package/3rdparty/walkontable/src/cell/coords.js +1 -1
  14. package/3rdparty/walkontable/src/cell/coords.mjs +1 -1
  15. package/3rdparty/walkontable/src/cell/range.d.ts +51 -0
  16. package/3rdparty/walkontable/src/cell/range.js +1 -1
  17. package/3rdparty/walkontable/src/cell/range.mjs +1 -1
  18. package/3rdparty/walkontable/src/core.js +1 -1
  19. package/3rdparty/walkontable/src/core.mjs +1 -1
  20. package/3rdparty/walkontable/src/event.js +1 -1
  21. package/3rdparty/walkontable/src/event.mjs +1 -1
  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.d.ts +1 -0
  27. package/3rdparty/walkontable/src/index.js +1 -1
  28. package/3rdparty/walkontable/src/overlay/_base.js +1 -1
  29. package/3rdparty/walkontable/src/overlay/_base.mjs +1 -1
  30. package/3rdparty/walkontable/src/overlay/bottom.js +6 -6
  31. package/3rdparty/walkontable/src/overlay/bottom.mjs +5 -5
  32. package/3rdparty/walkontable/src/overlay/bottomLeftCorner.js +6 -6
  33. package/3rdparty/walkontable/src/overlay/bottomLeftCorner.mjs +5 -5
  34. package/3rdparty/walkontable/src/overlay/constants.js +1 -1
  35. package/3rdparty/walkontable/src/overlay/index.js +2 -0
  36. package/3rdparty/walkontable/src/overlay/left.js +6 -6
  37. package/3rdparty/walkontable/src/overlay/left.mjs +5 -5
  38. package/3rdparty/walkontable/src/overlay/registerer.js +1 -1
  39. package/3rdparty/walkontable/src/overlay/top.js +6 -17
  40. package/3rdparty/walkontable/src/overlay/top.mjs +5 -16
  41. package/3rdparty/walkontable/src/overlay/topLeftCorner.js +6 -6
  42. package/3rdparty/walkontable/src/overlay/topLeftCorner.mjs +5 -5
  43. package/3rdparty/walkontable/src/overlays.js +3 -1
  44. package/3rdparty/walkontable/src/overlays.mjs +2 -1
  45. package/3rdparty/walkontable/src/renderer/_base.js +1 -1
  46. package/3rdparty/walkontable/src/renderer/_base.mjs +1 -1
  47. package/3rdparty/walkontable/src/renderer/cells.js +4 -4
  48. package/3rdparty/walkontable/src/renderer/cells.mjs +4 -4
  49. package/3rdparty/walkontable/src/renderer/colGroup.js +6 -6
  50. package/3rdparty/walkontable/src/renderer/colGroup.mjs +5 -5
  51. package/3rdparty/walkontable/src/renderer/columnHeaders.js +6 -6
  52. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +5 -5
  53. package/3rdparty/walkontable/src/renderer/index.js +1 -1
  54. package/3rdparty/walkontable/src/renderer/index.mjs +1 -1
  55. package/3rdparty/walkontable/src/renderer/rowHeaders.js +4 -4
  56. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +4 -4
  57. package/3rdparty/walkontable/src/renderer/rows.js +6 -6
  58. package/3rdparty/walkontable/src/renderer/rows.mjs +5 -5
  59. package/3rdparty/walkontable/src/renderer/table.js +1 -1
  60. package/3rdparty/walkontable/src/renderer/table.mjs +1 -1
  61. package/3rdparty/walkontable/src/scroll.js +1 -1
  62. package/3rdparty/walkontable/src/scroll.mjs +1 -1
  63. package/3rdparty/walkontable/src/selection.js +6 -4
  64. package/3rdparty/walkontable/src/selection.mjs +4 -3
  65. package/3rdparty/walkontable/src/settings.js +1 -1
  66. package/3rdparty/walkontable/src/settings.mjs +1 -1
  67. package/3rdparty/walkontable/src/table/bottom.js +10 -6
  68. package/3rdparty/walkontable/src/table/bottom.mjs +9 -5
  69. package/3rdparty/walkontable/src/table/bottomLeftCorner.js +10 -6
  70. package/3rdparty/walkontable/src/table/bottomLeftCorner.mjs +9 -5
  71. package/3rdparty/walkontable/src/table/left.js +10 -6
  72. package/3rdparty/walkontable/src/table/left.mjs +9 -5
  73. package/3rdparty/walkontable/src/table/master.js +6 -6
  74. package/3rdparty/walkontable/src/table/master.mjs +5 -5
  75. package/3rdparty/walkontable/src/table/top.js +10 -6
  76. package/3rdparty/walkontable/src/table/top.mjs +9 -5
  77. package/3rdparty/walkontable/src/table/topLeftCorner.js +10 -6
  78. package/3rdparty/walkontable/src/table/topLeftCorner.mjs +9 -5
  79. package/3rdparty/walkontable/src/table.js +5 -3
  80. package/3rdparty/walkontable/src/table.mjs +3 -2
  81. package/3rdparty/walkontable/src/utils/column.js +2 -2
  82. package/3rdparty/walkontable/src/utils/column.mjs +2 -2
  83. package/3rdparty/walkontable/src/utils/nodesPool.js +1 -1
  84. package/3rdparty/walkontable/src/utils/nodesPool.mjs +1 -1
  85. package/3rdparty/walkontable/src/utils/orderView/constants.js +1 -1
  86. package/3rdparty/walkontable/src/utils/orderView/sharedView.js +6 -6
  87. package/3rdparty/walkontable/src/utils/orderView/sharedView.mjs +5 -5
  88. package/3rdparty/walkontable/src/utils/orderView/view.js +1 -1
  89. package/3rdparty/walkontable/src/utils/orderView/view.mjs +1 -1
  90. package/3rdparty/walkontable/src/utils/orderView/viewSize.js +1 -1
  91. package/3rdparty/walkontable/src/utils/orderView/viewSize.mjs +1 -1
  92. package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.js +1 -1
  93. package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.mjs +1 -1
  94. package/3rdparty/walkontable/src/utils/row.js +1 -1
  95. package/3rdparty/walkontable/src/utils/row.mjs +1 -1
  96. package/3rdparty/walkontable/src/viewport.js +1 -1
  97. package/3rdparty/walkontable/src/viewport.mjs +1 -1
  98. package/CHANGELOG.md +92 -7
  99. package/LICENSE.txt +19 -22
  100. package/README.md +13 -8
  101. package/base.d.ts +1 -1
  102. package/base.js +16 -3
  103. package/base.mjs +14 -4
  104. package/cellTypes/autocompleteType/autocompleteType.d.ts +17 -0
  105. package/cellTypes/autocompleteType/autocompleteType.js +1 -1
  106. package/cellTypes/autocompleteType/index.d.ts +1 -0
  107. package/cellTypes/base.d.ts +14 -0
  108. package/cellTypes/checkboxType/checkboxType.d.ts +14 -0
  109. package/cellTypes/checkboxType/index.d.ts +1 -0
  110. package/cellTypes/dateType/dateType.d.ts +17 -0
  111. package/cellTypes/dateType/index.d.ts +1 -0
  112. package/cellTypes/dropdownType/dropdownType.d.ts +17 -0
  113. package/cellTypes/dropdownType/index.d.ts +1 -0
  114. package/cellTypes/handsontableType/handsontableType.d.ts +14 -0
  115. package/cellTypes/handsontableType/index.d.ts +1 -0
  116. package/cellTypes/index.d.ts +47 -0
  117. package/cellTypes/index.js +18 -2
  118. package/cellTypes/index.mjs +26 -9
  119. package/cellTypes/numericType/index.d.ts +1 -0
  120. package/cellTypes/numericType/numericType.d.ts +17 -0
  121. package/cellTypes/passwordType/index.d.ts +1 -0
  122. package/cellTypes/passwordType/passwordType.d.ts +14 -0
  123. package/cellTypes/registry.d.ts +18 -0
  124. package/cellTypes/registry.js +2 -2
  125. package/cellTypes/textType/index.d.ts +1 -0
  126. package/cellTypes/textType/textType.d.ts +14 -0
  127. package/cellTypes/timeType/index.d.ts +1 -0
  128. package/cellTypes/timeType/timeType.d.ts +17 -0
  129. package/common.d.ts +74 -0
  130. package/core.d.ts +160 -0
  131. package/core.js +244 -189
  132. package/core.mjs +243 -190
  133. package/{dataMap.js → dataMap/dataMap.js} +39 -37
  134. package/{dataMap.mjs → dataMap/dataMap.mjs} +39 -37
  135. package/dataMap/index.js +9 -1
  136. package/dataMap/index.mjs +4 -2
  137. package/dataMap/metaManager/index.js +55 -7
  138. package/dataMap/metaManager/index.mjs +52 -7
  139. package/dataMap/metaManager/lazyFactoryMap.js +4 -4
  140. package/dataMap/metaManager/lazyFactoryMap.mjs +4 -4
  141. package/dataMap/metaManager/metaLayers/cellMeta.js +3 -1
  142. package/dataMap/metaManager/metaLayers/cellMeta.mjs +2 -1
  143. package/dataMap/metaManager/metaLayers/columnMeta.js +1 -1
  144. package/dataMap/metaManager/metaLayers/columnMeta.mjs +1 -1
  145. package/dataMap/metaManager/metaLayers/globalMeta.js +5 -4
  146. package/dataMap/metaManager/metaLayers/globalMeta.mjs +5 -4
  147. package/dataMap/metaManager/metaLayers/tableMeta.js +1 -1
  148. package/dataMap/metaManager/metaLayers/tableMeta.mjs +1 -1
  149. package/dataMap/metaManager/metaSchema.js +3213 -1712
  150. package/dataMap/metaManager/metaSchema.mjs +3213 -1712
  151. package/dataMap/metaManager/mods/dynamicCellMeta.js +136 -0
  152. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +119 -0
  153. package/dataMap/metaManager/utils.js +3 -3
  154. package/dataMap/replaceData.js +154 -0
  155. package/dataMap/replaceData.mjs +138 -0
  156. package/dataSource.js +3 -1
  157. package/dataSource.mjs +2 -1
  158. package/dist/README.md +2 -2
  159. package/dist/handsontable.css +508 -420
  160. package/dist/handsontable.full.css +621 -530
  161. package/dist/handsontable.full.js +54025 -48518
  162. package/dist/handsontable.full.min.css +27 -35
  163. package/dist/handsontable.full.min.js +181 -164
  164. package/dist/handsontable.js +37028 -33780
  165. package/dist/handsontable.min.css +27 -33
  166. package/dist/handsontable.min.js +22 -25
  167. package/dist/languages/all.js +2 -4
  168. package/dist/languages/all.min.js +1 -1
  169. package/dist/languages/de-CH.js +2 -4
  170. package/dist/languages/de-CH.min.js +1 -1
  171. package/dist/languages/de-DE.js +2 -4
  172. package/dist/languages/de-DE.min.js +1 -1
  173. package/dist/languages/en-US.js +2 -4
  174. package/dist/languages/en-US.min.js +1 -1
  175. package/dist/languages/es-MX.js +2 -4
  176. package/dist/languages/es-MX.min.js +1 -1
  177. package/dist/languages/fr-FR.js +2 -4
  178. package/dist/languages/fr-FR.min.js +1 -1
  179. package/dist/languages/it-IT.js +2 -4
  180. package/dist/languages/it-IT.min.js +1 -1
  181. package/dist/languages/ja-JP.js +2 -4
  182. package/dist/languages/ja-JP.min.js +1 -1
  183. package/dist/languages/ko-KR.js +2 -4
  184. package/dist/languages/ko-KR.min.js +1 -1
  185. package/dist/languages/lv-LV.js +2 -4
  186. package/dist/languages/lv-LV.min.js +1 -1
  187. package/dist/languages/nb-NO.js +2 -4
  188. package/dist/languages/nb-NO.min.js +1 -1
  189. package/dist/languages/nl-NL.js +2 -4
  190. package/dist/languages/nl-NL.min.js +1 -1
  191. package/dist/languages/pl-PL.js +2 -4
  192. package/dist/languages/pl-PL.min.js +1 -1
  193. package/dist/languages/pt-BR.js +2 -4
  194. package/dist/languages/pt-BR.min.js +1 -1
  195. package/dist/languages/ru-RU.js +2 -4
  196. package/dist/languages/ru-RU.min.js +1 -1
  197. package/dist/languages/zh-CN.js +2 -4
  198. package/dist/languages/zh-CN.min.js +1 -1
  199. package/dist/languages/zh-TW.js +2 -4
  200. package/dist/languages/zh-TW.min.js +1 -1
  201. package/editorManager.js +9 -7
  202. package/editorManager.mjs +8 -7
  203. package/editors/autocompleteEditor/autocompleteEditor.d.ts +29 -0
  204. package/editors/autocompleteEditor/autocompleteEditor.js +99 -91
  205. package/editors/autocompleteEditor/autocompleteEditor.mjs +97 -88
  206. package/editors/autocompleteEditor/index.d.ts +1 -0
  207. package/editors/autocompleteEditor/index.js +1 -1
  208. package/editors/baseEditor/baseEditor.d.ts +45 -0
  209. package/editors/baseEditor/baseEditor.js +11 -10
  210. package/editors/baseEditor/baseEditor.mjs +8 -8
  211. package/editors/baseEditor/index.d.ts +1 -0
  212. package/editors/baseEditor/index.js +1 -1
  213. package/editors/checkboxEditor/checkboxEditor.d.ts +12 -0
  214. package/editors/checkboxEditor/checkboxEditor.js +7 -7
  215. package/editors/checkboxEditor/checkboxEditor.mjs +5 -5
  216. package/editors/checkboxEditor/index.d.ts +1 -0
  217. package/editors/checkboxEditor/index.js +1 -1
  218. package/editors/dateEditor/dateEditor.d.ts +18 -0
  219. package/editors/dateEditor/dateEditor.js +21 -21
  220. package/editors/dateEditor/dateEditor.mjs +19 -19
  221. package/editors/dateEditor/index.d.ts +1 -0
  222. package/editors/dateEditor/index.js +1 -1
  223. package/editors/dropdownEditor/dropdownEditor.d.ts +7 -0
  224. package/editors/dropdownEditor/dropdownEditor.js +8 -8
  225. package/editors/dropdownEditor/dropdownEditor.mjs +6 -6
  226. package/editors/dropdownEditor/index.d.ts +1 -0
  227. package/editors/dropdownEditor/index.js +1 -1
  228. package/editors/handsontableEditor/handsontableEditor.d.ts +10 -0
  229. package/editors/handsontableEditor/handsontableEditor.js +7 -7
  230. package/editors/handsontableEditor/handsontableEditor.mjs +6 -6
  231. package/editors/handsontableEditor/index.d.ts +1 -0
  232. package/editors/index.d.ts +53 -0
  233. package/editors/index.js +19 -2
  234. package/editors/index.mjs +28 -10
  235. package/editors/numericEditor/index.d.ts +1 -0
  236. package/editors/numericEditor/numericEditor.d.ts +7 -0
  237. package/editors/numericEditor/numericEditor.js +6 -6
  238. package/editors/numericEditor/numericEditor.mjs +5 -5
  239. package/editors/passwordEditor/index.d.ts +1 -0
  240. package/editors/passwordEditor/passwordEditor.d.ts +7 -0
  241. package/editors/passwordEditor/passwordEditor.js +7 -7
  242. package/editors/passwordEditor/passwordEditor.mjs +6 -6
  243. package/editors/registry.d.ts +29 -0
  244. package/editors/registry.js +2 -2
  245. package/editors/selectEditor/index.d.ts +1 -0
  246. package/editors/selectEditor/selectEditor.d.ts +16 -0
  247. package/editors/selectEditor/selectEditor.js +7 -7
  248. package/editors/selectEditor/selectEditor.mjs +6 -6
  249. package/editors/textEditor/index.d.ts +1 -0
  250. package/editors/textEditor/textEditor.d.ts +24 -0
  251. package/editors/textEditor/textEditor.js +7 -7
  252. package/editors/textEditor/textEditor.mjs +6 -6
  253. package/eventManager.d.ts +13 -0
  254. package/eventManager.js +8 -4
  255. package/eventManager.mjs +7 -3
  256. package/handsontable-non-commercial-license.pdf +0 -0
  257. package/helpers/array.d.ts +18 -0
  258. package/helpers/array.js +10 -10
  259. package/helpers/array.mjs +1 -1
  260. package/helpers/browser.d.ts +25 -0
  261. package/helpers/browser.js +11 -9
  262. package/helpers/browser.mjs +1 -0
  263. package/helpers/console.d.ts +4 -0
  264. package/helpers/console.js +2 -2
  265. package/helpers/data.d.ts +13 -0
  266. package/helpers/data.js +8 -36
  267. package/helpers/data.mjs +2 -28
  268. package/helpers/date.d.ts +1 -0
  269. package/helpers/dom/element.d.ts +49 -0
  270. package/helpers/dom/element.js +45 -46
  271. package/helpers/dom/element.mjs +8 -9
  272. package/helpers/dom/event.d.ts +4 -0
  273. package/helpers/dom/event.js +2 -2
  274. package/helpers/dom/index.d.ts +2 -0
  275. package/helpers/feature.d.ts +11 -0
  276. package/helpers/feature.js +7 -7
  277. package/helpers/feature.mjs +1 -1
  278. package/helpers/function.d.ts +10 -0
  279. package/helpers/function.js +43 -5
  280. package/helpers/function.mjs +35 -0
  281. package/helpers/index.d.ts +14 -0
  282. package/helpers/mixed.d.ts +5 -0
  283. package/helpers/mixed.js +6 -6
  284. package/helpers/mixed.mjs +3 -3
  285. package/helpers/number.d.ts +5 -0
  286. package/helpers/number.js +98 -19
  287. package/helpers/number.mjs +87 -19
  288. package/helpers/object.d.ts +16 -0
  289. package/helpers/object.js +12 -12
  290. package/helpers/object.mjs +1 -1
  291. package/helpers/string.d.ts +7 -0
  292. package/helpers/string.js +4 -4
  293. package/helpers/templateLiteralTag.d.ts +1 -0
  294. package/helpers/unicode.d.ts +73 -0
  295. package/helpers/unicode.js +3 -3
  296. package/i18n/constants.js +1 -1
  297. package/i18n/index.d.ts +2 -0
  298. package/i18n/index.js +2 -0
  299. package/i18n/languages/de-CH.d.ts +5 -0
  300. package/i18n/languages/de-CH.js +1 -1
  301. package/i18n/languages/de-DE.d.ts +5 -0
  302. package/i18n/languages/de-DE.js +1 -1
  303. package/i18n/languages/en-US.d.ts +5 -0
  304. package/i18n/languages/en-US.js +1 -1
  305. package/i18n/languages/es-MX.d.ts +5 -0
  306. package/i18n/languages/es-MX.js +1 -1
  307. package/i18n/languages/fr-FR.d.ts +5 -0
  308. package/i18n/languages/fr-FR.js +1 -1
  309. package/i18n/languages/index.d.ts +35 -0
  310. package/i18n/languages/it-IT.d.ts +5 -0
  311. package/i18n/languages/it-IT.js +1 -1
  312. package/i18n/languages/ja-JP.d.ts +5 -0
  313. package/i18n/languages/ja-JP.js +1 -1
  314. package/i18n/languages/ko-KR.d.ts +5 -0
  315. package/i18n/languages/ko-KR.js +1 -1
  316. package/i18n/languages/lv-LV.d.ts +5 -0
  317. package/i18n/languages/lv-LV.js +1 -1
  318. package/i18n/languages/nb-NO.d.ts +5 -0
  319. package/i18n/languages/nb-NO.js +1 -1
  320. package/i18n/languages/nl-NL.d.ts +5 -0
  321. package/i18n/languages/nl-NL.js +1 -1
  322. package/i18n/languages/pl-PL.d.ts +5 -0
  323. package/i18n/languages/pl-PL.js +1 -1
  324. package/i18n/languages/pt-BR.d.ts +5 -0
  325. package/i18n/languages/pt-BR.js +1 -1
  326. package/i18n/languages/ru-RU.d.ts +5 -0
  327. package/i18n/languages/ru-RU.js +1 -1
  328. package/i18n/languages/zh-CN.d.ts +5 -0
  329. package/i18n/languages/zh-CN.js +1 -1
  330. package/i18n/languages/zh-TW.d.ts +5 -0
  331. package/i18n/languages/zh-TW.js +1 -1
  332. package/i18n/phraseFormatters/index.js +1 -1
  333. package/i18n/registry.d.ts +13 -0
  334. package/i18n/registry.js +5 -5
  335. package/i18n/utils.js +1 -1
  336. package/index.d.ts +516 -0
  337. package/index.js +41 -113
  338. package/index.mjs +17 -90
  339. package/languages/all.js +2 -4
  340. package/languages/de-CH.js +2 -4
  341. package/languages/de-DE.js +2 -4
  342. package/languages/en-US.js +2 -4
  343. package/languages/es-MX.js +2 -4
  344. package/languages/fr-FR.js +2 -4
  345. package/languages/index.js +2 -4
  346. package/languages/it-IT.js +2 -4
  347. package/languages/ja-JP.js +2 -4
  348. package/languages/ko-KR.js +2 -4
  349. package/languages/lv-LV.js +2 -4
  350. package/languages/nb-NO.js +2 -4
  351. package/languages/nl-NL.js +2 -4
  352. package/languages/pl-PL.js +2 -4
  353. package/languages/pt-BR.js +2 -4
  354. package/languages/ru-RU.js +2 -4
  355. package/languages/zh-CN.js +2 -4
  356. package/languages/zh-TW.js +2 -4
  357. package/mixins/localHooks.js +17 -14
  358. package/mixins/localHooks.mjs +16 -13
  359. package/package.json +106 -15
  360. package/pluginHooks.d.ts +257 -0
  361. package/pluginHooks.js +216 -141
  362. package/pluginHooks.mjs +215 -141
  363. package/plugins/autoColumnSize/autoColumnSize.d.ts +27 -0
  364. package/plugins/autoColumnSize/autoColumnSize.js +24 -22
  365. package/plugins/autoColumnSize/autoColumnSize.mjs +22 -21
  366. package/plugins/autoColumnSize/index.d.ts +1 -0
  367. package/plugins/autoColumnSize/index.js +1 -1
  368. package/plugins/autoRowSize/autoRowSize.d.ts +27 -0
  369. package/plugins/autoRowSize/autoRowSize.js +29 -21
  370. package/plugins/autoRowSize/autoRowSize.mjs +26 -19
  371. package/plugins/autoRowSize/index.d.ts +1 -0
  372. package/plugins/autoRowSize/index.js +1 -1
  373. package/plugins/autofill/autofill.d.ts +18 -0
  374. package/plugins/autofill/autofill.js +12 -21
  375. package/plugins/autofill/autofill.mjs +9 -18
  376. package/plugins/autofill/index.d.ts +1 -0
  377. package/plugins/autofill/index.js +1 -1
  378. package/plugins/autofill/utils.js +1 -1
  379. package/plugins/base/base.d.ts +21 -0
  380. package/plugins/base/base.js +2 -2
  381. package/plugins/base/base.mjs +1 -1
  382. package/plugins/base/index.d.ts +1 -0
  383. package/plugins/base/index.js +1 -1
  384. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.d.ts +9 -0
  385. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +6 -6
  386. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +5 -5
  387. package/plugins/bindRowsWithHeaders/index.d.ts +1 -0
  388. package/plugins/bindRowsWithHeaders/index.js +1 -1
  389. package/plugins/bindRowsWithHeaders/maps/looseBindsMap.js +7 -7
  390. package/plugins/bindRowsWithHeaders/maps/looseBindsMap.mjs +6 -6
  391. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.js +9 -7
  392. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.mjs +7 -6
  393. package/plugins/collapsibleColumns/collapsibleColumns.d.ts +22 -0
  394. package/plugins/collapsibleColumns/collapsibleColumns.js +34 -27
  395. package/plugins/collapsibleColumns/collapsibleColumns.mjs +32 -26
  396. package/plugins/collapsibleColumns/index.d.ts +1 -0
  397. package/plugins/collapsibleColumns/index.js +1 -1
  398. package/plugins/columnSorting/columnSorting.d.ts +30 -0
  399. package/plugins/columnSorting/columnSorting.js +21 -19
  400. package/plugins/columnSorting/columnSorting.mjs +18 -17
  401. package/plugins/columnSorting/columnStatesManager.js +6 -4
  402. package/plugins/columnSorting/columnStatesManager.mjs +5 -4
  403. package/plugins/columnSorting/index.d.ts +1 -0
  404. package/plugins/columnSorting/index.js +1 -1
  405. package/plugins/columnSorting/rootComparator.js +2 -0
  406. package/plugins/columnSorting/rootComparator.mjs +1 -0
  407. package/plugins/columnSorting/sortFunction/checkbox.js +1 -1
  408. package/plugins/columnSorting/sortFunction/date.js +1 -1
  409. package/plugins/columnSorting/sortFunction/default.js +4 -3
  410. package/plugins/columnSorting/sortFunction/default.mjs +3 -2
  411. package/plugins/columnSorting/sortFunction/numeric.js +1 -1
  412. package/plugins/columnSorting/sortService/engine.js +1 -1
  413. package/plugins/columnSorting/sortService/registry.js +1 -1
  414. package/plugins/columnSorting/utils.js +4 -4
  415. package/plugins/columnSorting/utils.mjs +1 -1
  416. package/plugins/columnSummary/columnSummary.d.ts +72 -0
  417. package/plugins/columnSummary/columnSummary.js +32 -14
  418. package/plugins/columnSummary/columnSummary.mjs +30 -12
  419. package/plugins/columnSummary/endpoints.js +7 -5
  420. package/plugins/columnSummary/endpoints.mjs +6 -5
  421. package/plugins/columnSummary/index.d.ts +1 -0
  422. package/plugins/columnSummary/index.js +1 -1
  423. package/plugins/comments/commentEditor.js +7 -3
  424. package/plugins/comments/commentEditor.mjs +7 -3
  425. package/plugins/comments/comments.d.ts +50 -0
  426. package/plugins/comments/comments.js +49 -88
  427. package/plugins/comments/comments.mjs +49 -87
  428. package/plugins/comments/displaySwitch.js +2 -2
  429. package/plugins/comments/displaySwitch.mjs +2 -2
  430. package/plugins/comments/index.d.ts +1 -0
  431. package/plugins/comments/index.js +1 -1
  432. package/plugins/contextMenu/commandExecutor.js +2 -2
  433. package/plugins/contextMenu/commandExecutor.mjs +2 -2
  434. package/plugins/contextMenu/contextMenu.d.ts +65 -0
  435. package/plugins/contextMenu/contextMenu.js +9 -8
  436. package/plugins/contextMenu/contextMenu.mjs +7 -6
  437. package/plugins/contextMenu/cursor.js +2 -2
  438. package/plugins/contextMenu/cursor.mjs +2 -2
  439. package/plugins/contextMenu/index.d.ts +1 -0
  440. package/plugins/contextMenu/index.js +1 -1
  441. package/plugins/contextMenu/itemsFactory.js +2 -2
  442. package/plugins/contextMenu/itemsFactory.mjs +2 -2
  443. package/plugins/contextMenu/menu.js +5 -5
  444. package/plugins/contextMenu/menu.mjs +4 -4
  445. package/plugins/contextMenu/predefinedItems/alignment.js +2 -2
  446. package/plugins/contextMenu/predefinedItems/clearColumn.js +2 -2
  447. package/plugins/contextMenu/predefinedItems/columnLeft.js +2 -2
  448. package/plugins/contextMenu/predefinedItems/columnRight.js +2 -2
  449. package/plugins/contextMenu/predefinedItems/noItems.js +1 -1
  450. package/plugins/contextMenu/predefinedItems/readOnly.js +2 -2
  451. package/plugins/contextMenu/predefinedItems/redo.js +2 -2
  452. package/plugins/contextMenu/predefinedItems/removeColumn.js +4 -2
  453. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +1 -0
  454. package/plugins/contextMenu/predefinedItems/removeRow.js +4 -2
  455. package/plugins/contextMenu/predefinedItems/removeRow.mjs +1 -0
  456. package/plugins/contextMenu/predefinedItems/rowAbove.js +2 -2
  457. package/plugins/contextMenu/predefinedItems/rowBelow.js +2 -2
  458. package/plugins/contextMenu/predefinedItems/separator.js +1 -1
  459. package/plugins/contextMenu/predefinedItems/undo.js +2 -2
  460. package/plugins/contextMenu/predefinedItems.js +3 -3
  461. package/plugins/contextMenu/utils.js +10 -10
  462. package/plugins/copyPaste/clipboardData.js +4 -1
  463. package/plugins/copyPaste/clipboardData.mjs +4 -1
  464. package/plugins/copyPaste/contextMenuItem/copy.js +1 -1
  465. package/plugins/copyPaste/contextMenuItem/cut.js +1 -1
  466. package/plugins/copyPaste/copyPaste.d.ts +35 -0
  467. package/plugins/copyPaste/copyPaste.js +14 -11
  468. package/plugins/copyPaste/copyPaste.mjs +12 -10
  469. package/plugins/copyPaste/focusableElement.js +2 -3
  470. package/plugins/copyPaste/focusableElement.mjs +2 -3
  471. package/plugins/copyPaste/index.d.ts +1 -0
  472. package/plugins/copyPaste/index.js +1 -1
  473. package/plugins/copyPaste/pasteEvent.js +9 -2
  474. package/plugins/copyPaste/pasteEvent.mjs +9 -2
  475. package/plugins/customBorders/contextMenuItem/bottom.js +1 -1
  476. package/plugins/customBorders/contextMenuItem/left.js +1 -1
  477. package/plugins/customBorders/contextMenuItem/noBorders.js +1 -1
  478. package/plugins/customBorders/contextMenuItem/right.js +1 -1
  479. package/plugins/customBorders/contextMenuItem/top.js +1 -1
  480. package/plugins/customBorders/customBorders.d.ts +38 -0
  481. package/plugins/customBorders/customBorders.js +11 -9
  482. package/plugins/customBorders/customBorders.mjs +8 -7
  483. package/plugins/customBorders/index.d.ts +1 -0
  484. package/plugins/customBorders/index.js +1 -1
  485. package/plugins/customBorders/utils.js +3 -3
  486. package/plugins/dragToScroll/dragToScroll.d.ts +15 -0
  487. package/plugins/dragToScroll/dragToScroll.js +8 -8
  488. package/plugins/dragToScroll/dragToScroll.mjs +6 -6
  489. package/plugins/dragToScroll/index.d.ts +1 -0
  490. package/plugins/dragToScroll/index.js +1 -1
  491. package/plugins/dropdownMenu/dropdownMenu.d.ts +24 -0
  492. package/plugins/dropdownMenu/dropdownMenu.js +8 -8
  493. package/plugins/dropdownMenu/dropdownMenu.mjs +6 -6
  494. package/plugins/dropdownMenu/index.d.ts +1 -0
  495. package/plugins/dropdownMenu/index.js +1 -1
  496. package/plugins/exportFile/dataProvider.js +3 -5
  497. package/plugins/exportFile/dataProvider.mjs +3 -5
  498. package/plugins/exportFile/exportFile.d.ts +12 -0
  499. package/plugins/exportFile/exportFile.js +9 -9
  500. package/plugins/exportFile/exportFile.mjs +7 -7
  501. package/plugins/exportFile/index.d.ts +1 -0
  502. package/plugins/exportFile/index.js +1 -1
  503. package/plugins/exportFile/typeFactory.js +2 -1
  504. package/plugins/exportFile/typeFactory.mjs +1 -0
  505. package/plugins/exportFile/types/_base.js +1 -2
  506. package/plugins/exportFile/types/_base.mjs +1 -2
  507. package/plugins/exportFile/types/csv.js +6 -7
  508. package/plugins/exportFile/types/csv.mjs +5 -6
  509. package/plugins/filters/component/_base.js +2 -2
  510. package/plugins/filters/component/_base.mjs +2 -2
  511. package/plugins/filters/component/actionBar.js +7 -7
  512. package/plugins/filters/component/actionBar.mjs +6 -6
  513. package/plugins/filters/component/condition.js +10 -8
  514. package/plugins/filters/component/condition.mjs +8 -7
  515. package/plugins/filters/component/operators.js +7 -7
  516. package/plugins/filters/component/operators.mjs +6 -6
  517. package/plugins/filters/component/value.js +15 -8
  518. package/plugins/filters/component/value.mjs +13 -7
  519. package/plugins/filters/condition/beginsWith.js +5 -3
  520. package/plugins/filters/condition/beginsWith.mjs +2 -1
  521. package/plugins/filters/condition/between.js +4 -2
  522. package/plugins/filters/condition/between.mjs +1 -0
  523. package/plugins/filters/condition/byValue.js +3 -1
  524. package/plugins/filters/condition/byValue.mjs +1 -0
  525. package/plugins/filters/condition/contains.js +5 -3
  526. package/plugins/filters/condition/contains.mjs +2 -1
  527. package/plugins/filters/condition/date/after.js +4 -2
  528. package/plugins/filters/condition/date/after.mjs +1 -0
  529. package/plugins/filters/condition/date/before.js +4 -2
  530. package/plugins/filters/condition/date/before.mjs +1 -0
  531. package/plugins/filters/condition/date/today.js +2 -2
  532. package/plugins/filters/condition/date/tomorrow.js +2 -2
  533. package/plugins/filters/condition/date/yesterday.js +2 -2
  534. package/plugins/filters/condition/empty.js +2 -2
  535. package/plugins/filters/condition/endsWith.js +5 -3
  536. package/plugins/filters/condition/endsWith.mjs +2 -1
  537. package/plugins/filters/condition/equal.js +5 -3
  538. package/plugins/filters/condition/equal.mjs +2 -1
  539. package/plugins/filters/condition/false.js +1 -1
  540. package/plugins/filters/condition/greaterThan.js +4 -2
  541. package/plugins/filters/condition/greaterThan.mjs +1 -0
  542. package/plugins/filters/condition/greaterThanOrEqual.js +4 -2
  543. package/plugins/filters/condition/greaterThanOrEqual.mjs +1 -0
  544. package/plugins/filters/condition/lessThan.js +4 -2
  545. package/plugins/filters/condition/lessThan.mjs +1 -0
  546. package/plugins/filters/condition/lessThanOrEqual.js +4 -2
  547. package/plugins/filters/condition/lessThanOrEqual.mjs +1 -0
  548. package/plugins/filters/condition/none.js +2 -2
  549. package/plugins/filters/condition/notBetween.js +2 -2
  550. package/plugins/filters/condition/notContains.js +2 -2
  551. package/plugins/filters/condition/notEmpty.js +2 -2
  552. package/plugins/filters/condition/notEqual.js +2 -2
  553. package/plugins/filters/condition/true.js +1 -1
  554. package/plugins/filters/conditionCollection.d.ts +32 -0
  555. package/plugins/filters/conditionCollection.js +8 -5
  556. package/plugins/filters/conditionCollection.mjs +6 -4
  557. package/plugins/filters/conditionRegisterer.js +1 -1
  558. package/plugins/filters/conditionUpdateObserver.d.ts +10 -0
  559. package/plugins/filters/conditionUpdateObserver.js +4 -2
  560. package/plugins/filters/conditionUpdateObserver.mjs +3 -2
  561. package/plugins/filters/constants.js +2 -1
  562. package/plugins/filters/constants.mjs +1 -0
  563. package/plugins/filters/dataFilter.js +2 -2
  564. package/plugins/filters/dataFilter.mjs +2 -2
  565. package/plugins/filters/filters.d.ts +56 -0
  566. package/plugins/filters/filters.js +15 -11
  567. package/plugins/filters/filters.mjs +13 -10
  568. package/plugins/filters/index.d.ts +1 -0
  569. package/plugins/filters/index.js +1 -1
  570. package/plugins/filters/logicalOperationRegisterer.js +1 -1
  571. package/plugins/filters/logicalOperations/conjunction.js +4 -4
  572. package/plugins/filters/logicalOperations/conjunction.mjs +1 -0
  573. package/plugins/filters/logicalOperations/disjunction.js +4 -4
  574. package/plugins/filters/logicalOperations/disjunction.mjs +1 -0
  575. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +4 -4
  576. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.mjs +1 -0
  577. package/plugins/filters/ui/_base.js +4 -5
  578. package/plugins/filters/ui/_base.mjs +3 -4
  579. package/plugins/filters/ui/input.js +6 -6
  580. package/plugins/filters/ui/input.mjs +6 -6
  581. package/plugins/filters/ui/link.js +6 -6
  582. package/plugins/filters/ui/link.mjs +6 -6
  583. package/plugins/filters/ui/multipleSelect.js +34 -8
  584. package/plugins/filters/ui/multipleSelect.mjs +33 -8
  585. package/plugins/filters/ui/radioInput.js +6 -6
  586. package/plugins/filters/ui/radioInput.mjs +6 -6
  587. package/plugins/filters/ui/select.js +6 -6
  588. package/plugins/filters/ui/select.mjs +6 -6
  589. package/plugins/filters/utils.js +3 -3
  590. package/plugins/formulas/engine/register.js +4 -4
  591. package/plugins/formulas/engine/register.mjs +1 -1
  592. package/plugins/formulas/engine/settings.js +6 -6
  593. package/plugins/formulas/engine/settings.mjs +4 -5
  594. package/plugins/formulas/formulas.d.ts +31 -0
  595. package/plugins/formulas/formulas.js +287 -91
  596. package/plugins/formulas/formulas.mjs +280 -88
  597. package/plugins/formulas/index.d.ts +1 -0
  598. package/plugins/formulas/index.js +1 -1
  599. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +3 -1
  600. package/plugins/hiddenColumns/contextMenuItem/hideColumn.mjs +1 -0
  601. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +5 -3
  602. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +2 -1
  603. package/plugins/hiddenColumns/hiddenColumns.d.ts +21 -0
  604. package/plugins/hiddenColumns/hiddenColumns.js +39 -27
  605. package/plugins/hiddenColumns/hiddenColumns.mjs +38 -26
  606. package/plugins/hiddenColumns/index.d.ts +1 -0
  607. package/plugins/hiddenColumns/index.js +1 -1
  608. package/plugins/hiddenRows/contextMenuItem/hideRow.js +3 -1
  609. package/plugins/hiddenRows/contextMenuItem/hideRow.mjs +1 -0
  610. package/plugins/hiddenRows/contextMenuItem/showRow.js +5 -3
  611. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +2 -1
  612. package/plugins/hiddenRows/hiddenRows.d.ts +21 -0
  613. package/plugins/hiddenRows/hiddenRows.js +39 -28
  614. package/plugins/hiddenRows/hiddenRows.mjs +38 -27
  615. package/plugins/hiddenRows/index.d.ts +1 -0
  616. package/plugins/hiddenRows/index.js +1 -1
  617. package/plugins/index.d.ts +111 -0
  618. package/plugins/index.js +98 -58
  619. package/plugins/index.mjs +75 -34
  620. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +3 -1
  621. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.mjs +1 -0
  622. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +3 -1
  623. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.mjs +1 -0
  624. package/plugins/manualColumnFreeze/index.d.ts +1 -0
  625. package/plugins/manualColumnFreeze/index.js +1 -1
  626. package/plugins/manualColumnFreeze/manualColumnFreeze.d.ts +11 -0
  627. package/plugins/manualColumnFreeze/manualColumnFreeze.js +11 -8
  628. package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +10 -7
  629. package/plugins/manualColumnMove/index.d.ts +1 -0
  630. package/plugins/manualColumnMove/index.js +1 -1
  631. package/plugins/manualColumnMove/manualColumnMove.d.ts +14 -0
  632. package/plugins/manualColumnMove/manualColumnMove.js +27 -25
  633. package/plugins/manualColumnMove/manualColumnMove.mjs +26 -24
  634. package/plugins/manualColumnMove/ui/_base.js +2 -2
  635. package/plugins/manualColumnMove/ui/_base.mjs +2 -2
  636. package/plugins/manualColumnMove/ui/backlight.js +7 -7
  637. package/plugins/manualColumnMove/ui/backlight.mjs +6 -6
  638. package/plugins/manualColumnMove/ui/guideline.js +7 -7
  639. package/plugins/manualColumnMove/ui/guideline.mjs +6 -6
  640. package/plugins/manualColumnResize/index.d.ts +1 -0
  641. package/plugins/manualColumnResize/index.js +1 -1
  642. package/plugins/manualColumnResize/manualColumnResize.d.ts +30 -0
  643. package/plugins/manualColumnResize/manualColumnResize.js +10 -10
  644. package/plugins/manualColumnResize/manualColumnResize.mjs +9 -9
  645. package/plugins/manualRowMove/index.d.ts +1 -0
  646. package/plugins/manualRowMove/index.js +1 -1
  647. package/plugins/manualRowMove/manualRowMove.d.ts +14 -0
  648. package/plugins/manualRowMove/manualRowMove.js +24 -22
  649. package/plugins/manualRowMove/manualRowMove.mjs +23 -21
  650. package/plugins/manualRowMove/ui/_base.js +2 -3
  651. package/plugins/manualRowMove/ui/_base.mjs +2 -3
  652. package/plugins/manualRowMove/ui/backlight.js +8 -8
  653. package/plugins/manualRowMove/ui/backlight.mjs +7 -7
  654. package/plugins/manualRowMove/ui/guideline.js +8 -8
  655. package/plugins/manualRowMove/ui/guideline.mjs +7 -7
  656. package/plugins/manualRowResize/index.d.ts +1 -0
  657. package/plugins/manualRowResize/index.js +1 -1
  658. package/plugins/manualRowResize/manualRowResize.d.ts +29 -0
  659. package/plugins/manualRowResize/manualRowResize.js +6 -6
  660. package/plugins/manualRowResize/manualRowResize.mjs +5 -5
  661. package/plugins/mergeCells/calculations/autofill.js +4 -3
  662. package/plugins/mergeCells/calculations/autofill.mjs +3 -3
  663. package/plugins/mergeCells/calculations/selection.js +2 -3
  664. package/plugins/mergeCells/calculations/selection.mjs +2 -3
  665. package/plugins/mergeCells/cellCoords.js +2 -2
  666. package/plugins/mergeCells/cellCoords.mjs +2 -2
  667. package/plugins/mergeCells/cellsCollection.js +6 -4
  668. package/plugins/mergeCells/cellsCollection.mjs +5 -4
  669. package/plugins/mergeCells/contextMenuItem/toggleMerge.js +1 -1
  670. package/plugins/mergeCells/index.d.ts +1 -0
  671. package/plugins/mergeCells/index.js +1 -1
  672. package/plugins/mergeCells/mergeCells.d.ts +22 -0
  673. package/plugins/mergeCells/mergeCells.js +8 -6
  674. package/plugins/mergeCells/mergeCells.mjs +6 -5
  675. package/plugins/multiColumnSorting/domHelpers.js +2 -0
  676. package/plugins/multiColumnSorting/domHelpers.mjs +1 -0
  677. package/plugins/multiColumnSorting/index.d.ts +1 -0
  678. package/plugins/multiColumnSorting/index.js +1 -1
  679. package/plugins/multiColumnSorting/multiColumnSorting.d.ts +8 -0
  680. package/plugins/multiColumnSorting/multiColumnSorting.js +8 -8
  681. package/plugins/multiColumnSorting/multiColumnSorting.mjs +6 -6
  682. package/plugins/multiColumnSorting/rootComparator.js +2 -0
  683. package/plugins/multiColumnSorting/rootComparator.mjs +1 -0
  684. package/plugins/multipleSelectionHandles/index.d.ts +1 -0
  685. package/plugins/multipleSelectionHandles/index.js +1 -1
  686. package/plugins/multipleSelectionHandles/multipleSelectionHandles.d.ts +21 -0
  687. package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +9 -8
  688. package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +7 -6
  689. package/plugins/nestedHeaders/index.d.ts +1 -0
  690. package/plugins/nestedHeaders/index.js +1 -1
  691. package/plugins/nestedHeaders/nestedHeaders.d.ts +17 -0
  692. package/plugins/nestedHeaders/nestedHeaders.js +24 -20
  693. package/plugins/nestedHeaders/nestedHeaders.mjs +22 -18
  694. package/plugins/nestedHeaders/stateManager/headersTree.js +13 -7
  695. package/plugins/nestedHeaders/stateManager/headersTree.mjs +12 -7
  696. package/plugins/nestedHeaders/stateManager/index.js +10 -7
  697. package/plugins/nestedHeaders/stateManager/index.mjs +10 -7
  698. package/plugins/nestedHeaders/stateManager/nodeModifiers/utils/tree.js +1 -1
  699. package/plugins/nestedHeaders/stateManager/settingsNormalizer.js +2 -0
  700. package/plugins/nestedHeaders/stateManager/settingsNormalizer.mjs +1 -0
  701. package/plugins/nestedHeaders/stateManager/sourceSettings.js +11 -7
  702. package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +11 -7
  703. package/plugins/nestedHeaders/utils/ghostTable.js +4 -1
  704. package/plugins/nestedHeaders/utils/ghostTable.mjs +4 -1
  705. package/plugins/nestedRows/data/dataManager.js +42 -16
  706. package/plugins/nestedRows/data/dataManager.mjs +40 -15
  707. package/plugins/nestedRows/index.d.ts +1 -0
  708. package/plugins/nestedRows/index.js +1 -1
  709. package/plugins/nestedRows/nestedRows.d.ts +12 -0
  710. package/plugins/nestedRows/nestedRows.js +34 -35
  711. package/plugins/nestedRows/nestedRows.mjs +31 -33
  712. package/plugins/nestedRows/ui/_base.js +7 -4
  713. package/plugins/nestedRows/ui/_base.mjs +7 -4
  714. package/plugins/nestedRows/ui/collapsing.js +9 -8
  715. package/plugins/nestedRows/ui/collapsing.mjs +7 -7
  716. package/plugins/nestedRows/ui/contextMenu.js +5 -6
  717. package/plugins/nestedRows/ui/contextMenu.mjs +5 -6
  718. package/plugins/nestedRows/ui/headers.js +7 -8
  719. package/plugins/nestedRows/ui/headers.mjs +6 -7
  720. package/plugins/nestedRows/utils/rowMoveController.js +7 -6
  721. package/plugins/nestedRows/utils/rowMoveController.mjs +5 -5
  722. package/plugins/persistentState/index.d.ts +1 -0
  723. package/plugins/persistentState/persistentState.d.ts +13 -0
  724. package/plugins/persistentState/persistentState.js +15 -7
  725. package/plugins/persistentState/persistentState.mjs +14 -6
  726. package/plugins/persistentState/storage.js +2 -2
  727. package/plugins/persistentState/storage.mjs +2 -2
  728. package/plugins/registry.d.ts +9 -0
  729. package/plugins/registry.js +3 -1
  730. package/plugins/registry.mjs +1 -0
  731. package/plugins/search/index.d.ts +1 -0
  732. package/plugins/search/search.d.ts +28 -0
  733. package/plugins/search/search.js +10 -10
  734. package/plugins/search/search.mjs +10 -10
  735. package/plugins/touchScroll/index.d.ts +1 -0
  736. package/plugins/touchScroll/touchScroll.d.ts +13 -0
  737. package/plugins/touchScroll/touchScroll.js +16 -16
  738. package/plugins/touchScroll/touchScroll.mjs +15 -14
  739. package/plugins/trimRows/index.d.ts +1 -0
  740. package/plugins/trimRows/trimRows.d.ts +17 -0
  741. package/plugins/trimRows/trimRows.js +6 -6
  742. package/plugins/trimRows/trimRows.mjs +6 -6
  743. package/plugins/undoRedo/index.d.ts +1 -0
  744. package/plugins/undoRedo/index.js +1 -1
  745. package/plugins/undoRedo/undoRedo.d.ts +49 -0
  746. package/plugins/undoRedo/undoRedo.js +30 -32
  747. package/plugins/undoRedo/undoRedo.mjs +28 -31
  748. package/registry.d.ts +6 -0
  749. package/registry.js +46 -0
  750. package/registry.mjs +27 -0
  751. package/renderers/autocompleteRenderer/autocompleteRenderer.d.ts +5 -0
  752. package/renderers/autocompleteRenderer/autocompleteRenderer.js +1 -1
  753. package/renderers/autocompleteRenderer/index.d.ts +1 -0
  754. package/renderers/base.d.ts +3 -0
  755. package/renderers/baseRenderer/baseRenderer.d.ts +5 -0
  756. package/renderers/baseRenderer/baseRenderer.js +1 -1
  757. package/renderers/baseRenderer/index.d.ts +1 -0
  758. package/renderers/checkboxRenderer/checkboxRenderer.d.ts +5 -0
  759. package/renderers/checkboxRenderer/checkboxRenderer.js +3 -5
  760. package/renderers/checkboxRenderer/checkboxRenderer.mjs +3 -4
  761. package/renderers/checkboxRenderer/index.d.ts +1 -0
  762. package/renderers/htmlRenderer/htmlRenderer.d.ts +5 -0
  763. package/renderers/htmlRenderer/htmlRenderer.js +1 -1
  764. package/renderers/htmlRenderer/index.d.ts +1 -0
  765. package/renderers/index.d.ts +42 -0
  766. package/renderers/index.js +16 -2
  767. package/renderers/index.mjs +22 -7
  768. package/renderers/numericRenderer/index.d.ts +1 -0
  769. package/renderers/numericRenderer/numericRenderer.d.ts +5 -0
  770. package/renderers/numericRenderer/numericRenderer.js +1 -1
  771. package/renderers/passwordRenderer/index.d.ts +1 -0
  772. package/renderers/passwordRenderer/passwordRenderer.d.ts +5 -0
  773. package/renderers/passwordRenderer/passwordRenderer.js +1 -1
  774. package/renderers/registry.d.ts +18 -0
  775. package/renderers/registry.js +3 -2
  776. package/renderers/textRenderer/index.d.ts +1 -0
  777. package/renderers/textRenderer/textRenderer.d.ts +5 -0
  778. package/renderers/textRenderer/textRenderer.js +1 -1
  779. package/selection/highlight/constants.js +1 -1
  780. package/selection/highlight/highlight.js +10 -8
  781. package/selection/highlight/highlight.mjs +8 -7
  782. package/selection/highlight/types/activeHeader.js +4 -2
  783. package/selection/highlight/types/activeHeader.mjs +3 -2
  784. package/selection/highlight/types/area.js +4 -2
  785. package/selection/highlight/types/area.mjs +3 -2
  786. package/selection/highlight/types/cell.js +4 -2
  787. package/selection/highlight/types/cell.mjs +3 -2
  788. package/selection/highlight/types/customSelection.js +4 -2
  789. package/selection/highlight/types/customSelection.mjs +3 -2
  790. package/selection/highlight/types/fill.js +4 -2
  791. package/selection/highlight/types/fill.mjs +3 -2
  792. package/selection/highlight/types/header.js +4 -2
  793. package/selection/highlight/types/header.mjs +3 -2
  794. package/selection/highlight/types/index.js +4 -2
  795. package/selection/highlight/types/index.mjs +3 -2
  796. package/selection/highlight/visualSelection.js +9 -7
  797. package/selection/highlight/visualSelection.mjs +7 -6
  798. package/selection/index.d.ts +5 -0
  799. package/selection/index.js +2 -0
  800. package/selection/mouseEventHandler.js +4 -4
  801. package/selection/mouseEventHandler.mjs +3 -3
  802. package/selection/range.js +6 -6
  803. package/selection/range.mjs +5 -5
  804. package/selection/selection.js +18 -9
  805. package/selection/selection.mjs +17 -9
  806. package/selection/transformation.js +4 -3
  807. package/selection/transformation.mjs +4 -3
  808. package/selection/utils.js +6 -4
  809. package/selection/utils.mjs +3 -2
  810. package/settings.d.ts +208 -0
  811. package/tableView.js +21 -15
  812. package/tableView.mjs +19 -14
  813. package/translations/changesObservable/observable.js +11 -6
  814. package/translations/changesObservable/observable.mjs +11 -6
  815. package/translations/changesObservable/observer.js +7 -2
  816. package/translations/changesObservable/observer.mjs +7 -2
  817. package/translations/changesObservable/utils.js +1 -0
  818. package/translations/changesObservable/utils.mjs +1 -0
  819. package/translations/index.d.ts +1 -0
  820. package/translations/index.js +3 -1
  821. package/translations/indexMapper.d.ts +46 -0
  822. package/translations/indexMapper.js +38 -13
  823. package/translations/indexMapper.mjs +35 -12
  824. package/translations/mapCollections/aggregatedCollection.js +6 -6
  825. package/translations/mapCollections/aggregatedCollection.mjs +5 -5
  826. package/translations/mapCollections/index.js +2 -0
  827. package/translations/mapCollections/mapCollection.js +2 -2
  828. package/translations/mapCollections/mapCollection.mjs +1 -1
  829. package/translations/maps/hidingMap.js +6 -6
  830. package/translations/maps/hidingMap.mjs +5 -5
  831. package/translations/maps/indexMap.d.ts +10 -0
  832. package/translations/maps/indexMap.js +1 -1
  833. package/translations/maps/indexMap.mjs +1 -1
  834. package/translations/maps/indexesSequence.js +7 -7
  835. package/translations/maps/indexesSequence.mjs +6 -6
  836. package/translations/maps/linkedPhysicalIndexToValueMap.js +7 -5
  837. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +6 -5
  838. package/translations/maps/physicalIndexToValueMap.js +7 -7
  839. package/translations/maps/physicalIndexToValueMap.mjs +6 -6
  840. package/translations/maps/trimmingMap.js +6 -6
  841. package/translations/maps/trimmingMap.mjs +5 -5
  842. package/translations/maps/utils/actionsOnIndexes.js +2 -0
  843. package/translations/maps/utils/actionsOnIndexes.mjs +1 -0
  844. package/translations/maps/utils/indexesSequence.js +2 -0
  845. package/translations/maps/utils/indexesSequence.mjs +1 -0
  846. package/translations/maps/utils/physicallyIndexed.js +2 -0
  847. package/translations/maps/utils/physicallyIndexed.mjs +1 -0
  848. package/utils/dataStructures/linkedList.js +3 -3
  849. package/utils/dataStructures/linkedList.mjs +3 -3
  850. package/utils/dataStructures/priorityMap.js +3 -1
  851. package/utils/dataStructures/priorityMap.mjs +1 -0
  852. package/utils/dataStructures/queue.js +1 -1
  853. package/utils/dataStructures/queue.mjs +1 -1
  854. package/utils/dataStructures/stack.js +1 -1
  855. package/utils/dataStructures/stack.mjs +1 -1
  856. package/utils/dataStructures/tree.js +6 -4
  857. package/utils/dataStructures/tree.mjs +4 -3
  858. package/utils/dataStructures/uniqueMap.js +2 -0
  859. package/utils/dataStructures/uniqueMap.mjs +1 -0
  860. package/utils/dataStructures/uniqueSet.js +2 -0
  861. package/utils/dataStructures/uniqueSet.mjs +1 -0
  862. package/utils/ghostTable.js +17 -5
  863. package/utils/ghostTable.mjs +16 -5
  864. package/utils/interval.js +2 -3
  865. package/utils/interval.mjs +1 -2
  866. package/utils/parseTable.d.ts +5 -0
  867. package/utils/parseTable.js +1 -1
  868. package/utils/rootInstance.js +3 -2
  869. package/utils/samplesGenerator.js +1 -2
  870. package/utils/samplesGenerator.mjs +1 -2
  871. package/utils/staticRegister.js +3 -1
  872. package/utils/staticRegister.mjs +1 -0
  873. package/validators/autocompleteValidator/autocompleteValidator.d.ts +5 -0
  874. package/validators/autocompleteValidator/autocompleteValidator.js +1 -1
  875. package/validators/autocompleteValidator/index.d.ts +1 -0
  876. package/validators/base.d.ts +6 -0
  877. package/validators/dateValidator/dateValidator.d.ts +5 -0
  878. package/validators/dateValidator/dateValidator.js +2 -2
  879. package/validators/dateValidator/index.d.ts +1 -0
  880. package/validators/index.d.ts +33 -0
  881. package/validators/index.js +13 -2
  882. package/validators/index.mjs +16 -4
  883. package/validators/numericValidator/index.d.ts +1 -0
  884. package/validators/numericValidator/numericValidator.d.ts +5 -0
  885. package/validators/numericValidator/numericValidator.js +1 -1
  886. package/validators/registry.d.ts +18 -0
  887. package/validators/registry.js +3 -2
  888. package/validators/timeValidator/index.d.ts +1 -0
  889. package/validators/timeValidator/timeValidator.d.ts +5 -0
  890. package/validators/timeValidator/timeValidator.js +3 -1
  891. package/validators/timeValidator/timeValidator.mjs +1 -0
  892. package/handsontable-general-terms.pdf +0 -0
  893. package/handsontable.d.ts +0 -2616
  894. package/plugins/formulas/autofill.js +0 -180
  895. package/plugins/formulas/autofill.mjs +0 -172
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
 
@@ -12,23 +12,25 @@ import "core-js/modules/es.array.sort.js";
12
12
  import "core-js/modules/es.array.splice.js";
13
13
  import "core-js/modules/es.number.is-integer.js";
14
14
  import "core-js/modules/es.number.constructor.js";
15
+ import "core-js/modules/es.array.slice.js";
16
+ import "core-js/modules/es.array.concat.js";
17
+ import "core-js/modules/es.array.fill.js";
18
+ import "core-js/modules/es.array.map.js";
15
19
  import "core-js/modules/es.regexp.exec.js";
16
20
  import "core-js/modules/es.string.replace.js";
17
- import "core-js/modules/es.array.concat.js";
18
21
  import "core-js/modules/es.array.from.js";
19
22
  import "core-js/modules/es.string.iterator.js";
20
23
  import "core-js/modules/es.array.index-of.js";
21
24
  import "core-js/modules/es.array.reverse.js";
25
+ import "core-js/modules/es.object.to-string.js";
22
26
  import "core-js/modules/web.dom-collections.for-each.js";
23
27
  import "core-js/modules/web.timers.js";
24
28
  import "core-js/modules/web.immediate.js";
25
29
  import "core-js/modules/es.symbol.js";
26
30
  import "core-js/modules/es.symbol.description.js";
27
- import "core-js/modules/es.object.to-string.js";
28
31
  import "core-js/modules/es.symbol.iterator.js";
29
32
  import "core-js/modules/es.array.iterator.js";
30
33
  import "core-js/modules/web.dom-collections.iterator.js";
31
- import "core-js/modules/es.array.slice.js";
32
34
  import "core-js/modules/es.function.name.js";
33
35
 
34
36
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
@@ -49,17 +51,17 @@ import { isDefined, isUndefined, isRegExp, _injectProductInfo, isEmpty } from ".
49
51
  import { isMobileBrowser, isIpadOS } from "./helpers/browser.mjs";
50
52
  import EditorManager from "./editorManager.mjs";
51
53
  import EventManager from "./eventManager.mjs";
52
- import { deepClone, duckSchema, isObjectEqual, deepObjectSize, hasOwnProperty, createObjectPropListener, objectEach } from "./helpers/object.mjs";
53
- import { arrayMap, arrayEach, arrayReduce, getDifferenceOfArrays, stringToArray } from "./helpers/array.mjs";
54
+ import { deepClone, duckSchema, isObjectEqual, isObject, deepObjectSize, hasOwnProperty, createObjectPropListener, objectEach } from "./helpers/object.mjs";
55
+ import { arrayMap, arrayEach, arrayReduce, getDifferenceOfArrays, stringToArray, pivot } from "./helpers/array.mjs";
54
56
  import { instanceToHTML } from "./utils/parseTable.mjs";
55
57
  import { getPlugin, getPluginsNames } from "./plugins/registry.mjs";
56
58
  import { getRenderer } from "./renderers/registry.mjs";
57
59
  import { getValidator } from "./validators/registry.mjs";
58
60
  import { randomString, toUpperCaseFirst } from "./helpers/string.mjs";
59
- import { rangeEach, rangeEachReverse } from "./helpers/number.mjs";
61
+ import { rangeEach, rangeEachReverse, isNumericLike } from "./helpers/number.mjs";
60
62
  import TableView from "./tableView.mjs";
61
63
  import DataSource from "./dataSource.mjs";
62
- import { translateRowsToColumns, cellMethodLookupFactory, spreadsheetColumnLabel } from "./helpers/data.mjs";
64
+ import { cellMethodLookupFactory, spreadsheetColumnLabel } from "./helpers/data.mjs";
63
65
  import { IndexMapper } from "./translations/index.mjs";
64
66
  import { registerAsRootInstance, hasValidParameter, isRootInstance } from "./utils/rootInstance.mjs";
65
67
  import { CellCoords, ViewportColumnsCalculator } from "./3rdparty/walkontable/src/index.mjs";
@@ -68,7 +70,7 @@ import { hasLanguageDictionary, getValidLanguageCode, getTranslatedPhrase } from
68
70
  import { warnUserAboutLanguageRegistration, normalizeLanguageCode } from "./i18n/utils.mjs";
69
71
  import { startObserving as keyStateStartObserving, stopObserving as keyStateStopObserving } from "./utils/keyStateObserver.mjs";
70
72
  import { Selection } from "./selection/index.mjs";
71
- import { MetaManager, DataMap } from "./dataMap/index.mjs";
73
+ import { MetaManager, DynamicCellMetaMod, replaceData } from "./dataMap/index.mjs";
72
74
  import { createUniqueMap } from "./utils/dataStructures/uniqueMap.mjs";
73
75
  var activeGuid = null;
74
76
  /* eslint-disable jsdoc/require-description-complete-sentence */
@@ -110,7 +112,7 @@ export default function Core(rootElement, userSettings) {
110
112
  var editorManager;
111
113
  var firstRun = true;
112
114
  userSettings.language = getValidLanguageCode(userSettings.language);
113
- var metaManager = new MetaManager(userSettings);
115
+ var metaManager = new MetaManager(instance, userSettings, [DynamicCellMetaMod]);
114
116
  var tableMeta = metaManager.getTableMeta();
115
117
  var globalMeta = metaManager.getGlobalMeta();
116
118
  var pluginsRegistry = createUniqueMap();
@@ -128,8 +130,6 @@ export default function Core(rootElement, userSettings) {
128
130
 
129
131
 
130
132
  this.rootElement = rootElement;
131
- /* eslint-enable jsdoc/require-description-complete-sentence */
132
-
133
133
  /**
134
134
  * The nearest document over container.
135
135
  *
@@ -395,8 +395,6 @@ export default function Core(rootElement, userSettings) {
395
395
  /**
396
396
  * Inserts or removes rows and columns.
397
397
  *
398
- * @memberof Core#
399
- * @function alter
400
398
  * @private
401
399
  * @param {string} action Possible values: "insert_row", "insert_col", "remove_row", "remove_col".
402
400
  * @param {number|Array} index Row or column visual index which from the alter action will be triggered.
@@ -675,6 +673,8 @@ export default function Core(rootElement, userSettings) {
675
673
 
676
674
  /**
677
675
  * Makes sure there are empty rows at the bottom of the table.
676
+ *
677
+ * @private
678
678
  */
679
679
  adjustRowsAndCols: function adjustRowsAndCols() {
680
680
  var minRows = tableMeta.minRows;
@@ -815,72 +815,91 @@ export default function Core(rootElement, userSettings) {
815
815
  var clen;
816
816
  var setData = [];
817
817
  var current = {};
818
+ var newDataByColumns = [];
819
+ var startRow = start.row;
820
+ var startColumn = start.col;
818
821
  rlen = input.length;
819
822
 
820
823
  if (rlen === 0) {
821
824
  return false;
822
825
  }
823
826
 
824
- var repeatCol;
825
- var repeatRow;
826
- var cmax;
827
- var rmax;
828
- /* eslint-disable no-case-declarations */
829
- // insert data with specified pasteMode method
827
+ var columnsPopulationEnd = 0;
828
+ var rowsPopulationEnd = 0;
829
+
830
+ if (isObject(end)) {
831
+ columnsPopulationEnd = end.col - startColumn + 1;
832
+ rowsPopulationEnd = end.row - startRow + 1;
833
+ } // insert data with specified pasteMode method
834
+
830
835
 
831
836
  switch (method) {
832
837
  case 'shift_down':
833
- repeatCol = end ? end.col - start.col + 1 : 0;
834
- repeatRow = end ? end.row - start.row + 1 : 0; // eslint-disable-next-line no-param-reassign
838
+ // translate data from a list of rows to a list of columns
839
+ var populatedDataByColumns = pivot(input);
840
+ var numberOfDataColumns = populatedDataByColumns.length; // method's argument can extend the range of data population (data would be repeated)
835
841
 
836
- input = translateRowsToColumns(input);
842
+ var numberOfColumnsToPopulate = Math.max(numberOfDataColumns, columnsPopulationEnd);
843
+ var pushedDownDataByRows = instance.getData().slice(startRow); // translate data from a list of rows to a list of columns
837
844
 
838
- for (c = 0, clen = input.length, cmax = Math.max(clen, repeatCol); c < cmax; c++) {
839
- if (c < clen) {
840
- var _instance;
845
+ var pushedDownDataByColumns = pivot(pushedDownDataByRows).slice(startColumn, startColumn + numberOfColumnsToPopulate);
841
846
 
842
- for (r = 0, rlen = input[c].length; r < repeatRow - rlen; r++) {
843
- input[c].push(input[c][r % rlen]);
847
+ for (c = 0; c < numberOfColumnsToPopulate; c += 1) {
848
+ if (c < numberOfDataColumns) {
849
+ for (r = 0, rlen = populatedDataByColumns[c].length; r < rowsPopulationEnd - rlen; r += 1) {
850
+ // repeating data for rows
851
+ populatedDataByColumns[c].push(populatedDataByColumns[c][r % rlen]);
844
852
  }
845
853
 
846
- input[c].unshift(start.col + c, start.row, 0);
847
-
848
- (_instance = instance).spliceCol.apply(_instance, _toConsumableArray(input[c]));
854
+ if (c < pushedDownDataByColumns.length) {
855
+ newDataByColumns.push(populatedDataByColumns[c].concat(pushedDownDataByColumns[c]));
856
+ } else {
857
+ // if before data population, there was no data in the column
858
+ // we fill the required rows' newly-created cells with `null` values
859
+ newDataByColumns.push(populatedDataByColumns[c].concat(new Array(pushedDownDataByRows.length).fill(null)));
860
+ }
849
861
  } else {
850
- var _instance2;
851
-
852
- input[c % clen][0] = start.col + c;
853
-
854
- (_instance2 = instance).spliceCol.apply(_instance2, _toConsumableArray(input[c % clen]));
862
+ // Repeating data for columns.
863
+ newDataByColumns.push(populatedDataByColumns[c % numberOfDataColumns].concat(pushedDownDataByColumns[c]));
855
864
  }
856
865
  }
857
866
 
867
+ instance.populateFromArray(startRow, startColumn, pivot(newDataByColumns));
858
868
  break;
859
869
 
860
870
  case 'shift_right':
861
- repeatCol = end ? end.col - start.col + 1 : 0;
862
- repeatRow = end ? end.row - start.row + 1 : 0;
871
+ var numberOfDataRows = input.length; // method's argument can extend the range of data population (data would be repeated)
863
872
 
864
- for (r = 0, rlen = input.length, rmax = Math.max(rlen, repeatRow); r < rmax; r++) {
865
- if (r < rlen) {
866
- var _instance3;
873
+ var numberOfRowsToPopulate = Math.max(numberOfDataRows, rowsPopulationEnd);
874
+ var pushedRightDataByRows = instance.getData().slice(startRow).map(function (rowData) {
875
+ return rowData.slice(startColumn);
876
+ });
867
877
 
868
- for (c = 0, clen = input[r].length; c < repeatCol - clen; c++) {
878
+ for (r = 0; r < numberOfRowsToPopulate; r += 1) {
879
+ if (r < numberOfDataRows) {
880
+ for (c = 0, clen = input[r].length; c < columnsPopulationEnd - clen; c += 1) {
881
+ // repeating data for rows
869
882
  input[r].push(input[r][c % clen]);
870
883
  }
871
884
 
872
- input[r].unshift(start.row + r, start.col, 0);
885
+ if (r < pushedRightDataByRows.length) {
886
+ for (var i = 0; i < pushedRightDataByRows[r].length; i += 1) {
887
+ input[r].push(pushedRightDataByRows[r][i]);
888
+ }
889
+ } else {
890
+ var _input$r;
873
891
 
874
- (_instance3 = instance).spliceRow.apply(_instance3, _toConsumableArray(input[r]));
892
+ // if before data population, there was no data in the row
893
+ // we fill the required columns' newly-created cells with `null` values
894
+ (_input$r = input[r]).push.apply(_input$r, _toConsumableArray(new Array(pushedRightDataByRows[0].length).fill(null)));
895
+ }
875
896
  } else {
876
- var _instance4;
877
-
878
- input[r % rlen][0] = start.row + r;
879
-
880
- (_instance4 = instance).spliceRow.apply(_instance4, _toConsumableArray(input[r % rlen]));
897
+ // Repeating data for columns.
898
+ input.push(input[r % rlen].slice(0, numberOfRowsToPopulate).concat(pushedRightDataByRows[r]));
881
899
  }
882
900
  }
883
901
 
902
+ instance.populateFromArray(startRow, startColumn, input);
884
903
  break;
885
904
 
886
905
  case 'overwrite':
@@ -1182,10 +1201,6 @@ export default function Core(rootElement, userSettings) {
1182
1201
 
1183
1202
  var waitingForValidator = new ValidatorsQueue();
1184
1203
 
1185
- var isNumericData = function isNumericData(value) {
1186
- return value.length > 0 && /^\s*[+-.]?\s*(?:(?:\d+(?:(\.|,)\d+)?(?:e[+-]?\d+)?)|(?:0x[a-f\d]+))\s*$/.test(value);
1187
- };
1188
-
1189
1204
  waitingForValidator.onQueueEmpty = function (isValid) {
1190
1205
  if (activeEditor && shouldBeCanceled) {
1191
1206
  activeEditor.cancelChanges();
@@ -1206,7 +1221,7 @@ export default function Core(rootElement, userSettings) {
1206
1221
  var col = datamap.propToCol(prop);
1207
1222
  var cellProperties = instance.getCellMeta(row, col);
1208
1223
 
1209
- if (cellProperties.type === 'numeric' && typeof newValue === 'string' && isNumericData(newValue)) {
1224
+ if (cellProperties.type === 'numeric' && typeof newValue === 'string' && isNumericLike(newValue)) {
1210
1225
  changes[i][3] = getParsedNumber(newValue);
1211
1226
  }
1212
1227
  /* eslint-disable no-loop-func */
@@ -1330,6 +1345,8 @@ export default function Core(rootElement, userSettings) {
1330
1345
  /**
1331
1346
  * Validate a single cell.
1332
1347
  *
1348
+ * @memberof Core#
1349
+ * @function validateCell
1333
1350
  * @param {string|number} value The value to validate.
1334
1351
  * @param {object} cellProperties The cell meta which corresponds with the value.
1335
1352
  * @param {Function} callback The callback function.
@@ -1341,9 +1358,10 @@ export default function Core(rootElement, userSettings) {
1341
1358
  var validator = instance.getCellValidator(cellProperties); // the `canBeValidated = false` argument suggests, that the cell passes validation by default.
1342
1359
 
1343
1360
  /**
1361
+ * @private
1362
+ * @function done
1344
1363
  * @param {boolean} valid Indicates if the validation was successful.
1345
1364
  * @param {boolean} [canBeValidated=true] Flag which controls the validation process.
1346
- * @private
1347
1365
  */
1348
1366
 
1349
1367
  function done(valid) {
@@ -1564,7 +1582,7 @@ export default function Core(rootElement, userSettings) {
1564
1582
  * Populate cells at position with 2D input array (e.g. `[[1, 2], [3, 4]]`). Use `endRow`, `endCol` when you
1565
1583
  * want to cut input when a certain row is reached.
1566
1584
  *
1567
- * Optional `method` argument has the same effect as pasteMode option (see {@link options#pastemode Options#pasteMode}).
1585
+ * Optional `method` argument has the same effect as pasteMode option (see {@link Options#pasteMode}).
1568
1586
  *
1569
1587
  * @memberof Core#
1570
1588
  * @function populateFromArray
@@ -1753,7 +1771,7 @@ export default function Core(rootElement, userSettings) {
1753
1771
  }
1754
1772
  };
1755
1773
  /**
1756
- * Checks if the table rendering process was suspended. See explanation in {@link core#suspendrender Core#suspendRender}.
1774
+ * Checks if the table rendering process was suspended. See explanation in {@link Core#suspendRender}.
1757
1775
  *
1758
1776
  * @memberof Core#
1759
1777
  * @function isRenderSuspended
@@ -1772,8 +1790,8 @@ export default function Core(rootElement, userSettings) {
1772
1790
  * When the table is in the suspend state, most operations will have no visual
1773
1791
  * effect until the rendering state is resumed. Resuming the state automatically
1774
1792
  * invokes the table rendering. To make sure that after executing all operations,
1775
- * the table will be rendered, it's highly recommended to use the {@link core#batchrender Core#batchRender}
1776
- * method or {@link core#batch Core#batch}, which additionally aggregates the logic execution
1793
+ * the table will be rendered, it's highly recommended to use the {@link Core#batchRender}
1794
+ * method or {@link Core#batch}, which additionally aggregates the logic execution
1777
1795
  * that happens behind the table.
1778
1796
  *
1779
1797
  * The method is intended to be used by advanced users. Suspending the rendering
@@ -1802,7 +1820,7 @@ export default function Core(rootElement, userSettings) {
1802
1820
  this.renderSuspendedCounter += 1;
1803
1821
  };
1804
1822
  /**
1805
- * Resumes the rendering process. In combination with the {@link core#suspendrender Core#suspendRender}
1823
+ * Resumes the rendering process. In combination with the {@link Core#suspendRender}
1806
1824
  * method it allows aggregating the table render cycles triggered by API calls or UI
1807
1825
  * actions (or both) and calls the "render" once in the end. When the table is in
1808
1826
  * the suspend state, most operations will have no visual effect until the rendering
@@ -1904,7 +1922,7 @@ export default function Core(rootElement, userSettings) {
1904
1922
  };
1905
1923
  /**
1906
1924
  * Checks if the table indexes recalculation process was suspended. See explanation
1907
- * in {@link core#suspendexecution Core#suspendExecution}.
1925
+ * in {@link Core#suspendExecution}.
1908
1926
  *
1909
1927
  * @memberof Core#
1910
1928
  * @function isExecutionSuspended
@@ -1946,7 +1964,7 @@ export default function Core(rootElement, userSettings) {
1946
1964
  this.rowIndexMapper.suspendOperations();
1947
1965
  };
1948
1966
  /**
1949
- * Resumes the execution process. In combination with the {@link core#suspendexecution Core#suspendExecution}
1967
+ * Resumes the execution process. In combination with the {@link Core#suspendExecution}
1950
1968
  * method it allows aggregating the table logic changes after which the cache is
1951
1969
  * updated. Resuming the state automatically invokes the table cache updating process.
1952
1970
  *
@@ -1957,7 +1975,7 @@ export default function Core(rootElement, userSettings) {
1957
1975
  * @function resumeExecution
1958
1976
  * @param {boolean} [forceFlushChanges=false] If `true`, the table internal data cache
1959
1977
  * is recalculated after the execution of the batched operations. For nested
1960
- * {@link core#batchexecution Core#batchExecution} calls, it can be desire to recalculate the table
1978
+ * {@link Core#batchExecution} calls, it can be desire to recalculate the table
1961
1979
  * after each batch.
1962
1980
  * @since 8.3.0
1963
1981
  * @example
@@ -2112,14 +2130,67 @@ export default function Core(rootElement, userSettings) {
2112
2130
  }, isSizeChanged);
2113
2131
  };
2114
2132
  /**
2115
- * Loads new data to Handsontable. Loading new data resets the cell meta.
2116
- * Since 8.0.0 loading new data also resets states corresponding to rows and columns
2117
- * (for example, row/column sequence, column width, row height, frozen columns etc.).
2133
+ * The `updateData()` method replaces Handsontable's [`data`](@/api/options.md#data) with a new dataset.
2134
+ *
2135
+ * The `updateData()` method:
2136
+ * - Keeps cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)
2137
+ * - Keeps rows' states (e.g. row order)
2138
+ * - Keeps columns' states (e.g. column order)
2139
+ *
2140
+ * To replace Handsontable's [`data`](@/api/options.md#data) and reset states, use the [`loadData()`](#loaddata) method.
2141
+ *
2142
+ * Read more:
2143
+ * - [Binding to data &#8594;](@/guides/getting-started/binding-to-data.md)
2144
+ * - [Saving data &#8594;](@/guides/getting-started/saving-data.md)
2145
+ *
2146
+ * @memberof Core#
2147
+ * @function updateData
2148
+ * @since 11.1.0
2149
+ * @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
2150
+ * @param {string} [source] The source of the `updateData()` call
2151
+ * @fires Hooks#beforeUpdateData
2152
+ * @fires Hooks#afterUpdateData
2153
+ * @fires Hooks#afterChange
2154
+ */
2155
+
2156
+
2157
+ this.updateData = function (data, source) {
2158
+ var _this3 = this;
2159
+
2160
+ replaceData(data, function (newDataMap) {
2161
+ datamap = newDataMap;
2162
+ }, function (newDataMap) {
2163
+ datamap = newDataMap;
2164
+ instance.columnIndexMapper.fitToLength(_this3.getInitialColumnCount());
2165
+ instance.rowIndexMapper.fitToLength(_this3.countSourceRows());
2166
+ grid.adjustRowsAndCols();
2167
+ }, {
2168
+ hotInstance: instance,
2169
+ dataMap: datamap,
2170
+ dataSource: dataSource,
2171
+ internalSource: 'updateData',
2172
+ source: source,
2173
+ firstRun: firstRun
2174
+ });
2175
+ };
2176
+ /**
2177
+ * The `loadData()` method replaces Handsontable's [`data`](@/api/options.md#data) with a new dataset.
2178
+ *
2179
+ * Additionally, the `loadData()` method:
2180
+ * - Resets cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)
2181
+ * - Resets rows' states (e.g. row order)
2182
+ * - Resets columns' states (e.g. column order)
2183
+ *
2184
+ * To replace Handsontable's [`data`](@/api/options.md#data) without resetting states, use the [`updateData()`](#updatedata) method.
2185
+ *
2186
+ * Read more:
2187
+ * - [Binding to data &#8594;](@/guides/getting-started/binding-to-data.md)
2188
+ * - [Saving data &#8594;](@/guides/getting-started/saving-data.md)
2118
2189
  *
2119
2190
  * @memberof Core#
2120
2191
  * @function loadData
2121
- * @param {Array} data Array of arrays or array of objects containing data.
2122
- * @param {string} [source] Source of the loadData call.
2192
+ * @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
2193
+ * @param {string} [source] The source of the `loadData()` call
2123
2194
  * @fires Hooks#beforeLoadData
2124
2195
  * @fires Hooks#afterLoadData
2125
2196
  * @fires Hooks#afterChange
@@ -2127,88 +2198,34 @@ export default function Core(rootElement, userSettings) {
2127
2198
 
2128
2199
 
2129
2200
  this.loadData = function (data, source) {
2130
- if (Array.isArray(tableMeta.dataSchema)) {
2131
- instance.dataType = 'array';
2132
- } else if (isFunction(tableMeta.dataSchema)) {
2133
- instance.dataType = 'function';
2134
- } else {
2135
- instance.dataType = 'object';
2136
- }
2137
-
2138
- if (datamap) {
2139
- datamap.destroy();
2140
- }
2141
-
2142
- data = instance.runHooks('beforeLoadData', data, firstRun, source);
2143
- datamap = new DataMap(instance, data, tableMeta);
2144
-
2145
- if (_typeof(data) === 'object' && data !== null) {
2146
- if (!(data.push && data.splice)) {
2147
- // check if data is array. Must use duck-type check so Backbone Collections also pass it
2148
- // when data is not an array, attempt to make a single-row array of it
2149
- // eslint-disable-next-line no-param-reassign
2150
- data = [data];
2151
- }
2152
- } else if (data === null) {
2153
- var dataSchema = datamap.getSchema(); // eslint-disable-next-line no-param-reassign
2154
-
2155
- data = [];
2156
- var row;
2157
- var r = 0;
2158
- var rlen = 0;
2159
-
2160
- for (r = 0, rlen = tableMeta.startRows; r < rlen; r++) {
2161
- if ((instance.dataType === 'object' || instance.dataType === 'function') && tableMeta.dataSchema) {
2162
- row = deepClone(dataSchema);
2163
- data.push(row);
2164
- } else if (instance.dataType === 'array') {
2165
- row = deepClone(dataSchema[0]);
2166
- data.push(row);
2167
- } else {
2168
- row = [];
2169
-
2170
- for (var c = 0, clen = tableMeta.startCols; c < clen; c++) {
2171
- row.push(null);
2172
- }
2201
+ replaceData(data, function (newDataMap) {
2202
+ datamap = newDataMap;
2203
+ }, function () {
2204
+ metaManager.clearCellsCache();
2205
+ instance.initIndexMappers();
2206
+ grid.adjustRowsAndCols();
2173
2207
 
2174
- data.push(row);
2175
- }
2208
+ if (firstRun) {
2209
+ firstRun = [null, 'loadData'];
2176
2210
  }
2177
- } else {
2178
- throw new Error("loadData only accepts array of objects or array of arrays (".concat(_typeof(data), " given)"));
2179
- }
2180
-
2181
- if (Array.isArray(data[0])) {
2182
- instance.dataType = 'array';
2183
- }
2184
-
2185
- tableMeta.data = data;
2186
- datamap.dataSource = data;
2187
- dataSource.data = data;
2188
- dataSource.dataType = instance.dataType;
2189
- dataSource.colToProp = datamap.colToProp.bind(datamap);
2190
- dataSource.propToCol = datamap.propToCol.bind(datamap);
2191
- dataSource.countCachedColumns = datamap.countCachedColumns.bind(datamap);
2192
- metaManager.clearCellsCache();
2193
- instance.initIndexMappers();
2194
- grid.adjustRowsAndCols();
2195
- instance.runHooks('afterLoadData', data, firstRun, source);
2196
-
2197
- if (firstRun) {
2198
- firstRun = [null, 'loadData'];
2199
- } else {
2200
- instance.runHooks('afterChange', null, 'loadData');
2201
- instance.render();
2202
- }
2211
+ }, {
2212
+ hotInstance: instance,
2213
+ dataMap: datamap,
2214
+ dataSource: dataSource,
2215
+ internalSource: 'loadData',
2216
+ source: source,
2217
+ firstRun: firstRun
2218
+ });
2203
2219
  };
2204
2220
  /**
2205
- * Init index mapper which manage indexes assigned to the data.
2221
+ * Gets the initial column count, calculated based on the `columns` setting.
2206
2222
  *
2207
2223
  * @private
2224
+ * @returns {number} The calculated number of columns.
2208
2225
  */
2209
2226
 
2210
2227
 
2211
- this.initIndexMappers = function () {
2228
+ this.getInitialColumnCount = function () {
2212
2229
  var columnsSettings = tableMeta.columns;
2213
2230
  var finalNrOfColumns = 0; // We will check number of columns when the `columns` property was defined as an array. Columns option may
2214
2231
  // narrow down or expand displayed dataset in that case.
@@ -2238,13 +2255,23 @@ export default function Core(rootElement, userSettings) {
2238
2255
  finalNrOfColumns = this.countSourceCols();
2239
2256
  }
2240
2257
 
2241
- this.columnIndexMapper.initToLength(finalNrOfColumns);
2258
+ return finalNrOfColumns;
2259
+ };
2260
+ /**
2261
+ * Init index mapper which manage indexes assigned to the data.
2262
+ *
2263
+ * @private
2264
+ */
2265
+
2266
+
2267
+ this.initIndexMappers = function () {
2268
+ this.columnIndexMapper.initToLength(this.getInitialColumnCount());
2242
2269
  this.rowIndexMapper.initToLength(this.countSourceRows());
2243
2270
  };
2244
2271
  /**
2245
2272
  * Returns the current data object (the same one that was passed by `data` configuration option or `loadData` method,
2246
2273
  * unless some modifications have been applied (i.e. Sequence of rows/columns was changed, some row/column was skipped).
2247
- * If that's the case - use the {@link core#getsourcedata Core#getSourceData} method.).
2274
+ * If that's the case - use the {@link Core#getSourceData} method.).
2248
2275
  *
2249
2276
  * Optionally you can provide cell range by defining `row`, `column`, `row2`, `column2` to get only a fragment of table data.
2250
2277
  *
@@ -2330,7 +2357,7 @@ export default function Core(rootElement, userSettings) {
2330
2357
  *
2331
2358
  * @memberof Core#
2332
2359
  * @function updateSettings
2333
- * @param {object} settings New settings object (see {@link options Options}).
2360
+ * @param {object} settings New settings object (see {@link Options}).
2334
2361
  * @param {boolean} [init=false] Internally used for in initialization mode.
2335
2362
  * @example
2336
2363
  * ```js
@@ -2347,6 +2374,12 @@ export default function Core(rootElement, userSettings) {
2347
2374
 
2348
2375
  this.updateSettings = function (settings) {
2349
2376
  var init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
2377
+ // TODO: uncomment the next line with the next major version update
2378
+ // Do not forget to re-enable the pending tests that cover the change:
2379
+ // * https://github.com/handsontable/handsontable/blob/9f62c282a1c951b27cd8406aa27105bd32b05bb6/handsontable/test/e2e/core/toPhysicalColumn.spec.js#L70
2380
+ // * https://github.com/handsontable/handsontable/blob/9f62c282a1c951b27cd8406aa27105bd32b05bb6/handsontable/test/e2e/core/toVisualColumn.spec.js#L70
2381
+ // const dataUpdateFunction = (firstRun ? instance.loadData : instance.updateData).bind(this);
2382
+ var dataUpdateFunction = instance.loadData.bind(this);
2350
2383
  var columnsAsFunc = false;
2351
2384
  var i;
2352
2385
  var j;
@@ -2391,9 +2424,9 @@ export default function Core(rootElement, userSettings) {
2391
2424
 
2392
2425
 
2393
2426
  if (settings.data === void 0 && tableMeta.data === void 0) {
2394
- instance.loadData(null, 'updateSettings'); // data source created just now
2427
+ dataUpdateFunction(null, 'updateSettings'); // data source created just now
2395
2428
  } else if (settings.data !== void 0) {
2396
- instance.loadData(settings.data, 'updateSettings'); // data source given as option
2429
+ dataUpdateFunction(settings.data, 'updateSettings'); // data source given as option
2397
2430
  } else if (settings.columns !== void 0) {
2398
2431
  datamap.createMap(); // The `column` property has changed - dataset may be expanded or narrowed down. The `loadData` do the same.
2399
2432
 
@@ -2999,7 +3032,7 @@ export default function Core(rootElement, userSettings) {
2999
3032
  };
3000
3033
  /**
3001
3034
  * @description
3002
- * Returns a data type defined in the Handsontable settings under the `type` key ({@link options#type Options#type}).
3035
+ * Returns a data type defined in the Handsontable settings under the `type` key ({@link Options#type}).
3003
3036
  * If there are cells with different types in the selected range, it returns `'mixed'`.
3004
3037
  *
3005
3038
  * __Note__: If data is reordered, sorted or trimmed, the currently visible order will be used.
@@ -3015,7 +3048,7 @@ export default function Core(rootElement, userSettings) {
3015
3048
 
3016
3049
 
3017
3050
  this.getDataType = function (rowFrom, columnFrom, rowTo, columnTo) {
3018
- var _this3 = this;
3051
+ var _this4 = this;
3019
3052
 
3020
3053
  var coords = rowFrom === void 0 ? [0, 0, this.countRows(), this.countCols()] : [rowFrom, columnFrom, rowTo, columnTo];
3021
3054
  var rowStart = coords[0],
@@ -3037,7 +3070,7 @@ export default function Core(rootElement, userSettings) {
3037
3070
  rangeEach(Math.max(Math.min(rowStart, rowEnd), 0), Math.max(rowStart, rowEnd), function (row) {
3038
3071
  var isTypeEqual = true;
3039
3072
  rangeEach(Math.max(Math.min(columnStart, columnEnd), 0), Math.max(columnStart, columnEnd), function (column) {
3040
- var cellType = _this3.getCellMeta(row, column);
3073
+ var cellType = _this4.getCellMeta(row, column);
3041
3074
 
3042
3075
  currentType = cellType.type;
3043
3076
 
@@ -3071,7 +3104,7 @@ export default function Core(rootElement, userSettings) {
3071
3104
  var _ref19 = [this.toPhysicalRow(row), this.toPhysicalColumn(column)],
3072
3105
  physicalRow = _ref19[0],
3073
3106
  physicalColumn = _ref19[1];
3074
- var cachedValue = metaManager.getCellMeta(physicalRow, physicalColumn, key);
3107
+ var cachedValue = metaManager.getCellMetaKeyValue(physicalRow, physicalColumn, key);
3075
3108
  var hookResult = instance.runHooks('beforeRemoveCellMeta', row, column, key, cachedValue);
3076
3109
 
3077
3110
  if (hookResult !== false) {
@@ -3094,7 +3127,7 @@ export default function Core(rootElement, userSettings) {
3094
3127
 
3095
3128
 
3096
3129
  this.spliceCellsMeta = function (visualIndex) {
3097
- var _this4 = this;
3130
+ var _this5 = this;
3098
3131
 
3099
3132
  var deleteAmount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
3100
3133
 
@@ -3112,12 +3145,14 @@ export default function Core(rootElement, userSettings) {
3112
3145
 
3113
3146
  if (cellMetaRows.length > 0) {
3114
3147
  arrayEach(cellMetaRows.reverse(), function (cellMetaRow) {
3115
- metaManager.createRow(_this4.toPhysicalRow(visualIndex));
3148
+ metaManager.createRow(_this5.toPhysicalRow(visualIndex));
3116
3149
  arrayEach(cellMetaRow, function (cellMeta, columnIndex) {
3117
- return _this4.setCellMetaObject(visualIndex, columnIndex, cellMeta);
3150
+ return _this5.setCellMetaObject(visualIndex, columnIndex, cellMeta);
3118
3151
  });
3119
3152
  });
3120
3153
  }
3154
+
3155
+ instance.render();
3121
3156
  };
3122
3157
  /**
3123
3158
  * Set cell meta data object defined by `prop` to the corresponding params `row` and `column`.
@@ -3131,11 +3166,11 @@ export default function Core(rootElement, userSettings) {
3131
3166
 
3132
3167
 
3133
3168
  this.setCellMetaObject = function (row, column, prop) {
3134
- var _this5 = this;
3169
+ var _this6 = this;
3135
3170
 
3136
3171
  if (_typeof(prop) === 'object') {
3137
3172
  objectEach(prop, function (value, key) {
3138
- _this5.setCellMeta(row, column, key, value);
3173
+ _this6.setCellMeta(row, column, key, value);
3139
3174
  });
3140
3175
  }
3141
3176
  };
@@ -3211,33 +3246,10 @@ export default function Core(rootElement, userSettings) {
3211
3246
  physicalColumn = column;
3212
3247
  }
3213
3248
 
3214
- var prop = datamap.colToProp(column);
3215
- var cellProperties = metaManager.getCellMeta(physicalRow, physicalColumn); // TODO(perf): Add assigning this props and executing below code only once per table render cycle.
3216
-
3217
- cellProperties.row = physicalRow;
3218
- cellProperties.col = physicalColumn;
3219
- cellProperties.visualRow = row;
3220
- cellProperties.visualCol = column;
3221
- cellProperties.prop = prop;
3222
- cellProperties.instance = instance;
3223
- instance.runHooks('beforeGetCellMeta', row, column, cellProperties); // for `type` added or changed in beforeGetCellMeta
3224
-
3225
- if (instance.hasHook('beforeGetCellMeta') && hasOwnProperty(cellProperties, 'type')) {
3226
- metaManager.updateCellMeta(physicalRow, physicalColumn, {
3227
- type: cellProperties.type
3228
- });
3229
- }
3230
-
3231
- if (cellProperties.cells) {
3232
- var settings = cellProperties.cells(physicalRow, physicalColumn, prop);
3233
-
3234
- if (settings) {
3235
- metaManager.updateCellMeta(physicalRow, physicalColumn, settings);
3236
- }
3237
- }
3238
-
3239
- instance.runHooks('afterGetCellMeta', row, column, cellProperties);
3240
- return cellProperties;
3249
+ return metaManager.getCellMeta(physicalRow, physicalColumn, {
3250
+ visualRow: row,
3251
+ visualColumn: column
3252
+ });
3241
3253
  };
3242
3254
  /**
3243
3255
  * Returns an array of cell meta objects for specified physical row index.
@@ -3271,7 +3283,7 @@ export default function Core(rootElement, userSettings) {
3271
3283
  *
3272
3284
  * @memberof Core#
3273
3285
  * @function getCellRenderer
3274
- * @param {number|object} row Visual row index or cell meta object (see {@link core#getcellmeta Core#getCellMeta}).
3286
+ * @param {number|object} row Visual row index or cell meta object (see {@link Core#getCellMeta}).
3275
3287
  * @param {number} column Visual column index.
3276
3288
  * @returns {Function} The renderer function.
3277
3289
  * @example
@@ -3291,7 +3303,7 @@ export default function Core(rootElement, userSettings) {
3291
3303
  *
3292
3304
  * @memberof Core#
3293
3305
  * @function getCellEditor
3294
- * @param {number} row Visual row index or cell meta object (see {@link core#getcellmeta Core#getCellMeta}).
3306
+ * @param {number} row Visual row index or cell meta object (see {@link Core#getCellMeta}).
3295
3307
  * @param {number} column Visual column index.
3296
3308
  * @returns {Function} The editor class.
3297
3309
  * @example
@@ -3311,7 +3323,7 @@ export default function Core(rootElement, userSettings) {
3311
3323
  *
3312
3324
  * @memberof Core#
3313
3325
  * @function getCellValidator
3314
- * @param {number|object} row Visual row index or cell meta object (see {@link core#getcellmeta Core#getCellMeta}).
3326
+ * @param {number|object} row Visual row index or cell meta object (see {@link Core#getCellMeta}).
3315
3327
  * @param {number} column Visual column index.
3316
3328
  * @returns {Function|RegExp|undefined} The validator function.
3317
3329
  * @example
@@ -3711,6 +3723,8 @@ export default function Core(rootElement, userSettings) {
3711
3723
  /**
3712
3724
  * Returns the row height.
3713
3725
  *
3726
+ * Mind that this method is different from the [AutoRowSize](@/api/autoRowSize.md) plugin's [`getRowHeight()`](@/api/autoRowSize.md#getrowheight) method.
3727
+ *
3714
3728
  * @memberof Core#
3715
3729
  * @function getRowHeight
3716
3730
  * @param {number} row Visual row index.
@@ -4307,7 +4321,7 @@ export default function Core(rootElement, userSettings) {
4307
4321
  * @memberof Core#
4308
4322
  * @function addHook
4309
4323
  * @see Hooks#add
4310
- * @param {string} key Hook name (see {@link hooks Hooks}).
4324
+ * @param {string} key Hook name (see {@link Hooks}).
4311
4325
  * @param {Function|Array} callback Function or array of functions.
4312
4326
  * @example
4313
4327
  * ```js
@@ -4321,7 +4335,7 @@ export default function Core(rootElement, userSettings) {
4321
4335
  };
4322
4336
  /**
4323
4337
  * Check if for a specified hook name there are added listeners (only for this Handsontable instance). All available
4324
- * hooks you will find {@link hooks Hooks}.
4338
+ * hooks you will find {@link Hooks}.
4325
4339
  *
4326
4340
  * @memberof Core#
4327
4341
  * @function hasHook
@@ -4346,7 +4360,7 @@ export default function Core(rootElement, userSettings) {
4346
4360
  * @memberof Core#
4347
4361
  * @function addHookOnce
4348
4362
  * @see Hooks#once
4349
- * @param {string} key Hook name (see {@link hooks Hooks}).
4363
+ * @param {string} key Hook name (see {@link Hooks}).
4350
4364
  * @param {Function|Array} callback Function or array of functions.
4351
4365
  * @example
4352
4366
  * ```js
@@ -4359,13 +4373,13 @@ export default function Core(rootElement, userSettings) {
4359
4373
  Hooks.getSingleton().once(key, callback, instance);
4360
4374
  };
4361
4375
  /**
4362
- * Removes the hook listener previously registered with {@link core#addhook Core#addHook}.
4376
+ * Removes the hook listener previously registered with {@link Core#addHook}.
4363
4377
  *
4364
4378
  * @memberof Core#
4365
4379
  * @function removeHook
4366
4380
  * @see Hooks#remove
4367
4381
  * @param {string} key Hook name.
4368
- * @param {Function} callback Reference to the function which has been registered using {@link core#addhook Core#addHook}.
4382
+ * @param {Function} callback Reference to the function which has been registered using {@link Core#addHook}.
4369
4383
  *
4370
4384
  * @example
4371
4385
  * ```js
@@ -4525,6 +4539,45 @@ export default function Core(rootElement, userSettings) {
4525
4539
  editorManager.prepareEditor();
4526
4540
  }
4527
4541
  };
4542
+ /**
4543
+ * Check if currently it is RTL direction.
4544
+ *
4545
+ * @private
4546
+ * @memberof Core#
4547
+ * @function isRtl
4548
+ * @returns {boolean} True if RTL.
4549
+ */
4550
+
4551
+
4552
+ this.isRtl = function () {
4553
+ return instance.rootWindow.getComputedStyle(instance.rootElement).direction === 'rtl';
4554
+ };
4555
+ /**
4556
+ * Check if currently it is LTR direction.
4557
+ *
4558
+ * @private
4559
+ * @memberof Core#
4560
+ * @function isLtr
4561
+ * @returns {boolean} True if LTR.
4562
+ */
4563
+
4564
+
4565
+ this.isLtr = function () {
4566
+ return !instance.isRtl();
4567
+ };
4568
+ /**
4569
+ * Returns 1 for LTR; -1 for RTL. Useful for calculations.
4570
+ *
4571
+ * @private
4572
+ * @memberof Core#
4573
+ * @function getDirectionFactor
4574
+ * @returns {number} Returns 1 for LTR; -1 for RTL.
4575
+ */
4576
+
4577
+
4578
+ this.getDirectionFactor = function () {
4579
+ return instance.isLtr() ? 1 : -1;
4580
+ };
4528
4581
 
4529
4582
  getPluginsNames().forEach(function (pluginName) {
4530
4583
  var PluginClass = getPlugin(pluginName);