handsontable 15.3.0-next-175012b-20250429 → 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 +23 -0
  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/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-grid" 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 = "29/04/2025 10:34:56";
49
- Handsontable.version = "15.3.0-next-175012b-20250429";
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 = "29/04/2025 10:35:02";
39
- Handsontable.version = "15.3.0-next-175012b-20250429";
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.