handsontable 0.0.0-next-a1e4b4f-20230628 → 0.0.0-next-e697250-20230707

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 (456) hide show
  1. package/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
  2. package/3rdparty/walkontable/src/cell/coords.js +50 -28
  3. package/3rdparty/walkontable/src/cell/coords.mjs +50 -28
  4. package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
  5. package/3rdparty/walkontable/src/cell/range.js +69 -36
  6. package/3rdparty/walkontable/src/cell/range.mjs +68 -35
  7. package/3rdparty/walkontable/src/event.js +3 -5
  8. package/3rdparty/walkontable/src/event.mjs +3 -5
  9. package/3rdparty/walkontable/src/overlay/_base.js +6 -7
  10. package/3rdparty/walkontable/src/overlay/_base.mjs +6 -7
  11. package/3rdparty/walkontable/src/overlay/bottom.js +6 -7
  12. package/3rdparty/walkontable/src/overlay/bottom.mjs +6 -7
  13. package/3rdparty/walkontable/src/overlay/top.js +6 -7
  14. package/3rdparty/walkontable/src/overlay/top.mjs +6 -7
  15. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.js +10 -12
  16. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.mjs +10 -12
  17. package/3rdparty/walkontable/src/overlays.js +55 -64
  18. package/3rdparty/walkontable/src/overlays.mjs +55 -64
  19. package/3rdparty/walkontable/src/renderer/table.js +0 -2
  20. package/3rdparty/walkontable/src/renderer/table.mjs +0 -2
  21. package/3rdparty/walkontable/src/scroll.js +20 -23
  22. package/3rdparty/walkontable/src/scroll.mjs +20 -23
  23. package/3rdparty/walkontable/src/selection/border/border.js +1 -0
  24. package/3rdparty/walkontable/src/selection/border/border.mjs +1 -0
  25. package/3rdparty/walkontable/src/selection/manager.js +40 -45
  26. package/3rdparty/walkontable/src/selection/manager.mjs +33 -38
  27. package/3rdparty/walkontable/src/selection/scanner.js +5 -4
  28. package/3rdparty/walkontable/src/selection/scanner.mjs +1 -0
  29. package/3rdparty/walkontable/src/settings.js +13 -15
  30. package/3rdparty/walkontable/src/settings.mjs +13 -15
  31. package/3rdparty/walkontable/src/table.js +23 -26
  32. package/3rdparty/walkontable/src/table.mjs +23 -26
  33. package/CHANGELOG.md +56 -0
  34. package/base.js +2 -4
  35. package/base.mjs +2 -2
  36. package/common.d.ts +1 -1
  37. package/core.d.ts +7 -9
  38. package/core.js +241 -439
  39. package/core.mjs +245 -443
  40. package/dataMap/dataMap.js +1 -0
  41. package/dataMap/dataMap.mjs +1 -0
  42. package/dataMap/dataSource.js +5 -5
  43. package/dataMap/dataSource.mjs +5 -5
  44. package/dataMap/metaManager/lazyFactoryMap.js +1 -0
  45. package/dataMap/metaManager/lazyFactoryMap.mjs +1 -0
  46. package/dataMap/metaManager/metaLayers/cellMeta.js +1 -0
  47. package/dataMap/metaManager/metaLayers/cellMeta.mjs +1 -0
  48. package/dataMap/metaManager/metaSchema.js +33 -24
  49. package/dataMap/metaManager/metaSchema.mjs +33 -24
  50. package/dist/handsontable.css +25 -3
  51. package/dist/handsontable.full.css +25 -3
  52. package/dist/handsontable.full.js +14539 -11358
  53. package/dist/handsontable.full.min.css +5 -5
  54. package/dist/handsontable.full.min.js +137 -125
  55. package/dist/handsontable.js +31414 -28455
  56. package/dist/handsontable.min.css +5 -5
  57. package/dist/handsontable.min.js +11 -3
  58. package/dist/languages/all.js +133 -0
  59. package/dist/languages/ar-AR.js +7 -0
  60. package/dist/languages/cs-CZ.js +7 -0
  61. package/dist/languages/de-CH.js +7 -0
  62. package/dist/languages/de-DE.js +7 -0
  63. package/dist/languages/en-US.js +7 -0
  64. package/dist/languages/es-MX.js +7 -0
  65. package/dist/languages/fr-FR.js +7 -0
  66. package/dist/languages/it-IT.js +7 -0
  67. package/dist/languages/ja-JP.js +7 -0
  68. package/dist/languages/ko-KR.js +7 -0
  69. package/dist/languages/lv-LV.js +7 -0
  70. package/dist/languages/nb-NO.js +7 -0
  71. package/dist/languages/nl-NL.js +7 -0
  72. package/dist/languages/pl-PL.js +7 -0
  73. package/dist/languages/pt-BR.js +7 -0
  74. package/dist/languages/ru-RU.js +7 -0
  75. package/dist/languages/sr-SP.js +7 -0
  76. package/dist/languages/zh-CN.js +7 -0
  77. package/dist/languages/zh-TW.js +7 -0
  78. package/editorManager.js +19 -89
  79. package/editorManager.mjs +24 -93
  80. package/editors/baseEditor/baseEditor.js +1 -0
  81. package/editors/baseEditor/baseEditor.mjs +1 -0
  82. package/editors/textEditor/textEditor.js +14 -20
  83. package/editors/textEditor/textEditor.mjs +16 -22
  84. package/helpers/dom/element.js +0 -11
  85. package/helpers/dom/element.mjs +0 -10
  86. package/helpers/mixed.js +2 -2
  87. package/helpers/mixed.mjs +2 -2
  88. package/helpers/number.d.ts +1 -0
  89. package/helpers/number.js +18 -0
  90. package/helpers/number.mjs +17 -0
  91. package/helpers/object.js +2 -0
  92. package/helpers/object.mjs +2 -0
  93. package/i18n/languages/ar-AR.js +7 -1
  94. package/i18n/languages/cs-CZ.js +7 -1
  95. package/i18n/languages/de-CH.js +7 -1
  96. package/i18n/languages/de-DE.js +7 -1
  97. package/i18n/languages/en-US.js +7 -1
  98. package/i18n/languages/es-MX.js +7 -1
  99. package/i18n/languages/fr-FR.js +7 -1
  100. package/i18n/languages/it-IT.js +7 -1
  101. package/i18n/languages/ja-JP.js +7 -1
  102. package/i18n/languages/ko-KR.js +7 -1
  103. package/i18n/languages/lv-LV.js +7 -1
  104. package/i18n/languages/nb-NO.js +7 -1
  105. package/i18n/languages/nl-NL.js +7 -1
  106. package/i18n/languages/pl-PL.js +7 -1
  107. package/i18n/languages/pt-BR.js +7 -1
  108. package/i18n/languages/ru-RU.js +7 -1
  109. package/i18n/languages/sr-SP.js +7 -1
  110. package/i18n/languages/zh-CN.js +7 -1
  111. package/i18n/languages/zh-TW.js +7 -1
  112. package/languages/all.js +133 -0
  113. package/languages/ar-AR.js +7 -0
  114. package/languages/cs-CZ.js +7 -0
  115. package/languages/de-CH.js +7 -0
  116. package/languages/de-DE.js +7 -0
  117. package/languages/en-US.js +7 -0
  118. package/languages/es-MX.js +7 -0
  119. package/languages/fr-FR.js +7 -0
  120. package/languages/index.js +133 -0
  121. package/languages/it-IT.js +7 -0
  122. package/languages/ja-JP.js +7 -0
  123. package/languages/ko-KR.js +7 -0
  124. package/languages/lv-LV.js +7 -0
  125. package/languages/nb-NO.js +7 -0
  126. package/languages/nl-NL.js +7 -0
  127. package/languages/pl-PL.js +7 -0
  128. package/languages/pt-BR.js +7 -0
  129. package/languages/ru-RU.js +7 -0
  130. package/languages/sr-SP.js +7 -0
  131. package/languages/zh-CN.js +7 -0
  132. package/languages/zh-TW.js +7 -0
  133. package/package.json +3 -2
  134. package/pluginHooks.d.ts +8 -2
  135. package/pluginHooks.js +116 -18
  136. package/pluginHooks.mjs +115 -15
  137. package/plugins/autoColumnSize/autoColumnSize.js +1 -0
  138. package/plugins/autoColumnSize/autoColumnSize.mjs +1 -0
  139. package/plugins/autoRowSize/autoRowSize.js +3 -2
  140. package/plugins/autoRowSize/autoRowSize.mjs +3 -2
  141. package/plugins/autofill/autofill.js +2 -2
  142. package/plugins/autofill/autofill.mjs +3 -3
  143. package/plugins/autofill/utils.js +1 -39
  144. package/plugins/autofill/utils.mjs +0 -37
  145. package/plugins/base/base.js +1 -0
  146. package/plugins/base/base.mjs +1 -0
  147. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.js +1 -0
  148. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.mjs +1 -0
  149. package/plugins/collapsibleColumns/collapsibleColumns.js +82 -24
  150. package/plugins/collapsibleColumns/collapsibleColumns.mjs +82 -24
  151. package/plugins/columnSorting/columnSorting.js +51 -8
  152. package/plugins/columnSorting/columnSorting.mjs +50 -9
  153. package/plugins/columnSorting/columnStatesManager.js +1 -0
  154. package/plugins/columnSorting/columnStatesManager.mjs +1 -0
  155. package/plugins/columnSorting/index.js +4 -2
  156. package/plugins/columnSorting/index.mjs +1 -1
  157. package/plugins/columnSorting/rootComparator.js +1 -0
  158. package/plugins/columnSorting/rootComparator.mjs +1 -0
  159. package/plugins/comments/commentEditor.js +1 -0
  160. package/plugins/comments/commentEditor.mjs +1 -0
  161. package/plugins/comments/comments.js +289 -224
  162. package/plugins/comments/comments.mjs +297 -234
  163. package/plugins/comments/contextMenuItem/addEditComment.js +51 -0
  164. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  165. package/plugins/comments/contextMenuItem/readOnlyComment.js +63 -0
  166. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +55 -0
  167. package/plugins/comments/contextMenuItem/removeComment.js +48 -0
  168. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  169. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  170. package/plugins/contextMenu/contextMenu.js +81 -29
  171. package/plugins/contextMenu/contextMenu.mjs +82 -30
  172. package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
  173. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  174. package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
  175. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  176. package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
  177. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  178. package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
  179. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  180. package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
  181. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  182. package/plugins/contextMenu/predefinedItems/removeColumn.js +8 -5
  183. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +6 -3
  184. package/plugins/contextMenu/predefinedItems/removeRow.js +8 -5
  185. package/plugins/contextMenu/predefinedItems/removeRow.mjs +6 -3
  186. package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
  187. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  188. package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
  189. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  190. package/plugins/contextMenu/utils.js +25 -16
  191. package/plugins/contextMenu/utils.mjs +24 -15
  192. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  193. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  194. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  195. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  196. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  197. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  198. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  199. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  200. package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
  201. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  202. package/plugins/copyPaste/copyPaste.js +100 -14
  203. package/plugins/copyPaste/copyPaste.mjs +100 -14
  204. package/plugins/copyPaste/copyableRanges.js +25 -31
  205. package/plugins/copyPaste/copyableRanges.mjs +18 -24
  206. package/plugins/copyPaste/focusableElement.js +219 -0
  207. package/plugins/copyPaste/focusableElement.mjs +213 -0
  208. package/plugins/customBorders/customBorders.d.ts +2 -0
  209. package/plugins/customBorders/customBorders.js +19 -50
  210. package/plugins/customBorders/customBorders.mjs +19 -50
  211. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  212. package/plugins/dropdownMenu/dropdownMenu.js +94 -30
  213. package/plugins/dropdownMenu/dropdownMenu.mjs +94 -30
  214. package/plugins/exportFile/dataProvider.js +1 -0
  215. package/plugins/exportFile/dataProvider.mjs +1 -0
  216. package/plugins/filters/component/value.js +1 -0
  217. package/plugins/filters/component/value.mjs +1 -0
  218. package/plugins/filters/condition/beginsWith.js +1 -0
  219. package/plugins/filters/condition/beginsWith.mjs +1 -0
  220. package/plugins/filters/condition/between.js +1 -0
  221. package/plugins/filters/condition/between.mjs +1 -0
  222. package/plugins/filters/condition/byValue.js +1 -0
  223. package/plugins/filters/condition/byValue.mjs +1 -0
  224. package/plugins/filters/condition/contains.js +1 -0
  225. package/plugins/filters/condition/contains.mjs +1 -0
  226. package/plugins/filters/condition/date/after.js +1 -0
  227. package/plugins/filters/condition/date/after.mjs +1 -0
  228. package/plugins/filters/condition/date/before.js +1 -0
  229. package/plugins/filters/condition/date/before.mjs +1 -0
  230. package/plugins/filters/condition/endsWith.js +1 -0
  231. package/plugins/filters/condition/endsWith.mjs +1 -0
  232. package/plugins/filters/condition/equal.js +1 -0
  233. package/plugins/filters/condition/equal.mjs +1 -0
  234. package/plugins/filters/condition/greaterThan.js +1 -0
  235. package/plugins/filters/condition/greaterThan.mjs +1 -0
  236. package/plugins/filters/condition/greaterThanOrEqual.js +1 -0
  237. package/plugins/filters/condition/greaterThanOrEqual.mjs +1 -0
  238. package/plugins/filters/condition/lessThan.js +1 -0
  239. package/plugins/filters/condition/lessThan.mjs +1 -0
  240. package/plugins/filters/condition/lessThanOrEqual.js +1 -0
  241. package/plugins/filters/condition/lessThanOrEqual.mjs +1 -0
  242. package/plugins/filters/conditionCollection.js +1 -0
  243. package/plugins/filters/conditionCollection.mjs +1 -0
  244. package/plugins/filters/filters.js +68 -42
  245. package/plugins/filters/filters.mjs +67 -41
  246. package/plugins/filters/ui/multipleSelect.js +1 -0
  247. package/plugins/filters/ui/multipleSelect.mjs +1 -0
  248. package/plugins/formulas/formulas.js +191 -168
  249. package/plugins/formulas/formulas.mjs +191 -168
  250. package/plugins/formulas/indexSyncer/axisSyncer.js +379 -0
  251. package/plugins/formulas/indexSyncer/axisSyncer.mjs +374 -0
  252. package/plugins/formulas/indexSyncer/index.js +225 -0
  253. package/plugins/formulas/indexSyncer/index.mjs +219 -0
  254. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +1 -0
  255. package/plugins/hiddenColumns/contextMenuItem/hideColumn.mjs +1 -0
  256. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +1 -0
  257. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +1 -0
  258. package/plugins/hiddenRows/contextMenuItem/hideRow.js +1 -0
  259. package/plugins/hiddenRows/contextMenuItem/hideRow.mjs +1 -0
  260. package/plugins/hiddenRows/contextMenuItem/showRow.js +1 -0
  261. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +1 -0
  262. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +1 -0
  263. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.mjs +1 -0
  264. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +1 -0
  265. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.mjs +1 -0
  266. package/plugins/manualColumnResize/manualColumnResize.js +36 -5
  267. package/plugins/manualColumnResize/manualColumnResize.mjs +36 -5
  268. package/plugins/manualRowMove/manualRowMove.js +31 -12
  269. package/plugins/manualRowMove/manualRowMove.mjs +32 -13
  270. package/plugins/manualRowResize/manualRowResize.js +40 -9
  271. package/plugins/manualRowResize/manualRowResize.mjs +40 -9
  272. package/plugins/mergeCells/calculations/autofill.js +1 -0
  273. package/plugins/mergeCells/calculations/autofill.mjs +1 -0
  274. package/plugins/mergeCells/cellsCollection.js +1 -0
  275. package/plugins/mergeCells/cellsCollection.mjs +1 -0
  276. package/plugins/mergeCells/mergeCells.js +6 -2
  277. package/plugins/mergeCells/mergeCells.mjs +6 -2
  278. package/plugins/multiColumnSorting/multiColumnSorting.js +42 -3
  279. package/plugins/multiColumnSorting/multiColumnSorting.mjs +42 -3
  280. package/plugins/multiColumnSorting/rootComparator.js +1 -0
  281. package/plugins/multiColumnSorting/rootComparator.mjs +1 -0
  282. package/plugins/nestedHeaders/nestedHeaders.js +129 -6
  283. package/plugins/nestedHeaders/nestedHeaders.mjs +129 -6
  284. package/plugins/nestedHeaders/stateManager/headersTree.js +24 -26
  285. package/plugins/nestedHeaders/stateManager/headersTree.mjs +21 -23
  286. package/plugins/nestedHeaders/stateManager/index.js +40 -3
  287. package/plugins/nestedHeaders/stateManager/index.mjs +37 -0
  288. package/plugins/nestedHeaders/stateManager/matrixGenerator.js +1 -0
  289. package/plugins/nestedHeaders/stateManager/settingsNormalizer.js +2 -1
  290. package/plugins/nestedHeaders/stateManager/settingsNormalizer.mjs +1 -0
  291. package/plugins/nestedHeaders/utils/ghostTable.js +30 -35
  292. package/plugins/nestedHeaders/utils/ghostTable.mjs +30 -35
  293. package/plugins/nestedRows/data/dataManager.js +1 -0
  294. package/plugins/nestedRows/data/dataManager.mjs +1 -0
  295. package/plugins/nestedRows/nestedRows.js +53 -7
  296. package/plugins/nestedRows/nestedRows.mjs +53 -7
  297. package/plugins/nestedRows/ui/collapsing.js +1 -0
  298. package/plugins/nestedRows/ui/collapsing.mjs +1 -0
  299. package/plugins/nestedRows/utils/rowMoveController.js +1 -0
  300. package/plugins/nestedRows/utils/rowMoveController.mjs +1 -0
  301. package/plugins/persistentState/storage.js +1 -0
  302. package/plugins/persistentState/storage.mjs +1 -0
  303. package/plugins/registry.js +4 -1
  304. package/plugins/registry.mjs +1 -0
  305. package/plugins/undoRedo/undoRedo.js +1 -1
  306. package/plugins/undoRedo/undoRedo.mjs +1 -1
  307. package/renderers/baseRenderer/baseRenderer.js +0 -3
  308. package/renderers/baseRenderer/baseRenderer.mjs +0 -3
  309. package/renderers/checkboxRenderer/checkboxRenderer.js +2 -2
  310. package/renderers/checkboxRenderer/checkboxRenderer.mjs +1 -1
  311. package/selection/highlight/highlight.js +120 -98
  312. package/selection/highlight/highlight.mjs +118 -96
  313. package/selection/highlight/visualSelection.js +30 -17
  314. package/selection/highlight/visualSelection.mjs +30 -17
  315. package/selection/mouseEventHandler.js +1 -1
  316. package/selection/mouseEventHandler.mjs +1 -1
  317. package/selection/range.js +8 -8
  318. package/selection/range.mjs +8 -8
  319. package/selection/selection.js +246 -153
  320. package/selection/selection.mjs +247 -154
  321. package/selection/transformation.js +233 -96
  322. package/selection/transformation.mjs +230 -93
  323. package/selection/utils.js +12 -35
  324. package/selection/utils.mjs +13 -35
  325. package/settings.d.ts +2 -1
  326. package/shortcutContexts/commands/editor/closeAndSave.js +15 -0
  327. package/shortcutContexts/commands/editor/closeAndSave.mjs +10 -0
  328. package/shortcutContexts/commands/editor/closeWithoutSaving.js +13 -0
  329. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  330. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  331. package/shortcutContexts/commands/editor/fastOpen.mjs +11 -0
  332. package/shortcutContexts/commands/editor/index.js +16 -0
  333. package/shortcutContexts/commands/editor/index.mjs +12 -0
  334. package/shortcutContexts/commands/editor/open.js +29 -0
  335. package/shortcutContexts/commands/editor/open.mjs +24 -0
  336. package/shortcutContexts/commands/emptySelectedCells.js +12 -0
  337. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  338. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  339. package/shortcutContexts/commands/extendCellsSelection/down.mjs +10 -0
  340. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +21 -0
  341. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +16 -0
  342. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  343. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  344. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  345. package/shortcutContexts/commands/extendCellsSelection/left.mjs +10 -0
  346. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  347. package/shortcutContexts/commands/extendCellsSelection/right.mjs +10 -0
  348. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  349. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +14 -0
  350. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +22 -0
  351. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +17 -0
  352. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +17 -0
  353. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +12 -0
  354. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +17 -0
  355. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +12 -0
  356. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +40 -0
  357. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +35 -0
  358. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +40 -0
  359. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +35 -0
  360. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +22 -0
  361. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +17 -0
  362. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  363. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +14 -0
  364. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  365. package/shortcutContexts/commands/extendCellsSelection/up.mjs +10 -0
  366. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +21 -0
  367. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +16 -0
  368. package/shortcutContexts/commands/index.js +53 -0
  369. package/shortcutContexts/commands/index.mjs +49 -0
  370. package/shortcutContexts/commands/moveCellSelection/down.js +12 -0
  371. package/shortcutContexts/commands/moveCellSelection/down.mjs +7 -0
  372. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +29 -0
  373. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +24 -0
  374. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  375. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  376. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +13 -0
  377. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  378. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +13 -0
  379. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  380. package/shortcutContexts/commands/moveCellSelection/left.js +11 -0
  381. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  382. package/shortcutContexts/commands/moveCellSelection/right.js +11 -0
  383. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  384. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +16 -0
  385. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +11 -0
  386. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +17 -0
  387. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +12 -0
  388. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +13 -0
  389. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +8 -0
  390. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +16 -0
  391. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +11 -0
  392. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +36 -0
  393. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +31 -0
  394. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +36 -0
  395. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +31 -0
  396. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +16 -0
  397. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +11 -0
  398. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +18 -0
  399. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +13 -0
  400. package/shortcutContexts/commands/moveCellSelection/up.js +12 -0
  401. package/shortcutContexts/commands/moveCellSelection/up.mjs +7 -0
  402. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +29 -0
  403. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +24 -0
  404. package/shortcutContexts/commands/populateSelectedCellsData.js +35 -0
  405. package/shortcutContexts/commands/populateSelectedCellsData.mjs +30 -0
  406. package/shortcutContexts/commands/scrollToFocusedCell.js +38 -0
  407. package/shortcutContexts/commands/scrollToFocusedCell.mjs +33 -0
  408. package/shortcutContexts/commands/selectAll.js +11 -0
  409. package/shortcutContexts/commands/selectAll.mjs +6 -0
  410. package/shortcutContexts/constants.js +19 -0
  411. package/shortcutContexts/constants.mjs +12 -0
  412. package/shortcutContexts/editor.js +29 -0
  413. package/shortcutContexts/editor.mjs +25 -0
  414. package/shortcutContexts/grid.js +252 -0
  415. package/shortcutContexts/grid.mjs +248 -0
  416. package/shortcutContexts/index.js +29 -0
  417. package/shortcutContexts/index.mjs +15 -0
  418. package/shortcuts/context.js +1 -0
  419. package/shortcuts/context.mjs +1 -0
  420. package/shortcuts/manager.js +2 -0
  421. package/shortcuts/manager.mjs +2 -0
  422. package/shortcuts/recorder.js +2 -2
  423. package/shortcuts/recorder.mjs +2 -2
  424. package/shortcuts/utils.js +21 -5
  425. package/shortcuts/utils.mjs +20 -4
  426. package/tableView.js +112 -82
  427. package/tableView.mjs +112 -82
  428. package/translations/changesObservable/observable.js +41 -46
  429. package/translations/changesObservable/observable.mjs +36 -41
  430. package/translations/changesObservable/observer.js +1 -1
  431. package/translations/indexMapper.d.ts +0 -2
  432. package/translations/indexMapper.js +38 -64
  433. package/translations/indexMapper.mjs +39 -64
  434. package/translations/maps/linkedPhysicalIndexToValueMap.js +1 -0
  435. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +1 -0
  436. package/translations/maps/utils/indexesSequence.js +1 -0
  437. package/translations/maps/utils/indexesSequence.mjs +1 -0
  438. package/translations/maps/utils/physicallyIndexed.js +1 -0
  439. package/translations/maps/utils/physicallyIndexed.mjs +1 -0
  440. package/utils/dataStructures/priorityMap.js +1 -0
  441. package/utils/dataStructures/priorityMap.mjs +1 -0
  442. package/utils/dataStructures/tree.js +16 -18
  443. package/utils/dataStructures/tree.mjs +16 -18
  444. package/utils/dataStructures/uniqueMap.js +1 -0
  445. package/utils/dataStructures/uniqueMap.mjs +1 -0
  446. package/utils/dataStructures/uniqueSet.js +1 -0
  447. package/utils/dataStructures/uniqueSet.mjs +1 -0
  448. package/utils/ghostTable.js +1 -0
  449. package/utils/ghostTable.mjs +1 -0
  450. package/utils/parseTable.js +5 -1
  451. package/utils/parseTable.mjs +5 -1
  452. package/utils/staticRegister.js +1 -0
  453. package/utils/staticRegister.mjs +1 -0
  454. package/focusManager.d.ts +0 -12
  455. package/focusManager.js +0 -275
  456. package/focusManager.mjs +0 -270
@@ -1,4 +1,5 @@
1
1
  import { CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_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 copyWithColumnGroupHeadersItem(copyPastePlugin) {
8
9
  key: 'copy_with_column_group_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_GROUP_HEADERS, nounForm);
13
14
  },
14
15
  callback: function callback() {
@@ -18,6 +19,13 @@ export default function copyWithColumnGroupHeadersItem(copyPastePlugin) {
18
19
  if (!this.hasColHeaders() || !this.getSettings().nestedHeaders) {
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.
@@ -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.
@@ -12,6 +12,7 @@ require("core-js/modules/es.reflect.get.js");
12
12
  require("core-js/modules/es.object.get-own-property-descriptor.js");
13
13
  require("core-js/modules/es.symbol.iterator.js");
14
14
  require("core-js/modules/es.array.slice.js");
15
+ require("core-js/modules/es.regexp.to-string.js");
15
16
  require("core-js/modules/es.function.name.js");
16
17
  exports.__esModule = true;
17
18
  exports.PLUGIN_PRIORITY = exports.PLUGIN_KEY = exports.CopyPaste = void 0;
@@ -33,15 +34,16 @@ var _pluginHooks = _interopRequireDefault(require("../../pluginHooks"));
33
34
  var _SheetClip = require("../../3rdparty/SheetClip");
34
35
  var _array = require("../../helpers/array");
35
36
  var _string = require("../../helpers/string");
37
+ var _element = require("../../helpers/dom/element");
36
38
  var _copy = _interopRequireDefault(require("./contextMenuItem/copy"));
37
39
  var _copyColumnHeadersOnly = _interopRequireDefault(require("./contextMenuItem/copyColumnHeadersOnly"));
38
40
  var _copyWithColumnGroupHeaders = _interopRequireDefault(require("./contextMenuItem/copyWithColumnGroupHeaders"));
39
41
  var _copyWithColumnHeaders = _interopRequireDefault(require("./contextMenuItem/copyWithColumnHeaders"));
40
42
  var _cut = _interopRequireDefault(require("./contextMenuItem/cut"));
41
43
  var _pasteEvent = _interopRequireDefault(require("./pasteEvent"));
44
+ var _focusableElement = require("./focusableElement");
42
45
  var _copyableRanges = require("./copyableRanges");
43
46
  var _parseTable = require("../../utils/parseTable");
44
- var _eventManager = _interopRequireDefault(require("../../eventManager"));
45
47
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
46
48
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
47
49
  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."); }
@@ -278,6 +280,13 @@ var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
278
280
  * @type {Array<{startRow: number, startCol: number, endRow: number, endCol: number}>}
279
281
  */
280
282
  _defineProperty(_assertThisInitialized(_this), "copyableRanges", []);
283
+ /**
284
+ * Provides focusable element to support IME and copy/paste/cut actions.
285
+ *
286
+ * @private
287
+ * @type {FocusableWrapper}
288
+ */
289
+ _defineProperty(_assertThisInitialized(_this), "focusableElement", void 0);
281
290
  return _this;
282
291
  }
283
292
  _createClass(CopyPaste, [{
@@ -320,18 +329,22 @@ var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
320
329
  this.addHook('afterContextMenuDefaultOptions', function (options) {
321
330
  return _this2.onAfterContextMenuDefaultOptions(options);
322
331
  });
332
+ this.addHook('afterOnCellMouseUp', function () {
333
+ return _this2.onAfterOnCellMouseUp();
334
+ });
323
335
  this.addHook('afterSelectionEnd', function () {
324
336
  return _this2.onAfterSelectionEnd();
325
337
  });
326
- this.eventManager = new _eventManager.default(this);
327
- this.eventManager.addEventListener(this.hot.rootDocument, 'copy', function () {
328
- return _this2.onCopy.apply(_this2, arguments);
329
- });
330
- this.eventManager.addEventListener(this.hot.rootDocument, 'cut', function () {
331
- return _this2.onCut.apply(_this2, arguments);
338
+ this.addHook('beforeKeyDown', function () {
339
+ return _this2.onBeforeKeyDown();
332
340
  });
333
- this.eventManager.addEventListener(this.hot.rootDocument, 'paste', function () {
334
- return _this2.onPaste.apply(_this2, arguments);
341
+ this.focusableElement = (0, _focusableElement.createElement)(this.uiContainer);
342
+ this.focusableElement.addLocalHook('copy', function (event) {
343
+ return _this2.onCopy(event);
344
+ }).addLocalHook('cut', function (event) {
345
+ return _this2.onCut(event);
346
+ }).addLocalHook('paste', function (event) {
347
+ return _this2.onPaste(event);
335
348
  });
336
349
  _get(_getPrototypeOf(CopyPaste.prototype), "enablePlugin", this).call(this);
337
350
  }
@@ -349,6 +362,7 @@ var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
349
362
  value: function updatePlugin() {
350
363
  this.disablePlugin();
351
364
  this.enablePlugin();
365
+ this.getOrCreateFocusableElement();
352
366
  _get(_getPrototypeOf(CopyPaste.prototype), "updatePlugin", this).call(this);
353
367
  }
354
368
 
@@ -358,6 +372,9 @@ var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
358
372
  }, {
359
373
  key: "disablePlugin",
360
374
  value: function disablePlugin() {
375
+ if (this.focusableElement) {
376
+ (0, _focusableElement.destroyElement)(this.focusableElement);
377
+ }
361
378
  _get(_getPrototypeOf(CopyPaste.prototype), "disablePlugin", this).call(this);
362
379
  }
363
380
 
@@ -381,6 +398,8 @@ var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
381
398
  var copyMode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'cells-only';
382
399
  _classPrivateFieldSet(this, _copyMode, copyMode);
383
400
  _classPrivateFieldSet(this, _isTriggeredByCopy, true);
401
+ this.getOrCreateFocusableElement();
402
+ this.focusableElement.focus();
384
403
  this.hot.rootDocument.execCommand('copy');
385
404
  }
386
405
 
@@ -424,6 +443,8 @@ var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
424
443
  key: "cut",
425
444
  value: function cut() {
426
445
  _classPrivateFieldSet(this, _isTriggeredByCut, true);
446
+ this.getOrCreateFocusableElement();
447
+ this.focusableElement.focus();
427
448
  this.hot.rootDocument.execCommand('cut');
428
449
  }
429
450
 
@@ -493,6 +514,7 @@ var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
493
514
  if (pastableHtml) {
494
515
  pasteData.clipboardData.setData('text/html', pastableHtml);
495
516
  }
517
+ this.getOrCreateFocusableElement();
496
518
  this.onPaste(pasteData);
497
519
  }
498
520
 
@@ -506,6 +528,10 @@ var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
506
528
  if (!selectionRange) {
507
529
  return;
508
530
  }
531
+ if (selectionRange.isSingleHeader()) {
532
+ this.copyableRanges = [];
533
+ return;
534
+ }
509
535
  _classPrivateFieldGet(this, _copyableRangesFactory).setSelectedRange(selectionRange);
510
536
  var groupedRanges = new Map([['headers', null], ['cells', null]]);
511
537
  if (_classPrivateFieldGet(this, _copyMode) === 'column-headers-only') {
@@ -543,6 +569,23 @@ var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
543
569
  }
544
570
  }
545
571
 
572
+ /**
573
+ * Force focus on editable element.
574
+ *
575
+ * @private
576
+ */
577
+ }, {
578
+ key: "getOrCreateFocusableElement",
579
+ value: function getOrCreateFocusableElement() {
580
+ var _this$hot$getActiveEd;
581
+ var editableElement = (_this$hot$getActiveEd = this.hot.getActiveEditor()) === null || _this$hot$getActiveEd === void 0 ? void 0 : _this$hot$getActiveEd.TEXTAREA;
582
+ if (editableElement) {
583
+ this.focusableElement.setFocusableElement(editableElement);
584
+ } else {
585
+ this.focusableElement.useSecondaryElement();
586
+ }
587
+ }
588
+
546
589
  /**
547
590
  * Verifies if editor exists and is open.
548
591
  *
@@ -552,8 +595,8 @@ var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
552
595
  }, {
553
596
  key: "isEditorOpened",
554
597
  value: function isEditorOpened() {
555
- var _this$hot$getActiveEd;
556
- return (_this$hot$getActiveEd = this.hot.getActiveEditor()) === null || _this$hot$getActiveEd === void 0 ? void 0 : _this$hot$getActiveEd.isOpened();
598
+ var _this$hot$getActiveEd2;
599
+ return (_this$hot$getActiveEd2 = this.hot.getActiveEditor()) === null || _this$hot$getActiveEd2 === void 0 ? void 0 : _this$hot$getActiveEd2.isOpened();
557
600
  }
558
601
  }, {
559
602
  key: "populateValues",
@@ -692,7 +735,7 @@ var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
692
735
  }, {
693
736
  key: "onPaste",
694
737
  value: function onPaste(event) {
695
- if (!this.hot.isListening() || this.isEditorOpened()) {
738
+ if (!this.hot.isListening() || this.isEditorOpened() || !this.hot.getSelected()) {
696
739
  return;
697
740
  }
698
741
  if (event && event.preventDefault) {
@@ -717,7 +760,7 @@ var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
717
760
  if (typeof pastedData === 'string') {
718
761
  pastedData = (0, _SheetClip.parse)(pastedData);
719
762
  }
720
- if (pastedData && pastedData.length === 0) {
763
+ if (pastedData === void 0 || pastedData && pastedData.length === 0) {
721
764
  return;
722
765
  }
723
766
  if (this.hot.runHooks('beforePaste', pastedData, this.copyableRanges) === false) {
@@ -757,6 +800,23 @@ var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
757
800
  options.items.push((0, _cut.default)(this));
758
801
  }
759
802
 
803
+ /**
804
+ * Force focus on focusableElement.
805
+ *
806
+ * @private
807
+ */
808
+ }, {
809
+ key: "onAfterOnCellMouseUp",
810
+ value: function onAfterOnCellMouseUp() {
811
+ // Changing focused element will remove current selection. It's unnecessary in case when we give possibility
812
+ // for fragment selection
813
+ if (!this.hot.isListening() || this.isEditorOpened() || this.hot.getSettings().fragmentSelection) {
814
+ return;
815
+ }
816
+ this.getOrCreateFocusableElement();
817
+ this.focusableElement.focus();
818
+ }
819
+
760
820
  /**
761
821
  * Force focus on focusableElement after end of the selection.
762
822
  *
@@ -768,10 +828,32 @@ var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
768
828
  if (this.isEditorOpened()) {
769
829
  return;
770
830
  }
771
- if (this.hot.getSettings().fragmentSelection) {
831
+ this.getOrCreateFocusableElement();
832
+ if (this.hot.getSettings().fragmentSelection && this.focusableElement.getFocusableElement() !== this.hot.rootDocument.activeElement && (0, _element.getSelectionText)()) {
772
833
  return;
773
834
  }
774
835
  this.setCopyableText();
836
+ this.focusableElement.focus();
837
+ }
838
+
839
+ /**
840
+ * `beforeKeyDown` listener to force focus of focusableElement.
841
+ *
842
+ * @private
843
+ */
844
+ }, {
845
+ key: "onBeforeKeyDown",
846
+ value: function onBeforeKeyDown() {
847
+ if (!this.hot.isListening() || this.isEditorOpened()) {
848
+ return;
849
+ }
850
+ var activeElement = this.hot.rootDocument.activeElement;
851
+ var activeEditor = this.hot.getActiveEditor();
852
+ if (!activeEditor || activeElement !== this.focusableElement.getFocusableElement() && activeElement !== activeEditor.select) {
853
+ return;
854
+ }
855
+ this.getOrCreateFocusableElement();
856
+ this.focusableElement.focus();
775
857
  }
776
858
 
777
859
  /**
@@ -780,6 +862,10 @@ var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
780
862
  }, {
781
863
  key: "destroy",
782
864
  value: function destroy() {
865
+ if (this.focusableElement) {
866
+ (0, _focusableElement.destroyElement)(this.focusableElement);
867
+ this.focusableElement = null;
868
+ }
783
869
  _get(_getPrototypeOf(CopyPaste.prototype), "destroy", this).call(this);
784
870
  }
785
871
  }], [{
@@ -54,21 +54,23 @@ import "core-js/modules/es.reflect.get.js";
54
54
  import "core-js/modules/es.object.get-own-property-descriptor.js";
55
55
  import "core-js/modules/es.symbol.iterator.js";
56
56
  import "core-js/modules/es.array.slice.js";
57
+ import "core-js/modules/es.regexp.to-string.js";
57
58
  import "core-js/modules/es.function.name.js";
58
59
  import { BasePlugin } from "../base/index.mjs";
59
60
  import Hooks from "../../pluginHooks.mjs";
60
61
  import { stringify, parse } from "../../3rdparty/SheetClip/index.mjs";
61
62
  import { arrayEach } from "../../helpers/array.mjs";
62
63
  import { sanitize } from "../../helpers/string.mjs";
64
+ import { getSelectionText } from "../../helpers/dom/element.mjs";
63
65
  import copyItem from "./contextMenuItem/copy.mjs";
64
66
  import copyColumnHeadersOnlyItem from "./contextMenuItem/copyColumnHeadersOnly.mjs";
65
67
  import copyWithColumnGroupHeadersItem from "./contextMenuItem/copyWithColumnGroupHeaders.mjs";
66
68
  import copyWithColumnHeadersItem from "./contextMenuItem/copyWithColumnHeaders.mjs";
67
69
  import cutItem from "./contextMenuItem/cut.mjs";
68
70
  import PasteEvent from "./pasteEvent.mjs";
71
+ import { createElement, destroyElement } from "./focusableElement.mjs";
69
72
  import { CopyableRangesFactory, normalizeRanges } from "./copyableRanges.mjs";
70
73
  import { _dataToHTML, htmlToGridSettings } from "../../utils/parseTable.mjs";
71
- import EventManager from "../../eventManager.mjs";
72
74
  Hooks.getSingleton().register('afterCopyLimit');
73
75
  Hooks.getSingleton().register('modifyCopyableRange');
74
76
  Hooks.getSingleton().register('beforeCut');
@@ -271,6 +273,13 @@ export var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
271
273
  * @type {Array<{startRow: number, startCol: number, endRow: number, endCol: number}>}
272
274
  */
273
275
  _defineProperty(_assertThisInitialized(_this), "copyableRanges", []);
276
+ /**
277
+ * Provides focusable element to support IME and copy/paste/cut actions.
278
+ *
279
+ * @private
280
+ * @type {FocusableWrapper}
281
+ */
282
+ _defineProperty(_assertThisInitialized(_this), "focusableElement", void 0);
274
283
  return _this;
275
284
  }
276
285
  _createClass(CopyPaste, [{
@@ -313,18 +322,22 @@ export var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
313
322
  this.addHook('afterContextMenuDefaultOptions', function (options) {
314
323
  return _this2.onAfterContextMenuDefaultOptions(options);
315
324
  });
325
+ this.addHook('afterOnCellMouseUp', function () {
326
+ return _this2.onAfterOnCellMouseUp();
327
+ });
316
328
  this.addHook('afterSelectionEnd', function () {
317
329
  return _this2.onAfterSelectionEnd();
318
330
  });
319
- this.eventManager = new EventManager(this);
320
- this.eventManager.addEventListener(this.hot.rootDocument, 'copy', function () {
321
- return _this2.onCopy.apply(_this2, arguments);
322
- });
323
- this.eventManager.addEventListener(this.hot.rootDocument, 'cut', function () {
324
- return _this2.onCut.apply(_this2, arguments);
331
+ this.addHook('beforeKeyDown', function () {
332
+ return _this2.onBeforeKeyDown();
325
333
  });
326
- this.eventManager.addEventListener(this.hot.rootDocument, 'paste', function () {
327
- return _this2.onPaste.apply(_this2, arguments);
334
+ this.focusableElement = createElement(this.uiContainer);
335
+ this.focusableElement.addLocalHook('copy', function (event) {
336
+ return _this2.onCopy(event);
337
+ }).addLocalHook('cut', function (event) {
338
+ return _this2.onCut(event);
339
+ }).addLocalHook('paste', function (event) {
340
+ return _this2.onPaste(event);
328
341
  });
329
342
  _get(_getPrototypeOf(CopyPaste.prototype), "enablePlugin", this).call(this);
330
343
  }
@@ -342,6 +355,7 @@ export var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
342
355
  value: function updatePlugin() {
343
356
  this.disablePlugin();
344
357
  this.enablePlugin();
358
+ this.getOrCreateFocusableElement();
345
359
  _get(_getPrototypeOf(CopyPaste.prototype), "updatePlugin", this).call(this);
346
360
  }
347
361
 
@@ -351,6 +365,9 @@ export var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
351
365
  }, {
352
366
  key: "disablePlugin",
353
367
  value: function disablePlugin() {
368
+ if (this.focusableElement) {
369
+ destroyElement(this.focusableElement);
370
+ }
354
371
  _get(_getPrototypeOf(CopyPaste.prototype), "disablePlugin", this).call(this);
355
372
  }
356
373
 
@@ -374,6 +391,8 @@ export var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
374
391
  var copyMode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'cells-only';
375
392
  _classPrivateFieldSet(this, _copyMode, copyMode);
376
393
  _classPrivateFieldSet(this, _isTriggeredByCopy, true);
394
+ this.getOrCreateFocusableElement();
395
+ this.focusableElement.focus();
377
396
  this.hot.rootDocument.execCommand('copy');
378
397
  }
379
398
 
@@ -417,6 +436,8 @@ export var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
417
436
  key: "cut",
418
437
  value: function cut() {
419
438
  _classPrivateFieldSet(this, _isTriggeredByCut, true);
439
+ this.getOrCreateFocusableElement();
440
+ this.focusableElement.focus();
420
441
  this.hot.rootDocument.execCommand('cut');
421
442
  }
422
443
 
@@ -486,6 +507,7 @@ export var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
486
507
  if (pastableHtml) {
487
508
  pasteData.clipboardData.setData('text/html', pastableHtml);
488
509
  }
510
+ this.getOrCreateFocusableElement();
489
511
  this.onPaste(pasteData);
490
512
  }
491
513
 
@@ -499,6 +521,10 @@ export var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
499
521
  if (!selectionRange) {
500
522
  return;
501
523
  }
524
+ if (selectionRange.isSingleHeader()) {
525
+ this.copyableRanges = [];
526
+ return;
527
+ }
502
528
  _classPrivateFieldGet(this, _copyableRangesFactory).setSelectedRange(selectionRange);
503
529
  var groupedRanges = new Map([['headers', null], ['cells', null]]);
504
530
  if (_classPrivateFieldGet(this, _copyMode) === 'column-headers-only') {
@@ -536,6 +562,23 @@ export var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
536
562
  }
537
563
  }
538
564
 
565
+ /**
566
+ * Force focus on editable element.
567
+ *
568
+ * @private
569
+ */
570
+ }, {
571
+ key: "getOrCreateFocusableElement",
572
+ value: function getOrCreateFocusableElement() {
573
+ var _this$hot$getActiveEd;
574
+ var editableElement = (_this$hot$getActiveEd = this.hot.getActiveEditor()) === null || _this$hot$getActiveEd === void 0 ? void 0 : _this$hot$getActiveEd.TEXTAREA;
575
+ if (editableElement) {
576
+ this.focusableElement.setFocusableElement(editableElement);
577
+ } else {
578
+ this.focusableElement.useSecondaryElement();
579
+ }
580
+ }
581
+
539
582
  /**
540
583
  * Verifies if editor exists and is open.
541
584
  *
@@ -545,8 +588,8 @@ export var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
545
588
  }, {
546
589
  key: "isEditorOpened",
547
590
  value: function isEditorOpened() {
548
- var _this$hot$getActiveEd;
549
- return (_this$hot$getActiveEd = this.hot.getActiveEditor()) === null || _this$hot$getActiveEd === void 0 ? void 0 : _this$hot$getActiveEd.isOpened();
591
+ var _this$hot$getActiveEd2;
592
+ return (_this$hot$getActiveEd2 = this.hot.getActiveEditor()) === null || _this$hot$getActiveEd2 === void 0 ? void 0 : _this$hot$getActiveEd2.isOpened();
550
593
  }
551
594
  }, {
552
595
  key: "populateValues",
@@ -685,7 +728,7 @@ export var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
685
728
  }, {
686
729
  key: "onPaste",
687
730
  value: function onPaste(event) {
688
- if (!this.hot.isListening() || this.isEditorOpened()) {
731
+ if (!this.hot.isListening() || this.isEditorOpened() || !this.hot.getSelected()) {
689
732
  return;
690
733
  }
691
734
  if (event && event.preventDefault) {
@@ -710,7 +753,7 @@ export var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
710
753
  if (typeof pastedData === 'string') {
711
754
  pastedData = parse(pastedData);
712
755
  }
713
- if (pastedData && pastedData.length === 0) {
756
+ if (pastedData === void 0 || pastedData && pastedData.length === 0) {
714
757
  return;
715
758
  }
716
759
  if (this.hot.runHooks('beforePaste', pastedData, this.copyableRanges) === false) {
@@ -750,6 +793,23 @@ export var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
750
793
  options.items.push(cutItem(this));
751
794
  }
752
795
 
796
+ /**
797
+ * Force focus on focusableElement.
798
+ *
799
+ * @private
800
+ */
801
+ }, {
802
+ key: "onAfterOnCellMouseUp",
803
+ value: function onAfterOnCellMouseUp() {
804
+ // Changing focused element will remove current selection. It's unnecessary in case when we give possibility
805
+ // for fragment selection
806
+ if (!this.hot.isListening() || this.isEditorOpened() || this.hot.getSettings().fragmentSelection) {
807
+ return;
808
+ }
809
+ this.getOrCreateFocusableElement();
810
+ this.focusableElement.focus();
811
+ }
812
+
753
813
  /**
754
814
  * Force focus on focusableElement after end of the selection.
755
815
  *
@@ -761,10 +821,32 @@ export var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
761
821
  if (this.isEditorOpened()) {
762
822
  return;
763
823
  }
764
- if (this.hot.getSettings().fragmentSelection) {
824
+ this.getOrCreateFocusableElement();
825
+ if (this.hot.getSettings().fragmentSelection && this.focusableElement.getFocusableElement() !== this.hot.rootDocument.activeElement && getSelectionText()) {
765
826
  return;
766
827
  }
767
828
  this.setCopyableText();
829
+ this.focusableElement.focus();
830
+ }
831
+
832
+ /**
833
+ * `beforeKeyDown` listener to force focus of focusableElement.
834
+ *
835
+ * @private
836
+ */
837
+ }, {
838
+ key: "onBeforeKeyDown",
839
+ value: function onBeforeKeyDown() {
840
+ if (!this.hot.isListening() || this.isEditorOpened()) {
841
+ return;
842
+ }
843
+ var activeElement = this.hot.rootDocument.activeElement;
844
+ var activeEditor = this.hot.getActiveEditor();
845
+ if (!activeEditor || activeElement !== this.focusableElement.getFocusableElement() && activeElement !== activeEditor.select) {
846
+ return;
847
+ }
848
+ this.getOrCreateFocusableElement();
849
+ this.focusableElement.focus();
768
850
  }
769
851
 
770
852
  /**
@@ -773,6 +855,10 @@ export var CopyPaste = /*#__PURE__*/function (_BasePlugin) {
773
855
  }, {
774
856
  key: "destroy",
775
857
  value: function destroy() {
858
+ if (this.focusableElement) {
859
+ destroyElement(this.focusableElement);
860
+ this.focusableElement = null;
861
+ }
776
862
  _get(_getPrototypeOf(CopyPaste.prototype), "destroy", this).call(this);
777
863
  }
778
864
  }], [{