handsontable 0.0.0-next-b66c79f-20230713 → 0.0.0-next-08765b9-20230714

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 (373) hide show
  1. package/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
  2. package/3rdparty/walkontable/src/cell/coords.js +87 -33
  3. package/3rdparty/walkontable/src/cell/coords.mjs +87 -33
  4. package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
  5. package/3rdparty/walkontable/src/cell/range.js +92 -46
  6. package/3rdparty/walkontable/src/cell/range.mjs +92 -46
  7. package/3rdparty/walkontable/src/core/_base.js +41 -33
  8. package/3rdparty/walkontable/src/core/_base.mjs +41 -33
  9. package/3rdparty/walkontable/src/core/clone.js +8 -5
  10. package/3rdparty/walkontable/src/core/clone.mjs +8 -5
  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 +9 -8
  14. package/3rdparty/walkontable/src/event.mjs +9 -8
  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 +11 -9
  20. package/3rdparty/walkontable/src/overlay/_base.mjs +11 -9
  21. package/3rdparty/walkontable/src/overlay/bottom.js +10 -8
  22. package/3rdparty/walkontable/src/overlay/bottom.mjs +10 -8
  23. package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -6
  24. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -6
  25. package/3rdparty/walkontable/src/overlay/top.js +12 -14
  26. package/3rdparty/walkontable/src/overlay/top.mjs +12 -14
  27. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.js +16 -13
  28. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.mjs +16 -13
  29. package/3rdparty/walkontable/src/overlays.js +75 -80
  30. package/3rdparty/walkontable/src/overlays.mjs +75 -80
  31. package/3rdparty/walkontable/src/scroll.js +27 -24
  32. package/3rdparty/walkontable/src/scroll.mjs +27 -24
  33. package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +7 -12
  34. package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
  35. package/3rdparty/walkontable/src/selection/border/constants.js +16 -0
  36. package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
  37. package/3rdparty/walkontable/src/selection/constants.js +62 -0
  38. package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
  39. package/3rdparty/walkontable/src/selection/index.js +26 -0
  40. package/3rdparty/walkontable/src/selection/index.mjs +5 -0
  41. package/3rdparty/walkontable/src/selection/manager.js +259 -0
  42. package/3rdparty/walkontable/src/selection/manager.mjs +254 -0
  43. package/3rdparty/walkontable/src/selection/scanner.js +270 -0
  44. package/3rdparty/walkontable/src/selection/scanner.mjs +267 -0
  45. package/3rdparty/walkontable/src/selection/selection.js +101 -0
  46. package/3rdparty/walkontable/src/selection/selection.mjs +96 -0
  47. package/3rdparty/walkontable/src/settings.js +18 -17
  48. package/3rdparty/walkontable/src/settings.mjs +18 -17
  49. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +9 -0
  50. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
  51. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +9 -0
  52. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
  53. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +9 -0
  54. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
  55. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +9 -0
  56. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
  57. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -0
  58. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
  59. package/3rdparty/walkontable/src/table.js +48 -115
  60. package/3rdparty/walkontable/src/table.mjs +49 -116
  61. package/base.js +2 -2
  62. package/base.mjs +2 -2
  63. package/core/focusCatcher/focusDetector.js +58 -0
  64. package/core/focusCatcher/focusDetector.mjs +54 -0
  65. package/core/focusCatcher/index.js +142 -0
  66. package/core/focusCatcher/index.mjs +138 -0
  67. package/core/index.js +9 -0
  68. package/core/index.mjs +1 -0
  69. package/core.d.ts +6 -3
  70. package/core.js +181 -298
  71. package/core.mjs +181 -298
  72. package/dataMap/metaManager/metaLayers/cellMeta.js +2 -1
  73. package/dataMap/metaManager/metaLayers/cellMeta.mjs +2 -1
  74. package/dataMap/metaManager/metaLayers/globalMeta.js +1 -1
  75. package/dataMap/metaManager/metaLayers/globalMeta.mjs +1 -1
  76. package/dataMap/metaManager/metaSchema.js +41 -0
  77. package/dataMap/metaManager/metaSchema.mjs +41 -0
  78. package/dataMap/metaManager/mods/dynamicCellMeta.js +3 -2
  79. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +3 -2
  80. package/dataMap/metaManager/utils.js +4 -2
  81. package/dataMap/metaManager/utils.mjs +4 -2
  82. package/dist/handsontable.css +19 -3
  83. package/dist/handsontable.full.css +19 -3
  84. package/dist/handsontable.full.js +10739 -7037
  85. package/dist/handsontable.full.min.css +3 -3
  86. package/dist/handsontable.full.min.js +25 -25
  87. package/dist/handsontable.js +24884 -21182
  88. package/dist/handsontable.min.css +3 -3
  89. package/dist/handsontable.min.js +19 -19
  90. package/editorManager.js +11 -75
  91. package/editorManager.mjs +11 -74
  92. package/editors/autocompleteEditor/autocompleteEditor.js +70 -67
  93. package/editors/autocompleteEditor/autocompleteEditor.mjs +70 -67
  94. package/editors/baseEditor/baseEditor.js +1 -1
  95. package/editors/baseEditor/baseEditor.mjs +1 -1
  96. package/editors/dateEditor/dateEditor.js +2 -1
  97. package/editors/dateEditor/dateEditor.mjs +2 -1
  98. package/editors/textEditor/textEditor.js +3 -11
  99. package/editors/textEditor/textEditor.mjs +4 -12
  100. package/helpers/mixed.js +1 -1
  101. package/helpers/mixed.mjs +1 -1
  102. package/helpers/number.d.ts +1 -0
  103. package/helpers/number.js +18 -0
  104. package/helpers/number.mjs +17 -0
  105. package/helpers/object.js +1 -0
  106. package/helpers/object.mjs +1 -0
  107. package/index.js +5 -5
  108. package/index.mjs +5 -5
  109. package/package.json +1 -1
  110. package/pluginHooks.d.ts +7 -1
  111. package/pluginHooks.js +106 -1
  112. package/pluginHooks.mjs +106 -1
  113. package/plugins/autoColumnSize/autoColumnSize.js +4 -1
  114. package/plugins/autoColumnSize/autoColumnSize.mjs +4 -1
  115. package/plugins/collapsibleColumns/collapsibleColumns.js +110 -40
  116. package/plugins/collapsibleColumns/collapsibleColumns.mjs +110 -40
  117. package/plugins/columnSorting/columnSorting.js +40 -1
  118. package/plugins/columnSorting/columnSorting.mjs +40 -3
  119. package/plugins/columnSorting/columnStatesManager.js +2 -1
  120. package/plugins/columnSorting/columnStatesManager.mjs +2 -1
  121. package/plugins/columnSorting/index.js +3 -1
  122. package/plugins/columnSorting/index.mjs +1 -1
  123. package/plugins/comments/commentEditor.js +1 -0
  124. package/plugins/comments/commentEditor.mjs +1 -0
  125. package/plugins/comments/comments.js +253 -191
  126. package/plugins/comments/comments.mjs +252 -192
  127. package/plugins/comments/contextMenuItem/addEditComment.js +41 -0
  128. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  129. package/plugins/comments/contextMenuItem/readOnlyComment.js +49 -0
  130. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +43 -0
  131. package/plugins/comments/contextMenuItem/removeComment.js +38 -0
  132. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  133. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  134. package/plugins/contextMenu/contextMenu.js +72 -30
  135. package/plugins/contextMenu/contextMenu.mjs +73 -31
  136. package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
  137. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  138. package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
  139. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  140. package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
  141. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  142. package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
  143. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  144. package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
  145. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  146. package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
  147. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  148. package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
  149. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  150. package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
  151. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  152. package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
  153. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  154. package/plugins/contextMenu/utils.js +28 -16
  155. package/plugins/contextMenu/utils.mjs +27 -15
  156. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  157. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  158. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  159. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  160. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  161. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  162. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  163. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  164. package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
  165. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  166. package/plugins/copyPaste/copyPaste.js +12 -6
  167. package/plugins/copyPaste/copyPaste.mjs +12 -6
  168. package/plugins/customBorders/customBorders.js +36 -29
  169. package/plugins/customBorders/customBorders.mjs +37 -30
  170. package/plugins/customBorders/utils.js +3 -3
  171. package/plugins/customBorders/utils.mjs +3 -3
  172. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  173. package/plugins/dropdownMenu/dropdownMenu.js +89 -32
  174. package/plugins/dropdownMenu/dropdownMenu.mjs +89 -32
  175. package/plugins/filters/conditionCollection.js +6 -5
  176. package/plugins/filters/conditionCollection.mjs +6 -5
  177. package/plugins/filters/filters.js +44 -21
  178. package/plugins/filters/filters.mjs +43 -20
  179. package/plugins/formulas/engine/register.js +3 -3
  180. package/plugins/formulas/engine/register.mjs +3 -3
  181. package/plugins/formulas/engine/settings.js +6 -3
  182. package/plugins/formulas/engine/settings.mjs +6 -3
  183. package/plugins/formulas/formulas.js +151 -143
  184. package/plugins/formulas/formulas.mjs +151 -143
  185. package/plugins/formulas/indexSyncer/axisSyncer.js +115 -79
  186. package/plugins/formulas/indexSyncer/axisSyncer.mjs +115 -79
  187. package/plugins/formulas/indexSyncer/index.js +100 -64
  188. package/plugins/formulas/indexSyncer/index.mjs +100 -64
  189. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +2 -2
  190. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +2 -2
  191. package/plugins/hiddenColumns/hiddenColumns.js +51 -34
  192. package/plugins/hiddenColumns/hiddenColumns.mjs +51 -34
  193. package/plugins/hiddenRows/contextMenuItem/showRow.js +2 -2
  194. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +2 -2
  195. package/plugins/hiddenRows/hiddenRows.js +50 -33
  196. package/plugins/hiddenRows/hiddenRows.mjs +50 -33
  197. package/plugins/manualRowResize/manualRowResize.js +2 -1
  198. package/plugins/manualRowResize/manualRowResize.mjs +2 -1
  199. package/plugins/mergeCells/mergeCells.js +6 -17
  200. package/plugins/mergeCells/mergeCells.mjs +6 -17
  201. package/plugins/multiColumnSorting/multiColumnSorting.js +37 -2
  202. package/plugins/multiColumnSorting/multiColumnSorting.mjs +37 -2
  203. package/plugins/nestedHeaders/nestedHeaders.js +209 -75
  204. package/plugins/nestedHeaders/nestedHeaders.mjs +208 -74
  205. package/plugins/nestedHeaders/stateManager/headersTree.js +58 -38
  206. package/plugins/nestedHeaders/stateManager/headersTree.mjs +58 -38
  207. package/plugins/nestedHeaders/stateManager/index.js +107 -49
  208. package/plugins/nestedHeaders/stateManager/index.mjs +105 -47
  209. package/plugins/nestedHeaders/stateManager/nodeModifiers/collapse.js +1 -1
  210. package/plugins/nestedHeaders/stateManager/nodeModifiers/collapse.mjs +1 -1
  211. package/plugins/nestedHeaders/stateManager/sourceSettings.js +57 -37
  212. package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +57 -37
  213. package/plugins/nestedHeaders/utils/ghostTable.js +39 -35
  214. package/plugins/nestedHeaders/utils/ghostTable.mjs +39 -35
  215. package/plugins/nestedRows/data/dataManager.js +4 -2
  216. package/plugins/nestedRows/data/dataManager.mjs +4 -2
  217. package/plugins/nestedRows/nestedRows.js +41 -0
  218. package/plugins/nestedRows/nestedRows.mjs +41 -0
  219. package/plugins/persistentState/storage.js +1 -0
  220. package/plugins/persistentState/storage.mjs +1 -0
  221. package/plugins/undoRedo/undoRedo.js +2 -1
  222. package/plugins/undoRedo/undoRedo.mjs +2 -1
  223. package/renderers/checkboxRenderer/checkboxRenderer.js +2 -2
  224. package/renderers/checkboxRenderer/checkboxRenderer.mjs +1 -1
  225. package/selection/highlight/highlight.js +256 -71
  226. package/selection/highlight/highlight.mjs +250 -71
  227. package/selection/highlight/types/activeHeader.js +10 -8
  228. package/selection/highlight/types/activeHeader.mjs +10 -8
  229. package/selection/highlight/types/area.js +6 -18
  230. package/selection/highlight/types/area.mjs +6 -18
  231. package/selection/highlight/types/areaLayered.js +31 -0
  232. package/selection/highlight/types/areaLayered.mjs +26 -0
  233. package/selection/highlight/types/column.js +27 -0
  234. package/selection/highlight/types/column.mjs +22 -0
  235. package/selection/highlight/types/customSelection.js +7 -9
  236. package/selection/highlight/types/customSelection.mjs +7 -9
  237. package/selection/highlight/types/fill.js +5 -7
  238. package/selection/highlight/types/fill.mjs +5 -7
  239. package/selection/highlight/types/{cell.js → focus.js} +5 -7
  240. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  241. package/selection/highlight/types/header.js +9 -18
  242. package/selection/highlight/types/header.mjs +9 -18
  243. package/selection/highlight/types/row.js +27 -0
  244. package/selection/highlight/types/row.mjs +22 -0
  245. package/selection/highlight/visualSelection.js +41 -33
  246. package/selection/highlight/visualSelection.mjs +41 -33
  247. package/selection/index.js +4 -7
  248. package/selection/index.mjs +2 -3
  249. package/selection/mouseEventHandler.js +1 -1
  250. package/selection/mouseEventHandler.mjs +1 -1
  251. package/selection/range.js +8 -8
  252. package/selection/range.mjs +8 -8
  253. package/selection/selection.js +290 -154
  254. package/selection/selection.mjs +287 -153
  255. package/selection/transformation.js +232 -90
  256. package/selection/transformation.mjs +232 -90
  257. package/selection/utils.js +15 -21
  258. package/selection/utils.mjs +16 -21
  259. package/settings.d.ts +2 -0
  260. package/shortcutContexts/commands/editor/closeAndSave.js +12 -0
  261. package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
  262. package/shortcutContexts/commands/editor/closeWithoutSaving.js +12 -0
  263. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  264. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  265. package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
  266. package/shortcutContexts/commands/editor/index.js +16 -0
  267. package/shortcutContexts/commands/editor/index.mjs +12 -0
  268. package/shortcutContexts/commands/editor/open.js +27 -0
  269. package/shortcutContexts/commands/editor/open.mjs +23 -0
  270. package/shortcutContexts/commands/emptySelectedCells.js +11 -0
  271. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  272. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  273. package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
  274. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +21 -0
  275. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +17 -0
  276. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  277. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  278. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  279. package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
  280. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  281. package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
  282. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  283. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
  284. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +29 -0
  285. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
  286. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +19 -0
  287. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
  288. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +19 -0
  289. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
  290. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +29 -0
  291. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
  292. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +29 -0
  293. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
  294. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +29 -0
  295. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
  296. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  297. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
  298. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  299. package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
  300. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +21 -0
  301. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +17 -0
  302. package/shortcutContexts/commands/index.js +35 -0
  303. package/shortcutContexts/commands/index.mjs +31 -0
  304. package/shortcutContexts/commands/moveCellSelection/down.js +13 -0
  305. package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
  306. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +31 -0
  307. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +27 -0
  308. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  309. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  310. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +12 -0
  311. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  312. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +12 -0
  313. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  314. package/shortcutContexts/commands/moveCellSelection/left.js +10 -0
  315. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  316. package/shortcutContexts/commands/moveCellSelection/right.js +10 -0
  317. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  318. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +17 -0
  319. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
  320. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +18 -0
  321. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
  322. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +14 -0
  323. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
  324. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +17 -0
  325. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
  326. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +19 -0
  327. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
  328. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +21 -0
  329. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
  330. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +17 -0
  331. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
  332. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +19 -0
  333. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
  334. package/shortcutContexts/commands/moveCellSelection/up.js +13 -0
  335. package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
  336. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +31 -0
  337. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +27 -0
  338. package/shortcutContexts/commands/populateSelectedCellsData.js +29 -0
  339. package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
  340. package/shortcutContexts/commands/scrollToFocusedCell.js +36 -0
  341. package/shortcutContexts/commands/scrollToFocusedCell.mjs +32 -0
  342. package/shortcutContexts/commands/selectAll.js +10 -0
  343. package/shortcutContexts/commands/selectAll.mjs +6 -0
  344. package/shortcutContexts/constants.js +13 -0
  345. package/shortcutContexts/constants.mjs +8 -0
  346. package/shortcutContexts/editor.js +25 -0
  347. package/shortcutContexts/editor.mjs +21 -0
  348. package/shortcutContexts/grid.js +163 -0
  349. package/shortcutContexts/grid.mjs +159 -0
  350. package/shortcutContexts/index.js +24 -0
  351. package/shortcutContexts/index.mjs +11 -0
  352. package/shortcuts/manager.js +2 -0
  353. package/shortcuts/manager.mjs +2 -0
  354. package/shortcuts/recorder.js +2 -2
  355. package/shortcuts/recorder.mjs +2 -2
  356. package/shortcuts/utils.js +19 -5
  357. package/shortcuts/utils.mjs +18 -4
  358. package/tableView.js +163 -91
  359. package/tableView.mjs +163 -91
  360. package/translations/changesObservable/observable.js +82 -54
  361. package/translations/changesObservable/observable.mjs +82 -54
  362. package/translations/changesObservable/observer.js +24 -11
  363. package/translations/changesObservable/observer.mjs +24 -11
  364. package/translations/maps/linkedPhysicalIndexToValueMap.js +14 -8
  365. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +14 -8
  366. package/utils/dataStructures/tree.js +21 -18
  367. package/utils/dataStructures/tree.mjs +21 -18
  368. package/3rdparty/walkontable/src/selection.js +0 -295
  369. package/3rdparty/walkontable/src/selection.mjs +0 -290
  370. package/selection/highlight/constants.js +0 -15
  371. package/selection/highlight/constants.mjs +0 -6
  372. package/selection/highlight/types/index.js +0 -35
  373. 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.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;
@@ -379,8 +514,9 @@ export class Comments extends BasePlugin {
379
514
  return false;
380
515
  }
381
516
  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();
517
+ _classPrivateFieldGet(this, _displaySwitch).cancelHiding();
518
+ _classPrivateFieldGet(this, _editor).setValue(meta[META_COMMENT] ? meta[META_COMMENT][META_COMMENT_VALUE] : null || '');
519
+ _classPrivateFieldGet(this, _editor).show();
384
520
  this.refreshEditor(true);
385
521
  return true;
386
522
  }
@@ -403,7 +539,7 @@ export class Comments extends BasePlugin {
403
539
  * Hides the comment editor.
404
540
  */
405
541
  hide() {
406
- this.editor.hide();
542
+ _classPrivateFieldGet(this, _editor).hide();
407
543
  }
408
544
 
409
545
  /**
@@ -414,7 +550,7 @@ export class Comments extends BasePlugin {
414
550
  refreshEditor() {
415
551
  var _renderableRow, _renderableColumn;
416
552
  let force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
417
- if (!force && (!this.range.from || !this.editor.isVisible())) {
553
+ if (!force && (!this.range.from || !_classPrivateFieldGet(this, _editor).isVisible())) {
418
554
  return;
419
555
  }
420
556
  const {
@@ -432,7 +568,7 @@ export class Comments extends BasePlugin {
432
568
 
433
569
  // Reset the editor position to (0, 0) so the opening direction calculation wouldn't be influenced by its
434
570
  // previous position
435
- this.editor.setPosition(0, 0);
571
+ _classPrivateFieldGet(this, _editor).setPosition(0, 0);
436
572
  if (renderableRow === null) {
437
573
  renderableRow = rowIndexMapper.getRenderableFromVisualIndex(rowIndexMapper.getNearestNotHiddenIndex(visualRow, -1));
438
574
  }
@@ -441,8 +577,8 @@ export class Comments extends BasePlugin {
441
577
  }
442
578
  const isBeforeRenderedRows = renderableRow === null;
443
579
  const isBeforeRenderedColumns = renderableColumn === null;
444
- renderableRow = (_renderableRow = renderableRow) != null ? _renderableRow : 0;
445
- renderableColumn = (_renderableColumn = renderableColumn) != null ? _renderableColumn : 0;
580
+ renderableRow = (_renderableRow = renderableRow) !== null && _renderableRow !== void 0 ? _renderableRow : 0;
581
+ renderableColumn = (_renderableColumn = renderableColumn) !== null && _renderableColumn !== void 0 ? _renderableColumn : 0;
446
582
  const {
447
583
  rootWindow,
448
584
  view: {
@@ -460,9 +596,9 @@ export class Comments extends BasePlugin {
460
596
  }, true);
461
597
  const commentStyle = this.getCommentMeta(visualRow, visualColumn, META_STYLE);
462
598
  if (commentStyle) {
463
- this.editor.setSize(commentStyle.width, commentStyle.height);
599
+ _classPrivateFieldGet(this, _editor).setSize(commentStyle.width, commentStyle.height);
464
600
  } else {
465
- this.editor.resetSize();
601
+ _classPrivateFieldGet(this, _editor).resetSize();
466
602
  }
467
603
  const lastColWidth = isBeforeRenderedColumns ? 0 : wtTable.getStretchedColumnWidth(renderableColumn);
468
604
  const lastRowHeight = targetingPreviousRow && !isBeforeRenderedRows ? outerHeight(TD) : 0;
@@ -475,7 +611,7 @@ export class Comments extends BasePlugin {
475
611
  const {
476
612
  width: editorWidth,
477
613
  height: editorHeight
478
- } = this.editor.getSize();
614
+ } = _classPrivateFieldGet(this, _editor).getSize();
479
615
  const {
480
616
  innerWidth,
481
617
  innerHeight
@@ -496,28 +632,15 @@ export class Comments extends BasePlugin {
496
632
  if (top + editorHeight > innerHeight) {
497
633
  y -= editorHeight - cellHeight + 1;
498
634
  }
499
- this.editor.setPosition(x, y);
500
- this.editor.setReadOnlyState(this.getCommentMeta(visualRow, visualColumn, META_READONLY));
635
+ _classPrivateFieldGet(this, _editor).setPosition(x, y);
636
+ _classPrivateFieldGet(this, _editor).setReadOnlyState(this.getCommentMeta(visualRow, visualColumn, META_READONLY));
501
637
  }
502
638
 
503
639
  /**
504
- * Checks if there is a comment for selected range.
505
- *
506
- * @private
507
- * @returns {boolean}
640
+ * Focuses the comments editor element.
508
641
  */
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;
642
+ focusEditor() {
643
+ _classPrivateFieldGet(this, _editor).focus();
521
644
  }
522
645
 
523
646
  /**
@@ -565,7 +688,7 @@ export class Comments extends BasePlugin {
565
688
  if (!this.hot.view || !this.hot.view._wt) {
566
689
  return;
567
690
  }
568
- if (!this.preventEditorAutoSwitch && !this.targetIsCommentTextArea(event)) {
691
+ if (!_classPrivateFieldGet(this, _preventEditorAutoSwitch) && !this.targetIsCommentTextArea(event)) {
569
692
  const eventCell = closest(event.target, 'TD', 'TBODY');
570
693
  let coordinates = null;
571
694
  if (eventCell) {
@@ -584,19 +707,18 @@ export class Comments extends BasePlugin {
584
707
  * @param {MouseEvent} event The `mouseover` event.
585
708
  */
586
709
  onMouseOver(event) {
587
- const priv = privatePool.get(this);
588
710
  const {
589
711
  rootDocument
590
712
  } = this.hot;
591
- if (this.preventEditorAutoSwitch || this.editor.isFocused() || hasClass(event.target, 'wtBorder') || priv.cellBelowCursor === event.target || !this.editor) {
713
+ if (_classPrivateFieldGet(this, _preventEditorAutoSwitch) || _classPrivateFieldGet(this, _editor).isFocused() || hasClass(event.target, 'wtBorder') || _classPrivateFieldGet(this, _cellBelowCursor) === event.target || !_classPrivateFieldGet(this, _editor)) {
592
714
  return;
593
715
  }
594
- priv.cellBelowCursor = rootDocument.elementFromPoint(event.clientX, event.clientY);
716
+ _classPrivateFieldSet(this, _cellBelowCursor, rootDocument.elementFromPoint(event.clientX, event.clientY));
595
717
  if (this.targetIsCellWithComment(event)) {
596
718
  const range = this.hot._createCellRange(this.hot.getCoords(event.target));
597
- this.displaySwitch.show(range);
719
+ _classPrivateFieldGet(this, _displaySwitch).show(range);
598
720
  } else if (isChildOf(event.target, rootDocument) && !this.targetIsCommentTextArea(event)) {
599
- this.displaySwitch.hide();
721
+ _classPrivateFieldGet(this, _displaySwitch).hide();
600
722
  }
601
723
  }
602
724
 
@@ -606,7 +728,7 @@ export class Comments extends BasePlugin {
606
728
  * @private
607
729
  */
608
730
  onMouseUp() {
609
- this.preventEditorAutoSwitch = false;
731
+ _classPrivateFieldSet(this, _preventEditorAutoSwitch, false);
610
732
  }
611
733
 
612
734
  /**
@@ -623,14 +745,29 @@ export class Comments extends BasePlugin {
623
745
  }
624
746
 
625
747
  /**
626
- * `blur` event callback for the comment editor.
748
+ * Hook observer the "blur" event from the comments editor element. The hook clears the
749
+ * editor content and gives back the keyboard shortcuts control by switching to the "grid" context.
627
750
  *
628
751
  * @private
629
752
  */
630
753
  onEditorBlur() {
754
+ _classPrivateFieldSet(this, _commentValueBeforeSave, '');
755
+ this.hot.getShortcutManager().setActiveContextName('grid');
631
756
  this.setComment();
632
757
  }
633
758
 
759
+ /**
760
+ * Hook observer the "focus" event from the comments editor element. The hook takes the control of
761
+ * the keyboard shortcuts by switching the context to plugins one.
762
+ *
763
+ * @private
764
+ */
765
+ onEditorFocus() {
766
+ _classPrivateFieldSet(this, _commentValueBeforeSave, this.getComment());
767
+ this.hot.listen();
768
+ this.hot.getShortcutManager().setActiveContextName(SHORTCUTS_CONTEXT_NAME);
769
+ }
770
+
634
771
  /**
635
772
  * `mousedown` hook. Along with `onEditorMouseUp` used to simulate the textarea resizing event.
636
773
  *
@@ -638,11 +775,10 @@ export class Comments extends BasePlugin {
638
775
  * @param {MouseEvent} event The `mousedown` event.
639
776
  */
640
777
  onEditorMouseDown(event) {
641
- const priv = privatePool.get(this);
642
- priv.tempEditorDimensions = {
778
+ _classPrivateFieldSet(this, _tempEditorDimensions, {
643
779
  width: outerWidth(event.target),
644
780
  height: outerHeight(event.target)
645
- };
781
+ });
646
782
  }
647
783
 
648
784
  /**
@@ -652,10 +788,9 @@ export class Comments extends BasePlugin {
652
788
  * @param {MouseEvent} event The `mouseup` event.
653
789
  */
654
790
  onEditorMouseUp(event) {
655
- const priv = privatePool.get(this);
656
791
  const currentWidth = outerWidth(event.target);
657
792
  const currentHeight = outerHeight(event.target);
658
- if (currentWidth !== priv.tempEditorDimensions.width + 1 || currentHeight !== priv.tempEditorDimensions.height + 2) {
793
+ if (currentWidth !== _classPrivateFieldGet(this, _tempEditorDimensions).width + 1 || currentHeight !== _classPrivateFieldGet(this, _tempEditorDimensions).height + 2) {
659
794
  this.updateCommentMeta(this.range.from.row, this.range.from.col, {
660
795
  [META_STYLE]: {
661
796
  width: currentWidth,
@@ -666,121 +801,36 @@ export class Comments extends BasePlugin {
666
801
  }
667
802
 
668
803
  /**
669
- * Context Menu's "Add comment" callback. Results in showing the comment editor.
804
+ * Observes the pressed keys and if there is already opened the comment editor prevents open
805
+ * the table editor into the fast edit mode.
670
806
  *
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
807
+ * @param {Event} event The keydown event.
689
808
  */
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();
809
+ onAfterDocumentKeyDown(event) {
810
+ if (_classPrivateFieldGet(this, _editor).isVisible()) {
811
+ stopImmediatePropagation(event);
812
+ }
699
813
  }
700
814
 
701
815
  /**
702
- * Context Menu's "make comment read-only" callback.
703
- *
704
- * @private
816
+ * Observes the changes in the scroll position if triggered it hides the comment editor.
705
817
  */
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
- });
818
+ onAfterScroll() {
819
+ if (!_classPrivateFieldGet(this, _preventEditorHiding)) {
820
+ this.hide();
821
+ }
717
822
  }
718
823
 
719
824
  /**
720
825
  * Add Comments plugin options to the Context Menu.
721
826
  *
722
827
  * @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
- });
828
+ * @param {object} options The menu options.
829
+ */
830
+ addToContextMenu(options) {
831
+ options.items.push({
832
+ name: SEPARATOR
833
+ }, addEditCommentItem(this), removeCommentItem(this), readOnlyCommentItem(this));
784
834
  }
785
835
 
786
836
  /**
@@ -796,15 +846,25 @@ export class Comments extends BasePlugin {
796
846
  }
797
847
  }
798
848
 
849
+ /**
850
+ * Gets the editors input element.
851
+ *
852
+ * @private
853
+ * @returns {HTMLTextAreaElement}
854
+ */
855
+ getEditorInputElement() {
856
+ return _classPrivateFieldGet(this, _editor).getInputElement();
857
+ }
858
+
799
859
  /**
800
860
  * Destroys the plugin instance.
801
861
  */
802
862
  destroy() {
803
- if (this.editor) {
804
- this.editor.destroy();
863
+ if (_classPrivateFieldGet(this, _editor)) {
864
+ _classPrivateFieldGet(this, _editor).destroy();
805
865
  }
806
- if (this.displaySwitch) {
807
- this.displaySwitch.destroy();
866
+ if (_classPrivateFieldGet(this, _displaySwitch)) {
867
+ _classPrivateFieldGet(this, _displaySwitch).destroy();
808
868
  }
809
869
  super.destroy();
810
870
  }