handsontable 0.0.0-next-2b3d6d8-20230623 → 0.0.0-next-c3d199b-20230626

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 (285) 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/CHANGELOG.md +0 -31
  52. package/base.js +2 -2
  53. package/base.mjs +2 -2
  54. package/core.d.ts +5 -3
  55. package/core.js +127 -309
  56. package/core.mjs +127 -309
  57. package/dataMap/metaManager/metaSchema.js +19 -0
  58. package/dataMap/metaManager/metaSchema.mjs +19 -0
  59. package/dist/handsontable.css +8 -3
  60. package/dist/handsontable.full.css +8 -3
  61. package/dist/handsontable.full.js +15283 -12109
  62. package/dist/handsontable.full.min.css +3 -3
  63. package/dist/handsontable.full.min.js +115 -115
  64. package/dist/handsontable.js +23364 -20190
  65. package/dist/handsontable.min.css +3 -3
  66. package/dist/handsontable.min.js +4 -4
  67. package/editorManager.js +21 -94
  68. package/editorManager.mjs +26 -98
  69. package/editors/textEditor/textEditor.js +3 -11
  70. package/editors/textEditor/textEditor.mjs +4 -12
  71. package/helpers/mixed.js +2 -2
  72. package/helpers/mixed.mjs +2 -2
  73. package/helpers/number.d.ts +1 -0
  74. package/helpers/number.js +18 -0
  75. package/helpers/number.mjs +17 -0
  76. package/package.json +1 -1
  77. package/pluginHooks.d.ts +5 -1
  78. package/pluginHooks.js +89 -1
  79. package/pluginHooks.mjs +89 -1
  80. package/plugins/collapsibleColumns/collapsibleColumns.js +81 -24
  81. package/plugins/collapsibleColumns/collapsibleColumns.mjs +81 -24
  82. package/plugins/columnSorting/columnSorting.js +50 -8
  83. package/plugins/columnSorting/columnSorting.mjs +49 -9
  84. package/plugins/columnSorting/index.js +4 -2
  85. package/plugins/columnSorting/index.mjs +1 -1
  86. package/plugins/comments/commentEditor.js +1 -0
  87. package/plugins/comments/commentEditor.mjs +1 -0
  88. package/plugins/comments/comments.js +263 -224
  89. package/plugins/comments/comments.mjs +271 -234
  90. package/plugins/comments/contextMenuItem/addEditComment.js +51 -0
  91. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  92. package/plugins/comments/contextMenuItem/readOnlyComment.js +63 -0
  93. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +55 -0
  94. package/plugins/comments/contextMenuItem/removeComment.js +48 -0
  95. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  96. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  97. package/plugins/contextMenu/contextMenu.js +80 -29
  98. package/plugins/contextMenu/contextMenu.mjs +81 -30
  99. package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
  100. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  101. package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
  102. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  103. package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
  104. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  105. package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
  106. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  107. package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
  108. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  109. package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
  110. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  111. package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
  112. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  113. package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
  114. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  115. package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
  116. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  117. package/plugins/contextMenu/utils.js +25 -16
  118. package/plugins/contextMenu/utils.mjs +24 -15
  119. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  120. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  121. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  122. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  123. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  124. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  125. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  126. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  127. package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
  128. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  129. package/plugins/copyPaste/copyPaste.js +6 -2
  130. package/plugins/copyPaste/copyPaste.mjs +6 -2
  131. package/plugins/customBorders/customBorders.js +25 -53
  132. package/plugins/customBorders/customBorders.mjs +26 -54
  133. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  134. package/plugins/dropdownMenu/dropdownMenu.js +94 -30
  135. package/plugins/dropdownMenu/dropdownMenu.mjs +94 -30
  136. package/plugins/mergeCells/mergeCells.js +5 -18
  137. package/plugins/mergeCells/mergeCells.mjs +5 -18
  138. package/plugins/multiColumnSorting/multiColumnSorting.js +42 -3
  139. package/plugins/multiColumnSorting/multiColumnSorting.mjs +42 -3
  140. package/plugins/nestedHeaders/nestedHeaders.js +132 -10
  141. package/plugins/nestedHeaders/nestedHeaders.mjs +132 -10
  142. package/plugins/nestedHeaders/stateManager/index.js +37 -0
  143. package/plugins/nestedHeaders/stateManager/index.mjs +37 -0
  144. package/plugins/nestedRows/nestedRows.js +52 -7
  145. package/plugins/nestedRows/nestedRows.mjs +52 -7
  146. package/renderers/checkboxRenderer/checkboxRenderer.js +2 -2
  147. package/renderers/checkboxRenderer/checkboxRenderer.mjs +1 -1
  148. package/selection/highlight/highlight.js +312 -89
  149. package/selection/highlight/highlight.mjs +302 -85
  150. package/selection/highlight/types/activeHeader.js +10 -9
  151. package/selection/highlight/types/activeHeader.mjs +10 -8
  152. package/selection/highlight/types/area.js +12 -27
  153. package/selection/highlight/types/area.mjs +16 -30
  154. package/selection/highlight/types/areaLayered.js +54 -0
  155. package/selection/highlight/types/areaLayered.mjs +49 -0
  156. package/selection/highlight/types/column.js +50 -0
  157. package/selection/highlight/types/column.mjs +45 -0
  158. package/selection/highlight/types/customSelection.js +7 -10
  159. package/selection/highlight/types/customSelection.mjs +7 -9
  160. package/selection/highlight/types/fill.js +5 -8
  161. package/selection/highlight/types/fill.mjs +5 -7
  162. package/selection/highlight/types/{cell.js → focus.js} +5 -8
  163. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  164. package/selection/highlight/types/header.js +10 -20
  165. package/selection/highlight/types/header.mjs +10 -19
  166. package/selection/highlight/types/{index.js → row.js} +27 -31
  167. package/selection/highlight/types/{index.mjs → row.mjs} +24 -29
  168. package/selection/highlight/visualSelection.js +31 -27
  169. package/selection/highlight/visualSelection.mjs +31 -27
  170. package/selection/index.js +4 -7
  171. package/selection/index.mjs +2 -3
  172. package/selection/mouseEventHandler.js +1 -1
  173. package/selection/mouseEventHandler.mjs +1 -1
  174. package/selection/range.js +8 -8
  175. package/selection/range.mjs +8 -8
  176. package/selection/selection.js +315 -181
  177. package/selection/selection.mjs +310 -180
  178. package/selection/transformation.js +233 -96
  179. package/selection/transformation.mjs +230 -93
  180. package/selection/utils.js +12 -36
  181. package/selection/utils.mjs +13 -36
  182. package/settings.d.ts +1 -0
  183. package/shortcutContexts/commands/editor/closeAndSave.js +15 -0
  184. package/shortcutContexts/commands/editor/closeAndSave.mjs +10 -0
  185. package/shortcutContexts/commands/editor/closeWithoutSaving.js +13 -0
  186. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  187. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  188. package/shortcutContexts/commands/editor/fastOpen.mjs +11 -0
  189. package/shortcutContexts/commands/editor/index.js +16 -0
  190. package/shortcutContexts/commands/editor/index.mjs +12 -0
  191. package/shortcutContexts/commands/editor/open.js +29 -0
  192. package/shortcutContexts/commands/editor/open.mjs +24 -0
  193. package/shortcutContexts/commands/emptySelectedCells.js +12 -0
  194. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  195. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  196. package/shortcutContexts/commands/extendCellsSelection/down.mjs +10 -0
  197. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +21 -0
  198. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +16 -0
  199. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  200. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  201. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  202. package/shortcutContexts/commands/extendCellsSelection/left.mjs +10 -0
  203. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  204. package/shortcutContexts/commands/extendCellsSelection/right.mjs +10 -0
  205. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  206. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +14 -0
  207. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +22 -0
  208. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +17 -0
  209. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +17 -0
  210. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +12 -0
  211. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +17 -0
  212. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +12 -0
  213. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +40 -0
  214. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +35 -0
  215. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +40 -0
  216. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +35 -0
  217. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +22 -0
  218. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +17 -0
  219. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  220. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +14 -0
  221. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  222. package/shortcutContexts/commands/extendCellsSelection/up.mjs +10 -0
  223. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +21 -0
  224. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +16 -0
  225. package/shortcutContexts/commands/index.js +52 -0
  226. package/shortcutContexts/commands/index.mjs +48 -0
  227. package/shortcutContexts/commands/moveCellSelection/down.js +12 -0
  228. package/shortcutContexts/commands/moveCellSelection/down.mjs +7 -0
  229. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +29 -0
  230. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +24 -0
  231. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  232. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  233. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +13 -0
  234. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  235. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +13 -0
  236. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  237. package/shortcutContexts/commands/moveCellSelection/left.js +11 -0
  238. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  239. package/shortcutContexts/commands/moveCellSelection/right.js +11 -0
  240. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  241. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +16 -0
  242. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +11 -0
  243. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +17 -0
  244. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +12 -0
  245. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +13 -0
  246. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +8 -0
  247. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +16 -0
  248. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +11 -0
  249. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +36 -0
  250. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +31 -0
  251. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +36 -0
  252. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +31 -0
  253. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +16 -0
  254. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +11 -0
  255. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +18 -0
  256. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +13 -0
  257. package/shortcutContexts/commands/moveCellSelection/up.js +12 -0
  258. package/shortcutContexts/commands/moveCellSelection/up.mjs +7 -0
  259. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +29 -0
  260. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +24 -0
  261. package/shortcutContexts/commands/populateSelectedCellsData.js +35 -0
  262. package/shortcutContexts/commands/populateSelectedCellsData.mjs +30 -0
  263. package/shortcutContexts/commands/selectAll.js +11 -0
  264. package/shortcutContexts/commands/selectAll.mjs +6 -0
  265. package/shortcutContexts/constants.js +19 -0
  266. package/shortcutContexts/constants.mjs +12 -0
  267. package/shortcutContexts/editor.js +29 -0
  268. package/shortcutContexts/editor.mjs +25 -0
  269. package/shortcutContexts/grid.js +247 -0
  270. package/shortcutContexts/grid.mjs +243 -0
  271. package/shortcutContexts/index.js +29 -0
  272. package/shortcutContexts/index.mjs +15 -0
  273. package/shortcuts/manager.js +2 -0
  274. package/shortcuts/manager.mjs +2 -0
  275. package/shortcuts/recorder.js +2 -2
  276. package/shortcuts/recorder.mjs +2 -2
  277. package/shortcuts/utils.js +21 -5
  278. package/shortcuts/utils.mjs +20 -4
  279. package/tableView.js +63 -11
  280. package/tableView.mjs +63 -11
  281. package/translations/indexMapper.d.ts +2 -0
  282. package/3rdparty/walkontable/src/selection.js +0 -355
  283. package/3rdparty/walkontable/src/selection.mjs +0 -349
  284. package/selection/highlight/constants.js +0 -16
  285. package/selection/highlight/constants.mjs +0 -6
@@ -3,6 +3,7 @@
3
3
  exports.__esModule = true;
4
4
  exports.default = copyWithColumnHeadersItem;
5
5
  var _constants = require("../../../i18n/constants");
6
+ var _number = require("../../../helpers/number");
6
7
  /**
7
8
  * @param {CopyPaste} copyPastePlugin The plugin instance.
8
9
  * @returns {object}
@@ -12,7 +13,7 @@ function copyWithColumnHeadersItem(copyPastePlugin) {
12
13
  key: 'copy_with_column_headers',
13
14
  name: function name() {
14
15
  var selectedRange = this.getSelectedRangeLast();
15
- var nounForm = selectedRange ? Math.min(selectedRange.getWidth() - 1, 1) : 0;
16
+ var nounForm = selectedRange ? (0, _number.clamp)(selectedRange.getWidth() - 1, 0, 1) : 0;
16
17
  return this.getTranslatedPhrase(_constants.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS, nounForm);
17
18
  },
18
19
  callback: function callback() {
@@ -22,6 +23,13 @@ function copyWithColumnHeadersItem(copyPastePlugin) {
22
23
  if (!this.hasColHeaders()) {
23
24
  return true;
24
25
  }
26
+ var range = this.getSelectedRangeLast();
27
+ if (!range) {
28
+ return true;
29
+ }
30
+ if (range.isSingleHeader()) {
31
+ return true;
32
+ }
25
33
  var selected = this.getSelected();
26
34
 
27
35
  // Disable for no selection or for non-contiguous selection.
@@ -1,4 +1,5 @@
1
1
  import { CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS } from "../../../i18n/constants.mjs";
2
+ import { clamp } from "../../../helpers/number.mjs";
2
3
  /**
3
4
  * @param {CopyPaste} copyPastePlugin The plugin instance.
4
5
  * @returns {object}
@@ -8,7 +9,7 @@ export default function copyWithColumnHeadersItem(copyPastePlugin) {
8
9
  key: 'copy_with_column_headers',
9
10
  name: function name() {
10
11
  var selectedRange = this.getSelectedRangeLast();
11
- var nounForm = selectedRange ? Math.min(selectedRange.getWidth() - 1, 1) : 0;
12
+ var nounForm = selectedRange ? clamp(selectedRange.getWidth() - 1, 0, 1) : 0;
12
13
  return this.getTranslatedPhrase(CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS, nounForm);
13
14
  },
14
15
  callback: function callback() {
@@ -18,6 +19,13 @@ export default function copyWithColumnHeadersItem(copyPastePlugin) {
18
19
  if (!this.hasColHeaders()) {
19
20
  return true;
20
21
  }
22
+ var range = this.getSelectedRangeLast();
23
+ if (!range) {
24
+ return true;
25
+ }
26
+ if (range.isSingleHeader()) {
27
+ return true;
28
+ }
21
29
  var selected = this.getSelected();
22
30
 
23
31
  // Disable for no selection or for non-contiguous selection.
@@ -32,6 +32,13 @@ function cutItem(copyPastePlugin) {
32
32
  if (this.countRows() === 0 || this.countCols() === 0) {
33
33
  return true;
34
34
  }
35
+ var range = this.getSelectedRangeLast();
36
+ if (!range) {
37
+ return true;
38
+ }
39
+ if (range.isSingleHeader()) {
40
+ return true;
41
+ }
35
42
  var selected = this.getSelected();
36
43
 
37
44
  // Disable for no selection or for non-contiquous selection.
@@ -16,6 +16,13 @@ export default function cutItem(copyPastePlugin) {
16
16
  if (this.countRows() === 0 || this.countCols() === 0) {
17
17
  return true;
18
18
  }
19
+ var range = this.getSelectedRangeLast();
20
+ if (!range) {
21
+ return true;
22
+ }
23
+ if (range.isSingleHeader()) {
24
+ return true;
25
+ }
19
26
  var selected = this.getSelected();
20
27
 
21
28
  // Disable for no selection or for non-contiquous selection.
@@ -528,6 +528,10 @@ var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
528
528
  if (!selectionRange) {
529
529
  return;
530
530
  }
531
+ if (selectionRange.isSingleHeader()) {
532
+ this.copyableRanges = [];
533
+ return;
534
+ }
531
535
  _classPrivateFieldGet(this, _copyableRangesFactory).setSelectedRange(selectionRange);
532
536
  var groupedRanges = new Map([['headers', null], ['cells', null]]);
533
537
  if (_classPrivateFieldGet(this, _copyMode) === 'column-headers-only') {
@@ -731,7 +735,7 @@ var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
731
735
  }, {
732
736
  key: "onPaste",
733
737
  value: function onPaste(event) {
734
- if (!this.hot.isListening() || this.isEditorOpened()) {
738
+ if (!this.hot.isListening() || this.isEditorOpened() || !this.hot.getSelected()) {
735
739
  return;
736
740
  }
737
741
  if (event && event.preventDefault) {
@@ -756,7 +760,7 @@ var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
756
760
  if (typeof pastedData === 'string') {
757
761
  pastedData = (0, _SheetClip.parse)(pastedData);
758
762
  }
759
- if (pastedData && pastedData.length === 0) {
763
+ if (pastedData === void 0 || pastedData && pastedData.length === 0) {
760
764
  return;
761
765
  }
762
766
  if (this.hot.runHooks('beforePaste', pastedData, this.copyableRanges) === false) {
@@ -521,6 +521,10 @@ export var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
521
521
  if (!selectionRange) {
522
522
  return;
523
523
  }
524
+ if (selectionRange.isSingleHeader()) {
525
+ this.copyableRanges = [];
526
+ return;
527
+ }
524
528
  _classPrivateFieldGet(this, _copyableRangesFactory).setSelectedRange(selectionRange);
525
529
  var groupedRanges = new Map([['headers', null], ['cells', null]]);
526
530
  if (_classPrivateFieldGet(this, _copyMode) === 'column-headers-only') {
@@ -724,7 +728,7 @@ export var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
724
728
  }, {
725
729
  key: "onPaste",
726
730
  value: function onPaste(event) {
727
- if (!this.hot.isListening() || this.isEditorOpened()) {
731
+ if (!this.hot.isListening() || this.isEditorOpened() || !this.hot.getSelected()) {
728
732
  return;
729
733
  }
730
734
  if (event && event.preventDefault) {
@@ -749,7 +753,7 @@ export var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
749
753
  if (typeof pastedData === 'string') {
750
754
  pastedData = parse(pastedData);
751
755
  }
752
- if (pastedData && pastedData.length === 0) {
756
+ if (pastedData === void 0 || pastedData && pastedData.length === 0) {
753
757
  return;
754
758
  }
755
759
  if (this.hot.runHooks('beforePaste', pastedData, this.copyableRanges) === false) {
@@ -9,11 +9,6 @@ require("core-js/modules/es.symbol.iterator.js");
9
9
  require("core-js/modules/es.array.iterator.js");
10
10
  require("core-js/modules/es.string.iterator.js");
11
11
  require("core-js/modules/web.dom-collections.iterator.js");
12
- require("core-js/modules/es.array.slice.js");
13
- require("core-js/modules/es.regexp.to-string.js");
14
- require("core-js/modules/es.function.name.js");
15
- require("core-js/modules/es.array.from.js");
16
- require("core-js/modules/es.regexp.exec.js");
17
12
  require("core-js/modules/es.weak-map.js");
18
13
  exports.__esModule = true;
19
14
  exports.PLUGIN_PRIORITY = exports.PLUGIN_KEY = exports.CustomBorders = void 0;
@@ -39,12 +34,6 @@ var _selection = require("../../selection");
39
34
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
40
35
  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; }
41
36
  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); }
42
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
43
- 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."); }
44
- 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); }
45
- 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; }
46
- 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; } }
47
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
48
37
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
49
38
  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); } }
50
39
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
@@ -230,25 +219,11 @@ var CustomBorders = /*#__PURE__*/function (_BasePlugin) {
230
219
  var selectionType = (0, _selection.detectSelectionType)(selectionRanges);
231
220
  var selectionSchemaNormalizer = (0, _selection.normalizeSelectionFactory)(selectionType);
232
221
  (0, _array.arrayEach)(selectionRanges, function (selection) {
233
- var _selectionSchemaNorma = selectionSchemaNormalizer(selection),
234
- _selectionSchemaNorma2 = _slicedToArray(_selectionSchemaNorma, 4),
235
- rowStart = _selectionSchemaNorma2[0],
236
- columnStart = _selectionSchemaNorma2[1],
237
- rowEnd = _selectionSchemaNorma2[2],
238
- columnEnd = _selectionSchemaNorma2[3];
239
- var _loop = function _loop(row) {
240
- var _loop2 = function _loop2(col) {
241
- (0, _array.arrayEach)(borderKeys, function (borderKey) {
242
- _this3.prepareBorderFromCustomAdded(row, col, normBorder, (0, _utils.toInlinePropName)(borderKey));
243
- });
244
- };
245
- for (var col = columnStart; col <= columnEnd; col += 1) {
246
- _loop2(col);
247
- }
248
- };
249
- for (var row = rowStart; row <= rowEnd; row += 1) {
250
- _loop(row);
251
- }
222
+ selectionSchemaNormalizer(selection).forAll(function (row, col) {
223
+ (0, _array.arrayEach)(borderKeys, function (borderKey) {
224
+ _this3.prepareBorderFromCustomAdded(row, col, normBorder, (0, _utils.toInlinePropName)(borderKey));
225
+ });
226
+ });
252
227
  });
253
228
 
254
229
  /*
@@ -291,27 +266,13 @@ var CustomBorders = /*#__PURE__*/function (_BasePlugin) {
291
266
  var selectionSchemaNormalizer = (0, _selection.normalizeSelectionFactory)(selectionType);
292
267
  var selectedBorders = [];
293
268
  (0, _array.arrayEach)(selectionRanges, function (selection) {
294
- var _selectionSchemaNorma3 = selectionSchemaNormalizer(selection),
295
- _selectionSchemaNorma4 = _slicedToArray(_selectionSchemaNorma3, 4),
296
- rowStart = _selectionSchemaNorma4[0],
297
- columnStart = _selectionSchemaNorma4[1],
298
- rowEnd = _selectionSchemaNorma4[2],
299
- columnEnd = _selectionSchemaNorma4[3];
300
- var _loop3 = function _loop3(row) {
301
- var _loop4 = function _loop4(col) {
302
- (0, _array.arrayEach)(_this4.savedBorders, function (border) {
303
- if (border.row === row && border.col === col) {
304
- selectedBorders.push((0, _utils.denormalizeBorder)(border));
305
- }
306
- });
307
- };
308
- for (var col = columnStart; col <= columnEnd; col += 1) {
309
- _loop4(col);
310
- }
311
- };
312
- for (var row = rowStart; row <= rowEnd; row += 1) {
313
- _loop3(row);
314
- }
269
+ selectionSchemaNormalizer(selection).forAll(function (row, col) {
270
+ (0, _array.arrayEach)(_this4.savedBorders, function (border) {
271
+ if (border.row === row && border.col === col) {
272
+ selectedBorders.push((0, _utils.denormalizeBorder)(border));
273
+ }
274
+ });
275
+ });
315
276
  });
316
277
  return selectedBorders;
317
278
  }
@@ -736,10 +697,12 @@ var CustomBorders = /*#__PURE__*/function (_BasePlugin) {
736
697
  }, {
737
698
  key: "checkCustomSelectionsFromContextMenu",
738
699
  value: function checkCustomSelectionsFromContextMenu(border, place, remove) {
700
+ var _this12 = this;
739
701
  var check = false;
740
702
  (0, _array.arrayEach)(this.hot.selection.highlight.customSelections, function (customSelection) {
741
703
  if (border.id === customSelection.settings.id) {
742
- (0, _object.objectEach)(customSelection.instanceBorders, function (borderObject) {
704
+ var borders = _this12.hot.view._wt.selectionManager.getBorderInstances(customSelection);
705
+ (0, _array.arrayEach)(borders, function (borderObject) {
743
706
  borderObject.toggleHiddenClass(place, remove); // TODO this also bad?
744
707
  });
745
708
 
@@ -764,6 +727,7 @@ var CustomBorders = /*#__PURE__*/function (_BasePlugin) {
764
727
  }, {
765
728
  key: "checkCustomSelections",
766
729
  value: function checkCustomSelections(border, cellRange, place) {
730
+ var _this13 = this;
767
731
  var hideCount = this.countHide(border);
768
732
  var check = false;
769
733
  if (hideCount === 4) {
@@ -775,7 +739,8 @@ var CustomBorders = /*#__PURE__*/function (_BasePlugin) {
775
739
  customSelection.visualCellRange = cellRange;
776
740
  customSelection.commit();
777
741
  if (place) {
778
- (0, _object.objectEach)(customSelection.instanceBorders, function (borderObject) {
742
+ var borders = _this13.hot.view._wt.selectionManager.getBorderInstances(customSelection);
743
+ (0, _array.arrayEach)(borders, function (borderObject) {
779
744
  borderObject.changeBorderStyle(place, border);
780
745
  });
781
746
  }
@@ -849,6 +814,13 @@ var CustomBorders = /*#__PURE__*/function (_BasePlugin) {
849
814
  return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS);
850
815
  },
851
816
  disabled: function disabled() {
817
+ var range = this.getSelectedRangeLast();
818
+ if (!range) {
819
+ return true;
820
+ }
821
+ if (range.isSingleHeader()) {
822
+ return true;
823
+ }
852
824
  return this.selection.isSelectedByCorner();
853
825
  },
854
826
  submenu: {
@@ -1,10 +1,4 @@
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
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
3
- 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."); }
4
- 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); }
5
- 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; }
6
- 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; } }
7
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
8
2
  import "core-js/modules/es.array.concat.js";
9
3
  import "core-js/modules/es.object.keys.js";
10
4
  import "core-js/modules/es.object.assign.js";
@@ -25,11 +19,6 @@ import "core-js/modules/es.symbol.iterator.js";
25
19
  import "core-js/modules/es.array.iterator.js";
26
20
  import "core-js/modules/es.string.iterator.js";
27
21
  import "core-js/modules/web.dom-collections.iterator.js";
28
- import "core-js/modules/es.array.slice.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.array.from.js";
32
- import "core-js/modules/es.regexp.exec.js";
33
22
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
34
23
  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); } }
35
24
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
@@ -46,7 +35,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
46
35
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
47
36
  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); }
48
37
  import { BasePlugin } from "../base/index.mjs";
49
- import { hasOwnProperty, objectEach, deepClone } from "../../helpers/object.mjs";
38
+ import { hasOwnProperty, deepClone } from "../../helpers/object.mjs";
50
39
  import { rangeEach } from "../../helpers/number.mjs";
51
40
  import { arrayEach, arrayReduce, arrayMap } from "../../helpers/array.mjs";
52
41
  import * as C from "../../i18n/constants.mjs";
@@ -221,25 +210,11 @@ export var CustomBorders = /*#__PURE__*/function (_BasePlugin) {
221
210
  var selectionType = detectSelectionType(selectionRanges);
222
211
  var selectionSchemaNormalizer = normalizeSelectionFactory(selectionType);
223
212
  arrayEach(selectionRanges, function (selection) {
224
- var _selectionSchemaNorma = selectionSchemaNormalizer(selection),
225
- _selectionSchemaNorma2 = _slicedToArray(_selectionSchemaNorma, 4),
226
- rowStart = _selectionSchemaNorma2[0],
227
- columnStart = _selectionSchemaNorma2[1],
228
- rowEnd = _selectionSchemaNorma2[2],
229
- columnEnd = _selectionSchemaNorma2[3];
230
- var _loop = function _loop(row) {
231
- var _loop2 = function _loop2(col) {
232
- arrayEach(borderKeys, function (borderKey) {
233
- _this3.prepareBorderFromCustomAdded(row, col, normBorder, toInlinePropName(borderKey));
234
- });
235
- };
236
- for (var col = columnStart; col <= columnEnd; col += 1) {
237
- _loop2(col);
238
- }
239
- };
240
- for (var row = rowStart; row <= rowEnd; row += 1) {
241
- _loop(row);
242
- }
213
+ selectionSchemaNormalizer(selection).forAll(function (row, col) {
214
+ arrayEach(borderKeys, function (borderKey) {
215
+ _this3.prepareBorderFromCustomAdded(row, col, normBorder, toInlinePropName(borderKey));
216
+ });
217
+ });
243
218
  });
244
219
 
245
220
  /*
@@ -282,27 +257,13 @@ export var CustomBorders = /*#__PURE__*/function (_BasePlugin) {
282
257
  var selectionSchemaNormalizer = normalizeSelectionFactory(selectionType);
283
258
  var selectedBorders = [];
284
259
  arrayEach(selectionRanges, function (selection) {
285
- var _selectionSchemaNorma3 = selectionSchemaNormalizer(selection),
286
- _selectionSchemaNorma4 = _slicedToArray(_selectionSchemaNorma3, 4),
287
- rowStart = _selectionSchemaNorma4[0],
288
- columnStart = _selectionSchemaNorma4[1],
289
- rowEnd = _selectionSchemaNorma4[2],
290
- columnEnd = _selectionSchemaNorma4[3];
291
- var _loop3 = function _loop3(row) {
292
- var _loop4 = function _loop4(col) {
293
- arrayEach(_this4.savedBorders, function (border) {
294
- if (border.row === row && border.col === col) {
295
- selectedBorders.push(denormalizeBorder(border));
296
- }
297
- });
298
- };
299
- for (var col = columnStart; col <= columnEnd; col += 1) {
300
- _loop4(col);
301
- }
302
- };
303
- for (var row = rowStart; row <= rowEnd; row += 1) {
304
- _loop3(row);
305
- }
260
+ selectionSchemaNormalizer(selection).forAll(function (row, col) {
261
+ arrayEach(_this4.savedBorders, function (border) {
262
+ if (border.row === row && border.col === col) {
263
+ selectedBorders.push(denormalizeBorder(border));
264
+ }
265
+ });
266
+ });
306
267
  });
307
268
  return selectedBorders;
308
269
  }
@@ -727,10 +688,12 @@ export var CustomBorders = /*#__PURE__*/function (_BasePlugin) {
727
688
  }, {
728
689
  key: "checkCustomSelectionsFromContextMenu",
729
690
  value: function checkCustomSelectionsFromContextMenu(border, place, remove) {
691
+ var _this12 = this;
730
692
  var check = false;
731
693
  arrayEach(this.hot.selection.highlight.customSelections, function (customSelection) {
732
694
  if (border.id === customSelection.settings.id) {
733
- objectEach(customSelection.instanceBorders, function (borderObject) {
695
+ var borders = _this12.hot.view._wt.selectionManager.getBorderInstances(customSelection);
696
+ arrayEach(borders, function (borderObject) {
734
697
  borderObject.toggleHiddenClass(place, remove); // TODO this also bad?
735
698
  });
736
699
 
@@ -755,6 +718,7 @@ export var CustomBorders = /*#__PURE__*/function (_BasePlugin) {
755
718
  }, {
756
719
  key: "checkCustomSelections",
757
720
  value: function checkCustomSelections(border, cellRange, place) {
721
+ var _this13 = this;
758
722
  var hideCount = this.countHide(border);
759
723
  var check = false;
760
724
  if (hideCount === 4) {
@@ -766,7 +730,8 @@ export var CustomBorders = /*#__PURE__*/function (_BasePlugin) {
766
730
  customSelection.visualCellRange = cellRange;
767
731
  customSelection.commit();
768
732
  if (place) {
769
- objectEach(customSelection.instanceBorders, function (borderObject) {
733
+ var borders = _this13.hot.view._wt.selectionManager.getBorderInstances(customSelection);
734
+ arrayEach(borders, function (borderObject) {
770
735
  borderObject.changeBorderStyle(place, border);
771
736
  });
772
737
  }
@@ -840,6 +805,13 @@ export var CustomBorders = /*#__PURE__*/function (_BasePlugin) {
840
805
  return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS);
841
806
  },
842
807
  disabled: function disabled() {
808
+ var range = this.getSelectedRangeLast();
809
+ if (!range) {
810
+ return true;
811
+ }
812
+ if (range.isSingleHeader()) {
813
+ return true;
814
+ }
843
815
  return this.selection.isSelectedByCorner();
844
816
  },
845
817
  submenu: {
@@ -18,7 +18,7 @@ export class DropdownMenu extends BasePlugin {
18
18
 
19
19
  constructor(hotInstance: Core);
20
20
  isEnabled(): boolean;
21
- open(event: Event): void;
21
+ open(position: { left: number, top: number } | Event, offset?: { above?: number, below?: number, left?: number, right?: number }): void;
22
22
  close(): void;
23
23
  executeCommand(commandName: string, ...params: any): void;
24
24
  }
@@ -22,7 +22,9 @@ require("core-js/modules/es.object.set-prototype-of.js");
22
22
  require("core-js/modules/es.object.get-prototype-of.js");
23
23
  var _base = require("../base");
24
24
  var _array = require("../../helpers/array");
25
+ var _object = require("../../helpers/object");
25
26
  var _commandExecutor = _interopRequireDefault(require("../contextMenu/commandExecutor"));
27
+ var _utils = require("../contextMenu/utils");
26
28
  var _eventManager = _interopRequireDefault(require("../../eventManager"));
27
29
  var _element = require("../../helpers/dom/element");
28
30
  var _itemsFactory = _interopRequireDefault(require("../contextMenu/itemsFactory"));
@@ -54,6 +56,7 @@ exports.PLUGIN_KEY = PLUGIN_KEY;
54
56
  var PLUGIN_PRIORITY = 230;
55
57
  exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
56
58
  var BUTTON_CLASS_NAME = 'changeType';
59
+ var SHORTCUTS_GROUP = PLUGIN_KEY;
57
60
 
58
61
  /* eslint-disable jsdoc/require-description-complete-sentence */
59
62
  /**
@@ -182,6 +185,7 @@ var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
182
185
  if (typeof settings.callback === 'function') {
183
186
  this.commandExecutor.setCommonCallback(settings.callback);
184
187
  }
188
+ this.registerShortcuts();
185
189
  _get(_getPrototypeOf(DropdownMenu.prototype), "enablePlugin", this).call(this);
186
190
  this.callOnPluginsReady(function () {
187
191
  _this2.hot.runHooks('afterDropdownMenuDefaultOptions', predefinedItems);
@@ -245,9 +249,71 @@ var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
245
249
  if (this.menu) {
246
250
  this.menu.destroy();
247
251
  }
252
+ this.unregisterShortcuts();
248
253
  _get(_getPrototypeOf(DropdownMenu.prototype), "disablePlugin", this).call(this);
249
254
  }
250
255
 
256
+ /**
257
+ * Register shortcuts responsible for toggling dropdown menu.
258
+ *
259
+ * @private
260
+ */
261
+ }, {
262
+ key: "registerShortcuts",
263
+ value: function registerShortcuts() {
264
+ var _this3 = this;
265
+ var context = this.hot.getShortcutManager().getContext('grid');
266
+ var callback = function callback() {
267
+ var _this3$hot$getSelecte = _this3.hot.getSelectedRangeLast(),
268
+ highlight = _this3$hot$getSelecte.highlight;
269
+ if ((highlight.isHeader() && highlight.row === -1 || highlight.isCell()) && highlight.col >= 0) {
270
+ _this3.hot.selectColumns(highlight.col, highlight.col, -1);
271
+ var _this3$hot$getSelecte2 = _this3.hot.getSelectedRangeLast(),
272
+ from = _this3$hot$getSelecte2.from;
273
+ var offset = (0, _utils.getDocumentOffsetByElement)(_this3.menu.container, _this3.hot.rootDocument);
274
+ var target = _this3.hot.getCell(-1, from.col, true);
275
+ var rect = target.getBoundingClientRect();
276
+ _this3.open({
277
+ left: rect.left + offset.left,
278
+ top: rect.top + target.offsetHeight + offset.top
279
+ }, {
280
+ left: rect.width
281
+ });
282
+ _this3.hot._registerTimeout(function () {
283
+ _this3.menu.selectFirstCell();
284
+ });
285
+ }
286
+ };
287
+ context.addShortcuts([{
288
+ keys: [['Shift', 'Alt', 'ArrowDown'], ['Shift', 'Enter']],
289
+ callback: callback,
290
+ runOnlyIf: function runOnlyIf() {
291
+ var _this3$hot$getSelecte3;
292
+ return ((_this3$hot$getSelecte3 = _this3.hot.getSelectedRangeLast()) === null || _this3$hot$getSelecte3 === void 0 ? void 0 : _this3$hot$getSelecte3.highlight.isHeader()) && !_this3.menu.isOpened();
293
+ },
294
+ group: SHORTCUTS_GROUP
295
+ }, {
296
+ keys: [['Shift', 'Alt', 'ArrowDown']],
297
+ callback: callback,
298
+ runOnlyIf: function runOnlyIf() {
299
+ var _this3$hot$getSelecte4;
300
+ return ((_this3$hot$getSelecte4 = _this3.hot.getSelectedRangeLast()) === null || _this3$hot$getSelecte4 === void 0 ? void 0 : _this3$hot$getSelecte4.highlight.isCell()) && !_this3.menu.isOpened();
301
+ },
302
+ group: SHORTCUTS_GROUP
303
+ }]);
304
+ }
305
+
306
+ /**
307
+ * Unregister shortcuts responsible for toggling dropdown menu.
308
+ *
309
+ * @private
310
+ */
311
+ }, {
312
+ key: "unregisterShortcuts",
313
+ value: function unregisterShortcuts() {
314
+ this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
315
+ }
316
+
251
317
  /**
252
318
  * Registers the DOM listeners.
253
319
  *
@@ -256,33 +322,42 @@ var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
256
322
  }, {
257
323
  key: "registerEvents",
258
324
  value: function registerEvents() {
259
- var _this3 = this;
325
+ var _this4 = this;
260
326
  this.eventManager.addEventListener(this.hot.rootElement, 'click', function (event) {
261
- return _this3.onTableClick(event);
327
+ return _this4.onTableClick(event);
262
328
  });
263
329
  }
264
330
 
265
331
  /**
266
332
  * Opens menu and re-position it based on the passed coordinates.
267
333
  *
268
- * @param {object|Event} position An object with `pageX` and `pageY` properties which contains values relative to
269
- * the top left of the fully rendered content area in the browser or with `clientX`
270
- * and `clientY` properties which contains values relative to the upper left edge
271
- * of the content area (the viewport) of the browser window. This object is structurally
272
- * compatible with native mouse event so it can be used either.
334
+ * @param {{ top: number, left: number }|Event} position An object with `top` and `left` properties
335
+ * which contains coordinates relative to the browsers viewport (without included scroll offsets).
336
+ * Or if the native event is passed the menu will be positioned based on the `pageX` and `pageY`
337
+ * coordinates.
338
+ * @param {{ above: number, below: number, left: number, right: number }} offset An object allows applying
339
+ * the offset to the menu position.
273
340
  * @fires Hooks#beforeDropdownMenuShow
274
341
  * @fires Hooks#afterDropdownMenuShow
275
342
  */
276
343
  }, {
277
344
  key: "open",
278
345
  value: function open(position) {
279
- if (!this.menu) {
346
+ var _this$menu,
347
+ _this5 = this;
348
+ var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
349
+ above: 0,
350
+ below: 0,
351
+ left: 0,
352
+ right: 0
353
+ };
354
+ if ((_this$menu = this.menu) !== null && _this$menu !== void 0 && _this$menu.isOpened()) {
280
355
  return;
281
356
  }
282
357
  this.menu.open();
283
- if (position.width) {
284
- this.menu.setOffset('left', position.width);
285
- }
358
+ (0, _object.objectEach)(offset, function (value, key) {
359
+ _this5.menu.setOffset(key, value);
360
+ });
286
361
  this.menu.setPosition(position);
287
362
  }
288
363
 
@@ -292,10 +367,8 @@ var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
292
367
  }, {
293
368
  key: "close",
294
369
  value: function close() {
295
- if (!this.menu) {
296
- return;
297
- }
298
- this.menu.close();
370
+ var _this$menu2;
371
+ (_this$menu2 = this.menu) === null || _this$menu2 === void 0 ? void 0 : _this$menu2.close();
299
372
  }
300
373
 
301
374
  /**
@@ -367,23 +440,14 @@ var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
367
440
  key: "onTableClick",
368
441
  value: function onTableClick(event) {
369
442
  event.stopPropagation();
370
- if ((0, _element.hasClass)(event.target, BUTTON_CLASS_NAME) && !this.menu.isOpened()) {
371
- var offsetTop = 0;
372
- var offsetLeft = 0;
373
- if (this.hot.rootDocument !== this.menu.container.ownerDocument) {
374
- var frameElement = this.hot.rootWindow.frameElement;
375
- var _frameElement$getBoun = frameElement.getBoundingClientRect(),
376
- top = _frameElement$getBoun.top,
377
- left = _frameElement$getBoun.left;
378
- offsetTop = top;
379
- offsetLeft = left;
380
- }
443
+ if ((0, _element.hasClass)(event.target, BUTTON_CLASS_NAME)) {
444
+ var offset = (0, _utils.getDocumentOffsetByElement)(this.menu.container, this.hot.rootDocument);
381
445
  var rect = event.target.getBoundingClientRect();
382
446
  this.open({
383
- left: rect.left + offsetLeft,
384
- top: rect.top + event.target.offsetHeight + 3 + offsetTop,
385
- width: rect.width,
386
- height: rect.height
447
+ left: rect.left + offset.left,
448
+ top: rect.top + event.target.offsetHeight + 3 + offset.top
449
+ }, {
450
+ left: rect.width
387
451
  });
388
452
  }
389
453
  }