handsontable 13.1.0 → 14.0.0-next-e8f87aa-20231030

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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.