handsontable 0.0.0-next-baf2fcf-20230809 → 0.0.0-next-be16baf-20230809

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

Potentially problematic release.


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

Files changed (299) hide show
  1. package/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
  2. package/3rdparty/walkontable/src/cell/coords.js +50 -11
  3. package/3rdparty/walkontable/src/cell/coords.mjs +50 -11
  4. package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
  5. package/3rdparty/walkontable/src/cell/range.js +38 -7
  6. package/3rdparty/walkontable/src/cell/range.mjs +38 -7
  7. package/3rdparty/walkontable/src/core/_base.js +9 -3
  8. package/3rdparty/walkontable/src/core/_base.mjs +9 -3
  9. package/3rdparty/walkontable/src/core/clone.js +2 -2
  10. package/3rdparty/walkontable/src/core/clone.mjs +2 -2
  11. package/3rdparty/walkontable/src/core/core.js +3 -2
  12. package/3rdparty/walkontable/src/core/core.mjs +3 -2
  13. package/3rdparty/walkontable/src/event.js +7 -7
  14. package/3rdparty/walkontable/src/event.mjs +7 -7
  15. package/3rdparty/walkontable/src/facade/core.js +2 -2
  16. package/3rdparty/walkontable/src/facade/core.mjs +2 -2
  17. package/3rdparty/walkontable/src/index.js +10 -2
  18. package/3rdparty/walkontable/src/index.mjs +2 -2
  19. package/3rdparty/walkontable/src/overlay/_base.js +1 -1
  20. package/3rdparty/walkontable/src/overlay/_base.mjs +1 -1
  21. package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -6
  22. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -6
  23. package/3rdparty/walkontable/src/overlay/top.js +2 -6
  24. package/3rdparty/walkontable/src/overlay/top.mjs +2 -6
  25. package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +7 -12
  26. package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
  27. package/3rdparty/walkontable/src/selection/border/constants.js +16 -0
  28. package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
  29. package/3rdparty/walkontable/src/selection/constants.js +62 -0
  30. package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
  31. package/3rdparty/walkontable/src/selection/index.js +26 -0
  32. package/3rdparty/walkontable/src/selection/index.mjs +5 -0
  33. package/3rdparty/walkontable/src/selection/manager.js +259 -0
  34. package/3rdparty/walkontable/src/selection/manager.mjs +254 -0
  35. package/3rdparty/walkontable/src/selection/scanner.js +270 -0
  36. package/3rdparty/walkontable/src/selection/scanner.mjs +267 -0
  37. package/3rdparty/walkontable/src/selection/selection.js +101 -0
  38. package/3rdparty/walkontable/src/selection/selection.mjs +96 -0
  39. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +9 -0
  40. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
  41. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +9 -0
  42. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
  43. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +9 -0
  44. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
  45. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +9 -0
  46. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
  47. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -0
  48. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
  49. package/3rdparty/walkontable/src/table.js +6 -78
  50. package/3rdparty/walkontable/src/table.mjs +7 -79
  51. package/base.js +2 -2
  52. package/base.mjs +2 -2
  53. package/common.d.ts +1 -1
  54. package/core/focusCatcher/focusDetector.js +58 -0
  55. package/core/focusCatcher/focusDetector.mjs +54 -0
  56. package/core/focusCatcher/index.js +142 -0
  57. package/core/focusCatcher/index.mjs +138 -0
  58. package/core/index.js +9 -0
  59. package/core/index.mjs +1 -0
  60. package/core.d.ts +6 -3
  61. package/core.js +176 -293
  62. package/core.mjs +176 -293
  63. package/dataMap/metaManager/metaSchema.js +41 -0
  64. package/dataMap/metaManager/metaSchema.mjs +41 -0
  65. package/dist/handsontable.css +24 -4
  66. package/dist/handsontable.full.css +24 -4
  67. package/dist/handsontable.full.js +8682 -5384
  68. package/dist/handsontable.full.min.css +3 -3
  69. package/dist/handsontable.full.min.js +25 -25
  70. package/dist/handsontable.js +10989 -7691
  71. package/dist/handsontable.min.css +3 -3
  72. package/dist/handsontable.min.js +19 -19
  73. package/editorManager.js +11 -75
  74. package/editorManager.mjs +11 -74
  75. package/editors/baseEditor/baseEditor.d.ts +0 -1
  76. package/editors/textEditor/textEditor.js +3 -11
  77. package/editors/textEditor/textEditor.mjs +4 -12
  78. package/helpers/mixed.js +1 -1
  79. package/helpers/mixed.mjs +1 -1
  80. package/helpers/number.d.ts +1 -0
  81. package/helpers/number.js +18 -0
  82. package/helpers/number.mjs +17 -0
  83. package/package.json +1 -1
  84. package/pluginHooks.d.ts +7 -1
  85. package/pluginHooks.js +106 -1
  86. package/pluginHooks.mjs +106 -1
  87. package/plugins/collapsibleColumns/collapsibleColumns.js +58 -4
  88. package/plugins/collapsibleColumns/collapsibleColumns.mjs +58 -4
  89. package/plugins/columnSorting/columnSorting.js +38 -0
  90. package/plugins/columnSorting/columnSorting.mjs +38 -2
  91. package/plugins/columnSorting/index.js +3 -1
  92. package/plugins/columnSorting/index.mjs +1 -1
  93. package/plugins/comments/commentEditor.js +1 -0
  94. package/plugins/comments/commentEditor.mjs +1 -0
  95. package/plugins/comments/comments.js +251 -189
  96. package/plugins/comments/comments.mjs +250 -190
  97. package/plugins/comments/contextMenuItem/addEditComment.js +41 -0
  98. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  99. package/plugins/comments/contextMenuItem/readOnlyComment.js +49 -0
  100. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +43 -0
  101. package/plugins/comments/contextMenuItem/removeComment.js +38 -0
  102. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  103. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  104. package/plugins/contextMenu/contextMenu.js +72 -30
  105. package/plugins/contextMenu/contextMenu.mjs +73 -31
  106. package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
  107. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  108. package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
  109. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  110. package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
  111. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  112. package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
  113. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  114. package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
  115. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  116. package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
  117. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  118. package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
  119. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  120. package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
  121. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  122. package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
  123. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  124. package/plugins/contextMenu/utils.js +28 -16
  125. package/plugins/contextMenu/utils.mjs +27 -15
  126. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  127. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  128. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  129. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  130. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  131. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  132. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  133. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  134. package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
  135. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  136. package/plugins/copyPaste/copyPaste.js +14 -10
  137. package/plugins/copyPaste/copyPaste.mjs +14 -10
  138. package/plugins/customBorders/customBorders.js +23 -20
  139. package/plugins/customBorders/customBorders.mjs +24 -21
  140. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  141. package/plugins/dropdownMenu/dropdownMenu.js +89 -32
  142. package/plugins/dropdownMenu/dropdownMenu.mjs +89 -32
  143. package/plugins/filters/filters.js +31 -14
  144. package/plugins/filters/filters.mjs +30 -13
  145. package/plugins/manualColumnResize/manualColumnResize.js +0 -6
  146. package/plugins/manualColumnResize/manualColumnResize.mjs +1 -7
  147. package/plugins/mergeCells/mergeCells.js +5 -17
  148. package/plugins/mergeCells/mergeCells.mjs +5 -17
  149. package/plugins/multiColumnSorting/multiColumnSorting.js +37 -2
  150. package/plugins/multiColumnSorting/multiColumnSorting.mjs +37 -2
  151. package/plugins/nestedHeaders/nestedHeaders.js +121 -8
  152. package/plugins/nestedHeaders/nestedHeaders.mjs +121 -8
  153. package/plugins/nestedHeaders/stateManager/index.js +37 -0
  154. package/plugins/nestedHeaders/stateManager/index.mjs +37 -0
  155. package/plugins/nestedRows/nestedRows.js +41 -0
  156. package/plugins/nestedRows/nestedRows.mjs +41 -0
  157. package/renderers/checkboxRenderer/checkboxRenderer.js +2 -2
  158. package/renderers/checkboxRenderer/checkboxRenderer.mjs +1 -1
  159. package/selection/highlight/highlight.js +256 -71
  160. package/selection/highlight/highlight.mjs +250 -71
  161. package/selection/highlight/types/activeHeader.js +10 -8
  162. package/selection/highlight/types/activeHeader.mjs +10 -8
  163. package/selection/highlight/types/area.js +6 -18
  164. package/selection/highlight/types/area.mjs +6 -18
  165. package/selection/highlight/types/areaLayered.js +31 -0
  166. package/selection/highlight/types/areaLayered.mjs +26 -0
  167. package/selection/highlight/types/column.js +27 -0
  168. package/selection/highlight/types/column.mjs +22 -0
  169. package/selection/highlight/types/customSelection.js +7 -9
  170. package/selection/highlight/types/customSelection.mjs +7 -9
  171. package/selection/highlight/types/fill.js +5 -7
  172. package/selection/highlight/types/fill.mjs +5 -7
  173. package/selection/highlight/types/{cell.js → focus.js} +5 -7
  174. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  175. package/selection/highlight/types/header.js +9 -18
  176. package/selection/highlight/types/header.mjs +9 -18
  177. package/selection/highlight/types/row.js +27 -0
  178. package/selection/highlight/types/row.mjs +22 -0
  179. package/selection/highlight/visualSelection.js +31 -27
  180. package/selection/highlight/visualSelection.mjs +31 -27
  181. package/selection/index.js +4 -7
  182. package/selection/index.mjs +2 -3
  183. package/selection/mouseEventHandler.js +1 -1
  184. package/selection/mouseEventHandler.mjs +1 -1
  185. package/selection/range.js +8 -8
  186. package/selection/range.mjs +8 -8
  187. package/selection/selection.js +293 -154
  188. package/selection/selection.mjs +290 -153
  189. package/selection/transformation.js +232 -90
  190. package/selection/transformation.mjs +232 -90
  191. package/selection/utils.js +15 -21
  192. package/selection/utils.mjs +16 -21
  193. package/settings.d.ts +2 -0
  194. package/shortcutContexts/commands/editor/closeAndSave.js +12 -0
  195. package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
  196. package/shortcutContexts/commands/editor/closeWithoutSaving.js +12 -0
  197. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  198. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  199. package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
  200. package/shortcutContexts/commands/editor/index.js +16 -0
  201. package/shortcutContexts/commands/editor/index.mjs +12 -0
  202. package/shortcutContexts/commands/editor/open.js +27 -0
  203. package/shortcutContexts/commands/editor/open.mjs +23 -0
  204. package/shortcutContexts/commands/emptySelectedCells.js +11 -0
  205. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  206. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  207. package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
  208. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +21 -0
  209. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +17 -0
  210. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  211. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  212. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  213. package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
  214. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  215. package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
  216. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  217. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
  218. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +29 -0
  219. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
  220. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +19 -0
  221. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
  222. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +19 -0
  223. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
  224. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +29 -0
  225. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
  226. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +29 -0
  227. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
  228. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +29 -0
  229. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
  230. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  231. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
  232. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  233. package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
  234. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +21 -0
  235. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +17 -0
  236. package/shortcutContexts/commands/index.js +35 -0
  237. package/shortcutContexts/commands/index.mjs +31 -0
  238. package/shortcutContexts/commands/moveCellSelection/down.js +13 -0
  239. package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
  240. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +31 -0
  241. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +27 -0
  242. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  243. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  244. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +12 -0
  245. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  246. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +12 -0
  247. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  248. package/shortcutContexts/commands/moveCellSelection/left.js +10 -0
  249. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  250. package/shortcutContexts/commands/moveCellSelection/right.js +10 -0
  251. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  252. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +17 -0
  253. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
  254. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +18 -0
  255. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
  256. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +14 -0
  257. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
  258. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +17 -0
  259. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
  260. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +19 -0
  261. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
  262. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +21 -0
  263. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
  264. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +17 -0
  265. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
  266. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +19 -0
  267. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
  268. package/shortcutContexts/commands/moveCellSelection/up.js +13 -0
  269. package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
  270. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +31 -0
  271. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +27 -0
  272. package/shortcutContexts/commands/populateSelectedCellsData.js +29 -0
  273. package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
  274. package/shortcutContexts/commands/scrollToFocusedCell.js +36 -0
  275. package/shortcutContexts/commands/scrollToFocusedCell.mjs +32 -0
  276. package/shortcutContexts/commands/selectAll.js +10 -0
  277. package/shortcutContexts/commands/selectAll.mjs +6 -0
  278. package/shortcutContexts/constants.js +13 -0
  279. package/shortcutContexts/constants.mjs +8 -0
  280. package/shortcutContexts/editor.js +25 -0
  281. package/shortcutContexts/editor.mjs +21 -0
  282. package/shortcutContexts/grid.js +163 -0
  283. package/shortcutContexts/grid.mjs +159 -0
  284. package/shortcutContexts/index.js +24 -0
  285. package/shortcutContexts/index.mjs +11 -0
  286. package/shortcuts/manager.js +2 -0
  287. package/shortcuts/manager.mjs +2 -0
  288. package/shortcuts/recorder.js +2 -2
  289. package/shortcuts/recorder.mjs +2 -2
  290. package/shortcuts/utils.js +19 -5
  291. package/shortcuts/utils.mjs +18 -4
  292. package/tableView.js +67 -13
  293. package/tableView.mjs +67 -13
  294. package/3rdparty/walkontable/src/selection.js +0 -295
  295. package/3rdparty/walkontable/src/selection.mjs +0 -290
  296. package/selection/highlight/constants.js +0 -15
  297. package/selection/highlight/constants.mjs +0 -6
  298. package/selection/highlight/types/index.js +0 -35
  299. package/selection/highlight/types/index.mjs +0 -31
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = addEditCommentItem;
5
+ var C = _interopRequireWildcard(require("../../../i18n/constants"));
6
+ 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
+ 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; }
8
+ /**
9
+ * @param {Comments} plugin The Comments plugin instance.
10
+ * @returns {object}
11
+ */
12
+ function addEditCommentItem(plugin) {
13
+ return {
14
+ key: 'commentsAddEdit',
15
+ name() {
16
+ var _this$getSelectedRang;
17
+ const highlight = (_this$getSelectedRang = this.getSelectedRangeLast()) === null || _this$getSelectedRang === void 0 ? void 0 : _this$getSelectedRang.highlight;
18
+ if (highlight && highlight.isCell() && plugin.getCommentAtCell(highlight.row, highlight.col)) {
19
+ return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_EDIT_COMMENT);
20
+ }
21
+ return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ADD_COMMENT);
22
+ },
23
+ callback() {
24
+ const range = this.getSelectedRangeLast();
25
+ this.deselectCell();
26
+ plugin.setRange(range);
27
+ plugin.show();
28
+ plugin.focusEditor();
29
+ },
30
+ disabled() {
31
+ const range = this.getSelectedRangeLast();
32
+ if (!range) {
33
+ return true;
34
+ }
35
+ if (range.highlight.isHeader()) {
36
+ return true;
37
+ }
38
+ return this.countRenderedRows() === 0 || this.countRenderedCols() === 0;
39
+ }
40
+ };
41
+ }
@@ -0,0 +1,35 @@
1
+ import * as C from "../../../i18n/constants.mjs";
2
+ /**
3
+ * @param {Comments} plugin The Comments plugin instance.
4
+ * @returns {object}
5
+ */
6
+ export default function addEditCommentItem(plugin) {
7
+ return {
8
+ key: 'commentsAddEdit',
9
+ name() {
10
+ var _this$getSelectedRang;
11
+ const highlight = (_this$getSelectedRang = this.getSelectedRangeLast()) === null || _this$getSelectedRang === void 0 ? void 0 : _this$getSelectedRang.highlight;
12
+ if (highlight && highlight.isCell() && plugin.getCommentAtCell(highlight.row, highlight.col)) {
13
+ return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_EDIT_COMMENT);
14
+ }
15
+ return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ADD_COMMENT);
16
+ },
17
+ callback() {
18
+ const range = this.getSelectedRangeLast();
19
+ this.deselectCell();
20
+ plugin.setRange(range);
21
+ plugin.show();
22
+ plugin.focusEditor();
23
+ },
24
+ disabled() {
25
+ const range = this.getSelectedRangeLast();
26
+ if (!range) {
27
+ return true;
28
+ }
29
+ if (range.highlight.isHeader()) {
30
+ return true;
31
+ }
32
+ return this.countRenderedRows() === 0 || this.countRenderedCols() === 0;
33
+ }
34
+ };
35
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = readOnlyCommentItem;
5
+ var C = _interopRequireWildcard(require("../../../i18n/constants"));
6
+ var _utils = require("../../contextMenu/utils");
7
+ var _comments = require("../comments");
8
+ 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); }
9
+ 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; }
10
+ /**
11
+ * @param {Comments} plugin The Comments plugin instance.
12
+ * @returns {object}
13
+ */
14
+ function readOnlyCommentItem(plugin) {
15
+ return {
16
+ key: 'commentsReadOnly',
17
+ name() {
18
+ const label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT);
19
+ const areReadOnly = (0, _utils.checkSelectionConsistency)(this.getSelectedRange(), (row, col) => {
20
+ return plugin.getCommentMeta(row, col, _comments.META_READONLY);
21
+ });
22
+ return areReadOnly ? (0, _utils.markLabelAsSelected)(label) : label;
23
+ },
24
+ callback() {
25
+ const range = this.getSelectedRangeLast();
26
+ range.forAll((row, column) => {
27
+ if (row >= 0 && column >= 0) {
28
+ const currentState = !!plugin.getCommentMeta(row, column, _comments.META_READONLY);
29
+ plugin.updateCommentMeta(row, column, {
30
+ [_comments.META_READONLY]: !currentState
31
+ });
32
+ }
33
+ });
34
+ },
35
+ disabled() {
36
+ const range = this.getSelectedRangeLast();
37
+ if (!range) {
38
+ return true;
39
+ }
40
+ if (range.highlight.isHeader()) {
41
+ return true;
42
+ }
43
+ if (!plugin.getCommentAtCell(range.highlight.row, range.highlight.col)) {
44
+ return true;
45
+ }
46
+ return this.countRenderedRows() === 0 || this.countRenderedCols() === 0;
47
+ }
48
+ };
49
+ }
@@ -0,0 +1,43 @@
1
+ import * as C from "../../../i18n/constants.mjs";
2
+ import { checkSelectionConsistency, markLabelAsSelected } from "../../contextMenu/utils.mjs";
3
+ import { META_READONLY } from "../comments.mjs";
4
+ /**
5
+ * @param {Comments} plugin The Comments plugin instance.
6
+ * @returns {object}
7
+ */
8
+ export default function readOnlyCommentItem(plugin) {
9
+ return {
10
+ key: 'commentsReadOnly',
11
+ name() {
12
+ const label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT);
13
+ const areReadOnly = checkSelectionConsistency(this.getSelectedRange(), (row, col) => {
14
+ return plugin.getCommentMeta(row, col, META_READONLY);
15
+ });
16
+ return areReadOnly ? markLabelAsSelected(label) : label;
17
+ },
18
+ callback() {
19
+ const range = this.getSelectedRangeLast();
20
+ range.forAll((row, column) => {
21
+ if (row >= 0 && column >= 0) {
22
+ const currentState = !!plugin.getCommentMeta(row, column, META_READONLY);
23
+ plugin.updateCommentMeta(row, column, {
24
+ [META_READONLY]: !currentState
25
+ });
26
+ }
27
+ });
28
+ },
29
+ disabled() {
30
+ const range = this.getSelectedRangeLast();
31
+ if (!range) {
32
+ return true;
33
+ }
34
+ if (range.highlight.isHeader()) {
35
+ return true;
36
+ }
37
+ if (!plugin.getCommentAtCell(range.highlight.row, range.highlight.col)) {
38
+ return true;
39
+ }
40
+ return this.countRenderedRows() === 0 || this.countRenderedCols() === 0;
41
+ }
42
+ };
43
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = removeCommentItem;
5
+ var C = _interopRequireWildcard(require("../../../i18n/constants"));
6
+ 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
+ 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; }
8
+ /**
9
+ * @param {Comments} plugin The Comments plugin instance.
10
+ * @returns {object}
11
+ */
12
+ function removeCommentItem(plugin) {
13
+ return {
14
+ key: 'commentsRemove',
15
+ name() {
16
+ return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_COMMENT);
17
+ },
18
+ callback() {
19
+ const range = this.getSelectedRangeLast();
20
+ range.forAll((row, column) => {
21
+ if (row >= 0 && column >= 0) {
22
+ plugin.removeCommentAtCell(row, column, false);
23
+ }
24
+ });
25
+ this.render();
26
+ },
27
+ disabled() {
28
+ const range = this.getSelectedRangeLast();
29
+ if (!range) {
30
+ return true;
31
+ }
32
+ if (range.highlight.isHeader()) {
33
+ return true;
34
+ }
35
+ return this.countRenderedRows() === 0 || this.countRenderedCols() === 0;
36
+ }
37
+ };
38
+ }
@@ -0,0 +1,32 @@
1
+ import * as C from "../../../i18n/constants.mjs";
2
+ /**
3
+ * @param {Comments} plugin The Comments plugin instance.
4
+ * @returns {object}
5
+ */
6
+ export default function removeCommentItem(plugin) {
7
+ return {
8
+ key: 'commentsRemove',
9
+ name() {
10
+ return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_COMMENT);
11
+ },
12
+ callback() {
13
+ const range = this.getSelectedRangeLast();
14
+ range.forAll((row, column) => {
15
+ if (row >= 0 && column >= 0) {
16
+ plugin.removeCommentAtCell(row, column, false);
17
+ }
18
+ });
19
+ this.render();
20
+ },
21
+ disabled() {
22
+ const range = this.getSelectedRangeLast();
23
+ if (!range) {
24
+ return true;
25
+ }
26
+ if (range.highlight.isHeader()) {
27
+ return true;
28
+ }
29
+ return this.countRenderedRows() === 0 || this.countRenderedCols() === 0;
30
+ }
31
+ };
32
+ }
@@ -60,7 +60,7 @@ export class ContextMenu extends BasePlugin {
60
60
 
61
61
  constructor(hotInstance: Core);
62
62
  isEnabled(): boolean;
63
- open(event: Event): void;
63
+ open(position: { left: number, top: number } | Event, offset?: { above?: number, below?: number, left?: number, right?: number }): void;
64
64
  close(): void;
65
65
  executeCommand(commandName: string, ...params: any): void;
66
66
  }
@@ -4,10 +4,12 @@ exports.__esModule = true;
4
4
  var _base = require("../base");
5
5
  var _pluginHooks = _interopRequireDefault(require("../../pluginHooks"));
6
6
  var _array = require("../../helpers/array");
7
+ var _object = require("../../helpers/object");
7
8
  var _commandExecutor = _interopRequireDefault(require("./commandExecutor"));
8
9
  var _eventManager = _interopRequireDefault(require("../../eventManager"));
9
10
  var _itemsFactory = _interopRequireDefault(require("./itemsFactory"));
10
11
  var _menu = _interopRequireDefault(require("./menu"));
12
+ var _utils = require("./utils");
11
13
  var _element = require("../../helpers/dom/element");
12
14
  var _predefinedItems = require("./predefinedItems");
13
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -15,6 +17,7 @@ const PLUGIN_KEY = 'contextMenu';
15
17
  exports.PLUGIN_KEY = PLUGIN_KEY;
16
18
  const PLUGIN_PRIORITY = 70;
17
19
  exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
20
+ const SHORTCUTS_GROUP = PLUGIN_KEY;
18
21
  _pluginHooks.default.getSingleton().register('afterContextMenuDefaultOptions');
19
22
  _pluginHooks.default.getSingleton().register('beforeContextMenuShow');
20
23
  _pluginHooks.default.getSingleton().register('afterContextMenuShow');
@@ -137,6 +140,7 @@ class ContextMenu extends _base.BasePlugin {
137
140
  return _this.executeCommand.call(_this, ...params);
138
141
  });
139
142
  this.addHook('afterOnCellContextMenu', event => this.onAfterOnCellContextMenu(event));
143
+ this.registerShortcuts();
140
144
  super.enablePlugin();
141
145
  }
142
146
 
@@ -149,6 +153,7 @@ class ContextMenu extends _base.BasePlugin {
149
153
  updatePlugin() {
150
154
  this.disablePlugin();
151
155
  this.enablePlugin();
156
+ this.unregisterShortcuts();
152
157
  super.updatePlugin();
153
158
  }
154
159
 
@@ -164,50 +169,83 @@ class ContextMenu extends _base.BasePlugin {
164
169
  super.disablePlugin();
165
170
  }
166
171
 
172
+ /**
173
+ * Register shortcuts responsible for toggling context menu.
174
+ *
175
+ * @private
176
+ */
177
+ registerShortcuts() {
178
+ this.hot.getShortcutManager().getContext('grid').addShortcut({
179
+ keys: [['Control/Meta', 'Shift', '\\'], ['Shift', 'F10']],
180
+ callback: () => {
181
+ const {
182
+ highlight
183
+ } = this.hot.getSelectedRangeLast();
184
+ this.hot.scrollToFocusedCell();
185
+ const rect = this.hot.getCell(highlight.row, highlight.col, true).getBoundingClientRect();
186
+ const offset = (0, _utils.getDocumentOffsetByElement)(this.menu.container, this.hot.rootDocument);
187
+ this.open({
188
+ left: rect.left + offset.left,
189
+ top: rect.top + offset.top - 1 + rect.height
190
+ }, {
191
+ left: rect.width,
192
+ above: -rect.height
193
+ });
194
+ this.hot._registerTimeout(() => {
195
+ this.menu.selectFirstCell();
196
+ });
197
+ },
198
+ runOnlyIf: () => this.hot.getSelectedRangeLast() && !this.menu.isOpened(),
199
+ group: SHORTCUTS_GROUP
200
+ });
201
+ }
202
+
203
+ /**
204
+ * Unregister shortcuts responsible for toggling context menu.
205
+ *
206
+ * @private
207
+ */
208
+ unregisterShortcuts() {
209
+ this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
210
+ }
211
+
167
212
  /**
168
213
  * Opens menu and re-position it based on the passed coordinates.
169
214
  *
170
- * @param {Event} event The mouse event object.
215
+ * @param {{ top: number, left: number }|Event} position An object with `top` and `left` properties
216
+ * which contains coordinates relative to the browsers viewport (without included scroll offsets).
217
+ * Or if the native event is passed the menu will be positioned based on the `pageX` and `pageY`
218
+ * coordinates.
219
+ * @param {{ above: number, below: number, left: number, right: number }} offset An object allows applying
220
+ * the offset to the menu position.
221
+ * @fires Hooks#beforeContextMenuShow
222
+ * @fires Hooks#afterContextMenuShow
171
223
  */
172
- open(event) {
173
- if (!this.menu) {
224
+ open(position) {
225
+ var _this$menu;
226
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
227
+ above: 0,
228
+ below: 0,
229
+ left: 0,
230
+ right: 0
231
+ };
232
+ if ((_this$menu = this.menu) !== null && _this$menu !== void 0 && _this$menu.isOpened()) {
174
233
  return;
175
234
  }
176
235
  this.prepareMenuItems();
177
236
  this.menu.open();
178
- if (!this.menu.isOpened()) {
179
- return;
180
- }
181
- let offsetTop = 0;
182
- let offsetLeft = 0;
183
- if (this.hot.rootDocument !== this.menu.container.ownerDocument) {
184
- const {
185
- frameElement
186
- } = this.hot.rootWindow;
187
- const {
188
- top,
189
- left
190
- } = frameElement.getBoundingClientRect();
191
- offsetTop = top - (0, _element.getWindowScrollTop)(event.view);
192
- offsetLeft = left - (0, _element.getWindowScrollLeft)(event.view);
193
- } else {
194
- offsetTop = -1 * (0, _element.getWindowScrollTop)(this.menu.hotMenu.rootWindow);
195
- offsetLeft = -1 * (0, _element.getWindowScrollLeft)(this.menu.hotMenu.rootWindow);
196
- }
197
- this.menu.setPosition({
198
- top: parseInt(event.pageY, 10) + offsetTop,
199
- left: parseInt(event.pageX, 10) + offsetLeft
237
+ (0, _object.objectEach)(offset, (value, key) => {
238
+ this.menu.setOffset(key, value);
200
239
  });
240
+ this.menu.setPosition(position);
201
241
  }
202
242
 
203
243
  /**
204
244
  * Closes the menu.
205
245
  */
206
246
  close() {
207
- if (!this.menu) {
208
- return;
209
- }
210
- this.menu.close();
247
+ var _this$menu2;
248
+ (_this$menu2 = this.menu) === null || _this$menu2 === void 0 ? void 0 : _this$menu2.close();
211
249
  this.itemsFactory = null;
212
250
  }
213
251
 
@@ -305,7 +343,11 @@ class ContextMenu extends _base.BasePlugin {
305
343
  return;
306
344
  }
307
345
  }
308
- this.open(event);
346
+ const offset = (0, _utils.getDocumentOffsetByElement)(this.menu.container, this.hot.rootDocument);
347
+ this.open({
348
+ top: event.clientY + offset.top,
349
+ left: event.clientX + offset.left
350
+ });
309
351
  }
310
352
 
311
353
  /**
@@ -1,14 +1,17 @@
1
1
  import { BasePlugin } from "../base/index.mjs";
2
2
  import Hooks from "../../pluginHooks.mjs";
3
3
  import { arrayEach } from "../../helpers/array.mjs";
4
+ import { objectEach } from "../../helpers/object.mjs";
4
5
  import CommandExecutor from "./commandExecutor.mjs";
5
6
  import EventManager from "../../eventManager.mjs";
6
7
  import ItemsFactory from "./itemsFactory.mjs";
7
8
  import Menu from "./menu.mjs";
8
- import { getWindowScrollLeft, getWindowScrollTop, hasClass } from "../../helpers/dom/element.mjs";
9
+ import { getDocumentOffsetByElement } from "./utils.mjs";
10
+ import { hasClass } from "../../helpers/dom/element.mjs";
9
11
  import { ROW_ABOVE, ROW_BELOW, COLUMN_LEFT, COLUMN_RIGHT, REMOVE_ROW, REMOVE_COLUMN, UNDO, REDO, READ_ONLY, ALIGNMENT, SEPARATOR } from "./predefinedItems.mjs";
10
12
  export const PLUGIN_KEY = 'contextMenu';
11
13
  export const PLUGIN_PRIORITY = 70;
14
+ const SHORTCUTS_GROUP = PLUGIN_KEY;
12
15
  Hooks.getSingleton().register('afterContextMenuDefaultOptions');
13
16
  Hooks.getSingleton().register('beforeContextMenuShow');
14
17
  Hooks.getSingleton().register('afterContextMenuShow');
@@ -131,6 +134,7 @@ export class ContextMenu extends BasePlugin {
131
134
  return _this.executeCommand.call(_this, ...params);
132
135
  });
133
136
  this.addHook('afterOnCellContextMenu', event => this.onAfterOnCellContextMenu(event));
137
+ this.registerShortcuts();
134
138
  super.enablePlugin();
135
139
  }
136
140
 
@@ -143,6 +147,7 @@ export class ContextMenu extends BasePlugin {
143
147
  updatePlugin() {
144
148
  this.disablePlugin();
145
149
  this.enablePlugin();
150
+ this.unregisterShortcuts();
146
151
  super.updatePlugin();
147
152
  }
148
153
 
@@ -158,50 +163,83 @@ export class ContextMenu extends BasePlugin {
158
163
  super.disablePlugin();
159
164
  }
160
165
 
166
+ /**
167
+ * Register shortcuts responsible for toggling context menu.
168
+ *
169
+ * @private
170
+ */
171
+ registerShortcuts() {
172
+ this.hot.getShortcutManager().getContext('grid').addShortcut({
173
+ keys: [['Control/Meta', 'Shift', '\\'], ['Shift', 'F10']],
174
+ callback: () => {
175
+ const {
176
+ highlight
177
+ } = this.hot.getSelectedRangeLast();
178
+ this.hot.scrollToFocusedCell();
179
+ const rect = this.hot.getCell(highlight.row, highlight.col, true).getBoundingClientRect();
180
+ const offset = getDocumentOffsetByElement(this.menu.container, this.hot.rootDocument);
181
+ this.open({
182
+ left: rect.left + offset.left,
183
+ top: rect.top + offset.top - 1 + rect.height
184
+ }, {
185
+ left: rect.width,
186
+ above: -rect.height
187
+ });
188
+ this.hot._registerTimeout(() => {
189
+ this.menu.selectFirstCell();
190
+ });
191
+ },
192
+ runOnlyIf: () => this.hot.getSelectedRangeLast() && !this.menu.isOpened(),
193
+ group: SHORTCUTS_GROUP
194
+ });
195
+ }
196
+
197
+ /**
198
+ * Unregister shortcuts responsible for toggling context menu.
199
+ *
200
+ * @private
201
+ */
202
+ unregisterShortcuts() {
203
+ this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
204
+ }
205
+
161
206
  /**
162
207
  * Opens menu and re-position it based on the passed coordinates.
163
208
  *
164
- * @param {Event} event The mouse event object.
209
+ * @param {{ top: number, left: number }|Event} position An object with `top` and `left` properties
210
+ * which contains coordinates relative to the browsers viewport (without included scroll offsets).
211
+ * Or if the native event is passed the menu will be positioned based on the `pageX` and `pageY`
212
+ * coordinates.
213
+ * @param {{ above: number, below: number, left: number, right: number }} offset An object allows applying
214
+ * the offset to the menu position.
215
+ * @fires Hooks#beforeContextMenuShow
216
+ * @fires Hooks#afterContextMenuShow
165
217
  */
166
- open(event) {
167
- if (!this.menu) {
218
+ open(position) {
219
+ var _this$menu;
220
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
221
+ above: 0,
222
+ below: 0,
223
+ left: 0,
224
+ right: 0
225
+ };
226
+ if ((_this$menu = this.menu) !== null && _this$menu !== void 0 && _this$menu.isOpened()) {
168
227
  return;
169
228
  }
170
229
  this.prepareMenuItems();
171
230
  this.menu.open();
172
- if (!this.menu.isOpened()) {
173
- return;
174
- }
175
- let offsetTop = 0;
176
- let offsetLeft = 0;
177
- if (this.hot.rootDocument !== this.menu.container.ownerDocument) {
178
- const {
179
- frameElement
180
- } = this.hot.rootWindow;
181
- const {
182
- top,
183
- left
184
- } = frameElement.getBoundingClientRect();
185
- offsetTop = top - getWindowScrollTop(event.view);
186
- offsetLeft = left - getWindowScrollLeft(event.view);
187
- } else {
188
- offsetTop = -1 * getWindowScrollTop(this.menu.hotMenu.rootWindow);
189
- offsetLeft = -1 * getWindowScrollLeft(this.menu.hotMenu.rootWindow);
190
- }
191
- this.menu.setPosition({
192
- top: parseInt(event.pageY, 10) + offsetTop,
193
- left: parseInt(event.pageX, 10) + offsetLeft
231
+ objectEach(offset, (value, key) => {
232
+ this.menu.setOffset(key, value);
194
233
  });
234
+ this.menu.setPosition(position);
195
235
  }
196
236
 
197
237
  /**
198
238
  * Closes the menu.
199
239
  */
200
240
  close() {
201
- if (!this.menu) {
202
- return;
203
- }
204
- this.menu.close();
241
+ var _this$menu2;
242
+ (_this$menu2 = this.menu) === null || _this$menu2 === void 0 ? void 0 : _this$menu2.close();
205
243
  this.itemsFactory = null;
206
244
  }
207
245
 
@@ -299,7 +337,11 @@ export class ContextMenu extends BasePlugin {
299
337
  return;
300
338
  }
301
339
  }
302
- this.open(event);
340
+ const offset = getDocumentOffsetByElement(this.menu.container, this.hot.rootDocument);
341
+ this.open({
342
+ top: event.clientY + offset.top,
343
+ left: event.clientX + offset.left
344
+ });
303
345
  }
304
346
 
305
347
  /**
@@ -23,6 +23,13 @@ function alignmentItem() {
23
23
  if (this.countRows() === 0 || this.countCols() === 0) {
24
24
  return true;
25
25
  }
26
+ const range = this.getSelectedRangeLast();
27
+ if (!range) {
28
+ return true;
29
+ }
30
+ if (range.isSingleHeader()) {
31
+ return true;
32
+ }
26
33
  return !(this.getSelectedRange() && !this.selection.isSelectedByCorner());
27
34
  },
28
35
  submenu: {
@@ -16,6 +16,13 @@ export default function alignmentItem() {
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
+ }
19
26
  return !(this.getSelectedRange() && !this.selection.isSelectedByCorner());
20
27
  },
21
28
  submenu: {
@@ -2,7 +2,6 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
  exports.default = clearColumnItem;
5
- var _utils = require("../utils");
6
5
  var C = _interopRequireWildcard(require("../../../i18n/constants"));
7
6
  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); }
8
7
  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; }
@@ -26,8 +25,11 @@ function clearColumnItem() {
26
25
  }
27
26
  },
28
27
  disabled() {
29
- const selected = (0, _utils.getValidSelection)(this);
30
- if (!selected) {
28
+ const range = this.getSelectedRangeLast();
29
+ if (!range) {
30
+ return true;
31
+ }
32
+ if (range.isSingleHeader() && range.highlight.col < 0) {
31
33
  return true;
32
34
  }
33
35
  return !this.selection.isSelectedByColumnHeader();
@@ -1,4 +1,3 @@
1
- import { getValidSelection } from "../utils.mjs";
2
1
  import * as C from "../../../i18n/constants.mjs";
3
2
  export const KEY = 'clear_column';
4
3
 
@@ -19,8 +18,11 @@ export default function clearColumnItem() {
19
18
  }
20
19
  },
21
20
  disabled() {
22
- const selected = getValidSelection(this);
23
- if (!selected) {
21
+ const range = this.getSelectedRangeLast();
22
+ if (!range) {
23
+ return true;
24
+ }
25
+ if (range.isSingleHeader() && range.highlight.col < 0) {
24
26
  return true;
25
27
  }
26
28
  return !this.selection.isSelectedByColumnHeader();
@@ -2,7 +2,6 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
  exports.default = columnLeftItem;
5
- var _utils = require("../utils");
6
5
  var C = _interopRequireWildcard(require("../../../i18n/constants"));
7
6
  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); }
8
7
  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; }
@@ -27,8 +26,11 @@ function columnLeftItem() {
27
26
  if (!this.isColumnModificationAllowed()) {
28
27
  return true;
29
28
  }
30
- const selected = (0, _utils.getValidSelection)(this);
31
- if (!selected) {
29
+ const range = this.getSelectedRangeLast();
30
+ if (!range) {
31
+ return true;
32
+ }
33
+ if (range.isSingleHeader() && range.highlight.col < 0) {
32
34
  return true;
33
35
  }
34
36
  if (this.selection.isSelectedByCorner()) {