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

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of handsontable might be problematic. Click here for more details.

Files changed (447) hide show
  1. package/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
  2. package/3rdparty/walkontable/src/cell/coords.js +50 -11
  3. package/3rdparty/walkontable/src/cell/coords.mjs +50 -11
  4. package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
  5. package/3rdparty/walkontable/src/cell/range.js +38 -7
  6. package/3rdparty/walkontable/src/cell/range.mjs +38 -7
  7. package/3rdparty/walkontable/src/core/_base.js +9 -3
  8. package/3rdparty/walkontable/src/core/_base.mjs +9 -3
  9. package/3rdparty/walkontable/src/core/clone.js +2 -2
  10. package/3rdparty/walkontable/src/core/clone.mjs +2 -2
  11. package/3rdparty/walkontable/src/core/core.js +3 -2
  12. package/3rdparty/walkontable/src/core/core.mjs +3 -2
  13. package/3rdparty/walkontable/src/event.js +12 -10
  14. package/3rdparty/walkontable/src/event.mjs +12 -10
  15. package/3rdparty/walkontable/src/facade/core.js +2 -2
  16. package/3rdparty/walkontable/src/facade/core.mjs +2 -2
  17. package/3rdparty/walkontable/src/index.js +10 -2
  18. package/3rdparty/walkontable/src/index.mjs +2 -2
  19. package/3rdparty/walkontable/src/overlay/_base.js +13 -2
  20. package/3rdparty/walkontable/src/overlay/_base.mjs +14 -3
  21. package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -6
  22. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -6
  23. package/3rdparty/walkontable/src/overlay/top.js +2 -6
  24. package/3rdparty/walkontable/src/overlay/top.mjs +2 -6
  25. package/3rdparty/walkontable/src/renderer/cells.js +10 -0
  26. package/3rdparty/walkontable/src/renderer/cells.mjs +11 -1
  27. package/3rdparty/walkontable/src/renderer/columnHeaders.js +10 -0
  28. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +11 -1
  29. package/3rdparty/walkontable/src/renderer/rowHeaders.js +5 -0
  30. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +5 -0
  31. package/3rdparty/walkontable/src/renderer/rows.js +13 -0
  32. package/3rdparty/walkontable/src/renderer/rows.mjs +13 -0
  33. package/3rdparty/walkontable/src/renderer/table.js +9 -0
  34. package/3rdparty/walkontable/src/renderer/table.mjs +9 -0
  35. package/3rdparty/walkontable/src/scroll.js +2 -0
  36. package/3rdparty/walkontable/src/scroll.mjs +2 -0
  37. package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +7 -12
  38. package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
  39. package/3rdparty/walkontable/src/selection/border/constants.js +16 -0
  40. package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
  41. package/3rdparty/walkontable/src/selection/constants.js +62 -0
  42. package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
  43. package/3rdparty/walkontable/src/selection/index.js +26 -0
  44. package/3rdparty/walkontable/src/selection/index.mjs +5 -0
  45. package/3rdparty/walkontable/src/selection/manager.js +274 -0
  46. package/3rdparty/walkontable/src/selection/manager.mjs +269 -0
  47. package/3rdparty/walkontable/src/selection/scanner.js +270 -0
  48. package/3rdparty/walkontable/src/selection/scanner.mjs +267 -0
  49. package/3rdparty/walkontable/src/selection/selection.js +101 -0
  50. package/3rdparty/walkontable/src/selection/selection.mjs +96 -0
  51. package/3rdparty/walkontable/src/settings.js +13 -4
  52. package/3rdparty/walkontable/src/settings.mjs +13 -4
  53. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +9 -0
  54. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
  55. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +9 -0
  56. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
  57. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +9 -0
  58. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
  59. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +9 -0
  60. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
  61. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -0
  62. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
  63. package/3rdparty/walkontable/src/table.js +19 -78
  64. package/3rdparty/walkontable/src/table.mjs +20 -79
  65. package/base.js +2 -2
  66. package/base.mjs +2 -2
  67. package/cellTypes/dateType/dateType.d.ts +3 -3
  68. package/cellTypes/dateType/dateType.js +2 -2
  69. package/cellTypes/dateType/dateType.mjs +2 -2
  70. package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
  71. package/cellTypes/handsontableType/handsontableType.js +2 -2
  72. package/cellTypes/handsontableType/handsontableType.mjs +2 -2
  73. package/cellTypes/index.d.ts +3 -0
  74. package/cellTypes/index.js +4 -0
  75. package/cellTypes/index.mjs +3 -1
  76. package/cellTypes/selectType/index.d.ts +1 -0
  77. package/cellTypes/selectType/index.js +6 -0
  78. package/cellTypes/selectType/index.mjs +1 -0
  79. package/cellTypes/selectType/selectType.d.ts +14 -0
  80. package/cellTypes/selectType/selectType.js +13 -0
  81. package/cellTypes/selectType/selectType.mjs +8 -0
  82. package/core/focusCatcher/focusDetector.js +63 -0
  83. package/core/focusCatcher/focusDetector.mjs +59 -0
  84. package/core/focusCatcher/index.js +142 -0
  85. package/core/focusCatcher/index.mjs +138 -0
  86. package/core/index.js +9 -0
  87. package/core/index.mjs +1 -0
  88. package/core.d.ts +9 -4
  89. package/core.js +285 -327
  90. package/core.mjs +285 -327
  91. package/dataMap/metaManager/metaSchema.js +65 -0
  92. package/dataMap/metaManager/metaSchema.mjs +65 -0
  93. package/dataMap/metaManager/mods/extendMetaProperties.js +7 -1
  94. package/dataMap/metaManager/mods/extendMetaProperties.mjs +7 -1
  95. package/dataMap/replaceData.js +5 -0
  96. package/dataMap/replaceData.mjs +5 -0
  97. package/dist/handsontable.css +51 -15
  98. package/dist/handsontable.full.css +51 -15
  99. package/dist/handsontable.full.js +13360 -7840
  100. package/dist/handsontable.full.min.css +7 -7
  101. package/dist/handsontable.full.min.js +136 -136
  102. package/dist/handsontable.js +20955 -15435
  103. package/dist/handsontable.min.css +6 -6
  104. package/dist/handsontable.min.js +24 -24
  105. package/dist/languages/all.js +6 -2
  106. package/dist/languages/all.min.js +1 -1
  107. package/dist/languages/en-US.js +3 -1
  108. package/dist/languages/en-US.min.js +1 -1
  109. package/dist/languages/pl-PL.js +3 -1
  110. package/dist/languages/pl-PL.min.js +1 -1
  111. package/editorManager.js +15 -87
  112. package/editorManager.mjs +16 -87
  113. package/editors/autocompleteEditor/autocompleteEditor.js +53 -2
  114. package/editors/autocompleteEditor/autocompleteEditor.mjs +54 -3
  115. package/editors/dateEditor/dateEditor.js +26 -7
  116. package/editors/dateEditor/dateEditor.mjs +27 -8
  117. package/editors/handsontableEditor/handsontableEditor.js +9 -1
  118. package/editors/handsontableEditor/handsontableEditor.mjs +10 -2
  119. package/editors/textEditor/textEditor.js +19 -27
  120. package/editors/textEditor/textEditor.mjs +22 -30
  121. package/focusManager.d.ts +12 -0
  122. package/focusManager.js +265 -0
  123. package/focusManager.mjs +261 -0
  124. package/helpers/a11y.js +79 -0
  125. package/helpers/a11y.mjs +38 -0
  126. package/helpers/dom/element.js +188 -9
  127. package/helpers/dom/element.mjs +182 -9
  128. package/helpers/mixed.js +1 -1
  129. package/helpers/mixed.mjs +1 -1
  130. package/helpers/number.d.ts +1 -0
  131. package/helpers/number.js +18 -0
  132. package/helpers/number.mjs +17 -0
  133. package/i18n/constants.js +7 -1
  134. package/i18n/constants.mjs +4 -1
  135. package/i18n/languages/en-US.js +3 -1
  136. package/i18n/languages/en-US.mjs +3 -1
  137. package/i18n/languages/pl-PL.js +3 -1
  138. package/i18n/languages/pl-PL.mjs +3 -1
  139. package/languages/all.js +6 -2
  140. package/languages/en-US.js +3 -1
  141. package/languages/en-US.mjs +3 -1
  142. package/languages/index.js +6 -2
  143. package/languages/pl-PL.js +3 -1
  144. package/languages/pl-PL.mjs +3 -1
  145. package/package.json +21 -1
  146. package/pluginHooks.d.ts +12 -1
  147. package/pluginHooks.js +152 -1
  148. package/pluginHooks.mjs +152 -1
  149. package/plugins/collapsibleColumns/collapsibleColumns.js +74 -4
  150. package/plugins/collapsibleColumns/collapsibleColumns.mjs +75 -5
  151. package/plugins/columnSorting/columnSorting.js +43 -0
  152. package/plugins/columnSorting/columnSorting.mjs +44 -3
  153. package/plugins/columnSorting/index.js +3 -1
  154. package/plugins/columnSorting/index.mjs +1 -1
  155. package/plugins/comments/commentEditor.js +1 -0
  156. package/plugins/comments/commentEditor.mjs +1 -0
  157. package/plugins/comments/comments.js +252 -189
  158. package/plugins/comments/comments.mjs +251 -190
  159. package/plugins/comments/contextMenuItem/addEditComment.js +41 -0
  160. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  161. package/plugins/comments/contextMenuItem/readOnlyComment.js +49 -0
  162. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +43 -0
  163. package/plugins/comments/contextMenuItem/removeComment.js +38 -0
  164. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  165. package/plugins/contextMenu/commandExecutor.js +2 -3
  166. package/plugins/contextMenu/commandExecutor.mjs +2 -3
  167. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  168. package/plugins/contextMenu/contextMenu.js +75 -36
  169. package/plugins/contextMenu/contextMenu.mjs +74 -35
  170. package/plugins/contextMenu/itemsFactory.js +2 -3
  171. package/plugins/contextMenu/itemsFactory.mjs +3 -4
  172. package/plugins/contextMenu/{cursor.mjs → menu/cursor.js} +6 -4
  173. package/plugins/contextMenu/{cursor.js → menu/cursor.mjs} +4 -10
  174. package/plugins/contextMenu/menu/defaultShortcutsList.js +88 -0
  175. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +84 -0
  176. package/plugins/contextMenu/menu/index.js +9 -0
  177. package/plugins/contextMenu/menu/index.mjs +1 -0
  178. package/plugins/contextMenu/{menu.js → menu/menu.js} +145 -421
  179. package/plugins/contextMenu/{menu.mjs → menu/menu.mjs} +146 -422
  180. package/plugins/contextMenu/menu/menuItemRenderer.js +58 -0
  181. package/plugins/contextMenu/menu/menuItemRenderer.mjs +54 -0
  182. package/plugins/contextMenu/menu/navigator.js +27 -0
  183. package/plugins/contextMenu/menu/navigator.mjs +23 -0
  184. package/plugins/contextMenu/menu/positioner.js +213 -0
  185. package/plugins/contextMenu/menu/positioner.mjs +209 -0
  186. package/plugins/contextMenu/menu/shortcuts.js +114 -0
  187. package/plugins/contextMenu/menu/shortcuts.mjs +110 -0
  188. package/plugins/contextMenu/menu/utils.js +177 -0
  189. package/plugins/contextMenu/menu/utils.mjs +163 -0
  190. package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
  191. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  192. package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
  193. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  194. package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
  195. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  196. package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
  197. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  198. package/plugins/contextMenu/{predefinedItems.js → predefinedItems/index.js} +14 -14
  199. package/plugins/contextMenu/predefinedItems/index.mjs +68 -0
  200. package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
  201. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  202. package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
  203. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  204. package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
  205. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  206. package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
  207. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  208. package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
  209. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  210. package/plugins/contextMenu/utils.js +35 -151
  211. package/plugins/contextMenu/utils.mjs +35 -144
  212. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  213. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  214. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  215. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  216. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  217. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  218. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  219. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  220. package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
  221. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  222. package/plugins/copyPaste/copyPaste.js +127 -78
  223. package/plugins/copyPaste/copyPaste.mjs +128 -79
  224. package/plugins/customBorders/customBorders.js +23 -20
  225. package/plugins/customBorders/customBorders.mjs +24 -21
  226. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  227. package/plugins/dropdownMenu/dropdownMenu.js +127 -40
  228. package/plugins/dropdownMenu/dropdownMenu.mjs +126 -39
  229. package/plugins/filters/component/_base.js +23 -8
  230. package/plugins/filters/component/_base.mjs +23 -8
  231. package/plugins/filters/component/actionBar.js +29 -27
  232. package/plugins/filters/component/actionBar.mjs +26 -23
  233. package/plugins/filters/component/condition.js +46 -59
  234. package/plugins/filters/component/condition.mjs +40 -52
  235. package/plugins/filters/component/operators.js +21 -22
  236. package/plugins/filters/component/operators.mjs +18 -18
  237. package/plugins/filters/component/value.js +35 -26
  238. package/plugins/filters/component/value.mjs +32 -22
  239. package/plugins/filters/constants.mjs +1 -1
  240. package/plugins/filters/filters.js +106 -62
  241. package/plugins/filters/filters.mjs +99 -55
  242. package/plugins/filters/menu/focusController.js +123 -0
  243. package/plugins/filters/menu/focusController.mjs +119 -0
  244. package/plugins/filters/menu/focusNavigator.js +30 -0
  245. package/plugins/filters/menu/focusNavigator.mjs +26 -0
  246. package/plugins/filters/ui/_base.js +35 -13
  247. package/plugins/filters/ui/_base.mjs +35 -13
  248. package/plugins/filters/ui/input.js +43 -32
  249. package/plugins/filters/ui/input.mjs +42 -30
  250. package/plugins/filters/ui/link.js +44 -12
  251. package/plugins/filters/ui/link.mjs +44 -11
  252. package/plugins/filters/ui/multipleSelect.js +234 -129
  253. package/plugins/filters/ui/multipleSelect.mjs +232 -127
  254. package/plugins/filters/ui/radioInput.js +42 -18
  255. package/plugins/filters/ui/radioInput.mjs +42 -17
  256. package/plugins/filters/ui/select.js +144 -75
  257. package/plugins/filters/ui/select.mjs +142 -72
  258. package/plugins/hiddenColumns/hiddenColumns.mjs +1 -1
  259. package/plugins/hiddenRows/hiddenRows.mjs +1 -1
  260. package/plugins/manualColumnMove/manualColumnMove.js +3 -1
  261. package/plugins/manualColumnMove/manualColumnMove.mjs +3 -1
  262. package/plugins/mergeCells/mergeCells.js +5 -16
  263. package/plugins/mergeCells/mergeCells.mjs +5 -16
  264. package/plugins/multiColumnSorting/multiColumnSorting.js +37 -2
  265. package/plugins/multiColumnSorting/multiColumnSorting.mjs +37 -2
  266. package/plugins/nestedHeaders/nestedHeaders.js +240 -10
  267. package/plugins/nestedHeaders/nestedHeaders.mjs +241 -11
  268. package/plugins/nestedHeaders/stateManager/index.js +102 -3
  269. package/plugins/nestedHeaders/stateManager/index.mjs +102 -3
  270. package/plugins/nestedRows/nestedRows.js +41 -0
  271. package/plugins/nestedRows/nestedRows.mjs +41 -0
  272. package/plugins/nestedRows/ui/headers.js +11 -0
  273. package/plugins/nestedRows/ui/headers.mjs +12 -1
  274. package/renderers/autocompleteRenderer/autocompleteRenderer.js +8 -0
  275. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +8 -0
  276. package/renderers/baseRenderer/baseRenderer.js +17 -0
  277. package/renderers/baseRenderer/baseRenderer.mjs +18 -1
  278. package/renderers/checkboxRenderer/checkboxRenderer.js +9 -4
  279. package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
  280. package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
  281. package/renderers/dateRenderer/dateRenderer.js +29 -0
  282. package/renderers/dateRenderer/dateRenderer.mjs +24 -0
  283. package/renderers/dateRenderer/index.d.ts +1 -0
  284. package/renderers/dateRenderer/index.js +6 -0
  285. package/renderers/dateRenderer/index.mjs +1 -0
  286. package/renderers/handsontableRenderer/handsontableRenderer.d.ts +5 -0
  287. package/renderers/handsontableRenderer/handsontableRenderer.js +29 -0
  288. package/renderers/handsontableRenderer/handsontableRenderer.mjs +24 -0
  289. package/renderers/handsontableRenderer/index.d.ts +1 -0
  290. package/renderers/handsontableRenderer/index.js +6 -0
  291. package/renderers/handsontableRenderer/index.mjs +1 -0
  292. package/renderers/index.d.ts +9 -0
  293. package/renderers/selectRenderer/index.d.ts +1 -0
  294. package/renderers/selectRenderer/index.js +6 -0
  295. package/renderers/selectRenderer/index.mjs +1 -0
  296. package/renderers/selectRenderer/selectRenderer.d.ts +5 -0
  297. package/renderers/selectRenderer/selectRenderer.js +27 -0
  298. package/renderers/selectRenderer/selectRenderer.mjs +22 -0
  299. package/selection/highlight/highlight.js +256 -71
  300. package/selection/highlight/highlight.mjs +250 -71
  301. package/selection/highlight/types/activeHeader.js +10 -8
  302. package/selection/highlight/types/activeHeader.mjs +10 -8
  303. package/selection/highlight/types/area.js +6 -18
  304. package/selection/highlight/types/area.mjs +6 -18
  305. package/selection/highlight/types/areaLayered.js +31 -0
  306. package/selection/highlight/types/areaLayered.mjs +26 -0
  307. package/selection/highlight/types/column.js +27 -0
  308. package/selection/highlight/types/column.mjs +22 -0
  309. package/selection/highlight/types/customSelection.js +7 -9
  310. package/selection/highlight/types/customSelection.mjs +7 -9
  311. package/selection/highlight/types/fill.js +5 -7
  312. package/selection/highlight/types/fill.mjs +5 -7
  313. package/selection/highlight/types/{cell.js → focus.js} +5 -7
  314. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  315. package/selection/highlight/types/header.js +9 -18
  316. package/selection/highlight/types/header.mjs +9 -18
  317. package/selection/highlight/types/row.js +27 -0
  318. package/selection/highlight/types/row.mjs +22 -0
  319. package/selection/highlight/visualSelection.js +31 -27
  320. package/selection/highlight/visualSelection.mjs +31 -27
  321. package/selection/index.js +4 -7
  322. package/selection/index.mjs +2 -3
  323. package/selection/mouseEventHandler.js +7 -1
  324. package/selection/mouseEventHandler.mjs +7 -1
  325. package/selection/range.js +8 -8
  326. package/selection/range.mjs +8 -8
  327. package/selection/selection.js +321 -152
  328. package/selection/selection.mjs +318 -151
  329. package/selection/transformation.js +232 -90
  330. package/selection/transformation.mjs +232 -90
  331. package/selection/utils.js +15 -21
  332. package/selection/utils.mjs +16 -21
  333. package/settings.d.ts +4 -0
  334. package/shortcutContexts/commands/editor/closeAndSave.js +12 -0
  335. package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
  336. package/shortcutContexts/commands/editor/closeWithoutSaving.js +12 -0
  337. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  338. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  339. package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
  340. package/shortcutContexts/commands/editor/index.js +16 -0
  341. package/shortcutContexts/commands/editor/index.mjs +12 -0
  342. package/shortcutContexts/commands/editor/open.js +27 -0
  343. package/shortcutContexts/commands/editor/open.mjs +23 -0
  344. package/shortcutContexts/commands/emptySelectedCells.js +11 -0
  345. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  346. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  347. package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
  348. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +25 -0
  349. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +21 -0
  350. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  351. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  352. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  353. package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
  354. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  355. package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
  356. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  357. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
  358. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +29 -0
  359. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
  360. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +19 -0
  361. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
  362. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +19 -0
  363. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
  364. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +29 -0
  365. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
  366. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +29 -0
  367. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
  368. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +29 -0
  369. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
  370. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  371. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
  372. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  373. package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
  374. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +25 -0
  375. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +21 -0
  376. package/shortcutContexts/commands/index.js +35 -0
  377. package/shortcutContexts/commands/index.mjs +31 -0
  378. package/shortcutContexts/commands/moveCellSelection/down.js +13 -0
  379. package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
  380. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +33 -0
  381. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +29 -0
  382. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  383. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  384. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +12 -0
  385. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  386. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +12 -0
  387. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  388. package/shortcutContexts/commands/moveCellSelection/left.js +10 -0
  389. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  390. package/shortcutContexts/commands/moveCellSelection/right.js +10 -0
  391. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  392. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +17 -0
  393. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
  394. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +18 -0
  395. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
  396. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +14 -0
  397. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
  398. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +17 -0
  399. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
  400. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +19 -0
  401. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
  402. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +21 -0
  403. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
  404. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +17 -0
  405. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
  406. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +19 -0
  407. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
  408. package/shortcutContexts/commands/moveCellSelection/up.js +13 -0
  409. package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
  410. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +33 -0
  411. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +29 -0
  412. package/shortcutContexts/commands/populateSelectedCellsData.js +29 -0
  413. package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
  414. package/shortcutContexts/commands/scrollToFocusedCell.js +35 -0
  415. package/shortcutContexts/commands/scrollToFocusedCell.mjs +31 -0
  416. package/shortcutContexts/commands/selectAll.js +12 -0
  417. package/shortcutContexts/commands/selectAll.mjs +8 -0
  418. package/shortcutContexts/constants.js +13 -0
  419. package/shortcutContexts/constants.mjs +8 -0
  420. package/shortcutContexts/editor.js +25 -0
  421. package/shortcutContexts/editor.mjs +21 -0
  422. package/shortcutContexts/grid.js +163 -0
  423. package/shortcutContexts/grid.mjs +159 -0
  424. package/shortcutContexts/index.js +24 -0
  425. package/shortcutContexts/index.mjs +11 -0
  426. package/shortcuts/context.d.ts +1 -0
  427. package/shortcuts/context.js +23 -4
  428. package/shortcuts/context.mjs +23 -5
  429. package/shortcuts/manager.js +25 -7
  430. package/shortcuts/manager.mjs +26 -7
  431. package/shortcuts/recorder.js +3 -3
  432. package/shortcuts/recorder.mjs +3 -3
  433. package/shortcuts/utils.js +19 -5
  434. package/shortcuts/utils.mjs +18 -4
  435. package/tableView.js +111 -13
  436. package/tableView.mjs +112 -14
  437. package/utils/paginator.js +151 -0
  438. package/utils/paginator.mjs +147 -0
  439. package/3rdparty/walkontable/src/selection.js +0 -295
  440. package/3rdparty/walkontable/src/selection.mjs +0 -290
  441. package/plugins/contextMenu/predefinedItems.mjs +0 -68
  442. package/plugins/copyPaste/focusableElement.js +0 -186
  443. package/plugins/copyPaste/focusableElement.mjs +0 -180
  444. package/selection/highlight/constants.js +0 -15
  445. package/selection/highlight/constants.mjs +0 -6
  446. package/selection/highlight/types/index.js +0 -35
  447. package/selection/highlight/types/index.mjs +0 -31
@@ -3,7 +3,8 @@ import moment from 'moment';
3
3
  import Pikaday from 'pikaday';
4
4
  import { TextEditor } from "../textEditor/index.mjs";
5
5
  import EventManager from "../../eventManager.mjs";
6
- import { addClass, outerHeight, outerWidth } from "../../helpers/dom/element.mjs";
6
+ import { addClass, hasClass, outerHeight, outerWidth, setAttribute } from "../../helpers/dom/element.mjs";
7
+ import { A11Y_EXPANDED } from "../../helpers/a11y.mjs";
7
8
  import { deepExtend } from "../../helpers/object.mjs";
8
9
  import { isFunctionKey } from "../../helpers/unicode.mjs";
9
10
  export const EDITOR_TYPE = 'date';
@@ -39,7 +40,7 @@ export class DateEditor extends TextEditor {
39
40
  throw new Error('You need to include Pikaday to your project.');
40
41
  }
41
42
  super.init();
42
- this.instance.addHook('afterDestroy', () => {
43
+ this.hot.addHook('afterDestroy', () => {
43
44
  this.parentDestroyed = true;
44
45
  this.destroyElements();
45
46
  });
@@ -64,7 +65,21 @@ export class DateEditor extends TextEditor {
64
65
  /**
65
66
  * Prevent recognizing clicking on datepicker as clicking outside of table.
66
67
  */
67
- eventManager.addEventListener(this.datePicker, 'mousedown', event => event.stopPropagation());
68
+ eventManager.addEventListener(this.datePicker, 'mousedown', event => {
69
+ if (hasClass(event.target, 'pika-day')) {
70
+ this.hideDatepicker();
71
+ }
72
+ event.stopPropagation();
73
+ });
74
+
75
+ /**
76
+ * Prevent caret movement in the TEXTAREA when navigating over the date picker.
77
+ */
78
+ eventManager.addEventListener(this.TEXTAREA, 'keydown', event => {
79
+ if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.code)) {
80
+ event.preventDefault();
81
+ }
82
+ });
68
83
  }
69
84
 
70
85
  /**
@@ -105,6 +120,9 @@ export class DateEditor extends TextEditor {
105
120
  const editorContext = shortcutManager.getContext('editor');
106
121
  super.open();
107
122
  this.showDatepicker(event);
123
+ if (this.hot.getSettings().ariaTags) {
124
+ setAttribute(this.TD, [A11Y_EXPANDED('true')]);
125
+ }
108
126
  editorContext.addShortcut({
109
127
  keys: [['Enter']],
110
128
  callback: keyboardEvent => {
@@ -127,9 +145,12 @@ export class DateEditor extends TextEditor {
127
145
  if ((_this$$datePicker = this.$datePicker) !== null && _this$$datePicker !== void 0 && _this$$datePicker.destroy) {
128
146
  this.$datePicker.destroy();
129
147
  }
130
- this.instance._registerTimeout(() => {
131
- this.instance._refreshBorders();
148
+ this.hot._registerTimeout(() => {
149
+ this.hot._refreshBorders();
132
150
  });
151
+ if (this.TD && this.hot.getSettings().ariaTags) {
152
+ setAttribute(this.TD, [A11Y_EXPANDED('false')]);
153
+ }
133
154
  const shortcutManager = this.hot.getShortcutManager();
134
155
  const editorContext = shortcutManager.getContext('editor');
135
156
  editorContext.removeShortcutsByGroup(SHORTCUTS_GROUP_EDITOR);
@@ -147,7 +168,6 @@ export class DateEditor extends TextEditor {
147
168
  let ctrlDown = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
148
169
  if (restoreOriginalValue) {
149
170
  // pressed ESC, restore original value
150
- // var value = this.instance.getDataAtCell(this.row, this.col);
151
171
  const value = this.originalValue;
152
172
  if (value !== void 0) {
153
173
  this.setValue(value);
@@ -164,7 +184,7 @@ export class DateEditor extends TextEditor {
164
184
  showDatepicker(event) {
165
185
  const offset = this.TD.getBoundingClientRect();
166
186
  const dateFormat = this.cellProperties.dateFormat || this.defaultDateFormat;
167
- const isMouseDown = this.instance.view.isMouseDown();
187
+ const isMouseDown = this.hot.view.isMouseDown();
168
188
  const isMeta = event ? isFunctionKey(event.keyCode) : false;
169
189
  let dateStr;
170
190
  this.datePicker.style.display = 'block';
@@ -243,7 +263,6 @@ export class DateEditor extends TextEditor {
243
263
  dateStr = moment(dateStr).format(this.cellProperties.dateFormat || this.defaultDateFormat);
244
264
  }
245
265
  this.setValue(dateStr);
246
- this.hideDatepicker();
247
266
  if (origOnSelect) {
248
267
  origOnSelect();
249
268
  }
@@ -6,6 +6,7 @@ var _element = require("../../helpers/dom/element");
6
6
  var _event = require("../../helpers/dom/event");
7
7
  var _object = require("../../helpers/object");
8
8
  var _editorManager = require("../../editorManager");
9
+ var _a11y = require("../../helpers/a11y");
9
10
  const SHORTCUTS_GROUP = 'handsontableEditor';
10
11
  const EDITOR_TYPE = 'handsontable';
11
12
 
@@ -42,6 +43,9 @@ class HandsontableEditor extends _textEditor.TextEditor {
42
43
  }
43
44
  (0, _element.setCaretPosition)(this.TEXTAREA, 0, this.TEXTAREA.value.length);
44
45
  this.refreshDimensions();
46
+ if (this.hot.getSettings().ariaTags) {
47
+ (0, _element.setAttribute)(this.TD, [(0, _a11y.A11Y_EXPANDED)('true')]);
48
+ }
45
49
  }
46
50
 
47
51
  /**
@@ -53,6 +57,9 @@ class HandsontableEditor extends _textEditor.TextEditor {
53
57
  }
54
58
  this.removeHooksByKey('beforeKeyDown');
55
59
  super.close();
60
+ if (this.hot.getSettings().ariaTags) {
61
+ (0, _element.setAttribute)(this.TD, [(0, _a11y.A11Y_EXPANDED)('false')]);
62
+ }
56
63
  }
57
64
 
58
65
  /**
@@ -81,6 +88,7 @@ class HandsontableEditor extends _textEditor.TextEditor {
81
88
  fillHandle: false,
82
89
  autoWrapCol: false,
83
90
  autoWrapRow: false,
91
+ ariaTags: false,
84
92
  afterOnCellMouseDown(_, coords) {
85
93
  const sourceValue = this.getSourceData(coords.row, coords.col);
86
94
 
@@ -149,7 +157,7 @@ class HandsontableEditor extends _textEditor.TextEditor {
149
157
  }
150
158
 
151
159
  /**
152
- * Assings afterDestroy callback to prevent memory leaks.
160
+ * Assigns afterDestroy callback to prevent memory leaks.
153
161
  *
154
162
  * @private
155
163
  */
@@ -1,8 +1,9 @@
1
1
  import { TextEditor } from "../textEditor/index.mjs";
2
- import { setCaretPosition } from "../../helpers/dom/element.mjs";
2
+ import { setAttribute, setCaretPosition } from "../../helpers/dom/element.mjs";
3
3
  import { stopImmediatePropagation } from "../../helpers/dom/event.mjs";
4
4
  import { extend } from "../../helpers/object.mjs";
5
5
  import { SHORTCUTS_GROUP_NAVIGATION } from "../../editorManager.mjs";
6
+ import { A11Y_EXPANDED } from "../../helpers/a11y.mjs";
6
7
  const SHORTCUTS_GROUP = 'handsontableEditor';
7
8
  export const EDITOR_TYPE = 'handsontable';
8
9
 
@@ -38,6 +39,9 @@ export class HandsontableEditor extends TextEditor {
38
39
  }
39
40
  setCaretPosition(this.TEXTAREA, 0, this.TEXTAREA.value.length);
40
41
  this.refreshDimensions();
42
+ if (this.hot.getSettings().ariaTags) {
43
+ setAttribute(this.TD, [A11Y_EXPANDED('true')]);
44
+ }
41
45
  }
42
46
 
43
47
  /**
@@ -49,6 +53,9 @@ export class HandsontableEditor extends TextEditor {
49
53
  }
50
54
  this.removeHooksByKey('beforeKeyDown');
51
55
  super.close();
56
+ if (this.hot.getSettings().ariaTags) {
57
+ setAttribute(this.TD, [A11Y_EXPANDED('false')]);
58
+ }
52
59
  }
53
60
 
54
61
  /**
@@ -77,6 +84,7 @@ export class HandsontableEditor extends TextEditor {
77
84
  fillHandle: false,
78
85
  autoWrapCol: false,
79
86
  autoWrapRow: false,
87
+ ariaTags: false,
80
88
  afterOnCellMouseDown(_, coords) {
81
89
  const sourceValue = this.getSourceData(coords.row, coords.col);
82
90
 
@@ -145,7 +153,7 @@ export class HandsontableEditor extends TextEditor {
145
153
  }
146
154
 
147
155
  /**
148
- * Assings afterDestroy callback to prevent memory leaks.
156
+ * Assigns afterDestroy callback to prevent memory leaks.
149
157
  *
150
158
  * @private
151
159
  */
@@ -12,6 +12,7 @@ var _mixed = require("../../helpers/mixed");
12
12
  var _editorManager = require("../../editorManager");
13
13
  var _baseEditor2 = require("../baseEditor/baseEditor");
14
14
  var _caretPositioner = require("./caretPositioner");
15
+ var _a11y = require("../../helpers/a11y");
15
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
17
  const EDITOR_VISIBLE_CLASS_NAME = 'ht_editor_visible';
17
18
  const EDITOR_HIDDEN_CLASS_NAME = 'ht_editor_hidden';
@@ -122,7 +123,7 @@ class TextEditor extends _baseEditor.BaseEditor {
122
123
  */
123
124
  close() {
124
125
  this.autoResize.unObserve();
125
- if (this.hot.rootDocument.activeElement === this.TEXTAREA) {
126
+ if ((0, _element.isThisHotChild)(this.hot.rootDocument.activeElement, this.hot.rootElement)) {
126
127
  this.hot.listen(); // don't refocus the table if user focused some cell outside of HT on purpose
127
128
  }
128
129
 
@@ -147,8 +148,7 @@ class TextEditor extends _baseEditor.BaseEditor {
147
148
  if (!cellProperties.readOnly) {
148
149
  this.refreshDimensions(true);
149
150
  const {
150
- allowInvalid,
151
- fragmentSelection
151
+ allowInvalid
152
152
  } = cellProperties;
153
153
  if (allowInvalid) {
154
154
  // Remove an empty space from textarea (added by copyPaste plugin to make copy/paste
@@ -158,13 +158,6 @@ class TextEditor extends _baseEditor.BaseEditor {
158
158
  if (previousState !== _baseEditor.EDITOR_STATE.FINISHED) {
159
159
  this.hideEditableElement();
160
160
  }
161
-
162
- // @TODO: The fragmentSelection functionality is conflicted with IME. For this feature
163
- // refocus has to be disabled (to make IME working).
164
- const restoreFocus = !fragmentSelection;
165
- if (restoreFocus && !(0, _browser.isMobileBrowser)()) {
166
- this.focus();
167
- }
168
161
  }
169
162
  }
170
163
 
@@ -201,8 +194,13 @@ class TextEditor extends _baseEditor.BaseEditor {
201
194
  rootDocument
202
195
  } = this.hot;
203
196
  this.TEXTAREA = rootDocument.createElement('TEXTAREA');
204
- this.TEXTAREA.setAttribute('data-hot-input', ''); // Makes the element recognizable by Hot as its own component's element.
205
- this.TEXTAREA.tabIndex = -1;
197
+
198
+ // Makes the element recognizable by Hot as its own
199
+ // component's element.
200
+ (0, _element.setAttribute)(this.TEXTAREA, [['data-hot-input', ''], (0, _a11y.A11Y_TABINDEX)(-1)]);
201
+ if (this.hot.getSettings().ariaTags) {
202
+ (0, _element.setAttribute)(this.TEXTAREA, [(0, _a11y.A11Y_HIDDEN)()]);
203
+ }
206
204
  (0, _element.addClass)(this.TEXTAREA, 'handsontableInput');
207
205
  this.textareaStyle = this.TEXTAREA.style;
208
206
  this.textareaStyle.width = 0;
@@ -340,8 +338,6 @@ class TextEditor extends _baseEditor.BaseEditor {
340
338
  * @private
341
339
  */
342
340
  bindEvents() {
343
- this.eventManager.addEventListener(this.TEXTAREA, 'cut', event => event.stopPropagation());
344
- this.eventManager.addEventListener(this.TEXTAREA, 'paste', event => event.stopPropagation());
345
341
  if ((0, _browser.isIOS)()) {
346
342
  // on iOS after click "Done" the edit isn't hidden by default, so we need to handle it manually.
347
343
  this.eventManager.addEventListener(this.TEXTAREA, 'focusout', () => this.finishEditing(false));
@@ -350,11 +346,15 @@ class TextEditor extends _baseEditor.BaseEditor {
350
346
  this.addHook('afterScrollVertically', () => this.refreshDimensions());
351
347
  this.addHook('afterColumnResize', () => {
352
348
  this.refreshDimensions();
353
- this.focus();
349
+ if (this.state === _baseEditor.EDITOR_STATE.EDITING) {
350
+ this.focus();
351
+ }
354
352
  });
355
353
  this.addHook('afterRowResize', () => {
356
354
  this.refreshDimensions();
357
- this.focus();
355
+ if (this.state === _baseEditor.EDITOR_STATE.EDITING) {
356
+ this.focus();
357
+ }
358
358
  });
359
359
  }
360
360
 
@@ -416,9 +416,7 @@ class TextEditor extends _baseEditor.BaseEditor {
416
416
  runOnlyIf: event => !this.hot.selection.isMultiple() &&
417
417
  // We trigger a data population for multiple selection.
418
418
  // catch CTRL but not right ALT (which in some systems triggers ALT+CTRL)
419
- !event.altKey,
420
- relativeToGroup: _editorManager.SHORTCUTS_GROUP_EDITOR,
421
- position: 'before'
419
+ !event.altKey
422
420
  }, {
423
421
  keys: [['Meta', 'Enter']],
424
422
  callback: () => {
@@ -426,19 +424,13 @@ class TextEditor extends _baseEditor.BaseEditor {
426
424
  return false; // Will block closing editor.
427
425
  },
428
426
 
429
- runOnlyIf: () => !this.hot.selection.isMultiple(),
430
- // We trigger a data population for multiple selection.
431
- relativeToGroup: _editorManager.SHORTCUTS_GROUP_EDITOR,
432
- position: 'before'
427
+ runOnlyIf: () => !this.hot.selection.isMultiple() // We trigger a data population for multiple selection.
433
428
  }, {
434
429
  keys: [['Alt', 'Enter']],
435
430
  callback: () => {
436
431
  insertNewLine();
437
432
  return false; // Will block closing editor.
438
- },
439
-
440
- relativeToGroup: _editorManager.SHORTCUTS_GROUP_EDITOR,
441
- position: 'before'
433
+ }
442
434
  }, {
443
435
  // TODO: Duplicated part of code (callback to shortcut)
444
436
  keys: [['PageUp']],
@@ -1,14 +1,15 @@
1
1
  import { BaseEditor, EDITOR_STATE } from "../baseEditor/index.mjs";
2
2
  import EventManager from "../../eventManager.mjs";
3
- import { isMobileBrowser, isEdge, isIOS } from "../../helpers/browser.mjs";
4
- import { addClass, getComputedStyle, setCaretPosition, hasClass, removeClass } from "../../helpers/dom/element.mjs";
3
+ import { isEdge, isIOS } from "../../helpers/browser.mjs";
4
+ import { addClass, getComputedStyle, isThisHotChild, setCaretPosition, hasClass, removeClass, setAttribute } from "../../helpers/dom/element.mjs";
5
5
  import { rangeEach } from "../../helpers/number.mjs";
6
6
  import { KEY_CODES } from "../../helpers/unicode.mjs";
7
7
  import { autoResize } from "../../3rdparty/autoResize/index.mjs";
8
8
  import { isDefined } from "../../helpers/mixed.mjs";
9
- import { SHORTCUTS_GROUP_NAVIGATION, SHORTCUTS_GROUP_EDITOR as EDITOR_MANAGER_GROUP } from "../../editorManager.mjs";
9
+ import { SHORTCUTS_GROUP_NAVIGATION } from "../../editorManager.mjs";
10
10
  import { SHORTCUTS_GROUP_EDITOR } from "../baseEditor/baseEditor.mjs";
11
11
  import { updateCaretPosition } from "./caretPositioner.mjs";
12
+ import { A11Y_HIDDEN, A11Y_TABINDEX } from "../../helpers/a11y.mjs";
12
13
  const EDITOR_VISIBLE_CLASS_NAME = 'ht_editor_visible';
13
14
  const EDITOR_HIDDEN_CLASS_NAME = 'ht_editor_hidden';
14
15
  const SHORTCUTS_GROUP = 'textEditor';
@@ -117,7 +118,7 @@ export class TextEditor extends BaseEditor {
117
118
  */
118
119
  close() {
119
120
  this.autoResize.unObserve();
120
- if (this.hot.rootDocument.activeElement === this.TEXTAREA) {
121
+ if (isThisHotChild(this.hot.rootDocument.activeElement, this.hot.rootElement)) {
121
122
  this.hot.listen(); // don't refocus the table if user focused some cell outside of HT on purpose
122
123
  }
123
124
 
@@ -142,8 +143,7 @@ export class TextEditor extends BaseEditor {
142
143
  if (!cellProperties.readOnly) {
143
144
  this.refreshDimensions(true);
144
145
  const {
145
- allowInvalid,
146
- fragmentSelection
146
+ allowInvalid
147
147
  } = cellProperties;
148
148
  if (allowInvalid) {
149
149
  // Remove an empty space from textarea (added by copyPaste plugin to make copy/paste
@@ -153,13 +153,6 @@ export class TextEditor extends BaseEditor {
153
153
  if (previousState !== EDITOR_STATE.FINISHED) {
154
154
  this.hideEditableElement();
155
155
  }
156
-
157
- // @TODO: The fragmentSelection functionality is conflicted with IME. For this feature
158
- // refocus has to be disabled (to make IME working).
159
- const restoreFocus = !fragmentSelection;
160
- if (restoreFocus && !isMobileBrowser()) {
161
- this.focus();
162
- }
163
156
  }
164
157
  }
165
158
 
@@ -196,8 +189,13 @@ export class TextEditor extends BaseEditor {
196
189
  rootDocument
197
190
  } = this.hot;
198
191
  this.TEXTAREA = rootDocument.createElement('TEXTAREA');
199
- this.TEXTAREA.setAttribute('data-hot-input', ''); // Makes the element recognizable by Hot as its own component's element.
200
- this.TEXTAREA.tabIndex = -1;
192
+
193
+ // Makes the element recognizable by Hot as its own
194
+ // component's element.
195
+ setAttribute(this.TEXTAREA, [['data-hot-input', ''], A11Y_TABINDEX(-1)]);
196
+ if (this.hot.getSettings().ariaTags) {
197
+ setAttribute(this.TEXTAREA, [A11Y_HIDDEN()]);
198
+ }
201
199
  addClass(this.TEXTAREA, 'handsontableInput');
202
200
  this.textareaStyle = this.TEXTAREA.style;
203
201
  this.textareaStyle.width = 0;
@@ -335,8 +333,6 @@ export class TextEditor extends BaseEditor {
335
333
  * @private
336
334
  */
337
335
  bindEvents() {
338
- this.eventManager.addEventListener(this.TEXTAREA, 'cut', event => event.stopPropagation());
339
- this.eventManager.addEventListener(this.TEXTAREA, 'paste', event => event.stopPropagation());
340
336
  if (isIOS()) {
341
337
  // on iOS after click "Done" the edit isn't hidden by default, so we need to handle it manually.
342
338
  this.eventManager.addEventListener(this.TEXTAREA, 'focusout', () => this.finishEditing(false));
@@ -345,11 +341,15 @@ export class TextEditor extends BaseEditor {
345
341
  this.addHook('afterScrollVertically', () => this.refreshDimensions());
346
342
  this.addHook('afterColumnResize', () => {
347
343
  this.refreshDimensions();
348
- this.focus();
344
+ if (this.state === EDITOR_STATE.EDITING) {
345
+ this.focus();
346
+ }
349
347
  });
350
348
  this.addHook('afterRowResize', () => {
351
349
  this.refreshDimensions();
352
- this.focus();
350
+ if (this.state === EDITOR_STATE.EDITING) {
351
+ this.focus();
352
+ }
353
353
  });
354
354
  }
355
355
 
@@ -411,9 +411,7 @@ export class TextEditor extends BaseEditor {
411
411
  runOnlyIf: event => !this.hot.selection.isMultiple() &&
412
412
  // We trigger a data population for multiple selection.
413
413
  // catch CTRL but not right ALT (which in some systems triggers ALT+CTRL)
414
- !event.altKey,
415
- relativeToGroup: EDITOR_MANAGER_GROUP,
416
- position: 'before'
414
+ !event.altKey
417
415
  }, {
418
416
  keys: [['Meta', 'Enter']],
419
417
  callback: () => {
@@ -421,19 +419,13 @@ export class TextEditor extends BaseEditor {
421
419
  return false; // Will block closing editor.
422
420
  },
423
421
 
424
- runOnlyIf: () => !this.hot.selection.isMultiple(),
425
- // We trigger a data population for multiple selection.
426
- relativeToGroup: EDITOR_MANAGER_GROUP,
427
- position: 'before'
422
+ runOnlyIf: () => !this.hot.selection.isMultiple() // We trigger a data population for multiple selection.
428
423
  }, {
429
424
  keys: [['Alt', 'Enter']],
430
425
  callback: () => {
431
426
  insertNewLine();
432
427
  return false; // Will block closing editor.
433
- },
434
-
435
- relativeToGroup: EDITOR_MANAGER_GROUP,
436
- position: 'before'
428
+ }
437
429
  }, {
438
430
  // TODO: Duplicated part of code (callback to shortcut)
439
431
  keys: [['PageUp']],
@@ -0,0 +1,12 @@
1
+ type FocusMode = 'cell' | 'mixed';
2
+
3
+ export interface FocusManager {
4
+ getFocusMode(): FocusMode;
5
+ setFocusMode(focusMode: FocusMode): void;
6
+ getRefocusDelay(): number;
7
+ setRefocusDelay(delay: number): void;
8
+ setRefocusElementGetter(getterFn: () => HTMLElement): void;
9
+ getRefocusElement(): HTMLElement | void;
10
+ focusOnHighlightedCell(): void;
11
+ refocusToEditorTextarea(delay: number): void;
12
+ }