handsontable 14.6.1-next-689aaa6-20241016 → 15.0.0-next-4472a60-20241203

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 (392) hide show
  1. package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.js +23 -0
  2. package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.mjs +23 -0
  3. package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.js +23 -0
  4. package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.mjs +23 -0
  5. package/3rdparty/walkontable/src/calculator/index.js +1 -2
  6. package/3rdparty/walkontable/src/calculator/index.mjs +2 -2
  7. package/3rdparty/walkontable/src/calculator/viewportBase.js +2 -0
  8. package/3rdparty/walkontable/src/calculator/viewportBase.mjs +2 -0
  9. package/3rdparty/walkontable/src/calculator/viewportRows.js +3 -3
  10. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +3 -3
  11. package/3rdparty/walkontable/src/core/_base.js +29 -23
  12. package/3rdparty/walkontable/src/core/_base.mjs +29 -23
  13. package/3rdparty/walkontable/src/core/clone.js +1 -0
  14. package/3rdparty/walkontable/src/core/clone.mjs +1 -0
  15. package/3rdparty/walkontable/src/core/core.js +2 -0
  16. package/3rdparty/walkontable/src/core/core.mjs +2 -0
  17. package/3rdparty/walkontable/src/facade/core.js +12 -6
  18. package/3rdparty/walkontable/src/facade/core.mjs +12 -6
  19. package/3rdparty/walkontable/src/index.js +0 -1
  20. package/3rdparty/walkontable/src/index.mjs +2 -2
  21. package/3rdparty/walkontable/src/overlay/_base.js +8 -1
  22. package/3rdparty/walkontable/src/overlay/_base.mjs +8 -1
  23. package/3rdparty/walkontable/src/overlay/bottom.js +5 -6
  24. package/3rdparty/walkontable/src/overlay/bottom.mjs +5 -6
  25. package/3rdparty/walkontable/src/overlay/index.js +2 -0
  26. package/3rdparty/walkontable/src/overlay/inlineStart.js +8 -7
  27. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +9 -8
  28. package/3rdparty/walkontable/src/overlay/top.js +9 -8
  29. package/3rdparty/walkontable/src/overlay/top.mjs +10 -9
  30. package/3rdparty/walkontable/src/overlays.js +10 -26
  31. package/3rdparty/walkontable/src/overlays.mjs +10 -26
  32. package/3rdparty/walkontable/src/renderer/colGroup.js +1 -1
  33. package/3rdparty/walkontable/src/renderer/colGroup.mjs +1 -1
  34. package/3rdparty/walkontable/src/renderer/index.js +4 -2
  35. package/3rdparty/walkontable/src/renderer/index.mjs +4 -2
  36. package/3rdparty/walkontable/src/renderer/table.js +13 -4
  37. package/3rdparty/walkontable/src/renderer/table.mjs +13 -4
  38. package/3rdparty/walkontable/src/scroll.js +46 -37
  39. package/3rdparty/walkontable/src/scroll.mjs +46 -37
  40. package/3rdparty/walkontable/src/selection/border/border.js +52 -58
  41. package/3rdparty/walkontable/src/selection/border/border.mjs +53 -59
  42. package/3rdparty/walkontable/src/selection/border/utils.js +26 -0
  43. package/3rdparty/walkontable/src/selection/border/utils.mjs +22 -0
  44. package/3rdparty/walkontable/src/selection/index.js +6 -4
  45. package/3rdparty/walkontable/src/selection/index.mjs +1 -1
  46. package/3rdparty/walkontable/src/selection/manager.js +3 -0
  47. package/3rdparty/walkontable/src/selection/manager.mjs +3 -0
  48. package/3rdparty/walkontable/src/selection/scanner.js +46 -11
  49. package/3rdparty/walkontable/src/selection/scanner.mjs +46 -11
  50. package/3rdparty/walkontable/src/settings.js +8 -9
  51. package/3rdparty/walkontable/src/settings.mjs +8 -9
  52. package/3rdparty/walkontable/src/table/master.js +1 -1
  53. package/3rdparty/walkontable/src/table/master.mjs +2 -2
  54. package/3rdparty/walkontable/src/table.js +25 -36
  55. package/3rdparty/walkontable/src/table.mjs +25 -36
  56. package/3rdparty/walkontable/src/types.js +1 -0
  57. package/3rdparty/walkontable/src/types.mjs +1 -0
  58. package/3rdparty/walkontable/src/utils/column.js +1 -43
  59. package/3rdparty/walkontable/src/utils/column.mjs +1 -43
  60. package/3rdparty/walkontable/src/utils/stylesHandler.js +295 -0
  61. package/3rdparty/walkontable/src/utils/stylesHandler.mjs +291 -0
  62. package/3rdparty/walkontable/src/viewport.js +94 -91
  63. package/3rdparty/walkontable/src/viewport.mjs +95 -92
  64. package/CHANGELOG.md +36 -0
  65. package/README.md +1 -1
  66. package/base.js +4 -4
  67. package/base.mjs +3 -3
  68. package/core/focusCatcher/focusDetector.js +1 -0
  69. package/core/focusCatcher/focusDetector.mjs +1 -0
  70. package/core/hooks/bucket.js +184 -0
  71. package/core/hooks/bucket.mjs +180 -0
  72. package/{pluginHooks.mjs → core/hooks/constants.js} +38 -486
  73. package/{pluginHooks.js → core/hooks/constants.mjs} +34 -489
  74. package/{pluginHooks.d.ts → core/hooks/index.d.ts} +22 -25
  75. package/core/hooks/index.js +385 -0
  76. package/core/hooks/index.mjs +381 -0
  77. package/core/index.js +2 -0
  78. package/core.d.ts +5 -3
  79. package/core.js +77 -35
  80. package/core.mjs +69 -27
  81. package/dataMap/dataMap.js +3 -0
  82. package/dataMap/dataMap.mjs +3 -0
  83. package/dataMap/dataSource.js +2 -0
  84. package/dataMap/dataSource.mjs +2 -0
  85. package/dataMap/metaManager/index.js +2 -0
  86. package/dataMap/metaManager/index.mjs +2 -0
  87. package/dataMap/metaManager/metaSchema.js +91 -5
  88. package/dataMap/metaManager/metaSchema.mjs +91 -5
  89. package/dataMap/metaManager/mods/dynamicCellMeta.js +2 -3
  90. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +1 -1
  91. package/dataMap/metaManager/mods/extendMetaProperties.js +2 -0
  92. package/dataMap/metaManager/mods/extendMetaProperties.mjs +2 -0
  93. package/dist/handsontable.css +84 -72
  94. package/dist/handsontable.full.css +317 -304
  95. package/dist/handsontable.full.js +14826 -7294
  96. package/dist/handsontable.full.min.css +15 -10
  97. package/dist/handsontable.full.min.js +262 -69
  98. package/dist/handsontable.js +7826 -5552
  99. package/dist/handsontable.min.css +10 -6
  100. package/dist/handsontable.min.js +33 -33
  101. package/dist/languages/all.js +1 -1
  102. package/dist/languages/ar-AR.js +1 -1
  103. package/dist/languages/cs-CZ.js +1 -1
  104. package/dist/languages/de-CH.js +1 -1
  105. package/dist/languages/de-DE.js +1 -1
  106. package/dist/languages/en-US.js +1 -1
  107. package/dist/languages/es-MX.js +1 -1
  108. package/dist/languages/fr-FR.js +1 -1
  109. package/dist/languages/hr-HR.js +1 -1
  110. package/dist/languages/it-IT.js +1 -1
  111. package/dist/languages/ja-JP.js +1 -1
  112. package/dist/languages/ko-KR.js +1 -1
  113. package/dist/languages/lv-LV.js +1 -1
  114. package/dist/languages/nb-NO.js +1 -1
  115. package/dist/languages/nl-NL.js +1 -1
  116. package/dist/languages/pl-PL.js +1 -1
  117. package/dist/languages/pt-BR.js +1 -1
  118. package/dist/languages/ru-RU.js +1 -1
  119. package/dist/languages/sr-SP.js +1 -1
  120. package/dist/languages/zh-CN.js +1 -1
  121. package/dist/languages/zh-TW.js +1 -1
  122. package/editorManager.js +2 -2
  123. package/editorManager.mjs +2 -2
  124. package/editors/autocompleteEditor/autocompleteEditor.js +34 -16
  125. package/editors/autocompleteEditor/autocompleteEditor.mjs +34 -16
  126. package/editors/baseEditor/baseEditor.js +25 -18
  127. package/editors/baseEditor/baseEditor.mjs +26 -19
  128. package/editors/dateEditor/dateEditor.js +9 -0
  129. package/editors/dateEditor/dateEditor.mjs +10 -1
  130. package/editors/dropdownEditor/dropdownEditor.js +4 -3
  131. package/editors/dropdownEditor/dropdownEditor.mjs +3 -1
  132. package/editors/handsontableEditor/handsontableEditor.js +36 -2
  133. package/editors/handsontableEditor/handsontableEditor.mjs +36 -2
  134. package/editors/passwordEditor/passwordEditor.js +18 -0
  135. package/editors/passwordEditor/passwordEditor.mjs +18 -0
  136. package/editors/registry.js +2 -2
  137. package/editors/registry.mjs +1 -1
  138. package/editors/selectEditor/selectEditor.js +20 -9
  139. package/editors/selectEditor/selectEditor.mjs +20 -9
  140. package/editors/textEditor/textEditor.js +5 -12
  141. package/editors/textEditor/textEditor.mjs +6 -13
  142. package/focusManager.js +5 -7
  143. package/focusManager.mjs +5 -7
  144. package/helpers/array.js +2 -0
  145. package/helpers/array.mjs +2 -0
  146. package/helpers/data.js +3 -0
  147. package/helpers/data.mjs +3 -0
  148. package/helpers/dom/element.js +39 -18
  149. package/helpers/dom/element.mjs +38 -17
  150. package/helpers/mixed.js +3 -3
  151. package/helpers/mixed.mjs +3 -3
  152. package/helpers/moves.js +3 -0
  153. package/helpers/moves.mjs +3 -0
  154. package/helpers/number.js +1 -0
  155. package/helpers/number.mjs +1 -0
  156. package/helpers/object.js +2 -0
  157. package/helpers/object.mjs +2 -0
  158. package/helpers/themes.js +17 -0
  159. package/helpers/themes.mjs +13 -0
  160. package/i18n/index.js +2 -0
  161. package/i18n/languages/index.d.ts +8 -0
  162. package/i18n/languages/ja-JP.d.ts +1 -1
  163. package/i18n/phraseFormatters/substituteVariables.js +1 -0
  164. package/i18n/phraseFormatters/substituteVariables.mjs +1 -0
  165. package/index.d.ts +9 -1
  166. package/languages/all.js +1 -1
  167. package/languages/ar-AR.js +1 -1
  168. package/languages/cs-CZ.js +1 -1
  169. package/languages/de-CH.js +1 -1
  170. package/languages/de-DE.js +1 -1
  171. package/languages/en-US.js +1 -1
  172. package/languages/es-MX.js +1 -1
  173. package/languages/fr-FR.js +1 -1
  174. package/languages/hr-HR.js +1 -1
  175. package/languages/index.js +1 -1
  176. package/languages/it-IT.js +1 -1
  177. package/languages/ja-JP.js +1 -1
  178. package/languages/ko-KR.js +1 -1
  179. package/languages/lv-LV.js +1 -1
  180. package/languages/nb-NO.js +1 -1
  181. package/languages/nl-NL.js +1 -1
  182. package/languages/pl-PL.js +1 -1
  183. package/languages/pt-BR.js +1 -1
  184. package/languages/ru-RU.js +1 -1
  185. package/languages/sr-SP.js +1 -1
  186. package/languages/zh-CN.js +1 -1
  187. package/languages/zh-TW.js +1 -1
  188. package/package.json +22 -7
  189. package/plugins/autoColumnSize/autoColumnSize.js +22 -27
  190. package/plugins/autoColumnSize/autoColumnSize.mjs +22 -27
  191. package/plugins/autoRowSize/autoRowSize.js +20 -22
  192. package/plugins/autoRowSize/autoRowSize.mjs +21 -23
  193. package/plugins/autofill/autofill.js +4 -5
  194. package/plugins/autofill/autofill.mjs +1 -1
  195. package/plugins/base/base.d.ts +1 -1
  196. package/plugins/base/base.js +41 -0
  197. package/plugins/base/base.mjs +42 -1
  198. package/plugins/base/index.js +2 -1
  199. package/plugins/base/index.mjs +1 -1
  200. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +2 -5
  201. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +2 -5
  202. package/plugins/columnSorting/columnSorting.js +5 -4
  203. package/plugins/columnSorting/columnSorting.mjs +3 -1
  204. package/plugins/columnSorting/columnStatesManager.js +1 -0
  205. package/plugins/columnSorting/columnStatesManager.mjs +1 -0
  206. package/plugins/columnSorting/utils.js +3 -0
  207. package/plugins/columnSorting/utils.mjs +3 -0
  208. package/plugins/columnSummary/endpoints.js +3 -0
  209. package/plugins/columnSummary/endpoints.mjs +3 -0
  210. package/plugins/comments/commentEditor.js +9 -0
  211. package/plugins/comments/commentEditor.mjs +9 -0
  212. package/plugins/comments/comments.js +24 -18
  213. package/plugins/comments/comments.mjs +26 -20
  214. package/plugins/comments/editorResizeObserver.js +2 -0
  215. package/plugins/comments/editorResizeObserver.mjs +2 -0
  216. package/plugins/contextMenu/contextMenu.d.ts +2 -1
  217. package/plugins/contextMenu/contextMenu.js +6 -7
  218. package/plugins/contextMenu/contextMenu.mjs +1 -1
  219. package/plugins/contextMenu/menu/index.js +2 -0
  220. package/plugins/contextMenu/menu/menu.js +10 -5
  221. package/plugins/contextMenu/menu/menu.mjs +11 -6
  222. package/plugins/contextMenu/menu/positioner.js +4 -2
  223. package/plugins/contextMenu/menu/positioner.mjs +4 -2
  224. package/plugins/contextMenu/menu/shortcuts.js +3 -1
  225. package/plugins/contextMenu/menu/shortcuts.mjs +3 -1
  226. package/plugins/contextMenu/predefinedItems/alignment.js +7 -84
  227. package/plugins/contextMenu/predefinedItems/alignment.mjs +8 -85
  228. package/plugins/contextMenu/utils.js +0 -10
  229. package/plugins/contextMenu/utils.mjs +0 -9
  230. package/plugins/copyPaste/copyPaste.d.ts +1 -0
  231. package/plugins/copyPaste/copyPaste.js +32 -23
  232. package/plugins/copyPaste/copyPaste.mjs +24 -15
  233. package/plugins/customBorders/utils.js +2 -0
  234. package/plugins/customBorders/utils.mjs +2 -0
  235. package/plugins/dropdownMenu/dropdownMenu.d.ts +2 -1
  236. package/plugins/dropdownMenu/dropdownMenu.js +6 -7
  237. package/plugins/dropdownMenu/dropdownMenu.mjs +1 -1
  238. package/plugins/exportFile/types/csv.js +1 -0
  239. package/plugins/exportFile/types/csv.mjs +1 -0
  240. package/plugins/filters/component/condition.js +2 -0
  241. package/plugins/filters/component/condition.mjs +2 -0
  242. package/plugins/filters/component/operators.js +2 -0
  243. package/plugins/filters/component/operators.mjs +2 -0
  244. package/plugins/filters/component/value.js +3 -0
  245. package/plugins/filters/component/value.mjs +3 -0
  246. package/plugins/filters/conditionCollection.js +3 -0
  247. package/plugins/filters/conditionCollection.mjs +3 -0
  248. package/plugins/filters/conditionUpdateObserver.js +2 -0
  249. package/plugins/filters/conditionUpdateObserver.mjs +2 -0
  250. package/plugins/filters/filters.js +43 -13
  251. package/plugins/filters/filters.mjs +43 -13
  252. package/plugins/filters/logicalOperations/conjunction.js +2 -0
  253. package/plugins/filters/logicalOperations/conjunction.mjs +2 -0
  254. package/plugins/filters/logicalOperations/disjunction.js +2 -0
  255. package/plugins/filters/logicalOperations/disjunction.mjs +2 -0
  256. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +2 -0
  257. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.mjs +2 -0
  258. package/plugins/filters/menu/focusController.js +38 -14
  259. package/plugins/filters/menu/focusController.mjs +38 -14
  260. package/plugins/filters/ui/multipleSelect.js +10 -0
  261. package/plugins/filters/ui/multipleSelect.mjs +10 -0
  262. package/plugins/formulas/engine/register.js +3 -0
  263. package/plugins/formulas/engine/register.mjs +3 -0
  264. package/plugins/formulas/engine/settings.js +3 -0
  265. package/plugins/formulas/engine/settings.mjs +3 -0
  266. package/plugins/formulas/formulas.js +12 -7
  267. package/plugins/formulas/formulas.mjs +6 -1
  268. package/plugins/formulas/indexSyncer/axisSyncer.js +3 -0
  269. package/plugins/formulas/indexSyncer/axisSyncer.mjs +3 -0
  270. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +2 -0
  271. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +2 -0
  272. package/plugins/hiddenColumns/hiddenColumns.js +22 -30
  273. package/plugins/hiddenColumns/hiddenColumns.mjs +18 -26
  274. package/plugins/hiddenRows/contextMenuItem/showRow.js +2 -0
  275. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +2 -0
  276. package/plugins/hiddenRows/hiddenRows.js +21 -29
  277. package/plugins/hiddenRows/hiddenRows.mjs +17 -25
  278. package/plugins/index.d.ts +3 -0
  279. package/plugins/index.js +3 -0
  280. package/plugins/index.mjs +3 -1
  281. package/plugins/manualColumnFreeze/manualColumnFreeze.js +7 -5
  282. package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +3 -1
  283. package/plugins/manualColumnMove/manualColumnMove.js +6 -6
  284. package/plugins/manualColumnMove/manualColumnMove.mjs +4 -4
  285. package/plugins/manualColumnResize/manualColumnResize.js +26 -12
  286. package/plugins/manualColumnResize/manualColumnResize.mjs +26 -12
  287. package/plugins/manualRowMove/manualRowMove.js +8 -6
  288. package/plugins/manualRowMove/manualRowMove.mjs +6 -4
  289. package/plugins/manualRowResize/manualRowResize.js +3 -2
  290. package/plugins/manualRowResize/manualRowResize.mjs +4 -3
  291. package/plugins/mergeCells/cellsCollection.js +19 -3
  292. package/plugins/mergeCells/cellsCollection.mjs +20 -4
  293. package/plugins/mergeCells/mergeCells.d.ts +6 -2
  294. package/plugins/mergeCells/mergeCells.js +84 -56
  295. package/plugins/mergeCells/mergeCells.mjs +82 -54
  296. package/plugins/mergeCells/renderer.js +13 -3
  297. package/plugins/mergeCells/renderer.mjs +13 -3
  298. package/plugins/multiColumnSorting/domHelpers.js +2 -0
  299. package/plugins/multiColumnSorting/domHelpers.mjs +2 -0
  300. package/plugins/nestedHeaders/nestedHeaders.js +63 -16
  301. package/plugins/nestedHeaders/nestedHeaders.mjs +63 -16
  302. package/plugins/nestedHeaders/stateManager/index.js +1 -0
  303. package/plugins/nestedHeaders/stateManager/index.mjs +1 -0
  304. package/plugins/nestedRows/nestedRows.js +3 -0
  305. package/plugins/nestedRows/nestedRows.mjs +3 -0
  306. package/plugins/nestedRows/ui/headers.js +7 -1
  307. package/plugins/nestedRows/ui/headers.mjs +7 -1
  308. package/plugins/nestedRows/utils/rowMoveController.js +4 -0
  309. package/plugins/nestedRows/utils/rowMoveController.mjs +4 -0
  310. package/plugins/persistentState/persistentState.js +4 -4
  311. package/plugins/persistentState/persistentState.mjs +1 -1
  312. package/plugins/stretchColumns/calculator.js +162 -0
  313. package/plugins/stretchColumns/calculator.mjs +158 -0
  314. package/plugins/stretchColumns/index.d.ts +1 -0
  315. package/plugins/stretchColumns/index.js +7 -0
  316. package/plugins/stretchColumns/index.mjs +1 -0
  317. package/plugins/stretchColumns/strategies/_base.js +85 -0
  318. package/plugins/stretchColumns/strategies/_base.mjs +81 -0
  319. package/plugins/stretchColumns/strategies/all.js +71 -0
  320. package/plugins/stretchColumns/strategies/all.mjs +67 -0
  321. package/plugins/stretchColumns/strategies/last.js +79 -0
  322. package/plugins/stretchColumns/strategies/last.mjs +75 -0
  323. package/plugins/stretchColumns/stretchColumns.d.ts +11 -0
  324. package/plugins/stretchColumns/stretchColumns.js +222 -0
  325. package/plugins/stretchColumns/stretchColumns.mjs +218 -0
  326. package/plugins/trimRows/trimRows.js +2 -0
  327. package/plugins/trimRows/trimRows.mjs +2 -0
  328. package/plugins/undoRedo/undoRedo.js +9 -5
  329. package/plugins/undoRedo/undoRedo.mjs +8 -3
  330. package/renderers/checkboxRenderer/checkboxRenderer.js +19 -8
  331. package/renderers/checkboxRenderer/checkboxRenderer.mjs +18 -7
  332. package/selection/index.js +2 -0
  333. package/selection/range.js +2 -0
  334. package/selection/range.mjs +2 -0
  335. package/selection/selection.js +7 -2
  336. package/selection/selection.mjs +7 -2
  337. package/selection/utils.js +2 -0
  338. package/selection/utils.mjs +2 -0
  339. package/settings.d.ts +4 -1
  340. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +1 -1
  341. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +1 -1
  342. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +1 -1
  343. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +1 -1
  344. package/shortcutContexts/commands/index.js +2 -0
  345. package/shortcutContexts/commands/index.mjs +2 -0
  346. package/shortcutContexts/commands/scrollToFocusedCell.js +4 -4
  347. package/shortcutContexts/commands/scrollToFocusedCell.mjs +4 -4
  348. package/shortcutContexts/index.js +2 -0
  349. package/shortcutContexts/index.mjs +2 -0
  350. package/shortcuts/context.js +3 -0
  351. package/shortcuts/context.mjs +3 -0
  352. package/shortcuts/recorder.js +3 -3
  353. package/shortcuts/recorder.mjs +3 -3
  354. package/shortcuts/utils.js +1 -0
  355. package/shortcuts/utils.mjs +1 -0
  356. package/styles/handsontable.css +2307 -0
  357. package/styles/handsontable.min.css +30 -0
  358. package/styles/ht-theme-horizon.css +607 -0
  359. package/styles/ht-theme-horizon.min.css +30 -0
  360. package/styles/ht-theme-main.css +613 -0
  361. package/styles/ht-theme-main.min.css +30 -0
  362. package/tableView.js +205 -33
  363. package/tableView.mjs +206 -34
  364. package/translations/changesObservable/observable.js +2 -0
  365. package/translations/changesObservable/observable.mjs +2 -0
  366. package/translations/index.js +2 -0
  367. package/translations/indexMapper.js +4 -0
  368. package/translations/indexMapper.mjs +4 -0
  369. package/translations/mapCollections/index.js +2 -0
  370. package/translations/mapCollections/mapCollection.js +2 -0
  371. package/translations/mapCollections/mapCollection.mjs +2 -0
  372. package/translations/maps/index.js +2 -0
  373. package/translations/maps/linkedPhysicalIndexToValueMap.js +1 -0
  374. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +1 -0
  375. package/translations/maps/utils/actionsOnIndexes.js +2 -0
  376. package/translations/maps/utils/actionsOnIndexes.mjs +2 -0
  377. package/translations/maps/utils/physicallyIndexed.js +1 -0
  378. package/translations/maps/utils/physicallyIndexed.mjs +1 -0
  379. package/utils/autoResize.js +11 -3
  380. package/utils/autoResize.mjs +11 -3
  381. package/utils/dataStructures/priorityMap.js +1 -0
  382. package/utils/dataStructures/priorityMap.mjs +1 -0
  383. package/utils/dataStructures/uniqueMap.js +2 -0
  384. package/utils/dataStructures/uniqueMap.mjs +2 -0
  385. package/utils/ghostTable.js +7 -3
  386. package/utils/ghostTable.mjs +7 -3
  387. package/utils/parseTable.js +4 -0
  388. package/utils/parseTable.mjs +4 -0
  389. package/3rdparty/walkontable/src/selection/border/constants.js +0 -15
  390. package/3rdparty/walkontable/src/selection/border/constants.mjs +0 -12
  391. package/3rdparty/walkontable/src/utils/columnStretching.js +0 -197
  392. package/3rdparty/walkontable/src/utils/columnStretching.mjs +0 -193
@@ -2035,7 +2035,7 @@ var _default = exports["default"] = dictionary;
2035
2035
  /******/
2036
2036
  /************************************************************************/
2037
2037
  var __webpack_exports__ = {};
2038
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
2038
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
2039
2039
  (() => {
2040
2040
  "use strict";
2041
2041
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
@@ -57,7 +57,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__2__;
57
57
  /******/
58
58
  /************************************************************************/
59
59
  var __webpack_exports__ = {};
60
- // This entry need to be wrapped in an IIFE because it need to be in strict mode.
60
+ // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
61
61
  (() => {
62
62
  "use strict";
63
63
  var exports = __webpack_exports__;
package/editorManager.js CHANGED
@@ -120,7 +120,7 @@ class EditorManager {
120
120
  row,
121
121
  col
122
122
  } = highlight;
123
- const modifiedCellCoords = this.hot.runHooks('modifyGetCellCoords', row, col);
123
+ const modifiedCellCoords = this.hot.runHooks('modifyGetCellCoords', row, col, false, 'meta');
124
124
  let visualRowToCheck = row;
125
125
  let visualColumnToCheck = col;
126
126
  if (Array.isArray(modifiedCellCoords)) {
@@ -174,7 +174,7 @@ class EditorManager {
174
174
  const selection = this.hot.getSelectedRangeLast();
175
175
  let allowOpening = this.hot.runHooks('beforeBeginEditing', selection.highlight.row, selection.highlight.col, newInitialValue, event, enableFullEditMode);
176
176
 
177
- // If the above hook does not return boolean apply default behavior which disallows opening
177
+ // If the above hook does not return boolean then the default behavior is applied which disallows opening
178
178
  // an editor after double mouse click for non-contiguous selection (while pressing Ctrl/Cmd) and
179
179
  // for multiple selected cells (while pressing SHIFT).
180
180
  if (event instanceof MouseEvent && typeof allowOpening !== 'boolean') {
package/editorManager.mjs CHANGED
@@ -116,7 +116,7 @@ class EditorManager {
116
116
  row,
117
117
  col
118
118
  } = highlight;
119
- const modifiedCellCoords = this.hot.runHooks('modifyGetCellCoords', row, col);
119
+ const modifiedCellCoords = this.hot.runHooks('modifyGetCellCoords', row, col, false, 'meta');
120
120
  let visualRowToCheck = row;
121
121
  let visualColumnToCheck = col;
122
122
  if (Array.isArray(modifiedCellCoords)) {
@@ -170,7 +170,7 @@ class EditorManager {
170
170
  const selection = this.hot.getSelectedRangeLast();
171
171
  let allowOpening = this.hot.runHooks('beforeBeginEditing', selection.highlight.row, selection.highlight.col, newInitialValue, event, enableFullEditMode);
172
172
 
173
- // If the above hook does not return boolean apply default behavior which disallows opening
173
+ // If the above hook does not return boolean then the default behavior is applied which disallows opening
174
174
  // an editor after double mouse click for non-contiguous selection (while pressing Ctrl/Cmd) and
175
175
  // for multiple selected cells (while pressing SHIFT).
176
176
  if (event instanceof MouseEvent && typeof allowOpening !== 'boolean') {
@@ -3,13 +3,16 @@
3
3
  exports.__esModule = true;
4
4
  require("core-js/modules/es.error.cause.js");
5
5
  require("core-js/modules/es.array.push.js");
6
+ require("core-js/modules/esnext.iterator.constructor.js");
7
+ require("core-js/modules/esnext.iterator.filter.js");
8
+ require("core-js/modules/esnext.iterator.find.js");
9
+ require("core-js/modules/esnext.iterator.reduce.js");
6
10
  var _handsontableEditor = require("../handsontableEditor");
7
11
  var _array = require("../../helpers/array");
8
12
  var _element = require("../../helpers/dom/element");
9
13
  var _mixed = require("../../helpers/mixed");
10
14
  var _string = require("../../helpers/string");
11
15
  var _unicode = require("../../helpers/unicode");
12
- var _browser = require("../../helpers/browser");
13
16
  var _textRenderer = require("../../renderers/textRenderer");
14
17
  var _a11y = require("../../helpers/a11y");
15
18
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
@@ -183,15 +186,11 @@ class AutocompleteEditor extends _handsontableEditor.HandsontableEditor {
183
186
  } = this;
184
187
  this.showEditableElement();
185
188
  this.focus();
186
- let scrollbarWidth = (0, _element.getScrollbarWidth)();
187
- if (scrollbarWidth === 0 && (0, _browser.isMacOS)()) {
188
- scrollbarWidth += 15; // default scroll bar width if scroll bars are visible only when scrolling
189
- }
190
189
  this.addHook('beforeKeyDown', event => this.onBeforeKeyDown(event));
191
190
  this.htEditor.updateSettings({
192
191
  colWidths: trimDropdown ? [(0, _element.outerWidth)(this.TEXTAREA) - 2] : undefined,
193
- width: trimDropdown ? (0, _element.outerWidth)(this.TEXTAREA) + scrollbarWidth : undefined,
194
192
  autoColumnSize: true,
193
+ autoRowSize: true,
195
194
  renderer: (hotInstance, TD, row, col, prop, value, cellProperties) => {
196
195
  (0, _textRenderer.textRenderer)(hotInstance, TD, row, col, prop, value, cellProperties);
197
196
  const {
@@ -350,7 +349,7 @@ class AutocompleteEditor extends _handsontableEditor.HandsontableEditor {
350
349
  }
351
350
  const textareaOffset = (0, _element.offset)(this.TEXTAREA);
352
351
  const textareaHeight = (0, _element.outerHeight)(this.TEXTAREA);
353
- const dropdownHeight = this.getDropdownHeight();
352
+ const dropdownHeight = this.getHeight();
354
353
  const trimmingContainerScrollTop = trimmingContainer.scrollTop;
355
354
  const headersHeight = (0, _element.outerHeight)(this.hot.view._wt.wtTable.THEAD);
356
355
  const containerOffset = (0, _element.offset)(trimmingContainer);
@@ -380,7 +379,7 @@ class AutocompleteEditor extends _handsontableEditor.HandsontableEditor {
380
379
  let lastRowHeight = 0;
381
380
  let height = null;
382
381
  do {
383
- lastRowHeight = this.htEditor.getRowHeight(i) || this.htEditor.view._wt.getSetting('defaultRowHeight');
382
+ lastRowHeight = this.htEditor.getRowHeight(i) || this.htEditor.view.getDefaultRowHeight();
384
383
  tempHeight += lastRowHeight;
385
384
  i += 1;
386
385
  } while (tempHeight < spaceAvailable);
@@ -423,12 +422,15 @@ class AutocompleteEditor extends _handsontableEditor.HandsontableEditor {
423
422
  * @private
424
423
  */
425
424
  updateDropdownDimensions() {
426
- const currentDropdownWidth = this.htEditor.getColWidth(0) + (0, _element.getScrollbarWidth)(this.hot.rootDocument) + 2;
427
- const trimDropdown = this.cellProperties.trimDropdown;
428
425
  this.htEditor.updateSettings({
429
- height: this.getDropdownHeight(),
430
- width: trimDropdown ? undefined : currentDropdownWidth
426
+ width: this.getWidth(),
427
+ height: this.getHeight()
431
428
  });
429
+ if (this.htEditor.view.hasVerticalScroll()) {
430
+ this.htEditor.updateSettings({
431
+ width: this.htEditor.getSettings().width + (0, _element.getScrollbarWidth)(this.hot.rootDocument)
432
+ });
433
+ }
432
434
  this.htEditor.view._wt.wtTable.alignOverlaysWithTrimmingContainer();
433
435
  }
434
436
 
@@ -464,10 +466,26 @@ class AutocompleteEditor extends _handsontableEditor.HandsontableEditor {
464
466
  * @private
465
467
  * @returns {number}
466
468
  */
467
- getDropdownHeight() {
468
- const firstRowHeight = this.htEditor.getRowHeight(0) || 23;
469
- const visibleRows = this.cellProperties.visibleRows;
470
- return this.strippedChoices.length >= visibleRows ? visibleRows * firstRowHeight : this.strippedChoices.length * firstRowHeight + 8; // eslint-disable-line max-len
469
+ getHeight() {
470
+ const containerStyle = this.hot.rootWindow.getComputedStyle(this.htContainer.querySelector('.htCore'));
471
+ const borderVerticalCompensation = parseInt(containerStyle.borderTopWidth, 10) + parseInt(containerStyle.borderBottomWidth, 10);
472
+ const maxItems = Math.min(this.cellProperties.visibleRows, this.strippedChoices.length);
473
+ const height = Array.from({
474
+ length: maxItems
475
+ }, (_, i) => i).reduce((h, index) => h + this.htEditor.getRowHeight(index), 0);
476
+ return height + borderVerticalCompensation + 1;
477
+ }
478
+
479
+ /**
480
+ * Calculates and return the internal Handsontable's width.
481
+ *
482
+ * @private
483
+ * @returns {number}
484
+ */
485
+ getWidth() {
486
+ const containerStyle = this.hot.rootWindow.getComputedStyle(this.htContainer.querySelector('.htCore'));
487
+ const borderHorizontalCompensation = parseInt(containerStyle.borderInlineStartWidth, 10) + parseInt(containerStyle.borderInlineEndWidth, 10);
488
+ return this.htEditor.getColWidth(0) + borderHorizontalCompensation;
471
489
  }
472
490
 
473
491
  /**
@@ -1,5 +1,9 @@
1
1
  import "core-js/modules/es.error.cause.js";
2
2
  import "core-js/modules/es.array.push.js";
3
+ import "core-js/modules/esnext.iterator.constructor.js";
4
+ import "core-js/modules/esnext.iterator.filter.js";
5
+ import "core-js/modules/esnext.iterator.find.js";
6
+ import "core-js/modules/esnext.iterator.reduce.js";
3
7
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
4
8
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
5
9
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
@@ -13,7 +17,6 @@ import { addClass, getCaretPosition, getScrollbarWidth, getSelectionEndPosition,
13
17
  import { isDefined, stringify } from "../../helpers/mixed.mjs";
14
18
  import { stripTags } from "../../helpers/string.mjs";
15
19
  import { KEY_CODES, isPrintableChar } from "../../helpers/unicode.mjs";
16
- import { isMacOS } from "../../helpers/browser.mjs";
17
20
  import { textRenderer } from "../../renderers/textRenderer/index.mjs";
18
21
  import { A11Y_ACTIVEDESCENDANT, A11Y_AUTOCOMPLETE, A11Y_COMBOBOX, A11Y_CONTROLS, A11Y_EXPANDED, A11Y_HASPOPUP, A11Y_LISTBOX, A11Y_LIVE, A11Y_OPTION, A11Y_POSINSET, A11Y_PRESENTATION, A11Y_RELEVANT, A11Y_SELECTED, A11Y_SETSIZE, A11Y_TEXT } from "../../helpers/a11y.mjs";
19
22
  export const EDITOR_TYPE = 'autocomplete';
@@ -180,15 +183,11 @@ export class AutocompleteEditor extends HandsontableEditor {
180
183
  } = this;
181
184
  this.showEditableElement();
182
185
  this.focus();
183
- let scrollbarWidth = getScrollbarWidth();
184
- if (scrollbarWidth === 0 && isMacOS()) {
185
- scrollbarWidth += 15; // default scroll bar width if scroll bars are visible only when scrolling
186
- }
187
186
  this.addHook('beforeKeyDown', event => this.onBeforeKeyDown(event));
188
187
  this.htEditor.updateSettings({
189
188
  colWidths: trimDropdown ? [outerWidth(this.TEXTAREA) - 2] : undefined,
190
- width: trimDropdown ? outerWidth(this.TEXTAREA) + scrollbarWidth : undefined,
191
189
  autoColumnSize: true,
190
+ autoRowSize: true,
192
191
  renderer: (hotInstance, TD, row, col, prop, value, cellProperties) => {
193
192
  textRenderer(hotInstance, TD, row, col, prop, value, cellProperties);
194
193
  const {
@@ -347,7 +346,7 @@ export class AutocompleteEditor extends HandsontableEditor {
347
346
  }
348
347
  const textareaOffset = offset(this.TEXTAREA);
349
348
  const textareaHeight = outerHeight(this.TEXTAREA);
350
- const dropdownHeight = this.getDropdownHeight();
349
+ const dropdownHeight = this.getHeight();
351
350
  const trimmingContainerScrollTop = trimmingContainer.scrollTop;
352
351
  const headersHeight = outerHeight(this.hot.view._wt.wtTable.THEAD);
353
352
  const containerOffset = offset(trimmingContainer);
@@ -377,7 +376,7 @@ export class AutocompleteEditor extends HandsontableEditor {
377
376
  let lastRowHeight = 0;
378
377
  let height = null;
379
378
  do {
380
- lastRowHeight = this.htEditor.getRowHeight(i) || this.htEditor.view._wt.getSetting('defaultRowHeight');
379
+ lastRowHeight = this.htEditor.getRowHeight(i) || this.htEditor.view.getDefaultRowHeight();
381
380
  tempHeight += lastRowHeight;
382
381
  i += 1;
383
382
  } while (tempHeight < spaceAvailable);
@@ -420,12 +419,15 @@ export class AutocompleteEditor extends HandsontableEditor {
420
419
  * @private
421
420
  */
422
421
  updateDropdownDimensions() {
423
- const currentDropdownWidth = this.htEditor.getColWidth(0) + getScrollbarWidth(this.hot.rootDocument) + 2;
424
- const trimDropdown = this.cellProperties.trimDropdown;
425
422
  this.htEditor.updateSettings({
426
- height: this.getDropdownHeight(),
427
- width: trimDropdown ? undefined : currentDropdownWidth
423
+ width: this.getWidth(),
424
+ height: this.getHeight()
428
425
  });
426
+ if (this.htEditor.view.hasVerticalScroll()) {
427
+ this.htEditor.updateSettings({
428
+ width: this.htEditor.getSettings().width + getScrollbarWidth(this.hot.rootDocument)
429
+ });
430
+ }
429
431
  this.htEditor.view._wt.wtTable.alignOverlaysWithTrimmingContainer();
430
432
  }
431
433
 
@@ -461,10 +463,26 @@ export class AutocompleteEditor extends HandsontableEditor {
461
463
  * @private
462
464
  * @returns {number}
463
465
  */
464
- getDropdownHeight() {
465
- const firstRowHeight = this.htEditor.getRowHeight(0) || 23;
466
- const visibleRows = this.cellProperties.visibleRows;
467
- return this.strippedChoices.length >= visibleRows ? visibleRows * firstRowHeight : this.strippedChoices.length * firstRowHeight + 8; // eslint-disable-line max-len
466
+ getHeight() {
467
+ const containerStyle = this.hot.rootWindow.getComputedStyle(this.htContainer.querySelector('.htCore'));
468
+ const borderVerticalCompensation = parseInt(containerStyle.borderTopWidth, 10) + parseInt(containerStyle.borderBottomWidth, 10);
469
+ const maxItems = Math.min(this.cellProperties.visibleRows, this.strippedChoices.length);
470
+ const height = Array.from({
471
+ length: maxItems
472
+ }, (_, i) => i).reduce((h, index) => h + this.htEditor.getRowHeight(index), 0);
473
+ return height + borderVerticalCompensation + 1;
474
+ }
475
+
476
+ /**
477
+ * Calculates and return the internal Handsontable's width.
478
+ *
479
+ * @private
480
+ * @returns {number}
481
+ */
482
+ getWidth() {
483
+ const containerStyle = this.hot.rootWindow.getComputedStyle(this.htContainer.querySelector('.htCore'));
484
+ const borderHorizontalCompensation = parseInt(containerStyle.borderInlineStartWidth, 10) + parseInt(containerStyle.borderInlineEndWidth, 10);
485
+ return this.htEditor.getColWidth(0) + borderHorizontalCompensation;
468
486
  }
469
487
 
470
488
  /**
@@ -204,7 +204,7 @@ class BaseEditor {
204
204
  } else {
205
205
  [visualRowFrom, visualColumnFrom, visualRowTo, visualColumnTo] = [this.row, this.col, null, null];
206
206
  }
207
- const modifiedCellCoords = this.hot.runHooks('modifyGetCellCoords', visualRowFrom, visualColumnFrom);
207
+ const modifiedCellCoords = this.hot.runHooks('modifyGetCellCoords', visualRowFrom, visualColumnFrom, false, 'meta');
208
208
  if (Array.isArray(modifiedCellCoords)) {
209
209
  [visualRowFrom, visualColumnFrom] = modifiedCellCoords;
210
210
  }
@@ -228,22 +228,29 @@ class BaseEditor {
228
228
  // due to hidden columns don't participate in the rendering process
229
229
  const renderableRowIndex = hotInstance.rowIndexMapper.getRenderableFromVisualIndex(this.row);
230
230
  const renderableColumnIndex = hotInstance.columnIndexMapper.getRenderableFromVisualIndex(this.col);
231
- hotInstance.view.scrollViewport(hotInstance._createCellCoords(renderableRowIndex, renderableColumnIndex));
232
- this.state = EDITOR_STATE.EDITING;
233
-
234
- // Set the editor value only in the full edit mode. In other mode the focusable element has to be empty,
235
- // otherwise IME (editor for Asia users) doesn't work.
236
- if (this.isInFullEditMode()) {
237
- const stringifiedInitialValue = typeof newInitialValue === 'string' ? newInitialValue : (0, _mixed.stringify)(this.originalValue);
238
- this.setValue(stringifiedInitialValue);
239
- }
240
- this.open(event);
241
- this._opened = true;
242
- this.focus();
231
+ const openEditor = () => {
232
+ this.state = EDITOR_STATE.EDITING;
243
233
 
244
- // only rerender the selections (FillHandle should disappear when beginEditing is triggered)
245
- hotInstance.view.render();
246
- hotInstance.runHooks('afterBeginEditing', this.row, this.col);
234
+ // Set the editor value only in the full edit mode. In other mode the focusable element has to be empty,
235
+ // otherwise IME (editor for Asia users) doesn't work.
236
+ if (this.isInFullEditMode()) {
237
+ const stringifiedInitialValue = typeof newInitialValue === 'string' ? newInitialValue : (0, _mixed.stringify)(this.originalValue);
238
+ this.setValue(stringifiedInitialValue);
239
+ }
240
+ this.open(event);
241
+ this._opened = true;
242
+ this.focus();
243
+
244
+ // only rerender the selections (FillHandle should disappear when beginEditing is triggered)
245
+ hotInstance.view.render();
246
+ hotInstance.runHooks('afterBeginEditing', this.row, this.col);
247
+ };
248
+ this.hot.addHookOnce('afterScroll', openEditor);
249
+ const wasScroll = hotInstance.view.scrollViewport(hotInstance._createCellCoords(renderableRowIndex, renderableColumnIndex));
250
+ if (!wasScroll) {
251
+ this.hot.removeHook('afterScroll', openEditor);
252
+ openEditor();
253
+ }
247
254
  }
248
255
 
249
256
  /**
@@ -476,7 +483,7 @@ class BaseEditor {
476
483
  } else if (['top', 'master', 'bottom'].includes(overlayName)) {
477
484
  cellStartOffset += firstColumnOffset - horizontalScrollPosition;
478
485
  }
479
- const cellComputedStyle = (0, _element.getComputedStyle)(this.TD, this.hot.rootWindow);
486
+ const cellComputedStyle = rootWindow.getComputedStyle(this.TD);
480
487
  const borderPhysicalWidthProp = this.hot.isRtl() ? 'borderRightWidth' : 'borderLeftWidth';
481
488
  const inlineStartBorderCompensation = parseInt(cellComputedStyle[borderPhysicalWidthProp], 10) > 0 ? 0 : 1;
482
489
  const topBorderCompensation = parseInt(cellComputedStyle.borderTopWidth, 10) > 0 ? 0 : 1;
@@ -485,7 +492,7 @@ class BaseEditor {
485
492
  const actualVerticalScrollbarWidth = (0, _element.hasVerticalScrollbar)(scrollableContainerTop) ? scrollbarWidth : 0;
486
493
  const actualHorizontalScrollbarWidth = (0, _element.hasHorizontalScrollbar)(scrollableContainerLeft) ? scrollbarWidth : 0;
487
494
  const maxWidth = this.hot.view.maximumVisibleElementWidth(cellStartOffset) - actualVerticalScrollbarWidth + inlineStartBorderCompensation;
488
- const maxHeight = Math.max(this.hot.view.maximumVisibleElementHeight(cellTopOffset) - actualHorizontalScrollbarWidth + topBorderCompensation, 23);
495
+ const maxHeight = Math.max(this.hot.view.maximumVisibleElementHeight(cellTopOffset) - actualHorizontalScrollbarWidth + topBorderCompensation, this.hot.view.getDefaultRowHeight());
489
496
  return {
490
497
  top: topPos,
491
498
  start: inlineStartPos,
@@ -5,7 +5,7 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
5
5
  import { stringify } from "../../helpers/mixed.mjs";
6
6
  import { mixin } from "../../helpers/object.mjs";
7
7
  import hooksRefRegisterer from "../../mixins/hooksRefRegisterer.mjs";
8
- import { getScrollbarWidth, offset, hasVerticalScrollbar, hasHorizontalScrollbar, outerWidth, outerHeight, getComputedStyle } from "../../helpers/dom/element.mjs";
8
+ import { getScrollbarWidth, offset, hasVerticalScrollbar, hasHorizontalScrollbar, outerWidth, outerHeight } from "../../helpers/dom/element.mjs";
9
9
  export const EDITOR_TYPE = 'base';
10
10
  export const EDITOR_STATE = Object.freeze({
11
11
  VIRGIN: 'STATE_VIRGIN',
@@ -200,7 +200,7 @@ export class BaseEditor {
200
200
  } else {
201
201
  [visualRowFrom, visualColumnFrom, visualRowTo, visualColumnTo] = [this.row, this.col, null, null];
202
202
  }
203
- const modifiedCellCoords = this.hot.runHooks('modifyGetCellCoords', visualRowFrom, visualColumnFrom);
203
+ const modifiedCellCoords = this.hot.runHooks('modifyGetCellCoords', visualRowFrom, visualColumnFrom, false, 'meta');
204
204
  if (Array.isArray(modifiedCellCoords)) {
205
205
  [visualRowFrom, visualColumnFrom] = modifiedCellCoords;
206
206
  }
@@ -224,22 +224,29 @@ export class BaseEditor {
224
224
  // due to hidden columns don't participate in the rendering process
225
225
  const renderableRowIndex = hotInstance.rowIndexMapper.getRenderableFromVisualIndex(this.row);
226
226
  const renderableColumnIndex = hotInstance.columnIndexMapper.getRenderableFromVisualIndex(this.col);
227
- hotInstance.view.scrollViewport(hotInstance._createCellCoords(renderableRowIndex, renderableColumnIndex));
228
- this.state = EDITOR_STATE.EDITING;
229
-
230
- // Set the editor value only in the full edit mode. In other mode the focusable element has to be empty,
231
- // otherwise IME (editor for Asia users) doesn't work.
232
- if (this.isInFullEditMode()) {
233
- const stringifiedInitialValue = typeof newInitialValue === 'string' ? newInitialValue : stringify(this.originalValue);
234
- this.setValue(stringifiedInitialValue);
235
- }
236
- this.open(event);
237
- this._opened = true;
238
- this.focus();
227
+ const openEditor = () => {
228
+ this.state = EDITOR_STATE.EDITING;
239
229
 
240
- // only rerender the selections (FillHandle should disappear when beginEditing is triggered)
241
- hotInstance.view.render();
242
- hotInstance.runHooks('afterBeginEditing', this.row, this.col);
230
+ // Set the editor value only in the full edit mode. In other mode the focusable element has to be empty,
231
+ // otherwise IME (editor for Asia users) doesn't work.
232
+ if (this.isInFullEditMode()) {
233
+ const stringifiedInitialValue = typeof newInitialValue === 'string' ? newInitialValue : stringify(this.originalValue);
234
+ this.setValue(stringifiedInitialValue);
235
+ }
236
+ this.open(event);
237
+ this._opened = true;
238
+ this.focus();
239
+
240
+ // only rerender the selections (FillHandle should disappear when beginEditing is triggered)
241
+ hotInstance.view.render();
242
+ hotInstance.runHooks('afterBeginEditing', this.row, this.col);
243
+ };
244
+ this.hot.addHookOnce('afterScroll', openEditor);
245
+ const wasScroll = hotInstance.view.scrollViewport(hotInstance._createCellCoords(renderableRowIndex, renderableColumnIndex));
246
+ if (!wasScroll) {
247
+ this.hot.removeHook('afterScroll', openEditor);
248
+ openEditor();
249
+ }
243
250
  }
244
251
 
245
252
  /**
@@ -472,7 +479,7 @@ export class BaseEditor {
472
479
  } else if (['top', 'master', 'bottom'].includes(overlayName)) {
473
480
  cellStartOffset += firstColumnOffset - horizontalScrollPosition;
474
481
  }
475
- const cellComputedStyle = getComputedStyle(this.TD, this.hot.rootWindow);
482
+ const cellComputedStyle = rootWindow.getComputedStyle(this.TD);
476
483
  const borderPhysicalWidthProp = this.hot.isRtl() ? 'borderRightWidth' : 'borderLeftWidth';
477
484
  const inlineStartBorderCompensation = parseInt(cellComputedStyle[borderPhysicalWidthProp], 10) > 0 ? 0 : 1;
478
485
  const topBorderCompensation = parseInt(cellComputedStyle.borderTopWidth, 10) > 0 ? 0 : 1;
@@ -481,7 +488,7 @@ export class BaseEditor {
481
488
  const actualVerticalScrollbarWidth = hasVerticalScrollbar(scrollableContainerTop) ? scrollbarWidth : 0;
482
489
  const actualHorizontalScrollbarWidth = hasHorizontalScrollbar(scrollableContainerLeft) ? scrollbarWidth : 0;
483
490
  const maxWidth = this.hot.view.maximumVisibleElementWidth(cellStartOffset) - actualVerticalScrollbarWidth + inlineStartBorderCompensation;
484
- const maxHeight = Math.max(this.hot.view.maximumVisibleElementHeight(cellTopOffset) - actualHorizontalScrollbarWidth + topBorderCompensation, 23);
491
+ const maxHeight = Math.max(this.hot.view.maximumVisibleElementHeight(cellTopOffset) - actualHorizontalScrollbarWidth + topBorderCompensation, this.hot.view.getDefaultRowHeight());
485
492
  return {
486
493
  top: topPos,
487
494
  start: inlineStartPos,
@@ -52,6 +52,12 @@ class DateEditor extends _textEditor.TextEditor {
52
52
  this.parentDestroyed = true;
53
53
  this.destroyElements();
54
54
  });
55
+ this.hot.addHook('afterSetTheme', (themeName, firstRun) => {
56
+ if (!firstRun) {
57
+ (0, _element.removeClass)(this.datePicker, /ht-theme-.*/g);
58
+ (0, _element.addClass)(this.datePicker, themeName);
59
+ }
60
+ });
55
61
  }
56
62
 
57
63
  /**
@@ -67,6 +73,9 @@ class DateEditor extends _textEditor.TextEditor {
67
73
  this.datePickerStyle.zIndex = 9999;
68
74
  this.datePicker.setAttribute('dir', this.hot.isRtl() ? 'rtl' : 'ltr');
69
75
  (0, _element.addClass)(this.datePicker, 'htDatepickerHolder');
76
+ const themeClassName = this.hot.getCurrentThemeName();
77
+ (0, _element.removeClass)(this.datePicker, /ht-theme-.*/g);
78
+ (0, _element.addClass)(this.datePicker, themeClassName);
70
79
  this.hot.rootDocument.body.appendChild(this.datePicker);
71
80
 
72
81
  /**