handsontable 0.0.0-next-010265d-20231005 → 0.0.0-next-9379dd1-20231020

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 (414) 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 +40 -5
  98. package/dist/handsontable.full.css +40 -5
  99. package/dist/handsontable.full.js +11744 -6945
  100. package/dist/handsontable.full.min.css +4 -4
  101. package/dist/handsontable.full.min.js +141 -141
  102. package/dist/handsontable.js +14036 -9237
  103. package/dist/handsontable.min.css +3 -3
  104. package/dist/handsontable.min.js +21 -21
  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/index.js +9 -0
  175. package/plugins/contextMenu/menu/index.mjs +1 -0
  176. package/plugins/contextMenu/{menu.js → menu/menu.js} +96 -308
  177. package/plugins/contextMenu/{menu.mjs → menu/menu.mjs} +97 -309
  178. package/plugins/contextMenu/menu/navigator.js +152 -0
  179. package/plugins/contextMenu/menu/navigator.mjs +148 -0
  180. package/plugins/contextMenu/menu/positioner.js +213 -0
  181. package/plugins/contextMenu/menu/positioner.mjs +209 -0
  182. package/plugins/contextMenu/menu/utils.js +177 -0
  183. package/plugins/contextMenu/menu/utils.mjs +163 -0
  184. package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
  185. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  186. package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
  187. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  188. package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
  189. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  190. package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
  191. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  192. package/plugins/contextMenu/{predefinedItems.js → predefinedItems/index.js} +14 -14
  193. package/plugins/contextMenu/predefinedItems/index.mjs +68 -0
  194. package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
  195. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  196. package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
  197. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  198. package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
  199. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  200. package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
  201. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  202. package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
  203. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  204. package/plugins/contextMenu/utils.js +35 -151
  205. package/plugins/contextMenu/utils.mjs +35 -144
  206. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  207. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  208. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  209. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  210. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  211. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  212. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  213. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  214. package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
  215. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  216. package/plugins/copyPaste/copyPaste.js +127 -78
  217. package/plugins/copyPaste/copyPaste.mjs +128 -79
  218. package/plugins/customBorders/customBorders.js +23 -20
  219. package/plugins/customBorders/customBorders.mjs +24 -21
  220. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  221. package/plugins/dropdownMenu/dropdownMenu.js +97 -38
  222. package/plugins/dropdownMenu/dropdownMenu.mjs +96 -37
  223. package/plugins/filters/constants.mjs +1 -1
  224. package/plugins/filters/filters.js +31 -14
  225. package/plugins/filters/filters.mjs +31 -14
  226. package/plugins/filters/ui/select.js +3 -3
  227. package/plugins/filters/ui/select.mjs +2 -2
  228. package/plugins/hiddenColumns/hiddenColumns.mjs +1 -1
  229. package/plugins/hiddenRows/hiddenRows.mjs +1 -1
  230. package/plugins/manualColumnMove/manualColumnMove.js +3 -1
  231. package/plugins/manualColumnMove/manualColumnMove.mjs +3 -1
  232. package/plugins/mergeCells/mergeCells.js +5 -16
  233. package/plugins/mergeCells/mergeCells.mjs +5 -16
  234. package/plugins/multiColumnSorting/multiColumnSorting.js +37 -2
  235. package/plugins/multiColumnSorting/multiColumnSorting.mjs +37 -2
  236. package/plugins/nestedHeaders/nestedHeaders.js +240 -10
  237. package/plugins/nestedHeaders/nestedHeaders.mjs +241 -11
  238. package/plugins/nestedHeaders/stateManager/index.js +102 -3
  239. package/plugins/nestedHeaders/stateManager/index.mjs +102 -3
  240. package/plugins/nestedRows/nestedRows.js +41 -0
  241. package/plugins/nestedRows/nestedRows.mjs +41 -0
  242. package/plugins/nestedRows/ui/headers.js +11 -0
  243. package/plugins/nestedRows/ui/headers.mjs +12 -1
  244. package/renderers/autocompleteRenderer/autocompleteRenderer.js +8 -0
  245. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +8 -0
  246. package/renderers/baseRenderer/baseRenderer.js +17 -0
  247. package/renderers/baseRenderer/baseRenderer.mjs +18 -1
  248. package/renderers/checkboxRenderer/checkboxRenderer.js +9 -4
  249. package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
  250. package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
  251. package/renderers/dateRenderer/dateRenderer.js +29 -0
  252. package/renderers/dateRenderer/dateRenderer.mjs +24 -0
  253. package/renderers/dateRenderer/index.d.ts +1 -0
  254. package/renderers/dateRenderer/index.js +6 -0
  255. package/renderers/dateRenderer/index.mjs +1 -0
  256. package/renderers/handsontableRenderer/handsontableRenderer.d.ts +5 -0
  257. package/renderers/handsontableRenderer/handsontableRenderer.js +29 -0
  258. package/renderers/handsontableRenderer/handsontableRenderer.mjs +24 -0
  259. package/renderers/handsontableRenderer/index.d.ts +1 -0
  260. package/renderers/handsontableRenderer/index.js +6 -0
  261. package/renderers/handsontableRenderer/index.mjs +1 -0
  262. package/renderers/index.d.ts +9 -0
  263. package/renderers/selectRenderer/index.d.ts +1 -0
  264. package/renderers/selectRenderer/index.js +6 -0
  265. package/renderers/selectRenderer/index.mjs +1 -0
  266. package/renderers/selectRenderer/selectRenderer.d.ts +5 -0
  267. package/renderers/selectRenderer/selectRenderer.js +27 -0
  268. package/renderers/selectRenderer/selectRenderer.mjs +22 -0
  269. package/selection/highlight/highlight.js +256 -71
  270. package/selection/highlight/highlight.mjs +250 -71
  271. package/selection/highlight/types/activeHeader.js +10 -8
  272. package/selection/highlight/types/activeHeader.mjs +10 -8
  273. package/selection/highlight/types/area.js +6 -18
  274. package/selection/highlight/types/area.mjs +6 -18
  275. package/selection/highlight/types/areaLayered.js +31 -0
  276. package/selection/highlight/types/areaLayered.mjs +26 -0
  277. package/selection/highlight/types/column.js +27 -0
  278. package/selection/highlight/types/column.mjs +22 -0
  279. package/selection/highlight/types/customSelection.js +7 -9
  280. package/selection/highlight/types/customSelection.mjs +7 -9
  281. package/selection/highlight/types/fill.js +5 -7
  282. package/selection/highlight/types/fill.mjs +5 -7
  283. package/selection/highlight/types/{cell.js → focus.js} +5 -7
  284. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  285. package/selection/highlight/types/header.js +9 -18
  286. package/selection/highlight/types/header.mjs +9 -18
  287. package/selection/highlight/types/row.js +27 -0
  288. package/selection/highlight/types/row.mjs +22 -0
  289. package/selection/highlight/visualSelection.js +31 -27
  290. package/selection/highlight/visualSelection.mjs +31 -27
  291. package/selection/index.js +4 -7
  292. package/selection/index.mjs +2 -3
  293. package/selection/mouseEventHandler.js +7 -1
  294. package/selection/mouseEventHandler.mjs +7 -1
  295. package/selection/range.js +8 -8
  296. package/selection/range.mjs +8 -8
  297. package/selection/selection.js +321 -152
  298. package/selection/selection.mjs +318 -151
  299. package/selection/transformation.js +232 -90
  300. package/selection/transformation.mjs +232 -90
  301. package/selection/utils.js +15 -21
  302. package/selection/utils.mjs +16 -21
  303. package/settings.d.ts +4 -0
  304. package/shortcutContexts/commands/editor/closeAndSave.js +12 -0
  305. package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
  306. package/shortcutContexts/commands/editor/closeWithoutSaving.js +12 -0
  307. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  308. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  309. package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
  310. package/shortcutContexts/commands/editor/index.js +16 -0
  311. package/shortcutContexts/commands/editor/index.mjs +12 -0
  312. package/shortcutContexts/commands/editor/open.js +27 -0
  313. package/shortcutContexts/commands/editor/open.mjs +23 -0
  314. package/shortcutContexts/commands/emptySelectedCells.js +11 -0
  315. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  316. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  317. package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
  318. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +25 -0
  319. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +21 -0
  320. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  321. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  322. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  323. package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
  324. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  325. package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
  326. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  327. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
  328. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +29 -0
  329. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
  330. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +19 -0
  331. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
  332. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +19 -0
  333. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
  334. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +29 -0
  335. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
  336. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +29 -0
  337. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
  338. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +29 -0
  339. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
  340. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  341. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
  342. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  343. package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
  344. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +25 -0
  345. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +21 -0
  346. package/shortcutContexts/commands/index.js +35 -0
  347. package/shortcutContexts/commands/index.mjs +31 -0
  348. package/shortcutContexts/commands/moveCellSelection/down.js +13 -0
  349. package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
  350. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +33 -0
  351. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +29 -0
  352. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  353. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  354. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +12 -0
  355. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  356. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +12 -0
  357. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  358. package/shortcutContexts/commands/moveCellSelection/left.js +10 -0
  359. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  360. package/shortcutContexts/commands/moveCellSelection/right.js +10 -0
  361. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  362. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +17 -0
  363. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
  364. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +18 -0
  365. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
  366. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +14 -0
  367. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
  368. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +17 -0
  369. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
  370. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +19 -0
  371. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
  372. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +21 -0
  373. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
  374. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +17 -0
  375. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
  376. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +19 -0
  377. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
  378. package/shortcutContexts/commands/moveCellSelection/up.js +13 -0
  379. package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
  380. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +33 -0
  381. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +29 -0
  382. package/shortcutContexts/commands/populateSelectedCellsData.js +29 -0
  383. package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
  384. package/shortcutContexts/commands/scrollToFocusedCell.js +35 -0
  385. package/shortcutContexts/commands/scrollToFocusedCell.mjs +31 -0
  386. package/shortcutContexts/commands/selectAll.js +12 -0
  387. package/shortcutContexts/commands/selectAll.mjs +8 -0
  388. package/shortcutContexts/constants.js +13 -0
  389. package/shortcutContexts/constants.mjs +8 -0
  390. package/shortcutContexts/editor.js +25 -0
  391. package/shortcutContexts/editor.mjs +21 -0
  392. package/shortcutContexts/grid.js +163 -0
  393. package/shortcutContexts/grid.mjs +159 -0
  394. package/shortcutContexts/index.js +24 -0
  395. package/shortcutContexts/index.mjs +11 -0
  396. package/shortcuts/context.js +20 -2
  397. package/shortcuts/context.mjs +20 -3
  398. package/shortcuts/manager.js +25 -7
  399. package/shortcuts/manager.mjs +26 -7
  400. package/shortcuts/recorder.js +3 -3
  401. package/shortcuts/recorder.mjs +3 -3
  402. package/shortcuts/utils.js +19 -5
  403. package/shortcuts/utils.mjs +18 -4
  404. package/tableView.js +111 -13
  405. package/tableView.mjs +112 -14
  406. package/3rdparty/walkontable/src/selection.js +0 -295
  407. package/3rdparty/walkontable/src/selection.mjs +0 -290
  408. package/plugins/contextMenu/predefinedItems.mjs +0 -68
  409. package/plugins/copyPaste/focusableElement.js +0 -186
  410. package/plugins/copyPaste/focusableElement.mjs +0 -180
  411. package/selection/highlight/constants.js +0 -15
  412. package/selection/highlight/constants.mjs +0 -6
  413. package/selection/highlight/types/index.js +0 -35
  414. package/selection/highlight/types/index.mjs +0 -31
@@ -1,20 +1,34 @@
1
1
  import "core-js/modules/es.error.cause.js";
2
2
  import "core-js/modules/es.array.push.js";
3
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
4
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
5
+ 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; }
6
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
7
+ 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); }
8
+ function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
9
+ 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; } }
10
+ function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
11
+ function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
12
+ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
3
13
  import { addClass, closest, isChildOf, hasClass, outerWidth, outerHeight } from "../../helpers/dom/element.mjs";
14
+ import { stopImmediatePropagation } from "../../helpers/dom/event.mjs";
4
15
  import { deepClone, deepExtend, isObject } from "../../helpers/object.mjs";
5
16
  import EventManager from "../../eventManager.mjs";
6
17
  import { BasePlugin } from "../base/index.mjs";
7
18
  import CommentEditor from "./commentEditor.mjs";
8
- import { checkSelectionConsistency, markLabelAsSelected } from "../contextMenu/utils.mjs";
9
19
  import DisplaySwitch from "./displaySwitch.mjs";
10
- import * as C from "../../i18n/constants.mjs";
20
+ import { SEPARATOR } from "../contextMenu/predefinedItems/index.mjs";
21
+ import addEditCommentItem from "./contextMenuItem/addEditComment.mjs";
22
+ import removeCommentItem from "./contextMenuItem/removeComment.mjs";
23
+ import readOnlyCommentItem from "./contextMenuItem/readOnlyComment.mjs";
11
24
  export const PLUGIN_KEY = 'comments';
12
25
  export const PLUGIN_PRIORITY = 60;
13
- const privatePool = new WeakMap();
14
- const META_COMMENT = 'comment';
15
- const META_COMMENT_VALUE = 'value';
16
- const META_STYLE = 'style';
17
- const META_READONLY = 'readOnly';
26
+ export const META_COMMENT = 'comment';
27
+ export const META_COMMENT_VALUE = 'value';
28
+ export const META_STYLE = 'style';
29
+ export const META_READONLY = 'readOnly';
30
+ const SHORTCUTS_GROUP = PLUGIN_KEY;
31
+ const SHORTCUTS_CONTEXT_NAME = `plugin:${PLUGIN_KEY}`;
18
32
 
19
33
  /* eslint-disable jsdoc/require-description-complete-sentence */
20
34
  /**
@@ -106,55 +120,107 @@ const META_READONLY = 'readOnly';
106
120
  * ```
107
121
  * :::
108
122
  */
123
+ var _editor = /*#__PURE__*/new WeakMap();
124
+ var _displaySwitch = /*#__PURE__*/new WeakMap();
125
+ var _preventEditorAutoSwitch = /*#__PURE__*/new WeakMap();
126
+ var _preventEditorHiding = /*#__PURE__*/new WeakMap();
127
+ var _tempEditorDimensions = /*#__PURE__*/new WeakMap();
128
+ var _cellBelowCursor = /*#__PURE__*/new WeakMap();
129
+ var _commentValueBeforeSave = /*#__PURE__*/new WeakMap();
109
130
  export class Comments extends BasePlugin {
110
- static get PLUGIN_KEY() {
111
- return PLUGIN_KEY;
112
- }
113
- static get PLUGIN_PRIORITY() {
114
- return PLUGIN_PRIORITY;
115
- }
116
- constructor(hotInstance) {
117
- super(hotInstance);
131
+ constructor() {
132
+ super(...arguments);
133
+ /**
134
+ * Current cell range, an object with `from` property, with `row` and `col` properties (e.q. `{from: {row: 1, col: 6}}`).
135
+ *
136
+ * @type {object}
137
+ */
138
+ _defineProperty(this, "range", {});
139
+ /**
140
+ * Instance of {@link EventManager}.
141
+ *
142
+ * @protected
143
+ * @type {EventManager}
144
+ */
145
+ _defineProperty(this, "eventManager", null);
118
146
  /**
119
147
  * Instance of {@link CommentEditor}.
120
148
  *
121
149
  * @private
122
150
  * @type {CommentEditor}
123
151
  */
124
- this.editor = null;
152
+ _classPrivateFieldInitSpec(this, _editor, {
153
+ writable: true,
154
+ value: null
155
+ });
125
156
  /**
126
157
  * Instance of {@link DisplaySwitch}.
127
158
  *
128
159
  * @private
129
160
  * @type {DisplaySwitch}
130
161
  */
131
- this.displaySwitch = null;
162
+ _classPrivateFieldInitSpec(this, _displaySwitch, {
163
+ writable: true,
164
+ value: null
165
+ });
132
166
  /**
133
- * Instance of {@link EventManager}.
167
+ * Prevents showing/hiding editor that reacts on the logic triggered by the "mouseover" events.
134
168
  *
135
169
  * @private
136
- * @type {EventManager}
170
+ * @type {boolean}
137
171
  */
138
- this.eventManager = null;
172
+ _classPrivateFieldInitSpec(this, _preventEditorAutoSwitch, {
173
+ writable: true,
174
+ value: false
175
+ });
139
176
  /**
140
- * Current cell range, an object with `from` property, with `row` and `col` properties (e.q. `{from: {row: 1, col: 6}}`).
177
+ * Prevents hiding editor when the table viewport is scrolled and that scroll is triggered by the
178
+ * keyboard shortcut that insert or edits the comment.
141
179
  *
180
+ * @private
181
+ * @type {boolean}
182
+ */
183
+ _classPrivateFieldInitSpec(this, _preventEditorHiding, {
184
+ writable: true,
185
+ value: false
186
+ });
187
+ /**
188
+ * The property for holding editor dimensions for further processing.
189
+ *
190
+ * @private
142
191
  * @type {object}
143
192
  */
144
- this.range = {};
193
+ _classPrivateFieldInitSpec(this, _tempEditorDimensions, {
194
+ writable: true,
195
+ value: {}
196
+ });
145
197
  /**
146
- * Prevents showing/hiding editor that reacts on the logic triggered by the "mouseover" events.
198
+ * The flag that allows processing mousedown event correctly when comments editor is triggered.
147
199
  *
148
200
  * @private
149
201
  * @type {boolean}
150
202
  */
151
- this.preventEditorAutoSwitch = false;
152
- privatePool.set(this, {
153
- tempEditorDimensions: {},
154
- cellBelowCursor: null
203
+ _classPrivateFieldInitSpec(this, _cellBelowCursor, {
204
+ writable: true,
205
+ value: null
206
+ });
207
+ /**
208
+ * Holds the comment value before it's actually saved to the cell meta.
209
+ *
210
+ * @private
211
+ * @type {string}
212
+ */
213
+ _classPrivateFieldInitSpec(this, _commentValueBeforeSave, {
214
+ writable: true,
215
+ value: ''
155
216
  });
156
217
  }
157
-
218
+ static get PLUGIN_KEY() {
219
+ return PLUGIN_KEY;
220
+ }
221
+ static get PLUGIN_PRIORITY() {
222
+ return PLUGIN_PRIORITY;
223
+ }
158
224
  /**
159
225
  * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}
160
226
  * hook and if it returns `true` then the {@link Comments#enablePlugin} method is called.
@@ -172,22 +238,23 @@ export class Comments extends BasePlugin {
172
238
  if (this.enabled) {
173
239
  return;
174
240
  }
175
- if (!this.editor) {
176
- this.editor = new CommentEditor(this.hot.rootDocument, this.hot.isRtl());
241
+ if (!_classPrivateFieldGet(this, _editor)) {
242
+ _classPrivateFieldSet(this, _editor, new CommentEditor(this.hot.rootDocument, this.hot.isRtl()));
177
243
  }
178
244
  if (!this.eventManager) {
179
245
  this.eventManager = new EventManager(this);
180
246
  }
181
- if (!this.displaySwitch) {
182
- this.displaySwitch = new DisplaySwitch(this.getDisplayDelaySetting());
247
+ if (!_classPrivateFieldGet(this, _displaySwitch)) {
248
+ _classPrivateFieldSet(this, _displaySwitch, new DisplaySwitch(this.getDisplayDelaySetting()));
183
249
  }
184
250
  this.addHook('afterContextMenuDefaultOptions', options => this.addToContextMenu(options));
185
251
  this.addHook('afterRenderer', (TD, row, col, prop, value, cellProperties) => this.onAfterRenderer(TD, cellProperties));
186
- this.addHook('afterScrollHorizontally', () => this.hide());
187
- this.addHook('afterScrollVertically', () => this.hide());
252
+ this.addHook('afterScroll', () => this.onAfterScroll());
188
253
  this.addHook('afterBeginEditing', () => this.hide());
189
- this.displaySwitch.addLocalHook('hide', () => this.hide());
190
- this.displaySwitch.addLocalHook('show', (row, col) => this.showAtCell(row, col));
254
+ this.addHook('afterDocumentKeyDown', event => this.onAfterDocumentKeyDown(event));
255
+ _classPrivateFieldGet(this, _displaySwitch).addLocalHook('hide', () => this.hide());
256
+ _classPrivateFieldGet(this, _displaySwitch).addLocalHook('show', (row, col) => this.showAtCell(row, col));
257
+ this.registerShortcuts();
191
258
  this.registerListeners();
192
259
  super.enablePlugin();
193
260
  }
@@ -199,19 +266,85 @@ export class Comments extends BasePlugin {
199
266
  * - [`comments`](@/api/options.md#comments)
200
267
  */
201
268
  updatePlugin() {
202
- this.disablePlugin();
203
- this.enablePlugin();
269
+ _classPrivateFieldGet(this, _displaySwitch).updateDelay(this.getDisplayDelaySetting());
204
270
  super.updatePlugin();
205
- this.displaySwitch.updateDelay(this.getDisplayDelaySetting());
206
271
  }
207
272
 
208
273
  /**
209
274
  * Disables the plugin functionality for this Handsontable instance.
210
275
  */
211
276
  disablePlugin() {
277
+ this.unregisterShortcuts();
212
278
  super.disablePlugin();
213
279
  }
214
280
 
281
+ /**
282
+ * Register shortcuts responsible for toggling context menu.
283
+ *
284
+ * @private
285
+ */
286
+ registerShortcuts() {
287
+ const manager = this.hot.getShortcutManager();
288
+ const gridContext = manager.getContext('grid');
289
+ const pluginContext = manager.addContext(SHORTCUTS_CONTEXT_NAME);
290
+ gridContext.addShortcut({
291
+ keys: [['Control', 'Alt', 'M']],
292
+ callback: () => {
293
+ const range = this.hot.getSelectedRangeLast();
294
+ _classPrivateFieldSet(this, _preventEditorHiding, true);
295
+ this.hot.scrollToFocusedCell(() => {
296
+ this.setRange(range);
297
+ this.show();
298
+ this.focusEditor();
299
+ manager.setActiveContextName(SHORTCUTS_CONTEXT_NAME);
300
+ this.hot._registerTimeout(() => {
301
+ _classPrivateFieldSet(this, _preventEditorHiding, false);
302
+ });
303
+ });
304
+ },
305
+ stopPropagation: true,
306
+ runOnlyIf: () => {
307
+ var _this$hot$getSelected;
308
+ return ((_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight.isCell()) && !_classPrivateFieldGet(this, _editor).isVisible();
309
+ },
310
+ group: SHORTCUTS_GROUP
311
+ });
312
+ pluginContext.addShortcut({
313
+ keys: [['Escape']],
314
+ callback: () => {
315
+ _classPrivateFieldGet(this, _editor).setValue(_classPrivateFieldGet(this, _commentValueBeforeSave));
316
+ this.hide();
317
+ manager.setActiveContextName('grid');
318
+ },
319
+ runOnlyIf: () => {
320
+ var _this$hot$getSelected2;
321
+ return ((_this$hot$getSelected2 = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected2 === void 0 ? void 0 : _this$hot$getSelected2.highlight.isCell()) && _classPrivateFieldGet(this, _editor).isVisible();
322
+ },
323
+ group: SHORTCUTS_GROUP
324
+ });
325
+ pluginContext.addShortcut({
326
+ keys: [['Control/Meta', 'Enter']],
327
+ callback: () => {
328
+ this.hide();
329
+ manager.setActiveContextName('grid');
330
+ },
331
+ runOnlyIf: () => {
332
+ var _this$hot$getSelected3;
333
+ return ((_this$hot$getSelected3 = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected3 === void 0 ? void 0 : _this$hot$getSelected3.highlight.isCell()) && _classPrivateFieldGet(this, _editor).isVisible();
334
+ },
335
+ group: SHORTCUTS_GROUP
336
+ });
337
+ }
338
+
339
+ /**
340
+ * Unregister shortcuts responsible for toggling context menu.
341
+ *
342
+ * @private
343
+ */
344
+ unregisterShortcuts() {
345
+ this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
346
+ }
347
+
215
348
  /**
216
349
  * Registers all necessary DOM listeners.
217
350
  *
@@ -221,12 +354,14 @@ export class Comments extends BasePlugin {
221
354
  const {
222
355
  rootDocument
223
356
  } = this.hot;
357
+ const editorElement = this.getEditorInputElement();
224
358
  this.eventManager.addEventListener(rootDocument, 'mouseover', event => this.onMouseOver(event));
225
359
  this.eventManager.addEventListener(rootDocument, 'mousedown', event => this.onMouseDown(event));
226
360
  this.eventManager.addEventListener(rootDocument, 'mouseup', () => this.onMouseUp());
227
- this.eventManager.addEventListener(this.editor.getInputElement(), 'blur', () => this.onEditorBlur());
228
- this.eventManager.addEventListener(this.editor.getInputElement(), 'mousedown', event => this.onEditorMouseDown(event));
229
- this.eventManager.addEventListener(this.editor.getInputElement(), 'mouseup', event => this.onEditorMouseUp(event));
361
+ this.eventManager.addEventListener(editorElement, 'focus', () => this.onEditorFocus());
362
+ this.eventManager.addEventListener(editorElement, 'blur', () => this.onEditorBlur());
363
+ this.eventManager.addEventListener(editorElement, 'mousedown', event => this.onEditorMouseDown(event));
364
+ this.eventManager.addEventListener(editorElement, 'mouseup', event => this.onEditorMouseUp(event));
230
365
  }
231
366
 
232
367
  /**
@@ -265,7 +400,7 @@ export class Comments extends BasePlugin {
265
400
  * @returns {boolean}
266
401
  */
267
402
  targetIsCommentTextArea(event) {
268
- return this.editor.getInputElement() === event.target;
403
+ return this.getEditorInputElement() === event.target;
269
404
  }
270
405
 
271
406
  /**
@@ -277,7 +412,7 @@ export class Comments extends BasePlugin {
277
412
  if (!this.range.from) {
278
413
  throw new Error('Before using this method, first set cell range (hot.getPlugin("comment").setRange())');
279
414
  }
280
- const editorValue = this.editor.getValue();
415
+ const editorValue = _classPrivateFieldGet(this, _editor).getValue();
281
416
  let comment = '';
282
417
  if (value !== null && value !== void 0) {
283
418
  comment = value;
@@ -366,6 +501,7 @@ export class Comments extends BasePlugin {
366
501
  * @returns {boolean} Returns `true` if comment editor was shown.
367
502
  */
368
503
  show() {
504
+ var _ref;
369
505
  if (!this.range.from) {
370
506
  throw new Error('Before using this method, first set cell range (hot.getPlugin("comment").setRange())');
371
507
  }
@@ -379,8 +515,9 @@ export class Comments extends BasePlugin {
379
515
  return false;
380
516
  }
381
517
  const meta = this.hot.getCellMeta(this.range.from.row, this.range.from.col);
382
- this.editor.setValue(meta[META_COMMENT] ? meta[META_COMMENT][META_COMMENT_VALUE] : null || '');
383
- this.editor.show();
518
+ _classPrivateFieldGet(this, _displaySwitch).cancelHiding();
519
+ _classPrivateFieldGet(this, _editor).setValue((_ref = meta[META_COMMENT] ? meta[META_COMMENT][META_COMMENT_VALUE] : null) !== null && _ref !== void 0 ? _ref : '');
520
+ _classPrivateFieldGet(this, _editor).show();
384
521
  this.refreshEditor(true);
385
522
  return true;
386
523
  }
@@ -403,7 +540,7 @@ export class Comments extends BasePlugin {
403
540
  * Hides the comment editor.
404
541
  */
405
542
  hide() {
406
- this.editor.hide();
543
+ _classPrivateFieldGet(this, _editor).hide();
407
544
  }
408
545
 
409
546
  /**
@@ -414,7 +551,7 @@ export class Comments extends BasePlugin {
414
551
  refreshEditor() {
415
552
  var _renderableRow, _renderableColumn;
416
553
  let force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
417
- if (!force && (!this.range.from || !this.editor.isVisible())) {
554
+ if (!force && (!this.range.from || !_classPrivateFieldGet(this, _editor).isVisible())) {
418
555
  return;
419
556
  }
420
557
  const {
@@ -432,7 +569,7 @@ export class Comments extends BasePlugin {
432
569
 
433
570
  // Reset the editor position to (0, 0) so the opening direction calculation wouldn't be influenced by its
434
571
  // previous position
435
- this.editor.setPosition(0, 0);
572
+ _classPrivateFieldGet(this, _editor).setPosition(0, 0);
436
573
  if (renderableRow === null) {
437
574
  renderableRow = rowIndexMapper.getRenderableFromVisualIndex(rowIndexMapper.getNearestNotHiddenIndex(visualRow, -1));
438
575
  }
@@ -460,9 +597,9 @@ export class Comments extends BasePlugin {
460
597
  }, true);
461
598
  const commentStyle = this.getCommentMeta(visualRow, visualColumn, META_STYLE);
462
599
  if (commentStyle) {
463
- this.editor.setSize(commentStyle.width, commentStyle.height);
600
+ _classPrivateFieldGet(this, _editor).setSize(commentStyle.width, commentStyle.height);
464
601
  } else {
465
- this.editor.resetSize();
602
+ _classPrivateFieldGet(this, _editor).resetSize();
466
603
  }
467
604
  const lastColWidth = isBeforeRenderedColumns ? 0 : wtTable.getStretchedColumnWidth(renderableColumn);
468
605
  const lastRowHeight = targetingPreviousRow && !isBeforeRenderedRows ? outerHeight(TD) : 0;
@@ -475,7 +612,7 @@ export class Comments extends BasePlugin {
475
612
  const {
476
613
  width: editorWidth,
477
614
  height: editorHeight
478
- } = this.editor.getSize();
615
+ } = _classPrivateFieldGet(this, _editor).getSize();
479
616
  const {
480
617
  innerWidth,
481
618
  innerHeight
@@ -496,28 +633,15 @@ export class Comments extends BasePlugin {
496
633
  if (top + editorHeight > innerHeight) {
497
634
  y -= editorHeight - cellHeight + 1;
498
635
  }
499
- this.editor.setPosition(x, y);
500
- this.editor.setReadOnlyState(this.getCommentMeta(visualRow, visualColumn, META_READONLY));
636
+ _classPrivateFieldGet(this, _editor).setPosition(x, y);
637
+ _classPrivateFieldGet(this, _editor).setReadOnlyState(this.getCommentMeta(visualRow, visualColumn, META_READONLY));
501
638
  }
502
639
 
503
640
  /**
504
- * Checks if there is a comment for selected range.
505
- *
506
- * @private
507
- * @returns {boolean}
641
+ * Focuses the comments editor element.
508
642
  */
509
- checkSelectionCommentsConsistency() {
510
- const selected = this.hot.getSelectedRangeLast();
511
- if (!selected) {
512
- return false;
513
- }
514
- let hasComment = false;
515
- const cell = selected.getTopStartCorner(); // IN EXCEL THERE IS COMMENT ONLY FOR TOP LEFT CELL IN SELECTION
516
-
517
- if (this.getCommentMeta(cell.row, cell.col, META_COMMENT_VALUE)) {
518
- hasComment = true;
519
- }
520
- return hasComment;
643
+ focusEditor() {
644
+ _classPrivateFieldGet(this, _editor).focus();
521
645
  }
522
646
 
523
647
  /**
@@ -565,7 +689,7 @@ export class Comments extends BasePlugin {
565
689
  if (!this.hot.view || !this.hot.view._wt) {
566
690
  return;
567
691
  }
568
- if (!this.preventEditorAutoSwitch && !this.targetIsCommentTextArea(event)) {
692
+ if (!_classPrivateFieldGet(this, _preventEditorAutoSwitch) && !this.targetIsCommentTextArea(event)) {
569
693
  const eventCell = closest(event.target, 'TD', 'TBODY');
570
694
  let coordinates = null;
571
695
  if (eventCell) {
@@ -584,19 +708,18 @@ export class Comments extends BasePlugin {
584
708
  * @param {MouseEvent} event The `mouseover` event.
585
709
  */
586
710
  onMouseOver(event) {
587
- const priv = privatePool.get(this);
588
711
  const {
589
712
  rootDocument
590
713
  } = this.hot;
591
- if (this.preventEditorAutoSwitch || this.editor.isFocused() || hasClass(event.target, 'wtBorder') || priv.cellBelowCursor === event.target || !this.editor) {
714
+ if (_classPrivateFieldGet(this, _preventEditorAutoSwitch) || _classPrivateFieldGet(this, _editor).isFocused() || hasClass(event.target, 'wtBorder') || _classPrivateFieldGet(this, _cellBelowCursor) === event.target || !_classPrivateFieldGet(this, _editor)) {
592
715
  return;
593
716
  }
594
- priv.cellBelowCursor = rootDocument.elementFromPoint(event.clientX, event.clientY);
717
+ _classPrivateFieldSet(this, _cellBelowCursor, rootDocument.elementFromPoint(event.clientX, event.clientY));
595
718
  if (this.targetIsCellWithComment(event)) {
596
719
  const range = this.hot._createCellRange(this.hot.getCoords(event.target));
597
- this.displaySwitch.show(range);
720
+ _classPrivateFieldGet(this, _displaySwitch).show(range);
598
721
  } else if (isChildOf(event.target, rootDocument) && !this.targetIsCommentTextArea(event)) {
599
- this.displaySwitch.hide();
722
+ _classPrivateFieldGet(this, _displaySwitch).hide();
600
723
  }
601
724
  }
602
725
 
@@ -606,7 +729,7 @@ export class Comments extends BasePlugin {
606
729
  * @private
607
730
  */
608
731
  onMouseUp() {
609
- this.preventEditorAutoSwitch = false;
732
+ _classPrivateFieldSet(this, _preventEditorAutoSwitch, false);
610
733
  }
611
734
 
612
735
  /**
@@ -623,14 +746,29 @@ export class Comments extends BasePlugin {
623
746
  }
624
747
 
625
748
  /**
626
- * `blur` event callback for the comment editor.
749
+ * Hook observer the "blur" event from the comments editor element. The hook clears the
750
+ * editor content and gives back the keyboard shortcuts control by switching to the "grid" context.
627
751
  *
628
752
  * @private
629
753
  */
630
754
  onEditorBlur() {
755
+ _classPrivateFieldSet(this, _commentValueBeforeSave, '');
756
+ this.hot.getShortcutManager().setActiveContextName('grid');
631
757
  this.setComment();
632
758
  }
633
759
 
760
+ /**
761
+ * Hook observer the "focus" event from the comments editor element. The hook takes the control of
762
+ * the keyboard shortcuts by switching the context to plugins one.
763
+ *
764
+ * @private
765
+ */
766
+ onEditorFocus() {
767
+ _classPrivateFieldSet(this, _commentValueBeforeSave, this.getComment());
768
+ this.hot.listen();
769
+ this.hot.getShortcutManager().setActiveContextName(SHORTCUTS_CONTEXT_NAME);
770
+ }
771
+
634
772
  /**
635
773
  * `mousedown` hook. Along with `onEditorMouseUp` used to simulate the textarea resizing event.
636
774
  *
@@ -638,11 +776,10 @@ export class Comments extends BasePlugin {
638
776
  * @param {MouseEvent} event The `mousedown` event.
639
777
  */
640
778
  onEditorMouseDown(event) {
641
- const priv = privatePool.get(this);
642
- priv.tempEditorDimensions = {
779
+ _classPrivateFieldSet(this, _tempEditorDimensions, {
643
780
  width: outerWidth(event.target),
644
781
  height: outerHeight(event.target)
645
- };
782
+ });
646
783
  }
647
784
 
648
785
  /**
@@ -652,10 +789,9 @@ export class Comments extends BasePlugin {
652
789
  * @param {MouseEvent} event The `mouseup` event.
653
790
  */
654
791
  onEditorMouseUp(event) {
655
- const priv = privatePool.get(this);
656
792
  const currentWidth = outerWidth(event.target);
657
793
  const currentHeight = outerHeight(event.target);
658
- if (currentWidth !== priv.tempEditorDimensions.width + 1 || currentHeight !== priv.tempEditorDimensions.height + 2) {
794
+ if (currentWidth !== _classPrivateFieldGet(this, _tempEditorDimensions).width + 1 || currentHeight !== _classPrivateFieldGet(this, _tempEditorDimensions).height + 2) {
659
795
  this.updateCommentMeta(this.range.from.row, this.range.from.col, {
660
796
  [META_STYLE]: {
661
797
  width: currentWidth,
@@ -666,121 +802,36 @@ export class Comments extends BasePlugin {
666
802
  }
667
803
 
668
804
  /**
669
- * Context Menu's "Add comment" callback. Results in showing the comment editor.
805
+ * Observes the pressed keys and if there is already opened the comment editor prevents open
806
+ * the table editor into the fast edit mode.
670
807
  *
671
- * @private
672
- */
673
- onContextMenuAddComment() {
674
- const coords = this.hot.getSelectedRangeLast();
675
- this.preventEditorAutoSwitch = true;
676
- this.displaySwitch.cancelHiding();
677
- this.setRange({
678
- from: coords.highlight
679
- });
680
- this.show();
681
- this.hot.deselectCell();
682
- this.editor.focus();
683
- }
684
-
685
- /**
686
- * Context Menu's "remove comment" callback.
687
- *
688
- * @private
808
+ * @param {Event} event The keydown event.
689
809
  */
690
- onContextMenuRemoveComment() {
691
- const coords = this.hot.getSelectedRangeLast();
692
- this.preventEditorAutoSwitch = true;
693
- coords.forAll((row, column) => {
694
- if (row >= 0 && column >= 0) {
695
- this.removeCommentAtCell(row, column, false);
696
- }
697
- });
698
- this.hot.render();
810
+ onAfterDocumentKeyDown(event) {
811
+ if (_classPrivateFieldGet(this, _editor).isVisible()) {
812
+ stopImmediatePropagation(event);
813
+ }
699
814
  }
700
815
 
701
816
  /**
702
- * Context Menu's "make comment read-only" callback.
703
- *
704
- * @private
817
+ * Observes the changes in the scroll position if triggered it hides the comment editor.
705
818
  */
706
- onContextMenuMakeReadOnly() {
707
- const coords = this.hot.getSelectedRangeLast();
708
- this.preventEditorAutoSwitch = true;
709
- coords.forAll((row, column) => {
710
- if (row >= 0 && column >= 0) {
711
- const currentState = !!this.getCommentMeta(row, column, META_READONLY);
712
- this.updateCommentMeta(row, column, {
713
- [META_READONLY]: !currentState
714
- });
715
- }
716
- });
819
+ onAfterScroll() {
820
+ if (!_classPrivateFieldGet(this, _preventEditorHiding)) {
821
+ this.hide();
822
+ }
717
823
  }
718
824
 
719
825
  /**
720
826
  * Add Comments plugin options to the Context Menu.
721
827
  *
722
828
  * @private
723
- * @param {object} defaultOptions The menu options.
724
- */
725
- addToContextMenu(defaultOptions) {
726
- const isThereAnyCellRendered = () => {
727
- return this.hot.rowIndexMapper.getRenderableIndexesLength() > 0 && this.hot.columnIndexMapper.getRenderableIndexesLength() > 0;
728
- };
729
- defaultOptions.items.push({
730
- name: '---------'
731
- }, {
732
- key: 'commentsAddEdit',
733
- name: () => {
734
- if (this.checkSelectionCommentsConsistency()) {
735
- return this.hot.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_EDIT_COMMENT);
736
- }
737
- return this.hot.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ADD_COMMENT);
738
- },
739
- callback: () => this.onContextMenuAddComment(),
740
- disabled: () => {
741
- if (!isThereAnyCellRendered()) {
742
- return true;
743
- }
744
- return !(this.hot.getSelectedLast() && !this.hot.selection.isSelectedByCorner());
745
- }
746
- }, {
747
- key: 'commentsRemove',
748
- name() {
749
- return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_COMMENT);
750
- },
751
- callback: () => this.onContextMenuRemoveComment(),
752
- disabled: () => {
753
- if (!isThereAnyCellRendered()) {
754
- return true;
755
- }
756
- return !(this.hot.getSelectedLast() && !this.hot.selection.isSelectedByCorner());
757
- }
758
- }, {
759
- key: 'commentsReadOnly',
760
- name() {
761
- let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT);
762
- const hasProperty = checkSelectionConsistency(this.getSelectedRangeLast(), (row, col) => {
763
- let readOnlyProperty = this.getCellMeta(row, col)[META_COMMENT];
764
- if (readOnlyProperty) {
765
- readOnlyProperty = readOnlyProperty[META_READONLY];
766
- }
767
- if (readOnlyProperty) {
768
- return true;
769
- }
770
- });
771
- if (hasProperty) {
772
- label = markLabelAsSelected(label);
773
- }
774
- return label;
775
- },
776
- callback: () => this.onContextMenuMakeReadOnly(),
777
- disabled: () => {
778
- if (!isThereAnyCellRendered()) {
779
- return true;
780
- }
781
- return !(this.hot.getSelectedLast() && !this.hot.selection.isSelectedByCorner()) || !this.checkSelectionCommentsConsistency();
782
- }
783
- });
829
+ * @param {object} options The menu options.
830
+ */
831
+ addToContextMenu(options) {
832
+ options.items.push({
833
+ name: SEPARATOR
834
+ }, addEditCommentItem(this), removeCommentItem(this), readOnlyCommentItem(this));
784
835
  }
785
836
 
786
837
  /**
@@ -796,15 +847,25 @@ export class Comments extends BasePlugin {
796
847
  }
797
848
  }
798
849
 
850
+ /**
851
+ * Gets the editors input element.
852
+ *
853
+ * @private
854
+ * @returns {HTMLTextAreaElement}
855
+ */
856
+ getEditorInputElement() {
857
+ return _classPrivateFieldGet(this, _editor).getInputElement();
858
+ }
859
+
799
860
  /**
800
861
  * Destroys the plugin instance.
801
862
  */
802
863
  destroy() {
803
- if (this.editor) {
804
- this.editor.destroy();
864
+ if (_classPrivateFieldGet(this, _editor)) {
865
+ _classPrivateFieldGet(this, _editor).destroy();
805
866
  }
806
- if (this.displaySwitch) {
807
- this.displaySwitch.destroy();
867
+ if (_classPrivateFieldGet(this, _displaySwitch)) {
868
+ _classPrivateFieldGet(this, _displaySwitch).destroy();
808
869
  }
809
870
  super.destroy();
810
871
  }