handsontable 11.1.0 → 12.1.0

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 (461) hide show
  1. package/3rdparty/walkontable/src/border.js +120 -98
  2. package/3rdparty/walkontable/src/border.mjs +120 -94
  3. package/3rdparty/walkontable/src/cell/coords.js +59 -17
  4. package/3rdparty/walkontable/src/cell/coords.mjs +55 -17
  5. package/3rdparty/walkontable/src/cell/range.d.ts +10 -2
  6. package/3rdparty/walkontable/src/cell/range.js +278 -99
  7. package/3rdparty/walkontable/src/cell/range.mjs +273 -99
  8. package/3rdparty/walkontable/src/core/_base.js +452 -0
  9. package/3rdparty/walkontable/src/core/_base.mjs +440 -0
  10. package/3rdparty/walkontable/src/core/clone.js +97 -0
  11. package/3rdparty/walkontable/src/core/clone.mjs +80 -0
  12. package/3rdparty/walkontable/src/core/core.js +183 -0
  13. package/3rdparty/walkontable/src/core/core.mjs +160 -0
  14. package/3rdparty/walkontable/src/event.js +99 -66
  15. package/3rdparty/walkontable/src/event.mjs +99 -63
  16. package/3rdparty/walkontable/src/facade/core.js +251 -0
  17. package/3rdparty/walkontable/src/facade/core.mjs +243 -0
  18. package/3rdparty/walkontable/src/index.js +2 -46
  19. package/3rdparty/walkontable/src/index.mjs +3 -13
  20. package/3rdparty/walkontable/src/overlay/_base.js +124 -57
  21. package/3rdparty/walkontable/src/overlay/_base.mjs +124 -57
  22. package/3rdparty/walkontable/src/overlay/bottom.js +96 -80
  23. package/3rdparty/walkontable/src/overlay/bottom.mjs +96 -80
  24. package/3rdparty/walkontable/src/overlay/{bottomLeftCorner.js → bottomInlineStartCorner.js} +45 -62
  25. package/3rdparty/walkontable/src/overlay/{bottomLeftCorner.mjs → bottomInlineStartCorner.mjs} +44 -61
  26. package/3rdparty/walkontable/src/overlay/constants.js +25 -9
  27. package/3rdparty/walkontable/src/overlay/constants.mjs +14 -4
  28. package/3rdparty/walkontable/src/overlay/index.js +10 -19
  29. package/3rdparty/walkontable/src/overlay/index.mjs +4 -5
  30. package/3rdparty/walkontable/src/overlay/{left.js → inlineStart.js} +113 -82
  31. package/3rdparty/walkontable/src/overlay/{left.mjs → inlineStart.mjs} +112 -81
  32. package/3rdparty/walkontable/src/overlay/top.js +93 -68
  33. package/3rdparty/walkontable/src/overlay/top.mjs +93 -68
  34. package/3rdparty/walkontable/src/overlay/{topLeftCorner.js → topInlineStartCorner.js} +56 -57
  35. package/3rdparty/walkontable/src/overlay/{topLeftCorner.mjs → topInlineStartCorner.mjs} +51 -52
  36. package/3rdparty/walkontable/src/overlays.js +225 -156
  37. package/3rdparty/walkontable/src/overlays.mjs +224 -154
  38. package/3rdparty/walkontable/src/renderer/cells.js +4 -3
  39. package/3rdparty/walkontable/src/renderer/cells.mjs +4 -3
  40. package/3rdparty/walkontable/src/renderer/colGroup.js +2 -2
  41. package/3rdparty/walkontable/src/renderer/colGroup.mjs +2 -2
  42. package/3rdparty/walkontable/src/renderer/columnHeaders.js +2 -2
  43. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +2 -2
  44. package/3rdparty/walkontable/src/renderer/rowHeaders.js +2 -2
  45. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +2 -2
  46. package/3rdparty/walkontable/src/renderer/rows.js +2 -2
  47. package/3rdparty/walkontable/src/renderer/rows.mjs +2 -2
  48. package/3rdparty/walkontable/src/scroll.js +125 -104
  49. package/3rdparty/walkontable/src/scroll.mjs +124 -104
  50. package/3rdparty/walkontable/src/selection.js +10 -14
  51. package/3rdparty/walkontable/src/selection.mjs +10 -12
  52. package/3rdparty/walkontable/src/settings.js +235 -126
  53. package/3rdparty/walkontable/src/settings.mjs +235 -125
  54. package/3rdparty/walkontable/src/table/bottom.js +16 -5
  55. package/3rdparty/walkontable/src/table/bottom.mjs +15 -5
  56. package/3rdparty/walkontable/src/table/{bottomLeftCorner.js → bottomInlineStartCorner.js} +27 -15
  57. package/3rdparty/walkontable/src/table/{bottomLeftCorner.mjs → bottomInlineStartCorner.mjs} +26 -15
  58. package/3rdparty/walkontable/src/table/{left.js → inlineStart.js} +23 -15
  59. package/3rdparty/walkontable/src/table/{left.mjs → inlineStart.mjs} +22 -15
  60. package/3rdparty/walkontable/src/table/master.js +22 -12
  61. package/3rdparty/walkontable/src/table/master.mjs +22 -12
  62. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +12 -6
  63. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +12 -6
  64. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +12 -6
  65. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +12 -6
  66. package/3rdparty/walkontable/src/table/mixin/{stickyColumnsLeft.js → stickyColumnsStart.js} +13 -7
  67. package/3rdparty/walkontable/src/table/mixin/{stickyColumnsLeft.mjs → stickyColumnsStart.mjs} +13 -7
  68. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +11 -5
  69. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +11 -5
  70. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -3
  71. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -3
  72. package/3rdparty/walkontable/src/table/top.js +16 -5
  73. package/3rdparty/walkontable/src/table/top.mjs +15 -5
  74. package/3rdparty/walkontable/src/table/{topLeftCorner.js → topInlineStartCorner.js} +27 -15
  75. package/3rdparty/walkontable/src/table/{topLeftCorner.mjs → topInlineStartCorner.mjs} +26 -15
  76. package/3rdparty/walkontable/src/table.js +235 -140
  77. package/3rdparty/walkontable/src/table.mjs +231 -134
  78. package/3rdparty/walkontable/src/types.js +103 -0
  79. package/3rdparty/walkontable/src/types.mjs +102 -0
  80. package/3rdparty/walkontable/src/utils/column.js +22 -33
  81. package/3rdparty/walkontable/src/utils/column.mjs +22 -30
  82. package/3rdparty/walkontable/src/utils/orderView/sharedView.js +2 -2
  83. package/3rdparty/walkontable/src/utils/orderView/sharedView.mjs +2 -2
  84. package/3rdparty/walkontable/src/utils/row.js +9 -4
  85. package/3rdparty/walkontable/src/utils/row.mjs +9 -4
  86. package/3rdparty/walkontable/src/viewport.js +89 -100
  87. package/3rdparty/walkontable/src/viewport.mjs +89 -97
  88. package/CHANGELOG.md +92 -0
  89. package/LICENSE.txt +1 -1
  90. package/README.md +0 -1
  91. package/base.js +2 -2
  92. package/base.mjs +2 -2
  93. package/cellTypes/timeType/timeType.d.ts +6 -6
  94. package/cellTypes/timeType/timeType.js +4 -5
  95. package/cellTypes/timeType/timeType.mjs +4 -5
  96. package/core.d.ts +6 -1
  97. package/core.js +508 -80
  98. package/core.mjs +517 -92
  99. package/dataMap/index.js +4 -0
  100. package/dataMap/index.mjs +2 -1
  101. package/dataMap/metaManager/index.js +2 -2
  102. package/dataMap/metaManager/index.mjs +2 -2
  103. package/dataMap/metaManager/metaLayers/globalMeta.js +4 -0
  104. package/dataMap/metaManager/metaLayers/globalMeta.mjs +4 -0
  105. package/dataMap/metaManager/metaLayers/tableMeta.js +2 -2
  106. package/dataMap/metaManager/metaLayers/tableMeta.mjs +2 -2
  107. package/dataMap/metaManager/metaSchema.js +282 -187
  108. package/dataMap/metaManager/metaSchema.mjs +282 -187
  109. package/dataMap/metaManager/mods/extendMetaProperties.js +126 -0
  110. package/dataMap/metaManager/mods/extendMetaProperties.mjs +113 -0
  111. package/dataMap/replaceData.js +3 -17
  112. package/dataMap/replaceData.mjs +3 -17
  113. package/dist/handsontable.css +268 -92
  114. package/dist/handsontable.full.css +269 -103
  115. package/dist/handsontable.full.js +41990 -35658
  116. package/dist/handsontable.full.min.css +9 -9
  117. package/dist/handsontable.full.min.js +144 -144
  118. package/dist/handsontable.js +29561 -25597
  119. package/dist/handsontable.min.css +8 -8
  120. package/dist/handsontable.min.js +4 -4
  121. package/dist/languages/all.js +131 -34
  122. package/dist/languages/all.min.js +1 -1
  123. package/dist/languages/ar-AR.js +167 -0
  124. package/dist/languages/ar-AR.min.js +1 -0
  125. package/dist/languages/cs-CZ.js +167 -0
  126. package/dist/languages/cs-CZ.min.js +1 -0
  127. package/dist/languages/de-CH.js +31 -29
  128. package/dist/languages/de-CH.min.js +1 -1
  129. package/dist/languages/de-DE.js +4 -2
  130. package/dist/languages/de-DE.min.js +1 -1
  131. package/dist/languages/en-US.js +4 -2
  132. package/dist/languages/en-US.min.js +1 -1
  133. package/dist/languages/es-MX.js +4 -2
  134. package/dist/languages/es-MX.min.js +1 -1
  135. package/dist/languages/fr-FR.js +4 -2
  136. package/dist/languages/fr-FR.min.js +1 -1
  137. package/dist/languages/it-IT.js +4 -2
  138. package/dist/languages/it-IT.min.js +1 -1
  139. package/dist/languages/ja-JP.js +36 -38
  140. package/dist/languages/ja-JP.min.js +1 -1
  141. package/dist/languages/ko-KR.js +36 -39
  142. package/dist/languages/ko-KR.min.js +1 -1
  143. package/dist/languages/lv-LV.js +2 -2
  144. package/dist/languages/lv-LV.min.js +1 -1
  145. package/dist/languages/nb-NO.js +2 -2
  146. package/dist/languages/nb-NO.min.js +1 -1
  147. package/dist/languages/nl-NL.js +2 -2
  148. package/dist/languages/nl-NL.min.js +1 -1
  149. package/dist/languages/pl-PL.js +2 -2
  150. package/dist/languages/pl-PL.min.js +1 -1
  151. package/dist/languages/pt-BR.js +2 -2
  152. package/dist/languages/pt-BR.min.js +1 -1
  153. package/dist/languages/ru-RU.js +2 -2
  154. package/dist/languages/ru-RU.min.js +1 -1
  155. package/dist/languages/sr-SP.js +171 -0
  156. package/dist/languages/sr-SP.min.js +1 -0
  157. package/dist/languages/zh-CN.js +24 -24
  158. package/dist/languages/zh-CN.min.js +1 -1
  159. package/dist/languages/zh-TW.js +24 -24
  160. package/dist/languages/zh-TW.min.js +1 -1
  161. package/editorManager.js +120 -267
  162. package/editorManager.mjs +128 -278
  163. package/editors/autocompleteEditor/autocompleteEditor.js +22 -25
  164. package/editors/autocompleteEditor/autocompleteEditor.mjs +22 -25
  165. package/editors/baseEditor/baseEditor.js +205 -34
  166. package/editors/baseEditor/baseEditor.mjs +200 -32
  167. package/editors/checkboxEditor/checkboxEditor.js +2 -2
  168. package/editors/checkboxEditor/checkboxEditor.mjs +2 -2
  169. package/editors/dateEditor/dateEditor.js +21 -8
  170. package/editors/dateEditor/dateEditor.mjs +22 -9
  171. package/editors/dropdownEditor/dropdownEditor.js +3 -3
  172. package/editors/dropdownEditor/dropdownEditor.mjs +3 -3
  173. package/editors/handsontableEditor/handsontableEditor.js +106 -55
  174. package/editors/handsontableEditor/handsontableEditor.mjs +106 -55
  175. package/editors/index.d.ts +3 -0
  176. package/editors/index.js +6 -0
  177. package/editors/index.mjs +3 -1
  178. package/editors/numericEditor/numericEditor.js +2 -2
  179. package/editors/numericEditor/numericEditor.mjs +2 -2
  180. package/editors/passwordEditor/passwordEditor.js +3 -3
  181. package/editors/passwordEditor/passwordEditor.mjs +3 -3
  182. package/editors/selectEditor/selectEditor.js +65 -110
  183. package/editors/selectEditor/selectEditor.mjs +66 -109
  184. package/editors/textEditor/caretPositioner.js +49 -0
  185. package/editors/textEditor/caretPositioner.mjs +42 -0
  186. package/editors/textEditor/textEditor.js +205 -181
  187. package/editors/textEditor/textEditor.mjs +199 -179
  188. package/editors/timeEditor/index.d.ts +1 -0
  189. package/editors/timeEditor/index.js +9 -0
  190. package/editors/timeEditor/index.mjs +1 -0
  191. package/editors/timeEditor/timeEditor.d.ts +7 -0
  192. package/editors/timeEditor/timeEditor.js +105 -0
  193. package/editors/timeEditor/timeEditor.mjs +84 -0
  194. package/eventManager.js +4 -2
  195. package/eventManager.mjs +4 -2
  196. package/helpers/mixed.js +2 -2
  197. package/helpers/mixed.mjs +2 -2
  198. package/i18n/languages/ar-AR.js +41 -0
  199. package/i18n/languages/ar-AR.mjs +17 -0
  200. package/i18n/languages/cs-CZ.js +40 -0
  201. package/i18n/languages/cs-CZ.mjs +16 -0
  202. package/i18n/languages/index.js +12 -0
  203. package/i18n/languages/index.mjs +4 -1
  204. package/i18n/languages/sr-SP.js +40 -0
  205. package/i18n/languages/sr-SP.mjs +16 -0
  206. package/index.d.ts +4 -0
  207. package/languages/all.js +131 -34
  208. package/languages/ar-AR.js +167 -0
  209. package/languages/ar-AR.mjs +19 -0
  210. package/languages/cs-CZ.js +167 -0
  211. package/languages/cs-CZ.mjs +18 -0
  212. package/languages/de-CH.js +31 -29
  213. package/languages/de-DE.js +4 -2
  214. package/languages/en-US.js +4 -2
  215. package/languages/es-MX.js +4 -2
  216. package/languages/fr-FR.js +4 -2
  217. package/languages/index.js +131 -34
  218. package/languages/index.mjs +4 -1
  219. package/languages/it-IT.js +4 -2
  220. package/languages/ja-JP.js +36 -38
  221. package/languages/ko-KR.js +36 -39
  222. package/languages/lv-LV.js +2 -2
  223. package/languages/nb-NO.js +2 -2
  224. package/languages/nl-NL.js +2 -2
  225. package/languages/pl-PL.js +2 -2
  226. package/languages/pt-BR.js +2 -2
  227. package/languages/ru-RU.js +2 -2
  228. package/languages/sr-SP.js +171 -0
  229. package/languages/sr-SP.mjs +18 -0
  230. package/languages/zh-CN.js +24 -24
  231. package/languages/zh-TW.js +24 -24
  232. package/package.json +44 -4
  233. package/pluginHooks.js +49 -13
  234. package/pluginHooks.mjs +49 -13
  235. package/plugins/autoColumnSize/autoColumnSize.js +15 -10
  236. package/plugins/autoColumnSize/autoColumnSize.mjs +15 -10
  237. package/plugins/autoRowSize/autoRowSize.js +14 -9
  238. package/plugins/autoRowSize/autoRowSize.mjs +14 -9
  239. package/plugins/autofill/autofill.js +49 -33
  240. package/plugins/autofill/autofill.mjs +49 -32
  241. package/plugins/autofill/utils.js +10 -11
  242. package/plugins/autofill/utils.mjs +10 -10
  243. package/plugins/base/base.d.ts +8 -2
  244. package/plugins/base/base.js +67 -4
  245. package/plugins/base/base.mjs +66 -4
  246. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +3 -3
  247. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +3 -3
  248. package/plugins/bindRowsWithHeaders/maps/looseBindsMap.js +3 -3
  249. package/plugins/bindRowsWithHeaders/maps/looseBindsMap.mjs +3 -3
  250. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.js +3 -3
  251. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.mjs +3 -3
  252. package/plugins/collapsibleColumns/collapsibleColumns.js +27 -9
  253. package/plugins/collapsibleColumns/collapsibleColumns.mjs +27 -9
  254. package/plugins/columnSorting/columnSorting.js +5 -7
  255. package/plugins/columnSorting/columnSorting.mjs +5 -6
  256. package/plugins/columnSummary/columnSummary.js +3 -3
  257. package/plugins/columnSummary/columnSummary.mjs +3 -3
  258. package/plugins/comments/commentEditor.js +18 -2
  259. package/plugins/comments/commentEditor.mjs +19 -3
  260. package/plugins/comments/comments.js +57 -46
  261. package/plugins/comments/comments.mjs +58 -46
  262. package/plugins/contextMenu/contextMenu.js +10 -6
  263. package/plugins/contextMenu/contextMenu.mjs +10 -6
  264. package/plugins/contextMenu/menu.js +222 -110
  265. package/plugins/contextMenu/menu.mjs +219 -111
  266. package/plugins/contextMenu/predefinedItems/columnLeft.js +12 -4
  267. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +11 -4
  268. package/plugins/contextMenu/predefinedItems/columnRight.js +9 -9
  269. package/plugins/contextMenu/predefinedItems/columnRight.mjs +9 -9
  270. package/plugins/contextMenu/utils.js +2 -2
  271. package/plugins/contextMenu/utils.mjs +2 -2
  272. package/plugins/copyPaste/copyPaste.js +31 -21
  273. package/plugins/copyPaste/copyPaste.mjs +30 -21
  274. package/plugins/customBorders/contextMenuItem/left.js +4 -3
  275. package/plugins/customBorders/contextMenuItem/left.mjs +4 -3
  276. package/plugins/customBorders/contextMenuItem/right.js +4 -3
  277. package/plugins/customBorders/contextMenuItem/right.mjs +4 -3
  278. package/plugins/customBorders/customBorders.js +144 -87
  279. package/plugins/customBorders/customBorders.mjs +143 -85
  280. package/plugins/customBorders/utils.js +131 -27
  281. package/plugins/customBorders/utils.mjs +115 -27
  282. package/plugins/dragToScroll/dragToScroll.js +10 -5
  283. package/plugins/dragToScroll/dragToScroll.mjs +10 -5
  284. package/plugins/dropdownMenu/dropdownMenu.js +9 -7
  285. package/plugins/dropdownMenu/dropdownMenu.mjs +9 -7
  286. package/plugins/exportFile/exportFile.js +2 -2
  287. package/plugins/exportFile/exportFile.mjs +2 -2
  288. package/plugins/exportFile/types/csv.js +2 -2
  289. package/plugins/exportFile/types/csv.mjs +2 -2
  290. package/plugins/filters/component/actionBar.js +2 -2
  291. package/plugins/filters/component/actionBar.mjs +2 -2
  292. package/plugins/filters/component/condition.js +3 -3
  293. package/plugins/filters/component/condition.mjs +3 -3
  294. package/plugins/filters/component/operators.js +2 -2
  295. package/plugins/filters/component/operators.mjs +2 -2
  296. package/plugins/filters/component/value.js +3 -3
  297. package/plugins/filters/component/value.mjs +3 -3
  298. package/plugins/filters/filters.js +11 -8
  299. package/plugins/filters/filters.mjs +11 -8
  300. package/plugins/filters/ui/input.js +3 -3
  301. package/plugins/filters/ui/input.mjs +3 -3
  302. package/plugins/filters/ui/link.js +3 -3
  303. package/plugins/filters/ui/link.mjs +3 -3
  304. package/plugins/filters/ui/multipleSelect.js +18 -31
  305. package/plugins/filters/ui/multipleSelect.mjs +18 -31
  306. package/plugins/filters/ui/radioInput.js +3 -3
  307. package/plugins/filters/ui/radioInput.mjs +3 -3
  308. package/plugins/filters/ui/select.js +4 -4
  309. package/plugins/filters/ui/select.mjs +4 -4
  310. package/plugins/formulas/formulas.js +14 -9
  311. package/plugins/formulas/formulas.mjs +14 -9
  312. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +2 -4
  313. package/plugins/hiddenColumns/contextMenuItem/hideColumn.mjs +2 -4
  314. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +5 -5
  315. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +5 -5
  316. package/plugins/hiddenColumns/hiddenColumns.js +9 -4
  317. package/plugins/hiddenColumns/hiddenColumns.mjs +9 -4
  318. package/plugins/hiddenRows/contextMenuItem/hideRow.js +2 -4
  319. package/plugins/hiddenRows/contextMenuItem/hideRow.mjs +2 -4
  320. package/plugins/hiddenRows/contextMenuItem/showRow.js +5 -5
  321. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +5 -5
  322. package/plugins/hiddenRows/hiddenRows.js +9 -4
  323. package/plugins/hiddenRows/hiddenRows.mjs +9 -4
  324. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +1 -1
  325. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.mjs +1 -1
  326. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +1 -1
  327. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.mjs +1 -1
  328. package/plugins/manualColumnFreeze/manualColumnFreeze.js +54 -15
  329. package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +49 -15
  330. package/plugins/manualColumnMove/manualColumnMove.js +70 -70
  331. package/plugins/manualColumnMove/manualColumnMove.mjs +71 -71
  332. package/plugins/manualColumnMove/ui/_base.js +25 -12
  333. package/plugins/manualColumnMove/ui/_base.mjs +24 -12
  334. package/plugins/manualColumnMove/ui/backlight.js +3 -3
  335. package/plugins/manualColumnMove/ui/backlight.mjs +3 -3
  336. package/plugins/manualColumnMove/ui/guideline.js +3 -3
  337. package/plugins/manualColumnMove/ui/guideline.mjs +3 -3
  338. package/plugins/manualColumnResize/manualColumnResize.js +37 -21
  339. package/plugins/manualColumnResize/manualColumnResize.mjs +37 -21
  340. package/plugins/manualRowMove/manualRowMove.js +26 -34
  341. package/plugins/manualRowMove/manualRowMove.mjs +26 -34
  342. package/plugins/manualRowMove/ui/backlight.js +3 -3
  343. package/plugins/manualRowMove/ui/backlight.mjs +3 -3
  344. package/plugins/manualRowMove/ui/guideline.js +3 -3
  345. package/plugins/manualRowMove/ui/guideline.mjs +3 -3
  346. package/plugins/manualRowResize/manualRowResize.js +34 -19
  347. package/plugins/manualRowResize/manualRowResize.mjs +34 -19
  348. package/plugins/mergeCells/calculations/autofill.js +6 -5
  349. package/plugins/mergeCells/calculations/autofill.mjs +6 -4
  350. package/plugins/mergeCells/calculations/selection.js +9 -4
  351. package/plugins/mergeCells/calculations/selection.mjs +9 -4
  352. package/plugins/mergeCells/cellCoords.js +16 -4
  353. package/plugins/mergeCells/cellCoords.mjs +16 -3
  354. package/plugins/mergeCells/cellsCollection.js +30 -23
  355. package/plugins/mergeCells/cellsCollection.mjs +30 -22
  356. package/plugins/mergeCells/mergeCells.js +94 -61
  357. package/plugins/mergeCells/mergeCells.mjs +94 -59
  358. package/plugins/multiColumnSorting/multiColumnSorting.js +4 -6
  359. package/plugins/multiColumnSorting/multiColumnSorting.mjs +4 -5
  360. package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +51 -57
  361. package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +52 -57
  362. package/plugins/nestedHeaders/nestedHeaders.js +31 -20
  363. package/plugins/nestedHeaders/nestedHeaders.mjs +31 -20
  364. package/plugins/nestedHeaders/stateManager/utils.js +3 -4
  365. package/plugins/nestedHeaders/stateManager/utils.mjs +3 -4
  366. package/plugins/nestedHeaders/utils/ghostTable.js +114 -75
  367. package/plugins/nestedHeaders/utils/ghostTable.mjs +114 -74
  368. package/plugins/nestedRows/nestedRows.js +9 -4
  369. package/plugins/nestedRows/nestedRows.mjs +9 -4
  370. package/plugins/nestedRows/ui/collapsing.js +2 -2
  371. package/plugins/nestedRows/ui/collapsing.mjs +2 -2
  372. package/plugins/nestedRows/ui/contextMenu.js +2 -2
  373. package/plugins/nestedRows/ui/contextMenu.mjs +2 -2
  374. package/plugins/nestedRows/ui/headers.js +2 -2
  375. package/plugins/nestedRows/ui/headers.mjs +2 -2
  376. package/plugins/nestedRows/utils/rowMoveController.js +2 -4
  377. package/plugins/nestedRows/utils/rowMoveController.mjs +2 -3
  378. package/plugins/persistentState/persistentState.js +9 -4
  379. package/plugins/persistentState/persistentState.mjs +9 -4
  380. package/plugins/search/search.js +9 -4
  381. package/plugins/search/search.mjs +9 -4
  382. package/plugins/touchScroll/touchScroll.js +27 -21
  383. package/plugins/touchScroll/touchScroll.mjs +27 -21
  384. package/plugins/trimRows/trimRows.js +9 -4
  385. package/plugins/trimRows/trimRows.mjs +9 -4
  386. package/plugins/undoRedo/undoRedo.js +53 -47
  387. package/plugins/undoRedo/undoRedo.mjs +53 -46
  388. package/renderers/autocompleteRenderer/autocompleteRenderer.js +1 -3
  389. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +1 -2
  390. package/renderers/checkboxRenderer/checkboxRenderer.js +48 -43
  391. package/renderers/checkboxRenderer/checkboxRenderer.mjs +48 -41
  392. package/renderers/index.d.ts +4 -1
  393. package/renderers/index.js +6 -0
  394. package/renderers/index.mjs +3 -1
  395. package/renderers/numericRenderer/numericRenderer.js +1 -0
  396. package/renderers/numericRenderer/numericRenderer.mjs +1 -0
  397. package/renderers/timeRenderer/index.d.ts +1 -0
  398. package/renderers/timeRenderer/index.js +9 -0
  399. package/renderers/timeRenderer/index.mjs +1 -0
  400. package/renderers/timeRenderer/timeRenderer.d.ts +5 -0
  401. package/renderers/timeRenderer/timeRenderer.js +31 -0
  402. package/renderers/timeRenderer/timeRenderer.mjs +20 -0
  403. package/selection/highlight/visualSelection.js +94 -220
  404. package/selection/highlight/visualSelection.mjs +91 -213
  405. package/selection/mouseEventHandler.js +15 -10
  406. package/selection/mouseEventHandler.mjs +15 -9
  407. package/selection/range.js +4 -5
  408. package/selection/range.mjs +4 -5
  409. package/selection/selection.js +35 -22
  410. package/selection/selection.mjs +35 -20
  411. package/selection/transformation.js +4 -6
  412. package/selection/transformation.mjs +4 -5
  413. package/settings.d.ts +3 -1
  414. package/shortcuts/context.d.ts +20 -0
  415. package/shortcuts/context.js +296 -0
  416. package/shortcuts/context.mjs +268 -0
  417. package/shortcuts/index.d.ts +1 -0
  418. package/shortcuts/index.js +8 -0
  419. package/shortcuts/index.mjs +1 -0
  420. package/shortcuts/keyObserver.js +67 -0
  421. package/shortcuts/keyObserver.mjs +58 -0
  422. package/shortcuts/manager.d.ts +10 -0
  423. package/shortcuts/manager.js +185 -0
  424. package/shortcuts/manager.mjs +176 -0
  425. package/shortcuts/recorder.js +192 -0
  426. package/shortcuts/recorder.mjs +180 -0
  427. package/shortcuts/utils.js +77 -0
  428. package/shortcuts/utils.mjs +54 -0
  429. package/tableView.js +164 -84
  430. package/tableView.mjs +164 -74
  431. package/translations/changesObservable/observer.js +0 -1
  432. package/translations/changesObservable/observer.mjs +0 -1
  433. package/translations/indexMapper.d.ts +3 -1
  434. package/translations/indexMapper.js +89 -11
  435. package/translations/indexMapper.mjs +91 -20
  436. package/translations/mapCollections/aggregatedCollection.js +2 -2
  437. package/translations/mapCollections/aggregatedCollection.mjs +2 -2
  438. package/translations/maps/hidingMap.js +4 -2
  439. package/translations/maps/hidingMap.mjs +4 -2
  440. package/translations/maps/indexMap.js +2 -0
  441. package/translations/maps/indexMap.mjs +2 -0
  442. package/translations/maps/indexesSequence.js +5 -3
  443. package/translations/maps/indexesSequence.mjs +5 -3
  444. package/translations/maps/linkedPhysicalIndexToValueMap.js +5 -3
  445. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +5 -3
  446. package/translations/maps/physicalIndexToValueMap.js +5 -3
  447. package/translations/maps/physicalIndexToValueMap.mjs +5 -3
  448. package/translations/maps/trimmingMap.js +4 -2
  449. package/translations/maps/trimmingMap.mjs +4 -2
  450. package/utils/dataStructures/uniqueMap.js +14 -1
  451. package/utils/dataStructures/uniqueMap.mjs +14 -1
  452. package/utils/dataStructures/uniqueSet.js +9 -0
  453. package/utils/dataStructures/uniqueSet.mjs +9 -0
  454. package/utils/ghostTable.js +1 -1
  455. package/utils/ghostTable.mjs +1 -1
  456. package/3rdparty/walkontable/src/core.js +0 -309
  457. package/3rdparty/walkontable/src/core.mjs +0 -293
  458. package/3rdparty/walkontable/src/overlay/registerer.js +0 -70
  459. package/3rdparty/walkontable/src/overlay/registerer.mjs +0 -57
  460. package/utils/keyStateObserver.js +0 -121
  461. package/utils/keyStateObserver.mjs +0 -103
@@ -69,13 +69,13 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+
69
69
 
70
70
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
71
71
 
72
- function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }
72
+ function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }
73
73
 
74
74
  function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
75
75
 
76
76
  function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
77
77
 
78
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
78
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
79
79
 
80
80
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
81
81
 
@@ -85,7 +85,7 @@ function _assertThisInitialized(self) { if (self === void 0) { throw new Referen
85
85
 
86
86
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
87
87
 
88
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
88
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
89
89
 
90
90
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
91
91
 
@@ -106,6 +106,8 @@ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) {
106
106
  var PLUGIN_KEY = 'nestedHeaders';
107
107
  exports.PLUGIN_KEY = PLUGIN_KEY;
108
108
  var PLUGIN_PRIORITY = 280;
109
+ /* eslint-disable jsdoc/require-description-complete-sentence */
110
+
109
111
  /**
110
112
  * @plugin NestedHeaders
111
113
  * @class NestedHeaders
@@ -166,7 +168,9 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
166
168
  value: null
167
169
  });
168
170
 
169
- _defineProperty(_assertThisInitialized(_this), "ghostTable", new _ghostTable.default(_assertThisInitialized(_this)));
171
+ _defineProperty(_assertThisInitialized(_this), "ghostTable", new _ghostTable.default(_this.hot, function (row, column) {
172
+ return _this.getHeaderSettings(row, column);
173
+ }));
170
174
 
171
175
  _defineProperty(_assertThisInitialized(_this), "detectedOverlappedHeaders", false);
172
176
 
@@ -237,7 +241,10 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
237
241
  this.updatePlugin(); // @TODO: Workaround for broken plugin initialization abstraction.
238
242
  }
239
243
  /**
240
- * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.
244
+ * Updates the plugin's state.
245
+ *
246
+ * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:
247
+ * - [`nestedHeaders`](@/api/options.md#nestedheaders)
241
248
  */
242
249
 
243
250
  }, {
@@ -287,10 +294,12 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
287
294
  _classPrivateFieldGet(_this3, _stateManager).triggerColumnModification(actionName, columnIndex);
288
295
  }
289
296
  });
297
+
298
+ _this3.ghostTable.buildWidthsMap();
290
299
  }));
291
300
  }
292
301
 
293
- this.ghostTable.buildWidthsMapper();
302
+ this.ghostTable.setLayersCount(this.getLayersCount()).buildWidthsMap();
294
303
 
295
304
  _get(_getPrototypeOf(NestedHeaders.prototype), "updatePlugin", this).call(this);
296
305
  }
@@ -366,11 +375,11 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
366
375
  return;
367
376
  }
368
377
 
369
- var wt = this.hot.view.wt;
378
+ var wt = this.hot.view._wt;
370
379
  var headerLevels = wt.getSetting('columnHeaders').length;
371
380
  var mainHeaders = wt.wtTable.THEAD;
372
381
  var topHeaders = wt.wtOverlays.topOverlay.clone.wtTable.THEAD;
373
- var topLeftCornerHeaders = wt.wtOverlays.topLeftCornerOverlay ? wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.THEAD : null;
382
+ var topLeftCornerHeaders = wt.wtOverlays.topInlineStartCornerOverlay ? wt.wtOverlays.topInlineStartCornerOverlay.clone.wtTable.THEAD : null;
374
383
 
375
384
  for (var i = 0; i < headerLevels; i++) {
376
385
  var masterLevel = mainHeaders.childNodes[i];
@@ -413,7 +422,8 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
413
422
  value: function headerRendererFactory(headerLevel) {
414
423
  var _this4 = this;
415
424
 
416
- var fixedColumnsLeft = this.hot.view.wt.getSetting('fixedColumnsLeft');
425
+ var fixedColumnsStart = this.hot.view._wt.getSetting('fixedColumnsStart');
426
+
417
427
  return function (renderedColumnIndex, TH) {
418
428
  var _classPrivateFieldGet2;
419
429
 
@@ -441,12 +451,13 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
441
451
  if (isPlaceholder || isHidden) {
442
452
  (0, _element.addClass)(TH, 'hiddenHeader');
443
453
  } else if (colspan > 1) {
444
- var _view$wt$wtOverlays$t, _view$wt$wtOverlays$l;
454
+ var _wtOverlays$topInline, _wtOverlays$inlineSta;
445
455
 
446
- var isTopLeftOverlay = (_view$wt$wtOverlays$t = view.wt.wtOverlays.topLeftCornerOverlay) === null || _view$wt$wtOverlays$t === void 0 ? void 0 : _view$wt$wtOverlays$t.clone.wtTable.THEAD.contains(TH);
447
- var isLeftOverlay = (_view$wt$wtOverlays$l = view.wt.wtOverlays.leftOverlay) === null || _view$wt$wtOverlays$l === void 0 ? void 0 : _view$wt$wtOverlays$l.clone.wtTable.THEAD.contains(TH); // Check if there is a fixed column enabled, if so then reduce colspan to fixed column width.
456
+ var wtOverlays = view._wt.wtOverlays;
457
+ var isTopInlineStartOverlay = (_wtOverlays$topInline = wtOverlays.topInlineStartCornerOverlay) === null || _wtOverlays$topInline === void 0 ? void 0 : _wtOverlays$topInline.clone.wtTable.THEAD.contains(TH);
458
+ var isInlineStartOverlay = (_wtOverlays$inlineSta = wtOverlays.inlineStartOverlay) === null || _wtOverlays$inlineSta === void 0 ? void 0 : _wtOverlays$inlineSta.clone.wtTable.THEAD.contains(TH); // Check if there is a fixed column enabled, if so then reduce colspan to fixed column width.
448
459
 
449
- var correctedColspan = isTopLeftOverlay || isLeftOverlay ? Math.min(colspan, fixedColumnsLeft - renderedColumnIndex) : colspan;
460
+ var correctedColspan = isTopInlineStartOverlay || isInlineStartOverlay ? Math.min(colspan, fixedColumnsStart - renderedColumnIndex) : colspan;
450
461
 
451
462
  if (correctedColspan > 1) {
452
463
  TH.setAttribute('colspan', correctedColspan);
@@ -558,9 +569,9 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
558
569
 
559
570
  if (event.shiftKey && currentSelection) {
560
571
  if (coords.col < currentSelection.from.col) {
561
- columnsToSelect.push(currentSelection.getTopRightCorner().col, columnIndex, coords.row);
572
+ columnsToSelect.push(currentSelection.getTopEndCorner().col, columnIndex, coords.row);
562
573
  } else if (coords.col > currentSelection.from.col) {
563
- columnsToSelect.push(currentSelection.getTopLeftCorner().col, columnIndex + origColspan - 1, coords.row);
574
+ columnsToSelect.push(currentSelection.getTopStartCorner().col, columnIndex + origColspan - 1, coords.row);
564
575
  } else {
565
576
  columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, coords.row);
566
577
  }
@@ -600,8 +611,8 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
600
611
  var columnIndex = headerNodeData.columnIndex,
601
612
  origColspan = headerNodeData.origColspan;
602
613
  var selectedRange = this.hot.getSelectedRangeLast();
603
- var topLeftCoords = selectedRange.getTopLeftCorner();
604
- var bottomRightCoords = selectedRange.getBottomRightCorner();
614
+ var topStartCoords = selectedRange.getTopStartCorner();
615
+ var bottomEndCoords = selectedRange.getBottomEndCorner();
605
616
  var from = selectedRange.from; // Block the Selection module in controlling how the columns and cells are selected.
606
617
  // From now on, the plugin is responsible for the selection.
607
618
 
@@ -610,9 +621,9 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
610
621
  var columnsToSelect = [];
611
622
 
612
623
  if (coords.col < from.col) {
613
- columnsToSelect.push(bottomRightCoords.col, columnIndex);
624
+ columnsToSelect.push(bottomEndCoords.col, columnIndex);
614
625
  } else if (coords.col > from.col) {
615
- columnsToSelect.push(topLeftCoords.col, columnIndex + origColspan - 1);
626
+ columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1);
616
627
  } else {
617
628
  columnsToSelect.push(columnIndex, columnIndex + origColspan - 1);
618
629
  }
@@ -686,7 +697,7 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
686
697
  }, {
687
698
  key: "onModifyColWidth",
688
699
  value: function onModifyColWidth(width, column) {
689
- var cachedWidth = this.ghostTable.widthsCache[column];
700
+ var cachedWidth = this.ghostTable.getWidth(column);
690
701
  return width > cachedWidth ? width : cachedWidth;
691
702
  }
692
703
  /**
@@ -29,13 +29,13 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+
29
29
 
30
30
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
31
31
 
32
- function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }
32
+ function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }
33
33
 
34
34
  function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
35
35
 
36
36
  function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
37
37
 
38
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
38
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
39
39
 
40
40
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
41
41
 
@@ -45,7 +45,7 @@ function _assertThisInitialized(self) { if (self === void 0) { throw new Referen
45
45
 
46
46
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
47
47
 
48
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
48
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
49
49
 
50
50
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
51
51
 
@@ -74,6 +74,8 @@ import StateManager from "./stateManager/index.mjs";
74
74
  import GhostTable from "./utils/ghostTable.mjs";
75
75
  export var PLUGIN_KEY = 'nestedHeaders';
76
76
  export var PLUGIN_PRIORITY = 280;
77
+ /* eslint-disable jsdoc/require-description-complete-sentence */
78
+
77
79
  /**
78
80
  * @plugin NestedHeaders
79
81
  * @class NestedHeaders
@@ -132,7 +134,9 @@ export var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
132
134
  value: null
133
135
  });
134
136
 
135
- _defineProperty(_assertThisInitialized(_this), "ghostTable", new GhostTable(_assertThisInitialized(_this)));
137
+ _defineProperty(_assertThisInitialized(_this), "ghostTable", new GhostTable(_this.hot, function (row, column) {
138
+ return _this.getHeaderSettings(row, column);
139
+ }));
136
140
 
137
141
  _defineProperty(_assertThisInitialized(_this), "detectedOverlappedHeaders", false);
138
142
 
@@ -203,7 +207,10 @@ export var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
203
207
  this.updatePlugin(); // @TODO: Workaround for broken plugin initialization abstraction.
204
208
  }
205
209
  /**
206
- * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.
210
+ * Updates the plugin's state.
211
+ *
212
+ * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:
213
+ * - [`nestedHeaders`](@/api/options.md#nestedheaders)
207
214
  */
208
215
 
209
216
  }, {
@@ -253,10 +260,12 @@ export var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
253
260
  _classPrivateFieldGet(_this3, _stateManager).triggerColumnModification(actionName, columnIndex);
254
261
  }
255
262
  });
263
+
264
+ _this3.ghostTable.buildWidthsMap();
256
265
  }));
257
266
  }
258
267
 
259
- this.ghostTable.buildWidthsMapper();
268
+ this.ghostTable.setLayersCount(this.getLayersCount()).buildWidthsMap();
260
269
 
261
270
  _get(_getPrototypeOf(NestedHeaders.prototype), "updatePlugin", this).call(this);
262
271
  }
@@ -332,11 +341,11 @@ export var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
332
341
  return;
333
342
  }
334
343
 
335
- var wt = this.hot.view.wt;
344
+ var wt = this.hot.view._wt;
336
345
  var headerLevels = wt.getSetting('columnHeaders').length;
337
346
  var mainHeaders = wt.wtTable.THEAD;
338
347
  var topHeaders = wt.wtOverlays.topOverlay.clone.wtTable.THEAD;
339
- var topLeftCornerHeaders = wt.wtOverlays.topLeftCornerOverlay ? wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.THEAD : null;
348
+ var topLeftCornerHeaders = wt.wtOverlays.topInlineStartCornerOverlay ? wt.wtOverlays.topInlineStartCornerOverlay.clone.wtTable.THEAD : null;
340
349
 
341
350
  for (var i = 0; i < headerLevels; i++) {
342
351
  var masterLevel = mainHeaders.childNodes[i];
@@ -379,7 +388,8 @@ export var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
379
388
  value: function headerRendererFactory(headerLevel) {
380
389
  var _this4 = this;
381
390
 
382
- var fixedColumnsLeft = this.hot.view.wt.getSetting('fixedColumnsLeft');
391
+ var fixedColumnsStart = this.hot.view._wt.getSetting('fixedColumnsStart');
392
+
383
393
  return function (renderedColumnIndex, TH) {
384
394
  var _classPrivateFieldGet2;
385
395
 
@@ -407,12 +417,13 @@ export var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
407
417
  if (isPlaceholder || isHidden) {
408
418
  addClass(TH, 'hiddenHeader');
409
419
  } else if (colspan > 1) {
410
- var _view$wt$wtOverlays$t, _view$wt$wtOverlays$l;
420
+ var _wtOverlays$topInline, _wtOverlays$inlineSta;
411
421
 
412
- var isTopLeftOverlay = (_view$wt$wtOverlays$t = view.wt.wtOverlays.topLeftCornerOverlay) === null || _view$wt$wtOverlays$t === void 0 ? void 0 : _view$wt$wtOverlays$t.clone.wtTable.THEAD.contains(TH);
413
- var isLeftOverlay = (_view$wt$wtOverlays$l = view.wt.wtOverlays.leftOverlay) === null || _view$wt$wtOverlays$l === void 0 ? void 0 : _view$wt$wtOverlays$l.clone.wtTable.THEAD.contains(TH); // Check if there is a fixed column enabled, if so then reduce colspan to fixed column width.
422
+ var wtOverlays = view._wt.wtOverlays;
423
+ var isTopInlineStartOverlay = (_wtOverlays$topInline = wtOverlays.topInlineStartCornerOverlay) === null || _wtOverlays$topInline === void 0 ? void 0 : _wtOverlays$topInline.clone.wtTable.THEAD.contains(TH);
424
+ var isInlineStartOverlay = (_wtOverlays$inlineSta = wtOverlays.inlineStartOverlay) === null || _wtOverlays$inlineSta === void 0 ? void 0 : _wtOverlays$inlineSta.clone.wtTable.THEAD.contains(TH); // Check if there is a fixed column enabled, if so then reduce colspan to fixed column width.
414
425
 
415
- var correctedColspan = isTopLeftOverlay || isLeftOverlay ? Math.min(colspan, fixedColumnsLeft - renderedColumnIndex) : colspan;
426
+ var correctedColspan = isTopInlineStartOverlay || isInlineStartOverlay ? Math.min(colspan, fixedColumnsStart - renderedColumnIndex) : colspan;
416
427
 
417
428
  if (correctedColspan > 1) {
418
429
  TH.setAttribute('colspan', correctedColspan);
@@ -524,9 +535,9 @@ export var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
524
535
 
525
536
  if (event.shiftKey && currentSelection) {
526
537
  if (coords.col < currentSelection.from.col) {
527
- columnsToSelect.push(currentSelection.getTopRightCorner().col, columnIndex, coords.row);
538
+ columnsToSelect.push(currentSelection.getTopEndCorner().col, columnIndex, coords.row);
528
539
  } else if (coords.col > currentSelection.from.col) {
529
- columnsToSelect.push(currentSelection.getTopLeftCorner().col, columnIndex + origColspan - 1, coords.row);
540
+ columnsToSelect.push(currentSelection.getTopStartCorner().col, columnIndex + origColspan - 1, coords.row);
530
541
  } else {
531
542
  columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, coords.row);
532
543
  }
@@ -566,8 +577,8 @@ export var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
566
577
  var columnIndex = headerNodeData.columnIndex,
567
578
  origColspan = headerNodeData.origColspan;
568
579
  var selectedRange = this.hot.getSelectedRangeLast();
569
- var topLeftCoords = selectedRange.getTopLeftCorner();
570
- var bottomRightCoords = selectedRange.getBottomRightCorner();
580
+ var topStartCoords = selectedRange.getTopStartCorner();
581
+ var bottomEndCoords = selectedRange.getBottomEndCorner();
571
582
  var from = selectedRange.from; // Block the Selection module in controlling how the columns and cells are selected.
572
583
  // From now on, the plugin is responsible for the selection.
573
584
 
@@ -576,9 +587,9 @@ export var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
576
587
  var columnsToSelect = [];
577
588
 
578
589
  if (coords.col < from.col) {
579
- columnsToSelect.push(bottomRightCoords.col, columnIndex);
590
+ columnsToSelect.push(bottomEndCoords.col, columnIndex);
580
591
  } else if (coords.col > from.col) {
581
- columnsToSelect.push(topLeftCoords.col, columnIndex + origColspan - 1);
592
+ columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1);
582
593
  } else {
583
594
  columnsToSelect.push(columnIndex, columnIndex + origColspan - 1);
584
595
  }
@@ -652,7 +663,7 @@ export var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
652
663
  }, {
653
664
  key: "onModifyColWidth",
654
665
  value: function onModifyColWidth(width, column) {
655
- var cachedWidth = this.ghostTable.widthsCache[column];
666
+ var cachedWidth = this.ghostTable.getWidth(column);
656
667
  return width > cachedWidth ? width : cachedWidth;
657
668
  }
658
669
  /**
@@ -9,15 +9,14 @@ exports.createPlaceholderHeaderSettings = createPlaceholderHeaderSettings;
9
9
  * @property {string} label The name/label of the column header.
10
10
  * @property {number} colspan Current calculated colspan value of the rendered column header element.
11
11
  * @property {number} origColspan Original colspan value, set once while parsing user-defined nested header settings.
12
- * @property {boolean} collapsible The flag determines whether the node is collapsible (can be collpased/expanded).
12
+ * @property {boolean} collapsible The flag determines whether the node is collapsible (can be collapsed/expanded).
13
13
  * @property {number[]} crossHiddenColumns The list of visual column indexes which indicates that the specified columns within
14
14
  * the header settings are hidden.
15
15
  * @property {boolean} isCollapsed The flag determines whether the node is collapsed.
16
16
  * @property {boolean} isHidden The flag determines whether the column header at specified index is hidden. If true
17
17
  * the TH element will be rendered as hidden (display: none).
18
- * @property {boolean} isRoot The flag which determines whether the column header settings is accually not renderable. That kind
18
+ * @property {boolean} isRoot The flag which determines whether the column header settings is actually not renderable. That kind
19
19
  * of objects are generated after colspaned header to fill an array to correct size.
20
- *
21
20
  * For example for header with colspan = 8 the 7 blank objects are generated to fill the array settings
22
21
  * to length = 8.
23
22
  * @property {boolean} isPlaceholder The flag determines whether the column header at the specified index is non-renderable.
@@ -63,7 +62,7 @@ function createDefaultHeaderSettings() {
63
62
  };
64
63
  }
65
64
  /**
66
- * Creates the header settings placeholder object. Those settings tell the header renderers
65
+ * Creates the placeholder header settings object. Those settings tell the header renderers
67
66
  * that this TH element should not be rendered (the node will be overlapped by the previously
68
67
  * created node with colspan bigger than 1).
69
68
  *
@@ -3,15 +3,14 @@
3
3
  * @property {string} label The name/label of the column header.
4
4
  * @property {number} colspan Current calculated colspan value of the rendered column header element.
5
5
  * @property {number} origColspan Original colspan value, set once while parsing user-defined nested header settings.
6
- * @property {boolean} collapsible The flag determines whether the node is collapsible (can be collpased/expanded).
6
+ * @property {boolean} collapsible The flag determines whether the node is collapsible (can be collapsed/expanded).
7
7
  * @property {number[]} crossHiddenColumns The list of visual column indexes which indicates that the specified columns within
8
8
  * the header settings are hidden.
9
9
  * @property {boolean} isCollapsed The flag determines whether the node is collapsed.
10
10
  * @property {boolean} isHidden The flag determines whether the column header at specified index is hidden. If true
11
11
  * the TH element will be rendered as hidden (display: none).
12
- * @property {boolean} isRoot The flag which determines whether the column header settings is accually not renderable. That kind
12
+ * @property {boolean} isRoot The flag which determines whether the column header settings is actually not renderable. That kind
13
13
  * of objects are generated after colspaned header to fill an array to correct size.
14
- *
15
14
  * For example for header with colspan = 8 the 7 blank objects are generated to fill the array settings
16
15
  * to length = 8.
17
16
  * @property {boolean} isPlaceholder The flag determines whether the column header at the specified index is non-renderable.
@@ -57,7 +56,7 @@ export function createDefaultHeaderSettings() {
57
56
  };
58
57
  }
59
58
  /**
60
- * Creates the header settings placeholder object. Those settings tell the header renderers
59
+ * Creates the placeholder header settings object. Those settings tell the header renderers
61
60
  * that this TH element should not be rendered (the node will be overlapped by the previously
62
61
  * created node with colspan bigger than 1).
63
62
  *
@@ -5,66 +5,125 @@ exports.default = void 0;
5
5
 
6
6
  var _element = require("../../../helpers/dom/element");
7
7
 
8
- var _object = require("../../../helpers/object");
9
-
10
8
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11
9
 
12
10
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
13
11
 
14
12
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
15
13
 
14
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
15
+
16
16
  /**
17
+ * The class generates the nested headers structure in the DOM and reads the column width for
18
+ * each column. The hierarchy is built only for visible, non-hidden columns. Each time the
19
+ * column is shown or hidden, the structure is rebuilt, and the width of the columns in the
20
+ * map updated.
21
+ *
17
22
  * @private
18
23
  */
19
24
  var GhostTable = /*#__PURE__*/function () {
20
- function GhostTable(plugin) {
25
+ /**
26
+ * Reference to the Handsontable instance.
27
+ *
28
+ * @private
29
+ * @type {Handsontable}
30
+ */
31
+
32
+ /**
33
+ * The function for retrieving the nested headers settings.
34
+ *
35
+ * @private
36
+ * @type {Function}
37
+ */
38
+
39
+ /**
40
+ * The value that holds information about the number of the nested header layers (header rows).
41
+ *
42
+ * @private
43
+ * @type {number}
44
+ */
45
+
46
+ /**
47
+ * Temporary element created to get minimal headers widths.
48
+ *
49
+ * @private
50
+ * @type {*}
51
+ */
52
+
53
+ /**
54
+ * PhysicalIndexToValueMap to keep and track of the columns' widths.
55
+ *
56
+ * @private
57
+ * @type {PhysicalIndexToValueMap}
58
+ */
59
+ function GhostTable(hot, nestedHeaderSettingsGetter) {
21
60
  _classCallCheck(this, GhostTable);
22
61
 
23
- /**
24
- * Reference to NestedHeaders plugin.
25
- *
26
- * @type {NestedHeaders}
27
- */
28
- this.nestedHeaders = plugin;
29
- /**
30
- * Temporary element created to get minimal headers widths.
31
- *
32
- * @type {*}
33
- */
62
+ _defineProperty(this, "hot", void 0);
34
63
 
35
- this.container = void 0;
36
- /**
37
- * Cached the headers widths.
38
- *
39
- * @type {Array}
40
- */
64
+ _defineProperty(this, "nestedHeaderSettingsGetter", void 0);
41
65
 
42
- this.widthsCache = [];
66
+ _defineProperty(this, "layersCount", 0);
67
+
68
+ _defineProperty(this, "container", void 0);
69
+
70
+ _defineProperty(this, "widthsMap", void 0);
71
+
72
+ this.hot = hot;
73
+ this.nestedHeaderSettingsGetter = nestedHeaderSettingsGetter;
74
+ this.widthsMap = this.hot.columnIndexMapper.createAndRegisterIndexMap('nestedHeaders.widthsMap', 'physicalIndexToValue');
43
75
  }
44
76
  /**
45
- * Build cache of the headers widths.
77
+ * Sets the number of nested headers layers count.
46
78
  *
47
- * @private
79
+ * @param {number} layersCount Total number of headers levels.
80
+ * @returns {GhostTable}
48
81
  */
49
82
 
50
83
 
51
84
  _createClass(GhostTable, [{
52
- key: "buildWidthsMapper",
53
- value: function buildWidthsMapper() {
54
- this.container = this.nestedHeaders.hot.rootDocument.createElement('div');
55
- this.buildGhostTable(this.container);
56
- this.nestedHeaders.hot.rootElement.appendChild(this.container);
85
+ key: "setLayersCount",
86
+ value: function setLayersCount(layersCount) {
87
+ this.layersCount = layersCount;
88
+ return this;
89
+ }
90
+ /**
91
+ * Gets the column width based on the visual column index.
92
+ *
93
+ * @param {number} visualColumn Visual column index.
94
+ * @returns {number|null}
95
+ */
96
+
97
+ }, {
98
+ key: "getWidth",
99
+ value: function getWidth(visualColumn) {
100
+ return this.widthsMap.getValueAtIndex(this.hot.toPhysicalColumn(visualColumn));
101
+ }
102
+ /**
103
+ * Build cache of the headers widths.
104
+ */
105
+
106
+ }, {
107
+ key: "buildWidthsMap",
108
+ value: function buildWidthsMap() {
109
+ this.container = this.hot.rootDocument.createElement('div');
110
+ this.container.classList.add('handsontable', 'htGhostTable', 'htAutoSize');
111
+
112
+ this._buildGhostTable(this.container);
113
+
114
+ this.hot.rootDocument.body.appendChild(this.container);
57
115
  var columns = this.container.querySelectorAll('tr:last-of-type th');
58
116
  var maxColumns = columns.length;
59
- this.widthsCache.length = 0;
117
+ this.widthsMap.clear();
60
118
 
61
- for (var i = 0; i < maxColumns; i++) {
62
- this.widthsCache.push(columns[i].offsetWidth);
119
+ for (var column = 0; column < maxColumns; column++) {
120
+ var visualColumnsIndex = this.hot.columnIndexMapper.getVisualFromRenderableIndex(column);
121
+ var physicalColumnIndex = this.hot.toPhysicalColumn(visualColumnsIndex);
122
+ this.widthsMap.setValueAtIndex(physicalColumnIndex, columns[column].offsetWidth);
63
123
  }
64
124
 
65
125
  this.container.parentNode.removeChild(this.container);
66
126
  this.container = null;
67
- this.nestedHeaders.hot.render();
68
127
  }
69
128
  /**
70
129
  * Build temporary table for getting minimal columns widths.
@@ -74,63 +133,43 @@ var GhostTable = /*#__PURE__*/function () {
74
133
  */
75
134
 
76
135
  }, {
77
- key: "buildGhostTable",
78
- value: function buildGhostTable(container) {
79
- var rootDocument = this.nestedHeaders.hot.rootDocument;
136
+ key: "_buildGhostTable",
137
+ value: function _buildGhostTable(container) {
138
+ var _this$hot = this.hot,
139
+ rootDocument = _this$hot.rootDocument,
140
+ columnIndexMapper = _this$hot.columnIndexMapper;
80
141
  var fragment = rootDocument.createDocumentFragment();
81
142
  var table = rootDocument.createElement('table');
82
- var lastRowColspan = false;
83
- var isDropdownEnabled = !!this.nestedHeaders.hot.getSettings().dropdownMenu;
84
- var maxRows = this.nestedHeaders.getLayersCount();
85
- var maxCols = this.nestedHeaders.hot.countCols();
86
- var lastRowIndex = maxRows - 1;
143
+ var isDropdownEnabled = !!this.hot.getSettings().dropdownMenu;
144
+ var maxRenderedCols = columnIndexMapper.getRenderableIndexesLength();
87
145
 
88
- for (var row = 0; row < maxRows; row++) {
146
+ for (var row = 0; row < this.layersCount; row++) {
89
147
  var tr = rootDocument.createElement('tr');
90
- lastRowColspan = false;
91
148
 
92
- for (var col = 0; col < maxCols; col++) {
93
- var td = rootDocument.createElement('th');
94
- var headerObj = (0, _object.clone)(this.nestedHeaders.getHeaderSettings(row, col));
149
+ for (var col = 0; col < maxRenderedCols; col++) {
150
+ var visualColumnsIndex = columnIndexMapper.getVisualFromRenderableIndex(col);
95
151
 
96
- if (headerObj && !headerObj.isHidden) {
97
- if (row === lastRowIndex) {
98
- if (headerObj.colspan > 1) {
99
- lastRowColspan = true;
100
- }
152
+ if (visualColumnsIndex === null) {
153
+ visualColumnsIndex = col;
154
+ }
101
155
 
102
- if (isDropdownEnabled) {
103
- headerObj.label += '<button class="changeType"></button>';
104
- }
105
- }
156
+ var th = rootDocument.createElement('th');
157
+ var headerSettings = this.nestedHeaderSettingsGetter(row, visualColumnsIndex);
106
158
 
107
- (0, _element.fastInnerHTML)(td, headerObj.label); // The guard here is needed because on IE11 an error is thrown if you
108
- // try to assign an incorrect value to `td.colSpan` here.
159
+ if (headerSettings && (!headerSettings.isPlaceholder || headerSettings.isHidden)) {
160
+ var label = headerSettings.label;
109
161
 
110
- if (headerObj.colspan !== undefined) {
111
- td.colSpan = headerObj.colspan;
162
+ if (isDropdownEnabled) {
163
+ label += '<button class="changeType"></button>';
112
164
  }
113
165
 
114
- tr.appendChild(td);
166
+ (0, _element.fastInnerHTML)(th, label);
167
+ th.colSpan = headerSettings.colspan;
168
+ tr.appendChild(th);
115
169
  }
116
170
  }
117
171
 
118
172
  table.appendChild(tr);
119
- } // We have to be sure the last row contains only the single columns.
120
-
121
-
122
- if (lastRowColspan) {
123
- {
124
- var _tr = rootDocument.createElement('tr');
125
-
126
- for (var _col = 0; _col < maxCols; _col++) {
127
- var _td = rootDocument.createElement('th');
128
-
129
- _tr.appendChild(_td);
130
- }
131
-
132
- table.appendChild(_tr);
133
- }
134
173
  }
135
174
 
136
175
  fragment.appendChild(table);
@@ -143,8 +182,8 @@ var GhostTable = /*#__PURE__*/function () {
143
182
  }, {
144
183
  key: "clear",
145
184
  value: function clear() {
185
+ this.widthsMap.clear();
146
186
  this.container = null;
147
- this.widthsCache.length = 0;
148
187
  }
149
188
  }]);
150
189