handsontable 0.0.0-next-b0a4ea2-20231024 → 0.0.0-next-9059914-20231025

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 (446) hide show
  1. package/3rdparty/walkontable/src/{selection/border/border.js → border.js} +12 -7
  2. package/3rdparty/walkontable/src/{selection/border/border.mjs → border.mjs} +12 -7
  3. package/3rdparty/walkontable/src/cell/coords.d.ts +1 -6
  4. package/3rdparty/walkontable/src/cell/coords.js +11 -50
  5. package/3rdparty/walkontable/src/cell/coords.mjs +11 -50
  6. package/3rdparty/walkontable/src/cell/range.d.ts +2 -9
  7. package/3rdparty/walkontable/src/cell/range.js +7 -38
  8. package/3rdparty/walkontable/src/cell/range.mjs +7 -38
  9. package/3rdparty/walkontable/src/core/_base.js +3 -9
  10. package/3rdparty/walkontable/src/core/_base.mjs +3 -9
  11. package/3rdparty/walkontable/src/core/clone.js +2 -2
  12. package/3rdparty/walkontable/src/core/clone.mjs +2 -2
  13. package/3rdparty/walkontable/src/core/core.js +2 -3
  14. package/3rdparty/walkontable/src/core/core.mjs +2 -3
  15. package/3rdparty/walkontable/src/event.js +10 -12
  16. package/3rdparty/walkontable/src/event.mjs +10 -12
  17. package/3rdparty/walkontable/src/facade/core.js +2 -2
  18. package/3rdparty/walkontable/src/facade/core.mjs +2 -2
  19. package/3rdparty/walkontable/src/index.js +2 -10
  20. package/3rdparty/walkontable/src/index.mjs +2 -2
  21. package/3rdparty/walkontable/src/overlay/_base.js +2 -13
  22. package/3rdparty/walkontable/src/overlay/_base.mjs +3 -14
  23. package/3rdparty/walkontable/src/overlay/inlineStart.js +6 -2
  24. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +6 -2
  25. package/3rdparty/walkontable/src/overlay/top.js +6 -2
  26. package/3rdparty/walkontable/src/overlay/top.mjs +6 -2
  27. package/3rdparty/walkontable/src/renderer/cells.js +0 -10
  28. package/3rdparty/walkontable/src/renderer/cells.mjs +1 -11
  29. package/3rdparty/walkontable/src/renderer/columnHeaders.js +0 -10
  30. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +1 -11
  31. package/3rdparty/walkontable/src/renderer/rowHeaders.js +0 -5
  32. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +0 -5
  33. package/3rdparty/walkontable/src/renderer/rows.js +0 -13
  34. package/3rdparty/walkontable/src/renderer/rows.mjs +0 -13
  35. package/3rdparty/walkontable/src/renderer/table.js +0 -9
  36. package/3rdparty/walkontable/src/renderer/table.mjs +0 -9
  37. package/3rdparty/walkontable/src/scroll.js +0 -2
  38. package/3rdparty/walkontable/src/scroll.mjs +0 -2
  39. package/3rdparty/walkontable/src/selection.js +295 -0
  40. package/3rdparty/walkontable/src/selection.mjs +290 -0
  41. package/3rdparty/walkontable/src/settings.js +4 -13
  42. package/3rdparty/walkontable/src/settings.mjs +4 -13
  43. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +0 -9
  44. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +0 -9
  45. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +0 -9
  46. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +0 -9
  47. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +0 -9
  48. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +0 -9
  49. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +0 -9
  50. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +0 -9
  51. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +0 -9
  52. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +0 -9
  53. package/3rdparty/walkontable/src/table.js +78 -19
  54. package/3rdparty/walkontable/src/table.mjs +79 -20
  55. package/base.js +2 -2
  56. package/base.mjs +2 -2
  57. package/cellTypes/dateType/dateType.d.ts +3 -3
  58. package/cellTypes/dateType/dateType.js +2 -2
  59. package/cellTypes/dateType/dateType.mjs +2 -2
  60. package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
  61. package/cellTypes/handsontableType/handsontableType.js +2 -2
  62. package/cellTypes/handsontableType/handsontableType.mjs +2 -2
  63. package/cellTypes/index.d.ts +0 -3
  64. package/cellTypes/index.js +0 -4
  65. package/cellTypes/index.mjs +1 -3
  66. package/core.d.ts +4 -9
  67. package/core.js +327 -285
  68. package/core.mjs +327 -285
  69. package/dataMap/metaManager/metaSchema.js +0 -65
  70. package/dataMap/metaManager/metaSchema.mjs +0 -65
  71. package/dataMap/metaManager/mods/extendMetaProperties.js +1 -7
  72. package/dataMap/metaManager/mods/extendMetaProperties.mjs +1 -7
  73. package/dataMap/replaceData.js +0 -5
  74. package/dataMap/replaceData.mjs +0 -5
  75. package/dist/handsontable.css +15 -51
  76. package/dist/handsontable.full.css +15 -51
  77. package/dist/handsontable.full.js +8668 -14188
  78. package/dist/handsontable.full.min.css +7 -7
  79. package/dist/handsontable.full.min.js +136 -136
  80. package/dist/handsontable.js +22829 -28349
  81. package/dist/handsontable.min.css +6 -6
  82. package/dist/handsontable.min.js +24 -24
  83. package/dist/languages/all.js +2 -6
  84. package/dist/languages/all.min.js +1 -1
  85. package/dist/languages/en-US.js +1 -3
  86. package/dist/languages/en-US.min.js +1 -1
  87. package/dist/languages/pl-PL.js +1 -3
  88. package/dist/languages/pl-PL.min.js +1 -1
  89. package/editorManager.js +87 -15
  90. package/editorManager.mjs +87 -16
  91. package/editors/autocompleteEditor/autocompleteEditor.js +2 -53
  92. package/editors/autocompleteEditor/autocompleteEditor.mjs +3 -54
  93. package/editors/dateEditor/dateEditor.js +7 -26
  94. package/editors/dateEditor/dateEditor.mjs +8 -27
  95. package/editors/handsontableEditor/handsontableEditor.js +1 -9
  96. package/editors/handsontableEditor/handsontableEditor.mjs +2 -10
  97. package/editors/textEditor/textEditor.js +27 -19
  98. package/editors/textEditor/textEditor.mjs +30 -22
  99. package/helpers/dom/element.js +9 -188
  100. package/helpers/dom/element.mjs +9 -182
  101. package/helpers/mixed.js +1 -1
  102. package/helpers/mixed.mjs +1 -1
  103. package/helpers/number.d.ts +0 -1
  104. package/helpers/number.js +0 -18
  105. package/helpers/number.mjs +0 -17
  106. package/i18n/constants.js +1 -7
  107. package/i18n/constants.mjs +1 -4
  108. package/i18n/languages/en-US.js +1 -3
  109. package/i18n/languages/en-US.mjs +1 -3
  110. package/i18n/languages/pl-PL.js +1 -3
  111. package/i18n/languages/pl-PL.mjs +1 -3
  112. package/languages/all.js +2 -6
  113. package/languages/en-US.js +1 -3
  114. package/languages/en-US.mjs +1 -3
  115. package/languages/index.js +2 -6
  116. package/languages/pl-PL.js +1 -3
  117. package/languages/pl-PL.mjs +1 -3
  118. package/package.json +99 -116
  119. package/pluginHooks.d.ts +1 -12
  120. package/pluginHooks.js +1 -152
  121. package/pluginHooks.mjs +1 -152
  122. package/plugins/collapsibleColumns/collapsibleColumns.js +4 -74
  123. package/plugins/collapsibleColumns/collapsibleColumns.mjs +5 -75
  124. package/plugins/columnSorting/columnSorting.js +0 -43
  125. package/plugins/columnSorting/columnSorting.mjs +3 -44
  126. package/plugins/columnSorting/index.js +1 -3
  127. package/plugins/columnSorting/index.mjs +1 -1
  128. package/plugins/comments/commentEditor.js +0 -1
  129. package/plugins/comments/commentEditor.mjs +0 -1
  130. package/plugins/comments/comments.js +189 -252
  131. package/plugins/comments/comments.mjs +190 -251
  132. package/plugins/contextMenu/commandExecutor.js +3 -2
  133. package/plugins/contextMenu/commandExecutor.mjs +3 -2
  134. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  135. package/plugins/contextMenu/contextMenu.js +36 -75
  136. package/plugins/contextMenu/contextMenu.mjs +35 -74
  137. package/plugins/contextMenu/{menu/cursor.mjs → cursor.js} +10 -4
  138. package/plugins/contextMenu/{menu/cursor.js → cursor.mjs} +4 -6
  139. package/plugins/contextMenu/itemsFactory.js +3 -2
  140. package/plugins/contextMenu/itemsFactory.mjs +4 -3
  141. package/plugins/contextMenu/{menu/menu.js → menu.js} +421 -145
  142. package/plugins/contextMenu/{menu/menu.mjs → menu.mjs} +422 -146
  143. package/plugins/contextMenu/predefinedItems/alignment.js +0 -7
  144. package/plugins/contextMenu/predefinedItems/alignment.mjs +0 -7
  145. package/plugins/contextMenu/predefinedItems/clearColumn.js +3 -5
  146. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +3 -5
  147. package/plugins/contextMenu/predefinedItems/columnLeft.js +3 -5
  148. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +3 -5
  149. package/plugins/contextMenu/predefinedItems/columnRight.js +3 -5
  150. package/plugins/contextMenu/predefinedItems/columnRight.mjs +3 -5
  151. package/plugins/contextMenu/predefinedItems/readOnly.js +0 -7
  152. package/plugins/contextMenu/predefinedItems/readOnly.mjs +0 -7
  153. package/plugins/contextMenu/predefinedItems/removeColumn.js +5 -7
  154. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +3 -5
  155. package/plugins/contextMenu/predefinedItems/removeRow.js +5 -7
  156. package/plugins/contextMenu/predefinedItems/removeRow.mjs +3 -5
  157. package/plugins/contextMenu/predefinedItems/rowAbove.js +3 -5
  158. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +3 -5
  159. package/plugins/contextMenu/predefinedItems/rowBelow.js +3 -5
  160. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +3 -5
  161. package/plugins/contextMenu/{predefinedItems/index.js → predefinedItems.js} +14 -14
  162. package/plugins/contextMenu/predefinedItems.mjs +68 -0
  163. package/plugins/contextMenu/utils.js +151 -35
  164. package/plugins/contextMenu/utils.mjs +144 -35
  165. package/plugins/copyPaste/contextMenuItem/copy.js +0 -7
  166. package/plugins/copyPaste/contextMenuItem/copy.mjs +0 -7
  167. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +1 -9
  168. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +1 -9
  169. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +1 -9
  170. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +1 -9
  171. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +1 -9
  172. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +1 -9
  173. package/plugins/copyPaste/contextMenuItem/cut.js +0 -7
  174. package/plugins/copyPaste/contextMenuItem/cut.mjs +0 -7
  175. package/plugins/copyPaste/copyPaste.js +78 -127
  176. package/plugins/copyPaste/copyPaste.mjs +79 -128
  177. package/plugins/copyPaste/focusableElement.js +186 -0
  178. package/plugins/copyPaste/focusableElement.mjs +180 -0
  179. package/plugins/customBorders/customBorders.js +20 -23
  180. package/plugins/customBorders/customBorders.mjs +21 -24
  181. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  182. package/plugins/dropdownMenu/dropdownMenu.js +40 -127
  183. package/plugins/dropdownMenu/dropdownMenu.mjs +39 -126
  184. package/plugins/filters/component/_base.js +8 -23
  185. package/plugins/filters/component/_base.mjs +8 -23
  186. package/plugins/filters/component/actionBar.js +27 -29
  187. package/plugins/filters/component/actionBar.mjs +23 -26
  188. package/plugins/filters/component/condition.js +59 -46
  189. package/plugins/filters/component/condition.mjs +52 -40
  190. package/plugins/filters/component/operators.js +22 -21
  191. package/plugins/filters/component/operators.mjs +18 -18
  192. package/plugins/filters/component/value.js +26 -35
  193. package/plugins/filters/component/value.mjs +22 -32
  194. package/plugins/filters/constants.mjs +1 -1
  195. package/plugins/filters/filters.js +62 -106
  196. package/plugins/filters/filters.mjs +55 -99
  197. package/plugins/filters/ui/_base.js +13 -35
  198. package/plugins/filters/ui/_base.mjs +13 -35
  199. package/plugins/filters/ui/input.js +32 -43
  200. package/plugins/filters/ui/input.mjs +30 -42
  201. package/plugins/filters/ui/link.js +12 -44
  202. package/plugins/filters/ui/link.mjs +11 -44
  203. package/plugins/filters/ui/multipleSelect.js +129 -234
  204. package/plugins/filters/ui/multipleSelect.mjs +127 -232
  205. package/plugins/filters/ui/radioInput.js +18 -42
  206. package/plugins/filters/ui/radioInput.mjs +17 -42
  207. package/plugins/filters/ui/select.js +75 -144
  208. package/plugins/filters/ui/select.mjs +72 -142
  209. package/plugins/hiddenColumns/hiddenColumns.mjs +1 -1
  210. package/plugins/hiddenRows/hiddenRows.mjs +1 -1
  211. package/plugins/manualColumnMove/manualColumnMove.js +1 -3
  212. package/plugins/manualColumnMove/manualColumnMove.mjs +1 -3
  213. package/plugins/mergeCells/mergeCells.js +16 -5
  214. package/plugins/mergeCells/mergeCells.mjs +16 -5
  215. package/plugins/multiColumnSorting/multiColumnSorting.js +2 -37
  216. package/plugins/multiColumnSorting/multiColumnSorting.mjs +2 -37
  217. package/plugins/nestedHeaders/nestedHeaders.js +10 -240
  218. package/plugins/nestedHeaders/nestedHeaders.mjs +11 -241
  219. package/plugins/nestedHeaders/stateManager/index.js +3 -102
  220. package/plugins/nestedHeaders/stateManager/index.mjs +3 -102
  221. package/plugins/nestedRows/nestedRows.js +0 -41
  222. package/plugins/nestedRows/nestedRows.mjs +0 -41
  223. package/plugins/nestedRows/ui/headers.js +0 -11
  224. package/plugins/nestedRows/ui/headers.mjs +1 -12
  225. package/renderers/autocompleteRenderer/autocompleteRenderer.js +0 -8
  226. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +0 -8
  227. package/renderers/baseRenderer/baseRenderer.js +0 -17
  228. package/renderers/baseRenderer/baseRenderer.mjs +1 -18
  229. package/renderers/checkboxRenderer/checkboxRenderer.js +4 -9
  230. package/renderers/checkboxRenderer/checkboxRenderer.mjs +4 -9
  231. package/renderers/index.d.ts +0 -9
  232. package/selection/highlight/constants.js +15 -0
  233. package/selection/highlight/constants.mjs +6 -0
  234. package/selection/highlight/highlight.js +71 -256
  235. package/selection/highlight/highlight.mjs +71 -250
  236. package/selection/highlight/types/activeHeader.js +8 -10
  237. package/selection/highlight/types/activeHeader.mjs +8 -10
  238. package/selection/highlight/types/area.js +18 -6
  239. package/selection/highlight/types/area.mjs +18 -6
  240. package/selection/highlight/types/{focus.js → cell.js} +7 -5
  241. package/selection/highlight/types/{focus.mjs → cell.mjs} +7 -5
  242. package/selection/highlight/types/customSelection.js +9 -7
  243. package/selection/highlight/types/customSelection.mjs +9 -7
  244. package/selection/highlight/types/fill.js +7 -5
  245. package/selection/highlight/types/fill.mjs +7 -5
  246. package/selection/highlight/types/header.js +18 -9
  247. package/selection/highlight/types/header.mjs +18 -9
  248. package/selection/highlight/types/index.js +35 -0
  249. package/selection/highlight/types/index.mjs +31 -0
  250. package/selection/highlight/visualSelection.js +27 -31
  251. package/selection/highlight/visualSelection.mjs +27 -31
  252. package/selection/index.js +7 -4
  253. package/selection/index.mjs +3 -2
  254. package/selection/mouseEventHandler.js +1 -7
  255. package/selection/mouseEventHandler.mjs +1 -7
  256. package/selection/range.js +8 -8
  257. package/selection/range.mjs +8 -8
  258. package/selection/selection.js +152 -321
  259. package/selection/selection.mjs +151 -318
  260. package/selection/transformation.js +90 -232
  261. package/selection/transformation.mjs +90 -232
  262. package/selection/utils.js +21 -15
  263. package/selection/utils.mjs +21 -16
  264. package/settings.d.ts +0 -4
  265. package/shortcuts/context.js +4 -23
  266. package/shortcuts/context.mjs +5 -23
  267. package/shortcuts/manager.js +7 -25
  268. package/shortcuts/manager.mjs +7 -26
  269. package/shortcuts/recorder.js +3 -3
  270. package/shortcuts/recorder.mjs +3 -3
  271. package/shortcuts/utils.js +5 -19
  272. package/shortcuts/utils.mjs +4 -18
  273. package/tableView.js +13 -111
  274. package/tableView.mjs +14 -112
  275. package/3rdparty/walkontable/src/selection/border/constants.js +0 -16
  276. package/3rdparty/walkontable/src/selection/border/constants.mjs +0 -12
  277. package/3rdparty/walkontable/src/selection/constants.js +0 -62
  278. package/3rdparty/walkontable/src/selection/constants.mjs +0 -51
  279. package/3rdparty/walkontable/src/selection/index.js +0 -26
  280. package/3rdparty/walkontable/src/selection/index.mjs +0 -5
  281. package/3rdparty/walkontable/src/selection/manager.js +0 -274
  282. package/3rdparty/walkontable/src/selection/manager.mjs +0 -269
  283. package/3rdparty/walkontable/src/selection/scanner.js +0 -270
  284. package/3rdparty/walkontable/src/selection/scanner.mjs +0 -267
  285. package/3rdparty/walkontable/src/selection/selection.js +0 -101
  286. package/3rdparty/walkontable/src/selection/selection.mjs +0 -96
  287. package/cellTypes/selectType/index.d.ts +0 -1
  288. package/cellTypes/selectType/index.js +0 -6
  289. package/cellTypes/selectType/index.mjs +0 -1
  290. package/cellTypes/selectType/selectType.d.ts +0 -14
  291. package/cellTypes/selectType/selectType.js +0 -13
  292. package/cellTypes/selectType/selectType.mjs +0 -8
  293. package/core/focusCatcher/focusDetector.js +0 -63
  294. package/core/focusCatcher/focusDetector.mjs +0 -59
  295. package/core/focusCatcher/index.js +0 -142
  296. package/core/focusCatcher/index.mjs +0 -138
  297. package/core/index.js +0 -9
  298. package/core/index.mjs +0 -1
  299. package/focusManager.d.ts +0 -12
  300. package/focusManager.js +0 -265
  301. package/focusManager.mjs +0 -261
  302. package/helpers/a11y.js +0 -79
  303. package/helpers/a11y.mjs +0 -38
  304. package/plugins/comments/contextMenuItem/addEditComment.js +0 -41
  305. package/plugins/comments/contextMenuItem/addEditComment.mjs +0 -35
  306. package/plugins/comments/contextMenuItem/readOnlyComment.js +0 -49
  307. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +0 -43
  308. package/plugins/comments/contextMenuItem/removeComment.js +0 -38
  309. package/plugins/comments/contextMenuItem/removeComment.mjs +0 -32
  310. package/plugins/contextMenu/menu/defaultShortcutsList.js +0 -88
  311. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +0 -84
  312. package/plugins/contextMenu/menu/index.js +0 -9
  313. package/plugins/contextMenu/menu/index.mjs +0 -1
  314. package/plugins/contextMenu/menu/menuItemRenderer.js +0 -58
  315. package/plugins/contextMenu/menu/menuItemRenderer.mjs +0 -54
  316. package/plugins/contextMenu/menu/navigator.js +0 -27
  317. package/plugins/contextMenu/menu/navigator.mjs +0 -23
  318. package/plugins/contextMenu/menu/positioner.js +0 -213
  319. package/plugins/contextMenu/menu/positioner.mjs +0 -209
  320. package/plugins/contextMenu/menu/shortcuts.js +0 -114
  321. package/plugins/contextMenu/menu/shortcuts.mjs +0 -110
  322. package/plugins/contextMenu/menu/utils.js +0 -177
  323. package/plugins/contextMenu/menu/utils.mjs +0 -163
  324. package/plugins/contextMenu/predefinedItems/index.mjs +0 -68
  325. package/plugins/filters/menu/focusController.js +0 -123
  326. package/plugins/filters/menu/focusController.mjs +0 -119
  327. package/plugins/filters/menu/focusNavigator.js +0 -30
  328. package/plugins/filters/menu/focusNavigator.mjs +0 -26
  329. package/renderers/dateRenderer/dateRenderer.d.ts +0 -5
  330. package/renderers/dateRenderer/dateRenderer.js +0 -29
  331. package/renderers/dateRenderer/dateRenderer.mjs +0 -24
  332. package/renderers/dateRenderer/index.d.ts +0 -1
  333. package/renderers/dateRenderer/index.js +0 -6
  334. package/renderers/dateRenderer/index.mjs +0 -1
  335. package/renderers/handsontableRenderer/handsontableRenderer.d.ts +0 -5
  336. package/renderers/handsontableRenderer/handsontableRenderer.js +0 -29
  337. package/renderers/handsontableRenderer/handsontableRenderer.mjs +0 -24
  338. package/renderers/handsontableRenderer/index.d.ts +0 -1
  339. package/renderers/handsontableRenderer/index.js +0 -6
  340. package/renderers/handsontableRenderer/index.mjs +0 -1
  341. package/renderers/selectRenderer/index.d.ts +0 -1
  342. package/renderers/selectRenderer/index.js +0 -6
  343. package/renderers/selectRenderer/index.mjs +0 -1
  344. package/renderers/selectRenderer/selectRenderer.d.ts +0 -5
  345. package/renderers/selectRenderer/selectRenderer.js +0 -27
  346. package/renderers/selectRenderer/selectRenderer.mjs +0 -22
  347. package/selection/highlight/types/areaLayered.js +0 -31
  348. package/selection/highlight/types/areaLayered.mjs +0 -26
  349. package/selection/highlight/types/column.js +0 -27
  350. package/selection/highlight/types/column.mjs +0 -22
  351. package/selection/highlight/types/row.js +0 -27
  352. package/selection/highlight/types/row.mjs +0 -22
  353. package/shortcutContexts/commands/editor/closeAndSave.js +0 -12
  354. package/shortcutContexts/commands/editor/closeAndSave.mjs +0 -8
  355. package/shortcutContexts/commands/editor/closeWithoutSaving.js +0 -12
  356. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +0 -8
  357. package/shortcutContexts/commands/editor/fastOpen.js +0 -16
  358. package/shortcutContexts/commands/editor/fastOpen.mjs +0 -12
  359. package/shortcutContexts/commands/editor/index.js +0 -16
  360. package/shortcutContexts/commands/editor/index.mjs +0 -12
  361. package/shortcutContexts/commands/editor/open.js +0 -27
  362. package/shortcutContexts/commands/editor/open.mjs +0 -23
  363. package/shortcutContexts/commands/emptySelectedCells.js +0 -11
  364. package/shortcutContexts/commands/emptySelectedCells.mjs +0 -7
  365. package/shortcutContexts/commands/extendCellsSelection/down.js +0 -15
  366. package/shortcutContexts/commands/extendCellsSelection/down.mjs +0 -11
  367. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +0 -25
  368. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +0 -21
  369. package/shortcutContexts/commands/extendCellsSelection/index.js +0 -26
  370. package/shortcutContexts/commands/extendCellsSelection/index.mjs +0 -22
  371. package/shortcutContexts/commands/extendCellsSelection/left.js +0 -15
  372. package/shortcutContexts/commands/extendCellsSelection/left.mjs +0 -11
  373. package/shortcutContexts/commands/extendCellsSelection/right.js +0 -15
  374. package/shortcutContexts/commands/extendCellsSelection/right.mjs +0 -11
  375. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +0 -19
  376. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +0 -15
  377. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +0 -29
  378. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +0 -25
  379. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +0 -19
  380. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +0 -15
  381. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +0 -19
  382. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +0 -15
  383. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +0 -29
  384. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +0 -25
  385. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +0 -29
  386. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +0 -25
  387. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +0 -29
  388. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +0 -25
  389. package/shortcutContexts/commands/extendCellsSelection/toRows.js +0 -19
  390. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +0 -15
  391. package/shortcutContexts/commands/extendCellsSelection/up.js +0 -15
  392. package/shortcutContexts/commands/extendCellsSelection/up.mjs +0 -11
  393. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +0 -25
  394. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +0 -21
  395. package/shortcutContexts/commands/index.js +0 -35
  396. package/shortcutContexts/commands/index.mjs +0 -31
  397. package/shortcutContexts/commands/moveCellSelection/down.js +0 -13
  398. package/shortcutContexts/commands/moveCellSelection/down.mjs +0 -9
  399. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +0 -33
  400. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +0 -29
  401. package/shortcutContexts/commands/moveCellSelection/index.js +0 -28
  402. package/shortcutContexts/commands/moveCellSelection/index.mjs +0 -24
  403. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +0 -12
  404. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +0 -8
  405. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +0 -12
  406. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +0 -8
  407. package/shortcutContexts/commands/moveCellSelection/left.js +0 -10
  408. package/shortcutContexts/commands/moveCellSelection/left.mjs +0 -6
  409. package/shortcutContexts/commands/moveCellSelection/right.js +0 -10
  410. package/shortcutContexts/commands/moveCellSelection/right.mjs +0 -6
  411. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +0 -17
  412. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +0 -13
  413. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +0 -18
  414. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +0 -14
  415. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +0 -14
  416. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +0 -10
  417. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +0 -17
  418. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +0 -13
  419. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +0 -19
  420. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +0 -15
  421. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +0 -21
  422. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +0 -17
  423. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +0 -17
  424. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +0 -13
  425. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +0 -19
  426. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +0 -15
  427. package/shortcutContexts/commands/moveCellSelection/up.js +0 -13
  428. package/shortcutContexts/commands/moveCellSelection/up.mjs +0 -9
  429. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +0 -33
  430. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +0 -29
  431. package/shortcutContexts/commands/populateSelectedCellsData.js +0 -29
  432. package/shortcutContexts/commands/populateSelectedCellsData.mjs +0 -25
  433. package/shortcutContexts/commands/scrollToFocusedCell.js +0 -35
  434. package/shortcutContexts/commands/scrollToFocusedCell.mjs +0 -31
  435. package/shortcutContexts/commands/selectAll.js +0 -12
  436. package/shortcutContexts/commands/selectAll.mjs +0 -8
  437. package/shortcutContexts/constants.js +0 -13
  438. package/shortcutContexts/constants.mjs +0 -8
  439. package/shortcutContexts/editor.js +0 -25
  440. package/shortcutContexts/editor.mjs +0 -21
  441. package/shortcutContexts/grid.js +0 -163
  442. package/shortcutContexts/grid.mjs +0 -159
  443. package/shortcutContexts/index.js +0 -24
  444. package/shortcutContexts/index.mjs +0 -11
  445. package/utils/paginator.js +0 -151
  446. package/utils/paginator.mjs +0 -147
@@ -6,9 +6,9 @@ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollect
6
6
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
7
7
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
8
8
  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); }
9
+ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
9
10
  function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
10
11
  function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
11
- function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
12
12
  function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
13
13
  function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
14
14
  function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
@@ -17,17 +17,16 @@ import Hooks from "../../pluginHooks.mjs";
17
17
  import { stringify, parse } from "../../3rdparty/SheetClip/index.mjs";
18
18
  import { arrayEach } from "../../helpers/array.mjs";
19
19
  import { sanitize } from "../../helpers/string.mjs";
20
- import { removeContentEditableFromElementAndDeselect, runWithSelectedContendEditableElement, makeElementContentEditableAndSelectItsContent } from "../../helpers/dom/element.mjs";
21
- import { isSafari } from "../../helpers/browser.mjs";
20
+ import { getSelectionText } from "../../helpers/dom/element.mjs";
22
21
  import copyItem from "./contextMenuItem/copy.mjs";
23
22
  import copyColumnHeadersOnlyItem from "./contextMenuItem/copyColumnHeadersOnly.mjs";
24
23
  import copyWithColumnGroupHeadersItem from "./contextMenuItem/copyWithColumnGroupHeaders.mjs";
25
24
  import copyWithColumnHeadersItem from "./contextMenuItem/copyWithColumnHeaders.mjs";
26
25
  import cutItem from "./contextMenuItem/cut.mjs";
27
26
  import PasteEvent from "./pasteEvent.mjs";
27
+ import { createElement, destroyElement } from "./focusableElement.mjs";
28
28
  import { CopyableRangesFactory, normalizeRanges } from "./copyableRanges.mjs";
29
29
  import { _dataToHTML, htmlToGridSettings } from "../../utils/parseTable.mjs";
30
- import EventManager from "../../eventManager.mjs";
31
30
  Hooks.getSingleton().register('afterCopyLimit');
32
31
  Hooks.getSingleton().register('modifyCopyableRange');
33
32
  Hooks.getSingleton().register('beforeCut');
@@ -83,21 +82,10 @@ var _copyMode = /*#__PURE__*/new WeakMap();
83
82
  var _isTriggeredByCopy = /*#__PURE__*/new WeakMap();
84
83
  var _isTriggeredByCut = /*#__PURE__*/new WeakMap();
85
84
  var _copyableRangesFactory = /*#__PURE__*/new WeakMap();
86
- var _ensureClipboardEventsGetTriggered = /*#__PURE__*/new WeakSet();
87
85
  var _countCopiedHeaders = /*#__PURE__*/new WeakSet();
88
- var _addContentEditableToHighlightedCell = /*#__PURE__*/new WeakSet();
89
- var _removeContentEditableFromHighlightedCell = /*#__PURE__*/new WeakSet();
90
86
  export class CopyPaste extends BasePlugin {
91
87
  constructor() {
92
88
  super(...arguments);
93
- /**
94
- * Remove the `contenteditable` attribute from the highlighted cell and deselect its content.
95
- */
96
- _classPrivateMethodInitSpec(this, _removeContentEditableFromHighlightedCell);
97
- /**
98
- * Add the `contenteditable` attribute to the highlighted cell and select its content.
99
- */
100
- _classPrivateMethodInitSpec(this, _addContentEditableToHighlightedCell);
101
89
  /**
102
90
  * Counts how many column headers will be copied based on the passed range.
103
91
  *
@@ -107,12 +95,6 @@ export class CopyPaste extends BasePlugin {
107
95
  * information with the number of copied headers.
108
96
  */
109
97
  _classPrivateMethodInitSpec(this, _countCopiedHeaders);
110
- /**
111
- * Ensure that the `copy`/`cut` events get triggered properly in Safari.
112
- *
113
- * @param {string} eventName Name of the event to get triggered.
114
- */
115
- _classPrivateMethodInitSpec(this, _ensureClipboardEventsGetTriggered);
116
98
  /**
117
99
  * The maximum number of columns than can be copied to the clipboard.
118
100
  *
@@ -230,6 +212,13 @@ export class CopyPaste extends BasePlugin {
230
212
  * @type {Array<{startRow: number, startCol: number, endRow: number, endCol: number}>}
231
213
  */
232
214
  _defineProperty(this, "copyableRanges", []);
215
+ /**
216
+ * Provides focusable element to support IME and copy/paste/cut actions.
217
+ *
218
+ * @private
219
+ * @type {FocusableWrapper}
220
+ */
221
+ _defineProperty(this, "focusableElement", void 0);
233
222
  }
234
223
  static get PLUGIN_KEY() {
235
224
  return PLUGIN_KEY;
@@ -256,7 +245,6 @@ export class CopyPaste extends BasePlugin {
256
245
  * Enables the [`CopyPaste`](#copypaste) plugin for your Handsontable instance.
257
246
  */
258
247
  enablePlugin() {
259
- var _this = this;
260
248
  if (this.enabled) {
261
249
  return;
262
250
  }
@@ -274,28 +262,11 @@ export class CopyPaste extends BasePlugin {
274
262
  this.uiContainer = (_settings$uiContainer = settings.uiContainer) !== null && _settings$uiContainer !== void 0 ? _settings$uiContainer : this.uiContainer;
275
263
  }
276
264
  this.addHook('afterContextMenuDefaultOptions', options => this.onAfterContextMenuDefaultOptions(options));
265
+ this.addHook('afterOnCellMouseUp', () => this.onAfterOnCellMouseUp());
277
266
  this.addHook('afterSelectionEnd', () => this.onAfterSelectionEnd());
278
- this.eventManager = new EventManager(this);
279
- this.eventManager.addEventListener(this.hot.rootDocument, 'copy', function () {
280
- return _this.onCopy(...arguments);
281
- });
282
- this.eventManager.addEventListener(this.hot.rootDocument, 'cut', function () {
283
- return _this.onCut(...arguments);
284
- });
285
- this.eventManager.addEventListener(this.hot.rootDocument, 'paste', function () {
286
- return _this.onPaste(...arguments);
287
- });
288
-
289
- // Without this workaround Safari (tested on Safari@16.5.2) does allow copying/cutting from the browser menu.
290
- if (isSafari()) {
291
- this.eventManager.addEventListener(this.hot.rootDocument.body, 'mouseenter', function () {
292
- return _this.onSafariMouseEnter(...arguments);
293
- });
294
- this.eventManager.addEventListener(this.hot.rootDocument.body, 'mouseleave', function () {
295
- return _this.onSafariMouseLeave(...arguments);
296
- });
297
- this.addHook('afterSelection', () => this.onSafariAfterSelection());
298
- }
267
+ this.addHook('beforeKeyDown', () => this.onBeforeKeyDown());
268
+ this.focusableElement = createElement(this.uiContainer);
269
+ this.focusableElement.addLocalHook('copy', event => this.onCopy(event)).addLocalHook('cut', event => this.onCut(event)).addLocalHook('paste', event => this.onPaste(event));
299
270
  super.enablePlugin();
300
271
  }
301
272
 
@@ -310,6 +281,7 @@ export class CopyPaste extends BasePlugin {
310
281
  updatePlugin() {
311
282
  this.disablePlugin();
312
283
  this.enablePlugin();
284
+ this.getOrCreateFocusableElement();
313
285
  super.updatePlugin();
314
286
  }
315
287
 
@@ -317,6 +289,9 @@ export class CopyPaste extends BasePlugin {
317
289
  * Disables the [`CopyPaste`](#copypaste) plugin for your Handsontable instance.
318
290
  */
319
291
  disablePlugin() {
292
+ if (this.focusableElement) {
293
+ destroyElement(this.focusableElement);
294
+ }
320
295
  super.disablePlugin();
321
296
  }
322
297
 
@@ -338,7 +313,9 @@ export class CopyPaste extends BasePlugin {
338
313
  let copyMode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'cells-only';
339
314
  _classPrivateFieldSet(this, _copyMode, copyMode);
340
315
  _classPrivateFieldSet(this, _isTriggeredByCopy, true);
341
- _classPrivateMethodGet(this, _ensureClipboardEventsGetTriggered, _ensureClipboardEventsGetTriggered2).call(this, 'copy');
316
+ this.getOrCreateFocusableElement();
317
+ this.focusableElement.focus();
318
+ this.hot.rootDocument.execCommand('copy');
342
319
  }
343
320
 
344
321
  /**
@@ -371,7 +348,9 @@ export class CopyPaste extends BasePlugin {
371
348
  */
372
349
  cut() {
373
350
  _classPrivateFieldSet(this, _isTriggeredByCut, true);
374
- _classPrivateMethodGet(this, _ensureClipboardEventsGetTriggered, _ensureClipboardEventsGetTriggered2).call(this, 'cut');
351
+ this.getOrCreateFocusableElement();
352
+ this.focusableElement.focus();
353
+ this.hot.rootDocument.execCommand('cut');
375
354
  }
376
355
 
377
356
  /**
@@ -434,6 +413,7 @@ export class CopyPaste extends BasePlugin {
434
413
  if (pastableHtml) {
435
414
  pasteData.clipboardData.setData('text/html', pastableHtml);
436
415
  }
416
+ this.getOrCreateFocusableElement();
437
417
  this.onPaste(pasteData);
438
418
  }
439
419
 
@@ -445,10 +425,6 @@ export class CopyPaste extends BasePlugin {
445
425
  if (!selectionRange) {
446
426
  return;
447
427
  }
448
- if (selectionRange.isSingleHeader()) {
449
- this.copyableRanges = [];
450
- return;
451
- }
452
428
  _classPrivateFieldGet(this, _copyableRangesFactory).setSelectedRange(selectionRange);
453
429
  const groupedRanges = new Map([['headers', null], ['cells', null]]);
454
430
  if (_classPrivateFieldGet(this, _copyMode) === 'column-headers-only') {
@@ -488,6 +464,21 @@ export class CopyPaste extends BasePlugin {
488
464
  }
489
465
  }
490
466
 
467
+ /**
468
+ * Force focus on editable element.
469
+ *
470
+ * @private
471
+ */
472
+ getOrCreateFocusableElement() {
473
+ var _this$hot$getActiveEd;
474
+ const editableElement = (_this$hot$getActiveEd = this.hot.getActiveEditor()) === null || _this$hot$getActiveEd === void 0 ? void 0 : _this$hot$getActiveEd.TEXTAREA;
475
+ if (editableElement) {
476
+ this.focusableElement.setFocusableElement(editableElement);
477
+ } else {
478
+ this.focusableElement.useSecondaryElement();
479
+ }
480
+ }
481
+
491
482
  /**
492
483
  * Verifies if editor exists and is open.
493
484
  *
@@ -495,8 +486,8 @@ export class CopyPaste extends BasePlugin {
495
486
  * @returns {boolean}
496
487
  */
497
488
  isEditorOpened() {
498
- var _this$hot$getActiveEd;
499
- return (_this$hot$getActiveEd = this.hot.getActiveEditor()) === null || _this$hot$getActiveEd === void 0 ? void 0 : _this$hot$getActiveEd.isOpened();
489
+ var _this$hot$getActiveEd2;
490
+ return (_this$hot$getActiveEd2 = this.hot.getActiveEditor()) === null || _this$hot$getActiveEd2 === void 0 ? void 0 : _this$hot$getActiveEd2.isOpened();
500
491
  }
501
492
  /**
502
493
  * Prepares new values to populate them into datasource.
@@ -563,6 +554,7 @@ export class CopyPaste extends BasePlugin {
563
554
  this.hot.populateFromArray(startRow, startColumn, newRows, void 0, void 0, 'CopyPaste.paste', this.pasteMode);
564
555
  return [startRow, startColumn, lastVisualRow, lastVisualColumn];
565
556
  }
557
+
566
558
  /**
567
559
  * `copy` event callback on textarea element.
568
560
  *
@@ -629,7 +621,7 @@ export class CopyPaste extends BasePlugin {
629
621
  * @private
630
622
  */
631
623
  onPaste(event) {
632
- if (!this.hot.isListening() || this.isEditorOpened() || !this.hot.getSelected()) {
624
+ if (!this.hot.isListening() || this.isEditorOpened()) {
633
625
  return;
634
626
  }
635
627
  if (event && event.preventDefault) {
@@ -654,7 +646,7 @@ export class CopyPaste extends BasePlugin {
654
646
  if (typeof pastedData === 'string') {
655
647
  pastedData = parse(pastedData);
656
648
  }
657
- if (pastedData === void 0 || pastedData && pastedData.length === 0) {
649
+ if (pastedData && pastedData.length === 0) {
658
650
  return;
659
651
  }
660
652
  if (this.hot.runHooks('beforePaste', pastedData, this.copyableRanges) === false) {
@@ -688,74 +680,64 @@ export class CopyPaste extends BasePlugin {
688
680
  }
689
681
 
690
682
  /**
691
- * Force focus on focusableElement after end of the selection.
683
+ * Force focus on focusableElement.
692
684
  *
693
685
  * @private
694
686
  */
695
- onAfterSelectionEnd() {
696
- if (this.isEditorOpened()) {
687
+ onAfterOnCellMouseUp() {
688
+ // Changing focused element will remove current selection. It's unnecessary in case when we give possibility
689
+ // for fragment selection
690
+ if (!this.hot.isListening() || this.isEditorOpened() || this.hot.getSettings().fragmentSelection) {
697
691
  return;
698
692
  }
699
- if (this.hot.getSettings().fragmentSelection) {
700
- return;
701
- }
702
- this.setCopyableText();
703
- }
704
-
705
- /**
706
- * `document.body` `mouseenter` callback used to work around a Safari's problem with copying/cutting from the
707
- * browser's menu.
708
- *
709
- * @private
710
- */
711
- onSafariMouseEnter() {
712
- _classPrivateMethodGet(this, _removeContentEditableFromHighlightedCell, _removeContentEditableFromHighlightedCell2).call(this);
693
+ this.getOrCreateFocusableElement();
694
+ this.focusableElement.focus();
713
695
  }
714
696
 
715
697
  /**
716
- * `document.body` `mouseleave` callback used to work around a Safari's problem with copying/cutting from the
717
- * browser's menu.
698
+ * Force focus on focusableElement after end of the selection.
718
699
  *
719
700
  * @private
720
701
  */
721
- onSafariMouseLeave() {
722
- _classPrivateMethodGet(this, _addContentEditableToHighlightedCell, _addContentEditableToHighlightedCell2).call(this);
702
+ onAfterSelectionEnd() {
703
+ if (this.isEditorOpened()) {
704
+ return;
705
+ }
706
+ this.getOrCreateFocusableElement();
707
+ if (this.hot.getSettings().fragmentSelection && this.focusableElement.getFocusableElement() !== this.hot.rootDocument.activeElement && getSelectionText()) {
708
+ return;
709
+ }
710
+ this.setCopyableText();
711
+ this.focusableElement.focus();
723
712
  }
724
713
 
725
714
  /**
726
- * `afterSelection` hook callback triggered only on Safari.
715
+ * `beforeKeyDown` listener to force focus of focusableElement.
727
716
  *
728
717
  * @private
729
718
  */
730
- onSafariAfterSelection() {
731
- _classPrivateMethodGet(this, _removeContentEditableFromHighlightedCell, _removeContentEditableFromHighlightedCell2).call(this);
719
+ onBeforeKeyDown() {
720
+ if (!this.hot.isListening() || this.isEditorOpened()) {
721
+ return;
722
+ }
723
+ const activeElement = this.hot.rootDocument.activeElement;
724
+ const activeEditor = this.hot.getActiveEditor();
725
+ if (!activeEditor || activeElement !== this.focusableElement.getFocusableElement() && activeElement !== activeEditor.select) {
726
+ return;
727
+ }
728
+ this.getOrCreateFocusableElement();
729
+ this.focusableElement.focus();
732
730
  }
733
731
 
734
732
  /**
735
733
  * Destroys the `CopyPaste` plugin instance.
736
734
  */
737
735
  destroy() {
738
- super.destroy();
739
- }
740
- }
741
- function _ensureClipboardEventsGetTriggered2(eventName) {
742
- // Without this workaround Safari (tested on Safari@16.5.2) does not trigger the 'copy' event.
743
- if (isSafari()) {
744
- const lastSelectedRange = this.hot.getSelectedRangeLast();
745
- if (lastSelectedRange) {
746
- const {
747
- row: highlightRow,
748
- col: highlightColumn
749
- } = lastSelectedRange.highlight;
750
- const currentlySelectedCell = this.hot.getCell(highlightRow, highlightColumn, true);
751
- if (currentlySelectedCell) {
752
- runWithSelectedContendEditableElement(currentlySelectedCell, () => {
753
- this.hot.rootDocument.execCommand(eventName);
754
- });
755
- }
736
+ if (this.focusableElement) {
737
+ destroyElement(this.focusableElement);
738
+ this.focusableElement = null;
756
739
  }
757
- } else {
758
- this.hot.rootDocument.execCommand(eventName);
740
+ super.destroy();
759
741
  }
760
742
  }
761
743
  function _countCopiedHeaders2(ranges) {
@@ -772,35 +754,4 @@ function _countCopiedHeaders2(ranges) {
772
754
  return {
773
755
  columnHeadersCount
774
756
  };
775
- }
776
- function _addContentEditableToHighlightedCell2() {
777
- if (this.hot.isListening()) {
778
- const lastSelectedRange = this.hot.getSelectedRangeLast();
779
- if (lastSelectedRange) {
780
- const {
781
- row: highlightRow,
782
- col: highlightColumn
783
- } = lastSelectedRange.highlight;
784
- const currentlySelectedCell = this.hot.getCell(highlightRow, highlightColumn, true);
785
- if (currentlySelectedCell) {
786
- makeElementContentEditableAndSelectItsContent(currentlySelectedCell);
787
- }
788
- }
789
- }
790
- }
791
- function _removeContentEditableFromHighlightedCell2() {
792
- // If the instance is not listening, the workaround is not needed.
793
- if (this.hot.isListening()) {
794
- const lastSelectedRange = this.hot.getSelectedRangeLast();
795
- if (lastSelectedRange) {
796
- const {
797
- row: highlightRow,
798
- col: highlightColumn
799
- } = lastSelectedRange.highlight;
800
- const currentlySelectedCell = this.hot.getCell(highlightRow, highlightColumn, true);
801
- if (currentlySelectedCell !== null && currentlySelectedCell !== void 0 && currentlySelectedCell.hasAttribute('contenteditable')) {
802
- removeContentEditableFromElementAndDeselect(currentlySelectedCell);
803
- }
804
- }
805
- }
806
757
  }
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.createElement = createElement;
5
+ exports.deactivateElement = deactivateElement;
6
+ exports.destroyElement = destroyElement;
7
+ var _eventManager = _interopRequireDefault(require("../../eventManager"));
8
+ var _localHooks = _interopRequireDefault(require("../../mixins/localHooks"));
9
+ var _object = require("../../helpers/object");
10
+ var _browser = require("../../helpers/browser");
11
+ var _element = require("../../helpers/dom/element");
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ /**
14
+ * @private
15
+ * @class FocusableWrapper
16
+ */
17
+ class FocusableWrapper {
18
+ constructor(container) {
19
+ this.rootDocument = container.defaultView ? container : container.ownerDocument;
20
+ /**
21
+ * The main/operational focusable element.
22
+ *
23
+ * @type {HTMLElement}
24
+ */
25
+ this.mainElement = null;
26
+ /**
27
+ * Instance of EventManager.
28
+ *
29
+ * @type {EventManager}
30
+ */
31
+ this.eventManager = new _eventManager.default(this);
32
+ /**
33
+ * An object for tracking information about event listeners attached to the focusable element.
34
+ *
35
+ * @type {WeakSet}
36
+ */
37
+ this.listenersCount = new WeakSet();
38
+ /**
39
+ * Parent for an focusable element.
40
+ *
41
+ * @type {HTMLElement}
42
+ */
43
+ this.container = container;
44
+ }
45
+
46
+ /**
47
+ * Switch to the secondary focusable element. Used when no any main focusable element is provided.
48
+ */
49
+ useSecondaryElement() {
50
+ const el = createOrGetSecondaryElement(this.container);
51
+ if (!this.listenersCount.has(el)) {
52
+ this.listenersCount.add(el);
53
+ forwardEventsToLocalHooks(this.eventManager, el, this);
54
+ }
55
+ this.mainElement = el;
56
+ }
57
+
58
+ /**
59
+ * Switch to the main focusable element.
60
+ *
61
+ * @param {HTMLElement} element The DOM element.
62
+ */
63
+ setFocusableElement(element) {
64
+ if (!this.listenersCount.has(element)) {
65
+ this.listenersCount.add(element);
66
+ forwardEventsToLocalHooks(this.eventManager, element, this);
67
+ }
68
+ this.mainElement = element;
69
+ }
70
+
71
+ /**
72
+ * Get currently set focusable element.
73
+ *
74
+ * @returns {HTMLElement}
75
+ */
76
+ getFocusableElement() {
77
+ return this.mainElement;
78
+ }
79
+
80
+ /**
81
+ * Set focus to the focusable element.
82
+ */
83
+ focus() {
84
+ // Add an empty space to texarea. It is necessary for safari to enable "copy" command from menu bar.
85
+ this.mainElement.value = ' ';
86
+ if (!(0, _browser.isMobileBrowser)()) {
87
+ (0, _element.selectElementIfAllowed)(this.mainElement);
88
+ }
89
+ }
90
+ }
91
+ (0, _object.mixin)(FocusableWrapper, _localHooks.default);
92
+ const refCounter = new WeakMap();
93
+
94
+ /**
95
+ * Create and return the FocusableWrapper instance.
96
+ *
97
+ * @param {HTMLElement} container The container element, holder for focusable elements.
98
+ * @returns {FocusableWrapper}
99
+ */
100
+ function createElement(container) {
101
+ const focusableWrapper = new FocusableWrapper(container);
102
+ let counter = refCounter.get(container);
103
+ counter = isNaN(counter) ? 0 : counter;
104
+ refCounter.set(container, counter + 1);
105
+ return focusableWrapper;
106
+ }
107
+
108
+ /**
109
+ * Deactivate the FocusableWrapper instance.
110
+ *
111
+ * @param {FocusableWrapper} wrapper The instance of the FocusableWrapper class.
112
+ */
113
+ function deactivateElement(wrapper) {
114
+ wrapper.eventManager.clear();
115
+ }
116
+ const runLocalHooks = (eventName, subject) => event => subject.runLocalHooks(eventName, event);
117
+
118
+ /**
119
+ * Register copy/cut/paste events and forward their actions to the subject local hooks system.
120
+ *
121
+ * @param {EventManager} eventManager The instance of the EventManager class.
122
+ * @param {HTMLElement} element The element on which the listeners are mounted.
123
+ * @param {FocusableWrapper} subject The subject object for local hooks.
124
+ */
125
+ function forwardEventsToLocalHooks(eventManager, element, subject) {
126
+ eventManager.addEventListener(element, 'copy', runLocalHooks('copy', subject));
127
+ eventManager.addEventListener(element, 'cut', runLocalHooks('cut', subject));
128
+ eventManager.addEventListener(element, 'paste', runLocalHooks('paste', subject));
129
+ }
130
+ const secondaryElements = new WeakMap();
131
+
132
+ /**
133
+ * Create and attach newly created focusable element to the DOM.
134
+ *
135
+ * @param {HTMLElement} container The container element, holder for focusable elements.
136
+ * @returns {HTMLElement}
137
+ */
138
+ function createOrGetSecondaryElement(container) {
139
+ const secondaryElement = secondaryElements.get(container);
140
+ if (secondaryElement) {
141
+ if (!secondaryElement.parentElement) {
142
+ container.appendChild(secondaryElement);
143
+ }
144
+ return secondaryElement;
145
+ }
146
+ const doc = container.defaultView ? container : container.ownerDocument;
147
+ const element = doc.createElement('textarea');
148
+ secondaryElements.set(container, element);
149
+ element.setAttribute('data-hot-input', ''); // Makes the element recognizable by Hot as its own component's element.
150
+ element.className = 'HandsontableCopyPaste';
151
+ element.tabIndex = -1;
152
+ element.autocomplete = 'off';
153
+ element.wrap = 'hard';
154
+ element.value = ' ';
155
+ container.appendChild(element);
156
+ return element;
157
+ }
158
+
159
+ /**
160
+ * Destroy the FocusableWrapper instance.
161
+ *
162
+ * @param {FocusableWrapper} wrapper The instance of the FocusableWrapper class.
163
+ */
164
+ function destroyElement(wrapper) {
165
+ if (!(wrapper instanceof FocusableWrapper)) {
166
+ return;
167
+ }
168
+ let counter = refCounter.get(wrapper.container);
169
+ counter = isNaN(counter) ? 0 : counter;
170
+ if (counter > 0) {
171
+ counter -= 1;
172
+ }
173
+ deactivateElement(wrapper);
174
+ if (counter <= 0) {
175
+ counter = 0;
176
+
177
+ // Detach secondary element from the DOM.
178
+ const secondaryElement = secondaryElements.get(wrapper.container);
179
+ if (secondaryElement && secondaryElement.parentNode) {
180
+ secondaryElement.parentNode.removeChild(secondaryElement);
181
+ secondaryElements.delete(wrapper.container);
182
+ }
183
+ wrapper.mainElement = null;
184
+ }
185
+ refCounter.set(wrapper.container, counter);
186
+ }