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
@@ -7,10 +7,10 @@ import "core-js/modules/esnext.set.is-subset-of.v2.js";
7
7
  import "core-js/modules/esnext.set.is-superset-of.v2.js";
8
8
  import "core-js/modules/esnext.set.symmetric-difference.v2.js";
9
9
  import "core-js/modules/esnext.set.union.v2.js";
10
- function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
11
- function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
12
- function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
13
- 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; }
10
+ function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
11
+ function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
12
+ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
13
+ 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; }
14
14
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
15
15
  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); }
16
16
  function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
@@ -24,13 +24,13 @@ import AutofillCalculations from "./calculations/autofill.mjs";
24
24
  import SelectionCalculations from "./calculations/selection.mjs";
25
25
  import toggleMergeItem from "./contextMenuItem/toggleMerge.mjs";
26
26
  import { arrayEach } from "../../helpers/array.mjs";
27
- import { isObject, clone } from "../../helpers/object.mjs";
27
+ import { isObject } from "../../helpers/object.mjs";
28
28
  import { warn } from "../../helpers/console.mjs";
29
29
  import { rangeEach } from "../../helpers/number.mjs";
30
- import { applySpanProperties } from "./utils.mjs";
31
30
  import { getStyle } from "../../helpers/dom/element.mjs";
32
31
  import { isChrome } from "../../helpers/browser.mjs";
33
32
  import { FocusOrder } from "./focusOrder.mjs";
33
+ import { createMergeCellRenderer } from "./renderer.mjs";
34
34
  Hooks.getSingleton().register('beforeMergeCells');
35
35
  Hooks.getSingleton().register('afterMergeCells');
36
36
  Hooks.getSingleton().register('beforeUnmergeCells');
@@ -79,6 +79,7 @@ const SHORTCUTS_GROUP = PLUGIN_KEY;
79
79
  var _lastSelectedFocus = /*#__PURE__*/new WeakMap();
80
80
  var _lastFocusDelta = /*#__PURE__*/new WeakMap();
81
81
  var _focusOrder = /*#__PURE__*/new WeakMap();
82
+ var _cellRenderer = /*#__PURE__*/new WeakMap();
82
83
  var _MergeCells_brand = /*#__PURE__*/new WeakSet();
83
84
  export class MergeCells extends BasePlugin {
84
85
  constructor() {
@@ -135,6 +136,12 @@ export class MergeCells extends BasePlugin {
135
136
  rowIndexMapper: this.hot.rowIndexMapper,
136
137
  columnIndexMapper: this.hot.columnIndexMapper
137
138
  }));
139
+ /**
140
+ * The cell renderer responsible for rendering the merged cells.
141
+ *
142
+ * @type {{before: Function, after: Function}}
143
+ */
144
+ _classPrivateFieldInitSpec(this, _cellRenderer, createMergeCellRenderer(this));
138
145
  }
139
146
  static get PLUGIN_KEY() {
140
147
  return PLUGIN_KEY;
@@ -236,94 +243,97 @@ export class MergeCells extends BasePlugin {
236
243
  return _assertClassBrand(_MergeCells_brand, _this, _onAfterIsMultipleSelection).call(_this, ...args);
237
244
  });
238
245
  this.addHook('afterRenderer', function () {
246
+ return _classPrivateFieldGet(_cellRenderer, _this).after(...arguments);
247
+ });
248
+ this.addHook('afterContextMenuDefaultOptions', function () {
239
249
  for (var _len13 = arguments.length, args = new Array(_len13), _key13 = 0; _key13 < _len13; _key13++) {
240
250
  args[_key13] = arguments[_key13];
241
251
  }
242
- return _assertClassBrand(_MergeCells_brand, _this, _onAfterRenderer).call(_this, ...args);
252
+ return _assertClassBrand(_MergeCells_brand, _this, _addMergeActionsToContextMenu).call(_this, ...args);
243
253
  });
244
- this.addHook('afterContextMenuDefaultOptions', function () {
254
+ this.addHook('afterGetCellMeta', function () {
245
255
  for (var _len14 = arguments.length, args = new Array(_len14), _key14 = 0; _key14 < _len14; _key14++) {
246
256
  args[_key14] = arguments[_key14];
247
257
  }
248
- return _assertClassBrand(_MergeCells_brand, _this, _addMergeActionsToContextMenu).call(_this, ...args);
258
+ return _assertClassBrand(_MergeCells_brand, _this, _onAfterGetCellMeta).call(_this, ...args);
249
259
  });
250
- this.addHook('afterGetCellMeta', function () {
260
+ this.addHook('afterViewportRowCalculatorOverride', function () {
251
261
  for (var _len15 = arguments.length, args = new Array(_len15), _key15 = 0; _key15 < _len15; _key15++) {
252
262
  args[_key15] = arguments[_key15];
253
263
  }
254
- return _assertClassBrand(_MergeCells_brand, _this, _onAfterGetCellMeta).call(_this, ...args);
264
+ return _assertClassBrand(_MergeCells_brand, _this, _onAfterViewportRowCalculatorOverride).call(_this, ...args);
255
265
  });
256
- this.addHook('afterViewportRowCalculatorOverride', function () {
266
+ this.addHook('afterViewportColumnCalculatorOverride', function () {
257
267
  for (var _len16 = arguments.length, args = new Array(_len16), _key16 = 0; _key16 < _len16; _key16++) {
258
268
  args[_key16] = arguments[_key16];
259
269
  }
260
- return _assertClassBrand(_MergeCells_brand, _this, _onAfterViewportRowCalculatorOverride).call(_this, ...args);
270
+ return _assertClassBrand(_MergeCells_brand, _this, _onAfterViewportColumnCalculatorOverride).call(_this, ...args);
261
271
  });
262
- this.addHook('afterViewportColumnCalculatorOverride', function () {
272
+ this.addHook('modifyAutofillRange', function () {
263
273
  for (var _len17 = arguments.length, args = new Array(_len17), _key17 = 0; _key17 < _len17; _key17++) {
264
274
  args[_key17] = arguments[_key17];
265
275
  }
266
- return _assertClassBrand(_MergeCells_brand, _this, _onAfterViewportColumnCalculatorOverride).call(_this, ...args);
276
+ return _assertClassBrand(_MergeCells_brand, _this, _onModifyAutofillRange).call(_this, ...args);
267
277
  });
268
- this.addHook('modifyAutofillRange', function () {
278
+ this.addHook('afterCreateCol', function () {
269
279
  for (var _len18 = arguments.length, args = new Array(_len18), _key18 = 0; _key18 < _len18; _key18++) {
270
280
  args[_key18] = arguments[_key18];
271
281
  }
272
- return _assertClassBrand(_MergeCells_brand, _this, _onModifyAutofillRange).call(_this, ...args);
282
+ return _assertClassBrand(_MergeCells_brand, _this, _onAfterCreateCol).call(_this, ...args);
273
283
  });
274
- this.addHook('afterCreateCol', function () {
284
+ this.addHook('afterRemoveCol', function () {
275
285
  for (var _len19 = arguments.length, args = new Array(_len19), _key19 = 0; _key19 < _len19; _key19++) {
276
286
  args[_key19] = arguments[_key19];
277
287
  }
278
- return _assertClassBrand(_MergeCells_brand, _this, _onAfterCreateCol).call(_this, ...args);
288
+ return _assertClassBrand(_MergeCells_brand, _this, _onAfterRemoveCol).call(_this, ...args);
279
289
  });
280
- this.addHook('afterRemoveCol', function () {
290
+ this.addHook('afterCreateRow', function () {
281
291
  for (var _len20 = arguments.length, args = new Array(_len20), _key20 = 0; _key20 < _len20; _key20++) {
282
292
  args[_key20] = arguments[_key20];
283
293
  }
284
- return _assertClassBrand(_MergeCells_brand, _this, _onAfterRemoveCol).call(_this, ...args);
294
+ return _assertClassBrand(_MergeCells_brand, _this, _onAfterCreateRow).call(_this, ...args);
285
295
  });
286
- this.addHook('afterCreateRow', function () {
296
+ this.addHook('afterRemoveRow', function () {
287
297
  for (var _len21 = arguments.length, args = new Array(_len21), _key21 = 0; _key21 < _len21; _key21++) {
288
298
  args[_key21] = arguments[_key21];
289
299
  }
290
- return _assertClassBrand(_MergeCells_brand, _this, _onAfterCreateRow).call(_this, ...args);
300
+ return _assertClassBrand(_MergeCells_brand, _this, _onAfterRemoveRow).call(_this, ...args);
291
301
  });
292
- this.addHook('afterRemoveRow', function () {
302
+ this.addHook('afterChange', function () {
293
303
  for (var _len22 = arguments.length, args = new Array(_len22), _key22 = 0; _key22 < _len22; _key22++) {
294
304
  args[_key22] = arguments[_key22];
295
305
  }
296
- return _assertClassBrand(_MergeCells_brand, _this, _onAfterRemoveRow).call(_this, ...args);
306
+ return _assertClassBrand(_MergeCells_brand, _this, _onAfterChange).call(_this, ...args);
297
307
  });
298
- this.addHook('afterChange', function () {
308
+ this.addHook('beforeDrawBorders', function () {
299
309
  for (var _len23 = arguments.length, args = new Array(_len23), _key23 = 0; _key23 < _len23; _key23++) {
300
310
  args[_key23] = arguments[_key23];
301
311
  }
302
- return _assertClassBrand(_MergeCells_brand, _this, _onAfterChange).call(_this, ...args);
312
+ return _assertClassBrand(_MergeCells_brand, _this, _onBeforeDrawAreaBorders).call(_this, ...args);
303
313
  });
304
- this.addHook('beforeDrawBorders', function () {
314
+ this.addHook('afterDrawSelection', function () {
305
315
  for (var _len24 = arguments.length, args = new Array(_len24), _key24 = 0; _key24 < _len24; _key24++) {
306
316
  args[_key24] = arguments[_key24];
307
317
  }
308
- return _assertClassBrand(_MergeCells_brand, _this, _onBeforeDrawAreaBorders).call(_this, ...args);
318
+ return _assertClassBrand(_MergeCells_brand, _this, _onAfterDrawSelection).call(_this, ...args);
309
319
  });
310
- this.addHook('afterDrawSelection', function () {
320
+ this.addHook('beforeRemoveCellClassNames', function () {
311
321
  for (var _len25 = arguments.length, args = new Array(_len25), _key25 = 0; _key25 < _len25; _key25++) {
312
322
  args[_key25] = arguments[_key25];
313
323
  }
314
- return _assertClassBrand(_MergeCells_brand, _this, _onAfterDrawSelection).call(_this, ...args);
324
+ return _assertClassBrand(_MergeCells_brand, _this, _onBeforeRemoveCellClassNames).call(_this, ...args);
315
325
  });
316
- this.addHook('beforeRemoveCellClassNames', function () {
326
+ this.addHook('beforeBeginEditing', function () {
317
327
  for (var _len26 = arguments.length, args = new Array(_len26), _key26 = 0; _key26 < _len26; _key26++) {
318
328
  args[_key26] = arguments[_key26];
319
329
  }
320
- return _assertClassBrand(_MergeCells_brand, _this, _onBeforeRemoveCellClassNames).call(_this, ...args);
330
+ return _assertClassBrand(_MergeCells_brand, _this, _onBeforeBeginEditing).call(_this, ...args);
321
331
  });
322
- this.addHook('beforeBeginEditing', function () {
332
+ this.addHook('modifyRowHeightByOverlayName', function () {
323
333
  for (var _len27 = arguments.length, args = new Array(_len27), _key27 = 0; _key27 < _len27; _key27++) {
324
334
  args[_key27] = arguments[_key27];
325
335
  }
326
- return _assertClassBrand(_MergeCells_brand, _this, _onBeforeBeginEditing).call(_this, ...args);
336
+ return _assertClassBrand(_MergeCells_brand, _this, _onModifyRowHeightByOverlayName).call(_this, ...args);
327
337
  });
328
338
  this.addHook('beforeUndoStackChange', (action, source) => {
329
339
  if (source === 'MergeCells') {
@@ -414,24 +424,26 @@ export class MergeCells extends BasePlugin {
414
424
  * @returns {boolean}
415
425
  */
416
426
  validateSetting(setting) {
417
- let valid = true;
418
427
  if (!setting) {
419
428
  return false;
420
429
  }
421
430
  if (MergedCellCoords.containsNegativeValues(setting)) {
422
431
  warn(MergedCellCoords.NEGATIVE_VALUES_WARNING(setting));
423
- valid = false;
424
- } else if (MergedCellCoords.isOutOfBounds(setting, this.hot.countRows(), this.hot.countCols())) {
432
+ return false;
433
+ }
434
+ if (MergedCellCoords.isOutOfBounds(setting, this.hot.countRows(), this.hot.countCols())) {
425
435
  warn(MergedCellCoords.IS_OUT_OF_BOUNDS_WARNING(setting));
426
- valid = false;
427
- } else if (MergedCellCoords.isSingleCell(setting)) {
436
+ return false;
437
+ }
438
+ if (MergedCellCoords.isSingleCell(setting)) {
428
439
  warn(MergedCellCoords.IS_SINGLE_CELL(setting));
429
- valid = false;
430
- } else if (MergedCellCoords.containsZeroSpan(setting)) {
440
+ return false;
441
+ }
442
+ if (MergedCellCoords.containsZeroSpan(setting)) {
431
443
  warn(MergedCellCoords.ZERO_SPAN_WARNING(setting));
432
- valid = false;
444
+ return false;
433
445
  }
434
- return valid;
446
+ return true;
435
447
  }
436
448
 
437
449
  /**
@@ -441,36 +453,42 @@ export class MergeCells extends BasePlugin {
441
453
  * @param {Array|boolean} settings The settings provided to the plugin.
442
454
  */
443
455
  generateFromSettings(settings) {
444
- if (Array.isArray(settings)) {
445
- const populatedNulls = [];
446
- arrayEach(settings, setting => {
447
- if (!this.validateSetting(setting)) {
448
- return;
449
- }
450
- const highlight = this.hot._createCellCoords(setting.row, setting.col);
451
- const rangeEnd = this.hot._createCellCoords(setting.row + setting.rowspan - 1, setting.col + setting.colspan - 1);
452
- const mergeRange = this.hot._createCellRange(highlight, highlight, rangeEnd);
453
-
454
- // Merging without data population.
455
- this.mergeRange(mergeRange, true, true);
456
- rangeEach(setting.row, setting.row + setting.rowspan - 1, rowIndex => {
457
- rangeEach(setting.col, setting.col + setting.colspan - 1, columnIndex => {
458
- // Not resetting a cell representing a merge area's value.
459
- if ((rowIndex === setting.row && columnIndex === setting.col) === false) {
460
- populatedNulls.push([rowIndex, columnIndex, null]);
461
- }
462
- });
463
- });
464
- });
456
+ if (!Array.isArray(settings)) {
457
+ return;
458
+ }
459
+ const validSettings = settings.filter(mergeCellInfo => this.validateSetting(mergeCellInfo));
460
+ const nonOverlappingSettings = this.mergedCellsCollection.filterOverlappingMergeCells(validSettings);
461
+ const populatedNulls = [];
462
+ nonOverlappingSettings.forEach(mergeCellInfo => {
463
+ const {
464
+ row,
465
+ col,
466
+ rowspan,
467
+ colspan
468
+ } = mergeCellInfo;
469
+ const from = this.hot._createCellCoords(row, col);
470
+ const to = this.hot._createCellCoords(row + rowspan - 1, col + colspan - 1);
471
+ const mergeRange = this.hot._createCellRange(from, from, to);
465
472
 
466
- // There are no merged cells. Thus, no data population is needed.
467
- if (populatedNulls.length === 0) {
468
- return;
473
+ // Merging without data population.
474
+ this.mergeRange(mergeRange, true, true);
475
+ for (let r = row; r < row + rowspan; r++) {
476
+ for (let c = col; c < col + colspan; c++) {
477
+ // Not resetting a cell representing a merge area's value.
478
+ if (r !== row || c !== col) {
479
+ populatedNulls.push([r, c, null]);
480
+ }
481
+ }
469
482
  }
483
+ });
470
484
 
471
- // TODO: Change the `source` argument to a more meaningful value, e.g. `${this.pluginName}.clearCells`.
472
- this.hot.setDataAtCell(populatedNulls, undefined, undefined, this.pluginName);
485
+ // There are no merged cells. Thus, no data population is needed.
486
+ if (populatedNulls.length === 0) {
487
+ return;
473
488
  }
489
+
490
+ // TODO: Change the `source` argument to a more meaningful value, e.g. `${this.pluginName}.clearCells`.
491
+ this.hot.setDataAtCell(populatedNulls, undefined, undefined, this.pluginName);
474
492
  }
475
493
 
476
494
  /**
@@ -576,7 +594,7 @@ export class MergeCells extends BasePlugin {
576
594
  });
577
595
  });
578
596
  this.hot.setCellMeta(mergeParent.row, mergeParent.col, 'spanned', true);
579
- const mergedCellAdded = this.mergedCellsCollection.add(mergeParent);
597
+ const mergedCellAdded = this.mergedCellsCollection.add(mergeParent, auto);
580
598
  if (mergedCellAdded) {
581
599
  if (preventPopulation) {
582
600
  populationInfo = [mergeParent.row, mergeParent.col, clearedData];
@@ -606,7 +624,7 @@ export class MergeCells extends BasePlugin {
606
624
  unmergeRange(cellRange) {
607
625
  let auto = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
608
626
  const mergedCells = this.mergedCellsCollection.getWithinRange(cellRange);
609
- if (!mergedCells) {
627
+ if (mergedCells.length === 0) {
610
628
  return;
611
629
  }
612
630
  this.hot.runHooks('beforeUnmergeCells', cellRange, auto);
@@ -1110,45 +1128,6 @@ function _addMergeActionsToContextMenu(defaultOptions) {
1110
1128
  name: '---------'
1111
1129
  }, toggleMergeItem(this));
1112
1130
  }
1113
- /**
1114
- * `afterRenderer` hook callback.
1115
- *
1116
- * @param {HTMLElement} TD The cell to be modified.
1117
- * @param {number} row Row index.
1118
- * @param {number} col Visual column index.
1119
- */
1120
- function _onAfterRenderer(TD, row, col) {
1121
- const mergedCell = this.mergedCellsCollection.get(row, col);
1122
- // We shouldn't override data in the collection.
1123
- const mergedCellCopy = isObject(mergedCell) ? clone(mergedCell) : undefined;
1124
- if (isObject(mergedCellCopy)) {
1125
- const {
1126
- rowIndexMapper: rowMapper,
1127
- columnIndexMapper: columnMapper
1128
- } = this.hot;
1129
- const {
1130
- row: mergeRow,
1131
- col: mergeColumn,
1132
- colspan,
1133
- rowspan
1134
- } = mergedCellCopy;
1135
- const [lastMergedRowIndex, lastMergedColumnIndex] = this.translateMergedCellToRenderable(mergeRow, rowspan, mergeColumn, colspan);
1136
- const renderedRowIndex = rowMapper.getRenderableFromVisualIndex(row);
1137
- const renderedColumnIndex = columnMapper.getRenderableFromVisualIndex(col);
1138
- const maxRowSpan = lastMergedRowIndex - renderedRowIndex + 1; // Number of rendered columns.
1139
- const maxColSpan = lastMergedColumnIndex - renderedColumnIndex + 1; // Number of rendered columns.
1140
-
1141
- // We just try to determine some values basing on the actual number of rendered indexes (some columns may be hidden).
1142
- mergedCellCopy.row = rowMapper.getNearestNotHiddenIndex(mergedCellCopy.row, 1);
1143
- // We just try to determine some values basing on the actual number of rendered indexes (some columns may be hidden).
1144
- mergedCellCopy.col = columnMapper.getNearestNotHiddenIndex(mergedCellCopy.col, 1);
1145
- // The `rowSpan` property for a `TD` element should be at most equal to number of rendered rows in the merge area.
1146
- mergedCellCopy.rowspan = Math.min(mergedCellCopy.rowspan, maxRowSpan);
1147
- // The `colSpan` property for a `TD` element should be at most equal to number of rendered columns in the merge area.
1148
- mergedCellCopy.colspan = Math.min(mergedCellCopy.colspan, maxColSpan);
1149
- }
1150
- applySpanProperties(TD, mergedCellCopy, row, col);
1151
- }
1152
1131
  /**
1153
1132
  * Clears the last selected coordinates before setting a new selection range.
1154
1133
  */
@@ -1290,17 +1269,11 @@ function _onModifyAutofillRange(drag, select) {
1290
1269
  dragArea = select;
1291
1270
  return dragArea;
1292
1271
  }
1293
- const mergedCellsWithinSelectionArea = this.mergedCellsCollection.getWithinRange({
1294
- from: {
1295
- row: select[0],
1296
- col: select[1]
1297
- },
1298
- to: {
1299
- row: select[2],
1300
- col: select[3]
1301
- }
1302
- });
1303
- if (!mergedCellsWithinSelectionArea) {
1272
+ const from = this.hot._createCellCoords(select[0], select[1]);
1273
+ const to = this.hot._createCellCoords(select[2], select[3]);
1274
+ const range = this.hot._createCellRange(from, from, to);
1275
+ const mergedCellsWithinSelectionArea = this.mergedCellsCollection.getWithinRange(range);
1276
+ if (mergedCellsWithinSelectionArea.length === 0) {
1304
1277
  return dragArea;
1305
1278
  }
1306
1279
  dragArea = this.autofillCalculations.snapDragArea(select, dragArea, dragDirection, mergedCellsWithinSelectionArea);
@@ -1424,4 +1397,80 @@ function _onBeforeBeginEditing(row, column, initialValue, event) {
1424
1397
  const from = this.hot._createCellCoords(mergeCell.row, mergeCell.col);
1425
1398
  const to = this.hot._createCellCoords(mergeCell.row + mergeCell.rowspan - 1, mergeCell.col + mergeCell.colspan - 1);
1426
1399
  return this.hot.selection.getLayerLevel() === 0 && selection.isEqual(this.hot._createCellRange(from, from, to));
1400
+ }
1401
+ /**
1402
+ * Hook used to modify the row height depends on the merged cells in the row.
1403
+ *
1404
+ * @param {number} height The row height value provided by the Core.
1405
+ * @param {number} row The visual row index.
1406
+ * @param {string} overlayType The overlay type that is currently rendered.
1407
+ * @returns {number}
1408
+ */
1409
+ function _onModifyRowHeightByOverlayName(height, row, overlayType) {
1410
+ if (this.hot.getSettings().rowHeaders ||
1411
+ // merged cells do not work with the bottom overlays
1412
+ overlayType === 'bottom' || overlayType === 'bottom_inline_start_corner') {
1413
+ return height;
1414
+ }
1415
+ let firstColumn;
1416
+ let lastColumn;
1417
+ if (overlayType === 'master') {
1418
+ firstColumn = this.hot.view.getFirstRenderedVisibleColumn();
1419
+ lastColumn = this.hot.view.getLastRenderedVisibleColumn();
1420
+ } else {
1421
+ const activeOverlay = this.hot.view.getOverlayByName(overlayType);
1422
+ firstColumn = this.hot.columnIndexMapper.getVisualFromRenderableIndex(activeOverlay.clone.wtTable.getFirstRenderedColumn());
1423
+ lastColumn = this.hot.columnIndexMapper.getVisualFromRenderableIndex(activeOverlay.clone.wtTable.getLastRenderedColumn());
1424
+ }
1425
+ const firstMergedCellInRow = this.mergedCellsCollection.get(row, firstColumn);
1426
+ if (!firstMergedCellInRow) {
1427
+ return height;
1428
+ }
1429
+ const from = this.hot._createCellCoords(row, firstColumn);
1430
+ const to = this.hot._createCellCoords(row, lastColumn);
1431
+ const viewportRange = this.hot._createCellRange(from, from, to);
1432
+ const mergedCellsWithinRange = this.mergedCellsCollection.getWithinRange(viewportRange);
1433
+ const maxRowspan = mergedCellsWithinRange.reduce((acc, _ref) => {
1434
+ let {
1435
+ rowspan
1436
+ } = _ref;
1437
+ return Math.max(acc, rowspan);
1438
+ }, 1);
1439
+ let rowspanCorrection = 0;
1440
+ if (mergedCellsWithinRange.length > 1 && mergedCellsWithinRange[0].rowspan < maxRowspan) {
1441
+ rowspanCorrection = maxRowspan - mergedCellsWithinRange[0].rowspan;
1442
+ }
1443
+ mergedCellsWithinRange.forEach(_ref2 => {
1444
+ var _height;
1445
+ let {
1446
+ rowspan
1447
+ } = _ref2;
1448
+ let rowspanAfterCorrection = 0;
1449
+ if (overlayType === 'top' || overlayType === 'top_inline_start_corner') {
1450
+ rowspanAfterCorrection = Math.min(maxRowspan, this.hot.view.countNotHiddenFixedRowsTop() - row);
1451
+ } else {
1452
+ rowspanAfterCorrection = rowspan - rowspanCorrection;
1453
+ }
1454
+ height = Math.max((_height = height) !== null && _height !== void 0 ? _height : 0, _assertClassBrand(_MergeCells_brand, this, _sumCellsHeights).call(this, row, rowspanAfterCorrection));
1455
+ });
1456
+ return height;
1457
+ }
1458
+ /**
1459
+ * Sums the heights of the all cells that the merge cell consists of.
1460
+ *
1461
+ * @param {number} row The visual row index of the merged cell.
1462
+ * @param {number} rowspan The rowspan value of the merged cell.
1463
+ * @returns {number}
1464
+ */
1465
+ function _sumCellsHeights(row, rowspan) {
1466
+ const defaultHeight = this.hot.view._wt.wtSettings.getSettingPure('defaultRowHeight');
1467
+ const autoRowSizePlugin = this.hot.getPlugin('autoRowSize');
1468
+ let height = 0;
1469
+ for (let i = row; i < row + rowspan; i++) {
1470
+ if (!this.hot.rowIndexMapper.isHidden(i)) {
1471
+ var _autoRowSizePlugin$ge;
1472
+ height += (_autoRowSizePlugin$ge = autoRowSizePlugin === null || autoRowSizePlugin === void 0 ? void 0 : autoRowSizePlugin.getRowHeight(i)) !== null && _autoRowSizePlugin$ge !== void 0 ? _autoRowSizePlugin$ge : defaultHeight;
1473
+ }
1474
+ }
1475
+ return height;
1427
1476
  }
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.createMergeCellRenderer = createMergeCellRenderer;
5
+ var _object = require("../../helpers/object");
6
+ /**
7
+ * Creates a renderer object for the `MergeCells` plugin.
8
+ *
9
+ * @private
10
+ * @param {MergeCells} plugin The `MergeCells` plugin instance.
11
+ * @returns {{before: Function, after: Function}}
12
+ */
13
+ function createMergeCellRenderer(plugin) {
14
+ const {
15
+ hot
16
+ } = plugin;
17
+ const {
18
+ rowIndexMapper: rowMapper,
19
+ columnIndexMapper: columnMapper
20
+ } = hot;
21
+
22
+ /**
23
+ * Runs before the cell is rendered.
24
+ *
25
+ * @private
26
+ */
27
+ function before() {}
28
+
29
+ /**
30
+ * Runs after the cell is rendered.
31
+ *
32
+ * @private
33
+ * @param {HTMLElement} TD The cell to be modified.
34
+ * @param {number} row Row index.
35
+ * @param {number} col Visual column index.
36
+ */
37
+ function after(TD, row, col) {
38
+ const mergedCell = plugin.mergedCellsCollection.get(row, col);
39
+ if (!(0, _object.isObject)(mergedCell)) {
40
+ TD.removeAttribute('rowspan');
41
+ TD.removeAttribute('colspan');
42
+ TD.style.display = '';
43
+ return;
44
+ }
45
+ const {
46
+ row: origRow,
47
+ col: origColumn,
48
+ colspan: origColspan,
49
+ rowspan: origRowspan
50
+ } = mergedCell;
51
+ const [lastMergedRowIndex, lastMergedColumnIndex] = plugin.translateMergedCellToRenderable(origRow, origRowspan, origColumn, origColspan);
52
+ const renderedRowIndex = rowMapper.getRenderableFromVisualIndex(row);
53
+ const renderedColumnIndex = columnMapper.getRenderableFromVisualIndex(col);
54
+ const maxRowSpan = lastMergedRowIndex - renderedRowIndex + 1; // Number of rendered columns.
55
+ const maxColSpan = lastMergedColumnIndex - renderedColumnIndex + 1; // Number of rendered columns.
56
+
57
+ const notHiddenRow = rowMapper.getNearestNotHiddenIndex(origRow, 1);
58
+ const notHiddenColumn = columnMapper.getNearestNotHiddenIndex(origColumn, 1);
59
+ const notHiddenRowspan = Math.min(origRowspan, maxRowSpan);
60
+ const notHiddenColspan = Math.min(origColspan, maxColSpan);
61
+ if (notHiddenRow === row && notHiddenColumn === col) {
62
+ TD.setAttribute('rowspan', notHiddenRowspan);
63
+ TD.setAttribute('colspan', notHiddenColspan);
64
+ } else {
65
+ TD.removeAttribute('rowspan');
66
+ TD.removeAttribute('colspan');
67
+ TD.style.display = 'none';
68
+ }
69
+ }
70
+ return {
71
+ before,
72
+ after
73
+ };
74
+ }
@@ -0,0 +1,70 @@
1
+ import { isObject } from "../../helpers/object.mjs";
2
+ /**
3
+ * Creates a renderer object for the `MergeCells` plugin.
4
+ *
5
+ * @private
6
+ * @param {MergeCells} plugin The `MergeCells` plugin instance.
7
+ * @returns {{before: Function, after: Function}}
8
+ */
9
+ export function createMergeCellRenderer(plugin) {
10
+ const {
11
+ hot
12
+ } = plugin;
13
+ const {
14
+ rowIndexMapper: rowMapper,
15
+ columnIndexMapper: columnMapper
16
+ } = hot;
17
+
18
+ /**
19
+ * Runs before the cell is rendered.
20
+ *
21
+ * @private
22
+ */
23
+ function before() {}
24
+
25
+ /**
26
+ * Runs after the cell is rendered.
27
+ *
28
+ * @private
29
+ * @param {HTMLElement} TD The cell to be modified.
30
+ * @param {number} row Row index.
31
+ * @param {number} col Visual column index.
32
+ */
33
+ function after(TD, row, col) {
34
+ const mergedCell = plugin.mergedCellsCollection.get(row, col);
35
+ if (!isObject(mergedCell)) {
36
+ TD.removeAttribute('rowspan');
37
+ TD.removeAttribute('colspan');
38
+ TD.style.display = '';
39
+ return;
40
+ }
41
+ const {
42
+ row: origRow,
43
+ col: origColumn,
44
+ colspan: origColspan,
45
+ rowspan: origRowspan
46
+ } = mergedCell;
47
+ const [lastMergedRowIndex, lastMergedColumnIndex] = plugin.translateMergedCellToRenderable(origRow, origRowspan, origColumn, origColspan);
48
+ const renderedRowIndex = rowMapper.getRenderableFromVisualIndex(row);
49
+ const renderedColumnIndex = columnMapper.getRenderableFromVisualIndex(col);
50
+ const maxRowSpan = lastMergedRowIndex - renderedRowIndex + 1; // Number of rendered columns.
51
+ const maxColSpan = lastMergedColumnIndex - renderedColumnIndex + 1; // Number of rendered columns.
52
+
53
+ const notHiddenRow = rowMapper.getNearestNotHiddenIndex(origRow, 1);
54
+ const notHiddenColumn = columnMapper.getNearestNotHiddenIndex(origColumn, 1);
55
+ const notHiddenRowspan = Math.min(origRowspan, maxRowSpan);
56
+ const notHiddenColspan = Math.min(origColspan, maxColSpan);
57
+ if (notHiddenRow === row && notHiddenColumn === col) {
58
+ TD.setAttribute('rowspan', notHiddenRowspan);
59
+ TD.setAttribute('colspan', notHiddenColspan);
60
+ } else {
61
+ TD.removeAttribute('rowspan');
62
+ TD.removeAttribute('colspan');
63
+ TD.style.display = 'none';
64
+ }
65
+ }
66
+ return {
67
+ before,
68
+ after
69
+ };
70
+ }
@@ -10,7 +10,7 @@ var _rootComparator = require("./rootComparator");
10
10
  var _utils2 = require("./utils");
11
11
  var _domHelpers = require("./domHelpers");
12
12
  var _shortcutContexts = require("../../shortcutContexts");
13
- 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; }
13
+ 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; }
14
14
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
15
15
  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); }
16
16
  const PLUGIN_KEY = exports.PLUGIN_KEY = 'multiColumnSorting';
@@ -104,6 +104,7 @@ class MultiColumnSorting extends _columnSorting.ColumnSorting {
104
104
  enablePlugin() {
105
105
  if (!this.enabled && this.hot.getSettings()[this.pluginKey] && this.hot.getSettings()[CONFLICTED_PLUGIN_KEY]) {
106
106
  (0, _utils2.warnAboutPluginsConflict)();
107
+ this.hot.getPlugin(CONFLICTED_PLUGIN_KEY).disablePlugin();
107
108
  }
108
109
  super.enablePlugin();
109
110
  }
@@ -1,5 +1,5 @@
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 _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
3
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
4
4
  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); }
5
5
  import { APPEND_COLUMN_CONFIG_STRATEGY, ColumnSorting } from "../columnSorting/index.mjs";
@@ -101,6 +101,7 @@ export class MultiColumnSorting extends ColumnSorting {
101
101
  enablePlugin() {
102
102
  if (!this.enabled && this.hot.getSettings()[this.pluginKey] && this.hot.getSettings()[CONFLICTED_PLUGIN_KEY]) {
103
103
  warnAboutPluginsConflict();
104
+ this.hot.getPlugin(CONFLICTED_PLUGIN_KEY).disablePlugin();
104
105
  }
105
106
  super.enablePlugin();
106
107
  }
@@ -9,5 +9,5 @@ var _templateLiteralTag = require("../../helpers/templateLiteralTag");
9
9
  */
10
10
  function warnAboutPluginsConflict() {
11
11
  (0, _console.warn)((0, _templateLiteralTag.toSingleLine)`Plugins \`columnSorting\` and \`multiColumnSorting\` should not be enabled simultaneously.
12
- Only \`multiColumnSorting\` will work.`);
12
+ Only \`multiColumnSorting\` will work. The \`columnSorting\` plugin will be disabled.`);
13
13
  }
@@ -5,5 +5,5 @@ import { toSingleLine } from "../../helpers/templateLiteralTag.mjs";
5
5
  */
6
6
  export function warnAboutPluginsConflict() {
7
7
  warn(toSingleLine`Plugins \`columnSorting\` and \`multiColumnSorting\` should not be enabled simultaneously.
8
- Only \`multiColumnSorting\` will work.`);
8
+ Only \`multiColumnSorting\` will work. The \`columnSorting\` plugin will be disabled.`);
9
9
  }