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
package/core.js CHANGED
@@ -131,6 +131,7 @@ const _console = require("./helpers/console");
131
131
  const _errors = require("./helpers/errors");
132
132
  const _a11yAnnouncer = require("./utils/a11yAnnouncer");
133
133
  const _licenseNotification = require("./utils/licenseNotification");
134
+ const _licenseBranding = require("./utils/licenseBranding");
134
135
  const _valueAccessors = require("./utils/valueAccessors");
135
136
  const _engine = require("./themes/engine");
136
137
  const _layout = require("./core/layout");
@@ -190,10 +191,59 @@ let activeGuid = null;
190
191
  * @type {Map<string, Core>}
191
192
  */ const foreignHotInstances = new Map();
192
193
  /**
193
- * A set of deprecated feature names.
194
+ * Configuration options removed from the public API, with the version that removed them.
195
+ * Configuring one prints a one-time warning; the value is ignored.
194
196
  *
195
- * @type {Set<string>}
196
- */ const deprecationWarns = new Set();
197
+ * `persistentState` says 17.0.0, not 18.0.0: #12015 removed the plugin, its option, and its hooks
198
+ * in 17.0.0, and no published 17.x or 18.x package carries them. The 18.0.0 changelog entry for
199
+ * #12727 describes deleting a copy that the TypeScript conversion re-created on `develop` after
200
+ * 17.1.0 and that never shipped.
201
+ *
202
+ * `datePickerConfig` is deliberately absent: `DateEditor#prepare` already warns about it, and it
203
+ * also sees the per-cell forms that `warnAboutRemovedOptions` cannot.
204
+ *
205
+ * @type {ReadonlyArray<RemovedOption>}
206
+ */ const REMOVED_OPTIONS = [
207
+ {
208
+ name: 'persistentState',
209
+ version: '17.0.0',
210
+ migrationUrl: 'https://handsontable.com/docs/javascript-data-grid/changelog-17/'
211
+ },
212
+ {
213
+ name: 'correctFormat',
214
+ version: '18.0.0',
215
+ migrationUrl: 'https://handsontable.com/docs/javascript-data-grid/migration-from-17.1-to-18.0/'
216
+ }
217
+ ];
218
+ /**
219
+ * Warns once per removed option found anywhere in the passed settings.
220
+ *
221
+ * Scans the top level, every entry of an array-form `columns`, and every entry of the declarative
222
+ * `cell` array, because the removed options are not all global: `correctFormat` is a cell option,
223
+ * so `columns: [{ correctFormat: true }]` and `cell: [{ row, col, correctFormat: true }]` are its
224
+ * common forms, and a top-level-only check would leave those callers with a clean console and
225
+ * silently dropped date auto-correction.
226
+ *
227
+ * The remaining per-cell forms - a `cells` function, or meta set through `setCellMeta` - stay
228
+ * uncovered. Reaching them means inspecting resolved meta for every cell on every render, which
229
+ * costs more than the warning is worth.
230
+ *
231
+ * @param {object} settings Settings object passed to `updateSettings`.
232
+ */ function warnAboutRemovedOptions(settings) {
233
+ const columns = Array.isArray(settings.columns) ? settings.columns : [];
234
+ const cells = Array.isArray(settings.cell) ? settings.cell : [];
235
+ const scopes = [
236
+ settings,
237
+ ...columns,
238
+ ...cells
239
+ ];
240
+ REMOVED_OPTIONS.forEach(({ name, version, migrationUrl })=>{
241
+ const isUsed = scopes.some((scope)=>(0, _object.isObject)(scope) && (0, _mixed.isDefined)(scope[name]));
242
+ if (isUsed) {
243
+ (0, _console.removedWarnOnce)(`Core.removedOption.${name}`, `The "${name}" setting was removed in Handsontable ${version} and is ignored. ` + `See ${migrationUrl} for the migration path.`);
244
+ }
245
+ });
246
+ }
197
247
  function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
198
248
  let instance = this;
199
249
  const eventManager = new _eventManager.default(instance);
@@ -204,6 +254,12 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
204
254
  let focusGridManager;
205
255
  let viewportScroller;
206
256
  let firstRun = true;
257
+ // Guards the "colorScheme/density need the theme engine" warning so it is logged once per
258
+ // instance instead of on every `updateSettings()` call that carries the options.
259
+ let themeOverridesWarningShown = false;
260
+ // Set only when the table is initialized while invisible (see the `init` method). Kept in the closure, not on
261
+ // the instance, because `destroy` nulls every instance property before it could be read there.
262
+ let visibilityObserver = null;
207
263
  const mergedUserSettings = {
208
264
  ...userSettings.initialState,
209
265
  ...userSettings
@@ -295,6 +351,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
295
351
  'handsontable'
296
352
  ]);
297
353
  (0, _element.addClass)(this.rootWrapperElement, 'ht-root-wrapper');
354
+ if ((0, _element.isShadowRoot)(this.rootContainer.getRootNode())) {
355
+ (0, _element.addClass)(this.rootWrapperElement, 'ht-shadow-dom');
356
+ }
298
357
  (0, _element.addClass)(this.rootSlotTopElement, 'ht-slot-top');
299
358
  (0, _element.addClass)(this.rootGridElement, 'ht-grid');
300
359
  (0, _element.addClass)(this.rootGridContentElement, 'ht-grid-content');
@@ -493,6 +552,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
493
552
  const editor = instance.getActiveEditor();
494
553
  return editor ? editor.isOpened() : false;
495
554
  },
555
+ isPluginEnabled: (pluginName)=>instance.getPlugin(pluginName)?.enabled === true,
496
556
  countRenderableColumns: ()=>instance.view.countRenderableColumns(),
497
557
  countRenderableRows: ()=>instance.view.countRenderableRows(),
498
558
  countRowHeaders: ()=>instance.countRowHeaders(),
@@ -640,8 +700,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
640
700
  * format `[[index, amount], [index, amount]...]` this can be used to remove
641
701
  * non-consecutive columns or rows in one call.
642
702
  * @param {number} [amount=1] Amount of rows or columns to remove.
643
- * @param {string} [source] Optional. Source of hook runner.
644
- * @param {boolean} [keepEmptyRows] Optional. Flag for preventing deletion of empty rows.
703
+ * @param {string} [source] Optional. Source indicator passed to related hooks.
704
+ * @param {boolean} [keepEmptyRows] Optional. Flag for skipping the post-alter empty row and column adjustment.
645
705
  */ alter (action, index, amount = 1, source, keepEmptyRows) {
646
706
  const skipAlter = instance.runHooks('beforeAlter', action, index, amount, source, keepEmptyRows);
647
707
  if (skipAlter === false) {
@@ -699,6 +759,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
699
759
  if (Number.isInteger(groupIndex)) {
700
760
  groupIndex = Math.max(groupIndex - offset, 0);
701
761
  }
762
+ const totalRowsBefore = instance.countRows();
702
763
  // TODO: for datamap.removeRow index should be passed as it is (with undefined and null values). If not, the logic
703
764
  // inside the datamap.removeRow breaks the removing functionality.
704
765
  const wasRemoved = datamap.removeRow(groupIndex, groupAmount, source);
@@ -717,8 +778,22 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
717
778
  tableMeta.fixedRowsTop -= Math.min(groupAmount, fixedRowsTop - calcIndex);
718
779
  }
719
780
  const fixedRowsBottom = tableMeta.fixedRowsBottom;
720
- if (fixedRowsBottom && calcIndex >= totalRows - fixedRowsBottom) {
721
- tableMeta.fixedRowsBottom -= Math.min(groupAmount, fixedRowsBottom);
781
+ if (fixedRowsBottom) {
782
+ // Count how many of the removed rows belonged to the bottom fixed rows. Those rows occupied
783
+ // the `[totalRowsBefore - fixedRowsBottom, totalRowsBefore - 1]` range, so the boundary has
784
+ // to be compared with the row count from *before* the removal. Rows removed above that
785
+ // range keep the setting untouched (DEV-2551).
786
+ const removedRowsCount = totalRowsBefore - totalRows;
787
+ // With no index passed, `datamap.removeRow` takes the rows from the end, so the removal
788
+ // starts that many rows before the last one. `calcIndex` points at the last row then, not
789
+ // at the first removed one.
790
+ const firstRemovedRowIndex = Number.isInteger(groupIndex) ? calcIndex : Math.max(totalRowsBefore - removedRowsCount, 0);
791
+ const firstFixedRowIndex = totalRowsBefore - fixedRowsBottom;
792
+ const lastRemovedRowIndex = Math.min(firstRemovedRowIndex + removedRowsCount - 1, totalRowsBefore - 1);
793
+ const removedFixedRowsCount = lastRemovedRowIndex - Math.max(firstRemovedRowIndex, firstFixedRowIndex) + 1;
794
+ if (removedFixedRowsCount > 0) {
795
+ tableMeta.fixedRowsBottom -= Math.min(removedFixedRowsCount, fixedRowsBottom);
796
+ }
722
797
  }
723
798
  if (totalRows === 0) {
724
799
  selection.deselect();
@@ -781,7 +856,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
781
856
  }
782
857
  const fixedColumnsStart = tableMeta.fixedColumnsStart;
783
858
  if (fixedColumnsStart >= calcIndex + 1) {
784
- tableMeta.fixedColumnsStart -= Math.min(groupAmount, fixedColumnsStart - calcIndex);
859
+ // Since 12.0.0, the "fixedColumnsLeft" is replaced with the "fixedColumnsStart" option.
860
+ // However, keeping the old name still in effect. When both option names are used together,
861
+ // the error is thrown. To prevent that, the engine needs to modify the original option key
862
+ // to bypass the validation.
863
+ tableMeta._fixedColumnsStart -= Math.min(groupAmount, fixedColumnsStart - calcIndex);
785
864
  }
786
865
  if (Array.isArray(tableMeta.colHeaders)) {
787
866
  if (typeof physicalColumnIndex === 'undefined') {
@@ -847,9 +926,22 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
847
926
  }
848
927
  {
849
928
  let emptyCols = 0;
850
- // count currently empty cols
851
- if (minCols || minSpareCols) {
852
- emptyCols = instance.countEmptyCols(true);
929
+ const canCreateSpareCols = minSpareCols > 0 && !tableMeta.columns && instance.dataType === 'array';
930
+ // Count trailing empty columns, but only when the `minSpareCols` branch below can consume
931
+ // the result, and never beyond `minSpareCols` itself. Verifying that a column is empty
932
+ // scans every row of that column, and this method runs after every change batch - an
933
+ // uncapped count (the previous `countEmptyCols(true)` call) paid O(empty columns * rows)
934
+ // per edit and also ran when only `minCols` was set, where the result was never used.
935
+ if (canCreateSpareCols) {
936
+ for(let visualIndex = instance.countCols() - 1; visualIndex >= 0; visualIndex--){
937
+ if (!instance.isEmptyCol(visualIndex)) {
938
+ break;
939
+ }
940
+ emptyCols += 1;
941
+ if (emptyCols >= minSpareCols) {
942
+ break;
943
+ }
944
+ }
853
945
  }
854
946
  let nrOfColumns = instance.countCols();
855
947
  // should I add empty cols to meet minCols?
@@ -863,7 +955,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
863
955
  });
864
956
  }
865
957
  // should I add empty cols to meet minSpareCols?
866
- if (minSpareCols && !tableMeta.columns && instance.dataType === 'array' && emptyCols < minSpareCols) {
958
+ if (canCreateSpareCols && emptyCols < minSpareCols) {
867
959
  nrOfColumns = instance.countCols();
868
960
  const emptyColsMissing = minSpareCols - emptyCols;
869
961
  const colsToCreate = Math.min(emptyColsMissing, tableMeta.maxCols - nrOfColumns);
@@ -1001,7 +1093,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1001
1093
  clen = Math.max(colInputLength, colSelectionLength);
1002
1094
  }
1003
1095
  current.col = start.col;
1004
- cellMeta = instance.getCellMeta(current.row, current.col);
1096
+ // The transient read keeps a bulk paste/fill from permanently materializing one meta
1097
+ // object per target cell - this loop only reads (`skipRowOnPaste`, `skipColumnOnPaste`,
1098
+ // `readOnly`, `valueSetter`, `parsePastedValue`); the write itself goes through the
1099
+ // data layer.
1100
+ cellMeta = instance.getCellMetaTransient(current.row, current.col);
1005
1101
  if ((source === 'CopyPaste.paste' || source === 'Autofill.fill' || source === 'autofill.fill') && cellMeta.skipRowOnPaste) {
1006
1102
  skippedRow += 1;
1007
1103
  current.row += 1;
@@ -1015,7 +1111,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1015
1111
  if (end && current.col > end.col && colSelectionLength > colInputLength || !tableMeta.allowInsertColumn && current.col > instance.countCols() - 1 || current.col >= tableMeta.maxCols) {
1016
1112
  break;
1017
1113
  }
1018
- cellMeta = instance.getCellMeta(current.row, current.col);
1114
+ cellMeta = instance.getCellMetaTransient(current.row, current.col);
1019
1115
  if ((source === 'CopyPaste.paste' || source === 'Autofill.fill' || source === 'autofill.fill') && cellMeta.skipColumnOnPaste) {
1020
1116
  skippedColumn += 1;
1021
1117
  current.col += 1;
@@ -1138,7 +1234,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1138
1234
  const themeName = tableMeta.themeName;
1139
1235
  const rootContainerThemeClassName = (0, _themes.getThemeClassName)(instance.rootContainer);
1140
1236
  if ((0, _rootInstance.isRootInstance)(instance) && !rootContainerThemeClassName && ((0, _object.isObject)(theme) || !theme && !themeName)) {
1141
- initializeThemeManager(theme);
1237
+ initializeThemeManager(theme, readStoredThemeOverrides());
1142
1238
  }
1143
1239
  dataSource.setData(tableMeta.data);
1144
1240
  instance.runHooks('beforeInit');
@@ -1153,6 +1249,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1153
1249
  if ((0, _rootInstance.isRootInstance)(this)) {
1154
1250
  (0, _a11yAnnouncer.install)(instance.rootPortalElement);
1155
1251
  (0, _licenseNotification.initLicenseNotification)(instance);
1252
+ (0, _licenseBranding.initLicenseBranding)(instance);
1156
1253
  // Keep the edge slots (top, bottom) as wide as the table so their content
1157
1254
  // (toolbars, pagination, license notification) aligns with the grid.
1158
1255
  const lastEdgeWidths = {
@@ -1188,7 +1285,12 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1188
1285
  this.render();
1189
1286
  // Run the logic only if it's the table's initialization and the root element is not visible.
1190
1287
  if (!!firstRun && instance.rootElement.offsetParent === null) {
1191
- (0, _element.observeVisibilityChangeOnce)(instance.rootElement, ()=>{
1288
+ visibilityObserver = (0, _element.observeVisibilityChangeOnce)(instance.rootElement, ()=>{
1289
+ // A delivery carries the state from the moment its snapshot was taken, so it can arrive after the
1290
+ // instance is gone even though `destroy` disconnects the observer.
1291
+ if (!instance || instance.isDestroyed || !instance.view) {
1292
+ return;
1293
+ }
1192
1294
  // Update the spreader size cache before rendering.
1193
1295
  instance.view._wt.wtOverlays.updateLastSpreaderSize();
1194
1296
  instance.view.adjustElementsSize();
@@ -1202,11 +1304,85 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1202
1304
  instance.runHooks('afterInit');
1203
1305
  };
1204
1306
  /**
1307
+ * Reads the per-instance color scheme and density overrides from a settings object.
1308
+ *
1309
+ * Only the keys actually present are returned, so a missing key keeps the value already applied
1310
+ * instead of resetting it to the theme default.
1311
+ *
1312
+ * @param {object} settings - The settings object to read the overrides from.
1313
+ * @returns {object} The theme overrides object.
1314
+ */ function readThemeOverrides(settings) {
1315
+ const overrides = {};
1316
+ if ((0, _object.hasOwnProperty)(settings, 'colorScheme')) {
1317
+ overrides.colorScheme = settings.colorScheme;
1318
+ }
1319
+ if ((0, _object.hasOwnProperty)(settings, 'density')) {
1320
+ overrides.density = settings.density;
1321
+ }
1322
+ return overrides;
1323
+ }
1324
+ /**
1325
+ * Reads the color scheme and density currently configured on this instance.
1326
+ *
1327
+ * Unlike `readThemeOverrides()`, this reads the effective values rather than only the keys that
1328
+ * one payload carries. `updateSettings()` stores grid options on the global meta, which the table
1329
+ * meta inherits through its prototype, so an own-property check would miss them. Use this when
1330
+ * rebuilding a ThemeManager, which has to pick up options set by an earlier call.
1331
+ *
1332
+ * @returns {object} The theme overrides object.
1333
+ */ function readStoredThemeOverrides() {
1334
+ return {
1335
+ colorScheme: tableMeta.colorScheme,
1336
+ density: tableMeta.density
1337
+ };
1338
+ }
1339
+ /**
1340
+ * Applies the `colorScheme` and `density` options to the ThemeManager of this instance.
1341
+ *
1342
+ * The options are per-instance overrides, so the shared theme object stays untouched and other
1343
+ * grids using the same theme keep their own look.
1344
+ *
1345
+ * @param {object} settings - The settings object that may carry the overrides.
1346
+ * @param {boolean} init - `true` when called during initialization. The initial styles are
1347
+ * injected by the ThemeManager constructor, so nothing has to be refreshed in that case.
1348
+ * @returns {boolean} `true` when the overrides changed and `afterSetTheme` still has to run.
1349
+ */ function applyThemeOverrides(settings, init) {
1350
+ const overrides = readThemeOverrides(settings);
1351
+ if (!(0, _object.hasOwnProperty)(overrides, 'colorScheme') && !(0, _object.hasOwnProperty)(overrides, 'density')) {
1352
+ return false;
1353
+ }
1354
+ if (!instance.themeManager) {
1355
+ // Only complain when a value is actually asked for. Clearing the options is documented, and a
1356
+ // framework wrapper re-sends every prop on each render, so warning on key presence alone
1357
+ // would fill the console for grids that never used these options.
1358
+ const isValueRequested = !(0, _engine.isThemeOverrideEmpty)(overrides.colorScheme) || !(0, _engine.isThemeOverrideEmpty)(overrides.density);
1359
+ if (isValueRequested && !themeOverridesWarningShown) {
1360
+ themeOverridesWarningShown = true;
1361
+ (0, _console.warn)('The `colorScheme` and `density` options require the theme engine, so they have no ' + 'effect when the theme is enabled by a CSS class name. Pass a theme config object or a ' + '`ThemeBuilder` instance to the `theme` option, or remove the `ht-theme-*` class from ' + 'the container element to use the default theme.');
1362
+ }
1363
+ return false;
1364
+ }
1365
+ const hasChanged = instance.themeManager.setOverrides(overrides);
1366
+ if (!hasChanged || init) {
1367
+ return false;
1368
+ }
1369
+ // Clear the cache here so the render at the end of `updateSettings` measures the new sizes.
1370
+ // Rendering here as well would paint once with stale meta and then immediately paint again.
1371
+ instance.stylesHandler.clearCache();
1372
+ return true;
1373
+ }
1374
+ /**
1205
1375
  * Initializes the ThemeManager with the given theme configuration.
1206
1376
  *
1207
1377
  * @param {object|boolean} theme - The theme configuration object or `true` to use the default theme.
1208
- */ function initializeThemeManager(theme) {
1378
+ * @param {object} [overrides] - The per-instance color scheme and density overrides.
1379
+ */ function initializeThemeManager(theme, overrides) {
1209
1380
  let themeObject;
1381
+ // Tear the previous manager down first. Without this its `<style>` node stays in the wrapper,
1382
+ // and because a new manager prepends its own node the orphan ends up LATER in source order —
1383
+ // so at the same specificity the orphan's override rules win and the grid can never change or
1384
+ // reset a `colorScheme` or `density` that was set at construction time.
1385
+ instance.themeManager?.destroy();
1210
1386
  if (typeof theme === 'undefined') {
1211
1387
  if ((0, _themes1.hasTheme)('main')) {
1212
1388
  themeObject = (0, _themes1.getTheme)('main');
@@ -1221,7 +1397,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1221
1397
  }
1222
1398
  instance.themeManager = (0, _engine.createThemeManager)({
1223
1399
  hot: instance,
1224
- themeObject
1400
+ themeObject,
1401
+ overrides
1225
1402
  });
1226
1403
  }
1227
1404
  /**
@@ -1309,7 +1486,14 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1309
1486
  const visualCol = datamap.propToCol(prop);
1310
1487
  let cellProperties;
1311
1488
  if (Number.isInteger(visualCol)) {
1312
- cellProperties = instance.getCellMeta(row, visualCol);
1489
+ // The transient read keeps a bulk change set from permanently materializing one meta
1490
+ // object per changed cell while the validator is looked up. Cells that DO have a
1491
+ // validator switch to the eagerly stored meta object below - validation writes its
1492
+ // `valid` result on the meta, and that result must survive on the stored object.
1493
+ cellProperties = instance.getCellMetaTransient(row, visualCol);
1494
+ if (instance.getCellValidator(cellProperties)) {
1495
+ cellProperties = instance.getCellMeta(row, visualCol);
1496
+ }
1313
1497
  } else {
1314
1498
  // If there's no requested visual column, we can use the table meta as the cell properties when retrieving
1315
1499
  // the cell validator.
@@ -1344,7 +1528,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1344
1528
  *
1345
1529
  * @private
1346
1530
  * @param {Array} changes Array in form of [row, prop, oldValue, newValue].
1347
- * @param {string} source String that identifies how this change will be described in changes array (useful in onChange callback).
1531
+ * @param {string} source String that identifies how this change will be described in changes array (useful in {@link Hooks#afterChange} or {@link Hooks#beforeChange} callbacks).
1348
1532
  * @fires Hooks#beforeChangeRender
1349
1533
  * @fires Hooks#afterChange
1350
1534
  */ function applyChanges(changes, source) {
@@ -1358,8 +1542,13 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1358
1542
  continue;
1359
1543
  }
1360
1544
  if (tableMeta.allowInsertRow) {
1545
+ // Create the whole missing range in one call - one index-mapper insert and one hook
1546
+ // round instead of one per row. Creating row by row made a paste reaching far below
1547
+ // the last row quadratic in the gap size. The loop re-checks the count so a partial
1548
+ // creation (e.g. a `maxRows` clamp) is detected and the change is skipped.
1361
1549
  while(changes[i][0] > instance.countRows() - 1){
1362
- const { delta: numberOfCreatedRows } = datamap.createRow(undefined, undefined, {
1550
+ const missingRows = changes[i][0] - (instance.countRows() - 1);
1551
+ const { delta: numberOfCreatedRows } = datamap.createRow(undefined, missingRows, {
1363
1552
  source: 'auto'
1364
1553
  });
1365
1554
  if (numberOfCreatedRows === 0) {
@@ -1370,7 +1559,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1370
1559
  }
1371
1560
  if (instance.dataType === 'array' && (!tableMeta.columns || tableMeta.columns.length === 0) && tableMeta.allowInsertColumn) {
1372
1561
  while(Number(datamap.propToCol(changes[i][1])) > instance.countCols() - 1){
1373
- const { delta: numberOfCreatedColumns } = datamap.createCol(undefined, undefined, {
1562
+ const missingColumns = Number(datamap.propToCol(changes[i][1])) - (instance.countCols() - 1);
1563
+ const { delta: numberOfCreatedColumns } = datamap.createCol(undefined, missingColumns, {
1374
1564
  source: 'auto'
1375
1565
  });
1376
1566
  if (numberOfCreatedColumns === 0) {
@@ -1540,7 +1730,10 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1540
1730
  const visualColumn = datamap.propToCol(prop);
1541
1731
  let cellProperties;
1542
1732
  if (Number.isInteger(visualColumn)) {
1543
- cellProperties = instance.getCellMeta(row, visualColumn);
1733
+ // The transient read keeps a bulk change set (paste, fill, checkbox toggle over a large
1734
+ // selection) from permanently materializing one meta object per changed cell - the meta
1735
+ // is only read here (`valueSetter`).
1736
+ cellProperties = instance.getCellMetaTransient(row, visualColumn);
1544
1737
  } else {
1545
1738
  // If there's no requested visual column, we can use the table meta as the cell properties
1546
1739
  cellProperties = {
@@ -1562,7 +1755,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1562
1755
  * @param {number|Array} row Visual row index or array of changes in format `[[row, col, value],...]`.
1563
1756
  * @param {number} [column] Visual column index.
1564
1757
  * @param {string} [value] New value.
1565
- * @param {string} [source] String that identifies how this change will be described in the changes array (useful in afterChange or beforeChange callback). Set to 'edit' if left empty.
1758
+ * @param {string} [source] String that identifies how this change will be described in the changes array (useful in {@link Hooks#afterChange} or {@link Hooks#beforeChange} callbacks). Set to 'edit' if left empty.
1759
+ * @fires Hooks#beforeChange
1760
+ * @fires Hooks#afterChange
1566
1761
  */ this.setDataAtCell = function(row, column, value, source) {
1567
1762
  const input = setDataInputToArray(row, column, value);
1568
1763
  const changes = [];
@@ -1612,7 +1807,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1612
1807
  * @param {number|Array} row Visual row index or array of changes in format `[[row, prop, value], ...]`.
1613
1808
  * @param {string} prop Property name or the source string (e.g. `'first.name'` or `'0'`).
1614
1809
  * @param {string} value Value to be set.
1615
- * @param {string} [source] String that identifies how this change will be described in changes array (useful in onChange callback).
1810
+ * @param {string} [source] String that identifies how this change will be described in changes array (useful in {@link Hooks#afterChange} or {@link Hooks#beforeChange} callbacks).
1811
+ * @fires Hooks#beforeChange
1812
+ * @fires Hooks#afterChange
1616
1813
  */ this.setDataAtRowProp = function(row, prop, value, source) {
1617
1814
  const input = setDataInputToArray(row, prop, value);
1618
1815
  const changes = [];
@@ -1684,7 +1881,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1684
1881
  * @memberof Core#
1685
1882
  * @function destroyEditor
1686
1883
  * @param {boolean} [revertOriginal=false] If `true`, the previous value will be restored. Otherwise, the edited value will be saved.
1687
- * @param {boolean} [prepareEditorIfNeeded=true] If `true` the editor under the selected cell will be prepared to open.
1884
+ * @param {boolean} [prepareEditorIfNeeded=true] If `true`, the editor under the selected cell will be prepared to open.
1688
1885
  */ this.destroyEditor = function(revertOriginal = false, prepareEditorIfNeeded = true) {
1689
1886
  editorManager.closeEditor(revertOriginal);
1690
1887
  instance.view.render();
@@ -1858,8 +2055,10 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1858
2055
  *
1859
2056
  * @memberof Core#
1860
2057
  * @function emptySelectedCells
1861
- * @param {string} [source] String that identifies how this change will be described in the changes array (useful in afterChange or beforeChange callback). Set to 'edit' if left empty.
2058
+ * @param {string} [source] String that identifies how this change will be described in the changes array (useful in {@link Hooks#afterChange} or {@link Hooks#beforeChange} callbacks). Set to 'edit' if left empty.
1862
2059
  * @since 0.36.0
2060
+ * @fires Hooks#beforeChange
2061
+ * @fires Hooks#afterChange
1863
2062
  */ this.emptySelectedCells = function(source) {
1864
2063
  if (!selection.isSelected() || this.countRows() === 0 || this.countCols() === 0) {
1865
2064
  return;
@@ -1880,7 +2079,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1880
2079
  }
1881
2080
  const collectEmptyCellChanges = (row)=>{
1882
2081
  (0, _number.rangeEach)(fromColumn, toColumn, (column)=>{
1883
- if (!this.getCellMeta(row, column).readOnly) {
2082
+ // The transient read keeps clearing a large selection from permanently materializing
2083
+ // one meta object per cell - only `readOnly` is read here.
2084
+ if (!this.getCellMetaTransient(row, column).readOnly) {
1884
2085
  changes.push([
1885
2086
  row,
1886
2087
  column,
@@ -1982,7 +2183,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1982
2183
  * to the DOM. While rendering the table all cell renderers are recalled.
1983
2184
  *
1984
2185
  * Calling this method manually is not recommended. Handsontable tries to render itself by choosing the most
1985
- * optimal moments in its lifecycle.
2186
+ * optimal moments in its lifecycle. After [setCellMeta()](@/api/core.md#setcellmeta) changes visual cell
2187
+ * properties, call this method to apply them, or wrap multiple calls in [batch()](@/api/core.md#batch).
1986
2188
  *
1987
2189
  * @memberof Core#
1988
2190
  * @function render
@@ -2223,8 +2425,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2223
2425
  * @memberof Core#
2224
2426
  * @function updateData
2225
2427
  * @since 11.1.0
2226
- * @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data
2227
- * @param {string} [source] The source of the `updateData()` call
2428
+ * @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data.
2429
+ * @param {string} [source] The source of the `updateData()` call.
2228
2430
  * @fires Hooks#beforeUpdateData
2229
2431
  * @fires Hooks#afterUpdateData
2230
2432
  * @fires Hooks#afterChange
@@ -2265,8 +2467,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2265
2467
  *
2266
2468
  * @memberof Core#
2267
2469
  * @function loadData
2268
- * @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data
2269
- * @param {string} [source] The source of the `loadData()` call
2470
+ * @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data.
2471
+ * @param {string} [source] The source of the `loadData()` call.
2270
2472
  * @fires Hooks#beforeLoadData
2271
2473
  * @fires Hooks#afterLoadData
2272
2474
  * @fires Hooks#afterChange
@@ -2340,11 +2542,17 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2340
2542
  this.rowIndexMapper.initToLength(this.countSourceRows());
2341
2543
  };
2342
2544
  /**
2343
- * Returns the current data object (the same one that was passed by `data` configuration option or `loadData` method,
2344
- * unless some modifications have been applied (i.e. Sequence of rows/columns was changed, some row/column was skipped).
2345
- * If that's the case - use the {@link Core#getSourceData} method.).
2545
+ * Returns the current visual data as a 2D array.
2546
+ *
2547
+ * Unlike the source data (which may be an array of objects), `getData()` always
2548
+ * returns an array of arrays regardless of the original data format. The returned
2549
+ * data reflects the current visual state of the grid: rows and columns are in their
2550
+ * current visual order, after any sorting, filtering, or reordering.
2346
2551
  *
2347
- * Optionally you can provide cell range by defining `row`, `column`, `row2`, `column2` to get only a fragment of table data.
2552
+ * To retrieve the data in its original source format, use the {@link Core#getSourceData} method instead.
2553
+ *
2554
+ * Optionally you can provide a cell range by defining `row`, `column`, `row2`, `column2`
2555
+ * to get only a fragment of the data.
2348
2556
  *
2349
2557
  * @memberof Core#
2350
2558
  * @function getData
@@ -2352,7 +2560,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2352
2560
  * @param {number} [column] From visual column index.
2353
2561
  * @param {number} [row2] To visual row index.
2354
2562
  * @param {number} [column2] To visual column index.
2355
- * @returns {Array[]} Array with the data.
2563
+ * @returns {Array[]} A 2D array of cell values in the current visual order.
2356
2564
  * @example
2357
2565
  * ```js
2358
2566
  * // Get all data (in order how it is rendered in the table).
@@ -2422,11 +2630,19 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2422
2630
  * __Note__, that although the `updateSettings` method doesn't overwrite the previously declared settings, it might reset
2423
2631
  * the settings made post-initialization. (for example - ignore changes made using the columnResize feature).
2424
2632
  *
2425
- * Since 8.0.0 passing `columns` or `data` inside `settings` objects will result in resetting states corresponding to rows and columns
2426
- * (for example, row/column sequence, column width, row height, frozen columns etc.).
2633
+ * Passing `columns` inside the `settings` object resets the states corresponding to rows and columns
2634
+ * (for example, row/column sequence, column width, row height, frozen columns etc.). Passing `data` does not reset these states.
2635
+ *
2636
+ * After initialization, passing `data` calls [`updateData()`](@/api/core.md#updatedata) internally.
2637
+ * The resulting [`beforeUpdateData`](@/api/hooks.md#beforeupdatedata) and
2638
+ * [`afterUpdateData`](@/api/hooks.md#afterupdatedata) hooks receive `"updateSettings"` as their
2639
+ * `source`, while [`afterChange`](@/api/hooks.md#afterchange) receives `null` as its `changes`
2640
+ * argument and `"updateData"` as its `source`. If you call `updateSettings` with `data` inside
2641
+ * `afterChange`, check the hook's `source` to prevent an infinite loop.
2427
2642
  *
2428
- * Since 12.0.0 passing `data` inside `settings` objects no longer results in resetting states corresponding to rows and columns
2429
- * (for example, row/column sequence, column width, row height, frozen columns etc.).
2643
+ * Cell meta set imperatively through [[setCellMeta]] (for example, by the user or the context menu) is preserved across
2644
+ * `updateSettings`, even when `settings` includes `cell`, `cells`, or `columns`. On a direct conflict, a value re-stated
2645
+ * through the declarative `cell` option takes precedence over the preserved imperative value.
2430
2646
  *
2431
2647
  * Cell meta set imperatively through [[setCellMeta]] (for example, by the user or the context menu) is preserved across
2432
2648
  * `updateSettings`, even when `settings` includes `cell`, `cells`, or `columns`. On a direct conflict, a value re-stated
@@ -2463,6 +2679,10 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2463
2679
  if ((0, _mixed.isDefined)(settings.ganttChart)) {
2464
2680
  (0, _errors.throwWithCause)('Since 8.0.0 the "ganttChart" setting is no longer supported.');
2465
2681
  }
2682
+ warnAboutRemovedOptions(settings);
2683
+ // The `columns` option (or the state its function form reads) may change in this call - drop
2684
+ // getColHeader's index translation cache so it rebuilds against the updated settings.
2685
+ columnsSettingIndexes = null;
2466
2686
  if ((0, _mixed.isDefined)(settings.rowHeights) && (0, _mixed.isDefined)(settings.minRowHeights)) {
2467
2687
  (0, _console.warn)('Both `rowHeights` and `minRowHeights` are defined in your configuration. ' + 'As one is the alias of the other, only one of them can be used at a time. ' + '`rowHeights` will be used as the row height configuration.');
2468
2688
  }
@@ -2513,20 +2733,26 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2513
2733
  const currentThemeName = instance.getCurrentThemeName();
2514
2734
  // Use `theme` option if it's a string and differs from current theme (takes priority over `themeName`).
2515
2735
  if (themeOptionExists && typeof settings.theme === 'string' && currentThemeName !== settings.theme) {
2516
- instance.themeManager?.unmount();
2517
- instance.themeManager = null;
2736
+ // `destroy()`, not `unmount()`. Unmounting removes the style node but leaves the manager
2737
+ // subscribed to the shared theme object, so the next theme change re-injects its scoped
2738
+ // rules and the grid gets stuck on whatever override the dead manager still holds.
2739
+ instance.themeManager?.destroy();
2518
2740
  instance.useTheme(settings.theme);
2519
2741
  // Use `themeName` option if `theme` is not provided and the name differs from current theme.
2520
2742
  } else if (themeNameOptionExists && !themeOptionExists && currentThemeName !== settings.themeName) {
2521
- instance.themeManager?.unmount();
2522
- instance.themeManager = null;
2743
+ // `destroy()`, not `unmount()`. Unmounting removes the style node but leaves the manager
2744
+ // subscribed to the shared theme object, so the next theme change re-injects its scoped
2745
+ // rules and the grid gets stuck on whatever override the dead manager still holds.
2746
+ instance.themeManager?.destroy();
2523
2747
  tableMeta.theme = settings.themeName;
2524
2748
  tableMeta.themeName = undefined;
2525
2749
  instance.useTheme(settings.themeName);
2526
2750
  // Initialize or update the themeManager when theme is an object.
2527
2751
  } else if ((0, _rootInstance.isRootInstance)(instance) && !rootContainerThemeClassName && (0, _object.isObject)(settings.theme)) {
2528
2752
  if (instance.themeManager === null) {
2529
- initializeThemeManager(settings.theme);
2753
+ // Read the overrides from `tableMeta`, not from this payload. The options may have been
2754
+ // set by an earlier call, and the manager being rebuilt here starts with none of them.
2755
+ initializeThemeManager(settings.theme, readStoredThemeOverrides());
2530
2756
  instance.useTheme(instance.themeManager.getClassName());
2531
2757
  } else {
2532
2758
  let themeObject;
@@ -2540,6 +2766,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2540
2766
  }
2541
2767
  }
2542
2768
  }
2769
+ const themeOverridesChanged = applyThemeOverrides(settings, init);
2543
2770
  // Load data or create data map
2544
2771
  if (instance.runHooks('hasExternalDataSource') === true) {
2545
2772
  // When dataProvider is a complete server-backed config, ignore static data, the plugin loads rows.
@@ -2657,11 +2884,23 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2657
2884
  // width blocks ran) so partial updateSettings calls see the correct state.
2658
2885
  // When height IS set, the height block's `overflow: clip` shorthand handles both axes — leave
2659
2886
  // overflowX untouched to avoid breaking that shorthand.
2887
+ // Only clip for a definite width. A relative width (`100%`, other percentages, viewport units,
2888
+ // or a `calc()` that mixes them in) fills its container, and content wider than that scrolls
2889
+ // with the window — matching the long-standing behavior where the page gains a horizontal
2890
+ // scrollbar and every column stays reachable. Clipping those would silently hide the off-width
2891
+ // columns with no scrollbar. A definite width (`px`, `em`, `rem`, and other absolute lengths)
2892
+ // establishes a fixed box the table must not visually overflow, so it is clipped.
2660
2893
  // Browser compatibility: `overflow-x: clip` requires Safari 16+. On Safari 14.1–15.x it silently
2661
2894
  // falls back to `visible` (graceful degradation — pre-existing behavior, not a new regression).
2662
2895
  if (typeof settings.height !== 'undefined' || typeof settings.width !== 'undefined') {
2663
2896
  const effectiveHeight = instance.rootElement.style.height;
2664
2897
  const effectiveWidth = instance.rootElement.style.width;
2898
+ // Relative: percentages and viewport units resolve against an ancestor, so a `%` or a viewport
2899
+ // unit (`vw`/`vh`/`vmin`/`vmax`, and dynamic `dvh`/`svh`/`lvh` via the `vh` match) anywhere —
2900
+ // including inside `calc()` — marks the width as container-driven. No word boundaries: the unit
2901
+ // is preceded by digits (`100vw`), which are word characters, so `\bv` would never match.
2902
+ const isRelativeWidth = /%|v(?:w|h|min|max)/i.test(effectiveWidth);
2903
+ const isDefiniteWidth = effectiveWidth !== '' && effectiveWidth !== 'auto' && !isRelativeWidth;
2665
2904
  if (!effectiveHeight) {
2666
2905
  const currentOverflowX = instance.rootElement.style.overflowX;
2667
2906
  // Only manage the overflow-x we own (`clip`) or that is unset. Preserve a user-defined
@@ -2669,7 +2908,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2669
2908
  // by `clip`. Unlike `hidden`, `clip` creates no block formatting context and allows no
2670
2909
  // programmatic scroll.
2671
2910
  if (currentOverflowX === '' || currentOverflowX === 'clip') {
2672
- instance.rootElement.style.overflowX = effectiveWidth && effectiveWidth !== 'auto' ? 'clip' : '';
2911
+ instance.rootElement.style.overflowX = isDefiniteWidth ? 'clip' : '';
2673
2912
  }
2674
2913
  }
2675
2914
  }
@@ -2687,6 +2926,12 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2687
2926
  instance.render();
2688
2927
  instance.view._wt.wtOverlays.adjustElementsSize();
2689
2928
  }
2929
+ // Fired after the render above, so a listener reading cell sizes sees the new density. The
2930
+ // manager can be gone by now: an `afterUpdateSettings` listener is free to move the grid to a
2931
+ // class-name theme, which tears the engine down.
2932
+ if (themeOverridesChanged && instance.themeManager) {
2933
+ instance.runHooks('afterSetTheme', instance.themeManager.getClassName(), false);
2934
+ }
2690
2935
  if (!init && instance.view && (currentHeight === '' || height === '' || height === undefined) && currentHeight !== height) {
2691
2936
  instance.view._wt.wtOverlays.updateMainScrollableElements();
2692
2937
  }
@@ -2718,11 +2963,36 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2718
2963
  return null;
2719
2964
  };
2720
2965
  /**
2721
- * Returns the object settings.
2966
+ * Returns the current global grid settings object.
2967
+ *
2968
+ * The returned object contains the settings passed to the constructor or the most recent
2969
+ * `updateSettings()` call. It reflects the
2970
+ * [grid-level](@/guides/getting-started/configuration-options/configuration-options.md#set-grid-options)
2971
+ * configuration only.
2972
+ *
2973
+ * It does not include merged per-cell or per-column values. Configuration options cascade from
2974
+ * grid to column to cell (see
2975
+ * [Cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)).
2976
+ * To read the effective value for a specific cell, use [[getCellMeta]]. To read column-level meta, use [[getColumnMeta]].
2722
2977
  *
2723
2978
  * @memberof Core#
2724
2979
  * @function getSettings
2725
- * @returns {TableMeta} Object containing the current table settings.
2980
+ * @returns {TableMeta} Object containing the current global grid settings.
2981
+ * @example
2982
+ * ```js
2983
+ * const hot = new Handsontable(container, {
2984
+ * readOnly: false,
2985
+ * columns: (index) => ({
2986
+ * readOnly: index === 2 || index === 8,
2987
+ * }),
2988
+ * });
2989
+ *
2990
+ * // returns `false` (global grid-level setting)
2991
+ * hot.getSettings().readOnly;
2992
+ *
2993
+ * // returns `true` for column 2 (merged column and cell meta)
2994
+ * hot.getCellMeta(0, 2).readOnly;
2995
+ * ```
2726
2996
  */ this.getSettings = function() {
2727
2997
  return tableMeta;
2728
2998
  };
@@ -2777,8 +3047,10 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2777
3047
  * @param {number|number[]} [index] A visual index of the row/column before or after which the new row/column will be
2778
3048
  * inserted or removed. Can also be an array of arrays, in format `[[index, amount],...]`.
2779
3049
  * @param {number} [amount] The amount of rows or columns to be inserted or removed (default: `1`).
2780
- * @param {string} [source] Source indicator.
2781
- * @param {boolean} [keepEmptyRows] If set to `true`: prevents removing empty rows.
3050
+ * @param {string} [source] Source indicator passed to related hooks.
3051
+ * @param {boolean} [keepEmptyRows] If set to `true`, skips the automatic adjustment that normally adds empty rows
3052
+ * or columns after the operation to satisfy `minRows`, `minSpareRows`,
3053
+ * `minCols`, or `minSpareCols`.
2782
3054
  * @example
2783
3055
  * ```js
2784
3056
  * // above row 10 (by visual index), insert 1 new row
@@ -2798,9 +3070,23 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2798
3070
  * // remove 2 rows, starting from row 10 (by visual index)
2799
3071
  * hot.alter('remove_row', 10, 2);
2800
3072
  *
3073
+ * // remove 2 columns, starting from column 3 (by visual index)
3074
+ * hot.alter('remove_col', 3, 2);
3075
+ *
2801
3076
  * // remove 3 rows, starting from row 1 (by visual index)
2802
3077
  * // remove 2 rows, starting from row 5 (by visual index)
2803
3078
  * hot.alter('remove_row', [[1, 3], [5, 2]]);
3079
+ *
3080
+ * // pass a custom source string to hooks
3081
+ * hot.addHook('afterCreateRow', (index, amount, source) => {
3082
+ * if (source === 'inventory-import') {
3083
+ * // Run logic only for rows created by the inventory import.
3084
+ * }
3085
+ * });
3086
+ * hot.alter('insert_row_above', 0, 1, 'inventory-import');
3087
+ *
3088
+ * // remove a row without immediately adding empty rows required by `minRows` or `minSpareRows`
3089
+ * hot.alter('remove_row', 4, 1, 'inventory-cleanup', true);
2804
3090
  * ```
2805
3091
  */ this.alter = function(action, index, amount, source, keepEmptyRows) {
2806
3092
  grid.alter(action, index, amount, source, keepEmptyRows);
@@ -3076,9 +3362,14 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3076
3362
  const visualRow = instance.toVisualRow(changeRow);
3077
3363
  const visualColumn = instance.toVisualColumn(changeProp);
3078
3364
  if (Number.isInteger(visualColumn)) {
3079
- return instance.getCellMeta(visualRow, visualColumn);
3365
+ // The transient read keeps a bulk source-data write from permanently materializing one
3366
+ // meta object per changed cell - the meta only feeds the `valueSetter` and the
3367
+ // source-data validator, both read-only.
3368
+ return instance.getCellMetaTransient(visualRow, visualColumn);
3080
3369
  }
3081
- // If there's no requested visual column, we can use the table meta as the cell properties
3370
+ // If there's no requested visual column, we can use the table meta as the cell properties.
3371
+ // The snapshot lacks the per-cell coordinate properties, but every consumer here reads
3372
+ // settings-level keys only.
3082
3373
  return {
3083
3374
  ...Object.getPrototypeOf(tableMeta),
3084
3375
  ...tableMeta
@@ -3191,7 +3482,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3191
3482
  (0, _number.rangeEach)(Math.max(Math.min(rowStart, rowEnd), 0), Math.max(rowStart, rowEnd), (row)=>{
3192
3483
  let isTypeEqual = true;
3193
3484
  (0, _number.rangeEach)(Math.max(Math.min(columnStart, columnEnd), 0), Math.max(columnStart, columnEnd), (column)=>{
3194
- const cellType = instance.getCellMeta(row, column);
3485
+ const cellType = instance.getCellMetaTransient(row, column);
3195
3486
  currentType = cellType.type ?? null;
3196
3487
  if (previousType) {
3197
3488
  isTypeEqual = previousType === currentType;
@@ -3270,8 +3561,52 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3270
3561
  }
3271
3562
  };
3272
3563
  /**
3564
+ * Writes a configuration-derived cell meta value declaratively. The value is applied to the cell meta
3565
+ * (so it is retained while the cell is released from the viewport by the meta eviction), but is NOT
3566
+ * recorded as user-defined, so an `updateSettings` cache reset clears it and it is re-applied from the
3567
+ * current configuration - exactly like the `cell` option. Used by built-in plugins that derive cell
3568
+ * meta from their own configuration (for example ColumnSummary) and re-apply it on each update.
3569
+ *
3570
+ * Unlike the public `setCellMeta`, this does NOT fire `beforeSetCellMeta`/`afterSetCellMeta` and is
3571
+ * not vetoable: the write is plugin-internal render state the user never requested, so it must not
3572
+ * surface through public hooks or be blocked by a `beforeSetCellMeta` veto. This matches the direct
3573
+ * meta-object write these plugins used before the viewport meta eviction was introduced.
3574
+ *
3575
+ * Internal API: deliberately NOT declared on the public `HotInstance` type (`core/types.ts`), so it
3576
+ * is not exposed to third-party code or the published `.d.ts`. Built-in consumers reach it through a
3577
+ * local internal type (see `HotInstanceInternal` in the ColumnSummary plugin). Do not add it to
3578
+ * `HotInstance` - that would turn an implementation detail into a supported public API.
3579
+ *
3580
+ * @private
3581
+ * @memberof Core#
3582
+ * @function _setCellMetaDeclarative
3583
+ * @param {number} row Visual row index.
3584
+ * @param {number} column Visual column index.
3585
+ * @param {string} key The property name to set.
3586
+ * @param {*} value The value to write.
3587
+ */ this._setCellMetaDeclarative = function(row, column, key, value) {
3588
+ let physicalRow = row;
3589
+ let physicalColumn = column;
3590
+ if (row < instance.countRows()) {
3591
+ physicalRow = instance.toPhysicalRow(row);
3592
+ }
3593
+ if (column < instance.countCols()) {
3594
+ physicalColumn = instance.toPhysicalColumn(column);
3595
+ }
3596
+ metaManager.disableUserDefinedMetaRecording();
3597
+ try {
3598
+ metaManager.setCellMeta(physicalRow, physicalColumn, key, value);
3599
+ } finally{
3600
+ metaManager.enableUserDefinedMetaRecording();
3601
+ }
3602
+ };
3603
+ /**
3273
3604
  * Sets a property defined by the `key` property to the meta object of a cell corresponding to params `row` and `column`.
3274
3605
  *
3606
+ * This method updates internal cell metadata only. It does not repaint the grid. To reflect visual changes (such as
3607
+ * `className`, `type`, or `readOnly`), call [render()](@/api/core.md#render) afterward, or wrap multiple calls in
3608
+ * [batch()](@/api/core.md#batch).
3609
+ *
3275
3610
  * @memberof Core#
3276
3611
  * @function setCellMeta
3277
3612
  * @param {number} row Visual row index.
@@ -3308,6 +3643,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3308
3643
  /**
3309
3644
  * Returns the cell properties object for the given `row` and `column` coordinates.
3310
3645
  *
3646
+ * The returned object reflects the effective cell configuration after
3647
+ * [cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)
3648
+ * (grid, column, and cell levels). To read global grid settings only, use [[getSettings]].
3649
+ * To read column-level meta, use [[getColumnMeta]].
3650
+ *
3311
3651
  * @memberof Core#
3312
3652
  * @function getCellMeta
3313
3653
  * @param {number} row Visual row index.
@@ -3335,8 +3675,52 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3335
3675
  });
3336
3676
  };
3337
3677
  /**
3678
+ * Returns the cell properties object for the given `row` and `column` coordinates without
3679
+ * retaining it in the cell meta cache.
3680
+ *
3681
+ * Like [[getCellMeta]], the returned object reflects the effective cell configuration after
3682
+ * [cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)
3683
+ * and dynamic extension (the `cells` function and the `beforeGetCellMeta`/`afterGetCellMeta`
3684
+ * hooks run). Unlike `getCellMeta`, when the cell has no stored meta object the extension runs
3685
+ * on a temporary object that is not saved, so scanning many cells (for example, a whole column
3686
+ * or the entire dataset) does not permanently allocate one meta object per visited cell. Cells
3687
+ * that already carry stored meta (for example, written by [[setCellMeta]] or the `cell` option)
3688
+ * return their stored object, exactly as `getCellMeta` would.
3689
+ *
3690
+ * Use this method for read-only bulk scans. Do not write to the returned object - for cells
3691
+ * without stored meta the write lands on the temporary object and is lost; use `setCellMeta`
3692
+ * to persist values.
3693
+ *
3694
+ * @memberof Core#
3695
+ * @function getCellMetaTransient
3696
+ * @since 18.1.0
3697
+ * @param {number} row Visual row index.
3698
+ * @param {number} column Visual column index.
3699
+ * @returns {object} The cell properties object.
3700
+ * @fires Hooks#beforeGetCellMeta
3701
+ * @fires Hooks#afterGetCellMeta
3702
+ */ this.getCellMetaTransient = function(row, column) {
3703
+ let physicalRow = instance.toPhysicalRow(row);
3704
+ let physicalColumn = instance.toPhysicalColumn(column);
3705
+ if (physicalRow === null) {
3706
+ physicalRow = row;
3707
+ }
3708
+ if (physicalColumn === null) {
3709
+ physicalColumn = column;
3710
+ }
3711
+ return metaManager.getCellMetaTransient(physicalRow, physicalColumn, {
3712
+ visualRow: row,
3713
+ visualColumn: column
3714
+ });
3715
+ };
3716
+ /**
3338
3717
  * Returns the meta information for the provided column.
3339
3718
  *
3719
+ * The returned object reflects the column-level configuration after
3720
+ * [cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)
3721
+ * (grid and column levels). To read global grid settings only, use [[getSettings]].
3722
+ * To read the effective configuration for a specific cell, use [[getCellMeta]].
3723
+ *
3340
3724
  * @since 14.5.0
3341
3725
  * @memberof Core#
3342
3726
  * @function getColumnMeta
@@ -3541,12 +3925,27 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3541
3925
  continue;
3542
3926
  }
3543
3927
  waitingForValidator.addValidatorToQueue();
3544
- instance.validateCell(instance.getDataAtCell(i, j), instance.getCellMeta(i, j), (result)=>{
3928
+ // The transient read keeps a bulk validation from permanently materializing one meta
3929
+ // object per validated cell (O(rows x columns) retention). Cells with stored meta -
3930
+ // including every currently rendered cell - still receive their `valid` result on the
3931
+ // stored object, because the transient read returns the stored object for them.
3932
+ const row = i;
3933
+ const column = j;
3934
+ const cellMeta = instance.getCellMetaTransient(row, column);
3935
+ instance.validateCell(instance.getDataAtCell(row, column), cellMeta, (result)=>{
3545
3936
  if (typeof result !== 'boolean') {
3546
3937
  (0, _errors.throwWithCause)('Validation error: result is not boolean');
3547
3938
  }
3548
3939
  if (result === false) {
3549
3940
  waitingForValidator.valid = false;
3941
+ // A failed result written on a throwaway object would be lost - persist it on the
3942
+ // stored meta (a DIRECT write, exactly like the edit-path validation flow; NOT
3943
+ // `setCellMeta`, which would mark the property as user-persisted and change
3944
+ // updateSettings/eviction semantics). Only failures materialize, so retention stays
3945
+ // O(invalid cells); the eviction pass already keeps `valid === false` cells.
3946
+ instance.getCellMeta(row, column, {
3947
+ skipMetaExtension: true
3948
+ }).valid = false;
3550
3949
  }
3551
3950
  waitingForValidator.removeValidatorFormQueue();
3552
3951
  }, 'validateCells');
@@ -3612,6 +4011,13 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3612
4011
  return false;
3613
4012
  };
3614
4013
  /**
4014
+ * Caches the index translation that `getColHeader` derives from the `columns` option when that
4015
+ * option is a function: the source column indexes for which `columns(index)` returns a truthy
4016
+ * settings object. Only the membership array is cached — titles are still read live from the
4017
+ * `columns` function. Rebuilt when the function reference or the column count changes; cleared
4018
+ * by `updateSettings`.
4019
+ */ let columnsSettingIndexes = null;
4020
+ /**
3615
4021
  * Gets the values of column headers (if column headers are [enabled](@/api/options.md#colheaders)).
3616
4022
  *
3617
4023
  * To get an array with the values of all
@@ -3661,23 +4067,30 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3661
4067
  }
3662
4068
  let result = tableMeta.colHeaders;
3663
4069
  const columns = tableMeta.columns;
3664
- const translateVisualIndexToColumns = function(visualColumnIndex) {
3665
- const arr = [];
4070
+ const columnsFn = typeof columns === 'function' ? columns : null;
4071
+ const physicalColumn = instance.toPhysicalColumn(columnIndex);
4072
+ let columnSettings = null;
4073
+ if (columnsFn !== null) {
3666
4074
  const columnsLen = instance.countCols();
3667
- let index = 0;
3668
- for(; index < columnsLen; index++){
3669
- if ((0, _function.isFunction)(columns) && columns(index)) {
3670
- arr.push(index);
4075
+ if (columnsSettingIndexes === null || columnsSettingIndexes.columns !== columnsFn || columnsSettingIndexes.columnsLen !== columnsLen) {
4076
+ const indexes = [];
4077
+ for(let index = 0; index < columnsLen; index++){
4078
+ if (columnsFn(index)) {
4079
+ indexes.push(index);
4080
+ }
3671
4081
  }
4082
+ columnsSettingIndexes = {
4083
+ columns: columnsFn,
4084
+ columnsLen,
4085
+ indexes
4086
+ };
3672
4087
  }
3673
- return arr[visualColumnIndex];
3674
- };
3675
- const physicalColumn = instance.toPhysicalColumn(columnIndex);
3676
- const prop = translateVisualIndexToColumns(physicalColumn);
4088
+ columnSettings = columnsFn(columnsSettingIndexes.indexes[physicalColumn]) ?? null;
4089
+ }
3677
4090
  if (tableMeta.colHeaders === false) {
3678
4091
  result = null;
3679
- } else if (columns && (0, _function.isFunction)(columns) && columns(prop) && columns(prop).title) {
3680
- result = columns(prop).title;
4092
+ } else if (columnSettings && columnSettings.title) {
4093
+ result = columnSettings.title;
3681
4094
  } else if (columns && !(0, _function.isFunction)(columns) && columns[physicalColumn] && columns[physicalColumn].title) {
3682
4095
  result = columns[physicalColumn].title;
3683
4096
  } else if (Array.isArray(tableMeta.colHeaders) && tableMeta.colHeaders[physicalColumn] !== undefined) {
@@ -3850,7 +4263,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3850
4263
  * @returns {number} Returns -1 if table is not visible.
3851
4264
  */ this.countRenderedRows = function() {
3852
4265
  const view = instance.view;
3853
- return view._wt.drawn ? view._wt.wtTable.getRenderedRowsCount() : -1;
4266
+ return view?._wt.drawn ? view._wt.wtTable.getRenderedRowsCount() : -1;
3854
4267
  };
3855
4268
  /**
3856
4269
  * Returns the number of rendered rows that are only visible in the table viewport.
@@ -3861,7 +4274,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3861
4274
  * @returns {number} Number of visible rows or -1.
3862
4275
  */ this.countVisibleRows = function() {
3863
4276
  const view = instance.view;
3864
- return view._wt.drawn ? view._wt.wtTable.getVisibleRowsCount() : -1;
4277
+ return view?._wt.drawn ? view._wt.wtTable.getVisibleRowsCount() : -1;
3865
4278
  };
3866
4279
  /**
3867
4280
  * Returns the number of rendered rows including columns that are partially or fully rendered
@@ -3872,7 +4285,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3872
4285
  * @returns {number} Returns -1 if table is not visible.
3873
4286
  */ this.countRenderedCols = function() {
3874
4287
  const view = instance.view;
3875
- return view._wt.drawn ? view._wt.wtTable.getRenderedColumnsCount() : -1;
4288
+ return view?._wt.drawn ? view._wt.wtTable.getRenderedColumnsCount() : -1;
3876
4289
  };
3877
4290
  /**
3878
4291
  * Returns the number of rendered columns that are only visible in the table viewport.
@@ -3883,7 +4296,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3883
4296
  * @returns {number} Number of visible columns or -1.
3884
4297
  */ this.countVisibleCols = function() {
3885
4298
  const view = instance.view;
3886
- return view._wt.drawn ? view._wt.wtTable.getVisibleColumnsCount() : -1;
4299
+ return view?._wt.drawn ? view._wt.wtTable.getVisibleColumnsCount() : -1;
3887
4300
  };
3888
4301
  /**
3889
4302
  * Returns the number of rendered row headers.
@@ -3893,7 +4306,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3893
4306
  * @function countRowHeaders
3894
4307
  * @returns {number} Number of row headers.
3895
4308
  */ this.countRowHeaders = function() {
3896
- return instance.view.getRowHeadersCount();
4309
+ const view = instance.view;
4310
+ return view ? view.getRowHeadersCount() : 0;
3897
4311
  };
3898
4312
  /**
3899
4313
  * Returns the number of rendered column headers.
@@ -3903,7 +4317,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3903
4317
  * @function countColHeaders
3904
4318
  * @returns {number} Number of column headers.
3905
4319
  */ this.countColHeaders = function() {
3906
- return instance.view.getColumnHeadersCount();
4320
+ const view = instance.view;
4321
+ return view ? view.getColumnHeadersCount() : 0;
3907
4322
  };
3908
4323
  /**
3909
4324
  * Returns the number of empty rows. If the optional ending parameter is `true`, returns the
@@ -4003,8 +4418,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4003
4418
  * @param {number|string} column A visual column index (`number`), or a column property's value (`string`).
4004
4419
  * @param {number} [endRow] If selecting a range: the visual row index of the last cell in the range.
4005
4420
  * @param {number|string} [endColumn] If selecting a range: the visual column index (or a column property's value) of the last cell in the range.
4006
- * @param {boolean} [scrollToCell=true] `true`: scroll the viewport to the newly-selected cells. `false`: keep the previous viewport.
4007
- * @param {boolean} [changeListener=true] `true`: switch the keyboard focus to Handsontable. `false`: keep the
4421
+ * @param {boolean} [scrollToCell=true] If `true`, scrolls the viewport to the newly-selected cells. If `false`, keeps the previous viewport.
4422
+ * @param {boolean} [changeListener=true] If `true`, switches the keyboard focus to Handsontable. If `false`, keeps the
4008
4423
  * previous keyboard focus. If an element outside Handsontable (such as a custom input) currently owns the browser
4009
4424
  * focus, it remains focused after the call.
4010
4425
  * @returns {boolean} `true`: the selection was successful, `false`: the selection failed.
@@ -4077,8 +4492,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4077
4492
  * @param {Array[]|CellRange[]} coords Visual coordinates,
4078
4493
  * passed either as an array of arrays (`[[rowStart, columnStart, rowEnd, columnEnd], ...]`)
4079
4494
  * or as an array of [`CellRange`](@/api/cellRange.md) objects.
4080
- * @param {boolean} [scrollToCell=true] `true`: scroll the viewport to the newly-selected cells. `false`: keep the previous viewport.
4081
- * @param {boolean} [changeListener=true] `true`: switch the keyboard focus to Handsontable. `false`: keep the
4495
+ * @param {boolean} [scrollToCell=true] If `true`, scrolls the viewport to the newly-selected cells. If `false`, keeps the previous viewport.
4496
+ * @param {boolean} [changeListener=true] If `true`, switches the keyboard focus to Handsontable. If `false`, keeps the
4082
4497
  * previous keyboard focus. If an element outside Handsontable (such as a custom input) currently owns the browser
4083
4498
  * focus, it remains focused after the call.
4084
4499
  * @returns {boolean} `true`: the selection was successful, `false`: the selection failed.
@@ -4129,8 +4544,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4129
4544
  * @memberof Core#
4130
4545
  * @since 0.38.0
4131
4546
  * @function selectColumns
4132
- * @param {number} startColumn The visual column index from which the selection starts.
4133
- * @param {number} [endColumn=startColumn] The visual column index to which the selection finishes. If `endColumn`
4547
+ * @param {number | string} startColumn The visual column index or column property from which the selection starts.
4548
+ * @param {number | string} [endColumn=startColumn] The visual column index or column property to which the selection finishes. If `endColumn`
4134
4549
  * is not defined the column defined by `startColumn` will be selected.
4135
4550
  * @param {number | { row: number, col: number } | CellCoords} [focusPosition=0] The argument allows changing the cell/header focus
4136
4551
  * position. The value can take visual row index from -N to N, where negative values point to the headers and positive
@@ -4205,16 +4620,15 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4205
4620
  * @since 0.38.2
4206
4621
  * @memberof Core#
4207
4622
  * @function selectAll
4208
- * @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers,
4209
- * `false` otherwise.
4210
- * @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column
4211
- * headers, `false` otherwise.
4623
+ * @param {boolean} [includeRowHeaders=false] If `true`, includes the row headers in the selection.
4624
+ * @param {boolean} [includeColumnHeaders=false] If `true`, includes the column headers in the selection.
4212
4625
  *
4213
- * @param {object} [options] Additional object with options. Since 14.0.0
4626
+ * @param {object} [options] Additional object with options. Since 14.0.0.
4214
4627
  * @param {{row: number, col: number} | boolean} [options.focusPosition] The argument allows changing the cell/header
4215
4628
  * focus position. The value takes an object with a `row` and `col` properties from -N to N, where
4216
4629
  * negative values point to the headers and positive values point to the cell range. If `false`, the focus
4217
- * position won't be changed. Example:
4630
+ * position won't be changed. When the {@link Options#navigableHeaders} option is disabled (the default), a
4631
+ * `focusPosition` that points to a header is relocated to the nearest cell in the data set. Example:
4218
4632
  * ```js
4219
4633
  * hot.selectAll(0, 0, {
4220
4634
  * focusPosition: { row: 0, col: 1 },
@@ -4223,7 +4637,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4223
4637
  * ```
4224
4638
  *
4225
4639
  * @param {boolean} [options.disableHeadersHighlight] If `true`, disables highlighting the headers even when
4226
- * the logical coordinates points on them.
4640
+ * the logical coordinates points on them. This only suppresses the highlight shown on headers of a fully-selected
4641
+ * row or column. It doesn't affect the focus indicator on the individual cell or header that holds the focus,
4642
+ * which stays visible even when {@link Options#navigableHeaders} moves the focus onto a header.
4227
4643
  */ this.selectAll = function(includeRowHeaders = true, includeColumnHeaders = includeRowHeaders, options) {
4228
4644
  viewportScroller.skipNextScrollCycle();
4229
4645
  selection.selectAll(includeRowHeaders, includeColumnHeaders, options);
@@ -4257,6 +4673,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4257
4673
  /**
4258
4674
  * Scroll viewport to coordinates specified by the `row` and/or `col` object properties.
4259
4675
  *
4676
+ * The object-based signature was introduced in v14.0.0. The positional arguments form is retained
4677
+ * for backward compatibility.
4678
+ *
4260
4679
  * ```js
4261
4680
  * // scroll the viewport to the visual row index (leave the horizontal scroll untouched)
4262
4681
  * hot.scrollViewportTo({ row: 50 });
@@ -4271,6 +4690,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4271
4690
  * }, () => {
4272
4691
  * // callback function executed after the viewport is scrolled
4273
4692
  * });
4693
+ *
4694
+ * // scroll the viewport using the backward-compatible positional arguments form
4695
+ * hot.scrollViewportTo(50, 50, true, true);
4274
4696
  * ```
4275
4697
  *
4276
4698
  * @memberof Core#
@@ -4376,6 +4798,10 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4376
4798
  */ this.destroy = function() {
4377
4799
  instance._clearTimeouts();
4378
4800
  instance._clearMicrotasks();
4801
+ // Drop the hidden-init visibility observer before the teardown below nulls the instance. Otherwise a
4802
+ // delivery queued while the table was becoming visible runs its callback on a destroyed instance.
4803
+ visibilityObserver?.disconnect();
4804
+ visibilityObserver = null;
4379
4805
  if (instance.view) {
4380
4806
  instance.view.destroy();
4381
4807
  }
@@ -4467,6 +4893,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4467
4893
  /**
4468
4894
  * Returns the first rendered row in the DOM (usually, it is not visible in the table's viewport).
4469
4895
  *
4896
+ * When the {@link MergeCells} plugin is enabled with its default `virtualized: false` setting, a merged
4897
+ * cell that crosses the viewport edge extends the rendered row range, so this method can return a row
4898
+ * index further from the viewport than usual. For the actual visible viewport, use
4899
+ * {@link Core#getFirstFullyVisibleRow} or {@link Core#getFirstPartiallyVisibleRow}.
4900
+ *
4470
4901
  * @since 14.6.0
4471
4902
  * @memberof Core#
4472
4903
  * @function getFirstRenderedVisibleRow
@@ -4477,6 +4908,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4477
4908
  /**
4478
4909
  * Returns the last rendered row in the DOM (usually, it is not visible in the table's viewport).
4479
4910
  *
4911
+ * When the {@link MergeCells} plugin is enabled with its default `virtualized: false` setting, a merged
4912
+ * cell that crosses the viewport edge extends the rendered row range, so this method can return a row
4913
+ * index further from the viewport than usual. For the actual visible viewport, use
4914
+ * {@link Core#getLastFullyVisibleRow} or {@link Core#getLastPartiallyVisibleRow}.
4915
+ *
4480
4916
  * @since 14.6.0
4481
4917
  * @memberof Core#
4482
4918
  * @function getLastRenderedVisibleRow
@@ -4487,6 +4923,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4487
4923
  /**
4488
4924
  * Returns the first rendered column in the DOM (usually, it is not visible in the table's viewport).
4489
4925
  *
4926
+ * When the {@link MergeCells} plugin is enabled with its default `virtualized: false` setting, a merged
4927
+ * cell that crosses the viewport edge extends the rendered column range, so this method can return a
4928
+ * column index further from the viewport than usual. For the actual visible viewport, use
4929
+ * {@link Core#getFirstFullyVisibleColumn} or {@link Core#getFirstPartiallyVisibleColumn}.
4930
+ *
4490
4931
  * @since 14.6.0
4491
4932
  * @memberof Core#
4492
4933
  * @function getFirstRenderedVisibleColumn
@@ -4497,6 +4938,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4497
4938
  /**
4498
4939
  * Returns the last rendered column in the DOM (usually, it is not visible in the table's viewport).
4499
4940
  *
4941
+ * When the {@link MergeCells} plugin is enabled with its default `virtualized: false` setting, a merged
4942
+ * cell that crosses the viewport edge extends the rendered column range, so this method can return a
4943
+ * column index further from the viewport than usual. For the actual visible viewport, use
4944
+ * {@link Core#getLastFullyVisibleColumn} or {@link Core#getLastPartiallyVisibleColumn}.
4945
+ *
4500
4946
  * @since 14.6.0
4501
4947
  * @memberof Core#
4502
4948
  * @function getLastRenderedVisibleColumn
@@ -4979,7 +5425,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4979
5425
  const themeName = mergedUserSettings.themeName;
4980
5426
  const rootContainerThemeClassName = (0, _themes.getThemeClassName)(instance.rootContainer);
4981
5427
  if ((0, _rootInstance.isRootInstance)(instance) && !rootContainerThemeClassName && ((0, _object.isObject)(theme) || !theme && !themeName)) {
4982
- initializeThemeManager(theme);
5428
+ initializeThemeManager(theme, readThemeOverrides(mergedUserSettings));
4983
5429
  }
4984
5430
  (0, _registry.getPluginsNames)().forEach((pluginName)=>{
4985
5431
  const PluginClass = (0, _registry.getPlugin)(pluginName);