handsontable 14.2.0 → 14.3.0-next-3fa6b18-20240410

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 (469) hide show
  1. package/3rdparty/walkontable/src/calculator/renderAllColumns.js +1 -1
  2. package/3rdparty/walkontable/src/calculator/renderAllColumns.mjs +1 -1
  3. package/3rdparty/walkontable/src/calculator/renderAllRows.js +1 -1
  4. package/3rdparty/walkontable/src/calculator/renderAllRows.mjs +1 -1
  5. package/3rdparty/walkontable/src/calculator/viewportColumns.js +13 -18
  6. package/3rdparty/walkontable/src/calculator/viewportColumns.mjs +13 -18
  7. package/3rdparty/walkontable/src/calculator/viewportRows.js +11 -16
  8. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +11 -16
  9. package/3rdparty/walkontable/src/cell/coords.js +13 -18
  10. package/3rdparty/walkontable/src/cell/coords.mjs +13 -18
  11. package/3rdparty/walkontable/src/cell/range.d.ts +2 -1
  12. package/3rdparty/walkontable/src/cell/range.js +42 -30
  13. package/3rdparty/walkontable/src/cell/range.mjs +42 -30
  14. package/3rdparty/walkontable/src/core/_base.js +2 -2
  15. package/3rdparty/walkontable/src/core/_base.mjs +2 -2
  16. package/3rdparty/walkontable/src/core/clone.js +1 -1
  17. package/3rdparty/walkontable/src/core/clone.mjs +1 -1
  18. package/3rdparty/walkontable/src/event.js +72 -104
  19. package/3rdparty/walkontable/src/event.mjs +72 -104
  20. package/3rdparty/walkontable/src/filter/column.js +1 -1
  21. package/3rdparty/walkontable/src/filter/column.mjs +1 -1
  22. package/3rdparty/walkontable/src/filter/row.js +1 -1
  23. package/3rdparty/walkontable/src/filter/row.mjs +1 -1
  24. package/3rdparty/walkontable/src/index.js +1 -1
  25. package/3rdparty/walkontable/src/overlay/_base.js +1 -1
  26. package/3rdparty/walkontable/src/overlay/_base.mjs +1 -1
  27. package/3rdparty/walkontable/src/overlay/bottom.js +1 -1
  28. package/3rdparty/walkontable/src/overlay/bottom.mjs +1 -1
  29. package/3rdparty/walkontable/src/overlay/inlineStart.js +15 -1
  30. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +16 -2
  31. package/3rdparty/walkontable/src/overlay/top.js +12 -1
  32. package/3rdparty/walkontable/src/overlay/top.mjs +13 -2
  33. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.js +1 -1
  34. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.mjs +1 -1
  35. package/3rdparty/walkontable/src/overlays.js +47 -5
  36. package/3rdparty/walkontable/src/overlays.mjs +47 -5
  37. package/3rdparty/walkontable/src/renderer/_base.js +1 -1
  38. package/3rdparty/walkontable/src/renderer/_base.mjs +1 -1
  39. package/3rdparty/walkontable/src/renderer/cells.js +1 -1
  40. package/3rdparty/walkontable/src/renderer/cells.mjs +1 -1
  41. package/3rdparty/walkontable/src/renderer/rowHeaders.js +1 -1
  42. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +1 -1
  43. package/3rdparty/walkontable/src/renderer/rows.js +1 -1
  44. package/3rdparty/walkontable/src/renderer/rows.mjs +1 -1
  45. package/3rdparty/walkontable/src/renderer/table.js +1 -1
  46. package/3rdparty/walkontable/src/renderer/table.mjs +1 -1
  47. package/3rdparty/walkontable/src/scroll.js +16 -18
  48. package/3rdparty/walkontable/src/scroll.mjs +16 -18
  49. package/3rdparty/walkontable/src/selection/manager.js +48 -69
  50. package/3rdparty/walkontable/src/selection/manager.mjs +48 -69
  51. package/3rdparty/walkontable/src/selection/scanner.js +33 -42
  52. package/3rdparty/walkontable/src/selection/scanner.mjs +33 -42
  53. package/3rdparty/walkontable/src/settings.js +1 -1
  54. package/3rdparty/walkontable/src/settings.mjs +1 -1
  55. package/3rdparty/walkontable/src/table.js +1 -1
  56. package/3rdparty/walkontable/src/table.mjs +1 -1
  57. package/3rdparty/walkontable/src/utils/column.js +1 -1
  58. package/3rdparty/walkontable/src/utils/column.mjs +1 -1
  59. package/3rdparty/walkontable/src/utils/columnStretching.js +28 -45
  60. package/3rdparty/walkontable/src/utils/columnStretching.mjs +28 -45
  61. package/3rdparty/walkontable/src/utils/nodesPool.js +1 -1
  62. package/3rdparty/walkontable/src/utils/nodesPool.mjs +1 -1
  63. package/3rdparty/walkontable/src/utils/orderView/view.js +2 -2
  64. package/3rdparty/walkontable/src/utils/orderView/view.mjs +2 -2
  65. package/3rdparty/walkontable/src/utils/orderView/viewSize.js +1 -1
  66. package/3rdparty/walkontable/src/utils/orderView/viewSize.mjs +1 -1
  67. package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.js +1 -1
  68. package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.mjs +1 -1
  69. package/3rdparty/walkontable/src/utils/row.js +1 -1
  70. package/3rdparty/walkontable/src/utils/row.mjs +1 -1
  71. package/CHANGELOG.md +20 -0
  72. package/base.js +2 -2
  73. package/base.mjs +2 -2
  74. package/core/viewportScroll/index.js +4 -1
  75. package/core/viewportScroll/index.mjs +4 -1
  76. package/core/viewportScroll/scrollStrategies/focusScroll.js +15 -0
  77. package/core/viewportScroll/scrollStrategies/focusScroll.mjs +11 -0
  78. package/core.d.ts +4 -3
  79. package/core.js +98 -43
  80. package/core.mjs +98 -43
  81. package/dataMap/dataMap.js +1 -1
  82. package/dataMap/dataMap.mjs +1 -1
  83. package/dataMap/dataSource.js +2 -2
  84. package/dataMap/dataSource.mjs +2 -2
  85. package/dataMap/metaManager/lazyFactoryMap.js +3 -5
  86. package/dataMap/metaManager/lazyFactoryMap.mjs +2 -4
  87. package/dataMap/metaManager/metaLayers/cellMeta.js +2 -2
  88. package/dataMap/metaManager/metaLayers/cellMeta.mjs +2 -2
  89. package/dataMap/metaManager/metaLayers/columnMeta.js +1 -1
  90. package/dataMap/metaManager/metaLayers/columnMeta.mjs +1 -1
  91. package/dataMap/metaManager/metaLayers/globalMeta.js +1 -1
  92. package/dataMap/metaManager/metaLayers/globalMeta.mjs +1 -1
  93. package/dataMap/metaManager/metaLayers/tableMeta.js +1 -1
  94. package/dataMap/metaManager/metaLayers/tableMeta.mjs +1 -1
  95. package/dataMap/metaManager/metaSchema.js +272 -272
  96. package/dataMap/metaManager/metaSchema.mjs +272 -272
  97. package/dataMap/metaManager/mods/dynamicCellMeta.js +1 -1
  98. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +1 -1
  99. package/dataMap/metaManager/mods/extendMetaProperties.js +1 -1
  100. package/dataMap/metaManager/mods/extendMetaProperties.mjs +1 -1
  101. package/dataMap/replaceData.js +1 -1
  102. package/dataMap/replaceData.mjs +1 -1
  103. package/dist/handsontable.css +4 -4
  104. package/dist/handsontable.full.css +4 -4
  105. package/dist/handsontable.full.js +9814 -10020
  106. package/dist/handsontable.full.min.css +3 -3
  107. package/dist/handsontable.full.min.js +292 -292
  108. package/dist/handsontable.js +7484 -7056
  109. package/dist/handsontable.min.css +3 -3
  110. package/dist/handsontable.min.js +25 -25
  111. package/dist/languages/all.min.js +1 -1
  112. package/dist/languages/ar-AR.min.js +1 -1
  113. package/dist/languages/cs-CZ.min.js +1 -1
  114. package/dist/languages/de-CH.min.js +1 -1
  115. package/dist/languages/de-DE.min.js +1 -1
  116. package/dist/languages/en-US.min.js +1 -1
  117. package/dist/languages/es-MX.min.js +1 -1
  118. package/dist/languages/fr-FR.min.js +1 -1
  119. package/dist/languages/hr-HR.min.js +1 -1
  120. package/dist/languages/it-IT.min.js +1 -1
  121. package/dist/languages/ja-JP.min.js +1 -1
  122. package/dist/languages/ko-KR.min.js +1 -1
  123. package/dist/languages/lv-LV.min.js +1 -1
  124. package/dist/languages/nb-NO.min.js +1 -1
  125. package/dist/languages/nl-NL.min.js +1 -1
  126. package/dist/languages/pl-PL.min.js +1 -1
  127. package/dist/languages/pt-BR.min.js +1 -1
  128. package/dist/languages/ru-RU.min.js +1 -1
  129. package/dist/languages/sr-SP.min.js +1 -1
  130. package/dist/languages/zh-CN.min.js +1 -1
  131. package/dist/languages/zh-TW.min.js +1 -1
  132. package/editorManager.js +26 -24
  133. package/editorManager.mjs +26 -24
  134. package/editors/autocompleteEditor/autocompleteEditor.js +7 -11
  135. package/editors/autocompleteEditor/autocompleteEditor.mjs +7 -11
  136. package/editors/baseEditor/baseEditor.js +1 -1
  137. package/editors/baseEditor/baseEditor.mjs +1 -1
  138. package/editors/dateEditor/dateEditor.js +49 -11
  139. package/editors/dateEditor/dateEditor.mjs +49 -11
  140. package/editors/selectEditor/selectEditor.js +20 -19
  141. package/editors/selectEditor/selectEditor.mjs +20 -19
  142. package/editors/textEditor/textEditor.js +1 -1
  143. package/editors/textEditor/textEditor.mjs +1 -1
  144. package/eventManager.js +2 -2
  145. package/eventManager.mjs +2 -2
  146. package/focusManager.js +64 -82
  147. package/focusManager.mjs +64 -82
  148. package/helpers/dom/element.js +23 -1
  149. package/helpers/dom/element.mjs +21 -1
  150. package/helpers/mixed.js +2 -2
  151. package/helpers/mixed.mjs +2 -2
  152. package/helpers/object.js +2 -2
  153. package/helpers/object.mjs +2 -2
  154. package/i18n/languages/ar-AR.d.ts +5 -0
  155. package/i18n/languages/ar-AR.js +1 -1
  156. package/i18n/languages/cs-CZ.d.ts +5 -0
  157. package/i18n/languages/cs-CZ.js +1 -1
  158. package/i18n/languages/de-CH.js +1 -1
  159. package/i18n/languages/de-DE.js +1 -1
  160. package/i18n/languages/en-US.js +1 -1
  161. package/i18n/languages/es-MX.js +1 -1
  162. package/i18n/languages/fr-FR.js +1 -1
  163. package/i18n/languages/hr-HR.d.ts +5 -0
  164. package/i18n/languages/hr-HR.js +1 -1
  165. package/i18n/languages/it-IT.js +1 -1
  166. package/i18n/languages/ja-JP.js +1 -1
  167. package/i18n/languages/ko-KR.js +1 -1
  168. package/i18n/languages/lv-LV.js +1 -1
  169. package/i18n/languages/nb-NO.js +1 -1
  170. package/i18n/languages/nl-NL.js +1 -1
  171. package/i18n/languages/pl-PL.js +1 -1
  172. package/i18n/languages/pt-BR.js +1 -1
  173. package/i18n/languages/ru-RU.js +1 -1
  174. package/i18n/languages/sr-SP.d.ts +5 -0
  175. package/i18n/languages/sr-SP.js +1 -1
  176. package/i18n/languages/zh-CN.js +1 -1
  177. package/i18n/languages/zh-TW.js +1 -1
  178. package/i18n/registry.js +1 -1
  179. package/index.d.ts +10 -0
  180. package/index.js +1 -1
  181. package/package.json +14 -10
  182. package/pluginHooks.d.ts +4 -3
  183. package/pluginHooks.js +143 -82
  184. package/pluginHooks.mjs +143 -82
  185. package/plugins/autoColumnSize/autoColumnSize.js +50 -66
  186. package/plugins/autoColumnSize/autoColumnSize.mjs +50 -66
  187. package/plugins/autoRowSize/autoRowSize.js +29 -35
  188. package/plugins/autoRowSize/autoRowSize.mjs +29 -35
  189. package/plugins/autofill/autofill.js +31 -39
  190. package/plugins/autofill/autofill.mjs +31 -39
  191. package/plugins/base/base.js +13 -18
  192. package/plugins/base/base.mjs +13 -18
  193. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +6 -6
  194. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +6 -6
  195. package/plugins/collapsibleColumns/collapsibleColumns.js +60 -51
  196. package/plugins/collapsibleColumns/collapsibleColumns.mjs +60 -51
  197. package/plugins/columnSorting/columnSorting.js +50 -46
  198. package/plugins/columnSorting/columnSorting.mjs +50 -46
  199. package/plugins/columnSorting/columnStatesManager.js +1 -1
  200. package/plugins/columnSorting/columnStatesManager.mjs +1 -1
  201. package/plugins/columnSummary/columnSummary.js +36 -40
  202. package/plugins/columnSummary/columnSummary.mjs +36 -40
  203. package/plugins/columnSummary/endpoints.js +1 -1
  204. package/plugins/columnSummary/endpoints.mjs +1 -1
  205. package/plugins/comments/commentEditor.js +1 -1
  206. package/plugins/comments/commentEditor.mjs +1 -1
  207. package/plugins/comments/comments.js +117 -159
  208. package/plugins/comments/comments.mjs +117 -159
  209. package/plugins/comments/contextMenuItem/addEditComment.js +1 -1
  210. package/plugins/comments/contextMenuItem/readOnlyComment.js +1 -1
  211. package/plugins/comments/contextMenuItem/removeComment.js +1 -1
  212. package/plugins/comments/displaySwitch.js +1 -1
  213. package/plugins/comments/displaySwitch.mjs +1 -1
  214. package/plugins/contextMenu/commandExecutor.js +1 -1
  215. package/plugins/contextMenu/commandExecutor.mjs +1 -1
  216. package/plugins/contextMenu/contextMenu.js +24 -30
  217. package/plugins/contextMenu/contextMenu.mjs +24 -30
  218. package/plugins/contextMenu/itemsFactory.js +2 -2
  219. package/plugins/contextMenu/itemsFactory.mjs +2 -2
  220. package/plugins/contextMenu/menu/cursor.js +1 -1
  221. package/plugins/contextMenu/menu/cursor.mjs +1 -1
  222. package/plugins/contextMenu/menu/defaultShortcutsList.js +26 -10
  223. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +26 -10
  224. package/plugins/contextMenu/menu/menu.js +14 -22
  225. package/plugins/contextMenu/menu/menu.mjs +14 -22
  226. package/plugins/contextMenu/menu/positioner.js +41 -58
  227. package/plugins/contextMenu/menu/positioner.mjs +41 -58
  228. package/plugins/contextMenu/predefinedItems/alignment.js +1 -1
  229. package/plugins/contextMenu/predefinedItems/clearColumn.js +1 -1
  230. package/plugins/contextMenu/predefinedItems/columnLeft.js +1 -1
  231. package/plugins/contextMenu/predefinedItems/columnRight.js +1 -1
  232. package/plugins/contextMenu/predefinedItems/index.js +1 -1
  233. package/plugins/contextMenu/predefinedItems/readOnly.js +1 -1
  234. package/plugins/contextMenu/predefinedItems/redo.js +1 -1
  235. package/plugins/contextMenu/predefinedItems/removeColumn.js +1 -1
  236. package/plugins/contextMenu/predefinedItems/removeRow.js +1 -1
  237. package/plugins/contextMenu/predefinedItems/rowAbove.js +1 -1
  238. package/plugins/contextMenu/predefinedItems/rowBelow.js +1 -1
  239. package/plugins/contextMenu/predefinedItems/undo.js +1 -1
  240. package/plugins/copyPaste/contextMenuItem/cut.js +1 -1
  241. package/plugins/copyPaste/copyPaste.js +120 -161
  242. package/plugins/copyPaste/copyPaste.mjs +120 -161
  243. package/plugins/copyPaste/copyableRanges.js +43 -66
  244. package/plugins/copyPaste/copyableRanges.mjs +43 -66
  245. package/plugins/customBorders/contextMenuItem/bottom.js +1 -1
  246. package/plugins/customBorders/contextMenuItem/left.js +1 -1
  247. package/plugins/customBorders/contextMenuItem/noBorders.js +1 -1
  248. package/plugins/customBorders/contextMenuItem/right.js +1 -1
  249. package/plugins/customBorders/contextMenuItem/top.js +1 -1
  250. package/plugins/customBorders/customBorders.js +14 -16
  251. package/plugins/customBorders/customBorders.mjs +13 -15
  252. package/plugins/dragToScroll/dragToScroll.js +7 -7
  253. package/plugins/dragToScroll/dragToScroll.mjs +7 -7
  254. package/plugins/dropdownMenu/dropdownMenu.js +84 -110
  255. package/plugins/dropdownMenu/dropdownMenu.mjs +84 -110
  256. package/plugins/exportFile/dataProvider.js +2 -2
  257. package/plugins/exportFile/dataProvider.mjs +2 -2
  258. package/plugins/exportFile/exportFile.js +2 -2
  259. package/plugins/exportFile/exportFile.mjs +1 -1
  260. package/plugins/exportFile/types/_base.js +1 -1
  261. package/plugins/exportFile/types/_base.mjs +1 -1
  262. package/plugins/filters/component/_base.js +1 -1
  263. package/plugins/filters/component/_base.mjs +1 -1
  264. package/plugins/filters/component/actionBar.js +11 -11
  265. package/plugins/filters/component/actionBar.mjs +9 -9
  266. package/plugins/filters/component/condition.js +15 -17
  267. package/plugins/filters/component/condition.mjs +14 -16
  268. package/plugins/filters/component/operators.js +7 -7
  269. package/plugins/filters/component/operators.mjs +7 -7
  270. package/plugins/filters/component/value.js +26 -30
  271. package/plugins/filters/component/value.mjs +25 -29
  272. package/plugins/filters/condition/beginsWith.js +1 -1
  273. package/plugins/filters/condition/between.js +1 -1
  274. package/plugins/filters/condition/contains.js +1 -1
  275. package/plugins/filters/condition/date/after.js +1 -1
  276. package/plugins/filters/condition/date/before.js +1 -1
  277. package/plugins/filters/condition/date/today.js +1 -1
  278. package/plugins/filters/condition/date/tomorrow.js +1 -1
  279. package/plugins/filters/condition/date/yesterday.js +1 -1
  280. package/plugins/filters/condition/empty.js +1 -1
  281. package/plugins/filters/condition/endsWith.js +1 -1
  282. package/plugins/filters/condition/equal.js +1 -1
  283. package/plugins/filters/condition/greaterThan.js +1 -1
  284. package/plugins/filters/condition/greaterThanOrEqual.js +1 -1
  285. package/plugins/filters/condition/lessThan.js +1 -1
  286. package/plugins/filters/condition/lessThanOrEqual.js +1 -1
  287. package/plugins/filters/condition/none.js +1 -1
  288. package/plugins/filters/condition/notBetween.js +1 -1
  289. package/plugins/filters/condition/notContains.js +1 -1
  290. package/plugins/filters/condition/notEmpty.js +1 -1
  291. package/plugins/filters/condition/notEqual.js +1 -1
  292. package/plugins/filters/conditionCollection.js +1 -1
  293. package/plugins/filters/conditionCollection.mjs +1 -1
  294. package/plugins/filters/conditionUpdateObserver.js +23 -25
  295. package/plugins/filters/conditionUpdateObserver.mjs +23 -25
  296. package/plugins/filters/dataFilter.js +2 -2
  297. package/plugins/filters/dataFilter.mjs +2 -2
  298. package/plugins/filters/filters.js +84 -98
  299. package/plugins/filters/filters.mjs +83 -97
  300. package/plugins/filters/logicalOperations/conjunction.js +1 -1
  301. package/plugins/filters/logicalOperations/disjunction.js +1 -1
  302. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +1 -1
  303. package/plugins/filters/ui/_base.js +2 -2
  304. package/plugins/filters/ui/_base.mjs +1 -1
  305. package/plugins/filters/ui/input.js +13 -19
  306. package/plugins/filters/ui/input.mjs +13 -19
  307. package/plugins/filters/ui/link.js +8 -13
  308. package/plugins/filters/ui/link.mjs +8 -13
  309. package/plugins/filters/ui/multipleSelect.js +86 -113
  310. package/plugins/filters/ui/multipleSelect.mjs +85 -112
  311. package/plugins/filters/ui/radioInput.js +12 -20
  312. package/plugins/filters/ui/radioInput.mjs +12 -20
  313. package/plugins/filters/ui/select.js +51 -73
  314. package/plugins/filters/ui/select.mjs +49 -71
  315. package/plugins/formulas/formulas.js +270 -328
  316. package/plugins/formulas/formulas.mjs +271 -329
  317. package/plugins/formulas/indexSyncer/axisSyncer.js +38 -61
  318. package/plugins/formulas/indexSyncer/axisSyncer.mjs +38 -61
  319. package/plugins/formulas/indexSyncer/index.js +25 -48
  320. package/plugins/formulas/indexSyncer/index.mjs +25 -48
  321. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +1 -1
  322. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +1 -1
  323. package/plugins/hiddenColumns/hiddenColumns.js +68 -87
  324. package/plugins/hiddenColumns/hiddenColumns.mjs +68 -87
  325. package/plugins/hiddenRows/contextMenuItem/hideRow.js +1 -1
  326. package/plugins/hiddenRows/contextMenuItem/showRow.js +1 -1
  327. package/plugins/hiddenRows/hiddenRows.js +67 -86
  328. package/plugins/hiddenRows/hiddenRows.mjs +67 -86
  329. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +1 -1
  330. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +1 -1
  331. package/plugins/manualColumnFreeze/manualColumnFreeze.js +24 -32
  332. package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +25 -33
  333. package/plugins/manualColumnMove/manualColumnMove.js +133 -177
  334. package/plugins/manualColumnMove/manualColumnMove.mjs +133 -177
  335. package/plugins/manualColumnMove/ui/_base.js +1 -1
  336. package/plugins/manualColumnMove/ui/_base.mjs +1 -1
  337. package/plugins/manualColumnResize/manualColumnResize.js +169 -230
  338. package/plugins/manualColumnResize/manualColumnResize.mjs +169 -230
  339. package/plugins/manualRowMove/manualRowMove.js +106 -135
  340. package/plugins/manualRowMove/manualRowMove.mjs +106 -135
  341. package/plugins/manualRowMove/ui/_base.js +1 -1
  342. package/plugins/manualRowMove/ui/_base.mjs +1 -1
  343. package/plugins/manualRowResize/manualRowResize.js +150 -209
  344. package/plugins/manualRowResize/manualRowResize.mjs +150 -209
  345. package/plugins/mergeCells/calculations/autofill.js +1 -1
  346. package/plugins/mergeCells/calculations/autofill.mjs +1 -1
  347. package/plugins/mergeCells/calculations/selection.js +3 -72
  348. package/plugins/mergeCells/calculations/selection.mjs +3 -72
  349. package/plugins/mergeCells/cellCoords.js +1 -1
  350. package/plugins/mergeCells/cellCoords.mjs +1 -1
  351. package/plugins/mergeCells/cellsCollection.js +118 -2
  352. package/plugins/mergeCells/cellsCollection.mjs +118 -2
  353. package/plugins/mergeCells/contextMenuItem/toggleMerge.js +12 -2
  354. package/plugins/mergeCells/contextMenuItem/toggleMerge.mjs +11 -1
  355. package/plugins/mergeCells/focusOrder.js +305 -0
  356. package/plugins/mergeCells/focusOrder.mjs +300 -0
  357. package/plugins/mergeCells/mergeCells.js +500 -398
  358. package/plugins/mergeCells/mergeCells.mjs +500 -398
  359. package/plugins/multiColumnSorting/multiColumnSorting.js +9 -3
  360. package/plugins/multiColumnSorting/multiColumnSorting.mjs +9 -3
  361. package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +2 -2
  362. package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +2 -2
  363. package/plugins/nestedHeaders/nestedHeaders.js +206 -254
  364. package/plugins/nestedHeaders/nestedHeaders.mjs +207 -255
  365. package/plugins/nestedHeaders/stateManager/headersTree.js +21 -32
  366. package/plugins/nestedHeaders/stateManager/headersTree.mjs +21 -32
  367. package/plugins/nestedHeaders/stateManager/index.js +30 -41
  368. package/plugins/nestedHeaders/stateManager/index.mjs +30 -41
  369. package/plugins/nestedHeaders/stateManager/sourceSettings.js +19 -30
  370. package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +19 -30
  371. package/plugins/nestedHeaders/utils/ghostTable.js +1 -1
  372. package/plugins/nestedHeaders/utils/ghostTable.mjs +1 -1
  373. package/plugins/nestedRows/data/dataManager.js +2 -2
  374. package/plugins/nestedRows/data/dataManager.mjs +2 -2
  375. package/plugins/nestedRows/nestedRows.js +154 -185
  376. package/plugins/nestedRows/nestedRows.mjs +155 -186
  377. package/plugins/nestedRows/ui/_base.js +1 -1
  378. package/plugins/nestedRows/ui/_base.mjs +1 -1
  379. package/plugins/nestedRows/ui/contextMenu.js +13 -17
  380. package/plugins/nestedRows/ui/contextMenu.mjs +11 -15
  381. package/plugins/nestedRows/utils/rowMoveController.js +6 -6
  382. package/plugins/nestedRows/utils/rowMoveController.mjs +6 -6
  383. package/plugins/persistentState/persistentState.js +1 -1
  384. package/plugins/persistentState/persistentState.mjs +1 -1
  385. package/plugins/persistentState/storage.js +3 -3
  386. package/plugins/persistentState/storage.mjs +3 -3
  387. package/plugins/search/search.js +8 -8
  388. package/plugins/search/search.mjs +8 -8
  389. package/plugins/touchScroll/touchScroll.js +16 -20
  390. package/plugins/touchScroll/touchScroll.mjs +17 -21
  391. package/plugins/trimRows/trimRows.js +7 -7
  392. package/plugins/trimRows/trimRows.mjs +7 -7
  393. package/plugins/undoRedo/index.js +1 -1
  394. package/renderers/checkboxRenderer/checkboxRenderer.js +8 -5
  395. package/renderers/checkboxRenderer/checkboxRenderer.mjs +8 -5
  396. package/selection/highlight/highlight.js +16 -18
  397. package/selection/highlight/highlight.mjs +15 -17
  398. package/selection/highlight/visualSelection.js +3 -1
  399. package/selection/highlight/visualSelection.mjs +3 -1
  400. package/selection/range.js +3 -5
  401. package/selection/range.mjs +2 -4
  402. package/selection/selection.js +227 -69
  403. package/selection/selection.mjs +225 -67
  404. package/selection/transformation.js +149 -118
  405. package/selection/transformation.mjs +149 -118
  406. package/shortcutContexts/commands/editor/closeAndSave.js +2 -2
  407. package/shortcutContexts/commands/editor/closeAndSave.mjs +2 -2
  408. package/shortcutContexts/commands/editor/open.js +18 -3
  409. package/shortcutContexts/commands/editor/open.mjs +18 -3
  410. package/shortcutContexts/commands/extendCellsSelection/down.js +1 -1
  411. package/shortcutContexts/commands/extendCellsSelection/down.mjs +1 -1
  412. package/shortcutContexts/commands/extendCellsSelection/left.js +1 -1
  413. package/shortcutContexts/commands/extendCellsSelection/left.mjs +1 -1
  414. package/shortcutContexts/commands/extendCellsSelection/right.js +1 -1
  415. package/shortcutContexts/commands/extendCellsSelection/right.mjs +1 -1
  416. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +1 -1
  417. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +1 -1
  418. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +3 -1
  419. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +3 -1
  420. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +9 -3
  421. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +9 -3
  422. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +10 -3
  423. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +10 -3
  424. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +3 -1
  425. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +3 -1
  426. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +3 -1
  427. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +3 -1
  428. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +3 -1
  429. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +3 -1
  430. package/shortcutContexts/commands/extendCellsSelection/toRows.js +1 -1
  431. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +1 -1
  432. package/shortcutContexts/commands/extendCellsSelection/up.js +1 -1
  433. package/shortcutContexts/commands/extendCellsSelection/up.mjs +1 -1
  434. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +6 -1
  435. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +6 -1
  436. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +6 -1
  437. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +6 -1
  438. package/shortcutContexts/grid.js +9 -3
  439. package/shortcutContexts/grid.mjs +9 -3
  440. package/shortcuts/context.js +3 -2
  441. package/shortcuts/context.mjs +3 -2
  442. package/shortcuts/manager.js +2 -2
  443. package/shortcuts/manager.mjs +2 -2
  444. package/tableView.js +53 -79
  445. package/tableView.mjs +53 -79
  446. package/translations/changesObservable/observable.js +21 -38
  447. package/translations/changesObservable/observable.mjs +21 -38
  448. package/translations/changesObservable/observer.js +7 -12
  449. package/translations/changesObservable/observer.mjs +6 -11
  450. package/translations/indexMapper.js +1 -1
  451. package/translations/indexMapper.mjs +1 -1
  452. package/translations/mapCollections/aggregatedCollection.js +2 -2
  453. package/translations/mapCollections/aggregatedCollection.mjs +2 -2
  454. package/translations/mapCollections/mapCollection.js +1 -1
  455. package/translations/mapCollections/mapCollection.mjs +1 -1
  456. package/translations/maps/indexMap.js +2 -2
  457. package/translations/maps/indexMap.mjs +2 -2
  458. package/translations/maps/linkedPhysicalIndexToValueMap.js +1 -1
  459. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +1 -1
  460. package/utils/dataStructures/linkedList.js +7 -2
  461. package/utils/dataStructures/linkedList.mjs +7 -2
  462. package/utils/dataStructures/tree.js +2 -2
  463. package/utils/dataStructures/tree.mjs +2 -2
  464. package/utils/ghostTable.js +1 -1
  465. package/utils/ghostTable.mjs +1 -1
  466. package/utils/interval.js +27 -45
  467. package/utils/interval.mjs +27 -45
  468. package/utils/samplesGenerator.js +1 -1
  469. package/utils/samplesGenerator.mjs +1 -1
@@ -0,0 +1,305 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ require("core-js/modules/es.error.cause.js");
5
+ require("core-js/modules/es.array.push.js");
6
+ var _linkedList = _interopRequireDefault(require("../../utils/dataStructures/linkedList"));
7
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
9
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
10
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
11
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
12
+ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
13
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
14
+ /**
15
+ * Class responsible for providing the correct focus order (vertical and horizontal) within a selection that
16
+ * contains merged cells.
17
+ *
18
+ * @private
19
+ */
20
+ var _cellsHorizontalOrder = /*#__PURE__*/new WeakMap();
21
+ var _cellsVerticalOrder = /*#__PURE__*/new WeakMap();
22
+ var _currentHorizontalLinkedNode = /*#__PURE__*/new WeakMap();
23
+ var _currentVerticalLinkedNode = /*#__PURE__*/new WeakMap();
24
+ var _mergedCellsGetter = /*#__PURE__*/new WeakMap();
25
+ var _rowIndexMapper = /*#__PURE__*/new WeakMap();
26
+ var _columnIndexMapper = /*#__PURE__*/new WeakMap();
27
+ var _FocusOrder_brand = /*#__PURE__*/new WeakSet();
28
+ class FocusOrder {
29
+ constructor(_ref) {
30
+ let {
31
+ mergedCellsGetter,
32
+ rowIndexMapper,
33
+ columnIndexMapper
34
+ } = _ref;
35
+ /**
36
+ * Pushes a new node to the provided list order.
37
+ *
38
+ * @param {CellRange} selectedRange The selected range to build the focus order for.
39
+ * @param {LinkedList} listOrder The list order to push the node to.
40
+ * @param {WeakSet} mergeCellsVisitor The set of visited cells.
41
+ * @param {number} row The visual row index.
42
+ * @param {number} column The visual column index.
43
+ * @returns {NodeStructure | null}
44
+ */
45
+ _classPrivateMethodInitSpec(this, _FocusOrder_brand);
46
+ /**
47
+ * The linked list of the all cells within the current selection in horizontal order. The list is
48
+ * recreated every time the selection is changed.
49
+ *
50
+ * @type {LinkedList}
51
+ */
52
+ _classPrivateFieldInitSpec(this, _cellsHorizontalOrder, new _linkedList.default());
53
+ /**
54
+ * The linked list of the all cells within the current selection in horizontal order. The list is
55
+ * recreated every time the selection is changed.
56
+ *
57
+ * @type {LinkedList}
58
+ */
59
+ _classPrivateFieldInitSpec(this, _cellsVerticalOrder, new _linkedList.default());
60
+ /**
61
+ * The currently highlighted cell within the horizontal linked list.
62
+ *
63
+ * @type {NodeStructure | null}
64
+ */
65
+ _classPrivateFieldInitSpec(this, _currentHorizontalLinkedNode, null);
66
+ /**
67
+ * The currently highlighted cell within the vertical linked list.
68
+ *
69
+ * @type {NodeStructure | null}
70
+ */
71
+ _classPrivateFieldInitSpec(this, _currentVerticalLinkedNode, null);
72
+ /**
73
+ * The merged cells getter function.
74
+ *
75
+ * @type {function(): {row: number, col: number, rowspan: number, colspan: number} | null}}
76
+ */
77
+ _classPrivateFieldInitSpec(this, _mergedCellsGetter, null);
78
+ /**
79
+ * The row index mapper.
80
+ *
81
+ * @type {IndexMapper}
82
+ */
83
+ _classPrivateFieldInitSpec(this, _rowIndexMapper, null);
84
+ /**
85
+ * The column index mapper.
86
+ *
87
+ * @type {IndexMapper}
88
+ */
89
+ _classPrivateFieldInitSpec(this, _columnIndexMapper, null);
90
+ _classPrivateFieldSet(_mergedCellsGetter, this, mergedCellsGetter);
91
+ _classPrivateFieldSet(_rowIndexMapper, this, rowIndexMapper);
92
+ _classPrivateFieldSet(_columnIndexMapper, this, columnIndexMapper);
93
+ }
94
+
95
+ /**
96
+ * Gets the currently selected node data from the vertical focus order list.
97
+ *
98
+ * @returns {NodeStructure}
99
+ */
100
+ getCurrentVerticalNode() {
101
+ return _classPrivateFieldGet(_currentVerticalLinkedNode, this).data;
102
+ }
103
+
104
+ /**
105
+ * Gets the first node data from the vertical focus order list.
106
+ *
107
+ * @returns {NodeStructure}
108
+ */
109
+ getFirstVerticalNode() {
110
+ return _classPrivateFieldGet(_cellsVerticalOrder, this).first.data;
111
+ }
112
+
113
+ /**
114
+ * Gets the next selected node data from the vertical focus order list.
115
+ *
116
+ * @returns {NodeStructure}
117
+ */
118
+ getNextVerticalNode() {
119
+ return _classPrivateFieldGet(_currentVerticalLinkedNode, this).next.data;
120
+ }
121
+
122
+ /**
123
+ * Gets the previous selected node data from the vertical focus order list.
124
+ *
125
+ * @returns {NodeStructure}
126
+ */
127
+ getPrevVerticalNode() {
128
+ return _classPrivateFieldGet(_currentVerticalLinkedNode, this).prev.data;
129
+ }
130
+
131
+ /**
132
+ * Gets the currently selected node data from the horizontal focus order list.
133
+ *
134
+ * @returns {NodeStructure}
135
+ */
136
+ getCurrentHorizontalNode() {
137
+ return _classPrivateFieldGet(_currentHorizontalLinkedNode, this).data;
138
+ }
139
+
140
+ /**
141
+ * Gets the first node data from the horizontal focus order list.
142
+ *
143
+ * @returns {NodeStructure}
144
+ */
145
+ getFirstHorizontalNode() {
146
+ return _classPrivateFieldGet(_cellsHorizontalOrder, this).first.data;
147
+ }
148
+
149
+ /**
150
+ * Gets the next selected node data from the horizontal focus order list.
151
+ *
152
+ * @returns {NodeStructure}
153
+ */
154
+ getNextHorizontalNode() {
155
+ return _classPrivateFieldGet(_currentHorizontalLinkedNode, this).next.data;
156
+ }
157
+
158
+ /**
159
+ * Gets the previous selected node data from the horizontal focus order list.
160
+ *
161
+ * @returns {NodeStructure}
162
+ */
163
+ getPrevHorizontalNode() {
164
+ return _classPrivateFieldGet(_currentHorizontalLinkedNode, this).prev.data;
165
+ }
166
+
167
+ /**
168
+ * Sets the previous node from the vertical focus order list as active.
169
+ */
170
+ setPrevNodeAsActive() {
171
+ _classPrivateFieldSet(_currentVerticalLinkedNode, this, _classPrivateFieldGet(_currentVerticalLinkedNode, this).prev);
172
+ _classPrivateFieldSet(_currentHorizontalLinkedNode, this, _classPrivateFieldGet(_currentHorizontalLinkedNode, this).prev);
173
+ }
174
+
175
+ /**
176
+ * Sets the previous node from the horizontal focus order list as active.
177
+ */
178
+ setNextNodeAsActive() {
179
+ _classPrivateFieldSet(_currentVerticalLinkedNode, this, _classPrivateFieldGet(_currentVerticalLinkedNode, this).next);
180
+ _classPrivateFieldSet(_currentHorizontalLinkedNode, this, _classPrivateFieldGet(_currentHorizontalLinkedNode, this).next);
181
+ }
182
+
183
+ /**
184
+ * Rebuilds the focus order list based on the provided selection.
185
+ *
186
+ * @param {CellRange} selectedRange The selected range to build the focus order for.
187
+ */
188
+ buildFocusOrder(selectedRange) {
189
+ const topStart = selectedRange.getTopStartCorner();
190
+ const bottomEnd = selectedRange.getBottomEndCorner();
191
+ const visitedHorizontalCells = new WeakSet();
192
+ _classPrivateFieldSet(_cellsHorizontalOrder, this, new _linkedList.default());
193
+ for (let r = topStart.row; r <= bottomEnd.row; r++) {
194
+ if (_classPrivateFieldGet(_rowIndexMapper, this).isHidden(r)) {
195
+ // eslint-disable-next-line no-continue
196
+ continue;
197
+ }
198
+ for (let c = topStart.col; c <= bottomEnd.col; c++) {
199
+ if (_classPrivateFieldGet(_columnIndexMapper, this).isHidden(c)) {
200
+ // eslint-disable-next-line no-continue
201
+ continue;
202
+ }
203
+ const node = _assertClassBrand(_FocusOrder_brand, this, _pushOrderNode).call(this, selectedRange, _classPrivateFieldGet(_cellsHorizontalOrder, this), visitedHorizontalCells, r, c);
204
+ if (node) {
205
+ _classPrivateFieldSet(_currentHorizontalLinkedNode, this, node);
206
+ }
207
+ }
208
+ }
209
+
210
+ // create circular linked list
211
+ if (_classPrivateFieldGet(_cellsHorizontalOrder, this).first) {
212
+ _classPrivateFieldGet(_cellsHorizontalOrder, this).first.prev = _classPrivateFieldGet(_cellsHorizontalOrder, this).last;
213
+ _classPrivateFieldGet(_cellsHorizontalOrder, this).last.next = _classPrivateFieldGet(_cellsHorizontalOrder, this).first;
214
+ }
215
+ const visitedVerticalCells = new WeakSet();
216
+ _classPrivateFieldSet(_cellsVerticalOrder, this, new _linkedList.default());
217
+ for (let c = topStart.col; c <= bottomEnd.col; c++) {
218
+ if (_classPrivateFieldGet(_columnIndexMapper, this).isHidden(c)) {
219
+ // eslint-disable-next-line no-continue
220
+ continue;
221
+ }
222
+ for (let r = topStart.row; r <= bottomEnd.row; r++) {
223
+ if (_classPrivateFieldGet(_rowIndexMapper, this).isHidden(r)) {
224
+ // eslint-disable-next-line no-continue
225
+ continue;
226
+ }
227
+ const node = _assertClassBrand(_FocusOrder_brand, this, _pushOrderNode).call(this, selectedRange, _classPrivateFieldGet(_cellsVerticalOrder, this), visitedVerticalCells, r, c);
228
+ if (node) {
229
+ _classPrivateFieldSet(_currentVerticalLinkedNode, this, node);
230
+ }
231
+ }
232
+ }
233
+
234
+ // create circular linked list
235
+ if (_classPrivateFieldGet(_cellsVerticalOrder, this).first) {
236
+ _classPrivateFieldGet(_cellsVerticalOrder, this).first.prev = _classPrivateFieldGet(_cellsVerticalOrder, this).last;
237
+ _classPrivateFieldGet(_cellsVerticalOrder, this).last.next = _classPrivateFieldGet(_cellsVerticalOrder, this).first;
238
+ }
239
+ }
240
+ /**
241
+ * Sets the active node based on the provided row and column.
242
+ *
243
+ * @param {number} row The visual row index.
244
+ * @param {number} column The visual column index.
245
+ * @returns {FocusOrder}
246
+ */
247
+ setActiveNode(row, column) {
248
+ _classPrivateFieldGet(_cellsHorizontalOrder, this).inorder(node => {
249
+ const {
250
+ rowStart,
251
+ rowEnd,
252
+ colStart,
253
+ colEnd
254
+ } = node.data;
255
+ if (row >= rowStart && row <= rowEnd && column >= colStart && column <= colEnd) {
256
+ _classPrivateFieldSet(_currentHorizontalLinkedNode, this, node);
257
+ return false;
258
+ }
259
+ });
260
+ _classPrivateFieldGet(_cellsVerticalOrder, this).inorder(node => {
261
+ const {
262
+ rowStart,
263
+ rowEnd,
264
+ colStart,
265
+ colEnd
266
+ } = node.data;
267
+ if (row >= rowStart && row <= rowEnd && column >= colStart && column <= colEnd) {
268
+ _classPrivateFieldSet(_currentVerticalLinkedNode, this, node);
269
+ return false;
270
+ }
271
+ });
272
+ return this;
273
+ }
274
+ }
275
+ exports.FocusOrder = FocusOrder;
276
+ function _pushOrderNode(selectedRange, listOrder, mergeCellsVisitor, row, column) {
277
+ const topStart = selectedRange.getTopStartCorner();
278
+ const bottomEnd = selectedRange.getBottomEndCorner();
279
+ const highlight = selectedRange.highlight.clone().normalize();
280
+ const mergeParent = _classPrivateFieldGet(_mergedCellsGetter, this).call(this, row, column);
281
+ if (mergeParent && mergeCellsVisitor.has(mergeParent)) {
282
+ return null;
283
+ }
284
+ const node = {
285
+ colStart: column,
286
+ colEnd: column,
287
+ rowStart: row,
288
+ rowEnd: row
289
+ };
290
+ if (mergeParent) {
291
+ mergeCellsVisitor.add(mergeParent);
292
+ if (mergeParent.row < topStart.row || mergeParent.row + mergeParent.rowspan - 1 > bottomEnd.row || mergeParent.col < topStart.col || mergeParent.col + mergeParent.colspan - 1 > bottomEnd.col) {
293
+ return null;
294
+ }
295
+ node.colStart = mergeParent.col;
296
+ node.colEnd = mergeParent.col + mergeParent.colspan - 1;
297
+ node.rowStart = mergeParent.row;
298
+ node.rowEnd = mergeParent.row + mergeParent.rowspan - 1;
299
+ }
300
+ const linkedNode = listOrder.push(node);
301
+ if (row === highlight.row && column === highlight.col || mergeParent && highlight.row >= mergeParent.row && highlight.row <= mergeParent.row + mergeParent.rowspan - 1 && highlight.col >= mergeParent.col && highlight.col <= mergeParent.col + mergeParent.colspan - 1) {
302
+ return linkedNode;
303
+ }
304
+ return null;
305
+ }
@@ -0,0 +1,300 @@
1
+ import "core-js/modules/es.error.cause.js";
2
+ import "core-js/modules/es.array.push.js";
3
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
4
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
5
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
6
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
7
+ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
8
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
9
+ import LinkedList from "../../utils/dataStructures/linkedList.mjs";
10
+ /**
11
+ * Class responsible for providing the correct focus order (vertical and horizontal) within a selection that
12
+ * contains merged cells.
13
+ *
14
+ * @private
15
+ */
16
+ var _cellsHorizontalOrder = /*#__PURE__*/new WeakMap();
17
+ var _cellsVerticalOrder = /*#__PURE__*/new WeakMap();
18
+ var _currentHorizontalLinkedNode = /*#__PURE__*/new WeakMap();
19
+ var _currentVerticalLinkedNode = /*#__PURE__*/new WeakMap();
20
+ var _mergedCellsGetter = /*#__PURE__*/new WeakMap();
21
+ var _rowIndexMapper = /*#__PURE__*/new WeakMap();
22
+ var _columnIndexMapper = /*#__PURE__*/new WeakMap();
23
+ var _FocusOrder_brand = /*#__PURE__*/new WeakSet();
24
+ export class FocusOrder {
25
+ constructor(_ref) {
26
+ let {
27
+ mergedCellsGetter,
28
+ rowIndexMapper,
29
+ columnIndexMapper
30
+ } = _ref;
31
+ /**
32
+ * Pushes a new node to the provided list order.
33
+ *
34
+ * @param {CellRange} selectedRange The selected range to build the focus order for.
35
+ * @param {LinkedList} listOrder The list order to push the node to.
36
+ * @param {WeakSet} mergeCellsVisitor The set of visited cells.
37
+ * @param {number} row The visual row index.
38
+ * @param {number} column The visual column index.
39
+ * @returns {NodeStructure | null}
40
+ */
41
+ _classPrivateMethodInitSpec(this, _FocusOrder_brand);
42
+ /**
43
+ * The linked list of the all cells within the current selection in horizontal order. The list is
44
+ * recreated every time the selection is changed.
45
+ *
46
+ * @type {LinkedList}
47
+ */
48
+ _classPrivateFieldInitSpec(this, _cellsHorizontalOrder, new LinkedList());
49
+ /**
50
+ * The linked list of the all cells within the current selection in horizontal order. The list is
51
+ * recreated every time the selection is changed.
52
+ *
53
+ * @type {LinkedList}
54
+ */
55
+ _classPrivateFieldInitSpec(this, _cellsVerticalOrder, new LinkedList());
56
+ /**
57
+ * The currently highlighted cell within the horizontal linked list.
58
+ *
59
+ * @type {NodeStructure | null}
60
+ */
61
+ _classPrivateFieldInitSpec(this, _currentHorizontalLinkedNode, null);
62
+ /**
63
+ * The currently highlighted cell within the vertical linked list.
64
+ *
65
+ * @type {NodeStructure | null}
66
+ */
67
+ _classPrivateFieldInitSpec(this, _currentVerticalLinkedNode, null);
68
+ /**
69
+ * The merged cells getter function.
70
+ *
71
+ * @type {function(): {row: number, col: number, rowspan: number, colspan: number} | null}}
72
+ */
73
+ _classPrivateFieldInitSpec(this, _mergedCellsGetter, null);
74
+ /**
75
+ * The row index mapper.
76
+ *
77
+ * @type {IndexMapper}
78
+ */
79
+ _classPrivateFieldInitSpec(this, _rowIndexMapper, null);
80
+ /**
81
+ * The column index mapper.
82
+ *
83
+ * @type {IndexMapper}
84
+ */
85
+ _classPrivateFieldInitSpec(this, _columnIndexMapper, null);
86
+ _classPrivateFieldSet(_mergedCellsGetter, this, mergedCellsGetter);
87
+ _classPrivateFieldSet(_rowIndexMapper, this, rowIndexMapper);
88
+ _classPrivateFieldSet(_columnIndexMapper, this, columnIndexMapper);
89
+ }
90
+
91
+ /**
92
+ * Gets the currently selected node data from the vertical focus order list.
93
+ *
94
+ * @returns {NodeStructure}
95
+ */
96
+ getCurrentVerticalNode() {
97
+ return _classPrivateFieldGet(_currentVerticalLinkedNode, this).data;
98
+ }
99
+
100
+ /**
101
+ * Gets the first node data from the vertical focus order list.
102
+ *
103
+ * @returns {NodeStructure}
104
+ */
105
+ getFirstVerticalNode() {
106
+ return _classPrivateFieldGet(_cellsVerticalOrder, this).first.data;
107
+ }
108
+
109
+ /**
110
+ * Gets the next selected node data from the vertical focus order list.
111
+ *
112
+ * @returns {NodeStructure}
113
+ */
114
+ getNextVerticalNode() {
115
+ return _classPrivateFieldGet(_currentVerticalLinkedNode, this).next.data;
116
+ }
117
+
118
+ /**
119
+ * Gets the previous selected node data from the vertical focus order list.
120
+ *
121
+ * @returns {NodeStructure}
122
+ */
123
+ getPrevVerticalNode() {
124
+ return _classPrivateFieldGet(_currentVerticalLinkedNode, this).prev.data;
125
+ }
126
+
127
+ /**
128
+ * Gets the currently selected node data from the horizontal focus order list.
129
+ *
130
+ * @returns {NodeStructure}
131
+ */
132
+ getCurrentHorizontalNode() {
133
+ return _classPrivateFieldGet(_currentHorizontalLinkedNode, this).data;
134
+ }
135
+
136
+ /**
137
+ * Gets the first node data from the horizontal focus order list.
138
+ *
139
+ * @returns {NodeStructure}
140
+ */
141
+ getFirstHorizontalNode() {
142
+ return _classPrivateFieldGet(_cellsHorizontalOrder, this).first.data;
143
+ }
144
+
145
+ /**
146
+ * Gets the next selected node data from the horizontal focus order list.
147
+ *
148
+ * @returns {NodeStructure}
149
+ */
150
+ getNextHorizontalNode() {
151
+ return _classPrivateFieldGet(_currentHorizontalLinkedNode, this).next.data;
152
+ }
153
+
154
+ /**
155
+ * Gets the previous selected node data from the horizontal focus order list.
156
+ *
157
+ * @returns {NodeStructure}
158
+ */
159
+ getPrevHorizontalNode() {
160
+ return _classPrivateFieldGet(_currentHorizontalLinkedNode, this).prev.data;
161
+ }
162
+
163
+ /**
164
+ * Sets the previous node from the vertical focus order list as active.
165
+ */
166
+ setPrevNodeAsActive() {
167
+ _classPrivateFieldSet(_currentVerticalLinkedNode, this, _classPrivateFieldGet(_currentVerticalLinkedNode, this).prev);
168
+ _classPrivateFieldSet(_currentHorizontalLinkedNode, this, _classPrivateFieldGet(_currentHorizontalLinkedNode, this).prev);
169
+ }
170
+
171
+ /**
172
+ * Sets the previous node from the horizontal focus order list as active.
173
+ */
174
+ setNextNodeAsActive() {
175
+ _classPrivateFieldSet(_currentVerticalLinkedNode, this, _classPrivateFieldGet(_currentVerticalLinkedNode, this).next);
176
+ _classPrivateFieldSet(_currentHorizontalLinkedNode, this, _classPrivateFieldGet(_currentHorizontalLinkedNode, this).next);
177
+ }
178
+
179
+ /**
180
+ * Rebuilds the focus order list based on the provided selection.
181
+ *
182
+ * @param {CellRange} selectedRange The selected range to build the focus order for.
183
+ */
184
+ buildFocusOrder(selectedRange) {
185
+ const topStart = selectedRange.getTopStartCorner();
186
+ const bottomEnd = selectedRange.getBottomEndCorner();
187
+ const visitedHorizontalCells = new WeakSet();
188
+ _classPrivateFieldSet(_cellsHorizontalOrder, this, new LinkedList());
189
+ for (let r = topStart.row; r <= bottomEnd.row; r++) {
190
+ if (_classPrivateFieldGet(_rowIndexMapper, this).isHidden(r)) {
191
+ // eslint-disable-next-line no-continue
192
+ continue;
193
+ }
194
+ for (let c = topStart.col; c <= bottomEnd.col; c++) {
195
+ if (_classPrivateFieldGet(_columnIndexMapper, this).isHidden(c)) {
196
+ // eslint-disable-next-line no-continue
197
+ continue;
198
+ }
199
+ const node = _assertClassBrand(_FocusOrder_brand, this, _pushOrderNode).call(this, selectedRange, _classPrivateFieldGet(_cellsHorizontalOrder, this), visitedHorizontalCells, r, c);
200
+ if (node) {
201
+ _classPrivateFieldSet(_currentHorizontalLinkedNode, this, node);
202
+ }
203
+ }
204
+ }
205
+
206
+ // create circular linked list
207
+ if (_classPrivateFieldGet(_cellsHorizontalOrder, this).first) {
208
+ _classPrivateFieldGet(_cellsHorizontalOrder, this).first.prev = _classPrivateFieldGet(_cellsHorizontalOrder, this).last;
209
+ _classPrivateFieldGet(_cellsHorizontalOrder, this).last.next = _classPrivateFieldGet(_cellsHorizontalOrder, this).first;
210
+ }
211
+ const visitedVerticalCells = new WeakSet();
212
+ _classPrivateFieldSet(_cellsVerticalOrder, this, new LinkedList());
213
+ for (let c = topStart.col; c <= bottomEnd.col; c++) {
214
+ if (_classPrivateFieldGet(_columnIndexMapper, this).isHidden(c)) {
215
+ // eslint-disable-next-line no-continue
216
+ continue;
217
+ }
218
+ for (let r = topStart.row; r <= bottomEnd.row; r++) {
219
+ if (_classPrivateFieldGet(_rowIndexMapper, this).isHidden(r)) {
220
+ // eslint-disable-next-line no-continue
221
+ continue;
222
+ }
223
+ const node = _assertClassBrand(_FocusOrder_brand, this, _pushOrderNode).call(this, selectedRange, _classPrivateFieldGet(_cellsVerticalOrder, this), visitedVerticalCells, r, c);
224
+ if (node) {
225
+ _classPrivateFieldSet(_currentVerticalLinkedNode, this, node);
226
+ }
227
+ }
228
+ }
229
+
230
+ // create circular linked list
231
+ if (_classPrivateFieldGet(_cellsVerticalOrder, this).first) {
232
+ _classPrivateFieldGet(_cellsVerticalOrder, this).first.prev = _classPrivateFieldGet(_cellsVerticalOrder, this).last;
233
+ _classPrivateFieldGet(_cellsVerticalOrder, this).last.next = _classPrivateFieldGet(_cellsVerticalOrder, this).first;
234
+ }
235
+ }
236
+ /**
237
+ * Sets the active node based on the provided row and column.
238
+ *
239
+ * @param {number} row The visual row index.
240
+ * @param {number} column The visual column index.
241
+ * @returns {FocusOrder}
242
+ */
243
+ setActiveNode(row, column) {
244
+ _classPrivateFieldGet(_cellsHorizontalOrder, this).inorder(node => {
245
+ const {
246
+ rowStart,
247
+ rowEnd,
248
+ colStart,
249
+ colEnd
250
+ } = node.data;
251
+ if (row >= rowStart && row <= rowEnd && column >= colStart && column <= colEnd) {
252
+ _classPrivateFieldSet(_currentHorizontalLinkedNode, this, node);
253
+ return false;
254
+ }
255
+ });
256
+ _classPrivateFieldGet(_cellsVerticalOrder, this).inorder(node => {
257
+ const {
258
+ rowStart,
259
+ rowEnd,
260
+ colStart,
261
+ colEnd
262
+ } = node.data;
263
+ if (row >= rowStart && row <= rowEnd && column >= colStart && column <= colEnd) {
264
+ _classPrivateFieldSet(_currentVerticalLinkedNode, this, node);
265
+ return false;
266
+ }
267
+ });
268
+ return this;
269
+ }
270
+ }
271
+ function _pushOrderNode(selectedRange, listOrder, mergeCellsVisitor, row, column) {
272
+ const topStart = selectedRange.getTopStartCorner();
273
+ const bottomEnd = selectedRange.getBottomEndCorner();
274
+ const highlight = selectedRange.highlight.clone().normalize();
275
+ const mergeParent = _classPrivateFieldGet(_mergedCellsGetter, this).call(this, row, column);
276
+ if (mergeParent && mergeCellsVisitor.has(mergeParent)) {
277
+ return null;
278
+ }
279
+ const node = {
280
+ colStart: column,
281
+ colEnd: column,
282
+ rowStart: row,
283
+ rowEnd: row
284
+ };
285
+ if (mergeParent) {
286
+ mergeCellsVisitor.add(mergeParent);
287
+ if (mergeParent.row < topStart.row || mergeParent.row + mergeParent.rowspan - 1 > bottomEnd.row || mergeParent.col < topStart.col || mergeParent.col + mergeParent.colspan - 1 > bottomEnd.col) {
288
+ return null;
289
+ }
290
+ node.colStart = mergeParent.col;
291
+ node.colEnd = mergeParent.col + mergeParent.colspan - 1;
292
+ node.rowStart = mergeParent.row;
293
+ node.rowEnd = mergeParent.row + mergeParent.rowspan - 1;
294
+ }
295
+ const linkedNode = listOrder.push(node);
296
+ if (row === highlight.row && column === highlight.col || mergeParent && highlight.row >= mergeParent.row && highlight.row <= mergeParent.row + mergeParent.rowspan - 1 && highlight.col >= mergeParent.col && highlight.col <= mergeParent.col + mergeParent.colspan - 1) {
297
+ return linkedNode;
298
+ }
299
+ return null;
300
+ }