handsontable 13.1.0-next-e1a7d2c-20230831 → 14.0.0-next-d97b156-20231027

Sign up to get free protection for your applications and to get access to all the features.
Files changed (691) hide show
  1. package/3rdparty/walkontable/src/calculator/constants.js +3 -6
  2. package/3rdparty/walkontable/src/calculator/viewportColumns.js +1 -2
  3. package/3rdparty/walkontable/src/calculator/viewportRows.js +1 -2
  4. package/3rdparty/walkontable/src/cell/coords.d.ts +8 -1
  5. package/3rdparty/walkontable/src/cell/coords.js +81 -13
  6. package/3rdparty/walkontable/src/cell/coords.mjs +80 -11
  7. package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
  8. package/3rdparty/walkontable/src/cell/range.js +39 -9
  9. package/3rdparty/walkontable/src/cell/range.mjs +38 -7
  10. package/3rdparty/walkontable/src/core/_base.js +9 -3
  11. package/3rdparty/walkontable/src/core/_base.mjs +9 -3
  12. package/3rdparty/walkontable/src/core/clone.js +2 -2
  13. package/3rdparty/walkontable/src/core/clone.mjs +2 -2
  14. package/3rdparty/walkontable/src/core/core.js +3 -2
  15. package/3rdparty/walkontable/src/core/core.mjs +3 -2
  16. package/3rdparty/walkontable/src/event.js +13 -12
  17. package/3rdparty/walkontable/src/event.mjs +12 -10
  18. package/3rdparty/walkontable/src/facade/core.js +2 -2
  19. package/3rdparty/walkontable/src/facade/core.mjs +2 -2
  20. package/3rdparty/walkontable/src/filter/column.js +1 -2
  21. package/3rdparty/walkontable/src/filter/row.js +1 -2
  22. package/3rdparty/walkontable/src/index.js +12 -4
  23. package/3rdparty/walkontable/src/index.mjs +2 -2
  24. package/3rdparty/walkontable/src/overlay/_base.js +13 -2
  25. package/3rdparty/walkontable/src/overlay/_base.mjs +14 -3
  26. package/3rdparty/walkontable/src/overlay/constants.js +7 -14
  27. package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -6
  28. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -6
  29. package/3rdparty/walkontable/src/overlay/top.js +2 -6
  30. package/3rdparty/walkontable/src/overlay/top.mjs +2 -6
  31. package/3rdparty/walkontable/src/overlays.js +1 -2
  32. package/3rdparty/walkontable/src/renderer/cells.js +10 -0
  33. package/3rdparty/walkontable/src/renderer/cells.mjs +11 -1
  34. package/3rdparty/walkontable/src/renderer/columnHeaders.js +13 -0
  35. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +14 -1
  36. package/3rdparty/walkontable/src/renderer/rowHeaders.js +8 -0
  37. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +8 -0
  38. package/3rdparty/walkontable/src/renderer/rows.js +13 -0
  39. package/3rdparty/walkontable/src/renderer/rows.mjs +13 -0
  40. package/3rdparty/walkontable/src/renderer/table.js +9 -0
  41. package/3rdparty/walkontable/src/renderer/table.mjs +9 -0
  42. package/3rdparty/walkontable/src/scroll.js +3 -2
  43. package/3rdparty/walkontable/src/scroll.mjs +2 -0
  44. package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +8 -14
  45. package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
  46. package/3rdparty/walkontable/src/selection/border/constants.js +15 -0
  47. package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
  48. package/3rdparty/walkontable/src/selection/constants.js +54 -0
  49. package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
  50. package/3rdparty/walkontable/src/selection/index.js +26 -0
  51. package/3rdparty/walkontable/src/selection/index.mjs +5 -0
  52. package/3rdparty/walkontable/src/selection/manager.js +274 -0
  53. package/3rdparty/walkontable/src/selection/manager.mjs +269 -0
  54. package/3rdparty/walkontable/src/selection/scanner.js +270 -0
  55. package/3rdparty/walkontable/src/selection/scanner.mjs +267 -0
  56. package/3rdparty/walkontable/src/selection/selection.js +100 -0
  57. package/3rdparty/walkontable/src/selection/selection.mjs +96 -0
  58. package/3rdparty/walkontable/src/settings.js +13 -4
  59. package/3rdparty/walkontable/src/settings.mjs +13 -4
  60. package/3rdparty/walkontable/src/table/bottom.js +1 -2
  61. package/3rdparty/walkontable/src/table/bottomInlineStartCorner.js +1 -2
  62. package/3rdparty/walkontable/src/table/inlineStart.js +1 -2
  63. package/3rdparty/walkontable/src/table/master.js +3 -6
  64. package/3rdparty/walkontable/src/table/master.mjs +2 -4
  65. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +10 -2
  66. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
  67. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +10 -2
  68. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
  69. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +10 -2
  70. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
  71. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +10 -2
  72. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
  73. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +10 -2
  74. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
  75. package/3rdparty/walkontable/src/table/top.js +1 -2
  76. package/3rdparty/walkontable/src/table/topInlineStartCorner.js +1 -2
  77. package/3rdparty/walkontable/src/table.js +20 -80
  78. package/3rdparty/walkontable/src/table.mjs +20 -79
  79. package/3rdparty/walkontable/src/utils/orderView/constants.js +3 -6
  80. package/3rdparty/walkontable/src/viewport.js +1 -2
  81. package/CHANGELOG.md +51 -0
  82. package/base.js +3 -4
  83. package/base.mjs +2 -2
  84. package/cellTypes/autocompleteType/autocompleteType.js +3 -5
  85. package/cellTypes/checkboxType/checkboxType.js +3 -5
  86. package/cellTypes/dateType/dateType.d.ts +3 -3
  87. package/cellTypes/dateType/dateType.js +5 -7
  88. package/cellTypes/dateType/dateType.mjs +2 -2
  89. package/cellTypes/dropdownType/dropdownType.js +3 -5
  90. package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
  91. package/cellTypes/handsontableType/handsontableType.js +5 -7
  92. package/cellTypes/handsontableType/handsontableType.mjs +2 -2
  93. package/cellTypes/index.d.ts +3 -0
  94. package/cellTypes/index.js +4 -0
  95. package/cellTypes/index.mjs +3 -1
  96. package/cellTypes/numericType/numericType.js +3 -5
  97. package/cellTypes/passwordType/passwordType.js +3 -5
  98. package/cellTypes/selectType/index.d.ts +1 -0
  99. package/cellTypes/selectType/index.js +6 -0
  100. package/cellTypes/selectType/index.mjs +1 -0
  101. package/cellTypes/selectType/selectType.d.ts +14 -0
  102. package/cellTypes/selectType/selectType.js +11 -0
  103. package/cellTypes/selectType/selectType.mjs +8 -0
  104. package/cellTypes/textType/textType.js +3 -5
  105. package/cellTypes/timeType/timeType.js +3 -5
  106. package/common.d.ts +1 -1
  107. package/core/focusCatcher/focusDetector.js +63 -0
  108. package/core/focusCatcher/focusDetector.mjs +59 -0
  109. package/core/focusCatcher/index.js +148 -0
  110. package/core/focusCatcher/index.mjs +144 -0
  111. package/core/index.js +9 -0
  112. package/core/index.mjs +1 -0
  113. package/core.d.ts +10 -5
  114. package/core.js +327 -359
  115. package/core.mjs +327 -359
  116. package/dataMap/dataMap.js +1 -2
  117. package/dataMap/dataSource.js +1 -2
  118. package/dataMap/metaManager/metaSchema.js +65 -0
  119. package/dataMap/metaManager/metaSchema.mjs +65 -0
  120. package/dataMap/metaManager/mods/extendMetaProperties.js +7 -1
  121. package/dataMap/metaManager/mods/extendMetaProperties.mjs +7 -1
  122. package/dataMap/replaceData.js +5 -0
  123. package/dataMap/replaceData.mjs +5 -0
  124. package/dist/handsontable.css +94 -76
  125. package/dist/handsontable.full.css +94 -76
  126. package/dist/handsontable.full.js +21236 -14104
  127. package/dist/handsontable.full.min.css +8 -8
  128. package/dist/handsontable.full.min.js +170 -152
  129. package/dist/handsontable.js +22016 -15254
  130. package/dist/handsontable.min.css +7 -7
  131. package/dist/handsontable.min.js +31 -23
  132. package/dist/languages/all.js +47 -40
  133. package/dist/languages/all.min.js +1 -1
  134. package/dist/languages/ar-AR.js +1 -2
  135. package/dist/languages/cs-CZ.js +1 -2
  136. package/dist/languages/de-CH.js +1 -2
  137. package/dist/languages/de-DE.js +1 -2
  138. package/dist/languages/en-US.js +15 -3
  139. package/dist/languages/en-US.min.js +1 -1
  140. package/dist/languages/es-MX.js +1 -2
  141. package/dist/languages/fr-FR.js +1 -2
  142. package/dist/languages/it-IT.js +1 -2
  143. package/dist/languages/ja-JP.js +1 -2
  144. package/dist/languages/ko-KR.js +1 -2
  145. package/dist/languages/lv-LV.js +1 -2
  146. package/dist/languages/nb-NO.js +1 -2
  147. package/dist/languages/nl-NL.js +1 -2
  148. package/dist/languages/pl-PL.js +15 -3
  149. package/dist/languages/pl-PL.min.js +1 -1
  150. package/dist/languages/pt-BR.js +1 -2
  151. package/dist/languages/ru-RU.js +1 -2
  152. package/dist/languages/sr-SP.js +1 -2
  153. package/dist/languages/zh-CN.js +1 -2
  154. package/dist/languages/zh-TW.js +1 -2
  155. package/editorManager.js +17 -91
  156. package/editorManager.mjs +16 -87
  157. package/editors/autocompleteEditor/autocompleteEditor.js +65 -11
  158. package/editors/autocompleteEditor/autocompleteEditor.mjs +65 -10
  159. package/editors/baseEditor/baseEditor.js +19 -13
  160. package/editors/baseEditor/baseEditor.mjs +16 -7
  161. package/editors/checkboxEditor/checkboxEditor.js +1 -2
  162. package/editors/dateEditor/dateEditor.js +27 -9
  163. package/editors/dateEditor/dateEditor.mjs +27 -8
  164. package/editors/dropdownEditor/dropdownEditor.js +1 -2
  165. package/editors/handsontableEditor/handsontableEditor.js +14 -7
  166. package/editors/handsontableEditor/handsontableEditor.mjs +14 -6
  167. package/editors/numericEditor/numericEditor.js +1 -2
  168. package/editors/passwordEditor/passwordEditor.js +1 -2
  169. package/editors/selectEditor/selectEditor.js +1 -2
  170. package/editors/textEditor/textEditor.js +20 -29
  171. package/editors/textEditor/textEditor.mjs +22 -30
  172. package/editors/timeEditor/timeEditor.js +1 -2
  173. package/eventManager.js +1 -2
  174. package/focusManager.d.ts +12 -0
  175. package/focusManager.js +265 -0
  176. package/focusManager.mjs +261 -0
  177. package/helpers/a11y.js +81 -0
  178. package/helpers/a11y.mjs +39 -0
  179. package/helpers/dom/element.js +224 -12
  180. package/helpers/dom/element.mjs +216 -10
  181. package/helpers/dom/event.d.ts +1 -0
  182. package/helpers/dom/event.js +25 -0
  183. package/helpers/dom/event.mjs +24 -0
  184. package/helpers/mixed.js +2 -2
  185. package/helpers/mixed.mjs +2 -2
  186. package/helpers/number.d.ts +1 -0
  187. package/helpers/number.js +18 -0
  188. package/helpers/number.mjs +17 -0
  189. package/helpers/unicode.js +1 -2
  190. package/i18n/constants.js +97 -160
  191. package/i18n/constants.mjs +17 -1
  192. package/i18n/languages/ar-AR.js +3 -4
  193. package/i18n/languages/cs-CZ.js +3 -4
  194. package/i18n/languages/de-CH.js +3 -4
  195. package/i18n/languages/de-DE.js +3 -4
  196. package/i18n/languages/en-US.js +17 -5
  197. package/i18n/languages/en-US.mjs +14 -1
  198. package/i18n/languages/es-MX.js +3 -4
  199. package/i18n/languages/fr-FR.js +3 -4
  200. package/i18n/languages/it-IT.js +3 -4
  201. package/i18n/languages/ja-JP.js +3 -4
  202. package/i18n/languages/ko-KR.js +3 -4
  203. package/i18n/languages/lv-LV.js +3 -4
  204. package/i18n/languages/nb-NO.js +3 -4
  205. package/i18n/languages/nl-NL.js +3 -4
  206. package/i18n/languages/pl-PL.js +17 -5
  207. package/i18n/languages/pl-PL.mjs +14 -1
  208. package/i18n/languages/pt-BR.js +3 -4
  209. package/i18n/languages/ru-RU.js +3 -4
  210. package/i18n/languages/sr-SP.js +3 -4
  211. package/i18n/languages/zh-CN.js +3 -4
  212. package/i18n/languages/zh-TW.js +3 -4
  213. package/i18n/registry.js +4 -6
  214. package/index.js +3 -4
  215. package/languages/all.js +47 -40
  216. package/languages/ar-AR.js +1 -2
  217. package/languages/cs-CZ.js +1 -2
  218. package/languages/de-CH.js +1 -2
  219. package/languages/de-DE.js +1 -2
  220. package/languages/en-US.js +15 -3
  221. package/languages/en-US.mjs +14 -1
  222. package/languages/es-MX.js +1 -2
  223. package/languages/fr-FR.js +1 -2
  224. package/languages/index.js +47 -40
  225. package/languages/it-IT.js +1 -2
  226. package/languages/ja-JP.js +1 -2
  227. package/languages/ko-KR.js +1 -2
  228. package/languages/lv-LV.js +1 -2
  229. package/languages/nb-NO.js +1 -2
  230. package/languages/nl-NL.js +1 -2
  231. package/languages/pl-PL.js +15 -3
  232. package/languages/pl-PL.mjs +14 -1
  233. package/languages/pt-BR.js +1 -2
  234. package/languages/ru-RU.js +1 -2
  235. package/languages/sr-SP.js +1 -2
  236. package/languages/zh-CN.js +1 -2
  237. package/languages/zh-TW.js +1 -2
  238. package/mixins/hooksRefRegisterer.js +1 -2
  239. package/mixins/localHooks.js +1 -2
  240. package/package.json +119 -96
  241. package/pluginHooks.d.ts +42 -7
  242. package/pluginHooks.js +301 -65
  243. package/pluginHooks.mjs +300 -63
  244. package/plugins/autoColumnSize/autoColumnSize.d.ts +2 -0
  245. package/plugins/autoColumnSize/autoColumnSize.js +2 -4
  246. package/plugins/autoRowSize/autoRowSize.d.ts +2 -0
  247. package/plugins/autoRowSize/autoRowSize.js +15 -10
  248. package/plugins/autoRowSize/autoRowSize.mjs +13 -6
  249. package/plugins/autofill/autofill.js +2 -4
  250. package/plugins/autofill/utils.js +1 -2
  251. package/plugins/base/base.js +1 -2
  252. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +2 -4
  253. package/plugins/bindRowsWithHeaders/maps/looseBindsMap.js +1 -2
  254. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.js +1 -2
  255. package/plugins/collapsibleColumns/collapsibleColumns.js +77 -8
  256. package/plugins/collapsibleColumns/collapsibleColumns.mjs +76 -5
  257. package/plugins/columnSorting/columnSorting.js +71 -6
  258. package/plugins/columnSorting/columnSorting.mjs +70 -3
  259. package/plugins/columnSorting/index.js +3 -1
  260. package/plugins/columnSorting/index.mjs +1 -1
  261. package/plugins/columnSorting/sortFunction/checkbox.js +1 -2
  262. package/plugins/columnSorting/sortFunction/date.js +1 -2
  263. package/plugins/columnSorting/sortFunction/default.js +1 -2
  264. package/plugins/columnSorting/sortFunction/numeric.js +1 -2
  265. package/plugins/columnSorting/sortService/engine.js +3 -6
  266. package/plugins/columnSorting/utils.js +3 -6
  267. package/plugins/columnSummary/columnSummary.js +2 -4
  268. package/plugins/columnSummary/endpoints.js +1 -2
  269. package/plugins/comments/commentEditor.js +2 -2
  270. package/plugins/comments/commentEditor.mjs +1 -0
  271. package/plugins/comments/comments.js +254 -197
  272. package/plugins/comments/comments.mjs +251 -190
  273. package/plugins/comments/contextMenuItem/addEditComment.js +41 -0
  274. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  275. package/plugins/comments/contextMenuItem/readOnlyComment.js +49 -0
  276. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +43 -0
  277. package/plugins/comments/contextMenuItem/removeComment.js +38 -0
  278. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  279. package/plugins/comments/displaySwitch.js +1 -2
  280. package/plugins/contextMenu/commandExecutor.js +2 -3
  281. package/plugins/contextMenu/commandExecutor.mjs +2 -3
  282. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  283. package/plugins/contextMenu/contextMenu.js +77 -40
  284. package/plugins/contextMenu/contextMenu.mjs +74 -35
  285. package/plugins/contextMenu/itemsFactory.js +2 -3
  286. package/plugins/contextMenu/itemsFactory.mjs +3 -4
  287. package/plugins/contextMenu/{cursor.mjs → menu/cursor.js} +6 -4
  288. package/plugins/contextMenu/{cursor.js → menu/cursor.mjs} +4 -10
  289. package/plugins/contextMenu/menu/defaultShortcutsList.js +88 -0
  290. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +84 -0
  291. package/plugins/contextMenu/menu/index.js +9 -0
  292. package/plugins/contextMenu/menu/index.mjs +1 -0
  293. package/plugins/contextMenu/{menu.js → menu/menu.js} +145 -421
  294. package/plugins/contextMenu/{menu.mjs → menu/menu.mjs} +146 -422
  295. package/plugins/contextMenu/menu/menuItemRenderer.js +70 -0
  296. package/plugins/contextMenu/menu/menuItemRenderer.mjs +66 -0
  297. package/plugins/contextMenu/menu/navigator.js +27 -0
  298. package/plugins/contextMenu/menu/navigator.mjs +23 -0
  299. package/plugins/contextMenu/menu/positioner.js +213 -0
  300. package/plugins/contextMenu/menu/positioner.mjs +209 -0
  301. package/plugins/contextMenu/menu/shortcuts.js +114 -0
  302. package/plugins/contextMenu/menu/shortcuts.mjs +110 -0
  303. package/plugins/contextMenu/menu/utils.js +177 -0
  304. package/plugins/contextMenu/menu/utils.mjs +163 -0
  305. package/plugins/contextMenu/predefinedItems/alignment.js +10 -4
  306. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  307. package/plugins/contextMenu/predefinedItems/clearColumn.js +8 -7
  308. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  309. package/plugins/contextMenu/predefinedItems/columnLeft.js +8 -7
  310. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  311. package/plugins/contextMenu/predefinedItems/columnRight.js +8 -7
  312. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  313. package/plugins/contextMenu/predefinedItems/index.js +75 -0
  314. package/plugins/contextMenu/predefinedItems/index.mjs +68 -0
  315. package/plugins/contextMenu/predefinedItems/noItems.js +1 -2
  316. package/plugins/contextMenu/predefinedItems/readOnly.js +10 -4
  317. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  318. package/plugins/contextMenu/predefinedItems/redo.js +3 -4
  319. package/plugins/contextMenu/predefinedItems/removeColumn.js +10 -9
  320. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  321. package/plugins/contextMenu/predefinedItems/removeRow.js +10 -9
  322. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  323. package/plugins/contextMenu/predefinedItems/rowAbove.js +8 -7
  324. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  325. package/plugins/contextMenu/predefinedItems/rowBelow.js +8 -7
  326. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  327. package/plugins/contextMenu/predefinedItems/separator.js +1 -2
  328. package/plugins/contextMenu/predefinedItems/undo.js +3 -4
  329. package/plugins/contextMenu/utils.js +35 -151
  330. package/plugins/contextMenu/utils.mjs +35 -144
  331. package/plugins/copyPaste/clipboardData/clipboardData.js +516 -0
  332. package/plugins/copyPaste/clipboardData/clipboardData.mjs +512 -0
  333. package/plugins/copyPaste/clipboardData/copyClipboardData.js +69 -0
  334. package/plugins/copyPaste/clipboardData/copyClipboardData.mjs +65 -0
  335. package/plugins/copyPaste/clipboardData/index.js +9 -0
  336. package/plugins/copyPaste/clipboardData/index.mjs +4 -0
  337. package/plugins/copyPaste/clipboardData/pasteClipboardData.js +81 -0
  338. package/plugins/copyPaste/clipboardData/pasteClipboardData.mjs +77 -0
  339. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  340. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  341. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  342. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  343. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  344. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  345. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  346. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  347. package/plugins/copyPaste/contextMenuItem/cut.js +9 -2
  348. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  349. package/plugins/copyPaste/copyPaste.js +160 -167
  350. package/plugins/copyPaste/copyPaste.mjs +161 -166
  351. package/plugins/customBorders/contextMenuItem/bottom.js +2 -2
  352. package/plugins/customBorders/contextMenuItem/left.js +2 -2
  353. package/plugins/customBorders/contextMenuItem/noBorders.js +2 -2
  354. package/plugins/customBorders/contextMenuItem/right.js +2 -2
  355. package/plugins/customBorders/contextMenuItem/top.js +2 -2
  356. package/plugins/customBorders/customBorders.js +27 -26
  357. package/plugins/customBorders/customBorders.mjs +24 -21
  358. package/plugins/dragToScroll/dragToScroll.js +2 -4
  359. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  360. package/plugins/dropdownMenu/dropdownMenu.js +130 -44
  361. package/plugins/dropdownMenu/dropdownMenu.mjs +127 -39
  362. package/plugins/exportFile/dataProvider.js +1 -2
  363. package/plugins/exportFile/exportFile.js +4 -6
  364. package/plugins/exportFile/typeFactory.js +5 -8
  365. package/plugins/exportFile/types/_base.js +1 -2
  366. package/plugins/exportFile/types/csv.js +1 -2
  367. package/plugins/filters/component/_base.js +23 -8
  368. package/plugins/filters/component/_base.mjs +23 -8
  369. package/plugins/filters/component/actionBar.js +31 -29
  370. package/plugins/filters/component/actionBar.mjs +26 -23
  371. package/plugins/filters/component/condition.js +48 -61
  372. package/plugins/filters/component/condition.mjs +40 -52
  373. package/plugins/filters/component/operators.js +21 -22
  374. package/plugins/filters/component/operators.mjs +18 -18
  375. package/plugins/filters/component/value.js +37 -28
  376. package/plugins/filters/component/value.mjs +32 -22
  377. package/plugins/filters/condition/beginsWith.js +3 -4
  378. package/plugins/filters/condition/between.js +3 -4
  379. package/plugins/filters/condition/byValue.js +1 -2
  380. package/plugins/filters/condition/contains.js +3 -4
  381. package/plugins/filters/condition/date/after.js +3 -4
  382. package/plugins/filters/condition/date/before.js +3 -4
  383. package/plugins/filters/condition/date/today.js +3 -4
  384. package/plugins/filters/condition/date/tomorrow.js +3 -4
  385. package/plugins/filters/condition/date/yesterday.js +3 -4
  386. package/plugins/filters/condition/empty.js +3 -4
  387. package/plugins/filters/condition/endsWith.js +3 -4
  388. package/plugins/filters/condition/equal.js +3 -4
  389. package/plugins/filters/condition/false.js +1 -2
  390. package/plugins/filters/condition/greaterThan.js +3 -4
  391. package/plugins/filters/condition/greaterThanOrEqual.js +3 -4
  392. package/plugins/filters/condition/lessThan.js +3 -4
  393. package/plugins/filters/condition/lessThanOrEqual.js +3 -4
  394. package/plugins/filters/condition/none.js +3 -4
  395. package/plugins/filters/condition/notBetween.js +3 -4
  396. package/plugins/filters/condition/notContains.js +3 -4
  397. package/plugins/filters/condition/notEmpty.js +3 -4
  398. package/plugins/filters/condition/notEqual.js +3 -4
  399. package/plugins/filters/condition/true.js +1 -2
  400. package/plugins/filters/conditionCollection.d.ts +3 -2
  401. package/plugins/filters/conditionCollection.js +1 -2
  402. package/plugins/filters/conditionRegisterer.js +1 -2
  403. package/plugins/filters/conditionUpdateObserver.js +1 -2
  404. package/plugins/filters/constants.js +4 -8
  405. package/plugins/filters/constants.mjs +1 -1
  406. package/plugins/filters/dataFilter.js +1 -2
  407. package/plugins/filters/filters.d.ts +3 -5
  408. package/plugins/filters/filters.js +108 -66
  409. package/plugins/filters/filters.mjs +99 -55
  410. package/plugins/filters/logicalOperationRegisterer.js +1 -2
  411. package/plugins/filters/logicalOperations/conjunction.js +4 -6
  412. package/plugins/filters/logicalOperations/disjunction.js +4 -6
  413. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +4 -6
  414. package/plugins/filters/menu/focusController.js +123 -0
  415. package/plugins/filters/menu/focusController.mjs +119 -0
  416. package/plugins/filters/menu/focusNavigator.js +30 -0
  417. package/plugins/filters/menu/focusNavigator.mjs +26 -0
  418. package/plugins/filters/ui/_base.js +37 -15
  419. package/plugins/filters/ui/_base.mjs +35 -13
  420. package/plugins/filters/ui/input.js +43 -35
  421. package/plugins/filters/ui/input.mjs +42 -33
  422. package/plugins/filters/ui/link.js +44 -12
  423. package/plugins/filters/ui/link.mjs +44 -11
  424. package/plugins/filters/ui/multipleSelect.js +237 -133
  425. package/plugins/filters/ui/multipleSelect.mjs +232 -127
  426. package/plugins/filters/ui/radioInput.js +42 -18
  427. package/plugins/filters/ui/radioInput.mjs +42 -17
  428. package/plugins/filters/ui/select.js +152 -77
  429. package/plugins/filters/ui/select.mjs +148 -72
  430. package/plugins/formulas/engine/settings.js +2 -4
  431. package/plugins/formulas/formulas.js +3 -6
  432. package/plugins/formulas/indexSyncer/axisSyncer.js +1 -2
  433. package/plugins/formulas/indexSyncer/index.js +1 -2
  434. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +2 -2
  435. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +2 -2
  436. package/plugins/hiddenColumns/hiddenColumns.d.ts +1 -0
  437. package/plugins/hiddenColumns/hiddenColumns.js +49 -6
  438. package/plugins/hiddenColumns/hiddenColumns.mjs +48 -3
  439. package/plugins/hiddenRows/contextMenuItem/hideRow.js +2 -2
  440. package/plugins/hiddenRows/contextMenuItem/showRow.js +2 -2
  441. package/plugins/hiddenRows/hiddenRows.d.ts +1 -0
  442. package/plugins/hiddenRows/hiddenRows.js +49 -6
  443. package/plugins/hiddenRows/hiddenRows.mjs +48 -3
  444. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +2 -2
  445. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +2 -2
  446. package/plugins/manualColumnFreeze/manualColumnFreeze.js +2 -4
  447. package/plugins/manualColumnMove/manualColumnMove.js +9 -17
  448. package/plugins/manualColumnMove/manualColumnMove.mjs +7 -13
  449. package/plugins/manualColumnMove/ui/_base.js +1 -2
  450. package/plugins/manualColumnMove/ui/backlight.js +1 -2
  451. package/plugins/manualColumnMove/ui/guideline.js +1 -2
  452. package/plugins/manualColumnResize/manualColumnResize.js +2 -4
  453. package/plugins/manualRowMove/manualRowMove.js +6 -23
  454. package/plugins/manualRowMove/manualRowMove.mjs +4 -19
  455. package/plugins/manualRowMove/ui/_base.js +1 -2
  456. package/plugins/manualRowMove/ui/backlight.js +1 -2
  457. package/plugins/manualRowMove/ui/guideline.js +1 -2
  458. package/plugins/manualRowResize/manualRowResize.js +2 -4
  459. package/plugins/mergeCells/calculations/autofill.js +1 -2
  460. package/plugins/mergeCells/calculations/selection.js +1 -2
  461. package/plugins/mergeCells/cellCoords.js +1 -2
  462. package/plugins/mergeCells/cellsCollection.js +1 -2
  463. package/plugins/mergeCells/contextMenuItem/toggleMerge.js +2 -2
  464. package/plugins/mergeCells/mergeCells.js +7 -20
  465. package/plugins/mergeCells/mergeCells.mjs +5 -16
  466. package/plugins/multiColumnSorting/multiColumnSorting.js +60 -6
  467. package/plugins/multiColumnSorting/multiColumnSorting.mjs +59 -3
  468. package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +2 -4
  469. package/plugins/nestedHeaders/nestedHeaders.js +263 -36
  470. package/plugins/nestedHeaders/nestedHeaders.mjs +262 -33
  471. package/plugins/nestedHeaders/stateManager/index.js +102 -3
  472. package/plugins/nestedHeaders/stateManager/index.mjs +102 -3
  473. package/plugins/nestedHeaders/stateManager/sourceSettings.js +1 -2
  474. package/plugins/nestedHeaders/utils/ghostTable.js +1 -2
  475. package/plugins/nestedRows/data/dataManager.js +1 -2
  476. package/plugins/nestedRows/nestedRows.js +47 -10
  477. package/plugins/nestedRows/nestedRows.mjs +45 -6
  478. package/plugins/nestedRows/ui/_base.js +1 -2
  479. package/plugins/nestedRows/ui/collapsing.js +1 -2
  480. package/plugins/nestedRows/ui/contextMenu.js +3 -4
  481. package/plugins/nestedRows/ui/headers.js +13 -3
  482. package/plugins/nestedRows/ui/headers.mjs +13 -2
  483. package/plugins/persistentState/persistentState.js +2 -4
  484. package/plugins/persistentState/storage.js +1 -2
  485. package/plugins/search/search.js +2 -4
  486. package/plugins/touchScroll/touchScroll.js +2 -4
  487. package/plugins/trimRows/trimRows.js +2 -4
  488. package/plugins/undoRedo/index.js +2 -2
  489. package/plugins/undoRedo/undoRedo.js +2 -4
  490. package/renderers/autocompleteRenderer/autocompleteRenderer.js +9 -2
  491. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +8 -0
  492. package/renderers/baseRenderer/baseRenderer.js +18 -2
  493. package/renderers/baseRenderer/baseRenderer.mjs +18 -1
  494. package/renderers/checkboxRenderer/checkboxRenderer.js +10 -6
  495. package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
  496. package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
  497. package/renderers/dateRenderer/dateRenderer.js +28 -0
  498. package/renderers/dateRenderer/dateRenderer.mjs +24 -0
  499. package/renderers/dateRenderer/index.d.ts +1 -0
  500. package/renderers/dateRenderer/index.js +6 -0
  501. package/renderers/dateRenderer/index.mjs +1 -0
  502. package/renderers/handsontableRenderer/handsontableRenderer.d.ts +5 -0
  503. package/renderers/handsontableRenderer/handsontableRenderer.js +28 -0
  504. package/renderers/handsontableRenderer/handsontableRenderer.mjs +24 -0
  505. package/renderers/handsontableRenderer/index.d.ts +1 -0
  506. package/renderers/handsontableRenderer/index.js +6 -0
  507. package/renderers/handsontableRenderer/index.mjs +1 -0
  508. package/renderers/htmlRenderer/htmlRenderer.js +1 -2
  509. package/renderers/index.d.ts +9 -0
  510. package/renderers/numericRenderer/numericRenderer.js +1 -2
  511. package/renderers/passwordRenderer/passwordRenderer.js +1 -2
  512. package/renderers/selectRenderer/index.d.ts +1 -0
  513. package/renderers/selectRenderer/index.js +6 -0
  514. package/renderers/selectRenderer/index.mjs +1 -0
  515. package/renderers/selectRenderer/selectRenderer.d.ts +5 -0
  516. package/renderers/selectRenderer/selectRenderer.js +26 -0
  517. package/renderers/selectRenderer/selectRenderer.mjs +22 -0
  518. package/renderers/textRenderer/textRenderer.js +1 -2
  519. package/renderers/timeRenderer/timeRenderer.js +1 -2
  520. package/selection/highlight/highlight.js +257 -73
  521. package/selection/highlight/highlight.mjs +250 -71
  522. package/selection/highlight/types/activeHeader.js +10 -8
  523. package/selection/highlight/types/activeHeader.mjs +10 -8
  524. package/selection/highlight/types/area.js +6 -18
  525. package/selection/highlight/types/area.mjs +6 -18
  526. package/selection/highlight/types/areaLayered.js +31 -0
  527. package/selection/highlight/types/areaLayered.mjs +26 -0
  528. package/selection/highlight/types/column.js +27 -0
  529. package/selection/highlight/types/column.mjs +22 -0
  530. package/selection/highlight/types/customSelection.js +7 -9
  531. package/selection/highlight/types/customSelection.mjs +7 -9
  532. package/selection/highlight/types/fill.js +5 -7
  533. package/selection/highlight/types/fill.mjs +5 -7
  534. package/selection/highlight/types/{cell.js → focus.js} +5 -7
  535. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  536. package/selection/highlight/types/header.js +9 -18
  537. package/selection/highlight/types/header.mjs +9 -18
  538. package/selection/highlight/types/row.js +27 -0
  539. package/selection/highlight/types/row.mjs +22 -0
  540. package/selection/highlight/visualSelection.js +32 -29
  541. package/selection/highlight/visualSelection.mjs +31 -27
  542. package/selection/index.js +4 -7
  543. package/selection/index.mjs +2 -3
  544. package/selection/mouseEventHandler.js +7 -1
  545. package/selection/mouseEventHandler.mjs +7 -1
  546. package/selection/range.js +9 -10
  547. package/selection/range.mjs +8 -8
  548. package/selection/selection.js +334 -154
  549. package/selection/selection.mjs +330 -151
  550. package/selection/transformation.js +233 -94
  551. package/selection/transformation.mjs +232 -92
  552. package/selection/utils.js +20 -31
  553. package/selection/utils.mjs +16 -21
  554. package/settings.d.ts +4 -0
  555. package/shortcutContexts/commands/editor/closeAndSave.js +11 -0
  556. package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
  557. package/shortcutContexts/commands/editor/closeWithoutSaving.js +11 -0
  558. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  559. package/shortcutContexts/commands/editor/fastOpen.js +15 -0
  560. package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
  561. package/shortcutContexts/commands/editor/index.js +16 -0
  562. package/shortcutContexts/commands/editor/index.mjs +12 -0
  563. package/shortcutContexts/commands/editor/open.js +26 -0
  564. package/shortcutContexts/commands/editor/open.mjs +23 -0
  565. package/shortcutContexts/commands/emptySelectedCells.js +10 -0
  566. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  567. package/shortcutContexts/commands/extendCellsSelection/down.js +14 -0
  568. package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
  569. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +24 -0
  570. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +21 -0
  571. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  572. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  573. package/shortcutContexts/commands/extendCellsSelection/left.js +14 -0
  574. package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
  575. package/shortcutContexts/commands/extendCellsSelection/right.js +14 -0
  576. package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
  577. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +18 -0
  578. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
  579. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +28 -0
  580. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
  581. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +18 -0
  582. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
  583. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +18 -0
  584. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
  585. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +28 -0
  586. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
  587. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +28 -0
  588. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
  589. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +28 -0
  590. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
  591. package/shortcutContexts/commands/extendCellsSelection/toRows.js +18 -0
  592. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
  593. package/shortcutContexts/commands/extendCellsSelection/up.js +14 -0
  594. package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
  595. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +24 -0
  596. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +21 -0
  597. package/shortcutContexts/commands/index.js +35 -0
  598. package/shortcutContexts/commands/index.mjs +31 -0
  599. package/shortcutContexts/commands/moveCellSelection/down.js +12 -0
  600. package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
  601. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +32 -0
  602. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +29 -0
  603. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  604. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  605. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +11 -0
  606. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  607. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +11 -0
  608. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  609. package/shortcutContexts/commands/moveCellSelection/left.js +9 -0
  610. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  611. package/shortcutContexts/commands/moveCellSelection/right.js +9 -0
  612. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  613. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +16 -0
  614. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
  615. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +17 -0
  616. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
  617. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +13 -0
  618. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
  619. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +16 -0
  620. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
  621. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +18 -0
  622. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
  623. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +20 -0
  624. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
  625. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +16 -0
  626. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
  627. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +18 -0
  628. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
  629. package/shortcutContexts/commands/moveCellSelection/up.js +12 -0
  630. package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
  631. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +32 -0
  632. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +29 -0
  633. package/shortcutContexts/commands/populateSelectedCellsData.js +28 -0
  634. package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
  635. package/shortcutContexts/commands/scrollToFocusedCell.js +34 -0
  636. package/shortcutContexts/commands/scrollToFocusedCell.mjs +31 -0
  637. package/shortcutContexts/commands/selectAll.js +11 -0
  638. package/shortcutContexts/commands/selectAll.mjs +8 -0
  639. package/shortcutContexts/constants.js +11 -0
  640. package/shortcutContexts/constants.mjs +8 -0
  641. package/shortcutContexts/editor.js +25 -0
  642. package/shortcutContexts/editor.mjs +21 -0
  643. package/shortcutContexts/grid.js +167 -0
  644. package/shortcutContexts/grid.mjs +163 -0
  645. package/shortcutContexts/index.js +24 -0
  646. package/shortcutContexts/index.mjs +11 -0
  647. package/shortcuts/context.d.ts +1 -0
  648. package/shortcuts/context.js +23 -4
  649. package/shortcuts/context.mjs +23 -5
  650. package/shortcuts/manager.js +31 -7
  651. package/shortcuts/manager.mjs +32 -7
  652. package/shortcuts/recorder.js +30 -14
  653. package/shortcuts/recorder.mjs +30 -14
  654. package/shortcuts/utils.js +19 -5
  655. package/shortcuts/utils.mjs +18 -4
  656. package/tableView.js +113 -16
  657. package/tableView.mjs +113 -15
  658. package/utils/dataStructures/linkedList.js +1 -2
  659. package/utils/dataStructures/priorityMap.js +2 -4
  660. package/utils/dataStructures/queue.js +1 -2
  661. package/utils/dataStructures/stack.js +1 -2
  662. package/utils/dataStructures/tree.js +3 -6
  663. package/utils/ghostTable.js +32 -17
  664. package/utils/ghostTable.mjs +31 -15
  665. package/utils/interval.js +1 -2
  666. package/utils/paginator.js +151 -0
  667. package/utils/paginator.mjs +147 -0
  668. package/utils/parseTable.js +527 -83
  669. package/utils/parseTable.mjs +523 -82
  670. package/utils/rootInstance.js +2 -4
  671. package/utils/samplesGenerator.js +21 -13
  672. package/utils/samplesGenerator.mjs +20 -11
  673. package/utils/staticRegister.js +1 -2
  674. package/validators/autocompleteValidator/autocompleteValidator.js +1 -2
  675. package/validators/dateValidator/dateValidator.js +1 -2
  676. package/validators/numericValidator/numericValidator.js +1 -2
  677. package/validators/timeValidator/timeValidator.js +1 -2
  678. package/3rdparty/walkontable/src/selection.js +0 -295
  679. package/3rdparty/walkontable/src/selection.mjs +0 -290
  680. package/plugins/contextMenu/predefinedItems.js +0 -76
  681. package/plugins/contextMenu/predefinedItems.mjs +0 -68
  682. package/plugins/copyPaste/clipboardData.js +0 -18
  683. package/plugins/copyPaste/clipboardData.mjs +0 -14
  684. package/plugins/copyPaste/focusableElement.js +0 -186
  685. package/plugins/copyPaste/focusableElement.mjs +0 -180
  686. package/plugins/copyPaste/pasteEvent.js +0 -14
  687. package/plugins/copyPaste/pasteEvent.mjs +0 -9
  688. package/selection/highlight/constants.js +0 -15
  689. package/selection/highlight/constants.mjs +0 -6
  690. package/selection/highlight/types/index.js +0 -35
  691. package/selection/highlight/types/index.mjs +0 -31
@@ -2,21 +2,36 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
  require("core-js/modules/es.error.cause.js");
5
- var _highlight = _interopRequireDefault(require("./highlight/highlight"));
6
- var _constants = require("./highlight/constants");
5
+ var _src = require("./../3rdparty/walkontable/src");
6
+ var _highlight = _interopRequireWildcard(require("./highlight/highlight"));
7
7
  var _range = _interopRequireDefault(require("./range"));
8
8
  var _object = require("./../helpers/object");
9
9
  var _mixed = require("./../helpers/mixed");
10
+ var _number = require("./../helpers/number");
10
11
  var _array = require("./../helpers/array");
11
12
  var _localHooks = _interopRequireDefault(require("./../mixins/localHooks"));
12
13
  var _transformation = _interopRequireDefault(require("./transformation"));
13
14
  var _utils = require("./utils");
14
15
  var _templateLiteralTag = require("./../helpers/templateLiteralTag");
16
+ var _a11y = require("../helpers/a11y");
15
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
19
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
20
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
21
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
22
+ 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; }
23
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
24
+ 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); }
25
+ function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
26
+ 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; } }
27
+ function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
28
+ function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
29
+ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
16
30
  /**
17
31
  * @class Selection
18
32
  * @util
19
33
  */
34
+ var _disableHeadersHighlight = /*#__PURE__*/new WeakMap();
20
35
  class Selection {
21
36
  constructor(settings, tableProps) {
22
37
  var _this = this;
@@ -25,57 +40,73 @@ class Selection {
25
40
  *
26
41
  * @type {GridSettings}
27
42
  */
28
- this.settings = settings;
43
+ _defineProperty(this, "settings", void 0);
29
44
  /**
30
45
  * An additional object with dynamically defined properties which describes table state.
31
46
  *
32
47
  * @type {object}
33
48
  */
34
- this.tableProps = tableProps;
49
+ _defineProperty(this, "tableProps", void 0);
35
50
  /**
36
51
  * The flag which determines if the selection is in progress.
37
52
  *
38
53
  * @type {boolean}
39
54
  */
40
- this.inProgress = false;
55
+ _defineProperty(this, "inProgress", false);
41
56
  /**
42
- * The flag indicates that selection was performed by clicking the corner overlay.
57
+ * Selection data layer (handle visual coordinates).
43
58
  *
44
- * @type {boolean}
59
+ * @type {SelectionRange}
60
+ */
61
+ _defineProperty(this, "selectedRange", new _range.default((highlight, from, to) => {
62
+ return this.tableProps.createCellRange(highlight, from, to);
63
+ }));
64
+ /**
65
+ * Visualization layer.
66
+ *
67
+ * @type {Highlight}
68
+ */
69
+ _defineProperty(this, "highlight", void 0);
70
+ /**
71
+ * The module for modifying coordinates.
72
+ *
73
+ * @type {Transformation}
45
74
  */
46
- this.selectedByCorner = false;
75
+ _defineProperty(this, "transformation", void 0);
47
76
  /**
48
77
  * The collection of the selection layer levels where the whole row was selected using the row header or
49
78
  * the corner header.
50
79
  *
51
- * @type {Set.<number>}
80
+ * @type {Set<number>}
52
81
  */
53
- this.selectedByRowHeader = new Set();
82
+ _defineProperty(this, "selectedByRowHeader", new Set());
54
83
  /**
55
84
  * The collection of the selection layer levels where the whole column was selected using the column header or
56
85
  * the corner header.
57
86
  *
58
- * @type {Set.<number>}
87
+ * @type {Set<number>}
59
88
  */
60
- this.selectedByColumnHeader = new Set();
89
+ _defineProperty(this, "selectedByColumnHeader", new Set());
61
90
  /**
62
- * Selection data layer (handle visual coordinates).
91
+ * When sets disable highlighting the headers even when the logical coordinates points on them.
63
92
  *
64
- * @type {SelectionRange}
93
+ * @type {boolean}
65
94
  */
66
- this.selectedRange = new _range.default((highlight, from, to) => {
67
- return this.tableProps.createCellRange(highlight, from, to);
95
+ _classPrivateFieldInitSpec(this, _disableHeadersHighlight, {
96
+ writable: true,
97
+ value: false
68
98
  });
69
- /**
70
- * Visualization layer.
71
- *
72
- * @type {Highlight}
73
- */
99
+ this.settings = settings;
100
+ this.tableProps = tableProps;
74
101
  this.highlight = new _highlight.default({
75
102
  headerClassName: settings.currentHeaderClassName,
103
+ headerAttributes: [(0, _a11y.A11Y_SELECTED)()],
76
104
  activeHeaderClassName: settings.activeHeaderClassName,
77
105
  rowClassName: settings.currentRowClassName,
78
106
  columnClassName: settings.currentColClassName,
107
+ cellAttributes: [(0, _a11y.A11Y_SELECTED)()],
108
+ rowIndexMapper: this.tableProps.rowIndexMapper,
109
+ columnIndexMapper: this.tableProps.columnIndexMapper,
79
110
  disabledCellSelection: (row, column) => this.tableProps.isDisabledCellSelection(row, column),
80
111
  cellCornerVisible: function () {
81
112
  return _this.isCellCornerVisible(...arguments);
@@ -86,21 +117,19 @@ class Selection {
86
117
  visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),
87
118
  renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),
88
119
  createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
89
- createCellRange: (highlight, from, to) => this.tableProps.createCellRange(highlight, from, to),
90
- rowIndexMapper: () => this.tableProps.rowIndexMapper(),
91
- columnIndexMapper: () => this.tableProps.columnIndexMapper()
120
+ createCellRange: (highlight, from, to) => this.tableProps.createCellRange(highlight, from, to)
92
121
  });
93
- /**
94
- * The module for modifying coordinates.
95
- *
96
- * @type {Transformation}
97
- */
98
122
  this.transformation = new _transformation.default(this.selectedRange, {
99
- countRows: () => this.tableProps.countRowsTranslated(),
100
- countCols: () => this.tableProps.countColsTranslated(),
123
+ rowIndexMapper: this.tableProps.rowIndexMapper,
124
+ columnIndexMapper: this.tableProps.columnIndexMapper,
125
+ countRenderableRows: () => this.tableProps.countRenderableRows(),
126
+ countRenderableColumns: () => this.tableProps.countRenderableColumns(),
127
+ countRowHeaders: () => this.tableProps.countRowHeaders(),
128
+ countColHeaders: () => this.tableProps.countColHeaders(),
101
129
  visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),
102
130
  renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),
103
131
  createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
132
+ navigableHeaders: () => settings.navigableHeaders,
104
133
  fixedRowsBottom: () => settings.fixedRowsBottom,
105
134
  minSpareRows: () => settings.minSpareRows,
106
135
  minSpareCols: () => settings.minSpareCols,
@@ -143,6 +172,18 @@ class Selection {
143
172
  }
144
173
  return _this.runLocalHooks('insertColRequire', ...args);
145
174
  });
175
+ this.transformation.addLocalHook('beforeRowWrap', function () {
176
+ for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
177
+ args[_key7] = arguments[_key7];
178
+ }
179
+ return _this.runLocalHooks('beforeRowWrap', ...args);
180
+ });
181
+ this.transformation.addLocalHook('beforeColumnWrap', function () {
182
+ for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
183
+ args[_key8] = arguments[_key8];
184
+ }
185
+ return _this.runLocalHooks('beforeColumnWrap', ...args);
186
+ });
146
187
  }
147
188
 
148
189
  /**
@@ -155,14 +196,14 @@ class Selection {
155
196
  }
156
197
 
157
198
  /**
158
- * Indicate that selection process began. It sets internaly `.inProgress` property to `true`.
199
+ * Indicate that selection process began. It sets internally `.inProgress` property to `true`.
159
200
  */
160
201
  begin() {
161
202
  this.inProgress = true;
162
203
  }
163
204
 
164
205
  /**
165
- * Indicate that selection process finished. It sets internaly `.inProgress` property to `false`.
206
+ * Indicate that selection process finished. It sets internally `.inProgress` property to `false`.
166
207
  */
167
208
  finish() {
168
209
  this.runLocalHooks('afterSelectionFinished', Array.from(this.selectedRange));
@@ -187,33 +228,25 @@ class Selection {
187
228
  * the default trigger will be used.
188
229
  * @param {boolean} [fragment=false] If `true`, the selection will be treated as a partial selection where the
189
230
  * `setRangeEnd` method won't be called on every `setRangeStart` call.
231
+ * @param {CellCoords} [highlightCoords] If set, allows changing the coordinates of the highlight/focus cell.
190
232
  */
191
233
  setRangeStart(coords, multipleSelection) {
192
234
  let fragment = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
235
+ let highlightCoords = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : coords;
193
236
  const isMultipleMode = this.settings.selectionMode === 'multiple';
194
237
  const isMultipleSelection = (0, _mixed.isUndefined)(multipleSelection) ? this.tableProps.getShortcutManager().isCtrlPressed() : multipleSelection;
195
- const isRowNegative = coords.row < 0;
196
- const isColumnNegative = coords.col < 0;
197
- const selectedByCorner = isRowNegative && isColumnNegative;
198
238
  // We are creating copy. We would like to modify just the start of the selection by below hook. Then original coords
199
239
  // should be handled by next methods.
200
240
  const coordsClone = coords.clone();
201
- this.selectedByCorner = selectedByCorner;
202
241
  this.runLocalHooks(`beforeSetRangeStart${fragment ? 'Only' : ''}`, coordsClone);
203
242
  if (!isMultipleMode || isMultipleMode && !isMultipleSelection && (0, _mixed.isUndefined)(multipleSelection)) {
204
243
  this.selectedRange.clear();
205
244
  }
206
- this.selectedRange.add(coordsClone);
245
+ this.selectedRange.add(coordsClone).current().setHighlight(highlightCoords.clone());
207
246
  if (this.getLayerLevel() === 0) {
208
247
  this.selectedByRowHeader.clear();
209
248
  this.selectedByColumnHeader.clear();
210
249
  }
211
- if (!selectedByCorner && isColumnNegative) {
212
- this.selectedByRowHeader.add(this.getLayerLevel());
213
- }
214
- if (!selectedByCorner && isRowNegative) {
215
- this.selectedByColumnHeader.add(this.getLayerLevel());
216
- }
217
250
  if (!fragment) {
218
251
  this.setRangeEnd(coords);
219
252
  }
@@ -226,9 +259,11 @@ class Selection {
226
259
  * @param {boolean} [multipleSelection] If `true`, selection will be worked in 'multiple' mode. This option works
227
260
  * only when 'selectionMode' is set as 'multiple'. If the argument is not defined
228
261
  * the default trigger will be used.
262
+ * @param {CellCoords} [highlightCoords] If set, allows changing the coordinates of the highlight/focus cell.
229
263
  */
230
264
  setRangeStartOnly(coords, multipleSelection) {
231
- this.setRangeStart(coords, multipleSelection, true);
265
+ let highlightCoords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : coords;
266
+ this.setRangeStart(coords, multipleSelection, true, highlightCoords);
232
267
  }
233
268
 
234
269
  /**
@@ -240,21 +275,40 @@ class Selection {
240
275
  if (this.selectedRange.isEmpty()) {
241
276
  return;
242
277
  }
243
-
244
- // We are creating copy. We would like to modify just the end of the selection by below hook. Then original coords
245
- // should be handled by next methods.
246
278
  const coordsClone = coords.clone();
279
+ const countRows = this.tableProps.countRows();
280
+ const countCols = this.tableProps.countCols();
281
+ const isSingle = this.selectedRange.current().clone().setTo(coords).isSingleHeader();
282
+
283
+ // Ignore processing the end range when the header selection starts overlapping the corner and
284
+ // the selection is not a single header highlight.
285
+ if ((countRows > 0 || countCols > 0) && (countRows === 0 && coordsClone.col < 0 && !isSingle || countCols === 0 && coordsClone.row < 0 && !isSingle)) {
286
+ return;
287
+ }
247
288
  this.runLocalHooks('beforeSetRangeEnd', coordsClone);
248
289
  this.begin();
249
290
  const cellRange = this.selectedRange.current();
250
- if (this.settings.selectionMode !== 'single') {
251
- cellRange.setTo(this.tableProps.createCellCoords(coordsClone.row, coordsClone.col));
291
+ if (!this.settings.navigableHeaders) {
292
+ cellRange.highlight.normalize();
293
+ }
294
+ if (this.settings.selectionMode === 'single') {
295
+ cellRange.setFrom(cellRange.highlight);
296
+ cellRange.setTo(cellRange.highlight);
297
+ } else {
298
+ cellRange.setTo(coordsClone);
252
299
  }
253
300
 
254
- // Set up current selection.
255
- this.highlight.getCell().clear();
256
- if (this.highlight.isEnabledFor(_constants.CELL_TYPE, cellRange.highlight)) {
257
- this.highlight.getCell().add(this.selectedRange.current().highlight).commit().syncWith(cellRange);
301
+ // Prevent creating "area" selection that overlaps headers.
302
+ if (countRows > 0 && countCols > 0) {
303
+ if (!this.settings.navigableHeaders || this.settings.navigableHeaders && !cellRange.isSingleHeader()) {
304
+ cellRange.to.normalize();
305
+ }
306
+ }
307
+ this.runLocalHooks('beforeHighlightSet');
308
+ const focusHighlight = this.highlight.getFocus();
309
+ focusHighlight.clear();
310
+ if (this.highlight.isEnabledFor(_highlight.FOCUS_TYPE, cellRange.highlight)) {
311
+ focusHighlight.add(this.selectedRange.current().highlight).commit().syncWith(cellRange);
258
312
  }
259
313
  const layerLevel = this.getLayerLevel();
260
314
 
@@ -262,69 +316,80 @@ class Selection {
262
316
  // indication that the new selection is performing.
263
317
  if (layerLevel < this.highlight.layerLevel) {
264
318
  (0, _array.arrayEach)(this.highlight.getAreas(), highlight => void highlight.clear());
265
- (0, _array.arrayEach)(this.highlight.getHeaders(), highlight => void highlight.clear());
266
- (0, _array.arrayEach)(this.highlight.getActiveHeaders(), highlight => void highlight.clear());
319
+ (0, _array.arrayEach)(this.highlight.getLayeredAreas(), highlight => void highlight.clear());
320
+ (0, _array.arrayEach)(this.highlight.getRowHeaders(), highlight => void highlight.clear());
321
+ (0, _array.arrayEach)(this.highlight.getColumnHeaders(), highlight => void highlight.clear());
322
+ (0, _array.arrayEach)(this.highlight.getActiveRowHeaders(), highlight => void highlight.clear());
323
+ (0, _array.arrayEach)(this.highlight.getActiveColumnHeaders(), highlight => void highlight.clear());
324
+ (0, _array.arrayEach)(this.highlight.getActiveCornerHeaders(), highlight => void highlight.clear());
325
+ (0, _array.arrayEach)(this.highlight.getRowHighlights(), highlight => void highlight.clear());
326
+ (0, _array.arrayEach)(this.highlight.getColumnHighlights(), highlight => void highlight.clear());
267
327
  }
268
328
  this.highlight.useLayerLevel(layerLevel);
269
- const areaHighlight = this.highlight.createOrGetArea();
270
- const headerHighlight = this.highlight.createOrGetHeader();
271
- const activeHeaderHighlight = this.highlight.createOrGetActiveHeader();
329
+ const areaHighlight = this.highlight.createArea();
330
+ const layeredAreaHighlight = this.highlight.createLayeredArea();
331
+ const rowHeaderHighlight = this.highlight.createRowHeader();
332
+ const columnHeaderHighlight = this.highlight.createColumnHeader();
333
+ const activeRowHeaderHighlight = this.highlight.createActiveRowHeader();
334
+ const activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();
335
+ const activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();
336
+ const rowHighlight = this.highlight.createRowHighlight();
337
+ const columnHighlight = this.highlight.createColumnHighlight();
272
338
  areaHighlight.clear();
273
- headerHighlight.clear();
274
- activeHeaderHighlight.clear();
275
- if (this.highlight.isEnabledFor(_constants.AREA_TYPE, cellRange.highlight) && (this.isMultiple() || layerLevel >= 1)) {
339
+ layeredAreaHighlight.clear();
340
+ rowHeaderHighlight.clear();
341
+ columnHeaderHighlight.clear();
342
+ activeRowHeaderHighlight.clear();
343
+ activeColumnHeaderHighlight.clear();
344
+ activeCornerHeaderHighlight.clear();
345
+ rowHighlight.clear();
346
+ columnHighlight.clear();
347
+ if (this.highlight.isEnabledFor(_highlight.AREA_TYPE, cellRange.highlight) && (this.isMultiple() || layerLevel >= 1)) {
276
348
  areaHighlight.add(cellRange.from).add(cellRange.to).commit();
349
+ layeredAreaHighlight.add(cellRange.from).add(cellRange.to).commit();
277
350
  if (layerLevel === 1) {
278
351
  // For single cell selection in the same layer, we do not create area selection to prevent blue background.
279
352
  // When non-consecutive selection is performed we have to add that missing area selection to the previous layer
280
353
  // based on previous coordinates. It only occurs when the previous selection wasn't select multiple cells.
281
354
  const previousRange = this.selectedRange.previous();
282
- this.highlight.useLayerLevel(layerLevel - 1).createOrGetArea().add(previousRange.from).commit()
355
+ this.highlight.useLayerLevel(layerLevel - 1);
356
+ this.highlight.createArea().add(previousRange.from).commit()
357
+ // Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).
358
+ .syncWith(previousRange);
359
+ this.highlight.createLayeredArea().add(previousRange.from).commit()
283
360
  // Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).
284
361
  .syncWith(previousRange);
285
362
  this.highlight.useLayerLevel(layerLevel);
286
363
  }
287
364
  }
288
- if (this.highlight.isEnabledFor(_constants.HEADER_TYPE, cellRange.highlight)) {
289
- // The header selection generally contains cell selection. In a case when all rows (or columns)
290
- // are hidden that visual coordinates are translated to renderable coordinates that do not exist.
291
- // Hence no header highlight is generated. In that case, to make a column (or a row) header
292
- // highlight, the row and column index has to point to the header (the negative value). See #7052.
293
- const areAnyRowsRendered = this.tableProps.countRowsTranslated() === 0;
294
- const areAnyColumnsRendered = this.tableProps.countColsTranslated() === 0;
295
- let headerCellRange = cellRange;
296
- if (areAnyRowsRendered || areAnyColumnsRendered) {
297
- headerCellRange = cellRange.clone();
298
- }
299
- if (areAnyRowsRendered) {
300
- headerCellRange.from.row = -1;
301
- }
302
- if (areAnyColumnsRendered) {
303
- headerCellRange.from.col = -1;
304
- }
305
- if (this.settings.selectionMode === 'single') {
306
- if (this.isSelectedByAnyHeader()) {
307
- headerCellRange.from.normalize();
365
+ if (this.highlight.isEnabledFor(_highlight.HEADER_TYPE, cellRange.highlight)) {
366
+ if (!cellRange.isSingleHeader()) {
367
+ const rowCoordsFrom = this.tableProps.createCellCoords(Math.max(cellRange.from.row, 0), -1);
368
+ const rowCoordsTo = this.tableProps.createCellCoords(cellRange.to.row, -1);
369
+ const columnCoordsFrom = this.tableProps.createCellCoords(-1, Math.max(cellRange.from.col, 0));
370
+ const columnCoordsTo = this.tableProps.createCellCoords(-1, cellRange.to.col);
371
+ if (this.settings.selectionMode === 'single') {
372
+ rowHeaderHighlight.add(rowCoordsFrom).commit();
373
+ columnHeaderHighlight.add(columnCoordsFrom).commit();
374
+ rowHighlight.add(rowCoordsFrom).commit();
375
+ columnHighlight.add(columnCoordsFrom).commit();
376
+ } else {
377
+ rowHeaderHighlight.add(rowCoordsFrom).add(rowCoordsTo).commit();
378
+ columnHeaderHighlight.add(columnCoordsFrom).add(columnCoordsTo).commit();
379
+ rowHighlight.add(rowCoordsFrom).add(rowCoordsTo).commit();
380
+ columnHighlight.add(columnCoordsFrom).add(columnCoordsTo).commit();
308
381
  }
309
- headerHighlight.add(headerCellRange.from).commit();
310
- } else {
311
- headerHighlight.add(headerCellRange.from).add(headerCellRange.to).commit();
312
382
  }
313
- if (this.isEntireRowSelected()) {
314
- const isRowSelected = this.tableProps.countCols() === cellRange.getWidth();
315
-
316
- // Make sure that the whole row is selected (in case where selectionMode is set to 'single')
317
- if (isRowSelected) {
318
- activeHeaderHighlight.add(this.tableProps.createCellCoords(cellRange.from.row, -1)).add(this.tableProps.createCellCoords(cellRange.to.row, -1)).commit();
319
- }
383
+ const highlightRowHeaders = !_classPrivateFieldGet(this, _disableHeadersHighlight) && this.isEntireRowSelected() && (countCols > 0 && countCols === cellRange.getWidth() || countCols === 0 && this.isSelectedByRowHeader());
384
+ const highlightColumnHeaders = !_classPrivateFieldGet(this, _disableHeadersHighlight) && this.isEntireColumnSelected() && (countRows > 0 && countRows === cellRange.getHeight() || countRows === 0 && this.isSelectedByColumnHeader());
385
+ if (highlightRowHeaders) {
386
+ activeRowHeaderHighlight.add(this.tableProps.createCellCoords(Math.max(cellRange.from.row, 0), Math.min(-this.tableProps.countRowHeaders(), -1))).add(this.tableProps.createCellCoords(Math.max(cellRange.to.row, 0), -1)).commit();
320
387
  }
321
- if (this.isEntireColumnSelected()) {
322
- const isColumnSelected = this.tableProps.countRows() === cellRange.getHeight();
323
-
324
- // Make sure that the whole column is selected (in case where selectionMode is set to 'single')
325
- if (isColumnSelected) {
326
- activeHeaderHighlight.add(this.tableProps.createCellCoords(-1, cellRange.from.col)).add(this.tableProps.createCellCoords(-1, cellRange.to.col)).commit();
327
- }
388
+ if (highlightColumnHeaders) {
389
+ activeColumnHeaderHighlight.add(this.tableProps.createCellCoords(Math.min(-this.tableProps.countColHeaders(), -1), Math.max(cellRange.from.col, 0))).add(this.tableProps.createCellCoords(-1, Math.max(cellRange.to.col, 0))).commit();
390
+ }
391
+ if (highlightRowHeaders && highlightColumnHeaders) {
392
+ activeCornerHeaderHighlight.add(this.tableProps.createCellCoords(-this.tableProps.countColHeaders(), -this.tableProps.countRowHeaders())).add(this.tableProps.createCellCoords(-1, -1)).commit();
328
393
  }
329
394
  }
330
395
  this.runLocalHooks('afterSetRangeEnd', coords);
@@ -347,12 +412,12 @@ class Selection {
347
412
  *
348
413
  * @param {number} rowDelta Rows number to move, value can be passed as negative number.
349
414
  * @param {number} colDelta Columns number to move, value can be passed as negative number.
350
- * @param {boolean} [force=false] If `true` the new rows/columns will be created if necessary. Otherwise, row/column will
351
- * be created according to `minSpareRows/minSpareCols` settings of Handsontable.
415
+ * @param {boolean} [createMissingRecords=false] If `true` the new rows/columns will be created if necessary.
416
+ * Otherwise, row/column will be created according to `minSpareRows/minSpareCols` settings of Handsontable.
352
417
  */
353
418
  transformStart(rowDelta, colDelta) {
354
- let force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
355
- this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta, force));
419
+ let createMissingRecords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
420
+ this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta, createMissingRecords));
356
421
  }
357
422
 
358
423
  /**
@@ -393,7 +458,7 @@ class Selection {
393
458
  */
394
459
  isSelectedByRowHeader() {
395
460
  let layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
396
- return !this.isSelectedByCorner(layerLevel) && this.isEntireRowSelected(layerLevel);
461
+ return !this.isSelectedByCorner(layerLevel) && (layerLevel === -1 ? this.selectedByRowHeader.size > 0 : this.selectedByRowHeader.has(layerLevel));
397
462
  }
398
463
 
399
464
  /**
@@ -405,7 +470,19 @@ class Selection {
405
470
  */
406
471
  isEntireRowSelected() {
407
472
  let layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
408
- return layerLevel === -1 ? this.selectedByRowHeader.size > 0 : this.selectedByRowHeader.has(layerLevel);
473
+ const tester = range => {
474
+ const {
475
+ col
476
+ } = range.getOuterTopStartCorner();
477
+ const rowHeaders = this.tableProps.countRowHeaders();
478
+ const countCols = this.tableProps.countCols();
479
+ return (rowHeaders > 0 && col < 0 || rowHeaders === 0) && range.getWidth() === countCols;
480
+ };
481
+ if (layerLevel === -1) {
482
+ return Array.from(this.selectedRange).some(range => tester(range));
483
+ }
484
+ const range = this.selectedRange.peekByIndex(layerLevel);
485
+ return range ? tester(range) : false;
409
486
  }
410
487
 
411
488
  /**
@@ -418,7 +495,7 @@ class Selection {
418
495
  */
419
496
  isSelectedByColumnHeader() {
420
497
  let layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
421
- return !this.isSelectedByCorner() && this.isEntireColumnSelected(layerLevel);
498
+ return !this.isSelectedByCorner() && (layerLevel === -1 ? this.selectedByColumnHeader.size > 0 : this.selectedByColumnHeader.has(layerLevel));
422
499
  }
423
500
 
424
501
  /**
@@ -430,7 +507,19 @@ class Selection {
430
507
  */
431
508
  isEntireColumnSelected() {
432
509
  let layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
433
- return layerLevel === -1 ? this.selectedByColumnHeader.size > 0 : this.selectedByColumnHeader.has(layerLevel);
510
+ const tester = range => {
511
+ const {
512
+ row
513
+ } = range.getOuterTopStartCorner();
514
+ const colHeaders = this.tableProps.countColHeaders();
515
+ const countRows = this.tableProps.countRows();
516
+ return (colHeaders > 0 && row < 0 || colHeaders === 0) && range.getHeight() === countRows;
517
+ };
518
+ if (layerLevel === -1) {
519
+ return Array.from(this.selectedRange).some(range => tester(range));
520
+ }
521
+ const range = this.selectedRange.peekByIndex(layerLevel);
522
+ return range ? tester(range) : false;
434
523
  }
435
524
 
436
525
  /**
@@ -448,7 +537,7 @@ class Selection {
448
537
  * @returns {boolean}
449
538
  */
450
539
  isSelectedByCorner() {
451
- return this.selectedByCorner;
540
+ return this.selectedByColumnHeader.has(this.getLayerLevel()) && this.selectedByRowHeader.has(this.getLayerLevel());
452
541
  }
453
542
 
454
543
  /**
@@ -507,31 +596,61 @@ class Selection {
507
596
  }
508
597
 
509
598
  /**
510
- * Select all cells.
599
+ * Selects all cells and headers.
511
600
  *
512
- * @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers, `false`
513
- * otherwise.
514
- * @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column headers, `false`
515
- * otherwise.
601
+ * @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers,
602
+ * `false` otherwise.
603
+ * @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column
604
+ * headers, `false` otherwise.
605
+ * @param {object} [options] Additional object with options.
606
+ * @param {{row: number, col: number} | boolean} [options.focusPosition] The argument allows changing the cell/header
607
+ * focus position. The value takes an object with a `row` and `col` properties from -N to N, where
608
+ * negative values point to the headers and positive values point to the cell range. If `false`, the focus
609
+ * position won't be changed.
610
+ * @param {boolean} [options.disableHeadersHighlight] If `true`, disables highlighting the headers even when
611
+ * the logical coordinates points on them.
516
612
  */
517
613
  selectAll() {
614
+ var _this$getSelectedRang;
518
615
  let includeRowHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
519
616
  let includeColumnHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
617
+ let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
618
+ focusPosition: false,
619
+ disableHeadersHighlight: false
620
+ };
520
621
  const nrOfRows = this.tableProps.countRows();
521
622
  const nrOfColumns = this.tableProps.countCols();
623
+ const countRowHeaders = this.tableProps.countRowHeaders();
624
+ const countColHeaders = this.tableProps.countColHeaders();
625
+ const rowFrom = includeColumnHeaders ? -countColHeaders : 0;
626
+ const columnFrom = includeRowHeaders ? -countRowHeaders : 0;
522
627
 
523
628
  // We can't select cells when there is no data.
524
- if (!includeRowHeaders && !includeColumnHeaders && (nrOfRows === 0 || nrOfColumns === 0)) {
629
+ if (rowFrom === 0 && columnFrom === 0 && (nrOfRows === 0 || nrOfColumns === 0)) {
525
630
  return;
526
631
  }
527
- const startCoords = this.tableProps.createCellCoords(includeColumnHeaders ? -1 : 0, includeRowHeaders ? -1 : 0);
632
+ let highlight = (_this$getSelectedRang = this.getSelectedRange().current()) === null || _this$getSelectedRang === void 0 ? void 0 : _this$getSelectedRang.highlight;
633
+ const {
634
+ focusPosition,
635
+ disableHeadersHighlight
636
+ } = options;
637
+ _classPrivateFieldSet(this, _disableHeadersHighlight, disableHeadersHighlight);
638
+ if (focusPosition && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.row) && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.col)) {
639
+ highlight = this.tableProps.createCellCoords((0, _number.clamp)(focusPosition.row, rowFrom, nrOfRows - 1), (0, _number.clamp)(focusPosition.col, columnFrom, nrOfColumns - 1));
640
+ }
641
+ const startCoords = this.tableProps.createCellCoords(rowFrom, columnFrom);
528
642
  const endCoords = this.tableProps.createCellCoords(nrOfRows - 1, nrOfColumns - 1);
529
643
  this.clear();
530
- this.setRangeStartOnly(startCoords);
531
- this.selectedByRowHeader.add(this.getLayerLevel());
532
- this.selectedByColumnHeader.add(this.getLayerLevel());
644
+ this.setRangeStartOnly(startCoords, void 0, highlight);
645
+ if (columnFrom < 0) {
646
+ this.selectedByRowHeader.add(this.getLayerLevel());
647
+ }
648
+ if (rowFrom < 0) {
649
+ this.selectedByColumnHeader.add(this.getLayerLevel());
650
+ }
533
651
  this.setRangeEnd(endCoords);
534
652
  this.finish();
653
+ _classPrivateFieldSet(this, _disableHeadersHighlight, false);
535
654
  }
536
655
 
537
656
  /**
@@ -556,21 +675,29 @@ class Selection {
556
675
  propToCol: prop => this.tableProps.propToCol(prop),
557
676
  keepDirection: true
558
677
  });
559
- const nrOfRows = this.tableProps.countRows();
560
- const nrOfColumns = this.tableProps.countCols();
678
+ const navigableHeaders = this.settings.navigableHeaders;
679
+ const tableParams = {
680
+ countRows: this.tableProps.countRows(),
681
+ countCols: this.tableProps.countCols(),
682
+ countRowHeaders: navigableHeaders ? this.tableProps.countRowHeaders() : 0,
683
+ countColHeaders: navigableHeaders ? this.tableProps.countColHeaders() : 0
684
+ };
561
685
 
562
686
  // Check if every layer of the coordinates are valid.
563
687
  const isValid = !selectionRanges.some(selection => {
564
- const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);
565
- const _isValid = (0, _utils.isValidCoord)(rowStart, nrOfRows) && (0, _utils.isValidCoord)(columnStart, nrOfColumns) && (0, _utils.isValidCoord)(rowEnd, nrOfRows) && (0, _utils.isValidCoord)(columnEnd, nrOfColumns);
566
- return !_isValid;
688
+ const cellRange = selectionSchemaNormalizer(selection);
689
+ const rangeValidity = cellRange.isValid(tableParams);
690
+ return !(rangeValidity && !cellRange.containsHeaders() || rangeValidity && cellRange.containsHeaders() && cellRange.isSingleHeader());
567
691
  });
568
692
  if (isValid) {
569
693
  this.clear();
570
694
  (0, _array.arrayEach)(selectionRanges, selection => {
571
- const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);
572
- this.setRangeStartOnly(this.tableProps.createCellCoords(rowStart, columnStart), false);
573
- this.setRangeEnd(this.tableProps.createCellCoords(rowEnd, columnEnd));
695
+ const {
696
+ from,
697
+ to
698
+ } = selectionSchemaNormalizer(selection);
699
+ this.setRangeStartOnly(from.clone(), false);
700
+ this.setRangeEnd(to.clone());
574
701
  this.finish();
575
702
  });
576
703
  }
@@ -583,22 +710,43 @@ class Selection {
583
710
  *
584
711
  * @param {number|string} startColumn Visual column index or column property from which the selection starts.
585
712
  * @param {number|string} [endColumn] Visual column index or column property from to the selection finishes.
586
- * @param {number} [headerLevel=-1] A row header index that triggers the column selection. The value can
587
- * take -1 to -N, where -1 means the header closest to the cells.
588
- *
713
+ * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
714
+ * The value can take visual row index from -N to N, where negative values
715
+ * point to the headers and positive values point to the cell range.
589
716
  * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
590
717
  */
591
718
  selectColumns(startColumn) {
592
719
  let endColumn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startColumn;
593
- let headerLevel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;
720
+ let focusPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
594
721
  const start = typeof startColumn === 'string' ? this.tableProps.propToCol(startColumn) : startColumn;
595
722
  const end = typeof endColumn === 'string' ? this.tableProps.propToCol(endColumn) : endColumn;
596
- const nrOfColumns = this.tableProps.countCols();
597
- const nrOfRows = this.tableProps.countRows();
598
- const isValid = (0, _utils.isValidCoord)(start, nrOfColumns) && (0, _utils.isValidCoord)(end, nrOfColumns);
723
+ const countRows = this.tableProps.countRows();
724
+ const countCols = this.tableProps.countCols();
725
+ const countColHeaders = this.tableProps.countColHeaders();
726
+ const columnHeaderLastIndex = countColHeaders === 0 ? 0 : -countColHeaders;
727
+ const fromCoords = new _src.CellCoords(columnHeaderLastIndex, start);
728
+ const toCoords = new _src.CellCoords(countRows - 1, end);
729
+ const isValid = new _src.CellRange(fromCoords, fromCoords, toCoords).isValid({
730
+ countRows,
731
+ countCols,
732
+ countRowHeaders: 0,
733
+ countColHeaders
734
+ });
599
735
  if (isValid) {
600
- this.setRangeStartOnly(this.tableProps.createCellCoords(headerLevel, start));
601
- this.setRangeEnd(this.tableProps.createCellCoords(nrOfRows - 1, end));
736
+ const fromRow = countColHeaders === 0 ? 0 : (0, _number.clamp)(focusPosition, columnHeaderLastIndex, -1);
737
+ const toRow = countRows - 1;
738
+ const from = this.tableProps.createCellCoords(fromRow, start);
739
+ const to = this.tableProps.createCellCoords(toRow, end);
740
+ const highlight = this.tableProps.createCellCoords((0, _number.clamp)(focusPosition, columnHeaderLastIndex, countRows - 1), start);
741
+ this.runLocalHooks('beforeSelectColumns', from, to, highlight);
742
+
743
+ // disallow modifying row axis for that hooks
744
+ from.row = fromRow;
745
+ to.row = toRow;
746
+ this.setRangeStartOnly(from, void 0, highlight);
747
+ this.selectedByColumnHeader.add(this.getLayerLevel());
748
+ this.setRangeEnd(to);
749
+ this.runLocalHooks('afterSelectColumns', from, to, highlight);
602
750
  this.finish();
603
751
  }
604
752
  return isValid;
@@ -609,20 +757,41 @@ class Selection {
609
757
  *
610
758
  * @param {number} startRow Visual row index from which the selection starts.
611
759
  * @param {number} [endRow] Visual row index from to the selection finishes.
612
- * @param {number} [headerLevel=-1] A column header index that triggers the row selection.
613
- * The value can take -1 to -N, where -1 means the header
614
- * closest to the cells.
760
+ * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
761
+ * The value can take visual column index from -N to N, where negative values
762
+ * point to the headers and positive values point to the cell range.
615
763
  * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
616
764
  */
617
765
  selectRows(startRow) {
618
766
  let endRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startRow;
619
- let headerLevel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;
620
- const nrOfRows = this.tableProps.countRows();
621
- const nrOfColumns = this.tableProps.countCols();
622
- const isValid = (0, _utils.isValidCoord)(startRow, nrOfRows) && (0, _utils.isValidCoord)(endRow, nrOfRows);
767
+ let focusPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
768
+ const countRows = this.tableProps.countRows();
769
+ const countCols = this.tableProps.countCols();
770
+ const countRowHeaders = this.tableProps.countRowHeaders();
771
+ const rowHeaderLastIndex = countRowHeaders === 0 ? 0 : -countRowHeaders;
772
+ const fromCoords = new _src.CellCoords(startRow, rowHeaderLastIndex);
773
+ const toCoords = new _src.CellCoords(endRow, countCols - 1);
774
+ const isValid = new _src.CellRange(fromCoords, fromCoords, toCoords).isValid({
775
+ countRows,
776
+ countCols,
777
+ countRowHeaders,
778
+ countColHeaders: 0
779
+ });
623
780
  if (isValid) {
624
- this.setRangeStartOnly(this.tableProps.createCellCoords(startRow, headerLevel));
625
- this.setRangeEnd(this.tableProps.createCellCoords(endRow, nrOfColumns - 1));
781
+ const fromColumn = countRowHeaders === 0 ? 0 : (0, _number.clamp)(focusPosition, rowHeaderLastIndex, -1);
782
+ const toColumn = countCols - 1;
783
+ const from = this.tableProps.createCellCoords(startRow, fromColumn);
784
+ const to = this.tableProps.createCellCoords(endRow, toColumn);
785
+ const highlight = this.tableProps.createCellCoords(startRow, (0, _number.clamp)(focusPosition, rowHeaderLastIndex, countCols - 1));
786
+ this.runLocalHooks('beforeSelectRows', from, to, highlight);
787
+
788
+ // disallow modifying column axis for that hooks
789
+ from.col = fromColumn;
790
+ to.col = toColumn;
791
+ this.setRangeStartOnly(from, void 0, highlight);
792
+ this.selectedByRowHeader.add(this.getLayerLevel());
793
+ this.setRangeEnd(to);
794
+ this.runLocalHooks('afterSelectRows', from, to, highlight);
626
795
  this.finish();
627
796
  }
628
797
  return isValid;
@@ -639,19 +808,31 @@ class Selection {
639
808
  if (!this.isSelected()) {
640
809
  return;
641
810
  }
642
- const cellHighlight = this.highlight.getCell();
811
+ const focusHighlight = this.highlight.getFocus();
643
812
  const currentLayer = this.getLayerLevel();
644
- cellHighlight.commit().syncWith(this.selectedRange.current());
813
+ focusHighlight.commit().syncWith(this.selectedRange.current());
645
814
 
646
815
  // Rewriting rendered ranges going through all layers.
647
816
  for (let layerLevel = 0; layerLevel < this.selectedRange.size(); layerLevel += 1) {
648
817
  this.highlight.useLayerLevel(layerLevel);
649
- const areaHighlight = this.highlight.createOrGetArea();
650
- const headerHighlight = this.highlight.createOrGetHeader();
651
- const activeHeaderHighlight = this.highlight.createOrGetActiveHeader();
818
+ const areaHighlight = this.highlight.createArea();
819
+ const areaLayeredHighlight = this.highlight.createLayeredArea();
820
+ const rowHeaderHighlight = this.highlight.createRowHeader();
821
+ const columnHeaderHighlight = this.highlight.createColumnHeader();
822
+ const activeRowHeaderHighlight = this.highlight.createActiveRowHeader();
823
+ const activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();
824
+ const activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();
825
+ const rowHighlight = this.highlight.createRowHighlight();
826
+ const columnHighlight = this.highlight.createColumnHighlight();
652
827
  areaHighlight.commit();
653
- headerHighlight.commit();
654
- activeHeaderHighlight.commit();
828
+ areaLayeredHighlight.commit();
829
+ rowHeaderHighlight.commit();
830
+ columnHeaderHighlight.commit();
831
+ activeRowHeaderHighlight.commit();
832
+ activeColumnHeaderHighlight.commit();
833
+ activeCornerHeaderHighlight.commit();
834
+ rowHighlight.commit();
835
+ columnHighlight.commit();
655
836
  }
656
837
 
657
838
  // Reverting starting layer for the Highlight.
@@ -659,5 +840,4 @@ class Selection {
659
840
  }
660
841
  }
661
842
  (0, _object.mixin)(Selection, _localHooks.default);
662
- var _default = Selection;
663
- exports.default = _default;
843
+ var _default = exports.default = Selection;