handsontable 18.0.0 → 18.1.0-rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1238) hide show
  1. package/3rdparty/walkontable/src/axisSizing/axisSizeSource.d.mts +1 -0
  2. package/3rdparty/walkontable/src/axisSizing/axisSizeSource.d.ts +55 -0
  3. package/3rdparty/walkontable/src/axisSizing/axisSizeSource.js +15 -0
  4. package/3rdparty/walkontable/src/axisSizing/axisSizeSource.mjs +14 -0
  5. package/3rdparty/walkontable/src/axisSizing/boxModel.d.mts +1 -0
  6. package/3rdparty/walkontable/src/axisSizing/boxModel.d.ts +32 -0
  7. package/3rdparty/walkontable/src/axisSizing/boxModel.js +45 -0
  8. package/3rdparty/walkontable/src/axisSizing/boxModel.mjs +33 -0
  9. package/3rdparty/walkontable/src/axisSizing/columnUtils.d.mts +2 -0
  10. package/3rdparty/walkontable/src/{utils/column.d.ts → axisSizing/columnUtils.d.ts} +12 -10
  11. package/3rdparty/walkontable/src/axisSizing/columnUtils.js +142 -0
  12. package/3rdparty/walkontable/src/axisSizing/columnUtils.mjs +137 -0
  13. package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.d.mts +1 -0
  14. package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.d.ts +58 -0
  15. package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.js +124 -0
  16. package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.mjs +114 -0
  17. package/3rdparty/walkontable/src/axisSizing/oversizedRows.d.mts +1 -0
  18. package/3rdparty/walkontable/src/axisSizing/oversizedRows.d.ts +162 -0
  19. package/3rdparty/walkontable/src/axisSizing/oversizedRows.js +424 -0
  20. package/3rdparty/walkontable/src/axisSizing/oversizedRows.mjs +522 -0
  21. package/3rdparty/walkontable/src/axisSizing/positionCache/index.d.ts +130 -0
  22. package/3rdparty/walkontable/src/axisSizing/positionCache/index.js +251 -0
  23. package/3rdparty/walkontable/src/axisSizing/positionCache/index.mjs +257 -0
  24. package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.d.mts +1 -0
  25. package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.d.ts +51 -0
  26. package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.js +116 -0
  27. package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.mjs +112 -0
  28. package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.d.mts +1 -0
  29. package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.d.ts +53 -0
  30. package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.js +199 -0
  31. package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.mjs +196 -0
  32. package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.d.mts +1 -0
  33. package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.d.ts +53 -0
  34. package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.js +40 -0
  35. package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.mjs +41 -0
  36. package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.d.mts +1 -0
  37. package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.d.ts +47 -0
  38. package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.js +116 -0
  39. package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.mjs +110 -0
  40. package/3rdparty/walkontable/src/axisSizing/rowUtils.d.mts +2 -0
  41. package/3rdparty/walkontable/src/{utils/row.d.ts → axisSizing/rowUtils.d.ts} +11 -9
  42. package/3rdparty/walkontable/src/axisSizing/rowUtils.js +106 -0
  43. package/3rdparty/walkontable/src/axisSizing/rowUtils.mjs +101 -0
  44. package/3rdparty/walkontable/src/axisSizing/sizeGetters.d.mts +2 -0
  45. package/3rdparty/walkontable/src/axisSizing/sizeGetters.d.ts +84 -0
  46. package/3rdparty/walkontable/src/axisSizing/sizeGetters.js +102 -0
  47. package/3rdparty/walkontable/src/axisSizing/sizeGetters.mjs +92 -0
  48. package/3rdparty/walkontable/src/calculator/axisCalculation.d.ts +1 -1
  49. package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.d.ts +10 -0
  50. package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.js +10 -1
  51. package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.mjs +10 -1
  52. package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.d.ts +9 -0
  53. package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.js +9 -1
  54. package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.mjs +9 -1
  55. package/3rdparty/walkontable/src/calculator/viewportColumns.d.ts +1 -1
  56. package/3rdparty/walkontable/src/calculator/viewportRows.d.ts +1 -1
  57. package/3rdparty/walkontable/src/cell/coords.js +4 -9
  58. package/3rdparty/walkontable/src/cell/coords.mjs +4 -9
  59. package/3rdparty/walkontable/src/cell/range.d.ts +10 -0
  60. package/3rdparty/walkontable/src/cell/range.js +19 -15
  61. package/3rdparty/walkontable/src/cell/range.mjs +16 -12
  62. package/3rdparty/walkontable/src/core/_base.d.ts +21 -21
  63. package/3rdparty/walkontable/src/core/_base.js +47 -147
  64. package/3rdparty/walkontable/src/core/_base.mjs +17 -147
  65. package/3rdparty/walkontable/src/core/clone.d.ts +4 -14
  66. package/3rdparty/walkontable/src/core/clone.js +40 -5
  67. package/3rdparty/walkontable/src/core/clone.mjs +10 -5
  68. package/3rdparty/walkontable/src/core/core.d.ts +1 -5
  69. package/3rdparty/walkontable/src/core/core.js +41 -47
  70. package/3rdparty/walkontable/src/core/core.mjs +12 -48
  71. package/3rdparty/walkontable/src/domMeasure/geometryReader.d.mts +1 -0
  72. package/3rdparty/walkontable/src/domMeasure/geometryReader.d.ts +172 -0
  73. package/3rdparty/walkontable/src/domMeasure/geometryReader.js +19 -0
  74. package/3rdparty/walkontable/src/domMeasure/geometryReader.mjs +16 -0
  75. package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.d.mts +1 -0
  76. package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.d.ts +134 -0
  77. package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.js +195 -0
  78. package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.mjs +193 -0
  79. package/3rdparty/walkontable/src/event.d.ts +25 -12
  80. package/3rdparty/walkontable/src/event.js +96 -236
  81. package/3rdparty/walkontable/src/event.mjs +95 -236
  82. package/3rdparty/walkontable/src/facade/core.d.ts +6 -6
  83. package/3rdparty/walkontable/src/index.d.ts +1 -1
  84. package/3rdparty/walkontable/src/index.js +10 -21
  85. package/3rdparty/walkontable/src/index.mjs +1 -1
  86. package/3rdparty/walkontable/src/overlay/index.d.ts +6 -6
  87. package/3rdparty/walkontable/src/overlay/index.js +11 -11
  88. package/3rdparty/walkontable/src/overlay/index.mjs +6 -6
  89. package/3rdparty/walkontable/src/overlay/overlays.d.ts +375 -0
  90. package/3rdparty/walkontable/src/overlay/overlays.js +605 -0
  91. package/3rdparty/walkontable/src/overlay/overlays.mjs +594 -0
  92. package/3rdparty/walkontable/src/overlay/{_base.d.ts → regions/_base.d.ts} +65 -16
  93. package/3rdparty/walkontable/src/overlay/{_base.js → regions/_base.js} +155 -50
  94. package/3rdparty/walkontable/src/overlay/{_base.mjs → regions/_base.mjs} +158 -47
  95. package/3rdparty/walkontable/src/overlay/regions/bottomInlineStartCornerOverlay.d.mts +1 -0
  96. package/3rdparty/walkontable/src/overlay/{bottomInlineStartCorner.d.ts → regions/bottomInlineStartCornerOverlay.d.ts} +5 -10
  97. package/3rdparty/walkontable/src/overlay/{bottomInlineStartCorner.js → regions/bottomInlineStartCornerOverlay.js} +18 -20
  98. package/3rdparty/walkontable/src/overlay/{bottomInlineStartCorner.mjs → regions/bottomInlineStartCornerOverlay.mjs} +18 -20
  99. package/3rdparty/walkontable/src/overlay/regions/bottomOverlay.d.mts +1 -0
  100. package/3rdparty/walkontable/src/overlay/{bottom.d.ts → regions/bottomOverlay.d.ts} +16 -11
  101. package/3rdparty/walkontable/src/overlay/{bottom.js → regions/bottomOverlay.js} +111 -66
  102. package/3rdparty/walkontable/src/overlay/{bottom.mjs → regions/bottomOverlay.mjs} +111 -66
  103. package/3rdparty/walkontable/src/overlay/regions/inlineStartOverlay.d.mts +1 -0
  104. package/3rdparty/walkontable/src/overlay/{inlineStart.d.ts → regions/inlineStartOverlay.d.ts} +17 -11
  105. package/3rdparty/walkontable/src/overlay/{inlineStart.js → regions/inlineStartOverlay.js} +120 -67
  106. package/3rdparty/walkontable/src/overlay/{inlineStart.mjs → regions/inlineStartOverlay.mjs} +120 -67
  107. package/3rdparty/walkontable/src/overlay/regions/topInlineStartCornerOverlay.d.mts +1 -0
  108. package/3rdparty/walkontable/src/overlay/{topInlineStartCorner.d.ts → regions/topInlineStartCornerOverlay.d.ts} +5 -10
  109. package/3rdparty/walkontable/src/overlay/{topInlineStartCorner.js → regions/topInlineStartCornerOverlay.js} +13 -16
  110. package/3rdparty/walkontable/src/overlay/{topInlineStartCorner.mjs → regions/topInlineStartCornerOverlay.mjs} +13 -16
  111. package/3rdparty/walkontable/src/overlay/regions/topOverlay.d.mts +1 -0
  112. package/3rdparty/walkontable/src/overlay/{top.d.ts → regions/topOverlay.d.ts} +32 -11
  113. package/3rdparty/walkontable/src/overlay/{top.js → regions/topOverlay.js} +161 -77
  114. package/3rdparty/walkontable/src/overlay/{top.mjs → regions/topOverlay.mjs} +161 -77
  115. package/3rdparty/walkontable/src/overlay/resizeMonitor.d.mts +1 -0
  116. package/3rdparty/walkontable/src/overlay/resizeMonitor.d.ts +49 -0
  117. package/3rdparty/walkontable/src/overlay/resizeMonitor.js +149 -0
  118. package/3rdparty/walkontable/src/overlay/resizeMonitor.mjs +148 -0
  119. package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.d.mts +1 -0
  120. package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.d.ts +62 -0
  121. package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.js +283 -0
  122. package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.mjs +288 -0
  123. package/3rdparty/walkontable/src/overlay/scroll/scrollSync.d.mts +1 -0
  124. package/3rdparty/walkontable/src/overlay/scroll/scrollSync.d.ts +176 -0
  125. package/3rdparty/walkontable/src/overlay/scroll/scrollSync.js +542 -0
  126. package/3rdparty/walkontable/src/overlay/scroll/scrollSync.mjs +550 -0
  127. package/3rdparty/walkontable/src/overlay/spreaderSize.d.mts +1 -0
  128. package/3rdparty/walkontable/src/overlay/spreaderSize.d.ts +67 -0
  129. package/3rdparty/walkontable/src/overlay/spreaderSize.js +173 -0
  130. package/3rdparty/walkontable/src/overlay/spreaderSize.mjs +174 -0
  131. package/3rdparty/walkontable/src/{stickyScrollStrategy.d.ts → overlay/strategies/stickyScrollStrategy.d.ts} +33 -21
  132. package/3rdparty/walkontable/src/{stickyScrollStrategy.js → overlay/strategies/stickyScrollStrategy.js} +65 -53
  133. package/3rdparty/walkontable/src/{stickyScrollStrategy.mjs → overlay/strategies/stickyScrollStrategy.mjs} +63 -50
  134. package/3rdparty/walkontable/src/ports.d.mts +1 -0
  135. package/3rdparty/walkontable/src/ports.d.ts +54 -0
  136. package/3rdparty/walkontable/src/ports.js +23 -0
  137. package/3rdparty/walkontable/src/ports.mjs +24 -0
  138. package/3rdparty/walkontable/src/{renderer → render}/_base.d.ts +1 -1
  139. package/3rdparty/walkontable/src/{renderer → render}/cells.js +1 -1
  140. package/3rdparty/walkontable/src/{renderer → render}/cells.mjs +1 -1
  141. package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.d.ts +1 -0
  142. package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.js +41 -1
  143. package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.mjs +42 -2
  144. package/3rdparty/walkontable/src/render/index.d.mts +1 -0
  145. package/3rdparty/walkontable/src/{renderer → render}/index.d.ts +11 -3
  146. package/3rdparty/walkontable/src/{renderer → render}/index.js +13 -3
  147. package/3rdparty/walkontable/src/{renderer → render}/index.mjs +11 -1
  148. package/3rdparty/walkontable/src/{renderer → render}/rows.js +1 -1
  149. package/3rdparty/walkontable/src/{renderer → render}/rows.mjs +1 -1
  150. package/3rdparty/walkontable/src/render/tableRenderer.d.mts +1 -0
  151. package/3rdparty/walkontable/src/{renderer/table.d.ts → render/tableRenderer.d.ts} +12 -2
  152. package/3rdparty/walkontable/src/render/tableRenderer.js +375 -0
  153. package/3rdparty/walkontable/src/{renderer/table.mjs → render/tableRenderer.mjs} +152 -6
  154. package/3rdparty/walkontable/src/{scroll.d.ts → scroll/scroll.d.ts} +27 -10
  155. package/3rdparty/walkontable/src/{scroll.js → scroll/scroll.js} +104 -35
  156. package/3rdparty/walkontable/src/{scroll.mjs → scroll/scroll.mjs} +102 -32
  157. package/3rdparty/walkontable/src/selection/border/border.d.ts +313 -5
  158. package/3rdparty/walkontable/src/selection/border/border.js +861 -51
  159. package/3rdparty/walkontable/src/selection/border/border.mjs +863 -53
  160. package/3rdparty/walkontable/src/selection/border/types.d.ts +30 -0
  161. package/3rdparty/walkontable/src/selection/manager.js +242 -12
  162. package/3rdparty/walkontable/src/selection/manager.mjs +243 -13
  163. package/3rdparty/walkontable/src/selection/scanner.js +5 -12
  164. package/3rdparty/walkontable/src/selection/scanner.mjs +5 -12
  165. package/3rdparty/walkontable/src/settings/accessor.d.mts +2 -0
  166. package/3rdparty/walkontable/src/settings/accessor.d.ts +74 -0
  167. package/3rdparty/walkontable/src/settings/accessor.js +78 -0
  168. package/3rdparty/walkontable/src/settings/accessor.mjs +71 -0
  169. package/3rdparty/walkontable/src/settings/defaults.d.mts +1 -0
  170. package/3rdparty/walkontable/src/{settings.d.ts → settings/defaults.d.ts} +16 -77
  171. package/3rdparty/walkontable/src/settings/defaults.js +146 -0
  172. package/3rdparty/walkontable/src/settings/defaults.mjs +225 -0
  173. package/3rdparty/walkontable/src/settings/index.d.mts +1 -0
  174. package/3rdparty/walkontable/src/settings/index.d.ts +6 -0
  175. package/3rdparty/walkontable/src/settings/index.js +20 -0
  176. package/3rdparty/walkontable/src/settings/index.mjs +5 -0
  177. package/3rdparty/walkontable/src/table/baseTable.d.mts +2 -0
  178. package/3rdparty/walkontable/src/table/baseTable.d.ts +284 -0
  179. package/3rdparty/walkontable/src/table/baseTable.js +290 -0
  180. package/3rdparty/walkontable/src/table/baseTable.mjs +278 -0
  181. package/3rdparty/walkontable/src/table/cellAccess.d.mts +1 -0
  182. package/3rdparty/walkontable/src/table/cellAccess.d.ts +101 -0
  183. package/3rdparty/walkontable/src/table/cellAccess.js +238 -0
  184. package/3rdparty/walkontable/src/table/cellAccess.mjs +229 -0
  185. package/3rdparty/walkontable/src/table/domScaffold.d.mts +1 -0
  186. package/3rdparty/walkontable/src/table/domScaffold.d.ts +37 -0
  187. package/3rdparty/walkontable/src/table/domScaffold.js +145 -0
  188. package/3rdparty/walkontable/src/table/domScaffold.mjs +136 -0
  189. package/3rdparty/walkontable/src/table/drawCycle.d.mts +1 -0
  190. package/3rdparty/walkontable/src/table/drawCycle.d.ts +16 -0
  191. package/3rdparty/walkontable/src/table/drawCycle.js +405 -0
  192. package/3rdparty/walkontable/src/table/drawCycle.mjs +403 -0
  193. package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.d.mts +1 -0
  194. package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.d.ts +38 -0
  195. package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.js +15 -0
  196. package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.mjs +14 -0
  197. package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.d.ts +1 -1
  198. package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.js +1 -1
  199. package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.mjs +1 -1
  200. package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.d.ts +1 -1
  201. package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.d.ts +1 -1
  202. package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.js +1 -1
  203. package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.mjs +1 -1
  204. package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.d.mts +2 -0
  205. package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.d.ts +226 -0
  206. package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.js +251 -0
  207. package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.mjs +241 -0
  208. package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.d.mts +1 -0
  209. package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.d.ts +14 -0
  210. package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.js +196 -0
  211. package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.mjs +179 -0
  212. package/3rdparty/walkontable/src/table/regions/bottomInlineStartCornerTable.d.mts +2 -0
  213. package/3rdparty/walkontable/src/table/regions/bottomInlineStartCornerTable.d.ts +16 -0
  214. package/3rdparty/walkontable/src/table/{bottomInlineStartCorner.js → regions/bottomInlineStartCornerTable.js} +9 -12
  215. package/3rdparty/walkontable/src/table/regions/bottomInlineStartCornerTable.mjs +21 -0
  216. package/3rdparty/walkontable/src/table/regions/bottomTable.d.mts +2 -0
  217. package/3rdparty/walkontable/src/table/regions/bottomTable.d.ts +15 -0
  218. package/3rdparty/walkontable/src/table/regions/bottomTable.js +35 -0
  219. package/3rdparty/walkontable/src/table/regions/bottomTable.mjs +20 -0
  220. package/3rdparty/walkontable/src/table/regions/inlineStartTable.d.mts +2 -0
  221. package/3rdparty/walkontable/src/table/regions/inlineStartTable.d.ts +12 -0
  222. package/3rdparty/walkontable/src/table/regions/inlineStartTable.js +32 -0
  223. package/3rdparty/walkontable/src/table/regions/inlineStartTable.mjs +17 -0
  224. package/3rdparty/walkontable/src/table/regions/masterTable.d.mts +2 -0
  225. package/3rdparty/walkontable/src/table/{master.d.ts → regions/masterTable.d.ts} +4 -13
  226. package/3rdparty/walkontable/src/table/{master.js → regions/masterTable.js} +27 -57
  227. package/3rdparty/walkontable/src/table/{master.mjs → regions/masterTable.mjs} +26 -56
  228. package/3rdparty/walkontable/src/table/regions/topInlineStartCornerTable.d.mts +2 -0
  229. package/3rdparty/walkontable/src/table/regions/topInlineStartCornerTable.d.ts +16 -0
  230. package/3rdparty/walkontable/src/table/{topInlineStartCorner.js → regions/topInlineStartCornerTable.js} +9 -12
  231. package/3rdparty/walkontable/src/table/regions/topInlineStartCornerTable.mjs +21 -0
  232. package/3rdparty/walkontable/src/table/regions/topTable.d.mts +2 -0
  233. package/3rdparty/walkontable/src/table/regions/topTable.d.ts +15 -0
  234. package/3rdparty/walkontable/src/table/regions/topTable.js +35 -0
  235. package/3rdparty/walkontable/src/table/regions/topTable.mjs +20 -0
  236. package/3rdparty/walkontable/src/types.d.ts +7 -69
  237. package/3rdparty/walkontable/src/types.mjs +2 -1
  238. package/3rdparty/walkontable/src/utils/pointerToCoords.d.mts +1 -0
  239. package/3rdparty/walkontable/src/utils/{cellCoords.d.ts → pointerToCoords.d.ts} +24 -0
  240. package/3rdparty/walkontable/src/utils/pointerToCoords.js +181 -0
  241. package/3rdparty/walkontable/src/utils/pointerToCoords.mjs +186 -0
  242. package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.d.mts +1 -0
  243. package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.d.ts +40 -0
  244. package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.js +139 -0
  245. package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.mjs +131 -0
  246. package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.d.mts +1 -0
  247. package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.d.ts +133 -0
  248. package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.js +18 -0
  249. package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.mjs +18 -0
  250. package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.d.mts +1 -0
  251. package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.d.ts +17 -0
  252. package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.js +104 -0
  253. package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.mjs +99 -0
  254. package/3rdparty/walkontable/src/viewport/calculatorFactory.d.mts +1 -0
  255. package/3rdparty/walkontable/src/viewport/calculatorFactory.d.ts +84 -0
  256. package/3rdparty/walkontable/src/viewport/calculatorFactory.js +588 -0
  257. package/3rdparty/walkontable/src/viewport/calculatorFactory.mjs +601 -0
  258. package/3rdparty/walkontable/src/viewport/viewport.d.ts +267 -0
  259. package/3rdparty/walkontable/src/viewport/viewport.js +363 -0
  260. package/3rdparty/walkontable/src/viewport/viewport.mjs +355 -0
  261. package/3rdparty/walkontable/src/viewport/workspaceSize.d.mts +1 -0
  262. package/3rdparty/walkontable/src/viewport/workspaceSize.d.ts +59 -0
  263. package/3rdparty/walkontable/src/viewport/workspaceSize.js +284 -0
  264. package/3rdparty/walkontable/src/viewport/workspaceSize.mjs +282 -0
  265. package/3rdparty/walkontable/src/wire.d.mts +1 -0
  266. package/3rdparty/walkontable/src/wire.d.ts +81 -0
  267. package/3rdparty/walkontable/src/wire.js +56 -0
  268. package/3rdparty/walkontable/src/wire.mjs +56 -0
  269. package/LICENSE.txt +1 -1
  270. package/README.md +2 -2
  271. package/base.d.ts +10 -2
  272. package/base.js +2 -2
  273. package/base.mjs +2 -2
  274. package/cellTypes/checkboxType/accessors/valueSetter.d.ts +1 -1
  275. package/cellTypes/checkboxType/accessors/valueSetter.js +3 -1
  276. package/cellTypes/checkboxType/accessors/valueSetter.mjs +3 -1
  277. package/cellTypes/index.d.ts +3 -2
  278. package/cellTypes/index.js +9 -0
  279. package/cellTypes/index.mjs +5 -2
  280. package/cellTypes/intlDatetimeType/index.d.mts +1 -0
  281. package/cellTypes/intlDatetimeType/index.d.ts +1 -0
  282. package/cellTypes/intlDatetimeType/index.js +19 -0
  283. package/cellTypes/intlDatetimeType/index.mjs +1 -0
  284. package/cellTypes/intlDatetimeType/intlDatetimeType.d.mts +1 -0
  285. package/cellTypes/intlDatetimeType/intlDatetimeType.d.ts +16 -0
  286. package/cellTypes/intlDatetimeType/intlDatetimeType.js +31 -0
  287. package/cellTypes/intlDatetimeType/intlDatetimeType.mjs +15 -0
  288. package/cellTypes/multiSelectType/index.d.ts +1 -1
  289. package/cellTypes/multiSelectType/index.js +3 -0
  290. package/cellTypes/multiSelectType/index.mjs +1 -1
  291. package/cellTypes/multiSelectType/multiSelectType.d.ts +1 -0
  292. package/cellTypes/multiSelectType/multiSelectType.js +4 -0
  293. package/cellTypes/multiSelectType/multiSelectType.mjs +1 -0
  294. package/cellTypes/numericType/accessors/valueSetter.js +30 -2
  295. package/cellTypes/numericType/accessors/valueSetter.mjs +31 -3
  296. package/core/coordsMapper/rangeToRenderableMapper.js +5 -12
  297. package/core/coordsMapper/rangeToRenderableMapper.mjs +5 -12
  298. package/core/hooks/bucket.d.ts +40 -6
  299. package/core/hooks/bucket.js +113 -84
  300. package/core/hooks/bucket.mjs +118 -84
  301. package/core/hooks/constants.js +254 -16
  302. package/core/hooks/constants.mjs +254 -16
  303. package/core/hooks/index.js +28 -25
  304. package/core/hooks/index.mjs +28 -25
  305. package/core/layout/constants.d.ts +11 -0
  306. package/core/layout/constants.js +6 -0
  307. package/core/layout/constants.mjs +12 -0
  308. package/core/layout/domSlot.d.ts +3 -1
  309. package/core/layout/domSlot.js +21 -14
  310. package/core/layout/domSlot.mjs +21 -14
  311. package/core/layout/index.d.ts +2 -2
  312. package/core/layout/index.js +6 -0
  313. package/core/layout/index.mjs +2 -2
  314. package/core/layout/layoutManager.d.ts +13 -0
  315. package/core/layout/layoutManager.js +25 -13
  316. package/core/layout/layoutManager.mjs +26 -11
  317. package/core/settings.d.ts +59 -6
  318. package/core/types.d.ts +15 -1
  319. package/core/types.mjs +9 -0
  320. package/core.js +481 -85
  321. package/core.mjs +483 -87
  322. package/dataMap/dataMap.d.ts +3 -13
  323. package/dataMap/dataMap.js +101 -44
  324. package/dataMap/dataMap.mjs +102 -45
  325. package/dataMap/dataSource.js +4 -1
  326. package/dataMap/dataSource.mjs +4 -1
  327. package/dataMap/metaManager/index.d.ts +62 -8
  328. package/dataMap/metaManager/index.js +66 -0
  329. package/dataMap/metaManager/index.mjs +66 -0
  330. package/dataMap/metaManager/lazyFactoryMap.d.ts +68 -43
  331. package/dataMap/metaManager/lazyFactoryMap.js +490 -110
  332. package/dataMap/metaManager/lazyFactoryMap.mjs +504 -111
  333. package/dataMap/metaManager/metaLayers/cellMeta.d.ts +55 -8
  334. package/dataMap/metaManager/metaLayers/cellMeta.js +112 -17
  335. package/dataMap/metaManager/metaLayers/cellMeta.mjs +112 -17
  336. package/dataMap/metaManager/metaLayers/columnMeta.d.ts +2 -1
  337. package/dataMap/metaManager/metaLayers/columnMeta.js +1 -0
  338. package/dataMap/metaManager/metaLayers/columnMeta.mjs +1 -0
  339. package/dataMap/metaManager/metaSchema.js +712 -31
  340. package/dataMap/metaManager/metaSchema.mjs +712 -31
  341. package/dataMap/metaManager/mods/dynamicCellMeta.d.ts +24 -10
  342. package/dataMap/metaManager/mods/dynamicCellMeta.js +245 -28
  343. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +246 -29
  344. package/dataMap/metaManager/mods/extendMetaProperties.js +4 -9
  345. package/dataMap/metaManager/mods/extendMetaProperties.mjs +4 -9
  346. package/dataMap/sourceDataValidator.d.ts +13 -21
  347. package/dataMap/sourceDataValidator.js +39 -29
  348. package/dataMap/sourceDataValidator.mjs +50 -33
  349. package/dist/handsontable.full.js +34553 -9903
  350. package/dist/handsontable.full.min.js +168 -112
  351. package/dist/handsontable.js +31541 -13409
  352. package/dist/handsontable.min.js +172 -116
  353. package/dist/languages/all.js +2 -1
  354. package/dist/languages/all.min.js +1 -1
  355. package/dist/languages/fa-IR.js +2 -1
  356. package/dist/languages/fa-IR.min.js +1 -1
  357. package/dist/themes/classic.js +9 -3
  358. package/dist/themes/classic.min.js +4 -4
  359. package/dist/themes/horizon.js +9 -3
  360. package/dist/themes/horizon.min.js +4 -4
  361. package/dist/themes/main.js +9 -3
  362. package/dist/themes/main.min.js +4 -4
  363. package/dist/themes/static/variables/colors/ant.js +3 -3
  364. package/dist/themes/static/variables/colors/ant.min.js +3 -3
  365. package/dist/themes/static/variables/colors/classic.js +3 -3
  366. package/dist/themes/static/variables/colors/classic.min.js +3 -3
  367. package/dist/themes/static/variables/colors/horizon.js +3 -3
  368. package/dist/themes/static/variables/colors/horizon.min.js +3 -3
  369. package/dist/themes/static/variables/colors/main.js +3 -3
  370. package/dist/themes/static/variables/colors/main.min.js +3 -3
  371. package/dist/themes/static/variables/colors/material.js +3 -3
  372. package/dist/themes/static/variables/colors/material.min.js +3 -3
  373. package/dist/themes/static/variables/colors/shadcn.js +3 -3
  374. package/dist/themes/static/variables/colors/shadcn.min.js +3 -3
  375. package/dist/themes/static/variables/density.js +3 -3
  376. package/dist/themes/static/variables/density.min.js +3 -3
  377. package/dist/themes/static/variables/helpers/iconsMap.js +4 -9
  378. package/dist/themes/static/variables/helpers/iconsMap.min.js +4 -9
  379. package/dist/themes/static/variables/icons/horizon.js +3 -3
  380. package/dist/themes/static/variables/icons/horizon.min.js +3 -3
  381. package/dist/themes/static/variables/icons/main.js +3 -3
  382. package/dist/themes/static/variables/icons/main.min.js +3 -3
  383. package/dist/themes/static/variables/sizing.js +3 -3
  384. package/dist/themes/static/variables/sizing.min.js +3 -3
  385. package/dist/themes/static/variables/tokens/classic.js +9 -3
  386. package/dist/themes/static/variables/tokens/classic.min.js +4 -4
  387. package/dist/themes/static/variables/tokens/horizon.js +9 -3
  388. package/dist/themes/static/variables/tokens/horizon.min.js +4 -4
  389. package/dist/themes/static/variables/tokens/main.js +9 -3
  390. package/dist/themes/static/variables/tokens/main.min.js +4 -4
  391. package/editorManager.js +1 -3
  392. package/editorManager.mjs +1 -3
  393. package/editors/autocompleteEditor/autocompleteEditor.js +48 -22
  394. package/editors/autocompleteEditor/autocompleteEditor.mjs +48 -22
  395. package/editors/baseEditor/baseEditor.d.ts +15 -3
  396. package/editors/baseEditor/baseEditor.js +6 -6
  397. package/editors/baseEditor/baseEditor.mjs +16 -6
  398. package/editors/factory.js +5 -2
  399. package/editors/factory.mjs +5 -2
  400. package/editors/index.d.ts +3 -2
  401. package/editors/index.js +8 -0
  402. package/editors/index.mjs +3 -1
  403. package/editors/intlDatetimeEditor/index.d.mts +1 -0
  404. package/editors/intlDatetimeEditor/index.d.ts +1 -0
  405. package/editors/intlDatetimeEditor/index.js +19 -0
  406. package/editors/intlDatetimeEditor/index.mjs +1 -0
  407. package/editors/intlDatetimeEditor/intlDatetimeEditor.d.mts +1 -0
  408. package/editors/intlDatetimeEditor/intlDatetimeEditor.d.ts +42 -0
  409. package/editors/intlDatetimeEditor/intlDatetimeEditor.js +108 -0
  410. package/editors/intlDatetimeEditor/intlDatetimeEditor.mjs +93 -0
  411. package/editors/multiSelectEditor/controllers/dropdownController.js +5 -12
  412. package/editors/multiSelectEditor/controllers/dropdownController.mjs +5 -12
  413. package/editors/multiSelectEditor/controllers/inputController.js +1 -3
  414. package/editors/multiSelectEditor/controllers/inputController.mjs +1 -3
  415. package/editors/multiSelectEditor/multiSelectEditor.js +16 -21
  416. package/editors/multiSelectEditor/multiSelectEditor.mjs +17 -22
  417. package/editors/passwordEditor/passwordEditor.js +5 -12
  418. package/editors/passwordEditor/passwordEditor.mjs +5 -12
  419. package/editors/registry.js +4 -9
  420. package/editors/registry.mjs +4 -9
  421. package/editors/textEditor/textEditor.js +1 -1
  422. package/editors/textEditor/textEditor.mjs +2 -2
  423. package/eventManager.d.ts +3 -3
  424. package/focusManager/grid.d.ts +28 -0
  425. package/focusManager/grid.js +84 -14
  426. package/focusManager/grid.mjs +80 -15
  427. package/focusManager/scopeManager.js +1 -1
  428. package/focusManager/scopeManager.mjs +2 -2
  429. package/handsontable-non-commercial-license.pdf +0 -0
  430. package/helpers/array.d.ts +25 -0
  431. package/helpers/array.js +41 -4
  432. package/helpers/array.mjs +56 -4
  433. package/helpers/dateTime.d.ts +14 -0
  434. package/helpers/dateTime.js +74 -2
  435. package/helpers/dateTime.mjs +73 -2
  436. package/helpers/dom/cellCoords.js +156 -13
  437. package/helpers/dom/cellCoords.mjs +156 -13
  438. package/helpers/dom/element.d.ts +27 -3
  439. package/helpers/dom/element.js +92 -16
  440. package/helpers/dom/element.mjs +107 -17
  441. package/helpers/dom/event.d.ts +58 -0
  442. package/helpers/dom/event.js +39 -0
  443. package/helpers/dom/event.mjs +63 -0
  444. package/helpers/errors.d.ts +5 -0
  445. package/helpers/errors.js +10 -6
  446. package/helpers/errors.mjs +10 -6
  447. package/helpers/feature.d.ts +19 -0
  448. package/helpers/feature.js +21 -0
  449. package/helpers/feature.mjs +30 -0
  450. package/helpers/function.d.ts +1 -1
  451. package/helpers/function.js +4 -1
  452. package/helpers/function.mjs +4 -1
  453. package/helpers/mixed.d.ts +103 -0
  454. package/helpers/mixed.js +373 -4
  455. package/helpers/mixed.mjs +413 -4
  456. package/helpers/moves.js +2 -1
  457. package/helpers/moves.mjs +2 -1
  458. package/helpers/number.d.ts +22 -0
  459. package/helpers/number.js +49 -0
  460. package/helpers/number.mjs +66 -0
  461. package/i18n/languages/ar-AR.js +8 -19
  462. package/i18n/languages/cs-CZ.js +8 -19
  463. package/i18n/languages/de-CH.js +8 -19
  464. package/i18n/languages/de-DE.js +8 -19
  465. package/i18n/languages/en-US.js +8 -19
  466. package/i18n/languages/es-MX.js +8 -19
  467. package/i18n/languages/fa-IR.d.ts +1 -0
  468. package/i18n/languages/fa-IR.js +9 -19
  469. package/i18n/languages/fa-IR.mjs +1 -0
  470. package/i18n/languages/fr-FR.js +8 -19
  471. package/i18n/languages/hr-HR.js +8 -19
  472. package/i18n/languages/it-IT.js +8 -19
  473. package/i18n/languages/ja-JP.js +8 -19
  474. package/i18n/languages/ko-KR.js +8 -19
  475. package/i18n/languages/lv-LV.js +8 -19
  476. package/i18n/languages/nb-NO.js +8 -19
  477. package/i18n/languages/nl-NL.js +8 -19
  478. package/i18n/languages/pl-PL.js +8 -19
  479. package/i18n/languages/pt-BR.js +8 -19
  480. package/i18n/languages/ru-RU.js +8 -19
  481. package/i18n/languages/sr-SP.js +8 -19
  482. package/i18n/languages/zh-CN.js +8 -19
  483. package/i18n/languages/zh-TW.js +8 -19
  484. package/i18n/registry.js +8 -19
  485. package/index.d.ts +2 -2
  486. package/index.js +8 -19
  487. package/languages/all.js +2 -1
  488. package/languages/fa-IR.js +2 -1
  489. package/languages/fa-IR.mjs +1 -0
  490. package/languages/index.js +2 -1
  491. package/package.json +61 -1
  492. package/plugins/autoColumnSize/autoColumnSize.d.ts +24 -1
  493. package/plugins/autoColumnSize/autoColumnSize.js +506 -94
  494. package/plugins/autoColumnSize/autoColumnSize.mjs +513 -95
  495. package/plugins/autoRowSize/autoRowSize.d.ts +40 -5
  496. package/plugins/autoRowSize/autoRowSize.js +73 -36
  497. package/plugins/autoRowSize/autoRowSize.mjs +103 -41
  498. package/plugins/autofill/autofill.js +35 -24
  499. package/plugins/autofill/autofill.mjs +35 -24
  500. package/plugins/base/base.d.ts +10 -0
  501. package/plugins/base/base.js +5 -12
  502. package/plugins/base/base.mjs +5 -12
  503. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +4 -9
  504. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +4 -9
  505. package/plugins/collapsibleColumns/collapsibleColumns.d.ts +4 -0
  506. package/plugins/collapsibleColumns/collapsibleColumns.js +94 -20
  507. package/plugins/collapsibleColumns/collapsibleColumns.mjs +98 -20
  508. package/plugins/columnSorting/columnSorting.d.ts +31 -2
  509. package/plugins/columnSorting/columnSorting.js +153 -33
  510. package/plugins/columnSorting/columnSorting.mjs +155 -35
  511. package/plugins/columnSorting/columnStatesManager.d.ts +1 -1
  512. package/plugins/columnSorting/columnStatesManager.js +1 -7
  513. package/plugins/columnSorting/columnStatesManager.mjs +1 -7
  514. package/plugins/columnSorting/domHelpers.d.ts +3 -0
  515. package/plugins/columnSorting/domHelpers.js +9 -0
  516. package/plugins/columnSorting/domHelpers.mjs +3 -3
  517. package/plugins/columnSorting/rootComparator.js +21 -16
  518. package/plugins/columnSorting/rootComparator.mjs +21 -16
  519. package/plugins/columnSorting/sortFunction/checkbox.js +7 -5
  520. package/plugins/columnSorting/sortFunction/checkbox.mjs +7 -5
  521. package/plugins/columnSorting/sortFunction/default.js +15 -4
  522. package/plugins/columnSorting/sortFunction/default.mjs +15 -4
  523. package/plugins/columnSorting/sortFunction/intlDatetime.d.mts +1 -0
  524. package/plugins/columnSorting/sortFunction/intlDatetime.d.ts +10 -0
  525. package/plugins/columnSorting/sortFunction/intlDatetime.js +23 -0
  526. package/plugins/columnSorting/sortFunction/intlDatetime.mjs +12 -0
  527. package/plugins/columnSorting/sortService/registry.js +2 -0
  528. package/plugins/columnSorting/sortService/registry.mjs +2 -0
  529. package/plugins/columnSorting/utils.d.ts +8 -0
  530. package/plugins/columnSorting/utils.js +37 -45
  531. package/plugins/columnSorting/utils.mjs +42 -47
  532. package/plugins/columnSummary/columnSummary.js +13 -14
  533. package/plugins/columnSummary/columnSummary.mjs +13 -14
  534. package/plugins/columnSummary/endpoints.d.ts +69 -2
  535. package/plugins/columnSummary/endpoints.js +176 -29
  536. package/plugins/columnSummary/endpoints.mjs +176 -29
  537. package/plugins/comments/commentEditor.js +5 -10
  538. package/plugins/comments/commentEditor.mjs +6 -11
  539. package/plugins/comments/comments.js +5 -12
  540. package/plugins/comments/comments.mjs +5 -12
  541. package/plugins/comments/contextMenuItem/addEditComment.js +8 -19
  542. package/plugins/comments/contextMenuItem/readOnlyComment.js +8 -19
  543. package/plugins/comments/contextMenuItem/removeComment.js +8 -19
  544. package/plugins/comments/editorResizeObserver.js +5 -12
  545. package/plugins/comments/editorResizeObserver.mjs +5 -12
  546. package/plugins/contextMenu/contextMenu.d.ts +12 -1
  547. package/plugins/contextMenu/contextMenu.js +34 -15
  548. package/plugins/contextMenu/contextMenu.mjs +34 -15
  549. package/plugins/contextMenu/index.d.ts +1 -1
  550. package/plugins/contextMenu/menu/menu.d.ts +22 -1
  551. package/plugins/contextMenu/menu/menu.js +216 -15
  552. package/plugins/contextMenu/menu/menu.mjs +217 -16
  553. package/plugins/contextMenu/menu/positioner.js +4 -9
  554. package/plugins/contextMenu/menu/positioner.mjs +4 -9
  555. package/plugins/contextMenu/predefinedItems/alignment.js +22 -33
  556. package/plugins/contextMenu/predefinedItems/alignment.mjs +14 -14
  557. package/plugins/contextMenu/predefinedItems/clearColumn.js +9 -20
  558. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +1 -1
  559. package/plugins/contextMenu/predefinedItems/columnLeft.js +8 -19
  560. package/plugins/contextMenu/predefinedItems/columnRight.js +8 -19
  561. package/plugins/contextMenu/predefinedItems/index.js +8 -19
  562. package/plugins/contextMenu/predefinedItems/readOnly.js +11 -22
  563. package/plugins/contextMenu/predefinedItems/readOnly.mjs +3 -3
  564. package/plugins/contextMenu/predefinedItems/redo.js +8 -19
  565. package/plugins/contextMenu/predefinedItems/removeColumn.js +8 -19
  566. package/plugins/contextMenu/predefinedItems/removeRow.js +8 -19
  567. package/plugins/contextMenu/predefinedItems/rowAbove.js +8 -19
  568. package/plugins/contextMenu/predefinedItems/rowBelow.js +8 -19
  569. package/plugins/contextMenu/predefinedItems/undo.js +8 -19
  570. package/plugins/contextMenu/utils.js +1 -1
  571. package/plugins/contextMenu/utils.mjs +1 -1
  572. package/plugins/copyPaste/contextMenuItem/cut.js +8 -19
  573. package/plugins/copyPaste/copyPaste.js +62 -20
  574. package/plugins/copyPaste/copyPaste.mjs +63 -21
  575. package/plugins/copyPaste/copyableRanges.js +11 -14
  576. package/plugins/copyPaste/copyableRanges.mjs +11 -14
  577. package/plugins/copyPaste/pasteEvent.d.ts +1 -1
  578. package/plugins/customBorders/contextMenuItem/bottom.js +8 -19
  579. package/plugins/customBorders/contextMenuItem/left.js +8 -19
  580. package/plugins/customBorders/contextMenuItem/noBorders.js +8 -19
  581. package/plugins/customBorders/contextMenuItem/right.js +8 -19
  582. package/plugins/customBorders/contextMenuItem/top.js +8 -19
  583. package/plugins/customBorders/customBorders.d.ts +21 -40
  584. package/plugins/customBorders/customBorders.js +1084 -223
  585. package/plugins/customBorders/customBorders.mjs +1078 -206
  586. package/plugins/customBorders/utils.d.ts +71 -0
  587. package/plugins/customBorders/utils.js +63 -0
  588. package/plugins/customBorders/utils.mjs +101 -0
  589. package/plugins/dataProvider/dataProvider.js +35 -38
  590. package/plugins/dataProvider/dataProvider.mjs +27 -19
  591. package/plugins/dataProvider/query/crud.js +1 -1
  592. package/plugins/dataProvider/query/crud.mjs +1 -1
  593. package/plugins/dialog/dialog.js +15 -33
  594. package/plugins/dialog/dialog.mjs +7 -14
  595. package/plugins/dialog/ui.js +5 -12
  596. package/plugins/dialog/ui.mjs +5 -12
  597. package/plugins/dragToScroll/autoScroller.js +4 -9
  598. package/plugins/dragToScroll/autoScroller.mjs +4 -9
  599. package/plugins/dragToScroll/dragToScroll.d.ts +2 -2
  600. package/plugins/dragToScroll/dragToScroll.js +155 -26
  601. package/plugins/dragToScroll/dragToScroll.mjs +156 -27
  602. package/plugins/dragToScroll/scrollTimer.js +4 -9
  603. package/plugins/dragToScroll/scrollTimer.mjs +4 -9
  604. package/plugins/dropdownMenu/dropdownMenu.d.ts +5 -1
  605. package/plugins/dropdownMenu/dropdownMenu.js +50 -15
  606. package/plugins/dropdownMenu/dropdownMenu.mjs +51 -16
  607. package/plugins/dropdownMenu/index.d.ts +1 -0
  608. package/plugins/emptyDataState/emptyDataState.js +15 -33
  609. package/plugins/emptyDataState/emptyDataState.mjs +7 -14
  610. package/plugins/emptyDataState/ui.js +4 -9
  611. package/plugins/emptyDataState/ui.mjs +4 -9
  612. package/plugins/exportFile/dataProvider.js +5 -1
  613. package/plugins/exportFile/dataProvider.mjs +5 -1
  614. package/plugins/exportFile/exportFile.js +13 -31
  615. package/plugins/exportFile/exportFile.mjs +5 -12
  616. package/plugins/exportFile/types/csv.js +1 -3
  617. package/plugins/exportFile/types/csv.mjs +1 -3
  618. package/plugins/exportFile/types/xlsx/cell-style.js +4 -2
  619. package/plugins/exportFile/types/xlsx/cell-style.mjs +4 -2
  620. package/plugins/exportFile/types/xlsx/date-utils.d.ts +15 -0
  621. package/plugins/exportFile/types/xlsx/date-utils.js +31 -0
  622. package/plugins/exportFile/types/xlsx/date-utils.mjs +36 -0
  623. package/plugins/exportFile/types/xlsx.js +10 -3
  624. package/plugins/exportFile/types/xlsx.mjs +11 -4
  625. package/plugins/filters/component/_base.d.ts +1 -2
  626. package/plugins/filters/component/_base.js +1 -2
  627. package/plugins/filters/component/_base.mjs +1 -2
  628. package/plugins/filters/component/actionBar.js +9 -22
  629. package/plugins/filters/component/actionBar.mjs +1 -3
  630. package/plugins/filters/component/condition.d.ts +1 -0
  631. package/plugins/filters/component/condition.js +11 -22
  632. package/plugins/filters/component/condition.mjs +3 -3
  633. package/plugins/filters/component/operators.js +1 -3
  634. package/plugins/filters/component/operators.mjs +1 -3
  635. package/plugins/filters/component/value.d.ts +5 -6
  636. package/plugins/filters/component/value.js +62 -56
  637. package/plugins/filters/component/value.mjs +55 -38
  638. package/plugins/filters/condition/beginsWith.js +8 -19
  639. package/plugins/filters/condition/between.js +8 -19
  640. package/plugins/filters/condition/contains.js +8 -19
  641. package/plugins/filters/condition/date/after.js +10 -20
  642. package/plugins/filters/condition/date/after.mjs +2 -1
  643. package/plugins/filters/condition/date/afterOrEqual.js +10 -20
  644. package/plugins/filters/condition/date/afterOrEqual.mjs +2 -1
  645. package/plugins/filters/condition/date/before.js +10 -20
  646. package/plugins/filters/condition/date/before.mjs +2 -1
  647. package/plugins/filters/condition/date/beforeOrEqual.js +10 -20
  648. package/plugins/filters/condition/date/beforeOrEqual.mjs +2 -1
  649. package/plugins/filters/condition/date/today.js +8 -19
  650. package/plugins/filters/condition/date/tomorrow.js +8 -19
  651. package/plugins/filters/condition/date/yesterday.js +8 -19
  652. package/plugins/filters/condition/empty.js +8 -19
  653. package/plugins/filters/condition/endsWith.js +8 -19
  654. package/plugins/filters/condition/equal.d.ts +7 -0
  655. package/plugins/filters/condition/equal.js +12 -19
  656. package/plugins/filters/condition/equal.mjs +10 -0
  657. package/plugins/filters/condition/greaterThan.js +8 -19
  658. package/plugins/filters/condition/greaterThanOrEqual.js +8 -19
  659. package/plugins/filters/condition/intlDate/after.js +8 -19
  660. package/plugins/filters/condition/intlDate/afterOrEqual.js +8 -19
  661. package/plugins/filters/condition/intlDate/before.js +8 -19
  662. package/plugins/filters/condition/intlDate/beforeOrEqual.js +8 -19
  663. package/plugins/filters/condition/intlDate/between.js +8 -19
  664. package/plugins/filters/condition/intlDate/today.js +8 -19
  665. package/plugins/filters/condition/intlDate/tomorrow.js +8 -19
  666. package/plugins/filters/condition/intlDate/yesterday.js +8 -19
  667. package/plugins/filters/condition/intlDatetime/after.d.mts +1 -0
  668. package/plugins/filters/condition/intlDatetime/after.d.ts +18 -0
  669. package/plugins/filters/condition/intlDatetime/after.js +66 -0
  670. package/plugins/filters/condition/intlDatetime/after.mjs +22 -0
  671. package/plugins/filters/condition/intlDatetime/afterOrEqual.d.mts +1 -0
  672. package/plugins/filters/condition/intlDatetime/afterOrEqual.d.ts +18 -0
  673. package/plugins/filters/condition/intlDatetime/afterOrEqual.js +66 -0
  674. package/plugins/filters/condition/intlDatetime/afterOrEqual.mjs +22 -0
  675. package/plugins/filters/condition/intlDatetime/before.d.mts +1 -0
  676. package/plugins/filters/condition/intlDatetime/before.d.ts +18 -0
  677. package/plugins/filters/condition/intlDatetime/before.js +66 -0
  678. package/plugins/filters/condition/intlDatetime/before.mjs +22 -0
  679. package/plugins/filters/condition/intlDatetime/beforeOrEqual.d.mts +1 -0
  680. package/plugins/filters/condition/intlDatetime/beforeOrEqual.d.ts +18 -0
  681. package/plugins/filters/condition/intlDatetime/beforeOrEqual.js +66 -0
  682. package/plugins/filters/condition/intlDatetime/beforeOrEqual.mjs +22 -0
  683. package/plugins/filters/condition/intlDatetime/between.d.mts +1 -0
  684. package/plugins/filters/condition/intlDatetime/between.d.ts +18 -0
  685. package/plugins/filters/condition/intlDatetime/between.js +67 -0
  686. package/plugins/filters/condition/intlDatetime/between.mjs +23 -0
  687. package/plugins/filters/condition/intlDatetime/today.d.mts +1 -0
  688. package/plugins/filters/condition/intlDatetime/today.d.ts +17 -0
  689. package/plugins/filters/condition/intlDatetime/today.js +65 -0
  690. package/plugins/filters/condition/intlDatetime/today.mjs +20 -0
  691. package/plugins/filters/condition/intlDatetime/tomorrow.d.mts +1 -0
  692. package/plugins/filters/condition/intlDatetime/tomorrow.d.ts +17 -0
  693. package/plugins/filters/condition/intlDatetime/tomorrow.js +66 -0
  694. package/plugins/filters/condition/intlDatetime/tomorrow.mjs +21 -0
  695. package/plugins/filters/condition/intlDatetime/yesterday.d.mts +1 -0
  696. package/plugins/filters/condition/intlDatetime/yesterday.d.ts +17 -0
  697. package/plugins/filters/condition/intlDatetime/yesterday.js +66 -0
  698. package/plugins/filters/condition/intlDatetime/yesterday.mjs +21 -0
  699. package/plugins/filters/condition/intlTime/after.js +8 -19
  700. package/plugins/filters/condition/intlTime/afterOrEqual.js +8 -19
  701. package/plugins/filters/condition/intlTime/before.js +8 -19
  702. package/plugins/filters/condition/intlTime/beforeOrEqual.js +8 -19
  703. package/plugins/filters/condition/intlTime/between.js +8 -19
  704. package/plugins/filters/condition/lessThan.js +8 -19
  705. package/plugins/filters/condition/lessThanOrEqual.js +8 -19
  706. package/plugins/filters/condition/none.js +8 -19
  707. package/plugins/filters/condition/notBetween.js +8 -19
  708. package/plugins/filters/condition/notContains.js +8 -19
  709. package/plugins/filters/condition/notEmpty.js +8 -19
  710. package/plugins/filters/condition/notEqual.js +8 -19
  711. package/plugins/filters/conditionCollection.js +4 -7
  712. package/plugins/filters/conditionCollection.mjs +4 -7
  713. package/plugins/filters/conditionUpdateObserver.d.ts +2 -2
  714. package/plugins/filters/conditionUpdateObserver.js +144 -52
  715. package/plugins/filters/conditionUpdateObserver.mjs +144 -52
  716. package/plugins/filters/constants.d.ts +1 -0
  717. package/plugins/filters/constants.js +31 -0
  718. package/plugins/filters/constants.mjs +28 -0
  719. package/plugins/filters/dataFilter.d.ts +4 -12
  720. package/plugins/filters/dataFilter.js +7 -19
  721. package/plugins/filters/dataFilter.mjs +8 -20
  722. package/plugins/filters/filters.d.ts +33 -9
  723. package/plugins/filters/filters.js +104 -62
  724. package/plugins/filters/filters.mjs +97 -44
  725. package/plugins/filters/logicalOperations/conjunction.js +8 -19
  726. package/plugins/filters/logicalOperations/disjunction.js +8 -19
  727. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +8 -19
  728. package/plugins/filters/sortComparators.d.ts +9 -2
  729. package/plugins/filters/sortComparators.js +34 -1
  730. package/plugins/filters/sortComparators.mjs +38 -3
  731. package/plugins/filters/ui/_base.js +8 -19
  732. package/plugins/filters/ui/input.d.ts +4 -0
  733. package/plugins/filters/ui/input.js +23 -18
  734. package/plugins/filters/ui/input.mjs +23 -18
  735. package/plugins/filters/ui/link.js +4 -9
  736. package/plugins/filters/ui/link.mjs +4 -9
  737. package/plugins/filters/ui/multipleSelect.js +40 -35
  738. package/plugins/filters/ui/multipleSelect.mjs +32 -16
  739. package/plugins/filters/ui/radioInput.js +4 -9
  740. package/plugins/filters/ui/radioInput.mjs +4 -9
  741. package/plugins/filters/ui/select.js +14 -32
  742. package/plugins/filters/ui/select.mjs +6 -13
  743. package/plugins/formulas/engine/register.d.ts +5 -4
  744. package/plugins/formulas/engine/register.js +5 -2
  745. package/plugins/formulas/engine/register.mjs +9 -5
  746. package/plugins/formulas/engine/settings.d.ts +2 -6
  747. package/plugins/formulas/engine/settings.js +29 -4
  748. package/plugins/formulas/engine/settings.mjs +29 -4
  749. package/plugins/formulas/engine/types.d.ts +12 -2
  750. package/plugins/formulas/formulas.d.ts +39 -0
  751. package/plugins/formulas/formulas.js +748 -55
  752. package/plugins/formulas/formulas.mjs +752 -57
  753. package/plugins/formulas/hyperlinkUrl.d.mts +1 -0
  754. package/plugins/formulas/hyperlinkUrl.d.ts +12 -0
  755. package/plugins/formulas/hyperlinkUrl.js +32 -0
  756. package/plugins/formulas/hyperlinkUrl.mjs +32 -0
  757. package/plugins/formulas/indexSyncer/axisSyncer.d.ts +1 -0
  758. package/plugins/formulas/indexSyncer/axisSyncer.js +77 -27
  759. package/plugins/formulas/indexSyncer/axisSyncer.mjs +77 -27
  760. package/plugins/formulas/indexSyncer/index.js +4 -9
  761. package/plugins/formulas/indexSyncer/index.mjs +4 -9
  762. package/plugins/formulas/utils.d.ts +9 -0
  763. package/plugins/formulas/utils.js +21 -0
  764. package/plugins/formulas/utils.mjs +25 -0
  765. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +8 -19
  766. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +14 -20
  767. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +6 -1
  768. package/plugins/hiddenColumns/hiddenColumns.js +11 -15
  769. package/plugins/hiddenColumns/hiddenColumns.mjs +11 -15
  770. package/plugins/hiddenRows/contextMenuItem/hideRow.js +8 -19
  771. package/plugins/hiddenRows/contextMenuItem/showRow.js +14 -20
  772. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +6 -1
  773. package/plugins/hiddenRows/hiddenRows.js +11 -15
  774. package/plugins/hiddenRows/hiddenRows.mjs +11 -15
  775. package/plugins/index.d.ts +5 -1
  776. package/plugins/index.js +10 -0
  777. package/plugins/index.mjs +5 -1
  778. package/plugins/loading/loading.js +13 -31
  779. package/plugins/loading/loading.mjs +5 -12
  780. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +8 -19
  781. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +8 -19
  782. package/plugins/manualColumnFreeze/manualColumnFreeze.js +5 -12
  783. package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +5 -12
  784. package/plugins/manualColumnMove/manualColumnMove.d.ts +10 -0
  785. package/plugins/manualColumnMove/manualColumnMove.js +128 -33
  786. package/plugins/manualColumnMove/manualColumnMove.mjs +129 -34
  787. package/plugins/manualColumnResize/manualColumnResize.d.ts +12 -1
  788. package/plugins/manualColumnResize/manualColumnResize.js +28 -17
  789. package/plugins/manualColumnResize/manualColumnResize.mjs +28 -17
  790. package/plugins/manualRowMove/manualRowMove.js +5 -12
  791. package/plugins/manualRowMove/manualRowMove.mjs +5 -12
  792. package/plugins/manualRowResize/manualRowResize.d.ts +13 -2
  793. package/plugins/manualRowResize/manualRowResize.js +29 -18
  794. package/plugins/manualRowResize/manualRowResize.mjs +29 -18
  795. package/plugins/mergeCells/cellCoords.d.ts +8 -0
  796. package/plugins/mergeCells/cellCoords.js +15 -9
  797. package/plugins/mergeCells/cellCoords.mjs +15 -9
  798. package/plugins/mergeCells/cellsCollection.d.ts +46 -2
  799. package/plugins/mergeCells/cellsCollection.js +190 -71
  800. package/plugins/mergeCells/cellsCollection.mjs +190 -71
  801. package/plugins/mergeCells/contextMenuItem/toggleMerge.js +8 -19
  802. package/plugins/mergeCells/focusOrder.d.ts +26 -20
  803. package/plugins/mergeCells/focusOrder.js +363 -189
  804. package/plugins/mergeCells/focusOrder.mjs +368 -184
  805. package/plugins/mergeCells/mergeCells.d.ts +13 -8
  806. package/plugins/mergeCells/mergeCells.js +327 -76
  807. package/plugins/mergeCells/mergeCells.mjs +327 -76
  808. package/plugins/moveCells/helpers.d.mts +1 -0
  809. package/plugins/moveCells/helpers.d.ts +21 -0
  810. package/plugins/moveCells/helpers.js +20 -0
  811. package/plugins/moveCells/helpers.mjs +15 -0
  812. package/plugins/moveCells/index.d.mts +1 -0
  813. package/plugins/moveCells/index.d.ts +1 -0
  814. package/plugins/moveCells/index.js +22 -0
  815. package/plugins/moveCells/index.mjs +1 -0
  816. package/plugins/moveCells/moveCells.d.mts +1 -0
  817. package/plugins/moveCells/moveCells.d.ts +80 -0
  818. package/plugins/moveCells/moveCells.js +595 -0
  819. package/plugins/moveCells/moveCells.mjs +580 -0
  820. package/plugins/multiColumnSorting/multiColumnSorting.d.ts +8 -8
  821. package/plugins/multiColumnSorting/multiColumnSorting.js +11 -16
  822. package/plugins/multiColumnSorting/multiColumnSorting.mjs +11 -16
  823. package/plugins/multiColumnSorting/rootComparator.js +26 -19
  824. package/plugins/multiColumnSorting/rootComparator.mjs +26 -19
  825. package/plugins/multipleSelectionHandles/multipleSelectionHandles.d.ts +19 -4
  826. package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +266 -58
  827. package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +266 -58
  828. package/plugins/nestedHeaders/nestedHeaders.d.ts +10 -1
  829. package/plugins/nestedHeaders/nestedHeaders.js +227 -35
  830. package/plugins/nestedHeaders/nestedHeaders.mjs +227 -35
  831. package/plugins/nestedHeaders/stateManager/columnArrangement.d.mts +1 -0
  832. package/plugins/nestedHeaders/stateManager/columnArrangement.d.ts +37 -0
  833. package/plugins/nestedHeaders/stateManager/columnArrangement.js +35 -0
  834. package/plugins/nestedHeaders/stateManager/columnArrangement.mjs +30 -0
  835. package/plugins/nestedHeaders/stateManager/deriveSettings.d.mts +1 -0
  836. package/plugins/nestedHeaders/stateManager/deriveSettings.d.ts +57 -0
  837. package/plugins/nestedHeaders/stateManager/deriveSettings.js +115 -0
  838. package/plugins/nestedHeaders/stateManager/deriveSettings.mjs +135 -0
  839. package/plugins/nestedHeaders/stateManager/headersTree.d.ts +14 -1
  840. package/plugins/nestedHeaders/stateManager/headersTree.js +4 -9
  841. package/plugins/nestedHeaders/stateManager/headersTree.mjs +4 -9
  842. package/plugins/nestedHeaders/stateManager/index.d.ts +76 -13
  843. package/plugins/nestedHeaders/stateManager/index.js +386 -50
  844. package/plugins/nestedHeaders/stateManager/index.mjs +387 -51
  845. package/plugins/nestedHeaders/stateManager/matrixGenerator.js +3 -2
  846. package/plugins/nestedHeaders/stateManager/matrixGenerator.mjs +3 -2
  847. package/plugins/nestedHeaders/stateManager/settingsNormalizer.js +5 -1
  848. package/plugins/nestedHeaders/stateManager/settingsNormalizer.mjs +5 -1
  849. package/plugins/nestedHeaders/stateManager/sourceSettings.d.ts +23 -6
  850. package/plugins/nestedHeaders/stateManager/sourceSettings.js +24 -13
  851. package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +24 -13
  852. package/plugins/nestedHeaders/stateManager/utils.d.ts +17 -1
  853. package/plugins/nestedHeaders/stateManager/utils.js +6 -1
  854. package/plugins/nestedHeaders/stateManager/utils.mjs +6 -1
  855. package/plugins/nestedHeaders/utils/ghostTable.js +1 -3
  856. package/plugins/nestedHeaders/utils/ghostTable.mjs +1 -3
  857. package/plugins/nestedRows/data/dataManager.d.ts +4 -1
  858. package/plugins/nestedRows/data/dataManager.js +10 -4
  859. package/plugins/nestedRows/data/dataManager.mjs +10 -4
  860. package/plugins/nestedRows/nestedRows.d.ts +127 -1
  861. package/plugins/nestedRows/nestedRows.js +332 -17
  862. package/plugins/nestedRows/nestedRows.mjs +332 -17
  863. package/plugins/nestedRows/ui/collapsing.d.ts +58 -0
  864. package/plugins/nestedRows/ui/collapsing.js +234 -40
  865. package/plugins/nestedRows/ui/collapsing.mjs +234 -40
  866. package/plugins/nestedRows/ui/contextMenu.js +12 -28
  867. package/plugins/nestedRows/ui/contextMenu.mjs +4 -9
  868. package/plugins/notification/notification.js +13 -31
  869. package/plugins/notification/notification.mjs +5 -12
  870. package/plugins/notification/ui.js +4 -9
  871. package/plugins/notification/ui.mjs +4 -9
  872. package/plugins/pagination/pagination.js +7 -14
  873. package/plugins/pagination/pagination.mjs +7 -14
  874. package/plugins/pagination/ui.js +13 -31
  875. package/plugins/pagination/ui.mjs +5 -12
  876. package/plugins/search/search.js +27 -11
  877. package/plugins/search/search.mjs +27 -11
  878. package/plugins/selectionHandles/helpers.d.mts +1 -0
  879. package/plugins/selectionHandles/helpers.d.ts +17 -0
  880. package/plugins/selectionHandles/helpers.js +16 -0
  881. package/plugins/selectionHandles/helpers.mjs +11 -0
  882. package/plugins/selectionHandles/index.d.mts +1 -0
  883. package/plugins/selectionHandles/index.d.ts +1 -0
  884. package/plugins/selectionHandles/index.js +22 -0
  885. package/plugins/selectionHandles/index.mjs +1 -0
  886. package/plugins/selectionHandles/selectionHandles.d.mts +1 -0
  887. package/plugins/selectionHandles/selectionHandles.d.ts +52 -0
  888. package/plugins/selectionHandles/selectionHandles.js +335 -0
  889. package/plugins/selectionHandles/selectionHandles.mjs +316 -0
  890. package/plugins/stretchColumns/calculator.js +5 -12
  891. package/plugins/stretchColumns/calculator.mjs +5 -12
  892. package/plugins/stretchColumns/strategies/last.js +4 -9
  893. package/plugins/stretchColumns/strategies/last.mjs +4 -9
  894. package/plugins/stretchColumns/stretchColumns.js +4 -9
  895. package/plugins/stretchColumns/stretchColumns.mjs +4 -9
  896. package/plugins/touchScroll/touchScroll.js +4 -9
  897. package/plugins/touchScroll/touchScroll.mjs +4 -9
  898. package/plugins/trimRows/trimRows.d.ts +1 -1
  899. package/plugins/trimRows/trimRows.js +10 -11
  900. package/plugins/trimRows/trimRows.mjs +10 -11
  901. package/plugins/types.d.ts +4 -0
  902. package/plugins/undoRedo/actions/cellAlignment.js +1 -1
  903. package/plugins/undoRedo/actions/cellAlignment.mjs +1 -1
  904. package/plugins/undoRedo/actions/createColumn.js +4 -1
  905. package/plugins/undoRedo/actions/createColumn.mjs +4 -1
  906. package/plugins/undoRedo/actions/createRow.js +4 -1
  907. package/plugins/undoRedo/actions/createRow.mjs +4 -1
  908. package/plugins/undoRedo/actions/fixedCounts.d.mts +1 -0
  909. package/plugins/undoRedo/actions/fixedCounts.d.ts +36 -0
  910. package/plugins/undoRedo/actions/fixedCounts.js +63 -0
  911. package/plugins/undoRedo/actions/fixedCounts.mjs +62 -0
  912. package/plugins/undoRedo/actions/index.js +2 -0
  913. package/plugins/undoRedo/actions/index.mjs +2 -0
  914. package/plugins/undoRedo/actions/moveCells.d.mts +1 -0
  915. package/plugins/undoRedo/actions/moveCells.d.ts +104 -0
  916. package/plugins/undoRedo/actions/moveCells.js +225 -0
  917. package/plugins/undoRedo/actions/moveCells.mjs +227 -0
  918. package/plugins/undoRedo/actions/removeColumn.d.ts +18 -2
  919. package/plugins/undoRedo/actions/removeColumn.js +11 -4
  920. package/plugins/undoRedo/actions/removeColumn.mjs +12 -5
  921. package/plugins/undoRedo/actions/removeRow.js +2 -57
  922. package/plugins/undoRedo/actions/removeRow.mjs +2 -57
  923. package/plugins/undoRedo/undoRedo.d.ts +26 -0
  924. package/plugins/undoRedo/undoRedo.js +40 -11
  925. package/plugins/undoRedo/undoRedo.mjs +40 -11
  926. package/plugins/undoRedo/utils.d.ts +29 -0
  927. package/plugins/undoRedo/utils.js +55 -3
  928. package/plugins/undoRedo/utils.mjs +59 -0
  929. package/renderSizeProbe.d.mts +1 -0
  930. package/renderSizeProbe.d.ts +60 -0
  931. package/renderSizeProbe.js +161 -0
  932. package/renderSizeProbe.mjs +174 -0
  933. package/renderers/checkboxRenderer/checkboxRenderer.js +9 -4
  934. package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
  935. package/renderers/index.d.ts +3 -2
  936. package/renderers/index.js +8 -0
  937. package/renderers/index.mjs +3 -1
  938. package/renderers/intlDatetimeRenderer/index.d.mts +1 -0
  939. package/renderers/intlDatetimeRenderer/index.d.ts +1 -0
  940. package/renderers/intlDatetimeRenderer/index.js +22 -0
  941. package/renderers/intlDatetimeRenderer/index.mjs +1 -0
  942. package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.d.mts +1 -0
  943. package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.d.ts +26 -0
  944. package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.js +82 -0
  945. package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.mjs +67 -0
  946. package/renderers/multiSelectRenderer/multiSelectRenderer.js +2 -3
  947. package/renderers/multiSelectRenderer/multiSelectRenderer.mjs +2 -3
  948. package/renderers/multiSelectRenderer/utils/utils.d.ts +1 -1
  949. package/renderers/multiSelectRenderer/utils/utils.js +11 -8
  950. package/renderers/multiSelectRenderer/utils/utils.mjs +11 -8
  951. package/renderers/renderCell.d.mts +1 -0
  952. package/renderers/renderCell.d.ts +37 -0
  953. package/renderers/renderCell.js +43 -0
  954. package/renderers/renderCell.mjs +48 -0
  955. package/selection/highlight/highlight.js +1 -3
  956. package/selection/highlight/highlight.mjs +1 -3
  957. package/selection/highlight/types/areaLayered.d.ts +3 -1
  958. package/selection/highlight/types/areaLayered.js +4 -2
  959. package/selection/highlight/types/areaLayered.mjs +6 -2
  960. package/selection/highlight/types/focus.d.ts +3 -1
  961. package/selection/highlight/types/focus.js +3 -2
  962. package/selection/highlight/types/focus.mjs +5 -2
  963. package/selection/mouseEventHandler.js +29 -26
  964. package/selection/mouseEventHandler.mjs +29 -26
  965. package/selection/moveCells.d.mts +1 -0
  966. package/selection/moveCells.d.ts +15 -0
  967. package/selection/moveCells.js +13 -0
  968. package/selection/moveCells.mjs +9 -0
  969. package/selection/selection.d.ts +56 -2
  970. package/selection/selection.js +162 -36
  971. package/selection/selection.mjs +154 -17
  972. package/selection/transformation/_base.js +5 -12
  973. package/selection/transformation/_base.mjs +5 -12
  974. package/selection/types.d.ts +3 -0
  975. package/settings.d.ts +24 -3
  976. package/shortcuts/context.d.ts +4 -0
  977. package/shortcuts/context.js +16 -8
  978. package/shortcuts/context.mjs +20 -8
  979. package/shortcuts/contexts/commands/populateSelectedCellsData.js +1 -1
  980. package/shortcuts/contexts/commands/populateSelectedCellsData.mjs +1 -1
  981. package/styles/handsontable.css +504 -158
  982. package/styles/handsontable.min.css +4 -4
  983. package/styles/handsontableStyles.js +1 -1
  984. package/styles/handsontableStyles.mjs +1 -1
  985. package/styles/ht-icons-horizon.css +1 -10
  986. package/styles/ht-icons-horizon.min.css +4 -4
  987. package/styles/ht-icons-main.css +1 -10
  988. package/styles/ht-icons-main.min.css +4 -4
  989. package/styles/ht-theme-classic-no-icons.css +6 -0
  990. package/styles/ht-theme-classic-no-icons.min.css +4 -4
  991. package/styles/ht-theme-classic.css +7 -10
  992. package/styles/ht-theme-classic.min.css +4 -4
  993. package/styles/ht-theme-horizon-no-icons.css +6 -0
  994. package/styles/ht-theme-horizon-no-icons.min.css +4 -4
  995. package/styles/ht-theme-horizon.css +7 -10
  996. package/styles/ht-theme-horizon.min.css +4 -4
  997. package/styles/ht-theme-main-no-icons.css +6 -0
  998. package/styles/ht-theme-main-no-icons.min.css +4 -4
  999. package/styles/ht-theme-main.css +7 -10
  1000. package/styles/ht-theme-main.min.css +4 -4
  1001. package/tableView.d.ts +17 -4
  1002. package/tableView.js +211 -53
  1003. package/tableView.mjs +212 -54
  1004. package/themes/engine/builder.js +5 -12
  1005. package/themes/engine/builder.mjs +5 -12
  1006. package/themes/engine/index.d.ts +2 -1
  1007. package/themes/engine/index.js +3 -0
  1008. package/themes/engine/index.mjs +1 -1
  1009. package/themes/engine/manager.d.ts +75 -3
  1010. package/themes/engine/manager.js +247 -18
  1011. package/themes/engine/manager.mjs +254 -18
  1012. package/themes/engine/utils/cssVariables.d.ts +18 -1
  1013. package/themes/engine/utils/cssVariables.js +27 -11
  1014. package/themes/engine/utils/cssVariables.mjs +28 -11
  1015. package/themes/engine/utils/validation.js +7 -0
  1016. package/themes/engine/utils/validation.mjs +7 -0
  1017. package/themes/static/variables/helpers/iconsMap.js +1 -6
  1018. package/themes/static/variables/helpers/iconsMap.mjs +1 -6
  1019. package/themes/static/variables/tokens/classic.js +6 -0
  1020. package/themes/static/variables/tokens/classic.mjs +6 -0
  1021. package/themes/static/variables/tokens/horizon.js +6 -0
  1022. package/themes/static/variables/tokens/horizon.mjs +6 -0
  1023. package/themes/static/variables/tokens/main.js +6 -0
  1024. package/themes/static/variables/tokens/main.mjs +6 -0
  1025. package/themes/types.d.ts +1 -1
  1026. package/translations/changesObservable/observable.js +4 -9
  1027. package/translations/changesObservable/observable.mjs +4 -9
  1028. package/translations/changesObservable/observer.js +4 -9
  1029. package/translations/changesObservable/observer.mjs +4 -9
  1030. package/translations/indexMapper.d.ts +14 -9
  1031. package/translations/indexMapper.js +109 -49
  1032. package/translations/indexMapper.mjs +109 -49
  1033. package/translations/mapCollections/aggregatedCollection.js +20 -35
  1034. package/translations/mapCollections/aggregatedCollection.mjs +20 -35
  1035. package/translations/mapCollections/mapCollection.d.ts +10 -4
  1036. package/translations/mapCollections/mapCollection.js +2 -2
  1037. package/translations/mapCollections/mapCollection.mjs +2 -2
  1038. package/translations/maps/booleanMap.d.mts +1 -0
  1039. package/translations/maps/booleanMap.d.ts +86 -0
  1040. package/translations/maps/booleanMap.js +293 -0
  1041. package/translations/maps/booleanMap.mjs +301 -0
  1042. package/translations/maps/hidingMap.d.ts +5 -2
  1043. package/translations/maps/hidingMap.js +8 -3
  1044. package/translations/maps/hidingMap.mjs +8 -3
  1045. package/translations/maps/index.d.ts +5 -2
  1046. package/translations/maps/index.js +7 -3
  1047. package/translations/maps/index.mjs +10 -2
  1048. package/translations/maps/indexMap.d.ts +26 -2
  1049. package/translations/maps/indexMap.js +73 -6
  1050. package/translations/maps/indexMap.mjs +73 -6
  1051. package/translations/maps/indexesSequence.d.ts +53 -2
  1052. package/translations/maps/indexesSequence.js +218 -3
  1053. package/translations/maps/indexesSequence.mjs +226 -3
  1054. package/translations/maps/trimmingMap.d.ts +5 -2
  1055. package/translations/maps/trimmingMap.js +8 -3
  1056. package/translations/maps/trimmingMap.mjs +8 -3
  1057. package/translations/maps/utils/actionsOnIndexes.js +20 -1
  1058. package/translations/maps/utils/actionsOnIndexes.mjs +20 -1
  1059. package/translations/maps/utils/indexesSequence.js +12 -3
  1060. package/translations/maps/utils/indexesSequence.mjs +12 -3
  1061. package/translations/maps/utils/physicallyIndexed.js +12 -1
  1062. package/translations/maps/utils/physicallyIndexed.mjs +12 -1
  1063. package/utils/entitlementLicenseKey/classify.d.mts +1 -0
  1064. package/utils/entitlementLicenseKey/classify.d.ts +34 -0
  1065. package/utils/entitlementLicenseKey/classify.js +97 -0
  1066. package/utils/entitlementLicenseKey/classify.mjs +96 -0
  1067. package/utils/entitlementLicenseKey/constants.d.mts +1 -0
  1068. package/utils/entitlementLicenseKey/constants.d.ts +69 -0
  1069. package/utils/entitlementLicenseKey/constants.js +54 -0
  1070. package/utils/entitlementLicenseKey/constants.mjs +66 -0
  1071. package/utils/entitlementLicenseKey/detectFormat.d.mts +1 -0
  1072. package/utils/entitlementLicenseKey/detectFormat.d.ts +23 -0
  1073. package/utils/entitlementLicenseKey/detectFormat.js +60 -0
  1074. package/utils/entitlementLicenseKey/detectFormat.mjs +60 -0
  1075. package/utils/entitlementLicenseKey/encoding.d.mts +1 -0
  1076. package/utils/entitlementLicenseKey/encoding.d.ts +58 -0
  1077. package/utils/entitlementLicenseKey/encoding.js +161 -0
  1078. package/utils/entitlementLicenseKey/encoding.mjs +172 -0
  1079. package/utils/entitlementLicenseKey/extractKeyData.d.mts +1 -0
  1080. package/utils/entitlementLicenseKey/extractKeyData.d.ts +47 -0
  1081. package/utils/entitlementLicenseKey/extractKeyData.js +213 -0
  1082. package/utils/entitlementLicenseKey/extractKeyData.mjs +232 -0
  1083. package/utils/entitlementLicenseKey/grants.d.mts +1 -0
  1084. package/utils/entitlementLicenseKey/grants.d.ts +54 -0
  1085. package/utils/entitlementLicenseKey/grants.js +68 -0
  1086. package/utils/entitlementLicenseKey/grants.mjs +84 -0
  1087. package/utils/entitlementLicenseKey/index.d.mts +1 -0
  1088. package/utils/entitlementLicenseKey/index.d.ts +8 -0
  1089. package/utils/entitlementLicenseKey/index.js +53 -0
  1090. package/utils/entitlementLicenseKey/index.mjs +6 -0
  1091. package/utils/entitlementLicenseKey/sha512.d.mts +1 -0
  1092. package/utils/entitlementLicenseKey/sha512.d.ts +11 -0
  1093. package/utils/entitlementLicenseKey/sha512.js +328 -0
  1094. package/utils/entitlementLicenseKey/sha512.mjs +327 -0
  1095. package/utils/entitlementLicenseKey/types.d.mts +1 -0
  1096. package/utils/entitlementLicenseKey/types.d.ts +84 -0
  1097. package/utils/entitlementLicenseKey/types.js +8 -0
  1098. package/utils/entitlementLicenseKey/types.mjs +10 -0
  1099. package/utils/ghostTable.d.ts +1 -0
  1100. package/utils/ghostTable.js +58 -11
  1101. package/utils/ghostTable.mjs +58 -11
  1102. package/utils/interval.js +5 -12
  1103. package/utils/interval.mjs +5 -12
  1104. package/utils/licenseBranding/badge.d.mts +1 -0
  1105. package/utils/licenseBranding/badge.d.ts +21 -0
  1106. package/utils/licenseBranding/badge.js +237 -0
  1107. package/utils/licenseBranding/badge.mjs +244 -0
  1108. package/utils/licenseBranding/content.d.mts +1 -0
  1109. package/utils/licenseBranding/content.d.ts +54 -0
  1110. package/utils/licenseBranding/content.js +93 -0
  1111. package/utils/licenseBranding/content.mjs +79 -0
  1112. package/utils/licenseBranding/index.d.mts +1 -0
  1113. package/utils/licenseBranding/index.d.ts +14 -0
  1114. package/utils/licenseBranding/index.js +55 -0
  1115. package/utils/licenseBranding/index.mjs +56 -0
  1116. package/utils/licenseBranding/lockScreen.d.mts +1 -0
  1117. package/utils/licenseBranding/lockScreen.d.ts +23 -0
  1118. package/utils/licenseBranding/lockScreen.js +150 -0
  1119. package/utils/licenseBranding/lockScreen.mjs +159 -0
  1120. package/utils/licenseNotification.d.ts +19 -0
  1121. package/utils/licenseNotification.js +56 -29
  1122. package/utils/licenseNotification.mjs +61 -29
  1123. package/utils/movableMeta.d.mts +1 -0
  1124. package/utils/movableMeta.d.ts +40 -0
  1125. package/utils/movableMeta.js +47 -0
  1126. package/utils/movableMeta.mjs +46 -0
  1127. package/utils/parseTable.js +1 -1
  1128. package/utils/parseTable.mjs +1 -1
  1129. package/utils/samplesGenerator.d.ts +41 -14
  1130. package/utils/samplesGenerator.js +112 -42
  1131. package/utils/samplesGenerator.mjs +112 -42
  1132. package/utils/stylesHandler.d.ts +13 -0
  1133. package/utils/stylesHandler.js +60 -14
  1134. package/utils/stylesHandler.mjs +60 -14
  1135. package/validators/autocompleteValidator/autocompleteValidator.js +3 -0
  1136. package/validators/autocompleteValidator/autocompleteValidator.mjs +3 -0
  1137. package/validators/index.d.ts +3 -2
  1138. package/validators/index.js +8 -0
  1139. package/validators/index.mjs +3 -1
  1140. package/validators/intlDatetimeValidator/index.d.mts +1 -0
  1141. package/validators/intlDatetimeValidator/index.d.ts +1 -0
  1142. package/validators/intlDatetimeValidator/index.js +25 -0
  1143. package/validators/intlDatetimeValidator/index.mjs +1 -0
  1144. package/validators/intlDatetimeValidator/intlDatetimeValidator.d.mts +1 -0
  1145. package/validators/intlDatetimeValidator/intlDatetimeValidator.d.ts +28 -0
  1146. package/validators/intlDatetimeValidator/intlDatetimeValidator.js +49 -0
  1147. package/validators/intlDatetimeValidator/intlDatetimeValidator.mjs +37 -0
  1148. package/3rdparty/walkontable/src/overlay/bottom.d.mts +0 -1
  1149. package/3rdparty/walkontable/src/overlay/bottomInlineStartCorner.d.mts +0 -1
  1150. package/3rdparty/walkontable/src/overlay/inlineStart.d.mts +0 -1
  1151. package/3rdparty/walkontable/src/overlay/top.d.mts +0 -1
  1152. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.d.mts +0 -1
  1153. package/3rdparty/walkontable/src/overlays.d.ts +0 -329
  1154. package/3rdparty/walkontable/src/overlays.js +0 -870
  1155. package/3rdparty/walkontable/src/overlays.mjs +0 -860
  1156. package/3rdparty/walkontable/src/renderer/table.d.mts +0 -1
  1157. package/3rdparty/walkontable/src/renderer/table.js +0 -229
  1158. package/3rdparty/walkontable/src/settings.d.mts +0 -2
  1159. package/3rdparty/walkontable/src/settings.js +0 -196
  1160. package/3rdparty/walkontable/src/settings.mjs +0 -263
  1161. package/3rdparty/walkontable/src/table/bottom.d.mts +0 -2
  1162. package/3rdparty/walkontable/src/table/bottom.d.ts +0 -19
  1163. package/3rdparty/walkontable/src/table/bottom.js +0 -38
  1164. package/3rdparty/walkontable/src/table/bottom.mjs +0 -23
  1165. package/3rdparty/walkontable/src/table/bottomInlineStartCorner.d.mts +0 -2
  1166. package/3rdparty/walkontable/src/table/bottomInlineStartCorner.d.ts +0 -20
  1167. package/3rdparty/walkontable/src/table/bottomInlineStartCorner.mjs +0 -24
  1168. package/3rdparty/walkontable/src/table/inlineStart.d.mts +0 -2
  1169. package/3rdparty/walkontable/src/table/inlineStart.d.ts +0 -16
  1170. package/3rdparty/walkontable/src/table/inlineStart.js +0 -35
  1171. package/3rdparty/walkontable/src/table/inlineStart.mjs +0 -20
  1172. package/3rdparty/walkontable/src/table/master.d.mts +0 -2
  1173. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.d.mts +0 -2
  1174. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.d.ts +0 -75
  1175. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +0 -122
  1176. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +0 -112
  1177. package/3rdparty/walkontable/src/table/mixin/calculatedRows.d.mts +0 -2
  1178. package/3rdparty/walkontable/src/table/mixin/calculatedRows.d.ts +0 -75
  1179. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +0 -122
  1180. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +0 -112
  1181. package/3rdparty/walkontable/src/table/top.d.mts +0 -2
  1182. package/3rdparty/walkontable/src/table/top.d.ts +0 -19
  1183. package/3rdparty/walkontable/src/table/top.js +0 -38
  1184. package/3rdparty/walkontable/src/table/top.mjs +0 -23
  1185. package/3rdparty/walkontable/src/table/topInlineStartCorner.d.mts +0 -2
  1186. package/3rdparty/walkontable/src/table/topInlineStartCorner.d.ts +0 -20
  1187. package/3rdparty/walkontable/src/table/topInlineStartCorner.mjs +0 -24
  1188. package/3rdparty/walkontable/src/table.d.mts +0 -2
  1189. package/3rdparty/walkontable/src/table.d.ts +0 -741
  1190. package/3rdparty/walkontable/src/table.js +0 -1120
  1191. package/3rdparty/walkontable/src/table.mjs +0 -1105
  1192. package/3rdparty/walkontable/src/utils/cellCoords.d.mts +0 -1
  1193. package/3rdparty/walkontable/src/utils/cellCoords.js +0 -54
  1194. package/3rdparty/walkontable/src/utils/cellCoords.mjs +0 -54
  1195. package/3rdparty/walkontable/src/utils/column.d.mts +0 -2
  1196. package/3rdparty/walkontable/src/utils/column.js +0 -75
  1197. package/3rdparty/walkontable/src/utils/column.mjs +0 -70
  1198. package/3rdparty/walkontable/src/utils/positionCache.d.mts +0 -1
  1199. package/3rdparty/walkontable/src/utils/positionCache.d.ts +0 -91
  1200. package/3rdparty/walkontable/src/utils/positionCache.js +0 -193
  1201. package/3rdparty/walkontable/src/utils/positionCache.mjs +0 -194
  1202. package/3rdparty/walkontable/src/utils/row.d.mts +0 -2
  1203. package/3rdparty/walkontable/src/utils/row.js +0 -46
  1204. package/3rdparty/walkontable/src/utils/row.mjs +0 -41
  1205. package/3rdparty/walkontable/src/viewport.d.ts +0 -254
  1206. package/3rdparty/walkontable/src/viewport.js +0 -533
  1207. package/3rdparty/walkontable/src/viewport.mjs +0 -523
  1208. /package/3rdparty/walkontable/src/{renderer → axisSizing/positionCache}/index.d.mts +0 -0
  1209. /package/3rdparty/walkontable/src/{overlays.d.mts → overlay/overlays.d.mts} +0 -0
  1210. /package/3rdparty/walkontable/src/overlay/{_base.d.mts → regions/_base.d.mts} +0 -0
  1211. /package/3rdparty/walkontable/src/{stickyScrollStrategy.d.mts → overlay/strategies/stickyScrollStrategy.d.mts} +0 -0
  1212. /package/3rdparty/walkontable/src/{renderer → render}/_base.d.mts +0 -0
  1213. /package/3rdparty/walkontable/src/{renderer → render}/_base.js +0 -0
  1214. /package/3rdparty/walkontable/src/{renderer → render}/_base.mjs +0 -0
  1215. /package/3rdparty/walkontable/src/{renderer → render}/cells.d.mts +0 -0
  1216. /package/3rdparty/walkontable/src/{renderer → render}/cells.d.ts +0 -0
  1217. /package/3rdparty/walkontable/src/{renderer → render}/colGroup.d.mts +0 -0
  1218. /package/3rdparty/walkontable/src/{renderer → render}/colGroup.d.ts +0 -0
  1219. /package/3rdparty/walkontable/src/{renderer → render}/colGroup.js +0 -0
  1220. /package/3rdparty/walkontable/src/{renderer → render}/colGroup.mjs +0 -0
  1221. /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.d.mts +0 -0
  1222. /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.d.ts +0 -0
  1223. /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.js +0 -0
  1224. /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.mjs +0 -0
  1225. /package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.d.mts +0 -0
  1226. /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.d.mts +0 -0
  1227. /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.d.ts +0 -0
  1228. /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.js +0 -0
  1229. /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.mjs +0 -0
  1230. /package/3rdparty/walkontable/src/{renderer → render}/rows.d.mts +0 -0
  1231. /package/3rdparty/walkontable/src/{renderer → render}/rows.d.ts +0 -0
  1232. /package/3rdparty/walkontable/src/{scroll.d.mts → scroll/scroll.d.mts} +0 -0
  1233. /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.d.mts +0 -0
  1234. /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.d.mts +0 -0
  1235. /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.js +0 -0
  1236. /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.mjs +0 -0
  1237. /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.d.mts +0 -0
  1238. /package/3rdparty/walkontable/src/{viewport.d.mts → viewport/viewport.d.mts} +0 -0
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");
@@ -204,6 +205,12 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
204
205
  let focusGridManager;
205
206
  let viewportScroller;
206
207
  let firstRun = true;
208
+ // Guards the "colorScheme/density need the theme engine" warning so it is logged once per
209
+ // instance instead of on every `updateSettings()` call that carries the options.
210
+ let themeOverridesWarningShown = false;
211
+ // Set only when the table is initialized while invisible (see the `init` method). Kept in the closure, not on
212
+ // the instance, because `destroy` nulls every instance property before it could be read there.
213
+ let visibilityObserver = null;
207
214
  const mergedUserSettings = {
208
215
  ...userSettings.initialState,
209
216
  ...userSettings
@@ -295,6 +302,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
295
302
  'handsontable'
296
303
  ]);
297
304
  (0, _element.addClass)(this.rootWrapperElement, 'ht-root-wrapper');
305
+ if ((0, _element.isShadowRoot)(this.rootContainer.getRootNode())) {
306
+ (0, _element.addClass)(this.rootWrapperElement, 'ht-shadow-dom');
307
+ }
298
308
  (0, _element.addClass)(this.rootSlotTopElement, 'ht-slot-top');
299
309
  (0, _element.addClass)(this.rootGridElement, 'ht-grid');
300
310
  (0, _element.addClass)(this.rootGridContentElement, 'ht-grid-content');
@@ -493,6 +503,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
493
503
  const editor = instance.getActiveEditor();
494
504
  return editor ? editor.isOpened() : false;
495
505
  },
506
+ isPluginEnabled: (pluginName)=>instance.getPlugin(pluginName)?.enabled === true,
496
507
  countRenderableColumns: ()=>instance.view.countRenderableColumns(),
497
508
  countRenderableRows: ()=>instance.view.countRenderableRows(),
498
509
  countRowHeaders: ()=>instance.countRowHeaders(),
@@ -640,8 +651,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
640
651
  * format `[[index, amount], [index, amount]...]` this can be used to remove
641
652
  * non-consecutive columns or rows in one call.
642
653
  * @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.
654
+ * @param {string} [source] Optional. Source indicator passed to related hooks.
655
+ * @param {boolean} [keepEmptyRows] Optional. Flag for skipping the post-alter empty row and column adjustment.
645
656
  */ alter (action, index, amount = 1, source, keepEmptyRows) {
646
657
  const skipAlter = instance.runHooks('beforeAlter', action, index, amount, source, keepEmptyRows);
647
658
  if (skipAlter === false) {
@@ -699,6 +710,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
699
710
  if (Number.isInteger(groupIndex)) {
700
711
  groupIndex = Math.max(groupIndex - offset, 0);
701
712
  }
713
+ const totalRowsBefore = instance.countRows();
702
714
  // TODO: for datamap.removeRow index should be passed as it is (with undefined and null values). If not, the logic
703
715
  // inside the datamap.removeRow breaks the removing functionality.
704
716
  const wasRemoved = datamap.removeRow(groupIndex, groupAmount, source);
@@ -717,8 +729,22 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
717
729
  tableMeta.fixedRowsTop -= Math.min(groupAmount, fixedRowsTop - calcIndex);
718
730
  }
719
731
  const fixedRowsBottom = tableMeta.fixedRowsBottom;
720
- if (fixedRowsBottom && calcIndex >= totalRows - fixedRowsBottom) {
721
- tableMeta.fixedRowsBottom -= Math.min(groupAmount, fixedRowsBottom);
732
+ if (fixedRowsBottom) {
733
+ // Count how many of the removed rows belonged to the bottom fixed rows. Those rows occupied
734
+ // the `[totalRowsBefore - fixedRowsBottom, totalRowsBefore - 1]` range, so the boundary has
735
+ // to be compared with the row count from *before* the removal. Rows removed above that
736
+ // range keep the setting untouched (DEV-2551).
737
+ const removedRowsCount = totalRowsBefore - totalRows;
738
+ // With no index passed, `datamap.removeRow` takes the rows from the end, so the removal
739
+ // starts that many rows before the last one. `calcIndex` points at the last row then, not
740
+ // at the first removed one.
741
+ const firstRemovedRowIndex = Number.isInteger(groupIndex) ? calcIndex : Math.max(totalRowsBefore - removedRowsCount, 0);
742
+ const firstFixedRowIndex = totalRowsBefore - fixedRowsBottom;
743
+ const lastRemovedRowIndex = Math.min(firstRemovedRowIndex + removedRowsCount - 1, totalRowsBefore - 1);
744
+ const removedFixedRowsCount = lastRemovedRowIndex - Math.max(firstRemovedRowIndex, firstFixedRowIndex) + 1;
745
+ if (removedFixedRowsCount > 0) {
746
+ tableMeta.fixedRowsBottom -= Math.min(removedFixedRowsCount, fixedRowsBottom);
747
+ }
722
748
  }
723
749
  if (totalRows === 0) {
724
750
  selection.deselect();
@@ -781,7 +807,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
781
807
  }
782
808
  const fixedColumnsStart = tableMeta.fixedColumnsStart;
783
809
  if (fixedColumnsStart >= calcIndex + 1) {
784
- tableMeta.fixedColumnsStart -= Math.min(groupAmount, fixedColumnsStart - calcIndex);
810
+ // Since 12.0.0, the "fixedColumnsLeft" is replaced with the "fixedColumnsStart" option.
811
+ // However, keeping the old name still in effect. When both option names are used together,
812
+ // the error is thrown. To prevent that, the engine needs to modify the original option key
813
+ // to bypass the validation.
814
+ tableMeta._fixedColumnsStart -= Math.min(groupAmount, fixedColumnsStart - calcIndex);
785
815
  }
786
816
  if (Array.isArray(tableMeta.colHeaders)) {
787
817
  if (typeof physicalColumnIndex === 'undefined') {
@@ -847,9 +877,22 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
847
877
  }
848
878
  {
849
879
  let emptyCols = 0;
850
- // count currently empty cols
851
- if (minCols || minSpareCols) {
852
- emptyCols = instance.countEmptyCols(true);
880
+ const canCreateSpareCols = minSpareCols > 0 && !tableMeta.columns && instance.dataType === 'array';
881
+ // Count trailing empty columns, but only when the `minSpareCols` branch below can consume
882
+ // the result, and never beyond `minSpareCols` itself. Verifying that a column is empty
883
+ // scans every row of that column, and this method runs after every change batch - an
884
+ // uncapped count (the previous `countEmptyCols(true)` call) paid O(empty columns * rows)
885
+ // per edit and also ran when only `minCols` was set, where the result was never used.
886
+ if (canCreateSpareCols) {
887
+ for(let visualIndex = instance.countCols() - 1; visualIndex >= 0; visualIndex--){
888
+ if (!instance.isEmptyCol(visualIndex)) {
889
+ break;
890
+ }
891
+ emptyCols += 1;
892
+ if (emptyCols >= minSpareCols) {
893
+ break;
894
+ }
895
+ }
853
896
  }
854
897
  let nrOfColumns = instance.countCols();
855
898
  // should I add empty cols to meet minCols?
@@ -863,7 +906,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
863
906
  });
864
907
  }
865
908
  // should I add empty cols to meet minSpareCols?
866
- if (minSpareCols && !tableMeta.columns && instance.dataType === 'array' && emptyCols < minSpareCols) {
909
+ if (canCreateSpareCols && emptyCols < minSpareCols) {
867
910
  nrOfColumns = instance.countCols();
868
911
  const emptyColsMissing = minSpareCols - emptyCols;
869
912
  const colsToCreate = Math.min(emptyColsMissing, tableMeta.maxCols - nrOfColumns);
@@ -1001,7 +1044,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1001
1044
  clen = Math.max(colInputLength, colSelectionLength);
1002
1045
  }
1003
1046
  current.col = start.col;
1004
- cellMeta = instance.getCellMeta(current.row, current.col);
1047
+ // The transient read keeps a bulk paste/fill from permanently materializing one meta
1048
+ // object per target cell - this loop only reads (`skipRowOnPaste`, `skipColumnOnPaste`,
1049
+ // `readOnly`, `valueSetter`, `parsePastedValue`); the write itself goes through the
1050
+ // data layer.
1051
+ cellMeta = instance.getCellMetaTransient(current.row, current.col);
1005
1052
  if ((source === 'CopyPaste.paste' || source === 'Autofill.fill' || source === 'autofill.fill') && cellMeta.skipRowOnPaste) {
1006
1053
  skippedRow += 1;
1007
1054
  current.row += 1;
@@ -1015,7 +1062,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1015
1062
  if (end && current.col > end.col && colSelectionLength > colInputLength || !tableMeta.allowInsertColumn && current.col > instance.countCols() - 1 || current.col >= tableMeta.maxCols) {
1016
1063
  break;
1017
1064
  }
1018
- cellMeta = instance.getCellMeta(current.row, current.col);
1065
+ cellMeta = instance.getCellMetaTransient(current.row, current.col);
1019
1066
  if ((source === 'CopyPaste.paste' || source === 'Autofill.fill' || source === 'autofill.fill') && cellMeta.skipColumnOnPaste) {
1020
1067
  skippedColumn += 1;
1021
1068
  current.col += 1;
@@ -1138,7 +1185,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1138
1185
  const themeName = tableMeta.themeName;
1139
1186
  const rootContainerThemeClassName = (0, _themes.getThemeClassName)(instance.rootContainer);
1140
1187
  if ((0, _rootInstance.isRootInstance)(instance) && !rootContainerThemeClassName && ((0, _object.isObject)(theme) || !theme && !themeName)) {
1141
- initializeThemeManager(theme);
1188
+ initializeThemeManager(theme, readStoredThemeOverrides());
1142
1189
  }
1143
1190
  dataSource.setData(tableMeta.data);
1144
1191
  instance.runHooks('beforeInit');
@@ -1153,6 +1200,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1153
1200
  if ((0, _rootInstance.isRootInstance)(this)) {
1154
1201
  (0, _a11yAnnouncer.install)(instance.rootPortalElement);
1155
1202
  (0, _licenseNotification.initLicenseNotification)(instance);
1203
+ (0, _licenseBranding.initLicenseBranding)(instance);
1156
1204
  // Keep the edge slots (top, bottom) as wide as the table so their content
1157
1205
  // (toolbars, pagination, license notification) aligns with the grid.
1158
1206
  const lastEdgeWidths = {
@@ -1188,7 +1236,12 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1188
1236
  this.render();
1189
1237
  // Run the logic only if it's the table's initialization and the root element is not visible.
1190
1238
  if (!!firstRun && instance.rootElement.offsetParent === null) {
1191
- (0, _element.observeVisibilityChangeOnce)(instance.rootElement, ()=>{
1239
+ visibilityObserver = (0, _element.observeVisibilityChangeOnce)(instance.rootElement, ()=>{
1240
+ // A delivery carries the state from the moment its snapshot was taken, so it can arrive after the
1241
+ // instance is gone even though `destroy` disconnects the observer.
1242
+ if (!instance || instance.isDestroyed || !instance.view) {
1243
+ return;
1244
+ }
1192
1245
  // Update the spreader size cache before rendering.
1193
1246
  instance.view._wt.wtOverlays.updateLastSpreaderSize();
1194
1247
  instance.view.adjustElementsSize();
@@ -1202,11 +1255,85 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1202
1255
  instance.runHooks('afterInit');
1203
1256
  };
1204
1257
  /**
1258
+ * Reads the per-instance color scheme and density overrides from a settings object.
1259
+ *
1260
+ * Only the keys actually present are returned, so a missing key keeps the value already applied
1261
+ * instead of resetting it to the theme default.
1262
+ *
1263
+ * @param {object} settings - The settings object to read the overrides from.
1264
+ * @returns {object} The theme overrides object.
1265
+ */ function readThemeOverrides(settings) {
1266
+ const overrides = {};
1267
+ if ((0, _object.hasOwnProperty)(settings, 'colorScheme')) {
1268
+ overrides.colorScheme = settings.colorScheme;
1269
+ }
1270
+ if ((0, _object.hasOwnProperty)(settings, 'density')) {
1271
+ overrides.density = settings.density;
1272
+ }
1273
+ return overrides;
1274
+ }
1275
+ /**
1276
+ * Reads the color scheme and density currently configured on this instance.
1277
+ *
1278
+ * Unlike `readThemeOverrides()`, this reads the effective values rather than only the keys that
1279
+ * one payload carries. `updateSettings()` stores grid options on the global meta, which the table
1280
+ * meta inherits through its prototype, so an own-property check would miss them. Use this when
1281
+ * rebuilding a ThemeManager, which has to pick up options set by an earlier call.
1282
+ *
1283
+ * @returns {object} The theme overrides object.
1284
+ */ function readStoredThemeOverrides() {
1285
+ return {
1286
+ colorScheme: tableMeta.colorScheme,
1287
+ density: tableMeta.density
1288
+ };
1289
+ }
1290
+ /**
1291
+ * Applies the `colorScheme` and `density` options to the ThemeManager of this instance.
1292
+ *
1293
+ * The options are per-instance overrides, so the shared theme object stays untouched and other
1294
+ * grids using the same theme keep their own look.
1295
+ *
1296
+ * @param {object} settings - The settings object that may carry the overrides.
1297
+ * @param {boolean} init - `true` when called during initialization. The initial styles are
1298
+ * injected by the ThemeManager constructor, so nothing has to be refreshed in that case.
1299
+ * @returns {boolean} `true` when the overrides changed and `afterSetTheme` still has to run.
1300
+ */ function applyThemeOverrides(settings, init) {
1301
+ const overrides = readThemeOverrides(settings);
1302
+ if (!(0, _object.hasOwnProperty)(overrides, 'colorScheme') && !(0, _object.hasOwnProperty)(overrides, 'density')) {
1303
+ return false;
1304
+ }
1305
+ if (!instance.themeManager) {
1306
+ // Only complain when a value is actually asked for. Clearing the options is documented, and a
1307
+ // framework wrapper re-sends every prop on each render, so warning on key presence alone
1308
+ // would fill the console for grids that never used these options.
1309
+ const isValueRequested = !(0, _engine.isThemeOverrideEmpty)(overrides.colorScheme) || !(0, _engine.isThemeOverrideEmpty)(overrides.density);
1310
+ if (isValueRequested && !themeOverridesWarningShown) {
1311
+ themeOverridesWarningShown = true;
1312
+ (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.');
1313
+ }
1314
+ return false;
1315
+ }
1316
+ const hasChanged = instance.themeManager.setOverrides(overrides);
1317
+ if (!hasChanged || init) {
1318
+ return false;
1319
+ }
1320
+ // Clear the cache here so the render at the end of `updateSettings` measures the new sizes.
1321
+ // Rendering here as well would paint once with stale meta and then immediately paint again.
1322
+ instance.stylesHandler.clearCache();
1323
+ return true;
1324
+ }
1325
+ /**
1205
1326
  * Initializes the ThemeManager with the given theme configuration.
1206
1327
  *
1207
1328
  * @param {object|boolean} theme - The theme configuration object or `true` to use the default theme.
1208
- */ function initializeThemeManager(theme) {
1329
+ * @param {object} [overrides] - The per-instance color scheme and density overrides.
1330
+ */ function initializeThemeManager(theme, overrides) {
1209
1331
  let themeObject;
1332
+ // Tear the previous manager down first. Without this its `<style>` node stays in the wrapper,
1333
+ // and because a new manager prepends its own node the orphan ends up LATER in source order —
1334
+ // so at the same specificity the orphan's override rules win and the grid can never change or
1335
+ // reset a `colorScheme` or `density` that was set at construction time.
1336
+ instance.themeManager?.destroy();
1210
1337
  if (typeof theme === 'undefined') {
1211
1338
  if ((0, _themes1.hasTheme)('main')) {
1212
1339
  themeObject = (0, _themes1.getTheme)('main');
@@ -1221,7 +1348,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1221
1348
  }
1222
1349
  instance.themeManager = (0, _engine.createThemeManager)({
1223
1350
  hot: instance,
1224
- themeObject
1351
+ themeObject,
1352
+ overrides
1225
1353
  });
1226
1354
  }
1227
1355
  /**
@@ -1309,7 +1437,14 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1309
1437
  const visualCol = datamap.propToCol(prop);
1310
1438
  let cellProperties;
1311
1439
  if (Number.isInteger(visualCol)) {
1312
- cellProperties = instance.getCellMeta(row, visualCol);
1440
+ // The transient read keeps a bulk change set from permanently materializing one meta
1441
+ // object per changed cell while the validator is looked up. Cells that DO have a
1442
+ // validator switch to the eagerly stored meta object below - validation writes its
1443
+ // `valid` result on the meta, and that result must survive on the stored object.
1444
+ cellProperties = instance.getCellMetaTransient(row, visualCol);
1445
+ if (instance.getCellValidator(cellProperties)) {
1446
+ cellProperties = instance.getCellMeta(row, visualCol);
1447
+ }
1313
1448
  } else {
1314
1449
  // If there's no requested visual column, we can use the table meta as the cell properties when retrieving
1315
1450
  // the cell validator.
@@ -1344,7 +1479,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1344
1479
  *
1345
1480
  * @private
1346
1481
  * @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).
1482
+ * @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
1483
  * @fires Hooks#beforeChangeRender
1349
1484
  * @fires Hooks#afterChange
1350
1485
  */ function applyChanges(changes, source) {
@@ -1358,8 +1493,13 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1358
1493
  continue;
1359
1494
  }
1360
1495
  if (tableMeta.allowInsertRow) {
1496
+ // Create the whole missing range in one call - one index-mapper insert and one hook
1497
+ // round instead of one per row. Creating row by row made a paste reaching far below
1498
+ // the last row quadratic in the gap size. The loop re-checks the count so a partial
1499
+ // creation (e.g. a `maxRows` clamp) is detected and the change is skipped.
1361
1500
  while(changes[i][0] > instance.countRows() - 1){
1362
- const { delta: numberOfCreatedRows } = datamap.createRow(undefined, undefined, {
1501
+ const missingRows = changes[i][0] - (instance.countRows() - 1);
1502
+ const { delta: numberOfCreatedRows } = datamap.createRow(undefined, missingRows, {
1363
1503
  source: 'auto'
1364
1504
  });
1365
1505
  if (numberOfCreatedRows === 0) {
@@ -1370,7 +1510,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1370
1510
  }
1371
1511
  if (instance.dataType === 'array' && (!tableMeta.columns || tableMeta.columns.length === 0) && tableMeta.allowInsertColumn) {
1372
1512
  while(Number(datamap.propToCol(changes[i][1])) > instance.countCols() - 1){
1373
- const { delta: numberOfCreatedColumns } = datamap.createCol(undefined, undefined, {
1513
+ const missingColumns = Number(datamap.propToCol(changes[i][1])) - (instance.countCols() - 1);
1514
+ const { delta: numberOfCreatedColumns } = datamap.createCol(undefined, missingColumns, {
1374
1515
  source: 'auto'
1375
1516
  });
1376
1517
  if (numberOfCreatedColumns === 0) {
@@ -1540,7 +1681,10 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1540
1681
  const visualColumn = datamap.propToCol(prop);
1541
1682
  let cellProperties;
1542
1683
  if (Number.isInteger(visualColumn)) {
1543
- cellProperties = instance.getCellMeta(row, visualColumn);
1684
+ // The transient read keeps a bulk change set (paste, fill, checkbox toggle over a large
1685
+ // selection) from permanently materializing one meta object per changed cell - the meta
1686
+ // is only read here (`valueSetter`).
1687
+ cellProperties = instance.getCellMetaTransient(row, visualColumn);
1544
1688
  } else {
1545
1689
  // If there's no requested visual column, we can use the table meta as the cell properties
1546
1690
  cellProperties = {
@@ -1562,7 +1706,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1562
1706
  * @param {number|Array} row Visual row index or array of changes in format `[[row, col, value],...]`.
1563
1707
  * @param {number} [column] Visual column index.
1564
1708
  * @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.
1709
+ * @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.
1710
+ * @fires Hooks#beforeChange
1711
+ * @fires Hooks#afterChange
1566
1712
  */ this.setDataAtCell = function(row, column, value, source) {
1567
1713
  const input = setDataInputToArray(row, column, value);
1568
1714
  const changes = [];
@@ -1612,7 +1758,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1612
1758
  * @param {number|Array} row Visual row index or array of changes in format `[[row, prop, value], ...]`.
1613
1759
  * @param {string} prop Property name or the source string (e.g. `'first.name'` or `'0'`).
1614
1760
  * @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).
1761
+ * @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).
1762
+ * @fires Hooks#beforeChange
1763
+ * @fires Hooks#afterChange
1616
1764
  */ this.setDataAtRowProp = function(row, prop, value, source) {
1617
1765
  const input = setDataInputToArray(row, prop, value);
1618
1766
  const changes = [];
@@ -1684,7 +1832,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1684
1832
  * @memberof Core#
1685
1833
  * @function destroyEditor
1686
1834
  * @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.
1835
+ * @param {boolean} [prepareEditorIfNeeded=true] If `true`, the editor under the selected cell will be prepared to open.
1688
1836
  */ this.destroyEditor = function(revertOriginal = false, prepareEditorIfNeeded = true) {
1689
1837
  editorManager.closeEditor(revertOriginal);
1690
1838
  instance.view.render();
@@ -1858,8 +2006,10 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1858
2006
  *
1859
2007
  * @memberof Core#
1860
2008
  * @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.
2009
+ * @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
2010
  * @since 0.36.0
2011
+ * @fires Hooks#beforeChange
2012
+ * @fires Hooks#afterChange
1863
2013
  */ this.emptySelectedCells = function(source) {
1864
2014
  if (!selection.isSelected() || this.countRows() === 0 || this.countCols() === 0) {
1865
2015
  return;
@@ -1880,7 +2030,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1880
2030
  }
1881
2031
  const collectEmptyCellChanges = (row)=>{
1882
2032
  (0, _number.rangeEach)(fromColumn, toColumn, (column)=>{
1883
- if (!this.getCellMeta(row, column).readOnly) {
2033
+ // The transient read keeps clearing a large selection from permanently materializing
2034
+ // one meta object per cell - only `readOnly` is read here.
2035
+ if (!this.getCellMetaTransient(row, column).readOnly) {
1884
2036
  changes.push([
1885
2037
  row,
1886
2038
  column,
@@ -1982,7 +2134,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
1982
2134
  * to the DOM. While rendering the table all cell renderers are recalled.
1983
2135
  *
1984
2136
  * Calling this method manually is not recommended. Handsontable tries to render itself by choosing the most
1985
- * optimal moments in its lifecycle.
2137
+ * optimal moments in its lifecycle. After [setCellMeta()](@/api/core.md#setcellmeta) changes visual cell
2138
+ * properties, call this method to apply them, or wrap multiple calls in [batch()](@/api/core.md#batch).
1986
2139
  *
1987
2140
  * @memberof Core#
1988
2141
  * @function render
@@ -2223,8 +2376,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2223
2376
  * @memberof Core#
2224
2377
  * @function updateData
2225
2378
  * @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
2379
+ * @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.
2380
+ * @param {string} [source] The source of the `updateData()` call.
2228
2381
  * @fires Hooks#beforeUpdateData
2229
2382
  * @fires Hooks#afterUpdateData
2230
2383
  * @fires Hooks#afterChange
@@ -2265,8 +2418,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2265
2418
  *
2266
2419
  * @memberof Core#
2267
2420
  * @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
2421
+ * @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.
2422
+ * @param {string} [source] The source of the `loadData()` call.
2270
2423
  * @fires Hooks#beforeLoadData
2271
2424
  * @fires Hooks#afterLoadData
2272
2425
  * @fires Hooks#afterChange
@@ -2340,11 +2493,17 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2340
2493
  this.rowIndexMapper.initToLength(this.countSourceRows());
2341
2494
  };
2342
2495
  /**
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.).
2496
+ * Returns the current visual data as a 2D array.
2346
2497
  *
2347
- * Optionally you can provide cell range by defining `row`, `column`, `row2`, `column2` to get only a fragment of table data.
2498
+ * Unlike the source data (which may be an array of objects), `getData()` always
2499
+ * returns an array of arrays regardless of the original data format. The returned
2500
+ * data reflects the current visual state of the grid: rows and columns are in their
2501
+ * current visual order, after any sorting, filtering, or reordering.
2502
+ *
2503
+ * To retrieve the data in its original source format, use the {@link Core#getSourceData} method instead.
2504
+ *
2505
+ * Optionally you can provide a cell range by defining `row`, `column`, `row2`, `column2`
2506
+ * to get only a fragment of the data.
2348
2507
  *
2349
2508
  * @memberof Core#
2350
2509
  * @function getData
@@ -2352,7 +2511,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2352
2511
  * @param {number} [column] From visual column index.
2353
2512
  * @param {number} [row2] To visual row index.
2354
2513
  * @param {number} [column2] To visual column index.
2355
- * @returns {Array[]} Array with the data.
2514
+ * @returns {Array[]} A 2D array of cell values in the current visual order.
2356
2515
  * @example
2357
2516
  * ```js
2358
2517
  * // Get all data (in order how it is rendered in the table).
@@ -2422,11 +2581,19 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2422
2581
  * __Note__, that although the `updateSettings` method doesn't overwrite the previously declared settings, it might reset
2423
2582
  * the settings made post-initialization. (for example - ignore changes made using the columnResize feature).
2424
2583
  *
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.).
2584
+ * Passing `columns` inside the `settings` object resets the states corresponding to rows and columns
2585
+ * (for example, row/column sequence, column width, row height, frozen columns etc.). Passing `data` does not reset these states.
2427
2586
  *
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.).
2587
+ * After initialization, passing `data` calls [`updateData()`](@/api/core.md#updatedata) internally.
2588
+ * The resulting [`beforeUpdateData`](@/api/hooks.md#beforeupdatedata) and
2589
+ * [`afterUpdateData`](@/api/hooks.md#afterupdatedata) hooks receive `"updateSettings"` as their
2590
+ * `source`, while [`afterChange`](@/api/hooks.md#afterchange) receives `null` as its `changes`
2591
+ * argument and `"updateData"` as its `source`. If you call `updateSettings` with `data` inside
2592
+ * `afterChange`, check the hook's `source` to prevent an infinite loop.
2593
+ *
2594
+ * Cell meta set imperatively through [[setCellMeta]] (for example, by the user or the context menu) is preserved across
2595
+ * `updateSettings`, even when `settings` includes `cell`, `cells`, or `columns`. On a direct conflict, a value re-stated
2596
+ * through the declarative `cell` option takes precedence over the preserved imperative value.
2430
2597
  *
2431
2598
  * Cell meta set imperatively through [[setCellMeta]] (for example, by the user or the context menu) is preserved across
2432
2599
  * `updateSettings`, even when `settings` includes `cell`, `cells`, or `columns`. On a direct conflict, a value re-stated
@@ -2463,6 +2630,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2463
2630
  if ((0, _mixed.isDefined)(settings.ganttChart)) {
2464
2631
  (0, _errors.throwWithCause)('Since 8.0.0 the "ganttChart" setting is no longer supported.');
2465
2632
  }
2633
+ // The `columns` option (or the state its function form reads) may change in this call - drop
2634
+ // getColHeader's index translation cache so it rebuilds against the updated settings.
2635
+ columnsSettingIndexes = null;
2466
2636
  if ((0, _mixed.isDefined)(settings.rowHeights) && (0, _mixed.isDefined)(settings.minRowHeights)) {
2467
2637
  (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
2638
  }
@@ -2513,20 +2683,26 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2513
2683
  const currentThemeName = instance.getCurrentThemeName();
2514
2684
  // Use `theme` option if it's a string and differs from current theme (takes priority over `themeName`).
2515
2685
  if (themeOptionExists && typeof settings.theme === 'string' && currentThemeName !== settings.theme) {
2516
- instance.themeManager?.unmount();
2517
- instance.themeManager = null;
2686
+ // `destroy()`, not `unmount()`. Unmounting removes the style node but leaves the manager
2687
+ // subscribed to the shared theme object, so the next theme change re-injects its scoped
2688
+ // rules and the grid gets stuck on whatever override the dead manager still holds.
2689
+ instance.themeManager?.destroy();
2518
2690
  instance.useTheme(settings.theme);
2519
2691
  // Use `themeName` option if `theme` is not provided and the name differs from current theme.
2520
2692
  } else if (themeNameOptionExists && !themeOptionExists && currentThemeName !== settings.themeName) {
2521
- instance.themeManager?.unmount();
2522
- instance.themeManager = null;
2693
+ // `destroy()`, not `unmount()`. Unmounting removes the style node but leaves the manager
2694
+ // subscribed to the shared theme object, so the next theme change re-injects its scoped
2695
+ // rules and the grid gets stuck on whatever override the dead manager still holds.
2696
+ instance.themeManager?.destroy();
2523
2697
  tableMeta.theme = settings.themeName;
2524
2698
  tableMeta.themeName = undefined;
2525
2699
  instance.useTheme(settings.themeName);
2526
2700
  // Initialize or update the themeManager when theme is an object.
2527
2701
  } else if ((0, _rootInstance.isRootInstance)(instance) && !rootContainerThemeClassName && (0, _object.isObject)(settings.theme)) {
2528
2702
  if (instance.themeManager === null) {
2529
- initializeThemeManager(settings.theme);
2703
+ // Read the overrides from `tableMeta`, not from this payload. The options may have been
2704
+ // set by an earlier call, and the manager being rebuilt here starts with none of them.
2705
+ initializeThemeManager(settings.theme, readStoredThemeOverrides());
2530
2706
  instance.useTheme(instance.themeManager.getClassName());
2531
2707
  } else {
2532
2708
  let themeObject;
@@ -2540,6 +2716,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2540
2716
  }
2541
2717
  }
2542
2718
  }
2719
+ const themeOverridesChanged = applyThemeOverrides(settings, init);
2543
2720
  // Load data or create data map
2544
2721
  if (instance.runHooks('hasExternalDataSource') === true) {
2545
2722
  // When dataProvider is a complete server-backed config, ignore static data, the plugin loads rows.
@@ -2657,11 +2834,23 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2657
2834
  // width blocks ran) so partial updateSettings calls see the correct state.
2658
2835
  // When height IS set, the height block's `overflow: clip` shorthand handles both axes — leave
2659
2836
  // overflowX untouched to avoid breaking that shorthand.
2837
+ // Only clip for a definite width. A relative width (`100%`, other percentages, viewport units,
2838
+ // or a `calc()` that mixes them in) fills its container, and content wider than that scrolls
2839
+ // with the window — matching the long-standing behavior where the page gains a horizontal
2840
+ // scrollbar and every column stays reachable. Clipping those would silently hide the off-width
2841
+ // columns with no scrollbar. A definite width (`px`, `em`, `rem`, and other absolute lengths)
2842
+ // establishes a fixed box the table must not visually overflow, so it is clipped.
2660
2843
  // Browser compatibility: `overflow-x: clip` requires Safari 16+. On Safari 14.1–15.x it silently
2661
2844
  // falls back to `visible` (graceful degradation — pre-existing behavior, not a new regression).
2662
2845
  if (typeof settings.height !== 'undefined' || typeof settings.width !== 'undefined') {
2663
2846
  const effectiveHeight = instance.rootElement.style.height;
2664
2847
  const effectiveWidth = instance.rootElement.style.width;
2848
+ // Relative: percentages and viewport units resolve against an ancestor, so a `%` or a viewport
2849
+ // unit (`vw`/`vh`/`vmin`/`vmax`, and dynamic `dvh`/`svh`/`lvh` via the `vh` match) anywhere —
2850
+ // including inside `calc()` — marks the width as container-driven. No word boundaries: the unit
2851
+ // is preceded by digits (`100vw`), which are word characters, so `\bv` would never match.
2852
+ const isRelativeWidth = /%|v(?:w|h|min|max)/i.test(effectiveWidth);
2853
+ const isDefiniteWidth = effectiveWidth !== '' && effectiveWidth !== 'auto' && !isRelativeWidth;
2665
2854
  if (!effectiveHeight) {
2666
2855
  const currentOverflowX = instance.rootElement.style.overflowX;
2667
2856
  // Only manage the overflow-x we own (`clip`) or that is unset. Preserve a user-defined
@@ -2669,7 +2858,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2669
2858
  // by `clip`. Unlike `hidden`, `clip` creates no block formatting context and allows no
2670
2859
  // programmatic scroll.
2671
2860
  if (currentOverflowX === '' || currentOverflowX === 'clip') {
2672
- instance.rootElement.style.overflowX = effectiveWidth && effectiveWidth !== 'auto' ? 'clip' : '';
2861
+ instance.rootElement.style.overflowX = isDefiniteWidth ? 'clip' : '';
2673
2862
  }
2674
2863
  }
2675
2864
  }
@@ -2687,6 +2876,12 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2687
2876
  instance.render();
2688
2877
  instance.view._wt.wtOverlays.adjustElementsSize();
2689
2878
  }
2879
+ // Fired after the render above, so a listener reading cell sizes sees the new density. The
2880
+ // manager can be gone by now: an `afterUpdateSettings` listener is free to move the grid to a
2881
+ // class-name theme, which tears the engine down.
2882
+ if (themeOverridesChanged && instance.themeManager) {
2883
+ instance.runHooks('afterSetTheme', instance.themeManager.getClassName(), false);
2884
+ }
2690
2885
  if (!init && instance.view && (currentHeight === '' || height === '' || height === undefined) && currentHeight !== height) {
2691
2886
  instance.view._wt.wtOverlays.updateMainScrollableElements();
2692
2887
  }
@@ -2718,11 +2913,36 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2718
2913
  return null;
2719
2914
  };
2720
2915
  /**
2721
- * Returns the object settings.
2916
+ * Returns the current global grid settings object.
2917
+ *
2918
+ * The returned object contains the settings passed to the constructor or the most recent
2919
+ * `updateSettings()` call. It reflects the
2920
+ * [grid-level](@/guides/getting-started/configuration-options/configuration-options.md#set-grid-options)
2921
+ * configuration only.
2922
+ *
2923
+ * It does not include merged per-cell or per-column values. Configuration options cascade from
2924
+ * grid to column to cell (see
2925
+ * [Cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)).
2926
+ * To read the effective value for a specific cell, use [[getCellMeta]]. To read column-level meta, use [[getColumnMeta]].
2722
2927
  *
2723
2928
  * @memberof Core#
2724
2929
  * @function getSettings
2725
- * @returns {TableMeta} Object containing the current table settings.
2930
+ * @returns {TableMeta} Object containing the current global grid settings.
2931
+ * @example
2932
+ * ```js
2933
+ * const hot = new Handsontable(container, {
2934
+ * readOnly: false,
2935
+ * columns: (index) => ({
2936
+ * readOnly: index === 2 || index === 8,
2937
+ * }),
2938
+ * });
2939
+ *
2940
+ * // returns `false` (global grid-level setting)
2941
+ * hot.getSettings().readOnly;
2942
+ *
2943
+ * // returns `true` for column 2 (merged column and cell meta)
2944
+ * hot.getCellMeta(0, 2).readOnly;
2945
+ * ```
2726
2946
  */ this.getSettings = function() {
2727
2947
  return tableMeta;
2728
2948
  };
@@ -2777,8 +2997,10 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2777
2997
  * @param {number|number[]} [index] A visual index of the row/column before or after which the new row/column will be
2778
2998
  * inserted or removed. Can also be an array of arrays, in format `[[index, amount],...]`.
2779
2999
  * @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.
3000
+ * @param {string} [source] Source indicator passed to related hooks.
3001
+ * @param {boolean} [keepEmptyRows] If set to `true`, skips the automatic adjustment that normally adds empty rows
3002
+ * or columns after the operation to satisfy `minRows`, `minSpareRows`,
3003
+ * `minCols`, or `minSpareCols`.
2782
3004
  * @example
2783
3005
  * ```js
2784
3006
  * // above row 10 (by visual index), insert 1 new row
@@ -2798,9 +3020,23 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
2798
3020
  * // remove 2 rows, starting from row 10 (by visual index)
2799
3021
  * hot.alter('remove_row', 10, 2);
2800
3022
  *
3023
+ * // remove 2 columns, starting from column 3 (by visual index)
3024
+ * hot.alter('remove_col', 3, 2);
3025
+ *
2801
3026
  * // remove 3 rows, starting from row 1 (by visual index)
2802
3027
  * // remove 2 rows, starting from row 5 (by visual index)
2803
3028
  * hot.alter('remove_row', [[1, 3], [5, 2]]);
3029
+ *
3030
+ * // pass a custom source string to hooks
3031
+ * hot.addHook('afterCreateRow', (index, amount, source) => {
3032
+ * if (source === 'inventory-import') {
3033
+ * // Run logic only for rows created by the inventory import.
3034
+ * }
3035
+ * });
3036
+ * hot.alter('insert_row_above', 0, 1, 'inventory-import');
3037
+ *
3038
+ * // remove a row without immediately adding empty rows required by `minRows` or `minSpareRows`
3039
+ * hot.alter('remove_row', 4, 1, 'inventory-cleanup', true);
2804
3040
  * ```
2805
3041
  */ this.alter = function(action, index, amount, source, keepEmptyRows) {
2806
3042
  grid.alter(action, index, amount, source, keepEmptyRows);
@@ -3076,9 +3312,14 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3076
3312
  const visualRow = instance.toVisualRow(changeRow);
3077
3313
  const visualColumn = instance.toVisualColumn(changeProp);
3078
3314
  if (Number.isInteger(visualColumn)) {
3079
- return instance.getCellMeta(visualRow, visualColumn);
3315
+ // The transient read keeps a bulk source-data write from permanently materializing one
3316
+ // meta object per changed cell - the meta only feeds the `valueSetter` and the
3317
+ // source-data validator, both read-only.
3318
+ return instance.getCellMetaTransient(visualRow, visualColumn);
3080
3319
  }
3081
- // If there's no requested visual column, we can use the table meta as the cell properties
3320
+ // If there's no requested visual column, we can use the table meta as the cell properties.
3321
+ // The snapshot lacks the per-cell coordinate properties, but every consumer here reads
3322
+ // settings-level keys only.
3082
3323
  return {
3083
3324
  ...Object.getPrototypeOf(tableMeta),
3084
3325
  ...tableMeta
@@ -3191,7 +3432,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3191
3432
  (0, _number.rangeEach)(Math.max(Math.min(rowStart, rowEnd), 0), Math.max(rowStart, rowEnd), (row)=>{
3192
3433
  let isTypeEqual = true;
3193
3434
  (0, _number.rangeEach)(Math.max(Math.min(columnStart, columnEnd), 0), Math.max(columnStart, columnEnd), (column)=>{
3194
- const cellType = instance.getCellMeta(row, column);
3435
+ const cellType = instance.getCellMetaTransient(row, column);
3195
3436
  currentType = cellType.type ?? null;
3196
3437
  if (previousType) {
3197
3438
  isTypeEqual = previousType === currentType;
@@ -3270,8 +3511,52 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3270
3511
  }
3271
3512
  };
3272
3513
  /**
3514
+ * Writes a configuration-derived cell meta value declaratively. The value is applied to the cell meta
3515
+ * (so it is retained while the cell is released from the viewport by the meta eviction), but is NOT
3516
+ * recorded as user-defined, so an `updateSettings` cache reset clears it and it is re-applied from the
3517
+ * current configuration - exactly like the `cell` option. Used by built-in plugins that derive cell
3518
+ * meta from their own configuration (for example ColumnSummary) and re-apply it on each update.
3519
+ *
3520
+ * Unlike the public `setCellMeta`, this does NOT fire `beforeSetCellMeta`/`afterSetCellMeta` and is
3521
+ * not vetoable: the write is plugin-internal render state the user never requested, so it must not
3522
+ * surface through public hooks or be blocked by a `beforeSetCellMeta` veto. This matches the direct
3523
+ * meta-object write these plugins used before the viewport meta eviction was introduced.
3524
+ *
3525
+ * Internal API: deliberately NOT declared on the public `HotInstance` type (`core/types.ts`), so it
3526
+ * is not exposed to third-party code or the published `.d.ts`. Built-in consumers reach it through a
3527
+ * local internal type (see `HotInstanceInternal` in the ColumnSummary plugin). Do not add it to
3528
+ * `HotInstance` - that would turn an implementation detail into a supported public API.
3529
+ *
3530
+ * @private
3531
+ * @memberof Core#
3532
+ * @function _setCellMetaDeclarative
3533
+ * @param {number} row Visual row index.
3534
+ * @param {number} column Visual column index.
3535
+ * @param {string} key The property name to set.
3536
+ * @param {*} value The value to write.
3537
+ */ this._setCellMetaDeclarative = function(row, column, key, value) {
3538
+ let physicalRow = row;
3539
+ let physicalColumn = column;
3540
+ if (row < instance.countRows()) {
3541
+ physicalRow = instance.toPhysicalRow(row);
3542
+ }
3543
+ if (column < instance.countCols()) {
3544
+ physicalColumn = instance.toPhysicalColumn(column);
3545
+ }
3546
+ metaManager.disableUserDefinedMetaRecording();
3547
+ try {
3548
+ metaManager.setCellMeta(physicalRow, physicalColumn, key, value);
3549
+ } finally{
3550
+ metaManager.enableUserDefinedMetaRecording();
3551
+ }
3552
+ };
3553
+ /**
3273
3554
  * Sets a property defined by the `key` property to the meta object of a cell corresponding to params `row` and `column`.
3274
3555
  *
3556
+ * This method updates internal cell metadata only. It does not repaint the grid. To reflect visual changes (such as
3557
+ * `className`, `type`, or `readOnly`), call [render()](@/api/core.md#render) afterward, or wrap multiple calls in
3558
+ * [batch()](@/api/core.md#batch).
3559
+ *
3275
3560
  * @memberof Core#
3276
3561
  * @function setCellMeta
3277
3562
  * @param {number} row Visual row index.
@@ -3308,6 +3593,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3308
3593
  /**
3309
3594
  * Returns the cell properties object for the given `row` and `column` coordinates.
3310
3595
  *
3596
+ * The returned object reflects the effective cell configuration after
3597
+ * [cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)
3598
+ * (grid, column, and cell levels). To read global grid settings only, use [[getSettings]].
3599
+ * To read column-level meta, use [[getColumnMeta]].
3600
+ *
3311
3601
  * @memberof Core#
3312
3602
  * @function getCellMeta
3313
3603
  * @param {number} row Visual row index.
@@ -3335,8 +3625,52 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3335
3625
  });
3336
3626
  };
3337
3627
  /**
3628
+ * Returns the cell properties object for the given `row` and `column` coordinates without
3629
+ * retaining it in the cell meta cache.
3630
+ *
3631
+ * Like [[getCellMeta]], the returned object reflects the effective cell configuration after
3632
+ * [cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)
3633
+ * and dynamic extension (the `cells` function and the `beforeGetCellMeta`/`afterGetCellMeta`
3634
+ * hooks run). Unlike `getCellMeta`, when the cell has no stored meta object the extension runs
3635
+ * on a temporary object that is not saved, so scanning many cells (for example, a whole column
3636
+ * or the entire dataset) does not permanently allocate one meta object per visited cell. Cells
3637
+ * that already carry stored meta (for example, written by [[setCellMeta]] or the `cell` option)
3638
+ * return their stored object, exactly as `getCellMeta` would.
3639
+ *
3640
+ * Use this method for read-only bulk scans. Do not write to the returned object - for cells
3641
+ * without stored meta the write lands on the temporary object and is lost; use `setCellMeta`
3642
+ * to persist values.
3643
+ *
3644
+ * @memberof Core#
3645
+ * @function getCellMetaTransient
3646
+ * @since 18.1.0
3647
+ * @param {number} row Visual row index.
3648
+ * @param {number} column Visual column index.
3649
+ * @returns {object} The cell properties object.
3650
+ * @fires Hooks#beforeGetCellMeta
3651
+ * @fires Hooks#afterGetCellMeta
3652
+ */ this.getCellMetaTransient = function(row, column) {
3653
+ let physicalRow = instance.toPhysicalRow(row);
3654
+ let physicalColumn = instance.toPhysicalColumn(column);
3655
+ if (physicalRow === null) {
3656
+ physicalRow = row;
3657
+ }
3658
+ if (physicalColumn === null) {
3659
+ physicalColumn = column;
3660
+ }
3661
+ return metaManager.getCellMetaTransient(physicalRow, physicalColumn, {
3662
+ visualRow: row,
3663
+ visualColumn: column
3664
+ });
3665
+ };
3666
+ /**
3338
3667
  * Returns the meta information for the provided column.
3339
3668
  *
3669
+ * The returned object reflects the column-level configuration after
3670
+ * [cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)
3671
+ * (grid and column levels). To read global grid settings only, use [[getSettings]].
3672
+ * To read the effective configuration for a specific cell, use [[getCellMeta]].
3673
+ *
3340
3674
  * @since 14.5.0
3341
3675
  * @memberof Core#
3342
3676
  * @function getColumnMeta
@@ -3541,12 +3875,27 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3541
3875
  continue;
3542
3876
  }
3543
3877
  waitingForValidator.addValidatorToQueue();
3544
- instance.validateCell(instance.getDataAtCell(i, j), instance.getCellMeta(i, j), (result)=>{
3878
+ // The transient read keeps a bulk validation from permanently materializing one meta
3879
+ // object per validated cell (O(rows x columns) retention). Cells with stored meta -
3880
+ // including every currently rendered cell - still receive their `valid` result on the
3881
+ // stored object, because the transient read returns the stored object for them.
3882
+ const row = i;
3883
+ const column = j;
3884
+ const cellMeta = instance.getCellMetaTransient(row, column);
3885
+ instance.validateCell(instance.getDataAtCell(row, column), cellMeta, (result)=>{
3545
3886
  if (typeof result !== 'boolean') {
3546
3887
  (0, _errors.throwWithCause)('Validation error: result is not boolean');
3547
3888
  }
3548
3889
  if (result === false) {
3549
3890
  waitingForValidator.valid = false;
3891
+ // A failed result written on a throwaway object would be lost - persist it on the
3892
+ // stored meta (a DIRECT write, exactly like the edit-path validation flow; NOT
3893
+ // `setCellMeta`, which would mark the property as user-persisted and change
3894
+ // updateSettings/eviction semantics). Only failures materialize, so retention stays
3895
+ // O(invalid cells); the eviction pass already keeps `valid === false` cells.
3896
+ instance.getCellMeta(row, column, {
3897
+ skipMetaExtension: true
3898
+ }).valid = false;
3550
3899
  }
3551
3900
  waitingForValidator.removeValidatorFormQueue();
3552
3901
  }, 'validateCells');
@@ -3612,6 +3961,13 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3612
3961
  return false;
3613
3962
  };
3614
3963
  /**
3964
+ * Caches the index translation that `getColHeader` derives from the `columns` option when that
3965
+ * option is a function: the source column indexes for which `columns(index)` returns a truthy
3966
+ * settings object. Only the membership array is cached — titles are still read live from the
3967
+ * `columns` function. Rebuilt when the function reference or the column count changes; cleared
3968
+ * by `updateSettings`.
3969
+ */ let columnsSettingIndexes = null;
3970
+ /**
3615
3971
  * Gets the values of column headers (if column headers are [enabled](@/api/options.md#colheaders)).
3616
3972
  *
3617
3973
  * To get an array with the values of all
@@ -3661,23 +4017,30 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3661
4017
  }
3662
4018
  let result = tableMeta.colHeaders;
3663
4019
  const columns = tableMeta.columns;
3664
- const translateVisualIndexToColumns = function(visualColumnIndex) {
3665
- const arr = [];
4020
+ const columnsFn = typeof columns === 'function' ? columns : null;
4021
+ const physicalColumn = instance.toPhysicalColumn(columnIndex);
4022
+ let columnSettings = null;
4023
+ if (columnsFn !== null) {
3666
4024
  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);
4025
+ if (columnsSettingIndexes === null || columnsSettingIndexes.columns !== columnsFn || columnsSettingIndexes.columnsLen !== columnsLen) {
4026
+ const indexes = [];
4027
+ for(let index = 0; index < columnsLen; index++){
4028
+ if (columnsFn(index)) {
4029
+ indexes.push(index);
4030
+ }
3671
4031
  }
4032
+ columnsSettingIndexes = {
4033
+ columns: columnsFn,
4034
+ columnsLen,
4035
+ indexes
4036
+ };
3672
4037
  }
3673
- return arr[visualColumnIndex];
3674
- };
3675
- const physicalColumn = instance.toPhysicalColumn(columnIndex);
3676
- const prop = translateVisualIndexToColumns(physicalColumn);
4038
+ columnSettings = columnsFn(columnsSettingIndexes.indexes[physicalColumn]) ?? null;
4039
+ }
3677
4040
  if (tableMeta.colHeaders === false) {
3678
4041
  result = null;
3679
- } else if (columns && (0, _function.isFunction)(columns) && columns(prop) && columns(prop).title) {
3680
- result = columns(prop).title;
4042
+ } else if (columnSettings && columnSettings.title) {
4043
+ result = columnSettings.title;
3681
4044
  } else if (columns && !(0, _function.isFunction)(columns) && columns[physicalColumn] && columns[physicalColumn].title) {
3682
4045
  result = columns[physicalColumn].title;
3683
4046
  } else if (Array.isArray(tableMeta.colHeaders) && tableMeta.colHeaders[physicalColumn] !== undefined) {
@@ -3850,7 +4213,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3850
4213
  * @returns {number} Returns -1 if table is not visible.
3851
4214
  */ this.countRenderedRows = function() {
3852
4215
  const view = instance.view;
3853
- return view._wt.drawn ? view._wt.wtTable.getRenderedRowsCount() : -1;
4216
+ return view?._wt.drawn ? view._wt.wtTable.getRenderedRowsCount() : -1;
3854
4217
  };
3855
4218
  /**
3856
4219
  * Returns the number of rendered rows that are only visible in the table viewport.
@@ -3861,7 +4224,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3861
4224
  * @returns {number} Number of visible rows or -1.
3862
4225
  */ this.countVisibleRows = function() {
3863
4226
  const view = instance.view;
3864
- return view._wt.drawn ? view._wt.wtTable.getVisibleRowsCount() : -1;
4227
+ return view?._wt.drawn ? view._wt.wtTable.getVisibleRowsCount() : -1;
3865
4228
  };
3866
4229
  /**
3867
4230
  * Returns the number of rendered rows including columns that are partially or fully rendered
@@ -3872,7 +4235,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3872
4235
  * @returns {number} Returns -1 if table is not visible.
3873
4236
  */ this.countRenderedCols = function() {
3874
4237
  const view = instance.view;
3875
- return view._wt.drawn ? view._wt.wtTable.getRenderedColumnsCount() : -1;
4238
+ return view?._wt.drawn ? view._wt.wtTable.getRenderedColumnsCount() : -1;
3876
4239
  };
3877
4240
  /**
3878
4241
  * Returns the number of rendered columns that are only visible in the table viewport.
@@ -3883,7 +4246,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3883
4246
  * @returns {number} Number of visible columns or -1.
3884
4247
  */ this.countVisibleCols = function() {
3885
4248
  const view = instance.view;
3886
- return view._wt.drawn ? view._wt.wtTable.getVisibleColumnsCount() : -1;
4249
+ return view?._wt.drawn ? view._wt.wtTable.getVisibleColumnsCount() : -1;
3887
4250
  };
3888
4251
  /**
3889
4252
  * Returns the number of rendered row headers.
@@ -3893,7 +4256,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3893
4256
  * @function countRowHeaders
3894
4257
  * @returns {number} Number of row headers.
3895
4258
  */ this.countRowHeaders = function() {
3896
- return instance.view.getRowHeadersCount();
4259
+ const view = instance.view;
4260
+ return view ? view.getRowHeadersCount() : 0;
3897
4261
  };
3898
4262
  /**
3899
4263
  * Returns the number of rendered column headers.
@@ -3903,7 +4267,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
3903
4267
  * @function countColHeaders
3904
4268
  * @returns {number} Number of column headers.
3905
4269
  */ this.countColHeaders = function() {
3906
- return instance.view.getColumnHeadersCount();
4270
+ const view = instance.view;
4271
+ return view ? view.getColumnHeadersCount() : 0;
3907
4272
  };
3908
4273
  /**
3909
4274
  * Returns the number of empty rows. If the optional ending parameter is `true`, returns the
@@ -4003,8 +4368,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4003
4368
  * @param {number|string} column A visual column index (`number`), or a column property's value (`string`).
4004
4369
  * @param {number} [endRow] If selecting a range: the visual row index of the last cell in the range.
4005
4370
  * @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
4371
+ * @param {boolean} [scrollToCell=true] If `true`, scrolls the viewport to the newly-selected cells. If `false`, keeps the previous viewport.
4372
+ * @param {boolean} [changeListener=true] If `true`, switches the keyboard focus to Handsontable. If `false`, keeps the
4008
4373
  * previous keyboard focus. If an element outside Handsontable (such as a custom input) currently owns the browser
4009
4374
  * focus, it remains focused after the call.
4010
4375
  * @returns {boolean} `true`: the selection was successful, `false`: the selection failed.
@@ -4077,8 +4442,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4077
4442
  * @param {Array[]|CellRange[]} coords Visual coordinates,
4078
4443
  * passed either as an array of arrays (`[[rowStart, columnStart, rowEnd, columnEnd], ...]`)
4079
4444
  * 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
4445
+ * @param {boolean} [scrollToCell=true] If `true`, scrolls the viewport to the newly-selected cells. If `false`, keeps the previous viewport.
4446
+ * @param {boolean} [changeListener=true] If `true`, switches the keyboard focus to Handsontable. If `false`, keeps the
4082
4447
  * previous keyboard focus. If an element outside Handsontable (such as a custom input) currently owns the browser
4083
4448
  * focus, it remains focused after the call.
4084
4449
  * @returns {boolean} `true`: the selection was successful, `false`: the selection failed.
@@ -4129,8 +4494,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4129
4494
  * @memberof Core#
4130
4495
  * @since 0.38.0
4131
4496
  * @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`
4497
+ * @param {number | string} startColumn The visual column index or column property from which the selection starts.
4498
+ * @param {number | string} [endColumn=startColumn] The visual column index or column property to which the selection finishes. If `endColumn`
4134
4499
  * is not defined the column defined by `startColumn` will be selected.
4135
4500
  * @param {number | { row: number, col: number } | CellCoords} [focusPosition=0] The argument allows changing the cell/header focus
4136
4501
  * position. The value can take visual row index from -N to N, where negative values point to the headers and positive
@@ -4205,16 +4570,15 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4205
4570
  * @since 0.38.2
4206
4571
  * @memberof Core#
4207
4572
  * @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.
4573
+ * @param {boolean} [includeRowHeaders=false] If `true`, includes the row headers in the selection.
4574
+ * @param {boolean} [includeColumnHeaders=false] If `true`, includes the column headers in the selection.
4212
4575
  *
4213
- * @param {object} [options] Additional object with options. Since 14.0.0
4576
+ * @param {object} [options] Additional object with options. Since 14.0.0.
4214
4577
  * @param {{row: number, col: number} | boolean} [options.focusPosition] The argument allows changing the cell/header
4215
4578
  * focus position. The value takes an object with a `row` and `col` properties from -N to N, where
4216
4579
  * 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:
4580
+ * position won't be changed. When the {@link Options#navigableHeaders} option is disabled (the default), a
4581
+ * `focusPosition` that points to a header is relocated to the nearest cell in the data set. Example:
4218
4582
  * ```js
4219
4583
  * hot.selectAll(0, 0, {
4220
4584
  * focusPosition: { row: 0, col: 1 },
@@ -4223,7 +4587,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4223
4587
  * ```
4224
4588
  *
4225
4589
  * @param {boolean} [options.disableHeadersHighlight] If `true`, disables highlighting the headers even when
4226
- * the logical coordinates points on them.
4590
+ * the logical coordinates points on them. This only suppresses the highlight shown on headers of a fully-selected
4591
+ * row or column. It doesn't affect the focus indicator on the individual cell or header that holds the focus,
4592
+ * which stays visible even when {@link Options#navigableHeaders} moves the focus onto a header.
4227
4593
  */ this.selectAll = function(includeRowHeaders = true, includeColumnHeaders = includeRowHeaders, options) {
4228
4594
  viewportScroller.skipNextScrollCycle();
4229
4595
  selection.selectAll(includeRowHeaders, includeColumnHeaders, options);
@@ -4257,6 +4623,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4257
4623
  /**
4258
4624
  * Scroll viewport to coordinates specified by the `row` and/or `col` object properties.
4259
4625
  *
4626
+ * The object-based signature was introduced in v14.0.0. The positional arguments form is retained
4627
+ * for backward compatibility.
4628
+ *
4260
4629
  * ```js
4261
4630
  * // scroll the viewport to the visual row index (leave the horizontal scroll untouched)
4262
4631
  * hot.scrollViewportTo({ row: 50 });
@@ -4271,6 +4640,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4271
4640
  * }, () => {
4272
4641
  * // callback function executed after the viewport is scrolled
4273
4642
  * });
4643
+ *
4644
+ * // scroll the viewport using the backward-compatible positional arguments form
4645
+ * hot.scrollViewportTo(50, 50, true, true);
4274
4646
  * ```
4275
4647
  *
4276
4648
  * @memberof Core#
@@ -4376,6 +4748,10 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4376
4748
  */ this.destroy = function() {
4377
4749
  instance._clearTimeouts();
4378
4750
  instance._clearMicrotasks();
4751
+ // Drop the hidden-init visibility observer before the teardown below nulls the instance. Otherwise a
4752
+ // delivery queued while the table was becoming visible runs its callback on a destroyed instance.
4753
+ visibilityObserver?.disconnect();
4754
+ visibilityObserver = null;
4379
4755
  if (instance.view) {
4380
4756
  instance.view.destroy();
4381
4757
  }
@@ -4467,6 +4843,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4467
4843
  /**
4468
4844
  * Returns the first rendered row in the DOM (usually, it is not visible in the table's viewport).
4469
4845
  *
4846
+ * When the {@link MergeCells} plugin is enabled with its default `virtualized: false` setting, a merged
4847
+ * cell that crosses the viewport edge extends the rendered row range, so this method can return a row
4848
+ * index further from the viewport than usual. For the actual visible viewport, use
4849
+ * {@link Core#getFirstFullyVisibleRow} or {@link Core#getFirstPartiallyVisibleRow}.
4850
+ *
4470
4851
  * @since 14.6.0
4471
4852
  * @memberof Core#
4472
4853
  * @function getFirstRenderedVisibleRow
@@ -4477,6 +4858,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4477
4858
  /**
4478
4859
  * Returns the last rendered row in the DOM (usually, it is not visible in the table's viewport).
4479
4860
  *
4861
+ * When the {@link MergeCells} plugin is enabled with its default `virtualized: false` setting, a merged
4862
+ * cell that crosses the viewport edge extends the rendered row range, so this method can return a row
4863
+ * index further from the viewport than usual. For the actual visible viewport, use
4864
+ * {@link Core#getLastFullyVisibleRow} or {@link Core#getLastPartiallyVisibleRow}.
4865
+ *
4480
4866
  * @since 14.6.0
4481
4867
  * @memberof Core#
4482
4868
  * @function getLastRenderedVisibleRow
@@ -4487,6 +4873,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4487
4873
  /**
4488
4874
  * Returns the first rendered column in the DOM (usually, it is not visible in the table's viewport).
4489
4875
  *
4876
+ * When the {@link MergeCells} plugin is enabled with its default `virtualized: false` setting, a merged
4877
+ * cell that crosses the viewport edge extends the rendered column range, so this method can return a
4878
+ * column index further from the viewport than usual. For the actual visible viewport, use
4879
+ * {@link Core#getFirstFullyVisibleColumn} or {@link Core#getFirstPartiallyVisibleColumn}.
4880
+ *
4490
4881
  * @since 14.6.0
4491
4882
  * @memberof Core#
4492
4883
  * @function getFirstRenderedVisibleColumn
@@ -4497,6 +4888,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4497
4888
  /**
4498
4889
  * Returns the last rendered column in the DOM (usually, it is not visible in the table's viewport).
4499
4890
  *
4891
+ * When the {@link MergeCells} plugin is enabled with its default `virtualized: false` setting, a merged
4892
+ * cell that crosses the viewport edge extends the rendered column range, so this method can return a
4893
+ * column index further from the viewport than usual. For the actual visible viewport, use
4894
+ * {@link Core#getLastFullyVisibleColumn} or {@link Core#getLastPartiallyVisibleColumn}.
4895
+ *
4500
4896
  * @since 14.6.0
4501
4897
  * @memberof Core#
4502
4898
  * @function getLastRenderedVisibleColumn
@@ -4979,7 +5375,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
4979
5375
  const themeName = mergedUserSettings.themeName;
4980
5376
  const rootContainerThemeClassName = (0, _themes.getThemeClassName)(instance.rootContainer);
4981
5377
  if ((0, _rootInstance.isRootInstance)(instance) && !rootContainerThemeClassName && ((0, _object.isObject)(theme) || !theme && !themeName)) {
4982
- initializeThemeManager(theme);
5378
+ initializeThemeManager(theme, readThemeOverrides(mergedUserSettings));
4983
5379
  }
4984
5380
  (0, _registry.getPluginsNames)().forEach((pluginName)=>{
4985
5381
  const PluginClass = (0, _registry.getPlugin)(pluginName);