handsontable 18.0.0 → 18.1.0-rc1

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 (1238) hide show
  1. package/3rdparty/walkontable/src/axisSizing/axisSizeSource.d.mts +1 -0
  2. package/3rdparty/walkontable/src/axisSizing/axisSizeSource.d.ts +55 -0
  3. package/3rdparty/walkontable/src/axisSizing/axisSizeSource.js +15 -0
  4. package/3rdparty/walkontable/src/axisSizing/axisSizeSource.mjs +14 -0
  5. package/3rdparty/walkontable/src/axisSizing/boxModel.d.mts +1 -0
  6. package/3rdparty/walkontable/src/axisSizing/boxModel.d.ts +32 -0
  7. package/3rdparty/walkontable/src/axisSizing/boxModel.js +45 -0
  8. package/3rdparty/walkontable/src/axisSizing/boxModel.mjs +33 -0
  9. package/3rdparty/walkontable/src/axisSizing/columnUtils.d.mts +2 -0
  10. package/3rdparty/walkontable/src/{utils/column.d.ts → axisSizing/columnUtils.d.ts} +12 -10
  11. package/3rdparty/walkontable/src/axisSizing/columnUtils.js +142 -0
  12. package/3rdparty/walkontable/src/axisSizing/columnUtils.mjs +137 -0
  13. package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.d.mts +1 -0
  14. package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.d.ts +58 -0
  15. package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.js +124 -0
  16. package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.mjs +114 -0
  17. package/3rdparty/walkontable/src/axisSizing/oversizedRows.d.mts +1 -0
  18. package/3rdparty/walkontable/src/axisSizing/oversizedRows.d.ts +162 -0
  19. package/3rdparty/walkontable/src/axisSizing/oversizedRows.js +424 -0
  20. package/3rdparty/walkontable/src/axisSizing/oversizedRows.mjs +522 -0
  21. package/3rdparty/walkontable/src/axisSizing/positionCache/index.d.ts +130 -0
  22. package/3rdparty/walkontable/src/axisSizing/positionCache/index.js +251 -0
  23. package/3rdparty/walkontable/src/axisSizing/positionCache/index.mjs +257 -0
  24. package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.d.mts +1 -0
  25. package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.d.ts +51 -0
  26. package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.js +116 -0
  27. package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.mjs +112 -0
  28. package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.d.mts +1 -0
  29. package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.d.ts +53 -0
  30. package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.js +199 -0
  31. package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.mjs +196 -0
  32. package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.d.mts +1 -0
  33. package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.d.ts +53 -0
  34. package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.js +40 -0
  35. package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.mjs +41 -0
  36. package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.d.mts +1 -0
  37. package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.d.ts +47 -0
  38. package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.js +116 -0
  39. package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.mjs +110 -0
  40. package/3rdparty/walkontable/src/axisSizing/rowUtils.d.mts +2 -0
  41. package/3rdparty/walkontable/src/{utils/row.d.ts → axisSizing/rowUtils.d.ts} +11 -9
  42. package/3rdparty/walkontable/src/axisSizing/rowUtils.js +106 -0
  43. package/3rdparty/walkontable/src/axisSizing/rowUtils.mjs +101 -0
  44. package/3rdparty/walkontable/src/axisSizing/sizeGetters.d.mts +2 -0
  45. package/3rdparty/walkontable/src/axisSizing/sizeGetters.d.ts +84 -0
  46. package/3rdparty/walkontable/src/axisSizing/sizeGetters.js +102 -0
  47. package/3rdparty/walkontable/src/axisSizing/sizeGetters.mjs +92 -0
  48. package/3rdparty/walkontable/src/calculator/axisCalculation.d.ts +1 -1
  49. package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.d.ts +10 -0
  50. package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.js +10 -1
  51. package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.mjs +10 -1
  52. package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.d.ts +9 -0
  53. package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.js +9 -1
  54. package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.mjs +9 -1
  55. package/3rdparty/walkontable/src/calculator/viewportColumns.d.ts +1 -1
  56. package/3rdparty/walkontable/src/calculator/viewportRows.d.ts +1 -1
  57. package/3rdparty/walkontable/src/cell/coords.js +4 -9
  58. package/3rdparty/walkontable/src/cell/coords.mjs +4 -9
  59. package/3rdparty/walkontable/src/cell/range.d.ts +10 -0
  60. package/3rdparty/walkontable/src/cell/range.js +19 -15
  61. package/3rdparty/walkontable/src/cell/range.mjs +16 -12
  62. package/3rdparty/walkontable/src/core/_base.d.ts +21 -21
  63. package/3rdparty/walkontable/src/core/_base.js +47 -147
  64. package/3rdparty/walkontable/src/core/_base.mjs +17 -147
  65. package/3rdparty/walkontable/src/core/clone.d.ts +4 -14
  66. package/3rdparty/walkontable/src/core/clone.js +40 -5
  67. package/3rdparty/walkontable/src/core/clone.mjs +10 -5
  68. package/3rdparty/walkontable/src/core/core.d.ts +1 -5
  69. package/3rdparty/walkontable/src/core/core.js +41 -47
  70. package/3rdparty/walkontable/src/core/core.mjs +12 -48
  71. package/3rdparty/walkontable/src/domMeasure/geometryReader.d.mts +1 -0
  72. package/3rdparty/walkontable/src/domMeasure/geometryReader.d.ts +172 -0
  73. package/3rdparty/walkontable/src/domMeasure/geometryReader.js +19 -0
  74. package/3rdparty/walkontable/src/domMeasure/geometryReader.mjs +16 -0
  75. package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.d.mts +1 -0
  76. package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.d.ts +134 -0
  77. package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.js +195 -0
  78. package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.mjs +193 -0
  79. package/3rdparty/walkontable/src/event.d.ts +25 -12
  80. package/3rdparty/walkontable/src/event.js +96 -236
  81. package/3rdparty/walkontable/src/event.mjs +95 -236
  82. package/3rdparty/walkontable/src/facade/core.d.ts +6 -6
  83. package/3rdparty/walkontable/src/index.d.ts +1 -1
  84. package/3rdparty/walkontable/src/index.js +10 -21
  85. package/3rdparty/walkontable/src/index.mjs +1 -1
  86. package/3rdparty/walkontable/src/overlay/index.d.ts +6 -6
  87. package/3rdparty/walkontable/src/overlay/index.js +11 -11
  88. package/3rdparty/walkontable/src/overlay/index.mjs +6 -6
  89. package/3rdparty/walkontable/src/overlay/overlays.d.ts +375 -0
  90. package/3rdparty/walkontable/src/overlay/overlays.js +605 -0
  91. package/3rdparty/walkontable/src/overlay/overlays.mjs +594 -0
  92. package/3rdparty/walkontable/src/overlay/{_base.d.ts → regions/_base.d.ts} +65 -16
  93. package/3rdparty/walkontable/src/overlay/{_base.js → regions/_base.js} +155 -50
  94. package/3rdparty/walkontable/src/overlay/{_base.mjs → regions/_base.mjs} +158 -47
  95. package/3rdparty/walkontable/src/overlay/regions/bottomInlineStartCornerOverlay.d.mts +1 -0
  96. package/3rdparty/walkontable/src/overlay/{bottomInlineStartCorner.d.ts → regions/bottomInlineStartCornerOverlay.d.ts} +5 -10
  97. package/3rdparty/walkontable/src/overlay/{bottomInlineStartCorner.js → regions/bottomInlineStartCornerOverlay.js} +18 -20
  98. package/3rdparty/walkontable/src/overlay/{bottomInlineStartCorner.mjs → regions/bottomInlineStartCornerOverlay.mjs} +18 -20
  99. package/3rdparty/walkontable/src/overlay/regions/bottomOverlay.d.mts +1 -0
  100. package/3rdparty/walkontable/src/overlay/{bottom.d.ts → regions/bottomOverlay.d.ts} +16 -11
  101. package/3rdparty/walkontable/src/overlay/{bottom.js → regions/bottomOverlay.js} +111 -66
  102. package/3rdparty/walkontable/src/overlay/{bottom.mjs → regions/bottomOverlay.mjs} +111 -66
  103. package/3rdparty/walkontable/src/overlay/regions/inlineStartOverlay.d.mts +1 -0
  104. package/3rdparty/walkontable/src/overlay/{inlineStart.d.ts → regions/inlineStartOverlay.d.ts} +17 -11
  105. package/3rdparty/walkontable/src/overlay/{inlineStart.js → regions/inlineStartOverlay.js} +120 -67
  106. package/3rdparty/walkontable/src/overlay/{inlineStart.mjs → regions/inlineStartOverlay.mjs} +120 -67
  107. package/3rdparty/walkontable/src/overlay/regions/topInlineStartCornerOverlay.d.mts +1 -0
  108. package/3rdparty/walkontable/src/overlay/{topInlineStartCorner.d.ts → regions/topInlineStartCornerOverlay.d.ts} +5 -10
  109. package/3rdparty/walkontable/src/overlay/{topInlineStartCorner.js → regions/topInlineStartCornerOverlay.js} +13 -16
  110. package/3rdparty/walkontable/src/overlay/{topInlineStartCorner.mjs → regions/topInlineStartCornerOverlay.mjs} +13 -16
  111. package/3rdparty/walkontable/src/overlay/regions/topOverlay.d.mts +1 -0
  112. package/3rdparty/walkontable/src/overlay/{top.d.ts → regions/topOverlay.d.ts} +32 -11
  113. package/3rdparty/walkontable/src/overlay/{top.js → regions/topOverlay.js} +161 -77
  114. package/3rdparty/walkontable/src/overlay/{top.mjs → regions/topOverlay.mjs} +161 -77
  115. package/3rdparty/walkontable/src/overlay/resizeMonitor.d.mts +1 -0
  116. package/3rdparty/walkontable/src/overlay/resizeMonitor.d.ts +49 -0
  117. package/3rdparty/walkontable/src/overlay/resizeMonitor.js +149 -0
  118. package/3rdparty/walkontable/src/overlay/resizeMonitor.mjs +148 -0
  119. package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.d.mts +1 -0
  120. package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.d.ts +62 -0
  121. package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.js +283 -0
  122. package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.mjs +288 -0
  123. package/3rdparty/walkontable/src/overlay/scroll/scrollSync.d.mts +1 -0
  124. package/3rdparty/walkontable/src/overlay/scroll/scrollSync.d.ts +176 -0
  125. package/3rdparty/walkontable/src/overlay/scroll/scrollSync.js +542 -0
  126. package/3rdparty/walkontable/src/overlay/scroll/scrollSync.mjs +550 -0
  127. package/3rdparty/walkontable/src/overlay/spreaderSize.d.mts +1 -0
  128. package/3rdparty/walkontable/src/overlay/spreaderSize.d.ts +67 -0
  129. package/3rdparty/walkontable/src/overlay/spreaderSize.js +173 -0
  130. package/3rdparty/walkontable/src/overlay/spreaderSize.mjs +174 -0
  131. package/3rdparty/walkontable/src/{stickyScrollStrategy.d.ts → overlay/strategies/stickyScrollStrategy.d.ts} +33 -21
  132. package/3rdparty/walkontable/src/{stickyScrollStrategy.js → overlay/strategies/stickyScrollStrategy.js} +65 -53
  133. package/3rdparty/walkontable/src/{stickyScrollStrategy.mjs → overlay/strategies/stickyScrollStrategy.mjs} +63 -50
  134. package/3rdparty/walkontable/src/ports.d.mts +1 -0
  135. package/3rdparty/walkontable/src/ports.d.ts +54 -0
  136. package/3rdparty/walkontable/src/ports.js +23 -0
  137. package/3rdparty/walkontable/src/ports.mjs +24 -0
  138. package/3rdparty/walkontable/src/{renderer → render}/_base.d.ts +1 -1
  139. package/3rdparty/walkontable/src/{renderer → render}/cells.js +1 -1
  140. package/3rdparty/walkontable/src/{renderer → render}/cells.mjs +1 -1
  141. package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.d.ts +1 -0
  142. package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.js +41 -1
  143. package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.mjs +42 -2
  144. package/3rdparty/walkontable/src/render/index.d.mts +1 -0
  145. package/3rdparty/walkontable/src/{renderer → render}/index.d.ts +11 -3
  146. package/3rdparty/walkontable/src/{renderer → render}/index.js +13 -3
  147. package/3rdparty/walkontable/src/{renderer → render}/index.mjs +11 -1
  148. package/3rdparty/walkontable/src/{renderer → render}/rows.js +1 -1
  149. package/3rdparty/walkontable/src/{renderer → render}/rows.mjs +1 -1
  150. package/3rdparty/walkontable/src/render/tableRenderer.d.mts +1 -0
  151. package/3rdparty/walkontable/src/{renderer/table.d.ts → render/tableRenderer.d.ts} +12 -2
  152. package/3rdparty/walkontable/src/render/tableRenderer.js +375 -0
  153. package/3rdparty/walkontable/src/{renderer/table.mjs → render/tableRenderer.mjs} +152 -6
  154. package/3rdparty/walkontable/src/{scroll.d.ts → scroll/scroll.d.ts} +27 -10
  155. package/3rdparty/walkontable/src/{scroll.js → scroll/scroll.js} +104 -35
  156. package/3rdparty/walkontable/src/{scroll.mjs → scroll/scroll.mjs} +102 -32
  157. package/3rdparty/walkontable/src/selection/border/border.d.ts +313 -5
  158. package/3rdparty/walkontable/src/selection/border/border.js +861 -51
  159. package/3rdparty/walkontable/src/selection/border/border.mjs +863 -53
  160. package/3rdparty/walkontable/src/selection/border/types.d.ts +30 -0
  161. package/3rdparty/walkontable/src/selection/manager.js +242 -12
  162. package/3rdparty/walkontable/src/selection/manager.mjs +243 -13
  163. package/3rdparty/walkontable/src/selection/scanner.js +5 -12
  164. package/3rdparty/walkontable/src/selection/scanner.mjs +5 -12
  165. package/3rdparty/walkontable/src/settings/accessor.d.mts +2 -0
  166. package/3rdparty/walkontable/src/settings/accessor.d.ts +74 -0
  167. package/3rdparty/walkontable/src/settings/accessor.js +78 -0
  168. package/3rdparty/walkontable/src/settings/accessor.mjs +71 -0
  169. package/3rdparty/walkontable/src/settings/defaults.d.mts +1 -0
  170. package/3rdparty/walkontable/src/{settings.d.ts → settings/defaults.d.ts} +16 -77
  171. package/3rdparty/walkontable/src/settings/defaults.js +146 -0
  172. package/3rdparty/walkontable/src/settings/defaults.mjs +225 -0
  173. package/3rdparty/walkontable/src/settings/index.d.mts +1 -0
  174. package/3rdparty/walkontable/src/settings/index.d.ts +6 -0
  175. package/3rdparty/walkontable/src/settings/index.js +20 -0
  176. package/3rdparty/walkontable/src/settings/index.mjs +5 -0
  177. package/3rdparty/walkontable/src/table/baseTable.d.mts +2 -0
  178. package/3rdparty/walkontable/src/table/baseTable.d.ts +284 -0
  179. package/3rdparty/walkontable/src/table/baseTable.js +290 -0
  180. package/3rdparty/walkontable/src/table/baseTable.mjs +278 -0
  181. package/3rdparty/walkontable/src/table/cellAccess.d.mts +1 -0
  182. package/3rdparty/walkontable/src/table/cellAccess.d.ts +101 -0
  183. package/3rdparty/walkontable/src/table/cellAccess.js +238 -0
  184. package/3rdparty/walkontable/src/table/cellAccess.mjs +229 -0
  185. package/3rdparty/walkontable/src/table/domScaffold.d.mts +1 -0
  186. package/3rdparty/walkontable/src/table/domScaffold.d.ts +37 -0
  187. package/3rdparty/walkontable/src/table/domScaffold.js +145 -0
  188. package/3rdparty/walkontable/src/table/domScaffold.mjs +136 -0
  189. package/3rdparty/walkontable/src/table/drawCycle.d.mts +1 -0
  190. package/3rdparty/walkontable/src/table/drawCycle.d.ts +16 -0
  191. package/3rdparty/walkontable/src/table/drawCycle.js +405 -0
  192. package/3rdparty/walkontable/src/table/drawCycle.mjs +403 -0
  193. package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.d.mts +1 -0
  194. package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.d.ts +38 -0
  195. package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.js +15 -0
  196. package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.mjs +14 -0
  197. package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.d.ts +1 -1
  198. package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.js +1 -1
  199. package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.mjs +1 -1
  200. package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.d.ts +1 -1
  201. package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.d.ts +1 -1
  202. package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.js +1 -1
  203. package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.mjs +1 -1
  204. package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.d.mts +2 -0
  205. package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.d.ts +226 -0
  206. package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.js +251 -0
  207. package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.mjs +241 -0
  208. package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.d.mts +1 -0
  209. package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.d.ts +14 -0
  210. package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.js +196 -0
  211. package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.mjs +179 -0
  212. package/3rdparty/walkontable/src/table/regions/bottomInlineStartCornerTable.d.mts +2 -0
  213. package/3rdparty/walkontable/src/table/regions/bottomInlineStartCornerTable.d.ts +16 -0
  214. package/3rdparty/walkontable/src/table/{bottomInlineStartCorner.js → regions/bottomInlineStartCornerTable.js} +9 -12
  215. package/3rdparty/walkontable/src/table/regions/bottomInlineStartCornerTable.mjs +21 -0
  216. package/3rdparty/walkontable/src/table/regions/bottomTable.d.mts +2 -0
  217. package/3rdparty/walkontable/src/table/regions/bottomTable.d.ts +15 -0
  218. package/3rdparty/walkontable/src/table/regions/bottomTable.js +35 -0
  219. package/3rdparty/walkontable/src/table/regions/bottomTable.mjs +20 -0
  220. package/3rdparty/walkontable/src/table/regions/inlineStartTable.d.mts +2 -0
  221. package/3rdparty/walkontable/src/table/regions/inlineStartTable.d.ts +12 -0
  222. package/3rdparty/walkontable/src/table/regions/inlineStartTable.js +32 -0
  223. package/3rdparty/walkontable/src/table/regions/inlineStartTable.mjs +17 -0
  224. package/3rdparty/walkontable/src/table/regions/masterTable.d.mts +2 -0
  225. package/3rdparty/walkontable/src/table/{master.d.ts → regions/masterTable.d.ts} +4 -13
  226. package/3rdparty/walkontable/src/table/{master.js → regions/masterTable.js} +27 -57
  227. package/3rdparty/walkontable/src/table/{master.mjs → regions/masterTable.mjs} +26 -56
  228. package/3rdparty/walkontable/src/table/regions/topInlineStartCornerTable.d.mts +2 -0
  229. package/3rdparty/walkontable/src/table/regions/topInlineStartCornerTable.d.ts +16 -0
  230. package/3rdparty/walkontable/src/table/{topInlineStartCorner.js → regions/topInlineStartCornerTable.js} +9 -12
  231. package/3rdparty/walkontable/src/table/regions/topInlineStartCornerTable.mjs +21 -0
  232. package/3rdparty/walkontable/src/table/regions/topTable.d.mts +2 -0
  233. package/3rdparty/walkontable/src/table/regions/topTable.d.ts +15 -0
  234. package/3rdparty/walkontable/src/table/regions/topTable.js +35 -0
  235. package/3rdparty/walkontable/src/table/regions/topTable.mjs +20 -0
  236. package/3rdparty/walkontable/src/types.d.ts +7 -69
  237. package/3rdparty/walkontable/src/types.mjs +2 -1
  238. package/3rdparty/walkontable/src/utils/pointerToCoords.d.mts +1 -0
  239. package/3rdparty/walkontable/src/utils/{cellCoords.d.ts → pointerToCoords.d.ts} +24 -0
  240. package/3rdparty/walkontable/src/utils/pointerToCoords.js +181 -0
  241. package/3rdparty/walkontable/src/utils/pointerToCoords.mjs +186 -0
  242. package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.d.mts +1 -0
  243. package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.d.ts +40 -0
  244. package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.js +139 -0
  245. package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.mjs +131 -0
  246. package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.d.mts +1 -0
  247. package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.d.ts +133 -0
  248. package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.js +18 -0
  249. package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.mjs +18 -0
  250. package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.d.mts +1 -0
  251. package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.d.ts +17 -0
  252. package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.js +104 -0
  253. package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.mjs +99 -0
  254. package/3rdparty/walkontable/src/viewport/calculatorFactory.d.mts +1 -0
  255. package/3rdparty/walkontable/src/viewport/calculatorFactory.d.ts +84 -0
  256. package/3rdparty/walkontable/src/viewport/calculatorFactory.js +588 -0
  257. package/3rdparty/walkontable/src/viewport/calculatorFactory.mjs +601 -0
  258. package/3rdparty/walkontable/src/viewport/viewport.d.ts +267 -0
  259. package/3rdparty/walkontable/src/viewport/viewport.js +363 -0
  260. package/3rdparty/walkontable/src/viewport/viewport.mjs +355 -0
  261. package/3rdparty/walkontable/src/viewport/workspaceSize.d.mts +1 -0
  262. package/3rdparty/walkontable/src/viewport/workspaceSize.d.ts +59 -0
  263. package/3rdparty/walkontable/src/viewport/workspaceSize.js +284 -0
  264. package/3rdparty/walkontable/src/viewport/workspaceSize.mjs +282 -0
  265. package/3rdparty/walkontable/src/wire.d.mts +1 -0
  266. package/3rdparty/walkontable/src/wire.d.ts +81 -0
  267. package/3rdparty/walkontable/src/wire.js +56 -0
  268. package/3rdparty/walkontable/src/wire.mjs +56 -0
  269. package/LICENSE.txt +1 -1
  270. package/README.md +2 -2
  271. package/base.d.ts +10 -2
  272. package/base.js +2 -2
  273. package/base.mjs +2 -2
  274. package/cellTypes/checkboxType/accessors/valueSetter.d.ts +1 -1
  275. package/cellTypes/checkboxType/accessors/valueSetter.js +3 -1
  276. package/cellTypes/checkboxType/accessors/valueSetter.mjs +3 -1
  277. package/cellTypes/index.d.ts +3 -2
  278. package/cellTypes/index.js +9 -0
  279. package/cellTypes/index.mjs +5 -2
  280. package/cellTypes/intlDatetimeType/index.d.mts +1 -0
  281. package/cellTypes/intlDatetimeType/index.d.ts +1 -0
  282. package/cellTypes/intlDatetimeType/index.js +19 -0
  283. package/cellTypes/intlDatetimeType/index.mjs +1 -0
  284. package/cellTypes/intlDatetimeType/intlDatetimeType.d.mts +1 -0
  285. package/cellTypes/intlDatetimeType/intlDatetimeType.d.ts +16 -0
  286. package/cellTypes/intlDatetimeType/intlDatetimeType.js +31 -0
  287. package/cellTypes/intlDatetimeType/intlDatetimeType.mjs +15 -0
  288. package/cellTypes/multiSelectType/index.d.ts +1 -1
  289. package/cellTypes/multiSelectType/index.js +3 -0
  290. package/cellTypes/multiSelectType/index.mjs +1 -1
  291. package/cellTypes/multiSelectType/multiSelectType.d.ts +1 -0
  292. package/cellTypes/multiSelectType/multiSelectType.js +4 -0
  293. package/cellTypes/multiSelectType/multiSelectType.mjs +1 -0
  294. package/cellTypes/numericType/accessors/valueSetter.js +30 -2
  295. package/cellTypes/numericType/accessors/valueSetter.mjs +31 -3
  296. package/core/coordsMapper/rangeToRenderableMapper.js +5 -12
  297. package/core/coordsMapper/rangeToRenderableMapper.mjs +5 -12
  298. package/core/hooks/bucket.d.ts +40 -6
  299. package/core/hooks/bucket.js +113 -84
  300. package/core/hooks/bucket.mjs +118 -84
  301. package/core/hooks/constants.js +254 -16
  302. package/core/hooks/constants.mjs +254 -16
  303. package/core/hooks/index.js +28 -25
  304. package/core/hooks/index.mjs +28 -25
  305. package/core/layout/constants.d.ts +11 -0
  306. package/core/layout/constants.js +6 -0
  307. package/core/layout/constants.mjs +12 -0
  308. package/core/layout/domSlot.d.ts +3 -1
  309. package/core/layout/domSlot.js +21 -14
  310. package/core/layout/domSlot.mjs +21 -14
  311. package/core/layout/index.d.ts +2 -2
  312. package/core/layout/index.js +6 -0
  313. package/core/layout/index.mjs +2 -2
  314. package/core/layout/layoutManager.d.ts +13 -0
  315. package/core/layout/layoutManager.js +25 -13
  316. package/core/layout/layoutManager.mjs +26 -11
  317. package/core/settings.d.ts +59 -6
  318. package/core/types.d.ts +15 -1
  319. package/core/types.mjs +9 -0
  320. package/core.js +481 -85
  321. package/core.mjs +483 -87
  322. package/dataMap/dataMap.d.ts +3 -13
  323. package/dataMap/dataMap.js +101 -44
  324. package/dataMap/dataMap.mjs +102 -45
  325. package/dataMap/dataSource.js +4 -1
  326. package/dataMap/dataSource.mjs +4 -1
  327. package/dataMap/metaManager/index.d.ts +62 -8
  328. package/dataMap/metaManager/index.js +66 -0
  329. package/dataMap/metaManager/index.mjs +66 -0
  330. package/dataMap/metaManager/lazyFactoryMap.d.ts +68 -43
  331. package/dataMap/metaManager/lazyFactoryMap.js +490 -110
  332. package/dataMap/metaManager/lazyFactoryMap.mjs +504 -111
  333. package/dataMap/metaManager/metaLayers/cellMeta.d.ts +55 -8
  334. package/dataMap/metaManager/metaLayers/cellMeta.js +112 -17
  335. package/dataMap/metaManager/metaLayers/cellMeta.mjs +112 -17
  336. package/dataMap/metaManager/metaLayers/columnMeta.d.ts +2 -1
  337. package/dataMap/metaManager/metaLayers/columnMeta.js +1 -0
  338. package/dataMap/metaManager/metaLayers/columnMeta.mjs +1 -0
  339. package/dataMap/metaManager/metaSchema.js +712 -31
  340. package/dataMap/metaManager/metaSchema.mjs +712 -31
  341. package/dataMap/metaManager/mods/dynamicCellMeta.d.ts +24 -10
  342. package/dataMap/metaManager/mods/dynamicCellMeta.js +245 -28
  343. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +246 -29
  344. package/dataMap/metaManager/mods/extendMetaProperties.js +4 -9
  345. package/dataMap/metaManager/mods/extendMetaProperties.mjs +4 -9
  346. package/dataMap/sourceDataValidator.d.ts +13 -21
  347. package/dataMap/sourceDataValidator.js +39 -29
  348. package/dataMap/sourceDataValidator.mjs +50 -33
  349. package/dist/handsontable.full.js +34553 -9903
  350. package/dist/handsontable.full.min.js +168 -112
  351. package/dist/handsontable.js +31541 -13409
  352. package/dist/handsontable.min.js +172 -116
  353. package/dist/languages/all.js +2 -1
  354. package/dist/languages/all.min.js +1 -1
  355. package/dist/languages/fa-IR.js +2 -1
  356. package/dist/languages/fa-IR.min.js +1 -1
  357. package/dist/themes/classic.js +9 -3
  358. package/dist/themes/classic.min.js +4 -4
  359. package/dist/themes/horizon.js +9 -3
  360. package/dist/themes/horizon.min.js +4 -4
  361. package/dist/themes/main.js +9 -3
  362. package/dist/themes/main.min.js +4 -4
  363. package/dist/themes/static/variables/colors/ant.js +3 -3
  364. package/dist/themes/static/variables/colors/ant.min.js +3 -3
  365. package/dist/themes/static/variables/colors/classic.js +3 -3
  366. package/dist/themes/static/variables/colors/classic.min.js +3 -3
  367. package/dist/themes/static/variables/colors/horizon.js +3 -3
  368. package/dist/themes/static/variables/colors/horizon.min.js +3 -3
  369. package/dist/themes/static/variables/colors/main.js +3 -3
  370. package/dist/themes/static/variables/colors/main.min.js +3 -3
  371. package/dist/themes/static/variables/colors/material.js +3 -3
  372. package/dist/themes/static/variables/colors/material.min.js +3 -3
  373. package/dist/themes/static/variables/colors/shadcn.js +3 -3
  374. package/dist/themes/static/variables/colors/shadcn.min.js +3 -3
  375. package/dist/themes/static/variables/density.js +3 -3
  376. package/dist/themes/static/variables/density.min.js +3 -3
  377. package/dist/themes/static/variables/helpers/iconsMap.js +4 -9
  378. package/dist/themes/static/variables/helpers/iconsMap.min.js +4 -9
  379. package/dist/themes/static/variables/icons/horizon.js +3 -3
  380. package/dist/themes/static/variables/icons/horizon.min.js +3 -3
  381. package/dist/themes/static/variables/icons/main.js +3 -3
  382. package/dist/themes/static/variables/icons/main.min.js +3 -3
  383. package/dist/themes/static/variables/sizing.js +3 -3
  384. package/dist/themes/static/variables/sizing.min.js +3 -3
  385. package/dist/themes/static/variables/tokens/classic.js +9 -3
  386. package/dist/themes/static/variables/tokens/classic.min.js +4 -4
  387. package/dist/themes/static/variables/tokens/horizon.js +9 -3
  388. package/dist/themes/static/variables/tokens/horizon.min.js +4 -4
  389. package/dist/themes/static/variables/tokens/main.js +9 -3
  390. package/dist/themes/static/variables/tokens/main.min.js +4 -4
  391. package/editorManager.js +1 -3
  392. package/editorManager.mjs +1 -3
  393. package/editors/autocompleteEditor/autocompleteEditor.js +48 -22
  394. package/editors/autocompleteEditor/autocompleteEditor.mjs +48 -22
  395. package/editors/baseEditor/baseEditor.d.ts +15 -3
  396. package/editors/baseEditor/baseEditor.js +6 -6
  397. package/editors/baseEditor/baseEditor.mjs +16 -6
  398. package/editors/factory.js +5 -2
  399. package/editors/factory.mjs +5 -2
  400. package/editors/index.d.ts +3 -2
  401. package/editors/index.js +8 -0
  402. package/editors/index.mjs +3 -1
  403. package/editors/intlDatetimeEditor/index.d.mts +1 -0
  404. package/editors/intlDatetimeEditor/index.d.ts +1 -0
  405. package/editors/intlDatetimeEditor/index.js +19 -0
  406. package/editors/intlDatetimeEditor/index.mjs +1 -0
  407. package/editors/intlDatetimeEditor/intlDatetimeEditor.d.mts +1 -0
  408. package/editors/intlDatetimeEditor/intlDatetimeEditor.d.ts +42 -0
  409. package/editors/intlDatetimeEditor/intlDatetimeEditor.js +108 -0
  410. package/editors/intlDatetimeEditor/intlDatetimeEditor.mjs +93 -0
  411. package/editors/multiSelectEditor/controllers/dropdownController.js +5 -12
  412. package/editors/multiSelectEditor/controllers/dropdownController.mjs +5 -12
  413. package/editors/multiSelectEditor/controllers/inputController.js +1 -3
  414. package/editors/multiSelectEditor/controllers/inputController.mjs +1 -3
  415. package/editors/multiSelectEditor/multiSelectEditor.js +16 -21
  416. package/editors/multiSelectEditor/multiSelectEditor.mjs +17 -22
  417. package/editors/passwordEditor/passwordEditor.js +5 -12
  418. package/editors/passwordEditor/passwordEditor.mjs +5 -12
  419. package/editors/registry.js +4 -9
  420. package/editors/registry.mjs +4 -9
  421. package/editors/textEditor/textEditor.js +1 -1
  422. package/editors/textEditor/textEditor.mjs +2 -2
  423. package/eventManager.d.ts +3 -3
  424. package/focusManager/grid.d.ts +28 -0
  425. package/focusManager/grid.js +84 -14
  426. package/focusManager/grid.mjs +80 -15
  427. package/focusManager/scopeManager.js +1 -1
  428. package/focusManager/scopeManager.mjs +2 -2
  429. package/handsontable-non-commercial-license.pdf +0 -0
  430. package/helpers/array.d.ts +25 -0
  431. package/helpers/array.js +41 -4
  432. package/helpers/array.mjs +56 -4
  433. package/helpers/dateTime.d.ts +14 -0
  434. package/helpers/dateTime.js +74 -2
  435. package/helpers/dateTime.mjs +73 -2
  436. package/helpers/dom/cellCoords.js +156 -13
  437. package/helpers/dom/cellCoords.mjs +156 -13
  438. package/helpers/dom/element.d.ts +27 -3
  439. package/helpers/dom/element.js +92 -16
  440. package/helpers/dom/element.mjs +107 -17
  441. package/helpers/dom/event.d.ts +58 -0
  442. package/helpers/dom/event.js +39 -0
  443. package/helpers/dom/event.mjs +63 -0
  444. package/helpers/errors.d.ts +5 -0
  445. package/helpers/errors.js +10 -6
  446. package/helpers/errors.mjs +10 -6
  447. package/helpers/feature.d.ts +19 -0
  448. package/helpers/feature.js +21 -0
  449. package/helpers/feature.mjs +30 -0
  450. package/helpers/function.d.ts +1 -1
  451. package/helpers/function.js +4 -1
  452. package/helpers/function.mjs +4 -1
  453. package/helpers/mixed.d.ts +103 -0
  454. package/helpers/mixed.js +373 -4
  455. package/helpers/mixed.mjs +413 -4
  456. package/helpers/moves.js +2 -1
  457. package/helpers/moves.mjs +2 -1
  458. package/helpers/number.d.ts +22 -0
  459. package/helpers/number.js +49 -0
  460. package/helpers/number.mjs +66 -0
  461. package/i18n/languages/ar-AR.js +8 -19
  462. package/i18n/languages/cs-CZ.js +8 -19
  463. package/i18n/languages/de-CH.js +8 -19
  464. package/i18n/languages/de-DE.js +8 -19
  465. package/i18n/languages/en-US.js +8 -19
  466. package/i18n/languages/es-MX.js +8 -19
  467. package/i18n/languages/fa-IR.d.ts +1 -0
  468. package/i18n/languages/fa-IR.js +9 -19
  469. package/i18n/languages/fa-IR.mjs +1 -0
  470. package/i18n/languages/fr-FR.js +8 -19
  471. package/i18n/languages/hr-HR.js +8 -19
  472. package/i18n/languages/it-IT.js +8 -19
  473. package/i18n/languages/ja-JP.js +8 -19
  474. package/i18n/languages/ko-KR.js +8 -19
  475. package/i18n/languages/lv-LV.js +8 -19
  476. package/i18n/languages/nb-NO.js +8 -19
  477. package/i18n/languages/nl-NL.js +8 -19
  478. package/i18n/languages/pl-PL.js +8 -19
  479. package/i18n/languages/pt-BR.js +8 -19
  480. package/i18n/languages/ru-RU.js +8 -19
  481. package/i18n/languages/sr-SP.js +8 -19
  482. package/i18n/languages/zh-CN.js +8 -19
  483. package/i18n/languages/zh-TW.js +8 -19
  484. package/i18n/registry.js +8 -19
  485. package/index.d.ts +2 -2
  486. package/index.js +8 -19
  487. package/languages/all.js +2 -1
  488. package/languages/fa-IR.js +2 -1
  489. package/languages/fa-IR.mjs +1 -0
  490. package/languages/index.js +2 -1
  491. package/package.json +61 -1
  492. package/plugins/autoColumnSize/autoColumnSize.d.ts +24 -1
  493. package/plugins/autoColumnSize/autoColumnSize.js +506 -94
  494. package/plugins/autoColumnSize/autoColumnSize.mjs +513 -95
  495. package/plugins/autoRowSize/autoRowSize.d.ts +40 -5
  496. package/plugins/autoRowSize/autoRowSize.js +73 -36
  497. package/plugins/autoRowSize/autoRowSize.mjs +103 -41
  498. package/plugins/autofill/autofill.js +35 -24
  499. package/plugins/autofill/autofill.mjs +35 -24
  500. package/plugins/base/base.d.ts +10 -0
  501. package/plugins/base/base.js +5 -12
  502. package/plugins/base/base.mjs +5 -12
  503. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +4 -9
  504. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +4 -9
  505. package/plugins/collapsibleColumns/collapsibleColumns.d.ts +4 -0
  506. package/plugins/collapsibleColumns/collapsibleColumns.js +94 -20
  507. package/plugins/collapsibleColumns/collapsibleColumns.mjs +98 -20
  508. package/plugins/columnSorting/columnSorting.d.ts +31 -2
  509. package/plugins/columnSorting/columnSorting.js +153 -33
  510. package/plugins/columnSorting/columnSorting.mjs +155 -35
  511. package/plugins/columnSorting/columnStatesManager.d.ts +1 -1
  512. package/plugins/columnSorting/columnStatesManager.js +1 -7
  513. package/plugins/columnSorting/columnStatesManager.mjs +1 -7
  514. package/plugins/columnSorting/domHelpers.d.ts +3 -0
  515. package/plugins/columnSorting/domHelpers.js +9 -0
  516. package/plugins/columnSorting/domHelpers.mjs +3 -3
  517. package/plugins/columnSorting/rootComparator.js +21 -16
  518. package/plugins/columnSorting/rootComparator.mjs +21 -16
  519. package/plugins/columnSorting/sortFunction/checkbox.js +7 -5
  520. package/plugins/columnSorting/sortFunction/checkbox.mjs +7 -5
  521. package/plugins/columnSorting/sortFunction/default.js +15 -4
  522. package/plugins/columnSorting/sortFunction/default.mjs +15 -4
  523. package/plugins/columnSorting/sortFunction/intlDatetime.d.mts +1 -0
  524. package/plugins/columnSorting/sortFunction/intlDatetime.d.ts +10 -0
  525. package/plugins/columnSorting/sortFunction/intlDatetime.js +23 -0
  526. package/plugins/columnSorting/sortFunction/intlDatetime.mjs +12 -0
  527. package/plugins/columnSorting/sortService/registry.js +2 -0
  528. package/plugins/columnSorting/sortService/registry.mjs +2 -0
  529. package/plugins/columnSorting/utils.d.ts +8 -0
  530. package/plugins/columnSorting/utils.js +37 -45
  531. package/plugins/columnSorting/utils.mjs +42 -47
  532. package/plugins/columnSummary/columnSummary.js +13 -14
  533. package/plugins/columnSummary/columnSummary.mjs +13 -14
  534. package/plugins/columnSummary/endpoints.d.ts +69 -2
  535. package/plugins/columnSummary/endpoints.js +176 -29
  536. package/plugins/columnSummary/endpoints.mjs +176 -29
  537. package/plugins/comments/commentEditor.js +5 -10
  538. package/plugins/comments/commentEditor.mjs +6 -11
  539. package/plugins/comments/comments.js +5 -12
  540. package/plugins/comments/comments.mjs +5 -12
  541. package/plugins/comments/contextMenuItem/addEditComment.js +8 -19
  542. package/plugins/comments/contextMenuItem/readOnlyComment.js +8 -19
  543. package/plugins/comments/contextMenuItem/removeComment.js +8 -19
  544. package/plugins/comments/editorResizeObserver.js +5 -12
  545. package/plugins/comments/editorResizeObserver.mjs +5 -12
  546. package/plugins/contextMenu/contextMenu.d.ts +12 -1
  547. package/plugins/contextMenu/contextMenu.js +34 -15
  548. package/plugins/contextMenu/contextMenu.mjs +34 -15
  549. package/plugins/contextMenu/index.d.ts +1 -1
  550. package/plugins/contextMenu/menu/menu.d.ts +22 -1
  551. package/plugins/contextMenu/menu/menu.js +216 -15
  552. package/plugins/contextMenu/menu/menu.mjs +217 -16
  553. package/plugins/contextMenu/menu/positioner.js +4 -9
  554. package/plugins/contextMenu/menu/positioner.mjs +4 -9
  555. package/plugins/contextMenu/predefinedItems/alignment.js +22 -33
  556. package/plugins/contextMenu/predefinedItems/alignment.mjs +14 -14
  557. package/plugins/contextMenu/predefinedItems/clearColumn.js +9 -20
  558. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +1 -1
  559. package/plugins/contextMenu/predefinedItems/columnLeft.js +8 -19
  560. package/plugins/contextMenu/predefinedItems/columnRight.js +8 -19
  561. package/plugins/contextMenu/predefinedItems/index.js +8 -19
  562. package/plugins/contextMenu/predefinedItems/readOnly.js +11 -22
  563. package/plugins/contextMenu/predefinedItems/readOnly.mjs +3 -3
  564. package/plugins/contextMenu/predefinedItems/redo.js +8 -19
  565. package/plugins/contextMenu/predefinedItems/removeColumn.js +8 -19
  566. package/plugins/contextMenu/predefinedItems/removeRow.js +8 -19
  567. package/plugins/contextMenu/predefinedItems/rowAbove.js +8 -19
  568. package/plugins/contextMenu/predefinedItems/rowBelow.js +8 -19
  569. package/plugins/contextMenu/predefinedItems/undo.js +8 -19
  570. package/plugins/contextMenu/utils.js +1 -1
  571. package/plugins/contextMenu/utils.mjs +1 -1
  572. package/plugins/copyPaste/contextMenuItem/cut.js +8 -19
  573. package/plugins/copyPaste/copyPaste.js +62 -20
  574. package/plugins/copyPaste/copyPaste.mjs +63 -21
  575. package/plugins/copyPaste/copyableRanges.js +11 -14
  576. package/plugins/copyPaste/copyableRanges.mjs +11 -14
  577. package/plugins/copyPaste/pasteEvent.d.ts +1 -1
  578. package/plugins/customBorders/contextMenuItem/bottom.js +8 -19
  579. package/plugins/customBorders/contextMenuItem/left.js +8 -19
  580. package/plugins/customBorders/contextMenuItem/noBorders.js +8 -19
  581. package/plugins/customBorders/contextMenuItem/right.js +8 -19
  582. package/plugins/customBorders/contextMenuItem/top.js +8 -19
  583. package/plugins/customBorders/customBorders.d.ts +21 -40
  584. package/plugins/customBorders/customBorders.js +1084 -223
  585. package/plugins/customBorders/customBorders.mjs +1078 -206
  586. package/plugins/customBorders/utils.d.ts +71 -0
  587. package/plugins/customBorders/utils.js +63 -0
  588. package/plugins/customBorders/utils.mjs +101 -0
  589. package/plugins/dataProvider/dataProvider.js +35 -38
  590. package/plugins/dataProvider/dataProvider.mjs +27 -19
  591. package/plugins/dataProvider/query/crud.js +1 -1
  592. package/plugins/dataProvider/query/crud.mjs +1 -1
  593. package/plugins/dialog/dialog.js +15 -33
  594. package/plugins/dialog/dialog.mjs +7 -14
  595. package/plugins/dialog/ui.js +5 -12
  596. package/plugins/dialog/ui.mjs +5 -12
  597. package/plugins/dragToScroll/autoScroller.js +4 -9
  598. package/plugins/dragToScroll/autoScroller.mjs +4 -9
  599. package/plugins/dragToScroll/dragToScroll.d.ts +2 -2
  600. package/plugins/dragToScroll/dragToScroll.js +155 -26
  601. package/plugins/dragToScroll/dragToScroll.mjs +156 -27
  602. package/plugins/dragToScroll/scrollTimer.js +4 -9
  603. package/plugins/dragToScroll/scrollTimer.mjs +4 -9
  604. package/plugins/dropdownMenu/dropdownMenu.d.ts +5 -1
  605. package/plugins/dropdownMenu/dropdownMenu.js +50 -15
  606. package/plugins/dropdownMenu/dropdownMenu.mjs +51 -16
  607. package/plugins/dropdownMenu/index.d.ts +1 -0
  608. package/plugins/emptyDataState/emptyDataState.js +15 -33
  609. package/plugins/emptyDataState/emptyDataState.mjs +7 -14
  610. package/plugins/emptyDataState/ui.js +4 -9
  611. package/plugins/emptyDataState/ui.mjs +4 -9
  612. package/plugins/exportFile/dataProvider.js +5 -1
  613. package/plugins/exportFile/dataProvider.mjs +5 -1
  614. package/plugins/exportFile/exportFile.js +13 -31
  615. package/plugins/exportFile/exportFile.mjs +5 -12
  616. package/plugins/exportFile/types/csv.js +1 -3
  617. package/plugins/exportFile/types/csv.mjs +1 -3
  618. package/plugins/exportFile/types/xlsx/cell-style.js +4 -2
  619. package/plugins/exportFile/types/xlsx/cell-style.mjs +4 -2
  620. package/plugins/exportFile/types/xlsx/date-utils.d.ts +15 -0
  621. package/plugins/exportFile/types/xlsx/date-utils.js +31 -0
  622. package/plugins/exportFile/types/xlsx/date-utils.mjs +36 -0
  623. package/plugins/exportFile/types/xlsx.js +10 -3
  624. package/plugins/exportFile/types/xlsx.mjs +11 -4
  625. package/plugins/filters/component/_base.d.ts +1 -2
  626. package/plugins/filters/component/_base.js +1 -2
  627. package/plugins/filters/component/_base.mjs +1 -2
  628. package/plugins/filters/component/actionBar.js +9 -22
  629. package/plugins/filters/component/actionBar.mjs +1 -3
  630. package/plugins/filters/component/condition.d.ts +1 -0
  631. package/plugins/filters/component/condition.js +11 -22
  632. package/plugins/filters/component/condition.mjs +3 -3
  633. package/plugins/filters/component/operators.js +1 -3
  634. package/plugins/filters/component/operators.mjs +1 -3
  635. package/plugins/filters/component/value.d.ts +5 -6
  636. package/plugins/filters/component/value.js +62 -56
  637. package/plugins/filters/component/value.mjs +55 -38
  638. package/plugins/filters/condition/beginsWith.js +8 -19
  639. package/plugins/filters/condition/between.js +8 -19
  640. package/plugins/filters/condition/contains.js +8 -19
  641. package/plugins/filters/condition/date/after.js +10 -20
  642. package/plugins/filters/condition/date/after.mjs +2 -1
  643. package/plugins/filters/condition/date/afterOrEqual.js +10 -20
  644. package/plugins/filters/condition/date/afterOrEqual.mjs +2 -1
  645. package/plugins/filters/condition/date/before.js +10 -20
  646. package/plugins/filters/condition/date/before.mjs +2 -1
  647. package/plugins/filters/condition/date/beforeOrEqual.js +10 -20
  648. package/plugins/filters/condition/date/beforeOrEqual.mjs +2 -1
  649. package/plugins/filters/condition/date/today.js +8 -19
  650. package/plugins/filters/condition/date/tomorrow.js +8 -19
  651. package/plugins/filters/condition/date/yesterday.js +8 -19
  652. package/plugins/filters/condition/empty.js +8 -19
  653. package/plugins/filters/condition/endsWith.js +8 -19
  654. package/plugins/filters/condition/equal.d.ts +7 -0
  655. package/plugins/filters/condition/equal.js +12 -19
  656. package/plugins/filters/condition/equal.mjs +10 -0
  657. package/plugins/filters/condition/greaterThan.js +8 -19
  658. package/plugins/filters/condition/greaterThanOrEqual.js +8 -19
  659. package/plugins/filters/condition/intlDate/after.js +8 -19
  660. package/plugins/filters/condition/intlDate/afterOrEqual.js +8 -19
  661. package/plugins/filters/condition/intlDate/before.js +8 -19
  662. package/plugins/filters/condition/intlDate/beforeOrEqual.js +8 -19
  663. package/plugins/filters/condition/intlDate/between.js +8 -19
  664. package/plugins/filters/condition/intlDate/today.js +8 -19
  665. package/plugins/filters/condition/intlDate/tomorrow.js +8 -19
  666. package/plugins/filters/condition/intlDate/yesterday.js +8 -19
  667. package/plugins/filters/condition/intlDatetime/after.d.mts +1 -0
  668. package/plugins/filters/condition/intlDatetime/after.d.ts +18 -0
  669. package/plugins/filters/condition/intlDatetime/after.js +66 -0
  670. package/plugins/filters/condition/intlDatetime/after.mjs +22 -0
  671. package/plugins/filters/condition/intlDatetime/afterOrEqual.d.mts +1 -0
  672. package/plugins/filters/condition/intlDatetime/afterOrEqual.d.ts +18 -0
  673. package/plugins/filters/condition/intlDatetime/afterOrEqual.js +66 -0
  674. package/plugins/filters/condition/intlDatetime/afterOrEqual.mjs +22 -0
  675. package/plugins/filters/condition/intlDatetime/before.d.mts +1 -0
  676. package/plugins/filters/condition/intlDatetime/before.d.ts +18 -0
  677. package/plugins/filters/condition/intlDatetime/before.js +66 -0
  678. package/plugins/filters/condition/intlDatetime/before.mjs +22 -0
  679. package/plugins/filters/condition/intlDatetime/beforeOrEqual.d.mts +1 -0
  680. package/plugins/filters/condition/intlDatetime/beforeOrEqual.d.ts +18 -0
  681. package/plugins/filters/condition/intlDatetime/beforeOrEqual.js +66 -0
  682. package/plugins/filters/condition/intlDatetime/beforeOrEqual.mjs +22 -0
  683. package/plugins/filters/condition/intlDatetime/between.d.mts +1 -0
  684. package/plugins/filters/condition/intlDatetime/between.d.ts +18 -0
  685. package/plugins/filters/condition/intlDatetime/between.js +67 -0
  686. package/plugins/filters/condition/intlDatetime/between.mjs +23 -0
  687. package/plugins/filters/condition/intlDatetime/today.d.mts +1 -0
  688. package/plugins/filters/condition/intlDatetime/today.d.ts +17 -0
  689. package/plugins/filters/condition/intlDatetime/today.js +65 -0
  690. package/plugins/filters/condition/intlDatetime/today.mjs +20 -0
  691. package/plugins/filters/condition/intlDatetime/tomorrow.d.mts +1 -0
  692. package/plugins/filters/condition/intlDatetime/tomorrow.d.ts +17 -0
  693. package/plugins/filters/condition/intlDatetime/tomorrow.js +66 -0
  694. package/plugins/filters/condition/intlDatetime/tomorrow.mjs +21 -0
  695. package/plugins/filters/condition/intlDatetime/yesterday.d.mts +1 -0
  696. package/plugins/filters/condition/intlDatetime/yesterday.d.ts +17 -0
  697. package/plugins/filters/condition/intlDatetime/yesterday.js +66 -0
  698. package/plugins/filters/condition/intlDatetime/yesterday.mjs +21 -0
  699. package/plugins/filters/condition/intlTime/after.js +8 -19
  700. package/plugins/filters/condition/intlTime/afterOrEqual.js +8 -19
  701. package/plugins/filters/condition/intlTime/before.js +8 -19
  702. package/plugins/filters/condition/intlTime/beforeOrEqual.js +8 -19
  703. package/plugins/filters/condition/intlTime/between.js +8 -19
  704. package/plugins/filters/condition/lessThan.js +8 -19
  705. package/plugins/filters/condition/lessThanOrEqual.js +8 -19
  706. package/plugins/filters/condition/none.js +8 -19
  707. package/plugins/filters/condition/notBetween.js +8 -19
  708. package/plugins/filters/condition/notContains.js +8 -19
  709. package/plugins/filters/condition/notEmpty.js +8 -19
  710. package/plugins/filters/condition/notEqual.js +8 -19
  711. package/plugins/filters/conditionCollection.js +4 -7
  712. package/plugins/filters/conditionCollection.mjs +4 -7
  713. package/plugins/filters/conditionUpdateObserver.d.ts +2 -2
  714. package/plugins/filters/conditionUpdateObserver.js +144 -52
  715. package/plugins/filters/conditionUpdateObserver.mjs +144 -52
  716. package/plugins/filters/constants.d.ts +1 -0
  717. package/plugins/filters/constants.js +31 -0
  718. package/plugins/filters/constants.mjs +28 -0
  719. package/plugins/filters/dataFilter.d.ts +4 -12
  720. package/plugins/filters/dataFilter.js +7 -19
  721. package/plugins/filters/dataFilter.mjs +8 -20
  722. package/plugins/filters/filters.d.ts +33 -9
  723. package/plugins/filters/filters.js +104 -62
  724. package/plugins/filters/filters.mjs +97 -44
  725. package/plugins/filters/logicalOperations/conjunction.js +8 -19
  726. package/plugins/filters/logicalOperations/disjunction.js +8 -19
  727. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +8 -19
  728. package/plugins/filters/sortComparators.d.ts +9 -2
  729. package/plugins/filters/sortComparators.js +34 -1
  730. package/plugins/filters/sortComparators.mjs +38 -3
  731. package/plugins/filters/ui/_base.js +8 -19
  732. package/plugins/filters/ui/input.d.ts +4 -0
  733. package/plugins/filters/ui/input.js +23 -18
  734. package/plugins/filters/ui/input.mjs +23 -18
  735. package/plugins/filters/ui/link.js +4 -9
  736. package/plugins/filters/ui/link.mjs +4 -9
  737. package/plugins/filters/ui/multipleSelect.js +40 -35
  738. package/plugins/filters/ui/multipleSelect.mjs +32 -16
  739. package/plugins/filters/ui/radioInput.js +4 -9
  740. package/plugins/filters/ui/radioInput.mjs +4 -9
  741. package/plugins/filters/ui/select.js +14 -32
  742. package/plugins/filters/ui/select.mjs +6 -13
  743. package/plugins/formulas/engine/register.d.ts +5 -4
  744. package/plugins/formulas/engine/register.js +5 -2
  745. package/plugins/formulas/engine/register.mjs +9 -5
  746. package/plugins/formulas/engine/settings.d.ts +2 -6
  747. package/plugins/formulas/engine/settings.js +29 -4
  748. package/plugins/formulas/engine/settings.mjs +29 -4
  749. package/plugins/formulas/engine/types.d.ts +12 -2
  750. package/plugins/formulas/formulas.d.ts +39 -0
  751. package/plugins/formulas/formulas.js +748 -55
  752. package/plugins/formulas/formulas.mjs +752 -57
  753. package/plugins/formulas/hyperlinkUrl.d.mts +1 -0
  754. package/plugins/formulas/hyperlinkUrl.d.ts +12 -0
  755. package/plugins/formulas/hyperlinkUrl.js +32 -0
  756. package/plugins/formulas/hyperlinkUrl.mjs +32 -0
  757. package/plugins/formulas/indexSyncer/axisSyncer.d.ts +1 -0
  758. package/plugins/formulas/indexSyncer/axisSyncer.js +77 -27
  759. package/plugins/formulas/indexSyncer/axisSyncer.mjs +77 -27
  760. package/plugins/formulas/indexSyncer/index.js +4 -9
  761. package/plugins/formulas/indexSyncer/index.mjs +4 -9
  762. package/plugins/formulas/utils.d.ts +9 -0
  763. package/plugins/formulas/utils.js +21 -0
  764. package/plugins/formulas/utils.mjs +25 -0
  765. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +8 -19
  766. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +14 -20
  767. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +6 -1
  768. package/plugins/hiddenColumns/hiddenColumns.js +11 -15
  769. package/plugins/hiddenColumns/hiddenColumns.mjs +11 -15
  770. package/plugins/hiddenRows/contextMenuItem/hideRow.js +8 -19
  771. package/plugins/hiddenRows/contextMenuItem/showRow.js +14 -20
  772. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +6 -1
  773. package/plugins/hiddenRows/hiddenRows.js +11 -15
  774. package/plugins/hiddenRows/hiddenRows.mjs +11 -15
  775. package/plugins/index.d.ts +5 -1
  776. package/plugins/index.js +10 -0
  777. package/plugins/index.mjs +5 -1
  778. package/plugins/loading/loading.js +13 -31
  779. package/plugins/loading/loading.mjs +5 -12
  780. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +8 -19
  781. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +8 -19
  782. package/plugins/manualColumnFreeze/manualColumnFreeze.js +5 -12
  783. package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +5 -12
  784. package/plugins/manualColumnMove/manualColumnMove.d.ts +10 -0
  785. package/plugins/manualColumnMove/manualColumnMove.js +128 -33
  786. package/plugins/manualColumnMove/manualColumnMove.mjs +129 -34
  787. package/plugins/manualColumnResize/manualColumnResize.d.ts +12 -1
  788. package/plugins/manualColumnResize/manualColumnResize.js +28 -17
  789. package/plugins/manualColumnResize/manualColumnResize.mjs +28 -17
  790. package/plugins/manualRowMove/manualRowMove.js +5 -12
  791. package/plugins/manualRowMove/manualRowMove.mjs +5 -12
  792. package/plugins/manualRowResize/manualRowResize.d.ts +13 -2
  793. package/plugins/manualRowResize/manualRowResize.js +29 -18
  794. package/plugins/manualRowResize/manualRowResize.mjs +29 -18
  795. package/plugins/mergeCells/cellCoords.d.ts +8 -0
  796. package/plugins/mergeCells/cellCoords.js +15 -9
  797. package/plugins/mergeCells/cellCoords.mjs +15 -9
  798. package/plugins/mergeCells/cellsCollection.d.ts +46 -2
  799. package/plugins/mergeCells/cellsCollection.js +190 -71
  800. package/plugins/mergeCells/cellsCollection.mjs +190 -71
  801. package/plugins/mergeCells/contextMenuItem/toggleMerge.js +8 -19
  802. package/plugins/mergeCells/focusOrder.d.ts +26 -20
  803. package/plugins/mergeCells/focusOrder.js +363 -189
  804. package/plugins/mergeCells/focusOrder.mjs +368 -184
  805. package/plugins/mergeCells/mergeCells.d.ts +13 -8
  806. package/plugins/mergeCells/mergeCells.js +327 -76
  807. package/plugins/mergeCells/mergeCells.mjs +327 -76
  808. package/plugins/moveCells/helpers.d.mts +1 -0
  809. package/plugins/moveCells/helpers.d.ts +21 -0
  810. package/plugins/moveCells/helpers.js +20 -0
  811. package/plugins/moveCells/helpers.mjs +15 -0
  812. package/plugins/moveCells/index.d.mts +1 -0
  813. package/plugins/moveCells/index.d.ts +1 -0
  814. package/plugins/moveCells/index.js +22 -0
  815. package/plugins/moveCells/index.mjs +1 -0
  816. package/plugins/moveCells/moveCells.d.mts +1 -0
  817. package/plugins/moveCells/moveCells.d.ts +80 -0
  818. package/plugins/moveCells/moveCells.js +595 -0
  819. package/plugins/moveCells/moveCells.mjs +580 -0
  820. package/plugins/multiColumnSorting/multiColumnSorting.d.ts +8 -8
  821. package/plugins/multiColumnSorting/multiColumnSorting.js +11 -16
  822. package/plugins/multiColumnSorting/multiColumnSorting.mjs +11 -16
  823. package/plugins/multiColumnSorting/rootComparator.js +26 -19
  824. package/plugins/multiColumnSorting/rootComparator.mjs +26 -19
  825. package/plugins/multipleSelectionHandles/multipleSelectionHandles.d.ts +19 -4
  826. package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +266 -58
  827. package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +266 -58
  828. package/plugins/nestedHeaders/nestedHeaders.d.ts +10 -1
  829. package/plugins/nestedHeaders/nestedHeaders.js +227 -35
  830. package/plugins/nestedHeaders/nestedHeaders.mjs +227 -35
  831. package/plugins/nestedHeaders/stateManager/columnArrangement.d.mts +1 -0
  832. package/plugins/nestedHeaders/stateManager/columnArrangement.d.ts +37 -0
  833. package/plugins/nestedHeaders/stateManager/columnArrangement.js +35 -0
  834. package/plugins/nestedHeaders/stateManager/columnArrangement.mjs +30 -0
  835. package/plugins/nestedHeaders/stateManager/deriveSettings.d.mts +1 -0
  836. package/plugins/nestedHeaders/stateManager/deriveSettings.d.ts +57 -0
  837. package/plugins/nestedHeaders/stateManager/deriveSettings.js +115 -0
  838. package/plugins/nestedHeaders/stateManager/deriveSettings.mjs +135 -0
  839. package/plugins/nestedHeaders/stateManager/headersTree.d.ts +14 -1
  840. package/plugins/nestedHeaders/stateManager/headersTree.js +4 -9
  841. package/plugins/nestedHeaders/stateManager/headersTree.mjs +4 -9
  842. package/plugins/nestedHeaders/stateManager/index.d.ts +76 -13
  843. package/plugins/nestedHeaders/stateManager/index.js +386 -50
  844. package/plugins/nestedHeaders/stateManager/index.mjs +387 -51
  845. package/plugins/nestedHeaders/stateManager/matrixGenerator.js +3 -2
  846. package/plugins/nestedHeaders/stateManager/matrixGenerator.mjs +3 -2
  847. package/plugins/nestedHeaders/stateManager/settingsNormalizer.js +5 -1
  848. package/plugins/nestedHeaders/stateManager/settingsNormalizer.mjs +5 -1
  849. package/plugins/nestedHeaders/stateManager/sourceSettings.d.ts +23 -6
  850. package/plugins/nestedHeaders/stateManager/sourceSettings.js +24 -13
  851. package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +24 -13
  852. package/plugins/nestedHeaders/stateManager/utils.d.ts +17 -1
  853. package/plugins/nestedHeaders/stateManager/utils.js +6 -1
  854. package/plugins/nestedHeaders/stateManager/utils.mjs +6 -1
  855. package/plugins/nestedHeaders/utils/ghostTable.js +1 -3
  856. package/plugins/nestedHeaders/utils/ghostTable.mjs +1 -3
  857. package/plugins/nestedRows/data/dataManager.d.ts +4 -1
  858. package/plugins/nestedRows/data/dataManager.js +10 -4
  859. package/plugins/nestedRows/data/dataManager.mjs +10 -4
  860. package/plugins/nestedRows/nestedRows.d.ts +127 -1
  861. package/plugins/nestedRows/nestedRows.js +332 -17
  862. package/plugins/nestedRows/nestedRows.mjs +332 -17
  863. package/plugins/nestedRows/ui/collapsing.d.ts +58 -0
  864. package/plugins/nestedRows/ui/collapsing.js +234 -40
  865. package/plugins/nestedRows/ui/collapsing.mjs +234 -40
  866. package/plugins/nestedRows/ui/contextMenu.js +12 -28
  867. package/plugins/nestedRows/ui/contextMenu.mjs +4 -9
  868. package/plugins/notification/notification.js +13 -31
  869. package/plugins/notification/notification.mjs +5 -12
  870. package/plugins/notification/ui.js +4 -9
  871. package/plugins/notification/ui.mjs +4 -9
  872. package/plugins/pagination/pagination.js +7 -14
  873. package/plugins/pagination/pagination.mjs +7 -14
  874. package/plugins/pagination/ui.js +13 -31
  875. package/plugins/pagination/ui.mjs +5 -12
  876. package/plugins/search/search.js +27 -11
  877. package/plugins/search/search.mjs +27 -11
  878. package/plugins/selectionHandles/helpers.d.mts +1 -0
  879. package/plugins/selectionHandles/helpers.d.ts +17 -0
  880. package/plugins/selectionHandles/helpers.js +16 -0
  881. package/plugins/selectionHandles/helpers.mjs +11 -0
  882. package/plugins/selectionHandles/index.d.mts +1 -0
  883. package/plugins/selectionHandles/index.d.ts +1 -0
  884. package/plugins/selectionHandles/index.js +22 -0
  885. package/plugins/selectionHandles/index.mjs +1 -0
  886. package/plugins/selectionHandles/selectionHandles.d.mts +1 -0
  887. package/plugins/selectionHandles/selectionHandles.d.ts +52 -0
  888. package/plugins/selectionHandles/selectionHandles.js +335 -0
  889. package/plugins/selectionHandles/selectionHandles.mjs +316 -0
  890. package/plugins/stretchColumns/calculator.js +5 -12
  891. package/plugins/stretchColumns/calculator.mjs +5 -12
  892. package/plugins/stretchColumns/strategies/last.js +4 -9
  893. package/plugins/stretchColumns/strategies/last.mjs +4 -9
  894. package/plugins/stretchColumns/stretchColumns.js +4 -9
  895. package/plugins/stretchColumns/stretchColumns.mjs +4 -9
  896. package/plugins/touchScroll/touchScroll.js +4 -9
  897. package/plugins/touchScroll/touchScroll.mjs +4 -9
  898. package/plugins/trimRows/trimRows.d.ts +1 -1
  899. package/plugins/trimRows/trimRows.js +10 -11
  900. package/plugins/trimRows/trimRows.mjs +10 -11
  901. package/plugins/types.d.ts +4 -0
  902. package/plugins/undoRedo/actions/cellAlignment.js +1 -1
  903. package/plugins/undoRedo/actions/cellAlignment.mjs +1 -1
  904. package/plugins/undoRedo/actions/createColumn.js +4 -1
  905. package/plugins/undoRedo/actions/createColumn.mjs +4 -1
  906. package/plugins/undoRedo/actions/createRow.js +4 -1
  907. package/plugins/undoRedo/actions/createRow.mjs +4 -1
  908. package/plugins/undoRedo/actions/fixedCounts.d.mts +1 -0
  909. package/plugins/undoRedo/actions/fixedCounts.d.ts +36 -0
  910. package/plugins/undoRedo/actions/fixedCounts.js +63 -0
  911. package/plugins/undoRedo/actions/fixedCounts.mjs +62 -0
  912. package/plugins/undoRedo/actions/index.js +2 -0
  913. package/plugins/undoRedo/actions/index.mjs +2 -0
  914. package/plugins/undoRedo/actions/moveCells.d.mts +1 -0
  915. package/plugins/undoRedo/actions/moveCells.d.ts +104 -0
  916. package/plugins/undoRedo/actions/moveCells.js +225 -0
  917. package/plugins/undoRedo/actions/moveCells.mjs +227 -0
  918. package/plugins/undoRedo/actions/removeColumn.d.ts +18 -2
  919. package/plugins/undoRedo/actions/removeColumn.js +11 -4
  920. package/plugins/undoRedo/actions/removeColumn.mjs +12 -5
  921. package/plugins/undoRedo/actions/removeRow.js +2 -57
  922. package/plugins/undoRedo/actions/removeRow.mjs +2 -57
  923. package/plugins/undoRedo/undoRedo.d.ts +26 -0
  924. package/plugins/undoRedo/undoRedo.js +40 -11
  925. package/plugins/undoRedo/undoRedo.mjs +40 -11
  926. package/plugins/undoRedo/utils.d.ts +29 -0
  927. package/plugins/undoRedo/utils.js +55 -3
  928. package/plugins/undoRedo/utils.mjs +59 -0
  929. package/renderSizeProbe.d.mts +1 -0
  930. package/renderSizeProbe.d.ts +60 -0
  931. package/renderSizeProbe.js +161 -0
  932. package/renderSizeProbe.mjs +174 -0
  933. package/renderers/checkboxRenderer/checkboxRenderer.js +9 -4
  934. package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
  935. package/renderers/index.d.ts +3 -2
  936. package/renderers/index.js +8 -0
  937. package/renderers/index.mjs +3 -1
  938. package/renderers/intlDatetimeRenderer/index.d.mts +1 -0
  939. package/renderers/intlDatetimeRenderer/index.d.ts +1 -0
  940. package/renderers/intlDatetimeRenderer/index.js +22 -0
  941. package/renderers/intlDatetimeRenderer/index.mjs +1 -0
  942. package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.d.mts +1 -0
  943. package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.d.ts +26 -0
  944. package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.js +82 -0
  945. package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.mjs +67 -0
  946. package/renderers/multiSelectRenderer/multiSelectRenderer.js +2 -3
  947. package/renderers/multiSelectRenderer/multiSelectRenderer.mjs +2 -3
  948. package/renderers/multiSelectRenderer/utils/utils.d.ts +1 -1
  949. package/renderers/multiSelectRenderer/utils/utils.js +11 -8
  950. package/renderers/multiSelectRenderer/utils/utils.mjs +11 -8
  951. package/renderers/renderCell.d.mts +1 -0
  952. package/renderers/renderCell.d.ts +37 -0
  953. package/renderers/renderCell.js +43 -0
  954. package/renderers/renderCell.mjs +48 -0
  955. package/selection/highlight/highlight.js +1 -3
  956. package/selection/highlight/highlight.mjs +1 -3
  957. package/selection/highlight/types/areaLayered.d.ts +3 -1
  958. package/selection/highlight/types/areaLayered.js +4 -2
  959. package/selection/highlight/types/areaLayered.mjs +6 -2
  960. package/selection/highlight/types/focus.d.ts +3 -1
  961. package/selection/highlight/types/focus.js +3 -2
  962. package/selection/highlight/types/focus.mjs +5 -2
  963. package/selection/mouseEventHandler.js +29 -26
  964. package/selection/mouseEventHandler.mjs +29 -26
  965. package/selection/moveCells.d.mts +1 -0
  966. package/selection/moveCells.d.ts +15 -0
  967. package/selection/moveCells.js +13 -0
  968. package/selection/moveCells.mjs +9 -0
  969. package/selection/selection.d.ts +56 -2
  970. package/selection/selection.js +162 -36
  971. package/selection/selection.mjs +154 -17
  972. package/selection/transformation/_base.js +5 -12
  973. package/selection/transformation/_base.mjs +5 -12
  974. package/selection/types.d.ts +3 -0
  975. package/settings.d.ts +24 -3
  976. package/shortcuts/context.d.ts +4 -0
  977. package/shortcuts/context.js +16 -8
  978. package/shortcuts/context.mjs +20 -8
  979. package/shortcuts/contexts/commands/populateSelectedCellsData.js +1 -1
  980. package/shortcuts/contexts/commands/populateSelectedCellsData.mjs +1 -1
  981. package/styles/handsontable.css +504 -158
  982. package/styles/handsontable.min.css +4 -4
  983. package/styles/handsontableStyles.js +1 -1
  984. package/styles/handsontableStyles.mjs +1 -1
  985. package/styles/ht-icons-horizon.css +1 -10
  986. package/styles/ht-icons-horizon.min.css +4 -4
  987. package/styles/ht-icons-main.css +1 -10
  988. package/styles/ht-icons-main.min.css +4 -4
  989. package/styles/ht-theme-classic-no-icons.css +6 -0
  990. package/styles/ht-theme-classic-no-icons.min.css +4 -4
  991. package/styles/ht-theme-classic.css +7 -10
  992. package/styles/ht-theme-classic.min.css +4 -4
  993. package/styles/ht-theme-horizon-no-icons.css +6 -0
  994. package/styles/ht-theme-horizon-no-icons.min.css +4 -4
  995. package/styles/ht-theme-horizon.css +7 -10
  996. package/styles/ht-theme-horizon.min.css +4 -4
  997. package/styles/ht-theme-main-no-icons.css +6 -0
  998. package/styles/ht-theme-main-no-icons.min.css +4 -4
  999. package/styles/ht-theme-main.css +7 -10
  1000. package/styles/ht-theme-main.min.css +4 -4
  1001. package/tableView.d.ts +17 -4
  1002. package/tableView.js +211 -53
  1003. package/tableView.mjs +212 -54
  1004. package/themes/engine/builder.js +5 -12
  1005. package/themes/engine/builder.mjs +5 -12
  1006. package/themes/engine/index.d.ts +2 -1
  1007. package/themes/engine/index.js +3 -0
  1008. package/themes/engine/index.mjs +1 -1
  1009. package/themes/engine/manager.d.ts +75 -3
  1010. package/themes/engine/manager.js +247 -18
  1011. package/themes/engine/manager.mjs +254 -18
  1012. package/themes/engine/utils/cssVariables.d.ts +18 -1
  1013. package/themes/engine/utils/cssVariables.js +27 -11
  1014. package/themes/engine/utils/cssVariables.mjs +28 -11
  1015. package/themes/engine/utils/validation.js +7 -0
  1016. package/themes/engine/utils/validation.mjs +7 -0
  1017. package/themes/static/variables/helpers/iconsMap.js +1 -6
  1018. package/themes/static/variables/helpers/iconsMap.mjs +1 -6
  1019. package/themes/static/variables/tokens/classic.js +6 -0
  1020. package/themes/static/variables/tokens/classic.mjs +6 -0
  1021. package/themes/static/variables/tokens/horizon.js +6 -0
  1022. package/themes/static/variables/tokens/horizon.mjs +6 -0
  1023. package/themes/static/variables/tokens/main.js +6 -0
  1024. package/themes/static/variables/tokens/main.mjs +6 -0
  1025. package/themes/types.d.ts +1 -1
  1026. package/translations/changesObservable/observable.js +4 -9
  1027. package/translations/changesObservable/observable.mjs +4 -9
  1028. package/translations/changesObservable/observer.js +4 -9
  1029. package/translations/changesObservable/observer.mjs +4 -9
  1030. package/translations/indexMapper.d.ts +14 -9
  1031. package/translations/indexMapper.js +109 -49
  1032. package/translations/indexMapper.mjs +109 -49
  1033. package/translations/mapCollections/aggregatedCollection.js +20 -35
  1034. package/translations/mapCollections/aggregatedCollection.mjs +20 -35
  1035. package/translations/mapCollections/mapCollection.d.ts +10 -4
  1036. package/translations/mapCollections/mapCollection.js +2 -2
  1037. package/translations/mapCollections/mapCollection.mjs +2 -2
  1038. package/translations/maps/booleanMap.d.mts +1 -0
  1039. package/translations/maps/booleanMap.d.ts +86 -0
  1040. package/translations/maps/booleanMap.js +293 -0
  1041. package/translations/maps/booleanMap.mjs +301 -0
  1042. package/translations/maps/hidingMap.d.ts +5 -2
  1043. package/translations/maps/hidingMap.js +8 -3
  1044. package/translations/maps/hidingMap.mjs +8 -3
  1045. package/translations/maps/index.d.ts +5 -2
  1046. package/translations/maps/index.js +7 -3
  1047. package/translations/maps/index.mjs +10 -2
  1048. package/translations/maps/indexMap.d.ts +26 -2
  1049. package/translations/maps/indexMap.js +73 -6
  1050. package/translations/maps/indexMap.mjs +73 -6
  1051. package/translations/maps/indexesSequence.d.ts +53 -2
  1052. package/translations/maps/indexesSequence.js +218 -3
  1053. package/translations/maps/indexesSequence.mjs +226 -3
  1054. package/translations/maps/trimmingMap.d.ts +5 -2
  1055. package/translations/maps/trimmingMap.js +8 -3
  1056. package/translations/maps/trimmingMap.mjs +8 -3
  1057. package/translations/maps/utils/actionsOnIndexes.js +20 -1
  1058. package/translations/maps/utils/actionsOnIndexes.mjs +20 -1
  1059. package/translations/maps/utils/indexesSequence.js +12 -3
  1060. package/translations/maps/utils/indexesSequence.mjs +12 -3
  1061. package/translations/maps/utils/physicallyIndexed.js +12 -1
  1062. package/translations/maps/utils/physicallyIndexed.mjs +12 -1
  1063. package/utils/entitlementLicenseKey/classify.d.mts +1 -0
  1064. package/utils/entitlementLicenseKey/classify.d.ts +34 -0
  1065. package/utils/entitlementLicenseKey/classify.js +97 -0
  1066. package/utils/entitlementLicenseKey/classify.mjs +96 -0
  1067. package/utils/entitlementLicenseKey/constants.d.mts +1 -0
  1068. package/utils/entitlementLicenseKey/constants.d.ts +69 -0
  1069. package/utils/entitlementLicenseKey/constants.js +54 -0
  1070. package/utils/entitlementLicenseKey/constants.mjs +66 -0
  1071. package/utils/entitlementLicenseKey/detectFormat.d.mts +1 -0
  1072. package/utils/entitlementLicenseKey/detectFormat.d.ts +23 -0
  1073. package/utils/entitlementLicenseKey/detectFormat.js +60 -0
  1074. package/utils/entitlementLicenseKey/detectFormat.mjs +60 -0
  1075. package/utils/entitlementLicenseKey/encoding.d.mts +1 -0
  1076. package/utils/entitlementLicenseKey/encoding.d.ts +58 -0
  1077. package/utils/entitlementLicenseKey/encoding.js +161 -0
  1078. package/utils/entitlementLicenseKey/encoding.mjs +172 -0
  1079. package/utils/entitlementLicenseKey/extractKeyData.d.mts +1 -0
  1080. package/utils/entitlementLicenseKey/extractKeyData.d.ts +47 -0
  1081. package/utils/entitlementLicenseKey/extractKeyData.js +213 -0
  1082. package/utils/entitlementLicenseKey/extractKeyData.mjs +232 -0
  1083. package/utils/entitlementLicenseKey/grants.d.mts +1 -0
  1084. package/utils/entitlementLicenseKey/grants.d.ts +54 -0
  1085. package/utils/entitlementLicenseKey/grants.js +68 -0
  1086. package/utils/entitlementLicenseKey/grants.mjs +84 -0
  1087. package/utils/entitlementLicenseKey/index.d.mts +1 -0
  1088. package/utils/entitlementLicenseKey/index.d.ts +8 -0
  1089. package/utils/entitlementLicenseKey/index.js +53 -0
  1090. package/utils/entitlementLicenseKey/index.mjs +6 -0
  1091. package/utils/entitlementLicenseKey/sha512.d.mts +1 -0
  1092. package/utils/entitlementLicenseKey/sha512.d.ts +11 -0
  1093. package/utils/entitlementLicenseKey/sha512.js +328 -0
  1094. package/utils/entitlementLicenseKey/sha512.mjs +327 -0
  1095. package/utils/entitlementLicenseKey/types.d.mts +1 -0
  1096. package/utils/entitlementLicenseKey/types.d.ts +84 -0
  1097. package/utils/entitlementLicenseKey/types.js +8 -0
  1098. package/utils/entitlementLicenseKey/types.mjs +10 -0
  1099. package/utils/ghostTable.d.ts +1 -0
  1100. package/utils/ghostTable.js +58 -11
  1101. package/utils/ghostTable.mjs +58 -11
  1102. package/utils/interval.js +5 -12
  1103. package/utils/interval.mjs +5 -12
  1104. package/utils/licenseBranding/badge.d.mts +1 -0
  1105. package/utils/licenseBranding/badge.d.ts +21 -0
  1106. package/utils/licenseBranding/badge.js +237 -0
  1107. package/utils/licenseBranding/badge.mjs +244 -0
  1108. package/utils/licenseBranding/content.d.mts +1 -0
  1109. package/utils/licenseBranding/content.d.ts +54 -0
  1110. package/utils/licenseBranding/content.js +93 -0
  1111. package/utils/licenseBranding/content.mjs +79 -0
  1112. package/utils/licenseBranding/index.d.mts +1 -0
  1113. package/utils/licenseBranding/index.d.ts +14 -0
  1114. package/utils/licenseBranding/index.js +55 -0
  1115. package/utils/licenseBranding/index.mjs +56 -0
  1116. package/utils/licenseBranding/lockScreen.d.mts +1 -0
  1117. package/utils/licenseBranding/lockScreen.d.ts +23 -0
  1118. package/utils/licenseBranding/lockScreen.js +150 -0
  1119. package/utils/licenseBranding/lockScreen.mjs +159 -0
  1120. package/utils/licenseNotification.d.ts +19 -0
  1121. package/utils/licenseNotification.js +56 -29
  1122. package/utils/licenseNotification.mjs +61 -29
  1123. package/utils/movableMeta.d.mts +1 -0
  1124. package/utils/movableMeta.d.ts +40 -0
  1125. package/utils/movableMeta.js +47 -0
  1126. package/utils/movableMeta.mjs +46 -0
  1127. package/utils/parseTable.js +1 -1
  1128. package/utils/parseTable.mjs +1 -1
  1129. package/utils/samplesGenerator.d.ts +41 -14
  1130. package/utils/samplesGenerator.js +112 -42
  1131. package/utils/samplesGenerator.mjs +112 -42
  1132. package/utils/stylesHandler.d.ts +13 -0
  1133. package/utils/stylesHandler.js +60 -14
  1134. package/utils/stylesHandler.mjs +60 -14
  1135. package/validators/autocompleteValidator/autocompleteValidator.js +3 -0
  1136. package/validators/autocompleteValidator/autocompleteValidator.mjs +3 -0
  1137. package/validators/index.d.ts +3 -2
  1138. package/validators/index.js +8 -0
  1139. package/validators/index.mjs +3 -1
  1140. package/validators/intlDatetimeValidator/index.d.mts +1 -0
  1141. package/validators/intlDatetimeValidator/index.d.ts +1 -0
  1142. package/validators/intlDatetimeValidator/index.js +25 -0
  1143. package/validators/intlDatetimeValidator/index.mjs +1 -0
  1144. package/validators/intlDatetimeValidator/intlDatetimeValidator.d.mts +1 -0
  1145. package/validators/intlDatetimeValidator/intlDatetimeValidator.d.ts +28 -0
  1146. package/validators/intlDatetimeValidator/intlDatetimeValidator.js +49 -0
  1147. package/validators/intlDatetimeValidator/intlDatetimeValidator.mjs +37 -0
  1148. package/3rdparty/walkontable/src/overlay/bottom.d.mts +0 -1
  1149. package/3rdparty/walkontable/src/overlay/bottomInlineStartCorner.d.mts +0 -1
  1150. package/3rdparty/walkontable/src/overlay/inlineStart.d.mts +0 -1
  1151. package/3rdparty/walkontable/src/overlay/top.d.mts +0 -1
  1152. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.d.mts +0 -1
  1153. package/3rdparty/walkontable/src/overlays.d.ts +0 -329
  1154. package/3rdparty/walkontable/src/overlays.js +0 -870
  1155. package/3rdparty/walkontable/src/overlays.mjs +0 -860
  1156. package/3rdparty/walkontable/src/renderer/table.d.mts +0 -1
  1157. package/3rdparty/walkontable/src/renderer/table.js +0 -229
  1158. package/3rdparty/walkontable/src/settings.d.mts +0 -2
  1159. package/3rdparty/walkontable/src/settings.js +0 -196
  1160. package/3rdparty/walkontable/src/settings.mjs +0 -263
  1161. package/3rdparty/walkontable/src/table/bottom.d.mts +0 -2
  1162. package/3rdparty/walkontable/src/table/bottom.d.ts +0 -19
  1163. package/3rdparty/walkontable/src/table/bottom.js +0 -38
  1164. package/3rdparty/walkontable/src/table/bottom.mjs +0 -23
  1165. package/3rdparty/walkontable/src/table/bottomInlineStartCorner.d.mts +0 -2
  1166. package/3rdparty/walkontable/src/table/bottomInlineStartCorner.d.ts +0 -20
  1167. package/3rdparty/walkontable/src/table/bottomInlineStartCorner.mjs +0 -24
  1168. package/3rdparty/walkontable/src/table/inlineStart.d.mts +0 -2
  1169. package/3rdparty/walkontable/src/table/inlineStart.d.ts +0 -16
  1170. package/3rdparty/walkontable/src/table/inlineStart.js +0 -35
  1171. package/3rdparty/walkontable/src/table/inlineStart.mjs +0 -20
  1172. package/3rdparty/walkontable/src/table/master.d.mts +0 -2
  1173. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.d.mts +0 -2
  1174. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.d.ts +0 -75
  1175. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +0 -122
  1176. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +0 -112
  1177. package/3rdparty/walkontable/src/table/mixin/calculatedRows.d.mts +0 -2
  1178. package/3rdparty/walkontable/src/table/mixin/calculatedRows.d.ts +0 -75
  1179. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +0 -122
  1180. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +0 -112
  1181. package/3rdparty/walkontable/src/table/top.d.mts +0 -2
  1182. package/3rdparty/walkontable/src/table/top.d.ts +0 -19
  1183. package/3rdparty/walkontable/src/table/top.js +0 -38
  1184. package/3rdparty/walkontable/src/table/top.mjs +0 -23
  1185. package/3rdparty/walkontable/src/table/topInlineStartCorner.d.mts +0 -2
  1186. package/3rdparty/walkontable/src/table/topInlineStartCorner.d.ts +0 -20
  1187. package/3rdparty/walkontable/src/table/topInlineStartCorner.mjs +0 -24
  1188. package/3rdparty/walkontable/src/table.d.mts +0 -2
  1189. package/3rdparty/walkontable/src/table.d.ts +0 -741
  1190. package/3rdparty/walkontable/src/table.js +0 -1120
  1191. package/3rdparty/walkontable/src/table.mjs +0 -1105
  1192. package/3rdparty/walkontable/src/utils/cellCoords.d.mts +0 -1
  1193. package/3rdparty/walkontable/src/utils/cellCoords.js +0 -54
  1194. package/3rdparty/walkontable/src/utils/cellCoords.mjs +0 -54
  1195. package/3rdparty/walkontable/src/utils/column.d.mts +0 -2
  1196. package/3rdparty/walkontable/src/utils/column.js +0 -75
  1197. package/3rdparty/walkontable/src/utils/column.mjs +0 -70
  1198. package/3rdparty/walkontable/src/utils/positionCache.d.mts +0 -1
  1199. package/3rdparty/walkontable/src/utils/positionCache.d.ts +0 -91
  1200. package/3rdparty/walkontable/src/utils/positionCache.js +0 -193
  1201. package/3rdparty/walkontable/src/utils/positionCache.mjs +0 -194
  1202. package/3rdparty/walkontable/src/utils/row.d.mts +0 -2
  1203. package/3rdparty/walkontable/src/utils/row.js +0 -46
  1204. package/3rdparty/walkontable/src/utils/row.mjs +0 -41
  1205. package/3rdparty/walkontable/src/viewport.d.ts +0 -254
  1206. package/3rdparty/walkontable/src/viewport.js +0 -533
  1207. package/3rdparty/walkontable/src/viewport.mjs +0 -523
  1208. /package/3rdparty/walkontable/src/{renderer → axisSizing/positionCache}/index.d.mts +0 -0
  1209. /package/3rdparty/walkontable/src/{overlays.d.mts → overlay/overlays.d.mts} +0 -0
  1210. /package/3rdparty/walkontable/src/overlay/{_base.d.mts → regions/_base.d.mts} +0 -0
  1211. /package/3rdparty/walkontable/src/{stickyScrollStrategy.d.mts → overlay/strategies/stickyScrollStrategy.d.mts} +0 -0
  1212. /package/3rdparty/walkontable/src/{renderer → render}/_base.d.mts +0 -0
  1213. /package/3rdparty/walkontable/src/{renderer → render}/_base.js +0 -0
  1214. /package/3rdparty/walkontable/src/{renderer → render}/_base.mjs +0 -0
  1215. /package/3rdparty/walkontable/src/{renderer → render}/cells.d.mts +0 -0
  1216. /package/3rdparty/walkontable/src/{renderer → render}/cells.d.ts +0 -0
  1217. /package/3rdparty/walkontable/src/{renderer → render}/colGroup.d.mts +0 -0
  1218. /package/3rdparty/walkontable/src/{renderer → render}/colGroup.d.ts +0 -0
  1219. /package/3rdparty/walkontable/src/{renderer → render}/colGroup.js +0 -0
  1220. /package/3rdparty/walkontable/src/{renderer → render}/colGroup.mjs +0 -0
  1221. /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.d.mts +0 -0
  1222. /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.d.ts +0 -0
  1223. /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.js +0 -0
  1224. /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.mjs +0 -0
  1225. /package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.d.mts +0 -0
  1226. /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.d.mts +0 -0
  1227. /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.d.ts +0 -0
  1228. /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.js +0 -0
  1229. /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.mjs +0 -0
  1230. /package/3rdparty/walkontable/src/{renderer → render}/rows.d.mts +0 -0
  1231. /package/3rdparty/walkontable/src/{renderer → render}/rows.d.ts +0 -0
  1232. /package/3rdparty/walkontable/src/{scroll.d.mts → scroll/scroll.d.mts} +0 -0
  1233. /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.d.mts +0 -0
  1234. /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.d.mts +0 -0
  1235. /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.js +0 -0
  1236. /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.mjs +0 -0
  1237. /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.d.mts +0 -0
  1238. /package/3rdparty/walkontable/src/{viewport.d.mts → viewport/viewport.d.mts} +0 -0
@@ -4,15 +4,12 @@ function _check_private_redeclaration(obj, privateCollection) {
4
4
  }
5
5
  }
6
6
  function _class_apply_descriptor_get(receiver, descriptor) {
7
- if (descriptor.get) {
8
- return descriptor.get.call(receiver);
9
- }
7
+ if (descriptor.get) return descriptor.get.call(receiver);
10
8
  return descriptor.value;
11
9
  }
12
10
  function _class_apply_descriptor_set(receiver, descriptor, value) {
13
- if (descriptor.set) {
14
- descriptor.set.call(receiver, value);
15
- } else {
11
+ if (descriptor.set) descriptor.set.call(receiver, value);
12
+ else {
16
13
  if (!descriptor.writable) {
17
14
  throw new TypeError("attempted to set read only private field");
18
15
  }
@@ -20,9 +17,7 @@ function _class_apply_descriptor_set(receiver, descriptor, value) {
20
17
  }
21
18
  }
22
19
  function _class_extract_field_descriptor(receiver, privateMap, action) {
23
- if (!privateMap.has(receiver)) {
24
- throw new TypeError("attempted to " + action + " private field on non-instance");
25
- }
20
+ if (!privateMap.has(receiver)) throw new TypeError("attempted to " + action + " private field on non-instance");
26
21
  return privateMap.get(receiver);
27
22
  }
28
23
  function _class_private_field_get(receiver, privateMap) {
@@ -39,9 +34,7 @@ function _class_private_field_set(receiver, privateMap, value) {
39
34
  return value;
40
35
  }
41
36
  function _class_private_method_get(receiver, privateSet, fn) {
42
- if (!privateSet.has(receiver)) {
43
- throw new TypeError("attempted to get private field on non-instance");
44
- }
37
+ if (!privateSet.has(receiver)) throw new TypeError("attempted to get private field on non-instance");
45
38
  return fn;
46
39
  }
47
40
  function _class_private_method_init(obj, privateSet) {
@@ -50,18 +43,20 @@ function _class_private_method_init(obj, privateSet) {
50
43
  }
51
44
  import { BasePlugin } from '../base/index.mjs';
52
45
  import { staticRegister } from '../../utils/staticRegister.mjs';
53
- import { error, warn } from '../../helpers/console.mjs';
46
+ import { error, warn, warnOnce } from '../../helpers/console.mjs';
54
47
  import { isNumeric } from '../../helpers/number.mjs';
55
48
  import { isObject } from '../../helpers/object.mjs';
56
49
  import { isDefined, isUndefined } from '../../helpers/mixed.mjs';
57
50
  import { getRegisteredHotInstances, setupEngine, setupSheet, unregisterEngine } from './engine/register.mjs';
58
- import { getDateFromExcelDate, getDateInHfFormat, getDateInHotFormat, getTimeFromHfTimeFraction, isDate, isDateValid, isFormula, normalizeValueForFormulaEngine, unescapeFormulaExpression } from './utils.mjs';
51
+ import { coalesceIndexesToSpans, getDateFromExcelDate, getDateInHfFormat, getDateInHotFormat, getTimeFromHfTimeFraction, isDate, isDateValid, isFormula, normalizeValueForFormulaEngine, unescapeFormulaExpression } from './utils.mjs';
52
+ import { resolveHyperlinkUrl } from './hyperlinkUrl.mjs';
59
53
  import { getEngineSettingsWithOverrides, haveEngineSettingsChanged } from './engine/settings.mjs';
60
54
  import { isArrayOfArrays } from '../../helpers/data.mjs';
61
55
  import { toUpperCaseFirst } from '../../helpers/string.mjs';
62
56
  import { getValueGetterValue } from '../../utils/valueAccessors.mjs';
63
57
  import { Hooks } from '../../core/hooks/index.mjs';
64
58
  import IndexSyncer from './indexSyncer/index.mjs';
59
+ import { isCellRangeLike } from '../../3rdparty/walkontable/src/cell/range.mjs';
65
60
  /**
66
61
  * Narrow an arbitrary value to a HyperFormula cell change shape.
67
62
  *
@@ -87,6 +82,8 @@ import IndexSyncer from './indexSyncer/index.mjs';
87
82
  return typeof candidate === 'object' && candidate !== null && 'value' in candidate;
88
83
  }
89
84
  export const PLUGIN_KEY = 'formulas';
85
+ // `maxRows` and `maxColumns` no longer reach the engine at all (GH #10672), but they stay here:
86
+ // `updatePlugin` also creates or switches the sheet, and dropping them would skip that.
90
87
  export const SETTING_KEYS = [
91
88
  'maxRows',
92
89
  'maxColumns',
@@ -104,17 +101,90 @@ Hooks.getSingleton().register('afterFormulasValuesUpdate');
104
101
  // HyperFormula's `undo` and `redo` methods will do it instead. Please keep in mind that undo/redo stacks inside
105
102
  // instances of Handsontable and HyperFormula should be synced (number of actions should be the same).
106
103
  const isBlockedSource = (source)=>source === 'UndoRedo.undo' || source === 'UndoRedo.redo' || source === 'auto';
104
+ // Maximum number of `[startIndex, amount]` spans passed to a single variadic engine
105
+ // `removeRows`/`removeColumns` call. An unbounded argument spread could overflow the call stack.
106
+ const REMOVAL_SPANS_CHUNK_SIZE = 1000;
107
+ // Group under which the plugin's grid shortcuts are registered, so `disablePlugin` can drop them all.
108
+ const SHORTCUTS_GROUP = PLUGIN_KEY;
109
+ // Class name of the anchor that wraps the content of a `HYPERLINK` cell. It is also the marker that
110
+ // keeps the wrapping idempotent when a renderer leaves the previous DOM in place.
111
+ const HYPERLINK_CLASS_NAME = 'ht-hyperlink';
112
+ // `warnOnce` key for a `HYPERLINK` URL refused by the protocol allowlist. Warning per cell would
113
+ // flood the console on every render pass.
114
+ const HYPERLINK_WARN_KEY = 'formulas-hyperlink-refused';
107
115
  var /**
108
116
  * Flag used to bypass hooks in internal operations.
109
117
  *
110
118
  * @private
111
119
  * @type {boolean}
112
120
  */ _internalOperationPending = /*#__PURE__*/ new WeakMap(), /**
121
+ * Whether `HYPERLINK` cells are rendered as links. Mirrors the `hyperlinks` plugin setting, cached
122
+ * because it is read once per rendered cell.
123
+ */ _hyperlinksEnabled = /*#__PURE__*/ new WeakMap(), /**
113
124
  * Flag needed to mark if Handsontable was initialized with no data.
114
125
  * (Required to work around the fact, that Handsontable auto-generates sample data, when no data is provided).
115
126
  *
116
127
  * @type {boolean}
117
128
  */ _hotWasInitializedWithEmptyData = /*#__PURE__*/ new WeakMap(), /**
129
+ * Stores the HyperFormula source range and destination address prepared in `beforeMoveCells` so that
130
+ * `commitPendingMoveCells` can execute the corresponding HF operation without recomputing
131
+ * visual-to-HF coordinates. `rect` carries the same operation in visual coordinates for the
132
+ * post-commit data sync.
133
+ *
134
+ * Set to `null` when no move is in flight.
135
+ *
136
+ * @private
137
+ * @type {{ source: object, dest: object, isCopy: boolean, rect: object }|null}
138
+ */ _pendingMoveCells = /*#__PURE__*/ new WeakMap(), /**
139
+ * The visual rectangle of the operation `commitPendingMoveCells` committed to the engine (or
140
+ * intentionally skipped during undo/redo replay). Consumed by the `afterMoveCells` listener,
141
+ * which runs the HOT-data sync only for committed operations and only off this value — never
142
+ * off its own hook arguments, which a preceding listener's return value can replace.
143
+ *
144
+ * Set to `null` when no committed move is awaiting its sync.
145
+ *
146
+ * @private
147
+ * @type {object|null}
148
+ */ _committedMoveCells = /*#__PURE__*/ new WeakMap(), /**
149
+ * `true` while a move-cells redo is replaying through the MoveCells plugin.
150
+ *
151
+ * Unlike other redo actions, it must validate the Handsontable move before advancing
152
+ * HyperFormula, so `commitPendingMoveCells` performs the engine operation itself.
153
+ */ _isRedoingMoveCells = /*#__PURE__*/ new WeakMap(), /**
154
+ * The dependent-cell changes returned by the engine operation in `commitPendingMoveCells`,
155
+ * consumed by the `afterMoveCells` listener to re-render dependent sheets. `null` when the
156
+ * engine step was skipped (undo/redo replay re-renders everything anyway).
157
+ *
158
+ * @private
159
+ * @type {unknown[]|null}
160
+ */ _moveCellsChanges = /*#__PURE__*/ new WeakMap(), /**
161
+ * Guard flag set while writing synced values back to HOT after a `moveCells` operation.
162
+ * Prevents the `afterSetDataAtCell` / `afterSetSourceDataAtCell` hooks from re-writing
163
+ * the same values into HyperFormula a second time.
164
+ *
165
+ * @private
166
+ * @type {boolean}
167
+ */ _moveCellsSyncPending = /*#__PURE__*/ new WeakMap(), /**
168
+ * The changes that the engine reported while undoing or redoing an action. They are collected in
169
+ * `beforeUndo`/`beforeRedo` and consumed in `afterUndo`/`afterRedo`, where the dependent cells get
170
+ * validated.
171
+ *
172
+ * @type {Array}
173
+ */ _undoRedoDependentCells = /*#__PURE__*/ new WeakMap(), /**
174
+ * The addresses of the cells that the `UndoRedo` plugin writes through `setDataAtCell`. The Core
175
+ * validates those on its own, so they are excluded from the dependent-cell validation.
176
+ *
177
+ * Cells restored through `setSourceDataAtCell` are deliberately absent: that path runs
178
+ * `sourceDataValidator`, which never touches the `valid` flag, so excluding them would leave them
179
+ * unvalidated by anyone.
180
+ *
181
+ * @type {Array}
182
+ */ _undoRedoChangedCells = /*#__PURE__*/ new WeakMap(), /**
183
+ * Whether the action being undone or redone wrote any cell data. Only then are the dependent cells
184
+ * worth validating.
185
+ *
186
+ * @type {boolean}
187
+ */ _undoRedoWroteData = /*#__PURE__*/ new WeakMap(), /**
118
188
  * Maps a HyperFormula `ExportedCellChange` to the same change with `newValue` translated to a
119
189
  * Handsontable-formatted string when the target cell is of type `date` or `time`. For other cells
120
190
  * (or non-numeric values, or named expressions, or trimmed cells, or cells on other sheets), the
@@ -165,6 +235,64 @@ var /**
165
235
  *
166
236
  * @param {string} [sheetName] The new sheet name.
167
237
  */ _updateSheetNameAndSheetId = /*#__PURE__*/ new WeakSet(), /**
238
+ * Reads the `hyperlinks` plugin setting into the cached flag.
239
+ */ _refreshHyperlinksSetting = /*#__PURE__*/ new WeakSet(), /**
240
+ * Unwraps every `HYPERLINK` anchor currently in the grid, including the overlay clones.
241
+ *
242
+ * Disabling the plugin removes the `afterRenderer` hook, so a renderer that leaves its previous
243
+ * DOM in place would keep its cells clickable with nothing left to clean them up. The anchors are
244
+ * matched by the plugin's own class, so no knowledge of the rendering internals is needed.
245
+ */ _unwrapRenderedHyperlinks = /*#__PURE__*/ new WeakSet(), /**
246
+ * Moves an anchor's content up into the anchor's own parent and drops the anchor.
247
+ *
248
+ * The insertion goes through `link.parentNode` rather than the cell: a renderer that leaves the
249
+ * previous DOM in place can wrap an existing anchor, leaving it as `TD > div > a` instead of a
250
+ * direct child. Inserting relative to the cell would then throw `NotFoundError` and, because this
251
+ * runs inside `afterRenderer`, take the whole draw down with it.
252
+ *
253
+ * @param {Element} link The anchor to unwrap.
254
+ */ _unwrapLink = /*#__PURE__*/ new WeakSet(), /**
255
+ * Moves the content of a cell's `HYPERLINK` anchor back into the cell and drops the anchor. Loops
256
+ * so that anchors nested by an older render pass are unwrapped as well.
257
+ *
258
+ * @param {HTMLTableCellElement} TD The rendered cell element.
259
+ */ _unwrapHyperlink = /*#__PURE__*/ new WeakSet(), /**
260
+ * Returns the URL that a cell should link to, or `null` when the cell must not become a link.
261
+ *
262
+ * The engine reports a hyperlink only for a cell whose root expression is `HYPERLINK()`, so a
263
+ * nested call such as `=CONCATENATE("see ", HYPERLINK(...))` resolves to `null` here.
264
+ *
265
+ * @param {number} row Visual row index.
266
+ * @param {number} column Visual column index.
267
+ * @returns {string|null} The resolved absolute URL, or `null`.
268
+ */ _getHyperlinkHref = /*#__PURE__*/ new WeakSet(), /**
269
+ * Records that the action being undone or redone wrote cell data, and - when the Core validates
270
+ * that write itself - which cells it wrote, so that `#validateUndoRedoDependentCells` can skip
271
+ * them.
272
+ *
273
+ * `coreValidatesWrite` separates the two write paths. `setDataAtCell` ends in the Core's own
274
+ * `validateCell`, so those cells must be excluded to avoid validating them twice.
275
+ * `setSourceDataAtCell` does not - it runs `sourceDataValidator`, which never touches the `valid`
276
+ * flag - so its cells must stay in the validation pass. Skipping them is also why their row index
277
+ * is never translated here: that hook reports physical rows, unlike `afterSetDataAtCell`.
278
+ *
279
+ * @param {Array[]} changes An array of changes in format [[row, prop, oldValue, value], ...].
280
+ * @param {string} source String that identifies the source of the hook call.
281
+ * @param {boolean} coreValidatesWrite `true` when the Core validates the written cells itself.
282
+ */ _registerUndoRedoWrite = /*#__PURE__*/ new WeakSet(), /**
283
+ * Validates the cells that the engine recalculated while an action was undone or redone.
284
+ *
285
+ * The `afterSetDataAtCell` and `afterSetSourceDataAtCell` listeners ignore changes coming from the
286
+ * `UndoRedo` plugin, because the engine reverts them through its own undo stack. Without this step
287
+ * the dependent formula cells would keep the `valid` flag they were given before the action was
288
+ * reverted - a formula cell that turned into an error, and is a correct value again after the undo,
289
+ * would stay marked as invalid.
290
+ *
291
+ * Runs only when the action wrote cell data. That covers undoing an edit (`setDataAtCell`) and
292
+ * undoing a row or column removal, which restores the data with `setSourceDataAtCell`. Actions
293
+ * that only reorder or hide - moving, sorting, filtering, merging - write no data, do not validate
294
+ * dependent cells outside of undo either, and are skipped.
295
+ */ _validateUndoRedoDependentCells = /*#__PURE__*/ new WeakSet(), /**
168
296
  * Get the value to be passed to the formula engine.
169
297
  * If the value is an object, utilize the valueGetter for that cell, otherwise return the value as is.
170
298
  *
@@ -220,6 +348,14 @@ var /**
220
348
  * property.
221
349
  * @param {string} ioMode String which indicates for what operation hook is fired (`get` or `set`).
222
350
  */ _onModifyData = /*#__PURE__*/ new WeakMap(), /**
351
+ * `afterRenderer` hook callback. Wraps the already rendered content of a `HYPERLINK` cell in an
352
+ * anchor. The cell keeps its own renderer and its cell meta is left untouched, so disabling the
353
+ * plugin or clearing the formula needs no cleanup.
354
+ *
355
+ * @param {HTMLTableCellElement} TD The rendered cell element.
356
+ * @param {number} row Visual row index.
357
+ * @param {number} column Visual column index.
358
+ */ _onAfterRenderer = /*#__PURE__*/ new WeakMap(), /**
223
359
  * `modifySourceData` hook callback.
224
360
  *
225
361
  * @param {number} row Physical row index.
@@ -232,13 +368,13 @@ var /**
232
368
  *
233
369
  * @param {Array[]} changes An array of changes in format [[row, prop, oldValue, value], ...].
234
370
  * @param {string} [source] String that identifies source of hook call
235
- * ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).
371
+ * ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).
236
372
  */ _onAfterSetDataAtCell = /*#__PURE__*/ new WeakMap(), /**
237
373
  * `onAfterSetSourceDataAtCell` hook callback.
238
374
  *
239
375
  * @param {Array[]} changes An array of changes in format [[row, column, oldValue, value], ...].
240
376
  * @param {string} [source] String that identifies source of hook call
241
- * ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).
377
+ * ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).
242
378
  */ _onAfterSetSourceDataAtCell = /*#__PURE__*/ new WeakMap(), /**
243
379
  * `beforeCreateRow` hook callback.
244
380
  *
@@ -271,14 +407,14 @@ var /**
271
407
  * @param {number} visualRow Represents the visual index of first newly created row in the data source array.
272
408
  * @param {number} amount Number of newly created rows in the data source array.
273
409
  * @param {string} [source] String that identifies source of hook call
274
- * ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).
410
+ * ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).
275
411
  */ _onAfterCreateRow = /*#__PURE__*/ new WeakMap(), /**
276
412
  * `afterCreateCol` hook callback.
277
413
  *
278
414
  * @param {number} visualColumn Represents the visual index of first newly created column in the data source.
279
415
  * @param {number} amount Number of newly created columns in the data source.
280
416
  * @param {string} [source] String that identifies source of hook call
281
- * ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).
417
+ * ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).
282
418
  */ _onAfterCreateCol = /*#__PURE__*/ new WeakMap(), /**
283
419
  * `afterRemoveRow` hook callback.
284
420
  *
@@ -286,7 +422,7 @@ var /**
286
422
  * @param {number} amount An amount of removed rows.
287
423
  * @param {number[]} physicalRows An array of physical rows removed from the data source.
288
424
  * @param {string} [source] String that identifies source of hook call
289
- * ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).
425
+ * ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).
290
426
  */ _onAfterRemoveRow = /*#__PURE__*/ new WeakMap(), /**
291
427
  * `afterRemoveCol` hook callback.
292
428
  *
@@ -294,8 +430,73 @@ var /**
294
430
  * @param {number} amount An amount of removed columns.
295
431
  * @param {number[]} physicalColumns An array of physical columns removed from the data source.
296
432
  * @param {string} [source] String that identifies source of hook call
297
- * ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).
433
+ * ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).
298
434
  */ _onAfterRemoveCol = /*#__PURE__*/ new WeakMap(), /**
435
+ * Checks whether every visual index in the `[visualFrom, visualTo]` span maps to consecutive
436
+ * HyperFormula indexes on the given axis. Only then is a visual rectangle equivalent to the
437
+ * single HF rectangle the `moveCells` engine operation works on.
438
+ *
439
+ * @param {AxisSyncer} syncer The row or column axis syncer.
440
+ * @param {number} visualFrom The first visual index of the span.
441
+ * @param {number} visualTo The last visual index of the span.
442
+ * @returns {boolean}
443
+ */ _mapsToContiguousHfBlock = /*#__PURE__*/ new WeakSet(), /**
444
+ * `beforeMoveCells` hook callback.
445
+ *
446
+ * Converts the visual source range and target top-left corner to HyperFormula
447
+ * (physical) coordinates, validates feasibility for a MOVE operation, and stores
448
+ * the converted addresses for use in the `afterMoveCells` handler.
449
+ *
450
+ * Returns `false` to veto the whole operation when the source range is not a valid range
451
+ * (the documented `false` veto value, or garbage folded into the argument by a preceding
452
+ * listener's truthy return value), when HyperFormula reports the move is not possible
453
+ * (e.g. the source or target contains an array formula), or when the visual ranges do not map
454
+ * to contiguous HF blocks (trimmed/filtered/reordered indexes), because the engine rectangle
455
+ * would then cover cells outside the visual operation.
456
+ *
457
+ * @param {CellRange|boolean} sourceRange The visual source range, or `false` after an earlier veto.
458
+ * @param {CellCoords} targetTopLeft The visual top-left of the destination.
459
+ * @param {boolean} isCopy `true` when copying (not moving) cells.
460
+ * @returns {boolean|undefined} `false` to cancel the operation; `undefined` otherwise.
461
+ */ _onBeforeMoveCells = /*#__PURE__*/ new WeakMap(), /**
462
+ * `afterMoveCells` hook callback.
463
+ *
464
+ * Runs after the engine operation already executed in `commitPendingMoveCells` (the core
465
+ * calls it before mutating the grid, so a failed engine operation never reaches this hook).
466
+ * Synchronises HOT's source data array with HF's state so that `getDataAtCell` returns
467
+ * correct values for plain VALUE / EMPTY cells (formula cells are already served from HF
468
+ * via the `modifyData` hook), then re-renders the dependent sheets. The sync is guarded by
469
+ * `#moveCellsSyncPending` so that `afterSetDataAtCell` does not re-write the same values
470
+ * back into HyperFormula.
471
+ *
472
+ * Takes no arguments on purpose. The engine has already moved the cells by the time this runs, so
473
+ * there is nothing left to veto and bailing out would strand the data source out of sync with the
474
+ * engine — which is what reading the replaceable `sourceRange` argument used to cause. The
475
+ * operation is read from `#committedMoveCells` instead, captured before any listener could run.
476
+ */ _onAfterMoveCells = /*#__PURE__*/ new WeakMap(), /**
477
+ * Synchronises HOT's raw data source array with HyperFormula's state after a
478
+ * `moveCells` or copy operation.
479
+ *
480
+ * Formula cells are already served correctly through `modifyData` via `getCellValue`.
481
+ * Plain VALUE / EMPTY cells, however, fall back to the raw HOT data, so after HF
482
+ * moves the data the old raw values must be cleared from the source cells and the
483
+ * serialised HF content must be written to the target cells.
484
+ *
485
+ * The write is fenced with `#moveCellsSyncPending` to prevent the `afterSetDataAtCell`
486
+ * hook from re-syncing the same data back into HyperFormula.
487
+ *
488
+ * @private
489
+ * @param {object} rect The committed operation in visual coordinates.
490
+ */ _syncHotDataAfterMoveCells = /*#__PURE__*/ new WeakSet(), /**
491
+ * Removes the provided `[startIndex, amount]` spans from the engine in as few calls as possible.
492
+ * One call handles many spans, so the engine pays its dependency-graph remap once per call instead
493
+ * of once per removed row or column. The engine methods are variadic, so the spans are chunked to
494
+ * keep the argument spread within call-stack limits; chunks run from the highest spans down, which
495
+ * keeps the original coordinates of the not-yet-removed lower spans valid.
496
+ *
497
+ * @param {Array<Array<number>>} spans Ascending list of `[startIndex, amount]` spans to remove.
498
+ * @param {'removeRows'|'removeColumns'} engineMethodName The engine removal method to call.
499
+ */ _removeSpansFromEngine = /*#__PURE__*/ new WeakSet(), /**
299
500
  * `afterDetachChild` hook callback.
300
501
  * Used to sync the data of the rows detached in the Nested Rows plugin with the engine's dataset.
301
502
  *
@@ -424,27 +625,61 @@ var /**
424
625
  // Handling undo actions on data just using HyperFormula's UndoRedo mechanism
425
626
  this.addHook('beforeUndo', ()=>{
426
627
  this.indexSyncer.setPerformUndo(true);
427
- this.engine.undo();
628
+ _class_private_field_set(this, _undoRedoChangedCells, []);
629
+ _class_private_field_set(this, _undoRedoWroteData, false);
630
+ _class_private_field_set(this, _undoRedoDependentCells, this.engine.undo() ?? []);
428
631
  });
429
- // Handling redo actions on data just using HyperFormula's UndoRedo mechanism
430
- this.addHook('beforeRedo', ()=>{
632
+ // Handling redo actions on data just using HyperFormula's UndoRedo mechanism.
633
+ this.addHook('beforeRedo', (action)=>{
634
+ // Defensive: `Hooks.run` threads a preceding listener's non-`undefined` return value into
635
+ // this argument, and the global bucket runs before this one. Without a trustworthy
636
+ // `actionType` the engine step cannot be dispatched safely (`engine.redo()` vs the
637
+ // `move_cells` replay path — the wrong branch runs the engine operation twice), so cancel
638
+ // the redo instead of desyncing HyperFormula. The guard runs BEFORE `setPerformRedo(true)`
639
+ // — a cancelled redo never fires `afterRedo`, so a flag set here would leak.
640
+ if (typeof action !== 'object' || action === null || !('actionType' in action)) {
641
+ return false;
642
+ }
431
643
  this.indexSyncer.setPerformRedo(true);
432
- this.engine.redo();
644
+ _class_private_field_set(this, _isRedoingMoveCells, action.actionType === 'move_cells');
645
+ _class_private_field_set(this, _undoRedoChangedCells, []);
646
+ _class_private_field_set(this, _undoRedoWroteData, false);
647
+ // For a `move_cells` redo the engine operation runs in `commitPendingMoveCells` (the
648
+ // Handsontable move must be validated first), so `engine.redo()` is not called here and
649
+ // there are no engine-reported dependent cells to collect.
650
+ _class_private_field_set(this, _undoRedoDependentCells, _class_private_field_get(this, _isRedoingMoveCells) ? [] : this.engine.redo() ?? []);
433
651
  });
434
652
  this.addHook('afterUndo', ()=>{
435
653
  this.indexSyncer.setPerformUndo(false);
654
+ // Also clears the redo flags: a redo cancelled by a `beforeRedo` listener never fires
655
+ // `afterRedo`, so without these resets the flags set in `beforeRedo` would leak until the
656
+ // next successful redo.
657
+ this.indexSyncer.setPerformRedo(false);
658
+ _class_private_field_set(this, _isRedoingMoveCells, false);
659
+ _class_private_method_get(this, _validateUndoRedoDependentCells, validateUndoRedoDependentCells).call(this);
436
660
  });
437
- this.addHook('afterUndo', ()=>{
661
+ this.addHook('afterRedo', ()=>{
438
662
  this.indexSyncer.setPerformRedo(false);
663
+ _class_private_method_get(this, _validateUndoRedoDependentCells, validateUndoRedoDependentCells).call(this);
664
+ });
665
+ this.addHook('afterRedo', ()=>{
666
+ _class_private_field_set(this, _isRedoingMoveCells, false);
439
667
  });
440
668
  this.addHook('afterDetachChild', _class_private_field_get(this, _onAfterDetachChild));
441
669
  this.addHook('beforeAutofill', _class_private_field_get(this, _onBeforeAutofill));
670
+ this.addHook('beforeMoveCells', _class_private_field_get(this, _onBeforeMoveCells));
671
+ this.addHook('afterMoveCells', _class_private_field_get(this, _onAfterMoveCells));
672
+ this.addHook('afterRenderer', _class_private_field_get(this, _onAfterRenderer));
442
673
  _class_private_field_get(this, _engineListeners)?.forEach(([eventName, listener])=>this.engine.on(eventName, listener));
674
+ _class_private_method_get(this, _refreshHyperlinksSetting, refreshHyperlinksSetting).call(this);
675
+ this.registerShortcuts();
443
676
  super.enablePlugin();
444
677
  }
445
678
  /**
446
679
  * Disables the plugin functionality for this Handsontable instance.
447
680
  */ disablePlugin() {
681
+ _class_private_method_get(this, _unwrapRenderedHyperlinks, unwrapRenderedHyperlinks).call(this);
682
+ this.unregisterShortcuts();
448
683
  _class_private_field_get(this, _engineListeners)?.forEach(([eventName, listener])=>this.engine?.off(eventName, listener));
449
684
  if (this.engine) {
450
685
  unregisterEngine(this.engine, this.hot);
@@ -463,7 +698,10 @@ var /**
463
698
  this.engine.updateConfig(newEngineSettings);
464
699
  }
465
700
  const pluginSettings = this.hot.getSettings()[PLUGIN_KEY];
466
- if (pluginSettings !== undefined && typeof pluginSettings !== 'boolean' && pluginSettings.sheetName !== undefined && pluginSettings.sheetName !== this.sheetName) {
701
+ if (pluginSettings !== undefined && typeof pluginSettings !== 'boolean' && pluginSettings.sheetName !== undefined && // Sheet ids are compared rather than names, because `sheetName` holds the engine's casing
702
+ // while the setting keeps the one it was written with. An unknown name has no id, which
703
+ // still differs from the current one and lets `switchSheet` report it.
704
+ this.engine?.getSheetId(pluginSettings.sheetName) !== this.sheetId) {
467
705
  this.switchSheet(pluginSettings.sheetName);
468
706
  }
469
707
  // If no data was passed to the `updateSettings` method and no sheet is connected to the instance -> create a
@@ -480,6 +718,7 @@ var /**
480
718
  }
481
719
  }
482
720
  }
721
+ _class_private_method_get(this, _refreshHyperlinksSetting, refreshHyperlinksSetting).call(this);
483
722
  super.updatePlugin(newSettings);
484
723
  }
485
724
  /**
@@ -574,6 +813,48 @@ var /**
574
813
  });
575
814
  }
576
815
  /**
816
+ * Registers the shortcut that opens the link of the selected `HYPERLINK` cell. The anchor is kept
817
+ * out of the tab order, so this is the only keyboard path to the link.
818
+ *
819
+ * @private
820
+ */ registerShortcuts() {
821
+ this.hot.getShortcutManager().getContext('grid')?.addShortcut({
822
+ keys: [
823
+ [
824
+ 'Alt',
825
+ 'Enter'
826
+ ]
827
+ ],
828
+ callback: ()=>{
829
+ const highlight = this.hot.getSelectedRangeActive()?.highlight;
830
+ if (!highlight || highlight.row === null || highlight.col === null) {
831
+ return;
832
+ }
833
+ const href = _class_private_method_get(this, _getHyperlinkHref, getHyperlinkHref).call(this, highlight.row, highlight.col);
834
+ if (href !== null) {
835
+ this.hot.rootWindow.open(href, '_blank', 'noopener,noreferrer');
836
+ }
837
+ },
838
+ stopPropagation: true,
839
+ // The shortcut prevents the default action and stops propagation whenever `runOnlyIf`
840
+ // passes, so it must claim the chord only for a cell that actually resolves to a link.
841
+ // Testing just `isCell()` would swallow `Alt`+`Enter` grid-wide and break a host
842
+ // application's own handler for it.
843
+ runOnlyIf: ()=>{
844
+ const highlight = this.hot.getSelectedRangeActive()?.highlight;
845
+ return _class_private_field_get(this, _hyperlinksEnabled) && !!highlight?.isCell() && highlight.row !== null && highlight.col !== null && _class_private_method_get(this, _getHyperlinkHref, getHyperlinkHref).call(this, highlight.row, highlight.col) !== null;
846
+ },
847
+ group: SHORTCUTS_GROUP
848
+ });
849
+ }
850
+ /**
851
+ * Removes the shortcuts registered by the plugin.
852
+ *
853
+ * @private
854
+ */ unregisterShortcuts() {
855
+ this.hot.getShortcutManager().getContext('grid')?.removeShortcutsByGroup(SHORTCUTS_GROUP);
856
+ }
857
+ /**
577
858
  * Renders dependent sheets (handsontable instances) based on the changes - list of the
578
859
  * recalculated dependent cells.
579
860
  *
@@ -651,7 +932,7 @@ var /**
651
932
  warn(`Not possible to set cell data at ${JSON.stringify(address)}`);
652
933
  return;
653
934
  }
654
- const cellMeta = this.hot.getCellMeta(row, column);
935
+ const cellMeta = this.hot.getCellMetaTransient(row, column);
655
936
  if (isDate(newValue, cellMeta.type)) {
656
937
  if (isDateValid(newValue)) {
657
938
  // Rewriting date in HOT format to HF format.
@@ -663,13 +944,97 @@ var /**
663
944
  }
664
945
  return this.engine?.setCellContents(address, newValue);
665
946
  }
947
+ /**
948
+ * Executes the HyperFormula move or copy operation prepared in `beforeMoveCells`. Called by
949
+ * the MoveCells plugin BEFORE any grid mutation (cell meta, selection, undo history),
950
+ * so a failed engine operation aborts the whole `moveCells` operation atomically instead of
951
+ * leaving the grid state recording a move whose data write never happened.
952
+ *
953
+ * For a MOVE, calls `engine.moveCells`, which physically relocates cell content and adjusts
954
+ * all dependent formula references (Excel-style). For a COPY, calls `engine.copy` followed
955
+ * by `engine.paste`, which duplicates the content with adjusted relative references. Note:
956
+ * `engine.copy` reads cell values and must NOT be wrapped in `engine.batch` because batch
957
+ * suspends evaluation, causing `copy` to throw `EvaluationSuspendedError`.
958
+ *
959
+ * During undo and non-move redo operations, the engine has already been advanced in the
960
+ * `beforeUndo`/`beforeRedo` hook, so this method only enables the HOT-data sync in the
961
+ * `afterMoveCells` listener. A move redo is validated first, then executed here to keep a
962
+ * rejected move from advancing HyperFormula.
963
+ *
964
+ * This is the second half of a two-phase protocol with the MoveCells plugin: `beforeMoveCells`
965
+ * prepares `#pendingMoveCells`, and this method commits it. It is internal despite being reachable
966
+ * through `getPlugin('formulas')` — not part of the public API.
967
+ *
968
+ * @private
969
+ * @returns {boolean} `true` when the engine operation succeeded (or was intentionally
970
+ * skipped); `false` when there is no prepared operation or the engine rejected it.
971
+ */ commitPendingMoveCells() {
972
+ if (!this.engine || !_class_private_field_get(this, _pendingMoveCells)) {
973
+ return false;
974
+ }
975
+ const { source, dest, isCopy, rect } = _class_private_field_get(this, _pendingMoveCells);
976
+ _class_private_field_set(this, _pendingMoveCells, null);
977
+ _class_private_field_set(this, _moveCellsChanges, null);
978
+ if (this.indexSyncer?.isPerformingUndoRedo() && !_class_private_field_get(this, _isRedoingMoveCells)) {
979
+ _class_private_field_set(this, _committedMoveCells, rect);
980
+ return true;
981
+ }
982
+ // HyperFormula can still throw for cases the isItPossibleTo* pre-checks in
983
+ // `beforeMoveCells` do not cover. Failing here is safe: the core has not mutated
984
+ // anything yet and aborts the whole operation when `false` is returned.
985
+ try {
986
+ if (isCopy) {
987
+ // copy() reads cell values and cannot run inside batch() (evaluation must not be suspended).
988
+ this.engine.copy(source);
989
+ _class_private_field_set(this, _moveCellsChanges, this.engine.paste(dest));
990
+ } else {
991
+ _class_private_field_set(this, _moveCellsChanges, this.engine.batch(()=>{
992
+ this.engine.moveCells(source, dest);
993
+ }));
994
+ }
995
+ } catch (e) {
996
+ const operation = isCopy ? 'copy/paste' : 'moveCells';
997
+ const reason = e instanceof Error ? e.message : String(e);
998
+ warn(`Formulas: HyperFormula operation failed during ${operation}: ${reason}`);
999
+ return false;
1000
+ }
1001
+ _class_private_field_set(this, _committedMoveCells, rect);
1002
+ return true;
1003
+ }
666
1004
  constructor(...args){
667
- super(...args), _class_private_method_init(this, _exportChangeValue), _class_private_method_init(this, _updateSheetNameAndSheetId), _class_private_method_init(this, _getValueGetterValue), _class_private_method_init(this, _getProcessedSourceDataArray), _class_private_field_init(this, _internalOperationPending, {
1005
+ super(...args), _class_private_method_init(this, _exportChangeValue), _class_private_method_init(this, _updateSheetNameAndSheetId), _class_private_method_init(this, _refreshHyperlinksSetting), _class_private_method_init(this, _unwrapRenderedHyperlinks), _class_private_method_init(this, _unwrapLink), _class_private_method_init(this, _unwrapHyperlink), _class_private_method_init(this, _getHyperlinkHref), _class_private_method_init(this, _registerUndoRedoWrite), _class_private_method_init(this, _validateUndoRedoDependentCells), _class_private_method_init(this, _getValueGetterValue), _class_private_method_init(this, _getProcessedSourceDataArray), _class_private_method_init(this, _mapsToContiguousHfBlock), _class_private_method_init(this, _syncHotDataAfterMoveCells), _class_private_method_init(this, _removeSpansFromEngine), _class_private_field_init(this, _internalOperationPending, {
1006
+ writable: true,
1007
+ value: void 0
1008
+ }), _class_private_field_init(this, _hyperlinksEnabled, {
668
1009
  writable: true,
669
1010
  value: void 0
670
1011
  }), _class_private_field_init(this, _hotWasInitializedWithEmptyData, {
671
1012
  writable: true,
672
1013
  value: void 0
1014
+ }), _class_private_field_init(this, _pendingMoveCells, {
1015
+ writable: true,
1016
+ value: void 0
1017
+ }), _class_private_field_init(this, _committedMoveCells, {
1018
+ writable: true,
1019
+ value: void 0
1020
+ }), _class_private_field_init(this, _isRedoingMoveCells, {
1021
+ writable: true,
1022
+ value: void 0
1023
+ }), _class_private_field_init(this, _moveCellsChanges, {
1024
+ writable: true,
1025
+ value: void 0
1026
+ }), _class_private_field_init(this, _moveCellsSyncPending, {
1027
+ writable: true,
1028
+ value: void 0
1029
+ }), _class_private_field_init(this, _undoRedoDependentCells, {
1030
+ writable: true,
1031
+ value: void 0
1032
+ }), _class_private_field_init(this, _undoRedoChangedCells, {
1033
+ writable: true,
1034
+ value: void 0
1035
+ }), _class_private_field_init(this, _undoRedoWroteData, {
1036
+ writable: true,
1037
+ value: void 0
673
1038
  }), _class_private_field_init(this, _onEngineValuesUpdated, {
674
1039
  writable: true,
675
1040
  value: void 0
@@ -709,6 +1074,9 @@ var /**
709
1074
  }), _class_private_field_init(this, _onModifyData, {
710
1075
  writable: true,
711
1076
  value: void 0
1077
+ }), _class_private_field_init(this, _onAfterRenderer, {
1078
+ writable: true,
1079
+ value: void 0
712
1080
  }), _class_private_field_init(this, _onModifySourceData, {
713
1081
  writable: true,
714
1082
  value: void 0
@@ -742,10 +1110,16 @@ var /**
742
1110
  }), _class_private_field_init(this, _onAfterRemoveCol, {
743
1111
  writable: true,
744
1112
  value: void 0
1113
+ }), _class_private_field_init(this, _onBeforeMoveCells, {
1114
+ writable: true,
1115
+ value: void 0
1116
+ }), _class_private_field_init(this, _onAfterMoveCells, {
1117
+ writable: true,
1118
+ value: void 0
745
1119
  }), _class_private_field_init(this, _onAfterDetachChild, {
746
1120
  writable: true,
747
1121
  value: void 0
748
- }), _class_private_field_set(this, _internalOperationPending, false), _class_private_field_set(this, _hotWasInitializedWithEmptyData, false), _class_private_field_set(this, _onEngineValuesUpdated, (changes)=>{
1122
+ }), _class_private_field_set(this, _internalOperationPending, false), _class_private_field_set(this, _hyperlinksEnabled, false), _class_private_field_set(this, _hotWasInitializedWithEmptyData, false), _class_private_field_set(this, _pendingMoveCells, null), _class_private_field_set(this, _committedMoveCells, null), _class_private_field_set(this, _isRedoingMoveCells, false), _class_private_field_set(this, _moveCellsChanges, null), _class_private_field_set(this, _moveCellsSyncPending, false), _class_private_field_set(this, _undoRedoDependentCells, []), _class_private_field_set(this, _undoRedoChangedCells, []), _class_private_field_set(this, _undoRedoWroteData, false), _class_private_field_set(this, _onEngineValuesUpdated, (changes)=>{
749
1123
  const exportedChanges = changes.map((change)=>_class_private_method_get(this, _exportChangeValue, exportChangeValue).call(this, change));
750
1124
  this.hot.runHooks('afterFormulasValuesUpdate', exportedChanges);
751
1125
  }), _class_private_field_set(this, _onEngineNamedExpressionsAdded, (namedExpressionName, changes)=>{
@@ -755,7 +1129,14 @@ var /**
755
1129
  }), _class_private_field_set(this, _onEngineSheetAdded, (addedSheetDisplayName)=>{
756
1130
  this.hot.runHooks('afterSheetAdded', addedSheetDisplayName);
757
1131
  }), _class_private_field_set(this, _onEngineSheetRenamed, (oldDisplayName, newDisplayName)=>{
758
- _class_private_method_get(this, _updateSheetNameAndSheetId, updateSheetNameAndSheetId).call(this, newDisplayName);
1132
+ // The event is engine-wide, so it also reaches instances that do not own the renamed sheet.
1133
+ // Repointing those would make them operate on a sheet belonging to another instance.
1134
+ // Sheet ids are compared rather than names: the engine matches names without looking at the
1135
+ // case but keeps the casing it was given, so `sheetName` may differ in case from the event's
1136
+ // display names. The rename is already applied here, so the new name resolves to the same id.
1137
+ if (this.engine?.getSheetId(newDisplayName) === this.sheetId) {
1138
+ _class_private_method_get(this, _updateSheetNameAndSheetId, updateSheetNameAndSheetId).call(this, newDisplayName);
1139
+ }
759
1140
  this.hot.runHooks('afterSheetRenamed', oldDisplayName, newDisplayName);
760
1141
  }), _class_private_field_set(this, _onEngineSheetRemoved, (removedSheetDisplayName, changes)=>{
761
1142
  this.hot.runHooks('afterSheetRemoved', removedSheetDisplayName, changes);
@@ -822,7 +1203,7 @@ var /**
822
1203
  col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),
823
1204
  sheet: this.sheetId
824
1205
  };
825
- const cellMeta = this.hot.getCellMeta(visualRow, visualColumn);
1206
+ const cellMeta = this.hot.getCellMetaTransient(visualRow, visualColumn);
826
1207
  let cellValue = this.engine.getCellValue(address); // Date as an integer (Excel-like date).
827
1208
  if (cellMeta.type === 'date' && isNumeric(cellValue)) {
828
1209
  cellValue = getDateFromExcelDate(cellValue);
@@ -921,8 +1302,11 @@ var /**
921
1302
  const sourceDataArray = _class_private_method_get(this, _getProcessedSourceDataArray, getProcessedSourceDataArray).call(this);
922
1303
  sourceDataArray.forEach((rowData, rowIndex)=>{
923
1304
  rowData.forEach((cellValue, columnIndex)=>{
924
- const cellMeta = this.hot.getCellMeta(rowIndex, columnIndex, {
925
- skipMetaExtension: true
1305
+ // The uncached read keeps this full source-data scan from permanently materializing
1306
+ // one meta object per cell (same no-extension semantics as `skipMetaExtension`).
1307
+ const cellMeta = this.hot._getMetaManager().getCellMetaUncached(this.hot.toPhysicalRow(rowIndex) ?? rowIndex, this.hot.toPhysicalColumn(columnIndex) ?? columnIndex, {
1308
+ visualRow: rowIndex,
1309
+ visualColumn: columnIndex
926
1310
  });
927
1311
  if (isDate(cellValue, cellMeta.type)) {
928
1312
  if (isDateValid(cellValue)) {
@@ -949,7 +1333,10 @@ var /**
949
1333
  }
950
1334
  const formulasSettings = this.hot.getSettings()[PLUGIN_KEY];
951
1335
  const settingsSheetName = isFormulasSettingsObject(formulasSettings) ? formulasSettings.sheetName : undefined;
952
- const sheetName = setupSheet(this.engine, settingsSheetName);
1336
+ // Fall back to the sheet this instance already owns. Without it every `loadData`/`updateData`
1337
+ // call adds a sheet and abandons the previous one - with its whole dependency graph - inside
1338
+ // the engine, which the engine then recalculates on every subsequent call.
1339
+ const sheetName = setupSheet(this.engine, settingsSheetName ?? this.sheetName);
953
1340
  _class_private_method_get(this, _updateSheetNameAndSheetId, updateSheetNameAndSheetId).call(this, sheetName);
954
1341
  if (source === 'updateSettings') {
955
1342
  // For performance reasons, the initialization will be done in afterCellMetaReset hook
@@ -963,6 +1350,17 @@ var /**
963
1350
  this.indexSyncer.setupSyncEndpoint(this.engine, this.sheetId);
964
1351
  this.renderDependentSheets(dependentCells);
965
1352
  _class_private_field_set(this, _internalOperationPending, false);
1353
+ } else {
1354
+ // The sheet is reused, so leaving it untouched would keep the previous data in the engine
1355
+ // while the grid already shows the new one. Empty it instead of serving stale values.
1356
+ _class_private_field_set(this, _internalOperationPending, true);
1357
+ const dependentCells = this.engine.setSheetContent(this.sheetId, [
1358
+ []
1359
+ ]);
1360
+ // Emptying the sheet changes what the grids reading it compute, so they need a redraw.
1361
+ this.renderDependentSheets(dependentCells);
1362
+ _class_private_field_set(this, _internalOperationPending, false);
1363
+ warn('The loaded data could not be passed to the formula engine, so the formulas were ' + 'cleared. It most likely exceeds the engine\'s `maxRows` or `maxColumns` limit.');
966
1364
  }
967
1365
  } else if (this.sheetName !== null) {
968
1366
  this.switchSheet(this.sheetName);
@@ -985,8 +1383,11 @@ var /**
985
1383
  sheet: this.sheetId
986
1384
  };
987
1385
  let cellValue = this.engine.getCellValue(address); // Date as an integer (Excel like date).
988
- const cellMeta = this.hot.getCellMeta(visualRow, visualColumn, {
989
- skipMetaExtension: true
1386
+ // The uncached read matters here: this hook fires inside bulk data reads (for example, the
1387
+ // filters column scan), so an eager read would materialize one meta per scanned cell.
1388
+ const cellMeta = this.hot._getMetaManager().getCellMetaUncached(this.hot.toPhysicalRow(visualRow) ?? visualRow, this.hot.toPhysicalColumn(visualColumn) ?? visualColumn, {
1389
+ visualRow,
1390
+ visualColumn
990
1391
  });
991
1392
  if (cellMeta.type === 'date' && isNumeric(cellValue)) {
992
1393
  cellValue = getDateFromExcelDate(cellValue);
@@ -995,6 +1396,32 @@ var /**
995
1396
  }
996
1397
  // If `cellValue` is an object it is expected to be an error
997
1398
  valueHolder.value = hasValueProperty(cellValue) ? cellValue.value : cellValue;
1399
+ }), _class_private_field_set(this, _onAfterRenderer, (TD, row, column)=>{
1400
+ if (!_class_private_field_get(this, _hyperlinksEnabled) || _class_private_field_get(this, _internalOperationPending)) {
1401
+ return;
1402
+ }
1403
+ // Walkontable recycles TD elements, and a renderer is free to leave its previous DOM in place.
1404
+ // Unwrapping first keeps this idempotent by construction: no anchor nests inside another one
1405
+ // across render passes, and the `href` is always rebuilt from the current formula instead of
1406
+ // inherited from whatever the previous pass resolved. Cleanup for the option being turned off
1407
+ // happens once, in `#refreshHyperlinksSetting`, so this path never runs for a disabled grid.
1408
+ _class_private_method_get(this, _unwrapHyperlink, unwrapHyperlink).call(this, TD);
1409
+ const href = _class_private_method_get(this, _getHyperlinkHref, getHyperlinkHref).call(this, row, column);
1410
+ if (href === null) {
1411
+ return;
1412
+ }
1413
+ const link = this.hot.rootDocument.createElement('a');
1414
+ link.className = HYPERLINK_CLASS_NAME;
1415
+ link.href = href;
1416
+ link.target = '_blank';
1417
+ link.rel = 'noopener noreferrer';
1418
+ // Cell content stays out of the grid's tab order; `Alt`+`Enter` is the keyboard path instead.
1419
+ link.tabIndex = -1;
1420
+ // The nodes are moved, never re-serialized, so a label containing markup stays text.
1421
+ while(TD.firstChild){
1422
+ link.appendChild(TD.firstChild);
1423
+ }
1424
+ TD.appendChild(link);
998
1425
  }), _class_private_field_set(this, _onModifySourceData, (row, columnOrProp, valueHolder, ioMode)=>{
999
1426
  if (ioMode !== 'get' || _class_private_field_get(this, _internalOperationPending) || this.sheetName === null || !this.engine?.doesSheetExist(this.sheetName)) {
1000
1427
  return;
@@ -1024,6 +1451,11 @@ var /**
1024
1451
  valueHolder.value = this.engine.getCellSerialized(address);
1025
1452
  }), _class_private_field_set(this, _onAfterSetDataAtCell, (changes, source)=>{
1026
1453
  if (isBlockedSource(source)) {
1454
+ _class_private_method_get(this, _registerUndoRedoWrite, registerUndoRedoWrite).call(this, changes, source, true);
1455
+ return;
1456
+ }
1457
+ // Skip HF re-sync when we are writing back to HOT after a moveCells HF operation.
1458
+ if (_class_private_field_get(this, _moveCellsSyncPending)) {
1027
1459
  return;
1028
1460
  }
1029
1461
  // Skip engine sync when there are no changes (e.g. populateFromArray on readOnly cells).
@@ -1077,6 +1509,11 @@ var /**
1077
1509
  this.validateDependentCells(dependentCells, changedCells);
1078
1510
  }), _class_private_field_set(this, _onAfterSetSourceDataAtCell, (changes, source)=>{
1079
1511
  if (isBlockedSource(source)) {
1512
+ _class_private_method_get(this, _registerUndoRedoWrite, registerUndoRedoWrite).call(this, changes, source, false);
1513
+ return;
1514
+ }
1515
+ // Skip HF re-sync when we are writing back to HOT after a moveCells HF operation.
1516
+ if (_class_private_field_get(this, _moveCellsSyncPending)) {
1080
1517
  return;
1081
1518
  }
1082
1519
  const dependentCells = [];
@@ -1168,30 +1605,121 @@ var /**
1168
1605
  if (isBlockedSource(source)) {
1169
1606
  return;
1170
1607
  }
1171
- const descendingHfRows = this.rowAxisSyncer.getRemovedHfIndexes().sort((a, b)=>b - a); // sort numeric values descending
1608
+ const removedSpans = coalesceIndexesToSpans(this.rowAxisSyncer.getRemovedHfIndexes());
1172
1609
  const changes = this.engine.batch(()=>{
1173
- descendingHfRows.forEach((hfRow)=>{
1174
- this.engine.removeRows(this.sheetId, [
1175
- hfRow,
1176
- 1
1177
- ]);
1178
- });
1610
+ _class_private_method_get(this, _removeSpansFromEngine, removeSpansFromEngine).call(this, removedSpans, 'removeRows');
1179
1611
  });
1180
1612
  this.renderDependentSheets(changes);
1181
1613
  }), _class_private_field_set(this, _onAfterRemoveCol, (col, amount, physicalColumns, source)=>{
1182
1614
  if (isBlockedSource(source)) {
1183
1615
  return;
1184
1616
  }
1185
- const descendingHfColumns = this.columnAxisSyncer.getRemovedHfIndexes().sort((a, b)=>b - a); // sort numeric values descending
1617
+ const removedSpans = coalesceIndexesToSpans(this.columnAxisSyncer.getRemovedHfIndexes());
1186
1618
  const changes = this.engine.batch(()=>{
1187
- descendingHfColumns.forEach((hfColumn)=>{
1188
- this.engine.removeColumns(this.sheetId, [
1189
- hfColumn,
1190
- 1
1191
- ]);
1192
- });
1619
+ _class_private_method_get(this, _removeSpansFromEngine, removeSpansFromEngine).call(this, removedSpans, 'removeColumns');
1193
1620
  });
1194
1621
  this.renderDependentSheets(changes);
1622
+ }), _class_private_field_set(this, _onBeforeMoveCells, (sourceRange, targetTopLeft, isCopy)=>{
1623
+ if (!isCellRangeLike(sourceRange)) {
1624
+ _class_private_field_set(this, _pendingMoveCells, null);
1625
+ return false;
1626
+ }
1627
+ if (!this.engine || this.sheetId === null) {
1628
+ return;
1629
+ }
1630
+ const topStart = sourceRange.getTopStartCorner();
1631
+ const bottomEnd = sourceRange.getBottomEndCorner();
1632
+ const fromRow = topStart.row;
1633
+ const fromCol = topStart.col;
1634
+ const toRow = bottomEnd.row;
1635
+ const toCol = bottomEnd.col;
1636
+ const targetRow = targetTopLeft.row;
1637
+ const targetCol = targetTopLeft.col;
1638
+ // The engine operates on a single HF rectangle built from the mapped corners below. That is
1639
+ // only equivalent to the visual operation when every visual index in all four spans maps to
1640
+ // consecutive HF indexes. With Filters/TrimRows the HF sheet still contains the trimmed rows,
1641
+ // and sorting or manual move permutes the order — a rectangle would then move cells the grid
1642
+ // never touches, desyncing the engine from the data source. Veto instead.
1643
+ if (!_class_private_method_get(this, _mapsToContiguousHfBlock, mapsToContiguousHfBlock).call(this, this.rowAxisSyncer, fromRow, toRow) || !_class_private_method_get(this, _mapsToContiguousHfBlock, mapsToContiguousHfBlock).call(this, this.columnAxisSyncer, fromCol, toCol) || !_class_private_method_get(this, _mapsToContiguousHfBlock, mapsToContiguousHfBlock).call(this, this.rowAxisSyncer, targetRow, targetRow + (toRow - fromRow)) || !_class_private_method_get(this, _mapsToContiguousHfBlock, mapsToContiguousHfBlock).call(this, this.columnAxisSyncer, targetCol, targetCol + (toCol - fromCol))) {
1644
+ _class_private_field_set(this, _pendingMoveCells, null);
1645
+ return false;
1646
+ }
1647
+ const hfFromRow = this.rowAxisSyncer.getHfIndexFromVisualIndex(fromRow);
1648
+ const hfFromCol = this.columnAxisSyncer.getHfIndexFromVisualIndex(fromCol);
1649
+ const hfToRow = this.rowAxisSyncer.getHfIndexFromVisualIndex(toRow);
1650
+ const hfToCol = this.columnAxisSyncer.getHfIndexFromVisualIndex(toCol);
1651
+ const hfTargetRow = this.rowAxisSyncer.getHfIndexFromVisualIndex(targetRow);
1652
+ const hfTargetCol = this.columnAxisSyncer.getHfIndexFromVisualIndex(targetCol);
1653
+ const source = {
1654
+ start: {
1655
+ sheet: this.sheetId,
1656
+ row: hfFromRow,
1657
+ col: hfFromCol
1658
+ },
1659
+ end: {
1660
+ sheet: this.sheetId,
1661
+ row: hfToRow,
1662
+ col: hfToCol
1663
+ }
1664
+ };
1665
+ const dest = {
1666
+ sheet: this.sheetId,
1667
+ row: hfTargetRow,
1668
+ col: hfTargetCol
1669
+ };
1670
+ if (!isCopy && !this.engine.isItPossibleToMoveCells(source, dest)) {
1671
+ _class_private_field_set(this, _pendingMoveCells, null);
1672
+ return false;
1673
+ }
1674
+ if (isCopy) {
1675
+ // Pre-check the paste target for a COPY the same way isItPossibleToMoveCells guards a
1676
+ // MOVE (e.g. pasting over part of an array formula throws in `engine.paste`), so the
1677
+ // operation vetoes cleanly before the grid mutates instead of failing halfway through.
1678
+ const targetRegion = {
1679
+ start: dest,
1680
+ end: {
1681
+ sheet: this.sheetId,
1682
+ row: hfTargetRow + (hfToRow - hfFromRow),
1683
+ col: hfTargetCol + (hfToCol - hfFromCol)
1684
+ }
1685
+ };
1686
+ if (!this.engine.isItPossibleToSetCellContents(targetRegion)) {
1687
+ _class_private_field_set(this, _pendingMoveCells, null);
1688
+ return false;
1689
+ }
1690
+ }
1691
+ _class_private_field_set(this, _pendingMoveCells, {
1692
+ source,
1693
+ dest,
1694
+ isCopy,
1695
+ rect: {
1696
+ fromRow,
1697
+ fromCol,
1698
+ toRow,
1699
+ toCol,
1700
+ targetRow,
1701
+ targetCol,
1702
+ isCopy
1703
+ }
1704
+ });
1705
+ }), _class_private_field_set(this, _onAfterMoveCells, ()=>{
1706
+ const committed = _class_private_field_get(this, _committedMoveCells);
1707
+ const dependentCells = _class_private_field_get(this, _moveCellsChanges);
1708
+ // Consume the state on every run, including the ones that return early below, so a run without
1709
+ // a committed move behind it cannot pick up the previous operation's leftovers.
1710
+ _class_private_field_set(this, _committedMoveCells, null);
1711
+ _class_private_field_set(this, _moveCellsChanges, null);
1712
+ if (!this.engine || committed === null) {
1713
+ return;
1714
+ }
1715
+ // Sync HOT's source data with HF's updated state so that getDataAtCell returns
1716
+ // correct values for VALUE/EMPTY cells (formula cells are already served via modifyData).
1717
+ _class_private_method_get(this, _syncHotDataAfterMoveCells, syncHotDataAfterMoveCells).call(this, committed);
1718
+ // During undo/redo replay the engine step was skipped (dependentCells is null) and the
1719
+ // HOT re-render after undo/redo refreshes all dependent cells anyway.
1720
+ if (dependentCells !== null) {
1721
+ this.renderDependentSheets(dependentCells, true);
1722
+ }
1195
1723
  }), _class_private_field_set(this, _onAfterDetachChild, (parent, element, finalElementRowIndex)=>{
1196
1724
  _class_private_field_set(this, _internalOperationPending, true);
1197
1725
  const children = element.__children;
@@ -1223,8 +1751,11 @@ function exportChangeValue(change) {
1223
1751
  if (visualRow < 0 || visualColumn < 0) {
1224
1752
  return change;
1225
1753
  }
1226
- const cellMeta = this.hot.getCellMeta(visualRow, visualColumn, {
1227
- skipMetaExtension: true
1754
+ // The uncached read keeps the same no-extension semantics as the previous
1755
+ // `skipMetaExtension` read, without permanently materializing the cell meta.
1756
+ const cellMeta = this.hot._getMetaManager().getCellMetaUncached(this.hot.toPhysicalRow(visualRow) ?? visualRow, this.hot.toPhysicalColumn(visualColumn) ?? visualColumn, {
1757
+ visualRow,
1758
+ visualColumn
1228
1759
  });
1229
1760
  let newValue;
1230
1761
  if (cellMeta.type === 'date') {
@@ -1239,16 +1770,116 @@ function exportChangeValue(change) {
1239
1770
  return clone;
1240
1771
  }
1241
1772
  function updateSheetNameAndSheetId(sheetName) {
1242
- this.sheetName = sheetName;
1243
- this.sheetId = this.engine?.getSheetId(this.sheetName) ?? null;
1773
+ const sheetId = this.engine?.getSheetId(sheetName) ?? null;
1774
+ // Store the name the engine itself reports. The engine matches names without regard to case
1775
+ // but keeps the casing it was given, so the name passed here may differ from the engine's own.
1776
+ // Keeping them in step makes every exact-string reader of `sheetName` safe by construction.
1777
+ this.sheetName = (sheetId === null ? null : this.engine?.getSheetName(sheetId)) ?? sheetName;
1778
+ this.sheetId = sheetId;
1779
+ }
1780
+ function refreshHyperlinksSetting() {
1781
+ const pluginSettings = this.hot.getSettings()[PLUGIN_KEY];
1782
+ const wasEnabled = _class_private_field_get(this, _hyperlinksEnabled);
1783
+ _class_private_field_set(this, _hyperlinksEnabled, isFormulasSettingsObject(pluginSettings) && pluginSettings.hyperlinks === true);
1784
+ // Turning the option off is the moment to clean up, not every subsequent draw: a renderer that
1785
+ // leaves its previous DOM in place would keep an anchor that no later render pass rewrites.
1786
+ // Doing it here keeps the per-cell path free for the default, disabled case.
1787
+ if (wasEnabled && !_class_private_field_get(this, _hyperlinksEnabled)) {
1788
+ _class_private_method_get(this, _unwrapRenderedHyperlinks, unwrapRenderedHyperlinks).call(this);
1789
+ }
1790
+ }
1791
+ function unwrapRenderedHyperlinks() {
1792
+ this.hot.rootElement?.querySelectorAll(`a.${HYPERLINK_CLASS_NAME}`).forEach((link)=>_class_private_method_get(this, _unwrapLink, unwrapLink).call(this, link));
1793
+ }
1794
+ function unwrapLink(link) {
1795
+ const { parentNode } = link;
1796
+ while(link.firstChild){
1797
+ parentNode?.insertBefore(link.firstChild, link);
1798
+ }
1799
+ link.remove();
1800
+ }
1801
+ function unwrapHyperlink(TD) {
1802
+ // A cell rendered as plain text has no element children at all, which is the overwhelmingly
1803
+ // common case and the one that must not pay for a selector query on every render pass.
1804
+ if (TD.firstElementChild === null) {
1805
+ return;
1806
+ }
1807
+ let link = TD.querySelector(`a.${HYPERLINK_CLASS_NAME}`);
1808
+ while(link !== null){
1809
+ _class_private_method_get(this, _unwrapLink, unwrapLink).call(this, link);
1810
+ link = TD.querySelector(`a.${HYPERLINK_CLASS_NAME}`);
1811
+ }
1812
+ }
1813
+ function getHyperlinkHref(row, column) {
1814
+ if (this.sheetName === null || !this.engine?.doesSheetExist(this.sheetName) || !this.rowAxisSyncer || !this.columnAxisSyncer || !this.isFormulaCellType(row, column)) {
1815
+ return null;
1816
+ }
1817
+ const url = this.engine.getCellHyperlink({
1818
+ sheet: this.sheetId,
1819
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(row),
1820
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(column)
1821
+ });
1822
+ if (url === undefined) {
1823
+ return null;
1824
+ }
1825
+ const href = resolveHyperlinkUrl(url, this.hot.rootDocument.baseURI);
1826
+ if (href === null) {
1827
+ warnOnce(this, HYPERLINK_WARN_KEY, `A "HYPERLINK" formula points at a URL that Handsontable refuses to link to ("${url}"). ` + 'Only the "http", "https", "mailto" and "tel" schemes can be linked.');
1828
+ }
1829
+ return href;
1830
+ }
1831
+ function registerUndoRedoWrite(changes, source, coreValidatesWrite) {
1832
+ if (source !== 'UndoRedo.undo' && source !== 'UndoRedo.redo') {
1833
+ return;
1834
+ }
1835
+ if (!changes?.length) {
1836
+ return;
1837
+ }
1838
+ _class_private_field_set(this, _undoRedoWroteData, true);
1839
+ if (!coreValidatesWrite) {
1840
+ return;
1841
+ }
1842
+ changes.forEach(([visualRow, prop])=>{
1843
+ if (typeof prop !== 'string' && typeof prop !== 'number') {
1844
+ return;
1845
+ }
1846
+ const visualColumn = this.hot.propToCol(prop);
1847
+ if (!isNumeric(visualRow) || !isNumeric(visualColumn)) {
1848
+ return;
1849
+ }
1850
+ const hfRow = this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow);
1851
+ const hfColumn = this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn);
1852
+ // `-1` marks an index that is out of range or trimmed. Such an address matches no real engine
1853
+ // address, so keeping it would only risk colliding with a genuine dependent cell.
1854
+ if (hfRow === -1 || hfColumn === -1) {
1855
+ return;
1856
+ }
1857
+ _class_private_field_get(this, _undoRedoChangedCells).push({
1858
+ address: {
1859
+ row: hfRow,
1860
+ col: hfColumn,
1861
+ sheet: this.sheetId
1862
+ }
1863
+ });
1864
+ });
1865
+ }
1866
+ function validateUndoRedoDependentCells() {
1867
+ const dependentCells = _class_private_field_get(this, _undoRedoDependentCells);
1868
+ const changedCells = _class_private_field_get(this, _undoRedoChangedCells);
1869
+ const wroteData = _class_private_field_get(this, _undoRedoWroteData);
1870
+ _class_private_field_set(this, _undoRedoDependentCells, []);
1871
+ _class_private_field_set(this, _undoRedoChangedCells, []);
1872
+ _class_private_field_set(this, _undoRedoWroteData, false);
1873
+ if (wroteData && dependentCells.length) {
1874
+ this.validateDependentCells(dependentCells, changedCells);
1875
+ }
1244
1876
  }
1245
1877
  function getValueGetterValue1(row, column, value) {
1246
1878
  if (isObject(value) && value !== null) {
1247
1879
  const visualRow = this.hot.toVisualRow(row);
1248
1880
  const visualColumn = this.hot.toVisualColumn(column);
1249
- const cellMeta = this.hot.getCellMeta(visualRow, visualColumn);
1250
- const valueGetter = cellMeta.valueGetter;
1251
- value = getValueGetterValue(value, this.hot.getCellMeta(visualRow, visualColumn));
1881
+ const cellMeta = this.hot.getCellMetaTransient(visualRow, visualColumn);
1882
+ value = getValueGetterValue(value, cellMeta);
1252
1883
  if (value !== null && value !== undefined) {
1253
1884
  value = Object(value).toString();
1254
1885
  }
@@ -1290,3 +1921,67 @@ function getProcessedSourceDataArray(row, column, row2, column2) {
1290
1921
  return projected;
1291
1922
  });
1292
1923
  }
1924
+ function mapsToContiguousHfBlock(syncer, visualFrom, visualTo) {
1925
+ const hfBase = syncer.getHfIndexFromVisualIndex(visualFrom);
1926
+ if (hfBase < 0) {
1927
+ return false;
1928
+ }
1929
+ for(let offset = 1; offset <= visualTo - visualFrom; offset++){
1930
+ if (syncer.getHfIndexFromVisualIndex(visualFrom + offset) !== hfBase + offset) {
1931
+ return false;
1932
+ }
1933
+ }
1934
+ return true;
1935
+ }
1936
+ function syncHotDataAfterMoveCells(rect) {
1937
+ const { fromRow: srcFromRow, fromCol: srcFromCol, toRow: srcToRow, toCol: srcToCol, targetRow: tgtFromRow, targetCol: tgtFromCol, isCopy } = rect;
1938
+ const height = srcToRow - srcFromRow + 1;
1939
+ const width = srcToCol - srcFromCol + 1;
1940
+ // Build target values from HF serialized content (formula strings or raw values).
1941
+ const targetData = [];
1942
+ for(let r = 0; r < height; r++){
1943
+ const row = [];
1944
+ for(let c = 0; c < width; c++){
1945
+ const hfRow = this.rowAxisSyncer.getHfIndexFromVisualIndex(tgtFromRow + r);
1946
+ const hfCol = this.columnAxisSyncer.getHfIndexFromVisualIndex(tgtFromCol + c);
1947
+ const serialized = this.engine.getCellSerialized({
1948
+ sheet: this.sheetId,
1949
+ row: hfRow,
1950
+ col: hfCol
1951
+ });
1952
+ row.push(serialized ?? null);
1953
+ }
1954
+ targetData.push(row);
1955
+ }
1956
+ _class_private_field_set(this, _moveCellsSyncPending, true);
1957
+ try {
1958
+ if (!isCopy) {
1959
+ // Clear source cells in HOT's data first (HF already moved them out), so that an
1960
+ // overlapping source/target range does not null out cells the target write is about
1961
+ // to fill — the target data was already snapshotted from HF above.
1962
+ const nullRow = Array.from({
1963
+ length: width
1964
+ }).fill(null);
1965
+ const nullGrid = Array.from({
1966
+ length: height
1967
+ }, ()=>nullRow.slice());
1968
+ this.hot.populateFromArray(srcFromRow, srcFromCol, nullGrid, srcToRow, srcToCol, 'auto');
1969
+ }
1970
+ // Write target cells with HF-serialised content (formula strings preserved).
1971
+ // Use 'auto' source so UndoRedo does not record these writes as separate DataChangeActions
1972
+ // — they are part of the move and are covered by the MoveCellsAction in the undo stack.
1973
+ this.hot.populateFromArray(tgtFromRow, tgtFromCol, targetData, tgtFromRow + height - 1, tgtFromCol + width - 1, 'auto');
1974
+ } finally{
1975
+ _class_private_field_set(this, _moveCellsSyncPending, false);
1976
+ }
1977
+ }
1978
+ function removeSpansFromEngine(spans, engineMethodName) {
1979
+ for(let end = spans.length; end > 0; end -= REMOVAL_SPANS_CHUNK_SIZE){
1980
+ const chunk = spans.slice(Math.max(0, end - REMOVAL_SPANS_CHUNK_SIZE), end);
1981
+ if (engineMethodName === 'removeRows') {
1982
+ this.engine.removeRows(this.sheetId, ...chunk);
1983
+ } else {
1984
+ this.engine.removeColumns(this.sheetId, ...chunk);
1985
+ }
1986
+ }
1987
+ }