handsontable 14.4.0 → 14.5.0-next-ede811d-20240717

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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;