handsontable 0.0.0-next-08765b9-20230714 → 0.0.0-next-6b996e8-20230714

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 (296) 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 +290 -173
  46. package/core.mjs +290 -173
  47. package/dataMap/metaManager/metaSchema.js +0 -41
  48. package/dataMap/metaManager/metaSchema.mjs +0 -41
  49. package/dist/handsontable.css +3 -19
  50. package/dist/handsontable.full.css +3 -19
  51. package/dist/handsontable.full.js +5369 -8671
  52. package/dist/handsontable.full.min.css +3 -3
  53. package/dist/handsontable.full.min.js +25 -25
  54. package/dist/handsontable.js +8117 -11419
  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/textEditor/textEditor.js +11 -3
  60. package/editors/textEditor/textEditor.mjs +12 -4
  61. package/helpers/mixed.js +1 -1
  62. package/helpers/mixed.mjs +1 -1
  63. package/helpers/number.d.ts +0 -1
  64. package/helpers/number.js +0 -18
  65. package/helpers/number.mjs +0 -17
  66. package/package.json +1 -1
  67. package/pluginHooks.d.ts +1 -7
  68. package/pluginHooks.js +1 -106
  69. package/pluginHooks.mjs +1 -106
  70. package/plugins/collapsibleColumns/collapsibleColumns.js +4 -58
  71. package/plugins/collapsibleColumns/collapsibleColumns.mjs +4 -58
  72. package/plugins/columnSorting/columnSorting.js +0 -38
  73. package/plugins/columnSorting/columnSorting.mjs +2 -38
  74. package/plugins/columnSorting/index.js +1 -3
  75. package/plugins/columnSorting/index.mjs +1 -1
  76. package/plugins/comments/commentEditor.js +0 -1
  77. package/plugins/comments/commentEditor.mjs +0 -1
  78. package/plugins/comments/comments.js +189 -251
  79. package/plugins/comments/comments.mjs +190 -250
  80. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  81. package/plugins/contextMenu/contextMenu.js +30 -72
  82. package/plugins/contextMenu/contextMenu.mjs +31 -73
  83. package/plugins/contextMenu/predefinedItems/alignment.js +0 -7
  84. package/plugins/contextMenu/predefinedItems/alignment.mjs +0 -7
  85. package/plugins/contextMenu/predefinedItems/clearColumn.js +3 -5
  86. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +3 -5
  87. package/plugins/contextMenu/predefinedItems/columnLeft.js +3 -5
  88. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +3 -5
  89. package/plugins/contextMenu/predefinedItems/columnRight.js +3 -5
  90. package/plugins/contextMenu/predefinedItems/columnRight.mjs +3 -5
  91. package/plugins/contextMenu/predefinedItems/readOnly.js +0 -7
  92. package/plugins/contextMenu/predefinedItems/readOnly.mjs +0 -7
  93. package/plugins/contextMenu/predefinedItems/removeColumn.js +5 -7
  94. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +3 -5
  95. package/plugins/contextMenu/predefinedItems/removeRow.js +5 -7
  96. package/plugins/contextMenu/predefinedItems/removeRow.mjs +3 -5
  97. package/plugins/contextMenu/predefinedItems/rowAbove.js +3 -5
  98. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +3 -5
  99. package/plugins/contextMenu/predefinedItems/rowBelow.js +3 -5
  100. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +3 -5
  101. package/plugins/contextMenu/utils.js +16 -28
  102. package/plugins/contextMenu/utils.mjs +15 -27
  103. package/plugins/copyPaste/contextMenuItem/copy.js +0 -7
  104. package/plugins/copyPaste/contextMenuItem/copy.mjs +0 -7
  105. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +1 -9
  106. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +1 -9
  107. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +1 -9
  108. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +1 -9
  109. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +1 -9
  110. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +1 -9
  111. package/plugins/copyPaste/contextMenuItem/cut.js +0 -7
  112. package/plugins/copyPaste/contextMenuItem/cut.mjs +0 -7
  113. package/plugins/copyPaste/copyPaste.js +2 -6
  114. package/plugins/copyPaste/copyPaste.mjs +2 -6
  115. package/plugins/customBorders/customBorders.js +20 -23
  116. package/plugins/customBorders/customBorders.mjs +21 -24
  117. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  118. package/plugins/dropdownMenu/dropdownMenu.js +32 -89
  119. package/plugins/dropdownMenu/dropdownMenu.mjs +32 -89
  120. package/plugins/filters/filters.js +14 -31
  121. package/plugins/filters/filters.mjs +13 -30
  122. package/plugins/mergeCells/mergeCells.js +16 -5
  123. package/plugins/mergeCells/mergeCells.mjs +16 -5
  124. package/plugins/multiColumnSorting/multiColumnSorting.js +2 -37
  125. package/plugins/multiColumnSorting/multiColumnSorting.mjs +2 -37
  126. package/plugins/nestedHeaders/nestedHeaders.js +8 -121
  127. package/plugins/nestedHeaders/nestedHeaders.mjs +8 -121
  128. package/plugins/nestedHeaders/stateManager/index.js +0 -37
  129. package/plugins/nestedHeaders/stateManager/index.mjs +0 -37
  130. package/plugins/nestedRows/nestedRows.js +0 -41
  131. package/plugins/nestedRows/nestedRows.mjs +0 -41
  132. package/renderers/checkboxRenderer/checkboxRenderer.js +2 -2
  133. package/renderers/checkboxRenderer/checkboxRenderer.mjs +1 -1
  134. package/selection/highlight/constants.js +15 -0
  135. package/selection/highlight/constants.mjs +6 -0
  136. package/selection/highlight/highlight.js +71 -256
  137. package/selection/highlight/highlight.mjs +71 -250
  138. package/selection/highlight/types/activeHeader.js +8 -10
  139. package/selection/highlight/types/activeHeader.mjs +8 -10
  140. package/selection/highlight/types/area.js +18 -6
  141. package/selection/highlight/types/area.mjs +18 -6
  142. package/selection/highlight/types/{focus.js → cell.js} +7 -5
  143. package/selection/highlight/types/{focus.mjs → cell.mjs} +7 -5
  144. package/selection/highlight/types/customSelection.js +9 -7
  145. package/selection/highlight/types/customSelection.mjs +9 -7
  146. package/selection/highlight/types/fill.js +7 -5
  147. package/selection/highlight/types/fill.mjs +7 -5
  148. package/selection/highlight/types/header.js +18 -9
  149. package/selection/highlight/types/header.mjs +18 -9
  150. package/selection/highlight/types/index.js +35 -0
  151. package/selection/highlight/types/index.mjs +31 -0
  152. package/selection/highlight/visualSelection.js +27 -31
  153. package/selection/highlight/visualSelection.mjs +27 -31
  154. package/selection/index.js +7 -4
  155. package/selection/index.mjs +3 -2
  156. package/selection/mouseEventHandler.js +1 -1
  157. package/selection/mouseEventHandler.mjs +1 -1
  158. package/selection/range.js +8 -8
  159. package/selection/range.mjs +8 -8
  160. package/selection/selection.js +154 -290
  161. package/selection/selection.mjs +153 -287
  162. package/selection/transformation.js +90 -232
  163. package/selection/transformation.mjs +90 -232
  164. package/selection/utils.js +21 -15
  165. package/selection/utils.mjs +21 -16
  166. package/settings.d.ts +0 -2
  167. package/shortcuts/manager.js +0 -2
  168. package/shortcuts/manager.mjs +0 -2
  169. package/shortcuts/recorder.js +2 -2
  170. package/shortcuts/recorder.mjs +2 -2
  171. package/shortcuts/utils.js +5 -19
  172. package/shortcuts/utils.mjs +4 -18
  173. package/tableView.js +13 -67
  174. package/tableView.mjs +13 -67
  175. package/3rdparty/walkontable/src/selection/border/constants.js +0 -16
  176. package/3rdparty/walkontable/src/selection/border/constants.mjs +0 -12
  177. package/3rdparty/walkontable/src/selection/constants.js +0 -62
  178. package/3rdparty/walkontable/src/selection/constants.mjs +0 -51
  179. package/3rdparty/walkontable/src/selection/index.js +0 -26
  180. package/3rdparty/walkontable/src/selection/index.mjs +0 -5
  181. package/3rdparty/walkontable/src/selection/manager.js +0 -259
  182. package/3rdparty/walkontable/src/selection/manager.mjs +0 -254
  183. package/3rdparty/walkontable/src/selection/scanner.js +0 -270
  184. package/3rdparty/walkontable/src/selection/scanner.mjs +0 -267
  185. package/3rdparty/walkontable/src/selection/selection.js +0 -101
  186. package/3rdparty/walkontable/src/selection/selection.mjs +0 -96
  187. package/core/focusCatcher/focusDetector.js +0 -58
  188. package/core/focusCatcher/focusDetector.mjs +0 -54
  189. package/core/focusCatcher/index.js +0 -142
  190. package/core/focusCatcher/index.mjs +0 -138
  191. package/core/index.js +0 -9
  192. package/core/index.mjs +0 -1
  193. package/plugins/comments/contextMenuItem/addEditComment.js +0 -41
  194. package/plugins/comments/contextMenuItem/addEditComment.mjs +0 -35
  195. package/plugins/comments/contextMenuItem/readOnlyComment.js +0 -49
  196. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +0 -43
  197. package/plugins/comments/contextMenuItem/removeComment.js +0 -38
  198. package/plugins/comments/contextMenuItem/removeComment.mjs +0 -32
  199. package/selection/highlight/types/areaLayered.js +0 -31
  200. package/selection/highlight/types/areaLayered.mjs +0 -26
  201. package/selection/highlight/types/column.js +0 -27
  202. package/selection/highlight/types/column.mjs +0 -22
  203. package/selection/highlight/types/row.js +0 -27
  204. package/selection/highlight/types/row.mjs +0 -22
  205. package/shortcutContexts/commands/editor/closeAndSave.js +0 -12
  206. package/shortcutContexts/commands/editor/closeAndSave.mjs +0 -8
  207. package/shortcutContexts/commands/editor/closeWithoutSaving.js +0 -12
  208. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +0 -8
  209. package/shortcutContexts/commands/editor/fastOpen.js +0 -16
  210. package/shortcutContexts/commands/editor/fastOpen.mjs +0 -12
  211. package/shortcutContexts/commands/editor/index.js +0 -16
  212. package/shortcutContexts/commands/editor/index.mjs +0 -12
  213. package/shortcutContexts/commands/editor/open.js +0 -27
  214. package/shortcutContexts/commands/editor/open.mjs +0 -23
  215. package/shortcutContexts/commands/emptySelectedCells.js +0 -11
  216. package/shortcutContexts/commands/emptySelectedCells.mjs +0 -7
  217. package/shortcutContexts/commands/extendCellsSelection/down.js +0 -15
  218. package/shortcutContexts/commands/extendCellsSelection/down.mjs +0 -11
  219. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +0 -21
  220. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +0 -17
  221. package/shortcutContexts/commands/extendCellsSelection/index.js +0 -26
  222. package/shortcutContexts/commands/extendCellsSelection/index.mjs +0 -22
  223. package/shortcutContexts/commands/extendCellsSelection/left.js +0 -15
  224. package/shortcutContexts/commands/extendCellsSelection/left.mjs +0 -11
  225. package/shortcutContexts/commands/extendCellsSelection/right.js +0 -15
  226. package/shortcutContexts/commands/extendCellsSelection/right.mjs +0 -11
  227. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +0 -19
  228. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +0 -15
  229. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +0 -29
  230. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +0 -25
  231. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +0 -19
  232. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +0 -15
  233. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +0 -19
  234. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +0 -15
  235. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +0 -29
  236. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +0 -25
  237. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +0 -29
  238. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +0 -25
  239. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +0 -29
  240. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +0 -25
  241. package/shortcutContexts/commands/extendCellsSelection/toRows.js +0 -19
  242. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +0 -15
  243. package/shortcutContexts/commands/extendCellsSelection/up.js +0 -15
  244. package/shortcutContexts/commands/extendCellsSelection/up.mjs +0 -11
  245. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +0 -21
  246. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +0 -17
  247. package/shortcutContexts/commands/index.js +0 -35
  248. package/shortcutContexts/commands/index.mjs +0 -31
  249. package/shortcutContexts/commands/moveCellSelection/down.js +0 -13
  250. package/shortcutContexts/commands/moveCellSelection/down.mjs +0 -9
  251. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +0 -31
  252. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +0 -27
  253. package/shortcutContexts/commands/moveCellSelection/index.js +0 -28
  254. package/shortcutContexts/commands/moveCellSelection/index.mjs +0 -24
  255. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +0 -12
  256. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +0 -8
  257. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +0 -12
  258. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +0 -8
  259. package/shortcutContexts/commands/moveCellSelection/left.js +0 -10
  260. package/shortcutContexts/commands/moveCellSelection/left.mjs +0 -6
  261. package/shortcutContexts/commands/moveCellSelection/right.js +0 -10
  262. package/shortcutContexts/commands/moveCellSelection/right.mjs +0 -6
  263. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +0 -17
  264. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +0 -13
  265. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +0 -18
  266. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +0 -14
  267. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +0 -14
  268. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +0 -10
  269. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +0 -17
  270. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +0 -13
  271. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +0 -19
  272. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +0 -15
  273. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +0 -21
  274. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +0 -17
  275. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +0 -17
  276. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +0 -13
  277. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +0 -19
  278. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +0 -15
  279. package/shortcutContexts/commands/moveCellSelection/up.js +0 -13
  280. package/shortcutContexts/commands/moveCellSelection/up.mjs +0 -9
  281. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +0 -31
  282. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +0 -27
  283. package/shortcutContexts/commands/populateSelectedCellsData.js +0 -29
  284. package/shortcutContexts/commands/populateSelectedCellsData.mjs +0 -25
  285. package/shortcutContexts/commands/scrollToFocusedCell.js +0 -36
  286. package/shortcutContexts/commands/scrollToFocusedCell.mjs +0 -32
  287. package/shortcutContexts/commands/selectAll.js +0 -10
  288. package/shortcutContexts/commands/selectAll.mjs +0 -6
  289. package/shortcutContexts/constants.js +0 -13
  290. package/shortcutContexts/constants.mjs +0 -8
  291. package/shortcutContexts/editor.js +0 -25
  292. package/shortcutContexts/editor.mjs +0 -21
  293. package/shortcutContexts/grid.js +0 -163
  294. package/shortcutContexts/grid.mjs +0 -159
  295. package/shortcutContexts/index.js +0 -24
  296. package/shortcutContexts/index.mjs +0 -11
@@ -2,6 +2,7 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
  exports.default = rowBelowItem;
5
+ var _utils = require("../utils");
5
6
  var C = _interopRequireWildcard(require("../../../i18n/constants"));
6
7
  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); }
7
8
  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; }
@@ -22,11 +23,8 @@ function rowBelowItem() {
22
23
  this.alter('insert_row_below', latestSelection.row, 1, 'ContextMenu.rowBelow');
23
24
  },
24
25
  disabled() {
25
- const range = this.getSelectedRangeLast();
26
- if (!range) {
27
- return true;
28
- }
29
- if (range.isSingleHeader() && range.highlight.row < 0) {
26
+ const selected = (0, _utils.getValidSelection)(this);
27
+ if (!selected) {
30
28
  return true;
31
29
  }
32
30
  if (this.selection.isSelectedByCorner()) {
@@ -1,3 +1,4 @@
1
+ import { getValidSelection } from "../utils.mjs";
1
2
  import * as C from "../../../i18n/constants.mjs";
2
3
  export const KEY = 'row_below';
3
4
 
@@ -15,11 +16,8 @@ export default function rowBelowItem() {
15
16
  this.alter('insert_row_below', latestSelection.row, 1, 'ContextMenu.rowBelow');
16
17
  },
17
18
  disabled() {
18
- const range = this.getSelectedRangeLast();
19
- if (!range) {
20
- return true;
21
- }
22
- if (range.isSingleHeader() && range.highlight.row < 0) {
19
+ const selected = getValidSelection(this);
20
+ if (!selected) {
23
21
  return true;
24
22
  }
25
23
  if (this.selection.isSelectedByCorner()) {
@@ -5,7 +5,7 @@ exports.align = align;
5
5
  exports.checkSelectionConsistency = checkSelectionConsistency;
6
6
  exports.filterSeparators = filterSeparators;
7
7
  exports.getAlignmentClasses = getAlignmentClasses;
8
- exports.getDocumentOffsetByElement = getDocumentOffsetByElement;
8
+ exports.getValidSelection = getValidSelection;
9
9
  exports.hasSubMenu = hasSubMenu;
10
10
  exports.isDisabled = isDisabled;
11
11
  exports.isItemHidden = isItemHidden;
@@ -62,6 +62,21 @@ function isSelectionDisabled(cell) {
62
62
  return (0, _element.hasClass)(cell, 'htSelectionDisabled');
63
63
  }
64
64
 
65
+ /**
66
+ * @param {Core} hot The Handsontable instance.
67
+ * @returns {Array[]|null}
68
+ */
69
+ function getValidSelection(hot) {
70
+ const selected = hot.getSelected();
71
+ if (!selected) {
72
+ return null;
73
+ }
74
+ if (selected[0] < 0) {
75
+ return null;
76
+ }
77
+ return selected;
78
+ }
79
+
65
80
  /**
66
81
  * @param {string} className The full element class name to process.
67
82
  * @param {string} alignment The slignment class name to compare with.
@@ -252,31 +267,4 @@ function filterSeparators(items) {
252
267
  result = popSeparators(result, separator);
253
268
  result = removeDuplicatedSeparators(result);
254
269
  return result;
255
- }
256
-
257
- /**
258
- * Returns document offset based on the passed element. If the document objects between element and the
259
- * base document are not the same the offset as top and left properties will be returned.
260
- *
261
- * @param {Element} elementToCheck The element to compare with Document object.
262
- * @param {Document} baseDocument The base Document object.
263
- * @returns {{ top: number, left: number }}
264
- */
265
- function getDocumentOffsetByElement(elementToCheck, baseDocument) {
266
- const offset = {
267
- top: 0,
268
- left: 0
269
- };
270
- if (baseDocument !== elementToCheck.ownerDocument) {
271
- const {
272
- frameElement
273
- } = baseDocument.defaultView;
274
- const {
275
- top,
276
- left
277
- } = frameElement.getBoundingClientRect();
278
- offset.top = top;
279
- offset.left = left;
280
- }
281
- return offset;
282
270
  }
@@ -45,6 +45,21 @@ export function isSelectionDisabled(cell) {
45
45
  return hasClass(cell, 'htSelectionDisabled');
46
46
  }
47
47
 
48
+ /**
49
+ * @param {Core} hot The Handsontable instance.
50
+ * @returns {Array[]|null}
51
+ */
52
+ export function getValidSelection(hot) {
53
+ const selected = hot.getSelected();
54
+ if (!selected) {
55
+ return null;
56
+ }
57
+ if (selected[0] < 0) {
58
+ return null;
59
+ }
60
+ return selected;
61
+ }
62
+
48
63
  /**
49
64
  * @param {string} className The full element class name to process.
50
65
  * @param {string} alignment The slignment class name to compare with.
@@ -235,31 +250,4 @@ export function filterSeparators(items) {
235
250
  result = popSeparators(result, separator);
236
251
  result = removeDuplicatedSeparators(result);
237
252
  return result;
238
- }
239
-
240
- /**
241
- * Returns document offset based on the passed element. If the document objects between element and the
242
- * base document are not the same the offset as top and left properties will be returned.
243
- *
244
- * @param {Element} elementToCheck The element to compare with Document object.
245
- * @param {Document} baseDocument The base Document object.
246
- * @returns {{ top: number, left: number }}
247
- */
248
- export function getDocumentOffsetByElement(elementToCheck, baseDocument) {
249
- const offset = {
250
- top: 0,
251
- left: 0
252
- };
253
- if (baseDocument !== elementToCheck.ownerDocument) {
254
- const {
255
- frameElement
256
- } = baseDocument.defaultView;
257
- const {
258
- top,
259
- left
260
- } = frameElement.getBoundingClientRect();
261
- offset.top = top;
262
- offset.left = left;
263
- }
264
- return offset;
265
253
  }
@@ -20,13 +20,6 @@ function copyItem(copyPastePlugin) {
20
20
  if (this.countRows() === 0 || this.countCols() === 0) {
21
21
  return true;
22
22
  }
23
- const range = this.getSelectedRangeLast();
24
- if (!range) {
25
- return true;
26
- }
27
- if (range.isSingleHeader()) {
28
- return true;
29
- }
30
23
  const selected = this.getSelected();
31
24
 
32
25
  // Disable for no selection or for non-contiguous selection.
@@ -16,13 +16,6 @@ export default function copyItem(copyPastePlugin) {
16
16
  if (this.countRows() === 0 || this.countCols() === 0) {
17
17
  return true;
18
18
  }
19
- const range = this.getSelectedRangeLast();
20
- if (!range) {
21
- return true;
22
- }
23
- if (range.isSingleHeader()) {
24
- return true;
25
- }
26
19
  const selected = this.getSelected();
27
20
 
28
21
  // Disable for no selection or for non-contiguous selection.
@@ -3,7 +3,6 @@
3
3
  exports.__esModule = true;
4
4
  exports.default = copyColumnHeadersOnlyItem;
5
5
  var _constants = require("../../../i18n/constants");
6
- var _number = require("../../../helpers/number");
7
6
  /**
8
7
  * @param {CopyPaste} copyPastePlugin The plugin instance.
9
8
  * @returns {object}
@@ -13,7 +12,7 @@ function copyColumnHeadersOnlyItem(copyPastePlugin) {
13
12
  key: 'copy_column_headers_only',
14
13
  name() {
15
14
  const selectedRange = this.getSelectedRangeLast();
16
- const nounForm = selectedRange ? (0, _number.clamp)(selectedRange.getWidth() - 1, 0, 1) : 0;
15
+ const nounForm = selectedRange ? Math.min(selectedRange.getWidth() - 1, 1) : 0;
17
16
  return this.getTranslatedPhrase(_constants.CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY, nounForm);
18
17
  },
19
18
  callback() {
@@ -23,13 +22,6 @@ function copyColumnHeadersOnlyItem(copyPastePlugin) {
23
22
  if (!this.hasColHeaders()) {
24
23
  return true;
25
24
  }
26
- const range = this.getSelectedRangeLast();
27
- if (!range) {
28
- return true;
29
- }
30
- if (range.isSingleHeader()) {
31
- return true;
32
- }
33
25
  const selected = this.getSelected();
34
26
 
35
27
  // Disable for no selection or for non-contiguous selection.
@@ -1,5 +1,4 @@
1
1
  import { CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY } from "../../../i18n/constants.mjs";
2
- import { clamp } from "../../../helpers/number.mjs";
3
2
  /**
4
3
  * @param {CopyPaste} copyPastePlugin The plugin instance.
5
4
  * @returns {object}
@@ -9,7 +8,7 @@ export default function copyColumnHeadersOnlyItem(copyPastePlugin) {
9
8
  key: 'copy_column_headers_only',
10
9
  name() {
11
10
  const selectedRange = this.getSelectedRangeLast();
12
- const nounForm = selectedRange ? clamp(selectedRange.getWidth() - 1, 0, 1) : 0;
11
+ const nounForm = selectedRange ? Math.min(selectedRange.getWidth() - 1, 1) : 0;
13
12
  return this.getTranslatedPhrase(CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY, nounForm);
14
13
  },
15
14
  callback() {
@@ -19,13 +18,6 @@ export default function copyColumnHeadersOnlyItem(copyPastePlugin) {
19
18
  if (!this.hasColHeaders()) {
20
19
  return true;
21
20
  }
22
- const range = this.getSelectedRangeLast();
23
- if (!range) {
24
- return true;
25
- }
26
- if (range.isSingleHeader()) {
27
- return true;
28
- }
29
21
  const selected = this.getSelected();
30
22
 
31
23
  // Disable for no selection or for non-contiguous selection.
@@ -3,7 +3,6 @@
3
3
  exports.__esModule = true;
4
4
  exports.default = copyWithColumnGroupHeadersItem;
5
5
  var _constants = require("../../../i18n/constants");
6
- var _number = require("../../../helpers/number");
7
6
  /**
8
7
  * @param {CopyPaste} copyPastePlugin The plugin instance.
9
8
  * @returns {object}
@@ -13,7 +12,7 @@ function copyWithColumnGroupHeadersItem(copyPastePlugin) {
13
12
  key: 'copy_with_column_group_headers',
14
13
  name() {
15
14
  const selectedRange = this.getSelectedRangeLast();
16
- const nounForm = selectedRange ? (0, _number.clamp)(selectedRange.getWidth() - 1, 0, 1) : 0;
15
+ const nounForm = selectedRange ? Math.min(selectedRange.getWidth() - 1, 1) : 0;
17
16
  return this.getTranslatedPhrase(_constants.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS, nounForm);
18
17
  },
19
18
  callback() {
@@ -23,13 +22,6 @@ function copyWithColumnGroupHeadersItem(copyPastePlugin) {
23
22
  if (!this.hasColHeaders() || !this.getSettings().nestedHeaders) {
24
23
  return true;
25
24
  }
26
- const range = this.getSelectedRangeLast();
27
- if (!range) {
28
- return true;
29
- }
30
- if (range.isSingleHeader()) {
31
- return true;
32
- }
33
25
  const selected = this.getSelected();
34
26
 
35
27
  // Disable for no selection or for non-contiguous selection.
@@ -1,5 +1,4 @@
1
1
  import { CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS } from "../../../i18n/constants.mjs";
2
- import { clamp } from "../../../helpers/number.mjs";
3
2
  /**
4
3
  * @param {CopyPaste} copyPastePlugin The plugin instance.
5
4
  * @returns {object}
@@ -9,7 +8,7 @@ export default function copyWithColumnGroupHeadersItem(copyPastePlugin) {
9
8
  key: 'copy_with_column_group_headers',
10
9
  name() {
11
10
  const selectedRange = this.getSelectedRangeLast();
12
- const nounForm = selectedRange ? clamp(selectedRange.getWidth() - 1, 0, 1) : 0;
11
+ const nounForm = selectedRange ? Math.min(selectedRange.getWidth() - 1, 1) : 0;
13
12
  return this.getTranslatedPhrase(CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS, nounForm);
14
13
  },
15
14
  callback() {
@@ -19,13 +18,6 @@ export default function copyWithColumnGroupHeadersItem(copyPastePlugin) {
19
18
  if (!this.hasColHeaders() || !this.getSettings().nestedHeaders) {
20
19
  return true;
21
20
  }
22
- const range = this.getSelectedRangeLast();
23
- if (!range) {
24
- return true;
25
- }
26
- if (range.isSingleHeader()) {
27
- return true;
28
- }
29
21
  const selected = this.getSelected();
30
22
 
31
23
  // Disable for no selection or for non-contiguous selection.
@@ -3,7 +3,6 @@
3
3
  exports.__esModule = true;
4
4
  exports.default = copyWithColumnHeadersItem;
5
5
  var _constants = require("../../../i18n/constants");
6
- var _number = require("../../../helpers/number");
7
6
  /**
8
7
  * @param {CopyPaste} copyPastePlugin The plugin instance.
9
8
  * @returns {object}
@@ -13,7 +12,7 @@ function copyWithColumnHeadersItem(copyPastePlugin) {
13
12
  key: 'copy_with_column_headers',
14
13
  name() {
15
14
  const selectedRange = this.getSelectedRangeLast();
16
- const nounForm = selectedRange ? (0, _number.clamp)(selectedRange.getWidth() - 1, 0, 1) : 0;
15
+ const nounForm = selectedRange ? Math.min(selectedRange.getWidth() - 1, 1) : 0;
17
16
  return this.getTranslatedPhrase(_constants.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS, nounForm);
18
17
  },
19
18
  callback() {
@@ -23,13 +22,6 @@ function copyWithColumnHeadersItem(copyPastePlugin) {
23
22
  if (!this.hasColHeaders()) {
24
23
  return true;
25
24
  }
26
- const range = this.getSelectedRangeLast();
27
- if (!range) {
28
- return true;
29
- }
30
- if (range.isSingleHeader()) {
31
- return true;
32
- }
33
25
  const selected = this.getSelected();
34
26
 
35
27
  // Disable for no selection or for non-contiguous selection.
@@ -1,5 +1,4 @@
1
1
  import { CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS } from "../../../i18n/constants.mjs";
2
- import { clamp } from "../../../helpers/number.mjs";
3
2
  /**
4
3
  * @param {CopyPaste} copyPastePlugin The plugin instance.
5
4
  * @returns {object}
@@ -9,7 +8,7 @@ export default function copyWithColumnHeadersItem(copyPastePlugin) {
9
8
  key: 'copy_with_column_headers',
10
9
  name() {
11
10
  const selectedRange = this.getSelectedRangeLast();
12
- const nounForm = selectedRange ? clamp(selectedRange.getWidth() - 1, 0, 1) : 0;
11
+ const nounForm = selectedRange ? Math.min(selectedRange.getWidth() - 1, 1) : 0;
13
12
  return this.getTranslatedPhrase(CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS, nounForm);
14
13
  },
15
14
  callback() {
@@ -19,13 +18,6 @@ export default function copyWithColumnHeadersItem(copyPastePlugin) {
19
18
  if (!this.hasColHeaders()) {
20
19
  return true;
21
20
  }
22
- const range = this.getSelectedRangeLast();
23
- if (!range) {
24
- return true;
25
- }
26
- if (range.isSingleHeader()) {
27
- return true;
28
- }
29
21
  const selected = this.getSelected();
30
22
 
31
23
  // Disable for no selection or for non-contiguous selection.
@@ -22,13 +22,6 @@ function cutItem(copyPastePlugin) {
22
22
  if (this.countRows() === 0 || this.countCols() === 0) {
23
23
  return true;
24
24
  }
25
- const range = this.getSelectedRangeLast();
26
- if (!range) {
27
- return true;
28
- }
29
- if (range.isSingleHeader()) {
30
- return true;
31
- }
32
25
  const selected = this.getSelected();
33
26
 
34
27
  // Disable for no selection or for non-contiquous selection.
@@ -16,13 +16,6 @@ export default function cutItem(copyPastePlugin) {
16
16
  if (this.countRows() === 0 || this.countCols() === 0) {
17
17
  return true;
18
18
  }
19
- const range = this.getSelectedRangeLast();
20
- if (!range) {
21
- return true;
22
- }
23
- if (range.isSingleHeader()) {
24
- return true;
25
- }
26
19
  const selected = this.getSelected();
27
20
 
28
21
  // Disable for no selection or for non-contiquous selection.
@@ -431,10 +431,6 @@ class CopyPaste extends _base.BasePlugin {
431
431
  if (!selectionRange) {
432
432
  return;
433
433
  }
434
- if (selectionRange.isSingleHeader()) {
435
- this.copyableRanges = [];
436
- return;
437
- }
438
434
  _classPrivateFieldGet(this, _copyableRangesFactory).setSelectedRange(selectionRange);
439
435
  const groupedRanges = new Map([['headers', null], ['cells', null]]);
440
436
  if (_classPrivateFieldGet(this, _copyMode) === 'column-headers-only') {
@@ -631,7 +627,7 @@ class CopyPaste extends _base.BasePlugin {
631
627
  * @private
632
628
  */
633
629
  onPaste(event) {
634
- if (!this.hot.isListening() || this.isEditorOpened() || !this.hot.getSelected()) {
630
+ if (!this.hot.isListening() || this.isEditorOpened()) {
635
631
  return;
636
632
  }
637
633
  if (event && event.preventDefault) {
@@ -656,7 +652,7 @@ class CopyPaste extends _base.BasePlugin {
656
652
  if (typeof pastedData === 'string') {
657
653
  pastedData = (0, _SheetClip.parse)(pastedData);
658
654
  }
659
- if (pastedData === void 0 || pastedData && pastedData.length === 0) {
655
+ if (pastedData && pastedData.length === 0) {
660
656
  return;
661
657
  }
662
658
  if (this.hot.runHooks('beforePaste', pastedData, this.copyableRanges) === false) {
@@ -425,10 +425,6 @@ export class CopyPaste extends BasePlugin {
425
425
  if (!selectionRange) {
426
426
  return;
427
427
  }
428
- if (selectionRange.isSingleHeader()) {
429
- this.copyableRanges = [];
430
- return;
431
- }
432
428
  _classPrivateFieldGet(this, _copyableRangesFactory).setSelectedRange(selectionRange);
433
429
  const groupedRanges = new Map([['headers', null], ['cells', null]]);
434
430
  if (_classPrivateFieldGet(this, _copyMode) === 'column-headers-only') {
@@ -625,7 +621,7 @@ export class CopyPaste extends BasePlugin {
625
621
  * @private
626
622
  */
627
623
  onPaste(event) {
628
- if (!this.hot.isListening() || this.isEditorOpened() || !this.hot.getSelected()) {
624
+ if (!this.hot.isListening() || this.isEditorOpened()) {
629
625
  return;
630
626
  }
631
627
  if (event && event.preventDefault) {
@@ -650,7 +646,7 @@ export class CopyPaste extends BasePlugin {
650
646
  if (typeof pastedData === 'string') {
651
647
  pastedData = parse(pastedData);
652
648
  }
653
- if (pastedData === void 0 || pastedData && pastedData.length === 0) {
649
+ if (pastedData && pastedData.length === 0) {
654
650
  return;
655
651
  }
656
652
  if (this.hot.runHooks('beforePaste', pastedData, this.copyableRanges) === false) {
@@ -167,11 +167,14 @@ class CustomBorders extends _base.BasePlugin {
167
167
  const selectionType = (0, _selection.detectSelectionType)(selectionRanges);
168
168
  const selectionSchemaNormalizer = (0, _selection.normalizeSelectionFactory)(selectionType);
169
169
  (0, _array.arrayEach)(selectionRanges, selection => {
170
- selectionSchemaNormalizer(selection).forAll((row, col) => {
171
- (0, _array.arrayEach)(borderKeys, borderKey => {
172
- this.prepareBorderFromCustomAdded(row, col, normBorder, (0, _utils.toInlinePropName)(borderKey));
173
- });
174
- });
170
+ const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);
171
+ for (let row = rowStart; row <= rowEnd; row += 1) {
172
+ for (let col = columnStart; col <= columnEnd; col += 1) {
173
+ (0, _array.arrayEach)(borderKeys, borderKey => {
174
+ this.prepareBorderFromCustomAdded(row, col, normBorder, (0, _utils.toInlinePropName)(borderKey));
175
+ });
176
+ }
177
+ }
175
178
  });
176
179
 
177
180
  /*
@@ -211,13 +214,16 @@ class CustomBorders extends _base.BasePlugin {
211
214
  const selectionSchemaNormalizer = (0, _selection.normalizeSelectionFactory)(selectionType);
212
215
  const selectedBorders = [];
213
216
  (0, _array.arrayEach)(selectionRanges, selection => {
214
- selectionSchemaNormalizer(selection).forAll((row, col) => {
215
- (0, _array.arrayEach)(this.savedBorders, border => {
216
- if (border.row === row && border.col === col) {
217
- selectedBorders.push((0, _utils.denormalizeBorder)(border));
218
- }
219
- });
220
- });
217
+ const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);
218
+ for (let row = rowStart; row <= rowEnd; row += 1) {
219
+ for (let col = columnStart; col <= columnEnd; col += 1) {
220
+ (0, _array.arrayEach)(this.savedBorders, border => {
221
+ if (border.row === row && border.col === col) {
222
+ selectedBorders.push((0, _utils.denormalizeBorder)(border));
223
+ }
224
+ });
225
+ }
226
+ }
221
227
  });
222
228
  return selectedBorders;
223
229
  }
@@ -608,8 +614,7 @@ class CustomBorders extends _base.BasePlugin {
608
614
  let check = false;
609
615
  (0, _array.arrayEach)(this.hot.selection.highlight.customSelections, customSelection => {
610
616
  if (border.id === customSelection.settings.id) {
611
- const borders = this.hot.view._wt.selectionManager.getBorderInstances(customSelection);
612
- (0, _array.arrayEach)(borders, borderObject => {
617
+ (0, _object.objectEach)(customSelection.instanceBorders, borderObject => {
613
618
  borderObject.toggleHiddenClass(place, remove); // TODO this also bad?
614
619
  });
615
620
 
@@ -643,8 +648,7 @@ class CustomBorders extends _base.BasePlugin {
643
648
  customSelection.visualCellRange = cellRange;
644
649
  customSelection.commit();
645
650
  if (place) {
646
- const borders = this.hot.view._wt.selectionManager.getBorderInstances(customSelection);
647
- (0, _array.arrayEach)(borders, borderObject => {
651
+ (0, _object.objectEach)(customSelection.instanceBorders, borderObject => {
648
652
  borderObject.changeBorderStyle(place, border);
649
653
  });
650
654
  }
@@ -712,13 +716,6 @@ class CustomBorders extends _base.BasePlugin {
712
716
  return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS);
713
717
  },
714
718
  disabled() {
715
- const range = this.getSelectedRangeLast();
716
- if (!range) {
717
- return true;
718
- }
719
- if (range.isSingleHeader()) {
720
- return true;
721
- }
722
719
  return this.selection.isSelectedByCorner();
723
720
  },
724
721
  submenu: {
@@ -4,7 +4,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
4
4
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
5
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
6
6
  import { BasePlugin } from "../base/index.mjs";
7
- import { hasOwnProperty, deepClone } from "../../helpers/object.mjs";
7
+ import { hasOwnProperty, objectEach, deepClone } from "../../helpers/object.mjs";
8
8
  import { rangeEach } from "../../helpers/number.mjs";
9
9
  import { arrayEach, arrayReduce, arrayMap } from "../../helpers/array.mjs";
10
10
  import * as C from "../../i18n/constants.mjs";
@@ -160,11 +160,14 @@ export class CustomBorders extends BasePlugin {
160
160
  const selectionType = detectSelectionType(selectionRanges);
161
161
  const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType);
162
162
  arrayEach(selectionRanges, selection => {
163
- selectionSchemaNormalizer(selection).forAll((row, col) => {
164
- arrayEach(borderKeys, borderKey => {
165
- this.prepareBorderFromCustomAdded(row, col, normBorder, toInlinePropName(borderKey));
166
- });
167
- });
163
+ const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);
164
+ for (let row = rowStart; row <= rowEnd; row += 1) {
165
+ for (let col = columnStart; col <= columnEnd; col += 1) {
166
+ arrayEach(borderKeys, borderKey => {
167
+ this.prepareBorderFromCustomAdded(row, col, normBorder, toInlinePropName(borderKey));
168
+ });
169
+ }
170
+ }
168
171
  });
169
172
 
170
173
  /*
@@ -204,13 +207,16 @@ export class CustomBorders extends BasePlugin {
204
207
  const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType);
205
208
  const selectedBorders = [];
206
209
  arrayEach(selectionRanges, selection => {
207
- selectionSchemaNormalizer(selection).forAll((row, col) => {
208
- arrayEach(this.savedBorders, border => {
209
- if (border.row === row && border.col === col) {
210
- selectedBorders.push(denormalizeBorder(border));
211
- }
212
- });
213
- });
210
+ const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);
211
+ for (let row = rowStart; row <= rowEnd; row += 1) {
212
+ for (let col = columnStart; col <= columnEnd; col += 1) {
213
+ arrayEach(this.savedBorders, border => {
214
+ if (border.row === row && border.col === col) {
215
+ selectedBorders.push(denormalizeBorder(border));
216
+ }
217
+ });
218
+ }
219
+ }
214
220
  });
215
221
  return selectedBorders;
216
222
  }
@@ -601,8 +607,7 @@ export class CustomBorders extends BasePlugin {
601
607
  let check = false;
602
608
  arrayEach(this.hot.selection.highlight.customSelections, customSelection => {
603
609
  if (border.id === customSelection.settings.id) {
604
- const borders = this.hot.view._wt.selectionManager.getBorderInstances(customSelection);
605
- arrayEach(borders, borderObject => {
610
+ objectEach(customSelection.instanceBorders, borderObject => {
606
611
  borderObject.toggleHiddenClass(place, remove); // TODO this also bad?
607
612
  });
608
613
 
@@ -636,8 +641,7 @@ export class CustomBorders extends BasePlugin {
636
641
  customSelection.visualCellRange = cellRange;
637
642
  customSelection.commit();
638
643
  if (place) {
639
- const borders = this.hot.view._wt.selectionManager.getBorderInstances(customSelection);
640
- arrayEach(borders, borderObject => {
644
+ objectEach(customSelection.instanceBorders, borderObject => {
641
645
  borderObject.changeBorderStyle(place, border);
642
646
  });
643
647
  }
@@ -705,13 +709,6 @@ export class CustomBorders extends BasePlugin {
705
709
  return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS);
706
710
  },
707
711
  disabled() {
708
- const range = this.getSelectedRangeLast();
709
- if (!range) {
710
- return true;
711
- }
712
- if (range.isSingleHeader()) {
713
- return true;
714
- }
715
712
  return this.selection.isSelectedByCorner();
716
713
  },
717
714
  submenu: {
@@ -18,7 +18,7 @@ export class DropdownMenu extends BasePlugin {
18
18
 
19
19
  constructor(hotInstance: Core);
20
20
  isEnabled(): boolean;
21
- open(position: { left: number, top: number } | Event, offset?: { above?: number, below?: number, left?: number, right?: number }): void;
21
+ open(event: Event): void;
22
22
  close(): void;
23
23
  executeCommand(commandName: string, ...params: any): void;
24
24
  }