handsontable 18.0.0 → 18.1.0-rc7

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