handsontable 0.0.0-next-baf2fcf-20230809 → 0.0.0-next-08765b9-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 +173 -290
  62. package/core.mjs +173 -290
  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 +8676 -5381
  68. package/dist/handsontable.full.min.css +3 -3
  69. package/dist/handsontable.full.min.js +25 -25
  70. package/dist/handsontable.js +10984 -7689
  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 +290 -154
  188. package/selection/selection.mjs +287 -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
@@ -168,10 +168,10 @@ class CopyPaste extends _base.BasePlugin {
168
168
  * Defines the data range to copy. Possible values:
169
169
  * * `'cells-only'` Copy selected cells only;
170
170
  * * `'column-headers-only'` Copy column headers only;
171
- * * `'with-column-group-headers'` Copy cells with all column headers;
171
+ * * `'with-all-column-headers'` Copy cells with all column headers;
172
172
  * * `'with-column-headers'` Copy cells with column headers;
173
173
  *
174
- * @type {'cells-only' | 'column-headers-only' | 'with-column-group-headers' | 'with-column-headers'}
174
+ * @type {'cells-only' | 'column-headers-only' | 'with-all-column-headers' | 'with-column-headers'}
175
175
  */
176
176
  _classPrivateFieldInitSpec(this, _copyMode, {
177
177
  writable: true,
@@ -306,12 +306,12 @@ class CopyPaste extends _base.BasePlugin {
306
306
  *
307
307
  * Takes an optional parameter (`copyMode`) that defines the scope of copying:
308
308
  *
309
- * | `copyMode` value | Description |
310
- * | ----------------------------- | --------------------------------------------------------------- |
311
- * | `'cells-only'` (default) | Copy the selected cells |
312
- * | `'with-column-headers'` | - Copy the selected cells<br>- Copy the nearest column headers |
313
- * | `'with-column-group-headers'` | - Copy the selected cells<br>- Copy all related columns headers |
314
- * | `'column-headers-only'` | Copy the nearest column headers (without copying cells) |
309
+ * | `copyMode` value | Description |
310
+ * | --------------------------- | --------------------------------------------------------------- |
311
+ * | `'cells-only'` (default) | Copy the selected cells |
312
+ * | `'with-column-headers'` | - Copy the selected cells<br>- Copy the nearest column headers |
313
+ * | `'with-all-column-headers'` | - Copy the selected cells<br>- Copy all related columns headers |
314
+ * | `'column-headers-only'` | Copy the nearest column headers (without copying cells) |
315
315
  *
316
316
  * @param {string} [copyMode='cells-only'] Copy mode.
317
317
  */
@@ -431,6 +431,10 @@ class CopyPaste extends _base.BasePlugin {
431
431
  if (!selectionRange) {
432
432
  return;
433
433
  }
434
+ if (selectionRange.isSingleHeader()) {
435
+ this.copyableRanges = [];
436
+ return;
437
+ }
434
438
  _classPrivateFieldGet(this, _copyableRangesFactory).setSelectedRange(selectionRange);
435
439
  const groupedRanges = new Map([['headers', null], ['cells', null]]);
436
440
  if (_classPrivateFieldGet(this, _copyMode) === 'column-headers-only') {
@@ -627,7 +631,7 @@ class CopyPaste extends _base.BasePlugin {
627
631
  * @private
628
632
  */
629
633
  onPaste(event) {
630
- if (!this.hot.isListening() || this.isEditorOpened()) {
634
+ if (!this.hot.isListening() || this.isEditorOpened() || !this.hot.getSelected()) {
631
635
  return;
632
636
  }
633
637
  if (event && event.preventDefault) {
@@ -652,7 +656,7 @@ class CopyPaste extends _base.BasePlugin {
652
656
  if (typeof pastedData === 'string') {
653
657
  pastedData = (0, _SheetClip.parse)(pastedData);
654
658
  }
655
- if (pastedData && pastedData.length === 0) {
659
+ if (pastedData === void 0 || pastedData && pastedData.length === 0) {
656
660
  return;
657
661
  }
658
662
  if (this.hot.runHooks('beforePaste', pastedData, this.copyableRanges) === false) {
@@ -162,10 +162,10 @@ export class CopyPaste extends BasePlugin {
162
162
  * Defines the data range to copy. Possible values:
163
163
  * * `'cells-only'` Copy selected cells only;
164
164
  * * `'column-headers-only'` Copy column headers only;
165
- * * `'with-column-group-headers'` Copy cells with all column headers;
165
+ * * `'with-all-column-headers'` Copy cells with all column headers;
166
166
  * * `'with-column-headers'` Copy cells with column headers;
167
167
  *
168
- * @type {'cells-only' | 'column-headers-only' | 'with-column-group-headers' | 'with-column-headers'}
168
+ * @type {'cells-only' | 'column-headers-only' | 'with-all-column-headers' | 'with-column-headers'}
169
169
  */
170
170
  _classPrivateFieldInitSpec(this, _copyMode, {
171
171
  writable: true,
@@ -300,12 +300,12 @@ export class CopyPaste extends BasePlugin {
300
300
  *
301
301
  * Takes an optional parameter (`copyMode`) that defines the scope of copying:
302
302
  *
303
- * | `copyMode` value | Description |
304
- * | ----------------------------- | --------------------------------------------------------------- |
305
- * | `'cells-only'` (default) | Copy the selected cells |
306
- * | `'with-column-headers'` | - Copy the selected cells<br>- Copy the nearest column headers |
307
- * | `'with-column-group-headers'` | - Copy the selected cells<br>- Copy all related columns headers |
308
- * | `'column-headers-only'` | Copy the nearest column headers (without copying cells) |
303
+ * | `copyMode` value | Description |
304
+ * | --------------------------- | --------------------------------------------------------------- |
305
+ * | `'cells-only'` (default) | Copy the selected cells |
306
+ * | `'with-column-headers'` | - Copy the selected cells<br>- Copy the nearest column headers |
307
+ * | `'with-all-column-headers'` | - Copy the selected cells<br>- Copy all related columns headers |
308
+ * | `'column-headers-only'` | Copy the nearest column headers (without copying cells) |
309
309
  *
310
310
  * @param {string} [copyMode='cells-only'] Copy mode.
311
311
  */
@@ -425,6 +425,10 @@ export class CopyPaste extends BasePlugin {
425
425
  if (!selectionRange) {
426
426
  return;
427
427
  }
428
+ if (selectionRange.isSingleHeader()) {
429
+ this.copyableRanges = [];
430
+ return;
431
+ }
428
432
  _classPrivateFieldGet(this, _copyableRangesFactory).setSelectedRange(selectionRange);
429
433
  const groupedRanges = new Map([['headers', null], ['cells', null]]);
430
434
  if (_classPrivateFieldGet(this, _copyMode) === 'column-headers-only') {
@@ -621,7 +625,7 @@ export class CopyPaste extends BasePlugin {
621
625
  * @private
622
626
  */
623
627
  onPaste(event) {
624
- if (!this.hot.isListening() || this.isEditorOpened()) {
628
+ if (!this.hot.isListening() || this.isEditorOpened() || !this.hot.getSelected()) {
625
629
  return;
626
630
  }
627
631
  if (event && event.preventDefault) {
@@ -646,7 +650,7 @@ export class CopyPaste extends BasePlugin {
646
650
  if (typeof pastedData === 'string') {
647
651
  pastedData = parse(pastedData);
648
652
  }
649
- if (pastedData && pastedData.length === 0) {
653
+ if (pastedData === void 0 || pastedData && pastedData.length === 0) {
650
654
  return;
651
655
  }
652
656
  if (this.hot.runHooks('beforePaste', pastedData, this.copyableRanges) === false) {
@@ -167,14 +167,11 @@ class CustomBorders extends _base.BasePlugin {
167
167
  const selectionType = (0, _selection.detectSelectionType)(selectionRanges);
168
168
  const selectionSchemaNormalizer = (0, _selection.normalizeSelectionFactory)(selectionType);
169
169
  (0, _array.arrayEach)(selectionRanges, selection => {
170
- const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);
171
- for (let row = rowStart; row <= rowEnd; row += 1) {
172
- for (let col = columnStart; col <= columnEnd; col += 1) {
173
- (0, _array.arrayEach)(borderKeys, borderKey => {
174
- this.prepareBorderFromCustomAdded(row, col, normBorder, (0, _utils.toInlinePropName)(borderKey));
175
- });
176
- }
177
- }
170
+ selectionSchemaNormalizer(selection).forAll((row, col) => {
171
+ (0, _array.arrayEach)(borderKeys, borderKey => {
172
+ this.prepareBorderFromCustomAdded(row, col, normBorder, (0, _utils.toInlinePropName)(borderKey));
173
+ });
174
+ });
178
175
  });
179
176
 
180
177
  /*
@@ -214,16 +211,13 @@ class CustomBorders extends _base.BasePlugin {
214
211
  const selectionSchemaNormalizer = (0, _selection.normalizeSelectionFactory)(selectionType);
215
212
  const selectedBorders = [];
216
213
  (0, _array.arrayEach)(selectionRanges, selection => {
217
- const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);
218
- for (let row = rowStart; row <= rowEnd; row += 1) {
219
- for (let col = columnStart; col <= columnEnd; col += 1) {
220
- (0, _array.arrayEach)(this.savedBorders, border => {
221
- if (border.row === row && border.col === col) {
222
- selectedBorders.push((0, _utils.denormalizeBorder)(border));
223
- }
224
- });
225
- }
226
- }
214
+ selectionSchemaNormalizer(selection).forAll((row, col) => {
215
+ (0, _array.arrayEach)(this.savedBorders, border => {
216
+ if (border.row === row && border.col === col) {
217
+ selectedBorders.push((0, _utils.denormalizeBorder)(border));
218
+ }
219
+ });
220
+ });
227
221
  });
228
222
  return selectedBorders;
229
223
  }
@@ -614,7 +608,8 @@ class CustomBorders extends _base.BasePlugin {
614
608
  let check = false;
615
609
  (0, _array.arrayEach)(this.hot.selection.highlight.customSelections, customSelection => {
616
610
  if (border.id === customSelection.settings.id) {
617
- (0, _object.objectEach)(customSelection.instanceBorders, borderObject => {
611
+ const borders = this.hot.view._wt.selectionManager.getBorderInstances(customSelection);
612
+ (0, _array.arrayEach)(borders, borderObject => {
618
613
  borderObject.toggleHiddenClass(place, remove); // TODO this also bad?
619
614
  });
620
615
 
@@ -648,7 +643,8 @@ class CustomBorders extends _base.BasePlugin {
648
643
  customSelection.visualCellRange = cellRange;
649
644
  customSelection.commit();
650
645
  if (place) {
651
- (0, _object.objectEach)(customSelection.instanceBorders, borderObject => {
646
+ const borders = this.hot.view._wt.selectionManager.getBorderInstances(customSelection);
647
+ (0, _array.arrayEach)(borders, borderObject => {
652
648
  borderObject.changeBorderStyle(place, border);
653
649
  });
654
650
  }
@@ -716,6 +712,13 @@ class CustomBorders extends _base.BasePlugin {
716
712
  return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS);
717
713
  },
718
714
  disabled() {
715
+ const range = this.getSelectedRangeLast();
716
+ if (!range) {
717
+ return true;
718
+ }
719
+ if (range.isSingleHeader()) {
720
+ return true;
721
+ }
719
722
  return this.selection.isSelectedByCorner();
720
723
  },
721
724
  submenu: {
@@ -4,7 +4,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
4
4
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
5
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
6
6
  import { BasePlugin } from "../base/index.mjs";
7
- import { hasOwnProperty, objectEach, deepClone } from "../../helpers/object.mjs";
7
+ import { hasOwnProperty, deepClone } from "../../helpers/object.mjs";
8
8
  import { rangeEach } from "../../helpers/number.mjs";
9
9
  import { arrayEach, arrayReduce, arrayMap } from "../../helpers/array.mjs";
10
10
  import * as C from "../../i18n/constants.mjs";
@@ -160,14 +160,11 @@ export class CustomBorders extends BasePlugin {
160
160
  const selectionType = detectSelectionType(selectionRanges);
161
161
  const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType);
162
162
  arrayEach(selectionRanges, selection => {
163
- const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);
164
- for (let row = rowStart; row <= rowEnd; row += 1) {
165
- for (let col = columnStart; col <= columnEnd; col += 1) {
166
- arrayEach(borderKeys, borderKey => {
167
- this.prepareBorderFromCustomAdded(row, col, normBorder, toInlinePropName(borderKey));
168
- });
169
- }
170
- }
163
+ selectionSchemaNormalizer(selection).forAll((row, col) => {
164
+ arrayEach(borderKeys, borderKey => {
165
+ this.prepareBorderFromCustomAdded(row, col, normBorder, toInlinePropName(borderKey));
166
+ });
167
+ });
171
168
  });
172
169
 
173
170
  /*
@@ -207,16 +204,13 @@ export class CustomBorders extends BasePlugin {
207
204
  const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType);
208
205
  const selectedBorders = [];
209
206
  arrayEach(selectionRanges, selection => {
210
- const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);
211
- for (let row = rowStart; row <= rowEnd; row += 1) {
212
- for (let col = columnStart; col <= columnEnd; col += 1) {
213
- arrayEach(this.savedBorders, border => {
214
- if (border.row === row && border.col === col) {
215
- selectedBorders.push(denormalizeBorder(border));
216
- }
217
- });
218
- }
219
- }
207
+ selectionSchemaNormalizer(selection).forAll((row, col) => {
208
+ arrayEach(this.savedBorders, border => {
209
+ if (border.row === row && border.col === col) {
210
+ selectedBorders.push(denormalizeBorder(border));
211
+ }
212
+ });
213
+ });
220
214
  });
221
215
  return selectedBorders;
222
216
  }
@@ -607,7 +601,8 @@ export class CustomBorders extends BasePlugin {
607
601
  let check = false;
608
602
  arrayEach(this.hot.selection.highlight.customSelections, customSelection => {
609
603
  if (border.id === customSelection.settings.id) {
610
- objectEach(customSelection.instanceBorders, borderObject => {
604
+ const borders = this.hot.view._wt.selectionManager.getBorderInstances(customSelection);
605
+ arrayEach(borders, borderObject => {
611
606
  borderObject.toggleHiddenClass(place, remove); // TODO this also bad?
612
607
  });
613
608
 
@@ -641,7 +636,8 @@ export class CustomBorders extends BasePlugin {
641
636
  customSelection.visualCellRange = cellRange;
642
637
  customSelection.commit();
643
638
  if (place) {
644
- objectEach(customSelection.instanceBorders, borderObject => {
639
+ const borders = this.hot.view._wt.selectionManager.getBorderInstances(customSelection);
640
+ arrayEach(borders, borderObject => {
645
641
  borderObject.changeBorderStyle(place, border);
646
642
  });
647
643
  }
@@ -709,6 +705,13 @@ export class CustomBorders extends BasePlugin {
709
705
  return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS);
710
706
  },
711
707
  disabled() {
708
+ const range = this.getSelectedRangeLast();
709
+ if (!range) {
710
+ return true;
711
+ }
712
+ if (range.isSingleHeader()) {
713
+ return true;
714
+ }
712
715
  return this.selection.isSelectedByCorner();
713
716
  },
714
717
  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
  }
@@ -3,7 +3,9 @@
3
3
  exports.__esModule = true;
4
4
  var _base = require("../base");
5
5
  var _array = require("../../helpers/array");
6
+ var _object = require("../../helpers/object");
6
7
  var _commandExecutor = _interopRequireDefault(require("../contextMenu/commandExecutor"));
8
+ var _utils = require("../contextMenu/utils");
7
9
  var _eventManager = _interopRequireDefault(require("../../eventManager"));
8
10
  var _element = require("../../helpers/dom/element");
9
11
  var _itemsFactory = _interopRequireDefault(require("../contextMenu/itemsFactory"));
@@ -21,6 +23,7 @@ exports.PLUGIN_KEY = PLUGIN_KEY;
21
23
  const PLUGIN_PRIORITY = 230;
22
24
  exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
23
25
  const BUTTON_CLASS_NAME = 'changeType';
26
+ const SHORTCUTS_GROUP = PLUGIN_KEY;
24
27
 
25
28
  /* eslint-disable jsdoc/require-description-complete-sentence */
26
29
  /**
@@ -157,6 +160,7 @@ class DropdownMenu extends _base.BasePlugin {
157
160
  if (typeof settings.callback === 'function') {
158
161
  this.commandExecutor.setCommonCallback(settings.callback);
159
162
  }
163
+ this.registerShortcuts();
160
164
  super.enablePlugin();
161
165
  this.callOnPluginsReady(() => {
162
166
  this.hot.runHooks('afterDropdownMenuDefaultOptions', predefinedItems);
@@ -207,9 +211,68 @@ class DropdownMenu extends _base.BasePlugin {
207
211
  if (this.menu) {
208
212
  this.menu.destroy();
209
213
  }
214
+ this.unregisterShortcuts();
210
215
  super.disablePlugin();
211
216
  }
212
217
 
218
+ /**
219
+ * Register shortcuts responsible for toggling dropdown menu.
220
+ *
221
+ * @private
222
+ */
223
+ registerShortcuts() {
224
+ const context = this.hot.getShortcutManager().getContext('grid');
225
+ const callback = () => {
226
+ const {
227
+ highlight
228
+ } = this.hot.getSelectedRangeLast();
229
+ if ((highlight.isHeader() && highlight.row === -1 || highlight.isCell()) && highlight.col >= 0) {
230
+ this.hot.selectColumns(highlight.col, highlight.col, -1);
231
+ const {
232
+ from
233
+ } = this.hot.getSelectedRangeLast();
234
+ const offset = (0, _utils.getDocumentOffsetByElement)(this.menu.container, this.hot.rootDocument);
235
+ const target = this.hot.getCell(-1, from.col, true);
236
+ const rect = target.getBoundingClientRect();
237
+ this.open({
238
+ left: rect.left + offset.left,
239
+ top: rect.top + target.offsetHeight + offset.top
240
+ }, {
241
+ left: rect.width
242
+ });
243
+ this.hot._registerTimeout(() => {
244
+ this.menu.selectFirstCell();
245
+ });
246
+ }
247
+ };
248
+ context.addShortcuts([{
249
+ keys: [['Shift', 'Alt', 'ArrowDown'], ['Shift', 'Enter']],
250
+ callback,
251
+ runOnlyIf: () => {
252
+ var _this$hot$getSelected;
253
+ return ((_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight.isHeader()) && !this.menu.isOpened();
254
+ },
255
+ group: SHORTCUTS_GROUP
256
+ }, {
257
+ keys: [['Shift', 'Alt', 'ArrowDown']],
258
+ callback,
259
+ runOnlyIf: () => {
260
+ var _this$hot$getSelected2;
261
+ return ((_this$hot$getSelected2 = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected2 === void 0 ? void 0 : _this$hot$getSelected2.highlight.isCell()) && !this.menu.isOpened();
262
+ },
263
+ group: SHORTCUTS_GROUP
264
+ }]);
265
+ }
266
+
267
+ /**
268
+ * Unregister shortcuts responsible for toggling dropdown menu.
269
+ *
270
+ * @private
271
+ */
272
+ unregisterShortcuts() {
273
+ this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
274
+ }
275
+
213
276
  /**
214
277
  * Registers the DOM listeners.
215
278
  *
@@ -222,23 +285,30 @@ class DropdownMenu extends _base.BasePlugin {
222
285
  /**
223
286
  * Opens menu and re-position it based on the passed coordinates.
224
287
  *
225
- * @param {object|Event} position An object with `pageX` and `pageY` properties which contains values relative to
226
- * the top left of the fully rendered content area in the browser or with `clientX`
227
- * and `clientY` properties which contains values relative to the upper left edge
228
- * of the content area (the viewport) of the browser window. This object is structurally
229
- * compatible with native mouse event so it can be used either.
288
+ * @param {{ top: number, left: number }|Event} position An object with `top` and `left` properties
289
+ * which contains coordinates relative to the browsers viewport (without included scroll offsets).
290
+ * Or if the native event is passed the menu will be positioned based on the `pageX` and `pageY`
291
+ * coordinates.
292
+ * @param {{ above: number, below: number, left: number, right: number }} offset An object allows applying
293
+ * the offset to the menu position.
230
294
  * @fires Hooks#beforeDropdownMenuShow
231
295
  * @fires Hooks#afterDropdownMenuShow
232
296
  */
233
-
234
297
  open(position) {
235
- if (!this.menu) {
298
+ var _this$menu;
299
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
300
+ above: 0,
301
+ below: 0,
302
+ left: 0,
303
+ right: 0
304
+ };
305
+ if ((_this$menu = this.menu) !== null && _this$menu !== void 0 && _this$menu.isOpened()) {
236
306
  return;
237
307
  }
238
308
  this.menu.open();
239
- if (position.width) {
240
- this.menu.setOffset('left', position.width);
241
- }
309
+ (0, _object.objectEach)(offset, (value, key) => {
310
+ this.menu.setOffset(key, value);
311
+ });
242
312
  this.menu.setPosition(position);
243
313
  }
244
314
 
@@ -246,10 +316,8 @@ class DropdownMenu extends _base.BasePlugin {
246
316
  * Closes dropdown menu.
247
317
  */
248
318
  close() {
249
- if (!this.menu) {
250
- return;
251
- }
252
- this.menu.close();
319
+ var _this$menu2;
320
+ (_this$menu2 = this.menu) === null || _this$menu2 === void 0 ? void 0 : _this$menu2.close();
253
321
  }
254
322
 
255
323
  /**
@@ -314,26 +382,14 @@ class DropdownMenu extends _base.BasePlugin {
314
382
  */
315
383
  onTableClick(event) {
316
384
  event.stopPropagation();
317
- if ((0, _element.hasClass)(event.target, BUTTON_CLASS_NAME) && !this.menu.isOpened()) {
318
- let offsetTop = 0;
319
- let offsetLeft = 0;
320
- if (this.hot.rootDocument !== this.menu.container.ownerDocument) {
321
- const {
322
- frameElement
323
- } = this.hot.rootWindow;
324
- const {
325
- top,
326
- left
327
- } = frameElement.getBoundingClientRect();
328
- offsetTop = top;
329
- offsetLeft = left;
330
- }
385
+ if ((0, _element.hasClass)(event.target, BUTTON_CLASS_NAME)) {
386
+ const offset = (0, _utils.getDocumentOffsetByElement)(this.menu.container, this.hot.rootDocument);
331
387
  const rect = event.target.getBoundingClientRect();
332
388
  this.open({
333
- left: rect.left + offsetLeft,
334
- top: rect.top + event.target.offsetHeight + 3 + offsetTop,
335
- width: rect.width,
336
- height: rect.height
389
+ left: rect.left + offset.left,
390
+ top: rect.top + event.target.offsetHeight + 3 + offset.top
391
+ }, {
392
+ left: rect.width
337
393
  });
338
394
  }
339
395
  }
@@ -372,6 +428,7 @@ class DropdownMenu extends _base.BasePlugin {
372
428
  const button = this.hot.rootDocument.createElement('button');
373
429
  button.className = BUTTON_CLASS_NAME;
374
430
  button.type = 'button';
431
+ button.tabIndex = -1;
375
432
 
376
433
  // prevent page reload on button click
377
434
  button.onclick = function () {