handsontable 0.0.0-next-baf2fcf-20230809 → 0.0.0-next-08765b9-20230809

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of handsontable might be problematic. Click here for more details.

Files changed (299) hide show
  1. package/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
  2. package/3rdparty/walkontable/src/cell/coords.js +50 -11
  3. package/3rdparty/walkontable/src/cell/coords.mjs +50 -11
  4. package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
  5. package/3rdparty/walkontable/src/cell/range.js +38 -7
  6. package/3rdparty/walkontable/src/cell/range.mjs +38 -7
  7. package/3rdparty/walkontable/src/core/_base.js +9 -3
  8. package/3rdparty/walkontable/src/core/_base.mjs +9 -3
  9. package/3rdparty/walkontable/src/core/clone.js +2 -2
  10. package/3rdparty/walkontable/src/core/clone.mjs +2 -2
  11. package/3rdparty/walkontable/src/core/core.js +3 -2
  12. package/3rdparty/walkontable/src/core/core.mjs +3 -2
  13. package/3rdparty/walkontable/src/event.js +7 -7
  14. package/3rdparty/walkontable/src/event.mjs +7 -7
  15. package/3rdparty/walkontable/src/facade/core.js +2 -2
  16. package/3rdparty/walkontable/src/facade/core.mjs +2 -2
  17. package/3rdparty/walkontable/src/index.js +10 -2
  18. package/3rdparty/walkontable/src/index.mjs +2 -2
  19. package/3rdparty/walkontable/src/overlay/_base.js +1 -1
  20. package/3rdparty/walkontable/src/overlay/_base.mjs +1 -1
  21. package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -6
  22. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -6
  23. package/3rdparty/walkontable/src/overlay/top.js +2 -6
  24. package/3rdparty/walkontable/src/overlay/top.mjs +2 -6
  25. package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +7 -12
  26. package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
  27. package/3rdparty/walkontable/src/selection/border/constants.js +16 -0
  28. package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
  29. package/3rdparty/walkontable/src/selection/constants.js +62 -0
  30. package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
  31. package/3rdparty/walkontable/src/selection/index.js +26 -0
  32. package/3rdparty/walkontable/src/selection/index.mjs +5 -0
  33. package/3rdparty/walkontable/src/selection/manager.js +259 -0
  34. package/3rdparty/walkontable/src/selection/manager.mjs +254 -0
  35. package/3rdparty/walkontable/src/selection/scanner.js +270 -0
  36. package/3rdparty/walkontable/src/selection/scanner.mjs +267 -0
  37. package/3rdparty/walkontable/src/selection/selection.js +101 -0
  38. package/3rdparty/walkontable/src/selection/selection.mjs +96 -0
  39. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +9 -0
  40. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
  41. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +9 -0
  42. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
  43. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +9 -0
  44. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
  45. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +9 -0
  46. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
  47. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -0
  48. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
  49. package/3rdparty/walkontable/src/table.js +6 -78
  50. package/3rdparty/walkontable/src/table.mjs +7 -79
  51. package/base.js +2 -2
  52. package/base.mjs +2 -2
  53. package/common.d.ts +1 -1
  54. package/core/focusCatcher/focusDetector.js +58 -0
  55. package/core/focusCatcher/focusDetector.mjs +54 -0
  56. package/core/focusCatcher/index.js +142 -0
  57. package/core/focusCatcher/index.mjs +138 -0
  58. package/core/index.js +9 -0
  59. package/core/index.mjs +1 -0
  60. package/core.d.ts +6 -3
  61. package/core.js +173 -290
  62. package/core.mjs +173 -290
  63. package/dataMap/metaManager/metaSchema.js +41 -0
  64. package/dataMap/metaManager/metaSchema.mjs +41 -0
  65. package/dist/handsontable.css +24 -4
  66. package/dist/handsontable.full.css +24 -4
  67. package/dist/handsontable.full.js +8676 -5381
  68. package/dist/handsontable.full.min.css +3 -3
  69. package/dist/handsontable.full.min.js +25 -25
  70. package/dist/handsontable.js +10984 -7689
  71. package/dist/handsontable.min.css +3 -3
  72. package/dist/handsontable.min.js +19 -19
  73. package/editorManager.js +11 -75
  74. package/editorManager.mjs +11 -74
  75. package/editors/baseEditor/baseEditor.d.ts +0 -1
  76. package/editors/textEditor/textEditor.js +3 -11
  77. package/editors/textEditor/textEditor.mjs +4 -12
  78. package/helpers/mixed.js +1 -1
  79. package/helpers/mixed.mjs +1 -1
  80. package/helpers/number.d.ts +1 -0
  81. package/helpers/number.js +18 -0
  82. package/helpers/number.mjs +17 -0
  83. package/package.json +1 -1
  84. package/pluginHooks.d.ts +7 -1
  85. package/pluginHooks.js +106 -1
  86. package/pluginHooks.mjs +106 -1
  87. package/plugins/collapsibleColumns/collapsibleColumns.js +58 -4
  88. package/plugins/collapsibleColumns/collapsibleColumns.mjs +58 -4
  89. package/plugins/columnSorting/columnSorting.js +38 -0
  90. package/plugins/columnSorting/columnSorting.mjs +38 -2
  91. package/plugins/columnSorting/index.js +3 -1
  92. package/plugins/columnSorting/index.mjs +1 -1
  93. package/plugins/comments/commentEditor.js +1 -0
  94. package/plugins/comments/commentEditor.mjs +1 -0
  95. package/plugins/comments/comments.js +251 -189
  96. package/plugins/comments/comments.mjs +250 -190
  97. package/plugins/comments/contextMenuItem/addEditComment.js +41 -0
  98. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  99. package/plugins/comments/contextMenuItem/readOnlyComment.js +49 -0
  100. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +43 -0
  101. package/plugins/comments/contextMenuItem/removeComment.js +38 -0
  102. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  103. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  104. package/plugins/contextMenu/contextMenu.js +72 -30
  105. package/plugins/contextMenu/contextMenu.mjs +73 -31
  106. package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
  107. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  108. package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
  109. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  110. package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
  111. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  112. package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
  113. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  114. package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
  115. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  116. package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
  117. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  118. package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
  119. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  120. package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
  121. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  122. package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
  123. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  124. package/plugins/contextMenu/utils.js +28 -16
  125. package/plugins/contextMenu/utils.mjs +27 -15
  126. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  127. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  128. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  129. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  130. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  131. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  132. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  133. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  134. package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
  135. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  136. package/plugins/copyPaste/copyPaste.js +14 -10
  137. package/plugins/copyPaste/copyPaste.mjs +14 -10
  138. package/plugins/customBorders/customBorders.js +23 -20
  139. package/plugins/customBorders/customBorders.mjs +24 -21
  140. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  141. package/plugins/dropdownMenu/dropdownMenu.js +89 -32
  142. package/plugins/dropdownMenu/dropdownMenu.mjs +89 -32
  143. package/plugins/filters/filters.js +31 -14
  144. package/plugins/filters/filters.mjs +30 -13
  145. package/plugins/manualColumnResize/manualColumnResize.js +0 -6
  146. package/plugins/manualColumnResize/manualColumnResize.mjs +1 -7
  147. package/plugins/mergeCells/mergeCells.js +5 -17
  148. package/plugins/mergeCells/mergeCells.mjs +5 -17
  149. package/plugins/multiColumnSorting/multiColumnSorting.js +37 -2
  150. package/plugins/multiColumnSorting/multiColumnSorting.mjs +37 -2
  151. package/plugins/nestedHeaders/nestedHeaders.js +121 -8
  152. package/plugins/nestedHeaders/nestedHeaders.mjs +121 -8
  153. package/plugins/nestedHeaders/stateManager/index.js +37 -0
  154. package/plugins/nestedHeaders/stateManager/index.mjs +37 -0
  155. package/plugins/nestedRows/nestedRows.js +41 -0
  156. package/plugins/nestedRows/nestedRows.mjs +41 -0
  157. package/renderers/checkboxRenderer/checkboxRenderer.js +2 -2
  158. package/renderers/checkboxRenderer/checkboxRenderer.mjs +1 -1
  159. package/selection/highlight/highlight.js +256 -71
  160. package/selection/highlight/highlight.mjs +250 -71
  161. package/selection/highlight/types/activeHeader.js +10 -8
  162. package/selection/highlight/types/activeHeader.mjs +10 -8
  163. package/selection/highlight/types/area.js +6 -18
  164. package/selection/highlight/types/area.mjs +6 -18
  165. package/selection/highlight/types/areaLayered.js +31 -0
  166. package/selection/highlight/types/areaLayered.mjs +26 -0
  167. package/selection/highlight/types/column.js +27 -0
  168. package/selection/highlight/types/column.mjs +22 -0
  169. package/selection/highlight/types/customSelection.js +7 -9
  170. package/selection/highlight/types/customSelection.mjs +7 -9
  171. package/selection/highlight/types/fill.js +5 -7
  172. package/selection/highlight/types/fill.mjs +5 -7
  173. package/selection/highlight/types/{cell.js → focus.js} +5 -7
  174. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  175. package/selection/highlight/types/header.js +9 -18
  176. package/selection/highlight/types/header.mjs +9 -18
  177. package/selection/highlight/types/row.js +27 -0
  178. package/selection/highlight/types/row.mjs +22 -0
  179. package/selection/highlight/visualSelection.js +31 -27
  180. package/selection/highlight/visualSelection.mjs +31 -27
  181. package/selection/index.js +4 -7
  182. package/selection/index.mjs +2 -3
  183. package/selection/mouseEventHandler.js +1 -1
  184. package/selection/mouseEventHandler.mjs +1 -1
  185. package/selection/range.js +8 -8
  186. package/selection/range.mjs +8 -8
  187. package/selection/selection.js +290 -154
  188. package/selection/selection.mjs +287 -153
  189. package/selection/transformation.js +232 -90
  190. package/selection/transformation.mjs +232 -90
  191. package/selection/utils.js +15 -21
  192. package/selection/utils.mjs +16 -21
  193. package/settings.d.ts +2 -0
  194. package/shortcutContexts/commands/editor/closeAndSave.js +12 -0
  195. package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
  196. package/shortcutContexts/commands/editor/closeWithoutSaving.js +12 -0
  197. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  198. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  199. package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
  200. package/shortcutContexts/commands/editor/index.js +16 -0
  201. package/shortcutContexts/commands/editor/index.mjs +12 -0
  202. package/shortcutContexts/commands/editor/open.js +27 -0
  203. package/shortcutContexts/commands/editor/open.mjs +23 -0
  204. package/shortcutContexts/commands/emptySelectedCells.js +11 -0
  205. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  206. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  207. package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
  208. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +21 -0
  209. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +17 -0
  210. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  211. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  212. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  213. package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
  214. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  215. package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
  216. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  217. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
  218. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +29 -0
  219. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
  220. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +19 -0
  221. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
  222. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +19 -0
  223. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
  224. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +29 -0
  225. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
  226. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +29 -0
  227. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
  228. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +29 -0
  229. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
  230. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  231. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
  232. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  233. package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
  234. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +21 -0
  235. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +17 -0
  236. package/shortcutContexts/commands/index.js +35 -0
  237. package/shortcutContexts/commands/index.mjs +31 -0
  238. package/shortcutContexts/commands/moveCellSelection/down.js +13 -0
  239. package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
  240. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +31 -0
  241. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +27 -0
  242. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  243. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  244. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +12 -0
  245. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  246. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +12 -0
  247. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  248. package/shortcutContexts/commands/moveCellSelection/left.js +10 -0
  249. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  250. package/shortcutContexts/commands/moveCellSelection/right.js +10 -0
  251. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  252. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +17 -0
  253. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
  254. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +18 -0
  255. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
  256. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +14 -0
  257. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
  258. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +17 -0
  259. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
  260. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +19 -0
  261. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
  262. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +21 -0
  263. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
  264. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +17 -0
  265. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
  266. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +19 -0
  267. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
  268. package/shortcutContexts/commands/moveCellSelection/up.js +13 -0
  269. package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
  270. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +31 -0
  271. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +27 -0
  272. package/shortcutContexts/commands/populateSelectedCellsData.js +29 -0
  273. package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
  274. package/shortcutContexts/commands/scrollToFocusedCell.js +36 -0
  275. package/shortcutContexts/commands/scrollToFocusedCell.mjs +32 -0
  276. package/shortcutContexts/commands/selectAll.js +10 -0
  277. package/shortcutContexts/commands/selectAll.mjs +6 -0
  278. package/shortcutContexts/constants.js +13 -0
  279. package/shortcutContexts/constants.mjs +8 -0
  280. package/shortcutContexts/editor.js +25 -0
  281. package/shortcutContexts/editor.mjs +21 -0
  282. package/shortcutContexts/grid.js +163 -0
  283. package/shortcutContexts/grid.mjs +159 -0
  284. package/shortcutContexts/index.js +24 -0
  285. package/shortcutContexts/index.mjs +11 -0
  286. package/shortcuts/manager.js +2 -0
  287. package/shortcuts/manager.mjs +2 -0
  288. package/shortcuts/recorder.js +2 -2
  289. package/shortcuts/recorder.mjs +2 -2
  290. package/shortcuts/utils.js +19 -5
  291. package/shortcuts/utils.mjs +18 -4
  292. package/tableView.js +67 -13
  293. package/tableView.mjs +67 -13
  294. package/3rdparty/walkontable/src/selection.js +0 -295
  295. package/3rdparty/walkontable/src/selection.mjs +0 -290
  296. package/selection/highlight/constants.js +0 -15
  297. package/selection/highlight/constants.mjs +0 -6
  298. package/selection/highlight/types/index.js +0 -35
  299. package/selection/highlight/types/index.mjs +0 -31
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
- require("core-js/modules/es.array.push.js");
5
4
  require("core-js/modules/es.error.cause.js");
5
+ require("core-js/modules/es.array.push.js");
6
6
  var _element = require("../../../helpers/dom/element");
7
7
  var _function = require("../../../helpers/function");
8
8
  var _column = _interopRequireDefault(require("./filter/column"));
@@ -345,7 +345,7 @@ class Table {
345
345
  wtOverlays.refreshAll(); // `refreshAll()` internally already calls `refreshSelections()` method
346
346
  wtOverlays.adjustElementsSize();
347
347
  } else {
348
- this.refreshSelections(runFastDraw);
348
+ this.dataAccessObject.selectionManager.setActiveOverlay(this.facadeGetter()).render(runFastDraw);
349
349
  }
350
350
  if (syncScroll) {
351
351
  wtOverlays.syncScrollWithMaster();
@@ -437,75 +437,6 @@ class Table {
437
437
  }
438
438
  }
439
439
 
440
- /**
441
- * @param {string} className The CSS class name to remove from the table cells.
442
- */
443
- removeClassFromCells(className) {
444
- const nodes = this.TABLE.querySelectorAll(`.${className}`);
445
- for (let i = 0, len = nodes.length; i < len; i++) {
446
- (0, _element.removeClass)(nodes[i], className);
447
- }
448
- }
449
-
450
- /**
451
- * Refresh the table selection by re-rendering Selection instances connected with that instance.
452
- *
453
- * @param {boolean} fastDraw If fast drawing is enabled than additionally className clearing is applied.
454
- */
455
- refreshSelections(fastDraw) {
456
- const {
457
- wtSettings
458
- } = this;
459
- const {
460
- selections
461
- } = this.dataAccessObject;
462
- if (!selections) {
463
- return;
464
- }
465
- const highlights = Array.from(selections);
466
- const len = highlights.length;
467
- if (fastDraw) {
468
- const classesToRemove = [];
469
- for (let i = 0; i < len; i++) {
470
- const {
471
- highlightHeaderClassName,
472
- highlightRowClassName,
473
- highlightColumnClassName
474
- } = highlights[i].settings;
475
- const classNames = highlights[i].classNames;
476
- const classNamesLength = classNames.length;
477
- for (let j = 0; j < classNamesLength; j++) {
478
- if (!classesToRemove.includes(classNames[j])) {
479
- classesToRemove.push(classNames[j]);
480
- }
481
- }
482
- if (highlightHeaderClassName && !classesToRemove.includes(highlightHeaderClassName)) {
483
- classesToRemove.push(highlightHeaderClassName);
484
- }
485
- if (highlightRowClassName && !classesToRemove.includes(highlightRowClassName)) {
486
- classesToRemove.push(highlightRowClassName);
487
- }
488
- if (highlightColumnClassName && !classesToRemove.includes(highlightColumnClassName)) {
489
- classesToRemove.push(highlightColumnClassName);
490
- }
491
- }
492
- const additionalClassesToRemove = wtSettings.getSetting('onBeforeRemoveCellClassNames');
493
- if (Array.isArray(additionalClassesToRemove)) {
494
- for (let i = 0; i < additionalClassesToRemove.length; i++) {
495
- classesToRemove.push(additionalClassesToRemove[i]);
496
- }
497
- }
498
- const classesToRemoveLength = classesToRemove.length;
499
- for (let i = 0; i < classesToRemoveLength; i++) {
500
- // there was no rerender, so we need to remove classNames by ourselves
501
- this.removeClassFromCells(classesToRemove[i]);
502
- }
503
- }
504
- for (let i = 0; i < len; i++) {
505
- highlights[i].draw(this.facadeGetter(), fastDraw);
506
- }
507
- }
508
-
509
440
  /**
510
441
  * Get cell element at coords.
511
442
  * Negative coords.row or coords.col are used to retrieve header cells. If there are multiple header levels, the
@@ -627,14 +558,14 @@ class Table {
627
558
  */
628
559
  getRowHeader(row) {
629
560
  let level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
630
- if (this.columnFilter.sourceColumnToVisibleRowHeadedColumn(0) === 0) {
631
- return;
632
- }
633
561
  const rowHeadersCount = this.wtSettings.getSetting('rowHeaders').length;
634
562
  if (level >= rowHeadersCount) {
635
563
  return;
636
564
  }
637
- const TR = this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)];
565
+ const renderedRow = this.rowFilter.sourceToRendered(row);
566
+ const visibleRow = renderedRow < 0 ? this.rowFilter.sourceRowToVisibleColHeadedRow(row) : renderedRow;
567
+ const parentElement = renderedRow < 0 ? this.THEAD : this.TBODY;
568
+ const TR = parentElement.childNodes[visibleRow];
638
569
  return TR === null || TR === void 0 ? void 0 : TR.childNodes[level];
639
570
  }
640
571
 
@@ -645,9 +576,6 @@ class Table {
645
576
  * @returns {HTMLTableCellElement[]}
646
577
  */
647
578
  getRowHeaders(row) {
648
- if (this.columnFilter.sourceColumnToVisibleRowHeadedColumn(0) === 0) {
649
- return [];
650
- }
651
579
  const THs = [];
652
580
  const rowHeadersCount = this.wtSettings.getSetting('rowHeaders').length;
653
581
  for (let renderedRowIndex = 0; renderedRowIndex < rowHeadersCount; renderedRowIndex++) {
@@ -1,9 +1,9 @@
1
- import "core-js/modules/es.array.push.js";
2
1
  import "core-js/modules/es.error.cause.js";
2
+ import "core-js/modules/es.array.push.js";
3
3
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
4
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
5
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
6
- import { hasClass, index, offset, removeClass, removeTextNodes, overlayContainsElement, closest, outerHeight, outerWidth, innerHeight, isVisible } from "../../../helpers/dom/element.mjs";
6
+ import { hasClass, index, offset, removeTextNodes, overlayContainsElement, closest, outerHeight, outerWidth, innerHeight, isVisible } from "../../../helpers/dom/element.mjs";
7
7
  import { isFunction } from "../../../helpers/function.mjs";
8
8
  import ColumnFilter from "./filter/column.mjs";
9
9
  import RowFilter from "./filter/row.mjs";
@@ -341,7 +341,7 @@ class Table {
341
341
  wtOverlays.refreshAll(); // `refreshAll()` internally already calls `refreshSelections()` method
342
342
  wtOverlays.adjustElementsSize();
343
343
  } else {
344
- this.refreshSelections(runFastDraw);
344
+ this.dataAccessObject.selectionManager.setActiveOverlay(this.facadeGetter()).render(runFastDraw);
345
345
  }
346
346
  if (syncScroll) {
347
347
  wtOverlays.syncScrollWithMaster();
@@ -433,75 +433,6 @@ class Table {
433
433
  }
434
434
  }
435
435
 
436
- /**
437
- * @param {string} className The CSS class name to remove from the table cells.
438
- */
439
- removeClassFromCells(className) {
440
- const nodes = this.TABLE.querySelectorAll(`.${className}`);
441
- for (let i = 0, len = nodes.length; i < len; i++) {
442
- removeClass(nodes[i], className);
443
- }
444
- }
445
-
446
- /**
447
- * Refresh the table selection by re-rendering Selection instances connected with that instance.
448
- *
449
- * @param {boolean} fastDraw If fast drawing is enabled than additionally className clearing is applied.
450
- */
451
- refreshSelections(fastDraw) {
452
- const {
453
- wtSettings
454
- } = this;
455
- const {
456
- selections
457
- } = this.dataAccessObject;
458
- if (!selections) {
459
- return;
460
- }
461
- const highlights = Array.from(selections);
462
- const len = highlights.length;
463
- if (fastDraw) {
464
- const classesToRemove = [];
465
- for (let i = 0; i < len; i++) {
466
- const {
467
- highlightHeaderClassName,
468
- highlightRowClassName,
469
- highlightColumnClassName
470
- } = highlights[i].settings;
471
- const classNames = highlights[i].classNames;
472
- const classNamesLength = classNames.length;
473
- for (let j = 0; j < classNamesLength; j++) {
474
- if (!classesToRemove.includes(classNames[j])) {
475
- classesToRemove.push(classNames[j]);
476
- }
477
- }
478
- if (highlightHeaderClassName && !classesToRemove.includes(highlightHeaderClassName)) {
479
- classesToRemove.push(highlightHeaderClassName);
480
- }
481
- if (highlightRowClassName && !classesToRemove.includes(highlightRowClassName)) {
482
- classesToRemove.push(highlightRowClassName);
483
- }
484
- if (highlightColumnClassName && !classesToRemove.includes(highlightColumnClassName)) {
485
- classesToRemove.push(highlightColumnClassName);
486
- }
487
- }
488
- const additionalClassesToRemove = wtSettings.getSetting('onBeforeRemoveCellClassNames');
489
- if (Array.isArray(additionalClassesToRemove)) {
490
- for (let i = 0; i < additionalClassesToRemove.length; i++) {
491
- classesToRemove.push(additionalClassesToRemove[i]);
492
- }
493
- }
494
- const classesToRemoveLength = classesToRemove.length;
495
- for (let i = 0; i < classesToRemoveLength; i++) {
496
- // there was no rerender, so we need to remove classNames by ourselves
497
- this.removeClassFromCells(classesToRemove[i]);
498
- }
499
- }
500
- for (let i = 0; i < len; i++) {
501
- highlights[i].draw(this.facadeGetter(), fastDraw);
502
- }
503
- }
504
-
505
436
  /**
506
437
  * Get cell element at coords.
507
438
  * Negative coords.row or coords.col are used to retrieve header cells. If there are multiple header levels, the
@@ -623,14 +554,14 @@ class Table {
623
554
  */
624
555
  getRowHeader(row) {
625
556
  let level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
626
- if (this.columnFilter.sourceColumnToVisibleRowHeadedColumn(0) === 0) {
627
- return;
628
- }
629
557
  const rowHeadersCount = this.wtSettings.getSetting('rowHeaders').length;
630
558
  if (level >= rowHeadersCount) {
631
559
  return;
632
560
  }
633
- const TR = this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)];
561
+ const renderedRow = this.rowFilter.sourceToRendered(row);
562
+ const visibleRow = renderedRow < 0 ? this.rowFilter.sourceRowToVisibleColHeadedRow(row) : renderedRow;
563
+ const parentElement = renderedRow < 0 ? this.THEAD : this.TBODY;
564
+ const TR = parentElement.childNodes[visibleRow];
634
565
  return TR === null || TR === void 0 ? void 0 : TR.childNodes[level];
635
566
  }
636
567
 
@@ -641,9 +572,6 @@ class Table {
641
572
  * @returns {HTMLTableCellElement[]}
642
573
  */
643
574
  getRowHeaders(row) {
644
- if (this.columnFilter.sourceColumnToVisibleRowHeadedColumn(0) === 0) {
645
- return [];
646
- }
647
575
  const THs = [];
648
576
  const rowHeadersCount = this.wtSettings.getSetting('rowHeaders').length;
649
577
  for (let renderedRowIndex = 0; renderedRowIndex < rowHeadersCount; renderedRowIndex++) {
package/base.js CHANGED
@@ -43,8 +43,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
43
43
  Handsontable.CellCoords = _src.CellCoords;
44
44
  Handsontable.CellRange = _src.CellRange;
45
45
  Handsontable.packageName = 'handsontable';
46
- Handsontable.buildDate = "09/08/2023 12:06:41";
47
- Handsontable.version = "0.0.0-next-baf2fcf-20230809";
46
+ Handsontable.buildDate = "09/08/2023 12:55:28";
47
+ Handsontable.version = "0.0.0-next-08765b9-20230809";
48
48
  Handsontable.languages = {
49
49
  dictionaryKeys: _registry.dictionaryKeys,
50
50
  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 = "09/08/2023 12:06:53";
39
- Handsontable.version = "0.0.0-next-baf2fcf-20230809";
38
+ Handsontable.buildDate = "09/08/2023 12:55:36";
39
+ Handsontable.version = "0.0.0-next-08765b9-20230809";
40
40
  Handsontable.languages = {
41
41
  dictionaryKeys,
42
42
  getLanguageDictionary,
package/common.d.ts CHANGED
@@ -12,7 +12,7 @@ export type CellValue = any;
12
12
  /**
13
13
  * A cell change represented by `[row, column, prevValue, nextValue]`.
14
14
  */
15
- export type CellChange = [number, string | number | ColumnDataGetterSetterFunction, CellValue, CellValue];
15
+ export type CellChange = [number, string | number, CellValue, CellValue];
16
16
 
17
17
  /**
18
18
  * A row object, one of the two ways to supply data to the table, the alternative being an array of values.
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.installFocusDetector = installFocusDetector;
5
+ /**
6
+ * Installs a focus detector module. The module appends two input elements into the DOM side by side.
7
+ * When the first input is focused, then it means that a user entered to the component using the TAB key
8
+ * from the element above. When the second input is focused, a user enters to the component from
9
+ * the element below the table. Each action, once detected, triggers the specific hook.
10
+ *
11
+ * @param {Handsontable} hot The Handsontable instance.
12
+ * @param {{ onFocusFromTop: Function, onFocusFromBottom: Function }} hooks An object with defined callbacks to call.
13
+ * @returns {{ activate: Function, deactivate: Function }}
14
+ */
15
+ function installFocusDetector(hot) {
16
+ let hooks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
17
+ const rootDocument = hot.rootDocument;
18
+ const rootElement = hot.rootElement;
19
+ const inputTrapTop = createInputElement(rootDocument);
20
+ const inputTrapBottom = createInputElement(rootDocument);
21
+ inputTrapTop.addEventListener('focus', () => hooks === null || hooks === void 0 ? void 0 : hooks.onFocusFromTop());
22
+ inputTrapBottom.addEventListener('focus', () => hooks === null || hooks === void 0 ? void 0 : hooks.onFocusFromBottom());
23
+ rootElement.firstChild.before(inputTrapTop);
24
+ rootElement.lastChild.after(inputTrapBottom);
25
+ return {
26
+ /**
27
+ * Activates the detector by resetting the tabIndex of the input elements.
28
+ */
29
+ activate() {
30
+ hot._registerTimeout(() => {
31
+ inputTrapTop.tabIndex = 0;
32
+ inputTrapBottom.tabIndex = 0;
33
+ }, 10);
34
+ },
35
+ /**
36
+ * Deactivates the detector by setting tabIndex to -1.
37
+ */
38
+ deactivate() {
39
+ hot._registerTimeout(() => {
40
+ inputTrapTop.tabIndex = -1;
41
+ inputTrapBottom.tabIndex = -1;
42
+ }, 10);
43
+ }
44
+ };
45
+ }
46
+
47
+ /**
48
+ * Creates a new HTML input element.
49
+ *
50
+ * @param {Document} rootDocument The owner document element.
51
+ * @returns {HTMLInputElement}
52
+ */
53
+ function createInputElement(rootDocument) {
54
+ const input = rootDocument.createElement('input');
55
+ input.type = 'text';
56
+ input.classList.add('htFocusCatcher');
57
+ return input;
58
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Installs a focus detector module. The module appends two input elements into the DOM side by side.
3
+ * When the first input is focused, then it means that a user entered to the component using the TAB key
4
+ * from the element above. When the second input is focused, a user enters to the component from
5
+ * the element below the table. Each action, once detected, triggers the specific hook.
6
+ *
7
+ * @param {Handsontable} hot The Handsontable instance.
8
+ * @param {{ onFocusFromTop: Function, onFocusFromBottom: Function }} hooks An object with defined callbacks to call.
9
+ * @returns {{ activate: Function, deactivate: Function }}
10
+ */
11
+ export function installFocusDetector(hot) {
12
+ let hooks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
13
+ const rootDocument = hot.rootDocument;
14
+ const rootElement = hot.rootElement;
15
+ const inputTrapTop = createInputElement(rootDocument);
16
+ const inputTrapBottom = createInputElement(rootDocument);
17
+ inputTrapTop.addEventListener('focus', () => hooks === null || hooks === void 0 ? void 0 : hooks.onFocusFromTop());
18
+ inputTrapBottom.addEventListener('focus', () => hooks === null || hooks === void 0 ? void 0 : hooks.onFocusFromBottom());
19
+ rootElement.firstChild.before(inputTrapTop);
20
+ rootElement.lastChild.after(inputTrapBottom);
21
+ return {
22
+ /**
23
+ * Activates the detector by resetting the tabIndex of the input elements.
24
+ */
25
+ activate() {
26
+ hot._registerTimeout(() => {
27
+ inputTrapTop.tabIndex = 0;
28
+ inputTrapBottom.tabIndex = 0;
29
+ }, 10);
30
+ },
31
+ /**
32
+ * Deactivates the detector by setting tabIndex to -1.
33
+ */
34
+ deactivate() {
35
+ hot._registerTimeout(() => {
36
+ inputTrapTop.tabIndex = -1;
37
+ inputTrapBottom.tabIndex = -1;
38
+ }, 10);
39
+ }
40
+ };
41
+ }
42
+
43
+ /**
44
+ * Creates a new HTML input element.
45
+ *
46
+ * @param {Document} rootDocument The owner document element.
47
+ * @returns {HTMLInputElement}
48
+ */
49
+ function createInputElement(rootDocument) {
50
+ const input = rootDocument.createElement('input');
51
+ input.type = 'text';
52
+ input.classList.add('htFocusCatcher');
53
+ return input;
54
+ }
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.installFocusCatcher = installFocusCatcher;
5
+ var _shortcutContexts = require("../../shortcutContexts");
6
+ var _focusDetector = require("./focusDetector");
7
+ /**
8
+ * Installs a focus catcher module. The module observes when the table is focused and depending on
9
+ * from the which side it was focused on it selects a specified cell or releases the TAB navigation
10
+ * to the browser.
11
+ *
12
+ * @param {Core} hot The Handsontable instance.
13
+ */
14
+ function installFocusCatcher(hot) {
15
+ let recentlyAddedFocusCoords;
16
+ const {
17
+ activate,
18
+ deactivate
19
+ } = (0, _focusDetector.installFocusDetector)(hot, {
20
+ onFocusFromTop() {
21
+ var _recentlyAddedFocusCo;
22
+ const mostTopStartCoords = (_recentlyAddedFocusCo = recentlyAddedFocusCoords) !== null && _recentlyAddedFocusCo !== void 0 ? _recentlyAddedFocusCo : getMostTopStartPosition(hot);
23
+ if (mostTopStartCoords) {
24
+ hot.runHooks('modifyFocusOnTabNavigation', 'from_above', mostTopStartCoords);
25
+ hot.selectCell(mostTopStartCoords.row, mostTopStartCoords.col);
26
+ }
27
+ hot.listen();
28
+ },
29
+ onFocusFromBottom() {
30
+ var _recentlyAddedFocusCo2;
31
+ const mostBottomEndCoords = (_recentlyAddedFocusCo2 = recentlyAddedFocusCoords) !== null && _recentlyAddedFocusCo2 !== void 0 ? _recentlyAddedFocusCo2 : getMostBottomEndPosition(hot);
32
+ if (mostBottomEndCoords) {
33
+ hot.runHooks('modifyFocusOnTabNavigation', 'from_below', mostBottomEndCoords);
34
+ hot.selectCell(mostBottomEndCoords.row, mostBottomEndCoords.col);
35
+ }
36
+ hot.listen();
37
+ }
38
+ });
39
+ hot.addHook('afterListen', () => deactivate());
40
+ hot.addHook('afterUnlisten', () => activate());
41
+ hot.addHook('afterSelection', () => {
42
+ var _hot$getSelectedRange;
43
+ recentlyAddedFocusCoords = (_hot$getSelectedRange = hot.getSelectedRangeLast()) === null || _hot$getSelectedRange === void 0 ? void 0 : _hot$getSelectedRange.highlight;
44
+ });
45
+ hot.getShortcutManager().getContext('grid').addShortcut({
46
+ keys: [['Tab'], ['Shift', 'Tab']],
47
+ callback: event => {
48
+ var _hot$getSelectedRange2;
49
+ const {
50
+ disableTabNavigation,
51
+ autoWrapRow
52
+ } = hot.getSettings();
53
+ if (disableTabNavigation) {
54
+ hot.deselectCell();
55
+ hot.unlisten();
56
+ return false;
57
+ }
58
+ const isSelected = hot.selection.isSelected();
59
+ const highlight = (_hot$getSelectedRange2 = hot.getSelectedRangeLast()) === null || _hot$getSelectedRange2 === void 0 ? void 0 : _hot$getSelectedRange2.highlight;
60
+ const mostTopStartCoords = getMostTopStartPosition(hot);
61
+ const mostBottomEndCoords = getMostBottomEndPosition(hot);
62
+
63
+ // For disabled `autoWrapRow` option set the row to the same position as the currently selected row.
64
+ if (!autoWrapRow) {
65
+ mostTopStartCoords.row = highlight.row;
66
+ mostBottomEndCoords.row = highlight.row;
67
+ }
68
+ if (event.shiftKey && (!isSelected || highlight.isEqual(mostTopStartCoords)) || !event.shiftKey && (!isSelected || highlight.isEqual(mostBottomEndCoords))) {
69
+ hot.deselectCell();
70
+ hot.unlisten();
71
+ return false;
72
+ }
73
+ return true;
74
+ },
75
+ runOnlyIf: () => !hot.getSettings().minSpareCols,
76
+ preventDefault: false,
77
+ stopPropagation: false,
78
+ position: 'before',
79
+ relativeToGroup: _shortcutContexts.GRID_GROUP,
80
+ group: 'focusCatcher'
81
+ });
82
+ }
83
+
84
+ /**
85
+ * Gets the coordinates of the most top-start cell or header (depends on the table settings and its size).
86
+ *
87
+ * @param {Core} hot The Handsontable instance.
88
+ * @returns {CellCoords|null}
89
+ */
90
+ function getMostTopStartPosition(hot) {
91
+ const {
92
+ rowIndexMapper,
93
+ columnIndexMapper
94
+ } = hot;
95
+ const {
96
+ navigableHeaders
97
+ } = hot.getSettings();
98
+ let topRow = navigableHeaders && hot.countColHeaders() > 0 ? -hot.countColHeaders() : 0;
99
+ let startColumn = navigableHeaders && hot.countRowHeaders() > 0 ? -hot.countRowHeaders() : 0;
100
+ if (topRow === 0) {
101
+ topRow = rowIndexMapper.getVisualFromRenderableIndex(topRow);
102
+ }
103
+ if (startColumn === 0) {
104
+ startColumn = columnIndexMapper.getVisualFromRenderableIndex(startColumn);
105
+ }
106
+ if (topRow === null || startColumn === null) {
107
+ return null;
108
+ }
109
+ return hot._createCellCoords(topRow, startColumn);
110
+ }
111
+
112
+ /**
113
+ * Gets the coordinates of the most bottom-end cell or header (depends on the table settings and its size).
114
+ *
115
+ * @param {Core} hot The Handsontable instance.
116
+ * @returns {CellCoords|null}
117
+ */
118
+ function getMostBottomEndPosition(hot) {
119
+ var _rowIndexMapper$getVi, _columnIndexMapper$ge;
120
+ const {
121
+ rowIndexMapper,
122
+ columnIndexMapper
123
+ } = hot;
124
+ const {
125
+ navigableHeaders
126
+ } = hot.getSettings();
127
+ let bottomRow = rowIndexMapper.getRenderableIndexesLength() - 1;
128
+ let endColumn = columnIndexMapper.getRenderableIndexesLength() - 1;
129
+ if (bottomRow < 0) {
130
+ if (!navigableHeaders || hot.countColHeaders() === 0) {
131
+ return null;
132
+ }
133
+ bottomRow = -1;
134
+ }
135
+ if (endColumn < 0) {
136
+ if (!navigableHeaders || hot.countColHeaders() === 0) {
137
+ return null;
138
+ }
139
+ endColumn = -1;
140
+ }
141
+ return hot._createCellCoords((_rowIndexMapper$getVi = rowIndexMapper.getVisualFromRenderableIndex(bottomRow)) !== null && _rowIndexMapper$getVi !== void 0 ? _rowIndexMapper$getVi : bottomRow, (_columnIndexMapper$ge = columnIndexMapper.getVisualFromRenderableIndex(endColumn)) !== null && _columnIndexMapper$ge !== void 0 ? _columnIndexMapper$ge : endColumn);
142
+ }
@@ -0,0 +1,138 @@
1
+ import { GRID_GROUP } from "../../shortcutContexts/index.mjs";
2
+ import { installFocusDetector } from "./focusDetector.mjs";
3
+ /**
4
+ * Installs a focus catcher module. The module observes when the table is focused and depending on
5
+ * from the which side it was focused on it selects a specified cell or releases the TAB navigation
6
+ * to the browser.
7
+ *
8
+ * @param {Core} hot The Handsontable instance.
9
+ */
10
+ export function installFocusCatcher(hot) {
11
+ let recentlyAddedFocusCoords;
12
+ const {
13
+ activate,
14
+ deactivate
15
+ } = installFocusDetector(hot, {
16
+ onFocusFromTop() {
17
+ var _recentlyAddedFocusCo;
18
+ const mostTopStartCoords = (_recentlyAddedFocusCo = recentlyAddedFocusCoords) !== null && _recentlyAddedFocusCo !== void 0 ? _recentlyAddedFocusCo : getMostTopStartPosition(hot);
19
+ if (mostTopStartCoords) {
20
+ hot.runHooks('modifyFocusOnTabNavigation', 'from_above', mostTopStartCoords);
21
+ hot.selectCell(mostTopStartCoords.row, mostTopStartCoords.col);
22
+ }
23
+ hot.listen();
24
+ },
25
+ onFocusFromBottom() {
26
+ var _recentlyAddedFocusCo2;
27
+ const mostBottomEndCoords = (_recentlyAddedFocusCo2 = recentlyAddedFocusCoords) !== null && _recentlyAddedFocusCo2 !== void 0 ? _recentlyAddedFocusCo2 : getMostBottomEndPosition(hot);
28
+ if (mostBottomEndCoords) {
29
+ hot.runHooks('modifyFocusOnTabNavigation', 'from_below', mostBottomEndCoords);
30
+ hot.selectCell(mostBottomEndCoords.row, mostBottomEndCoords.col);
31
+ }
32
+ hot.listen();
33
+ }
34
+ });
35
+ hot.addHook('afterListen', () => deactivate());
36
+ hot.addHook('afterUnlisten', () => activate());
37
+ hot.addHook('afterSelection', () => {
38
+ var _hot$getSelectedRange;
39
+ recentlyAddedFocusCoords = (_hot$getSelectedRange = hot.getSelectedRangeLast()) === null || _hot$getSelectedRange === void 0 ? void 0 : _hot$getSelectedRange.highlight;
40
+ });
41
+ hot.getShortcutManager().getContext('grid').addShortcut({
42
+ keys: [['Tab'], ['Shift', 'Tab']],
43
+ callback: event => {
44
+ var _hot$getSelectedRange2;
45
+ const {
46
+ disableTabNavigation,
47
+ autoWrapRow
48
+ } = hot.getSettings();
49
+ if (disableTabNavigation) {
50
+ hot.deselectCell();
51
+ hot.unlisten();
52
+ return false;
53
+ }
54
+ const isSelected = hot.selection.isSelected();
55
+ const highlight = (_hot$getSelectedRange2 = hot.getSelectedRangeLast()) === null || _hot$getSelectedRange2 === void 0 ? void 0 : _hot$getSelectedRange2.highlight;
56
+ const mostTopStartCoords = getMostTopStartPosition(hot);
57
+ const mostBottomEndCoords = getMostBottomEndPosition(hot);
58
+
59
+ // For disabled `autoWrapRow` option set the row to the same position as the currently selected row.
60
+ if (!autoWrapRow) {
61
+ mostTopStartCoords.row = highlight.row;
62
+ mostBottomEndCoords.row = highlight.row;
63
+ }
64
+ if (event.shiftKey && (!isSelected || highlight.isEqual(mostTopStartCoords)) || !event.shiftKey && (!isSelected || highlight.isEqual(mostBottomEndCoords))) {
65
+ hot.deselectCell();
66
+ hot.unlisten();
67
+ return false;
68
+ }
69
+ return true;
70
+ },
71
+ runOnlyIf: () => !hot.getSettings().minSpareCols,
72
+ preventDefault: false,
73
+ stopPropagation: false,
74
+ position: 'before',
75
+ relativeToGroup: GRID_GROUP,
76
+ group: 'focusCatcher'
77
+ });
78
+ }
79
+
80
+ /**
81
+ * Gets the coordinates of the most top-start cell or header (depends on the table settings and its size).
82
+ *
83
+ * @param {Core} hot The Handsontable instance.
84
+ * @returns {CellCoords|null}
85
+ */
86
+ function getMostTopStartPosition(hot) {
87
+ const {
88
+ rowIndexMapper,
89
+ columnIndexMapper
90
+ } = hot;
91
+ const {
92
+ navigableHeaders
93
+ } = hot.getSettings();
94
+ let topRow = navigableHeaders && hot.countColHeaders() > 0 ? -hot.countColHeaders() : 0;
95
+ let startColumn = navigableHeaders && hot.countRowHeaders() > 0 ? -hot.countRowHeaders() : 0;
96
+ if (topRow === 0) {
97
+ topRow = rowIndexMapper.getVisualFromRenderableIndex(topRow);
98
+ }
99
+ if (startColumn === 0) {
100
+ startColumn = columnIndexMapper.getVisualFromRenderableIndex(startColumn);
101
+ }
102
+ if (topRow === null || startColumn === null) {
103
+ return null;
104
+ }
105
+ return hot._createCellCoords(topRow, startColumn);
106
+ }
107
+
108
+ /**
109
+ * Gets the coordinates of the most bottom-end cell or header (depends on the table settings and its size).
110
+ *
111
+ * @param {Core} hot The Handsontable instance.
112
+ * @returns {CellCoords|null}
113
+ */
114
+ function getMostBottomEndPosition(hot) {
115
+ var _rowIndexMapper$getVi, _columnIndexMapper$ge;
116
+ const {
117
+ rowIndexMapper,
118
+ columnIndexMapper
119
+ } = hot;
120
+ const {
121
+ navigableHeaders
122
+ } = hot.getSettings();
123
+ let bottomRow = rowIndexMapper.getRenderableIndexesLength() - 1;
124
+ let endColumn = columnIndexMapper.getRenderableIndexesLength() - 1;
125
+ if (bottomRow < 0) {
126
+ if (!navigableHeaders || hot.countColHeaders() === 0) {
127
+ return null;
128
+ }
129
+ bottomRow = -1;
130
+ }
131
+ if (endColumn < 0) {
132
+ if (!navigableHeaders || hot.countColHeaders() === 0) {
133
+ return null;
134
+ }
135
+ endColumn = -1;
136
+ }
137
+ return hot._createCellCoords((_rowIndexMapper$getVi = rowIndexMapper.getVisualFromRenderableIndex(bottomRow)) !== null && _rowIndexMapper$getVi !== void 0 ? _rowIndexMapper$getVi : bottomRow, (_columnIndexMapper$ge = columnIndexMapper.getVisualFromRenderableIndex(endColumn)) !== null && _columnIndexMapper$ge !== void 0 ? _columnIndexMapper$ge : endColumn);
138
+ }
package/core/index.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ var _focusCatcher = require("./focusCatcher");
5
+ Object.keys(_focusCatcher).forEach(function (key) {
6
+ if (key === "default" || key === "__esModule") return;
7
+ if (key in exports && exports[key] === _focusCatcher[key]) return;
8
+ exports[key] = _focusCatcher[key];
9
+ });