handsontable 14.4.0-next-1ffa7bc-20240606 → 14.5.0-next-ede811d-20240717

Sign up to get free protection for your applications and to get access to all the features.
Files changed (446) hide show
  1. package/3rdparty/walkontable/src/calculator/renderAllColumns.js +1 -1
  2. package/3rdparty/walkontable/src/calculator/renderAllColumns.mjs +1 -1
  3. package/3rdparty/walkontable/src/calculator/renderAllRows.js +1 -1
  4. package/3rdparty/walkontable/src/calculator/renderAllRows.mjs +1 -1
  5. package/3rdparty/walkontable/src/calculator/viewportColumns.js +3 -3
  6. package/3rdparty/walkontable/src/calculator/viewportColumns.mjs +3 -3
  7. package/3rdparty/walkontable/src/calculator/viewportRows.js +3 -3
  8. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +3 -3
  9. package/3rdparty/walkontable/src/cell/coords.js +3 -3
  10. package/3rdparty/walkontable/src/cell/coords.mjs +3 -3
  11. package/3rdparty/walkontable/src/cell/range.js +4 -4
  12. package/3rdparty/walkontable/src/cell/range.mjs +3 -3
  13. package/3rdparty/walkontable/src/core/_base.js +2 -2
  14. package/3rdparty/walkontable/src/core/_base.mjs +1 -1
  15. package/3rdparty/walkontable/src/core/clone.js +2 -2
  16. package/3rdparty/walkontable/src/core/clone.mjs +1 -1
  17. package/3rdparty/walkontable/src/core/core.js +17 -1
  18. package/3rdparty/walkontable/src/core/core.mjs +16 -0
  19. package/3rdparty/walkontable/src/event.js +2 -2
  20. package/3rdparty/walkontable/src/event.mjs +2 -2
  21. package/3rdparty/walkontable/src/facade/core.js +4 -1
  22. package/3rdparty/walkontable/src/facade/core.mjs +3 -0
  23. package/3rdparty/walkontable/src/filter/column.js +1 -1
  24. package/3rdparty/walkontable/src/filter/column.mjs +1 -1
  25. package/3rdparty/walkontable/src/filter/row.js +1 -1
  26. package/3rdparty/walkontable/src/filter/row.mjs +1 -1
  27. package/3rdparty/walkontable/src/index.js +1 -1
  28. package/3rdparty/walkontable/src/overlay/_base.js +2 -2
  29. package/3rdparty/walkontable/src/overlay/_base.mjs +1 -1
  30. package/3rdparty/walkontable/src/overlay/bottom.js +2 -2
  31. package/3rdparty/walkontable/src/overlay/bottom.mjs +1 -1
  32. package/3rdparty/walkontable/src/overlay/bottomInlineStartCorner.js +1 -1
  33. package/3rdparty/walkontable/src/overlay/inlineStart.js +1 -1
  34. package/3rdparty/walkontable/src/overlay/top.js +2 -2
  35. package/3rdparty/walkontable/src/overlay/top.mjs +1 -1
  36. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.js +2 -2
  37. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.mjs +1 -1
  38. package/3rdparty/walkontable/src/overlays.js +36 -4
  39. package/3rdparty/walkontable/src/overlays.mjs +36 -4
  40. package/3rdparty/walkontable/src/renderer/_base.js +2 -2
  41. package/3rdparty/walkontable/src/renderer/_base.mjs +1 -1
  42. package/3rdparty/walkontable/src/renderer/cells.js +2 -2
  43. package/3rdparty/walkontable/src/renderer/cells.mjs +1 -1
  44. package/3rdparty/walkontable/src/renderer/colGroup.js +1 -1
  45. package/3rdparty/walkontable/src/renderer/columnHeaders.js +1 -1
  46. package/3rdparty/walkontable/src/renderer/index.js +12 -1
  47. package/3rdparty/walkontable/src/renderer/index.mjs +11 -0
  48. package/3rdparty/walkontable/src/renderer/rowHeaders.js +2 -2
  49. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +1 -1
  50. package/3rdparty/walkontable/src/renderer/rows.js +2 -2
  51. package/3rdparty/walkontable/src/renderer/rows.mjs +1 -1
  52. package/3rdparty/walkontable/src/renderer/table.js +17 -2
  53. package/3rdparty/walkontable/src/renderer/table.mjs +17 -2
  54. package/3rdparty/walkontable/src/scroll.js +3 -3
  55. package/3rdparty/walkontable/src/scroll.mjs +3 -3
  56. package/3rdparty/walkontable/src/selection/index.js +1 -1
  57. package/3rdparty/walkontable/src/selection/manager.js +4 -4
  58. package/3rdparty/walkontable/src/selection/manager.mjs +3 -3
  59. package/3rdparty/walkontable/src/selection/scanner.js +3 -3
  60. package/3rdparty/walkontable/src/selection/scanner.mjs +3 -3
  61. package/3rdparty/walkontable/src/selection/selection.js +1 -1
  62. package/3rdparty/walkontable/src/settings.js +6 -2
  63. package/3rdparty/walkontable/src/settings.mjs +6 -2
  64. package/3rdparty/walkontable/src/table/bottom.js +1 -1
  65. package/3rdparty/walkontable/src/table/bottomInlineStartCorner.js +1 -1
  66. package/3rdparty/walkontable/src/table/inlineStart.js +1 -1
  67. package/3rdparty/walkontable/src/table/master.js +1 -1
  68. package/3rdparty/walkontable/src/table/top.js +1 -1
  69. package/3rdparty/walkontable/src/table/topInlineStartCorner.js +1 -1
  70. package/3rdparty/walkontable/src/table.js +3 -3
  71. package/3rdparty/walkontable/src/table.mjs +2 -2
  72. package/3rdparty/walkontable/src/utils/column.js +1 -1
  73. package/3rdparty/walkontable/src/utils/column.mjs +1 -1
  74. package/3rdparty/walkontable/src/utils/columnStretching.js +3 -3
  75. package/3rdparty/walkontable/src/utils/columnStretching.mjs +3 -3
  76. package/3rdparty/walkontable/src/utils/nodesPool.js +1 -1
  77. package/3rdparty/walkontable/src/utils/nodesPool.mjs +1 -1
  78. package/3rdparty/walkontable/src/utils/orderView/index.js +1 -1
  79. package/3rdparty/walkontable/src/utils/orderView/sharedView.js +1 -1
  80. package/3rdparty/walkontable/src/utils/orderView/view.js +2 -2
  81. package/3rdparty/walkontable/src/utils/orderView/view.mjs +1 -1
  82. package/3rdparty/walkontable/src/utils/orderView/viewSize.js +1 -1
  83. package/3rdparty/walkontable/src/utils/orderView/viewSize.mjs +1 -1
  84. package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.js +2 -2
  85. package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.mjs +1 -1
  86. package/3rdparty/walkontable/src/utils/row.js +17 -1
  87. package/3rdparty/walkontable/src/utils/row.mjs +17 -1
  88. package/CHANGELOG.md +27 -1
  89. package/base.js +3 -3
  90. package/base.mjs +2 -2
  91. package/cellTypes/registry.js +1 -1
  92. package/common.d.ts +3 -0
  93. package/core.d.ts +2 -0
  94. package/core.js +36 -31
  95. package/core.mjs +35 -30
  96. package/dataMap/dataMap.js +1 -1
  97. package/dataMap/dataMap.mjs +1 -1
  98. package/dataMap/dataSource.js +1 -1
  99. package/dataMap/dataSource.mjs +1 -1
  100. package/dataMap/index.js +1 -1
  101. package/dataMap/metaManager/index.js +1 -1
  102. package/dataMap/metaManager/lazyFactoryMap.js +1 -1
  103. package/dataMap/metaManager/lazyFactoryMap.mjs +1 -1
  104. package/dataMap/metaManager/metaLayers/cellMeta.js +2 -2
  105. package/dataMap/metaManager/metaLayers/cellMeta.mjs +1 -1
  106. package/dataMap/metaManager/metaLayers/columnMeta.js +2 -2
  107. package/dataMap/metaManager/metaLayers/columnMeta.mjs +1 -1
  108. package/dataMap/metaManager/metaLayers/globalMeta.js +2 -2
  109. package/dataMap/metaManager/metaLayers/globalMeta.mjs +1 -1
  110. package/dataMap/metaManager/metaLayers/tableMeta.js +1 -1
  111. package/dataMap/metaManager/metaLayers/tableMeta.mjs +1 -1
  112. package/dataMap/metaManager/metaSchema.js +25 -0
  113. package/dataMap/metaManager/metaSchema.mjs +25 -0
  114. package/dataMap/metaManager/mods/dynamicCellMeta.js +2 -2
  115. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +1 -1
  116. package/dataMap/metaManager/mods/extendMetaProperties.js +3 -3
  117. package/dataMap/metaManager/mods/extendMetaProperties.mjs +3 -3
  118. package/dataMap/replaceData.js +1 -1
  119. package/dist/handsontable.css +134 -88
  120. package/dist/handsontable.full.css +134 -88
  121. package/dist/handsontable.full.js +2191 -1503
  122. package/dist/handsontable.full.min.css +7 -7
  123. package/dist/handsontable.full.min.js +86 -86
  124. package/dist/handsontable.js +2180 -1440
  125. package/dist/handsontable.min.css +6 -6
  126. package/dist/handsontable.min.js +23 -23
  127. package/dist/languages/all.js +3 -3
  128. package/dist/languages/ar-AR.js +3 -3
  129. package/dist/languages/cs-CZ.js +3 -3
  130. package/dist/languages/de-CH.js +3 -3
  131. package/dist/languages/de-DE.js +3 -3
  132. package/dist/languages/en-US.js +3 -3
  133. package/dist/languages/es-MX.js +3 -3
  134. package/dist/languages/fr-FR.js +3 -3
  135. package/dist/languages/hr-HR.js +3 -3
  136. package/dist/languages/it-IT.js +3 -3
  137. package/dist/languages/ja-JP.js +3 -3
  138. package/dist/languages/ko-KR.js +3 -3
  139. package/dist/languages/lv-LV.js +3 -3
  140. package/dist/languages/nb-NO.js +3 -3
  141. package/dist/languages/nl-NL.js +3 -3
  142. package/dist/languages/pl-PL.js +3 -3
  143. package/dist/languages/pt-BR.js +3 -3
  144. package/dist/languages/ru-RU.js +3 -3
  145. package/dist/languages/sr-SP.js +3 -3
  146. package/dist/languages/zh-CN.js +3 -3
  147. package/dist/languages/zh-TW.js +3 -3
  148. package/editorManager.js +4 -4
  149. package/editorManager.mjs +3 -3
  150. package/editors/autocompleteEditor/autocompleteEditor.js +3 -3
  151. package/editors/autocompleteEditor/autocompleteEditor.mjs +3 -3
  152. package/editors/baseEditor/baseEditor.js +2 -2
  153. package/editors/baseEditor/baseEditor.mjs +1 -1
  154. package/editors/dateEditor/dateEditor.js +2 -2
  155. package/editors/dateEditor/dateEditor.mjs +1 -1
  156. package/editors/dropdownEditor/dropdownEditor.js +1 -1
  157. package/editors/registry.js +1 -1
  158. package/editors/textEditor/textEditor.js +2 -2
  159. package/editors/textEditor/textEditor.mjs +1 -1
  160. package/eventManager.js +1 -1
  161. package/eventManager.mjs +1 -1
  162. package/focusManager.js +3 -3
  163. package/focusManager.mjs +3 -3
  164. package/helpers/dom/event.d.ts +1 -0
  165. package/helpers/dom/event.js +11 -0
  166. package/helpers/dom/event.mjs +10 -0
  167. package/helpers/mixed.js +3 -3
  168. package/helpers/mixed.mjs +2 -2
  169. package/helpers/string.js +1 -1
  170. package/i18n/languages/index.js +1 -1
  171. package/i18n/phraseFormatters/index.js +1 -1
  172. package/i18n/registry.js +1 -1
  173. package/index.js +1 -1
  174. package/languages/all.js +3 -3
  175. package/languages/ar-AR.js +3 -3
  176. package/languages/cs-CZ.js +3 -3
  177. package/languages/de-CH.js +3 -3
  178. package/languages/de-DE.js +3 -3
  179. package/languages/en-US.js +3 -3
  180. package/languages/es-MX.js +3 -3
  181. package/languages/fr-FR.js +3 -3
  182. package/languages/hr-HR.js +3 -3
  183. package/languages/index.js +3 -3
  184. package/languages/it-IT.js +3 -3
  185. package/languages/ja-JP.js +3 -3
  186. package/languages/ko-KR.js +3 -3
  187. package/languages/lv-LV.js +3 -3
  188. package/languages/nb-NO.js +3 -3
  189. package/languages/nl-NL.js +3 -3
  190. package/languages/pl-PL.js +3 -3
  191. package/languages/pt-BR.js +3 -3
  192. package/languages/ru-RU.js +3 -3
  193. package/languages/sr-SP.js +3 -3
  194. package/languages/zh-CN.js +3 -3
  195. package/languages/zh-TW.js +3 -3
  196. package/package.json +1 -5
  197. package/pluginHooks.d.ts +3 -1
  198. package/pluginHooks.js +12 -1
  199. package/pluginHooks.mjs +12 -1
  200. package/plugins/autoColumnSize/autoColumnSize.d.ts +1 -1
  201. package/plugins/autoColumnSize/autoColumnSize.js +123 -123
  202. package/plugins/autoColumnSize/autoColumnSize.mjs +122 -122
  203. package/plugins/autoRowSize/autoRowSize.d.ts +2 -1
  204. package/plugins/autoRowSize/autoRowSize.js +162 -100
  205. package/plugins/autoRowSize/autoRowSize.mjs +161 -99
  206. package/plugins/autofill/autofill.js +4 -4
  207. package/plugins/autofill/autofill.mjs +3 -3
  208. package/plugins/base/base.js +5 -5
  209. package/plugins/base/base.mjs +4 -4
  210. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +4 -4
  211. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +3 -3
  212. package/plugins/collapsibleColumns/collapsibleColumns.js +4 -4
  213. package/plugins/collapsibleColumns/collapsibleColumns.mjs +4 -4
  214. package/plugins/columnSorting/columnSorting.js +6 -5
  215. package/plugins/columnSorting/columnSorting.mjs +5 -4
  216. package/plugins/columnSorting/columnStatesManager.js +1 -1
  217. package/plugins/columnSorting/columnStatesManager.mjs +1 -1
  218. package/plugins/columnSorting/sortService/registry.js +1 -1
  219. package/plugins/columnSorting/utils.js +1 -1
  220. package/plugins/columnSummary/columnSummary.d.ts +1 -1
  221. package/plugins/columnSummary/columnSummary.js +4 -4
  222. package/plugins/columnSummary/columnSummary.mjs +3 -3
  223. package/plugins/columnSummary/endpoints.js +1 -1
  224. package/plugins/columnSummary/endpoints.mjs +1 -1
  225. package/plugins/comments/commentEditor.js +74 -39
  226. package/plugins/comments/commentEditor.mjs +73 -39
  227. package/plugins/comments/comments.js +25 -44
  228. package/plugins/comments/comments.mjs +25 -44
  229. package/plugins/comments/displaySwitch.js +2 -2
  230. package/plugins/comments/displaySwitch.mjs +1 -1
  231. package/plugins/comments/editorResizeObserver.js +100 -0
  232. package/plugins/comments/editorResizeObserver.mjs +95 -0
  233. package/plugins/contextMenu/commandExecutor.js +1 -1
  234. package/plugins/contextMenu/commandExecutor.mjs +1 -1
  235. package/plugins/contextMenu/contextMenu.js +4 -4
  236. package/plugins/contextMenu/contextMenu.mjs +3 -3
  237. package/plugins/contextMenu/itemsFactory.js +1 -1
  238. package/plugins/contextMenu/itemsFactory.mjs +1 -1
  239. package/plugins/contextMenu/menu/cursor.js +1 -1
  240. package/plugins/contextMenu/menu/cursor.mjs +1 -1
  241. package/plugins/contextMenu/menu/menu.js +5 -4
  242. package/plugins/contextMenu/menu/menu.mjs +4 -3
  243. package/plugins/contextMenu/menu/positioner.js +2 -2
  244. package/plugins/contextMenu/menu/positioner.mjs +2 -2
  245. package/plugins/copyPaste/copyPaste.js +5 -5
  246. package/plugins/copyPaste/copyPaste.mjs +4 -4
  247. package/plugins/copyPaste/copyableRanges.js +3 -3
  248. package/plugins/copyPaste/copyableRanges.mjs +3 -3
  249. package/plugins/copyPaste/pasteEvent.js +1 -1
  250. package/plugins/customBorders/contextMenuItem/index.js +1 -1
  251. package/plugins/customBorders/customBorders.js +3 -3
  252. package/plugins/customBorders/customBorders.mjs +3 -3
  253. package/plugins/dragToScroll/dragToScroll.js +4 -4
  254. package/plugins/dragToScroll/dragToScroll.mjs +4 -4
  255. package/plugins/dropdownMenu/dropdownMenu.js +5 -5
  256. package/plugins/dropdownMenu/dropdownMenu.mjs +4 -4
  257. package/plugins/exportFile/dataProvider.js +1 -1
  258. package/plugins/exportFile/dataProvider.mjs +1 -1
  259. package/plugins/exportFile/exportFile.js +1 -1
  260. package/plugins/exportFile/typeFactory.js +1 -1
  261. package/plugins/exportFile/types/_base.js +1 -1
  262. package/plugins/exportFile/types/_base.mjs +1 -1
  263. package/plugins/exportFile/types/csv.js +1 -1
  264. package/plugins/filters/component/_base.js +2 -2
  265. package/plugins/filters/component/_base.mjs +1 -1
  266. package/plugins/filters/component/actionBar.js +3 -3
  267. package/plugins/filters/component/actionBar.mjs +3 -3
  268. package/plugins/filters/component/condition.js +3 -3
  269. package/plugins/filters/component/condition.mjs +3 -3
  270. package/plugins/filters/component/operators.js +3 -3
  271. package/plugins/filters/component/operators.mjs +3 -3
  272. package/plugins/filters/component/value.js +3 -3
  273. package/plugins/filters/component/value.mjs +3 -3
  274. package/plugins/filters/condition/date/after.js +1 -1
  275. package/plugins/filters/condition/date/before.js +1 -1
  276. package/plugins/filters/condition/date/today.js +1 -1
  277. package/plugins/filters/condition/date/tomorrow.js +1 -1
  278. package/plugins/filters/condition/date/yesterday.js +1 -1
  279. package/plugins/filters/conditionCollection.js +2 -2
  280. package/plugins/filters/conditionCollection.mjs +1 -1
  281. package/plugins/filters/conditionUpdateObserver.js +4 -4
  282. package/plugins/filters/conditionUpdateObserver.mjs +3 -3
  283. package/plugins/filters/dataFilter.js +1 -1
  284. package/plugins/filters/dataFilter.mjs +1 -1
  285. package/plugins/filters/filters.js +5 -5
  286. package/plugins/filters/filters.mjs +4 -4
  287. package/plugins/filters/ui/_base.js +2 -2
  288. package/plugins/filters/ui/_base.mjs +1 -1
  289. package/plugins/filters/ui/input.js +3 -3
  290. package/plugins/filters/ui/input.mjs +3 -3
  291. package/plugins/filters/ui/link.js +2 -2
  292. package/plugins/filters/ui/link.mjs +2 -2
  293. package/plugins/filters/ui/multipleSelect.js +3 -3
  294. package/plugins/filters/ui/multipleSelect.mjs +3 -3
  295. package/plugins/filters/ui/radioInput.js +2 -2
  296. package/plugins/filters/ui/radioInput.mjs +2 -2
  297. package/plugins/filters/ui/select.js +3 -3
  298. package/plugins/filters/ui/select.mjs +3 -3
  299. package/plugins/formulas/engine/register.js +1 -1
  300. package/plugins/formulas/formulas.js +7 -7
  301. package/plugins/formulas/formulas.mjs +6 -6
  302. package/plugins/formulas/indexSyncer/axisSyncer.js +2 -2
  303. package/plugins/formulas/indexSyncer/axisSyncer.mjs +2 -2
  304. package/plugins/formulas/indexSyncer/index.js +3 -3
  305. package/plugins/formulas/indexSyncer/index.mjs +2 -2
  306. package/plugins/formulas/utils.js +1 -1
  307. package/plugins/hiddenColumns/hiddenColumns.js +4 -4
  308. package/plugins/hiddenColumns/hiddenColumns.mjs +3 -3
  309. package/plugins/hiddenRows/hiddenRows.js +4 -4
  310. package/plugins/hiddenRows/hiddenRows.mjs +3 -3
  311. package/plugins/manualColumnFreeze/manualColumnFreeze.js +4 -4
  312. package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +3 -3
  313. package/plugins/manualColumnMove/manualColumnMove.js +4 -4
  314. package/plugins/manualColumnMove/manualColumnMove.mjs +3 -3
  315. package/plugins/manualColumnMove/ui/_base.js +1 -1
  316. package/plugins/manualColumnMove/ui/_base.mjs +1 -1
  317. package/plugins/manualColumnMove/ui/backlight.js +1 -1
  318. package/plugins/manualColumnMove/ui/guideline.js +1 -1
  319. package/plugins/manualColumnResize/manualColumnResize.js +3 -3
  320. package/plugins/manualColumnResize/manualColumnResize.mjs +3 -3
  321. package/plugins/manualRowMove/manualRowMove.js +4 -4
  322. package/plugins/manualRowMove/manualRowMove.mjs +3 -3
  323. package/plugins/manualRowMove/ui/_base.js +1 -1
  324. package/plugins/manualRowMove/ui/_base.mjs +1 -1
  325. package/plugins/manualRowMove/ui/backlight.js +1 -1
  326. package/plugins/manualRowMove/ui/guideline.js +1 -1
  327. package/plugins/manualRowResize/manualRowResize.js +3 -3
  328. package/plugins/manualRowResize/manualRowResize.mjs +3 -3
  329. package/plugins/mergeCells/calculations/autofill.js +2 -2
  330. package/plugins/mergeCells/calculations/autofill.mjs +2 -2
  331. package/plugins/mergeCells/calculations/selection.js +1 -1
  332. package/plugins/mergeCells/calculations/selection.mjs +1 -1
  333. package/plugins/mergeCells/cellCoords.js +81 -24
  334. package/plugins/mergeCells/cellCoords.mjs +81 -24
  335. package/plugins/mergeCells/cellsCollection.js +167 -91
  336. package/plugins/mergeCells/cellsCollection.mjs +166 -90
  337. package/plugins/mergeCells/contextMenuItem/toggleMerge.js +1 -1
  338. package/plugins/mergeCells/focusOrder.js +4 -4
  339. package/plugins/mergeCells/focusOrder.mjs +3 -3
  340. package/plugins/mergeCells/mergeCells.js +171 -122
  341. package/plugins/mergeCells/mergeCells.mjs +171 -122
  342. package/plugins/mergeCells/renderer.js +74 -0
  343. package/plugins/mergeCells/renderer.mjs +70 -0
  344. package/plugins/multiColumnSorting/multiColumnSorting.js +2 -1
  345. package/plugins/multiColumnSorting/multiColumnSorting.mjs +2 -1
  346. package/plugins/multiColumnSorting/utils.js +1 -1
  347. package/plugins/multiColumnSorting/utils.mjs +1 -1
  348. package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +1 -1
  349. package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +1 -1
  350. package/plugins/nestedHeaders/nestedHeaders.d.ts +1 -0
  351. package/plugins/nestedHeaders/nestedHeaders.js +20 -9
  352. package/plugins/nestedHeaders/nestedHeaders.mjs +20 -9
  353. package/plugins/nestedHeaders/stateManager/headersTree.js +3 -3
  354. package/plugins/nestedHeaders/stateManager/headersTree.mjs +2 -2
  355. package/plugins/nestedHeaders/stateManager/index.js +3 -3
  356. package/plugins/nestedHeaders/stateManager/index.mjs +2 -2
  357. package/plugins/nestedHeaders/stateManager/settingsNormalizer.js +5 -1
  358. package/plugins/nestedHeaders/stateManager/settingsNormalizer.mjs +5 -1
  359. package/plugins/nestedHeaders/stateManager/sourceSettings.js +2 -2
  360. package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +2 -2
  361. package/plugins/nestedHeaders/stateManager/utils.js +6 -2
  362. package/plugins/nestedHeaders/stateManager/utils.mjs +6 -2
  363. package/plugins/nestedHeaders/utils/ghostTable.js +1 -1
  364. package/plugins/nestedHeaders/utils/ghostTable.mjs +1 -1
  365. package/plugins/nestedRows/data/dataManager.js +1 -1
  366. package/plugins/nestedRows/data/dataManager.mjs +1 -1
  367. package/plugins/nestedRows/nestedRows.js +5 -5
  368. package/plugins/nestedRows/nestedRows.mjs +4 -4
  369. package/plugins/nestedRows/ui/_base.js +1 -1
  370. package/plugins/nestedRows/ui/_base.mjs +1 -1
  371. package/plugins/nestedRows/ui/collapsing.js +1 -1
  372. package/plugins/nestedRows/ui/contextMenu.js +4 -4
  373. package/plugins/nestedRows/ui/contextMenu.mjs +3 -3
  374. package/plugins/nestedRows/ui/headers.js +1 -1
  375. package/plugins/nestedRows/utils/rowMoveController.js +1 -1
  376. package/plugins/nestedRows/utils/rowMoveController.mjs +1 -1
  377. package/plugins/persistentState/persistentState.js +2 -2
  378. package/plugins/persistentState/persistentState.mjs +1 -1
  379. package/plugins/persistentState/storage.js +1 -1
  380. package/plugins/persistentState/storage.mjs +1 -1
  381. package/plugins/search/search.js +3 -3
  382. package/plugins/search/search.mjs +3 -3
  383. package/plugins/touchScroll/touchScroll.js +3 -3
  384. package/plugins/touchScroll/touchScroll.mjs +3 -3
  385. package/plugins/trimRows/trimRows.js +3 -3
  386. package/plugins/trimRows/trimRows.mjs +3 -3
  387. package/plugins/undoRedo/undoRedo.js +38 -1
  388. package/plugins/undoRedo/undoRedo.mjs +37 -0
  389. package/renderers/autocompleteRenderer/autocompleteRenderer.js +1 -1
  390. package/renderers/checkboxRenderer/checkboxRenderer.js +1 -1
  391. package/renderers/numericRenderer/numericRenderer.js +1 -1
  392. package/renderers/registry.js +1 -1
  393. package/selection/highlight/highlight.js +3 -3
  394. package/selection/highlight/highlight.mjs +3 -3
  395. package/selection/highlight/types/activeHeader.js +1 -1
  396. package/selection/highlight/types/area.js +1 -1
  397. package/selection/highlight/types/areaLayered.js +1 -1
  398. package/selection/highlight/types/column.js +1 -1
  399. package/selection/highlight/types/customSelection.js +1 -1
  400. package/selection/highlight/types/fill.js +1 -1
  401. package/selection/highlight/types/focus.js +1 -1
  402. package/selection/highlight/types/header.js +1 -1
  403. package/selection/highlight/types/row.js +1 -1
  404. package/selection/highlight/visualSelection.js +1 -1
  405. package/selection/highlight/visualSelection.mjs +1 -1
  406. package/selection/index.js +1 -1
  407. package/selection/range.js +1 -1
  408. package/selection/range.mjs +1 -1
  409. package/selection/selection.js +8 -4
  410. package/selection/selection.mjs +7 -3
  411. package/selection/transformation.js +14 -4
  412. package/selection/transformation.mjs +13 -3
  413. package/settings.d.ts +1 -0
  414. package/shortcuts/utils.js +18 -27
  415. package/shortcuts/utils.mjs +18 -27
  416. package/tableView.js +126 -28
  417. package/tableView.mjs +125 -27
  418. package/translations/changesObservable/observable.js +2 -2
  419. package/translations/changesObservable/observable.mjs +2 -2
  420. package/translations/changesObservable/observer.js +3 -3
  421. package/translations/changesObservable/observer.mjs +2 -2
  422. package/translations/indexMapper.js +2 -2
  423. package/translations/indexMapper.mjs +1 -1
  424. package/translations/mapCollections/aggregatedCollection.js +1 -1
  425. package/translations/mapCollections/aggregatedCollection.mjs +1 -1
  426. package/translations/mapCollections/mapCollection.js +2 -2
  427. package/translations/mapCollections/mapCollection.mjs +1 -1
  428. package/translations/maps/indexMap.js +2 -2
  429. package/translations/maps/indexMap.mjs +1 -1
  430. package/translations/maps/linkedPhysicalIndexToValueMap.js +1 -1
  431. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +1 -1
  432. package/utils/dataStructures/linkedList.js +1 -1
  433. package/utils/dataStructures/linkedList.mjs +1 -1
  434. package/utils/dataStructures/tree.js +1 -1
  435. package/utils/dataStructures/tree.mjs +1 -1
  436. package/utils/ghostTable.js +1 -1
  437. package/utils/ghostTable.mjs +1 -1
  438. package/utils/interval.js +4 -4
  439. package/utils/interval.mjs +4 -4
  440. package/utils/samplesGenerator.js +1 -1
  441. package/utils/samplesGenerator.mjs +1 -1
  442. package/validators/dateValidator/dateValidator.js +1 -1
  443. package/validators/registry.js +1 -1
  444. package/validators/timeValidator/timeValidator.js +1 -1
  445. package/plugins/mergeCells/utils.js +0 -28
  446. package/plugins/mergeCells/utils.mjs +0 -24
@@ -1,7 +1,12 @@
1
1
  import "core-js/modules/es.error.cause.js";
2
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
3
+ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
4
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
3
5
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
4
6
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
8
+ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
9
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
5
10
  import { toSingleLine } from "../../helpers/templateLiteralTag.mjs";
6
11
  /**
7
12
  * The `MergedCellCoords` class represents a single merged cell.
@@ -9,6 +14,7 @@ import { toSingleLine } from "../../helpers/templateLiteralTag.mjs";
9
14
  * @private
10
15
  * @class MergedCellCoords
11
16
  */
17
+ var _cellRange = /*#__PURE__*/new WeakMap();
12
18
  class MergedCellCoords {
13
19
  constructor(row, column, rowspan, colspan, cellCoordsFactory, cellRangeFactory) {
14
20
  /**
@@ -53,6 +59,12 @@ class MergedCellCoords {
53
59
  * @type {Function}
54
60
  */
55
61
  _defineProperty(this, "cellRangeFactory", void 0);
62
+ /**
63
+ * The cached range coordinates of the merged cell.
64
+ *
65
+ * @type {CellRange}
66
+ */
67
+ _classPrivateFieldInitSpec(this, _cellRange, null);
56
68
  this.row = row;
57
69
  this.col = column;
58
70
  this.rowspan = rowspan;
@@ -64,78 +76,117 @@ class MergedCellCoords {
64
76
  /**
65
77
  * Get a warning message for when the declared merged cell data contains negative values.
66
78
  *
67
- * @param {object} newMergedCell Object containg information about the merged cells that was about to be added.
79
+ * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information
80
+ * about the merged cells that was about to be added.
68
81
  * @returns {string}
69
82
  */
70
- static NEGATIVE_VALUES_WARNING(newMergedCell) {
71
- return toSingleLine`The merged cell declared with {row: ${newMergedCell.row}, col: ${newMergedCell.col},\x20
72
- rowspan: ${newMergedCell.rowspan}, colspan: ${newMergedCell.colspan}} contains negative values, which is\x20
83
+ static NEGATIVE_VALUES_WARNING(_ref) {
84
+ let {
85
+ row,
86
+ col,
87
+ rowspan,
88
+ colspan
89
+ } = _ref;
90
+ return toSingleLine`The merged cell declared with {row: ${row}, col: ${col},\x20
91
+ rowspan: ${rowspan}, colspan: ${colspan}} contains negative values, which is\x20
73
92
  not supported. It will not be added to the collection.`;
74
93
  }
75
94
 
76
95
  /**
77
96
  * Get a warning message for when the declared merged cell data contains values exceeding the table limits.
78
97
  *
79
- * @param {object} newMergedCell Object containg information about the merged cells that was about to be added.
98
+ * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information
99
+ * about the merged cells that was about to be added.
80
100
  * @returns {string}
81
101
  */
82
- static IS_OUT_OF_BOUNDS_WARNING(newMergedCell) {
83
- return toSingleLine`The merged cell declared at [${newMergedCell.row}, ${newMergedCell.col}] is positioned\x20
102
+ static IS_OUT_OF_BOUNDS_WARNING(_ref2) {
103
+ let {
104
+ row,
105
+ col
106
+ } = _ref2;
107
+ return toSingleLine`The merged cell declared at [${row}, ${col}] is positioned\x20
84
108
  (or positioned partially) outside of the table range. It was not added to the table, please fix your setup.`;
85
109
  }
86
110
 
87
111
  /**
88
112
  * Get a warning message for when the declared merged cell data represents a single cell.
89
113
  *
90
- * @param {object} newMergedCell Object containg information about the merged cells that was about to be added.
114
+ * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information
115
+ * about the merged cells that was about to be added.
91
116
  * @returns {string}
92
117
  */
93
- static IS_SINGLE_CELL(newMergedCell) {
94
- return toSingleLine`The merged cell declared at [${newMergedCell.row}, ${newMergedCell.col}] has both "rowspan"\x20
118
+ static IS_SINGLE_CELL(_ref3) {
119
+ let {
120
+ row,
121
+ col
122
+ } = _ref3;
123
+ return toSingleLine`The merged cell declared at [${row}, ${col}] has both "rowspan"\x20
95
124
  and "colspan" declared as "1", which makes it a single cell. It cannot be added to the collection.`;
96
125
  }
97
126
 
98
127
  /**
99
128
  * Get a warning message for when the declared merged cell data contains "colspan" or "rowspan", that equals 0.
100
129
  *
101
- * @param {object} newMergedCell Object containg information about the merged cells that was about to be added.
130
+ * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information
131
+ * about the merged cells that was about to be added.
102
132
  * @returns {string}
103
133
  */
104
- static ZERO_SPAN_WARNING(newMergedCell) {
105
- return toSingleLine`The merged cell declared at [${newMergedCell.row}, ${newMergedCell.col}] has "rowspan"\x20
134
+ static ZERO_SPAN_WARNING(_ref4) {
135
+ let {
136
+ row,
137
+ col
138
+ } = _ref4;
139
+ return toSingleLine`The merged cell declared at [${row}, ${col}] has "rowspan"\x20
106
140
  or "colspan" declared as "0", which is not supported. It cannot be added to the collection.`;
107
141
  }
108
142
 
109
143
  /**
110
144
  * Check whether the values provided for a merged cell contain any negative values.
111
145
  *
112
- * @param {object} mergedCellInfo Object containing the `row`, `col`, `rowspan` and `colspan` properties.
146
+ * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information
147
+ * about the merged cells that was about to be added.
113
148
  * @returns {boolean}
114
149
  */
115
- static containsNegativeValues(mergedCellInfo) {
116
- return mergedCellInfo.row < 0 || mergedCellInfo.col < 0 || mergedCellInfo.rowspan < 0 || mergedCellInfo.colspan < 0;
150
+ static containsNegativeValues(_ref5) {
151
+ let {
152
+ row,
153
+ col,
154
+ rowspan,
155
+ colspan
156
+ } = _ref5;
157
+ return row < 0 || col < 0 || rowspan < 0 || colspan < 0;
117
158
  }
118
159
 
119
160
  /**
120
161
  * Check whether the provided merged cell information object represents a single cell.
121
162
  *
122
163
  * @private
123
- * @param {object} mergedCellInfo An object with `row`, `col`, `rowspan` and `colspan` properties.
164
+ * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information
165
+ * about the merged cells that was about to be added.
124
166
  * @returns {boolean}
125
167
  */
126
- static isSingleCell(mergedCellInfo) {
127
- return mergedCellInfo.colspan === 1 && mergedCellInfo.rowspan === 1;
168
+ static isSingleCell(_ref6) {
169
+ let {
170
+ rowspan,
171
+ colspan
172
+ } = _ref6;
173
+ return colspan === 1 && rowspan === 1;
128
174
  }
129
175
 
130
176
  /**
131
177
  * Check whether the provided merged cell information object contains a rowspan or colspan of 0.
132
178
  *
133
179
  * @private
134
- * @param {object} mergedCellInfo An object with `row`, `col`, `rowspan` and `colspan` properties.
180
+ * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information
181
+ * about the merged cells that was about to be added.
135
182
  * @returns {boolean}
136
183
  */
137
- static containsZeroSpan(mergedCellInfo) {
138
- return mergedCellInfo.colspan === 0 || mergedCellInfo.rowspan === 0;
184
+ static containsZeroSpan(_ref7) {
185
+ let {
186
+ rowspan,
187
+ colspan
188
+ } = _ref7;
189
+ return colspan === 0 || rowspan === 0;
139
190
  }
140
191
 
141
192
  /**
@@ -174,6 +225,7 @@ class MergedCellCoords {
174
225
  if (this.col + this.colspan > totalColumns - 1) {
175
226
  this.colspan = totalColumns - this.col;
176
227
  }
228
+ _classPrivateFieldSet(_cellRange, this, null);
177
229
  }
178
230
 
179
231
  /**
@@ -238,6 +290,7 @@ class MergedCellCoords {
238
290
  // removing the whole merge
239
291
  if (changeStart <= mergeStart && changeEnd >= mergeEnd) {
240
292
  this.removed = true;
293
+ _classPrivateFieldSet(_cellRange, this, null);
241
294
  return false;
242
295
 
243
296
  // removing the merge partially, including the beginning
@@ -257,6 +310,7 @@ class MergedCellCoords {
257
310
  this[span] -= removedPart;
258
311
  }
259
312
  }
313
+ _classPrivateFieldSet(_cellRange, this, null);
260
314
  return true;
261
315
  }
262
316
 
@@ -307,7 +361,10 @@ class MergedCellCoords {
307
361
  * @returns {CellRange}
308
362
  */
309
363
  getRange() {
310
- return this.cellRangeFactory(this.cellCoordsFactory(this.row, this.col), this.cellCoordsFactory(this.row, this.col), this.cellCoordsFactory(this.getLastRow(), this.getLastColumn()));
364
+ if (!_classPrivateFieldGet(_cellRange, this)) {
365
+ _classPrivateFieldSet(_cellRange, this, this.cellRangeFactory(this.cellCoordsFactory(this.row, this.col), this.cellCoordsFactory(this.row, this.col), this.cellCoordsFactory(this.getLastRow(), this.getLastColumn())));
366
+ }
367
+ return _classPrivateFieldGet(_cellRange, this);
311
368
  }
312
369
  }
313
370
  export default MergedCellCoords;
@@ -15,12 +15,11 @@ var _cellCoords = _interopRequireDefault(require("./cellCoords"));
15
15
  var _number = require("../../helpers/number");
16
16
  var _console = require("../../helpers/console");
17
17
  var _array = require("../../helpers/array");
18
- var _utils = require("./utils");
19
18
  var _templateLiteralTag = require("../../helpers/templateLiteralTag");
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
- function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
22
- function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
23
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
19
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
+ function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
21
+ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
22
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
24
23
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
25
24
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
26
25
  function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
@@ -51,9 +50,15 @@ class MergedCellsCollection {
51
50
  /**
52
51
  * Array of merged cells.
53
52
  *
54
- * @type {Array}
53
+ * @type {MergedCellCoords[]}
55
54
  */
56
55
  _defineProperty(this, "mergedCells", []);
56
+ /**
57
+ * Matrix of cells (row, col) that points to the instances of the MergedCellCoords objects.
58
+ *
59
+ * @type {Array}
60
+ */
61
+ _defineProperty(this, "mergedCellsMatrix", new Map());
57
62
  /**
58
63
  * The Handsontable instance.
59
64
  *
@@ -67,11 +72,16 @@ class MergedCellsCollection {
67
72
  /**
68
73
  * Get a warning message for when the declared merged cell data overlaps already existing merged cells.
69
74
  *
70
- * @param {object} newMergedCell Object containg information about the merged cells that was about to be added.
75
+ * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information
76
+ * about the merged cells that was about to be added.
71
77
  * @returns {string}
72
78
  */
73
- static IS_OVERLAPPING_WARNING(newMergedCell) {
74
- return (0, _templateLiteralTag.toSingleLine)`The merged cell declared at [${newMergedCell.row}, ${newMergedCell.col}], overlaps\x20
79
+ static IS_OVERLAPPING_WARNING(_ref) {
80
+ let {
81
+ row,
82
+ col
83
+ } = _ref;
84
+ return (0, _templateLiteralTag.toSingleLine)`The merged cell declared at [${row}, ${col}], overlaps\x20
75
85
  with the other declared merged cell. The overlapping merged cell was not added to the table, please\x20
76
86
  fix your setup.`;
77
87
  }
@@ -85,16 +95,11 @@ class MergedCellsCollection {
85
95
  * @returns {MergedCellCoords|boolean} Returns a wanted merged cell on success and `false` on failure.
86
96
  */
87
97
  get(row, column) {
88
- const mergedCells = this.mergedCells;
89
- let result = false;
90
- (0, _array.arrayEach)(mergedCells, mergedCell => {
91
- if (mergedCell.row <= row && mergedCell.row + mergedCell.rowspan - 1 >= row && mergedCell.col <= column && mergedCell.col + mergedCell.colspan - 1 >= column) {
92
- result = mergedCell;
93
- return false;
94
- }
95
- return true;
96
- });
97
- return result;
98
+ var _this$mergedCellsMatr;
99
+ if (!this.mergedCellsMatrix.has(row)) {
100
+ return false;
101
+ }
102
+ return (_this$mergedCellsMatr = this.mergedCellsMatrix.get(row).get(column)) !== null && _this$mergedCellsMatr !== void 0 ? _this$mergedCellsMatr : false;
98
103
  }
99
104
 
100
105
  /**
@@ -104,9 +109,8 @@ class MergedCellsCollection {
104
109
  * @returns {MergedCellCoords|boolean}
105
110
  */
106
111
  getByRange(range) {
107
- const mergedCells = this.mergedCells;
108
112
  let result = false;
109
- (0, _array.arrayEach)(mergedCells, mergedCell => {
113
+ (0, _array.arrayEach)(this.mergedCells, mergedCell => {
110
114
  if (mergedCell.row <= range.from.row && mergedCell.row + mergedCell.rowspan - 1 >= range.to.row && mergedCell.col <= range.from.col && mergedCell.col + mergedCell.colspan - 1 >= range.to.col) {
111
115
  result = mergedCell;
112
116
  return result;
@@ -116,58 +120,110 @@ class MergedCellsCollection {
116
120
  return result;
117
121
  }
118
122
 
123
+ /**
124
+ * Filters merge cells objects provided by users from overlapping cells.
125
+ *
126
+ * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCellsInfo The merged cell information object.
127
+ * Has to contain `row`, `col`, `colspan` and `rowspan` properties.
128
+ * @returns {Array<{ row: number, col: number, rowspan: number, colspan: number }>}
129
+ */
130
+ filterOverlappingMergeCells(mergedCellsInfo) {
131
+ const occupiedCells = new Set();
132
+ this.mergedCells.forEach(mergedCell => {
133
+ const {
134
+ row,
135
+ col,
136
+ colspan,
137
+ rowspan
138
+ } = mergedCell;
139
+ for (let r = row; r < row + rowspan; r++) {
140
+ for (let c = col; c < col + colspan; c++) {
141
+ occupiedCells.add(`r${r},c${c}`);
142
+ }
143
+ }
144
+ });
145
+ const filteredMergeCells = mergedCellsInfo.filter(mergedCell => {
146
+ const {
147
+ row,
148
+ col,
149
+ colspan,
150
+ rowspan
151
+ } = mergedCell;
152
+ const localOccupiedCells = new Set();
153
+ let isOverlapping = false;
154
+ for (let r = row; r < row + rowspan; r++) {
155
+ for (let c = col; c < col + colspan; c++) {
156
+ const cellId = `r${r},c${c}`;
157
+ if (occupiedCells.has(cellId)) {
158
+ (0, _console.warn)(MergedCellsCollection.IS_OVERLAPPING_WARNING(mergedCell));
159
+ isOverlapping = true;
160
+ break;
161
+ }
162
+ localOccupiedCells.add(cellId);
163
+ }
164
+ if (isOverlapping) {
165
+ break;
166
+ }
167
+ }
168
+ if (!isOverlapping) {
169
+ occupiedCells.add(...localOccupiedCells);
170
+ }
171
+ return !isOverlapping;
172
+ });
173
+ return filteredMergeCells;
174
+ }
175
+
119
176
  /**
120
177
  * Get a merged cell contained in the provided range.
121
178
  *
122
- * @param {CellRange|object} range The range to search merged cells in.
179
+ * @param {CellRange} range The range to search merged cells in.
123
180
  * @param {boolean} [countPartials=false] If set to `true`, all the merged cells overlapping the range will be taken into calculation.
124
- * @returns {Array|boolean} Array of found merged cells of `false` if none were found.
181
+ * @returns {MergedCellCoords[]} Array of found merged cells.
125
182
  */
126
183
  getWithinRange(range) {
127
184
  let countPartials = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
128
- const mergedCells = this.mergedCells;
129
- const foundMergedCells = [];
130
- let testedRange = range;
131
- if (!testedRange.includesRange) {
132
- const from = this.hot._createCellCoords(testedRange.from.row, testedRange.from.col);
133
- const to = this.hot._createCellCoords(testedRange.to.row, testedRange.to.col);
134
- testedRange = this.hot._createCellRange(from, from, to);
135
- }
136
- (0, _array.arrayEach)(mergedCells, mergedCell => {
137
- const mergedCellTopLeft = this.hot._createCellCoords(mergedCell.row, mergedCell.col);
138
- const mergedCellBottomRight = this.hot._createCellCoords(mergedCell.row + mergedCell.rowspan - 1, mergedCell.col + mergedCell.colspan - 1);
139
- const mergedCellRange = this.hot._createCellRange(mergedCellTopLeft, mergedCellTopLeft, mergedCellBottomRight);
140
- if (countPartials) {
141
- if (testedRange.overlaps(mergedCellRange)) {
142
- foundMergedCells.push(mergedCell);
185
+ const {
186
+ row: rowStart,
187
+ col: columnStart
188
+ } = range.getTopStartCorner();
189
+ const {
190
+ row: rowEnd,
191
+ col: columnEnd
192
+ } = range.getBottomEndCorner();
193
+ const result = [];
194
+ for (let row = rowStart; row <= rowEnd; row++) {
195
+ for (let column = columnStart; column <= columnEnd; column++) {
196
+ const mergedCell = this.get(row, column);
197
+ if (mergedCell && (countPartials || !countPartials && mergedCell.row === row && mergedCell.col === column)) {
198
+ result.push(mergedCell);
143
199
  }
144
- } else if (testedRange.includesRange(mergedCellRange)) {
145
- foundMergedCells.push(mergedCell);
146
200
  }
147
- });
148
- return foundMergedCells.length ? foundMergedCells : false;
201
+ }
202
+ return result;
149
203
  }
150
204
 
151
205
  /**
152
206
  * Add a merged cell to the container.
153
207
  *
154
208
  * @param {object} mergedCellInfo The merged cell information object. Has to contain `row`, `col`, `colspan` and `rowspan` properties.
209
+ * @param {boolean} [auto=false] `true` if called internally by the plugin (usually in batch).
155
210
  * @returns {MergedCellCoords|boolean} Returns the new merged cell on success and `false` on failure.
156
211
  */
157
212
  add(mergedCellInfo) {
158
- const mergedCells = this.mergedCells;
213
+ let auto = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
159
214
  const row = mergedCellInfo.row;
160
215
  const column = mergedCellInfo.col;
161
216
  const rowspan = mergedCellInfo.rowspan;
162
217
  const colspan = mergedCellInfo.colspan;
163
218
  const newMergedCell = new _cellCoords.default(row, column, rowspan, colspan, this.hot._createCellCoords, this.hot._createCellRange);
164
219
  const alreadyExists = this.get(row, column);
165
- const isOverlapping = this.isOverlapping(newMergedCell);
220
+ const isOverlapping = auto ? false : this.isOverlapping(newMergedCell);
166
221
  if (!alreadyExists && !isOverlapping) {
167
222
  if (this.hot) {
168
223
  newMergedCell.normalize(this.hot);
169
224
  }
170
- mergedCells.push(newMergedCell);
225
+ this.mergedCells.push(newMergedCell);
226
+ _assertClassBrand(_MergedCellsCollection_brand, this, _addMergedCellToMatrix).call(this, newMergedCell);
171
227
  return newMergedCell;
172
228
  }
173
229
  (0, _console.warn)(MergedCellsCollection.IS_OVERLAPPING_WARNING(newMergedCell));
@@ -183,12 +239,12 @@ class MergedCellsCollection {
183
239
  * @returns {MergedCellCoords|boolean} Returns the removed merged cell on success and `false` on failure.
184
240
  */
185
241
  remove(row, column) {
186
- const mergedCells = this.mergedCells;
187
- const wantedCollection = this.get(row, column);
188
- const wantedCollectionIndex = wantedCollection ? this.mergedCells.indexOf(wantedCollection) : -1;
189
- if (wantedCollection && wantedCollectionIndex !== -1) {
190
- mergedCells.splice(wantedCollectionIndex, 1);
191
- return wantedCollection;
242
+ const mergedCell = this.get(row, column);
243
+ const mergedCellIndex = mergedCell ? this.mergedCells.indexOf(mergedCell) : -1;
244
+ if (mergedCell && mergedCellIndex !== -1) {
245
+ this.mergedCells.splice(mergedCellIndex, 1);
246
+ _assertClassBrand(_MergedCellsCollection_brand, this, _removeMergedCellFromMatrix).call(this, mergedCell);
247
+ return mergedCell;
192
248
  }
193
249
  return false;
194
250
  }
@@ -197,55 +253,44 @@ class MergedCellsCollection {
197
253
  * Clear all the merged cells.
198
254
  */
199
255
  clear() {
200
- const mergedCells = this.mergedCells;
201
- const mergedCellParentsToClear = [];
202
- const hiddenCollectionElements = [];
203
- (0, _array.arrayEach)(mergedCells, mergedCell => {
204
- const TD = this.hot.getCell(mergedCell.row, mergedCell.col);
205
- if (TD) {
206
- mergedCellParentsToClear.push([TD, this.get(mergedCell.row, mergedCell.col), mergedCell.row, mergedCell.col]);
207
- }
208
- });
209
- this.mergedCells.length = 0;
210
- (0, _array.arrayEach)(mergedCellParentsToClear, (mergedCell, i) => {
211
- (0, _number.rangeEach)(0, mergedCell.rowspan - 1, j => {
212
- (0, _number.rangeEach)(0, mergedCell.colspan - 1, k => {
213
- if (k !== 0 || j !== 0) {
214
- const TD = this.hot.getCell(mergedCell.row + j, mergedCell.col + k);
215
- if (TD) {
216
- hiddenCollectionElements.push([TD, null, null, null]);
217
- }
256
+ (0, _array.arrayEach)(this.mergedCells, _ref2 => {
257
+ let {
258
+ row,
259
+ col,
260
+ rowspan,
261
+ colspan
262
+ } = _ref2;
263
+ (0, _number.rangeEach)(row, row + rowspan, r => {
264
+ (0, _number.rangeEach)(col, col + colspan, c => {
265
+ const TD = this.hot.getCell(r, c);
266
+ if (TD) {
267
+ TD.removeAttribute('rowspan');
268
+ TD.removeAttribute('colspan');
269
+ TD.style.display = '';
218
270
  }
219
271
  });
220
272
  });
221
- mergedCellParentsToClear[i][1] = null;
222
- });
223
- (0, _array.arrayEach)(mergedCellParentsToClear, mergedCellParents => {
224
- (0, _utils.applySpanProperties)(...mergedCellParents);
225
- });
226
- (0, _array.arrayEach)(hiddenCollectionElements, hiddenCollectionElement => {
227
- (0, _utils.applySpanProperties)(...hiddenCollectionElement);
228
273
  });
274
+ this.mergedCells.length = 0;
275
+ this.mergedCellsMatrix = new Map();
229
276
  }
230
277
 
231
278
  /**
232
- * Check if the provided merged cell overlaps with the others in the container.
279
+ * Check if the provided merged cell overlaps with the others already added.
233
280
  *
234
281
  * @param {MergedCellCoords} mergedCell The merged cell to check against all others in the container.
235
282
  * @returns {boolean} `true` if the provided merged cell overlaps with the others, `false` otherwise.
236
283
  */
237
284
  isOverlapping(mergedCell) {
238
- const mergedCellRange = this.hot._createCellRange(this.hot._createCellCoords(0, 0), this.hot._createCellCoords(mergedCell.row, mergedCell.col), this.hot._createCellCoords(mergedCell.row + mergedCell.rowspan - 1, mergedCell.col + mergedCell.colspan - 1));
239
- let result = false;
240
- (0, _array.arrayEach)(this.mergedCells, col => {
241
- const currentRange = this.hot._createCellRange(this.hot._createCellCoords(0, 0), this.hot._createCellCoords(col.row, col.col), this.hot._createCellCoords(col.row + col.rowspan - 1, col.col + col.colspan - 1));
242
- if (currentRange.overlaps(mergedCellRange)) {
243
- result = true;
244
- return false;
285
+ const mergedCellRange = mergedCell.getRange();
286
+ for (let i = 0; i < this.mergedCells.length; i++) {
287
+ const otherMergedCell = this.mergedCells[i];
288
+ const otherMergedCellRange = otherMergedCell.getRange();
289
+ if (otherMergedCellRange.overlaps(mergedCellRange)) {
290
+ return true;
245
291
  }
246
- return true;
247
- });
248
- return result;
292
+ }
293
+ return false;
249
294
  }
250
295
 
251
296
  /**
@@ -380,15 +425,24 @@ class MergedCellsCollection {
380
425
  default:
381
426
  }
382
427
  (0, _array.arrayEach)(this.mergedCells, currentMerge => {
428
+ _assertClassBrand(_MergedCellsCollection_brand, this, _removeMergedCellFromMatrix).call(this, currentMerge);
383
429
  currentMerge.shift(shiftVector, index);
430
+ _assertClassBrand(_MergedCellsCollection_brand, this, _addMergedCellToMatrix).call(this, currentMerge);
384
431
  });
385
432
  (0, _number.rangeEachReverse)(this.mergedCells.length - 1, 0, i => {
386
433
  const currentMerge = this.mergedCells[i];
387
434
  if (currentMerge && currentMerge.removed) {
388
435
  this.mergedCells.splice(this.mergedCells.indexOf(currentMerge), 1);
436
+ _assertClassBrand(_MergedCellsCollection_brand, this, _removeMergedCellFromMatrix).call(this, currentMerge);
389
437
  }
390
438
  });
391
439
  }
440
+
441
+ /**
442
+ * Adds a merged cell to the matrix.
443
+ *
444
+ * @param {MergedCellCoords} mergedCell The merged cell to add.
445
+ */
392
446
  }
393
447
  function _getNonIntersectingIndexes(range, axis) {
394
448
  let scanDirection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
@@ -409,12 +463,34 @@ function _getNonIntersectingIndexes(range, axis) {
409
463
  indexes.get(index).add(lastIndex);
410
464
  }
411
465
  }
412
- return Array.from(new Set(Array.from(indexes.entries()).filter(_ref => {
413
- let [, set] = _ref;
466
+ return Array.from(new Set(Array.from(indexes.entries()).filter(_ref3 => {
467
+ let [, set] = _ref3;
414
468
  return set.size === 1;
415
- }).flatMap(_ref2 => {
416
- let [, set] = _ref2;
469
+ }).flatMap(_ref4 => {
470
+ let [, set] = _ref4;
417
471
  return Array.from(set);
418
472
  })));
419
473
  }
474
+ function _addMergedCellToMatrix(mergedCell) {
475
+ for (let row = mergedCell.row; row < mergedCell.row + mergedCell.rowspan; row++) {
476
+ for (let col = mergedCell.col; col < mergedCell.col + mergedCell.colspan; col++) {
477
+ if (!this.mergedCellsMatrix.has(row)) {
478
+ this.mergedCellsMatrix.set(row, new Map());
479
+ }
480
+ this.mergedCellsMatrix.get(row).set(col, mergedCell);
481
+ }
482
+ }
483
+ }
484
+ /**
485
+ * Removes a merged cell from the matrix.
486
+ *
487
+ * @param {MergedCellCoords} mergedCell The merged cell to remove.
488
+ */
489
+ function _removeMergedCellFromMatrix(mergedCell) {
490
+ for (let row = mergedCell.row; row < mergedCell.row + mergedCell.rowspan; row++) {
491
+ for (let col = mergedCell.col; col < mergedCell.col + mergedCell.colspan; col++) {
492
+ this.mergedCellsMatrix.get(row).delete(col);
493
+ }
494
+ }
495
+ }
420
496
  var _default = exports.default = MergedCellsCollection;