handsontable 15.3.0 → 16.0.0-next-f486b48-20250702

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 (277) hide show
  1. package/3rdparty/walkontable/src/core/_base.js +0 -3
  2. package/3rdparty/walkontable/src/core/_base.mjs +0 -3
  3. package/3rdparty/walkontable/src/core/clone.js +0 -1
  4. package/3rdparty/walkontable/src/core/clone.mjs +0 -1
  5. package/3rdparty/walkontable/src/core/core.js +0 -2
  6. package/3rdparty/walkontable/src/core/core.mjs +0 -2
  7. package/3rdparty/walkontable/src/facade/core.js +0 -3
  8. package/3rdparty/walkontable/src/facade/core.mjs +0 -3
  9. package/3rdparty/walkontable/src/index.js +1 -2
  10. package/3rdparty/walkontable/src/overlay/_base.js +1 -3
  11. package/3rdparty/walkontable/src/overlay/_base.mjs +1 -3
  12. package/3rdparty/walkontable/src/overlay/bottom.js +2 -2
  13. package/3rdparty/walkontable/src/overlay/bottom.mjs +2 -2
  14. package/3rdparty/walkontable/src/overlay/top.js +1 -1
  15. package/3rdparty/walkontable/src/overlay/top.mjs +1 -1
  16. package/3rdparty/walkontable/src/renderer/columnHeaders.js +1 -1
  17. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +2 -2
  18. package/3rdparty/walkontable/src/selection/border/border.js +17 -11
  19. package/3rdparty/walkontable/src/selection/border/border.mjs +17 -11
  20. package/3rdparty/walkontable/src/selection/border/utils.js +1 -1
  21. package/3rdparty/walkontable/src/selection/border/utils.mjs +1 -1
  22. package/3rdparty/walkontable/src/settings.js +3 -1
  23. package/3rdparty/walkontable/src/settings.mjs +3 -1
  24. package/3rdparty/walkontable/src/table.js +9 -6
  25. package/3rdparty/walkontable/src/table.mjs +9 -6
  26. package/3rdparty/walkontable/src/types.js +0 -1
  27. package/3rdparty/walkontable/src/types.mjs +0 -1
  28. package/3rdparty/walkontable/src/utils/column.js +1 -1
  29. package/3rdparty/walkontable/src/utils/column.mjs +1 -1
  30. package/3rdparty/walkontable/src/viewport.js +1 -1
  31. package/3rdparty/walkontable/src/viewport.mjs +1 -1
  32. package/CHANGELOG.md +53 -31
  33. package/README.md +10 -4
  34. package/base.js +2 -2
  35. package/base.mjs +2 -2
  36. package/cellTypes/registry.js +2 -3
  37. package/cellTypes/registry.mjs +1 -1
  38. package/core/coordsMapper/rangeToRenderableMapper.js +124 -0
  39. package/core/coordsMapper/rangeToRenderableMapper.mjs +120 -0
  40. package/core/focusCatcher/focusDetector.js +2 -2
  41. package/core/focusCatcher/focusDetector.mjs +2 -2
  42. package/core/hooks/constants.js +259 -1
  43. package/core/hooks/constants.mjs +259 -1
  44. package/core.d.ts +2 -0
  45. package/core.js +202 -58
  46. package/core.mjs +202 -58
  47. package/dataMap/dataMap.js +16 -30
  48. package/dataMap/dataMap.mjs +16 -30
  49. package/dataMap/metaManager/metaSchema.js +58 -0
  50. package/dataMap/metaManager/metaSchema.mjs +58 -0
  51. package/dist/handsontable.css +30 -4
  52. package/dist/handsontable.full.css +30 -4
  53. package/dist/handsontable.full.js +6073 -4352
  54. package/dist/handsontable.full.min.css +3 -3
  55. package/dist/handsontable.full.min.js +206 -206
  56. package/dist/handsontable.js +5751 -4037
  57. package/dist/handsontable.min.css +3 -3
  58. package/dist/handsontable.min.js +41 -41
  59. package/dist/languages/all.min.js +1 -1
  60. package/dist/languages/ar-AR.min.js +1 -1
  61. package/dist/languages/cs-CZ.min.js +1 -1
  62. package/dist/languages/de-CH.min.js +1 -1
  63. package/dist/languages/de-DE.min.js +1 -1
  64. package/dist/languages/en-US.min.js +1 -1
  65. package/dist/languages/es-MX.min.js +1 -1
  66. package/dist/languages/fa-IR.min.js +1 -1
  67. package/dist/languages/fr-FR.min.js +1 -1
  68. package/dist/languages/hr-HR.min.js +1 -1
  69. package/dist/languages/it-IT.min.js +1 -1
  70. package/dist/languages/ja-JP.min.js +1 -1
  71. package/dist/languages/ko-KR.min.js +1 -1
  72. package/dist/languages/lv-LV.min.js +1 -1
  73. package/dist/languages/nb-NO.min.js +1 -1
  74. package/dist/languages/nl-NL.min.js +1 -1
  75. package/dist/languages/pl-PL.min.js +1 -1
  76. package/dist/languages/pt-BR.min.js +1 -1
  77. package/dist/languages/ru-RU.min.js +1 -1
  78. package/dist/languages/sr-SP.min.js +1 -1
  79. package/dist/languages/zh-CN.min.js +1 -1
  80. package/dist/languages/zh-TW.min.js +1 -1
  81. package/editorManager.js +5 -1
  82. package/editorManager.mjs +5 -1
  83. package/editors/autocompleteEditor/autocompleteEditor.d.ts +0 -12
  84. package/editors/autocompleteEditor/autocompleteEditor.js +42 -69
  85. package/editors/autocompleteEditor/autocompleteEditor.mjs +43 -70
  86. package/editors/baseEditor/baseEditor.js +1 -1
  87. package/editors/baseEditor/baseEditor.mjs +1 -1
  88. package/editors/dateEditor/dateEditor.js +2 -8
  89. package/editors/dateEditor/dateEditor.mjs +3 -9
  90. package/editors/handsontableEditor/handsontableEditor.d.ts +8 -0
  91. package/editors/handsontableEditor/handsontableEditor.js +173 -17
  92. package/editors/handsontableEditor/handsontableEditor.mjs +173 -17
  93. package/editors/passwordEditor/passwordEditor.js +2 -0
  94. package/editors/passwordEditor/passwordEditor.mjs +2 -0
  95. package/editors/registry.js +2 -3
  96. package/editors/registry.mjs +1 -1
  97. package/editors/textEditor/textEditor.js +2 -0
  98. package/editors/textEditor/textEditor.mjs +2 -0
  99. package/helpers/a11y.js +2 -0
  100. package/helpers/a11y.mjs +1 -0
  101. package/helpers/dom/element.d.ts +1 -0
  102. package/helpers/dom/element.js +26 -1
  103. package/helpers/dom/element.mjs +25 -1
  104. package/helpers/mixed.js +4 -4
  105. package/helpers/mixed.mjs +4 -4
  106. package/i18n/languages/ar-AR.js +1 -2
  107. package/i18n/languages/cs-CZ.js +1 -2
  108. package/i18n/languages/de-CH.js +1 -2
  109. package/i18n/languages/de-DE.js +1 -2
  110. package/i18n/languages/en-US.js +1 -2
  111. package/i18n/languages/es-MX.js +1 -2
  112. package/i18n/languages/fa-IR.js +1 -2
  113. package/i18n/languages/fr-FR.js +1 -2
  114. package/i18n/languages/hr-HR.js +1 -2
  115. package/i18n/languages/it-IT.js +1 -2
  116. package/i18n/languages/ja-JP.js +1 -2
  117. package/i18n/languages/ko-KR.js +1 -2
  118. package/i18n/languages/lv-LV.js +1 -2
  119. package/i18n/languages/nb-NO.js +1 -2
  120. package/i18n/languages/nl-NL.js +1 -2
  121. package/i18n/languages/pl-PL.js +1 -2
  122. package/i18n/languages/pt-BR.js +1 -2
  123. package/i18n/languages/ru-RU.js +1 -2
  124. package/i18n/languages/sr-SP.js +1 -2
  125. package/i18n/languages/zh-CN.js +1 -2
  126. package/i18n/languages/zh-TW.js +1 -2
  127. package/i18n/phraseFormatters/index.js +2 -2
  128. package/i18n/phraseFormatters/index.mjs +1 -1
  129. package/i18n/registry.js +3 -4
  130. package/i18n/registry.mjs +1 -1
  131. package/index.js +1 -2
  132. package/package.json +10 -4
  133. package/plugins/autoColumnSize/autoColumnSize.js +47 -0
  134. package/plugins/autoColumnSize/autoColumnSize.mjs +47 -0
  135. package/plugins/autoRowSize/autoRowSize.js +45 -0
  136. package/plugins/autoRowSize/autoRowSize.mjs +45 -0
  137. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +13 -0
  138. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +13 -0
  139. package/plugins/collapsibleColumns/collapsibleColumns.js +31 -0
  140. package/plugins/collapsibleColumns/collapsibleColumns.mjs +31 -0
  141. package/plugins/columnSorting/sortService/registry.js +3 -4
  142. package/plugins/columnSorting/sortService/registry.mjs +1 -1
  143. package/plugins/columnSummary/columnSummary.js +33 -0
  144. package/plugins/columnSummary/columnSummary.mjs +33 -0
  145. package/plugins/comments/commentEditor.js +8 -2
  146. package/plugins/comments/commentEditor.mjs +8 -2
  147. package/plugins/comments/comments.js +59 -15
  148. package/plugins/comments/comments.mjs +60 -16
  149. package/plugins/comments/contextMenuItem/addEditComment.js +1 -2
  150. package/plugins/comments/contextMenuItem/readOnlyComment.js +1 -2
  151. package/plugins/comments/contextMenuItem/removeComment.js +1 -2
  152. package/plugins/contextMenu/contextMenu.js +1 -1
  153. package/plugins/contextMenu/contextMenu.mjs +1 -1
  154. package/plugins/contextMenu/menu/menu.js +12 -6
  155. package/plugins/contextMenu/menu/menu.mjs +13 -7
  156. package/plugins/contextMenu/predefinedItems/alignment.js +1 -2
  157. package/plugins/contextMenu/predefinedItems/clearColumn.js +1 -2
  158. package/plugins/contextMenu/predefinedItems/columnLeft.js +1 -2
  159. package/plugins/contextMenu/predefinedItems/columnRight.js +1 -2
  160. package/plugins/contextMenu/predefinedItems/index.js +1 -2
  161. package/plugins/contextMenu/predefinedItems/readOnly.js +1 -2
  162. package/plugins/contextMenu/predefinedItems/redo.js +1 -2
  163. package/plugins/contextMenu/predefinedItems/removeColumn.js +1 -2
  164. package/plugins/contextMenu/predefinedItems/removeRow.js +1 -2
  165. package/plugins/contextMenu/predefinedItems/rowAbove.js +1 -2
  166. package/plugins/contextMenu/predefinedItems/rowBelow.js +1 -2
  167. package/plugins/contextMenu/predefinedItems/undo.js +1 -2
  168. package/plugins/copyPaste/contextMenuItem/cut.js +1 -2
  169. package/plugins/customBorders/contextMenuItem/bottom.js +1 -2
  170. package/plugins/customBorders/contextMenuItem/left.js +1 -2
  171. package/plugins/customBorders/contextMenuItem/noBorders.js +1 -2
  172. package/plugins/customBorders/contextMenuItem/right.js +1 -2
  173. package/plugins/customBorders/contextMenuItem/top.js +1 -2
  174. package/plugins/customBorders/customBorders.js +1 -2
  175. package/plugins/dropdownMenu/dropdownMenu.js +16 -1
  176. package/plugins/dropdownMenu/dropdownMenu.mjs +16 -1
  177. package/plugins/exportFile/exportFile.js +59 -2
  178. package/plugins/exportFile/exportFile.mjs +58 -0
  179. package/plugins/filters/component/actionBar.js +1 -2
  180. package/plugins/filters/component/condition.js +1 -2
  181. package/plugins/filters/component/value.js +1 -2
  182. package/plugins/filters/condition/beginsWith.js +1 -2
  183. package/plugins/filters/condition/between.js +1 -2
  184. package/plugins/filters/condition/contains.js +1 -2
  185. package/plugins/filters/condition/date/after.js +1 -2
  186. package/plugins/filters/condition/date/before.js +1 -2
  187. package/plugins/filters/condition/date/today.js +1 -2
  188. package/plugins/filters/condition/date/tomorrow.js +1 -2
  189. package/plugins/filters/condition/date/yesterday.js +1 -2
  190. package/plugins/filters/condition/empty.js +1 -2
  191. package/plugins/filters/condition/endsWith.js +1 -2
  192. package/plugins/filters/condition/equal.js +1 -2
  193. package/plugins/filters/condition/greaterThan.js +1 -2
  194. package/plugins/filters/condition/greaterThanOrEqual.js +1 -2
  195. package/plugins/filters/condition/lessThan.js +1 -2
  196. package/plugins/filters/condition/lessThanOrEqual.js +1 -2
  197. package/plugins/filters/condition/none.js +1 -2
  198. package/plugins/filters/condition/notBetween.js +1 -2
  199. package/plugins/filters/condition/notContains.js +1 -2
  200. package/plugins/filters/condition/notEmpty.js +1 -2
  201. package/plugins/filters/condition/notEqual.js +1 -2
  202. package/plugins/filters/filters.js +76 -3
  203. package/plugins/filters/filters.mjs +75 -1
  204. package/plugins/filters/logicalOperations/conjunction.js +1 -2
  205. package/plugins/filters/logicalOperations/disjunction.js +1 -2
  206. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +1 -2
  207. package/plugins/filters/ui/_base.js +1 -2
  208. package/plugins/filters/ui/multipleSelect.js +1 -7
  209. package/plugins/filters/ui/multipleSelect.mjs +0 -5
  210. package/plugins/filters/ui/select.js +1 -2
  211. package/plugins/formulas/engine/register.js +3 -4
  212. package/plugins/formulas/engine/register.mjs +1 -1
  213. package/plugins/formulas/formulas.js +40 -41
  214. package/plugins/formulas/formulas.mjs +39 -40
  215. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +1 -2
  216. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +1 -2
  217. package/plugins/hiddenColumns/hiddenColumns.js +64 -0
  218. package/plugins/hiddenColumns/hiddenColumns.mjs +64 -0
  219. package/plugins/hiddenRows/contextMenuItem/hideRow.js +1 -2
  220. package/plugins/hiddenRows/contextMenuItem/showRow.js +1 -2
  221. package/plugins/hiddenRows/hiddenRows.js +64 -0
  222. package/plugins/hiddenRows/hiddenRows.mjs +64 -0
  223. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +1 -2
  224. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +1 -2
  225. package/plugins/manualRowMove/manualRowMove.js +1 -1
  226. package/plugins/manualRowMove/manualRowMove.mjs +1 -1
  227. package/plugins/manualRowResize/manualRowResize.js +1 -1
  228. package/plugins/manualRowResize/manualRowResize.mjs +1 -1
  229. package/plugins/mergeCells/contextMenuItem/toggleMerge.js +1 -2
  230. package/plugins/mergeCells/mergeCells.js +56 -38
  231. package/plugins/mergeCells/mergeCells.mjs +56 -38
  232. package/plugins/mergeCells/utils.js +3 -4
  233. package/plugins/mergeCells/utils.mjs +3 -4
  234. package/plugins/nestedHeaders/nestedHeaders.js +37 -12
  235. package/plugins/nestedHeaders/nestedHeaders.mjs +37 -12
  236. package/plugins/nestedRows/nestedRows.js +12 -12
  237. package/plugins/nestedRows/nestedRows.mjs +12 -12
  238. package/plugins/nestedRows/ui/contextMenu.js +1 -2
  239. package/plugins/nestedRows/ui/headers.js +2 -3
  240. package/plugins/nestedRows/ui/headers.mjs +2 -3
  241. package/plugins/persistentState/persistentState.js +1 -1
  242. package/plugins/persistentState/persistentState.mjs +1 -1
  243. package/plugins/stretchColumns/calculator.js +3 -2
  244. package/plugins/stretchColumns/calculator.mjs +3 -2
  245. package/plugins/stretchColumns/stretchColumns.js +13 -0
  246. package/plugins/stretchColumns/stretchColumns.mjs +13 -0
  247. package/plugins/trimRows/trimRows.js +61 -0
  248. package/plugins/trimRows/trimRows.mjs +61 -0
  249. package/renderers/baseRenderer/baseRenderer.js +4 -0
  250. package/renderers/baseRenderer/baseRenderer.mjs +4 -0
  251. package/renderers/registry.js +2 -3
  252. package/renderers/registry.mjs +1 -1
  253. package/selection/mouseEventHandler.js +48 -13
  254. package/selection/mouseEventHandler.mjs +47 -13
  255. package/selection/range.js +73 -6
  256. package/selection/range.mjs +73 -6
  257. package/selection/selection.js +46 -32
  258. package/selection/selection.mjs +45 -30
  259. package/settings.d.ts +1 -0
  260. package/styles/handsontable.css +131 -55
  261. package/styles/handsontable.min.css +3 -3
  262. package/styles/ht-theme-horizon.css +296 -181
  263. package/styles/ht-theme-horizon.min.css +3 -3
  264. package/styles/ht-theme-main.css +314 -205
  265. package/styles/ht-theme-main.min.css +3 -3
  266. package/tableView.js +9 -20
  267. package/tableView.mjs +9 -20
  268. package/translations/indexMapper.js +9 -5
  269. package/translations/indexMapper.mjs +9 -5
  270. package/utils/paginator.js +13 -0
  271. package/utils/paginator.mjs +13 -0
  272. package/utils/staticRegister.js +24 -2
  273. package/utils/staticRegister.mjs +23 -2
  274. package/{3rdparty/walkontable/src/utils → utils}/stylesHandler.js +16 -30
  275. package/{3rdparty/walkontable/src/utils → utils}/stylesHandler.mjs +16 -30
  276. package/validators/registry.js +2 -3
  277. package/validators/registry.mjs +1 -1
package/CHANGELOG.md CHANGED
@@ -9,49 +9,71 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
9
9
 
10
10
  <!-- UNVERSIONED -->
11
11
 
12
+ ## [16.0.0] - 2025-07-09
13
+
14
+ ### Added
15
+ - **Breaking change**: Added an context and dropdown menu focus outline [#11669](https://github.com/handsontable/handsontable/pull/11669)
16
+ - Improve Handsontable editor types positioning [#11593](https://github.com/handsontable/handsontable/pull/11593)
17
+ - Add second click deselects cell feature [#11602](https://github.com/handsontable/handsontable/pull/11602)
18
+ - Added new `textEllipsis` option to the core [#11609](https://github.com/handsontable/handsontable/pull/11609)
19
+ - Added an backward compatibility for renamed CSS variables [#11676](https://github.com/handsontable/handsontable/pull/11676)
20
+ - Angular: Introduced a new Angular wrapper - `@handsontable/angular-wrapper`. [#11511](https://github.com/handsontable/handsontable/pull/11511)
21
+
22
+ ### Changed
23
+ - **Breaking change**: Updated CSS theme variables and added input radio variables [#11470](https://github.com/handsontable/handsontable/pull/11470)
24
+ - **Breaking change**: Change `modifyData` hook to use visual indxes for both row and column. [#11501](https://github.com/handsontable/handsontable/pull/11501)
25
+
26
+ ### Fixed
27
+ - **Breaking change**: Fixed and issue with custom border overlapping [#11551](https://github.com/handsontable/handsontable/pull/11551)
28
+ - **Breaking change**: Fixed an issue with accessibility and new DOM structure with wrapper and portal [#11579](https://github.com/handsontable/handsontable/pull/11579)
29
+ - Fixed a problem with the dropdown editor having a horizontal scrollbar on Windows with fractional scaling applied. [#11613](https://github.com/handsontable/handsontable/pull/11613)
30
+ - Fixed an issue with scrollbar styles on Safari browser [#11614](https://github.com/handsontable/handsontable/pull/11614)
31
+ - Fix column filter behavior when adding new column [#11616](https://github.com/handsontable/handsontable/pull/11616)
32
+ - Fixed an issue with dropdown elements color [#11661](https://github.com/handsontable/handsontable/pull/11661)
33
+ - Angular: Fixed error `this.hotInstance.getSettings(...).columns?.filter is not a function` in angular-wrapper. [#11695](https://github.com/handsontable/handsontable/pull/11695)
34
+
12
35
  ## [15.3.0] - 2025-04-29
13
36
 
14
37
  ### Added
15
- - Added missing boolean type to the editor in the react wrapper [#11514](https://github.com/handsontable/handsontable/pull/11514)
16
- - Fixed comments for IME and add a new `beforeCompositionstart` hook. [#11521](https://github.com/handsontable/handsontable/pull/11521)
17
- - Added horizontal scroll to the Filter's by value component [#11561](https://github.com/handsontable/handsontable/pull/11561)
18
- - Add optional formula sanitization for csv export to prevent CSV Injection attacks [#11592](https://github.com/handsontable/handsontable/pull/11592)
38
+ - Added a missing boolean type to the editor in the React wrapper. [#11514](https://github.com/handsontable/handsontable/pull/11514)
39
+ - Fixed the Comments plugin for IME editing and added a new `beforeCompositionstart` hook. [#11521](https://github.com/handsontable/handsontable/pull/11521)
40
+ - Added horizontal scroll to the Filter's "by value" component. [#11561](https://github.com/handsontable/handsontable/pull/11561)
41
+ - Added optional formula sanitization for CSV export to prevent CSV Injection attacks. [#11592](https://github.com/handsontable/handsontable/pull/11592)
19
42
 
20
43
  ### Changed
21
- - Improved the initialization time of Handsontable with formulas enabled [#11474](https://github.com/handsontable/handsontable/pull/11474)
22
- - Changed the size of the manual row and row resize guide line [#11507](https://github.com/handsontable/handsontable/pull/11507)
23
- - Improve viewport scrolling behavior [#11577](https://github.com/handsontable/handsontable/pull/11577)
44
+ - Improved the initialization time of Handsontable with Formulas enabled. [#11474](https://github.com/handsontable/handsontable/pull/11474)
45
+ - Changed the size of the Manual Row Resize and Manual Column Resize guide lines. [#11507](https://github.com/handsontable/handsontable/pull/11507)
46
+ - Improved the viewport scrolling behavior. [#11577](https://github.com/handsontable/handsontable/pull/11577)
24
47
 
25
48
  ### Fixed
26
- - Fixing issue with NestedRows plugin duplicating rows when moving children [#11362](https://github.com/handsontable/handsontable/pull/11362)
27
- - Fixed an issue with row resize line alignment and resize handle flickering [#11500](https://github.com/handsontable/handsontable/pull/11500)
28
- - Fixed an issue with autocomplete caret position after using scroll on a list of choices and dropdown width fixer [#11503](https://github.com/handsontable/handsontable/pull/11503)
29
- - Fixed copy, cut an paste actions on tables with a selection reaching outside of the rendered viewport. [#11504](https://github.com/handsontable/handsontable/pull/11504)
30
- - Fix submenu positiongin for all themes. [#11505](https://github.com/handsontable/handsontable/pull/11505)
49
+ - Fixed an issue with the NestedRows plugin duplicating rows when moving child rows. [#11362](https://github.com/handsontable/handsontable/pull/11362)
50
+ - Fixed an issue with row resize line alignment and resize handle flickering. [#11500](https://github.com/handsontable/handsontable/pull/11500)
51
+ - Fixed an issue with the Autocomplete caret position after using scroll on a list of choices and a problem with the dropdown width. [#11503](https://github.com/handsontable/handsontable/pull/11503)
52
+ - Fixed the submenu positioning for all themes. [#11505](https://github.com/handsontable/handsontable/pull/11505)
31
53
  - Fixed a problem where re-enabling the Hidden Columns configuration caused an error to be thrown if a selection was a part of the hidden range. [#11508](https://github.com/handsontable/handsontable/pull/11508)
32
- - Fixed an issue with empty parentNode in the table getCords method [#11509](https://github.com/handsontable/handsontable/pull/11509)
33
- - Improved undo/redo working for removed rows/columns [#11515](https://github.com/handsontable/handsontable/pull/11515)
34
- - Fixed rows height calculations for merged cells on Safari [#11517](https://github.com/handsontable/handsontable/pull/11517)
35
- - Fixed missing (incorrect) render call after dataset change [#11529](https://github.com/handsontable/handsontable/pull/11529)
36
- - Fixed an issue with the mobile keyboard closing after clicking the filter search input on Android devices [#11532](https://github.com/handsontable/handsontable/pull/11532)
54
+ - Fixed an issue with an empty `parentNode` in the table's `getCords` method. [#11509](https://github.com/handsontable/handsontable/pull/11509)
55
+ - Improved the Undo/Redo actions for removing rows and columns. [#11515](https://github.com/handsontable/handsontable/pull/11515)
56
+ - Fixed rows' height calculations for merged cells on Safari. [#11517](https://github.com/handsontable/handsontable/pull/11517)
57
+ - Fixed the missing (incorrect) render call after dataset change. [#11529](https://github.com/handsontable/handsontable/pull/11529)
58
+ - Fixed an issue with the mobile keyboard closing after clicking the filter search input on Android devices. [#11532](https://github.com/handsontable/handsontable/pull/11532)
37
59
  - Fixed a problem with multiple row header levels being rendered in reverse order. [#11533](https://github.com/handsontable/handsontable/pull/11533)
38
- - Fixed `TypeError` error for AutoRowSize plugin [#11537](https://github.com/handsontable/handsontable/pull/11537)
39
- - Allow changing the selection after filter is applied [#11538](https://github.com/handsontable/handsontable/pull/11538)
40
- - Fixed a problem with the autocomplete editor rendering very slowly when provided with a long list of choices. [#11552](https://github.com/handsontable/handsontable/pull/11552)
41
- - Fixed an issue with focus catcher accessibility [#11553](https://github.com/handsontable/handsontable/pull/11553)
42
- - Fixed `TypeError` for rows removal for bottom overlay [#11555](https://github.com/handsontable/handsontable/pull/11555)
43
- - Fixed calculating the first row height [#11557](https://github.com/handsontable/handsontable/pull/11557)
44
- - Fixed an issue with highlighting the cell after call updateData [#11558](https://github.com/handsontable/handsontable/pull/11558)
45
- - Fixed unmerge cells action triggered form keyboard shortcut [#11559](https://github.com/handsontable/handsontable/pull/11559)
46
- - Fixed arrow left/right shortcuts for menu when the table was configured as `layoutDirection: rtl`. [#11562](https://github.com/handsontable/handsontable/pull/11562)
47
- - Fixed an issue with duplicate boolean values in filters [#11563](https://github.com/handsontable/handsontable/pull/11563)
48
- - Fixed an issue with data source for non-string values in the `name` property [#11565](https://github.com/handsontable/handsontable/pull/11565)
49
- - Fixed settings object not being updated after new hooks [#11566](https://github.com/handsontable/handsontable/pull/11566)
60
+ - Fixed a `TypeError` error for the `AutoRowSize` plugin. [#11537](https://github.com/handsontable/handsontable/pull/11537)
61
+ - Allow changing the selection after a filter was applied. [#11538](https://github.com/handsontable/handsontable/pull/11538)
62
+ - Fixed a problem with the Autocomplete editor rendering very slowly when provided with a long list of choices. [#11552](https://github.com/handsontable/handsontable/pull/11552)
63
+ - Fixed an issue with the focus catcher accessibility. [#11553](https://github.com/handsontable/handsontable/pull/11553)
64
+ - Fixed a `TypeError` error being thrown after removing rows on the bottom overlay. [#11555](https://github.com/handsontable/handsontable/pull/11555)
65
+ - Fixed calculating the first row height. [#11557](https://github.com/handsontable/handsontable/pull/11557)
66
+ - Fixed an issue with highlighting a cell after calling `updateData`. [#11558](https://github.com/handsontable/handsontable/pull/11558)
67
+ - Fixed the "unmerge cells" action triggered form keyboard shortcut. [#11559](https://github.com/handsontable/handsontable/pull/11559)
68
+ - Fixed the left/right-arrow shortcuts for menus when the table was configured with `layoutDirection: rtl`. [#11562](https://github.com/handsontable/handsontable/pull/11562)
69
+ - Fixed an issue with duplicate boolean values in the filters. [#11563](https://github.com/handsontable/handsontable/pull/11563)
70
+ - Fixed an issue with data sources with non-string values under the `name` property. [#11565](https://github.com/handsontable/handsontable/pull/11565)
71
+ - Fixed the settings object not being updated after adding new hooks. [#11566](https://github.com/handsontable/handsontable/pull/11566)
50
72
  - Fixed a problem with the table rendering all rows when it's configured to have `0px` height. [#11567](https://github.com/handsontable/handsontable/pull/11567)
51
- - Fixed copy/paste/cut functionalities for web components [#11572](https://github.com/handsontable/handsontable/pull/11572)
73
+ - Fixed the copy/paste/cut functionalities for web components. [#11572](https://github.com/handsontable/handsontable/pull/11572)
52
74
  - Fixed the `allowInvalid` option (both `true` and `false`) for the Dropdown Editor. [#11587](https://github.com/handsontable/handsontable/pull/11587)
53
75
  - Fixed a problem with a deprecation warnings being thrown when using Context Menu's Undo and Redo items. [#11588](https://github.com/handsontable/handsontable/pull/11588)
54
- - Fixed an error being thrown when editing a Autocomplete-typed cells with a long list of choices rendered in a small container. [#11589](https://github.com/handsontable/handsontable/pull/11589)
76
+ - Fixed an error being thrown when editing Autocomplete-typed cells with a long list of choices rendered in a small container. [#11589](https://github.com/handsontable/handsontable/pull/11589)
55
77
  - Ensured that there's a single `@charset` entry in the classic theme's CSS files and that it's placed at the beginning of those files. [#11591](https://github.com/handsontable/handsontable/pull/11591)
56
78
 
57
79
  ## [15.2.0] - 2025-03-19
package/README.md CHANGED
@@ -80,8 +80,8 @@ You can also use [Yarn](https://yarnpkg.com/package/handsontable), [NuGet](https
80
80
  ### Provide an HTML container
81
81
 
82
82
  ```html
83
- <!-- Set the container's ID and apply the desired theme -->
84
- <div id="handsontable-example" class="ht-theme-main-dark-auto"></div>
83
+ <!-- Set the container's ID -->
84
+ <div id="handsontable-grid"></div>
85
85
  ```
86
86
 
87
87
  ### Setup
@@ -96,6 +96,9 @@ You can also use [Yarn](https://yarnpkg.com/package/handsontable), [NuGet](https
96
96
  const element = document.getElementById('handsontable-grid');
97
97
 
98
98
  new Handsontable(element, {
99
+ // theme name with obligatory ht-theme-* prefix
100
+ themeName: 'ht-theme-main-dark-auto',
101
+ // other options
99
102
  data: [
100
103
  { company: 'Tagcat', country: 'United Kingdom', rating: 4.4 },
101
104
  { company: 'Zoomzone', country: 'Japan', rating: 4.5 },
@@ -143,12 +146,15 @@ You can also use [Yarn](https://yarnpkg.com/package/handsontable), [NuGet](https
143
146
  />
144
147
  </head>
145
148
  <body>
146
- <div id="handsontable-grid" class="ht-theme-main-dark-auto"></div>
149
+ <div id="handsontable-grid"></div>
147
150
  <script src="https://cdn.jsdelivr.net/npm/handsontable/dist/handsontable.full.min.js"></script>
148
151
  <script>
149
152
  const element = document.getElementById("handsontable-grid");
150
153
 
151
154
  new Handsontable(element, {
155
+ // theme name with obligatory ht-theme-* prefix
156
+ themeName: 'ht-theme-main-dark-auto',
157
+ // other options
152
158
  data: [
153
159
  { company: "Tagcat", country: "United Kingdom", rating: 4.4 },
154
160
  { company: "Zoomzone", country: "Japan", rating: 4.5 },
@@ -218,7 +224,7 @@ At first glance, it might seem that a data table, spreadsheet, and data grid are
218
224
  If you're using Handsontable with a free, non-commercial license, you can:
219
225
  - Join the conversation on [GitHub Discussions](https://github.com/handsontable/handsontable/discussions) to share ideas, suggest features, or discuss changes.
220
226
  - Report any bugs you find on our [GitHub Issue Board](https://github.com/handsontable/handsontable/issues).
221
- - Connect with other developers and find answers on our [Developer Forum](https://handsontable.com/forum).
227
+ - Connect with other developers and find answers on our [Developer Forum](https://forum.handsontable.com).
222
228
 
223
229
  If you have a commercial license, feel free to contact us directly at [support@handsontable.com](mailto:support@handsontable.com) or use our [contact form](https://handsontable.com/contact?category=technical_support).
224
230
 
package/base.js CHANGED
@@ -45,8 +45,8 @@ Handsontable.hooks = _hooks.Hooks.getSingleton();
45
45
  Handsontable.CellCoords = _src.CellCoords;
46
46
  Handsontable.CellRange = _src.CellRange;
47
47
  Handsontable.packageName = 'handsontable';
48
- Handsontable.buildDate = "24/04/2025 10:58:57";
49
- Handsontable.version = "15.3.0";
48
+ Handsontable.buildDate = "02/07/2025 09:18:40";
49
+ Handsontable.version = "16.0.0-next-f486b48-20250702";
50
50
  Handsontable.languages = {
51
51
  dictionaryKeys: _registry.dictionaryKeys,
52
52
  getLanguageDictionary: _registry.getLanguageDictionary,
package/base.mjs CHANGED
@@ -35,8 +35,8 @@ Handsontable.hooks = Hooks.getSingleton();
35
35
  Handsontable.CellCoords = CellCoords;
36
36
  Handsontable.CellRange = CellRange;
37
37
  Handsontable.packageName = 'handsontable';
38
- Handsontable.buildDate = "24/04/2025 10:59:00";
39
- Handsontable.version = "15.3.0";
38
+ Handsontable.buildDate = "02/07/2025 09:18:46";
39
+ Handsontable.version = "16.0.0-next-f486b48-20250702";
40
40
  Handsontable.languages = {
41
41
  dictionaryKeys,
42
42
  getLanguageDictionary,
@@ -4,18 +4,17 @@ exports.__esModule = true;
4
4
  exports.getCellType = _getItem;
5
5
  exports.registerCellType = _register;
6
6
  require("core-js/modules/es.error.cause.js");
7
- var _staticRegister = _interopRequireDefault(require("../utils/staticRegister"));
7
+ var _staticRegister = require("../utils/staticRegister");
8
8
  var _registry = require("../editors/registry");
9
9
  var _registry2 = require("../renderers/registry");
10
10
  var _registry3 = require("../validators/registry");
11
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
11
  const {
13
12
  register,
14
13
  getItem,
15
14
  hasItem,
16
15
  getNames,
17
16
  getValues
18
- } = (0, _staticRegister.default)('cellTypes');
17
+ } = (0, _staticRegister.staticRegister)('cellTypes');
19
18
 
20
19
  /**
21
20
  * Retrieve cell type object.
@@ -1,5 +1,5 @@
1
1
  import "core-js/modules/es.error.cause.js";
2
- import staticRegister from "../utils/staticRegister.mjs";
2
+ import { staticRegister } from "../utils/staticRegister.mjs";
3
3
  import { registerEditor } from "../editors/registry.mjs";
4
4
  import { registerRenderer } from "../renderers/registry.mjs";
5
5
  import { registerValidator } from "../validators/registry.mjs";
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ require("core-js/modules/es.error.cause.js");
5
+ function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
6
+ function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
7
+ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
8
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
9
+ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
10
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
11
+ var _rowIndexMapper = /*#__PURE__*/new WeakMap();
12
+ var _columnIndexMapper = /*#__PURE__*/new WeakMap();
13
+ var _CellRangeToRenderableMapper_brand = /*#__PURE__*/new WeakSet();
14
+ /* eslint-disable jsdoc/require-description-complete-sentence */
15
+ /**
16
+ * CellRangeToRenderableMapper is a utility responsible for converting CellRange instances
17
+ * defined in visual coordinates (which may include hidden rows/columns) into renderable
18
+ * coordinates (excluding hidden indices).
19
+ *
20
+ * This class encapsulates the translation logic, allowing other modules to operate
21
+ * on renderable coordinates without needing to be aware of the underlying index mapping implementation.
22
+ *
23
+ * It promotes separation of concerns by decoupling the transformation logic from data structures
24
+ * like CellRange or CellCoords, keeping those classes clean and focused on structural concerns.
25
+ *
26
+ * Example usage:
27
+ * import { resolveWithInstance } from './utils/staticRegister';
28
+ *
29
+ * const cellRange = new CellRange(...);
30
+ * const renderableRange = resolveWithInstance(this.hot, 'cellRangeMapper')
31
+ * .toRenderable(cellRange);
32
+ */
33
+ class CellRangeToRenderableMapper {
34
+ constructor(_ref) {
35
+ let {
36
+ rowIndexMapper,
37
+ columnIndexMapper
38
+ } = _ref;
39
+ /**
40
+ * Gets nearest coordinates that points to the visible row and column indexes. If there are no visible
41
+ * rows and/or columns the `null` value is returned.
42
+ *
43
+ * @private
44
+ * @param {CellCoords} coords The coords object as starting point for finding the nearest visible coordinates.
45
+ * @param {1|-1} rowSearchDirection The search direction. For value 1, it means searching from top to bottom for
46
+ * rows and from left to right for columns. For -1, it is the other way around.
47
+ * @param {1|-1} columnSearchDirection The same as above but for rows.
48
+ * @returns {CellCoords|null} Visual cell coordinates.
49
+ */
50
+ _classPrivateMethodInitSpec(this, _CellRangeToRenderableMapper_brand);
51
+ /**
52
+ * The instance of the IndexMapper class for row indexes.
53
+ *
54
+ * @param {IndexMapper}
55
+ */
56
+ _classPrivateFieldInitSpec(this, _rowIndexMapper, void 0);
57
+ /**
58
+ * The instance of the IndexMapper class for row indexes.
59
+ *
60
+ * @param {IndexMapper}
61
+ */
62
+ _classPrivateFieldInitSpec(this, _columnIndexMapper, void 0);
63
+ _classPrivateFieldSet(_rowIndexMapper, this, rowIndexMapper);
64
+ _classPrivateFieldSet(_columnIndexMapper, this, columnIndexMapper);
65
+ }
66
+
67
+ /**
68
+ * Converts the visual coordinates of the CellRange instance to the renderable coordinates.
69
+ *
70
+ * @param {CellRange} range The CellRange instance with defined visual coordinates.
71
+ * @returns {CellRange | null}
72
+ */
73
+ toRenderable(range) {
74
+ const rowDirection = range.getVerticalDirection() === 'N-S' ? 1 : -1;
75
+ const columnDirection = range.getHorizontalDirection() === 'W-E' ? 1 : -1;
76
+ const from = _assertClassBrand(_CellRangeToRenderableMapper_brand, this, _getNearestNotHiddenCoords).call(this, range.from, rowDirection, columnDirection);
77
+ if (from === null) {
78
+ return null;
79
+ }
80
+ const to = _assertClassBrand(_CellRangeToRenderableMapper_brand, this, _getNearestNotHiddenCoords).call(this, range.to, -rowDirection, -columnDirection);
81
+ if (to === null) {
82
+ return null;
83
+ }
84
+ const newRange = range.clone();
85
+ newRange.from = from;
86
+ newRange.to = to;
87
+ if (!newRange.includes(range.highlight)) {
88
+ newRange.highlight = from;
89
+ }
90
+ return newRange;
91
+ }
92
+ }
93
+ exports.CellRangeToRenderableMapper = CellRangeToRenderableMapper;
94
+ function _getNearestNotHiddenCoords(coords, rowSearchDirection) {
95
+ let columnSearchDirection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : rowSearchDirection;
96
+ const nextVisibleRow = _assertClassBrand(_CellRangeToRenderableMapper_brand, this, _getNearestNotHiddenIndex).call(this, _classPrivateFieldGet(_rowIndexMapper, this), coords.row, rowSearchDirection);
97
+ if (nextVisibleRow === null) {
98
+ return null;
99
+ }
100
+ const nextVisibleColumn = _assertClassBrand(_CellRangeToRenderableMapper_brand, this, _getNearestNotHiddenIndex).call(this, _classPrivateFieldGet(_columnIndexMapper, this), coords.col, columnSearchDirection);
101
+ if (nextVisibleColumn === null) {
102
+ return null;
103
+ }
104
+ return coords.clone().assign({
105
+ row: nextVisibleRow,
106
+ col: nextVisibleColumn
107
+ });
108
+ }
109
+ /**
110
+ * Gets nearest visual index. If there are no visible rows or columns the `null` value is returned.
111
+ *
112
+ * @private
113
+ * @param {IndexMapper} indexMapper The IndexMapper instance for specific axis.
114
+ * @param {number} visualIndex The index as starting point for finding the nearest visible index.
115
+ * @param {1|-1} searchDirection The search direction. For value 1, it means searching from top to bottom for
116
+ * rows and from left to right for columns. For -1, it is the other way around.
117
+ * @returns {number|null} Visual row/column index.
118
+ */
119
+ function _getNearestNotHiddenIndex(indexMapper, visualIndex, searchDirection) {
120
+ if (visualIndex < 0) {
121
+ return visualIndex;
122
+ }
123
+ return indexMapper.getNearestNotHiddenIndex(visualIndex, searchDirection);
124
+ }
@@ -0,0 +1,120 @@
1
+ import "core-js/modules/es.error.cause.js";
2
+ function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
3
+ function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
4
+ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
5
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
6
+ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
7
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
8
+ var _rowIndexMapper = /*#__PURE__*/new WeakMap();
9
+ var _columnIndexMapper = /*#__PURE__*/new WeakMap();
10
+ var _CellRangeToRenderableMapper_brand = /*#__PURE__*/new WeakSet();
11
+ /* eslint-disable jsdoc/require-description-complete-sentence */
12
+ /**
13
+ * CellRangeToRenderableMapper is a utility responsible for converting CellRange instances
14
+ * defined in visual coordinates (which may include hidden rows/columns) into renderable
15
+ * coordinates (excluding hidden indices).
16
+ *
17
+ * This class encapsulates the translation logic, allowing other modules to operate
18
+ * on renderable coordinates without needing to be aware of the underlying index mapping implementation.
19
+ *
20
+ * It promotes separation of concerns by decoupling the transformation logic from data structures
21
+ * like CellRange or CellCoords, keeping those classes clean and focused on structural concerns.
22
+ *
23
+ * Example usage:
24
+ * import { resolveWithInstance } from './utils/staticRegister';
25
+ *
26
+ * const cellRange = new CellRange(...);
27
+ * const renderableRange = resolveWithInstance(this.hot, 'cellRangeMapper')
28
+ * .toRenderable(cellRange);
29
+ */
30
+ export class CellRangeToRenderableMapper {
31
+ constructor(_ref) {
32
+ let {
33
+ rowIndexMapper,
34
+ columnIndexMapper
35
+ } = _ref;
36
+ /**
37
+ * Gets nearest coordinates that points to the visible row and column indexes. If there are no visible
38
+ * rows and/or columns the `null` value is returned.
39
+ *
40
+ * @private
41
+ * @param {CellCoords} coords The coords object as starting point for finding the nearest visible coordinates.
42
+ * @param {1|-1} rowSearchDirection The search direction. For value 1, it means searching from top to bottom for
43
+ * rows and from left to right for columns. For -1, it is the other way around.
44
+ * @param {1|-1} columnSearchDirection The same as above but for rows.
45
+ * @returns {CellCoords|null} Visual cell coordinates.
46
+ */
47
+ _classPrivateMethodInitSpec(this, _CellRangeToRenderableMapper_brand);
48
+ /**
49
+ * The instance of the IndexMapper class for row indexes.
50
+ *
51
+ * @param {IndexMapper}
52
+ */
53
+ _classPrivateFieldInitSpec(this, _rowIndexMapper, void 0);
54
+ /**
55
+ * The instance of the IndexMapper class for row indexes.
56
+ *
57
+ * @param {IndexMapper}
58
+ */
59
+ _classPrivateFieldInitSpec(this, _columnIndexMapper, void 0);
60
+ _classPrivateFieldSet(_rowIndexMapper, this, rowIndexMapper);
61
+ _classPrivateFieldSet(_columnIndexMapper, this, columnIndexMapper);
62
+ }
63
+
64
+ /**
65
+ * Converts the visual coordinates of the CellRange instance to the renderable coordinates.
66
+ *
67
+ * @param {CellRange} range The CellRange instance with defined visual coordinates.
68
+ * @returns {CellRange | null}
69
+ */
70
+ toRenderable(range) {
71
+ const rowDirection = range.getVerticalDirection() === 'N-S' ? 1 : -1;
72
+ const columnDirection = range.getHorizontalDirection() === 'W-E' ? 1 : -1;
73
+ const from = _assertClassBrand(_CellRangeToRenderableMapper_brand, this, _getNearestNotHiddenCoords).call(this, range.from, rowDirection, columnDirection);
74
+ if (from === null) {
75
+ return null;
76
+ }
77
+ const to = _assertClassBrand(_CellRangeToRenderableMapper_brand, this, _getNearestNotHiddenCoords).call(this, range.to, -rowDirection, -columnDirection);
78
+ if (to === null) {
79
+ return null;
80
+ }
81
+ const newRange = range.clone();
82
+ newRange.from = from;
83
+ newRange.to = to;
84
+ if (!newRange.includes(range.highlight)) {
85
+ newRange.highlight = from;
86
+ }
87
+ return newRange;
88
+ }
89
+ }
90
+ function _getNearestNotHiddenCoords(coords, rowSearchDirection) {
91
+ let columnSearchDirection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : rowSearchDirection;
92
+ const nextVisibleRow = _assertClassBrand(_CellRangeToRenderableMapper_brand, this, _getNearestNotHiddenIndex).call(this, _classPrivateFieldGet(_rowIndexMapper, this), coords.row, rowSearchDirection);
93
+ if (nextVisibleRow === null) {
94
+ return null;
95
+ }
96
+ const nextVisibleColumn = _assertClassBrand(_CellRangeToRenderableMapper_brand, this, _getNearestNotHiddenIndex).call(this, _classPrivateFieldGet(_columnIndexMapper, this), coords.col, columnSearchDirection);
97
+ if (nextVisibleColumn === null) {
98
+ return null;
99
+ }
100
+ return coords.clone().assign({
101
+ row: nextVisibleRow,
102
+ col: nextVisibleColumn
103
+ });
104
+ }
105
+ /**
106
+ * Gets nearest visual index. If there are no visible rows or columns the `null` value is returned.
107
+ *
108
+ * @private
109
+ * @param {IndexMapper} indexMapper The IndexMapper instance for specific axis.
110
+ * @param {number} visualIndex The index as starting point for finding the nearest visible index.
111
+ * @param {1|-1} searchDirection The search direction. For value 1, it means searching from top to bottom for
112
+ * rows and from left to right for columns. For -1, it is the other way around.
113
+ * @returns {number|null} Visual row/column index.
114
+ */
115
+ function _getNearestNotHiddenIndex(indexMapper, visualIndex, searchDirection) {
116
+ if (visualIndex < 0) {
117
+ return visualIndex;
118
+ }
119
+ return indexMapper.getNearestNotHiddenIndex(visualIndex, searchDirection);
120
+ }
@@ -21,8 +21,8 @@ function installFocusDetector(hot) {
21
21
  const inputTrapBottom = createInputElement(hot);
22
22
  inputTrapTop.addEventListener('focus', () => hooks === null || hooks === void 0 ? void 0 : hooks.onFocusFromTop());
23
23
  inputTrapBottom.addEventListener('focus', () => hooks === null || hooks === void 0 ? void 0 : hooks.onFocusFromBottom());
24
- rootElement.firstChild.before(inputTrapTop);
25
- rootElement.lastChild.after(inputTrapBottom);
24
+ rootElement.before(inputTrapTop);
25
+ rootElement.after(inputTrapBottom);
26
26
  return {
27
27
  /**
28
28
  * Activates the detector by resetting the tabIndex of the input elements.
@@ -17,8 +17,8 @@ export function installFocusDetector(hot) {
17
17
  const inputTrapBottom = createInputElement(hot);
18
18
  inputTrapTop.addEventListener('focus', () => hooks === null || hooks === void 0 ? void 0 : hooks.onFocusFromTop());
19
19
  inputTrapBottom.addEventListener('focus', () => hooks === null || hooks === void 0 ? void 0 : hooks.onFocusFromBottom());
20
- rootElement.firstChild.before(inputTrapTop);
21
- rootElement.lastChild.after(inputTrapBottom);
20
+ rootElement.before(inputTrapTop);
21
+ rootElement.after(inputTrapBottom);
22
22
  return {
23
23
  /**
24
24
  * Activates the detector by resetting the tabIndex of the input elements.