handsontable 0.0.0-next-be16baf-20230809 → 0.0.0-next-912c214-20230818

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.

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/{selection/border/border.js → border.js} +12 -7
  2. package/3rdparty/walkontable/src/{selection/border/border.mjs → border.mjs} +12 -7
  3. package/3rdparty/walkontable/src/cell/coords.d.ts +1 -6
  4. package/3rdparty/walkontable/src/cell/coords.js +11 -50
  5. package/3rdparty/walkontable/src/cell/coords.mjs +11 -50
  6. package/3rdparty/walkontable/src/cell/range.d.ts +2 -9
  7. package/3rdparty/walkontable/src/cell/range.js +7 -38
  8. package/3rdparty/walkontable/src/cell/range.mjs +7 -38
  9. package/3rdparty/walkontable/src/core/_base.js +3 -9
  10. package/3rdparty/walkontable/src/core/_base.mjs +3 -9
  11. package/3rdparty/walkontable/src/core/clone.js +2 -2
  12. package/3rdparty/walkontable/src/core/clone.mjs +2 -2
  13. package/3rdparty/walkontable/src/core/core.js +2 -3
  14. package/3rdparty/walkontable/src/core/core.mjs +2 -3
  15. package/3rdparty/walkontable/src/event.js +7 -7
  16. package/3rdparty/walkontable/src/event.mjs +7 -7
  17. package/3rdparty/walkontable/src/facade/core.js +2 -2
  18. package/3rdparty/walkontable/src/facade/core.mjs +2 -2
  19. package/3rdparty/walkontable/src/index.js +2 -10
  20. package/3rdparty/walkontable/src/index.mjs +2 -2
  21. package/3rdparty/walkontable/src/overlay/_base.js +1 -1
  22. package/3rdparty/walkontable/src/overlay/_base.mjs +1 -1
  23. package/3rdparty/walkontable/src/overlay/inlineStart.js +6 -2
  24. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +6 -2
  25. package/3rdparty/walkontable/src/overlay/top.js +6 -2
  26. package/3rdparty/walkontable/src/overlay/top.mjs +6 -2
  27. package/3rdparty/walkontable/src/selection.js +295 -0
  28. package/3rdparty/walkontable/src/selection.mjs +290 -0
  29. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +0 -9
  30. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +0 -9
  31. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +0 -9
  32. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +0 -9
  33. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +0 -9
  34. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +0 -9
  35. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +0 -9
  36. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +0 -9
  37. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +0 -9
  38. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +0 -9
  39. package/3rdparty/walkontable/src/table.js +78 -6
  40. package/3rdparty/walkontable/src/table.mjs +79 -7
  41. package/base.js +2 -2
  42. package/base.mjs +2 -2
  43. package/common.d.ts +1 -1
  44. package/core.d.ts +3 -6
  45. package/core.js +293 -176
  46. package/core.mjs +293 -176
  47. package/dataMap/metaManager/metaSchema.js +0 -41
  48. package/dataMap/metaManager/metaSchema.mjs +0 -41
  49. package/dist/handsontable.css +4 -24
  50. package/dist/handsontable.full.css +4 -24
  51. package/dist/handsontable.full.js +5592 -8690
  52. package/dist/handsontable.full.min.css +3 -3
  53. package/dist/handsontable.full.min.js +25 -25
  54. package/dist/handsontable.js +8038 -11136
  55. package/dist/handsontable.min.css +3 -3
  56. package/dist/handsontable.min.js +19 -19
  57. package/editorManager.js +75 -11
  58. package/editorManager.mjs +74 -11
  59. package/editors/baseEditor/baseEditor.d.ts +1 -0
  60. package/editors/textEditor/textEditor.js +11 -3
  61. package/editors/textEditor/textEditor.mjs +12 -4
  62. package/helpers/mixed.js +1 -1
  63. package/helpers/mixed.mjs +1 -1
  64. package/helpers/number.d.ts +0 -1
  65. package/helpers/number.js +0 -18
  66. package/helpers/number.mjs +0 -17
  67. package/package.json +1 -1
  68. package/pluginHooks.d.ts +1 -7
  69. package/pluginHooks.js +1 -106
  70. package/pluginHooks.mjs +1 -106
  71. package/plugins/collapsibleColumns/collapsibleColumns.js +4 -58
  72. package/plugins/collapsibleColumns/collapsibleColumns.mjs +4 -58
  73. package/plugins/columnSorting/columnSorting.js +0 -38
  74. package/plugins/columnSorting/columnSorting.mjs +2 -38
  75. package/plugins/columnSorting/index.js +1 -3
  76. package/plugins/columnSorting/index.mjs +1 -1
  77. package/plugins/comments/commentEditor.js +0 -1
  78. package/plugins/comments/commentEditor.mjs +0 -1
  79. package/plugins/comments/comments.js +189 -251
  80. package/plugins/comments/comments.mjs +190 -250
  81. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  82. package/plugins/contextMenu/contextMenu.js +30 -72
  83. package/plugins/contextMenu/contextMenu.mjs +31 -73
  84. package/plugins/contextMenu/predefinedItems/alignment.js +0 -7
  85. package/plugins/contextMenu/predefinedItems/alignment.mjs +0 -7
  86. package/plugins/contextMenu/predefinedItems/clearColumn.js +3 -5
  87. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +3 -5
  88. package/plugins/contextMenu/predefinedItems/columnLeft.js +3 -5
  89. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +3 -5
  90. package/plugins/contextMenu/predefinedItems/columnRight.js +3 -5
  91. package/plugins/contextMenu/predefinedItems/columnRight.mjs +3 -5
  92. package/plugins/contextMenu/predefinedItems/readOnly.js +0 -7
  93. package/plugins/contextMenu/predefinedItems/readOnly.mjs +0 -7
  94. package/plugins/contextMenu/predefinedItems/removeColumn.js +5 -7
  95. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +3 -5
  96. package/plugins/contextMenu/predefinedItems/removeRow.js +5 -7
  97. package/plugins/contextMenu/predefinedItems/removeRow.mjs +3 -5
  98. package/plugins/contextMenu/predefinedItems/rowAbove.js +3 -5
  99. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +3 -5
  100. package/plugins/contextMenu/predefinedItems/rowBelow.js +3 -5
  101. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +3 -5
  102. package/plugins/contextMenu/utils.js +16 -28
  103. package/plugins/contextMenu/utils.mjs +15 -27
  104. package/plugins/copyPaste/contextMenuItem/copy.js +0 -7
  105. package/plugins/copyPaste/contextMenuItem/copy.mjs +0 -7
  106. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +1 -9
  107. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +1 -9
  108. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +1 -9
  109. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +1 -9
  110. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +1 -9
  111. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +1 -9
  112. package/plugins/copyPaste/contextMenuItem/cut.js +0 -7
  113. package/plugins/copyPaste/contextMenuItem/cut.mjs +0 -7
  114. package/plugins/copyPaste/copyPaste.js +10 -14
  115. package/plugins/copyPaste/copyPaste.mjs +10 -14
  116. package/plugins/customBorders/customBorders.js +20 -23
  117. package/plugins/customBorders/customBorders.mjs +21 -24
  118. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  119. package/plugins/dropdownMenu/dropdownMenu.js +32 -89
  120. package/plugins/dropdownMenu/dropdownMenu.mjs +32 -89
  121. package/plugins/filters/filters.js +14 -31
  122. package/plugins/filters/filters.mjs +13 -30
  123. package/plugins/manualColumnResize/manualColumnResize.js +6 -0
  124. package/plugins/manualColumnResize/manualColumnResize.mjs +7 -1
  125. package/plugins/mergeCells/mergeCells.js +17 -5
  126. package/plugins/mergeCells/mergeCells.mjs +17 -5
  127. package/plugins/multiColumnSorting/multiColumnSorting.js +2 -37
  128. package/plugins/multiColumnSorting/multiColumnSorting.mjs +2 -37
  129. package/plugins/nestedHeaders/nestedHeaders.js +8 -121
  130. package/plugins/nestedHeaders/nestedHeaders.mjs +8 -121
  131. package/plugins/nestedHeaders/stateManager/index.js +0 -37
  132. package/plugins/nestedHeaders/stateManager/index.mjs +0 -37
  133. package/plugins/nestedRows/nestedRows.js +0 -41
  134. package/plugins/nestedRows/nestedRows.mjs +0 -41
  135. package/renderers/checkboxRenderer/checkboxRenderer.js +2 -2
  136. package/renderers/checkboxRenderer/checkboxRenderer.mjs +1 -1
  137. package/selection/highlight/constants.js +15 -0
  138. package/selection/highlight/constants.mjs +6 -0
  139. package/selection/highlight/highlight.js +71 -256
  140. package/selection/highlight/highlight.mjs +71 -250
  141. package/selection/highlight/types/activeHeader.js +8 -10
  142. package/selection/highlight/types/activeHeader.mjs +8 -10
  143. package/selection/highlight/types/area.js +18 -6
  144. package/selection/highlight/types/area.mjs +18 -6
  145. package/selection/highlight/types/{focus.js → cell.js} +7 -5
  146. package/selection/highlight/types/{focus.mjs → cell.mjs} +7 -5
  147. package/selection/highlight/types/customSelection.js +9 -7
  148. package/selection/highlight/types/customSelection.mjs +9 -7
  149. package/selection/highlight/types/fill.js +7 -5
  150. package/selection/highlight/types/fill.mjs +7 -5
  151. package/selection/highlight/types/header.js +18 -9
  152. package/selection/highlight/types/header.mjs +18 -9
  153. package/selection/highlight/types/index.js +35 -0
  154. package/selection/highlight/types/index.mjs +31 -0
  155. package/selection/highlight/visualSelection.js +27 -31
  156. package/selection/highlight/visualSelection.mjs +27 -31
  157. package/selection/index.js +7 -4
  158. package/selection/index.mjs +3 -2
  159. package/selection/mouseEventHandler.js +1 -1
  160. package/selection/mouseEventHandler.mjs +1 -1
  161. package/selection/range.js +8 -8
  162. package/selection/range.mjs +8 -8
  163. package/selection/selection.js +154 -293
  164. package/selection/selection.mjs +153 -290
  165. package/selection/transformation.js +90 -232
  166. package/selection/transformation.mjs +90 -232
  167. package/selection/utils.js +21 -15
  168. package/selection/utils.mjs +21 -16
  169. package/settings.d.ts +0 -2
  170. package/shortcuts/manager.js +0 -2
  171. package/shortcuts/manager.mjs +0 -2
  172. package/shortcuts/recorder.js +2 -2
  173. package/shortcuts/recorder.mjs +2 -2
  174. package/shortcuts/utils.js +5 -19
  175. package/shortcuts/utils.mjs +4 -18
  176. package/tableView.js +13 -67
  177. package/tableView.mjs +13 -67
  178. package/3rdparty/walkontable/src/selection/border/constants.js +0 -16
  179. package/3rdparty/walkontable/src/selection/border/constants.mjs +0 -12
  180. package/3rdparty/walkontable/src/selection/constants.js +0 -62
  181. package/3rdparty/walkontable/src/selection/constants.mjs +0 -51
  182. package/3rdparty/walkontable/src/selection/index.js +0 -26
  183. package/3rdparty/walkontable/src/selection/index.mjs +0 -5
  184. package/3rdparty/walkontable/src/selection/manager.js +0 -259
  185. package/3rdparty/walkontable/src/selection/manager.mjs +0 -254
  186. package/3rdparty/walkontable/src/selection/scanner.js +0 -270
  187. package/3rdparty/walkontable/src/selection/scanner.mjs +0 -267
  188. package/3rdparty/walkontable/src/selection/selection.js +0 -101
  189. package/3rdparty/walkontable/src/selection/selection.mjs +0 -96
  190. package/core/focusCatcher/focusDetector.js +0 -58
  191. package/core/focusCatcher/focusDetector.mjs +0 -54
  192. package/core/focusCatcher/index.js +0 -142
  193. package/core/focusCatcher/index.mjs +0 -138
  194. package/core/index.js +0 -9
  195. package/core/index.mjs +0 -1
  196. package/plugins/comments/contextMenuItem/addEditComment.js +0 -41
  197. package/plugins/comments/contextMenuItem/addEditComment.mjs +0 -35
  198. package/plugins/comments/contextMenuItem/readOnlyComment.js +0 -49
  199. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +0 -43
  200. package/plugins/comments/contextMenuItem/removeComment.js +0 -38
  201. package/plugins/comments/contextMenuItem/removeComment.mjs +0 -32
  202. package/selection/highlight/types/areaLayered.js +0 -31
  203. package/selection/highlight/types/areaLayered.mjs +0 -26
  204. package/selection/highlight/types/column.js +0 -27
  205. package/selection/highlight/types/column.mjs +0 -22
  206. package/selection/highlight/types/row.js +0 -27
  207. package/selection/highlight/types/row.mjs +0 -22
  208. package/shortcutContexts/commands/editor/closeAndSave.js +0 -12
  209. package/shortcutContexts/commands/editor/closeAndSave.mjs +0 -8
  210. package/shortcutContexts/commands/editor/closeWithoutSaving.js +0 -12
  211. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +0 -8
  212. package/shortcutContexts/commands/editor/fastOpen.js +0 -16
  213. package/shortcutContexts/commands/editor/fastOpen.mjs +0 -12
  214. package/shortcutContexts/commands/editor/index.js +0 -16
  215. package/shortcutContexts/commands/editor/index.mjs +0 -12
  216. package/shortcutContexts/commands/editor/open.js +0 -27
  217. package/shortcutContexts/commands/editor/open.mjs +0 -23
  218. package/shortcutContexts/commands/emptySelectedCells.js +0 -11
  219. package/shortcutContexts/commands/emptySelectedCells.mjs +0 -7
  220. package/shortcutContexts/commands/extendCellsSelection/down.js +0 -15
  221. package/shortcutContexts/commands/extendCellsSelection/down.mjs +0 -11
  222. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +0 -21
  223. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +0 -17
  224. package/shortcutContexts/commands/extendCellsSelection/index.js +0 -26
  225. package/shortcutContexts/commands/extendCellsSelection/index.mjs +0 -22
  226. package/shortcutContexts/commands/extendCellsSelection/left.js +0 -15
  227. package/shortcutContexts/commands/extendCellsSelection/left.mjs +0 -11
  228. package/shortcutContexts/commands/extendCellsSelection/right.js +0 -15
  229. package/shortcutContexts/commands/extendCellsSelection/right.mjs +0 -11
  230. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +0 -19
  231. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +0 -15
  232. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +0 -29
  233. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +0 -25
  234. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +0 -19
  235. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +0 -15
  236. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +0 -19
  237. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +0 -15
  238. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +0 -29
  239. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +0 -25
  240. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +0 -29
  241. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +0 -25
  242. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +0 -29
  243. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +0 -25
  244. package/shortcutContexts/commands/extendCellsSelection/toRows.js +0 -19
  245. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +0 -15
  246. package/shortcutContexts/commands/extendCellsSelection/up.js +0 -15
  247. package/shortcutContexts/commands/extendCellsSelection/up.mjs +0 -11
  248. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +0 -21
  249. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +0 -17
  250. package/shortcutContexts/commands/index.js +0 -35
  251. package/shortcutContexts/commands/index.mjs +0 -31
  252. package/shortcutContexts/commands/moveCellSelection/down.js +0 -13
  253. package/shortcutContexts/commands/moveCellSelection/down.mjs +0 -9
  254. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +0 -31
  255. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +0 -27
  256. package/shortcutContexts/commands/moveCellSelection/index.js +0 -28
  257. package/shortcutContexts/commands/moveCellSelection/index.mjs +0 -24
  258. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +0 -12
  259. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +0 -8
  260. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +0 -12
  261. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +0 -8
  262. package/shortcutContexts/commands/moveCellSelection/left.js +0 -10
  263. package/shortcutContexts/commands/moveCellSelection/left.mjs +0 -6
  264. package/shortcutContexts/commands/moveCellSelection/right.js +0 -10
  265. package/shortcutContexts/commands/moveCellSelection/right.mjs +0 -6
  266. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +0 -17
  267. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +0 -13
  268. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +0 -18
  269. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +0 -14
  270. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +0 -14
  271. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +0 -10
  272. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +0 -17
  273. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +0 -13
  274. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +0 -19
  275. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +0 -15
  276. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +0 -21
  277. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +0 -17
  278. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +0 -17
  279. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +0 -13
  280. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +0 -19
  281. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +0 -15
  282. package/shortcutContexts/commands/moveCellSelection/up.js +0 -13
  283. package/shortcutContexts/commands/moveCellSelection/up.mjs +0 -9
  284. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +0 -31
  285. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +0 -27
  286. package/shortcutContexts/commands/populateSelectedCellsData.js +0 -29
  287. package/shortcutContexts/commands/populateSelectedCellsData.mjs +0 -25
  288. package/shortcutContexts/commands/scrollToFocusedCell.js +0 -36
  289. package/shortcutContexts/commands/scrollToFocusedCell.mjs +0 -32
  290. package/shortcutContexts/commands/selectAll.js +0 -10
  291. package/shortcutContexts/commands/selectAll.mjs +0 -6
  292. package/shortcutContexts/constants.js +0 -13
  293. package/shortcutContexts/constants.mjs +0 -8
  294. package/shortcutContexts/editor.js +0 -25
  295. package/shortcutContexts/editor.mjs +0 -21
  296. package/shortcutContexts/grid.js +0 -163
  297. package/shortcutContexts/grid.mjs +0 -159
  298. package/shortcutContexts/index.js +0 -24
  299. package/shortcutContexts/index.mjs +0 -11
@@ -2,23 +2,17 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
  require("core-js/modules/es.error.cause.js");
5
- var _src = require("./../3rdparty/walkontable/src");
6
- var _highlight = _interopRequireWildcard(require("./highlight/highlight"));
5
+ var _highlight = _interopRequireDefault(require("./highlight/highlight"));
6
+ var _constants = require("./highlight/constants");
7
7
  var _range = _interopRequireDefault(require("./range"));
8
8
  var _object = require("./../helpers/object");
9
9
  var _mixed = require("./../helpers/mixed");
10
- var _number = require("./../helpers/number");
11
10
  var _array = require("./../helpers/array");
12
11
  var _localHooks = _interopRequireDefault(require("./../mixins/localHooks"));
13
12
  var _transformation = _interopRequireDefault(require("./transformation"));
14
13
  var _utils = require("./utils");
15
14
  var _templateLiteralTag = require("./../helpers/templateLiteralTag");
16
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
18
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
- 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; }
20
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
21
- 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); }
22
16
  /**
23
17
  * @class Selection
24
18
  * @util
@@ -31,62 +25,57 @@ class Selection {
31
25
  *
32
26
  * @type {GridSettings}
33
27
  */
34
- _defineProperty(this, "settings", void 0);
28
+ this.settings = settings;
35
29
  /**
36
30
  * An additional object with dynamically defined properties which describes table state.
37
31
  *
38
32
  * @type {object}
39
33
  */
40
- _defineProperty(this, "tableProps", void 0);
34
+ this.tableProps = tableProps;
41
35
  /**
42
36
  * The flag which determines if the selection is in progress.
43
37
  *
44
38
  * @type {boolean}
45
39
  */
46
- _defineProperty(this, "inProgress", false);
40
+ this.inProgress = false;
47
41
  /**
48
- * Selection data layer (handle visual coordinates).
42
+ * The flag indicates that selection was performed by clicking the corner overlay.
49
43
  *
50
- * @type {SelectionRange}
44
+ * @type {boolean}
51
45
  */
52
- _defineProperty(this, "selectedRange", new _range.default((highlight, from, to) => {
53
- return this.tableProps.createCellRange(highlight, from, to);
54
- }));
46
+ this.selectedByCorner = false;
55
47
  /**
56
- * Visualization layer.
48
+ * The collection of the selection layer levels where the whole row was selected using the row header or
49
+ * the corner header.
57
50
  *
58
- * @type {Highlight}
51
+ * @type {Set.<number>}
59
52
  */
60
- _defineProperty(this, "highlight", void 0);
53
+ this.selectedByRowHeader = new Set();
61
54
  /**
62
- * The module for modifying coordinates.
55
+ * The collection of the selection layer levels where the whole column was selected using the column header or
56
+ * the corner header.
63
57
  *
64
- * @type {Transformation}
58
+ * @type {Set.<number>}
65
59
  */
66
- _defineProperty(this, "transformation", void 0);
60
+ this.selectedByColumnHeader = new Set();
67
61
  /**
68
- * The collection of the selection layer levels where the whole row was selected using the row header or
69
- * the corner header.
62
+ * Selection data layer (handle visual coordinates).
70
63
  *
71
- * @type {Set<number>}
64
+ * @type {SelectionRange}
72
65
  */
73
- _defineProperty(this, "selectedByRowHeader", new Set());
66
+ this.selectedRange = new _range.default((highlight, from, to) => {
67
+ return this.tableProps.createCellRange(highlight, from, to);
68
+ });
74
69
  /**
75
- * The collection of the selection layer levels where the whole column was selected using the column header or
76
- * the corner header.
70
+ * Visualization layer.
77
71
  *
78
- * @type {Set<number>}
72
+ * @type {Highlight}
79
73
  */
80
- _defineProperty(this, "selectedByColumnHeader", new Set());
81
- this.settings = settings;
82
- this.tableProps = tableProps;
83
74
  this.highlight = new _highlight.default({
84
75
  headerClassName: settings.currentHeaderClassName,
85
76
  activeHeaderClassName: settings.activeHeaderClassName,
86
77
  rowClassName: settings.currentRowClassName,
87
78
  columnClassName: settings.currentColClassName,
88
- rowIndexMapper: this.tableProps.rowIndexMapper,
89
- columnIndexMapper: this.tableProps.columnIndexMapper,
90
79
  disabledCellSelection: (row, column) => this.tableProps.isDisabledCellSelection(row, column),
91
80
  cellCornerVisible: function () {
92
81
  return _this.isCellCornerVisible(...arguments);
@@ -97,19 +86,21 @@ class Selection {
97
86
  visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),
98
87
  renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),
99
88
  createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
100
- createCellRange: (highlight, from, to) => this.tableProps.createCellRange(highlight, from, to)
89
+ createCellRange: (highlight, from, to) => this.tableProps.createCellRange(highlight, from, to),
90
+ rowIndexMapper: () => this.tableProps.rowIndexMapper(),
91
+ columnIndexMapper: () => this.tableProps.columnIndexMapper()
101
92
  });
93
+ /**
94
+ * The module for modifying coordinates.
95
+ *
96
+ * @type {Transformation}
97
+ */
102
98
  this.transformation = new _transformation.default(this.selectedRange, {
103
- rowIndexMapper: this.tableProps.rowIndexMapper,
104
- columnIndexMapper: this.tableProps.columnIndexMapper,
105
- countRenderableRows: () => this.tableProps.countRenderableRows(),
106
- countRenderableColumns: () => this.tableProps.countRenderableColumns(),
107
- countRowHeaders: () => this.tableProps.countRowHeaders(),
108
- countColHeaders: () => this.tableProps.countColHeaders(),
99
+ countRows: () => this.tableProps.countRowsTranslated(),
100
+ countCols: () => this.tableProps.countColsTranslated(),
109
101
  visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),
110
102
  renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),
111
103
  createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
112
- navigableHeaders: () => settings.navigableHeaders,
113
104
  fixedRowsBottom: () => settings.fixedRowsBottom,
114
105
  minSpareRows: () => settings.minSpareRows,
115
106
  minSpareCols: () => settings.minSpareCols,
@@ -164,14 +155,14 @@ class Selection {
164
155
  }
165
156
 
166
157
  /**
167
- * Indicate that selection process began. It sets internally `.inProgress` property to `true`.
158
+ * Indicate that selection process began. It sets internaly `.inProgress` property to `true`.
168
159
  */
169
160
  begin() {
170
161
  this.inProgress = true;
171
162
  }
172
163
 
173
164
  /**
174
- * Indicate that selection process finished. It sets internally `.inProgress` property to `false`.
165
+ * Indicate that selection process finished. It sets internaly `.inProgress` property to `false`.
175
166
  */
176
167
  finish() {
177
168
  this.runLocalHooks('afterSelectionFinished', Array.from(this.selectedRange));
@@ -196,25 +187,33 @@ class Selection {
196
187
  * the default trigger will be used.
197
188
  * @param {boolean} [fragment=false] If `true`, the selection will be treated as a partial selection where the
198
189
  * `setRangeEnd` method won't be called on every `setRangeStart` call.
199
- * @param {CellCoords} [highlightCoords] If set, allows changing the coordinates of the highlight/focus cell.
200
190
  */
201
191
  setRangeStart(coords, multipleSelection) {
202
192
  let fragment = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
203
- let highlightCoords = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : coords;
204
193
  const isMultipleMode = this.settings.selectionMode === 'multiple';
205
194
  const isMultipleSelection = (0, _mixed.isUndefined)(multipleSelection) ? this.tableProps.getShortcutManager().isCtrlPressed() : multipleSelection;
195
+ const isRowNegative = coords.row < 0;
196
+ const isColumnNegative = coords.col < 0;
197
+ const selectedByCorner = isRowNegative && isColumnNegative;
206
198
  // We are creating copy. We would like to modify just the start of the selection by below hook. Then original coords
207
199
  // should be handled by next methods.
208
200
  const coordsClone = coords.clone();
201
+ this.selectedByCorner = selectedByCorner;
209
202
  this.runLocalHooks(`beforeSetRangeStart${fragment ? 'Only' : ''}`, coordsClone);
210
203
  if (!isMultipleMode || isMultipleMode && !isMultipleSelection && (0, _mixed.isUndefined)(multipleSelection)) {
211
204
  this.selectedRange.clear();
212
205
  }
213
- this.selectedRange.add(coordsClone).current().setHighlight(highlightCoords.clone());
206
+ this.selectedRange.add(coordsClone);
214
207
  if (this.getLayerLevel() === 0) {
215
208
  this.selectedByRowHeader.clear();
216
209
  this.selectedByColumnHeader.clear();
217
210
  }
211
+ if (!selectedByCorner && isColumnNegative) {
212
+ this.selectedByRowHeader.add(this.getLayerLevel());
213
+ }
214
+ if (!selectedByCorner && isRowNegative) {
215
+ this.selectedByColumnHeader.add(this.getLayerLevel());
216
+ }
218
217
  if (!fragment) {
219
218
  this.setRangeEnd(coords);
220
219
  }
@@ -227,11 +226,9 @@ class Selection {
227
226
  * @param {boolean} [multipleSelection] If `true`, selection will be worked in 'multiple' mode. This option works
228
227
  * only when 'selectionMode' is set as 'multiple'. If the argument is not defined
229
228
  * the default trigger will be used.
230
- * @param {CellCoords} [highlightCoords] If set, allows changing the coordinates of the highlight/focus cell.
231
229
  */
232
230
  setRangeStartOnly(coords, multipleSelection) {
233
- let highlightCoords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : coords;
234
- this.setRangeStart(coords, multipleSelection, true, highlightCoords);
231
+ this.setRangeStart(coords, multipleSelection, true);
235
232
  }
236
233
 
237
234
  /**
@@ -243,39 +240,21 @@ class Selection {
243
240
  if (this.selectedRange.isEmpty()) {
244
241
  return;
245
242
  }
246
- const coordsClone = coords.clone();
247
- const countRows = this.tableProps.countRows();
248
- const countCols = this.tableProps.countCols();
249
- const isSingle = this.selectedRange.current().clone().setTo(coords).isSingleHeader();
250
243
 
251
- // Ignore processing the end range when the header selection starts overlapping the corner and
252
- // the selection is not a single header highlight.
253
- if ((countRows > 0 || countCols > 0) && (countRows === 0 && coordsClone.col < 0 && !isSingle || countCols === 0 && coordsClone.row < 0 && !isSingle)) {
254
- return;
255
- }
244
+ // We are creating copy. We would like to modify just the end of the selection by below hook. Then original coords
245
+ // should be handled by next methods.
246
+ const coordsClone = coords.clone();
256
247
  this.runLocalHooks('beforeSetRangeEnd', coordsClone);
257
248
  this.begin();
258
249
  const cellRange = this.selectedRange.current();
259
- if (!this.settings.navigableHeaders) {
260
- cellRange.highlight.normalize();
261
- }
262
- if (this.settings.selectionMode === 'single') {
263
- cellRange.setFrom(cellRange.highlight);
264
- cellRange.setTo(cellRange.highlight);
265
- } else {
266
- cellRange.setTo(coordsClone);
250
+ if (this.settings.selectionMode !== 'single') {
251
+ cellRange.setTo(this.tableProps.createCellCoords(coordsClone.row, coordsClone.col));
267
252
  }
268
253
 
269
- // Prevent creating "area" selection that overlaps headers.
270
- if (countRows > 0 && countCols > 0) {
271
- if (!this.settings.navigableHeaders || this.settings.navigableHeaders && !cellRange.isSingleHeader()) {
272
- cellRange.to.normalize();
273
- }
274
- }
275
- const focusHighlight = this.highlight.getFocus();
276
- focusHighlight.clear();
277
- if (this.highlight.isEnabledFor(_highlight.FOCUS_TYPE, cellRange.highlight)) {
278
- focusHighlight.add(this.selectedRange.current().highlight).commit().syncWith(cellRange);
254
+ // Set up current selection.
255
+ this.highlight.getCell().clear();
256
+ if (this.highlight.isEnabledFor(_constants.CELL_TYPE, cellRange.highlight)) {
257
+ this.highlight.getCell().add(this.selectedRange.current().highlight).commit().syncWith(cellRange);
279
258
  }
280
259
  const layerLevel = this.getLayerLevel();
281
260
 
@@ -283,80 +262,69 @@ class Selection {
283
262
  // indication that the new selection is performing.
284
263
  if (layerLevel < this.highlight.layerLevel) {
285
264
  (0, _array.arrayEach)(this.highlight.getAreas(), highlight => void highlight.clear());
286
- (0, _array.arrayEach)(this.highlight.getLayeredAreas(), highlight => void highlight.clear());
287
- (0, _array.arrayEach)(this.highlight.getRowHeaders(), highlight => void highlight.clear());
288
- (0, _array.arrayEach)(this.highlight.getColumnHeaders(), highlight => void highlight.clear());
289
- (0, _array.arrayEach)(this.highlight.getActiveRowHeaders(), highlight => void highlight.clear());
290
- (0, _array.arrayEach)(this.highlight.getActiveColumnHeaders(), highlight => void highlight.clear());
291
- (0, _array.arrayEach)(this.highlight.getActiveCornerHeaders(), highlight => void highlight.clear());
292
- (0, _array.arrayEach)(this.highlight.getRowHighlights(), highlight => void highlight.clear());
293
- (0, _array.arrayEach)(this.highlight.getColumnHighlights(), highlight => void highlight.clear());
265
+ (0, _array.arrayEach)(this.highlight.getHeaders(), highlight => void highlight.clear());
266
+ (0, _array.arrayEach)(this.highlight.getActiveHeaders(), highlight => void highlight.clear());
294
267
  }
295
268
  this.highlight.useLayerLevel(layerLevel);
296
- const areaHighlight = this.highlight.createArea();
297
- const layeredAreaHighlight = this.highlight.createLayeredArea();
298
- const rowHeaderHighlight = this.highlight.createRowHeader();
299
- const columnHeaderHighlight = this.highlight.createColumnHeader();
300
- const activeRowHeaderHighlight = this.highlight.createActiveRowHeader();
301
- const activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();
302
- const activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();
303
- const rowHighlight = this.highlight.createRowHighlight();
304
- const columnHighlight = this.highlight.createColumnHighlight();
269
+ const areaHighlight = this.highlight.createOrGetArea();
270
+ const headerHighlight = this.highlight.createOrGetHeader();
271
+ const activeHeaderHighlight = this.highlight.createOrGetActiveHeader();
305
272
  areaHighlight.clear();
306
- layeredAreaHighlight.clear();
307
- rowHeaderHighlight.clear();
308
- columnHeaderHighlight.clear();
309
- activeRowHeaderHighlight.clear();
310
- activeColumnHeaderHighlight.clear();
311
- activeCornerHeaderHighlight.clear();
312
- rowHighlight.clear();
313
- columnHighlight.clear();
314
- if (this.highlight.isEnabledFor(_highlight.AREA_TYPE, cellRange.highlight) && (this.isMultiple() || layerLevel >= 1)) {
273
+ headerHighlight.clear();
274
+ activeHeaderHighlight.clear();
275
+ if (this.highlight.isEnabledFor(_constants.AREA_TYPE, cellRange.highlight) && (this.isMultiple() || layerLevel >= 1)) {
315
276
  areaHighlight.add(cellRange.from).add(cellRange.to).commit();
316
- layeredAreaHighlight.add(cellRange.from).add(cellRange.to).commit();
317
277
  if (layerLevel === 1) {
318
278
  // For single cell selection in the same layer, we do not create area selection to prevent blue background.
319
279
  // When non-consecutive selection is performed we have to add that missing area selection to the previous layer
320
280
  // based on previous coordinates. It only occurs when the previous selection wasn't select multiple cells.
321
281
  const previousRange = this.selectedRange.previous();
322
- this.highlight.useLayerLevel(layerLevel - 1);
323
- this.highlight.createArea().add(previousRange.from).commit()
324
- // Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).
325
- .syncWith(previousRange);
326
- this.highlight.createLayeredArea().add(previousRange.from).commit()
282
+ this.highlight.useLayerLevel(layerLevel - 1).createOrGetArea().add(previousRange.from).commit()
327
283
  // Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).
328
284
  .syncWith(previousRange);
329
285
  this.highlight.useLayerLevel(layerLevel);
330
286
  }
331
287
  }
332
- if (this.highlight.isEnabledFor(_highlight.HEADER_TYPE, cellRange.highlight)) {
333
- if (!cellRange.isSingleHeader()) {
334
- const rowCoordsFrom = this.tableProps.createCellCoords(Math.max(cellRange.from.row, 0), -1);
335
- const rowCoordsTo = this.tableProps.createCellCoords(cellRange.to.row, -1);
336
- const columnCoordsFrom = this.tableProps.createCellCoords(-1, Math.max(cellRange.from.col, 0));
337
- const columnCoordsTo = this.tableProps.createCellCoords(-1, cellRange.to.col);
338
- if (this.settings.selectionMode === 'single') {
339
- rowHeaderHighlight.add(rowCoordsFrom).commit();
340
- columnHeaderHighlight.add(columnCoordsFrom).commit();
341
- rowHighlight.add(rowCoordsFrom).commit();
342
- columnHighlight.add(columnCoordsFrom).commit();
343
- } else {
344
- rowHeaderHighlight.add(rowCoordsFrom).add(rowCoordsTo).commit();
345
- columnHeaderHighlight.add(columnCoordsFrom).add(columnCoordsTo).commit();
346
- rowHighlight.add(rowCoordsFrom).add(rowCoordsTo).commit();
347
- columnHighlight.add(columnCoordsFrom).add(columnCoordsTo).commit();
348
- }
288
+ if (this.highlight.isEnabledFor(_constants.HEADER_TYPE, cellRange.highlight)) {
289
+ // The header selection generally contains cell selection. In a case when all rows (or columns)
290
+ // are hidden that visual coordinates are translated to renderable coordinates that do not exist.
291
+ // Hence no header highlight is generated. In that case, to make a column (or a row) header
292
+ // highlight, the row and column index has to point to the header (the negative value). See #7052.
293
+ const areAnyRowsRendered = this.tableProps.countRowsTranslated() === 0;
294
+ const areAnyColumnsRendered = this.tableProps.countColsTranslated() === 0;
295
+ let headerCellRange = cellRange;
296
+ if (areAnyRowsRendered || areAnyColumnsRendered) {
297
+ headerCellRange = cellRange.clone();
298
+ }
299
+ if (areAnyRowsRendered) {
300
+ headerCellRange.from.row = -1;
349
301
  }
350
- const highlightRowHeaders = this.isEntireRowSelected() && (countCols > 0 && countCols === cellRange.getWidth() || countCols === 0 && (this.isSelectedByRowHeader() || this.isSelectedByCorner()));
351
- const highlightColumnHeaders = this.isEntireColumnSelected() && (countRows > 0 && countRows === cellRange.getHeight() || countRows === 0 && (this.isSelectedByColumnHeader() || this.isSelectedByCorner()));
352
- if (highlightRowHeaders) {
353
- activeRowHeaderHighlight.add(this.tableProps.createCellCoords(Math.max(cellRange.from.row, 0), Math.min(-this.tableProps.countRowHeaders(), -1))).add(this.tableProps.createCellCoords(Math.max(cellRange.to.row, 0), -1)).commit();
302
+ if (areAnyColumnsRendered) {
303
+ headerCellRange.from.col = -1;
354
304
  }
355
- if (highlightColumnHeaders) {
356
- activeColumnHeaderHighlight.add(this.tableProps.createCellCoords(Math.min(-this.tableProps.countColHeaders(), -1), Math.max(cellRange.from.col, 0))).add(this.tableProps.createCellCoords(-1, Math.max(cellRange.to.col, 0))).commit();
305
+ if (this.settings.selectionMode === 'single') {
306
+ if (this.isSelectedByAnyHeader()) {
307
+ headerCellRange.from.normalize();
308
+ }
309
+ headerHighlight.add(headerCellRange.from).commit();
310
+ } else {
311
+ headerHighlight.add(headerCellRange.from).add(headerCellRange.to).commit();
357
312
  }
358
- if (highlightRowHeaders && highlightColumnHeaders) {
359
- activeCornerHeaderHighlight.add(this.tableProps.createCellCoords(-this.tableProps.countColHeaders(), -this.tableProps.countRowHeaders())).add(this.tableProps.createCellCoords(-1, -1)).commit();
313
+ if (this.isEntireRowSelected()) {
314
+ const isRowSelected = this.tableProps.countCols() === cellRange.getWidth();
315
+
316
+ // Make sure that the whole row is selected (in case where selectionMode is set to 'single')
317
+ if (isRowSelected) {
318
+ activeHeaderHighlight.add(this.tableProps.createCellCoords(cellRange.from.row, -1)).add(this.tableProps.createCellCoords(cellRange.to.row, -1)).commit();
319
+ }
320
+ }
321
+ if (this.isEntireColumnSelected()) {
322
+ const isColumnSelected = this.tableProps.countRows() === cellRange.getHeight();
323
+
324
+ // Make sure that the whole column is selected (in case where selectionMode is set to 'single')
325
+ if (isColumnSelected) {
326
+ activeHeaderHighlight.add(this.tableProps.createCellCoords(-1, cellRange.from.col)).add(this.tableProps.createCellCoords(-1, cellRange.to.col)).commit();
327
+ }
360
328
  }
361
329
  }
362
330
  this.runLocalHooks('afterSetRangeEnd', coords);
@@ -379,12 +347,12 @@ class Selection {
379
347
  *
380
348
  * @param {number} rowDelta Rows number to move, value can be passed as negative number.
381
349
  * @param {number} colDelta Columns number to move, value can be passed as negative number.
382
- * @param {boolean} [createMissingRecords=false] If `true` the new rows/columns will be created if necessary.
383
- * Otherwise, row/column will be created according to `minSpareRows/minSpareCols` settings of Handsontable.
350
+ * @param {boolean} [force=false] If `true` the new rows/columns will be created if necessary. Otherwise, row/column will
351
+ * be created according to `minSpareRows/minSpareCols` settings of Handsontable.
384
352
  */
385
353
  transformStart(rowDelta, colDelta) {
386
- let createMissingRecords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
387
- this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta, createMissingRecords));
354
+ let force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
355
+ this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta, force));
388
356
  }
389
357
 
390
358
  /**
@@ -425,7 +393,7 @@ class Selection {
425
393
  */
426
394
  isSelectedByRowHeader() {
427
395
  let layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
428
- return !this.isSelectedByCorner(layerLevel) && (layerLevel === -1 ? this.selectedByRowHeader.size > 0 : this.selectedByRowHeader.has(layerLevel));
396
+ return !this.isSelectedByCorner(layerLevel) && this.isEntireRowSelected(layerLevel);
429
397
  }
430
398
 
431
399
  /**
@@ -437,19 +405,7 @@ class Selection {
437
405
  */
438
406
  isEntireRowSelected() {
439
407
  let layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
440
- const tester = range => {
441
- const {
442
- col
443
- } = range.getOuterTopStartCorner();
444
- const rowHeaders = this.tableProps.countRowHeaders();
445
- const countCols = this.tableProps.countCols();
446
- return (rowHeaders > 0 && col < 0 || rowHeaders === 0) && range.getWidth() === countCols;
447
- };
448
- if (layerLevel === -1) {
449
- return Array.from(this.selectedRange).some(range => tester(range));
450
- }
451
- const range = this.selectedRange.peekByIndex(layerLevel);
452
- return range ? tester(range) : false;
408
+ return layerLevel === -1 ? this.selectedByRowHeader.size > 0 : this.selectedByRowHeader.has(layerLevel);
453
409
  }
454
410
 
455
411
  /**
@@ -462,7 +418,7 @@ class Selection {
462
418
  */
463
419
  isSelectedByColumnHeader() {
464
420
  let layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
465
- return !this.isSelectedByCorner() && (layerLevel === -1 ? this.selectedByColumnHeader.size > 0 : this.selectedByColumnHeader.has(layerLevel));
421
+ return !this.isSelectedByCorner() && this.isEntireColumnSelected(layerLevel);
466
422
  }
467
423
 
468
424
  /**
@@ -474,19 +430,7 @@ class Selection {
474
430
  */
475
431
  isEntireColumnSelected() {
476
432
  let layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
477
- const tester = range => {
478
- const {
479
- row
480
- } = range.getOuterTopStartCorner();
481
- const colHeaders = this.tableProps.countColHeaders();
482
- const countRows = this.tableProps.countRows();
483
- return (colHeaders > 0 && row < 0 || colHeaders === 0) && range.getHeight() === countRows;
484
- };
485
- if (layerLevel === -1) {
486
- return Array.from(this.selectedRange).some(range => tester(range));
487
- }
488
- const range = this.selectedRange.peekByIndex(layerLevel);
489
- return range ? tester(range) : false;
433
+ return layerLevel === -1 ? this.selectedByColumnHeader.size > 0 : this.selectedByColumnHeader.has(layerLevel);
490
434
  }
491
435
 
492
436
  /**
@@ -504,7 +448,7 @@ class Selection {
504
448
  * @returns {boolean}
505
449
  */
506
450
  isSelectedByCorner() {
507
- return this.selectedByColumnHeader.has(this.getLayerLevel()) && this.selectedByRowHeader.has(this.getLayerLevel());
451
+ return this.selectedByCorner;
508
452
  }
509
453
 
510
454
  /**
@@ -563,50 +507,29 @@ class Selection {
563
507
  }
564
508
 
565
509
  /**
566
- * Selects all cells and headers.
510
+ * Select all cells.
567
511
  *
568
- * @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers,
569
- * `false` otherwise.
570
- * @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column
571
- * headers, `false` otherwise.
572
- * @param {{row: number, col: number} | false} [focusPosition] The argument allows changing the cell/header
573
- * focus position. The value takes an object with a `row` and `col` properties from -N to N, where
574
- * negative values point to the headers and positive values point to the cell range.
512
+ * @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers, `false`
513
+ * otherwise.
514
+ * @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column headers, `false`
515
+ * otherwise.
575
516
  */
576
517
  selectAll() {
577
- var _this$getSelectedRang;
578
518
  let includeRowHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
579
519
  let includeColumnHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
580
- let focusPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
581
520
  const nrOfRows = this.tableProps.countRows();
582
521
  const nrOfColumns = this.tableProps.countCols();
583
- const countRowHeaders = this.tableProps.countRowHeaders();
584
- const countColHeaders = this.tableProps.countColHeaders();
585
- const rowFrom = includeRowHeaders ? -countColHeaders : 0;
586
- const columnFrom = includeColumnHeaders ? -countRowHeaders : 0;
587
522
 
588
523
  // We can't select cells when there is no data.
589
- if (rowFrom === 0 && columnFrom === 0 && (nrOfRows === 0 || nrOfColumns === 0)) {
524
+ if (!includeRowHeaders && !includeColumnHeaders && (nrOfRows === 0 || nrOfColumns === 0)) {
590
525
  return;
591
526
  }
592
- let highlight = (_this$getSelectedRang = this.getSelectedRange().current()) === null || _this$getSelectedRang === void 0 ? void 0 : _this$getSelectedRang.highlight;
593
- let isSelectedByCorner = false;
594
- if (focusPosition && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.row) && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.col)) {
595
- isSelectedByCorner = focusPosition.row < 0 && focusPosition.col < 0;
596
- highlight = this.tableProps.createCellCoords((0, _number.clamp)(focusPosition.row, rowFrom, nrOfRows - 1), (0, _number.clamp)(focusPosition.col, columnFrom, nrOfColumns - 1));
597
- }
598
- const startCoords = this.tableProps.createCellCoords(rowFrom, columnFrom);
527
+ const startCoords = this.tableProps.createCellCoords(includeColumnHeaders ? -1 : 0, includeRowHeaders ? -1 : 0);
599
528
  const endCoords = this.tableProps.createCellCoords(nrOfRows - 1, nrOfColumns - 1);
600
529
  this.clear();
601
- this.setRangeStartOnly(startCoords, void 0, highlight);
602
- if (isSelectedByCorner) {
603
- this.selectedByRowHeader.add(this.getLayerLevel());
604
- this.selectedByColumnHeader.add(this.getLayerLevel());
605
- } else if (columnFrom < 0) {
606
- this.selectedByRowHeader.add(this.getLayerLevel());
607
- } else if (rowFrom < 0) {
608
- this.selectedByColumnHeader.add(this.getLayerLevel());
609
- }
530
+ this.setRangeStartOnly(startCoords);
531
+ this.selectedByRowHeader.add(this.getLayerLevel());
532
+ this.selectedByColumnHeader.add(this.getLayerLevel());
610
533
  this.setRangeEnd(endCoords);
611
534
  this.finish();
612
535
  }
@@ -633,29 +556,21 @@ class Selection {
633
556
  propToCol: prop => this.tableProps.propToCol(prop),
634
557
  keepDirection: true
635
558
  });
636
- const navigableHeaders = this.settings.navigableHeaders;
637
- const tableParams = {
638
- countRows: this.tableProps.countRows(),
639
- countCols: this.tableProps.countCols(),
640
- countRowHeaders: navigableHeaders ? this.tableProps.countRowHeaders() : 0,
641
- countColHeaders: navigableHeaders ? this.tableProps.countColHeaders() : 0
642
- };
559
+ const nrOfRows = this.tableProps.countRows();
560
+ const nrOfColumns = this.tableProps.countCols();
643
561
 
644
562
  // Check if every layer of the coordinates are valid.
645
563
  const isValid = !selectionRanges.some(selection => {
646
- const cellRange = selectionSchemaNormalizer(selection);
647
- const rangeValidity = cellRange.isValid(tableParams);
648
- return !(rangeValidity && !cellRange.containsHeaders() || rangeValidity && cellRange.containsHeaders() && cellRange.isSingleHeader());
564
+ const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);
565
+ const _isValid = (0, _utils.isValidCoord)(rowStart, nrOfRows) && (0, _utils.isValidCoord)(columnStart, nrOfColumns) && (0, _utils.isValidCoord)(rowEnd, nrOfRows) && (0, _utils.isValidCoord)(columnEnd, nrOfColumns);
566
+ return !_isValid;
649
567
  });
650
568
  if (isValid) {
651
569
  this.clear();
652
570
  (0, _array.arrayEach)(selectionRanges, selection => {
653
- const {
654
- from,
655
- to
656
- } = selectionSchemaNormalizer(selection);
657
- this.setRangeStartOnly(from.clone(), false);
658
- this.setRangeEnd(to.clone());
571
+ const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);
572
+ this.setRangeStartOnly(this.tableProps.createCellCoords(rowStart, columnStart), false);
573
+ this.setRangeEnd(this.tableProps.createCellCoords(rowEnd, columnEnd));
659
574
  this.finish();
660
575
  });
661
576
  }
@@ -668,43 +583,22 @@ class Selection {
668
583
  *
669
584
  * @param {number|string} startColumn Visual column index or column property from which the selection starts.
670
585
  * @param {number|string} [endColumn] Visual column index or column property from to the selection finishes.
671
- * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
672
- * The value can take visual row index from -N to N, where negative values
673
- * point to the headers and positive values point to the cell range.
586
+ * @param {number} [headerLevel=-1] A row header index that triggers the column selection. The value can
587
+ * take -1 to -N, where -1 means the header closest to the cells.
588
+ *
674
589
  * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
675
590
  */
676
591
  selectColumns(startColumn) {
677
592
  let endColumn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startColumn;
678
- let focusPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
593
+ let headerLevel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;
679
594
  const start = typeof startColumn === 'string' ? this.tableProps.propToCol(startColumn) : startColumn;
680
595
  const end = typeof endColumn === 'string' ? this.tableProps.propToCol(endColumn) : endColumn;
681
- const countRows = this.tableProps.countRows();
682
- const countCols = this.tableProps.countCols();
683
- const countColHeaders = this.tableProps.countColHeaders();
684
- const columnHeaderLastIndex = countColHeaders === 0 ? 0 : -countColHeaders;
685
- const fromCoords = new _src.CellCoords(columnHeaderLastIndex, start);
686
- const toCoords = new _src.CellCoords(countRows - 1, end);
687
- const isValid = new _src.CellRange(fromCoords, fromCoords, toCoords).isValid({
688
- countRows,
689
- countCols,
690
- countRowHeaders: 0,
691
- countColHeaders
692
- });
596
+ const nrOfColumns = this.tableProps.countCols();
597
+ const nrOfRows = this.tableProps.countRows();
598
+ const isValid = (0, _utils.isValidCoord)(start, nrOfColumns) && (0, _utils.isValidCoord)(end, nrOfColumns);
693
599
  if (isValid) {
694
- const fromRow = countColHeaders === 0 ? 0 : (0, _number.clamp)(focusPosition, columnHeaderLastIndex, -1);
695
- const toRow = countRows - 1;
696
- const from = this.tableProps.createCellCoords(fromRow, start);
697
- const to = this.tableProps.createCellCoords(toRow, end);
698
- const highlight = this.tableProps.createCellCoords((0, _number.clamp)(focusPosition, columnHeaderLastIndex, countRows - 1), start);
699
- this.runLocalHooks('beforeSelectColumns', from, to, highlight);
700
-
701
- // disallow modifying row axis for that hooks
702
- from.row = fromRow;
703
- to.row = toRow;
704
- this.setRangeStartOnly(from, void 0, highlight);
705
- this.selectedByColumnHeader.add(this.getLayerLevel());
706
- this.setRangeEnd(to);
707
- this.runLocalHooks('afterSelectColumns', from, to, highlight);
600
+ this.setRangeStartOnly(this.tableProps.createCellCoords(headerLevel, start));
601
+ this.setRangeEnd(this.tableProps.createCellCoords(nrOfRows - 1, end));
708
602
  this.finish();
709
603
  }
710
604
  return isValid;
@@ -715,41 +609,20 @@ class Selection {
715
609
  *
716
610
  * @param {number} startRow Visual row index from which the selection starts.
717
611
  * @param {number} [endRow] Visual row index from to the selection finishes.
718
- * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
719
- * The value can take visual column index from -N to N, where negative values
720
- * point to the headers and positive values point to the cell range.
612
+ * @param {number} [headerLevel=-1] A column header index that triggers the row selection.
613
+ * The value can take -1 to -N, where -1 means the header
614
+ * closest to the cells.
721
615
  * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
722
616
  */
723
617
  selectRows(startRow) {
724
618
  let endRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startRow;
725
- let focusPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
726
- const countRows = this.tableProps.countRows();
727
- const countCols = this.tableProps.countCols();
728
- const countRowHeaders = this.tableProps.countRowHeaders();
729
- const rowHeaderLastIndex = countRowHeaders === 0 ? 0 : -countRowHeaders;
730
- const fromCoords = new _src.CellCoords(startRow, rowHeaderLastIndex);
731
- const toCoords = new _src.CellCoords(endRow, countCols - 1);
732
- const isValid = new _src.CellRange(fromCoords, fromCoords, toCoords).isValid({
733
- countRows,
734
- countCols,
735
- countRowHeaders,
736
- countColHeaders: 0
737
- });
619
+ let headerLevel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;
620
+ const nrOfRows = this.tableProps.countRows();
621
+ const nrOfColumns = this.tableProps.countCols();
622
+ const isValid = (0, _utils.isValidCoord)(startRow, nrOfRows) && (0, _utils.isValidCoord)(endRow, nrOfRows);
738
623
  if (isValid) {
739
- const fromColumn = countRowHeaders === 0 ? 0 : (0, _number.clamp)(focusPosition, rowHeaderLastIndex, -1);
740
- const toColumn = countCols - 1;
741
- const from = this.tableProps.createCellCoords(startRow, fromColumn);
742
- const to = this.tableProps.createCellCoords(endRow, toColumn);
743
- const highlight = this.tableProps.createCellCoords(startRow, (0, _number.clamp)(focusPosition, rowHeaderLastIndex, countCols - 1));
744
- this.runLocalHooks('beforeSelectRows', from, to, highlight);
745
-
746
- // disallow modifying column axis for that hooks
747
- from.col = fromColumn;
748
- to.col = toColumn;
749
- this.setRangeStartOnly(from, void 0, highlight);
750
- this.selectedByRowHeader.add(this.getLayerLevel());
751
- this.setRangeEnd(to);
752
- this.runLocalHooks('afterSelectRows', from, to, highlight);
624
+ this.setRangeStartOnly(this.tableProps.createCellCoords(startRow, headerLevel));
625
+ this.setRangeEnd(this.tableProps.createCellCoords(endRow, nrOfColumns - 1));
753
626
  this.finish();
754
627
  }
755
628
  return isValid;
@@ -766,31 +639,19 @@ class Selection {
766
639
  if (!this.isSelected()) {
767
640
  return;
768
641
  }
769
- const focusHighlight = this.highlight.getFocus();
642
+ const cellHighlight = this.highlight.getCell();
770
643
  const currentLayer = this.getLayerLevel();
771
- focusHighlight.commit().syncWith(this.selectedRange.current());
644
+ cellHighlight.commit().syncWith(this.selectedRange.current());
772
645
 
773
646
  // Rewriting rendered ranges going through all layers.
774
647
  for (let layerLevel = 0; layerLevel < this.selectedRange.size(); layerLevel += 1) {
775
648
  this.highlight.useLayerLevel(layerLevel);
776
- const areaHighlight = this.highlight.createArea();
777
- const areaLayeredHighlight = this.highlight.createLayeredArea();
778
- const rowHeaderHighlight = this.highlight.createRowHeader();
779
- const columnHeaderHighlight = this.highlight.createColumnHeader();
780
- const activeRowHeaderHighlight = this.highlight.createActiveRowHeader();
781
- const activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();
782
- const activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();
783
- const rowHighlight = this.highlight.createRowHighlight();
784
- const columnHighlight = this.highlight.createColumnHighlight();
649
+ const areaHighlight = this.highlight.createOrGetArea();
650
+ const headerHighlight = this.highlight.createOrGetHeader();
651
+ const activeHeaderHighlight = this.highlight.createOrGetActiveHeader();
785
652
  areaHighlight.commit();
786
- areaLayeredHighlight.commit();
787
- rowHeaderHighlight.commit();
788
- columnHeaderHighlight.commit();
789
- activeRowHeaderHighlight.commit();
790
- activeColumnHeaderHighlight.commit();
791
- activeCornerHeaderHighlight.commit();
792
- rowHighlight.commit();
793
- columnHighlight.commit();
653
+ headerHighlight.commit();
654
+ activeHeaderHighlight.commit();
794
655
  }
795
656
 
796
657
  // Reverting starting layer for the Highlight.