handsontable 13.1.0 → 14.0.0-next-e8f87aa-20231030

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 +23133 -15992
  127. package/dist/handsontable.full.min.css +8 -8
  128. package/dist/handsontable.full.min.js +170 -152
  129. package/dist/handsontable.js +21856 -15085
  130. package/dist/handsontable.min.css +7 -7
  131. package/dist/handsontable.min.js +30 -22
  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 +118 -67
  409. package/plugins/filters/filters.mjs +109 -56
  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
@@ -1,18 +1,31 @@
1
1
  import "core-js/modules/es.error.cause.js";
2
- import Highlight from "./highlight/highlight.mjs";
3
- import { AREA_TYPE, HEADER_TYPE, CELL_TYPE } from "./highlight/constants.mjs";
2
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
3
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
4
+ 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; }
5
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
6
+ 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); }
7
+ function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
8
+ 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; } }
9
+ function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
10
+ function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
11
+ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
12
+ import { CellCoords, CellRange } from "./../3rdparty/walkontable/src/index.mjs";
13
+ import Highlight, { AREA_TYPE, HEADER_TYPE, FOCUS_TYPE } from "./highlight/highlight.mjs";
4
14
  import SelectionRange from "./range.mjs";
5
15
  import { createObjectPropListener, mixin } from "./../helpers/object.mjs";
6
16
  import { isUndefined } from "./../helpers/mixed.mjs";
17
+ import { clamp } from "./../helpers/number.mjs";
7
18
  import { arrayEach } from "./../helpers/array.mjs";
8
19
  import localHooks from "./../mixins/localHooks.mjs";
9
20
  import Transformation from "./transformation.mjs";
10
- import { detectSelectionType, isValidCoord, normalizeSelectionFactory, SELECTION_TYPE_EMPTY, SELECTION_TYPE_UNRECOGNIZED } from "./utils.mjs";
21
+ import { detectSelectionType, normalizeSelectionFactory, SELECTION_TYPE_EMPTY, SELECTION_TYPE_UNRECOGNIZED } from "./utils.mjs";
11
22
  import { toSingleLine } from "./../helpers/templateLiteralTag.mjs";
23
+ import { A11Y_SELECTED } from "../helpers/a11y.mjs";
12
24
  /**
13
25
  * @class Selection
14
26
  * @util
15
27
  */
28
+ var _disableHeadersHighlight = /*#__PURE__*/new WeakMap();
16
29
  class Selection {
17
30
  constructor(settings, tableProps) {
18
31
  var _this = this;
@@ -21,57 +34,73 @@ class Selection {
21
34
  *
22
35
  * @type {GridSettings}
23
36
  */
24
- this.settings = settings;
37
+ _defineProperty(this, "settings", void 0);
25
38
  /**
26
39
  * An additional object with dynamically defined properties which describes table state.
27
40
  *
28
41
  * @type {object}
29
42
  */
30
- this.tableProps = tableProps;
43
+ _defineProperty(this, "tableProps", void 0);
31
44
  /**
32
45
  * The flag which determines if the selection is in progress.
33
46
  *
34
47
  * @type {boolean}
35
48
  */
36
- this.inProgress = false;
49
+ _defineProperty(this, "inProgress", false);
37
50
  /**
38
- * The flag indicates that selection was performed by clicking the corner overlay.
51
+ * Selection data layer (handle visual coordinates).
39
52
  *
40
- * @type {boolean}
53
+ * @type {SelectionRange}
54
+ */
55
+ _defineProperty(this, "selectedRange", new SelectionRange((highlight, from, to) => {
56
+ return this.tableProps.createCellRange(highlight, from, to);
57
+ }));
58
+ /**
59
+ * Visualization layer.
60
+ *
61
+ * @type {Highlight}
62
+ */
63
+ _defineProperty(this, "highlight", void 0);
64
+ /**
65
+ * The module for modifying coordinates.
66
+ *
67
+ * @type {Transformation}
41
68
  */
42
- this.selectedByCorner = false;
69
+ _defineProperty(this, "transformation", void 0);
43
70
  /**
44
71
  * The collection of the selection layer levels where the whole row was selected using the row header or
45
72
  * the corner header.
46
73
  *
47
- * @type {Set.<number>}
74
+ * @type {Set<number>}
48
75
  */
49
- this.selectedByRowHeader = new Set();
76
+ _defineProperty(this, "selectedByRowHeader", new Set());
50
77
  /**
51
78
  * The collection of the selection layer levels where the whole column was selected using the column header or
52
79
  * the corner header.
53
80
  *
54
- * @type {Set.<number>}
81
+ * @type {Set<number>}
55
82
  */
56
- this.selectedByColumnHeader = new Set();
83
+ _defineProperty(this, "selectedByColumnHeader", new Set());
57
84
  /**
58
- * Selection data layer (handle visual coordinates).
85
+ * When sets disable highlighting the headers even when the logical coordinates points on them.
59
86
  *
60
- * @type {SelectionRange}
87
+ * @type {boolean}
61
88
  */
62
- this.selectedRange = new SelectionRange((highlight, from, to) => {
63
- return this.tableProps.createCellRange(highlight, from, to);
89
+ _classPrivateFieldInitSpec(this, _disableHeadersHighlight, {
90
+ writable: true,
91
+ value: false
64
92
  });
65
- /**
66
- * Visualization layer.
67
- *
68
- * @type {Highlight}
69
- */
93
+ this.settings = settings;
94
+ this.tableProps = tableProps;
70
95
  this.highlight = new Highlight({
71
96
  headerClassName: settings.currentHeaderClassName,
97
+ headerAttributes: [A11Y_SELECTED()],
72
98
  activeHeaderClassName: settings.activeHeaderClassName,
73
99
  rowClassName: settings.currentRowClassName,
74
100
  columnClassName: settings.currentColClassName,
101
+ cellAttributes: [A11Y_SELECTED()],
102
+ rowIndexMapper: this.tableProps.rowIndexMapper,
103
+ columnIndexMapper: this.tableProps.columnIndexMapper,
75
104
  disabledCellSelection: (row, column) => this.tableProps.isDisabledCellSelection(row, column),
76
105
  cellCornerVisible: function () {
77
106
  return _this.isCellCornerVisible(...arguments);
@@ -82,21 +111,19 @@ class Selection {
82
111
  visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),
83
112
  renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),
84
113
  createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
85
- createCellRange: (highlight, from, to) => this.tableProps.createCellRange(highlight, from, to),
86
- rowIndexMapper: () => this.tableProps.rowIndexMapper(),
87
- columnIndexMapper: () => this.tableProps.columnIndexMapper()
114
+ createCellRange: (highlight, from, to) => this.tableProps.createCellRange(highlight, from, to)
88
115
  });
89
- /**
90
- * The module for modifying coordinates.
91
- *
92
- * @type {Transformation}
93
- */
94
116
  this.transformation = new Transformation(this.selectedRange, {
95
- countRows: () => this.tableProps.countRowsTranslated(),
96
- countCols: () => this.tableProps.countColsTranslated(),
117
+ rowIndexMapper: this.tableProps.rowIndexMapper,
118
+ columnIndexMapper: this.tableProps.columnIndexMapper,
119
+ countRenderableRows: () => this.tableProps.countRenderableRows(),
120
+ countRenderableColumns: () => this.tableProps.countRenderableColumns(),
121
+ countRowHeaders: () => this.tableProps.countRowHeaders(),
122
+ countColHeaders: () => this.tableProps.countColHeaders(),
97
123
  visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),
98
124
  renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),
99
125
  createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
126
+ navigableHeaders: () => settings.navigableHeaders,
100
127
  fixedRowsBottom: () => settings.fixedRowsBottom,
101
128
  minSpareRows: () => settings.minSpareRows,
102
129
  minSpareCols: () => settings.minSpareCols,
@@ -139,6 +166,18 @@ class Selection {
139
166
  }
140
167
  return _this.runLocalHooks('insertColRequire', ...args);
141
168
  });
169
+ this.transformation.addLocalHook('beforeRowWrap', function () {
170
+ for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
171
+ args[_key7] = arguments[_key7];
172
+ }
173
+ return _this.runLocalHooks('beforeRowWrap', ...args);
174
+ });
175
+ this.transformation.addLocalHook('beforeColumnWrap', function () {
176
+ for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
177
+ args[_key8] = arguments[_key8];
178
+ }
179
+ return _this.runLocalHooks('beforeColumnWrap', ...args);
180
+ });
142
181
  }
143
182
 
144
183
  /**
@@ -151,14 +190,14 @@ class Selection {
151
190
  }
152
191
 
153
192
  /**
154
- * Indicate that selection process began. It sets internaly `.inProgress` property to `true`.
193
+ * Indicate that selection process began. It sets internally `.inProgress` property to `true`.
155
194
  */
156
195
  begin() {
157
196
  this.inProgress = true;
158
197
  }
159
198
 
160
199
  /**
161
- * Indicate that selection process finished. It sets internaly `.inProgress` property to `false`.
200
+ * Indicate that selection process finished. It sets internally `.inProgress` property to `false`.
162
201
  */
163
202
  finish() {
164
203
  this.runLocalHooks('afterSelectionFinished', Array.from(this.selectedRange));
@@ -183,33 +222,25 @@ class Selection {
183
222
  * the default trigger will be used.
184
223
  * @param {boolean} [fragment=false] If `true`, the selection will be treated as a partial selection where the
185
224
  * `setRangeEnd` method won't be called on every `setRangeStart` call.
225
+ * @param {CellCoords} [highlightCoords] If set, allows changing the coordinates of the highlight/focus cell.
186
226
  */
187
227
  setRangeStart(coords, multipleSelection) {
188
228
  let fragment = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
229
+ let highlightCoords = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : coords;
189
230
  const isMultipleMode = this.settings.selectionMode === 'multiple';
190
231
  const isMultipleSelection = isUndefined(multipleSelection) ? this.tableProps.getShortcutManager().isCtrlPressed() : multipleSelection;
191
- const isRowNegative = coords.row < 0;
192
- const isColumnNegative = coords.col < 0;
193
- const selectedByCorner = isRowNegative && isColumnNegative;
194
232
  // We are creating copy. We would like to modify just the start of the selection by below hook. Then original coords
195
233
  // should be handled by next methods.
196
234
  const coordsClone = coords.clone();
197
- this.selectedByCorner = selectedByCorner;
198
235
  this.runLocalHooks(`beforeSetRangeStart${fragment ? 'Only' : ''}`, coordsClone);
199
236
  if (!isMultipleMode || isMultipleMode && !isMultipleSelection && isUndefined(multipleSelection)) {
200
237
  this.selectedRange.clear();
201
238
  }
202
- this.selectedRange.add(coordsClone);
239
+ this.selectedRange.add(coordsClone).current().setHighlight(highlightCoords.clone());
203
240
  if (this.getLayerLevel() === 0) {
204
241
  this.selectedByRowHeader.clear();
205
242
  this.selectedByColumnHeader.clear();
206
243
  }
207
- if (!selectedByCorner && isColumnNegative) {
208
- this.selectedByRowHeader.add(this.getLayerLevel());
209
- }
210
- if (!selectedByCorner && isRowNegative) {
211
- this.selectedByColumnHeader.add(this.getLayerLevel());
212
- }
213
244
  if (!fragment) {
214
245
  this.setRangeEnd(coords);
215
246
  }
@@ -222,9 +253,11 @@ class Selection {
222
253
  * @param {boolean} [multipleSelection] If `true`, selection will be worked in 'multiple' mode. This option works
223
254
  * only when 'selectionMode' is set as 'multiple'. If the argument is not defined
224
255
  * the default trigger will be used.
256
+ * @param {CellCoords} [highlightCoords] If set, allows changing the coordinates of the highlight/focus cell.
225
257
  */
226
258
  setRangeStartOnly(coords, multipleSelection) {
227
- this.setRangeStart(coords, multipleSelection, true);
259
+ let highlightCoords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : coords;
260
+ this.setRangeStart(coords, multipleSelection, true, highlightCoords);
228
261
  }
229
262
 
230
263
  /**
@@ -236,21 +269,40 @@ class Selection {
236
269
  if (this.selectedRange.isEmpty()) {
237
270
  return;
238
271
  }
239
-
240
- // We are creating copy. We would like to modify just the end of the selection by below hook. Then original coords
241
- // should be handled by next methods.
242
272
  const coordsClone = coords.clone();
273
+ const countRows = this.tableProps.countRows();
274
+ const countCols = this.tableProps.countCols();
275
+ const isSingle = this.selectedRange.current().clone().setTo(coords).isSingleHeader();
276
+
277
+ // Ignore processing the end range when the header selection starts overlapping the corner and
278
+ // the selection is not a single header highlight.
279
+ if ((countRows > 0 || countCols > 0) && (countRows === 0 && coordsClone.col < 0 && !isSingle || countCols === 0 && coordsClone.row < 0 && !isSingle)) {
280
+ return;
281
+ }
243
282
  this.runLocalHooks('beforeSetRangeEnd', coordsClone);
244
283
  this.begin();
245
284
  const cellRange = this.selectedRange.current();
246
- if (this.settings.selectionMode !== 'single') {
247
- cellRange.setTo(this.tableProps.createCellCoords(coordsClone.row, coordsClone.col));
285
+ if (!this.settings.navigableHeaders) {
286
+ cellRange.highlight.normalize();
287
+ }
288
+ if (this.settings.selectionMode === 'single') {
289
+ cellRange.setFrom(cellRange.highlight);
290
+ cellRange.setTo(cellRange.highlight);
291
+ } else {
292
+ cellRange.setTo(coordsClone);
248
293
  }
249
294
 
250
- // Set up current selection.
251
- this.highlight.getCell().clear();
252
- if (this.highlight.isEnabledFor(CELL_TYPE, cellRange.highlight)) {
253
- this.highlight.getCell().add(this.selectedRange.current().highlight).commit().syncWith(cellRange);
295
+ // Prevent creating "area" selection that overlaps headers.
296
+ if (countRows > 0 && countCols > 0) {
297
+ if (!this.settings.navigableHeaders || this.settings.navigableHeaders && !cellRange.isSingleHeader()) {
298
+ cellRange.to.normalize();
299
+ }
300
+ }
301
+ this.runLocalHooks('beforeHighlightSet');
302
+ const focusHighlight = this.highlight.getFocus();
303
+ focusHighlight.clear();
304
+ if (this.highlight.isEnabledFor(FOCUS_TYPE, cellRange.highlight)) {
305
+ focusHighlight.add(this.selectedRange.current().highlight).commit().syncWith(cellRange);
254
306
  }
255
307
  const layerLevel = this.getLayerLevel();
256
308
 
@@ -258,69 +310,80 @@ class Selection {
258
310
  // indication that the new selection is performing.
259
311
  if (layerLevel < this.highlight.layerLevel) {
260
312
  arrayEach(this.highlight.getAreas(), highlight => void highlight.clear());
261
- arrayEach(this.highlight.getHeaders(), highlight => void highlight.clear());
262
- arrayEach(this.highlight.getActiveHeaders(), highlight => void highlight.clear());
313
+ arrayEach(this.highlight.getLayeredAreas(), highlight => void highlight.clear());
314
+ arrayEach(this.highlight.getRowHeaders(), highlight => void highlight.clear());
315
+ arrayEach(this.highlight.getColumnHeaders(), highlight => void highlight.clear());
316
+ arrayEach(this.highlight.getActiveRowHeaders(), highlight => void highlight.clear());
317
+ arrayEach(this.highlight.getActiveColumnHeaders(), highlight => void highlight.clear());
318
+ arrayEach(this.highlight.getActiveCornerHeaders(), highlight => void highlight.clear());
319
+ arrayEach(this.highlight.getRowHighlights(), highlight => void highlight.clear());
320
+ arrayEach(this.highlight.getColumnHighlights(), highlight => void highlight.clear());
263
321
  }
264
322
  this.highlight.useLayerLevel(layerLevel);
265
- const areaHighlight = this.highlight.createOrGetArea();
266
- const headerHighlight = this.highlight.createOrGetHeader();
267
- const activeHeaderHighlight = this.highlight.createOrGetActiveHeader();
323
+ const areaHighlight = this.highlight.createArea();
324
+ const layeredAreaHighlight = this.highlight.createLayeredArea();
325
+ const rowHeaderHighlight = this.highlight.createRowHeader();
326
+ const columnHeaderHighlight = this.highlight.createColumnHeader();
327
+ const activeRowHeaderHighlight = this.highlight.createActiveRowHeader();
328
+ const activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();
329
+ const activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();
330
+ const rowHighlight = this.highlight.createRowHighlight();
331
+ const columnHighlight = this.highlight.createColumnHighlight();
268
332
  areaHighlight.clear();
269
- headerHighlight.clear();
270
- activeHeaderHighlight.clear();
333
+ layeredAreaHighlight.clear();
334
+ rowHeaderHighlight.clear();
335
+ columnHeaderHighlight.clear();
336
+ activeRowHeaderHighlight.clear();
337
+ activeColumnHeaderHighlight.clear();
338
+ activeCornerHeaderHighlight.clear();
339
+ rowHighlight.clear();
340
+ columnHighlight.clear();
271
341
  if (this.highlight.isEnabledFor(AREA_TYPE, cellRange.highlight) && (this.isMultiple() || layerLevel >= 1)) {
272
342
  areaHighlight.add(cellRange.from).add(cellRange.to).commit();
343
+ layeredAreaHighlight.add(cellRange.from).add(cellRange.to).commit();
273
344
  if (layerLevel === 1) {
274
345
  // For single cell selection in the same layer, we do not create area selection to prevent blue background.
275
346
  // When non-consecutive selection is performed we have to add that missing area selection to the previous layer
276
347
  // based on previous coordinates. It only occurs when the previous selection wasn't select multiple cells.
277
348
  const previousRange = this.selectedRange.previous();
278
- this.highlight.useLayerLevel(layerLevel - 1).createOrGetArea().add(previousRange.from).commit()
349
+ this.highlight.useLayerLevel(layerLevel - 1);
350
+ this.highlight.createArea().add(previousRange.from).commit()
351
+ // Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).
352
+ .syncWith(previousRange);
353
+ this.highlight.createLayeredArea().add(previousRange.from).commit()
279
354
  // Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).
280
355
  .syncWith(previousRange);
281
356
  this.highlight.useLayerLevel(layerLevel);
282
357
  }
283
358
  }
284
359
  if (this.highlight.isEnabledFor(HEADER_TYPE, cellRange.highlight)) {
285
- // The header selection generally contains cell selection. In a case when all rows (or columns)
286
- // are hidden that visual coordinates are translated to renderable coordinates that do not exist.
287
- // Hence no header highlight is generated. In that case, to make a column (or a row) header
288
- // highlight, the row and column index has to point to the header (the negative value). See #7052.
289
- const areAnyRowsRendered = this.tableProps.countRowsTranslated() === 0;
290
- const areAnyColumnsRendered = this.tableProps.countColsTranslated() === 0;
291
- let headerCellRange = cellRange;
292
- if (areAnyRowsRendered || areAnyColumnsRendered) {
293
- headerCellRange = cellRange.clone();
294
- }
295
- if (areAnyRowsRendered) {
296
- headerCellRange.from.row = -1;
297
- }
298
- if (areAnyColumnsRendered) {
299
- headerCellRange.from.col = -1;
300
- }
301
- if (this.settings.selectionMode === 'single') {
302
- if (this.isSelectedByAnyHeader()) {
303
- headerCellRange.from.normalize();
360
+ if (!cellRange.isSingleHeader()) {
361
+ const rowCoordsFrom = this.tableProps.createCellCoords(Math.max(cellRange.from.row, 0), -1);
362
+ const rowCoordsTo = this.tableProps.createCellCoords(cellRange.to.row, -1);
363
+ const columnCoordsFrom = this.tableProps.createCellCoords(-1, Math.max(cellRange.from.col, 0));
364
+ const columnCoordsTo = this.tableProps.createCellCoords(-1, cellRange.to.col);
365
+ if (this.settings.selectionMode === 'single') {
366
+ rowHeaderHighlight.add(rowCoordsFrom).commit();
367
+ columnHeaderHighlight.add(columnCoordsFrom).commit();
368
+ rowHighlight.add(rowCoordsFrom).commit();
369
+ columnHighlight.add(columnCoordsFrom).commit();
370
+ } else {
371
+ rowHeaderHighlight.add(rowCoordsFrom).add(rowCoordsTo).commit();
372
+ columnHeaderHighlight.add(columnCoordsFrom).add(columnCoordsTo).commit();
373
+ rowHighlight.add(rowCoordsFrom).add(rowCoordsTo).commit();
374
+ columnHighlight.add(columnCoordsFrom).add(columnCoordsTo).commit();
304
375
  }
305
- headerHighlight.add(headerCellRange.from).commit();
306
- } else {
307
- headerHighlight.add(headerCellRange.from).add(headerCellRange.to).commit();
308
376
  }
309
- if (this.isEntireRowSelected()) {
310
- const isRowSelected = this.tableProps.countCols() === cellRange.getWidth();
311
-
312
- // Make sure that the whole row is selected (in case where selectionMode is set to 'single')
313
- if (isRowSelected) {
314
- activeHeaderHighlight.add(this.tableProps.createCellCoords(cellRange.from.row, -1)).add(this.tableProps.createCellCoords(cellRange.to.row, -1)).commit();
315
- }
377
+ const highlightRowHeaders = !_classPrivateFieldGet(this, _disableHeadersHighlight) && this.isEntireRowSelected() && (countCols > 0 && countCols === cellRange.getWidth() || countCols === 0 && this.isSelectedByRowHeader());
378
+ const highlightColumnHeaders = !_classPrivateFieldGet(this, _disableHeadersHighlight) && this.isEntireColumnSelected() && (countRows > 0 && countRows === cellRange.getHeight() || countRows === 0 && this.isSelectedByColumnHeader());
379
+ if (highlightRowHeaders) {
380
+ 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();
316
381
  }
317
- if (this.isEntireColumnSelected()) {
318
- const isColumnSelected = this.tableProps.countRows() === cellRange.getHeight();
319
-
320
- // Make sure that the whole column is selected (in case where selectionMode is set to 'single')
321
- if (isColumnSelected) {
322
- activeHeaderHighlight.add(this.tableProps.createCellCoords(-1, cellRange.from.col)).add(this.tableProps.createCellCoords(-1, cellRange.to.col)).commit();
323
- }
382
+ if (highlightColumnHeaders) {
383
+ 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();
384
+ }
385
+ if (highlightRowHeaders && highlightColumnHeaders) {
386
+ activeCornerHeaderHighlight.add(this.tableProps.createCellCoords(-this.tableProps.countColHeaders(), -this.tableProps.countRowHeaders())).add(this.tableProps.createCellCoords(-1, -1)).commit();
324
387
  }
325
388
  }
326
389
  this.runLocalHooks('afterSetRangeEnd', coords);
@@ -343,12 +406,12 @@ class Selection {
343
406
  *
344
407
  * @param {number} rowDelta Rows number to move, value can be passed as negative number.
345
408
  * @param {number} colDelta Columns number to move, value can be passed as negative number.
346
- * @param {boolean} [force=false] If `true` the new rows/columns will be created if necessary. Otherwise, row/column will
347
- * be created according to `minSpareRows/minSpareCols` settings of Handsontable.
409
+ * @param {boolean} [createMissingRecords=false] If `true` the new rows/columns will be created if necessary.
410
+ * Otherwise, row/column will be created according to `minSpareRows/minSpareCols` settings of Handsontable.
348
411
  */
349
412
  transformStart(rowDelta, colDelta) {
350
- let force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
351
- this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta, force));
413
+ let createMissingRecords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
414
+ this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta, createMissingRecords));
352
415
  }
353
416
 
354
417
  /**
@@ -389,7 +452,7 @@ class Selection {
389
452
  */
390
453
  isSelectedByRowHeader() {
391
454
  let layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
392
- return !this.isSelectedByCorner(layerLevel) && this.isEntireRowSelected(layerLevel);
455
+ return !this.isSelectedByCorner(layerLevel) && (layerLevel === -1 ? this.selectedByRowHeader.size > 0 : this.selectedByRowHeader.has(layerLevel));
393
456
  }
394
457
 
395
458
  /**
@@ -401,7 +464,19 @@ class Selection {
401
464
  */
402
465
  isEntireRowSelected() {
403
466
  let layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
404
- return layerLevel === -1 ? this.selectedByRowHeader.size > 0 : this.selectedByRowHeader.has(layerLevel);
467
+ const tester = range => {
468
+ const {
469
+ col
470
+ } = range.getOuterTopStartCorner();
471
+ const rowHeaders = this.tableProps.countRowHeaders();
472
+ const countCols = this.tableProps.countCols();
473
+ return (rowHeaders > 0 && col < 0 || rowHeaders === 0) && range.getWidth() === countCols;
474
+ };
475
+ if (layerLevel === -1) {
476
+ return Array.from(this.selectedRange).some(range => tester(range));
477
+ }
478
+ const range = this.selectedRange.peekByIndex(layerLevel);
479
+ return range ? tester(range) : false;
405
480
  }
406
481
 
407
482
  /**
@@ -414,7 +489,7 @@ class Selection {
414
489
  */
415
490
  isSelectedByColumnHeader() {
416
491
  let layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
417
- return !this.isSelectedByCorner() && this.isEntireColumnSelected(layerLevel);
492
+ return !this.isSelectedByCorner() && (layerLevel === -1 ? this.selectedByColumnHeader.size > 0 : this.selectedByColumnHeader.has(layerLevel));
418
493
  }
419
494
 
420
495
  /**
@@ -426,7 +501,19 @@ class Selection {
426
501
  */
427
502
  isEntireColumnSelected() {
428
503
  let layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
429
- return layerLevel === -1 ? this.selectedByColumnHeader.size > 0 : this.selectedByColumnHeader.has(layerLevel);
504
+ const tester = range => {
505
+ const {
506
+ row
507
+ } = range.getOuterTopStartCorner();
508
+ const colHeaders = this.tableProps.countColHeaders();
509
+ const countRows = this.tableProps.countRows();
510
+ return (colHeaders > 0 && row < 0 || colHeaders === 0) && range.getHeight() === countRows;
511
+ };
512
+ if (layerLevel === -1) {
513
+ return Array.from(this.selectedRange).some(range => tester(range));
514
+ }
515
+ const range = this.selectedRange.peekByIndex(layerLevel);
516
+ return range ? tester(range) : false;
430
517
  }
431
518
 
432
519
  /**
@@ -444,7 +531,7 @@ class Selection {
444
531
  * @returns {boolean}
445
532
  */
446
533
  isSelectedByCorner() {
447
- return this.selectedByCorner;
534
+ return this.selectedByColumnHeader.has(this.getLayerLevel()) && this.selectedByRowHeader.has(this.getLayerLevel());
448
535
  }
449
536
 
450
537
  /**
@@ -503,31 +590,61 @@ class Selection {
503
590
  }
504
591
 
505
592
  /**
506
- * Select all cells.
593
+ * Selects all cells and headers.
507
594
  *
508
- * @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers, `false`
509
- * otherwise.
510
- * @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column headers, `false`
511
- * otherwise.
595
+ * @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers,
596
+ * `false` otherwise.
597
+ * @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column
598
+ * headers, `false` otherwise.
599
+ * @param {object} [options] Additional object with options.
600
+ * @param {{row: number, col: number} | boolean} [options.focusPosition] The argument allows changing the cell/header
601
+ * focus position. The value takes an object with a `row` and `col` properties from -N to N, where
602
+ * negative values point to the headers and positive values point to the cell range. If `false`, the focus
603
+ * position won't be changed.
604
+ * @param {boolean} [options.disableHeadersHighlight] If `true`, disables highlighting the headers even when
605
+ * the logical coordinates points on them.
512
606
  */
513
607
  selectAll() {
608
+ var _this$getSelectedRang;
514
609
  let includeRowHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
515
610
  let includeColumnHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
611
+ let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
612
+ focusPosition: false,
613
+ disableHeadersHighlight: false
614
+ };
516
615
  const nrOfRows = this.tableProps.countRows();
517
616
  const nrOfColumns = this.tableProps.countCols();
617
+ const countRowHeaders = this.tableProps.countRowHeaders();
618
+ const countColHeaders = this.tableProps.countColHeaders();
619
+ const rowFrom = includeColumnHeaders ? -countColHeaders : 0;
620
+ const columnFrom = includeRowHeaders ? -countRowHeaders : 0;
518
621
 
519
622
  // We can't select cells when there is no data.
520
- if (!includeRowHeaders && !includeColumnHeaders && (nrOfRows === 0 || nrOfColumns === 0)) {
623
+ if (rowFrom === 0 && columnFrom === 0 && (nrOfRows === 0 || nrOfColumns === 0)) {
521
624
  return;
522
625
  }
523
- const startCoords = this.tableProps.createCellCoords(includeColumnHeaders ? -1 : 0, includeRowHeaders ? -1 : 0);
626
+ let highlight = (_this$getSelectedRang = this.getSelectedRange().current()) === null || _this$getSelectedRang === void 0 ? void 0 : _this$getSelectedRang.highlight;
627
+ const {
628
+ focusPosition,
629
+ disableHeadersHighlight
630
+ } = options;
631
+ _classPrivateFieldSet(this, _disableHeadersHighlight, disableHeadersHighlight);
632
+ if (focusPosition && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.row) && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.col)) {
633
+ highlight = this.tableProps.createCellCoords(clamp(focusPosition.row, rowFrom, nrOfRows - 1), clamp(focusPosition.col, columnFrom, nrOfColumns - 1));
634
+ }
635
+ const startCoords = this.tableProps.createCellCoords(rowFrom, columnFrom);
524
636
  const endCoords = this.tableProps.createCellCoords(nrOfRows - 1, nrOfColumns - 1);
525
637
  this.clear();
526
- this.setRangeStartOnly(startCoords);
527
- this.selectedByRowHeader.add(this.getLayerLevel());
528
- this.selectedByColumnHeader.add(this.getLayerLevel());
638
+ this.setRangeStartOnly(startCoords, void 0, highlight);
639
+ if (columnFrom < 0) {
640
+ this.selectedByRowHeader.add(this.getLayerLevel());
641
+ }
642
+ if (rowFrom < 0) {
643
+ this.selectedByColumnHeader.add(this.getLayerLevel());
644
+ }
529
645
  this.setRangeEnd(endCoords);
530
646
  this.finish();
647
+ _classPrivateFieldSet(this, _disableHeadersHighlight, false);
531
648
  }
532
649
 
533
650
  /**
@@ -552,21 +669,29 @@ class Selection {
552
669
  propToCol: prop => this.tableProps.propToCol(prop),
553
670
  keepDirection: true
554
671
  });
555
- const nrOfRows = this.tableProps.countRows();
556
- const nrOfColumns = this.tableProps.countCols();
672
+ const navigableHeaders = this.settings.navigableHeaders;
673
+ const tableParams = {
674
+ countRows: this.tableProps.countRows(),
675
+ countCols: this.tableProps.countCols(),
676
+ countRowHeaders: navigableHeaders ? this.tableProps.countRowHeaders() : 0,
677
+ countColHeaders: navigableHeaders ? this.tableProps.countColHeaders() : 0
678
+ };
557
679
 
558
680
  // Check if every layer of the coordinates are valid.
559
681
  const isValid = !selectionRanges.some(selection => {
560
- const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);
561
- const _isValid = isValidCoord(rowStart, nrOfRows) && isValidCoord(columnStart, nrOfColumns) && isValidCoord(rowEnd, nrOfRows) && isValidCoord(columnEnd, nrOfColumns);
562
- return !_isValid;
682
+ const cellRange = selectionSchemaNormalizer(selection);
683
+ const rangeValidity = cellRange.isValid(tableParams);
684
+ return !(rangeValidity && !cellRange.containsHeaders() || rangeValidity && cellRange.containsHeaders() && cellRange.isSingleHeader());
563
685
  });
564
686
  if (isValid) {
565
687
  this.clear();
566
688
  arrayEach(selectionRanges, selection => {
567
- const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);
568
- this.setRangeStartOnly(this.tableProps.createCellCoords(rowStart, columnStart), false);
569
- this.setRangeEnd(this.tableProps.createCellCoords(rowEnd, columnEnd));
689
+ const {
690
+ from,
691
+ to
692
+ } = selectionSchemaNormalizer(selection);
693
+ this.setRangeStartOnly(from.clone(), false);
694
+ this.setRangeEnd(to.clone());
570
695
  this.finish();
571
696
  });
572
697
  }
@@ -579,22 +704,43 @@ class Selection {
579
704
  *
580
705
  * @param {number|string} startColumn Visual column index or column property from which the selection starts.
581
706
  * @param {number|string} [endColumn] Visual column index or column property from to the selection finishes.
582
- * @param {number} [headerLevel=-1] A row header index that triggers the column selection. The value can
583
- * take -1 to -N, where -1 means the header closest to the cells.
584
- *
707
+ * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
708
+ * The value can take visual row index from -N to N, where negative values
709
+ * point to the headers and positive values point to the cell range.
585
710
  * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
586
711
  */
587
712
  selectColumns(startColumn) {
588
713
  let endColumn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startColumn;
589
- let headerLevel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;
714
+ let focusPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
590
715
  const start = typeof startColumn === 'string' ? this.tableProps.propToCol(startColumn) : startColumn;
591
716
  const end = typeof endColumn === 'string' ? this.tableProps.propToCol(endColumn) : endColumn;
592
- const nrOfColumns = this.tableProps.countCols();
593
- const nrOfRows = this.tableProps.countRows();
594
- const isValid = isValidCoord(start, nrOfColumns) && isValidCoord(end, nrOfColumns);
717
+ const countRows = this.tableProps.countRows();
718
+ const countCols = this.tableProps.countCols();
719
+ const countColHeaders = this.tableProps.countColHeaders();
720
+ const columnHeaderLastIndex = countColHeaders === 0 ? 0 : -countColHeaders;
721
+ const fromCoords = new CellCoords(columnHeaderLastIndex, start);
722
+ const toCoords = new CellCoords(countRows - 1, end);
723
+ const isValid = new CellRange(fromCoords, fromCoords, toCoords).isValid({
724
+ countRows,
725
+ countCols,
726
+ countRowHeaders: 0,
727
+ countColHeaders
728
+ });
595
729
  if (isValid) {
596
- this.setRangeStartOnly(this.tableProps.createCellCoords(headerLevel, start));
597
- this.setRangeEnd(this.tableProps.createCellCoords(nrOfRows - 1, end));
730
+ const fromRow = countColHeaders === 0 ? 0 : clamp(focusPosition, columnHeaderLastIndex, -1);
731
+ const toRow = countRows - 1;
732
+ const from = this.tableProps.createCellCoords(fromRow, start);
733
+ const to = this.tableProps.createCellCoords(toRow, end);
734
+ const highlight = this.tableProps.createCellCoords(clamp(focusPosition, columnHeaderLastIndex, countRows - 1), start);
735
+ this.runLocalHooks('beforeSelectColumns', from, to, highlight);
736
+
737
+ // disallow modifying row axis for that hooks
738
+ from.row = fromRow;
739
+ to.row = toRow;
740
+ this.setRangeStartOnly(from, void 0, highlight);
741
+ this.selectedByColumnHeader.add(this.getLayerLevel());
742
+ this.setRangeEnd(to);
743
+ this.runLocalHooks('afterSelectColumns', from, to, highlight);
598
744
  this.finish();
599
745
  }
600
746
  return isValid;
@@ -605,20 +751,41 @@ class Selection {
605
751
  *
606
752
  * @param {number} startRow Visual row index from which the selection starts.
607
753
  * @param {number} [endRow] Visual row index from to the selection finishes.
608
- * @param {number} [headerLevel=-1] A column header index that triggers the row selection.
609
- * The value can take -1 to -N, where -1 means the header
610
- * closest to the cells.
754
+ * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
755
+ * The value can take visual column index from -N to N, where negative values
756
+ * point to the headers and positive values point to the cell range.
611
757
  * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
612
758
  */
613
759
  selectRows(startRow) {
614
760
  let endRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startRow;
615
- let headerLevel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;
616
- const nrOfRows = this.tableProps.countRows();
617
- const nrOfColumns = this.tableProps.countCols();
618
- const isValid = isValidCoord(startRow, nrOfRows) && isValidCoord(endRow, nrOfRows);
761
+ let focusPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
762
+ const countRows = this.tableProps.countRows();
763
+ const countCols = this.tableProps.countCols();
764
+ const countRowHeaders = this.tableProps.countRowHeaders();
765
+ const rowHeaderLastIndex = countRowHeaders === 0 ? 0 : -countRowHeaders;
766
+ const fromCoords = new CellCoords(startRow, rowHeaderLastIndex);
767
+ const toCoords = new CellCoords(endRow, countCols - 1);
768
+ const isValid = new CellRange(fromCoords, fromCoords, toCoords).isValid({
769
+ countRows,
770
+ countCols,
771
+ countRowHeaders,
772
+ countColHeaders: 0
773
+ });
619
774
  if (isValid) {
620
- this.setRangeStartOnly(this.tableProps.createCellCoords(startRow, headerLevel));
621
- this.setRangeEnd(this.tableProps.createCellCoords(endRow, nrOfColumns - 1));
775
+ const fromColumn = countRowHeaders === 0 ? 0 : clamp(focusPosition, rowHeaderLastIndex, -1);
776
+ const toColumn = countCols - 1;
777
+ const from = this.tableProps.createCellCoords(startRow, fromColumn);
778
+ const to = this.tableProps.createCellCoords(endRow, toColumn);
779
+ const highlight = this.tableProps.createCellCoords(startRow, clamp(focusPosition, rowHeaderLastIndex, countCols - 1));
780
+ this.runLocalHooks('beforeSelectRows', from, to, highlight);
781
+
782
+ // disallow modifying column axis for that hooks
783
+ from.col = fromColumn;
784
+ to.col = toColumn;
785
+ this.setRangeStartOnly(from, void 0, highlight);
786
+ this.selectedByRowHeader.add(this.getLayerLevel());
787
+ this.setRangeEnd(to);
788
+ this.runLocalHooks('afterSelectRows', from, to, highlight);
622
789
  this.finish();
623
790
  }
624
791
  return isValid;
@@ -635,19 +802,31 @@ class Selection {
635
802
  if (!this.isSelected()) {
636
803
  return;
637
804
  }
638
- const cellHighlight = this.highlight.getCell();
805
+ const focusHighlight = this.highlight.getFocus();
639
806
  const currentLayer = this.getLayerLevel();
640
- cellHighlight.commit().syncWith(this.selectedRange.current());
807
+ focusHighlight.commit().syncWith(this.selectedRange.current());
641
808
 
642
809
  // Rewriting rendered ranges going through all layers.
643
810
  for (let layerLevel = 0; layerLevel < this.selectedRange.size(); layerLevel += 1) {
644
811
  this.highlight.useLayerLevel(layerLevel);
645
- const areaHighlight = this.highlight.createOrGetArea();
646
- const headerHighlight = this.highlight.createOrGetHeader();
647
- const activeHeaderHighlight = this.highlight.createOrGetActiveHeader();
812
+ const areaHighlight = this.highlight.createArea();
813
+ const areaLayeredHighlight = this.highlight.createLayeredArea();
814
+ const rowHeaderHighlight = this.highlight.createRowHeader();
815
+ const columnHeaderHighlight = this.highlight.createColumnHeader();
816
+ const activeRowHeaderHighlight = this.highlight.createActiveRowHeader();
817
+ const activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();
818
+ const activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();
819
+ const rowHighlight = this.highlight.createRowHighlight();
820
+ const columnHighlight = this.highlight.createColumnHighlight();
648
821
  areaHighlight.commit();
649
- headerHighlight.commit();
650
- activeHeaderHighlight.commit();
822
+ areaLayeredHighlight.commit();
823
+ rowHeaderHighlight.commit();
824
+ columnHeaderHighlight.commit();
825
+ activeRowHeaderHighlight.commit();
826
+ activeColumnHeaderHighlight.commit();
827
+ activeCornerHeaderHighlight.commit();
828
+ rowHighlight.commit();
829
+ columnHighlight.commit();
651
830
  }
652
831
 
653
832
  // Reverting starting layer for the Highlight.