handsontable 0.0.0-next-06a64be-20230621 → 0.0.0-next-d1c8e0e-20230621

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 (279) hide show
  1. package/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
  2. package/3rdparty/walkontable/src/cell/coords.js +61 -12
  3. package/3rdparty/walkontable/src/cell/coords.mjs +61 -12
  4. package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
  5. package/3rdparty/walkontable/src/cell/range.js +44 -7
  6. package/3rdparty/walkontable/src/cell/range.mjs +44 -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 -4
  22. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -4
  23. package/3rdparty/walkontable/src/overlay/top.js +2 -4
  24. package/3rdparty/walkontable/src/overlay/top.mjs +2 -4
  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 +18 -0
  28. package/3rdparty/walkontable/src/selection/border/constants.mjs +13 -0
  29. package/3rdparty/walkontable/src/selection/constants.js +63 -0
  30. package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
  31. package/3rdparty/walkontable/src/selection/index.js +30 -0
  32. package/3rdparty/walkontable/src/selection/index.mjs +5 -0
  33. package/3rdparty/walkontable/src/selection/manager.js +329 -0
  34. package/3rdparty/walkontable/src/selection/manager.mjs +323 -0
  35. package/3rdparty/walkontable/src/selection/scanner.js +364 -0
  36. package/3rdparty/walkontable/src/selection/scanner.mjs +360 -0
  37. package/3rdparty/walkontable/src/selection/selection.js +133 -0
  38. package/3rdparty/walkontable/src/selection/selection.mjs +127 -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 +7 -79
  50. package/3rdparty/walkontable/src/table.mjs +8 -80
  51. package/base.js +2 -2
  52. package/base.mjs +2 -2
  53. package/core.d.ts +5 -3
  54. package/core.js +127 -309
  55. package/core.mjs +127 -309
  56. package/dataMap/metaManager/metaSchema.js +19 -0
  57. package/dataMap/metaManager/metaSchema.mjs +19 -0
  58. package/dist/handsontable.css +8 -3
  59. package/dist/handsontable.full.css +8 -3
  60. package/dist/handsontable.full.js +13658 -10651
  61. package/dist/handsontable.full.min.css +3 -3
  62. package/dist/handsontable.full.min.js +112 -112
  63. package/dist/handsontable.js +16566 -13559
  64. package/dist/handsontable.min.css +3 -3
  65. package/dist/handsontable.min.js +4 -4
  66. package/editorManager.js +21 -94
  67. package/editorManager.mjs +26 -98
  68. package/editors/textEditor/textEditor.js +3 -11
  69. package/editors/textEditor/textEditor.mjs +4 -12
  70. package/helpers/mixed.js +1 -1
  71. package/helpers/mixed.mjs +1 -1
  72. package/helpers/number.d.ts +1 -0
  73. package/helpers/number.js +18 -0
  74. package/helpers/number.mjs +17 -0
  75. package/package.json +1 -1
  76. package/pluginHooks.d.ts +5 -1
  77. package/pluginHooks.js +89 -1
  78. package/pluginHooks.mjs +89 -1
  79. package/plugins/collapsibleColumns/collapsibleColumns.js +81 -24
  80. package/plugins/collapsibleColumns/collapsibleColumns.mjs +81 -24
  81. package/plugins/columnSorting/columnSorting.js +50 -8
  82. package/plugins/columnSorting/columnSorting.mjs +49 -9
  83. package/plugins/columnSorting/index.js +4 -2
  84. package/plugins/columnSorting/index.mjs +1 -1
  85. package/plugins/comments/comments.js +11 -4
  86. package/plugins/comments/comments.mjs +11 -4
  87. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  88. package/plugins/contextMenu/contextMenu.js +80 -29
  89. package/plugins/contextMenu/contextMenu.mjs +81 -30
  90. package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
  91. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  92. package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
  93. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  94. package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
  95. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  96. package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
  97. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  98. package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
  99. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  100. package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
  101. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  102. package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
  103. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  104. package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
  105. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  106. package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
  107. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  108. package/plugins/contextMenu/utils.js +25 -16
  109. package/plugins/contextMenu/utils.mjs +24 -15
  110. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  111. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  112. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  113. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  114. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  115. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  116. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  117. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  118. package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
  119. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  120. package/plugins/copyPaste/copyPaste.js +5 -1
  121. package/plugins/copyPaste/copyPaste.mjs +5 -1
  122. package/plugins/customBorders/customBorders.js +25 -53
  123. package/plugins/customBorders/customBorders.mjs +26 -54
  124. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  125. package/plugins/dropdownMenu/dropdownMenu.js +94 -30
  126. package/plugins/dropdownMenu/dropdownMenu.mjs +94 -30
  127. package/plugins/filters/filters.js +62 -42
  128. package/plugins/filters/filters.mjs +61 -41
  129. package/plugins/mergeCells/mergeCells.js +5 -18
  130. package/plugins/mergeCells/mergeCells.mjs +5 -18
  131. package/plugins/multiColumnSorting/multiColumnSorting.js +42 -3
  132. package/plugins/multiColumnSorting/multiColumnSorting.mjs +42 -3
  133. package/plugins/nestedHeaders/nestedHeaders.js +132 -10
  134. package/plugins/nestedHeaders/nestedHeaders.mjs +132 -10
  135. package/plugins/nestedHeaders/stateManager/index.js +37 -0
  136. package/plugins/nestedHeaders/stateManager/index.mjs +37 -0
  137. package/plugins/nestedRows/nestedRows.js +52 -7
  138. package/plugins/nestedRows/nestedRows.mjs +52 -7
  139. package/renderers/checkboxRenderer/checkboxRenderer.js +2 -2
  140. package/renderers/checkboxRenderer/checkboxRenderer.mjs +1 -1
  141. package/selection/highlight/highlight.js +312 -89
  142. package/selection/highlight/highlight.mjs +302 -85
  143. package/selection/highlight/types/activeHeader.js +10 -9
  144. package/selection/highlight/types/activeHeader.mjs +10 -8
  145. package/selection/highlight/types/area.js +12 -27
  146. package/selection/highlight/types/area.mjs +16 -30
  147. package/selection/highlight/types/areaLayered.js +54 -0
  148. package/selection/highlight/types/areaLayered.mjs +49 -0
  149. package/selection/highlight/types/column.js +50 -0
  150. package/selection/highlight/types/column.mjs +45 -0
  151. package/selection/highlight/types/customSelection.js +7 -10
  152. package/selection/highlight/types/customSelection.mjs +7 -9
  153. package/selection/highlight/types/fill.js +5 -8
  154. package/selection/highlight/types/fill.mjs +5 -7
  155. package/selection/highlight/types/{cell.js → focus.js} +5 -8
  156. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  157. package/selection/highlight/types/header.js +10 -20
  158. package/selection/highlight/types/header.mjs +10 -19
  159. package/selection/highlight/types/{index.js → row.js} +27 -31
  160. package/selection/highlight/types/{index.mjs → row.mjs} +24 -29
  161. package/selection/highlight/visualSelection.js +31 -27
  162. package/selection/highlight/visualSelection.mjs +31 -27
  163. package/selection/index.js +4 -7
  164. package/selection/index.mjs +2 -3
  165. package/selection/mouseEventHandler.js +1 -1
  166. package/selection/mouseEventHandler.mjs +1 -1
  167. package/selection/range.js +8 -8
  168. package/selection/range.mjs +8 -8
  169. package/selection/selection.js +315 -181
  170. package/selection/selection.mjs +310 -180
  171. package/selection/transformation.js +233 -96
  172. package/selection/transformation.mjs +230 -93
  173. package/selection/utils.js +12 -36
  174. package/selection/utils.mjs +13 -36
  175. package/settings.d.ts +1 -0
  176. package/shortcutContexts/commands/editor/closeAndSave.js +15 -0
  177. package/shortcutContexts/commands/editor/closeAndSave.mjs +10 -0
  178. package/shortcutContexts/commands/editor/closeWithoutSaving.js +13 -0
  179. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  180. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  181. package/shortcutContexts/commands/editor/fastOpen.mjs +11 -0
  182. package/shortcutContexts/commands/editor/index.js +16 -0
  183. package/shortcutContexts/commands/editor/index.mjs +12 -0
  184. package/shortcutContexts/commands/editor/open.js +29 -0
  185. package/shortcutContexts/commands/editor/open.mjs +24 -0
  186. package/shortcutContexts/commands/emptySelectedCells.js +12 -0
  187. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  188. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  189. package/shortcutContexts/commands/extendCellsSelection/down.mjs +10 -0
  190. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +21 -0
  191. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +16 -0
  192. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  193. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  194. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  195. package/shortcutContexts/commands/extendCellsSelection/left.mjs +10 -0
  196. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  197. package/shortcutContexts/commands/extendCellsSelection/right.mjs +10 -0
  198. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  199. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +14 -0
  200. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +22 -0
  201. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +17 -0
  202. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +17 -0
  203. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +12 -0
  204. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +17 -0
  205. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +12 -0
  206. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +40 -0
  207. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +35 -0
  208. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +40 -0
  209. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +35 -0
  210. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +22 -0
  211. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +17 -0
  212. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  213. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +14 -0
  214. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  215. package/shortcutContexts/commands/extendCellsSelection/up.mjs +10 -0
  216. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +21 -0
  217. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +16 -0
  218. package/shortcutContexts/commands/index.js +52 -0
  219. package/shortcutContexts/commands/index.mjs +48 -0
  220. package/shortcutContexts/commands/moveCellSelection/down.js +12 -0
  221. package/shortcutContexts/commands/moveCellSelection/down.mjs +7 -0
  222. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +29 -0
  223. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +24 -0
  224. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  225. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  226. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +13 -0
  227. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  228. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +13 -0
  229. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  230. package/shortcutContexts/commands/moveCellSelection/left.js +11 -0
  231. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  232. package/shortcutContexts/commands/moveCellSelection/right.js +11 -0
  233. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  234. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +16 -0
  235. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +11 -0
  236. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +17 -0
  237. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +12 -0
  238. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +13 -0
  239. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +8 -0
  240. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +16 -0
  241. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +11 -0
  242. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +36 -0
  243. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +31 -0
  244. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +36 -0
  245. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +31 -0
  246. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +16 -0
  247. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +11 -0
  248. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +18 -0
  249. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +13 -0
  250. package/shortcutContexts/commands/moveCellSelection/up.js +12 -0
  251. package/shortcutContexts/commands/moveCellSelection/up.mjs +7 -0
  252. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +29 -0
  253. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +24 -0
  254. package/shortcutContexts/commands/populateSelectedCellsData.js +35 -0
  255. package/shortcutContexts/commands/populateSelectedCellsData.mjs +30 -0
  256. package/shortcutContexts/commands/selectAll.js +11 -0
  257. package/shortcutContexts/commands/selectAll.mjs +6 -0
  258. package/shortcutContexts/constants.js +19 -0
  259. package/shortcutContexts/constants.mjs +12 -0
  260. package/shortcutContexts/editor.js +29 -0
  261. package/shortcutContexts/editor.mjs +25 -0
  262. package/shortcutContexts/grid.js +247 -0
  263. package/shortcutContexts/grid.mjs +243 -0
  264. package/shortcutContexts/index.js +29 -0
  265. package/shortcutContexts/index.mjs +15 -0
  266. package/shortcuts/manager.js +2 -0
  267. package/shortcuts/manager.mjs +2 -0
  268. package/shortcuts/recorder.js +2 -2
  269. package/shortcuts/recorder.mjs +2 -2
  270. package/shortcuts/utils.js +21 -5
  271. package/shortcuts/utils.mjs +20 -4
  272. package/tableView.js +58 -9
  273. package/tableView.mjs +58 -9
  274. package/translations/indexMapper.js +8 -9
  275. package/translations/indexMapper.mjs +8 -9
  276. package/3rdparty/walkontable/src/selection.js +0 -355
  277. package/3rdparty/walkontable/src/selection.mjs +0 -349
  278. package/selection/highlight/constants.js +0 -16
  279. package/selection/highlight/constants.mjs +0 -6
@@ -1,11 +1,5 @@
1
1
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
2
  var _templateObject;
3
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
7
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
8
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
9
3
  function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
10
4
  import "core-js/modules/es.array.iterator.js";
11
5
  import "core-js/modules/es.object.to-string.js";
@@ -26,23 +20,22 @@ import "core-js/modules/es.symbol.description.js";
26
20
  import "core-js/modules/es.array.slice.js";
27
21
  import "core-js/modules/es.object.freeze.js";
28
22
  import "core-js/modules/es.symbol.iterator.js";
29
- import "core-js/modules/es.regexp.to-string.js";
30
- import "core-js/modules/es.function.name.js";
31
- import "core-js/modules/es.regexp.exec.js";
32
23
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
33
24
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
34
25
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
26
+ 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; }
35
27
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
36
28
  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); }
37
- import Highlight from "./highlight/highlight.mjs";
38
- import { AREA_TYPE, HEADER_TYPE, CELL_TYPE } from "./highlight/constants.mjs";
29
+ import { CellCoords, CellRange } from "./../3rdparty/walkontable/src/index.mjs";
30
+ import Highlight, { AREA_TYPE, HEADER_TYPE, FOCUS_TYPE } from "./highlight/highlight.mjs";
39
31
  import SelectionRange from "./range.mjs";
40
32
  import { createObjectPropListener, mixin } from "./../helpers/object.mjs";
41
33
  import { isUndefined } from "./../helpers/mixed.mjs";
34
+ import { clamp } from "./../helpers/number.mjs";
42
35
  import { arrayEach } from "./../helpers/array.mjs";
43
36
  import localHooks from "./../mixins/localHooks.mjs";
44
37
  import Transformation from "./transformation.mjs";
45
- import { detectSelectionType, isValidCoord, normalizeSelectionFactory, SELECTION_TYPE_EMPTY, SELECTION_TYPE_UNRECOGNIZED } from "./utils.mjs";
38
+ import { detectSelectionType, normalizeSelectionFactory, SELECTION_TYPE_EMPTY, SELECTION_TYPE_UNRECOGNIZED } from "./utils.mjs";
46
39
  import { toSingleLine } from "./../helpers/templateLiteralTag.mjs";
47
40
  /**
48
41
  * @class Selection
@@ -57,57 +50,62 @@ var Selection = /*#__PURE__*/function () {
57
50
  *
58
51
  * @type {GridSettings}
59
52
  */
60
- this.settings = settings;
53
+ _defineProperty(this, "settings", void 0);
61
54
  /**
62
55
  * An additional object with dynamically defined properties which describes table state.
63
56
  *
64
57
  * @type {object}
65
58
  */
66
- this.tableProps = tableProps;
59
+ _defineProperty(this, "tableProps", void 0);
67
60
  /**
68
61
  * The flag which determines if the selection is in progress.
69
62
  *
70
63
  * @type {boolean}
71
64
  */
72
- this.inProgress = false;
65
+ _defineProperty(this, "inProgress", false);
73
66
  /**
74
- * The flag indicates that selection was performed by clicking the corner overlay.
67
+ * Selection data layer (handle visual coordinates).
75
68
  *
76
- * @type {boolean}
69
+ * @type {SelectionRange}
77
70
  */
78
- this.selectedByCorner = false;
71
+ _defineProperty(this, "selectedRange", new SelectionRange(function (highlight, from, to) {
72
+ return _this.tableProps.createCellRange(highlight, from, to);
73
+ }));
79
74
  /**
80
- * The collection of the selection layer levels where the whole row was selected using the row header or
81
- * the corner header.
75
+ * Visualization layer.
82
76
  *
83
- * @type {Set.<number>}
77
+ * @type {Highlight}
84
78
  */
85
- this.selectedByRowHeader = new Set();
79
+ _defineProperty(this, "highlight", void 0);
86
80
  /**
87
- * The collection of the selection layer levels where the whole column was selected using the column header or
88
- * the corner header.
81
+ * The module for modifying coordinates.
89
82
  *
90
- * @type {Set.<number>}
83
+ * @type {Transformation}
91
84
  */
92
- this.selectedByColumnHeader = new Set();
85
+ _defineProperty(this, "transformation", void 0);
93
86
  /**
94
- * Selection data layer (handle visual coordinates).
87
+ * The collection of the selection layer levels where the whole row was selected using the row header or
88
+ * the corner header.
95
89
  *
96
- * @type {SelectionRange}
90
+ * @type {Set<number>}
97
91
  */
98
- this.selectedRange = new SelectionRange(function (highlight, from, to) {
99
- return _this.tableProps.createCellRange(highlight, from, to);
100
- });
92
+ _defineProperty(this, "selectedByRowHeader", new Set());
101
93
  /**
102
- * Visualization layer.
94
+ * The collection of the selection layer levels where the whole column was selected using the column header or
95
+ * the corner header.
103
96
  *
104
- * @type {Highlight}
97
+ * @type {Set<number>}
105
98
  */
99
+ _defineProperty(this, "selectedByColumnHeader", new Set());
100
+ this.settings = settings;
101
+ this.tableProps = tableProps;
106
102
  this.highlight = new Highlight({
107
103
  headerClassName: settings.currentHeaderClassName,
108
104
  activeHeaderClassName: settings.activeHeaderClassName,
109
105
  rowClassName: settings.currentRowClassName,
110
106
  columnClassName: settings.currentColClassName,
107
+ rowIndexMapper: this.tableProps.rowIndexMapper,
108
+ columnIndexMapper: this.tableProps.columnIndexMapper,
111
109
  disabledCellSelection: function disabledCellSelection(row, column) {
112
110
  return _this.tableProps.isDisabledCellSelection(row, column);
113
111
  },
@@ -128,25 +126,22 @@ var Selection = /*#__PURE__*/function () {
128
126
  },
129
127
  createCellRange: function createCellRange(highlight, from, to) {
130
128
  return _this.tableProps.createCellRange(highlight, from, to);
131
- },
132
- rowIndexMapper: function rowIndexMapper() {
133
- return _this.tableProps.rowIndexMapper();
134
- },
135
- columnIndexMapper: function columnIndexMapper() {
136
- return _this.tableProps.columnIndexMapper();
137
129
  }
138
130
  });
139
- /**
140
- * The module for modifying coordinates.
141
- *
142
- * @type {Transformation}
143
- */
144
131
  this.transformation = new Transformation(this.selectedRange, {
145
- countRows: function countRows() {
146
- return _this.tableProps.countRowsTranslated();
132
+ rowIndexMapper: this.tableProps.rowIndexMapper,
133
+ columnIndexMapper: this.tableProps.columnIndexMapper,
134
+ countRenderableRows: function countRenderableRows() {
135
+ return _this.tableProps.countRenderableRows();
136
+ },
137
+ countRenderableColumns: function countRenderableColumns() {
138
+ return _this.tableProps.countRenderableColumns();
139
+ },
140
+ countRowHeaders: function countRowHeaders() {
141
+ return _this.tableProps.countRowHeaders();
147
142
  },
148
- countCols: function countCols() {
149
- return _this.tableProps.countColsTranslated();
143
+ countColHeaders: function countColHeaders() {
144
+ return _this.tableProps.countColHeaders();
150
145
  },
151
146
  visualToRenderableCoords: function visualToRenderableCoords(coords) {
152
147
  return _this.tableProps.visualToRenderableCoords(coords);
@@ -157,6 +152,9 @@ var Selection = /*#__PURE__*/function () {
157
152
  createCellCoords: function createCellCoords(row, column) {
158
153
  return _this.tableProps.createCellCoords(row, column);
159
154
  },
155
+ navigableHeaders: function navigableHeaders() {
156
+ return settings.navigableHeaders;
157
+ },
160
158
  fixedRowsBottom: function fixedRowsBottom() {
161
159
  return settings.fixedRowsBottom;
162
160
  },
@@ -223,7 +221,7 @@ var Selection = /*#__PURE__*/function () {
223
221
  }
224
222
 
225
223
  /**
226
- * Indicate that selection process began. It sets internaly `.inProgress` property to `true`.
224
+ * Indicate that selection process began. It sets internally `.inProgress` property to `true`.
227
225
  */
228
226
  }, {
229
227
  key: "begin",
@@ -232,7 +230,7 @@ var Selection = /*#__PURE__*/function () {
232
230
  }
233
231
 
234
232
  /**
235
- * Indicate that selection process finished. It sets internaly `.inProgress` property to `false`.
233
+ * Indicate that selection process finished. It sets internally `.inProgress` property to `false`.
236
234
  */
237
235
  }, {
238
236
  key: "finish",
@@ -261,35 +259,27 @@ var Selection = /*#__PURE__*/function () {
261
259
  * the default trigger will be used.
262
260
  * @param {boolean} [fragment=false] If `true`, the selection will be treated as a partial selection where the
263
261
  * `setRangeEnd` method won't be called on every `setRangeStart` call.
262
+ * @param {CellCoords} [highlightCoords] If set, allows changing the coordinates of the highlight/focus cell.
264
263
  */
265
264
  }, {
266
265
  key: "setRangeStart",
267
266
  value: function setRangeStart(coords, multipleSelection) {
268
267
  var fragment = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
268
+ var highlightCoords = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : coords;
269
269
  var isMultipleMode = this.settings.selectionMode === 'multiple';
270
270
  var isMultipleSelection = isUndefined(multipleSelection) ? this.tableProps.getShortcutManager().isCtrlPressed() : multipleSelection;
271
- var isRowNegative = coords.row < 0;
272
- var isColumnNegative = coords.col < 0;
273
- var selectedByCorner = isRowNegative && isColumnNegative;
274
271
  // We are creating copy. We would like to modify just the start of the selection by below hook. Then original coords
275
272
  // should be handled by next methods.
276
273
  var coordsClone = coords.clone();
277
- this.selectedByCorner = selectedByCorner;
278
274
  this.runLocalHooks("beforeSetRangeStart".concat(fragment ? 'Only' : ''), coordsClone);
279
275
  if (!isMultipleMode || isMultipleMode && !isMultipleSelection && isUndefined(multipleSelection)) {
280
276
  this.selectedRange.clear();
281
277
  }
282
- this.selectedRange.add(coordsClone);
278
+ this.selectedRange.add(coordsClone).current().setHighlight(highlightCoords.clone());
283
279
  if (this.getLayerLevel() === 0) {
284
280
  this.selectedByRowHeader.clear();
285
281
  this.selectedByColumnHeader.clear();
286
282
  }
287
- if (!selectedByCorner && isColumnNegative) {
288
- this.selectedByRowHeader.add(this.getLayerLevel());
289
- }
290
- if (!selectedByCorner && isRowNegative) {
291
- this.selectedByColumnHeader.add(this.getLayerLevel());
292
- }
293
283
  if (!fragment) {
294
284
  this.setRangeEnd(coords);
295
285
  }
@@ -302,11 +292,13 @@ var Selection = /*#__PURE__*/function () {
302
292
  * @param {boolean} [multipleSelection] If `true`, selection will be worked in 'multiple' mode. This option works
303
293
  * only when 'selectionMode' is set as 'multiple'. If the argument is not defined
304
294
  * the default trigger will be used.
295
+ * @param {CellCoords} [highlightCoords] If set, allows changing the coordinates of the highlight/focus cell.
305
296
  */
306
297
  }, {
307
298
  key: "setRangeStartOnly",
308
299
  value: function setRangeStartOnly(coords, multipleSelection) {
309
- this.setRangeStart(coords, multipleSelection, true);
300
+ var highlightCoords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : coords;
301
+ this.setRangeStart(coords, multipleSelection, true, highlightCoords);
310
302
  }
311
303
 
312
304
  /**
@@ -320,21 +312,39 @@ var Selection = /*#__PURE__*/function () {
320
312
  if (this.selectedRange.isEmpty()) {
321
313
  return;
322
314
  }
323
-
324
- // We are creating copy. We would like to modify just the end of the selection by below hook. Then original coords
325
- // should be handled by next methods.
326
315
  var coordsClone = coords.clone();
316
+ var countRows = this.tableProps.countRows();
317
+ var countCols = this.tableProps.countCols();
318
+ var isSingle = this.selectedRange.current().clone().setTo(coords).isSingleHeader();
319
+
320
+ // Ignore processing the end range when the header selection starts overlapping the corner and
321
+ // the selection is not a single header highlight.
322
+ if ((countRows > 0 || countCols > 0) && (countRows === 0 && coordsClone.col < 0 && !isSingle || countCols === 0 && coordsClone.row < 0 && !isSingle)) {
323
+ return;
324
+ }
327
325
  this.runLocalHooks('beforeSetRangeEnd', coordsClone);
328
326
  this.begin();
329
327
  var cellRange = this.selectedRange.current();
330
- if (this.settings.selectionMode !== 'single') {
331
- cellRange.setTo(this.tableProps.createCellCoords(coordsClone.row, coordsClone.col));
328
+ if (!this.settings.navigableHeaders) {
329
+ cellRange.highlight.normalize();
330
+ }
331
+ if (this.settings.selectionMode === 'single') {
332
+ cellRange.setFrom(cellRange.highlight);
333
+ cellRange.setTo(cellRange.highlight);
334
+ } else {
335
+ cellRange.setTo(coordsClone);
332
336
  }
333
337
 
334
- // Set up current selection.
335
- this.highlight.getCell().clear();
336
- if (this.highlight.isEnabledFor(CELL_TYPE, cellRange.highlight)) {
337
- this.highlight.getCell().add(this.selectedRange.current().highlight).commit().syncWith(cellRange);
338
+ // Prevent creating "area" selection that overlaps headers.
339
+ if (countRows > 0 && countCols > 0) {
340
+ if (!this.settings.navigableHeaders || this.settings.navigableHeaders && !cellRange.isSingleHeader()) {
341
+ cellRange.to.normalize();
342
+ }
343
+ }
344
+ var focusHighlight = this.highlight.getFocus();
345
+ focusHighlight.clear();
346
+ if (this.highlight.isEnabledFor(FOCUS_TYPE, cellRange.highlight)) {
347
+ focusHighlight.add(this.selectedRange.current().highlight).commit().syncWith(cellRange);
338
348
  }
339
349
  var layerLevel = this.getLayerLevel();
340
350
 
@@ -344,73 +354,96 @@ var Selection = /*#__PURE__*/function () {
344
354
  arrayEach(this.highlight.getAreas(), function (highlight) {
345
355
  return void highlight.clear();
346
356
  });
347
- arrayEach(this.highlight.getHeaders(), function (highlight) {
357
+ arrayEach(this.highlight.getLayeredAreas(), function (highlight) {
358
+ return void highlight.clear();
359
+ });
360
+ arrayEach(this.highlight.getRowHeaders(), function (highlight) {
361
+ return void highlight.clear();
362
+ });
363
+ arrayEach(this.highlight.getColumnHeaders(), function (highlight) {
364
+ return void highlight.clear();
365
+ });
366
+ arrayEach(this.highlight.getActiveRowHeaders(), function (highlight) {
367
+ return void highlight.clear();
368
+ });
369
+ arrayEach(this.highlight.getActiveColumnHeaders(), function (highlight) {
370
+ return void highlight.clear();
371
+ });
372
+ arrayEach(this.highlight.getActiveCornerHeaders(), function (highlight) {
348
373
  return void highlight.clear();
349
374
  });
350
- arrayEach(this.highlight.getActiveHeaders(), function (highlight) {
375
+ arrayEach(this.highlight.getRowHighlights(), function (highlight) {
376
+ return void highlight.clear();
377
+ });
378
+ arrayEach(this.highlight.getColumnHighlights(), function (highlight) {
351
379
  return void highlight.clear();
352
380
  });
353
381
  }
354
382
  this.highlight.useLayerLevel(layerLevel);
355
- var areaHighlight = this.highlight.createOrGetArea();
356
- var headerHighlight = this.highlight.createOrGetHeader();
357
- var activeHeaderHighlight = this.highlight.createOrGetActiveHeader();
383
+ var areaHighlight = this.highlight.createArea();
384
+ var layeredAreaHighlight = this.highlight.createLayeredArea();
385
+ var rowHeaderHighlight = this.highlight.createRowHeader();
386
+ var columnHeaderHighlight = this.highlight.createColumnHeader();
387
+ var activeRowHeaderHighlight = this.highlight.createActiveRowHeader();
388
+ var activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();
389
+ var activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();
390
+ var rowHighlight = this.highlight.createRowHighlight();
391
+ var columnHighlight = this.highlight.createColumnHighlight();
358
392
  areaHighlight.clear();
359
- headerHighlight.clear();
360
- activeHeaderHighlight.clear();
393
+ layeredAreaHighlight.clear();
394
+ rowHeaderHighlight.clear();
395
+ columnHeaderHighlight.clear();
396
+ activeRowHeaderHighlight.clear();
397
+ activeColumnHeaderHighlight.clear();
398
+ activeCornerHeaderHighlight.clear();
399
+ rowHighlight.clear();
400
+ columnHighlight.clear();
361
401
  if (this.highlight.isEnabledFor(AREA_TYPE, cellRange.highlight) && (this.isMultiple() || layerLevel >= 1)) {
362
402
  areaHighlight.add(cellRange.from).add(cellRange.to).commit();
403
+ layeredAreaHighlight.add(cellRange.from).add(cellRange.to).commit();
363
404
  if (layerLevel === 1) {
364
405
  // For single cell selection in the same layer, we do not create area selection to prevent blue background.
365
406
  // When non-consecutive selection is performed we have to add that missing area selection to the previous layer
366
407
  // based on previous coordinates. It only occurs when the previous selection wasn't select multiple cells.
367
408
  var previousRange = this.selectedRange.previous();
368
- this.highlight.useLayerLevel(layerLevel - 1).createOrGetArea().add(previousRange.from).commit()
409
+ this.highlight.useLayerLevel(layerLevel - 1);
410
+ this.highlight.createArea().add(previousRange.from).commit()
411
+ // Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).
412
+ .syncWith(previousRange);
413
+ this.highlight.createLayeredArea().add(previousRange.from).commit()
369
414
  // Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).
370
415
  .syncWith(previousRange);
371
416
  this.highlight.useLayerLevel(layerLevel);
372
417
  }
373
418
  }
374
419
  if (this.highlight.isEnabledFor(HEADER_TYPE, cellRange.highlight)) {
375
- // The header selection generally contains cell selection. In a case when all rows (or columns)
376
- // are hidden that visual coordinates are translated to renderable coordinates that do not exist.
377
- // Hence no header highlight is generated. In that case, to make a column (or a row) header
378
- // highlight, the row and column index has to point to the header (the negative value). See #7052.
379
- var areAnyRowsRendered = this.tableProps.countRowsTranslated() === 0;
380
- var areAnyColumnsRendered = this.tableProps.countColsTranslated() === 0;
381
- var headerCellRange = cellRange;
382
- if (areAnyRowsRendered || areAnyColumnsRendered) {
383
- headerCellRange = cellRange.clone();
384
- }
385
- if (areAnyRowsRendered) {
386
- headerCellRange.from.row = -1;
387
- }
388
- if (areAnyColumnsRendered) {
389
- headerCellRange.from.col = -1;
390
- }
391
- if (this.settings.selectionMode === 'single') {
392
- if (this.isSelectedByAnyHeader()) {
393
- headerCellRange.from.normalize();
420
+ if (!cellRange.isSingleHeader()) {
421
+ var rowCoordsFrom = this.tableProps.createCellCoords(Math.max(cellRange.from.row, 0), -1);
422
+ var rowCoordsTo = this.tableProps.createCellCoords(cellRange.to.row, -1);
423
+ var columnCoordsFrom = this.tableProps.createCellCoords(-1, Math.max(cellRange.from.col, 0));
424
+ var columnCoordsTo = this.tableProps.createCellCoords(-1, cellRange.to.col);
425
+ if (this.settings.selectionMode === 'single') {
426
+ rowHeaderHighlight.add(rowCoordsFrom).commit();
427
+ columnHeaderHighlight.add(columnCoordsFrom).commit();
428
+ rowHighlight.add(rowCoordsFrom).commit();
429
+ columnHighlight.add(columnCoordsFrom).commit();
430
+ } else {
431
+ rowHeaderHighlight.add(rowCoordsFrom).add(rowCoordsTo).commit();
432
+ columnHeaderHighlight.add(columnCoordsFrom).add(columnCoordsTo).commit();
433
+ rowHighlight.add(rowCoordsFrom).add(rowCoordsTo).commit();
434
+ columnHighlight.add(columnCoordsFrom).add(columnCoordsTo).commit();
394
435
  }
395
- headerHighlight.add(headerCellRange.from).commit();
396
- } else {
397
- headerHighlight.add(headerCellRange.from).add(headerCellRange.to).commit();
398
436
  }
399
- if (this.isEntireRowSelected()) {
400
- var isRowSelected = this.tableProps.countCols() === cellRange.getWidth();
401
-
402
- // Make sure that the whole row is selected (in case where selectionMode is set to 'single')
403
- if (isRowSelected) {
404
- activeHeaderHighlight.add(this.tableProps.createCellCoords(cellRange.from.row, -1)).add(this.tableProps.createCellCoords(cellRange.to.row, -1)).commit();
405
- }
437
+ var highlightRowHeaders = this.isEntireRowSelected() && (countCols > 0 && countCols === cellRange.getWidth() || countCols === 0 && (this.isSelectedByRowHeader() || this.isSelectedByCorner()));
438
+ var highlightColumnHeaders = this.isEntireColumnSelected() && (countRows > 0 && countRows === cellRange.getHeight() || countRows === 0 && (this.isSelectedByColumnHeader() || this.isSelectedByCorner()));
439
+ if (highlightRowHeaders) {
440
+ 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();
406
441
  }
407
- if (this.isEntireColumnSelected()) {
408
- var isColumnSelected = this.tableProps.countRows() === cellRange.getHeight();
409
-
410
- // Make sure that the whole column is selected (in case where selectionMode is set to 'single')
411
- if (isColumnSelected) {
412
- activeHeaderHighlight.add(this.tableProps.createCellCoords(-1, cellRange.from.col)).add(this.tableProps.createCellCoords(-1, cellRange.to.col)).commit();
413
- }
442
+ if (highlightColumnHeaders) {
443
+ 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();
444
+ }
445
+ if (highlightRowHeaders && highlightColumnHeaders) {
446
+ activeCornerHeaderHighlight.add(this.tableProps.createCellCoords(-this.tableProps.countColHeaders(), -this.tableProps.countRowHeaders())).add(this.tableProps.createCellCoords(-1, -1)).commit();
414
447
  }
415
448
  }
416
449
  this.runLocalHooks('afterSetRangeEnd', coords);
@@ -435,14 +468,14 @@ var Selection = /*#__PURE__*/function () {
435
468
  *
436
469
  * @param {number} rowDelta Rows number to move, value can be passed as negative number.
437
470
  * @param {number} colDelta Columns number to move, value can be passed as negative number.
438
- * @param {boolean} [force=false] If `true` the new rows/columns will be created if necessary. Otherwise, row/column will
439
- * be created according to `minSpareRows/minSpareCols` settings of Handsontable.
471
+ * @param {boolean} [createMissingRecords=false] If `true` the new rows/columns will be created if necessary.
472
+ * Otherwise, row/column will be created according to `minSpareRows/minSpareCols` settings of Handsontable.
440
473
  */
441
474
  }, {
442
475
  key: "transformStart",
443
476
  value: function transformStart(rowDelta, colDelta) {
444
- var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
445
- this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta, force));
477
+ var createMissingRecords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
478
+ this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta, createMissingRecords));
446
479
  }
447
480
 
448
481
  /**
@@ -491,7 +524,7 @@ var Selection = /*#__PURE__*/function () {
491
524
  key: "isSelectedByRowHeader",
492
525
  value: function isSelectedByRowHeader() {
493
526
  var layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
494
- return !this.isSelectedByCorner(layerLevel) && this.isEntireRowSelected(layerLevel);
527
+ return !this.isSelectedByCorner(layerLevel) && (layerLevel === -1 ? this.selectedByRowHeader.size > 0 : this.selectedByRowHeader.has(layerLevel));
495
528
  }
496
529
 
497
530
  /**
@@ -504,8 +537,22 @@ var Selection = /*#__PURE__*/function () {
504
537
  }, {
505
538
  key: "isEntireRowSelected",
506
539
  value: function isEntireRowSelected() {
540
+ var _this2 = this;
507
541
  var layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
508
- return layerLevel === -1 ? this.selectedByRowHeader.size > 0 : this.selectedByRowHeader.has(layerLevel);
542
+ var tester = function tester(range) {
543
+ var _range$getOuterTopSta = range.getOuterTopStartCorner(),
544
+ col = _range$getOuterTopSta.col;
545
+ var rowHeaders = _this2.tableProps.countRowHeaders();
546
+ var countCols = _this2.tableProps.countCols();
547
+ return (rowHeaders > 0 && col < 0 || rowHeaders === 0) && range.getWidth() === countCols;
548
+ };
549
+ if (layerLevel === -1) {
550
+ return Array.from(this.selectedRange).some(function (range) {
551
+ return tester(range);
552
+ });
553
+ }
554
+ var range = this.selectedRange.peekByIndex(layerLevel);
555
+ return range ? tester(range) : false;
509
556
  }
510
557
 
511
558
  /**
@@ -520,7 +567,7 @@ var Selection = /*#__PURE__*/function () {
520
567
  key: "isSelectedByColumnHeader",
521
568
  value: function isSelectedByColumnHeader() {
522
569
  var layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
523
- return !this.isSelectedByCorner() && this.isEntireColumnSelected(layerLevel);
570
+ return !this.isSelectedByCorner() && (layerLevel === -1 ? this.selectedByColumnHeader.size > 0 : this.selectedByColumnHeader.has(layerLevel));
524
571
  }
525
572
 
526
573
  /**
@@ -533,8 +580,22 @@ var Selection = /*#__PURE__*/function () {
533
580
  }, {
534
581
  key: "isEntireColumnSelected",
535
582
  value: function isEntireColumnSelected() {
583
+ var _this3 = this;
536
584
  var layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
537
- return layerLevel === -1 ? this.selectedByColumnHeader.size > 0 : this.selectedByColumnHeader.has(layerLevel);
585
+ var tester = function tester(range) {
586
+ var _range$getOuterTopSta2 = range.getOuterTopStartCorner(),
587
+ row = _range$getOuterTopSta2.row;
588
+ var colHeaders = _this3.tableProps.countColHeaders();
589
+ var countRows = _this3.tableProps.countRows();
590
+ return (colHeaders > 0 && row < 0 || colHeaders === 0) && range.getHeight() === countRows;
591
+ };
592
+ if (layerLevel === -1) {
593
+ return Array.from(this.selectedRange).some(function (range) {
594
+ return tester(range);
595
+ });
596
+ }
597
+ var range = this.selectedRange.peekByIndex(layerLevel);
598
+ return range ? tester(range) : false;
538
599
  }
539
600
 
540
601
  /**
@@ -556,7 +617,7 @@ var Selection = /*#__PURE__*/function () {
556
617
  }, {
557
618
  key: "isSelectedByCorner",
558
619
  value: function isSelectedByCorner() {
559
- return this.selectedByCorner;
620
+ return this.selectedByColumnHeader.has(this.getLayerLevel()) && this.selectedByRowHeader.has(this.getLayerLevel());
560
621
  }
561
622
 
562
623
  /**
@@ -625,31 +686,49 @@ var Selection = /*#__PURE__*/function () {
625
686
  }
626
687
 
627
688
  /**
628
- * Select all cells.
689
+ * Selects all cells and headers.
629
690
  *
630
- * @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers, `false`
631
- * otherwise.
632
- * @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column headers, `false`
633
- * otherwise.
691
+ * @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers,
692
+ * `false` otherwise.
693
+ * @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column
694
+ * headers, `false` otherwise.
695
+ * @param {{row: number, col: number}} [focusPosition] The argument allows changing the cell/header
696
+ * focus position. The value takes an object with a `row` and `col` properties from -N to N, where
697
+ * negative values point to the headers and positive values point to the cell range.
634
698
  */
635
699
  }, {
636
700
  key: "selectAll",
637
701
  value: function selectAll() {
638
702
  var includeRowHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
639
703
  var includeColumnHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
704
+ var focusPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
705
+ row: this.tableProps.countColHeaders() > 0 ? -this.tableProps.countColHeaders() : 0,
706
+ col: this.tableProps.countRowHeaders() > 0 ? -this.tableProps.countRowHeaders() : 0
707
+ };
640
708
  var nrOfRows = this.tableProps.countRows();
641
709
  var nrOfColumns = this.tableProps.countCols();
710
+ var countRowHeaders = this.tableProps.countRowHeaders();
711
+ var countColHeaders = this.tableProps.countColHeaders();
712
+ var rowFrom = includeRowHeaders ? -countColHeaders : 0;
713
+ var columnFrom = includeColumnHeaders ? -countRowHeaders : 0;
642
714
 
643
715
  // We can't select cells when there is no data.
644
- if (!includeRowHeaders && !includeColumnHeaders && (nrOfRows === 0 || nrOfColumns === 0)) {
716
+ if (rowFrom === 0 && columnFrom === 0 && (nrOfRows === 0 || nrOfColumns === 0)) {
645
717
  return;
646
718
  }
647
- var startCoords = this.tableProps.createCellCoords(includeColumnHeaders ? -1 : 0, includeRowHeaders ? -1 : 0);
719
+ var highlightRow = Number.isInteger(focusPosition.row) ? focusPosition.row : 0;
720
+ var highlightColumn = Number.isInteger(focusPosition.col) ? focusPosition.col : 0;
721
+ var startCoords = this.tableProps.createCellCoords(rowFrom, columnFrom);
722
+ var highlight = this.tableProps.createCellCoords(clamp(highlightRow, rowFrom, nrOfRows - 1), clamp(highlightColumn, columnFrom, nrOfColumns - 1));
648
723
  var endCoords = this.tableProps.createCellCoords(nrOfRows - 1, nrOfColumns - 1);
649
724
  this.clear();
650
- this.setRangeStartOnly(startCoords);
651
- this.selectedByRowHeader.add(this.getLayerLevel());
652
- this.selectedByColumnHeader.add(this.getLayerLevel());
725
+ this.setRangeStartOnly(startCoords, void 0, highlight);
726
+ if (columnFrom < 0) {
727
+ this.selectedByRowHeader.add(this.getLayerLevel());
728
+ }
729
+ if (rowFrom < 0) {
730
+ this.selectedByColumnHeader.add(this.getLayerLevel());
731
+ }
653
732
  this.setRangeEnd(endCoords);
654
733
  this.finish();
655
734
  }
@@ -666,7 +745,7 @@ var Selection = /*#__PURE__*/function () {
666
745
  }, {
667
746
  key: "selectCells",
668
747
  value: function selectCells(selectionRanges) {
669
- var _this2 = this;
748
+ var _this4 = this;
670
749
  var selectionType = detectSelectionType(selectionRanges);
671
750
  if (selectionType === SELECTION_TYPE_EMPTY) {
672
751
  return false;
@@ -675,36 +754,33 @@ var Selection = /*#__PURE__*/function () {
675
754
  }
676
755
  var selectionSchemaNormalizer = normalizeSelectionFactory(selectionType, {
677
756
  propToCol: function propToCol(prop) {
678
- return _this2.tableProps.propToCol(prop);
757
+ return _this4.tableProps.propToCol(prop);
679
758
  },
680
759
  keepDirection: true
681
760
  });
682
- var nrOfRows = this.tableProps.countRows();
683
- var nrOfColumns = this.tableProps.countCols();
761
+ var navigableHeaders = this.settings.navigableHeaders;
762
+ var tableParams = {
763
+ countRows: this.tableProps.countRows(),
764
+ countCols: this.tableProps.countCols(),
765
+ countRowHeaders: navigableHeaders ? this.tableProps.countRowHeaders() : 0,
766
+ countColHeaders: navigableHeaders ? this.tableProps.countColHeaders() : 0
767
+ };
684
768
 
685
769
  // Check if every layer of the coordinates are valid.
686
770
  var isValid = !selectionRanges.some(function (selection) {
687
- var _selectionSchemaNorma = selectionSchemaNormalizer(selection),
688
- _selectionSchemaNorma2 = _slicedToArray(_selectionSchemaNorma, 4),
689
- rowStart = _selectionSchemaNorma2[0],
690
- columnStart = _selectionSchemaNorma2[1],
691
- rowEnd = _selectionSchemaNorma2[2],
692
- columnEnd = _selectionSchemaNorma2[3];
693
- var _isValid = isValidCoord(rowStart, nrOfRows) && isValidCoord(columnStart, nrOfColumns) && isValidCoord(rowEnd, nrOfRows) && isValidCoord(columnEnd, nrOfColumns);
694
- return !_isValid;
771
+ var cellRange = selectionSchemaNormalizer(selection);
772
+ var rangeValidity = cellRange.isValid(tableParams);
773
+ return !(rangeValidity && !cellRange.containsHeaders() || rangeValidity && cellRange.containsHeaders() && cellRange.isSingleHeader());
695
774
  });
696
775
  if (isValid) {
697
776
  this.clear();
698
777
  arrayEach(selectionRanges, function (selection) {
699
- var _selectionSchemaNorma3 = selectionSchemaNormalizer(selection),
700
- _selectionSchemaNorma4 = _slicedToArray(_selectionSchemaNorma3, 4),
701
- rowStart = _selectionSchemaNorma4[0],
702
- columnStart = _selectionSchemaNorma4[1],
703
- rowEnd = _selectionSchemaNorma4[2],
704
- columnEnd = _selectionSchemaNorma4[3];
705
- _this2.setRangeStartOnly(_this2.tableProps.createCellCoords(rowStart, columnStart), false);
706
- _this2.setRangeEnd(_this2.tableProps.createCellCoords(rowEnd, columnEnd));
707
- _this2.finish();
778
+ var _selectionSchemaNorma = selectionSchemaNormalizer(selection),
779
+ from = _selectionSchemaNorma.from,
780
+ to = _selectionSchemaNorma.to;
781
+ _this4.setRangeStartOnly(from.clone(), false);
782
+ _this4.setRangeEnd(to.clone());
783
+ _this4.finish();
708
784
  });
709
785
  }
710
786
  return isValid;
@@ -716,24 +792,45 @@ var Selection = /*#__PURE__*/function () {
716
792
  *
717
793
  * @param {number|string} startColumn Visual column index or column property from which the selection starts.
718
794
  * @param {number|string} [endColumn] Visual column index or column property from to the selection finishes.
719
- * @param {number} [headerLevel=-1] A row header index that triggers the column selection. The value can
720
- * take -1 to -N, where -1 means the header closest to the cells.
721
- *
795
+ * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
796
+ * The value can take visual row index from -N to N, where negative values
797
+ * point to the headers and positive values point to the cell range.
722
798
  * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
723
799
  */
724
800
  }, {
725
801
  key: "selectColumns",
726
802
  value: function selectColumns(startColumn) {
727
803
  var endColumn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startColumn;
728
- var headerLevel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;
804
+ var focusPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
729
805
  var start = typeof startColumn === 'string' ? this.tableProps.propToCol(startColumn) : startColumn;
730
806
  var end = typeof endColumn === 'string' ? this.tableProps.propToCol(endColumn) : endColumn;
731
- var nrOfColumns = this.tableProps.countCols();
732
- var nrOfRows = this.tableProps.countRows();
733
- var isValid = isValidCoord(start, nrOfColumns) && isValidCoord(end, nrOfColumns);
807
+ var countRows = this.tableProps.countRows();
808
+ var countCols = this.tableProps.countCols();
809
+ var countColHeaders = this.tableProps.countColHeaders();
810
+ var columnHeaderLastIndex = countColHeaders === 0 ? 0 : -countColHeaders;
811
+ var fromCoords = new CellCoords(columnHeaderLastIndex, start);
812
+ var toCoords = new CellCoords(countRows - 1, end);
813
+ var isValid = new CellRange(fromCoords, fromCoords, toCoords).isValid({
814
+ countRows: countRows,
815
+ countCols: countCols,
816
+ countRowHeaders: 0,
817
+ countColHeaders: countColHeaders
818
+ });
734
819
  if (isValid) {
735
- this.setRangeStartOnly(this.tableProps.createCellCoords(headerLevel, start));
736
- this.setRangeEnd(this.tableProps.createCellCoords(nrOfRows - 1, end));
820
+ var fromRow = countColHeaders === 0 ? 0 : clamp(focusPosition, columnHeaderLastIndex, -1);
821
+ var toRow = countRows - 1;
822
+ var from = this.tableProps.createCellCoords(fromRow, start);
823
+ var to = this.tableProps.createCellCoords(toRow, end);
824
+ var highlight = this.tableProps.createCellCoords(clamp(focusPosition, columnHeaderLastIndex, countRows - 1), start);
825
+ this.runLocalHooks('beforeSelectColumns', from, to, highlight);
826
+
827
+ // disallow modifying row axis for that hooks
828
+ from.row = fromRow;
829
+ to.row = toRow;
830
+ this.setRangeStartOnly(from, void 0, highlight);
831
+ this.selectedByColumnHeader.add(this.getLayerLevel());
832
+ this.setRangeEnd(to);
833
+ this.runLocalHooks('afterSelectColumns', from, to, highlight);
737
834
  this.finish();
738
835
  }
739
836
  return isValid;
@@ -744,22 +841,43 @@ var Selection = /*#__PURE__*/function () {
744
841
  *
745
842
  * @param {number} startRow Visual row index from which the selection starts.
746
843
  * @param {number} [endRow] Visual row index from to the selection finishes.
747
- * @param {number} [headerLevel=-1] A column header index that triggers the row selection.
748
- * The value can take -1 to -N, where -1 means the header
749
- * closest to the cells.
844
+ * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
845
+ * The value can take visual column index from -N to N, where negative values
846
+ * point to the headers and positive values point to the cell range.
750
847
  * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
751
848
  */
752
849
  }, {
753
850
  key: "selectRows",
754
851
  value: function selectRows(startRow) {
755
852
  var endRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startRow;
756
- var headerLevel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;
757
- var nrOfRows = this.tableProps.countRows();
758
- var nrOfColumns = this.tableProps.countCols();
759
- var isValid = isValidCoord(startRow, nrOfRows) && isValidCoord(endRow, nrOfRows);
853
+ var focusPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
854
+ var countRows = this.tableProps.countRows();
855
+ var countCols = this.tableProps.countCols();
856
+ var countRowHeaders = this.tableProps.countRowHeaders();
857
+ var rowHeaderLastIndex = countRowHeaders === 0 ? 0 : -countRowHeaders;
858
+ var fromCoords = new CellCoords(startRow, rowHeaderLastIndex);
859
+ var toCoords = new CellCoords(endRow, countCols - 1);
860
+ var isValid = new CellRange(fromCoords, fromCoords, toCoords).isValid({
861
+ countRows: countRows,
862
+ countCols: countCols,
863
+ countRowHeaders: countRowHeaders,
864
+ countColHeaders: 0
865
+ });
760
866
  if (isValid) {
761
- this.setRangeStartOnly(this.tableProps.createCellCoords(startRow, headerLevel));
762
- this.setRangeEnd(this.tableProps.createCellCoords(endRow, nrOfColumns - 1));
867
+ var fromColumn = countRowHeaders === 0 ? 0 : clamp(focusPosition, rowHeaderLastIndex, -1);
868
+ var toColumn = countCols - 1;
869
+ var from = this.tableProps.createCellCoords(startRow, fromColumn);
870
+ var to = this.tableProps.createCellCoords(endRow, toColumn);
871
+ var highlight = this.tableProps.createCellCoords(startRow, clamp(focusPosition, rowHeaderLastIndex, countCols - 1));
872
+ this.runLocalHooks('beforeSelectRows', from, to, highlight);
873
+
874
+ // disallow modifying column axis for that hooks
875
+ from.col = fromColumn;
876
+ to.col = toColumn;
877
+ this.setRangeStartOnly(from, void 0, highlight);
878
+ this.selectedByRowHeader.add(this.getLayerLevel());
879
+ this.setRangeEnd(to);
880
+ this.runLocalHooks('afterSelectRows', from, to, highlight);
763
881
  this.finish();
764
882
  }
765
883
  return isValid;
@@ -778,19 +896,31 @@ var Selection = /*#__PURE__*/function () {
778
896
  if (!this.isSelected()) {
779
897
  return;
780
898
  }
781
- var cellHighlight = this.highlight.getCell();
899
+ var focusHighlight = this.highlight.getFocus();
782
900
  var currentLayer = this.getLayerLevel();
783
- cellHighlight.commit().syncWith(this.selectedRange.current());
901
+ focusHighlight.commit().syncWith(this.selectedRange.current());
784
902
 
785
903
  // Rewriting rendered ranges going through all layers.
786
904
  for (var layerLevel = 0; layerLevel < this.selectedRange.size(); layerLevel += 1) {
787
905
  this.highlight.useLayerLevel(layerLevel);
788
- var areaHighlight = this.highlight.createOrGetArea();
789
- var headerHighlight = this.highlight.createOrGetHeader();
790
- var activeHeaderHighlight = this.highlight.createOrGetActiveHeader();
906
+ var areaHighlight = this.highlight.createArea();
907
+ var areaLayeredHighlight = this.highlight.createLayeredArea();
908
+ var rowHeaderHighlight = this.highlight.createRowHeader();
909
+ var columnHeaderHighlight = this.highlight.createColumnHeader();
910
+ var activeRowHeaderHighlight = this.highlight.createActiveRowHeader();
911
+ var activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();
912
+ var activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();
913
+ var rowHighlight = this.highlight.createRowHighlight();
914
+ var columnHighlight = this.highlight.createColumnHighlight();
791
915
  areaHighlight.commit();
792
- headerHighlight.commit();
793
- activeHeaderHighlight.commit();
916
+ areaLayeredHighlight.commit();
917
+ rowHeaderHighlight.commit();
918
+ columnHeaderHighlight.commit();
919
+ activeRowHeaderHighlight.commit();
920
+ activeColumnHeaderHighlight.commit();
921
+ activeCornerHeaderHighlight.commit();
922
+ rowHighlight.commit();
923
+ columnHighlight.commit();
794
924
  }
795
925
 
796
926
  // Reverting starting layer for the Highlight.