handsontable 0.0.0-next-9059914-20231025 → 0.0.0-next-cecf979-20231026

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 (447) hide show
  1. package/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
  2. package/3rdparty/walkontable/src/cell/coords.js +50 -11
  3. package/3rdparty/walkontable/src/cell/coords.mjs +50 -11
  4. package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
  5. package/3rdparty/walkontable/src/cell/range.js +38 -7
  6. package/3rdparty/walkontable/src/cell/range.mjs +38 -7
  7. package/3rdparty/walkontable/src/core/_base.js +9 -3
  8. package/3rdparty/walkontable/src/core/_base.mjs +9 -3
  9. package/3rdparty/walkontable/src/core/clone.js +2 -2
  10. package/3rdparty/walkontable/src/core/clone.mjs +2 -2
  11. package/3rdparty/walkontable/src/core/core.js +3 -2
  12. package/3rdparty/walkontable/src/core/core.mjs +3 -2
  13. package/3rdparty/walkontable/src/event.js +12 -10
  14. package/3rdparty/walkontable/src/event.mjs +12 -10
  15. package/3rdparty/walkontable/src/facade/core.js +2 -2
  16. package/3rdparty/walkontable/src/facade/core.mjs +2 -2
  17. package/3rdparty/walkontable/src/index.js +10 -2
  18. package/3rdparty/walkontable/src/index.mjs +2 -2
  19. package/3rdparty/walkontable/src/overlay/_base.js +13 -2
  20. package/3rdparty/walkontable/src/overlay/_base.mjs +14 -3
  21. package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -6
  22. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -6
  23. package/3rdparty/walkontable/src/overlay/top.js +2 -6
  24. package/3rdparty/walkontable/src/overlay/top.mjs +2 -6
  25. package/3rdparty/walkontable/src/renderer/cells.js +10 -0
  26. package/3rdparty/walkontable/src/renderer/cells.mjs +11 -1
  27. package/3rdparty/walkontable/src/renderer/columnHeaders.js +10 -0
  28. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +11 -1
  29. package/3rdparty/walkontable/src/renderer/rowHeaders.js +5 -0
  30. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +5 -0
  31. package/3rdparty/walkontable/src/renderer/rows.js +13 -0
  32. package/3rdparty/walkontable/src/renderer/rows.mjs +13 -0
  33. package/3rdparty/walkontable/src/renderer/table.js +9 -0
  34. package/3rdparty/walkontable/src/renderer/table.mjs +9 -0
  35. package/3rdparty/walkontable/src/scroll.js +2 -0
  36. package/3rdparty/walkontable/src/scroll.mjs +2 -0
  37. package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +7 -12
  38. package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
  39. package/3rdparty/walkontable/src/selection/border/constants.js +16 -0
  40. package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
  41. package/3rdparty/walkontable/src/selection/constants.js +62 -0
  42. package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
  43. package/3rdparty/walkontable/src/selection/index.js +26 -0
  44. package/3rdparty/walkontable/src/selection/index.mjs +5 -0
  45. package/3rdparty/walkontable/src/selection/manager.js +274 -0
  46. package/3rdparty/walkontable/src/selection/manager.mjs +269 -0
  47. package/3rdparty/walkontable/src/selection/scanner.js +270 -0
  48. package/3rdparty/walkontable/src/selection/scanner.mjs +267 -0
  49. package/3rdparty/walkontable/src/selection/selection.js +101 -0
  50. package/3rdparty/walkontable/src/selection/selection.mjs +96 -0
  51. package/3rdparty/walkontable/src/settings.js +13 -4
  52. package/3rdparty/walkontable/src/settings.mjs +13 -4
  53. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +9 -0
  54. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
  55. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +9 -0
  56. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
  57. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +9 -0
  58. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
  59. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +9 -0
  60. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
  61. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -0
  62. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
  63. package/3rdparty/walkontable/src/table.js +19 -78
  64. package/3rdparty/walkontable/src/table.mjs +20 -79
  65. package/base.js +2 -2
  66. package/base.mjs +2 -2
  67. package/cellTypes/dateType/dateType.d.ts +3 -3
  68. package/cellTypes/dateType/dateType.js +2 -2
  69. package/cellTypes/dateType/dateType.mjs +2 -2
  70. package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
  71. package/cellTypes/handsontableType/handsontableType.js +2 -2
  72. package/cellTypes/handsontableType/handsontableType.mjs +2 -2
  73. package/cellTypes/index.d.ts +3 -0
  74. package/cellTypes/index.js +4 -0
  75. package/cellTypes/index.mjs +3 -1
  76. package/cellTypes/selectType/index.d.ts +1 -0
  77. package/cellTypes/selectType/index.js +6 -0
  78. package/cellTypes/selectType/index.mjs +1 -0
  79. package/cellTypes/selectType/selectType.d.ts +14 -0
  80. package/cellTypes/selectType/selectType.js +13 -0
  81. package/cellTypes/selectType/selectType.mjs +8 -0
  82. package/core/focusCatcher/focusDetector.js +63 -0
  83. package/core/focusCatcher/focusDetector.mjs +59 -0
  84. package/core/focusCatcher/index.js +142 -0
  85. package/core/focusCatcher/index.mjs +138 -0
  86. package/core/index.js +9 -0
  87. package/core/index.mjs +1 -0
  88. package/core.d.ts +9 -4
  89. package/core.js +285 -327
  90. package/core.mjs +285 -327
  91. package/dataMap/metaManager/metaSchema.js +65 -0
  92. package/dataMap/metaManager/metaSchema.mjs +65 -0
  93. package/dataMap/metaManager/mods/extendMetaProperties.js +7 -1
  94. package/dataMap/metaManager/mods/extendMetaProperties.mjs +7 -1
  95. package/dataMap/replaceData.js +5 -0
  96. package/dataMap/replaceData.mjs +5 -0
  97. package/dist/handsontable.css +51 -15
  98. package/dist/handsontable.full.css +51 -15
  99. package/dist/handsontable.full.js +13360 -7840
  100. package/dist/handsontable.full.min.css +7 -7
  101. package/dist/handsontable.full.min.js +136 -136
  102. package/dist/handsontable.js +20955 -15435
  103. package/dist/handsontable.min.css +6 -6
  104. package/dist/handsontable.min.js +24 -24
  105. package/dist/languages/all.js +6 -2
  106. package/dist/languages/all.min.js +1 -1
  107. package/dist/languages/en-US.js +3 -1
  108. package/dist/languages/en-US.min.js +1 -1
  109. package/dist/languages/pl-PL.js +3 -1
  110. package/dist/languages/pl-PL.min.js +1 -1
  111. package/editorManager.js +15 -87
  112. package/editorManager.mjs +16 -87
  113. package/editors/autocompleteEditor/autocompleteEditor.js +53 -2
  114. package/editors/autocompleteEditor/autocompleteEditor.mjs +54 -3
  115. package/editors/dateEditor/dateEditor.js +26 -7
  116. package/editors/dateEditor/dateEditor.mjs +27 -8
  117. package/editors/handsontableEditor/handsontableEditor.js +9 -1
  118. package/editors/handsontableEditor/handsontableEditor.mjs +10 -2
  119. package/editors/textEditor/textEditor.js +19 -27
  120. package/editors/textEditor/textEditor.mjs +22 -30
  121. package/focusManager.d.ts +12 -0
  122. package/focusManager.js +265 -0
  123. package/focusManager.mjs +261 -0
  124. package/helpers/a11y.js +79 -0
  125. package/helpers/a11y.mjs +38 -0
  126. package/helpers/dom/element.js +188 -9
  127. package/helpers/dom/element.mjs +182 -9
  128. package/helpers/mixed.js +1 -1
  129. package/helpers/mixed.mjs +1 -1
  130. package/helpers/number.d.ts +1 -0
  131. package/helpers/number.js +18 -0
  132. package/helpers/number.mjs +17 -0
  133. package/i18n/constants.js +7 -1
  134. package/i18n/constants.mjs +4 -1
  135. package/i18n/languages/en-US.js +3 -1
  136. package/i18n/languages/en-US.mjs +3 -1
  137. package/i18n/languages/pl-PL.js +3 -1
  138. package/i18n/languages/pl-PL.mjs +3 -1
  139. package/languages/all.js +6 -2
  140. package/languages/en-US.js +3 -1
  141. package/languages/en-US.mjs +3 -1
  142. package/languages/index.js +6 -2
  143. package/languages/pl-PL.js +3 -1
  144. package/languages/pl-PL.mjs +3 -1
  145. package/package.json +21 -1
  146. package/pluginHooks.d.ts +12 -1
  147. package/pluginHooks.js +152 -1
  148. package/pluginHooks.mjs +152 -1
  149. package/plugins/collapsibleColumns/collapsibleColumns.js +74 -4
  150. package/plugins/collapsibleColumns/collapsibleColumns.mjs +75 -5
  151. package/plugins/columnSorting/columnSorting.js +43 -0
  152. package/plugins/columnSorting/columnSorting.mjs +44 -3
  153. package/plugins/columnSorting/index.js +3 -1
  154. package/plugins/columnSorting/index.mjs +1 -1
  155. package/plugins/comments/commentEditor.js +1 -0
  156. package/plugins/comments/commentEditor.mjs +1 -0
  157. package/plugins/comments/comments.js +252 -189
  158. package/plugins/comments/comments.mjs +251 -190
  159. package/plugins/comments/contextMenuItem/addEditComment.js +41 -0
  160. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  161. package/plugins/comments/contextMenuItem/readOnlyComment.js +49 -0
  162. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +43 -0
  163. package/plugins/comments/contextMenuItem/removeComment.js +38 -0
  164. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  165. package/plugins/contextMenu/commandExecutor.js +2 -3
  166. package/plugins/contextMenu/commandExecutor.mjs +2 -3
  167. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  168. package/plugins/contextMenu/contextMenu.js +75 -36
  169. package/plugins/contextMenu/contextMenu.mjs +74 -35
  170. package/plugins/contextMenu/itemsFactory.js +2 -3
  171. package/plugins/contextMenu/itemsFactory.mjs +3 -4
  172. package/plugins/contextMenu/{cursor.mjs → menu/cursor.js} +6 -4
  173. package/plugins/contextMenu/{cursor.js → menu/cursor.mjs} +4 -10
  174. package/plugins/contextMenu/menu/defaultShortcutsList.js +88 -0
  175. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +84 -0
  176. package/plugins/contextMenu/menu/index.js +9 -0
  177. package/plugins/contextMenu/menu/index.mjs +1 -0
  178. package/plugins/contextMenu/{menu.js → menu/menu.js} +145 -421
  179. package/plugins/contextMenu/{menu.mjs → menu/menu.mjs} +146 -422
  180. package/plugins/contextMenu/menu/menuItemRenderer.js +58 -0
  181. package/plugins/contextMenu/menu/menuItemRenderer.mjs +54 -0
  182. package/plugins/contextMenu/menu/navigator.js +27 -0
  183. package/plugins/contextMenu/menu/navigator.mjs +23 -0
  184. package/plugins/contextMenu/menu/positioner.js +213 -0
  185. package/plugins/contextMenu/menu/positioner.mjs +209 -0
  186. package/plugins/contextMenu/menu/shortcuts.js +114 -0
  187. package/plugins/contextMenu/menu/shortcuts.mjs +110 -0
  188. package/plugins/contextMenu/menu/utils.js +177 -0
  189. package/plugins/contextMenu/menu/utils.mjs +163 -0
  190. package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
  191. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  192. package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
  193. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  194. package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
  195. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  196. package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
  197. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  198. package/plugins/contextMenu/{predefinedItems.js → predefinedItems/index.js} +14 -14
  199. package/plugins/contextMenu/predefinedItems/index.mjs +68 -0
  200. package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
  201. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  202. package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
  203. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  204. package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
  205. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  206. package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
  207. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  208. package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
  209. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  210. package/plugins/contextMenu/utils.js +35 -151
  211. package/plugins/contextMenu/utils.mjs +35 -144
  212. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  213. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  214. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  215. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  216. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  217. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  218. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  219. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  220. package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
  221. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  222. package/plugins/copyPaste/copyPaste.js +127 -78
  223. package/plugins/copyPaste/copyPaste.mjs +128 -79
  224. package/plugins/customBorders/customBorders.js +23 -20
  225. package/plugins/customBorders/customBorders.mjs +24 -21
  226. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  227. package/plugins/dropdownMenu/dropdownMenu.js +127 -40
  228. package/plugins/dropdownMenu/dropdownMenu.mjs +126 -39
  229. package/plugins/filters/component/_base.js +23 -8
  230. package/plugins/filters/component/_base.mjs +23 -8
  231. package/plugins/filters/component/actionBar.js +29 -27
  232. package/plugins/filters/component/actionBar.mjs +26 -23
  233. package/plugins/filters/component/condition.js +46 -59
  234. package/plugins/filters/component/condition.mjs +40 -52
  235. package/plugins/filters/component/operators.js +21 -22
  236. package/plugins/filters/component/operators.mjs +18 -18
  237. package/plugins/filters/component/value.js +35 -26
  238. package/plugins/filters/component/value.mjs +32 -22
  239. package/plugins/filters/constants.mjs +1 -1
  240. package/plugins/filters/filters.js +106 -62
  241. package/plugins/filters/filters.mjs +99 -55
  242. package/plugins/filters/menu/focusController.js +123 -0
  243. package/plugins/filters/menu/focusController.mjs +119 -0
  244. package/plugins/filters/menu/focusNavigator.js +30 -0
  245. package/plugins/filters/menu/focusNavigator.mjs +26 -0
  246. package/plugins/filters/ui/_base.js +35 -13
  247. package/plugins/filters/ui/_base.mjs +35 -13
  248. package/plugins/filters/ui/input.js +43 -32
  249. package/plugins/filters/ui/input.mjs +42 -30
  250. package/plugins/filters/ui/link.js +44 -12
  251. package/plugins/filters/ui/link.mjs +44 -11
  252. package/plugins/filters/ui/multipleSelect.js +234 -129
  253. package/plugins/filters/ui/multipleSelect.mjs +232 -127
  254. package/plugins/filters/ui/radioInput.js +42 -18
  255. package/plugins/filters/ui/radioInput.mjs +42 -17
  256. package/plugins/filters/ui/select.js +144 -75
  257. package/plugins/filters/ui/select.mjs +142 -72
  258. package/plugins/hiddenColumns/hiddenColumns.mjs +1 -1
  259. package/plugins/hiddenRows/hiddenRows.mjs +1 -1
  260. package/plugins/manualColumnMove/manualColumnMove.js +3 -1
  261. package/plugins/manualColumnMove/manualColumnMove.mjs +3 -1
  262. package/plugins/mergeCells/mergeCells.js +5 -16
  263. package/plugins/mergeCells/mergeCells.mjs +5 -16
  264. package/plugins/multiColumnSorting/multiColumnSorting.js +37 -2
  265. package/plugins/multiColumnSorting/multiColumnSorting.mjs +37 -2
  266. package/plugins/nestedHeaders/nestedHeaders.js +240 -10
  267. package/plugins/nestedHeaders/nestedHeaders.mjs +241 -11
  268. package/plugins/nestedHeaders/stateManager/index.js +102 -3
  269. package/plugins/nestedHeaders/stateManager/index.mjs +102 -3
  270. package/plugins/nestedRows/nestedRows.js +41 -0
  271. package/plugins/nestedRows/nestedRows.mjs +41 -0
  272. package/plugins/nestedRows/ui/headers.js +11 -0
  273. package/plugins/nestedRows/ui/headers.mjs +12 -1
  274. package/renderers/autocompleteRenderer/autocompleteRenderer.js +8 -0
  275. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +8 -0
  276. package/renderers/baseRenderer/baseRenderer.js +17 -0
  277. package/renderers/baseRenderer/baseRenderer.mjs +18 -1
  278. package/renderers/checkboxRenderer/checkboxRenderer.js +9 -4
  279. package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
  280. package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
  281. package/renderers/dateRenderer/dateRenderer.js +29 -0
  282. package/renderers/dateRenderer/dateRenderer.mjs +24 -0
  283. package/renderers/dateRenderer/index.d.ts +1 -0
  284. package/renderers/dateRenderer/index.js +6 -0
  285. package/renderers/dateRenderer/index.mjs +1 -0
  286. package/renderers/handsontableRenderer/handsontableRenderer.d.ts +5 -0
  287. package/renderers/handsontableRenderer/handsontableRenderer.js +29 -0
  288. package/renderers/handsontableRenderer/handsontableRenderer.mjs +24 -0
  289. package/renderers/handsontableRenderer/index.d.ts +1 -0
  290. package/renderers/handsontableRenderer/index.js +6 -0
  291. package/renderers/handsontableRenderer/index.mjs +1 -0
  292. package/renderers/index.d.ts +9 -0
  293. package/renderers/selectRenderer/index.d.ts +1 -0
  294. package/renderers/selectRenderer/index.js +6 -0
  295. package/renderers/selectRenderer/index.mjs +1 -0
  296. package/renderers/selectRenderer/selectRenderer.d.ts +5 -0
  297. package/renderers/selectRenderer/selectRenderer.js +27 -0
  298. package/renderers/selectRenderer/selectRenderer.mjs +22 -0
  299. package/selection/highlight/highlight.js +256 -71
  300. package/selection/highlight/highlight.mjs +250 -71
  301. package/selection/highlight/types/activeHeader.js +10 -8
  302. package/selection/highlight/types/activeHeader.mjs +10 -8
  303. package/selection/highlight/types/area.js +6 -18
  304. package/selection/highlight/types/area.mjs +6 -18
  305. package/selection/highlight/types/areaLayered.js +31 -0
  306. package/selection/highlight/types/areaLayered.mjs +26 -0
  307. package/selection/highlight/types/column.js +27 -0
  308. package/selection/highlight/types/column.mjs +22 -0
  309. package/selection/highlight/types/customSelection.js +7 -9
  310. package/selection/highlight/types/customSelection.mjs +7 -9
  311. package/selection/highlight/types/fill.js +5 -7
  312. package/selection/highlight/types/fill.mjs +5 -7
  313. package/selection/highlight/types/{cell.js → focus.js} +5 -7
  314. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  315. package/selection/highlight/types/header.js +9 -18
  316. package/selection/highlight/types/header.mjs +9 -18
  317. package/selection/highlight/types/row.js +27 -0
  318. package/selection/highlight/types/row.mjs +22 -0
  319. package/selection/highlight/visualSelection.js +31 -27
  320. package/selection/highlight/visualSelection.mjs +31 -27
  321. package/selection/index.js +4 -7
  322. package/selection/index.mjs +2 -3
  323. package/selection/mouseEventHandler.js +7 -1
  324. package/selection/mouseEventHandler.mjs +7 -1
  325. package/selection/range.js +8 -8
  326. package/selection/range.mjs +8 -8
  327. package/selection/selection.js +321 -152
  328. package/selection/selection.mjs +318 -151
  329. package/selection/transformation.js +232 -90
  330. package/selection/transformation.mjs +232 -90
  331. package/selection/utils.js +15 -21
  332. package/selection/utils.mjs +16 -21
  333. package/settings.d.ts +4 -0
  334. package/shortcutContexts/commands/editor/closeAndSave.js +12 -0
  335. package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
  336. package/shortcutContexts/commands/editor/closeWithoutSaving.js +12 -0
  337. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  338. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  339. package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
  340. package/shortcutContexts/commands/editor/index.js +16 -0
  341. package/shortcutContexts/commands/editor/index.mjs +12 -0
  342. package/shortcutContexts/commands/editor/open.js +27 -0
  343. package/shortcutContexts/commands/editor/open.mjs +23 -0
  344. package/shortcutContexts/commands/emptySelectedCells.js +11 -0
  345. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  346. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  347. package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
  348. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +25 -0
  349. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +21 -0
  350. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  351. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  352. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  353. package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
  354. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  355. package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
  356. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  357. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
  358. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +29 -0
  359. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
  360. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +19 -0
  361. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
  362. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +19 -0
  363. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
  364. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +29 -0
  365. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
  366. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +29 -0
  367. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
  368. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +29 -0
  369. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
  370. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  371. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
  372. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  373. package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
  374. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +25 -0
  375. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +21 -0
  376. package/shortcutContexts/commands/index.js +35 -0
  377. package/shortcutContexts/commands/index.mjs +31 -0
  378. package/shortcutContexts/commands/moveCellSelection/down.js +13 -0
  379. package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
  380. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +33 -0
  381. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +29 -0
  382. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  383. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  384. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +12 -0
  385. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  386. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +12 -0
  387. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  388. package/shortcutContexts/commands/moveCellSelection/left.js +10 -0
  389. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  390. package/shortcutContexts/commands/moveCellSelection/right.js +10 -0
  391. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  392. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +17 -0
  393. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
  394. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +18 -0
  395. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
  396. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +14 -0
  397. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
  398. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +17 -0
  399. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
  400. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +19 -0
  401. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
  402. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +21 -0
  403. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
  404. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +17 -0
  405. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
  406. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +19 -0
  407. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
  408. package/shortcutContexts/commands/moveCellSelection/up.js +13 -0
  409. package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
  410. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +33 -0
  411. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +29 -0
  412. package/shortcutContexts/commands/populateSelectedCellsData.js +29 -0
  413. package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
  414. package/shortcutContexts/commands/scrollToFocusedCell.js +35 -0
  415. package/shortcutContexts/commands/scrollToFocusedCell.mjs +31 -0
  416. package/shortcutContexts/commands/selectAll.js +12 -0
  417. package/shortcutContexts/commands/selectAll.mjs +8 -0
  418. package/shortcutContexts/constants.js +13 -0
  419. package/shortcutContexts/constants.mjs +8 -0
  420. package/shortcutContexts/editor.js +25 -0
  421. package/shortcutContexts/editor.mjs +21 -0
  422. package/shortcutContexts/grid.js +163 -0
  423. package/shortcutContexts/grid.mjs +159 -0
  424. package/shortcutContexts/index.js +24 -0
  425. package/shortcutContexts/index.mjs +11 -0
  426. package/shortcuts/context.d.ts +1 -0
  427. package/shortcuts/context.js +23 -4
  428. package/shortcuts/context.mjs +23 -5
  429. package/shortcuts/manager.js +25 -7
  430. package/shortcuts/manager.mjs +26 -7
  431. package/shortcuts/recorder.js +3 -3
  432. package/shortcuts/recorder.mjs +3 -3
  433. package/shortcuts/utils.js +19 -5
  434. package/shortcuts/utils.mjs +18 -4
  435. package/tableView.js +111 -13
  436. package/tableView.mjs +112 -14
  437. package/utils/paginator.js +151 -0
  438. package/utils/paginator.mjs +147 -0
  439. package/3rdparty/walkontable/src/selection.js +0 -295
  440. package/3rdparty/walkontable/src/selection.mjs +0 -290
  441. package/plugins/contextMenu/predefinedItems.mjs +0 -68
  442. package/plugins/copyPaste/focusableElement.js +0 -186
  443. package/plugins/copyPaste/focusableElement.mjs +0 -180
  444. package/selection/highlight/constants.js +0 -15
  445. package/selection/highlight/constants.mjs +0 -6
  446. package/selection/highlight/types/index.js +0 -35
  447. package/selection/highlight/types/index.mjs +0 -31
@@ -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; }
10
9
  function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
11
10
  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,16 +17,17 @@ 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 { getSelectionText } from "../../helpers/dom/element.mjs";
20
+ import { removeContentEditableFromElementAndDeselect, runWithSelectedContendEditableElement, makeElementContentEditableAndSelectItsContent } from "../../helpers/dom/element.mjs";
21
+ import { isSafari } from "../../helpers/browser.mjs";
21
22
  import copyItem from "./contextMenuItem/copy.mjs";
22
23
  import copyColumnHeadersOnlyItem from "./contextMenuItem/copyColumnHeadersOnly.mjs";
23
24
  import copyWithColumnGroupHeadersItem from "./contextMenuItem/copyWithColumnGroupHeaders.mjs";
24
25
  import copyWithColumnHeadersItem from "./contextMenuItem/copyWithColumnHeaders.mjs";
25
26
  import cutItem from "./contextMenuItem/cut.mjs";
26
27
  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";
30
31
  Hooks.getSingleton().register('afterCopyLimit');
31
32
  Hooks.getSingleton().register('modifyCopyableRange');
32
33
  Hooks.getSingleton().register('beforeCut');
@@ -82,10 +83,21 @@ var _copyMode = /*#__PURE__*/new WeakMap();
82
83
  var _isTriggeredByCopy = /*#__PURE__*/new WeakMap();
83
84
  var _isTriggeredByCut = /*#__PURE__*/new WeakMap();
84
85
  var _copyableRangesFactory = /*#__PURE__*/new WeakMap();
86
+ var _ensureClipboardEventsGetTriggered = /*#__PURE__*/new WeakSet();
85
87
  var _countCopiedHeaders = /*#__PURE__*/new WeakSet();
88
+ var _addContentEditableToHighlightedCell = /*#__PURE__*/new WeakSet();
89
+ var _removeContentEditableFromHighlightedCell = /*#__PURE__*/new WeakSet();
86
90
  export class CopyPaste extends BasePlugin {
87
91
  constructor() {
88
92
  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);
89
101
  /**
90
102
  * Counts how many column headers will be copied based on the passed range.
91
103
  *
@@ -95,6 +107,12 @@ export class CopyPaste extends BasePlugin {
95
107
  * information with the number of copied headers.
96
108
  */
97
109
  _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);
98
116
  /**
99
117
  * The maximum number of columns than can be copied to the clipboard.
100
118
  *
@@ -212,13 +230,6 @@ export class CopyPaste extends BasePlugin {
212
230
  * @type {Array<{startRow: number, startCol: number, endRow: number, endCol: number}>}
213
231
  */
214
232
  _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);
222
233
  }
223
234
  static get PLUGIN_KEY() {
224
235
  return PLUGIN_KEY;
@@ -245,6 +256,7 @@ export class CopyPaste extends BasePlugin {
245
256
  * Enables the [`CopyPaste`](#copypaste) plugin for your Handsontable instance.
246
257
  */
247
258
  enablePlugin() {
259
+ var _this = this;
248
260
  if (this.enabled) {
249
261
  return;
250
262
  }
@@ -262,11 +274,28 @@ export class CopyPaste extends BasePlugin {
262
274
  this.uiContainer = (_settings$uiContainer = settings.uiContainer) !== null && _settings$uiContainer !== void 0 ? _settings$uiContainer : this.uiContainer;
263
275
  }
264
276
  this.addHook('afterContextMenuDefaultOptions', options => this.onAfterContextMenuDefaultOptions(options));
265
- this.addHook('afterOnCellMouseUp', () => this.onAfterOnCellMouseUp());
266
277
  this.addHook('afterSelectionEnd', () => this.onAfterSelectionEnd());
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));
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
+ }
270
299
  super.enablePlugin();
271
300
  }
272
301
 
@@ -281,7 +310,6 @@ export class CopyPaste extends BasePlugin {
281
310
  updatePlugin() {
282
311
  this.disablePlugin();
283
312
  this.enablePlugin();
284
- this.getOrCreateFocusableElement();
285
313
  super.updatePlugin();
286
314
  }
287
315
 
@@ -289,9 +317,6 @@ export class CopyPaste extends BasePlugin {
289
317
  * Disables the [`CopyPaste`](#copypaste) plugin for your Handsontable instance.
290
318
  */
291
319
  disablePlugin() {
292
- if (this.focusableElement) {
293
- destroyElement(this.focusableElement);
294
- }
295
320
  super.disablePlugin();
296
321
  }
297
322
 
@@ -313,9 +338,7 @@ export class CopyPaste extends BasePlugin {
313
338
  let copyMode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'cells-only';
314
339
  _classPrivateFieldSet(this, _copyMode, copyMode);
315
340
  _classPrivateFieldSet(this, _isTriggeredByCopy, true);
316
- this.getOrCreateFocusableElement();
317
- this.focusableElement.focus();
318
- this.hot.rootDocument.execCommand('copy');
341
+ _classPrivateMethodGet(this, _ensureClipboardEventsGetTriggered, _ensureClipboardEventsGetTriggered2).call(this, 'copy');
319
342
  }
320
343
 
321
344
  /**
@@ -348,9 +371,7 @@ export class CopyPaste extends BasePlugin {
348
371
  */
349
372
  cut() {
350
373
  _classPrivateFieldSet(this, _isTriggeredByCut, true);
351
- this.getOrCreateFocusableElement();
352
- this.focusableElement.focus();
353
- this.hot.rootDocument.execCommand('cut');
374
+ _classPrivateMethodGet(this, _ensureClipboardEventsGetTriggered, _ensureClipboardEventsGetTriggered2).call(this, 'cut');
354
375
  }
355
376
 
356
377
  /**
@@ -413,7 +434,6 @@ export class CopyPaste extends BasePlugin {
413
434
  if (pastableHtml) {
414
435
  pasteData.clipboardData.setData('text/html', pastableHtml);
415
436
  }
416
- this.getOrCreateFocusableElement();
417
437
  this.onPaste(pasteData);
418
438
  }
419
439
 
@@ -425,6 +445,10 @@ export class CopyPaste extends BasePlugin {
425
445
  if (!selectionRange) {
426
446
  return;
427
447
  }
448
+ if (selectionRange.isSingleHeader()) {
449
+ this.copyableRanges = [];
450
+ return;
451
+ }
428
452
  _classPrivateFieldGet(this, _copyableRangesFactory).setSelectedRange(selectionRange);
429
453
  const groupedRanges = new Map([['headers', null], ['cells', null]]);
430
454
  if (_classPrivateFieldGet(this, _copyMode) === 'column-headers-only') {
@@ -464,21 +488,6 @@ export class CopyPaste extends BasePlugin {
464
488
  }
465
489
  }
466
490
 
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
-
482
491
  /**
483
492
  * Verifies if editor exists and is open.
484
493
  *
@@ -486,8 +495,8 @@ export class CopyPaste extends BasePlugin {
486
495
  * @returns {boolean}
487
496
  */
488
497
  isEditorOpened() {
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();
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();
491
500
  }
492
501
  /**
493
502
  * Prepares new values to populate them into datasource.
@@ -554,7 +563,6 @@ export class CopyPaste extends BasePlugin {
554
563
  this.hot.populateFromArray(startRow, startColumn, newRows, void 0, void 0, 'CopyPaste.paste', this.pasteMode);
555
564
  return [startRow, startColumn, lastVisualRow, lastVisualColumn];
556
565
  }
557
-
558
566
  /**
559
567
  * `copy` event callback on textarea element.
560
568
  *
@@ -621,7 +629,7 @@ export class CopyPaste extends BasePlugin {
621
629
  * @private
622
630
  */
623
631
  onPaste(event) {
624
- if (!this.hot.isListening() || this.isEditorOpened()) {
632
+ if (!this.hot.isListening() || this.isEditorOpened() || !this.hot.getSelected()) {
625
633
  return;
626
634
  }
627
635
  if (event && event.preventDefault) {
@@ -646,7 +654,7 @@ export class CopyPaste extends BasePlugin {
646
654
  if (typeof pastedData === 'string') {
647
655
  pastedData = parse(pastedData);
648
656
  }
649
- if (pastedData && pastedData.length === 0) {
657
+ if (pastedData === void 0 || pastedData && pastedData.length === 0) {
650
658
  return;
651
659
  }
652
660
  if (this.hot.runHooks('beforePaste', pastedData, this.copyableRanges) === false) {
@@ -679,21 +687,6 @@ export class CopyPaste extends BasePlugin {
679
687
  options.items.push(cutItem(this));
680
688
  }
681
689
 
682
- /**
683
- * Force focus on focusableElement.
684
- *
685
- * @private
686
- */
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) {
691
- return;
692
- }
693
- this.getOrCreateFocusableElement();
694
- this.focusableElement.focus();
695
- }
696
-
697
690
  /**
698
691
  * Force focus on focusableElement after end of the selection.
699
692
  *
@@ -703,43 +696,68 @@ export class CopyPaste extends BasePlugin {
703
696
  if (this.isEditorOpened()) {
704
697
  return;
705
698
  }
706
- this.getOrCreateFocusableElement();
707
- if (this.hot.getSettings().fragmentSelection && this.focusableElement.getFocusableElement() !== this.hot.rootDocument.activeElement && getSelectionText()) {
699
+ if (this.hot.getSettings().fragmentSelection) {
708
700
  return;
709
701
  }
710
702
  this.setCopyableText();
711
- this.focusableElement.focus();
712
703
  }
713
704
 
714
705
  /**
715
- * `beforeKeyDown` listener to force focus of focusableElement.
706
+ * `document.body` `mouseenter` callback used to work around a Safari's problem with copying/cutting from the
707
+ * browser's menu.
716
708
  *
717
709
  * @private
718
710
  */
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();
711
+ onSafariMouseEnter() {
712
+ _classPrivateMethodGet(this, _removeContentEditableFromHighlightedCell, _removeContentEditableFromHighlightedCell2).call(this);
713
+ }
714
+
715
+ /**
716
+ * `document.body` `mouseleave` callback used to work around a Safari's problem with copying/cutting from the
717
+ * browser's menu.
718
+ *
719
+ * @private
720
+ */
721
+ onSafariMouseLeave() {
722
+ _classPrivateMethodGet(this, _addContentEditableToHighlightedCell, _addContentEditableToHighlightedCell2).call(this);
723
+ }
724
+
725
+ /**
726
+ * `afterSelection` hook callback triggered only on Safari.
727
+ *
728
+ * @private
729
+ */
730
+ onSafariAfterSelection() {
731
+ _classPrivateMethodGet(this, _removeContentEditableFromHighlightedCell, _removeContentEditableFromHighlightedCell2).call(this);
730
732
  }
731
733
 
732
734
  /**
733
735
  * Destroys the `CopyPaste` plugin instance.
734
736
  */
735
737
  destroy() {
736
- if (this.focusableElement) {
737
- destroyElement(this.focusableElement);
738
- this.focusableElement = null;
739
- }
740
738
  super.destroy();
741
739
  }
742
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
+ }
756
+ }
757
+ } else {
758
+ this.hot.rootDocument.execCommand(eventName);
759
+ }
760
+ }
743
761
  function _countCopiedHeaders2(ranges) {
744
762
  const {
745
763
  rows
@@ -754,4 +772,35 @@ function _countCopiedHeaders2(ranges) {
754
772
  return {
755
773
  columnHeadersCount
756
774
  };
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
+ }
757
806
  }
@@ -167,14 +167,11 @@ class CustomBorders extends _base.BasePlugin {
167
167
  const selectionType = (0, _selection.detectSelectionType)(selectionRanges);
168
168
  const selectionSchemaNormalizer = (0, _selection.normalizeSelectionFactory)(selectionType);
169
169
  (0, _array.arrayEach)(selectionRanges, selection => {
170
- const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);
171
- for (let row = rowStart; row <= rowEnd; row += 1) {
172
- for (let col = columnStart; col <= columnEnd; col += 1) {
173
- (0, _array.arrayEach)(borderKeys, borderKey => {
174
- this.prepareBorderFromCustomAdded(row, col, normBorder, (0, _utils.toInlinePropName)(borderKey));
175
- });
176
- }
177
- }
170
+ selectionSchemaNormalizer(selection).forAll((row, col) => {
171
+ (0, _array.arrayEach)(borderKeys, borderKey => {
172
+ this.prepareBorderFromCustomAdded(row, col, normBorder, (0, _utils.toInlinePropName)(borderKey));
173
+ });
174
+ });
178
175
  });
179
176
 
180
177
  /*
@@ -214,16 +211,13 @@ class CustomBorders extends _base.BasePlugin {
214
211
  const selectionSchemaNormalizer = (0, _selection.normalizeSelectionFactory)(selectionType);
215
212
  const selectedBorders = [];
216
213
  (0, _array.arrayEach)(selectionRanges, selection => {
217
- const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);
218
- for (let row = rowStart; row <= rowEnd; row += 1) {
219
- for (let col = columnStart; col <= columnEnd; col += 1) {
220
- (0, _array.arrayEach)(this.savedBorders, border => {
221
- if (border.row === row && border.col === col) {
222
- selectedBorders.push((0, _utils.denormalizeBorder)(border));
223
- }
224
- });
225
- }
226
- }
214
+ selectionSchemaNormalizer(selection).forAll((row, col) => {
215
+ (0, _array.arrayEach)(this.savedBorders, border => {
216
+ if (border.row === row && border.col === col) {
217
+ selectedBorders.push((0, _utils.denormalizeBorder)(border));
218
+ }
219
+ });
220
+ });
227
221
  });
228
222
  return selectedBorders;
229
223
  }
@@ -614,7 +608,8 @@ class CustomBorders extends _base.BasePlugin {
614
608
  let check = false;
615
609
  (0, _array.arrayEach)(this.hot.selection.highlight.customSelections, customSelection => {
616
610
  if (border.id === customSelection.settings.id) {
617
- (0, _object.objectEach)(customSelection.instanceBorders, borderObject => {
611
+ const borders = this.hot.view._wt.selectionManager.getBorderInstances(customSelection);
612
+ (0, _array.arrayEach)(borders, borderObject => {
618
613
  borderObject.toggleHiddenClass(place, remove); // TODO this also bad?
619
614
  });
620
615
 
@@ -648,7 +643,8 @@ class CustomBorders extends _base.BasePlugin {
648
643
  customSelection.visualCellRange = cellRange;
649
644
  customSelection.commit();
650
645
  if (place) {
651
- (0, _object.objectEach)(customSelection.instanceBorders, borderObject => {
646
+ const borders = this.hot.view._wt.selectionManager.getBorderInstances(customSelection);
647
+ (0, _array.arrayEach)(borders, borderObject => {
652
648
  borderObject.changeBorderStyle(place, border);
653
649
  });
654
650
  }
@@ -716,6 +712,13 @@ class CustomBorders extends _base.BasePlugin {
716
712
  return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS);
717
713
  },
718
714
  disabled() {
715
+ const range = this.getSelectedRangeLast();
716
+ if (!range) {
717
+ return true;
718
+ }
719
+ if (range.isSingleHeader()) {
720
+ return true;
721
+ }
719
722
  return this.selection.isSelectedByCorner();
720
723
  },
721
724
  submenu: {
@@ -4,7 +4,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
4
4
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
5
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
6
6
  import { BasePlugin } from "../base/index.mjs";
7
- import { hasOwnProperty, objectEach, deepClone } from "../../helpers/object.mjs";
7
+ import { hasOwnProperty, deepClone } from "../../helpers/object.mjs";
8
8
  import { rangeEach } from "../../helpers/number.mjs";
9
9
  import { arrayEach, arrayReduce, arrayMap } from "../../helpers/array.mjs";
10
10
  import * as C from "../../i18n/constants.mjs";
@@ -160,14 +160,11 @@ export class CustomBorders extends BasePlugin {
160
160
  const selectionType = detectSelectionType(selectionRanges);
161
161
  const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType);
162
162
  arrayEach(selectionRanges, selection => {
163
- const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);
164
- for (let row = rowStart; row <= rowEnd; row += 1) {
165
- for (let col = columnStart; col <= columnEnd; col += 1) {
166
- arrayEach(borderKeys, borderKey => {
167
- this.prepareBorderFromCustomAdded(row, col, normBorder, toInlinePropName(borderKey));
168
- });
169
- }
170
- }
163
+ selectionSchemaNormalizer(selection).forAll((row, col) => {
164
+ arrayEach(borderKeys, borderKey => {
165
+ this.prepareBorderFromCustomAdded(row, col, normBorder, toInlinePropName(borderKey));
166
+ });
167
+ });
171
168
  });
172
169
 
173
170
  /*
@@ -207,16 +204,13 @@ export class CustomBorders extends BasePlugin {
207
204
  const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType);
208
205
  const selectedBorders = [];
209
206
  arrayEach(selectionRanges, selection => {
210
- const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);
211
- for (let row = rowStart; row <= rowEnd; row += 1) {
212
- for (let col = columnStart; col <= columnEnd; col += 1) {
213
- arrayEach(this.savedBorders, border => {
214
- if (border.row === row && border.col === col) {
215
- selectedBorders.push(denormalizeBorder(border));
216
- }
217
- });
218
- }
219
- }
207
+ selectionSchemaNormalizer(selection).forAll((row, col) => {
208
+ arrayEach(this.savedBorders, border => {
209
+ if (border.row === row && border.col === col) {
210
+ selectedBorders.push(denormalizeBorder(border));
211
+ }
212
+ });
213
+ });
220
214
  });
221
215
  return selectedBorders;
222
216
  }
@@ -607,7 +601,8 @@ export class CustomBorders extends BasePlugin {
607
601
  let check = false;
608
602
  arrayEach(this.hot.selection.highlight.customSelections, customSelection => {
609
603
  if (border.id === customSelection.settings.id) {
610
- objectEach(customSelection.instanceBorders, borderObject => {
604
+ const borders = this.hot.view._wt.selectionManager.getBorderInstances(customSelection);
605
+ arrayEach(borders, borderObject => {
611
606
  borderObject.toggleHiddenClass(place, remove); // TODO this also bad?
612
607
  });
613
608
 
@@ -641,7 +636,8 @@ export class CustomBorders extends BasePlugin {
641
636
  customSelection.visualCellRange = cellRange;
642
637
  customSelection.commit();
643
638
  if (place) {
644
- objectEach(customSelection.instanceBorders, borderObject => {
639
+ const borders = this.hot.view._wt.selectionManager.getBorderInstances(customSelection);
640
+ arrayEach(borders, borderObject => {
645
641
  borderObject.changeBorderStyle(place, border);
646
642
  });
647
643
  }
@@ -709,6 +705,13 @@ export class CustomBorders extends BasePlugin {
709
705
  return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS);
710
706
  },
711
707
  disabled() {
708
+ const range = this.getSelectedRangeLast();
709
+ if (!range) {
710
+ return true;
711
+ }
712
+ if (range.isSingleHeader()) {
713
+ return true;
714
+ }
712
715
  return this.selection.isSelectedByCorner();
713
716
  },
714
717
  submenu: {
@@ -18,7 +18,7 @@ export class DropdownMenu extends BasePlugin {
18
18
 
19
19
  constructor(hotInstance: Core);
20
20
  isEnabled(): boolean;
21
- open(event: Event): void;
21
+ open(position: { left: number, top: number } | Event, offset?: { above?: number, below?: number, left?: number, right?: number }): void;
22
22
  close(): void;
23
23
  executeCommand(commandName: string, ...params: any): void;
24
24
  }